Просмотр исходного кода

调整CSharp工程目录,编辑器放到App目录

tanghai 13 лет назад
Родитель
Сommit
d1f2717a9d
29 измененных файлов с 11997 добавлено и 12629 удалено
  1. 3 3
      CSharp/App/Editor/App.xaml
  2. 19 19
      CSharp/App/Editor/App.xaml.cs
  3. 37 37
      CSharp/App/Editor/Bootstrapper.cs
  4. 9 9
      CSharp/App/Editor/Editor.csproj
  5. 10 10
      CSharp/App/Editor/NLog.config
  6. 6 0
      CSharp/App/Editor/Packages.config
  7. 7 7
      CSharp/App/Editor/Shell.xaml
  8. 22 22
      CSharp/App/Editor/Shell.xaml.cs
  9. 10 10
      CSharp/App/Editor/ShellViewModel.cs
  10. 0 0
      CSharp/App/Editor/app.config
  11. 102 94
      CSharp/App/Modules/BehaviorTree/BehaviorTree.csproj
  12. 175 175
      CSharp/App/Modules/BehaviorTree/BehaviorTreeLayout.cs
  13. 16 16
      CSharp/App/Modules/BehaviorTree/BehaviorTreeModule.cs
  14. 57 57
      CSharp/App/Modules/BehaviorTree/BehaviorTreeView.xaml
  15. 154 154
      CSharp/App/Modules/BehaviorTree/BehaviorTreeView.xaml.cs
  16. 68 68
      CSharp/App/Modules/BehaviorTree/BehaviorTreeViewModel.cs
  17. 1842 1842
      CSharp/App/Modules/BehaviorTree/CSharpOptions.cs
  18. 9111 9111
      CSharp/App/Modules/BehaviorTree/DescriptorProtoFile.cs
  19. 7 0
      CSharp/App/Modules/BehaviorTree/Packages.config
  20. 28 28
      CSharp/App/Modules/BehaviorTree/TreeNode.cs
  21. 280 280
      CSharp/App/Modules/BehaviorTree/TreeNodeViewModel.cs
  22. 28 26
      CSharp/CSharp.sln
  23. 1 0
      CSharp/CSharp.sln.DotSettings
  24. 0 6
      CSharp/Editor/Packages.config
  25. 0 7
      CSharp/Modules/BehaviorTree/Packages.config
  26. 0 111
      CSharp/Modules/BehaviorTree/google/protobuf/csharp_options.proto
  27. 0 533
      CSharp/Modules/BehaviorTree/google/protobuf/descriptor.proto
  28. 2 2
      CSharp/Platform/Infrastructure/Infrastructure.csproj
  29. 3 2
      CSharp/Platform/Infrastructure/Packages.config

+ 3 - 3
CSharp/Editor/App.xaml → CSharp/App/Editor/App.xaml

@@ -1,4 +1,4 @@
-<Application x:Class="Editor.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
-             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
-	<Application.Resources></Application.Resources>
+<Application x:Class="Editor.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
+	<Application.Resources></Application.Resources>
 </Application>

+ 19 - 19
CSharp/Editor/App.xaml.cs → CSharp/App/Editor/App.xaml.cs

@@ -1,20 +1,20 @@
-using System.Windows;
-
-namespace Editor
-{
-	public partial class App : Application
-	{
-		protected override void OnStartup(StartupEventArgs e)
-		{
-			base.OnStartup(e);
-			RunInDebugMode();
-			this.ShutdownMode = ShutdownMode.OnMainWindowClose;
-		}
-
-		private static void RunInDebugMode()
-		{
-			var bootstrapper = new Bootstrapper();
-			bootstrapper.Run();
-		}
-	}
+using System.Windows;
+
+namespace Editor
+{
+	public partial class App : Application
+	{
+		protected override void OnStartup(StartupEventArgs e)
+		{
+			base.OnStartup(e);
+			RunInDebugMode();
+			this.ShutdownMode = ShutdownMode.OnMainWindowClose;
+		}
+
+		private static void RunInDebugMode()
+		{
+			var bootstrapper = new Bootstrapper();
+			bootstrapper.Run();
+		}
+	}
 }

+ 37 - 37
CSharp/Editor/Bootstrapper.cs → CSharp/App/Editor/Bootstrapper.cs

@@ -1,38 +1,38 @@
-using System.ComponentModel.Composition.Hosting;
-using System.Windows;
-using Infrastructure;
-using Microsoft.Practices.Prism.MefExtensions;
-using Microsoft.Practices.Prism.Regions;
-using Modules.BehaviorTree;
-
-namespace Editor
-{
-	public class Bootstrapper : MefBootstrapper
-	{
-		protected override void ConfigureAggregateCatalog()
-		{
-			this.AggregateCatalog.Catalogs.Add(new AssemblyCatalog(typeof (Bootstrapper).Assembly));
-			this.AggregateCatalog.Catalogs.Add(new AssemblyCatalog(typeof (ViewExportAttribute).Assembly));
-			this.AggregateCatalog.Catalogs.Add(new AssemblyCatalog(typeof (BehaviorTreeModule).Assembly));
-		}
-
-		protected override void InitializeShell()
-		{
-			base.InitializeShell();
-			Application.Current.MainWindow = (Shell) this.Shell;
-			Application.Current.MainWindow.Show();
-		}
-
-		protected override IRegionBehaviorFactory ConfigureDefaultRegionBehaviors()
-		{
-			IRegionBehaviorFactory factory = base.ConfigureDefaultRegionBehaviors();
-			factory.AddIfMissing("AutoPopulateExportedViewsBehavior", typeof (AutoPopulateExportedViewsBehavior));
-			return factory;
-		}
-
-		protected override DependencyObject CreateShell()
-		{
-			return this.Container.GetExportedValue<Shell>();
-		}
-	}
+using System.ComponentModel.Composition.Hosting;
+using System.Windows;
+using Infrastructure;
+using Microsoft.Practices.Prism.MefExtensions;
+using Microsoft.Practices.Prism.Regions;
+using Modules.BehaviorTree;
+
+namespace Editor
+{
+	public class Bootstrapper : MefBootstrapper
+	{
+		protected override void ConfigureAggregateCatalog()
+		{
+			this.AggregateCatalog.Catalogs.Add(new AssemblyCatalog(typeof (Bootstrapper).Assembly));
+			this.AggregateCatalog.Catalogs.Add(new AssemblyCatalog(typeof (ViewExportAttribute).Assembly));
+			this.AggregateCatalog.Catalogs.Add(new AssemblyCatalog(typeof (BehaviorTreeModule).Assembly));
+		}
+
+		protected override void InitializeShell()
+		{
+			base.InitializeShell();
+			Application.Current.MainWindow = (Shell) this.Shell;
+			Application.Current.MainWindow.Show();
+		}
+
+		protected override IRegionBehaviorFactory ConfigureDefaultRegionBehaviors()
+		{
+			IRegionBehaviorFactory factory = base.ConfigureDefaultRegionBehaviors();
+			factory.AddIfMissing("AutoPopulateExportedViewsBehavior", typeof (AutoPopulateExportedViewsBehavior));
+			return factory;
+		}
+
+		protected override DependencyObject CreateShell()
+		{
+			return this.Container.GetExportedValue<Shell>();
+		}
+	}
 }

+ 9 - 9
CSharp/Editor/Editor.csproj → CSharp/App/Editor/Editor.csproj

@@ -41,24 +41,24 @@
   </PropertyGroup>
   <ItemGroup>
     <Reference Include="Microsoft.Expression.Interactions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
-      <HintPath>..\packages\Prism.4.1.0.0\lib\NET40\Microsoft.Expression.Interactions.dll</HintPath>
+      <HintPath>..\..\packages\Prism.4.1.0.0\lib\NET40\Microsoft.Expression.Interactions.dll</HintPath>
     </Reference>
-    <Reference Include="Microsoft.Practices.Prism, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
-      <HintPath>..\packages\Prism.4.1.0.0\lib\NET40\Microsoft.Practices.Prism.dll</HintPath>
+    <Reference Include="Microsoft.Practices.Prism">
+      <HintPath>..\..\packages\Prism.4.1.0.0\lib\NET40\Microsoft.Practices.Prism.dll</HintPath>
     </Reference>
     <Reference Include="Microsoft.Practices.Prism.Interactivity">
-      <HintPath>..\packages\Prism.4.1.0.0\lib\NET40\Microsoft.Practices.Prism.Interactivity.dll</HintPath>
+      <HintPath>..\..\packages\Prism.4.1.0.0\lib\NET40\Microsoft.Practices.Prism.Interactivity.dll</HintPath>
     </Reference>
-    <Reference Include="Microsoft.Practices.Prism.MefExtensions, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
-      <HintPath>..\packages\Prism.MEFExtensions.4.1.0.0\lib\NET40\Microsoft.Practices.Prism.MefExtensions.dll</HintPath>
+    <Reference Include="Microsoft.Practices.Prism.MefExtensions">
+      <HintPath>..\..\packages\Prism.MEFExtensions.4.1.0.0\lib\NET40\Microsoft.Practices.Prism.MefExtensions.dll</HintPath>
     </Reference>
     <Reference Include="Microsoft.Practices.ServiceLocation">
-      <HintPath>..\packages\CommonServiceLocator.1.0\lib\NET35\Microsoft.Practices.ServiceLocation.dll</HintPath>
+      <HintPath>..\..\packages\CommonServiceLocator.1.0\lib\NET35\Microsoft.Practices.ServiceLocation.dll</HintPath>
     </Reference>
     <Reference Include="System" />
     <Reference Include="System.ComponentModel.Composition" />
     <Reference Include="System.Windows.Interactivity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
-      <HintPath>..\packages\Prism.4.1.0.0\lib\NET40\System.Windows.Interactivity.dll</HintPath>
+      <HintPath>..\..\packages\Prism.4.1.0.0\lib\NET40\System.Windows.Interactivity.dll</HintPath>
     </Reference>
     <Reference Include="System.Xml" />
     <Reference Include="System.Core" />
@@ -99,7 +99,7 @@
       <Project>{6CD185D1-08E0-4729-A999-2D5B57BA8193}</Project>
       <Name>BehaviorTree</Name>
     </ProjectReference>
-    <ProjectReference Include="..\Platform\Infrastructure\Infrastructure.csproj">
+    <ProjectReference Include="..\..\Platform\Infrastructure\Infrastructure.csproj">
       <Project>{48A2E149-0DAC-41B4-BB54-DFBCCD6D42B3}</Project>
       <Name>Infrastructure</Name>
     </ProjectReference>

+ 10 - 10
CSharp/Editor/NLog.config → CSharp/App/Editor/NLog.config

@@ -1,11 +1,11 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-	<targets>
-		<target name="file" xsi:type="File" fileName="${basedir}/Log.txt"
-		        layout="${longdate} ${threadid:padCharacter=0:padding=4:fixedLength=true} ${callsite:className=false:includeSourcePath=false:methodName=false:fileName=true}  ${message}" />
-	</targets>
-	<rules>
-		<logger name="*" minlevel="Trace" writeTo="file" />
-	</rules>
+<?xml version="1.0" encoding="utf-8"?>
+
+<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+	<targets>
+		<target name="file" xsi:type="File" fileName="${basedir}/Log.txt"
+		        layout="${longdate} ${threadid:padCharacter=0:padding=4:fixedLength=true} ${callsite:className=false:includeSourcePath=false:methodName=false:fileName=true}  ${message}" />
+	</targets>
+	<rules>
+		<logger name="*" minlevel="Trace" writeTo="file" />
+	</rules>
 </nlog>

+ 6 - 0
CSharp/App/Editor/Packages.config

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+  <package id="CommonServiceLocator" version="1.0" targetFramework="net40-Client" />
+  <package id="Prism" version="4.1.0.0" targetFramework="net40-Client" />
+  <package id="Prism.MEFExtensions" version="4.1.0.0" targetFramework="net40-Client" />
+</packages>

+ 7 - 7
CSharp/Editor/Shell.xaml → CSharp/App/Editor/Shell.xaml

@@ -1,8 +1,8 @@
-<Window x:Class="Editor.Shell" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
-        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:cal="http://www.codeplex.com/CompositeWPF"
-        xmlns:prism="http://www.codeplex.com/prism" Title="Editor" Height="800" Width="1280"
-        WindowStartupLocation="CenterScreen">
-	<Grid>
-		<ContentControl Name="treeCanvas" prism:RegionManager.RegionName="TreeCanvasRegion" />
-	</Grid>
+<Window x:Class="Editor.Shell" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:cal="http://www.codeplex.com/CompositeWPF"
+        xmlns:prism="http://www.codeplex.com/prism" Title="Editor" Height="800" Width="1280"
+        WindowStartupLocation="CenterScreen">
+	<Grid>
+		<ContentControl Name="treeCanvas" prism:RegionManager.RegionName="TreeCanvasRegion" />
+	</Grid>
 </Window>

+ 22 - 22
CSharp/Editor/Shell.xaml.cs → CSharp/App/Editor/Shell.xaml.cs

@@ -1,23 +1,23 @@
-using System.ComponentModel.Composition;
-using System.Windows;
-
-namespace Editor
-{
-	[Export]
-	public partial class Shell : Window
-	{
-		public Shell()
-		{
-			this.InitializeComponent();
-		}
-
-		[Import]
-		private ShellViewModel ViewModel
-		{
-			set
-			{
-				this.DataContext = value;
-			}
-		}
-	}
+using System.ComponentModel.Composition;
+using System.Windows;
+
+namespace Editor
+{
+	[Export]
+	public partial class Shell : Window
+	{
+		public Shell()
+		{
+			this.InitializeComponent();
+		}
+
+		[Import]
+		private ShellViewModel ViewModel
+		{
+			set
+			{
+				this.DataContext = value;
+			}
+		}
+	}
 }

+ 10 - 10
CSharp/Editor/ShellViewModel.cs → CSharp/App/Editor/ShellViewModel.cs

@@ -1,11 +1,11 @@
-using System.ComponentModel.Composition;
-using Microsoft.Practices.Prism.ViewModel;
-
-namespace Editor
-{
-	[Export]
-	public class ShellViewModel : NotificationObject
-	{
-		// This is where any view model logic for the shell would go.
-	}
+using System.ComponentModel.Composition;
+using Microsoft.Practices.Prism.ViewModel;
+
+namespace Editor
+{
+	[Export]
+	public class ShellViewModel : NotificationObject
+	{
+		// This is where any view model logic for the shell would go.
+	}
 }

+ 0 - 0
CSharp/Editor/app.config → CSharp/App/Editor/app.config


+ 102 - 94
CSharp/Modules/BehaviorTree/BehaviorTree.csproj → CSharp/App/Modules/BehaviorTree/BehaviorTree.csproj

@@ -1,101 +1,109 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <PropertyGroup>
-    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
-    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ProductVersion>8.0.30703</ProductVersion>
-    <SchemaVersion>2.0</SchemaVersion>
-    <ProjectGuid>{6CD185D1-08E0-4729-A999-2D5B57BA8193}</ProjectGuid>
-    <OutputType>Library</OutputType>
-    <AppDesignerFolder>Properties</AppDesignerFolder>
-    <RootNamespace>BehaviorTree</RootNamespace>
-    <AssemblyName>BehaviorTree</AssemblyName>
-    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
-    <FileAlignment>512</FileAlignment>
-    <Utf8Output>true</Utf8Output>
-    <ExpressionBlendVersion>4.0.20621.0</ExpressionBlendVersion>
-    <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\..\CSharp\</SolutionDir>
-    <RestorePackages>true</RestorePackages>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
-    <DebugSymbols>true</DebugSymbols>
-    <DebugType>full</DebugType>
-    <Optimize>false</Optimize>
-    <OutputPath>bin\Debug\</OutputPath>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
-    <DebugType>pdbonly</DebugType>
-    <Optimize>true</Optimize>
-    <OutputPath>bin\Release\</OutputPath>
-    <DefineConstants>TRACE</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-  </PropertyGroup>
-  <ItemGroup>
-    <Reference Include="Microsoft.Practices.Prism, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
-      <SpecificVersion>False</SpecificVersion>
-      <HintPath>..\..\packages\Prism.4.1.0.0\lib\NET40\Microsoft.Practices.Prism.dll</HintPath>
-    </Reference>
-    <Reference Include="Microsoft.Practices.Prism.MefExtensions, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
-      <SpecificVersion>False</SpecificVersion>
-      <HintPath>..\..\packages\Prism.MEFExtensions.4.1.0.0\lib\NET40\Microsoft.Practices.Prism.MefExtensions.dll</HintPath>
-    </Reference>
-    <Reference Include="NLog">
-      <HintPath>..\..\Packages\NLog.2.0.0.2000\lib\net40\NLog.dll</HintPath>
-    </Reference>
-    <Reference Include="PresentationCore" />
-    <Reference Include="PresentationFramework" />
-    <Reference Include="System" />
-    <Reference Include="System.ComponentModel.Composition" />
-    <Reference Include="System.Core" />
-    <Reference Include="System.Xaml" />
-    <Reference Include="System.Xml" />
-    <Reference Include="WindowsBase" />
-  </ItemGroup>
-  <ItemGroup>
-    <Compile Include="BehaviorTreeLayout.cs" />
-    <Compile Include="BehaviorTreeViewModel.cs" />
-    <Compile Include="BehaviorTreeModule.cs" />
-    <Compile Include="BehaviorTreeView.xaml.cs">
-      <DependentUpon>BehaviorTreeView.xaml</DependentUpon>
-    </Compile>
-    <Compile Include="TreeNode.cs" />
-    <Compile Include="TreeNodeViewModel.cs" />
-  </ItemGroup>
-  <ItemGroup>
-    <Folder Include="Properties\" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="google\protobuf\csharp_options.proto" />
-    <None Include="google\protobuf\descriptor.proto" />
-    <None Include="Packages.config" />
-  </ItemGroup>
-  <ItemGroup>
-    <Page Include="BehaviorTreeView.xaml">
-      <Generator>MSBuild:Compile</Generator>
-      <SubType>Designer</SubType>
-    </Page>
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="..\..\Platform\Infrastructure\Infrastructure.csproj">
-      <Project>{48A2E149-0DAC-41B4-BB54-DFBCCD6D42B3}</Project>
-      <Name>Infrastructure</Name>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
-  <PropertyGroup>
-    <PreBuildEvent>
-    </PreBuildEvent>
-  </PropertyGroup>
-  <Import Project="$(SolutionDir)\.nuget\nuget.targets" />
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>8.0.30703</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{6CD185D1-08E0-4729-A999-2D5B57BA8193}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>BehaviorTree</RootNamespace>
+    <AssemblyName>BehaviorTree</AssemblyName>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <Utf8Output>true</Utf8Output>
+    <ExpressionBlendVersion>4.0.20621.0</ExpressionBlendVersion>
+    <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\..\CSharp\</SolutionDir>
+    <RestorePackages>true</RestorePackages>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="Microsoft.Expression.Interactions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
+      <HintPath>..\..\..\packages\Prism.4.1.0.0\lib\NET40\Microsoft.Expression.Interactions.dll</HintPath>
+    </Reference>
+    <Reference Include="Microsoft.Practices.Prism">
+      <HintPath>..\..\..\packages\Prism.4.1.0.0\lib\NET40\Microsoft.Practices.Prism.dll</HintPath>
+    </Reference>
+    <Reference Include="Microsoft.Practices.Prism.Interactivity">
+      <HintPath>..\..\..\packages\Prism.4.1.0.0\lib\NET40\Microsoft.Practices.Prism.Interactivity.dll</HintPath>
+    </Reference>
+    <Reference Include="Microsoft.Practices.Prism.MefExtensions">
+      <HintPath>..\..\..\packages\Prism.MEFExtensions.4.1.0.0\lib\NET40\Microsoft.Practices.Prism.MefExtensions.dll</HintPath>
+    </Reference>
+    <Reference Include="Microsoft.Practices.ServiceLocation">
+      <HintPath>..\..\..\packages\CommonServiceLocator.1.0\lib\NET35\Microsoft.Practices.ServiceLocation.dll</HintPath>
+    </Reference>
+    <Reference Include="NLog">
+      <HintPath>..\..\..\packages\NLog.2.0.0.2000\lib\net40\NLog.dll</HintPath>
+    </Reference>
+    <Reference Include="PresentationCore" />
+    <Reference Include="PresentationFramework" />
+    <Reference Include="System" />
+    <Reference Include="System.ComponentModel.Composition" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Windows.Interactivity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
+      <HintPath>..\..\..\packages\Prism.4.1.0.0\lib\NET40\System.Windows.Interactivity.dll</HintPath>
+    </Reference>
+    <Reference Include="System.Xaml" />
+    <Reference Include="System.Xml" />
+    <Reference Include="WindowsBase" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="BehaviorTreeLayout.cs" />
+    <Compile Include="BehaviorTreeViewModel.cs" />
+    <Compile Include="BehaviorTreeModule.cs" />
+    <Compile Include="BehaviorTreeView.xaml.cs">
+      <DependentUpon>BehaviorTreeView.xaml</DependentUpon>
+    </Compile>
+    <Compile Include="TreeNode.cs" />
+    <Compile Include="TreeNodeViewModel.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <Folder Include="Properties\" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Packages.config" />
+  </ItemGroup>
+  <ItemGroup>
+    <Page Include="BehaviorTreeView.xaml">
+      <Generator>MSBuild:Compile</Generator>
+      <SubType>Designer</SubType>
+    </Page>
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\..\Platform\Infrastructure\Infrastructure.csproj">
+      <Project>{48A2E149-0DAC-41B4-BB54-DFBCCD6D42B3}</Project>
+      <Name>Infrastructure</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <PropertyGroup>
+    <PreBuildEvent>
+    </PreBuildEvent>
+  </PropertyGroup>
+  <Import Project="$(SolutionDir)\.nuget\nuget.targets" />
   <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
        Other similar extension points exist, see Microsoft.Common.targets.
   <Target Name="BeforeBuild">
   </Target>
   <Target Name="AfterBuild">
   </Target>
-  -->
+  -->
 </Project>

+ 175 - 175
CSharp/Modules/BehaviorTree/BehaviorTreeLayout.cs → CSharp/App/Modules/BehaviorTree/BehaviorTreeLayout.cs

@@ -1,176 +1,176 @@
-using NLog;
-
-namespace Modules.BehaviorTree
-{
-	public static class BehaviorTreeLayout
-	{
-		private const double XGap = 20;
-		private const double YGap = 10;
-		private static double rootOrigX;
-		private static double rootOrigY;
-		private static double rootOffsetX;
-		private static double rootOffsetY;
-		private static readonly Logger logger = LogManager.GetCurrentClassLogger();
-
-		private static TreeNodeViewModel LeftMostOffspring(TreeNodeViewModel treeNode, int currentLevel, int searchLevel)
-		{
-			if (currentLevel == searchLevel)
-			{
-				return treeNode;
-			}
-			for (int i = 0; i < treeNode.Children.Count; ++i)
-			{
-				var child = treeNode.Children[i];
-				child.AncestorModify = treeNode.Modify + treeNode.AncestorModify;
-				var offspring = LeftMostOffspring(child, currentLevel + 1, searchLevel);
-				if (offspring == null)
-				{
-					continue;
-				}
-				return offspring;
-			}
-			return null;
-		}
-
-		private static TreeNodeViewModel RightMostOffspring(TreeNodeViewModel treeNode, int currentLevel, int searchLevel)
-		{
-			if (currentLevel == searchLevel)
-			{
-				return treeNode;
-			}
-			for (int i = treeNode.Children.Count - 1; i >= 0; --i)
-			{
-				var child = treeNode.Children[i];
-				child.AncestorModify = treeNode.Modify + treeNode.AncestorModify;
-				var offspring = RightMostOffspring(child, currentLevel + 1, searchLevel);
-				if (offspring == null)
-				{
-					continue;
-				}
-				return offspring;
-			}
-			return null;
-		}
-
-		private static void AjustSubTreeGap(TreeNodeViewModel left, TreeNodeViewModel right)
-		{
-			double offset = 0;
-			TreeNodeViewModel tLeft = left;
-			TreeNodeViewModel tRight = right;
-			left.AncestorModify = 0;
-			right.AncestorModify = 0;
-			for (int i = 0; tLeft != null && tRight != null; ++i)
-			{
-				double tGap = (tRight.Prelim + tRight.AncestorModify) - (tLeft.Prelim + tLeft.AncestorModify);
-				if (XGap + TreeNodeViewModel.Width - tGap > offset)
-				{
-					offset = XGap + TreeNodeViewModel.Width - tGap;
-				}
-				tLeft = RightMostOffspring(left, 0, i + 1);
-				tRight = LeftMostOffspring(right, 0, i + 1);
-			}
-			right.Modify += offset;
-			right.Prelim += offset;
-		}
-
-		private static void AjustTreeGap(TreeNodeViewModel treeNode)
-		{
-			for (int i = 0; i < treeNode.Children.Count - 1; ++i)
-			{
-				for (int j = i + 1; j < treeNode.Children.Count; ++j)
-				{
-					var left = treeNode.Children[i];
-					var right = treeNode.Children[j];
-					AjustSubTreeGap(left, right);
-				}
-			}
-		}
-
-		private static void CalculatePrelimAndModify(TreeNodeViewModel treeNode)
-		{
-			foreach (TreeNodeViewModel node in treeNode.Children)
-			{
-				CalculatePrelimAndModify(node);
-			}
-
-			double prelim = 0;
-			double modify = 0;
-
-			if (treeNode.IsLeaf)
-			{
-				if (treeNode.LeftSibling == null)
-				{
-					// 如果没有左邻居,不需要设置modify
-					prelim = 0;
-				}
-				else
-				{
-					prelim = treeNode.LeftSibling.Prelim + TreeNodeViewModel.Width + XGap;
-				}
-			}
-			else
-			{
-				// 调整子树间的间距
-				AjustTreeGap(treeNode);
-				double childrenCenter = (treeNode.FirstChild.Prelim + treeNode.LastChild.Prelim) / 2;
-				if (treeNode.LeftSibling == null)
-				{
-					// 如果没有左邻居,不需要设置modify
-					prelim = childrenCenter;
-				}
-				else
-				{
-					prelim = treeNode.LeftSibling.Prelim + TreeNodeViewModel.Width + XGap;
-					modify = prelim - childrenCenter;
-				}
-			}
-			treeNode.Prelim = prelim;
-			treeNode.Modify = modify;
-
-			logger.Debug("Num: " + treeNode.Num + " Prelim: " + treeNode.Prelim + " Modify: " + treeNode.Modify);
-		}
-
-		private static void CalculateRelativeXAndY(TreeNodeViewModel treeNode, int level, double totalModify)
-		{
-			foreach (TreeNodeViewModel node in treeNode.Children)
-			{
-				CalculateRelativeXAndY(node, level + 1, treeNode.Modify + totalModify);
-			}
-			if (treeNode.IsLeaf)
-			{
-				treeNode.X = treeNode.Prelim + totalModify;
-			}
-			else
-			{
-				treeNode.X = (treeNode.FirstChild.X + treeNode.LastChild.X) / 2;
-			}
-			treeNode.Y = level * (TreeNodeViewModel.Height + YGap);
-		}
-
-		private static void FixXAndY(TreeNodeViewModel treeNode)
-		{
-			treeNode.X += rootOffsetX;
-			treeNode.Y += rootOffsetY;
-			foreach (var node in treeNode.Children)
-			{
-				FixXAndY(node);
-			}
-		}
-
-		public static void ExcuteLayout(TreeNodeViewModel root)
-		{
-			if (root == null)
-			{
-				return;
-			}
-			rootOrigX = root.X;
-			rootOrigY = root.Y;
-			CalculatePrelimAndModify(root);
-			CalculateRelativeXAndY(root, 0, 0);
-
-			rootOffsetX = rootOrigX - root.X;
-			rootOffsetY = rootOrigY - root.Y;
-			FixXAndY(root);
-		}
-	}
+using NLog;
+
+namespace Modules.BehaviorTree
+{
+	public static class BehaviorTreeLayout
+	{
+		private const double XGap = 20;
+		private const double YGap = 10;
+		private static double rootOrigX;
+		private static double rootOrigY;
+		private static double rootOffsetX;
+		private static double rootOffsetY;
+		private static readonly Logger logger = LogManager.GetCurrentClassLogger();
+
+		private static TreeNodeViewModel LeftMostOffspring(TreeNodeViewModel treeNode, int currentLevel, int searchLevel)
+		{
+			if (currentLevel == searchLevel)
+			{
+				return treeNode;
+			}
+			for (int i = 0; i < treeNode.Children.Count; ++i)
+			{
+				var child = treeNode.Children[i];
+				child.AncestorModify = treeNode.Modify + treeNode.AncestorModify;
+				var offspring = LeftMostOffspring(child, currentLevel + 1, searchLevel);
+				if (offspring == null)
+				{
+					continue;
+				}
+				return offspring;
+			}
+			return null;
+		}
+
+		private static TreeNodeViewModel RightMostOffspring(TreeNodeViewModel treeNode, int currentLevel, int searchLevel)
+		{
+			if (currentLevel == searchLevel)
+			{
+				return treeNode;
+			}
+			for (int i = treeNode.Children.Count - 1; i >= 0; --i)
+			{
+				var child = treeNode.Children[i];
+				child.AncestorModify = treeNode.Modify + treeNode.AncestorModify;
+				var offspring = RightMostOffspring(child, currentLevel + 1, searchLevel);
+				if (offspring == null)
+				{
+					continue;
+				}
+				return offspring;
+			}
+			return null;
+		}
+
+		private static void AjustSubTreeGap(TreeNodeViewModel left, TreeNodeViewModel right)
+		{
+			double offset = 0;
+			TreeNodeViewModel tLeft = left;
+			TreeNodeViewModel tRight = right;
+			left.AncestorModify = 0;
+			right.AncestorModify = 0;
+			for (int i = 0; tLeft != null && tRight != null; ++i)
+			{
+				double tGap = (tRight.Prelim + tRight.AncestorModify) - (tLeft.Prelim + tLeft.AncestorModify);
+				if (XGap + TreeNodeViewModel.Width - tGap > offset)
+				{
+					offset = XGap + TreeNodeViewModel.Width - tGap;
+				}
+				tLeft = RightMostOffspring(left, 0, i + 1);
+				tRight = LeftMostOffspring(right, 0, i + 1);
+			}
+			right.Modify += offset;
+			right.Prelim += offset;
+		}
+
+		private static void AjustTreeGap(TreeNodeViewModel treeNode)
+		{
+			for (int i = 0; i < treeNode.Children.Count - 1; ++i)
+			{
+				for (int j = i + 1; j < treeNode.Children.Count; ++j)
+				{
+					var left = treeNode.Children[i];
+					var right = treeNode.Children[j];
+					AjustSubTreeGap(left, right);
+				}
+			}
+		}
+
+		private static void CalculatePrelimAndModify(TreeNodeViewModel treeNode)
+		{
+			foreach (TreeNodeViewModel node in treeNode.Children)
+			{
+				CalculatePrelimAndModify(node);
+			}
+
+			double prelim = 0;
+			double modify = 0;
+
+			if (treeNode.IsLeaf)
+			{
+				if (treeNode.LeftSibling == null)
+				{
+					// 如果没有左邻居,不需要设置modify
+					prelim = 0;
+				}
+				else
+				{
+					prelim = treeNode.LeftSibling.Prelim + TreeNodeViewModel.Width + XGap;
+				}
+			}
+			else
+			{
+				// 调整子树间的间距
+				AjustTreeGap(treeNode);
+				double childrenCenter = (treeNode.FirstChild.Prelim + treeNode.LastChild.Prelim) / 2;
+				if (treeNode.LeftSibling == null)
+				{
+					// 如果没有左邻居,不需要设置modify
+					prelim = childrenCenter;
+				}
+				else
+				{
+					prelim = treeNode.LeftSibling.Prelim + TreeNodeViewModel.Width + XGap;
+					modify = prelim - childrenCenter;
+				}
+			}
+			treeNode.Prelim = prelim;
+			treeNode.Modify = modify;
+
+			logger.Debug("Num: " + treeNode.Num + " Prelim: " + treeNode.Prelim + " Modify: " + treeNode.Modify);
+		}
+
+		private static void CalculateRelativeXAndY(TreeNodeViewModel treeNode, int level, double totalModify)
+		{
+			foreach (TreeNodeViewModel node in treeNode.Children)
+			{
+				CalculateRelativeXAndY(node, level + 1, treeNode.Modify + totalModify);
+			}
+			if (treeNode.IsLeaf)
+			{
+				treeNode.X = treeNode.Prelim + totalModify;
+			}
+			else
+			{
+				treeNode.X = (treeNode.FirstChild.X + treeNode.LastChild.X) / 2;
+			}
+			treeNode.Y = level * (TreeNodeViewModel.Height + YGap);
+		}
+
+		private static void FixXAndY(TreeNodeViewModel treeNode)
+		{
+			treeNode.X += rootOffsetX;
+			treeNode.Y += rootOffsetY;
+			foreach (var node in treeNode.Children)
+			{
+				FixXAndY(node);
+			}
+		}
+
+		public static void ExcuteLayout(TreeNodeViewModel root)
+		{
+			if (root == null)
+			{
+				return;
+			}
+			rootOrigX = root.X;
+			rootOrigY = root.Y;
+			CalculatePrelimAndModify(root);
+			CalculateRelativeXAndY(root, 0, 0);
+
+			rootOffsetX = rootOrigX - root.X;
+			rootOffsetY = rootOrigY - root.Y;
+			FixXAndY(root);
+		}
+	}
 }

+ 16 - 16
CSharp/Modules/BehaviorTree/BehaviorTreeModule.cs → CSharp/App/Modules/BehaviorTree/BehaviorTreeModule.cs

@@ -1,17 +1,17 @@
-using Microsoft.Practices.Prism.MefExtensions.Modularity;
-using Microsoft.Practices.Prism.Modularity;
-
-namespace Modules.BehaviorTree
-{
-	[ModuleExport(typeof (BehaviorTreeModule))]
-	public class BehaviorTreeModule : IModule
-	{
-		#region IModule Members
-
-		public void Initialize()
-		{
-		}
-
-		#endregion
-	}
+using Microsoft.Practices.Prism.MefExtensions.Modularity;
+using Microsoft.Practices.Prism.Modularity;
+
+namespace Modules.BehaviorTree
+{
+	[ModuleExport(typeof (BehaviorTreeModule))]
+	public class BehaviorTreeModule : IModule
+	{
+		#region IModule Members
+
+		public void Initialize()
+		{
+		}
+
+		#endregion
+	}
 }

+ 57 - 57
CSharp/Modules/BehaviorTree/BehaviorTreeView.xaml → CSharp/App/Modules/BehaviorTree/BehaviorTreeView.xaml

@@ -1,58 +1,58 @@
-<UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
-		xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
-		xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
-		xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
-		x:Class="Modules.BehaviorTree.BehaviorTreeView"
-		mc:Ignorable="d" d:DesignHeight="600" d:DesignWidth="800">
-	<UserControl.Resources>
-		<LinearGradientBrush x:Key="treeNodeFillBrush" StartPoint="0,0" EndPoint="0,1">
-			<GradientStop Color="White" Offset="0" />
-			<GradientStop Color="#7FC9FF" Offset="0.6" />
-		</LinearGradientBrush>
-		<SolidColorBrush x:Key="treeNodeBorderBrush" Color="Black" />
-	</UserControl.Resources>
-
-	<UserControl.CommandBindings>
-		<CommandBinding Command="ApplicationCommands.New" Executed="MenuNewNode_Executed" />
-		<CommandBinding Command="ApplicationCommands.Delete" Executed="MenuDeleteNode_Executed" />
-	</UserControl.CommandBindings>
-
-	<UserControl.ContextMenu>
-		<ContextMenu>
-			<MenuItem Header="New" Command="ApplicationCommands.New"
-					CommandTarget="{Binding Path=PlacementTarget, RelativeSource={RelativeSource AncestorType=ContextMenu}}" />
-			<MenuItem Header="Delete" Command="ApplicationCommands.Delete"
-					CommandTarget="{Binding Path=PlacementTarget, RelativeSource={RelativeSource AncestorType=ContextMenu}}" />
-		</ContextMenu>
-	</UserControl.ContextMenu>
-	<Grid>
-		<ListBox Name="listBox" SelectionMode="Single" ItemsSource="{Binding TreeNodes}" x:FieldModifier="private">
-			<ListBox.Resources>
-				<Style TargetType="{x:Type ListBoxItem}">
-					<Setter Property="Canvas.Left" Value="{Binding X}" />
-					<Setter Property="Canvas.Top" Value="{Binding Y}" />
-				</Style>
-			</ListBox.Resources>
-			<ListBox.ItemsPanel>
-				<ItemsPanelTemplate>
-					<Canvas AllowDrop="True" />
-				</ItemsPanelTemplate>
-			</ListBox.ItemsPanel>
-			<ListBox.ItemTemplate>
-				<DataTemplate>
-					<Canvas MouseDown="ListBoxItem_MouseDown" MouseUp="ListBoxItem_MouseUp" MouseMove="ListBoxItem_MouseMove">
-						<Rectangle Name="rectNode" Width="{Binding Width}" Height="{Binding Height}" Cursor="Hand" StrokeThickness="4"
-								RadiusX="4" RadiusY="4" Stroke="{StaticResource treeNodeBorderBrush}" Fill="{StaticResource treeNodeFillBrush}"/>
-						<Line X1="{Binding ConnectorX1}" Y1="{Binding ConnectorY1}" X2="{Binding ConnectorX2}" Y2="{Binding ConnectorY2}"
-								Stroke="Black" StrokeThickness="2" />
-					</Canvas>
-					<DataTemplate.Triggers>
-						<DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListBoxItem}}, Path=IsSelected}" Value="True">
-							<Setter TargetName="rectNode" Property="Stroke" Value="Green" />
-						</DataTrigger>
-					</DataTemplate.Triggers>
-				</DataTemplate>
-			</ListBox.ItemTemplate>
-		</ListBox>
-	</Grid>
+<UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+		xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+		xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+		xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
+		x:Class="Modules.BehaviorTree.BehaviorTreeView"
+		mc:Ignorable="d" d:DesignHeight="600" d:DesignWidth="800">
+	<UserControl.Resources>
+		<LinearGradientBrush x:Key="treeNodeFillBrush" StartPoint="0,0" EndPoint="0,1">
+			<GradientStop Color="White" Offset="0" />
+			<GradientStop Color="#7FC9FF" Offset="0.6" />
+		</LinearGradientBrush>
+		<SolidColorBrush x:Key="treeNodeBorderBrush" Color="Black" />
+	</UserControl.Resources>
+
+	<UserControl.CommandBindings>
+		<CommandBinding Command="ApplicationCommands.New" Executed="MenuNewNode_Executed" />
+		<CommandBinding Command="ApplicationCommands.Delete" Executed="MenuDeleteNode_Executed" />
+	</UserControl.CommandBindings>
+
+	<UserControl.ContextMenu>
+		<ContextMenu>
+			<MenuItem Header="New" Command="ApplicationCommands.New"
+					CommandTarget="{Binding Path=PlacementTarget, RelativeSource={RelativeSource AncestorType=ContextMenu}}" />
+			<MenuItem Header="Delete" Command="ApplicationCommands.Delete"
+					CommandTarget="{Binding Path=PlacementTarget, RelativeSource={RelativeSource AncestorType=ContextMenu}}" />
+		</ContextMenu>
+	</UserControl.ContextMenu>
+	<Grid>
+		<ListBox Name="listBox" SelectionMode="Single" ItemsSource="{Binding TreeNodes}" x:FieldModifier="private">
+			<ListBox.Resources>
+				<Style TargetType="{x:Type ListBoxItem}">
+					<Setter Property="Canvas.Left" Value="{Binding X}" />
+					<Setter Property="Canvas.Top" Value="{Binding Y}" />
+				</Style>
+			</ListBox.Resources>
+			<ListBox.ItemsPanel>
+				<ItemsPanelTemplate>
+					<Canvas AllowDrop="True" />
+				</ItemsPanelTemplate>
+			</ListBox.ItemsPanel>
+			<ListBox.ItemTemplate>
+				<DataTemplate>
+					<Canvas MouseDown="ListBoxItem_MouseDown" MouseUp="ListBoxItem_MouseUp" MouseMove="ListBoxItem_MouseMove">
+						<Rectangle Name="rectNode" Width="{Binding Width}" Height="{Binding Height}" Cursor="Hand" StrokeThickness="4"
+								RadiusX="4" RadiusY="4" Stroke="{StaticResource treeNodeBorderBrush}" Fill="{StaticResource treeNodeFillBrush}"/>
+						<Line X1="{Binding ConnectorX1}" Y1="{Binding ConnectorY1}" X2="{Binding ConnectorX2}" Y2="{Binding ConnectorY2}"
+								Stroke="Black" StrokeThickness="2" />
+					</Canvas>
+					<DataTemplate.Triggers>
+						<DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListBoxItem}}, Path=IsSelected}" Value="True">
+							<Setter TargetName="rectNode" Property="Stroke" Value="Green" />
+						</DataTrigger>
+					</DataTemplate.Triggers>
+				</DataTemplate>
+			</ListBox.ItemTemplate>
+		</ListBox>
+	</Grid>
 </UserControl>

+ 154 - 154
CSharp/Modules/BehaviorTree/BehaviorTreeView.xaml.cs → CSharp/App/Modules/BehaviorTree/BehaviorTreeView.xaml.cs

@@ -1,155 +1,155 @@
-using System;
-using System.ComponentModel.Composition;
-using System.Windows;
-using System.Windows.Input;
-using Infrastructure;
-
-namespace Modules.BehaviorTree
-{
-	/// <summary>
-	/// BehaviorTreeView.xaml 的交互逻辑
-	/// </summary>
-	[ViewExport(RegionName = "TreeCanvasRegion"), PartCreationPolicy(CreationPolicy.NonShared)]
-	public partial class BehaviorTreeView
-	{
-		private const double DragThreshold = 5;
-		private bool isDragging;
-		private bool isLeftButtonDown;
-		private Point origMouseDownPoint;
-
-		public BehaviorTreeView()
-		{
-			this.InitializeComponent();
-		}
-
-		[Import]
-		private BehaviorTreeViewModel ViewModel
-		{
-			get
-			{
-				return this.DataContext as BehaviorTreeViewModel;
-			}
-			set
-			{
-				this.DataContext = value;
-			}
-		}
-
-		private void MenuNewNode_Executed(object sender, ExecutedRoutedEventArgs e)
-		{
-			Point point = Mouse.GetPosition(this.listBox);
-			var treeNode = new TreeNode(point.X, point.Y);
-
-			// one root node
-			if (this.ViewModel.TreeNodes.Count == 0)
-			{
-				this.ViewModel.Add(treeNode, null);
-			}
-			else
-			{
-				if (this.listBox.SelectedItem != null)
-				{
-					var treeNodeViewModel = this.listBox.SelectedItem as TreeNodeViewModel;
-					this.ViewModel.Add(treeNode, treeNodeViewModel);
-				}
-			}
-			this.listBox.SelectedItem = null;
-			e.Handled = true;
-		}
-
-		private void MenuDeleteNode_Executed(object sender, ExecutedRoutedEventArgs e)
-		{
-			if (this.listBox.SelectedItem == null)
-			{
-				return;
-			}
-			var treeNodeViewModel = this.listBox.SelectedItem as TreeNodeViewModel;
-			this.ViewModel.Remove(treeNodeViewModel);
-			this.listBox.SelectedItem = null;
-			e.Handled = true;
-		}
-
-		private void ListBoxItem_MouseDown(object sender, MouseButtonEventArgs e)
-		{
-			if (e.ChangedButton != MouseButton.Left)
-			{
-				return;
-			}
-			this.isLeftButtonDown = true;
-
-			var item = (FrameworkElement) sender;
-			var treeNodeViewModel = item.DataContext as TreeNodeViewModel;
-
-			this.listBox.SelectedItem = treeNodeViewModel;
-
-			this.origMouseDownPoint = e.GetPosition(this);
-
-			item.CaptureMouse();
-			e.Handled = true;
-		}
-
-		private void ListBoxItem_MouseUp(object sender, MouseButtonEventArgs e)
-		{
-			if (!this.isLeftButtonDown)
-			{
-				this.isDragging = false;
-				return;
-			}
-
-			var item = (FrameworkElement) sender;
-			var treeNodeViewModel = item.DataContext as TreeNodeViewModel;
-
-			if (!this.isDragging)
-			{
-				this.listBox.SelectedItem = treeNodeViewModel;
-			}
-
-			this.isLeftButtonDown = false;
-			this.isDragging = false;
-
-			item.ReleaseMouseCapture();
-			e.Handled = true;
-		}
-
-		private void ListBoxItem_MouseMove(object sender, MouseEventArgs e)
-		{
-			var item = (FrameworkElement) sender;
-			var treeNodeViewModel = item.DataContext as TreeNodeViewModel;
-			if (treeNodeViewModel == null)
-			{
-				return;
-			}
-			if (!treeNodeViewModel.IsRoot)
-			{
-				return;
-			}
-
-			Point curMouseDownPoint;
-			Vector dragDelta;
-			if (this.isDragging)
-			{
-				curMouseDownPoint = e.GetPosition(this);
-				dragDelta = curMouseDownPoint - this.origMouseDownPoint;
-
-				this.origMouseDownPoint = curMouseDownPoint;
-
-				this.ViewModel.Move(dragDelta.X, dragDelta.Y);
-				return;
-			}
-
-			if (!this.isLeftButtonDown)
-			{
-				return;
-			}
-
-			curMouseDownPoint = e.GetPosition(this);
-			dragDelta = curMouseDownPoint - this.origMouseDownPoint;
-			double dragDistance = Math.Abs(dragDelta.Length);
-			if (dragDistance > DragThreshold)
-			{
-				this.isDragging = true;
-			}
-			e.Handled = true;
-		}
-	}
+using System;
+using System.ComponentModel.Composition;
+using System.Windows;
+using System.Windows.Input;
+using Infrastructure;
+
+namespace Modules.BehaviorTree
+{
+	/// <summary>
+	/// BehaviorTreeView.xaml 的交互逻辑
+	/// </summary>
+	[ViewExport(RegionName = "TreeCanvasRegion"), PartCreationPolicy(CreationPolicy.NonShared)]
+	public partial class BehaviorTreeView
+	{
+		private const double DragThreshold = 5;
+		private bool isDragging;
+		private bool isLeftButtonDown;
+		private Point origMouseDownPoint;
+
+		public BehaviorTreeView()
+		{
+			this.InitializeComponent();
+		}
+
+		[Import]
+		private BehaviorTreeViewModel ViewModel
+		{
+			get
+			{
+				return this.DataContext as BehaviorTreeViewModel;
+			}
+			set
+			{
+				this.DataContext = value;
+			}
+		}
+
+		private void MenuNewNode_Executed(object sender, ExecutedRoutedEventArgs e)
+		{
+			Point point = Mouse.GetPosition(this.listBox);
+			var treeNode = new TreeNode(point.X, point.Y);
+
+			// one root node
+			if (this.ViewModel.TreeNodes.Count == 0)
+			{
+				this.ViewModel.Add(treeNode, null);
+			}
+			else
+			{
+				if (this.listBox.SelectedItem != null)
+				{
+					var treeNodeViewModel = this.listBox.SelectedItem as TreeNodeViewModel;
+					this.ViewModel.Add(treeNode, treeNodeViewModel);
+				}
+			}
+			this.listBox.SelectedItem = null;
+			e.Handled = true;
+		}
+
+		private void MenuDeleteNode_Executed(object sender, ExecutedRoutedEventArgs e)
+		{
+			if (this.listBox.SelectedItem == null)
+			{
+				return;
+			}
+			var treeNodeViewModel = this.listBox.SelectedItem as TreeNodeViewModel;
+			this.ViewModel.Remove(treeNodeViewModel);
+			this.listBox.SelectedItem = null;
+			e.Handled = true;
+		}
+
+		private void ListBoxItem_MouseDown(object sender, MouseButtonEventArgs e)
+		{
+			if (e.ChangedButton != MouseButton.Left)
+			{
+				return;
+			}
+			this.isLeftButtonDown = true;
+
+			var item = (FrameworkElement) sender;
+			var treeNodeViewModel = item.DataContext as TreeNodeViewModel;
+
+			this.listBox.SelectedItem = treeNodeViewModel;
+
+			this.origMouseDownPoint = e.GetPosition(this);
+
+			item.CaptureMouse();
+			e.Handled = true;
+		}
+
+		private void ListBoxItem_MouseUp(object sender, MouseButtonEventArgs e)
+		{
+			if (!this.isLeftButtonDown)
+			{
+				this.isDragging = false;
+				return;
+			}
+
+			var item = (FrameworkElement) sender;
+			var treeNodeViewModel = item.DataContext as TreeNodeViewModel;
+
+			if (!this.isDragging)
+			{
+				this.listBox.SelectedItem = treeNodeViewModel;
+			}
+
+			this.isLeftButtonDown = false;
+			this.isDragging = false;
+
+			item.ReleaseMouseCapture();
+			e.Handled = true;
+		}
+
+		private void ListBoxItem_MouseMove(object sender, MouseEventArgs e)
+		{
+			var item = (FrameworkElement) sender;
+			var treeNodeViewModel = item.DataContext as TreeNodeViewModel;
+			if (treeNodeViewModel == null)
+			{
+				return;
+			}
+			if (!treeNodeViewModel.IsRoot)
+			{
+				return;
+			}
+
+			Point curMouseDownPoint;
+			Vector dragDelta;
+			if (this.isDragging)
+			{
+				curMouseDownPoint = e.GetPosition(this);
+				dragDelta = curMouseDownPoint - this.origMouseDownPoint;
+
+				this.origMouseDownPoint = curMouseDownPoint;
+
+				this.ViewModel.Move(dragDelta.X, dragDelta.Y);
+				return;
+			}
+
+			if (!this.isLeftButtonDown)
+			{
+				return;
+			}
+
+			curMouseDownPoint = e.GetPosition(this);
+			dragDelta = curMouseDownPoint - this.origMouseDownPoint;
+			double dragDistance = Math.Abs(dragDelta.Length);
+			if (dragDistance > DragThreshold)
+			{
+				this.isDragging = true;
+			}
+			e.Handled = true;
+		}
+	}
 }

+ 68 - 68
CSharp/Modules/BehaviorTree/BehaviorTreeViewModel.cs → CSharp/App/Modules/BehaviorTree/BehaviorTreeViewModel.cs

@@ -1,69 +1,69 @@
-using System.Collections.ObjectModel;
-using System.ComponentModel.Composition;
-
-namespace Modules.BehaviorTree
-{
-	[Export(typeof (BehaviorTreeViewModel)), PartCreationPolicy(CreationPolicy.NonShared)]
-	internal class BehaviorTreeViewModel
-	{
-		private readonly ObservableCollection<TreeNodeViewModel> treeNodes = new ObservableCollection<TreeNodeViewModel>();
-
-		public ObservableCollection<TreeNodeViewModel> TreeNodes
-		{
-			get
-			{
-				return this.treeNodes;
-			}
-		}
-
-		private TreeNodeViewModel Root
-		{
-			get
-			{
-				return this.treeNodes.Count == 0? null : this.treeNodes[0];
-			}
-		}
-
-		public void Add(TreeNode treeNode, TreeNodeViewModel parent)
-		{
-			var treeNodeViewModel = new TreeNodeViewModel(treeNode, parent);
-			this.treeNodes.Add(treeNodeViewModel);
-			if (parent != null)
-			{
-				parent.Children.Add(treeNodeViewModel);
-			}
-			BehaviorTreeLayout.ExcuteLayout(this.Root);
-		}
-
-		private void RecursionRemove(TreeNodeViewModel treeNodeViewModel)
-		{
-			for (int i = treeNodeViewModel.Children.Count - 1; i >= 0; --i)
-			{
-				this.RecursionRemove(treeNodeViewModel.Children[i]);
-			}
-			treeNodeViewModel.Parent.Children.Remove(treeNodeViewModel);
-			this.treeNodes.Remove(treeNodeViewModel);
-		}
-
-		public void Remove(TreeNodeViewModel treeNodeViewModel)
-		{
-			this.RecursionRemove(treeNodeViewModel);
-			BehaviorTreeLayout.ExcuteLayout(this.Root);
-		}
-
-		private void RecursionMove(TreeNodeViewModel treeNodeViewModel, double offsetX, double offsetY)
-		{
-			treeNodeViewModel.X += offsetX;
-			treeNodeViewModel.Y += offsetY;
-			foreach (var node in treeNodeViewModel.Children)
-			{
-				this.RecursionMove(node, offsetX, offsetY);
-			}
-		}
-
-		public void Move(double offsetX, double offsetY)
-		{
-			this.RecursionMove(this.Root, offsetX, offsetY);
-		}
-	}
+using System.Collections.ObjectModel;
+using System.ComponentModel.Composition;
+
+namespace Modules.BehaviorTree
+{
+	[Export(typeof (BehaviorTreeViewModel)), PartCreationPolicy(CreationPolicy.NonShared)]
+	internal class BehaviorTreeViewModel
+	{
+		private readonly ObservableCollection<TreeNodeViewModel> treeNodes = new ObservableCollection<TreeNodeViewModel>();
+
+		public ObservableCollection<TreeNodeViewModel> TreeNodes
+		{
+			get
+			{
+				return this.treeNodes;
+			}
+		}
+
+		private TreeNodeViewModel Root
+		{
+			get
+			{
+				return this.treeNodes.Count == 0? null : this.treeNodes[0];
+			}
+		}
+
+		public void Add(TreeNode treeNode, TreeNodeViewModel parent)
+		{
+			var treeNodeViewModel = new TreeNodeViewModel(treeNode, parent);
+			this.treeNodes.Add(treeNodeViewModel);
+			if (parent != null)
+			{
+				parent.Children.Add(treeNodeViewModel);
+			}
+			BehaviorTreeLayout.ExcuteLayout(this.Root);
+		}
+
+		private void RecursionRemove(TreeNodeViewModel treeNodeViewModel)
+		{
+			for (int i = treeNodeViewModel.Children.Count - 1; i >= 0; --i)
+			{
+				this.RecursionRemove(treeNodeViewModel.Children[i]);
+			}
+			treeNodeViewModel.Parent.Children.Remove(treeNodeViewModel);
+			this.treeNodes.Remove(treeNodeViewModel);
+		}
+
+		public void Remove(TreeNodeViewModel treeNodeViewModel)
+		{
+			this.RecursionRemove(treeNodeViewModel);
+			BehaviorTreeLayout.ExcuteLayout(this.Root);
+		}
+
+		private void RecursionMove(TreeNodeViewModel treeNodeViewModel, double offsetX, double offsetY)
+		{
+			treeNodeViewModel.X += offsetX;
+			treeNodeViewModel.Y += offsetY;
+			foreach (var node in treeNodeViewModel.Children)
+			{
+				this.RecursionMove(node, offsetX, offsetY);
+			}
+		}
+
+		public void Move(double offsetX, double offsetY)
+		{
+			this.RecursionMove(this.Root, offsetX, offsetY);
+		}
+	}
 }

+ 1842 - 1842
CSharp/Modules/BehaviorTree/CSharpOptions.cs → CSharp/App/Modules/BehaviorTree/CSharpOptions.cs

@@ -1,1842 +1,1842 @@
-// Generated by ProtoGen, Version=2.4.1.473, Culture=neutral, PublicKeyToken=55f7125234beb589.  DO NOT EDIT!
-#pragma warning disable 1591, 0612
-#region Designer generated code
-
-using pb = global::Google.ProtocolBuffers;
-using pbc = global::Google.ProtocolBuffers.Collections;
-using pbd = global::Google.ProtocolBuffers.Descriptors;
-using scg = global::System.Collections.Generic;
-namespace Google.ProtocolBuffers.DescriptorProtos {
-  
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
-  [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
-  public static partial class CSharpOptions {
-  
-    #region Extension registration
-    public static void RegisterAllExtensions(pb::ExtensionRegistry registry) {
-      registry.Add(global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.CSharpFileOptions);
-      registry.Add(global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.CSharpFieldOptions);
-      registry.Add(global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.CsharpServiceOptions);
-      registry.Add(global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.CsharpMethodOptions);
-    }
-    #endregion
-    #region Extensions
-    public const int CSharpFileOptionsFieldNumber = 1000;
-    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.DescriptorProtos.CSharpFileOptions> CSharpFileOptions;
-    public const int CSharpFieldOptionsFieldNumber = 1000;
-    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.DescriptorProtos.CSharpFieldOptions> CSharpFieldOptions;
-    public const int CsharpServiceOptionsFieldNumber = 1000;
-    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.DescriptorProtos.CSharpServiceOptions> CsharpServiceOptions;
-    public const int CsharpMethodOptionsFieldNumber = 1000;
-    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.DescriptorProtos.CSharpMethodOptions> CsharpMethodOptions;
-    #endregion
-    
-    #region Static variables
-    internal static pbd::MessageDescriptor internal__static_google_protobuf_CSharpFileOptions__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.CSharpFileOptions, global::Google.ProtocolBuffers.DescriptorProtos.CSharpFileOptions.Builder> internal__static_google_protobuf_CSharpFileOptions__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_google_protobuf_CSharpFieldOptions__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.CSharpFieldOptions, global::Google.ProtocolBuffers.DescriptorProtos.CSharpFieldOptions.Builder> internal__static_google_protobuf_CSharpFieldOptions__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_google_protobuf_CSharpServiceOptions__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.CSharpServiceOptions, global::Google.ProtocolBuffers.DescriptorProtos.CSharpServiceOptions.Builder> internal__static_google_protobuf_CSharpServiceOptions__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_google_protobuf_CSharpMethodOptions__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.CSharpMethodOptions, global::Google.ProtocolBuffers.DescriptorProtos.CSharpMethodOptions.Builder> internal__static_google_protobuf_CSharpMethodOptions__FieldAccessorTable;
-    #endregion
-    #region Descriptor
-    public static pbd::FileDescriptor Descriptor {
-      get { return descriptor; }
-    }
-    private static pbd::FileDescriptor descriptor;
-    
-    static CSharpOptions() {
-      byte[] descriptorData = global::System.Convert.FromBase64String(
-          "CiRnb29nbGUvcHJvdG9idWYvY3NoYXJwX29wdGlvbnMucHJvdG8SD2dvb2ds" + 
-          "ZS5wcm90b2J1ZhogZ29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IucHJvdG8i" + 
-          "/AMKEUNTaGFycEZpbGVPcHRpb25zEhEKCW5hbWVzcGFjZRgBIAEoCRIaChJ1" + 
-          "bWJyZWxsYV9jbGFzc25hbWUYAiABKAkSHAoOcHVibGljX2NsYXNzZXMYAyAB" + 
-          "KAg6BHRydWUSFgoObXVsdGlwbGVfZmlsZXMYBCABKAgSFAoMbmVzdF9jbGFz" + 
-          "c2VzGAUgASgIEhYKDmNvZGVfY29udHJhY3RzGAYgASgIEiQKHGV4cGFuZF9u" + 
-          "YW1lc3BhY2VfZGlyZWN0b3JpZXMYByABKAgSHAoOY2xzX2NvbXBsaWFuY2UY" + 
-          "CCABKAg6BHRydWUSHwoQYWRkX3NlcmlhbGl6YWJsZRgJIAEoCDoFZmFsc2US" + 
-          "IwoVZ2VuZXJhdGVfcHJpdmF0ZV9jdG9yGAogASgIOgR0cnVlEhwKDmZpbGVf" + 
-          "ZXh0ZW5zaW9uGN0BIAEoCToDLmNzEhsKEnVtYnJlbGxhX25hbWVzcGFjZRje" + 
-          "ASABKAkSHAoQb3V0cHV0X2RpcmVjdG9yeRjfASABKAk6AS4SJgoWaWdub3Jl" + 
-          "X2dvb2dsZV9wcm90b2J1ZhjgASABKAg6BWZhbHNlEkkKFnNlcnZpY2VfZ2Vu" + 
-          "ZXJhdG9yX3R5cGUY4QEgASgOMiIuZ29vZ2xlLnByb3RvYnVmLkNTaGFycFNl" + 
-          "cnZpY2VUeXBlOgROT05FIisKEkNTaGFycEZpZWxkT3B0aW9ucxIVCg1wcm9w" + 
-          "ZXJ0eV9uYW1lGAEgASgJIiwKFENTaGFycFNlcnZpY2VPcHRpb25zEhQKDGlu" + 
-          "dGVyZmFjZV9pZBgBIAEoCSIqChNDU2hhcnBNZXRob2RPcHRpb25zEhMKC2Rp" + 
-          "c3BhdGNoX2lkGAEgASgFKksKEUNTaGFycFNlcnZpY2VUeXBlEggKBE5PTkUQ" + 
-          "ABILCgdHRU5FUklDEAESDQoJSU5URVJGQUNFEAISEAoMSVJQQ0RJU1BBVENI" + 
-          "EAM6XgoTY3NoYXJwX2ZpbGVfb3B0aW9ucxIcLmdvb2dsZS5wcm90b2J1Zi5G" + 
-          "aWxlT3B0aW9ucxjoByABKAsyIi5nb29nbGUucHJvdG9idWYuQ1NoYXJwRmls" + 
-          "ZU9wdGlvbnM6YQoUY3NoYXJwX2ZpZWxkX29wdGlvbnMSHS5nb29nbGUucHJv" + 
-          "dG9idWYuRmllbGRPcHRpb25zGOgHIAEoCzIjLmdvb2dsZS5wcm90b2J1Zi5D" + 
-          "U2hhcnBGaWVsZE9wdGlvbnM6ZwoWY3NoYXJwX3NlcnZpY2Vfb3B0aW9ucxIf" + 
-          "Lmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9ucxjoByABKAsyJS5nb29n" + 
-          "bGUucHJvdG9idWYuQ1NoYXJwU2VydmljZU9wdGlvbnM6ZAoVY3NoYXJwX21l" + 
-          "dGhvZF9vcHRpb25zEh4uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMY" + 
-          "6AcgASgLMiQuZ29vZ2xlLnByb3RvYnVmLkNTaGFycE1ldGhvZE9wdGlvbnM=");
-      pbd::FileDescriptor.InternalDescriptorAssigner assigner = delegate(pbd::FileDescriptor root) {
-        descriptor = root;
-        internal__static_google_protobuf_CSharpFileOptions__Descriptor = Descriptor.MessageTypes[0];
-        internal__static_google_protobuf_CSharpFileOptions__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.CSharpFileOptions, global::Google.ProtocolBuffers.DescriptorProtos.CSharpFileOptions.Builder>(internal__static_google_protobuf_CSharpFileOptions__Descriptor,
-                new string[] { "Namespace", "UmbrellaClassname", "PublicClasses", "MultipleFiles", "NestClasses", "CodeContracts", "ExpandNamespaceDirectories", "ClsCompliance", "AddSerializable", "GeneratePrivateCtor", "FileExtension", "UmbrellaNamespace", "OutputDirectory", "IgnoreGoogleProtobuf", "ServiceGeneratorType", });
-        internal__static_google_protobuf_CSharpFieldOptions__Descriptor = Descriptor.MessageTypes[1];
-        internal__static_google_protobuf_CSharpFieldOptions__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.CSharpFieldOptions, global::Google.ProtocolBuffers.DescriptorProtos.CSharpFieldOptions.Builder>(internal__static_google_protobuf_CSharpFieldOptions__Descriptor,
-                new string[] { "PropertyName", });
-        internal__static_google_protobuf_CSharpServiceOptions__Descriptor = Descriptor.MessageTypes[2];
-        internal__static_google_protobuf_CSharpServiceOptions__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.CSharpServiceOptions, global::Google.ProtocolBuffers.DescriptorProtos.CSharpServiceOptions.Builder>(internal__static_google_protobuf_CSharpServiceOptions__Descriptor,
-                new string[] { "InterfaceId", });
-        internal__static_google_protobuf_CSharpMethodOptions__Descriptor = Descriptor.MessageTypes[3];
-        internal__static_google_protobuf_CSharpMethodOptions__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.CSharpMethodOptions, global::Google.ProtocolBuffers.DescriptorProtos.CSharpMethodOptions.Builder>(internal__static_google_protobuf_CSharpMethodOptions__Descriptor,
-                new string[] { "DispatchId", });
-        global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.CSharpFileOptions = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.DescriptorProtos.CSharpFileOptions>.CreateInstance(global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.Descriptor.Extensions[0]);
-        global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.CSharpFieldOptions = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.DescriptorProtos.CSharpFieldOptions>.CreateInstance(global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.Descriptor.Extensions[1]);
-        global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.CsharpServiceOptions = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.DescriptorProtos.CSharpServiceOptions>.CreateInstance(global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.Descriptor.Extensions[2]);
-        global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.CsharpMethodOptions = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.DescriptorProtos.CSharpMethodOptions>.CreateInstance(global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.Descriptor.Extensions[3]);
-        return null;
-      };
-      pbd::FileDescriptor.InternalBuildGeneratedFileFrom(descriptorData,
-          new pbd::FileDescriptor[] {
-          global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, 
-          }, assigner);
-    }
-    #endregion
-    
-  }
-  #region Enums
-  [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
-  [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
-  public enum CSharpServiceType {
-    NONE = 0,
-    GENERIC = 1,
-    INTERFACE = 2,
-    IRPCDISPATCH = 3,
-  }
-  
-  #endregion
-  
-  #region Messages
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
-  [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
-  public sealed partial class CSharpFileOptions : pb::GeneratedMessage<CSharpFileOptions, CSharpFileOptions.Builder> {
-    private CSharpFileOptions() { }
-    private static readonly CSharpFileOptions defaultInstance = new CSharpFileOptions().MakeReadOnly();
-    private static readonly string[] _cSharpFileOptionsFieldNames = new string[] { "add_serializable", "cls_compliance", "code_contracts", "expand_namespace_directories", "file_extension", "generate_private_ctor", "ignore_google_protobuf", "multiple_files", "namespace", "nest_classes", "output_directory", "public_classes", "service_generator_type", "umbrella_classname", "umbrella_namespace" };
-    private static readonly uint[] _cSharpFileOptionsFieldTags = new uint[] { 72, 64, 48, 56, 1770, 80, 1792, 32, 10, 40, 1786, 24, 1800, 18, 1778 };
-    public static CSharpFileOptions DefaultInstance {
-      get { return defaultInstance; }
-    }
-    
-    public override CSharpFileOptions DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-    
-    protected override CSharpFileOptions ThisMessage {
-      get { return this; }
-    }
-    
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.internal__static_google_protobuf_CSharpFileOptions__Descriptor; }
-    }
-    
-    protected override pb::FieldAccess.FieldAccessorTable<CSharpFileOptions, CSharpFileOptions.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.internal__static_google_protobuf_CSharpFileOptions__FieldAccessorTable; }
-    }
-    
-    public const int NamespaceFieldNumber = 1;
-    private bool hasNamespace;
-    private string namespace_ = "";
-    public bool HasNamespace {
-      get { return hasNamespace; }
-    }
-    public string Namespace {
-      get { return namespace_; }
-    }
-    
-    public const int UmbrellaClassnameFieldNumber = 2;
-    private bool hasUmbrellaClassname;
-    private string umbrellaClassname_ = "";
-    public bool HasUmbrellaClassname {
-      get { return hasUmbrellaClassname; }
-    }
-    public string UmbrellaClassname {
-      get { return umbrellaClassname_; }
-    }
-    
-    public const int PublicClassesFieldNumber = 3;
-    private bool hasPublicClasses;
-    private bool publicClasses_ = true;
-    public bool HasPublicClasses {
-      get { return hasPublicClasses; }
-    }
-    public bool PublicClasses {
-      get { return publicClasses_; }
-    }
-    
-    public const int MultipleFilesFieldNumber = 4;
-    private bool hasMultipleFiles;
-    private bool multipleFiles_;
-    public bool HasMultipleFiles {
-      get { return hasMultipleFiles; }
-    }
-    public bool MultipleFiles {
-      get { return multipleFiles_; }
-    }
-    
-    public const int NestClassesFieldNumber = 5;
-    private bool hasNestClasses;
-    private bool nestClasses_;
-    public bool HasNestClasses {
-      get { return hasNestClasses; }
-    }
-    public bool NestClasses {
-      get { return nestClasses_; }
-    }
-    
-    public const int CodeContractsFieldNumber = 6;
-    private bool hasCodeContracts;
-    private bool codeContracts_;
-    public bool HasCodeContracts {
-      get { return hasCodeContracts; }
-    }
-    public bool CodeContracts {
-      get { return codeContracts_; }
-    }
-    
-    public const int ExpandNamespaceDirectoriesFieldNumber = 7;
-    private bool hasExpandNamespaceDirectories;
-    private bool expandNamespaceDirectories_;
-    public bool HasExpandNamespaceDirectories {
-      get { return hasExpandNamespaceDirectories; }
-    }
-    public bool ExpandNamespaceDirectories {
-      get { return expandNamespaceDirectories_; }
-    }
-    
-    public const int ClsComplianceFieldNumber = 8;
-    private bool hasClsCompliance;
-    private bool clsCompliance_ = true;
-    public bool HasClsCompliance {
-      get { return hasClsCompliance; }
-    }
-    public bool ClsCompliance {
-      get { return clsCompliance_; }
-    }
-    
-    public const int AddSerializableFieldNumber = 9;
-    private bool hasAddSerializable;
-    private bool addSerializable_;
-    public bool HasAddSerializable {
-      get { return hasAddSerializable; }
-    }
-    public bool AddSerializable {
-      get { return addSerializable_; }
-    }
-    
-    public const int GeneratePrivateCtorFieldNumber = 10;
-    private bool hasGeneratePrivateCtor;
-    private bool generatePrivateCtor_ = true;
-    public bool HasGeneratePrivateCtor {
-      get { return hasGeneratePrivateCtor; }
-    }
-    public bool GeneratePrivateCtor {
-      get { return generatePrivateCtor_; }
-    }
-    
-    public const int FileExtensionFieldNumber = 221;
-    private bool hasFileExtension;
-    private string fileExtension_ = ".cs";
-    public bool HasFileExtension {
-      get { return hasFileExtension; }
-    }
-    public string FileExtension {
-      get { return fileExtension_; }
-    }
-    
-    public const int UmbrellaNamespaceFieldNumber = 222;
-    private bool hasUmbrellaNamespace;
-    private string umbrellaNamespace_ = "";
-    public bool HasUmbrellaNamespace {
-      get { return hasUmbrellaNamespace; }
-    }
-    public string UmbrellaNamespace {
-      get { return umbrellaNamespace_; }
-    }
-    
-    public const int OutputDirectoryFieldNumber = 223;
-    private bool hasOutputDirectory;
-    private string outputDirectory_ = ".";
-    public bool HasOutputDirectory {
-      get { return hasOutputDirectory; }
-    }
-    public string OutputDirectory {
-      get { return outputDirectory_; }
-    }
-    
-    public const int IgnoreGoogleProtobufFieldNumber = 224;
-    private bool hasIgnoreGoogleProtobuf;
-    private bool ignoreGoogleProtobuf_;
-    public bool HasIgnoreGoogleProtobuf {
-      get { return hasIgnoreGoogleProtobuf; }
-    }
-    public bool IgnoreGoogleProtobuf {
-      get { return ignoreGoogleProtobuf_; }
-    }
-    
-    public const int ServiceGeneratorTypeFieldNumber = 225;
-    private bool hasServiceGeneratorType;
-    private global::Google.ProtocolBuffers.DescriptorProtos.CSharpServiceType serviceGeneratorType_ = global::Google.ProtocolBuffers.DescriptorProtos.CSharpServiceType.NONE;
-    public bool HasServiceGeneratorType {
-      get { return hasServiceGeneratorType; }
-    }
-    public global::Google.ProtocolBuffers.DescriptorProtos.CSharpServiceType ServiceGeneratorType {
-      get { return serviceGeneratorType_; }
-    }
-    
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-    
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      int size = SerializedSize;
-      string[] field_names = _cSharpFileOptionsFieldNames;
-      if (hasNamespace) {
-        output.WriteString(1, field_names[8], Namespace);
-      }
-      if (hasUmbrellaClassname) {
-        output.WriteString(2, field_names[13], UmbrellaClassname);
-      }
-      if (hasPublicClasses) {
-        output.WriteBool(3, field_names[11], PublicClasses);
-      }
-      if (hasMultipleFiles) {
-        output.WriteBool(4, field_names[7], MultipleFiles);
-      }
-      if (hasNestClasses) {
-        output.WriteBool(5, field_names[9], NestClasses);
-      }
-      if (hasCodeContracts) {
-        output.WriteBool(6, field_names[2], CodeContracts);
-      }
-      if (hasExpandNamespaceDirectories) {
-        output.WriteBool(7, field_names[3], ExpandNamespaceDirectories);
-      }
-      if (hasClsCompliance) {
-        output.WriteBool(8, field_names[1], ClsCompliance);
-      }
-      if (hasAddSerializable) {
-        output.WriteBool(9, field_names[0], AddSerializable);
-      }
-      if (hasGeneratePrivateCtor) {
-        output.WriteBool(10, field_names[5], GeneratePrivateCtor);
-      }
-      if (hasFileExtension) {
-        output.WriteString(221, field_names[4], FileExtension);
-      }
-      if (hasUmbrellaNamespace) {
-        output.WriteString(222, field_names[14], UmbrellaNamespace);
-      }
-      if (hasOutputDirectory) {
-        output.WriteString(223, field_names[10], OutputDirectory);
-      }
-      if (hasIgnoreGoogleProtobuf) {
-        output.WriteBool(224, field_names[6], IgnoreGoogleProtobuf);
-      }
-      if (hasServiceGeneratorType) {
-        output.WriteEnum(225, field_names[12], (int) ServiceGeneratorType, ServiceGeneratorType);
-      }
-      UnknownFields.WriteTo(output);
-    }
-    
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        
-        size = 0;
-        if (hasNamespace) {
-          size += pb::CodedOutputStream.ComputeStringSize(1, Namespace);
-        }
-        if (hasUmbrellaClassname) {
-          size += pb::CodedOutputStream.ComputeStringSize(2, UmbrellaClassname);
-        }
-        if (hasPublicClasses) {
-          size += pb::CodedOutputStream.ComputeBoolSize(3, PublicClasses);
-        }
-        if (hasMultipleFiles) {
-          size += pb::CodedOutputStream.ComputeBoolSize(4, MultipleFiles);
-        }
-        if (hasNestClasses) {
-          size += pb::CodedOutputStream.ComputeBoolSize(5, NestClasses);
-        }
-        if (hasCodeContracts) {
-          size += pb::CodedOutputStream.ComputeBoolSize(6, CodeContracts);
-        }
-        if (hasExpandNamespaceDirectories) {
-          size += pb::CodedOutputStream.ComputeBoolSize(7, ExpandNamespaceDirectories);
-        }
-        if (hasClsCompliance) {
-          size += pb::CodedOutputStream.ComputeBoolSize(8, ClsCompliance);
-        }
-        if (hasAddSerializable) {
-          size += pb::CodedOutputStream.ComputeBoolSize(9, AddSerializable);
-        }
-        if (hasGeneratePrivateCtor) {
-          size += pb::CodedOutputStream.ComputeBoolSize(10, GeneratePrivateCtor);
-        }
-        if (hasFileExtension) {
-          size += pb::CodedOutputStream.ComputeStringSize(221, FileExtension);
-        }
-        if (hasUmbrellaNamespace) {
-          size += pb::CodedOutputStream.ComputeStringSize(222, UmbrellaNamespace);
-        }
-        if (hasOutputDirectory) {
-          size += pb::CodedOutputStream.ComputeStringSize(223, OutputDirectory);
-        }
-        if (hasIgnoreGoogleProtobuf) {
-          size += pb::CodedOutputStream.ComputeBoolSize(224, IgnoreGoogleProtobuf);
-        }
-        if (hasServiceGeneratorType) {
-          size += pb::CodedOutputStream.ComputeEnumSize(225, (int) ServiceGeneratorType);
-        }
-        size += UnknownFields.SerializedSize;
-        memoizedSerializedSize = size;
-        return size;
-      }
-    }
-    
-    public static CSharpFileOptions ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static CSharpFileOptions ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static CSharpFileOptions ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static CSharpFileOptions ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static CSharpFileOptions ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static CSharpFileOptions ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static CSharpFileOptions ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static CSharpFileOptions ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static CSharpFileOptions ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static CSharpFileOptions ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private CSharpFileOptions MakeReadOnly() {
-      return this;
-    }
-    
-    public static Builder CreateBuilder() { return new Builder(); }
-    public override Builder ToBuilder() { return CreateBuilder(this); }
-    public override Builder CreateBuilderForType() { return new Builder(); }
-    public static Builder CreateBuilder(CSharpFileOptions prototype) {
-      return new Builder(prototype);
-    }
-    
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
-    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
-    public sealed partial class Builder : pb::GeneratedBuilder<CSharpFileOptions, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(CSharpFileOptions cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-      
-      private bool resultIsReadOnly;
-      private CSharpFileOptions result;
-      
-      private CSharpFileOptions PrepareBuilder() {
-        if (resultIsReadOnly) {
-          CSharpFileOptions original = result;
-          result = new CSharpFileOptions();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-      
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-      
-      protected override CSharpFileOptions MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-      
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-      
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-      
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.DescriptorProtos.CSharpFileOptions.Descriptor; }
-      }
-      
-      public override CSharpFileOptions DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.DescriptorProtos.CSharpFileOptions.DefaultInstance; }
-      }
-      
-      public override CSharpFileOptions BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-      
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is CSharpFileOptions) {
-          return MergeFrom((CSharpFileOptions) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-      
-      public override Builder MergeFrom(CSharpFileOptions other) {
-        if (other == global::Google.ProtocolBuffers.DescriptorProtos.CSharpFileOptions.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.HasNamespace) {
-          Namespace = other.Namespace;
-        }
-        if (other.HasUmbrellaClassname) {
-          UmbrellaClassname = other.UmbrellaClassname;
-        }
-        if (other.HasPublicClasses) {
-          PublicClasses = other.PublicClasses;
-        }
-        if (other.HasMultipleFiles) {
-          MultipleFiles = other.MultipleFiles;
-        }
-        if (other.HasNestClasses) {
-          NestClasses = other.NestClasses;
-        }
-        if (other.HasCodeContracts) {
-          CodeContracts = other.CodeContracts;
-        }
-        if (other.HasExpandNamespaceDirectories) {
-          ExpandNamespaceDirectories = other.ExpandNamespaceDirectories;
-        }
-        if (other.HasClsCompliance) {
-          ClsCompliance = other.ClsCompliance;
-        }
-        if (other.HasAddSerializable) {
-          AddSerializable = other.AddSerializable;
-        }
-        if (other.HasGeneratePrivateCtor) {
-          GeneratePrivateCtor = other.GeneratePrivateCtor;
-        }
-        if (other.HasFileExtension) {
-          FileExtension = other.FileExtension;
-        }
-        if (other.HasUmbrellaNamespace) {
-          UmbrellaNamespace = other.UmbrellaNamespace;
-        }
-        if (other.HasOutputDirectory) {
-          OutputDirectory = other.OutputDirectory;
-        }
-        if (other.HasIgnoreGoogleProtobuf) {
-          IgnoreGoogleProtobuf = other.IgnoreGoogleProtobuf;
-        }
-        if (other.HasServiceGeneratorType) {
-          ServiceGeneratorType = other.ServiceGeneratorType;
-        }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-      
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-      
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_cSharpFileOptionsFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _cSharpFileOptionsFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            default: {
-              if (pb::WireFormat.IsEndGroupTag(tag)) {
-                if (unknownFields != null) {
-                  this.UnknownFields = unknownFields.Build();
-                }
-                return this;
-              }
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              break;
-            }
-            case 10: {
-              result.hasNamespace = input.ReadString(ref result.namespace_);
-              break;
-            }
-            case 18: {
-              result.hasUmbrellaClassname = input.ReadString(ref result.umbrellaClassname_);
-              break;
-            }
-            case 24: {
-              result.hasPublicClasses = input.ReadBool(ref result.publicClasses_);
-              break;
-            }
-            case 32: {
-              result.hasMultipleFiles = input.ReadBool(ref result.multipleFiles_);
-              break;
-            }
-            case 40: {
-              result.hasNestClasses = input.ReadBool(ref result.nestClasses_);
-              break;
-            }
-            case 48: {
-              result.hasCodeContracts = input.ReadBool(ref result.codeContracts_);
-              break;
-            }
-            case 56: {
-              result.hasExpandNamespaceDirectories = input.ReadBool(ref result.expandNamespaceDirectories_);
-              break;
-            }
-            case 64: {
-              result.hasClsCompliance = input.ReadBool(ref result.clsCompliance_);
-              break;
-            }
-            case 72: {
-              result.hasAddSerializable = input.ReadBool(ref result.addSerializable_);
-              break;
-            }
-            case 80: {
-              result.hasGeneratePrivateCtor = input.ReadBool(ref result.generatePrivateCtor_);
-              break;
-            }
-            case 1770: {
-              result.hasFileExtension = input.ReadString(ref result.fileExtension_);
-              break;
-            }
-            case 1778: {
-              result.hasUmbrellaNamespace = input.ReadString(ref result.umbrellaNamespace_);
-              break;
-            }
-            case 1786: {
-              result.hasOutputDirectory = input.ReadString(ref result.outputDirectory_);
-              break;
-            }
-            case 1792: {
-              result.hasIgnoreGoogleProtobuf = input.ReadBool(ref result.ignoreGoogleProtobuf_);
-              break;
-            }
-            case 1800: {
-              object unknown;
-              if(input.ReadEnum(ref result.serviceGeneratorType_, out unknown)) {
-                result.hasServiceGeneratorType = true;
-              } else if(unknown is int) {
-                if (unknownFields == null) {
-                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-                }
-                unknownFields.MergeVarintField(225, (ulong)(int)unknown);
-              }
-              break;
-            }
-          }
-        }
-        
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-      
-      
-      public bool HasNamespace {
-        get { return result.hasNamespace; }
-      }
-      public string Namespace {
-        get { return result.Namespace; }
-        set { SetNamespace(value); }
-      }
-      public Builder SetNamespace(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasNamespace = true;
-        result.namespace_ = value;
-        return this;
-      }
-      public Builder ClearNamespace() {
-        PrepareBuilder();
-        result.hasNamespace = false;
-        result.namespace_ = "";
-        return this;
-      }
-      
-      public bool HasUmbrellaClassname {
-        get { return result.hasUmbrellaClassname; }
-      }
-      public string UmbrellaClassname {
-        get { return result.UmbrellaClassname; }
-        set { SetUmbrellaClassname(value); }
-      }
-      public Builder SetUmbrellaClassname(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasUmbrellaClassname = true;
-        result.umbrellaClassname_ = value;
-        return this;
-      }
-      public Builder ClearUmbrellaClassname() {
-        PrepareBuilder();
-        result.hasUmbrellaClassname = false;
-        result.umbrellaClassname_ = "";
-        return this;
-      }
-      
-      public bool HasPublicClasses {
-        get { return result.hasPublicClasses; }
-      }
-      public bool PublicClasses {
-        get { return result.PublicClasses; }
-        set { SetPublicClasses(value); }
-      }
-      public Builder SetPublicClasses(bool value) {
-        PrepareBuilder();
-        result.hasPublicClasses = true;
-        result.publicClasses_ = value;
-        return this;
-      }
-      public Builder ClearPublicClasses() {
-        PrepareBuilder();
-        result.hasPublicClasses = false;
-        result.publicClasses_ = true;
-        return this;
-      }
-      
-      public bool HasMultipleFiles {
-        get { return result.hasMultipleFiles; }
-      }
-      public bool MultipleFiles {
-        get { return result.MultipleFiles; }
-        set { SetMultipleFiles(value); }
-      }
-      public Builder SetMultipleFiles(bool value) {
-        PrepareBuilder();
-        result.hasMultipleFiles = true;
-        result.multipleFiles_ = value;
-        return this;
-      }
-      public Builder ClearMultipleFiles() {
-        PrepareBuilder();
-        result.hasMultipleFiles = false;
-        result.multipleFiles_ = false;
-        return this;
-      }
-      
-      public bool HasNestClasses {
-        get { return result.hasNestClasses; }
-      }
-      public bool NestClasses {
-        get { return result.NestClasses; }
-        set { SetNestClasses(value); }
-      }
-      public Builder SetNestClasses(bool value) {
-        PrepareBuilder();
-        result.hasNestClasses = true;
-        result.nestClasses_ = value;
-        return this;
-      }
-      public Builder ClearNestClasses() {
-        PrepareBuilder();
-        result.hasNestClasses = false;
-        result.nestClasses_ = false;
-        return this;
-      }
-      
-      public bool HasCodeContracts {
-        get { return result.hasCodeContracts; }
-      }
-      public bool CodeContracts {
-        get { return result.CodeContracts; }
-        set { SetCodeContracts(value); }
-      }
-      public Builder SetCodeContracts(bool value) {
-        PrepareBuilder();
-        result.hasCodeContracts = true;
-        result.codeContracts_ = value;
-        return this;
-      }
-      public Builder ClearCodeContracts() {
-        PrepareBuilder();
-        result.hasCodeContracts = false;
-        result.codeContracts_ = false;
-        return this;
-      }
-      
-      public bool HasExpandNamespaceDirectories {
-        get { return result.hasExpandNamespaceDirectories; }
-      }
-      public bool ExpandNamespaceDirectories {
-        get { return result.ExpandNamespaceDirectories; }
-        set { SetExpandNamespaceDirectories(value); }
-      }
-      public Builder SetExpandNamespaceDirectories(bool value) {
-        PrepareBuilder();
-        result.hasExpandNamespaceDirectories = true;
-        result.expandNamespaceDirectories_ = value;
-        return this;
-      }
-      public Builder ClearExpandNamespaceDirectories() {
-        PrepareBuilder();
-        result.hasExpandNamespaceDirectories = false;
-        result.expandNamespaceDirectories_ = false;
-        return this;
-      }
-      
-      public bool HasClsCompliance {
-        get { return result.hasClsCompliance; }
-      }
-      public bool ClsCompliance {
-        get { return result.ClsCompliance; }
-        set { SetClsCompliance(value); }
-      }
-      public Builder SetClsCompliance(bool value) {
-        PrepareBuilder();
-        result.hasClsCompliance = true;
-        result.clsCompliance_ = value;
-        return this;
-      }
-      public Builder ClearClsCompliance() {
-        PrepareBuilder();
-        result.hasClsCompliance = false;
-        result.clsCompliance_ = true;
-        return this;
-      }
-      
-      public bool HasAddSerializable {
-        get { return result.hasAddSerializable; }
-      }
-      public bool AddSerializable {
-        get { return result.AddSerializable; }
-        set { SetAddSerializable(value); }
-      }
-      public Builder SetAddSerializable(bool value) {
-        PrepareBuilder();
-        result.hasAddSerializable = true;
-        result.addSerializable_ = value;
-        return this;
-      }
-      public Builder ClearAddSerializable() {
-        PrepareBuilder();
-        result.hasAddSerializable = false;
-        result.addSerializable_ = false;
-        return this;
-      }
-      
-      public bool HasGeneratePrivateCtor {
-        get { return result.hasGeneratePrivateCtor; }
-      }
-      public bool GeneratePrivateCtor {
-        get { return result.GeneratePrivateCtor; }
-        set { SetGeneratePrivateCtor(value); }
-      }
-      public Builder SetGeneratePrivateCtor(bool value) {
-        PrepareBuilder();
-        result.hasGeneratePrivateCtor = true;
-        result.generatePrivateCtor_ = value;
-        return this;
-      }
-      public Builder ClearGeneratePrivateCtor() {
-        PrepareBuilder();
-        result.hasGeneratePrivateCtor = false;
-        result.generatePrivateCtor_ = true;
-        return this;
-      }
-      
-      public bool HasFileExtension {
-        get { return result.hasFileExtension; }
-      }
-      public string FileExtension {
-        get { return result.FileExtension; }
-        set { SetFileExtension(value); }
-      }
-      public Builder SetFileExtension(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasFileExtension = true;
-        result.fileExtension_ = value;
-        return this;
-      }
-      public Builder ClearFileExtension() {
-        PrepareBuilder();
-        result.hasFileExtension = false;
-        result.fileExtension_ = ".cs";
-        return this;
-      }
-      
-      public bool HasUmbrellaNamespace {
-        get { return result.hasUmbrellaNamespace; }
-      }
-      public string UmbrellaNamespace {
-        get { return result.UmbrellaNamespace; }
-        set { SetUmbrellaNamespace(value); }
-      }
-      public Builder SetUmbrellaNamespace(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasUmbrellaNamespace = true;
-        result.umbrellaNamespace_ = value;
-        return this;
-      }
-      public Builder ClearUmbrellaNamespace() {
-        PrepareBuilder();
-        result.hasUmbrellaNamespace = false;
-        result.umbrellaNamespace_ = "";
-        return this;
-      }
-      
-      public bool HasOutputDirectory {
-        get { return result.hasOutputDirectory; }
-      }
-      public string OutputDirectory {
-        get { return result.OutputDirectory; }
-        set { SetOutputDirectory(value); }
-      }
-      public Builder SetOutputDirectory(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasOutputDirectory = true;
-        result.outputDirectory_ = value;
-        return this;
-      }
-      public Builder ClearOutputDirectory() {
-        PrepareBuilder();
-        result.hasOutputDirectory = false;
-        result.outputDirectory_ = ".";
-        return this;
-      }
-      
-      public bool HasIgnoreGoogleProtobuf {
-        get { return result.hasIgnoreGoogleProtobuf; }
-      }
-      public bool IgnoreGoogleProtobuf {
-        get { return result.IgnoreGoogleProtobuf; }
-        set { SetIgnoreGoogleProtobuf(value); }
-      }
-      public Builder SetIgnoreGoogleProtobuf(bool value) {
-        PrepareBuilder();
-        result.hasIgnoreGoogleProtobuf = true;
-        result.ignoreGoogleProtobuf_ = value;
-        return this;
-      }
-      public Builder ClearIgnoreGoogleProtobuf() {
-        PrepareBuilder();
-        result.hasIgnoreGoogleProtobuf = false;
-        result.ignoreGoogleProtobuf_ = false;
-        return this;
-      }
-      
-      public bool HasServiceGeneratorType {
-       get { return result.hasServiceGeneratorType; }
-      }
-      public global::Google.ProtocolBuffers.DescriptorProtos.CSharpServiceType ServiceGeneratorType {
-        get { return result.ServiceGeneratorType; }
-        set { SetServiceGeneratorType(value); }
-      }
-      public Builder SetServiceGeneratorType(global::Google.ProtocolBuffers.DescriptorProtos.CSharpServiceType value) {
-        PrepareBuilder();
-        result.hasServiceGeneratorType = true;
-        result.serviceGeneratorType_ = value;
-        return this;
-      }
-      public Builder ClearServiceGeneratorType() {
-        PrepareBuilder();
-        result.hasServiceGeneratorType = false;
-        result.serviceGeneratorType_ = global::Google.ProtocolBuffers.DescriptorProtos.CSharpServiceType.NONE;
-        return this;
-      }
-    }
-    static CSharpFileOptions() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.Descriptor, null);
-    }
-  }
-  
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
-  [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
-  public sealed partial class CSharpFieldOptions : pb::GeneratedMessage<CSharpFieldOptions, CSharpFieldOptions.Builder> {
-    private CSharpFieldOptions() { }
-    private static readonly CSharpFieldOptions defaultInstance = new CSharpFieldOptions().MakeReadOnly();
-    private static readonly string[] _cSharpFieldOptionsFieldNames = new string[] { "property_name" };
-    private static readonly uint[] _cSharpFieldOptionsFieldTags = new uint[] { 10 };
-    public static CSharpFieldOptions DefaultInstance {
-      get { return defaultInstance; }
-    }
-    
-    public override CSharpFieldOptions DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-    
-    protected override CSharpFieldOptions ThisMessage {
-      get { return this; }
-    }
-    
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.internal__static_google_protobuf_CSharpFieldOptions__Descriptor; }
-    }
-    
-    protected override pb::FieldAccess.FieldAccessorTable<CSharpFieldOptions, CSharpFieldOptions.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.internal__static_google_protobuf_CSharpFieldOptions__FieldAccessorTable; }
-    }
-    
-    public const int PropertyNameFieldNumber = 1;
-    private bool hasPropertyName;
-    private string propertyName_ = "";
-    public bool HasPropertyName {
-      get { return hasPropertyName; }
-    }
-    public string PropertyName {
-      get { return propertyName_; }
-    }
-    
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-    
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      int size = SerializedSize;
-      string[] field_names = _cSharpFieldOptionsFieldNames;
-      if (hasPropertyName) {
-        output.WriteString(1, field_names[0], PropertyName);
-      }
-      UnknownFields.WriteTo(output);
-    }
-    
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        
-        size = 0;
-        if (hasPropertyName) {
-          size += pb::CodedOutputStream.ComputeStringSize(1, PropertyName);
-        }
-        size += UnknownFields.SerializedSize;
-        memoizedSerializedSize = size;
-        return size;
-      }
-    }
-    
-    public static CSharpFieldOptions ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static CSharpFieldOptions ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static CSharpFieldOptions ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static CSharpFieldOptions ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static CSharpFieldOptions ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static CSharpFieldOptions ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static CSharpFieldOptions ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static CSharpFieldOptions ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static CSharpFieldOptions ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static CSharpFieldOptions ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private CSharpFieldOptions MakeReadOnly() {
-      return this;
-    }
-    
-    public static Builder CreateBuilder() { return new Builder(); }
-    public override Builder ToBuilder() { return CreateBuilder(this); }
-    public override Builder CreateBuilderForType() { return new Builder(); }
-    public static Builder CreateBuilder(CSharpFieldOptions prototype) {
-      return new Builder(prototype);
-    }
-    
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
-    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
-    public sealed partial class Builder : pb::GeneratedBuilder<CSharpFieldOptions, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(CSharpFieldOptions cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-      
-      private bool resultIsReadOnly;
-      private CSharpFieldOptions result;
-      
-      private CSharpFieldOptions PrepareBuilder() {
-        if (resultIsReadOnly) {
-          CSharpFieldOptions original = result;
-          result = new CSharpFieldOptions();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-      
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-      
-      protected override CSharpFieldOptions MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-      
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-      
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-      
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.DescriptorProtos.CSharpFieldOptions.Descriptor; }
-      }
-      
-      public override CSharpFieldOptions DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.DescriptorProtos.CSharpFieldOptions.DefaultInstance; }
-      }
-      
-      public override CSharpFieldOptions BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-      
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is CSharpFieldOptions) {
-          return MergeFrom((CSharpFieldOptions) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-      
-      public override Builder MergeFrom(CSharpFieldOptions other) {
-        if (other == global::Google.ProtocolBuffers.DescriptorProtos.CSharpFieldOptions.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.HasPropertyName) {
-          PropertyName = other.PropertyName;
-        }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-      
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-      
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_cSharpFieldOptionsFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _cSharpFieldOptionsFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            default: {
-              if (pb::WireFormat.IsEndGroupTag(tag)) {
-                if (unknownFields != null) {
-                  this.UnknownFields = unknownFields.Build();
-                }
-                return this;
-              }
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              break;
-            }
-            case 10: {
-              result.hasPropertyName = input.ReadString(ref result.propertyName_);
-              break;
-            }
-          }
-        }
-        
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-      
-      
-      public bool HasPropertyName {
-        get { return result.hasPropertyName; }
-      }
-      public string PropertyName {
-        get { return result.PropertyName; }
-        set { SetPropertyName(value); }
-      }
-      public Builder SetPropertyName(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasPropertyName = true;
-        result.propertyName_ = value;
-        return this;
-      }
-      public Builder ClearPropertyName() {
-        PrepareBuilder();
-        result.hasPropertyName = false;
-        result.propertyName_ = "";
-        return this;
-      }
-    }
-    static CSharpFieldOptions() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.Descriptor, null);
-    }
-  }
-  
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
-  [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
-  public sealed partial class CSharpServiceOptions : pb::GeneratedMessage<CSharpServiceOptions, CSharpServiceOptions.Builder> {
-    private CSharpServiceOptions() { }
-    private static readonly CSharpServiceOptions defaultInstance = new CSharpServiceOptions().MakeReadOnly();
-    private static readonly string[] _cSharpServiceOptionsFieldNames = new string[] { "interface_id" };
-    private static readonly uint[] _cSharpServiceOptionsFieldTags = new uint[] { 10 };
-    public static CSharpServiceOptions DefaultInstance {
-      get { return defaultInstance; }
-    }
-    
-    public override CSharpServiceOptions DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-    
-    protected override CSharpServiceOptions ThisMessage {
-      get { return this; }
-    }
-    
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.internal__static_google_protobuf_CSharpServiceOptions__Descriptor; }
-    }
-    
-    protected override pb::FieldAccess.FieldAccessorTable<CSharpServiceOptions, CSharpServiceOptions.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.internal__static_google_protobuf_CSharpServiceOptions__FieldAccessorTable; }
-    }
-    
-    public const int InterfaceIdFieldNumber = 1;
-    private bool hasInterfaceId;
-    private string interfaceId_ = "";
-    public bool HasInterfaceId {
-      get { return hasInterfaceId; }
-    }
-    public string InterfaceId {
-      get { return interfaceId_; }
-    }
-    
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-    
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      int size = SerializedSize;
-      string[] field_names = _cSharpServiceOptionsFieldNames;
-      if (hasInterfaceId) {
-        output.WriteString(1, field_names[0], InterfaceId);
-      }
-      UnknownFields.WriteTo(output);
-    }
-    
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        
-        size = 0;
-        if (hasInterfaceId) {
-          size += pb::CodedOutputStream.ComputeStringSize(1, InterfaceId);
-        }
-        size += UnknownFields.SerializedSize;
-        memoizedSerializedSize = size;
-        return size;
-      }
-    }
-    
-    public static CSharpServiceOptions ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static CSharpServiceOptions ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static CSharpServiceOptions ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static CSharpServiceOptions ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static CSharpServiceOptions ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static CSharpServiceOptions ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static CSharpServiceOptions ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static CSharpServiceOptions ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static CSharpServiceOptions ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static CSharpServiceOptions ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private CSharpServiceOptions MakeReadOnly() {
-      return this;
-    }
-    
-    public static Builder CreateBuilder() { return new Builder(); }
-    public override Builder ToBuilder() { return CreateBuilder(this); }
-    public override Builder CreateBuilderForType() { return new Builder(); }
-    public static Builder CreateBuilder(CSharpServiceOptions prototype) {
-      return new Builder(prototype);
-    }
-    
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
-    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
-    public sealed partial class Builder : pb::GeneratedBuilder<CSharpServiceOptions, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(CSharpServiceOptions cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-      
-      private bool resultIsReadOnly;
-      private CSharpServiceOptions result;
-      
-      private CSharpServiceOptions PrepareBuilder() {
-        if (resultIsReadOnly) {
-          CSharpServiceOptions original = result;
-          result = new CSharpServiceOptions();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-      
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-      
-      protected override CSharpServiceOptions MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-      
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-      
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-      
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.DescriptorProtos.CSharpServiceOptions.Descriptor; }
-      }
-      
-      public override CSharpServiceOptions DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.DescriptorProtos.CSharpServiceOptions.DefaultInstance; }
-      }
-      
-      public override CSharpServiceOptions BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-      
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is CSharpServiceOptions) {
-          return MergeFrom((CSharpServiceOptions) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-      
-      public override Builder MergeFrom(CSharpServiceOptions other) {
-        if (other == global::Google.ProtocolBuffers.DescriptorProtos.CSharpServiceOptions.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.HasInterfaceId) {
-          InterfaceId = other.InterfaceId;
-        }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-      
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-      
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_cSharpServiceOptionsFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _cSharpServiceOptionsFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            default: {
-              if (pb::WireFormat.IsEndGroupTag(tag)) {
-                if (unknownFields != null) {
-                  this.UnknownFields = unknownFields.Build();
-                }
-                return this;
-              }
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              break;
-            }
-            case 10: {
-              result.hasInterfaceId = input.ReadString(ref result.interfaceId_);
-              break;
-            }
-          }
-        }
-        
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-      
-      
-      public bool HasInterfaceId {
-        get { return result.hasInterfaceId; }
-      }
-      public string InterfaceId {
-        get { return result.InterfaceId; }
-        set { SetInterfaceId(value); }
-      }
-      public Builder SetInterfaceId(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasInterfaceId = true;
-        result.interfaceId_ = value;
-        return this;
-      }
-      public Builder ClearInterfaceId() {
-        PrepareBuilder();
-        result.hasInterfaceId = false;
-        result.interfaceId_ = "";
-        return this;
-      }
-    }
-    static CSharpServiceOptions() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.Descriptor, null);
-    }
-  }
-  
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
-  [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
-  public sealed partial class CSharpMethodOptions : pb::GeneratedMessage<CSharpMethodOptions, CSharpMethodOptions.Builder> {
-    private CSharpMethodOptions() { }
-    private static readonly CSharpMethodOptions defaultInstance = new CSharpMethodOptions().MakeReadOnly();
-    private static readonly string[] _cSharpMethodOptionsFieldNames = new string[] { "dispatch_id" };
-    private static readonly uint[] _cSharpMethodOptionsFieldTags = new uint[] { 8 };
-    public static CSharpMethodOptions DefaultInstance {
-      get { return defaultInstance; }
-    }
-    
-    public override CSharpMethodOptions DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-    
-    protected override CSharpMethodOptions ThisMessage {
-      get { return this; }
-    }
-    
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.internal__static_google_protobuf_CSharpMethodOptions__Descriptor; }
-    }
-    
-    protected override pb::FieldAccess.FieldAccessorTable<CSharpMethodOptions, CSharpMethodOptions.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.internal__static_google_protobuf_CSharpMethodOptions__FieldAccessorTable; }
-    }
-    
-    public const int DispatchIdFieldNumber = 1;
-    private bool hasDispatchId;
-    private int dispatchId_;
-    public bool HasDispatchId {
-      get { return hasDispatchId; }
-    }
-    public int DispatchId {
-      get { return dispatchId_; }
-    }
-    
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-    
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      int size = SerializedSize;
-      string[] field_names = _cSharpMethodOptionsFieldNames;
-      if (hasDispatchId) {
-        output.WriteInt32(1, field_names[0], DispatchId);
-      }
-      UnknownFields.WriteTo(output);
-    }
-    
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        
-        size = 0;
-        if (hasDispatchId) {
-          size += pb::CodedOutputStream.ComputeInt32Size(1, DispatchId);
-        }
-        size += UnknownFields.SerializedSize;
-        memoizedSerializedSize = size;
-        return size;
-      }
-    }
-    
-    public static CSharpMethodOptions ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static CSharpMethodOptions ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static CSharpMethodOptions ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static CSharpMethodOptions ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static CSharpMethodOptions ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static CSharpMethodOptions ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static CSharpMethodOptions ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static CSharpMethodOptions ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static CSharpMethodOptions ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static CSharpMethodOptions ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private CSharpMethodOptions MakeReadOnly() {
-      return this;
-    }
-    
-    public static Builder CreateBuilder() { return new Builder(); }
-    public override Builder ToBuilder() { return CreateBuilder(this); }
-    public override Builder CreateBuilderForType() { return new Builder(); }
-    public static Builder CreateBuilder(CSharpMethodOptions prototype) {
-      return new Builder(prototype);
-    }
-    
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
-    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
-    public sealed partial class Builder : pb::GeneratedBuilder<CSharpMethodOptions, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(CSharpMethodOptions cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-      
-      private bool resultIsReadOnly;
-      private CSharpMethodOptions result;
-      
-      private CSharpMethodOptions PrepareBuilder() {
-        if (resultIsReadOnly) {
-          CSharpMethodOptions original = result;
-          result = new CSharpMethodOptions();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-      
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-      
-      protected override CSharpMethodOptions MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-      
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-      
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-      
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.DescriptorProtos.CSharpMethodOptions.Descriptor; }
-      }
-      
-      public override CSharpMethodOptions DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.DescriptorProtos.CSharpMethodOptions.DefaultInstance; }
-      }
-      
-      public override CSharpMethodOptions BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-      
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is CSharpMethodOptions) {
-          return MergeFrom((CSharpMethodOptions) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-      
-      public override Builder MergeFrom(CSharpMethodOptions other) {
-        if (other == global::Google.ProtocolBuffers.DescriptorProtos.CSharpMethodOptions.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.HasDispatchId) {
-          DispatchId = other.DispatchId;
-        }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-      
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-      
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_cSharpMethodOptionsFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _cSharpMethodOptionsFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            default: {
-              if (pb::WireFormat.IsEndGroupTag(tag)) {
-                if (unknownFields != null) {
-                  this.UnknownFields = unknownFields.Build();
-                }
-                return this;
-              }
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              break;
-            }
-            case 8: {
-              result.hasDispatchId = input.ReadInt32(ref result.dispatchId_);
-              break;
-            }
-          }
-        }
-        
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-      
-      
-      public bool HasDispatchId {
-        get { return result.hasDispatchId; }
-      }
-      public int DispatchId {
-        get { return result.DispatchId; }
-        set { SetDispatchId(value); }
-      }
-      public Builder SetDispatchId(int value) {
-        PrepareBuilder();
-        result.hasDispatchId = true;
-        result.dispatchId_ = value;
-        return this;
-      }
-      public Builder ClearDispatchId() {
-        PrepareBuilder();
-        result.hasDispatchId = false;
-        result.dispatchId_ = 0;
-        return this;
-      }
-    }
-    static CSharpMethodOptions() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.Descriptor, null);
-    }
-  }
-  
-  #endregion
-  
-}
-
-#endregion Designer generated code
+// Generated by ProtoGen, Version=2.4.1.473, Culture=neutral, PublicKeyToken=55f7125234beb589.  DO NOT EDIT!
+#pragma warning disable 1591, 0612
+#region Designer generated code
+
+using pb = global::Google.ProtocolBuffers;
+using pbc = global::Google.ProtocolBuffers.Collections;
+using pbd = global::Google.ProtocolBuffers.Descriptors;
+using scg = global::System.Collections.Generic;
+namespace Google.ProtocolBuffers.DescriptorProtos {
+  
+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+  [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+  [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
+  public static partial class CSharpOptions {
+  
+    #region Extension registration
+    public static void RegisterAllExtensions(pb::ExtensionRegistry registry) {
+      registry.Add(global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.CSharpFileOptions);
+      registry.Add(global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.CSharpFieldOptions);
+      registry.Add(global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.CsharpServiceOptions);
+      registry.Add(global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.CsharpMethodOptions);
+    }
+    #endregion
+    #region Extensions
+    public const int CSharpFileOptionsFieldNumber = 1000;
+    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.DescriptorProtos.CSharpFileOptions> CSharpFileOptions;
+    public const int CSharpFieldOptionsFieldNumber = 1000;
+    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.DescriptorProtos.CSharpFieldOptions> CSharpFieldOptions;
+    public const int CsharpServiceOptionsFieldNumber = 1000;
+    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.DescriptorProtos.CSharpServiceOptions> CsharpServiceOptions;
+    public const int CsharpMethodOptionsFieldNumber = 1000;
+    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.DescriptorProtos.CSharpMethodOptions> CsharpMethodOptions;
+    #endregion
+    
+    #region Static variables
+    internal static pbd::MessageDescriptor internal__static_google_protobuf_CSharpFileOptions__Descriptor;
+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.CSharpFileOptions, global::Google.ProtocolBuffers.DescriptorProtos.CSharpFileOptions.Builder> internal__static_google_protobuf_CSharpFileOptions__FieldAccessorTable;
+    internal static pbd::MessageDescriptor internal__static_google_protobuf_CSharpFieldOptions__Descriptor;
+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.CSharpFieldOptions, global::Google.ProtocolBuffers.DescriptorProtos.CSharpFieldOptions.Builder> internal__static_google_protobuf_CSharpFieldOptions__FieldAccessorTable;
+    internal static pbd::MessageDescriptor internal__static_google_protobuf_CSharpServiceOptions__Descriptor;
+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.CSharpServiceOptions, global::Google.ProtocolBuffers.DescriptorProtos.CSharpServiceOptions.Builder> internal__static_google_protobuf_CSharpServiceOptions__FieldAccessorTable;
+    internal static pbd::MessageDescriptor internal__static_google_protobuf_CSharpMethodOptions__Descriptor;
+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.CSharpMethodOptions, global::Google.ProtocolBuffers.DescriptorProtos.CSharpMethodOptions.Builder> internal__static_google_protobuf_CSharpMethodOptions__FieldAccessorTable;
+    #endregion
+    #region Descriptor
+    public static pbd::FileDescriptor Descriptor {
+      get { return descriptor; }
+    }
+    private static pbd::FileDescriptor descriptor;
+    
+    static CSharpOptions() {
+      byte[] descriptorData = global::System.Convert.FromBase64String(
+          "CiRnb29nbGUvcHJvdG9idWYvY3NoYXJwX29wdGlvbnMucHJvdG8SD2dvb2ds" + 
+          "ZS5wcm90b2J1ZhogZ29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IucHJvdG8i" + 
+          "/AMKEUNTaGFycEZpbGVPcHRpb25zEhEKCW5hbWVzcGFjZRgBIAEoCRIaChJ1" + 
+          "bWJyZWxsYV9jbGFzc25hbWUYAiABKAkSHAoOcHVibGljX2NsYXNzZXMYAyAB" + 
+          "KAg6BHRydWUSFgoObXVsdGlwbGVfZmlsZXMYBCABKAgSFAoMbmVzdF9jbGFz" + 
+          "c2VzGAUgASgIEhYKDmNvZGVfY29udHJhY3RzGAYgASgIEiQKHGV4cGFuZF9u" + 
+          "YW1lc3BhY2VfZGlyZWN0b3JpZXMYByABKAgSHAoOY2xzX2NvbXBsaWFuY2UY" + 
+          "CCABKAg6BHRydWUSHwoQYWRkX3NlcmlhbGl6YWJsZRgJIAEoCDoFZmFsc2US" + 
+          "IwoVZ2VuZXJhdGVfcHJpdmF0ZV9jdG9yGAogASgIOgR0cnVlEhwKDmZpbGVf" + 
+          "ZXh0ZW5zaW9uGN0BIAEoCToDLmNzEhsKEnVtYnJlbGxhX25hbWVzcGFjZRje" + 
+          "ASABKAkSHAoQb3V0cHV0X2RpcmVjdG9yeRjfASABKAk6AS4SJgoWaWdub3Jl" + 
+          "X2dvb2dsZV9wcm90b2J1ZhjgASABKAg6BWZhbHNlEkkKFnNlcnZpY2VfZ2Vu" + 
+          "ZXJhdG9yX3R5cGUY4QEgASgOMiIuZ29vZ2xlLnByb3RvYnVmLkNTaGFycFNl" + 
+          "cnZpY2VUeXBlOgROT05FIisKEkNTaGFycEZpZWxkT3B0aW9ucxIVCg1wcm9w" + 
+          "ZXJ0eV9uYW1lGAEgASgJIiwKFENTaGFycFNlcnZpY2VPcHRpb25zEhQKDGlu" + 
+          "dGVyZmFjZV9pZBgBIAEoCSIqChNDU2hhcnBNZXRob2RPcHRpb25zEhMKC2Rp" + 
+          "c3BhdGNoX2lkGAEgASgFKksKEUNTaGFycFNlcnZpY2VUeXBlEggKBE5PTkUQ" + 
+          "ABILCgdHRU5FUklDEAESDQoJSU5URVJGQUNFEAISEAoMSVJQQ0RJU1BBVENI" + 
+          "EAM6XgoTY3NoYXJwX2ZpbGVfb3B0aW9ucxIcLmdvb2dsZS5wcm90b2J1Zi5G" + 
+          "aWxlT3B0aW9ucxjoByABKAsyIi5nb29nbGUucHJvdG9idWYuQ1NoYXJwRmls" + 
+          "ZU9wdGlvbnM6YQoUY3NoYXJwX2ZpZWxkX29wdGlvbnMSHS5nb29nbGUucHJv" + 
+          "dG9idWYuRmllbGRPcHRpb25zGOgHIAEoCzIjLmdvb2dsZS5wcm90b2J1Zi5D" + 
+          "U2hhcnBGaWVsZE9wdGlvbnM6ZwoWY3NoYXJwX3NlcnZpY2Vfb3B0aW9ucxIf" + 
+          "Lmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9ucxjoByABKAsyJS5nb29n" + 
+          "bGUucHJvdG9idWYuQ1NoYXJwU2VydmljZU9wdGlvbnM6ZAoVY3NoYXJwX21l" + 
+          "dGhvZF9vcHRpb25zEh4uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMY" + 
+          "6AcgASgLMiQuZ29vZ2xlLnByb3RvYnVmLkNTaGFycE1ldGhvZE9wdGlvbnM=");
+      pbd::FileDescriptor.InternalDescriptorAssigner assigner = delegate(pbd::FileDescriptor root) {
+        descriptor = root;
+        internal__static_google_protobuf_CSharpFileOptions__Descriptor = Descriptor.MessageTypes[0];
+        internal__static_google_protobuf_CSharpFileOptions__FieldAccessorTable = 
+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.CSharpFileOptions, global::Google.ProtocolBuffers.DescriptorProtos.CSharpFileOptions.Builder>(internal__static_google_protobuf_CSharpFileOptions__Descriptor,
+                new string[] { "Namespace", "UmbrellaClassname", "PublicClasses", "MultipleFiles", "NestClasses", "CodeContracts", "ExpandNamespaceDirectories", "ClsCompliance", "AddSerializable", "GeneratePrivateCtor", "FileExtension", "UmbrellaNamespace", "OutputDirectory", "IgnoreGoogleProtobuf", "ServiceGeneratorType", });
+        internal__static_google_protobuf_CSharpFieldOptions__Descriptor = Descriptor.MessageTypes[1];
+        internal__static_google_protobuf_CSharpFieldOptions__FieldAccessorTable = 
+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.CSharpFieldOptions, global::Google.ProtocolBuffers.DescriptorProtos.CSharpFieldOptions.Builder>(internal__static_google_protobuf_CSharpFieldOptions__Descriptor,
+                new string[] { "PropertyName", });
+        internal__static_google_protobuf_CSharpServiceOptions__Descriptor = Descriptor.MessageTypes[2];
+        internal__static_google_protobuf_CSharpServiceOptions__FieldAccessorTable = 
+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.CSharpServiceOptions, global::Google.ProtocolBuffers.DescriptorProtos.CSharpServiceOptions.Builder>(internal__static_google_protobuf_CSharpServiceOptions__Descriptor,
+                new string[] { "InterfaceId", });
+        internal__static_google_protobuf_CSharpMethodOptions__Descriptor = Descriptor.MessageTypes[3];
+        internal__static_google_protobuf_CSharpMethodOptions__FieldAccessorTable = 
+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.CSharpMethodOptions, global::Google.ProtocolBuffers.DescriptorProtos.CSharpMethodOptions.Builder>(internal__static_google_protobuf_CSharpMethodOptions__Descriptor,
+                new string[] { "DispatchId", });
+        global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.CSharpFileOptions = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.DescriptorProtos.CSharpFileOptions>.CreateInstance(global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.Descriptor.Extensions[0]);
+        global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.CSharpFieldOptions = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.DescriptorProtos.CSharpFieldOptions>.CreateInstance(global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.Descriptor.Extensions[1]);
+        global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.CsharpServiceOptions = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.DescriptorProtos.CSharpServiceOptions>.CreateInstance(global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.Descriptor.Extensions[2]);
+        global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.CsharpMethodOptions = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.DescriptorProtos.CSharpMethodOptions>.CreateInstance(global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.Descriptor.Extensions[3]);
+        return null;
+      };
+      pbd::FileDescriptor.InternalBuildGeneratedFileFrom(descriptorData,
+          new pbd::FileDescriptor[] {
+          global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, 
+          }, assigner);
+    }
+    #endregion
+    
+  }
+  #region Enums
+  [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+  [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
+  public enum CSharpServiceType {
+    NONE = 0,
+    GENERIC = 1,
+    INTERFACE = 2,
+    IRPCDISPATCH = 3,
+  }
+  
+  #endregion
+  
+  #region Messages
+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+  [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+  [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
+  public sealed partial class CSharpFileOptions : pb::GeneratedMessage<CSharpFileOptions, CSharpFileOptions.Builder> {
+    private CSharpFileOptions() { }
+    private static readonly CSharpFileOptions defaultInstance = new CSharpFileOptions().MakeReadOnly();
+    private static readonly string[] _cSharpFileOptionsFieldNames = new string[] { "add_serializable", "cls_compliance", "code_contracts", "expand_namespace_directories", "file_extension", "generate_private_ctor", "ignore_google_protobuf", "multiple_files", "namespace", "nest_classes", "output_directory", "public_classes", "service_generator_type", "umbrella_classname", "umbrella_namespace" };
+    private static readonly uint[] _cSharpFileOptionsFieldTags = new uint[] { 72, 64, 48, 56, 1770, 80, 1792, 32, 10, 40, 1786, 24, 1800, 18, 1778 };
+    public static CSharpFileOptions DefaultInstance {
+      get { return defaultInstance; }
+    }
+    
+    public override CSharpFileOptions DefaultInstanceForType {
+      get { return DefaultInstance; }
+    }
+    
+    protected override CSharpFileOptions ThisMessage {
+      get { return this; }
+    }
+    
+    public static pbd::MessageDescriptor Descriptor {
+      get { return global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.internal__static_google_protobuf_CSharpFileOptions__Descriptor; }
+    }
+    
+    protected override pb::FieldAccess.FieldAccessorTable<CSharpFileOptions, CSharpFileOptions.Builder> InternalFieldAccessors {
+      get { return global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.internal__static_google_protobuf_CSharpFileOptions__FieldAccessorTable; }
+    }
+    
+    public const int NamespaceFieldNumber = 1;
+    private bool hasNamespace;
+    private string namespace_ = "";
+    public bool HasNamespace {
+      get { return hasNamespace; }
+    }
+    public string Namespace {
+      get { return namespace_; }
+    }
+    
+    public const int UmbrellaClassnameFieldNumber = 2;
+    private bool hasUmbrellaClassname;
+    private string umbrellaClassname_ = "";
+    public bool HasUmbrellaClassname {
+      get { return hasUmbrellaClassname; }
+    }
+    public string UmbrellaClassname {
+      get { return umbrellaClassname_; }
+    }
+    
+    public const int PublicClassesFieldNumber = 3;
+    private bool hasPublicClasses;
+    private bool publicClasses_ = true;
+    public bool HasPublicClasses {
+      get { return hasPublicClasses; }
+    }
+    public bool PublicClasses {
+      get { return publicClasses_; }
+    }
+    
+    public const int MultipleFilesFieldNumber = 4;
+    private bool hasMultipleFiles;
+    private bool multipleFiles_;
+    public bool HasMultipleFiles {
+      get { return hasMultipleFiles; }
+    }
+    public bool MultipleFiles {
+      get { return multipleFiles_; }
+    }
+    
+    public const int NestClassesFieldNumber = 5;
+    private bool hasNestClasses;
+    private bool nestClasses_;
+    public bool HasNestClasses {
+      get { return hasNestClasses; }
+    }
+    public bool NestClasses {
+      get { return nestClasses_; }
+    }
+    
+    public const int CodeContractsFieldNumber = 6;
+    private bool hasCodeContracts;
+    private bool codeContracts_;
+    public bool HasCodeContracts {
+      get { return hasCodeContracts; }
+    }
+    public bool CodeContracts {
+      get { return codeContracts_; }
+    }
+    
+    public const int ExpandNamespaceDirectoriesFieldNumber = 7;
+    private bool hasExpandNamespaceDirectories;
+    private bool expandNamespaceDirectories_;
+    public bool HasExpandNamespaceDirectories {
+      get { return hasExpandNamespaceDirectories; }
+    }
+    public bool ExpandNamespaceDirectories {
+      get { return expandNamespaceDirectories_; }
+    }
+    
+    public const int ClsComplianceFieldNumber = 8;
+    private bool hasClsCompliance;
+    private bool clsCompliance_ = true;
+    public bool HasClsCompliance {
+      get { return hasClsCompliance; }
+    }
+    public bool ClsCompliance {
+      get { return clsCompliance_; }
+    }
+    
+    public const int AddSerializableFieldNumber = 9;
+    private bool hasAddSerializable;
+    private bool addSerializable_;
+    public bool HasAddSerializable {
+      get { return hasAddSerializable; }
+    }
+    public bool AddSerializable {
+      get { return addSerializable_; }
+    }
+    
+    public const int GeneratePrivateCtorFieldNumber = 10;
+    private bool hasGeneratePrivateCtor;
+    private bool generatePrivateCtor_ = true;
+    public bool HasGeneratePrivateCtor {
+      get { return hasGeneratePrivateCtor; }
+    }
+    public bool GeneratePrivateCtor {
+      get { return generatePrivateCtor_; }
+    }
+    
+    public const int FileExtensionFieldNumber = 221;
+    private bool hasFileExtension;
+    private string fileExtension_ = ".cs";
+    public bool HasFileExtension {
+      get { return hasFileExtension; }
+    }
+    public string FileExtension {
+      get { return fileExtension_; }
+    }
+    
+    public const int UmbrellaNamespaceFieldNumber = 222;
+    private bool hasUmbrellaNamespace;
+    private string umbrellaNamespace_ = "";
+    public bool HasUmbrellaNamespace {
+      get { return hasUmbrellaNamespace; }
+    }
+    public string UmbrellaNamespace {
+      get { return umbrellaNamespace_; }
+    }
+    
+    public const int OutputDirectoryFieldNumber = 223;
+    private bool hasOutputDirectory;
+    private string outputDirectory_ = ".";
+    public bool HasOutputDirectory {
+      get { return hasOutputDirectory; }
+    }
+    public string OutputDirectory {
+      get { return outputDirectory_; }
+    }
+    
+    public const int IgnoreGoogleProtobufFieldNumber = 224;
+    private bool hasIgnoreGoogleProtobuf;
+    private bool ignoreGoogleProtobuf_;
+    public bool HasIgnoreGoogleProtobuf {
+      get { return hasIgnoreGoogleProtobuf; }
+    }
+    public bool IgnoreGoogleProtobuf {
+      get { return ignoreGoogleProtobuf_; }
+    }
+    
+    public const int ServiceGeneratorTypeFieldNumber = 225;
+    private bool hasServiceGeneratorType;
+    private global::Google.ProtocolBuffers.DescriptorProtos.CSharpServiceType serviceGeneratorType_ = global::Google.ProtocolBuffers.DescriptorProtos.CSharpServiceType.NONE;
+    public bool HasServiceGeneratorType {
+      get { return hasServiceGeneratorType; }
+    }
+    public global::Google.ProtocolBuffers.DescriptorProtos.CSharpServiceType ServiceGeneratorType {
+      get { return serviceGeneratorType_; }
+    }
+    
+    public override bool IsInitialized {
+      get {
+        return true;
+      }
+    }
+    
+    public override void WriteTo(pb::ICodedOutputStream output) {
+      int size = SerializedSize;
+      string[] field_names = _cSharpFileOptionsFieldNames;
+      if (hasNamespace) {
+        output.WriteString(1, field_names[8], Namespace);
+      }
+      if (hasUmbrellaClassname) {
+        output.WriteString(2, field_names[13], UmbrellaClassname);
+      }
+      if (hasPublicClasses) {
+        output.WriteBool(3, field_names[11], PublicClasses);
+      }
+      if (hasMultipleFiles) {
+        output.WriteBool(4, field_names[7], MultipleFiles);
+      }
+      if (hasNestClasses) {
+        output.WriteBool(5, field_names[9], NestClasses);
+      }
+      if (hasCodeContracts) {
+        output.WriteBool(6, field_names[2], CodeContracts);
+      }
+      if (hasExpandNamespaceDirectories) {
+        output.WriteBool(7, field_names[3], ExpandNamespaceDirectories);
+      }
+      if (hasClsCompliance) {
+        output.WriteBool(8, field_names[1], ClsCompliance);
+      }
+      if (hasAddSerializable) {
+        output.WriteBool(9, field_names[0], AddSerializable);
+      }
+      if (hasGeneratePrivateCtor) {
+        output.WriteBool(10, field_names[5], GeneratePrivateCtor);
+      }
+      if (hasFileExtension) {
+        output.WriteString(221, field_names[4], FileExtension);
+      }
+      if (hasUmbrellaNamespace) {
+        output.WriteString(222, field_names[14], UmbrellaNamespace);
+      }
+      if (hasOutputDirectory) {
+        output.WriteString(223, field_names[10], OutputDirectory);
+      }
+      if (hasIgnoreGoogleProtobuf) {
+        output.WriteBool(224, field_names[6], IgnoreGoogleProtobuf);
+      }
+      if (hasServiceGeneratorType) {
+        output.WriteEnum(225, field_names[12], (int) ServiceGeneratorType, ServiceGeneratorType);
+      }
+      UnknownFields.WriteTo(output);
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public override int SerializedSize {
+      get {
+        int size = memoizedSerializedSize;
+        if (size != -1) return size;
+        
+        size = 0;
+        if (hasNamespace) {
+          size += pb::CodedOutputStream.ComputeStringSize(1, Namespace);
+        }
+        if (hasUmbrellaClassname) {
+          size += pb::CodedOutputStream.ComputeStringSize(2, UmbrellaClassname);
+        }
+        if (hasPublicClasses) {
+          size += pb::CodedOutputStream.ComputeBoolSize(3, PublicClasses);
+        }
+        if (hasMultipleFiles) {
+          size += pb::CodedOutputStream.ComputeBoolSize(4, MultipleFiles);
+        }
+        if (hasNestClasses) {
+          size += pb::CodedOutputStream.ComputeBoolSize(5, NestClasses);
+        }
+        if (hasCodeContracts) {
+          size += pb::CodedOutputStream.ComputeBoolSize(6, CodeContracts);
+        }
+        if (hasExpandNamespaceDirectories) {
+          size += pb::CodedOutputStream.ComputeBoolSize(7, ExpandNamespaceDirectories);
+        }
+        if (hasClsCompliance) {
+          size += pb::CodedOutputStream.ComputeBoolSize(8, ClsCompliance);
+        }
+        if (hasAddSerializable) {
+          size += pb::CodedOutputStream.ComputeBoolSize(9, AddSerializable);
+        }
+        if (hasGeneratePrivateCtor) {
+          size += pb::CodedOutputStream.ComputeBoolSize(10, GeneratePrivateCtor);
+        }
+        if (hasFileExtension) {
+          size += pb::CodedOutputStream.ComputeStringSize(221, FileExtension);
+        }
+        if (hasUmbrellaNamespace) {
+          size += pb::CodedOutputStream.ComputeStringSize(222, UmbrellaNamespace);
+        }
+        if (hasOutputDirectory) {
+          size += pb::CodedOutputStream.ComputeStringSize(223, OutputDirectory);
+        }
+        if (hasIgnoreGoogleProtobuf) {
+          size += pb::CodedOutputStream.ComputeBoolSize(224, IgnoreGoogleProtobuf);
+        }
+        if (hasServiceGeneratorType) {
+          size += pb::CodedOutputStream.ComputeEnumSize(225, (int) ServiceGeneratorType);
+        }
+        size += UnknownFields.SerializedSize;
+        memoizedSerializedSize = size;
+        return size;
+      }
+    }
+    
+    public static CSharpFileOptions ParseFrom(pb::ByteString data) {
+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
+    }
+    public static CSharpFileOptions ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
+    }
+    public static CSharpFileOptions ParseFrom(byte[] data) {
+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
+    }
+    public static CSharpFileOptions ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
+    }
+    public static CSharpFileOptions ParseFrom(global::System.IO.Stream input) {
+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
+    }
+    public static CSharpFileOptions ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
+    }
+    public static CSharpFileOptions ParseDelimitedFrom(global::System.IO.Stream input) {
+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
+    }
+    public static CSharpFileOptions ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
+    }
+    public static CSharpFileOptions ParseFrom(pb::ICodedInputStream input) {
+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
+    }
+    public static CSharpFileOptions ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
+    }
+    private CSharpFileOptions MakeReadOnly() {
+      return this;
+    }
+    
+    public static Builder CreateBuilder() { return new Builder(); }
+    public override Builder ToBuilder() { return CreateBuilder(this); }
+    public override Builder CreateBuilderForType() { return new Builder(); }
+    public static Builder CreateBuilder(CSharpFileOptions prototype) {
+      return new Builder(prototype);
+    }
+    
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
+    public sealed partial class Builder : pb::GeneratedBuilder<CSharpFileOptions, Builder> {
+      protected override Builder ThisBuilder {
+        get { return this; }
+      }
+      public Builder() {
+        result = DefaultInstance;
+        resultIsReadOnly = true;
+      }
+      internal Builder(CSharpFileOptions cloneFrom) {
+        result = cloneFrom;
+        resultIsReadOnly = true;
+      }
+      
+      private bool resultIsReadOnly;
+      private CSharpFileOptions result;
+      
+      private CSharpFileOptions PrepareBuilder() {
+        if (resultIsReadOnly) {
+          CSharpFileOptions original = result;
+          result = new CSharpFileOptions();
+          resultIsReadOnly = false;
+          MergeFrom(original);
+        }
+        return result;
+      }
+      
+      public override bool IsInitialized {
+        get { return result.IsInitialized; }
+      }
+      
+      protected override CSharpFileOptions MessageBeingBuilt {
+        get { return PrepareBuilder(); }
+      }
+      
+      public override Builder Clear() {
+        result = DefaultInstance;
+        resultIsReadOnly = true;
+        return this;
+      }
+      
+      public override Builder Clone() {
+        if (resultIsReadOnly) {
+          return new Builder(result);
+        } else {
+          return new Builder().MergeFrom(result);
+        }
+      }
+      
+      public override pbd::MessageDescriptor DescriptorForType {
+        get { return global::Google.ProtocolBuffers.DescriptorProtos.CSharpFileOptions.Descriptor; }
+      }
+      
+      public override CSharpFileOptions DefaultInstanceForType {
+        get { return global::Google.ProtocolBuffers.DescriptorProtos.CSharpFileOptions.DefaultInstance; }
+      }
+      
+      public override CSharpFileOptions BuildPartial() {
+        if (resultIsReadOnly) {
+          return result;
+        }
+        resultIsReadOnly = true;
+        return result.MakeReadOnly();
+      }
+      
+      public override Builder MergeFrom(pb::IMessage other) {
+        if (other is CSharpFileOptions) {
+          return MergeFrom((CSharpFileOptions) other);
+        } else {
+          base.MergeFrom(other);
+          return this;
+        }
+      }
+      
+      public override Builder MergeFrom(CSharpFileOptions other) {
+        if (other == global::Google.ProtocolBuffers.DescriptorProtos.CSharpFileOptions.DefaultInstance) return this;
+        PrepareBuilder();
+        if (other.HasNamespace) {
+          Namespace = other.Namespace;
+        }
+        if (other.HasUmbrellaClassname) {
+          UmbrellaClassname = other.UmbrellaClassname;
+        }
+        if (other.HasPublicClasses) {
+          PublicClasses = other.PublicClasses;
+        }
+        if (other.HasMultipleFiles) {
+          MultipleFiles = other.MultipleFiles;
+        }
+        if (other.HasNestClasses) {
+          NestClasses = other.NestClasses;
+        }
+        if (other.HasCodeContracts) {
+          CodeContracts = other.CodeContracts;
+        }
+        if (other.HasExpandNamespaceDirectories) {
+          ExpandNamespaceDirectories = other.ExpandNamespaceDirectories;
+        }
+        if (other.HasClsCompliance) {
+          ClsCompliance = other.ClsCompliance;
+        }
+        if (other.HasAddSerializable) {
+          AddSerializable = other.AddSerializable;
+        }
+        if (other.HasGeneratePrivateCtor) {
+          GeneratePrivateCtor = other.GeneratePrivateCtor;
+        }
+        if (other.HasFileExtension) {
+          FileExtension = other.FileExtension;
+        }
+        if (other.HasUmbrellaNamespace) {
+          UmbrellaNamespace = other.UmbrellaNamespace;
+        }
+        if (other.HasOutputDirectory) {
+          OutputDirectory = other.OutputDirectory;
+        }
+        if (other.HasIgnoreGoogleProtobuf) {
+          IgnoreGoogleProtobuf = other.IgnoreGoogleProtobuf;
+        }
+        if (other.HasServiceGeneratorType) {
+          ServiceGeneratorType = other.ServiceGeneratorType;
+        }
+        this.MergeUnknownFields(other.UnknownFields);
+        return this;
+      }
+      
+      public override Builder MergeFrom(pb::ICodedInputStream input) {
+        return MergeFrom(input, pb::ExtensionRegistry.Empty);
+      }
+      
+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+        PrepareBuilder();
+        pb::UnknownFieldSet.Builder unknownFields = null;
+        uint tag;
+        string field_name;
+        while (input.ReadTag(out tag, out field_name)) {
+          if(tag == 0 && field_name != null) {
+            int field_ordinal = global::System.Array.BinarySearch(_cSharpFileOptionsFieldNames, field_name, global::System.StringComparer.Ordinal);
+            if(field_ordinal >= 0)
+              tag = _cSharpFileOptionsFieldTags[field_ordinal];
+            else {
+              if (unknownFields == null) {
+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
+              }
+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
+              continue;
+            }
+          }
+          switch (tag) {
+            case 0: {
+              throw pb::InvalidProtocolBufferException.InvalidTag();
+            }
+            default: {
+              if (pb::WireFormat.IsEndGroupTag(tag)) {
+                if (unknownFields != null) {
+                  this.UnknownFields = unknownFields.Build();
+                }
+                return this;
+              }
+              if (unknownFields == null) {
+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
+              }
+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
+              break;
+            }
+            case 10: {
+              result.hasNamespace = input.ReadString(ref result.namespace_);
+              break;
+            }
+            case 18: {
+              result.hasUmbrellaClassname = input.ReadString(ref result.umbrellaClassname_);
+              break;
+            }
+            case 24: {
+              result.hasPublicClasses = input.ReadBool(ref result.publicClasses_);
+              break;
+            }
+            case 32: {
+              result.hasMultipleFiles = input.ReadBool(ref result.multipleFiles_);
+              break;
+            }
+            case 40: {
+              result.hasNestClasses = input.ReadBool(ref result.nestClasses_);
+              break;
+            }
+            case 48: {
+              result.hasCodeContracts = input.ReadBool(ref result.codeContracts_);
+              break;
+            }
+            case 56: {
+              result.hasExpandNamespaceDirectories = input.ReadBool(ref result.expandNamespaceDirectories_);
+              break;
+            }
+            case 64: {
+              result.hasClsCompliance = input.ReadBool(ref result.clsCompliance_);
+              break;
+            }
+            case 72: {
+              result.hasAddSerializable = input.ReadBool(ref result.addSerializable_);
+              break;
+            }
+            case 80: {
+              result.hasGeneratePrivateCtor = input.ReadBool(ref result.generatePrivateCtor_);
+              break;
+            }
+            case 1770: {
+              result.hasFileExtension = input.ReadString(ref result.fileExtension_);
+              break;
+            }
+            case 1778: {
+              result.hasUmbrellaNamespace = input.ReadString(ref result.umbrellaNamespace_);
+              break;
+            }
+            case 1786: {
+              result.hasOutputDirectory = input.ReadString(ref result.outputDirectory_);
+              break;
+            }
+            case 1792: {
+              result.hasIgnoreGoogleProtobuf = input.ReadBool(ref result.ignoreGoogleProtobuf_);
+              break;
+            }
+            case 1800: {
+              object unknown;
+              if(input.ReadEnum(ref result.serviceGeneratorType_, out unknown)) {
+                result.hasServiceGeneratorType = true;
+              } else if(unknown is int) {
+                if (unknownFields == null) {
+                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
+                }
+                unknownFields.MergeVarintField(225, (ulong)(int)unknown);
+              }
+              break;
+            }
+          }
+        }
+        
+        if (unknownFields != null) {
+          this.UnknownFields = unknownFields.Build();
+        }
+        return this;
+      }
+      
+      
+      public bool HasNamespace {
+        get { return result.hasNamespace; }
+      }
+      public string Namespace {
+        get { return result.Namespace; }
+        set { SetNamespace(value); }
+      }
+      public Builder SetNamespace(string value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        result.hasNamespace = true;
+        result.namespace_ = value;
+        return this;
+      }
+      public Builder ClearNamespace() {
+        PrepareBuilder();
+        result.hasNamespace = false;
+        result.namespace_ = "";
+        return this;
+      }
+      
+      public bool HasUmbrellaClassname {
+        get { return result.hasUmbrellaClassname; }
+      }
+      public string UmbrellaClassname {
+        get { return result.UmbrellaClassname; }
+        set { SetUmbrellaClassname(value); }
+      }
+      public Builder SetUmbrellaClassname(string value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        result.hasUmbrellaClassname = true;
+        result.umbrellaClassname_ = value;
+        return this;
+      }
+      public Builder ClearUmbrellaClassname() {
+        PrepareBuilder();
+        result.hasUmbrellaClassname = false;
+        result.umbrellaClassname_ = "";
+        return this;
+      }
+      
+      public bool HasPublicClasses {
+        get { return result.hasPublicClasses; }
+      }
+      public bool PublicClasses {
+        get { return result.PublicClasses; }
+        set { SetPublicClasses(value); }
+      }
+      public Builder SetPublicClasses(bool value) {
+        PrepareBuilder();
+        result.hasPublicClasses = true;
+        result.publicClasses_ = value;
+        return this;
+      }
+      public Builder ClearPublicClasses() {
+        PrepareBuilder();
+        result.hasPublicClasses = false;
+        result.publicClasses_ = true;
+        return this;
+      }
+      
+      public bool HasMultipleFiles {
+        get { return result.hasMultipleFiles; }
+      }
+      public bool MultipleFiles {
+        get { return result.MultipleFiles; }
+        set { SetMultipleFiles(value); }
+      }
+      public Builder SetMultipleFiles(bool value) {
+        PrepareBuilder();
+        result.hasMultipleFiles = true;
+        result.multipleFiles_ = value;
+        return this;
+      }
+      public Builder ClearMultipleFiles() {
+        PrepareBuilder();
+        result.hasMultipleFiles = false;
+        result.multipleFiles_ = false;
+        return this;
+      }
+      
+      public bool HasNestClasses {
+        get { return result.hasNestClasses; }
+      }
+      public bool NestClasses {
+        get { return result.NestClasses; }
+        set { SetNestClasses(value); }
+      }
+      public Builder SetNestClasses(bool value) {
+        PrepareBuilder();
+        result.hasNestClasses = true;
+        result.nestClasses_ = value;
+        return this;
+      }
+      public Builder ClearNestClasses() {
+        PrepareBuilder();
+        result.hasNestClasses = false;
+        result.nestClasses_ = false;
+        return this;
+      }
+      
+      public bool HasCodeContracts {
+        get { return result.hasCodeContracts; }
+      }
+      public bool CodeContracts {
+        get { return result.CodeContracts; }
+        set { SetCodeContracts(value); }
+      }
+      public Builder SetCodeContracts(bool value) {
+        PrepareBuilder();
+        result.hasCodeContracts = true;
+        result.codeContracts_ = value;
+        return this;
+      }
+      public Builder ClearCodeContracts() {
+        PrepareBuilder();
+        result.hasCodeContracts = false;
+        result.codeContracts_ = false;
+        return this;
+      }
+      
+      public bool HasExpandNamespaceDirectories {
+        get { return result.hasExpandNamespaceDirectories; }
+      }
+      public bool ExpandNamespaceDirectories {
+        get { return result.ExpandNamespaceDirectories; }
+        set { SetExpandNamespaceDirectories(value); }
+      }
+      public Builder SetExpandNamespaceDirectories(bool value) {
+        PrepareBuilder();
+        result.hasExpandNamespaceDirectories = true;
+        result.expandNamespaceDirectories_ = value;
+        return this;
+      }
+      public Builder ClearExpandNamespaceDirectories() {
+        PrepareBuilder();
+        result.hasExpandNamespaceDirectories = false;
+        result.expandNamespaceDirectories_ = false;
+        return this;
+      }
+      
+      public bool HasClsCompliance {
+        get { return result.hasClsCompliance; }
+      }
+      public bool ClsCompliance {
+        get { return result.ClsCompliance; }
+        set { SetClsCompliance(value); }
+      }
+      public Builder SetClsCompliance(bool value) {
+        PrepareBuilder();
+        result.hasClsCompliance = true;
+        result.clsCompliance_ = value;
+        return this;
+      }
+      public Builder ClearClsCompliance() {
+        PrepareBuilder();
+        result.hasClsCompliance = false;
+        result.clsCompliance_ = true;
+        return this;
+      }
+      
+      public bool HasAddSerializable {
+        get { return result.hasAddSerializable; }
+      }
+      public bool AddSerializable {
+        get { return result.AddSerializable; }
+        set { SetAddSerializable(value); }
+      }
+      public Builder SetAddSerializable(bool value) {
+        PrepareBuilder();
+        result.hasAddSerializable = true;
+        result.addSerializable_ = value;
+        return this;
+      }
+      public Builder ClearAddSerializable() {
+        PrepareBuilder();
+        result.hasAddSerializable = false;
+        result.addSerializable_ = false;
+        return this;
+      }
+      
+      public bool HasGeneratePrivateCtor {
+        get { return result.hasGeneratePrivateCtor; }
+      }
+      public bool GeneratePrivateCtor {
+        get { return result.GeneratePrivateCtor; }
+        set { SetGeneratePrivateCtor(value); }
+      }
+      public Builder SetGeneratePrivateCtor(bool value) {
+        PrepareBuilder();
+        result.hasGeneratePrivateCtor = true;
+        result.generatePrivateCtor_ = value;
+        return this;
+      }
+      public Builder ClearGeneratePrivateCtor() {
+        PrepareBuilder();
+        result.hasGeneratePrivateCtor = false;
+        result.generatePrivateCtor_ = true;
+        return this;
+      }
+      
+      public bool HasFileExtension {
+        get { return result.hasFileExtension; }
+      }
+      public string FileExtension {
+        get { return result.FileExtension; }
+        set { SetFileExtension(value); }
+      }
+      public Builder SetFileExtension(string value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        result.hasFileExtension = true;
+        result.fileExtension_ = value;
+        return this;
+      }
+      public Builder ClearFileExtension() {
+        PrepareBuilder();
+        result.hasFileExtension = false;
+        result.fileExtension_ = ".cs";
+        return this;
+      }
+      
+      public bool HasUmbrellaNamespace {
+        get { return result.hasUmbrellaNamespace; }
+      }
+      public string UmbrellaNamespace {
+        get { return result.UmbrellaNamespace; }
+        set { SetUmbrellaNamespace(value); }
+      }
+      public Builder SetUmbrellaNamespace(string value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        result.hasUmbrellaNamespace = true;
+        result.umbrellaNamespace_ = value;
+        return this;
+      }
+      public Builder ClearUmbrellaNamespace() {
+        PrepareBuilder();
+        result.hasUmbrellaNamespace = false;
+        result.umbrellaNamespace_ = "";
+        return this;
+      }
+      
+      public bool HasOutputDirectory {
+        get { return result.hasOutputDirectory; }
+      }
+      public string OutputDirectory {
+        get { return result.OutputDirectory; }
+        set { SetOutputDirectory(value); }
+      }
+      public Builder SetOutputDirectory(string value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        result.hasOutputDirectory = true;
+        result.outputDirectory_ = value;
+        return this;
+      }
+      public Builder ClearOutputDirectory() {
+        PrepareBuilder();
+        result.hasOutputDirectory = false;
+        result.outputDirectory_ = ".";
+        return this;
+      }
+      
+      public bool HasIgnoreGoogleProtobuf {
+        get { return result.hasIgnoreGoogleProtobuf; }
+      }
+      public bool IgnoreGoogleProtobuf {
+        get { return result.IgnoreGoogleProtobuf; }
+        set { SetIgnoreGoogleProtobuf(value); }
+      }
+      public Builder SetIgnoreGoogleProtobuf(bool value) {
+        PrepareBuilder();
+        result.hasIgnoreGoogleProtobuf = true;
+        result.ignoreGoogleProtobuf_ = value;
+        return this;
+      }
+      public Builder ClearIgnoreGoogleProtobuf() {
+        PrepareBuilder();
+        result.hasIgnoreGoogleProtobuf = false;
+        result.ignoreGoogleProtobuf_ = false;
+        return this;
+      }
+      
+      public bool HasServiceGeneratorType {
+       get { return result.hasServiceGeneratorType; }
+      }
+      public global::Google.ProtocolBuffers.DescriptorProtos.CSharpServiceType ServiceGeneratorType {
+        get { return result.ServiceGeneratorType; }
+        set { SetServiceGeneratorType(value); }
+      }
+      public Builder SetServiceGeneratorType(global::Google.ProtocolBuffers.DescriptorProtos.CSharpServiceType value) {
+        PrepareBuilder();
+        result.hasServiceGeneratorType = true;
+        result.serviceGeneratorType_ = value;
+        return this;
+      }
+      public Builder ClearServiceGeneratorType() {
+        PrepareBuilder();
+        result.hasServiceGeneratorType = false;
+        result.serviceGeneratorType_ = global::Google.ProtocolBuffers.DescriptorProtos.CSharpServiceType.NONE;
+        return this;
+      }
+    }
+    static CSharpFileOptions() {
+      object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.Descriptor, null);
+    }
+  }
+  
+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+  [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+  [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
+  public sealed partial class CSharpFieldOptions : pb::GeneratedMessage<CSharpFieldOptions, CSharpFieldOptions.Builder> {
+    private CSharpFieldOptions() { }
+    private static readonly CSharpFieldOptions defaultInstance = new CSharpFieldOptions().MakeReadOnly();
+    private static readonly string[] _cSharpFieldOptionsFieldNames = new string[] { "property_name" };
+    private static readonly uint[] _cSharpFieldOptionsFieldTags = new uint[] { 10 };
+    public static CSharpFieldOptions DefaultInstance {
+      get { return defaultInstance; }
+    }
+    
+    public override CSharpFieldOptions DefaultInstanceForType {
+      get { return DefaultInstance; }
+    }
+    
+    protected override CSharpFieldOptions ThisMessage {
+      get { return this; }
+    }
+    
+    public static pbd::MessageDescriptor Descriptor {
+      get { return global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.internal__static_google_protobuf_CSharpFieldOptions__Descriptor; }
+    }
+    
+    protected override pb::FieldAccess.FieldAccessorTable<CSharpFieldOptions, CSharpFieldOptions.Builder> InternalFieldAccessors {
+      get { return global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.internal__static_google_protobuf_CSharpFieldOptions__FieldAccessorTable; }
+    }
+    
+    public const int PropertyNameFieldNumber = 1;
+    private bool hasPropertyName;
+    private string propertyName_ = "";
+    public bool HasPropertyName {
+      get { return hasPropertyName; }
+    }
+    public string PropertyName {
+      get { return propertyName_; }
+    }
+    
+    public override bool IsInitialized {
+      get {
+        return true;
+      }
+    }
+    
+    public override void WriteTo(pb::ICodedOutputStream output) {
+      int size = SerializedSize;
+      string[] field_names = _cSharpFieldOptionsFieldNames;
+      if (hasPropertyName) {
+        output.WriteString(1, field_names[0], PropertyName);
+      }
+      UnknownFields.WriteTo(output);
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public override int SerializedSize {
+      get {
+        int size = memoizedSerializedSize;
+        if (size != -1) return size;
+        
+        size = 0;
+        if (hasPropertyName) {
+          size += pb::CodedOutputStream.ComputeStringSize(1, PropertyName);
+        }
+        size += UnknownFields.SerializedSize;
+        memoizedSerializedSize = size;
+        return size;
+      }
+    }
+    
+    public static CSharpFieldOptions ParseFrom(pb::ByteString data) {
+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
+    }
+    public static CSharpFieldOptions ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
+    }
+    public static CSharpFieldOptions ParseFrom(byte[] data) {
+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
+    }
+    public static CSharpFieldOptions ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
+    }
+    public static CSharpFieldOptions ParseFrom(global::System.IO.Stream input) {
+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
+    }
+    public static CSharpFieldOptions ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
+    }
+    public static CSharpFieldOptions ParseDelimitedFrom(global::System.IO.Stream input) {
+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
+    }
+    public static CSharpFieldOptions ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
+    }
+    public static CSharpFieldOptions ParseFrom(pb::ICodedInputStream input) {
+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
+    }
+    public static CSharpFieldOptions ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
+    }
+    private CSharpFieldOptions MakeReadOnly() {
+      return this;
+    }
+    
+    public static Builder CreateBuilder() { return new Builder(); }
+    public override Builder ToBuilder() { return CreateBuilder(this); }
+    public override Builder CreateBuilderForType() { return new Builder(); }
+    public static Builder CreateBuilder(CSharpFieldOptions prototype) {
+      return new Builder(prototype);
+    }
+    
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
+    public sealed partial class Builder : pb::GeneratedBuilder<CSharpFieldOptions, Builder> {
+      protected override Builder ThisBuilder {
+        get { return this; }
+      }
+      public Builder() {
+        result = DefaultInstance;
+        resultIsReadOnly = true;
+      }
+      internal Builder(CSharpFieldOptions cloneFrom) {
+        result = cloneFrom;
+        resultIsReadOnly = true;
+      }
+      
+      private bool resultIsReadOnly;
+      private CSharpFieldOptions result;
+      
+      private CSharpFieldOptions PrepareBuilder() {
+        if (resultIsReadOnly) {
+          CSharpFieldOptions original = result;
+          result = new CSharpFieldOptions();
+          resultIsReadOnly = false;
+          MergeFrom(original);
+        }
+        return result;
+      }
+      
+      public override bool IsInitialized {
+        get { return result.IsInitialized; }
+      }
+      
+      protected override CSharpFieldOptions MessageBeingBuilt {
+        get { return PrepareBuilder(); }
+      }
+      
+      public override Builder Clear() {
+        result = DefaultInstance;
+        resultIsReadOnly = true;
+        return this;
+      }
+      
+      public override Builder Clone() {
+        if (resultIsReadOnly) {
+          return new Builder(result);
+        } else {
+          return new Builder().MergeFrom(result);
+        }
+      }
+      
+      public override pbd::MessageDescriptor DescriptorForType {
+        get { return global::Google.ProtocolBuffers.DescriptorProtos.CSharpFieldOptions.Descriptor; }
+      }
+      
+      public override CSharpFieldOptions DefaultInstanceForType {
+        get { return global::Google.ProtocolBuffers.DescriptorProtos.CSharpFieldOptions.DefaultInstance; }
+      }
+      
+      public override CSharpFieldOptions BuildPartial() {
+        if (resultIsReadOnly) {
+          return result;
+        }
+        resultIsReadOnly = true;
+        return result.MakeReadOnly();
+      }
+      
+      public override Builder MergeFrom(pb::IMessage other) {
+        if (other is CSharpFieldOptions) {
+          return MergeFrom((CSharpFieldOptions) other);
+        } else {
+          base.MergeFrom(other);
+          return this;
+        }
+      }
+      
+      public override Builder MergeFrom(CSharpFieldOptions other) {
+        if (other == global::Google.ProtocolBuffers.DescriptorProtos.CSharpFieldOptions.DefaultInstance) return this;
+        PrepareBuilder();
+        if (other.HasPropertyName) {
+          PropertyName = other.PropertyName;
+        }
+        this.MergeUnknownFields(other.UnknownFields);
+        return this;
+      }
+      
+      public override Builder MergeFrom(pb::ICodedInputStream input) {
+        return MergeFrom(input, pb::ExtensionRegistry.Empty);
+      }
+      
+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+        PrepareBuilder();
+        pb::UnknownFieldSet.Builder unknownFields = null;
+        uint tag;
+        string field_name;
+        while (input.ReadTag(out tag, out field_name)) {
+          if(tag == 0 && field_name != null) {
+            int field_ordinal = global::System.Array.BinarySearch(_cSharpFieldOptionsFieldNames, field_name, global::System.StringComparer.Ordinal);
+            if(field_ordinal >= 0)
+              tag = _cSharpFieldOptionsFieldTags[field_ordinal];
+            else {
+              if (unknownFields == null) {
+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
+              }
+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
+              continue;
+            }
+          }
+          switch (tag) {
+            case 0: {
+              throw pb::InvalidProtocolBufferException.InvalidTag();
+            }
+            default: {
+              if (pb::WireFormat.IsEndGroupTag(tag)) {
+                if (unknownFields != null) {
+                  this.UnknownFields = unknownFields.Build();
+                }
+                return this;
+              }
+              if (unknownFields == null) {
+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
+              }
+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
+              break;
+            }
+            case 10: {
+              result.hasPropertyName = input.ReadString(ref result.propertyName_);
+              break;
+            }
+          }
+        }
+        
+        if (unknownFields != null) {
+          this.UnknownFields = unknownFields.Build();
+        }
+        return this;
+      }
+      
+      
+      public bool HasPropertyName {
+        get { return result.hasPropertyName; }
+      }
+      public string PropertyName {
+        get { return result.PropertyName; }
+        set { SetPropertyName(value); }
+      }
+      public Builder SetPropertyName(string value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        result.hasPropertyName = true;
+        result.propertyName_ = value;
+        return this;
+      }
+      public Builder ClearPropertyName() {
+        PrepareBuilder();
+        result.hasPropertyName = false;
+        result.propertyName_ = "";
+        return this;
+      }
+    }
+    static CSharpFieldOptions() {
+      object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.Descriptor, null);
+    }
+  }
+  
+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+  [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+  [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
+  public sealed partial class CSharpServiceOptions : pb::GeneratedMessage<CSharpServiceOptions, CSharpServiceOptions.Builder> {
+    private CSharpServiceOptions() { }
+    private static readonly CSharpServiceOptions defaultInstance = new CSharpServiceOptions().MakeReadOnly();
+    private static readonly string[] _cSharpServiceOptionsFieldNames = new string[] { "interface_id" };
+    private static readonly uint[] _cSharpServiceOptionsFieldTags = new uint[] { 10 };
+    public static CSharpServiceOptions DefaultInstance {
+      get { return defaultInstance; }
+    }
+    
+    public override CSharpServiceOptions DefaultInstanceForType {
+      get { return DefaultInstance; }
+    }
+    
+    protected override CSharpServiceOptions ThisMessage {
+      get { return this; }
+    }
+    
+    public static pbd::MessageDescriptor Descriptor {
+      get { return global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.internal__static_google_protobuf_CSharpServiceOptions__Descriptor; }
+    }
+    
+    protected override pb::FieldAccess.FieldAccessorTable<CSharpServiceOptions, CSharpServiceOptions.Builder> InternalFieldAccessors {
+      get { return global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.internal__static_google_protobuf_CSharpServiceOptions__FieldAccessorTable; }
+    }
+    
+    public const int InterfaceIdFieldNumber = 1;
+    private bool hasInterfaceId;
+    private string interfaceId_ = "";
+    public bool HasInterfaceId {
+      get { return hasInterfaceId; }
+    }
+    public string InterfaceId {
+      get { return interfaceId_; }
+    }
+    
+    public override bool IsInitialized {
+      get {
+        return true;
+      }
+    }
+    
+    public override void WriteTo(pb::ICodedOutputStream output) {
+      int size = SerializedSize;
+      string[] field_names = _cSharpServiceOptionsFieldNames;
+      if (hasInterfaceId) {
+        output.WriteString(1, field_names[0], InterfaceId);
+      }
+      UnknownFields.WriteTo(output);
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public override int SerializedSize {
+      get {
+        int size = memoizedSerializedSize;
+        if (size != -1) return size;
+        
+        size = 0;
+        if (hasInterfaceId) {
+          size += pb::CodedOutputStream.ComputeStringSize(1, InterfaceId);
+        }
+        size += UnknownFields.SerializedSize;
+        memoizedSerializedSize = size;
+        return size;
+      }
+    }
+    
+    public static CSharpServiceOptions ParseFrom(pb::ByteString data) {
+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
+    }
+    public static CSharpServiceOptions ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
+    }
+    public static CSharpServiceOptions ParseFrom(byte[] data) {
+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
+    }
+    public static CSharpServiceOptions ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
+    }
+    public static CSharpServiceOptions ParseFrom(global::System.IO.Stream input) {
+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
+    }
+    public static CSharpServiceOptions ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
+    }
+    public static CSharpServiceOptions ParseDelimitedFrom(global::System.IO.Stream input) {
+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
+    }
+    public static CSharpServiceOptions ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
+    }
+    public static CSharpServiceOptions ParseFrom(pb::ICodedInputStream input) {
+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
+    }
+    public static CSharpServiceOptions ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
+    }
+    private CSharpServiceOptions MakeReadOnly() {
+      return this;
+    }
+    
+    public static Builder CreateBuilder() { return new Builder(); }
+    public override Builder ToBuilder() { return CreateBuilder(this); }
+    public override Builder CreateBuilderForType() { return new Builder(); }
+    public static Builder CreateBuilder(CSharpServiceOptions prototype) {
+      return new Builder(prototype);
+    }
+    
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
+    public sealed partial class Builder : pb::GeneratedBuilder<CSharpServiceOptions, Builder> {
+      protected override Builder ThisBuilder {
+        get { return this; }
+      }
+      public Builder() {
+        result = DefaultInstance;
+        resultIsReadOnly = true;
+      }
+      internal Builder(CSharpServiceOptions cloneFrom) {
+        result = cloneFrom;
+        resultIsReadOnly = true;
+      }
+      
+      private bool resultIsReadOnly;
+      private CSharpServiceOptions result;
+      
+      private CSharpServiceOptions PrepareBuilder() {
+        if (resultIsReadOnly) {
+          CSharpServiceOptions original = result;
+          result = new CSharpServiceOptions();
+          resultIsReadOnly = false;
+          MergeFrom(original);
+        }
+        return result;
+      }
+      
+      public override bool IsInitialized {
+        get { return result.IsInitialized; }
+      }
+      
+      protected override CSharpServiceOptions MessageBeingBuilt {
+        get { return PrepareBuilder(); }
+      }
+      
+      public override Builder Clear() {
+        result = DefaultInstance;
+        resultIsReadOnly = true;
+        return this;
+      }
+      
+      public override Builder Clone() {
+        if (resultIsReadOnly) {
+          return new Builder(result);
+        } else {
+          return new Builder().MergeFrom(result);
+        }
+      }
+      
+      public override pbd::MessageDescriptor DescriptorForType {
+        get { return global::Google.ProtocolBuffers.DescriptorProtos.CSharpServiceOptions.Descriptor; }
+      }
+      
+      public override CSharpServiceOptions DefaultInstanceForType {
+        get { return global::Google.ProtocolBuffers.DescriptorProtos.CSharpServiceOptions.DefaultInstance; }
+      }
+      
+      public override CSharpServiceOptions BuildPartial() {
+        if (resultIsReadOnly) {
+          return result;
+        }
+        resultIsReadOnly = true;
+        return result.MakeReadOnly();
+      }
+      
+      public override Builder MergeFrom(pb::IMessage other) {
+        if (other is CSharpServiceOptions) {
+          return MergeFrom((CSharpServiceOptions) other);
+        } else {
+          base.MergeFrom(other);
+          return this;
+        }
+      }
+      
+      public override Builder MergeFrom(CSharpServiceOptions other) {
+        if (other == global::Google.ProtocolBuffers.DescriptorProtos.CSharpServiceOptions.DefaultInstance) return this;
+        PrepareBuilder();
+        if (other.HasInterfaceId) {
+          InterfaceId = other.InterfaceId;
+        }
+        this.MergeUnknownFields(other.UnknownFields);
+        return this;
+      }
+      
+      public override Builder MergeFrom(pb::ICodedInputStream input) {
+        return MergeFrom(input, pb::ExtensionRegistry.Empty);
+      }
+      
+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+        PrepareBuilder();
+        pb::UnknownFieldSet.Builder unknownFields = null;
+        uint tag;
+        string field_name;
+        while (input.ReadTag(out tag, out field_name)) {
+          if(tag == 0 && field_name != null) {
+            int field_ordinal = global::System.Array.BinarySearch(_cSharpServiceOptionsFieldNames, field_name, global::System.StringComparer.Ordinal);
+            if(field_ordinal >= 0)
+              tag = _cSharpServiceOptionsFieldTags[field_ordinal];
+            else {
+              if (unknownFields == null) {
+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
+              }
+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
+              continue;
+            }
+          }
+          switch (tag) {
+            case 0: {
+              throw pb::InvalidProtocolBufferException.InvalidTag();
+            }
+            default: {
+              if (pb::WireFormat.IsEndGroupTag(tag)) {
+                if (unknownFields != null) {
+                  this.UnknownFields = unknownFields.Build();
+                }
+                return this;
+              }
+              if (unknownFields == null) {
+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
+              }
+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
+              break;
+            }
+            case 10: {
+              result.hasInterfaceId = input.ReadString(ref result.interfaceId_);
+              break;
+            }
+          }
+        }
+        
+        if (unknownFields != null) {
+          this.UnknownFields = unknownFields.Build();
+        }
+        return this;
+      }
+      
+      
+      public bool HasInterfaceId {
+        get { return result.hasInterfaceId; }
+      }
+      public string InterfaceId {
+        get { return result.InterfaceId; }
+        set { SetInterfaceId(value); }
+      }
+      public Builder SetInterfaceId(string value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        result.hasInterfaceId = true;
+        result.interfaceId_ = value;
+        return this;
+      }
+      public Builder ClearInterfaceId() {
+        PrepareBuilder();
+        result.hasInterfaceId = false;
+        result.interfaceId_ = "";
+        return this;
+      }
+    }
+    static CSharpServiceOptions() {
+      object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.Descriptor, null);
+    }
+  }
+  
+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+  [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+  [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
+  public sealed partial class CSharpMethodOptions : pb::GeneratedMessage<CSharpMethodOptions, CSharpMethodOptions.Builder> {
+    private CSharpMethodOptions() { }
+    private static readonly CSharpMethodOptions defaultInstance = new CSharpMethodOptions().MakeReadOnly();
+    private static readonly string[] _cSharpMethodOptionsFieldNames = new string[] { "dispatch_id" };
+    private static readonly uint[] _cSharpMethodOptionsFieldTags = new uint[] { 8 };
+    public static CSharpMethodOptions DefaultInstance {
+      get { return defaultInstance; }
+    }
+    
+    public override CSharpMethodOptions DefaultInstanceForType {
+      get { return DefaultInstance; }
+    }
+    
+    protected override CSharpMethodOptions ThisMessage {
+      get { return this; }
+    }
+    
+    public static pbd::MessageDescriptor Descriptor {
+      get { return global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.internal__static_google_protobuf_CSharpMethodOptions__Descriptor; }
+    }
+    
+    protected override pb::FieldAccess.FieldAccessorTable<CSharpMethodOptions, CSharpMethodOptions.Builder> InternalFieldAccessors {
+      get { return global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.internal__static_google_protobuf_CSharpMethodOptions__FieldAccessorTable; }
+    }
+    
+    public const int DispatchIdFieldNumber = 1;
+    private bool hasDispatchId;
+    private int dispatchId_;
+    public bool HasDispatchId {
+      get { return hasDispatchId; }
+    }
+    public int DispatchId {
+      get { return dispatchId_; }
+    }
+    
+    public override bool IsInitialized {
+      get {
+        return true;
+      }
+    }
+    
+    public override void WriteTo(pb::ICodedOutputStream output) {
+      int size = SerializedSize;
+      string[] field_names = _cSharpMethodOptionsFieldNames;
+      if (hasDispatchId) {
+        output.WriteInt32(1, field_names[0], DispatchId);
+      }
+      UnknownFields.WriteTo(output);
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public override int SerializedSize {
+      get {
+        int size = memoizedSerializedSize;
+        if (size != -1) return size;
+        
+        size = 0;
+        if (hasDispatchId) {
+          size += pb::CodedOutputStream.ComputeInt32Size(1, DispatchId);
+        }
+        size += UnknownFields.SerializedSize;
+        memoizedSerializedSize = size;
+        return size;
+      }
+    }
+    
+    public static CSharpMethodOptions ParseFrom(pb::ByteString data) {
+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
+    }
+    public static CSharpMethodOptions ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
+    }
+    public static CSharpMethodOptions ParseFrom(byte[] data) {
+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
+    }
+    public static CSharpMethodOptions ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
+    }
+    public static CSharpMethodOptions ParseFrom(global::System.IO.Stream input) {
+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
+    }
+    public static CSharpMethodOptions ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
+    }
+    public static CSharpMethodOptions ParseDelimitedFrom(global::System.IO.Stream input) {
+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
+    }
+    public static CSharpMethodOptions ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
+    }
+    public static CSharpMethodOptions ParseFrom(pb::ICodedInputStream input) {
+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
+    }
+    public static CSharpMethodOptions ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
+    }
+    private CSharpMethodOptions MakeReadOnly() {
+      return this;
+    }
+    
+    public static Builder CreateBuilder() { return new Builder(); }
+    public override Builder ToBuilder() { return CreateBuilder(this); }
+    public override Builder CreateBuilderForType() { return new Builder(); }
+    public static Builder CreateBuilder(CSharpMethodOptions prototype) {
+      return new Builder(prototype);
+    }
+    
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
+    public sealed partial class Builder : pb::GeneratedBuilder<CSharpMethodOptions, Builder> {
+      protected override Builder ThisBuilder {
+        get { return this; }
+      }
+      public Builder() {
+        result = DefaultInstance;
+        resultIsReadOnly = true;
+      }
+      internal Builder(CSharpMethodOptions cloneFrom) {
+        result = cloneFrom;
+        resultIsReadOnly = true;
+      }
+      
+      private bool resultIsReadOnly;
+      private CSharpMethodOptions result;
+      
+      private CSharpMethodOptions PrepareBuilder() {
+        if (resultIsReadOnly) {
+          CSharpMethodOptions original = result;
+          result = new CSharpMethodOptions();
+          resultIsReadOnly = false;
+          MergeFrom(original);
+        }
+        return result;
+      }
+      
+      public override bool IsInitialized {
+        get { return result.IsInitialized; }
+      }
+      
+      protected override CSharpMethodOptions MessageBeingBuilt {
+        get { return PrepareBuilder(); }
+      }
+      
+      public override Builder Clear() {
+        result = DefaultInstance;
+        resultIsReadOnly = true;
+        return this;
+      }
+      
+      public override Builder Clone() {
+        if (resultIsReadOnly) {
+          return new Builder(result);
+        } else {
+          return new Builder().MergeFrom(result);
+        }
+      }
+      
+      public override pbd::MessageDescriptor DescriptorForType {
+        get { return global::Google.ProtocolBuffers.DescriptorProtos.CSharpMethodOptions.Descriptor; }
+      }
+      
+      public override CSharpMethodOptions DefaultInstanceForType {
+        get { return global::Google.ProtocolBuffers.DescriptorProtos.CSharpMethodOptions.DefaultInstance; }
+      }
+      
+      public override CSharpMethodOptions BuildPartial() {
+        if (resultIsReadOnly) {
+          return result;
+        }
+        resultIsReadOnly = true;
+        return result.MakeReadOnly();
+      }
+      
+      public override Builder MergeFrom(pb::IMessage other) {
+        if (other is CSharpMethodOptions) {
+          return MergeFrom((CSharpMethodOptions) other);
+        } else {
+          base.MergeFrom(other);
+          return this;
+        }
+      }
+      
+      public override Builder MergeFrom(CSharpMethodOptions other) {
+        if (other == global::Google.ProtocolBuffers.DescriptorProtos.CSharpMethodOptions.DefaultInstance) return this;
+        PrepareBuilder();
+        if (other.HasDispatchId) {
+          DispatchId = other.DispatchId;
+        }
+        this.MergeUnknownFields(other.UnknownFields);
+        return this;
+      }
+      
+      public override Builder MergeFrom(pb::ICodedInputStream input) {
+        return MergeFrom(input, pb::ExtensionRegistry.Empty);
+      }
+      
+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+        PrepareBuilder();
+        pb::UnknownFieldSet.Builder unknownFields = null;
+        uint tag;
+        string field_name;
+        while (input.ReadTag(out tag, out field_name)) {
+          if(tag == 0 && field_name != null) {
+            int field_ordinal = global::System.Array.BinarySearch(_cSharpMethodOptionsFieldNames, field_name, global::System.StringComparer.Ordinal);
+            if(field_ordinal >= 0)
+              tag = _cSharpMethodOptionsFieldTags[field_ordinal];
+            else {
+              if (unknownFields == null) {
+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
+              }
+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
+              continue;
+            }
+          }
+          switch (tag) {
+            case 0: {
+              throw pb::InvalidProtocolBufferException.InvalidTag();
+            }
+            default: {
+              if (pb::WireFormat.IsEndGroupTag(tag)) {
+                if (unknownFields != null) {
+                  this.UnknownFields = unknownFields.Build();
+                }
+                return this;
+              }
+              if (unknownFields == null) {
+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
+              }
+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
+              break;
+            }
+            case 8: {
+              result.hasDispatchId = input.ReadInt32(ref result.dispatchId_);
+              break;
+            }
+          }
+        }
+        
+        if (unknownFields != null) {
+          this.UnknownFields = unknownFields.Build();
+        }
+        return this;
+      }
+      
+      
+      public bool HasDispatchId {
+        get { return result.hasDispatchId; }
+      }
+      public int DispatchId {
+        get { return result.DispatchId; }
+        set { SetDispatchId(value); }
+      }
+      public Builder SetDispatchId(int value) {
+        PrepareBuilder();
+        result.hasDispatchId = true;
+        result.dispatchId_ = value;
+        return this;
+      }
+      public Builder ClearDispatchId() {
+        PrepareBuilder();
+        result.hasDispatchId = false;
+        result.dispatchId_ = 0;
+        return this;
+      }
+    }
+    static CSharpMethodOptions() {
+      object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.Descriptor, null);
+    }
+  }
+  
+  #endregion
+  
+}
+
+#endregion Designer generated code

+ 9111 - 9111
CSharp/Modules/BehaviorTree/DescriptorProtoFile.cs → CSharp/App/Modules/BehaviorTree/DescriptorProtoFile.cs

@@ -1,9111 +1,9111 @@
-// Generated by ProtoGen, Version=2.4.1.473, Culture=neutral, PublicKeyToken=55f7125234beb589.  DO NOT EDIT!
-#pragma warning disable 1591, 0612
-#region Designer generated code
-
-using pb = global::Google.ProtocolBuffers;
-using pbc = global::Google.ProtocolBuffers.Collections;
-using pbd = global::Google.ProtocolBuffers.Descriptors;
-using scg = global::System.Collections.Generic;
-namespace Google.ProtocolBuffers.DescriptorProtos {
-  
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
-  [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
-  public static partial class DescriptorProtoFile {
-  
-    #region Extension registration
-    public static void RegisterAllExtensions(pb::ExtensionRegistry registry) {
-    }
-    #endregion
-    #region Static variables
-    internal static pbd::MessageDescriptor internal__static_google_protobuf_FileDescriptorSet__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorSet, global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorSet.Builder> internal__static_google_protobuf_FileDescriptorSet__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_google_protobuf_FileDescriptorProto__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto, global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto.Builder> internal__static_google_protobuf_FileDescriptorProto__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_google_protobuf_DescriptorProto__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto, global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Builder> internal__static_google_protobuf_DescriptorProto__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_google_protobuf_DescriptorProto_ExtensionRange__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Types.ExtensionRange, global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Types.ExtensionRange.Builder> internal__static_google_protobuf_DescriptorProto_ExtensionRange__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_google_protobuf_FieldDescriptorProto__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto, global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Builder> internal__static_google_protobuf_FieldDescriptorProto__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_google_protobuf_EnumDescriptorProto__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto, global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto.Builder> internal__static_google_protobuf_EnumDescriptorProto__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_google_protobuf_EnumValueDescriptorProto__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.EnumValueDescriptorProto, global::Google.ProtocolBuffers.DescriptorProtos.EnumValueDescriptorProto.Builder> internal__static_google_protobuf_EnumValueDescriptorProto__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_google_protobuf_ServiceDescriptorProto__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.ServiceDescriptorProto, global::Google.ProtocolBuffers.DescriptorProtos.ServiceDescriptorProto.Builder> internal__static_google_protobuf_ServiceDescriptorProto__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_google_protobuf_MethodDescriptorProto__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.MethodDescriptorProto, global::Google.ProtocolBuffers.DescriptorProtos.MethodDescriptorProto.Builder> internal__static_google_protobuf_MethodDescriptorProto__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_google_protobuf_FileOptions__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.FileOptions, global::Google.ProtocolBuffers.DescriptorProtos.FileOptions.Builder> internal__static_google_protobuf_FileOptions__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_google_protobuf_MessageOptions__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.MessageOptions, global::Google.ProtocolBuffers.DescriptorProtos.MessageOptions.Builder> internal__static_google_protobuf_MessageOptions__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_google_protobuf_FieldOptions__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions, global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions.Builder> internal__static_google_protobuf_FieldOptions__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_google_protobuf_EnumOptions__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.EnumOptions, global::Google.ProtocolBuffers.DescriptorProtos.EnumOptions.Builder> internal__static_google_protobuf_EnumOptions__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_google_protobuf_EnumValueOptions__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.EnumValueOptions, global::Google.ProtocolBuffers.DescriptorProtos.EnumValueOptions.Builder> internal__static_google_protobuf_EnumValueOptions__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_google_protobuf_ServiceOptions__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.ServiceOptions, global::Google.ProtocolBuffers.DescriptorProtos.ServiceOptions.Builder> internal__static_google_protobuf_ServiceOptions__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_google_protobuf_MethodOptions__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.MethodOptions, global::Google.ProtocolBuffers.DescriptorProtos.MethodOptions.Builder> internal__static_google_protobuf_MethodOptions__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_google_protobuf_UninterpretedOption__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Builder> internal__static_google_protobuf_UninterpretedOption__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_google_protobuf_UninterpretedOption_NamePart__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Types.NamePart, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Types.NamePart.Builder> internal__static_google_protobuf_UninterpretedOption_NamePart__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_google_protobuf_SourceCodeInfo__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo, global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Builder> internal__static_google_protobuf_SourceCodeInfo__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_google_protobuf_SourceCodeInfo_Location__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Types.Location, global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Types.Location.Builder> internal__static_google_protobuf_SourceCodeInfo_Location__FieldAccessorTable;
-    #endregion
-    #region Descriptor
-    public static pbd::FileDescriptor Descriptor {
-      get { return descriptor; }
-    }
-    private static pbd::FileDescriptor descriptor;
-    
-    static DescriptorProtoFile() {
-      byte[] descriptorData = global::System.Convert.FromBase64String(
-          "CiBnb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5wcm90bxIPZ29vZ2xlLnBy" + 
-          "b3RvYnVmIkcKEUZpbGVEZXNjcmlwdG9yU2V0EjIKBGZpbGUYASADKAsyJC5n" + 
-          "b29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90byKXAwoTRmlsZURl" + 
-          "c2NyaXB0b3JQcm90bxIMCgRuYW1lGAEgASgJEg8KB3BhY2thZ2UYAiABKAkS" + 
-          "EgoKZGVwZW5kZW5jeRgDIAMoCRI2CgxtZXNzYWdlX3R5cGUYBCADKAsyIC5n" + 
-          "b29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvEjcKCWVudW1fdHlwZRgF" + 
-          "IAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvEjgK" + 
-          "B3NlcnZpY2UYBiADKAsyJy5nb29nbGUucHJvdG9idWYuU2VydmljZURlc2Ny" + 
-          "aXB0b3JQcm90bxI4CglleHRlbnNpb24YByADKAsyJS5nb29nbGUucHJvdG9i" + 
-          "dWYuRmllbGREZXNjcmlwdG9yUHJvdG8SLQoHb3B0aW9ucxgIIAEoCzIcLmdv" + 
-          "b2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucxI5ChBzb3VyY2VfY29kZV9pbmZv" + 
-          "GAkgASgLMh8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvIqkDCg9E" + 
-          "ZXNjcmlwdG9yUHJvdG8SDAoEbmFtZRgBIAEoCRI0CgVmaWVsZBgCIAMoCzIl" + 
-          "Lmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90bxI4CglleHRl" + 
-          "bnNpb24YBiADKAsyJS5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9y" + 
-          "UHJvdG8SNQoLbmVzdGVkX3R5cGUYAyADKAsyIC5nb29nbGUucHJvdG9idWYu" + 
-          "RGVzY3JpcHRvclByb3RvEjcKCWVudW1fdHlwZRgEIAMoCzIkLmdvb2dsZS5w" + 
-          "cm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvEkgKD2V4dGVuc2lvbl9yYW5n" + 
-          "ZRgFIAMoCzIvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uRXh0" + 
-          "ZW5zaW9uUmFuZ2USMAoHb3B0aW9ucxgHIAEoCzIfLmdvb2dsZS5wcm90b2J1" + 
-          "Zi5NZXNzYWdlT3B0aW9ucxosCg5FeHRlbnNpb25SYW5nZRINCgVzdGFydBgB" + 
-          "IAEoBRILCgNlbmQYAiABKAUilAUKFEZpZWxkRGVzY3JpcHRvclByb3RvEgwK" + 
-          "BG5hbWUYASABKAkSDgoGbnVtYmVyGAMgASgFEjoKBWxhYmVsGAQgASgOMisu" + 
-          "Z29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLkxhYmVsEjgK" + 
-          "BHR5cGUYBSABKA4yKi5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9y" + 
-          "UHJvdG8uVHlwZRIRCgl0eXBlX25hbWUYBiABKAkSEAoIZXh0ZW5kZWUYAiAB" + 
-          "KAkSFQoNZGVmYXVsdF92YWx1ZRgHIAEoCRIuCgdvcHRpb25zGAggASgLMh0u" + 
-          "Z29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucyK2AgoEVHlwZRIPCgtUWVBF" + 
-          "X0RPVUJMRRABEg4KClRZUEVfRkxPQVQQAhIOCgpUWVBFX0lOVDY0EAMSDwoL" + 
-          "VFlQRV9VSU5UNjQQBBIOCgpUWVBFX0lOVDMyEAUSEAoMVFlQRV9GSVhFRDY0" + 
-          "EAYSEAoMVFlQRV9GSVhFRDMyEAcSDQoJVFlQRV9CT09MEAgSDwoLVFlQRV9T" + 
-          "VFJJTkcQCRIOCgpUWVBFX0dST1VQEAoSEAoMVFlQRV9NRVNTQUdFEAsSDgoK" + 
-          "VFlQRV9CWVRFUxAMEg8KC1RZUEVfVUlOVDMyEA0SDQoJVFlQRV9FTlVNEA4S" + 
-          "EQoNVFlQRV9TRklYRUQzMhAPEhEKDVRZUEVfU0ZJWEVENjQQEBIPCgtUWVBF" + 
-          "X1NJTlQzMhAREg8KC1RZUEVfU0lOVDY0EBIiQwoFTGFiZWwSEgoOTEFCRUxf" + 
-          "T1BUSU9OQUwQARISCg5MQUJFTF9SRVFVSVJFRBACEhIKDkxBQkVMX1JFUEVB" + 
-          "VEVEEAMijAEKE0VudW1EZXNjcmlwdG9yUHJvdG8SDAoEbmFtZRgBIAEoCRI4" + 
-          "CgV2YWx1ZRgCIAMoCzIpLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNj" + 
-          "cmlwdG9yUHJvdG8SLQoHb3B0aW9ucxgDIAEoCzIcLmdvb2dsZS5wcm90b2J1" + 
-          "Zi5FbnVtT3B0aW9ucyJsChhFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8SDAoE" + 
-          "bmFtZRgBIAEoCRIOCgZudW1iZXIYAiABKAUSMgoHb3B0aW9ucxgDIAEoCzIh" + 
-          "Lmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zIpABChZTZXJ2aWNl" + 
-          "RGVzY3JpcHRvclByb3RvEgwKBG5hbWUYASABKAkSNgoGbWV0aG9kGAIgAygL" + 
-          "MiYuZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90bxIwCgdv" + 
-          "cHRpb25zGAMgASgLMh8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25z" + 
-          "In8KFU1ldGhvZERlc2NyaXB0b3JQcm90bxIMCgRuYW1lGAEgASgJEhIKCmlu" + 
-          "cHV0X3R5cGUYAiABKAkSEwoLb3V0cHV0X3R5cGUYAyABKAkSLwoHb3B0aW9u" + 
-          "cxgEIAEoCzIeLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zItUDCgtG" + 
-          "aWxlT3B0aW9ucxIUCgxqYXZhX3BhY2thZ2UYASABKAkSHAoUamF2YV9vdXRl" + 
-          "cl9jbGFzc25hbWUYCCABKAkSIgoTamF2YV9tdWx0aXBsZV9maWxlcxgKIAEo" + 
-          "CDoFZmFsc2USLAodamF2YV9nZW5lcmF0ZV9lcXVhbHNfYW5kX2hhc2gYFCAB" + 
-          "KAg6BWZhbHNlEkYKDG9wdGltaXplX2ZvchgJIAEoDjIpLmdvb2dsZS5wcm90" + 
-          "b2J1Zi5GaWxlT3B0aW9ucy5PcHRpbWl6ZU1vZGU6BVNQRUVEEiIKE2NjX2dl" + 
-          "bmVyaWNfc2VydmljZXMYECABKAg6BWZhbHNlEiQKFWphdmFfZ2VuZXJpY19z" + 
-          "ZXJ2aWNlcxgRIAEoCDoFZmFsc2USIgoTcHlfZ2VuZXJpY19zZXJ2aWNlcxgS" + 
-          "IAEoCDoFZmFsc2USQwoUdW5pbnRlcnByZXRlZF9vcHRpb24Y5wcgAygLMiQu" + 
-          "Z29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24iOgoMT3B0aW1p" + 
-          "emVNb2RlEgkKBVNQRUVEEAESDQoJQ09ERV9TSVpFEAISEAoMTElURV9SVU5U" + 
-          "SU1FEAMqCQjoBxCAgICAAiK4AQoOTWVzc2FnZU9wdGlvbnMSJgoXbWVzc2Fn" + 
-          "ZV9zZXRfd2lyZV9mb3JtYXQYASABKAg6BWZhbHNlEi4KH25vX3N0YW5kYXJk" + 
-          "X2Rlc2NyaXB0b3JfYWNjZXNzb3IYAiABKAg6BWZhbHNlEkMKFHVuaW50ZXJw" + 
-          "cmV0ZWRfb3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVy" + 
-          "cHJldGVkT3B0aW9uKgkI6AcQgICAgAIilAIKDEZpZWxkT3B0aW9ucxI6CgVj" + 
-          "dHlwZRgBIAEoDjIjLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuQ1R5" + 
-          "cGU6BlNUUklORxIOCgZwYWNrZWQYAiABKAgSGQoKZGVwcmVjYXRlZBgDIAEo" + 
-          "CDoFZmFsc2USHAoUZXhwZXJpbWVudGFsX21hcF9rZXkYCSABKAkSQwoUdW5p" + 
-          "bnRlcnByZXRlZF9vcHRpb24Y5wcgAygLMiQuZ29vZ2xlLnByb3RvYnVmLlVu" + 
-          "aW50ZXJwcmV0ZWRPcHRpb24iLwoFQ1R5cGUSCgoGU1RSSU5HEAASCAoEQ09S" + 
-          "RBABEhAKDFNUUklOR19QSUVDRRACKgkI6AcQgICAgAIiXQoLRW51bU9wdGlv" + 
-          "bnMSQwoUdW5pbnRlcnByZXRlZF9vcHRpb24Y5wcgAygLMiQuZ29vZ2xlLnBy" + 
-          "b3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24qCQjoBxCAgICAAiJiChBFbnVt" + 
-          "VmFsdWVPcHRpb25zEkMKFHVuaW50ZXJwcmV0ZWRfb3B0aW9uGOcHIAMoCzIk" + 
-          "Lmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uKgkI6AcQgICA" + 
-          "gAIiYAoOU2VydmljZU9wdGlvbnMSQwoUdW5pbnRlcnByZXRlZF9vcHRpb24Y" + 
-          "5wcgAygLMiQuZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24q" + 
-          "CQjoBxCAgICAAiJfCg1NZXRob2RPcHRpb25zEkMKFHVuaW50ZXJwcmV0ZWRf" + 
-          "b3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVk" + 
-          "T3B0aW9uKgkI6AcQgICAgAIingIKE1VuaW50ZXJwcmV0ZWRPcHRpb24SOwoE" + 
-          "bmFtZRgCIAMoCzItLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0" + 
-          "aW9uLk5hbWVQYXJ0EhgKEGlkZW50aWZpZXJfdmFsdWUYAyABKAkSGgoScG9z" + 
-          "aXRpdmVfaW50X3ZhbHVlGAQgASgEEhoKEm5lZ2F0aXZlX2ludF92YWx1ZRgF" + 
-          "IAEoAxIUCgxkb3VibGVfdmFsdWUYBiABKAESFAoMc3RyaW5nX3ZhbHVlGAcg" + 
-          "ASgMEhcKD2FnZ3JlZ2F0ZV92YWx1ZRgIIAEoCRozCghOYW1lUGFydBIRCglu" + 
-          "YW1lX3BhcnQYASACKAkSFAoMaXNfZXh0ZW5zaW9uGAIgAigIInwKDlNvdXJj" + 
-          "ZUNvZGVJbmZvEjoKCGxvY2F0aW9uGAEgAygLMiguZ29vZ2xlLnByb3RvYnVm" + 
-          "LlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uGi4KCExvY2F0aW9uEhAKBHBhdGgY" + 
-          "ASADKAVCAhABEhAKBHNwYW4YAiADKAVCAhABQikKE2NvbS5nb29nbGUucHJv" + 
-          "dG9idWZCEERlc2NyaXB0b3JQcm90b3NIAQ==");
-      pbd::FileDescriptor.InternalDescriptorAssigner assigner = delegate(pbd::FileDescriptor root) {
-        descriptor = root;
-        internal__static_google_protobuf_FileDescriptorSet__Descriptor = Descriptor.MessageTypes[0];
-        internal__static_google_protobuf_FileDescriptorSet__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorSet, global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorSet.Builder>(internal__static_google_protobuf_FileDescriptorSet__Descriptor,
-                new string[] { "File", });
-        internal__static_google_protobuf_FileDescriptorProto__Descriptor = Descriptor.MessageTypes[1];
-        internal__static_google_protobuf_FileDescriptorProto__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto, global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto.Builder>(internal__static_google_protobuf_FileDescriptorProto__Descriptor,
-                new string[] { "Name", "Package", "Dependency", "MessageType", "EnumType", "Service", "Extension", "Options", "SourceCodeInfo", });
-        internal__static_google_protobuf_DescriptorProto__Descriptor = Descriptor.MessageTypes[2];
-        internal__static_google_protobuf_DescriptorProto__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto, global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Builder>(internal__static_google_protobuf_DescriptorProto__Descriptor,
-                new string[] { "Name", "Field", "Extension", "NestedType", "EnumType", "ExtensionRange", "Options", });
-        internal__static_google_protobuf_DescriptorProto_ExtensionRange__Descriptor = internal__static_google_protobuf_DescriptorProto__Descriptor.NestedTypes[0];
-        internal__static_google_protobuf_DescriptorProto_ExtensionRange__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Types.ExtensionRange, global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Types.ExtensionRange.Builder>(internal__static_google_protobuf_DescriptorProto_ExtensionRange__Descriptor,
-                new string[] { "Start", "End", });
-        internal__static_google_protobuf_FieldDescriptorProto__Descriptor = Descriptor.MessageTypes[3];
-        internal__static_google_protobuf_FieldDescriptorProto__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto, global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Builder>(internal__static_google_protobuf_FieldDescriptorProto__Descriptor,
-                new string[] { "Name", "Number", "Label", "Type", "TypeName", "Extendee", "DefaultValue", "Options", });
-        internal__static_google_protobuf_EnumDescriptorProto__Descriptor = Descriptor.MessageTypes[4];
-        internal__static_google_protobuf_EnumDescriptorProto__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto, global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto.Builder>(internal__static_google_protobuf_EnumDescriptorProto__Descriptor,
-                new string[] { "Name", "Value", "Options", });
-        internal__static_google_protobuf_EnumValueDescriptorProto__Descriptor = Descriptor.MessageTypes[5];
-        internal__static_google_protobuf_EnumValueDescriptorProto__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.EnumValueDescriptorProto, global::Google.ProtocolBuffers.DescriptorProtos.EnumValueDescriptorProto.Builder>(internal__static_google_protobuf_EnumValueDescriptorProto__Descriptor,
-                new string[] { "Name", "Number", "Options", });
-        internal__static_google_protobuf_ServiceDescriptorProto__Descriptor = Descriptor.MessageTypes[6];
-        internal__static_google_protobuf_ServiceDescriptorProto__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.ServiceDescriptorProto, global::Google.ProtocolBuffers.DescriptorProtos.ServiceDescriptorProto.Builder>(internal__static_google_protobuf_ServiceDescriptorProto__Descriptor,
-                new string[] { "Name", "Method", "Options", });
-        internal__static_google_protobuf_MethodDescriptorProto__Descriptor = Descriptor.MessageTypes[7];
-        internal__static_google_protobuf_MethodDescriptorProto__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.MethodDescriptorProto, global::Google.ProtocolBuffers.DescriptorProtos.MethodDescriptorProto.Builder>(internal__static_google_protobuf_MethodDescriptorProto__Descriptor,
-                new string[] { "Name", "InputType", "OutputType", "Options", });
-        internal__static_google_protobuf_FileOptions__Descriptor = Descriptor.MessageTypes[8];
-        internal__static_google_protobuf_FileOptions__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.FileOptions, global::Google.ProtocolBuffers.DescriptorProtos.FileOptions.Builder>(internal__static_google_protobuf_FileOptions__Descriptor,
-                new string[] { "JavaPackage", "JavaOuterClassname", "JavaMultipleFiles", "JavaGenerateEqualsAndHash", "OptimizeFor", "CcGenericServices", "JavaGenericServices", "PyGenericServices", "UninterpretedOption", });
-        internal__static_google_protobuf_MessageOptions__Descriptor = Descriptor.MessageTypes[9];
-        internal__static_google_protobuf_MessageOptions__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.MessageOptions, global::Google.ProtocolBuffers.DescriptorProtos.MessageOptions.Builder>(internal__static_google_protobuf_MessageOptions__Descriptor,
-                new string[] { "MessageSetWireFormat", "NoStandardDescriptorAccessor", "UninterpretedOption", });
-        internal__static_google_protobuf_FieldOptions__Descriptor = Descriptor.MessageTypes[10];
-        internal__static_google_protobuf_FieldOptions__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions, global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions.Builder>(internal__static_google_protobuf_FieldOptions__Descriptor,
-                new string[] { "Ctype", "Packed", "Deprecated", "ExperimentalMapKey", "UninterpretedOption", });
-        internal__static_google_protobuf_EnumOptions__Descriptor = Descriptor.MessageTypes[11];
-        internal__static_google_protobuf_EnumOptions__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.EnumOptions, global::Google.ProtocolBuffers.DescriptorProtos.EnumOptions.Builder>(internal__static_google_protobuf_EnumOptions__Descriptor,
-                new string[] { "UninterpretedOption", });
-        internal__static_google_protobuf_EnumValueOptions__Descriptor = Descriptor.MessageTypes[12];
-        internal__static_google_protobuf_EnumValueOptions__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.EnumValueOptions, global::Google.ProtocolBuffers.DescriptorProtos.EnumValueOptions.Builder>(internal__static_google_protobuf_EnumValueOptions__Descriptor,
-                new string[] { "UninterpretedOption", });
-        internal__static_google_protobuf_ServiceOptions__Descriptor = Descriptor.MessageTypes[13];
-        internal__static_google_protobuf_ServiceOptions__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.ServiceOptions, global::Google.ProtocolBuffers.DescriptorProtos.ServiceOptions.Builder>(internal__static_google_protobuf_ServiceOptions__Descriptor,
-                new string[] { "UninterpretedOption", });
-        internal__static_google_protobuf_MethodOptions__Descriptor = Descriptor.MessageTypes[14];
-        internal__static_google_protobuf_MethodOptions__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.MethodOptions, global::Google.ProtocolBuffers.DescriptorProtos.MethodOptions.Builder>(internal__static_google_protobuf_MethodOptions__Descriptor,
-                new string[] { "UninterpretedOption", });
-        internal__static_google_protobuf_UninterpretedOption__Descriptor = Descriptor.MessageTypes[15];
-        internal__static_google_protobuf_UninterpretedOption__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Builder>(internal__static_google_protobuf_UninterpretedOption__Descriptor,
-                new string[] { "Name", "IdentifierValue", "PositiveIntValue", "NegativeIntValue", "DoubleValue", "StringValue", "AggregateValue", });
-        internal__static_google_protobuf_UninterpretedOption_NamePart__Descriptor = internal__static_google_protobuf_UninterpretedOption__Descriptor.NestedTypes[0];
-        internal__static_google_protobuf_UninterpretedOption_NamePart__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Types.NamePart, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Types.NamePart.Builder>(internal__static_google_protobuf_UninterpretedOption_NamePart__Descriptor,
-                new string[] { "NamePart_", "IsExtension", });
-        internal__static_google_protobuf_SourceCodeInfo__Descriptor = Descriptor.MessageTypes[16];
-        internal__static_google_protobuf_SourceCodeInfo__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo, global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Builder>(internal__static_google_protobuf_SourceCodeInfo__Descriptor,
-                new string[] { "Location", });
-        internal__static_google_protobuf_SourceCodeInfo_Location__Descriptor = internal__static_google_protobuf_SourceCodeInfo__Descriptor.NestedTypes[0];
-        internal__static_google_protobuf_SourceCodeInfo_Location__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Types.Location, global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Types.Location.Builder>(internal__static_google_protobuf_SourceCodeInfo_Location__Descriptor,
-                new string[] { "Path", "Span", });
-        return null;
-      };
-      pbd::FileDescriptor.InternalBuildGeneratedFileFrom(descriptorData,
-          new pbd::FileDescriptor[] {
-          }, assigner);
-    }
-    #endregion
-    
-  }
-  #region Messages
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
-  [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
-  public sealed partial class FileDescriptorSet : pb::GeneratedMessage<FileDescriptorSet, FileDescriptorSet.Builder> {
-    private FileDescriptorSet() { }
-    private static readonly FileDescriptorSet defaultInstance = new FileDescriptorSet().MakeReadOnly();
-    private static readonly string[] _fileDescriptorSetFieldNames = new string[] { "file" };
-    private static readonly uint[] _fileDescriptorSetFieldTags = new uint[] { 10 };
-    public static FileDescriptorSet DefaultInstance {
-      get { return defaultInstance; }
-    }
-    
-    public override FileDescriptorSet DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-    
-    protected override FileDescriptorSet ThisMessage {
-      get { return this; }
-    }
-    
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_FileDescriptorSet__Descriptor; }
-    }
-    
-    protected override pb::FieldAccess.FieldAccessorTable<FileDescriptorSet, FileDescriptorSet.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_FileDescriptorSet__FieldAccessorTable; }
-    }
-    
-    public const int FileFieldNumber = 1;
-    private pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto> file_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto>();
-    public scg::IList<global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto> FileList {
-      get { return file_; }
-    }
-    public int FileCount {
-      get { return file_.Count; }
-    }
-    public global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto GetFile(int index) {
-      return file_[index];
-    }
-    
-    public override bool IsInitialized {
-      get {
-        foreach (global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto element in FileList) {
-          if (!element.IsInitialized) return false;
-        }
-        return true;
-      }
-    }
-    
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      int size = SerializedSize;
-      string[] field_names = _fileDescriptorSetFieldNames;
-      if (file_.Count > 0) {
-        output.WriteMessageArray(1, field_names[0], file_);
-      }
-      UnknownFields.WriteTo(output);
-    }
-    
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        
-        size = 0;
-        foreach (global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto element in FileList) {
-          size += pb::CodedOutputStream.ComputeMessageSize(1, element);
-        }
-        size += UnknownFields.SerializedSize;
-        memoizedSerializedSize = size;
-        return size;
-      }
-    }
-    
-    public static FileDescriptorSet ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static FileDescriptorSet ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static FileDescriptorSet ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static FileDescriptorSet ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static FileDescriptorSet ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static FileDescriptorSet ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static FileDescriptorSet ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static FileDescriptorSet ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static FileDescriptorSet ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static FileDescriptorSet ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private FileDescriptorSet MakeReadOnly() {
-      file_.MakeReadOnly();
-      return this;
-    }
-    
-    public static Builder CreateBuilder() { return new Builder(); }
-    public override Builder ToBuilder() { return CreateBuilder(this); }
-    public override Builder CreateBuilderForType() { return new Builder(); }
-    public static Builder CreateBuilder(FileDescriptorSet prototype) {
-      return new Builder(prototype);
-    }
-    
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
-    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
-    public sealed partial class Builder : pb::GeneratedBuilder<FileDescriptorSet, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(FileDescriptorSet cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-      
-      private bool resultIsReadOnly;
-      private FileDescriptorSet result;
-      
-      private FileDescriptorSet PrepareBuilder() {
-        if (resultIsReadOnly) {
-          FileDescriptorSet original = result;
-          result = new FileDescriptorSet();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-      
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-      
-      protected override FileDescriptorSet MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-      
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-      
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-      
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorSet.Descriptor; }
-      }
-      
-      public override FileDescriptorSet DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorSet.DefaultInstance; }
-      }
-      
-      public override FileDescriptorSet BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-      
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is FileDescriptorSet) {
-          return MergeFrom((FileDescriptorSet) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-      
-      public override Builder MergeFrom(FileDescriptorSet other) {
-        if (other == global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorSet.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.file_.Count != 0) {
-          result.file_.Add(other.file_);
-        }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-      
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-      
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_fileDescriptorSetFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _fileDescriptorSetFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            default: {
-              if (pb::WireFormat.IsEndGroupTag(tag)) {
-                if (unknownFields != null) {
-                  this.UnknownFields = unknownFields.Build();
-                }
-                return this;
-              }
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              break;
-            }
-            case 10: {
-              input.ReadMessageArray(tag, field_name, result.file_, global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto.DefaultInstance, extensionRegistry);
-              break;
-            }
-          }
-        }
-        
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-      
-      
-      public pbc::IPopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto> FileList {
-        get { return PrepareBuilder().file_; }
-      }
-      public int FileCount {
-        get { return result.FileCount; }
-      }
-      public global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto GetFile(int index) {
-        return result.GetFile(index);
-      }
-      public Builder SetFile(int index, global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.file_[index] = value;
-        return this;
-      }
-      public Builder SetFile(int index, global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.file_[index] = builderForValue.Build();
-        return this;
-      }
-      public Builder AddFile(global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.file_.Add(value);
-        return this;
-      }
-      public Builder AddFile(global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.file_.Add(builderForValue.Build());
-        return this;
-      }
-      public Builder AddRangeFile(scg::IEnumerable<global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto> values) {
-        PrepareBuilder();
-        result.file_.Add(values);
-        return this;
-      }
-      public Builder ClearFile() {
-        PrepareBuilder();
-        result.file_.Clear();
-        return this;
-      }
-    }
-    static FileDescriptorSet() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, null);
-    }
-  }
-  
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
-  [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
-  public sealed partial class FileDescriptorProto : pb::GeneratedMessage<FileDescriptorProto, FileDescriptorProto.Builder> {
-    private FileDescriptorProto() { }
-    private static readonly FileDescriptorProto defaultInstance = new FileDescriptorProto().MakeReadOnly();
-    private static readonly string[] _fileDescriptorProtoFieldNames = new string[] { "dependency", "enum_type", "extension", "message_type", "name", "options", "package", "service", "source_code_info" };
-    private static readonly uint[] _fileDescriptorProtoFieldTags = new uint[] { 26, 42, 58, 34, 10, 66, 18, 50, 74 };
-    public static FileDescriptorProto DefaultInstance {
-      get { return defaultInstance; }
-    }
-    
-    public override FileDescriptorProto DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-    
-    protected override FileDescriptorProto ThisMessage {
-      get { return this; }
-    }
-    
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_FileDescriptorProto__Descriptor; }
-    }
-    
-    protected override pb::FieldAccess.FieldAccessorTable<FileDescriptorProto, FileDescriptorProto.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_FileDescriptorProto__FieldAccessorTable; }
-    }
-    
-    public const int NameFieldNumber = 1;
-    private bool hasName;
-    private string name_ = "";
-    public bool HasName {
-      get { return hasName; }
-    }
-    public string Name {
-      get { return name_; }
-    }
-    
-    public const int PackageFieldNumber = 2;
-    private bool hasPackage;
-    private string package_ = "";
-    public bool HasPackage {
-      get { return hasPackage; }
-    }
-    public string Package {
-      get { return package_; }
-    }
-    
-    public const int DependencyFieldNumber = 3;
-    private pbc::PopsicleList<string> dependency_ = new pbc::PopsicleList<string>();
-    public scg::IList<string> DependencyList {
-      get { return pbc::Lists.AsReadOnly(dependency_); }
-    }
-    public int DependencyCount {
-      get { return dependency_.Count; }
-    }
-    public string GetDependency(int index) {
-      return dependency_[index];
-    }
-    
-    public const int MessageTypeFieldNumber = 4;
-    private pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto> messageType_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto>();
-    public scg::IList<global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto> MessageTypeList {
-      get { return messageType_; }
-    }
-    public int MessageTypeCount {
-      get { return messageType_.Count; }
-    }
-    public global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto GetMessageType(int index) {
-      return messageType_[index];
-    }
-    
-    public const int EnumTypeFieldNumber = 5;
-    private pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto> enumType_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto>();
-    public scg::IList<global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto> EnumTypeList {
-      get { return enumType_; }
-    }
-    public int EnumTypeCount {
-      get { return enumType_.Count; }
-    }
-    public global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto GetEnumType(int index) {
-      return enumType_[index];
-    }
-    
-    public const int ServiceFieldNumber = 6;
-    private pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.ServiceDescriptorProto> service_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.ServiceDescriptorProto>();
-    public scg::IList<global::Google.ProtocolBuffers.DescriptorProtos.ServiceDescriptorProto> ServiceList {
-      get { return service_; }
-    }
-    public int ServiceCount {
-      get { return service_.Count; }
-    }
-    public global::Google.ProtocolBuffers.DescriptorProtos.ServiceDescriptorProto GetService(int index) {
-      return service_[index];
-    }
-    
-    public const int ExtensionFieldNumber = 7;
-    private pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto> extension_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto>();
-    public scg::IList<global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto> ExtensionList {
-      get { return extension_; }
-    }
-    public int ExtensionCount {
-      get { return extension_.Count; }
-    }
-    public global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto GetExtension(int index) {
-      return extension_[index];
-    }
-    
-    public const int OptionsFieldNumber = 8;
-    private bool hasOptions;
-    private global::Google.ProtocolBuffers.DescriptorProtos.FileOptions options_;
-    public bool HasOptions {
-      get { return hasOptions; }
-    }
-    public global::Google.ProtocolBuffers.DescriptorProtos.FileOptions Options {
-      get { return options_ ?? global::Google.ProtocolBuffers.DescriptorProtos.FileOptions.DefaultInstance; }
-    }
-    
-    public const int SourceCodeInfoFieldNumber = 9;
-    private bool hasSourceCodeInfo;
-    private global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo sourceCodeInfo_;
-    public bool HasSourceCodeInfo {
-      get { return hasSourceCodeInfo; }
-    }
-    public global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo SourceCodeInfo {
-      get { return sourceCodeInfo_ ?? global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.DefaultInstance; }
-    }
-    
-    public override bool IsInitialized {
-      get {
-        foreach (global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto element in MessageTypeList) {
-          if (!element.IsInitialized) return false;
-        }
-        foreach (global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto element in EnumTypeList) {
-          if (!element.IsInitialized) return false;
-        }
-        foreach (global::Google.ProtocolBuffers.DescriptorProtos.ServiceDescriptorProto element in ServiceList) {
-          if (!element.IsInitialized) return false;
-        }
-        foreach (global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto element in ExtensionList) {
-          if (!element.IsInitialized) return false;
-        }
-        if (HasOptions) {
-          if (!Options.IsInitialized) return false;
-        }
-        return true;
-      }
-    }
-    
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      int size = SerializedSize;
-      string[] field_names = _fileDescriptorProtoFieldNames;
-      if (hasName) {
-        output.WriteString(1, field_names[4], Name);
-      }
-      if (hasPackage) {
-        output.WriteString(2, field_names[6], Package);
-      }
-      if (dependency_.Count > 0) {
-        output.WriteStringArray(3, field_names[0], dependency_);
-      }
-      if (messageType_.Count > 0) {
-        output.WriteMessageArray(4, field_names[3], messageType_);
-      }
-      if (enumType_.Count > 0) {
-        output.WriteMessageArray(5, field_names[1], enumType_);
-      }
-      if (service_.Count > 0) {
-        output.WriteMessageArray(6, field_names[7], service_);
-      }
-      if (extension_.Count > 0) {
-        output.WriteMessageArray(7, field_names[2], extension_);
-      }
-      if (hasOptions) {
-        output.WriteMessage(8, field_names[5], Options);
-      }
-      if (hasSourceCodeInfo) {
-        output.WriteMessage(9, field_names[8], SourceCodeInfo);
-      }
-      UnknownFields.WriteTo(output);
-    }
-    
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        
-        size = 0;
-        if (hasName) {
-          size += pb::CodedOutputStream.ComputeStringSize(1, Name);
-        }
-        if (hasPackage) {
-          size += pb::CodedOutputStream.ComputeStringSize(2, Package);
-        }
-        {
-          int dataSize = 0;
-          foreach (string element in DependencyList) {
-            dataSize += pb::CodedOutputStream.ComputeStringSizeNoTag(element);
-          }
-          size += dataSize;
-          size += 1 * dependency_.Count;
-        }
-        foreach (global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto element in MessageTypeList) {
-          size += pb::CodedOutputStream.ComputeMessageSize(4, element);
-        }
-        foreach (global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto element in EnumTypeList) {
-          size += pb::CodedOutputStream.ComputeMessageSize(5, element);
-        }
-        foreach (global::Google.ProtocolBuffers.DescriptorProtos.ServiceDescriptorProto element in ServiceList) {
-          size += pb::CodedOutputStream.ComputeMessageSize(6, element);
-        }
-        foreach (global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto element in ExtensionList) {
-          size += pb::CodedOutputStream.ComputeMessageSize(7, element);
-        }
-        if (hasOptions) {
-          size += pb::CodedOutputStream.ComputeMessageSize(8, Options);
-        }
-        if (hasSourceCodeInfo) {
-          size += pb::CodedOutputStream.ComputeMessageSize(9, SourceCodeInfo);
-        }
-        size += UnknownFields.SerializedSize;
-        memoizedSerializedSize = size;
-        return size;
-      }
-    }
-    
-    public static FileDescriptorProto ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static FileDescriptorProto ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static FileDescriptorProto ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static FileDescriptorProto ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static FileDescriptorProto ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static FileDescriptorProto ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static FileDescriptorProto ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static FileDescriptorProto ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static FileDescriptorProto ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static FileDescriptorProto ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private FileDescriptorProto MakeReadOnly() {
-      dependency_.MakeReadOnly();
-      messageType_.MakeReadOnly();
-      enumType_.MakeReadOnly();
-      service_.MakeReadOnly();
-      extension_.MakeReadOnly();
-      return this;
-    }
-    
-    public static Builder CreateBuilder() { return new Builder(); }
-    public override Builder ToBuilder() { return CreateBuilder(this); }
-    public override Builder CreateBuilderForType() { return new Builder(); }
-    public static Builder CreateBuilder(FileDescriptorProto prototype) {
-      return new Builder(prototype);
-    }
-    
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
-    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
-    public sealed partial class Builder : pb::GeneratedBuilder<FileDescriptorProto, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(FileDescriptorProto cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-      
-      private bool resultIsReadOnly;
-      private FileDescriptorProto result;
-      
-      private FileDescriptorProto PrepareBuilder() {
-        if (resultIsReadOnly) {
-          FileDescriptorProto original = result;
-          result = new FileDescriptorProto();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-      
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-      
-      protected override FileDescriptorProto MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-      
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-      
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-      
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto.Descriptor; }
-      }
-      
-      public override FileDescriptorProto DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto.DefaultInstance; }
-      }
-      
-      public override FileDescriptorProto BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-      
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is FileDescriptorProto) {
-          return MergeFrom((FileDescriptorProto) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-      
-      public override Builder MergeFrom(FileDescriptorProto other) {
-        if (other == global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.HasName) {
-          Name = other.Name;
-        }
-        if (other.HasPackage) {
-          Package = other.Package;
-        }
-        if (other.dependency_.Count != 0) {
-          result.dependency_.Add(other.dependency_);
-        }
-        if (other.messageType_.Count != 0) {
-          result.messageType_.Add(other.messageType_);
-        }
-        if (other.enumType_.Count != 0) {
-          result.enumType_.Add(other.enumType_);
-        }
-        if (other.service_.Count != 0) {
-          result.service_.Add(other.service_);
-        }
-        if (other.extension_.Count != 0) {
-          result.extension_.Add(other.extension_);
-        }
-        if (other.HasOptions) {
-          MergeOptions(other.Options);
-        }
-        if (other.HasSourceCodeInfo) {
-          MergeSourceCodeInfo(other.SourceCodeInfo);
-        }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-      
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-      
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_fileDescriptorProtoFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _fileDescriptorProtoFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            default: {
-              if (pb::WireFormat.IsEndGroupTag(tag)) {
-                if (unknownFields != null) {
-                  this.UnknownFields = unknownFields.Build();
-                }
-                return this;
-              }
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              break;
-            }
-            case 10: {
-              result.hasName = input.ReadString(ref result.name_);
-              break;
-            }
-            case 18: {
-              result.hasPackage = input.ReadString(ref result.package_);
-              break;
-            }
-            case 26: {
-              input.ReadStringArray(tag, field_name, result.dependency_);
-              break;
-            }
-            case 34: {
-              input.ReadMessageArray(tag, field_name, result.messageType_, global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.DefaultInstance, extensionRegistry);
-              break;
-            }
-            case 42: {
-              input.ReadMessageArray(tag, field_name, result.enumType_, global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto.DefaultInstance, extensionRegistry);
-              break;
-            }
-            case 50: {
-              input.ReadMessageArray(tag, field_name, result.service_, global::Google.ProtocolBuffers.DescriptorProtos.ServiceDescriptorProto.DefaultInstance, extensionRegistry);
-              break;
-            }
-            case 58: {
-              input.ReadMessageArray(tag, field_name, result.extension_, global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.DefaultInstance, extensionRegistry);
-              break;
-            }
-            case 66: {
-              global::Google.ProtocolBuffers.DescriptorProtos.FileOptions.Builder subBuilder = global::Google.ProtocolBuffers.DescriptorProtos.FileOptions.CreateBuilder();
-              if (result.hasOptions) {
-                subBuilder.MergeFrom(Options);
-              }
-              input.ReadMessage(subBuilder, extensionRegistry);
-              Options = subBuilder.BuildPartial();
-              break;
-            }
-            case 74: {
-              global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Builder subBuilder = global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.CreateBuilder();
-              if (result.hasSourceCodeInfo) {
-                subBuilder.MergeFrom(SourceCodeInfo);
-              }
-              input.ReadMessage(subBuilder, extensionRegistry);
-              SourceCodeInfo = subBuilder.BuildPartial();
-              break;
-            }
-          }
-        }
-        
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-      
-      
-      public bool HasName {
-        get { return result.hasName; }
-      }
-      public string Name {
-        get { return result.Name; }
-        set { SetName(value); }
-      }
-      public Builder SetName(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasName = true;
-        result.name_ = value;
-        return this;
-      }
-      public Builder ClearName() {
-        PrepareBuilder();
-        result.hasName = false;
-        result.name_ = "";
-        return this;
-      }
-      
-      public bool HasPackage {
-        get { return result.hasPackage; }
-      }
-      public string Package {
-        get { return result.Package; }
-        set { SetPackage(value); }
-      }
-      public Builder SetPackage(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasPackage = true;
-        result.package_ = value;
-        return this;
-      }
-      public Builder ClearPackage() {
-        PrepareBuilder();
-        result.hasPackage = false;
-        result.package_ = "";
-        return this;
-      }
-      
-      public pbc::IPopsicleList<string> DependencyList {
-        get { return PrepareBuilder().dependency_; }
-      }
-      public int DependencyCount {
-        get { return result.DependencyCount; }
-      }
-      public string GetDependency(int index) {
-        return result.GetDependency(index);
-      }
-      public Builder SetDependency(int index, string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.dependency_[index] = value;
-        return this;
-      }
-      public Builder AddDependency(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.dependency_.Add(value);
-        return this;
-      }
-      public Builder AddRangeDependency(scg::IEnumerable<string> values) {
-        PrepareBuilder();
-        result.dependency_.Add(values);
-        return this;
-      }
-      public Builder ClearDependency() {
-        PrepareBuilder();
-        result.dependency_.Clear();
-        return this;
-      }
-      
-      public pbc::IPopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto> MessageTypeList {
-        get { return PrepareBuilder().messageType_; }
-      }
-      public int MessageTypeCount {
-        get { return result.MessageTypeCount; }
-      }
-      public global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto GetMessageType(int index) {
-        return result.GetMessageType(index);
-      }
-      public Builder SetMessageType(int index, global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.messageType_[index] = value;
-        return this;
-      }
-      public Builder SetMessageType(int index, global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.messageType_[index] = builderForValue.Build();
-        return this;
-      }
-      public Builder AddMessageType(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.messageType_.Add(value);
-        return this;
-      }
-      public Builder AddMessageType(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.messageType_.Add(builderForValue.Build());
-        return this;
-      }
-      public Builder AddRangeMessageType(scg::IEnumerable<global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto> values) {
-        PrepareBuilder();
-        result.messageType_.Add(values);
-        return this;
-      }
-      public Builder ClearMessageType() {
-        PrepareBuilder();
-        result.messageType_.Clear();
-        return this;
-      }
-      
-      public pbc::IPopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto> EnumTypeList {
-        get { return PrepareBuilder().enumType_; }
-      }
-      public int EnumTypeCount {
-        get { return result.EnumTypeCount; }
-      }
-      public global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto GetEnumType(int index) {
-        return result.GetEnumType(index);
-      }
-      public Builder SetEnumType(int index, global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.enumType_[index] = value;
-        return this;
-      }
-      public Builder SetEnumType(int index, global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.enumType_[index] = builderForValue.Build();
-        return this;
-      }
-      public Builder AddEnumType(global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.enumType_.Add(value);
-        return this;
-      }
-      public Builder AddEnumType(global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.enumType_.Add(builderForValue.Build());
-        return this;
-      }
-      public Builder AddRangeEnumType(scg::IEnumerable<global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto> values) {
-        PrepareBuilder();
-        result.enumType_.Add(values);
-        return this;
-      }
-      public Builder ClearEnumType() {
-        PrepareBuilder();
-        result.enumType_.Clear();
-        return this;
-      }
-      
-      public pbc::IPopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.ServiceDescriptorProto> ServiceList {
-        get { return PrepareBuilder().service_; }
-      }
-      public int ServiceCount {
-        get { return result.ServiceCount; }
-      }
-      public global::Google.ProtocolBuffers.DescriptorProtos.ServiceDescriptorProto GetService(int index) {
-        return result.GetService(index);
-      }
-      public Builder SetService(int index, global::Google.ProtocolBuffers.DescriptorProtos.ServiceDescriptorProto value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.service_[index] = value;
-        return this;
-      }
-      public Builder SetService(int index, global::Google.ProtocolBuffers.DescriptorProtos.ServiceDescriptorProto.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.service_[index] = builderForValue.Build();
-        return this;
-      }
-      public Builder AddService(global::Google.ProtocolBuffers.DescriptorProtos.ServiceDescriptorProto value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.service_.Add(value);
-        return this;
-      }
-      public Builder AddService(global::Google.ProtocolBuffers.DescriptorProtos.ServiceDescriptorProto.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.service_.Add(builderForValue.Build());
-        return this;
-      }
-      public Builder AddRangeService(scg::IEnumerable<global::Google.ProtocolBuffers.DescriptorProtos.ServiceDescriptorProto> values) {
-        PrepareBuilder();
-        result.service_.Add(values);
-        return this;
-      }
-      public Builder ClearService() {
-        PrepareBuilder();
-        result.service_.Clear();
-        return this;
-      }
-      
-      public pbc::IPopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto> ExtensionList {
-        get { return PrepareBuilder().extension_; }
-      }
-      public int ExtensionCount {
-        get { return result.ExtensionCount; }
-      }
-      public global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto GetExtension(int index) {
-        return result.GetExtension(index);
-      }
-      public Builder SetExtension(int index, global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.extension_[index] = value;
-        return this;
-      }
-      public Builder SetExtension(int index, global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.extension_[index] = builderForValue.Build();
-        return this;
-      }
-      public Builder AddExtension(global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.extension_.Add(value);
-        return this;
-      }
-      public Builder AddExtension(global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.extension_.Add(builderForValue.Build());
-        return this;
-      }
-      public Builder AddRangeExtension(scg::IEnumerable<global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto> values) {
-        PrepareBuilder();
-        result.extension_.Add(values);
-        return this;
-      }
-      public Builder ClearExtension() {
-        PrepareBuilder();
-        result.extension_.Clear();
-        return this;
-      }
-      
-      public bool HasOptions {
-       get { return result.hasOptions; }
-      }
-      public global::Google.ProtocolBuffers.DescriptorProtos.FileOptions Options {
-        get { return result.Options; }
-        set { SetOptions(value); }
-      }
-      public Builder SetOptions(global::Google.ProtocolBuffers.DescriptorProtos.FileOptions value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasOptions = true;
-        result.options_ = value;
-        return this;
-      }
-      public Builder SetOptions(global::Google.ProtocolBuffers.DescriptorProtos.FileOptions.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.hasOptions = true;
-        result.options_ = builderForValue.Build();
-        return this;
-      }
-      public Builder MergeOptions(global::Google.ProtocolBuffers.DescriptorProtos.FileOptions value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        if (result.hasOptions &&
-            result.options_ != global::Google.ProtocolBuffers.DescriptorProtos.FileOptions.DefaultInstance) {
-            result.options_ = global::Google.ProtocolBuffers.DescriptorProtos.FileOptions.CreateBuilder(result.options_).MergeFrom(value).BuildPartial();
-        } else {
-          result.options_ = value;
-        }
-        result.hasOptions = true;
-        return this;
-      }
-      public Builder ClearOptions() {
-        PrepareBuilder();
-        result.hasOptions = false;
-        result.options_ = null;
-        return this;
-      }
-      
-      public bool HasSourceCodeInfo {
-       get { return result.hasSourceCodeInfo; }
-      }
-      public global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo SourceCodeInfo {
-        get { return result.SourceCodeInfo; }
-        set { SetSourceCodeInfo(value); }
-      }
-      public Builder SetSourceCodeInfo(global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasSourceCodeInfo = true;
-        result.sourceCodeInfo_ = value;
-        return this;
-      }
-      public Builder SetSourceCodeInfo(global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.hasSourceCodeInfo = true;
-        result.sourceCodeInfo_ = builderForValue.Build();
-        return this;
-      }
-      public Builder MergeSourceCodeInfo(global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        if (result.hasSourceCodeInfo &&
-            result.sourceCodeInfo_ != global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.DefaultInstance) {
-            result.sourceCodeInfo_ = global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.CreateBuilder(result.sourceCodeInfo_).MergeFrom(value).BuildPartial();
-        } else {
-          result.sourceCodeInfo_ = value;
-        }
-        result.hasSourceCodeInfo = true;
-        return this;
-      }
-      public Builder ClearSourceCodeInfo() {
-        PrepareBuilder();
-        result.hasSourceCodeInfo = false;
-        result.sourceCodeInfo_ = null;
-        return this;
-      }
-    }
-    static FileDescriptorProto() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, null);
-    }
-  }
-  
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
-  [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
-  public sealed partial class DescriptorProto : pb::GeneratedMessage<DescriptorProto, DescriptorProto.Builder> {
-    private DescriptorProto() { }
-    private static readonly DescriptorProto defaultInstance = new DescriptorProto().MakeReadOnly();
-    private static readonly string[] _descriptorProtoFieldNames = new string[] { "enum_type", "extension", "extension_range", "field", "name", "nested_type", "options" };
-    private static readonly uint[] _descriptorProtoFieldTags = new uint[] { 34, 50, 42, 18, 10, 26, 58 };
-    public static DescriptorProto DefaultInstance {
-      get { return defaultInstance; }
-    }
-    
-    public override DescriptorProto DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-    
-    protected override DescriptorProto ThisMessage {
-      get { return this; }
-    }
-    
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_DescriptorProto__Descriptor; }
-    }
-    
-    protected override pb::FieldAccess.FieldAccessorTable<DescriptorProto, DescriptorProto.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_DescriptorProto__FieldAccessorTable; }
-    }
-    
-    #region Nested types
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
-    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
-    public static class Types {
-      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-      [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
-      [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
-      public sealed partial class ExtensionRange : pb::GeneratedMessage<ExtensionRange, ExtensionRange.Builder> {
-        private ExtensionRange() { }
-        private static readonly ExtensionRange defaultInstance = new ExtensionRange().MakeReadOnly();
-        private static readonly string[] _extensionRangeFieldNames = new string[] { "end", "start" };
-        private static readonly uint[] _extensionRangeFieldTags = new uint[] { 16, 8 };
-        public static ExtensionRange DefaultInstance {
-          get { return defaultInstance; }
-        }
-        
-        public override ExtensionRange DefaultInstanceForType {
-          get { return DefaultInstance; }
-        }
-        
-        protected override ExtensionRange ThisMessage {
-          get { return this; }
-        }
-        
-        public static pbd::MessageDescriptor Descriptor {
-          get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_DescriptorProto_ExtensionRange__Descriptor; }
-        }
-        
-        protected override pb::FieldAccess.FieldAccessorTable<ExtensionRange, ExtensionRange.Builder> InternalFieldAccessors {
-          get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_DescriptorProto_ExtensionRange__FieldAccessorTable; }
-        }
-        
-        public const int StartFieldNumber = 1;
-        private bool hasStart;
-        private int start_;
-        public bool HasStart {
-          get { return hasStart; }
-        }
-        public int Start {
-          get { return start_; }
-        }
-        
-        public const int EndFieldNumber = 2;
-        private bool hasEnd;
-        private int end_;
-        public bool HasEnd {
-          get { return hasEnd; }
-        }
-        public int End {
-          get { return end_; }
-        }
-        
-        public override bool IsInitialized {
-          get {
-            return true;
-          }
-        }
-        
-        public override void WriteTo(pb::ICodedOutputStream output) {
-          int size = SerializedSize;
-          string[] field_names = _extensionRangeFieldNames;
-          if (hasStart) {
-            output.WriteInt32(1, field_names[1], Start);
-          }
-          if (hasEnd) {
-            output.WriteInt32(2, field_names[0], End);
-          }
-          UnknownFields.WriteTo(output);
-        }
-        
-        private int memoizedSerializedSize = -1;
-        public override int SerializedSize {
-          get {
-            int size = memoizedSerializedSize;
-            if (size != -1) return size;
-            
-            size = 0;
-            if (hasStart) {
-              size += pb::CodedOutputStream.ComputeInt32Size(1, Start);
-            }
-            if (hasEnd) {
-              size += pb::CodedOutputStream.ComputeInt32Size(2, End);
-            }
-            size += UnknownFields.SerializedSize;
-            memoizedSerializedSize = size;
-            return size;
-          }
-        }
-        
-        public static ExtensionRange ParseFrom(pb::ByteString data) {
-          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-        }
-        public static ExtensionRange ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-        }
-        public static ExtensionRange ParseFrom(byte[] data) {
-          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-        }
-        public static ExtensionRange ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-        }
-        public static ExtensionRange ParseFrom(global::System.IO.Stream input) {
-          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-        }
-        public static ExtensionRange ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-        }
-        public static ExtensionRange ParseDelimitedFrom(global::System.IO.Stream input) {
-          return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-        }
-        public static ExtensionRange ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-          return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-        }
-        public static ExtensionRange ParseFrom(pb::ICodedInputStream input) {
-          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-        }
-        public static ExtensionRange ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-        }
-        private ExtensionRange MakeReadOnly() {
-          return this;
-        }
-        
-        public static Builder CreateBuilder() { return new Builder(); }
-        public override Builder ToBuilder() { return CreateBuilder(this); }
-        public override Builder CreateBuilderForType() { return new Builder(); }
-        public static Builder CreateBuilder(ExtensionRange prototype) {
-          return new Builder(prototype);
-        }
-        
-        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-        [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
-        [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
-        public sealed partial class Builder : pb::GeneratedBuilder<ExtensionRange, Builder> {
-          protected override Builder ThisBuilder {
-            get { return this; }
-          }
-          public Builder() {
-            result = DefaultInstance;
-            resultIsReadOnly = true;
-          }
-          internal Builder(ExtensionRange cloneFrom) {
-            result = cloneFrom;
-            resultIsReadOnly = true;
-          }
-          
-          private bool resultIsReadOnly;
-          private ExtensionRange result;
-          
-          private ExtensionRange PrepareBuilder() {
-            if (resultIsReadOnly) {
-              ExtensionRange original = result;
-              result = new ExtensionRange();
-              resultIsReadOnly = false;
-              MergeFrom(original);
-            }
-            return result;
-          }
-          
-          public override bool IsInitialized {
-            get { return result.IsInitialized; }
-          }
-          
-          protected override ExtensionRange MessageBeingBuilt {
-            get { return PrepareBuilder(); }
-          }
-          
-          public override Builder Clear() {
-            result = DefaultInstance;
-            resultIsReadOnly = true;
-            return this;
-          }
-          
-          public override Builder Clone() {
-            if (resultIsReadOnly) {
-              return new Builder(result);
-            } else {
-              return new Builder().MergeFrom(result);
-            }
-          }
-          
-          public override pbd::MessageDescriptor DescriptorForType {
-            get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Types.ExtensionRange.Descriptor; }
-          }
-          
-          public override ExtensionRange DefaultInstanceForType {
-            get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Types.ExtensionRange.DefaultInstance; }
-          }
-          
-          public override ExtensionRange BuildPartial() {
-            if (resultIsReadOnly) {
-              return result;
-            }
-            resultIsReadOnly = true;
-            return result.MakeReadOnly();
-          }
-          
-          public override Builder MergeFrom(pb::IMessage other) {
-            if (other is ExtensionRange) {
-              return MergeFrom((ExtensionRange) other);
-            } else {
-              base.MergeFrom(other);
-              return this;
-            }
-          }
-          
-          public override Builder MergeFrom(ExtensionRange other) {
-            if (other == global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Types.ExtensionRange.DefaultInstance) return this;
-            PrepareBuilder();
-            if (other.HasStart) {
-              Start = other.Start;
-            }
-            if (other.HasEnd) {
-              End = other.End;
-            }
-            this.MergeUnknownFields(other.UnknownFields);
-            return this;
-          }
-          
-          public override Builder MergeFrom(pb::ICodedInputStream input) {
-            return MergeFrom(input, pb::ExtensionRegistry.Empty);
-          }
-          
-          public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-            PrepareBuilder();
-            pb::UnknownFieldSet.Builder unknownFields = null;
-            uint tag;
-            string field_name;
-            while (input.ReadTag(out tag, out field_name)) {
-              if(tag == 0 && field_name != null) {
-                int field_ordinal = global::System.Array.BinarySearch(_extensionRangeFieldNames, field_name, global::System.StringComparer.Ordinal);
-                if(field_ordinal >= 0)
-                  tag = _extensionRangeFieldTags[field_ordinal];
-                else {
-                  if (unknownFields == null) {
-                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-                  }
-                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-                  continue;
-                }
-              }
-              switch (tag) {
-                case 0: {
-                  throw pb::InvalidProtocolBufferException.InvalidTag();
-                }
-                default: {
-                  if (pb::WireFormat.IsEndGroupTag(tag)) {
-                    if (unknownFields != null) {
-                      this.UnknownFields = unknownFields.Build();
-                    }
-                    return this;
-                  }
-                  if (unknownFields == null) {
-                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-                  }
-                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-                  break;
-                }
-                case 8: {
-                  result.hasStart = input.ReadInt32(ref result.start_);
-                  break;
-                }
-                case 16: {
-                  result.hasEnd = input.ReadInt32(ref result.end_);
-                  break;
-                }
-              }
-            }
-            
-            if (unknownFields != null) {
-              this.UnknownFields = unknownFields.Build();
-            }
-            return this;
-          }
-          
-          
-          public bool HasStart {
-            get { return result.hasStart; }
-          }
-          public int Start {
-            get { return result.Start; }
-            set { SetStart(value); }
-          }
-          public Builder SetStart(int value) {
-            PrepareBuilder();
-            result.hasStart = true;
-            result.start_ = value;
-            return this;
-          }
-          public Builder ClearStart() {
-            PrepareBuilder();
-            result.hasStart = false;
-            result.start_ = 0;
-            return this;
-          }
-          
-          public bool HasEnd {
-            get { return result.hasEnd; }
-          }
-          public int End {
-            get { return result.End; }
-            set { SetEnd(value); }
-          }
-          public Builder SetEnd(int value) {
-            PrepareBuilder();
-            result.hasEnd = true;
-            result.end_ = value;
-            return this;
-          }
-          public Builder ClearEnd() {
-            PrepareBuilder();
-            result.hasEnd = false;
-            result.end_ = 0;
-            return this;
-          }
-        }
-        static ExtensionRange() {
-          object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, null);
-        }
-      }
-      
-    }
-    #endregion
-    
-    public const int NameFieldNumber = 1;
-    private bool hasName;
-    private string name_ = "";
-    public bool HasName {
-      get { return hasName; }
-    }
-    public string Name {
-      get { return name_; }
-    }
-    
-    public const int FieldFieldNumber = 2;
-    private pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto> field_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto>();
-    public scg::IList<global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto> FieldList {
-      get { return field_; }
-    }
-    public int FieldCount {
-      get { return field_.Count; }
-    }
-    public global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto GetField(int index) {
-      return field_[index];
-    }
-    
-    public const int ExtensionFieldNumber = 6;
-    private pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto> extension_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto>();
-    public scg::IList<global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto> ExtensionList {
-      get { return extension_; }
-    }
-    public int ExtensionCount {
-      get { return extension_.Count; }
-    }
-    public global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto GetExtension(int index) {
-      return extension_[index];
-    }
-    
-    public const int NestedTypeFieldNumber = 3;
-    private pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto> nestedType_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto>();
-    public scg::IList<global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto> NestedTypeList {
-      get { return nestedType_; }
-    }
-    public int NestedTypeCount {
-      get { return nestedType_.Count; }
-    }
-    public global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto GetNestedType(int index) {
-      return nestedType_[index];
-    }
-    
-    public const int EnumTypeFieldNumber = 4;
-    private pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto> enumType_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto>();
-    public scg::IList<global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto> EnumTypeList {
-      get { return enumType_; }
-    }
-    public int EnumTypeCount {
-      get { return enumType_.Count; }
-    }
-    public global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto GetEnumType(int index) {
-      return enumType_[index];
-    }
-    
-    public const int ExtensionRangeFieldNumber = 5;
-    private pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Types.ExtensionRange> extensionRange_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Types.ExtensionRange>();
-    public scg::IList<global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Types.ExtensionRange> ExtensionRangeList {
-      get { return extensionRange_; }
-    }
-    public int ExtensionRangeCount {
-      get { return extensionRange_.Count; }
-    }
-    public global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Types.ExtensionRange GetExtensionRange(int index) {
-      return extensionRange_[index];
-    }
-    
-    public const int OptionsFieldNumber = 7;
-    private bool hasOptions;
-    private global::Google.ProtocolBuffers.DescriptorProtos.MessageOptions options_;
-    public bool HasOptions {
-      get { return hasOptions; }
-    }
-    public global::Google.ProtocolBuffers.DescriptorProtos.MessageOptions Options {
-      get { return options_ ?? global::Google.ProtocolBuffers.DescriptorProtos.MessageOptions.DefaultInstance; }
-    }
-    
-    public override bool IsInitialized {
-      get {
-        foreach (global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto element in FieldList) {
-          if (!element.IsInitialized) return false;
-        }
-        foreach (global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto element in ExtensionList) {
-          if (!element.IsInitialized) return false;
-        }
-        foreach (global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto element in NestedTypeList) {
-          if (!element.IsInitialized) return false;
-        }
-        foreach (global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto element in EnumTypeList) {
-          if (!element.IsInitialized) return false;
-        }
-        if (HasOptions) {
-          if (!Options.IsInitialized) return false;
-        }
-        return true;
-      }
-    }
-    
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      int size = SerializedSize;
-      string[] field_names = _descriptorProtoFieldNames;
-      if (hasName) {
-        output.WriteString(1, field_names[4], Name);
-      }
-      if (field_.Count > 0) {
-        output.WriteMessageArray(2, field_names[3], field_);
-      }
-      if (nestedType_.Count > 0) {
-        output.WriteMessageArray(3, field_names[5], nestedType_);
-      }
-      if (enumType_.Count > 0) {
-        output.WriteMessageArray(4, field_names[0], enumType_);
-      }
-      if (extensionRange_.Count > 0) {
-        output.WriteMessageArray(5, field_names[2], extensionRange_);
-      }
-      if (extension_.Count > 0) {
-        output.WriteMessageArray(6, field_names[1], extension_);
-      }
-      if (hasOptions) {
-        output.WriteMessage(7, field_names[6], Options);
-      }
-      UnknownFields.WriteTo(output);
-    }
-    
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        
-        size = 0;
-        if (hasName) {
-          size += pb::CodedOutputStream.ComputeStringSize(1, Name);
-        }
-        foreach (global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto element in FieldList) {
-          size += pb::CodedOutputStream.ComputeMessageSize(2, element);
-        }
-        foreach (global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto element in ExtensionList) {
-          size += pb::CodedOutputStream.ComputeMessageSize(6, element);
-        }
-        foreach (global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto element in NestedTypeList) {
-          size += pb::CodedOutputStream.ComputeMessageSize(3, element);
-        }
-        foreach (global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto element in EnumTypeList) {
-          size += pb::CodedOutputStream.ComputeMessageSize(4, element);
-        }
-        foreach (global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Types.ExtensionRange element in ExtensionRangeList) {
-          size += pb::CodedOutputStream.ComputeMessageSize(5, element);
-        }
-        if (hasOptions) {
-          size += pb::CodedOutputStream.ComputeMessageSize(7, Options);
-        }
-        size += UnknownFields.SerializedSize;
-        memoizedSerializedSize = size;
-        return size;
-      }
-    }
-    
-    public static DescriptorProto ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static DescriptorProto ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static DescriptorProto ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static DescriptorProto ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static DescriptorProto ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static DescriptorProto ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static DescriptorProto ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static DescriptorProto ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static DescriptorProto ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static DescriptorProto ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private DescriptorProto MakeReadOnly() {
-      field_.MakeReadOnly();
-      extension_.MakeReadOnly();
-      nestedType_.MakeReadOnly();
-      enumType_.MakeReadOnly();
-      extensionRange_.MakeReadOnly();
-      return this;
-    }
-    
-    public static Builder CreateBuilder() { return new Builder(); }
-    public override Builder ToBuilder() { return CreateBuilder(this); }
-    public override Builder CreateBuilderForType() { return new Builder(); }
-    public static Builder CreateBuilder(DescriptorProto prototype) {
-      return new Builder(prototype);
-    }
-    
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
-    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
-    public sealed partial class Builder : pb::GeneratedBuilder<DescriptorProto, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(DescriptorProto cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-      
-      private bool resultIsReadOnly;
-      private DescriptorProto result;
-      
-      private DescriptorProto PrepareBuilder() {
-        if (resultIsReadOnly) {
-          DescriptorProto original = result;
-          result = new DescriptorProto();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-      
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-      
-      protected override DescriptorProto MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-      
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-      
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-      
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Descriptor; }
-      }
-      
-      public override DescriptorProto DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.DefaultInstance; }
-      }
-      
-      public override DescriptorProto BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-      
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is DescriptorProto) {
-          return MergeFrom((DescriptorProto) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-      
-      public override Builder MergeFrom(DescriptorProto other) {
-        if (other == global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.HasName) {
-          Name = other.Name;
-        }
-        if (other.field_.Count != 0) {
-          result.field_.Add(other.field_);
-        }
-        if (other.extension_.Count != 0) {
-          result.extension_.Add(other.extension_);
-        }
-        if (other.nestedType_.Count != 0) {
-          result.nestedType_.Add(other.nestedType_);
-        }
-        if (other.enumType_.Count != 0) {
-          result.enumType_.Add(other.enumType_);
-        }
-        if (other.extensionRange_.Count != 0) {
-          result.extensionRange_.Add(other.extensionRange_);
-        }
-        if (other.HasOptions) {
-          MergeOptions(other.Options);
-        }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-      
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-      
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_descriptorProtoFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _descriptorProtoFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            default: {
-              if (pb::WireFormat.IsEndGroupTag(tag)) {
-                if (unknownFields != null) {
-                  this.UnknownFields = unknownFields.Build();
-                }
-                return this;
-              }
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              break;
-            }
-            case 10: {
-              result.hasName = input.ReadString(ref result.name_);
-              break;
-            }
-            case 18: {
-              input.ReadMessageArray(tag, field_name, result.field_, global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.DefaultInstance, extensionRegistry);
-              break;
-            }
-            case 26: {
-              input.ReadMessageArray(tag, field_name, result.nestedType_, global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.DefaultInstance, extensionRegistry);
-              break;
-            }
-            case 34: {
-              input.ReadMessageArray(tag, field_name, result.enumType_, global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto.DefaultInstance, extensionRegistry);
-              break;
-            }
-            case 42: {
-              input.ReadMessageArray(tag, field_name, result.extensionRange_, global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Types.ExtensionRange.DefaultInstance, extensionRegistry);
-              break;
-            }
-            case 50: {
-              input.ReadMessageArray(tag, field_name, result.extension_, global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.DefaultInstance, extensionRegistry);
-              break;
-            }
-            case 58: {
-              global::Google.ProtocolBuffers.DescriptorProtos.MessageOptions.Builder subBuilder = global::Google.ProtocolBuffers.DescriptorProtos.MessageOptions.CreateBuilder();
-              if (result.hasOptions) {
-                subBuilder.MergeFrom(Options);
-              }
-              input.ReadMessage(subBuilder, extensionRegistry);
-              Options = subBuilder.BuildPartial();
-              break;
-            }
-          }
-        }
-        
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-      
-      
-      public bool HasName {
-        get { return result.hasName; }
-      }
-      public string Name {
-        get { return result.Name; }
-        set { SetName(value); }
-      }
-      public Builder SetName(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasName = true;
-        result.name_ = value;
-        return this;
-      }
-      public Builder ClearName() {
-        PrepareBuilder();
-        result.hasName = false;
-        result.name_ = "";
-        return this;
-      }
-      
-      public pbc::IPopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto> FieldList {
-        get { return PrepareBuilder().field_; }
-      }
-      public int FieldCount {
-        get { return result.FieldCount; }
-      }
-      public global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto GetField(int index) {
-        return result.GetField(index);
-      }
-      public Builder SetField(int index, global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.field_[index] = value;
-        return this;
-      }
-      public Builder SetField(int index, global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.field_[index] = builderForValue.Build();
-        return this;
-      }
-      public Builder AddField(global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.field_.Add(value);
-        return this;
-      }
-      public Builder AddField(global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.field_.Add(builderForValue.Build());
-        return this;
-      }
-      public Builder AddRangeField(scg::IEnumerable<global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto> values) {
-        PrepareBuilder();
-        result.field_.Add(values);
-        return this;
-      }
-      public Builder ClearField() {
-        PrepareBuilder();
-        result.field_.Clear();
-        return this;
-      }
-      
-      public pbc::IPopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto> ExtensionList {
-        get { return PrepareBuilder().extension_; }
-      }
-      public int ExtensionCount {
-        get { return result.ExtensionCount; }
-      }
-      public global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto GetExtension(int index) {
-        return result.GetExtension(index);
-      }
-      public Builder SetExtension(int index, global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.extension_[index] = value;
-        return this;
-      }
-      public Builder SetExtension(int index, global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.extension_[index] = builderForValue.Build();
-        return this;
-      }
-      public Builder AddExtension(global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.extension_.Add(value);
-        return this;
-      }
-      public Builder AddExtension(global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.extension_.Add(builderForValue.Build());
-        return this;
-      }
-      public Builder AddRangeExtension(scg::IEnumerable<global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto> values) {
-        PrepareBuilder();
-        result.extension_.Add(values);
-        return this;
-      }
-      public Builder ClearExtension() {
-        PrepareBuilder();
-        result.extension_.Clear();
-        return this;
-      }
-      
-      public pbc::IPopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto> NestedTypeList {
-        get { return PrepareBuilder().nestedType_; }
-      }
-      public int NestedTypeCount {
-        get { return result.NestedTypeCount; }
-      }
-      public global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto GetNestedType(int index) {
-        return result.GetNestedType(index);
-      }
-      public Builder SetNestedType(int index, global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.nestedType_[index] = value;
-        return this;
-      }
-      public Builder SetNestedType(int index, global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.nestedType_[index] = builderForValue.Build();
-        return this;
-      }
-      public Builder AddNestedType(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.nestedType_.Add(value);
-        return this;
-      }
-      public Builder AddNestedType(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.nestedType_.Add(builderForValue.Build());
-        return this;
-      }
-      public Builder AddRangeNestedType(scg::IEnumerable<global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto> values) {
-        PrepareBuilder();
-        result.nestedType_.Add(values);
-        return this;
-      }
-      public Builder ClearNestedType() {
-        PrepareBuilder();
-        result.nestedType_.Clear();
-        return this;
-      }
-      
-      public pbc::IPopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto> EnumTypeList {
-        get { return PrepareBuilder().enumType_; }
-      }
-      public int EnumTypeCount {
-        get { return result.EnumTypeCount; }
-      }
-      public global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto GetEnumType(int index) {
-        return result.GetEnumType(index);
-      }
-      public Builder SetEnumType(int index, global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.enumType_[index] = value;
-        return this;
-      }
-      public Builder SetEnumType(int index, global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.enumType_[index] = builderForValue.Build();
-        return this;
-      }
-      public Builder AddEnumType(global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.enumType_.Add(value);
-        return this;
-      }
-      public Builder AddEnumType(global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.enumType_.Add(builderForValue.Build());
-        return this;
-      }
-      public Builder AddRangeEnumType(scg::IEnumerable<global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto> values) {
-        PrepareBuilder();
-        result.enumType_.Add(values);
-        return this;
-      }
-      public Builder ClearEnumType() {
-        PrepareBuilder();
-        result.enumType_.Clear();
-        return this;
-      }
-      
-      public pbc::IPopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Types.ExtensionRange> ExtensionRangeList {
-        get { return PrepareBuilder().extensionRange_; }
-      }
-      public int ExtensionRangeCount {
-        get { return result.ExtensionRangeCount; }
-      }
-      public global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Types.ExtensionRange GetExtensionRange(int index) {
-        return result.GetExtensionRange(index);
-      }
-      public Builder SetExtensionRange(int index, global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Types.ExtensionRange value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.extensionRange_[index] = value;
-        return this;
-      }
-      public Builder SetExtensionRange(int index, global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Types.ExtensionRange.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.extensionRange_[index] = builderForValue.Build();
-        return this;
-      }
-      public Builder AddExtensionRange(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Types.ExtensionRange value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.extensionRange_.Add(value);
-        return this;
-      }
-      public Builder AddExtensionRange(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Types.ExtensionRange.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.extensionRange_.Add(builderForValue.Build());
-        return this;
-      }
-      public Builder AddRangeExtensionRange(scg::IEnumerable<global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Types.ExtensionRange> values) {
-        PrepareBuilder();
-        result.extensionRange_.Add(values);
-        return this;
-      }
-      public Builder ClearExtensionRange() {
-        PrepareBuilder();
-        result.extensionRange_.Clear();
-        return this;
-      }
-      
-      public bool HasOptions {
-       get { return result.hasOptions; }
-      }
-      public global::Google.ProtocolBuffers.DescriptorProtos.MessageOptions Options {
-        get { return result.Options; }
-        set { SetOptions(value); }
-      }
-      public Builder SetOptions(global::Google.ProtocolBuffers.DescriptorProtos.MessageOptions value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasOptions = true;
-        result.options_ = value;
-        return this;
-      }
-      public Builder SetOptions(global::Google.ProtocolBuffers.DescriptorProtos.MessageOptions.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.hasOptions = true;
-        result.options_ = builderForValue.Build();
-        return this;
-      }
-      public Builder MergeOptions(global::Google.ProtocolBuffers.DescriptorProtos.MessageOptions value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        if (result.hasOptions &&
-            result.options_ != global::Google.ProtocolBuffers.DescriptorProtos.MessageOptions.DefaultInstance) {
-            result.options_ = global::Google.ProtocolBuffers.DescriptorProtos.MessageOptions.CreateBuilder(result.options_).MergeFrom(value).BuildPartial();
-        } else {
-          result.options_ = value;
-        }
-        result.hasOptions = true;
-        return this;
-      }
-      public Builder ClearOptions() {
-        PrepareBuilder();
-        result.hasOptions = false;
-        result.options_ = null;
-        return this;
-      }
-    }
-    static DescriptorProto() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, null);
-    }
-  }
-  
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
-  [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
-  public sealed partial class FieldDescriptorProto : pb::GeneratedMessage<FieldDescriptorProto, FieldDescriptorProto.Builder> {
-    private FieldDescriptorProto() { }
-    private static readonly FieldDescriptorProto defaultInstance = new FieldDescriptorProto().MakeReadOnly();
-    private static readonly string[] _fieldDescriptorProtoFieldNames = new string[] { "default_value", "extendee", "label", "name", "number", "options", "type", "type_name" };
-    private static readonly uint[] _fieldDescriptorProtoFieldTags = new uint[] { 58, 18, 32, 10, 24, 66, 40, 50 };
-    public static FieldDescriptorProto DefaultInstance {
-      get { return defaultInstance; }
-    }
-    
-    public override FieldDescriptorProto DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-    
-    protected override FieldDescriptorProto ThisMessage {
-      get { return this; }
-    }
-    
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_FieldDescriptorProto__Descriptor; }
-    }
-    
-    protected override pb::FieldAccess.FieldAccessorTable<FieldDescriptorProto, FieldDescriptorProto.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_FieldDescriptorProto__FieldAccessorTable; }
-    }
-    
-    #region Nested types
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
-    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
-    public static class Types {
-      [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
-      [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
-      public enum Type {
-        TYPE_DOUBLE = 1,
-        TYPE_FLOAT = 2,
-        TYPE_INT64 = 3,
-        TYPE_UINT64 = 4,
-        TYPE_INT32 = 5,
-        TYPE_FIXED64 = 6,
-        TYPE_FIXED32 = 7,
-        TYPE_BOOL = 8,
-        TYPE_STRING = 9,
-        TYPE_GROUP = 10,
-        TYPE_MESSAGE = 11,
-        TYPE_BYTES = 12,
-        TYPE_UINT32 = 13,
-        TYPE_ENUM = 14,
-        TYPE_SFIXED32 = 15,
-        TYPE_SFIXED64 = 16,
-        TYPE_SINT32 = 17,
-        TYPE_SINT64 = 18,
-      }
-      
-      [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
-      [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
-      public enum Label {
-        LABEL_OPTIONAL = 1,
-        LABEL_REQUIRED = 2,
-        LABEL_REPEATED = 3,
-      }
-      
-    }
-    #endregion
-    
-    public const int NameFieldNumber = 1;
-    private bool hasName;
-    private string name_ = "";
-    public bool HasName {
-      get { return hasName; }
-    }
-    public string Name {
-      get { return name_; }
-    }
-    
-    public const int NumberFieldNumber = 3;
-    private bool hasNumber;
-    private int number_;
-    public bool HasNumber {
-      get { return hasNumber; }
-    }
-    public int Number {
-      get { return number_; }
-    }
-    
-    public const int LabelFieldNumber = 4;
-    private bool hasLabel;
-    private global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Types.Label label_ = global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Types.Label.LABEL_OPTIONAL;
-    public bool HasLabel {
-      get { return hasLabel; }
-    }
-    public global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Types.Label Label {
-      get { return label_; }
-    }
-    
-    public const int TypeFieldNumber = 5;
-    private bool hasType;
-    private global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Types.Type type_ = global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Types.Type.TYPE_DOUBLE;
-    public bool HasType {
-      get { return hasType; }
-    }
-    public global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Types.Type Type {
-      get { return type_; }
-    }
-    
-    public const int TypeNameFieldNumber = 6;
-    private bool hasTypeName;
-    private string typeName_ = "";
-    public bool HasTypeName {
-      get { return hasTypeName; }
-    }
-    public string TypeName {
-      get { return typeName_; }
-    }
-    
-    public const int ExtendeeFieldNumber = 2;
-    private bool hasExtendee;
-    private string extendee_ = "";
-    public bool HasExtendee {
-      get { return hasExtendee; }
-    }
-    public string Extendee {
-      get { return extendee_; }
-    }
-    
-    public const int DefaultValueFieldNumber = 7;
-    private bool hasDefaultValue;
-    private string defaultValue_ = "";
-    public bool HasDefaultValue {
-      get { return hasDefaultValue; }
-    }
-    public string DefaultValue {
-      get { return defaultValue_; }
-    }
-    
-    public const int OptionsFieldNumber = 8;
-    private bool hasOptions;
-    private global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions options_;
-    public bool HasOptions {
-      get { return hasOptions; }
-    }
-    public global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions Options {
-      get { return options_ ?? global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions.DefaultInstance; }
-    }
-    
-    public override bool IsInitialized {
-      get {
-        if (HasOptions) {
-          if (!Options.IsInitialized) return false;
-        }
-        return true;
-      }
-    }
-    
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      int size = SerializedSize;
-      string[] field_names = _fieldDescriptorProtoFieldNames;
-      if (hasName) {
-        output.WriteString(1, field_names[3], Name);
-      }
-      if (hasExtendee) {
-        output.WriteString(2, field_names[1], Extendee);
-      }
-      if (hasNumber) {
-        output.WriteInt32(3, field_names[4], Number);
-      }
-      if (hasLabel) {
-        output.WriteEnum(4, field_names[2], (int) Label, Label);
-      }
-      if (hasType) {
-        output.WriteEnum(5, field_names[6], (int) Type, Type);
-      }
-      if (hasTypeName) {
-        output.WriteString(6, field_names[7], TypeName);
-      }
-      if (hasDefaultValue) {
-        output.WriteString(7, field_names[0], DefaultValue);
-      }
-      if (hasOptions) {
-        output.WriteMessage(8, field_names[5], Options);
-      }
-      UnknownFields.WriteTo(output);
-    }
-    
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        
-        size = 0;
-        if (hasName) {
-          size += pb::CodedOutputStream.ComputeStringSize(1, Name);
-        }
-        if (hasNumber) {
-          size += pb::CodedOutputStream.ComputeInt32Size(3, Number);
-        }
-        if (hasLabel) {
-          size += pb::CodedOutputStream.ComputeEnumSize(4, (int) Label);
-        }
-        if (hasType) {
-          size += pb::CodedOutputStream.ComputeEnumSize(5, (int) Type);
-        }
-        if (hasTypeName) {
-          size += pb::CodedOutputStream.ComputeStringSize(6, TypeName);
-        }
-        if (hasExtendee) {
-          size += pb::CodedOutputStream.ComputeStringSize(2, Extendee);
-        }
-        if (hasDefaultValue) {
-          size += pb::CodedOutputStream.ComputeStringSize(7, DefaultValue);
-        }
-        if (hasOptions) {
-          size += pb::CodedOutputStream.ComputeMessageSize(8, Options);
-        }
-        size += UnknownFields.SerializedSize;
-        memoizedSerializedSize = size;
-        return size;
-      }
-    }
-    
-    public static FieldDescriptorProto ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static FieldDescriptorProto ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static FieldDescriptorProto ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static FieldDescriptorProto ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static FieldDescriptorProto ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static FieldDescriptorProto ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static FieldDescriptorProto ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static FieldDescriptorProto ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static FieldDescriptorProto ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static FieldDescriptorProto ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private FieldDescriptorProto MakeReadOnly() {
-      return this;
-    }
-    
-    public static Builder CreateBuilder() { return new Builder(); }
-    public override Builder ToBuilder() { return CreateBuilder(this); }
-    public override Builder CreateBuilderForType() { return new Builder(); }
-    public static Builder CreateBuilder(FieldDescriptorProto prototype) {
-      return new Builder(prototype);
-    }
-    
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
-    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
-    public sealed partial class Builder : pb::GeneratedBuilder<FieldDescriptorProto, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(FieldDescriptorProto cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-      
-      private bool resultIsReadOnly;
-      private FieldDescriptorProto result;
-      
-      private FieldDescriptorProto PrepareBuilder() {
-        if (resultIsReadOnly) {
-          FieldDescriptorProto original = result;
-          result = new FieldDescriptorProto();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-      
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-      
-      protected override FieldDescriptorProto MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-      
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-      
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-      
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Descriptor; }
-      }
-      
-      public override FieldDescriptorProto DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.DefaultInstance; }
-      }
-      
-      public override FieldDescriptorProto BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-      
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is FieldDescriptorProto) {
-          return MergeFrom((FieldDescriptorProto) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-      
-      public override Builder MergeFrom(FieldDescriptorProto other) {
-        if (other == global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.HasName) {
-          Name = other.Name;
-        }
-        if (other.HasNumber) {
-          Number = other.Number;
-        }
-        if (other.HasLabel) {
-          Label = other.Label;
-        }
-        if (other.HasType) {
-          Type = other.Type;
-        }
-        if (other.HasTypeName) {
-          TypeName = other.TypeName;
-        }
-        if (other.HasExtendee) {
-          Extendee = other.Extendee;
-        }
-        if (other.HasDefaultValue) {
-          DefaultValue = other.DefaultValue;
-        }
-        if (other.HasOptions) {
-          MergeOptions(other.Options);
-        }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-      
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-      
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_fieldDescriptorProtoFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _fieldDescriptorProtoFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            default: {
-              if (pb::WireFormat.IsEndGroupTag(tag)) {
-                if (unknownFields != null) {
-                  this.UnknownFields = unknownFields.Build();
-                }
-                return this;
-              }
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              break;
-            }
-            case 10: {
-              result.hasName = input.ReadString(ref result.name_);
-              break;
-            }
-            case 18: {
-              result.hasExtendee = input.ReadString(ref result.extendee_);
-              break;
-            }
-            case 24: {
-              result.hasNumber = input.ReadInt32(ref result.number_);
-              break;
-            }
-            case 32: {
-              object unknown;
-              if(input.ReadEnum(ref result.label_, out unknown)) {
-                result.hasLabel = true;
-              } else if(unknown is int) {
-                if (unknownFields == null) {
-                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-                }
-                unknownFields.MergeVarintField(4, (ulong)(int)unknown);
-              }
-              break;
-            }
-            case 40: {
-              object unknown;
-              if(input.ReadEnum(ref result.type_, out unknown)) {
-                result.hasType = true;
-              } else if(unknown is int) {
-                if (unknownFields == null) {
-                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-                }
-                unknownFields.MergeVarintField(5, (ulong)(int)unknown);
-              }
-              break;
-            }
-            case 50: {
-              result.hasTypeName = input.ReadString(ref result.typeName_);
-              break;
-            }
-            case 58: {
-              result.hasDefaultValue = input.ReadString(ref result.defaultValue_);
-              break;
-            }
-            case 66: {
-              global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions.Builder subBuilder = global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions.CreateBuilder();
-              if (result.hasOptions) {
-                subBuilder.MergeFrom(Options);
-              }
-              input.ReadMessage(subBuilder, extensionRegistry);
-              Options = subBuilder.BuildPartial();
-              break;
-            }
-          }
-        }
-        
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-      
-      
-      public bool HasName {
-        get { return result.hasName; }
-      }
-      public string Name {
-        get { return result.Name; }
-        set { SetName(value); }
-      }
-      public Builder SetName(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasName = true;
-        result.name_ = value;
-        return this;
-      }
-      public Builder ClearName() {
-        PrepareBuilder();
-        result.hasName = false;
-        result.name_ = "";
-        return this;
-      }
-      
-      public bool HasNumber {
-        get { return result.hasNumber; }
-      }
-      public int Number {
-        get { return result.Number; }
-        set { SetNumber(value); }
-      }
-      public Builder SetNumber(int value) {
-        PrepareBuilder();
-        result.hasNumber = true;
-        result.number_ = value;
-        return this;
-      }
-      public Builder ClearNumber() {
-        PrepareBuilder();
-        result.hasNumber = false;
-        result.number_ = 0;
-        return this;
-      }
-      
-      public bool HasLabel {
-       get { return result.hasLabel; }
-      }
-      public global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Types.Label Label {
-        get { return result.Label; }
-        set { SetLabel(value); }
-      }
-      public Builder SetLabel(global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Types.Label value) {
-        PrepareBuilder();
-        result.hasLabel = true;
-        result.label_ = value;
-        return this;
-      }
-      public Builder ClearLabel() {
-        PrepareBuilder();
-        result.hasLabel = false;
-        result.label_ = global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Types.Label.LABEL_OPTIONAL;
-        return this;
-      }
-      
-      public bool HasType {
-       get { return result.hasType; }
-      }
-      public global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Types.Type Type {
-        get { return result.Type; }
-        set { SetType(value); }
-      }
-      public Builder SetType(global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Types.Type value) {
-        PrepareBuilder();
-        result.hasType = true;
-        result.type_ = value;
-        return this;
-      }
-      public Builder ClearType() {
-        PrepareBuilder();
-        result.hasType = false;
-        result.type_ = global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Types.Type.TYPE_DOUBLE;
-        return this;
-      }
-      
-      public bool HasTypeName {
-        get { return result.hasTypeName; }
-      }
-      public string TypeName {
-        get { return result.TypeName; }
-        set { SetTypeName(value); }
-      }
-      public Builder SetTypeName(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasTypeName = true;
-        result.typeName_ = value;
-        return this;
-      }
-      public Builder ClearTypeName() {
-        PrepareBuilder();
-        result.hasTypeName = false;
-        result.typeName_ = "";
-        return this;
-      }
-      
-      public bool HasExtendee {
-        get { return result.hasExtendee; }
-      }
-      public string Extendee {
-        get { return result.Extendee; }
-        set { SetExtendee(value); }
-      }
-      public Builder SetExtendee(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasExtendee = true;
-        result.extendee_ = value;
-        return this;
-      }
-      public Builder ClearExtendee() {
-        PrepareBuilder();
-        result.hasExtendee = false;
-        result.extendee_ = "";
-        return this;
-      }
-      
-      public bool HasDefaultValue {
-        get { return result.hasDefaultValue; }
-      }
-      public string DefaultValue {
-        get { return result.DefaultValue; }
-        set { SetDefaultValue(value); }
-      }
-      public Builder SetDefaultValue(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasDefaultValue = true;
-        result.defaultValue_ = value;
-        return this;
-      }
-      public Builder ClearDefaultValue() {
-        PrepareBuilder();
-        result.hasDefaultValue = false;
-        result.defaultValue_ = "";
-        return this;
-      }
-      
-      public bool HasOptions {
-       get { return result.hasOptions; }
-      }
-      public global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions Options {
-        get { return result.Options; }
-        set { SetOptions(value); }
-      }
-      public Builder SetOptions(global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasOptions = true;
-        result.options_ = value;
-        return this;
-      }
-      public Builder SetOptions(global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.hasOptions = true;
-        result.options_ = builderForValue.Build();
-        return this;
-      }
-      public Builder MergeOptions(global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        if (result.hasOptions &&
-            result.options_ != global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions.DefaultInstance) {
-            result.options_ = global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions.CreateBuilder(result.options_).MergeFrom(value).BuildPartial();
-        } else {
-          result.options_ = value;
-        }
-        result.hasOptions = true;
-        return this;
-      }
-      public Builder ClearOptions() {
-        PrepareBuilder();
-        result.hasOptions = false;
-        result.options_ = null;
-        return this;
-      }
-    }
-    static FieldDescriptorProto() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, null);
-    }
-  }
-  
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
-  [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
-  public sealed partial class EnumDescriptorProto : pb::GeneratedMessage<EnumDescriptorProto, EnumDescriptorProto.Builder> {
-    private EnumDescriptorProto() { }
-    private static readonly EnumDescriptorProto defaultInstance = new EnumDescriptorProto().MakeReadOnly();
-    private static readonly string[] _enumDescriptorProtoFieldNames = new string[] { "name", "options", "value" };
-    private static readonly uint[] _enumDescriptorProtoFieldTags = new uint[] { 10, 26, 18 };
-    public static EnumDescriptorProto DefaultInstance {
-      get { return defaultInstance; }
-    }
-    
-    public override EnumDescriptorProto DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-    
-    protected override EnumDescriptorProto ThisMessage {
-      get { return this; }
-    }
-    
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_EnumDescriptorProto__Descriptor; }
-    }
-    
-    protected override pb::FieldAccess.FieldAccessorTable<EnumDescriptorProto, EnumDescriptorProto.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_EnumDescriptorProto__FieldAccessorTable; }
-    }
-    
-    public const int NameFieldNumber = 1;
-    private bool hasName;
-    private string name_ = "";
-    public bool HasName {
-      get { return hasName; }
-    }
-    public string Name {
-      get { return name_; }
-    }
-    
-    public const int ValueFieldNumber = 2;
-    private pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.EnumValueDescriptorProto> value_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.EnumValueDescriptorProto>();
-    public scg::IList<global::Google.ProtocolBuffers.DescriptorProtos.EnumValueDescriptorProto> ValueList {
-      get { return value_; }
-    }
-    public int ValueCount {
-      get { return value_.Count; }
-    }
-    public global::Google.ProtocolBuffers.DescriptorProtos.EnumValueDescriptorProto GetValue(int index) {
-      return value_[index];
-    }
-    
-    public const int OptionsFieldNumber = 3;
-    private bool hasOptions;
-    private global::Google.ProtocolBuffers.DescriptorProtos.EnumOptions options_;
-    public bool HasOptions {
-      get { return hasOptions; }
-    }
-    public global::Google.ProtocolBuffers.DescriptorProtos.EnumOptions Options {
-      get { return options_ ?? global::Google.ProtocolBuffers.DescriptorProtos.EnumOptions.DefaultInstance; }
-    }
-    
-    public override bool IsInitialized {
-      get {
-        foreach (global::Google.ProtocolBuffers.DescriptorProtos.EnumValueDescriptorProto element in ValueList) {
-          if (!element.IsInitialized) return false;
-        }
-        if (HasOptions) {
-          if (!Options.IsInitialized) return false;
-        }
-        return true;
-      }
-    }
-    
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      int size = SerializedSize;
-      string[] field_names = _enumDescriptorProtoFieldNames;
-      if (hasName) {
-        output.WriteString(1, field_names[0], Name);
-      }
-      if (value_.Count > 0) {
-        output.WriteMessageArray(2, field_names[2], value_);
-      }
-      if (hasOptions) {
-        output.WriteMessage(3, field_names[1], Options);
-      }
-      UnknownFields.WriteTo(output);
-    }
-    
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        
-        size = 0;
-        if (hasName) {
-          size += pb::CodedOutputStream.ComputeStringSize(1, Name);
-        }
-        foreach (global::Google.ProtocolBuffers.DescriptorProtos.EnumValueDescriptorProto element in ValueList) {
-          size += pb::CodedOutputStream.ComputeMessageSize(2, element);
-        }
-        if (hasOptions) {
-          size += pb::CodedOutputStream.ComputeMessageSize(3, Options);
-        }
-        size += UnknownFields.SerializedSize;
-        memoizedSerializedSize = size;
-        return size;
-      }
-    }
-    
-    public static EnumDescriptorProto ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static EnumDescriptorProto ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static EnumDescriptorProto ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static EnumDescriptorProto ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static EnumDescriptorProto ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static EnumDescriptorProto ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static EnumDescriptorProto ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static EnumDescriptorProto ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static EnumDescriptorProto ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static EnumDescriptorProto ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private EnumDescriptorProto MakeReadOnly() {
-      value_.MakeReadOnly();
-      return this;
-    }
-    
-    public static Builder CreateBuilder() { return new Builder(); }
-    public override Builder ToBuilder() { return CreateBuilder(this); }
-    public override Builder CreateBuilderForType() { return new Builder(); }
-    public static Builder CreateBuilder(EnumDescriptorProto prototype) {
-      return new Builder(prototype);
-    }
-    
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
-    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
-    public sealed partial class Builder : pb::GeneratedBuilder<EnumDescriptorProto, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(EnumDescriptorProto cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-      
-      private bool resultIsReadOnly;
-      private EnumDescriptorProto result;
-      
-      private EnumDescriptorProto PrepareBuilder() {
-        if (resultIsReadOnly) {
-          EnumDescriptorProto original = result;
-          result = new EnumDescriptorProto();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-      
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-      
-      protected override EnumDescriptorProto MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-      
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-      
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-      
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto.Descriptor; }
-      }
-      
-      public override EnumDescriptorProto DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto.DefaultInstance; }
-      }
-      
-      public override EnumDescriptorProto BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-      
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is EnumDescriptorProto) {
-          return MergeFrom((EnumDescriptorProto) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-      
-      public override Builder MergeFrom(EnumDescriptorProto other) {
-        if (other == global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.HasName) {
-          Name = other.Name;
-        }
-        if (other.value_.Count != 0) {
-          result.value_.Add(other.value_);
-        }
-        if (other.HasOptions) {
-          MergeOptions(other.Options);
-        }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-      
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-      
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_enumDescriptorProtoFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _enumDescriptorProtoFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            default: {
-              if (pb::WireFormat.IsEndGroupTag(tag)) {
-                if (unknownFields != null) {
-                  this.UnknownFields = unknownFields.Build();
-                }
-                return this;
-              }
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              break;
-            }
-            case 10: {
-              result.hasName = input.ReadString(ref result.name_);
-              break;
-            }
-            case 18: {
-              input.ReadMessageArray(tag, field_name, result.value_, global::Google.ProtocolBuffers.DescriptorProtos.EnumValueDescriptorProto.DefaultInstance, extensionRegistry);
-              break;
-            }
-            case 26: {
-              global::Google.ProtocolBuffers.DescriptorProtos.EnumOptions.Builder subBuilder = global::Google.ProtocolBuffers.DescriptorProtos.EnumOptions.CreateBuilder();
-              if (result.hasOptions) {
-                subBuilder.MergeFrom(Options);
-              }
-              input.ReadMessage(subBuilder, extensionRegistry);
-              Options = subBuilder.BuildPartial();
-              break;
-            }
-          }
-        }
-        
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-      
-      
-      public bool HasName {
-        get { return result.hasName; }
-      }
-      public string Name {
-        get { return result.Name; }
-        set { SetName(value); }
-      }
-      public Builder SetName(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasName = true;
-        result.name_ = value;
-        return this;
-      }
-      public Builder ClearName() {
-        PrepareBuilder();
-        result.hasName = false;
-        result.name_ = "";
-        return this;
-      }
-      
-      public pbc::IPopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.EnumValueDescriptorProto> ValueList {
-        get { return PrepareBuilder().value_; }
-      }
-      public int ValueCount {
-        get { return result.ValueCount; }
-      }
-      public global::Google.ProtocolBuffers.DescriptorProtos.EnumValueDescriptorProto GetValue(int index) {
-        return result.GetValue(index);
-      }
-      public Builder SetValue(int index, global::Google.ProtocolBuffers.DescriptorProtos.EnumValueDescriptorProto value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.value_[index] = value;
-        return this;
-      }
-      public Builder SetValue(int index, global::Google.ProtocolBuffers.DescriptorProtos.EnumValueDescriptorProto.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.value_[index] = builderForValue.Build();
-        return this;
-      }
-      public Builder AddValue(global::Google.ProtocolBuffers.DescriptorProtos.EnumValueDescriptorProto value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.value_.Add(value);
-        return this;
-      }
-      public Builder AddValue(global::Google.ProtocolBuffers.DescriptorProtos.EnumValueDescriptorProto.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.value_.Add(builderForValue.Build());
-        return this;
-      }
-      public Builder AddRangeValue(scg::IEnumerable<global::Google.ProtocolBuffers.DescriptorProtos.EnumValueDescriptorProto> values) {
-        PrepareBuilder();
-        result.value_.Add(values);
-        return this;
-      }
-      public Builder ClearValue() {
-        PrepareBuilder();
-        result.value_.Clear();
-        return this;
-      }
-      
-      public bool HasOptions {
-       get { return result.hasOptions; }
-      }
-      public global::Google.ProtocolBuffers.DescriptorProtos.EnumOptions Options {
-        get { return result.Options; }
-        set { SetOptions(value); }
-      }
-      public Builder SetOptions(global::Google.ProtocolBuffers.DescriptorProtos.EnumOptions value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasOptions = true;
-        result.options_ = value;
-        return this;
-      }
-      public Builder SetOptions(global::Google.ProtocolBuffers.DescriptorProtos.EnumOptions.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.hasOptions = true;
-        result.options_ = builderForValue.Build();
-        return this;
-      }
-      public Builder MergeOptions(global::Google.ProtocolBuffers.DescriptorProtos.EnumOptions value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        if (result.hasOptions &&
-            result.options_ != global::Google.ProtocolBuffers.DescriptorProtos.EnumOptions.DefaultInstance) {
-            result.options_ = global::Google.ProtocolBuffers.DescriptorProtos.EnumOptions.CreateBuilder(result.options_).MergeFrom(value).BuildPartial();
-        } else {
-          result.options_ = value;
-        }
-        result.hasOptions = true;
-        return this;
-      }
-      public Builder ClearOptions() {
-        PrepareBuilder();
-        result.hasOptions = false;
-        result.options_ = null;
-        return this;
-      }
-    }
-    static EnumDescriptorProto() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, null);
-    }
-  }
-  
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
-  [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
-  public sealed partial class EnumValueDescriptorProto : pb::GeneratedMessage<EnumValueDescriptorProto, EnumValueDescriptorProto.Builder> {
-    private EnumValueDescriptorProto() { }
-    private static readonly EnumValueDescriptorProto defaultInstance = new EnumValueDescriptorProto().MakeReadOnly();
-    private static readonly string[] _enumValueDescriptorProtoFieldNames = new string[] { "name", "number", "options" };
-    private static readonly uint[] _enumValueDescriptorProtoFieldTags = new uint[] { 10, 16, 26 };
-    public static EnumValueDescriptorProto DefaultInstance {
-      get { return defaultInstance; }
-    }
-    
-    public override EnumValueDescriptorProto DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-    
-    protected override EnumValueDescriptorProto ThisMessage {
-      get { return this; }
-    }
-    
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_EnumValueDescriptorProto__Descriptor; }
-    }
-    
-    protected override pb::FieldAccess.FieldAccessorTable<EnumValueDescriptorProto, EnumValueDescriptorProto.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_EnumValueDescriptorProto__FieldAccessorTable; }
-    }
-    
-    public const int NameFieldNumber = 1;
-    private bool hasName;
-    private string name_ = "";
-    public bool HasName {
-      get { return hasName; }
-    }
-    public string Name {
-      get { return name_; }
-    }
-    
-    public const int NumberFieldNumber = 2;
-    private bool hasNumber;
-    private int number_;
-    public bool HasNumber {
-      get { return hasNumber; }
-    }
-    public int Number {
-      get { return number_; }
-    }
-    
-    public const int OptionsFieldNumber = 3;
-    private bool hasOptions;
-    private global::Google.ProtocolBuffers.DescriptorProtos.EnumValueOptions options_;
-    public bool HasOptions {
-      get { return hasOptions; }
-    }
-    public global::Google.ProtocolBuffers.DescriptorProtos.EnumValueOptions Options {
-      get { return options_ ?? global::Google.ProtocolBuffers.DescriptorProtos.EnumValueOptions.DefaultInstance; }
-    }
-    
-    public override bool IsInitialized {
-      get {
-        if (HasOptions) {
-          if (!Options.IsInitialized) return false;
-        }
-        return true;
-      }
-    }
-    
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      int size = SerializedSize;
-      string[] field_names = _enumValueDescriptorProtoFieldNames;
-      if (hasName) {
-        output.WriteString(1, field_names[0], Name);
-      }
-      if (hasNumber) {
-        output.WriteInt32(2, field_names[1], Number);
-      }
-      if (hasOptions) {
-        output.WriteMessage(3, field_names[2], Options);
-      }
-      UnknownFields.WriteTo(output);
-    }
-    
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        
-        size = 0;
-        if (hasName) {
-          size += pb::CodedOutputStream.ComputeStringSize(1, Name);
-        }
-        if (hasNumber) {
-          size += pb::CodedOutputStream.ComputeInt32Size(2, Number);
-        }
-        if (hasOptions) {
-          size += pb::CodedOutputStream.ComputeMessageSize(3, Options);
-        }
-        size += UnknownFields.SerializedSize;
-        memoizedSerializedSize = size;
-        return size;
-      }
-    }
-    
-    public static EnumValueDescriptorProto ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static EnumValueDescriptorProto ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static EnumValueDescriptorProto ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static EnumValueDescriptorProto ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static EnumValueDescriptorProto ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static EnumValueDescriptorProto ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static EnumValueDescriptorProto ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static EnumValueDescriptorProto ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static EnumValueDescriptorProto ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static EnumValueDescriptorProto ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private EnumValueDescriptorProto MakeReadOnly() {
-      return this;
-    }
-    
-    public static Builder CreateBuilder() { return new Builder(); }
-    public override Builder ToBuilder() { return CreateBuilder(this); }
-    public override Builder CreateBuilderForType() { return new Builder(); }
-    public static Builder CreateBuilder(EnumValueDescriptorProto prototype) {
-      return new Builder(prototype);
-    }
-    
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
-    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
-    public sealed partial class Builder : pb::GeneratedBuilder<EnumValueDescriptorProto, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(EnumValueDescriptorProto cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-      
-      private bool resultIsReadOnly;
-      private EnumValueDescriptorProto result;
-      
-      private EnumValueDescriptorProto PrepareBuilder() {
-        if (resultIsReadOnly) {
-          EnumValueDescriptorProto original = result;
-          result = new EnumValueDescriptorProto();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-      
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-      
-      protected override EnumValueDescriptorProto MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-      
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-      
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-      
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.DescriptorProtos.EnumValueDescriptorProto.Descriptor; }
-      }
-      
-      public override EnumValueDescriptorProto DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.DescriptorProtos.EnumValueDescriptorProto.DefaultInstance; }
-      }
-      
-      public override EnumValueDescriptorProto BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-      
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is EnumValueDescriptorProto) {
-          return MergeFrom((EnumValueDescriptorProto) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-      
-      public override Builder MergeFrom(EnumValueDescriptorProto other) {
-        if (other == global::Google.ProtocolBuffers.DescriptorProtos.EnumValueDescriptorProto.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.HasName) {
-          Name = other.Name;
-        }
-        if (other.HasNumber) {
-          Number = other.Number;
-        }
-        if (other.HasOptions) {
-          MergeOptions(other.Options);
-        }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-      
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-      
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_enumValueDescriptorProtoFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _enumValueDescriptorProtoFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            default: {
-              if (pb::WireFormat.IsEndGroupTag(tag)) {
-                if (unknownFields != null) {
-                  this.UnknownFields = unknownFields.Build();
-                }
-                return this;
-              }
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              break;
-            }
-            case 10: {
-              result.hasName = input.ReadString(ref result.name_);
-              break;
-            }
-            case 16: {
-              result.hasNumber = input.ReadInt32(ref result.number_);
-              break;
-            }
-            case 26: {
-              global::Google.ProtocolBuffers.DescriptorProtos.EnumValueOptions.Builder subBuilder = global::Google.ProtocolBuffers.DescriptorProtos.EnumValueOptions.CreateBuilder();
-              if (result.hasOptions) {
-                subBuilder.MergeFrom(Options);
-              }
-              input.ReadMessage(subBuilder, extensionRegistry);
-              Options = subBuilder.BuildPartial();
-              break;
-            }
-          }
-        }
-        
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-      
-      
-      public bool HasName {
-        get { return result.hasName; }
-      }
-      public string Name {
-        get { return result.Name; }
-        set { SetName(value); }
-      }
-      public Builder SetName(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasName = true;
-        result.name_ = value;
-        return this;
-      }
-      public Builder ClearName() {
-        PrepareBuilder();
-        result.hasName = false;
-        result.name_ = "";
-        return this;
-      }
-      
-      public bool HasNumber {
-        get { return result.hasNumber; }
-      }
-      public int Number {
-        get { return result.Number; }
-        set { SetNumber(value); }
-      }
-      public Builder SetNumber(int value) {
-        PrepareBuilder();
-        result.hasNumber = true;
-        result.number_ = value;
-        return this;
-      }
-      public Builder ClearNumber() {
-        PrepareBuilder();
-        result.hasNumber = false;
-        result.number_ = 0;
-        return this;
-      }
-      
-      public bool HasOptions {
-       get { return result.hasOptions; }
-      }
-      public global::Google.ProtocolBuffers.DescriptorProtos.EnumValueOptions Options {
-        get { return result.Options; }
-        set { SetOptions(value); }
-      }
-      public Builder SetOptions(global::Google.ProtocolBuffers.DescriptorProtos.EnumValueOptions value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasOptions = true;
-        result.options_ = value;
-        return this;
-      }
-      public Builder SetOptions(global::Google.ProtocolBuffers.DescriptorProtos.EnumValueOptions.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.hasOptions = true;
-        result.options_ = builderForValue.Build();
-        return this;
-      }
-      public Builder MergeOptions(global::Google.ProtocolBuffers.DescriptorProtos.EnumValueOptions value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        if (result.hasOptions &&
-            result.options_ != global::Google.ProtocolBuffers.DescriptorProtos.EnumValueOptions.DefaultInstance) {
-            result.options_ = global::Google.ProtocolBuffers.DescriptorProtos.EnumValueOptions.CreateBuilder(result.options_).MergeFrom(value).BuildPartial();
-        } else {
-          result.options_ = value;
-        }
-        result.hasOptions = true;
-        return this;
-      }
-      public Builder ClearOptions() {
-        PrepareBuilder();
-        result.hasOptions = false;
-        result.options_ = null;
-        return this;
-      }
-    }
-    static EnumValueDescriptorProto() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, null);
-    }
-  }
-  
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
-  [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
-  public sealed partial class ServiceDescriptorProto : pb::GeneratedMessage<ServiceDescriptorProto, ServiceDescriptorProto.Builder> {
-    private ServiceDescriptorProto() { }
-    private static readonly ServiceDescriptorProto defaultInstance = new ServiceDescriptorProto().MakeReadOnly();
-    private static readonly string[] _serviceDescriptorProtoFieldNames = new string[] { "method", "name", "options" };
-    private static readonly uint[] _serviceDescriptorProtoFieldTags = new uint[] { 18, 10, 26 };
-    public static ServiceDescriptorProto DefaultInstance {
-      get { return defaultInstance; }
-    }
-    
-    public override ServiceDescriptorProto DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-    
-    protected override ServiceDescriptorProto ThisMessage {
-      get { return this; }
-    }
-    
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_ServiceDescriptorProto__Descriptor; }
-    }
-    
-    protected override pb::FieldAccess.FieldAccessorTable<ServiceDescriptorProto, ServiceDescriptorProto.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_ServiceDescriptorProto__FieldAccessorTable; }
-    }
-    
-    public const int NameFieldNumber = 1;
-    private bool hasName;
-    private string name_ = "";
-    public bool HasName {
-      get { return hasName; }
-    }
-    public string Name {
-      get { return name_; }
-    }
-    
-    public const int MethodFieldNumber = 2;
-    private pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.MethodDescriptorProto> method_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.MethodDescriptorProto>();
-    public scg::IList<global::Google.ProtocolBuffers.DescriptorProtos.MethodDescriptorProto> MethodList {
-      get { return method_; }
-    }
-    public int MethodCount {
-      get { return method_.Count; }
-    }
-    public global::Google.ProtocolBuffers.DescriptorProtos.MethodDescriptorProto GetMethod(int index) {
-      return method_[index];
-    }
-    
-    public const int OptionsFieldNumber = 3;
-    private bool hasOptions;
-    private global::Google.ProtocolBuffers.DescriptorProtos.ServiceOptions options_;
-    public bool HasOptions {
-      get { return hasOptions; }
-    }
-    public global::Google.ProtocolBuffers.DescriptorProtos.ServiceOptions Options {
-      get { return options_ ?? global::Google.ProtocolBuffers.DescriptorProtos.ServiceOptions.DefaultInstance; }
-    }
-    
-    public override bool IsInitialized {
-      get {
-        foreach (global::Google.ProtocolBuffers.DescriptorProtos.MethodDescriptorProto element in MethodList) {
-          if (!element.IsInitialized) return false;
-        }
-        if (HasOptions) {
-          if (!Options.IsInitialized) return false;
-        }
-        return true;
-      }
-    }
-    
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      int size = SerializedSize;
-      string[] field_names = _serviceDescriptorProtoFieldNames;
-      if (hasName) {
-        output.WriteString(1, field_names[1], Name);
-      }
-      if (method_.Count > 0) {
-        output.WriteMessageArray(2, field_names[0], method_);
-      }
-      if (hasOptions) {
-        output.WriteMessage(3, field_names[2], Options);
-      }
-      UnknownFields.WriteTo(output);
-    }
-    
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        
-        size = 0;
-        if (hasName) {
-          size += pb::CodedOutputStream.ComputeStringSize(1, Name);
-        }
-        foreach (global::Google.ProtocolBuffers.DescriptorProtos.MethodDescriptorProto element in MethodList) {
-          size += pb::CodedOutputStream.ComputeMessageSize(2, element);
-        }
-        if (hasOptions) {
-          size += pb::CodedOutputStream.ComputeMessageSize(3, Options);
-        }
-        size += UnknownFields.SerializedSize;
-        memoizedSerializedSize = size;
-        return size;
-      }
-    }
-    
-    public static ServiceDescriptorProto ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static ServiceDescriptorProto ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static ServiceDescriptorProto ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static ServiceDescriptorProto ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static ServiceDescriptorProto ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static ServiceDescriptorProto ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static ServiceDescriptorProto ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static ServiceDescriptorProto ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static ServiceDescriptorProto ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static ServiceDescriptorProto ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private ServiceDescriptorProto MakeReadOnly() {
-      method_.MakeReadOnly();
-      return this;
-    }
-    
-    public static Builder CreateBuilder() { return new Builder(); }
-    public override Builder ToBuilder() { return CreateBuilder(this); }
-    public override Builder CreateBuilderForType() { return new Builder(); }
-    public static Builder CreateBuilder(ServiceDescriptorProto prototype) {
-      return new Builder(prototype);
-    }
-    
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
-    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
-    public sealed partial class Builder : pb::GeneratedBuilder<ServiceDescriptorProto, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(ServiceDescriptorProto cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-      
-      private bool resultIsReadOnly;
-      private ServiceDescriptorProto result;
-      
-      private ServiceDescriptorProto PrepareBuilder() {
-        if (resultIsReadOnly) {
-          ServiceDescriptorProto original = result;
-          result = new ServiceDescriptorProto();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-      
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-      
-      protected override ServiceDescriptorProto MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-      
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-      
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-      
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.DescriptorProtos.ServiceDescriptorProto.Descriptor; }
-      }
-      
-      public override ServiceDescriptorProto DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.DescriptorProtos.ServiceDescriptorProto.DefaultInstance; }
-      }
-      
-      public override ServiceDescriptorProto BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-      
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is ServiceDescriptorProto) {
-          return MergeFrom((ServiceDescriptorProto) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-      
-      public override Builder MergeFrom(ServiceDescriptorProto other) {
-        if (other == global::Google.ProtocolBuffers.DescriptorProtos.ServiceDescriptorProto.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.HasName) {
-          Name = other.Name;
-        }
-        if (other.method_.Count != 0) {
-          result.method_.Add(other.method_);
-        }
-        if (other.HasOptions) {
-          MergeOptions(other.Options);
-        }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-      
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-      
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_serviceDescriptorProtoFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _serviceDescriptorProtoFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            default: {
-              if (pb::WireFormat.IsEndGroupTag(tag)) {
-                if (unknownFields != null) {
-                  this.UnknownFields = unknownFields.Build();
-                }
-                return this;
-              }
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              break;
-            }
-            case 10: {
-              result.hasName = input.ReadString(ref result.name_);
-              break;
-            }
-            case 18: {
-              input.ReadMessageArray(tag, field_name, result.method_, global::Google.ProtocolBuffers.DescriptorProtos.MethodDescriptorProto.DefaultInstance, extensionRegistry);
-              break;
-            }
-            case 26: {
-              global::Google.ProtocolBuffers.DescriptorProtos.ServiceOptions.Builder subBuilder = global::Google.ProtocolBuffers.DescriptorProtos.ServiceOptions.CreateBuilder();
-              if (result.hasOptions) {
-                subBuilder.MergeFrom(Options);
-              }
-              input.ReadMessage(subBuilder, extensionRegistry);
-              Options = subBuilder.BuildPartial();
-              break;
-            }
-          }
-        }
-        
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-      
-      
-      public bool HasName {
-        get { return result.hasName; }
-      }
-      public string Name {
-        get { return result.Name; }
-        set { SetName(value); }
-      }
-      public Builder SetName(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasName = true;
-        result.name_ = value;
-        return this;
-      }
-      public Builder ClearName() {
-        PrepareBuilder();
-        result.hasName = false;
-        result.name_ = "";
-        return this;
-      }
-      
-      public pbc::IPopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.MethodDescriptorProto> MethodList {
-        get { return PrepareBuilder().method_; }
-      }
-      public int MethodCount {
-        get { return result.MethodCount; }
-      }
-      public global::Google.ProtocolBuffers.DescriptorProtos.MethodDescriptorProto GetMethod(int index) {
-        return result.GetMethod(index);
-      }
-      public Builder SetMethod(int index, global::Google.ProtocolBuffers.DescriptorProtos.MethodDescriptorProto value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.method_[index] = value;
-        return this;
-      }
-      public Builder SetMethod(int index, global::Google.ProtocolBuffers.DescriptorProtos.MethodDescriptorProto.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.method_[index] = builderForValue.Build();
-        return this;
-      }
-      public Builder AddMethod(global::Google.ProtocolBuffers.DescriptorProtos.MethodDescriptorProto value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.method_.Add(value);
-        return this;
-      }
-      public Builder AddMethod(global::Google.ProtocolBuffers.DescriptorProtos.MethodDescriptorProto.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.method_.Add(builderForValue.Build());
-        return this;
-      }
-      public Builder AddRangeMethod(scg::IEnumerable<global::Google.ProtocolBuffers.DescriptorProtos.MethodDescriptorProto> values) {
-        PrepareBuilder();
-        result.method_.Add(values);
-        return this;
-      }
-      public Builder ClearMethod() {
-        PrepareBuilder();
-        result.method_.Clear();
-        return this;
-      }
-      
-      public bool HasOptions {
-       get { return result.hasOptions; }
-      }
-      public global::Google.ProtocolBuffers.DescriptorProtos.ServiceOptions Options {
-        get { return result.Options; }
-        set { SetOptions(value); }
-      }
-      public Builder SetOptions(global::Google.ProtocolBuffers.DescriptorProtos.ServiceOptions value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasOptions = true;
-        result.options_ = value;
-        return this;
-      }
-      public Builder SetOptions(global::Google.ProtocolBuffers.DescriptorProtos.ServiceOptions.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.hasOptions = true;
-        result.options_ = builderForValue.Build();
-        return this;
-      }
-      public Builder MergeOptions(global::Google.ProtocolBuffers.DescriptorProtos.ServiceOptions value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        if (result.hasOptions &&
-            result.options_ != global::Google.ProtocolBuffers.DescriptorProtos.ServiceOptions.DefaultInstance) {
-            result.options_ = global::Google.ProtocolBuffers.DescriptorProtos.ServiceOptions.CreateBuilder(result.options_).MergeFrom(value).BuildPartial();
-        } else {
-          result.options_ = value;
-        }
-        result.hasOptions = true;
-        return this;
-      }
-      public Builder ClearOptions() {
-        PrepareBuilder();
-        result.hasOptions = false;
-        result.options_ = null;
-        return this;
-      }
-    }
-    static ServiceDescriptorProto() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, null);
-    }
-  }
-  
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
-  [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
-  public sealed partial class MethodDescriptorProto : pb::GeneratedMessage<MethodDescriptorProto, MethodDescriptorProto.Builder> {
-    private MethodDescriptorProto() { }
-    private static readonly MethodDescriptorProto defaultInstance = new MethodDescriptorProto().MakeReadOnly();
-    private static readonly string[] _methodDescriptorProtoFieldNames = new string[] { "input_type", "name", "options", "output_type" };
-    private static readonly uint[] _methodDescriptorProtoFieldTags = new uint[] { 18, 10, 34, 26 };
-    public static MethodDescriptorProto DefaultInstance {
-      get { return defaultInstance; }
-    }
-    
-    public override MethodDescriptorProto DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-    
-    protected override MethodDescriptorProto ThisMessage {
-      get { return this; }
-    }
-    
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_MethodDescriptorProto__Descriptor; }
-    }
-    
-    protected override pb::FieldAccess.FieldAccessorTable<MethodDescriptorProto, MethodDescriptorProto.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_MethodDescriptorProto__FieldAccessorTable; }
-    }
-    
-    public const int NameFieldNumber = 1;
-    private bool hasName;
-    private string name_ = "";
-    public bool HasName {
-      get { return hasName; }
-    }
-    public string Name {
-      get { return name_; }
-    }
-    
-    public const int InputTypeFieldNumber = 2;
-    private bool hasInputType;
-    private string inputType_ = "";
-    public bool HasInputType {
-      get { return hasInputType; }
-    }
-    public string InputType {
-      get { return inputType_; }
-    }
-    
-    public const int OutputTypeFieldNumber = 3;
-    private bool hasOutputType;
-    private string outputType_ = "";
-    public bool HasOutputType {
-      get { return hasOutputType; }
-    }
-    public string OutputType {
-      get { return outputType_; }
-    }
-    
-    public const int OptionsFieldNumber = 4;
-    private bool hasOptions;
-    private global::Google.ProtocolBuffers.DescriptorProtos.MethodOptions options_;
-    public bool HasOptions {
-      get { return hasOptions; }
-    }
-    public global::Google.ProtocolBuffers.DescriptorProtos.MethodOptions Options {
-      get { return options_ ?? global::Google.ProtocolBuffers.DescriptorProtos.MethodOptions.DefaultInstance; }
-    }
-    
-    public override bool IsInitialized {
-      get {
-        if (HasOptions) {
-          if (!Options.IsInitialized) return false;
-        }
-        return true;
-      }
-    }
-    
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      int size = SerializedSize;
-      string[] field_names = _methodDescriptorProtoFieldNames;
-      if (hasName) {
-        output.WriteString(1, field_names[1], Name);
-      }
-      if (hasInputType) {
-        output.WriteString(2, field_names[0], InputType);
-      }
-      if (hasOutputType) {
-        output.WriteString(3, field_names[3], OutputType);
-      }
-      if (hasOptions) {
-        output.WriteMessage(4, field_names[2], Options);
-      }
-      UnknownFields.WriteTo(output);
-    }
-    
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        
-        size = 0;
-        if (hasName) {
-          size += pb::CodedOutputStream.ComputeStringSize(1, Name);
-        }
-        if (hasInputType) {
-          size += pb::CodedOutputStream.ComputeStringSize(2, InputType);
-        }
-        if (hasOutputType) {
-          size += pb::CodedOutputStream.ComputeStringSize(3, OutputType);
-        }
-        if (hasOptions) {
-          size += pb::CodedOutputStream.ComputeMessageSize(4, Options);
-        }
-        size += UnknownFields.SerializedSize;
-        memoizedSerializedSize = size;
-        return size;
-      }
-    }
-    
-    public static MethodDescriptorProto ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static MethodDescriptorProto ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static MethodDescriptorProto ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static MethodDescriptorProto ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static MethodDescriptorProto ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static MethodDescriptorProto ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static MethodDescriptorProto ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static MethodDescriptorProto ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static MethodDescriptorProto ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static MethodDescriptorProto ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private MethodDescriptorProto MakeReadOnly() {
-      return this;
-    }
-    
-    public static Builder CreateBuilder() { return new Builder(); }
-    public override Builder ToBuilder() { return CreateBuilder(this); }
-    public override Builder CreateBuilderForType() { return new Builder(); }
-    public static Builder CreateBuilder(MethodDescriptorProto prototype) {
-      return new Builder(prototype);
-    }
-    
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
-    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
-    public sealed partial class Builder : pb::GeneratedBuilder<MethodDescriptorProto, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(MethodDescriptorProto cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-      
-      private bool resultIsReadOnly;
-      private MethodDescriptorProto result;
-      
-      private MethodDescriptorProto PrepareBuilder() {
-        if (resultIsReadOnly) {
-          MethodDescriptorProto original = result;
-          result = new MethodDescriptorProto();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-      
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-      
-      protected override MethodDescriptorProto MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-      
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-      
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-      
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.DescriptorProtos.MethodDescriptorProto.Descriptor; }
-      }
-      
-      public override MethodDescriptorProto DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.DescriptorProtos.MethodDescriptorProto.DefaultInstance; }
-      }
-      
-      public override MethodDescriptorProto BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-      
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is MethodDescriptorProto) {
-          return MergeFrom((MethodDescriptorProto) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-      
-      public override Builder MergeFrom(MethodDescriptorProto other) {
-        if (other == global::Google.ProtocolBuffers.DescriptorProtos.MethodDescriptorProto.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.HasName) {
-          Name = other.Name;
-        }
-        if (other.HasInputType) {
-          InputType = other.InputType;
-        }
-        if (other.HasOutputType) {
-          OutputType = other.OutputType;
-        }
-        if (other.HasOptions) {
-          MergeOptions(other.Options);
-        }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-      
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-      
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_methodDescriptorProtoFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _methodDescriptorProtoFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            default: {
-              if (pb::WireFormat.IsEndGroupTag(tag)) {
-                if (unknownFields != null) {
-                  this.UnknownFields = unknownFields.Build();
-                }
-                return this;
-              }
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              break;
-            }
-            case 10: {
-              result.hasName = input.ReadString(ref result.name_);
-              break;
-            }
-            case 18: {
-              result.hasInputType = input.ReadString(ref result.inputType_);
-              break;
-            }
-            case 26: {
-              result.hasOutputType = input.ReadString(ref result.outputType_);
-              break;
-            }
-            case 34: {
-              global::Google.ProtocolBuffers.DescriptorProtos.MethodOptions.Builder subBuilder = global::Google.ProtocolBuffers.DescriptorProtos.MethodOptions.CreateBuilder();
-              if (result.hasOptions) {
-                subBuilder.MergeFrom(Options);
-              }
-              input.ReadMessage(subBuilder, extensionRegistry);
-              Options = subBuilder.BuildPartial();
-              break;
-            }
-          }
-        }
-        
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-      
-      
-      public bool HasName {
-        get { return result.hasName; }
-      }
-      public string Name {
-        get { return result.Name; }
-        set { SetName(value); }
-      }
-      public Builder SetName(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasName = true;
-        result.name_ = value;
-        return this;
-      }
-      public Builder ClearName() {
-        PrepareBuilder();
-        result.hasName = false;
-        result.name_ = "";
-        return this;
-      }
-      
-      public bool HasInputType {
-        get { return result.hasInputType; }
-      }
-      public string InputType {
-        get { return result.InputType; }
-        set { SetInputType(value); }
-      }
-      public Builder SetInputType(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasInputType = true;
-        result.inputType_ = value;
-        return this;
-      }
-      public Builder ClearInputType() {
-        PrepareBuilder();
-        result.hasInputType = false;
-        result.inputType_ = "";
-        return this;
-      }
-      
-      public bool HasOutputType {
-        get { return result.hasOutputType; }
-      }
-      public string OutputType {
-        get { return result.OutputType; }
-        set { SetOutputType(value); }
-      }
-      public Builder SetOutputType(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasOutputType = true;
-        result.outputType_ = value;
-        return this;
-      }
-      public Builder ClearOutputType() {
-        PrepareBuilder();
-        result.hasOutputType = false;
-        result.outputType_ = "";
-        return this;
-      }
-      
-      public bool HasOptions {
-       get { return result.hasOptions; }
-      }
-      public global::Google.ProtocolBuffers.DescriptorProtos.MethodOptions Options {
-        get { return result.Options; }
-        set { SetOptions(value); }
-      }
-      public Builder SetOptions(global::Google.ProtocolBuffers.DescriptorProtos.MethodOptions value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasOptions = true;
-        result.options_ = value;
-        return this;
-      }
-      public Builder SetOptions(global::Google.ProtocolBuffers.DescriptorProtos.MethodOptions.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.hasOptions = true;
-        result.options_ = builderForValue.Build();
-        return this;
-      }
-      public Builder MergeOptions(global::Google.ProtocolBuffers.DescriptorProtos.MethodOptions value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        if (result.hasOptions &&
-            result.options_ != global::Google.ProtocolBuffers.DescriptorProtos.MethodOptions.DefaultInstance) {
-            result.options_ = global::Google.ProtocolBuffers.DescriptorProtos.MethodOptions.CreateBuilder(result.options_).MergeFrom(value).BuildPartial();
-        } else {
-          result.options_ = value;
-        }
-        result.hasOptions = true;
-        return this;
-      }
-      public Builder ClearOptions() {
-        PrepareBuilder();
-        result.hasOptions = false;
-        result.options_ = null;
-        return this;
-      }
-    }
-    static MethodDescriptorProto() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, null);
-    }
-  }
-  
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
-  [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
-  public sealed partial class FileOptions : pb::ExtendableMessage<FileOptions, FileOptions.Builder> {
-    private FileOptions() { }
-    private static readonly FileOptions defaultInstance = new FileOptions().MakeReadOnly();
-    private static readonly string[] _fileOptionsFieldNames = new string[] { "cc_generic_services", "java_generate_equals_and_hash", "java_generic_services", "java_multiple_files", "java_outer_classname", "java_package", "optimize_for", "py_generic_services", "uninterpreted_option" };
-    private static readonly uint[] _fileOptionsFieldTags = new uint[] { 128, 160, 136, 80, 66, 10, 72, 144, 7994 };
-    public static FileOptions DefaultInstance {
-      get { return defaultInstance; }
-    }
-    
-    public override FileOptions DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-    
-    protected override FileOptions ThisMessage {
-      get { return this; }
-    }
-    
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_FileOptions__Descriptor; }
-    }
-    
-    protected override pb::FieldAccess.FieldAccessorTable<FileOptions, FileOptions.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_FileOptions__FieldAccessorTable; }
-    }
-    
-    #region Nested types
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
-    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
-    public static class Types {
-      [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
-      [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
-      public enum OptimizeMode {
-        SPEED = 1,
-        CODE_SIZE = 2,
-        LITE_RUNTIME = 3,
-      }
-      
-    }
-    #endregion
-    
-    public const int JavaPackageFieldNumber = 1;
-    private bool hasJavaPackage;
-    private string javaPackage_ = "";
-    public bool HasJavaPackage {
-      get { return hasJavaPackage; }
-    }
-    public string JavaPackage {
-      get { return javaPackage_; }
-    }
-    
-    public const int JavaOuterClassnameFieldNumber = 8;
-    private bool hasJavaOuterClassname;
-    private string javaOuterClassname_ = "";
-    public bool HasJavaOuterClassname {
-      get { return hasJavaOuterClassname; }
-    }
-    public string JavaOuterClassname {
-      get { return javaOuterClassname_; }
-    }
-    
-    public const int JavaMultipleFilesFieldNumber = 10;
-    private bool hasJavaMultipleFiles;
-    private bool javaMultipleFiles_;
-    public bool HasJavaMultipleFiles {
-      get { return hasJavaMultipleFiles; }
-    }
-    public bool JavaMultipleFiles {
-      get { return javaMultipleFiles_; }
-    }
-    
-    public const int JavaGenerateEqualsAndHashFieldNumber = 20;
-    private bool hasJavaGenerateEqualsAndHash;
-    private bool javaGenerateEqualsAndHash_;
-    public bool HasJavaGenerateEqualsAndHash {
-      get { return hasJavaGenerateEqualsAndHash; }
-    }
-    public bool JavaGenerateEqualsAndHash {
-      get { return javaGenerateEqualsAndHash_; }
-    }
-    
-    public const int OptimizeForFieldNumber = 9;
-    private bool hasOptimizeFor;
-    private global::Google.ProtocolBuffers.DescriptorProtos.FileOptions.Types.OptimizeMode optimizeFor_ = global::Google.ProtocolBuffers.DescriptorProtos.FileOptions.Types.OptimizeMode.SPEED;
-    public bool HasOptimizeFor {
-      get { return hasOptimizeFor; }
-    }
-    public global::Google.ProtocolBuffers.DescriptorProtos.FileOptions.Types.OptimizeMode OptimizeFor {
-      get { return optimizeFor_; }
-    }
-    
-    public const int CcGenericServicesFieldNumber = 16;
-    private bool hasCcGenericServices;
-    private bool ccGenericServices_;
-    public bool HasCcGenericServices {
-      get { return hasCcGenericServices; }
-    }
-    public bool CcGenericServices {
-      get { return ccGenericServices_; }
-    }
-    
-    public const int JavaGenericServicesFieldNumber = 17;
-    private bool hasJavaGenericServices;
-    private bool javaGenericServices_;
-    public bool HasJavaGenericServices {
-      get { return hasJavaGenericServices; }
-    }
-    public bool JavaGenericServices {
-      get { return javaGenericServices_; }
-    }
-    
-    public const int PyGenericServicesFieldNumber = 18;
-    private bool hasPyGenericServices;
-    private bool pyGenericServices_;
-    public bool HasPyGenericServices {
-      get { return hasPyGenericServices; }
-    }
-    public bool PyGenericServices {
-      get { return pyGenericServices_; }
-    }
-    
-    public const int UninterpretedOptionFieldNumber = 999;
-    private pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> uninterpretedOption_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption>();
-    public scg::IList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> UninterpretedOptionList {
-      get { return uninterpretedOption_; }
-    }
-    public int UninterpretedOptionCount {
-      get { return uninterpretedOption_.Count; }
-    }
-    public global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption GetUninterpretedOption(int index) {
-      return uninterpretedOption_[index];
-    }
-    
-    public override bool IsInitialized {
-      get {
-        foreach (global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption element in UninterpretedOptionList) {
-          if (!element.IsInitialized) return false;
-        }
-        if (!ExtensionsAreInitialized) return false;
-        return true;
-      }
-    }
-    
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      int size = SerializedSize;
-      string[] field_names = _fileOptionsFieldNames;
-      pb::ExtendableMessage<FileOptions, FileOptions.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
-      if (hasJavaPackage) {
-        output.WriteString(1, field_names[5], JavaPackage);
-      }
-      if (hasJavaOuterClassname) {
-        output.WriteString(8, field_names[4], JavaOuterClassname);
-      }
-      if (hasOptimizeFor) {
-        output.WriteEnum(9, field_names[6], (int) OptimizeFor, OptimizeFor);
-      }
-      if (hasJavaMultipleFiles) {
-        output.WriteBool(10, field_names[3], JavaMultipleFiles);
-      }
-      if (hasCcGenericServices) {
-        output.WriteBool(16, field_names[0], CcGenericServices);
-      }
-      if (hasJavaGenericServices) {
-        output.WriteBool(17, field_names[2], JavaGenericServices);
-      }
-      if (hasPyGenericServices) {
-        output.WriteBool(18, field_names[7], PyGenericServices);
-      }
-      if (hasJavaGenerateEqualsAndHash) {
-        output.WriteBool(20, field_names[1], JavaGenerateEqualsAndHash);
-      }
-      if (uninterpretedOption_.Count > 0) {
-        output.WriteMessageArray(999, field_names[8], uninterpretedOption_);
-      }
-      extensionWriter.WriteUntil(536870912, output);
-      UnknownFields.WriteTo(output);
-    }
-    
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        
-        size = 0;
-        if (hasJavaPackage) {
-          size += pb::CodedOutputStream.ComputeStringSize(1, JavaPackage);
-        }
-        if (hasJavaOuterClassname) {
-          size += pb::CodedOutputStream.ComputeStringSize(8, JavaOuterClassname);
-        }
-        if (hasJavaMultipleFiles) {
-          size += pb::CodedOutputStream.ComputeBoolSize(10, JavaMultipleFiles);
-        }
-        if (hasJavaGenerateEqualsAndHash) {
-          size += pb::CodedOutputStream.ComputeBoolSize(20, JavaGenerateEqualsAndHash);
-        }
-        if (hasOptimizeFor) {
-          size += pb::CodedOutputStream.ComputeEnumSize(9, (int) OptimizeFor);
-        }
-        if (hasCcGenericServices) {
-          size += pb::CodedOutputStream.ComputeBoolSize(16, CcGenericServices);
-        }
-        if (hasJavaGenericServices) {
-          size += pb::CodedOutputStream.ComputeBoolSize(17, JavaGenericServices);
-        }
-        if (hasPyGenericServices) {
-          size += pb::CodedOutputStream.ComputeBoolSize(18, PyGenericServices);
-        }
-        foreach (global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption element in UninterpretedOptionList) {
-          size += pb::CodedOutputStream.ComputeMessageSize(999, element);
-        }
-        size += ExtensionsSerializedSize;
-        size += UnknownFields.SerializedSize;
-        memoizedSerializedSize = size;
-        return size;
-      }
-    }
-    
-    public static FileOptions ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static FileOptions ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static FileOptions ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static FileOptions ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static FileOptions ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static FileOptions ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static FileOptions ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static FileOptions ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static FileOptions ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static FileOptions ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private FileOptions MakeReadOnly() {
-      uninterpretedOption_.MakeReadOnly();
-      return this;
-    }
-    
-    public static Builder CreateBuilder() { return new Builder(); }
-    public override Builder ToBuilder() { return CreateBuilder(this); }
-    public override Builder CreateBuilderForType() { return new Builder(); }
-    public static Builder CreateBuilder(FileOptions prototype) {
-      return new Builder(prototype);
-    }
-    
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
-    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
-    public sealed partial class Builder : pb::ExtendableBuilder<FileOptions, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(FileOptions cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-      
-      private bool resultIsReadOnly;
-      private FileOptions result;
-      
-      private FileOptions PrepareBuilder() {
-        if (resultIsReadOnly) {
-          FileOptions original = result;
-          result = new FileOptions();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-      
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-      
-      protected override FileOptions MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-      
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-      
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-      
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.DescriptorProtos.FileOptions.Descriptor; }
-      }
-      
-      public override FileOptions DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.DescriptorProtos.FileOptions.DefaultInstance; }
-      }
-      
-      public override FileOptions BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-      
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is FileOptions) {
-          return MergeFrom((FileOptions) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-      
-      public override Builder MergeFrom(FileOptions other) {
-        if (other == global::Google.ProtocolBuffers.DescriptorProtos.FileOptions.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.HasJavaPackage) {
-          JavaPackage = other.JavaPackage;
-        }
-        if (other.HasJavaOuterClassname) {
-          JavaOuterClassname = other.JavaOuterClassname;
-        }
-        if (other.HasJavaMultipleFiles) {
-          JavaMultipleFiles = other.JavaMultipleFiles;
-        }
-        if (other.HasJavaGenerateEqualsAndHash) {
-          JavaGenerateEqualsAndHash = other.JavaGenerateEqualsAndHash;
-        }
-        if (other.HasOptimizeFor) {
-          OptimizeFor = other.OptimizeFor;
-        }
-        if (other.HasCcGenericServices) {
-          CcGenericServices = other.CcGenericServices;
-        }
-        if (other.HasJavaGenericServices) {
-          JavaGenericServices = other.JavaGenericServices;
-        }
-        if (other.HasPyGenericServices) {
-          PyGenericServices = other.PyGenericServices;
-        }
-        if (other.uninterpretedOption_.Count != 0) {
-          result.uninterpretedOption_.Add(other.uninterpretedOption_);
-        }
-          this.MergeExtensionFields(other);
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-      
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-      
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_fileOptionsFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _fileOptionsFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            default: {
-              if (pb::WireFormat.IsEndGroupTag(tag)) {
-                if (unknownFields != null) {
-                  this.UnknownFields = unknownFields.Build();
-                }
-                return this;
-              }
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              break;
-            }
-            case 10: {
-              result.hasJavaPackage = input.ReadString(ref result.javaPackage_);
-              break;
-            }
-            case 66: {
-              result.hasJavaOuterClassname = input.ReadString(ref result.javaOuterClassname_);
-              break;
-            }
-            case 72: {
-              object unknown;
-              if(input.ReadEnum(ref result.optimizeFor_, out unknown)) {
-                result.hasOptimizeFor = true;
-              } else if(unknown is int) {
-                if (unknownFields == null) {
-                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-                }
-                unknownFields.MergeVarintField(9, (ulong)(int)unknown);
-              }
-              break;
-            }
-            case 80: {
-              result.hasJavaMultipleFiles = input.ReadBool(ref result.javaMultipleFiles_);
-              break;
-            }
-            case 128: {
-              result.hasCcGenericServices = input.ReadBool(ref result.ccGenericServices_);
-              break;
-            }
-            case 136: {
-              result.hasJavaGenericServices = input.ReadBool(ref result.javaGenericServices_);
-              break;
-            }
-            case 144: {
-              result.hasPyGenericServices = input.ReadBool(ref result.pyGenericServices_);
-              break;
-            }
-            case 160: {
-              result.hasJavaGenerateEqualsAndHash = input.ReadBool(ref result.javaGenerateEqualsAndHash_);
-              break;
-            }
-            case 7994: {
-              input.ReadMessageArray(tag, field_name, result.uninterpretedOption_, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.DefaultInstance, extensionRegistry);
-              break;
-            }
-          }
-        }
-        
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-      
-      
-      public bool HasJavaPackage {
-        get { return result.hasJavaPackage; }
-      }
-      public string JavaPackage {
-        get { return result.JavaPackage; }
-        set { SetJavaPackage(value); }
-      }
-      public Builder SetJavaPackage(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasJavaPackage = true;
-        result.javaPackage_ = value;
-        return this;
-      }
-      public Builder ClearJavaPackage() {
-        PrepareBuilder();
-        result.hasJavaPackage = false;
-        result.javaPackage_ = "";
-        return this;
-      }
-      
-      public bool HasJavaOuterClassname {
-        get { return result.hasJavaOuterClassname; }
-      }
-      public string JavaOuterClassname {
-        get { return result.JavaOuterClassname; }
-        set { SetJavaOuterClassname(value); }
-      }
-      public Builder SetJavaOuterClassname(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasJavaOuterClassname = true;
-        result.javaOuterClassname_ = value;
-        return this;
-      }
-      public Builder ClearJavaOuterClassname() {
-        PrepareBuilder();
-        result.hasJavaOuterClassname = false;
-        result.javaOuterClassname_ = "";
-        return this;
-      }
-      
-      public bool HasJavaMultipleFiles {
-        get { return result.hasJavaMultipleFiles; }
-      }
-      public bool JavaMultipleFiles {
-        get { return result.JavaMultipleFiles; }
-        set { SetJavaMultipleFiles(value); }
-      }
-      public Builder SetJavaMultipleFiles(bool value) {
-        PrepareBuilder();
-        result.hasJavaMultipleFiles = true;
-        result.javaMultipleFiles_ = value;
-        return this;
-      }
-      public Builder ClearJavaMultipleFiles() {
-        PrepareBuilder();
-        result.hasJavaMultipleFiles = false;
-        result.javaMultipleFiles_ = false;
-        return this;
-      }
-      
-      public bool HasJavaGenerateEqualsAndHash {
-        get { return result.hasJavaGenerateEqualsAndHash; }
-      }
-      public bool JavaGenerateEqualsAndHash {
-        get { return result.JavaGenerateEqualsAndHash; }
-        set { SetJavaGenerateEqualsAndHash(value); }
-      }
-      public Builder SetJavaGenerateEqualsAndHash(bool value) {
-        PrepareBuilder();
-        result.hasJavaGenerateEqualsAndHash = true;
-        result.javaGenerateEqualsAndHash_ = value;
-        return this;
-      }
-      public Builder ClearJavaGenerateEqualsAndHash() {
-        PrepareBuilder();
-        result.hasJavaGenerateEqualsAndHash = false;
-        result.javaGenerateEqualsAndHash_ = false;
-        return this;
-      }
-      
-      public bool HasOptimizeFor {
-       get { return result.hasOptimizeFor; }
-      }
-      public global::Google.ProtocolBuffers.DescriptorProtos.FileOptions.Types.OptimizeMode OptimizeFor {
-        get { return result.OptimizeFor; }
-        set { SetOptimizeFor(value); }
-      }
-      public Builder SetOptimizeFor(global::Google.ProtocolBuffers.DescriptorProtos.FileOptions.Types.OptimizeMode value) {
-        PrepareBuilder();
-        result.hasOptimizeFor = true;
-        result.optimizeFor_ = value;
-        return this;
-      }
-      public Builder ClearOptimizeFor() {
-        PrepareBuilder();
-        result.hasOptimizeFor = false;
-        result.optimizeFor_ = global::Google.ProtocolBuffers.DescriptorProtos.FileOptions.Types.OptimizeMode.SPEED;
-        return this;
-      }
-      
-      public bool HasCcGenericServices {
-        get { return result.hasCcGenericServices; }
-      }
-      public bool CcGenericServices {
-        get { return result.CcGenericServices; }
-        set { SetCcGenericServices(value); }
-      }
-      public Builder SetCcGenericServices(bool value) {
-        PrepareBuilder();
-        result.hasCcGenericServices = true;
-        result.ccGenericServices_ = value;
-        return this;
-      }
-      public Builder ClearCcGenericServices() {
-        PrepareBuilder();
-        result.hasCcGenericServices = false;
-        result.ccGenericServices_ = false;
-        return this;
-      }
-      
-      public bool HasJavaGenericServices {
-        get { return result.hasJavaGenericServices; }
-      }
-      public bool JavaGenericServices {
-        get { return result.JavaGenericServices; }
-        set { SetJavaGenericServices(value); }
-      }
-      public Builder SetJavaGenericServices(bool value) {
-        PrepareBuilder();
-        result.hasJavaGenericServices = true;
-        result.javaGenericServices_ = value;
-        return this;
-      }
-      public Builder ClearJavaGenericServices() {
-        PrepareBuilder();
-        result.hasJavaGenericServices = false;
-        result.javaGenericServices_ = false;
-        return this;
-      }
-      
-      public bool HasPyGenericServices {
-        get { return result.hasPyGenericServices; }
-      }
-      public bool PyGenericServices {
-        get { return result.PyGenericServices; }
-        set { SetPyGenericServices(value); }
-      }
-      public Builder SetPyGenericServices(bool value) {
-        PrepareBuilder();
-        result.hasPyGenericServices = true;
-        result.pyGenericServices_ = value;
-        return this;
-      }
-      public Builder ClearPyGenericServices() {
-        PrepareBuilder();
-        result.hasPyGenericServices = false;
-        result.pyGenericServices_ = false;
-        return this;
-      }
-      
-      public pbc::IPopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> UninterpretedOptionList {
-        get { return PrepareBuilder().uninterpretedOption_; }
-      }
-      public int UninterpretedOptionCount {
-        get { return result.UninterpretedOptionCount; }
-      }
-      public global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption GetUninterpretedOption(int index) {
-        return result.GetUninterpretedOption(index);
-      }
-      public Builder SetUninterpretedOption(int index, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.uninterpretedOption_[index] = value;
-        return this;
-      }
-      public Builder SetUninterpretedOption(int index, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.uninterpretedOption_[index] = builderForValue.Build();
-        return this;
-      }
-      public Builder AddUninterpretedOption(global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.uninterpretedOption_.Add(value);
-        return this;
-      }
-      public Builder AddUninterpretedOption(global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.uninterpretedOption_.Add(builderForValue.Build());
-        return this;
-      }
-      public Builder AddRangeUninterpretedOption(scg::IEnumerable<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> values) {
-        PrepareBuilder();
-        result.uninterpretedOption_.Add(values);
-        return this;
-      }
-      public Builder ClearUninterpretedOption() {
-        PrepareBuilder();
-        result.uninterpretedOption_.Clear();
-        return this;
-      }
-    }
-    static FileOptions() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, null);
-    }
-  }
-  
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
-  [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
-  public sealed partial class MessageOptions : pb::ExtendableMessage<MessageOptions, MessageOptions.Builder> {
-    private MessageOptions() { }
-    private static readonly MessageOptions defaultInstance = new MessageOptions().MakeReadOnly();
-    private static readonly string[] _messageOptionsFieldNames = new string[] { "message_set_wire_format", "no_standard_descriptor_accessor", "uninterpreted_option" };
-    private static readonly uint[] _messageOptionsFieldTags = new uint[] { 8, 16, 7994 };
-    public static MessageOptions DefaultInstance {
-      get { return defaultInstance; }
-    }
-    
-    public override MessageOptions DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-    
-    protected override MessageOptions ThisMessage {
-      get { return this; }
-    }
-    
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_MessageOptions__Descriptor; }
-    }
-    
-    protected override pb::FieldAccess.FieldAccessorTable<MessageOptions, MessageOptions.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_MessageOptions__FieldAccessorTable; }
-    }
-    
-    public const int MessageSetWireFormatFieldNumber = 1;
-    private bool hasMessageSetWireFormat;
-    private bool messageSetWireFormat_;
-    public bool HasMessageSetWireFormat {
-      get { return hasMessageSetWireFormat; }
-    }
-    public bool MessageSetWireFormat {
-      get { return messageSetWireFormat_; }
-    }
-    
-    public const int NoStandardDescriptorAccessorFieldNumber = 2;
-    private bool hasNoStandardDescriptorAccessor;
-    private bool noStandardDescriptorAccessor_;
-    public bool HasNoStandardDescriptorAccessor {
-      get { return hasNoStandardDescriptorAccessor; }
-    }
-    public bool NoStandardDescriptorAccessor {
-      get { return noStandardDescriptorAccessor_; }
-    }
-    
-    public const int UninterpretedOptionFieldNumber = 999;
-    private pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> uninterpretedOption_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption>();
-    public scg::IList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> UninterpretedOptionList {
-      get { return uninterpretedOption_; }
-    }
-    public int UninterpretedOptionCount {
-      get { return uninterpretedOption_.Count; }
-    }
-    public global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption GetUninterpretedOption(int index) {
-      return uninterpretedOption_[index];
-    }
-    
-    public override bool IsInitialized {
-      get {
-        foreach (global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption element in UninterpretedOptionList) {
-          if (!element.IsInitialized) return false;
-        }
-        if (!ExtensionsAreInitialized) return false;
-        return true;
-      }
-    }
-    
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      int size = SerializedSize;
-      string[] field_names = _messageOptionsFieldNames;
-      pb::ExtendableMessage<MessageOptions, MessageOptions.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
-      if (hasMessageSetWireFormat) {
-        output.WriteBool(1, field_names[0], MessageSetWireFormat);
-      }
-      if (hasNoStandardDescriptorAccessor) {
-        output.WriteBool(2, field_names[1], NoStandardDescriptorAccessor);
-      }
-      if (uninterpretedOption_.Count > 0) {
-        output.WriteMessageArray(999, field_names[2], uninterpretedOption_);
-      }
-      extensionWriter.WriteUntil(536870912, output);
-      UnknownFields.WriteTo(output);
-    }
-    
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        
-        size = 0;
-        if (hasMessageSetWireFormat) {
-          size += pb::CodedOutputStream.ComputeBoolSize(1, MessageSetWireFormat);
-        }
-        if (hasNoStandardDescriptorAccessor) {
-          size += pb::CodedOutputStream.ComputeBoolSize(2, NoStandardDescriptorAccessor);
-        }
-        foreach (global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption element in UninterpretedOptionList) {
-          size += pb::CodedOutputStream.ComputeMessageSize(999, element);
-        }
-        size += ExtensionsSerializedSize;
-        size += UnknownFields.SerializedSize;
-        memoizedSerializedSize = size;
-        return size;
-      }
-    }
-    
-    public static MessageOptions ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static MessageOptions ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static MessageOptions ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static MessageOptions ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static MessageOptions ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static MessageOptions ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static MessageOptions ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static MessageOptions ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static MessageOptions ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static MessageOptions ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private MessageOptions MakeReadOnly() {
-      uninterpretedOption_.MakeReadOnly();
-      return this;
-    }
-    
-    public static Builder CreateBuilder() { return new Builder(); }
-    public override Builder ToBuilder() { return CreateBuilder(this); }
-    public override Builder CreateBuilderForType() { return new Builder(); }
-    public static Builder CreateBuilder(MessageOptions prototype) {
-      return new Builder(prototype);
-    }
-    
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
-    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
-    public sealed partial class Builder : pb::ExtendableBuilder<MessageOptions, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(MessageOptions cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-      
-      private bool resultIsReadOnly;
-      private MessageOptions result;
-      
-      private MessageOptions PrepareBuilder() {
-        if (resultIsReadOnly) {
-          MessageOptions original = result;
-          result = new MessageOptions();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-      
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-      
-      protected override MessageOptions MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-      
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-      
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-      
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.DescriptorProtos.MessageOptions.Descriptor; }
-      }
-      
-      public override MessageOptions DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.DescriptorProtos.MessageOptions.DefaultInstance; }
-      }
-      
-      public override MessageOptions BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-      
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is MessageOptions) {
-          return MergeFrom((MessageOptions) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-      
-      public override Builder MergeFrom(MessageOptions other) {
-        if (other == global::Google.ProtocolBuffers.DescriptorProtos.MessageOptions.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.HasMessageSetWireFormat) {
-          MessageSetWireFormat = other.MessageSetWireFormat;
-        }
-        if (other.HasNoStandardDescriptorAccessor) {
-          NoStandardDescriptorAccessor = other.NoStandardDescriptorAccessor;
-        }
-        if (other.uninterpretedOption_.Count != 0) {
-          result.uninterpretedOption_.Add(other.uninterpretedOption_);
-        }
-          this.MergeExtensionFields(other);
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-      
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-      
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_messageOptionsFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _messageOptionsFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            default: {
-              if (pb::WireFormat.IsEndGroupTag(tag)) {
-                if (unknownFields != null) {
-                  this.UnknownFields = unknownFields.Build();
-                }
-                return this;
-              }
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              break;
-            }
-            case 8: {
-              result.hasMessageSetWireFormat = input.ReadBool(ref result.messageSetWireFormat_);
-              break;
-            }
-            case 16: {
-              result.hasNoStandardDescriptorAccessor = input.ReadBool(ref result.noStandardDescriptorAccessor_);
-              break;
-            }
-            case 7994: {
-              input.ReadMessageArray(tag, field_name, result.uninterpretedOption_, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.DefaultInstance, extensionRegistry);
-              break;
-            }
-          }
-        }
-        
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-      
-      
-      public bool HasMessageSetWireFormat {
-        get { return result.hasMessageSetWireFormat; }
-      }
-      public bool MessageSetWireFormat {
-        get { return result.MessageSetWireFormat; }
-        set { SetMessageSetWireFormat(value); }
-      }
-      public Builder SetMessageSetWireFormat(bool value) {
-        PrepareBuilder();
-        result.hasMessageSetWireFormat = true;
-        result.messageSetWireFormat_ = value;
-        return this;
-      }
-      public Builder ClearMessageSetWireFormat() {
-        PrepareBuilder();
-        result.hasMessageSetWireFormat = false;
-        result.messageSetWireFormat_ = false;
-        return this;
-      }
-      
-      public bool HasNoStandardDescriptorAccessor {
-        get { return result.hasNoStandardDescriptorAccessor; }
-      }
-      public bool NoStandardDescriptorAccessor {
-        get { return result.NoStandardDescriptorAccessor; }
-        set { SetNoStandardDescriptorAccessor(value); }
-      }
-      public Builder SetNoStandardDescriptorAccessor(bool value) {
-        PrepareBuilder();
-        result.hasNoStandardDescriptorAccessor = true;
-        result.noStandardDescriptorAccessor_ = value;
-        return this;
-      }
-      public Builder ClearNoStandardDescriptorAccessor() {
-        PrepareBuilder();
-        result.hasNoStandardDescriptorAccessor = false;
-        result.noStandardDescriptorAccessor_ = false;
-        return this;
-      }
-      
-      public pbc::IPopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> UninterpretedOptionList {
-        get { return PrepareBuilder().uninterpretedOption_; }
-      }
-      public int UninterpretedOptionCount {
-        get { return result.UninterpretedOptionCount; }
-      }
-      public global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption GetUninterpretedOption(int index) {
-        return result.GetUninterpretedOption(index);
-      }
-      public Builder SetUninterpretedOption(int index, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.uninterpretedOption_[index] = value;
-        return this;
-      }
-      public Builder SetUninterpretedOption(int index, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.uninterpretedOption_[index] = builderForValue.Build();
-        return this;
-      }
-      public Builder AddUninterpretedOption(global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.uninterpretedOption_.Add(value);
-        return this;
-      }
-      public Builder AddUninterpretedOption(global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.uninterpretedOption_.Add(builderForValue.Build());
-        return this;
-      }
-      public Builder AddRangeUninterpretedOption(scg::IEnumerable<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> values) {
-        PrepareBuilder();
-        result.uninterpretedOption_.Add(values);
-        return this;
-      }
-      public Builder ClearUninterpretedOption() {
-        PrepareBuilder();
-        result.uninterpretedOption_.Clear();
-        return this;
-      }
-    }
-    static MessageOptions() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, null);
-    }
-  }
-  
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
-  [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
-  public sealed partial class FieldOptions : pb::ExtendableMessage<FieldOptions, FieldOptions.Builder> {
-    private FieldOptions() { }
-    private static readonly FieldOptions defaultInstance = new FieldOptions().MakeReadOnly();
-    private static readonly string[] _fieldOptionsFieldNames = new string[] { "ctype", "deprecated", "experimental_map_key", "packed", "uninterpreted_option" };
-    private static readonly uint[] _fieldOptionsFieldTags = new uint[] { 8, 24, 74, 16, 7994 };
-    public static FieldOptions DefaultInstance {
-      get { return defaultInstance; }
-    }
-    
-    public override FieldOptions DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-    
-    protected override FieldOptions ThisMessage {
-      get { return this; }
-    }
-    
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_FieldOptions__Descriptor; }
-    }
-    
-    protected override pb::FieldAccess.FieldAccessorTable<FieldOptions, FieldOptions.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_FieldOptions__FieldAccessorTable; }
-    }
-    
-    #region Nested types
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
-    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
-    public static class Types {
-      [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
-      [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
-      public enum CType {
-        STRING = 0,
-        CORD = 1,
-        STRING_PIECE = 2,
-      }
-      
-    }
-    #endregion
-    
-    public const int CtypeFieldNumber = 1;
-    private bool hasCtype;
-    private global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions.Types.CType ctype_ = global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions.Types.CType.STRING;
-    public bool HasCtype {
-      get { return hasCtype; }
-    }
-    public global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions.Types.CType Ctype {
-      get { return ctype_; }
-    }
-    
-    public const int PackedFieldNumber = 2;
-    private bool hasPacked;
-    private bool packed_;
-    public bool HasPacked {
-      get { return hasPacked; }
-    }
-    public bool Packed {
-      get { return packed_; }
-    }
-    
-    public const int DeprecatedFieldNumber = 3;
-    private bool hasDeprecated;
-    private bool deprecated_;
-    public bool HasDeprecated {
-      get { return hasDeprecated; }
-    }
-    public bool Deprecated {
-      get { return deprecated_; }
-    }
-    
-    public const int ExperimentalMapKeyFieldNumber = 9;
-    private bool hasExperimentalMapKey;
-    private string experimentalMapKey_ = "";
-    public bool HasExperimentalMapKey {
-      get { return hasExperimentalMapKey; }
-    }
-    public string ExperimentalMapKey {
-      get { return experimentalMapKey_; }
-    }
-    
-    public const int UninterpretedOptionFieldNumber = 999;
-    private pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> uninterpretedOption_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption>();
-    public scg::IList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> UninterpretedOptionList {
-      get { return uninterpretedOption_; }
-    }
-    public int UninterpretedOptionCount {
-      get { return uninterpretedOption_.Count; }
-    }
-    public global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption GetUninterpretedOption(int index) {
-      return uninterpretedOption_[index];
-    }
-    
-    public override bool IsInitialized {
-      get {
-        foreach (global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption element in UninterpretedOptionList) {
-          if (!element.IsInitialized) return false;
-        }
-        if (!ExtensionsAreInitialized) return false;
-        return true;
-      }
-    }
-    
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      int size = SerializedSize;
-      string[] field_names = _fieldOptionsFieldNames;
-      pb::ExtendableMessage<FieldOptions, FieldOptions.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
-      if (hasCtype) {
-        output.WriteEnum(1, field_names[0], (int) Ctype, Ctype);
-      }
-      if (hasPacked) {
-        output.WriteBool(2, field_names[3], Packed);
-      }
-      if (hasDeprecated) {
-        output.WriteBool(3, field_names[1], Deprecated);
-      }
-      if (hasExperimentalMapKey) {
-        output.WriteString(9, field_names[2], ExperimentalMapKey);
-      }
-      if (uninterpretedOption_.Count > 0) {
-        output.WriteMessageArray(999, field_names[4], uninterpretedOption_);
-      }
-      extensionWriter.WriteUntil(536870912, output);
-      UnknownFields.WriteTo(output);
-    }
-    
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        
-        size = 0;
-        if (hasCtype) {
-          size += pb::CodedOutputStream.ComputeEnumSize(1, (int) Ctype);
-        }
-        if (hasPacked) {
-          size += pb::CodedOutputStream.ComputeBoolSize(2, Packed);
-        }
-        if (hasDeprecated) {
-          size += pb::CodedOutputStream.ComputeBoolSize(3, Deprecated);
-        }
-        if (hasExperimentalMapKey) {
-          size += pb::CodedOutputStream.ComputeStringSize(9, ExperimentalMapKey);
-        }
-        foreach (global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption element in UninterpretedOptionList) {
-          size += pb::CodedOutputStream.ComputeMessageSize(999, element);
-        }
-        size += ExtensionsSerializedSize;
-        size += UnknownFields.SerializedSize;
-        memoizedSerializedSize = size;
-        return size;
-      }
-    }
-    
-    public static FieldOptions ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static FieldOptions ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static FieldOptions ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static FieldOptions ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static FieldOptions ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static FieldOptions ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static FieldOptions ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static FieldOptions ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static FieldOptions ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static FieldOptions ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private FieldOptions MakeReadOnly() {
-      uninterpretedOption_.MakeReadOnly();
-      return this;
-    }
-    
-    public static Builder CreateBuilder() { return new Builder(); }
-    public override Builder ToBuilder() { return CreateBuilder(this); }
-    public override Builder CreateBuilderForType() { return new Builder(); }
-    public static Builder CreateBuilder(FieldOptions prototype) {
-      return new Builder(prototype);
-    }
-    
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
-    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
-    public sealed partial class Builder : pb::ExtendableBuilder<FieldOptions, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(FieldOptions cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-      
-      private bool resultIsReadOnly;
-      private FieldOptions result;
-      
-      private FieldOptions PrepareBuilder() {
-        if (resultIsReadOnly) {
-          FieldOptions original = result;
-          result = new FieldOptions();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-      
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-      
-      protected override FieldOptions MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-      
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-      
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-      
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions.Descriptor; }
-      }
-      
-      public override FieldOptions DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions.DefaultInstance; }
-      }
-      
-      public override FieldOptions BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-      
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is FieldOptions) {
-          return MergeFrom((FieldOptions) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-      
-      public override Builder MergeFrom(FieldOptions other) {
-        if (other == global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.HasCtype) {
-          Ctype = other.Ctype;
-        }
-        if (other.HasPacked) {
-          Packed = other.Packed;
-        }
-        if (other.HasDeprecated) {
-          Deprecated = other.Deprecated;
-        }
-        if (other.HasExperimentalMapKey) {
-          ExperimentalMapKey = other.ExperimentalMapKey;
-        }
-        if (other.uninterpretedOption_.Count != 0) {
-          result.uninterpretedOption_.Add(other.uninterpretedOption_);
-        }
-          this.MergeExtensionFields(other);
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-      
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-      
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_fieldOptionsFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _fieldOptionsFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            default: {
-              if (pb::WireFormat.IsEndGroupTag(tag)) {
-                if (unknownFields != null) {
-                  this.UnknownFields = unknownFields.Build();
-                }
-                return this;
-              }
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              break;
-            }
-            case 8: {
-              object unknown;
-              if(input.ReadEnum(ref result.ctype_, out unknown)) {
-                result.hasCtype = true;
-              } else if(unknown is int) {
-                if (unknownFields == null) {
-                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-                }
-                unknownFields.MergeVarintField(1, (ulong)(int)unknown);
-              }
-              break;
-            }
-            case 16: {
-              result.hasPacked = input.ReadBool(ref result.packed_);
-              break;
-            }
-            case 24: {
-              result.hasDeprecated = input.ReadBool(ref result.deprecated_);
-              break;
-            }
-            case 74: {
-              result.hasExperimentalMapKey = input.ReadString(ref result.experimentalMapKey_);
-              break;
-            }
-            case 7994: {
-              input.ReadMessageArray(tag, field_name, result.uninterpretedOption_, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.DefaultInstance, extensionRegistry);
-              break;
-            }
-          }
-        }
-        
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-      
-      
-      public bool HasCtype {
-       get { return result.hasCtype; }
-      }
-      public global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions.Types.CType Ctype {
-        get { return result.Ctype; }
-        set { SetCtype(value); }
-      }
-      public Builder SetCtype(global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions.Types.CType value) {
-        PrepareBuilder();
-        result.hasCtype = true;
-        result.ctype_ = value;
-        return this;
-      }
-      public Builder ClearCtype() {
-        PrepareBuilder();
-        result.hasCtype = false;
-        result.ctype_ = global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions.Types.CType.STRING;
-        return this;
-      }
-      
-      public bool HasPacked {
-        get { return result.hasPacked; }
-      }
-      public bool Packed {
-        get { return result.Packed; }
-        set { SetPacked(value); }
-      }
-      public Builder SetPacked(bool value) {
-        PrepareBuilder();
-        result.hasPacked = true;
-        result.packed_ = value;
-        return this;
-      }
-      public Builder ClearPacked() {
-        PrepareBuilder();
-        result.hasPacked = false;
-        result.packed_ = false;
-        return this;
-      }
-      
-      public bool HasDeprecated {
-        get { return result.hasDeprecated; }
-      }
-      public bool Deprecated {
-        get { return result.Deprecated; }
-        set { SetDeprecated(value); }
-      }
-      public Builder SetDeprecated(bool value) {
-        PrepareBuilder();
-        result.hasDeprecated = true;
-        result.deprecated_ = value;
-        return this;
-      }
-      public Builder ClearDeprecated() {
-        PrepareBuilder();
-        result.hasDeprecated = false;
-        result.deprecated_ = false;
-        return this;
-      }
-      
-      public bool HasExperimentalMapKey {
-        get { return result.hasExperimentalMapKey; }
-      }
-      public string ExperimentalMapKey {
-        get { return result.ExperimentalMapKey; }
-        set { SetExperimentalMapKey(value); }
-      }
-      public Builder SetExperimentalMapKey(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasExperimentalMapKey = true;
-        result.experimentalMapKey_ = value;
-        return this;
-      }
-      public Builder ClearExperimentalMapKey() {
-        PrepareBuilder();
-        result.hasExperimentalMapKey = false;
-        result.experimentalMapKey_ = "";
-        return this;
-      }
-      
-      public pbc::IPopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> UninterpretedOptionList {
-        get { return PrepareBuilder().uninterpretedOption_; }
-      }
-      public int UninterpretedOptionCount {
-        get { return result.UninterpretedOptionCount; }
-      }
-      public global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption GetUninterpretedOption(int index) {
-        return result.GetUninterpretedOption(index);
-      }
-      public Builder SetUninterpretedOption(int index, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.uninterpretedOption_[index] = value;
-        return this;
-      }
-      public Builder SetUninterpretedOption(int index, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.uninterpretedOption_[index] = builderForValue.Build();
-        return this;
-      }
-      public Builder AddUninterpretedOption(global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.uninterpretedOption_.Add(value);
-        return this;
-      }
-      public Builder AddUninterpretedOption(global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.uninterpretedOption_.Add(builderForValue.Build());
-        return this;
-      }
-      public Builder AddRangeUninterpretedOption(scg::IEnumerable<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> values) {
-        PrepareBuilder();
-        result.uninterpretedOption_.Add(values);
-        return this;
-      }
-      public Builder ClearUninterpretedOption() {
-        PrepareBuilder();
-        result.uninterpretedOption_.Clear();
-        return this;
-      }
-    }
-    static FieldOptions() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, null);
-    }
-  }
-  
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
-  [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
-  public sealed partial class EnumOptions : pb::ExtendableMessage<EnumOptions, EnumOptions.Builder> {
-    private EnumOptions() { }
-    private static readonly EnumOptions defaultInstance = new EnumOptions().MakeReadOnly();
-    private static readonly string[] _enumOptionsFieldNames = new string[] { "uninterpreted_option" };
-    private static readonly uint[] _enumOptionsFieldTags = new uint[] { 7994 };
-    public static EnumOptions DefaultInstance {
-      get { return defaultInstance; }
-    }
-    
-    public override EnumOptions DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-    
-    protected override EnumOptions ThisMessage {
-      get { return this; }
-    }
-    
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_EnumOptions__Descriptor; }
-    }
-    
-    protected override pb::FieldAccess.FieldAccessorTable<EnumOptions, EnumOptions.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_EnumOptions__FieldAccessorTable; }
-    }
-    
-    public const int UninterpretedOptionFieldNumber = 999;
-    private pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> uninterpretedOption_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption>();
-    public scg::IList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> UninterpretedOptionList {
-      get { return uninterpretedOption_; }
-    }
-    public int UninterpretedOptionCount {
-      get { return uninterpretedOption_.Count; }
-    }
-    public global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption GetUninterpretedOption(int index) {
-      return uninterpretedOption_[index];
-    }
-    
-    public override bool IsInitialized {
-      get {
-        foreach (global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption element in UninterpretedOptionList) {
-          if (!element.IsInitialized) return false;
-        }
-        if (!ExtensionsAreInitialized) return false;
-        return true;
-      }
-    }
-    
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      int size = SerializedSize;
-      string[] field_names = _enumOptionsFieldNames;
-      pb::ExtendableMessage<EnumOptions, EnumOptions.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
-      if (uninterpretedOption_.Count > 0) {
-        output.WriteMessageArray(999, field_names[0], uninterpretedOption_);
-      }
-      extensionWriter.WriteUntil(536870912, output);
-      UnknownFields.WriteTo(output);
-    }
-    
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        
-        size = 0;
-        foreach (global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption element in UninterpretedOptionList) {
-          size += pb::CodedOutputStream.ComputeMessageSize(999, element);
-        }
-        size += ExtensionsSerializedSize;
-        size += UnknownFields.SerializedSize;
-        memoizedSerializedSize = size;
-        return size;
-      }
-    }
-    
-    public static EnumOptions ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static EnumOptions ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static EnumOptions ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static EnumOptions ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static EnumOptions ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static EnumOptions ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static EnumOptions ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static EnumOptions ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static EnumOptions ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static EnumOptions ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private EnumOptions MakeReadOnly() {
-      uninterpretedOption_.MakeReadOnly();
-      return this;
-    }
-    
-    public static Builder CreateBuilder() { return new Builder(); }
-    public override Builder ToBuilder() { return CreateBuilder(this); }
-    public override Builder CreateBuilderForType() { return new Builder(); }
-    public static Builder CreateBuilder(EnumOptions prototype) {
-      return new Builder(prototype);
-    }
-    
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
-    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
-    public sealed partial class Builder : pb::ExtendableBuilder<EnumOptions, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(EnumOptions cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-      
-      private bool resultIsReadOnly;
-      private EnumOptions result;
-      
-      private EnumOptions PrepareBuilder() {
-        if (resultIsReadOnly) {
-          EnumOptions original = result;
-          result = new EnumOptions();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-      
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-      
-      protected override EnumOptions MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-      
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-      
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-      
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.DescriptorProtos.EnumOptions.Descriptor; }
-      }
-      
-      public override EnumOptions DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.DescriptorProtos.EnumOptions.DefaultInstance; }
-      }
-      
-      public override EnumOptions BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-      
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is EnumOptions) {
-          return MergeFrom((EnumOptions) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-      
-      public override Builder MergeFrom(EnumOptions other) {
-        if (other == global::Google.ProtocolBuffers.DescriptorProtos.EnumOptions.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.uninterpretedOption_.Count != 0) {
-          result.uninterpretedOption_.Add(other.uninterpretedOption_);
-        }
-          this.MergeExtensionFields(other);
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-      
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-      
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_enumOptionsFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _enumOptionsFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            default: {
-              if (pb::WireFormat.IsEndGroupTag(tag)) {
-                if (unknownFields != null) {
-                  this.UnknownFields = unknownFields.Build();
-                }
-                return this;
-              }
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              break;
-            }
-            case 7994: {
-              input.ReadMessageArray(tag, field_name, result.uninterpretedOption_, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.DefaultInstance, extensionRegistry);
-              break;
-            }
-          }
-        }
-        
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-      
-      
-      public pbc::IPopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> UninterpretedOptionList {
-        get { return PrepareBuilder().uninterpretedOption_; }
-      }
-      public int UninterpretedOptionCount {
-        get { return result.UninterpretedOptionCount; }
-      }
-      public global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption GetUninterpretedOption(int index) {
-        return result.GetUninterpretedOption(index);
-      }
-      public Builder SetUninterpretedOption(int index, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.uninterpretedOption_[index] = value;
-        return this;
-      }
-      public Builder SetUninterpretedOption(int index, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.uninterpretedOption_[index] = builderForValue.Build();
-        return this;
-      }
-      public Builder AddUninterpretedOption(global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.uninterpretedOption_.Add(value);
-        return this;
-      }
-      public Builder AddUninterpretedOption(global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.uninterpretedOption_.Add(builderForValue.Build());
-        return this;
-      }
-      public Builder AddRangeUninterpretedOption(scg::IEnumerable<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> values) {
-        PrepareBuilder();
-        result.uninterpretedOption_.Add(values);
-        return this;
-      }
-      public Builder ClearUninterpretedOption() {
-        PrepareBuilder();
-        result.uninterpretedOption_.Clear();
-        return this;
-      }
-    }
-    static EnumOptions() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, null);
-    }
-  }
-  
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
-  [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
-  public sealed partial class EnumValueOptions : pb::ExtendableMessage<EnumValueOptions, EnumValueOptions.Builder> {
-    private EnumValueOptions() { }
-    private static readonly EnumValueOptions defaultInstance = new EnumValueOptions().MakeReadOnly();
-    private static readonly string[] _enumValueOptionsFieldNames = new string[] { "uninterpreted_option" };
-    private static readonly uint[] _enumValueOptionsFieldTags = new uint[] { 7994 };
-    public static EnumValueOptions DefaultInstance {
-      get { return defaultInstance; }
-    }
-    
-    public override EnumValueOptions DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-    
-    protected override EnumValueOptions ThisMessage {
-      get { return this; }
-    }
-    
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_EnumValueOptions__Descriptor; }
-    }
-    
-    protected override pb::FieldAccess.FieldAccessorTable<EnumValueOptions, EnumValueOptions.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_EnumValueOptions__FieldAccessorTable; }
-    }
-    
-    public const int UninterpretedOptionFieldNumber = 999;
-    private pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> uninterpretedOption_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption>();
-    public scg::IList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> UninterpretedOptionList {
-      get { return uninterpretedOption_; }
-    }
-    public int UninterpretedOptionCount {
-      get { return uninterpretedOption_.Count; }
-    }
-    public global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption GetUninterpretedOption(int index) {
-      return uninterpretedOption_[index];
-    }
-    
-    public override bool IsInitialized {
-      get {
-        foreach (global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption element in UninterpretedOptionList) {
-          if (!element.IsInitialized) return false;
-        }
-        if (!ExtensionsAreInitialized) return false;
-        return true;
-      }
-    }
-    
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      int size = SerializedSize;
-      string[] field_names = _enumValueOptionsFieldNames;
-      pb::ExtendableMessage<EnumValueOptions, EnumValueOptions.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
-      if (uninterpretedOption_.Count > 0) {
-        output.WriteMessageArray(999, field_names[0], uninterpretedOption_);
-      }
-      extensionWriter.WriteUntil(536870912, output);
-      UnknownFields.WriteTo(output);
-    }
-    
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        
-        size = 0;
-        foreach (global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption element in UninterpretedOptionList) {
-          size += pb::CodedOutputStream.ComputeMessageSize(999, element);
-        }
-        size += ExtensionsSerializedSize;
-        size += UnknownFields.SerializedSize;
-        memoizedSerializedSize = size;
-        return size;
-      }
-    }
-    
-    public static EnumValueOptions ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static EnumValueOptions ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static EnumValueOptions ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static EnumValueOptions ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static EnumValueOptions ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static EnumValueOptions ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static EnumValueOptions ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static EnumValueOptions ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static EnumValueOptions ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static EnumValueOptions ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private EnumValueOptions MakeReadOnly() {
-      uninterpretedOption_.MakeReadOnly();
-      return this;
-    }
-    
-    public static Builder CreateBuilder() { return new Builder(); }
-    public override Builder ToBuilder() { return CreateBuilder(this); }
-    public override Builder CreateBuilderForType() { return new Builder(); }
-    public static Builder CreateBuilder(EnumValueOptions prototype) {
-      return new Builder(prototype);
-    }
-    
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
-    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
-    public sealed partial class Builder : pb::ExtendableBuilder<EnumValueOptions, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(EnumValueOptions cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-      
-      private bool resultIsReadOnly;
-      private EnumValueOptions result;
-      
-      private EnumValueOptions PrepareBuilder() {
-        if (resultIsReadOnly) {
-          EnumValueOptions original = result;
-          result = new EnumValueOptions();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-      
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-      
-      protected override EnumValueOptions MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-      
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-      
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-      
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.DescriptorProtos.EnumValueOptions.Descriptor; }
-      }
-      
-      public override EnumValueOptions DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.DescriptorProtos.EnumValueOptions.DefaultInstance; }
-      }
-      
-      public override EnumValueOptions BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-      
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is EnumValueOptions) {
-          return MergeFrom((EnumValueOptions) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-      
-      public override Builder MergeFrom(EnumValueOptions other) {
-        if (other == global::Google.ProtocolBuffers.DescriptorProtos.EnumValueOptions.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.uninterpretedOption_.Count != 0) {
-          result.uninterpretedOption_.Add(other.uninterpretedOption_);
-        }
-          this.MergeExtensionFields(other);
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-      
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-      
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_enumValueOptionsFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _enumValueOptionsFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            default: {
-              if (pb::WireFormat.IsEndGroupTag(tag)) {
-                if (unknownFields != null) {
-                  this.UnknownFields = unknownFields.Build();
-                }
-                return this;
-              }
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              break;
-            }
-            case 7994: {
-              input.ReadMessageArray(tag, field_name, result.uninterpretedOption_, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.DefaultInstance, extensionRegistry);
-              break;
-            }
-          }
-        }
-        
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-      
-      
-      public pbc::IPopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> UninterpretedOptionList {
-        get { return PrepareBuilder().uninterpretedOption_; }
-      }
-      public int UninterpretedOptionCount {
-        get { return result.UninterpretedOptionCount; }
-      }
-      public global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption GetUninterpretedOption(int index) {
-        return result.GetUninterpretedOption(index);
-      }
-      public Builder SetUninterpretedOption(int index, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.uninterpretedOption_[index] = value;
-        return this;
-      }
-      public Builder SetUninterpretedOption(int index, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.uninterpretedOption_[index] = builderForValue.Build();
-        return this;
-      }
-      public Builder AddUninterpretedOption(global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.uninterpretedOption_.Add(value);
-        return this;
-      }
-      public Builder AddUninterpretedOption(global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.uninterpretedOption_.Add(builderForValue.Build());
-        return this;
-      }
-      public Builder AddRangeUninterpretedOption(scg::IEnumerable<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> values) {
-        PrepareBuilder();
-        result.uninterpretedOption_.Add(values);
-        return this;
-      }
-      public Builder ClearUninterpretedOption() {
-        PrepareBuilder();
-        result.uninterpretedOption_.Clear();
-        return this;
-      }
-    }
-    static EnumValueOptions() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, null);
-    }
-  }
-  
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
-  [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
-  public sealed partial class ServiceOptions : pb::ExtendableMessage<ServiceOptions, ServiceOptions.Builder> {
-    private ServiceOptions() { }
-    private static readonly ServiceOptions defaultInstance = new ServiceOptions().MakeReadOnly();
-    private static readonly string[] _serviceOptionsFieldNames = new string[] { "uninterpreted_option" };
-    private static readonly uint[] _serviceOptionsFieldTags = new uint[] { 7994 };
-    public static ServiceOptions DefaultInstance {
-      get { return defaultInstance; }
-    }
-    
-    public override ServiceOptions DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-    
-    protected override ServiceOptions ThisMessage {
-      get { return this; }
-    }
-    
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_ServiceOptions__Descriptor; }
-    }
-    
-    protected override pb::FieldAccess.FieldAccessorTable<ServiceOptions, ServiceOptions.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_ServiceOptions__FieldAccessorTable; }
-    }
-    
-    public const int UninterpretedOptionFieldNumber = 999;
-    private pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> uninterpretedOption_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption>();
-    public scg::IList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> UninterpretedOptionList {
-      get { return uninterpretedOption_; }
-    }
-    public int UninterpretedOptionCount {
-      get { return uninterpretedOption_.Count; }
-    }
-    public global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption GetUninterpretedOption(int index) {
-      return uninterpretedOption_[index];
-    }
-    
-    public override bool IsInitialized {
-      get {
-        foreach (global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption element in UninterpretedOptionList) {
-          if (!element.IsInitialized) return false;
-        }
-        if (!ExtensionsAreInitialized) return false;
-        return true;
-      }
-    }
-    
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      int size = SerializedSize;
-      string[] field_names = _serviceOptionsFieldNames;
-      pb::ExtendableMessage<ServiceOptions, ServiceOptions.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
-      if (uninterpretedOption_.Count > 0) {
-        output.WriteMessageArray(999, field_names[0], uninterpretedOption_);
-      }
-      extensionWriter.WriteUntil(536870912, output);
-      UnknownFields.WriteTo(output);
-    }
-    
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        
-        size = 0;
-        foreach (global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption element in UninterpretedOptionList) {
-          size += pb::CodedOutputStream.ComputeMessageSize(999, element);
-        }
-        size += ExtensionsSerializedSize;
-        size += UnknownFields.SerializedSize;
-        memoizedSerializedSize = size;
-        return size;
-      }
-    }
-    
-    public static ServiceOptions ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static ServiceOptions ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static ServiceOptions ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static ServiceOptions ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static ServiceOptions ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static ServiceOptions ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static ServiceOptions ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static ServiceOptions ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static ServiceOptions ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static ServiceOptions ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private ServiceOptions MakeReadOnly() {
-      uninterpretedOption_.MakeReadOnly();
-      return this;
-    }
-    
-    public static Builder CreateBuilder() { return new Builder(); }
-    public override Builder ToBuilder() { return CreateBuilder(this); }
-    public override Builder CreateBuilderForType() { return new Builder(); }
-    public static Builder CreateBuilder(ServiceOptions prototype) {
-      return new Builder(prototype);
-    }
-    
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
-    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
-    public sealed partial class Builder : pb::ExtendableBuilder<ServiceOptions, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(ServiceOptions cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-      
-      private bool resultIsReadOnly;
-      private ServiceOptions result;
-      
-      private ServiceOptions PrepareBuilder() {
-        if (resultIsReadOnly) {
-          ServiceOptions original = result;
-          result = new ServiceOptions();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-      
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-      
-      protected override ServiceOptions MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-      
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-      
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-      
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.DescriptorProtos.ServiceOptions.Descriptor; }
-      }
-      
-      public override ServiceOptions DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.DescriptorProtos.ServiceOptions.DefaultInstance; }
-      }
-      
-      public override ServiceOptions BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-      
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is ServiceOptions) {
-          return MergeFrom((ServiceOptions) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-      
-      public override Builder MergeFrom(ServiceOptions other) {
-        if (other == global::Google.ProtocolBuffers.DescriptorProtos.ServiceOptions.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.uninterpretedOption_.Count != 0) {
-          result.uninterpretedOption_.Add(other.uninterpretedOption_);
-        }
-          this.MergeExtensionFields(other);
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-      
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-      
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_serviceOptionsFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _serviceOptionsFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            default: {
-              if (pb::WireFormat.IsEndGroupTag(tag)) {
-                if (unknownFields != null) {
-                  this.UnknownFields = unknownFields.Build();
-                }
-                return this;
-              }
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              break;
-            }
-            case 7994: {
-              input.ReadMessageArray(tag, field_name, result.uninterpretedOption_, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.DefaultInstance, extensionRegistry);
-              break;
-            }
-          }
-        }
-        
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-      
-      
-      public pbc::IPopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> UninterpretedOptionList {
-        get { return PrepareBuilder().uninterpretedOption_; }
-      }
-      public int UninterpretedOptionCount {
-        get { return result.UninterpretedOptionCount; }
-      }
-      public global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption GetUninterpretedOption(int index) {
-        return result.GetUninterpretedOption(index);
-      }
-      public Builder SetUninterpretedOption(int index, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.uninterpretedOption_[index] = value;
-        return this;
-      }
-      public Builder SetUninterpretedOption(int index, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.uninterpretedOption_[index] = builderForValue.Build();
-        return this;
-      }
-      public Builder AddUninterpretedOption(global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.uninterpretedOption_.Add(value);
-        return this;
-      }
-      public Builder AddUninterpretedOption(global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.uninterpretedOption_.Add(builderForValue.Build());
-        return this;
-      }
-      public Builder AddRangeUninterpretedOption(scg::IEnumerable<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> values) {
-        PrepareBuilder();
-        result.uninterpretedOption_.Add(values);
-        return this;
-      }
-      public Builder ClearUninterpretedOption() {
-        PrepareBuilder();
-        result.uninterpretedOption_.Clear();
-        return this;
-      }
-    }
-    static ServiceOptions() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, null);
-    }
-  }
-  
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
-  [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
-  public sealed partial class MethodOptions : pb::ExtendableMessage<MethodOptions, MethodOptions.Builder> {
-    private MethodOptions() { }
-    private static readonly MethodOptions defaultInstance = new MethodOptions().MakeReadOnly();
-    private static readonly string[] _methodOptionsFieldNames = new string[] { "uninterpreted_option" };
-    private static readonly uint[] _methodOptionsFieldTags = new uint[] { 7994 };
-    public static MethodOptions DefaultInstance {
-      get { return defaultInstance; }
-    }
-    
-    public override MethodOptions DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-    
-    protected override MethodOptions ThisMessage {
-      get { return this; }
-    }
-    
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_MethodOptions__Descriptor; }
-    }
-    
-    protected override pb::FieldAccess.FieldAccessorTable<MethodOptions, MethodOptions.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_MethodOptions__FieldAccessorTable; }
-    }
-    
-    public const int UninterpretedOptionFieldNumber = 999;
-    private pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> uninterpretedOption_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption>();
-    public scg::IList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> UninterpretedOptionList {
-      get { return uninterpretedOption_; }
-    }
-    public int UninterpretedOptionCount {
-      get { return uninterpretedOption_.Count; }
-    }
-    public global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption GetUninterpretedOption(int index) {
-      return uninterpretedOption_[index];
-    }
-    
-    public override bool IsInitialized {
-      get {
-        foreach (global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption element in UninterpretedOptionList) {
-          if (!element.IsInitialized) return false;
-        }
-        if (!ExtensionsAreInitialized) return false;
-        return true;
-      }
-    }
-    
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      int size = SerializedSize;
-      string[] field_names = _methodOptionsFieldNames;
-      pb::ExtendableMessage<MethodOptions, MethodOptions.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
-      if (uninterpretedOption_.Count > 0) {
-        output.WriteMessageArray(999, field_names[0], uninterpretedOption_);
-      }
-      extensionWriter.WriteUntil(536870912, output);
-      UnknownFields.WriteTo(output);
-    }
-    
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        
-        size = 0;
-        foreach (global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption element in UninterpretedOptionList) {
-          size += pb::CodedOutputStream.ComputeMessageSize(999, element);
-        }
-        size += ExtensionsSerializedSize;
-        size += UnknownFields.SerializedSize;
-        memoizedSerializedSize = size;
-        return size;
-      }
-    }
-    
-    public static MethodOptions ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static MethodOptions ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static MethodOptions ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static MethodOptions ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static MethodOptions ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static MethodOptions ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static MethodOptions ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static MethodOptions ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static MethodOptions ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static MethodOptions ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private MethodOptions MakeReadOnly() {
-      uninterpretedOption_.MakeReadOnly();
-      return this;
-    }
-    
-    public static Builder CreateBuilder() { return new Builder(); }
-    public override Builder ToBuilder() { return CreateBuilder(this); }
-    public override Builder CreateBuilderForType() { return new Builder(); }
-    public static Builder CreateBuilder(MethodOptions prototype) {
-      return new Builder(prototype);
-    }
-    
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
-    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
-    public sealed partial class Builder : pb::ExtendableBuilder<MethodOptions, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(MethodOptions cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-      
-      private bool resultIsReadOnly;
-      private MethodOptions result;
-      
-      private MethodOptions PrepareBuilder() {
-        if (resultIsReadOnly) {
-          MethodOptions original = result;
-          result = new MethodOptions();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-      
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-      
-      protected override MethodOptions MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-      
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-      
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-      
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.DescriptorProtos.MethodOptions.Descriptor; }
-      }
-      
-      public override MethodOptions DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.DescriptorProtos.MethodOptions.DefaultInstance; }
-      }
-      
-      public override MethodOptions BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-      
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is MethodOptions) {
-          return MergeFrom((MethodOptions) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-      
-      public override Builder MergeFrom(MethodOptions other) {
-        if (other == global::Google.ProtocolBuffers.DescriptorProtos.MethodOptions.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.uninterpretedOption_.Count != 0) {
-          result.uninterpretedOption_.Add(other.uninterpretedOption_);
-        }
-          this.MergeExtensionFields(other);
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-      
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-      
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_methodOptionsFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _methodOptionsFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            default: {
-              if (pb::WireFormat.IsEndGroupTag(tag)) {
-                if (unknownFields != null) {
-                  this.UnknownFields = unknownFields.Build();
-                }
-                return this;
-              }
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              break;
-            }
-            case 7994: {
-              input.ReadMessageArray(tag, field_name, result.uninterpretedOption_, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.DefaultInstance, extensionRegistry);
-              break;
-            }
-          }
-        }
-        
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-      
-      
-      public pbc::IPopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> UninterpretedOptionList {
-        get { return PrepareBuilder().uninterpretedOption_; }
-      }
-      public int UninterpretedOptionCount {
-        get { return result.UninterpretedOptionCount; }
-      }
-      public global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption GetUninterpretedOption(int index) {
-        return result.GetUninterpretedOption(index);
-      }
-      public Builder SetUninterpretedOption(int index, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.uninterpretedOption_[index] = value;
-        return this;
-      }
-      public Builder SetUninterpretedOption(int index, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.uninterpretedOption_[index] = builderForValue.Build();
-        return this;
-      }
-      public Builder AddUninterpretedOption(global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.uninterpretedOption_.Add(value);
-        return this;
-      }
-      public Builder AddUninterpretedOption(global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.uninterpretedOption_.Add(builderForValue.Build());
-        return this;
-      }
-      public Builder AddRangeUninterpretedOption(scg::IEnumerable<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> values) {
-        PrepareBuilder();
-        result.uninterpretedOption_.Add(values);
-        return this;
-      }
-      public Builder ClearUninterpretedOption() {
-        PrepareBuilder();
-        result.uninterpretedOption_.Clear();
-        return this;
-      }
-    }
-    static MethodOptions() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, null);
-    }
-  }
-  
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
-  [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
-  public sealed partial class UninterpretedOption : pb::GeneratedMessage<UninterpretedOption, UninterpretedOption.Builder> {
-    private UninterpretedOption() { }
-    private static readonly UninterpretedOption defaultInstance = new UninterpretedOption().MakeReadOnly();
-    private static readonly string[] _uninterpretedOptionFieldNames = new string[] { "aggregate_value", "double_value", "identifier_value", "name", "negative_int_value", "positive_int_value", "string_value" };
-    private static readonly uint[] _uninterpretedOptionFieldTags = new uint[] { 66, 49, 26, 18, 40, 32, 58 };
-    public static UninterpretedOption DefaultInstance {
-      get { return defaultInstance; }
-    }
-    
-    public override UninterpretedOption DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-    
-    protected override UninterpretedOption ThisMessage {
-      get { return this; }
-    }
-    
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_UninterpretedOption__Descriptor; }
-    }
-    
-    protected override pb::FieldAccess.FieldAccessorTable<UninterpretedOption, UninterpretedOption.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_UninterpretedOption__FieldAccessorTable; }
-    }
-    
-    #region Nested types
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
-    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
-    public static class Types {
-      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-      [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
-      [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
-      public sealed partial class NamePart : pb::GeneratedMessage<NamePart, NamePart.Builder> {
-        private NamePart() { }
-        private static readonly NamePart defaultInstance = new NamePart().MakeReadOnly();
-        private static readonly string[] _namePartFieldNames = new string[] { "is_extension", "name_part" };
-        private static readonly uint[] _namePartFieldTags = new uint[] { 16, 10 };
-        public static NamePart DefaultInstance {
-          get { return defaultInstance; }
-        }
-        
-        public override NamePart DefaultInstanceForType {
-          get { return DefaultInstance; }
-        }
-        
-        protected override NamePart ThisMessage {
-          get { return this; }
-        }
-        
-        public static pbd::MessageDescriptor Descriptor {
-          get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_UninterpretedOption_NamePart__Descriptor; }
-        }
-        
-        protected override pb::FieldAccess.FieldAccessorTable<NamePart, NamePart.Builder> InternalFieldAccessors {
-          get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_UninterpretedOption_NamePart__FieldAccessorTable; }
-        }
-        
-        public const int NamePart_FieldNumber = 1;
-        private bool hasNamePart_;
-        private string namePart_ = "";
-        public bool HasNamePart_ {
-          get { return hasNamePart_; }
-        }
-        public string NamePart_ {
-          get { return namePart_; }
-        }
-        
-        public const int IsExtensionFieldNumber = 2;
-        private bool hasIsExtension;
-        private bool isExtension_;
-        public bool HasIsExtension {
-          get { return hasIsExtension; }
-        }
-        public bool IsExtension {
-          get { return isExtension_; }
-        }
-        
-        public override bool IsInitialized {
-          get {
-            if (!hasNamePart_) return false;
-            if (!hasIsExtension) return false;
-            return true;
-          }
-        }
-        
-        public override void WriteTo(pb::ICodedOutputStream output) {
-          int size = SerializedSize;
-          string[] field_names = _namePartFieldNames;
-          if (hasNamePart_) {
-            output.WriteString(1, field_names[1], NamePart_);
-          }
-          if (hasIsExtension) {
-            output.WriteBool(2, field_names[0], IsExtension);
-          }
-          UnknownFields.WriteTo(output);
-        }
-        
-        private int memoizedSerializedSize = -1;
-        public override int SerializedSize {
-          get {
-            int size = memoizedSerializedSize;
-            if (size != -1) return size;
-            
-            size = 0;
-            if (hasNamePart_) {
-              size += pb::CodedOutputStream.ComputeStringSize(1, NamePart_);
-            }
-            if (hasIsExtension) {
-              size += pb::CodedOutputStream.ComputeBoolSize(2, IsExtension);
-            }
-            size += UnknownFields.SerializedSize;
-            memoizedSerializedSize = size;
-            return size;
-          }
-        }
-        
-        public static NamePart ParseFrom(pb::ByteString data) {
-          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-        }
-        public static NamePart ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-        }
-        public static NamePart ParseFrom(byte[] data) {
-          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-        }
-        public static NamePart ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-        }
-        public static NamePart ParseFrom(global::System.IO.Stream input) {
-          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-        }
-        public static NamePart ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-        }
-        public static NamePart ParseDelimitedFrom(global::System.IO.Stream input) {
-          return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-        }
-        public static NamePart ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-          return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-        }
-        public static NamePart ParseFrom(pb::ICodedInputStream input) {
-          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-        }
-        public static NamePart ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-        }
-        private NamePart MakeReadOnly() {
-          return this;
-        }
-        
-        public static Builder CreateBuilder() { return new Builder(); }
-        public override Builder ToBuilder() { return CreateBuilder(this); }
-        public override Builder CreateBuilderForType() { return new Builder(); }
-        public static Builder CreateBuilder(NamePart prototype) {
-          return new Builder(prototype);
-        }
-        
-        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-        [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
-        [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
-        public sealed partial class Builder : pb::GeneratedBuilder<NamePart, Builder> {
-          protected override Builder ThisBuilder {
-            get { return this; }
-          }
-          public Builder() {
-            result = DefaultInstance;
-            resultIsReadOnly = true;
-          }
-          internal Builder(NamePart cloneFrom) {
-            result = cloneFrom;
-            resultIsReadOnly = true;
-          }
-          
-          private bool resultIsReadOnly;
-          private NamePart result;
-          
-          private NamePart PrepareBuilder() {
-            if (resultIsReadOnly) {
-              NamePart original = result;
-              result = new NamePart();
-              resultIsReadOnly = false;
-              MergeFrom(original);
-            }
-            return result;
-          }
-          
-          public override bool IsInitialized {
-            get { return result.IsInitialized; }
-          }
-          
-          protected override NamePart MessageBeingBuilt {
-            get { return PrepareBuilder(); }
-          }
-          
-          public override Builder Clear() {
-            result = DefaultInstance;
-            resultIsReadOnly = true;
-            return this;
-          }
-          
-          public override Builder Clone() {
-            if (resultIsReadOnly) {
-              return new Builder(result);
-            } else {
-              return new Builder().MergeFrom(result);
-            }
-          }
-          
-          public override pbd::MessageDescriptor DescriptorForType {
-            get { return global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Types.NamePart.Descriptor; }
-          }
-          
-          public override NamePart DefaultInstanceForType {
-            get { return global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Types.NamePart.DefaultInstance; }
-          }
-          
-          public override NamePart BuildPartial() {
-            if (resultIsReadOnly) {
-              return result;
-            }
-            resultIsReadOnly = true;
-            return result.MakeReadOnly();
-          }
-          
-          public override Builder MergeFrom(pb::IMessage other) {
-            if (other is NamePart) {
-              return MergeFrom((NamePart) other);
-            } else {
-              base.MergeFrom(other);
-              return this;
-            }
-          }
-          
-          public override Builder MergeFrom(NamePart other) {
-            if (other == global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Types.NamePart.DefaultInstance) return this;
-            PrepareBuilder();
-            if (other.HasNamePart_) {
-              NamePart_ = other.NamePart_;
-            }
-            if (other.HasIsExtension) {
-              IsExtension = other.IsExtension;
-            }
-            this.MergeUnknownFields(other.UnknownFields);
-            return this;
-          }
-          
-          public override Builder MergeFrom(pb::ICodedInputStream input) {
-            return MergeFrom(input, pb::ExtensionRegistry.Empty);
-          }
-          
-          public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-            PrepareBuilder();
-            pb::UnknownFieldSet.Builder unknownFields = null;
-            uint tag;
-            string field_name;
-            while (input.ReadTag(out tag, out field_name)) {
-              if(tag == 0 && field_name != null) {
-                int field_ordinal = global::System.Array.BinarySearch(_namePartFieldNames, field_name, global::System.StringComparer.Ordinal);
-                if(field_ordinal >= 0)
-                  tag = _namePartFieldTags[field_ordinal];
-                else {
-                  if (unknownFields == null) {
-                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-                  }
-                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-                  continue;
-                }
-              }
-              switch (tag) {
-                case 0: {
-                  throw pb::InvalidProtocolBufferException.InvalidTag();
-                }
-                default: {
-                  if (pb::WireFormat.IsEndGroupTag(tag)) {
-                    if (unknownFields != null) {
-                      this.UnknownFields = unknownFields.Build();
-                    }
-                    return this;
-                  }
-                  if (unknownFields == null) {
-                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-                  }
-                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-                  break;
-                }
-                case 10: {
-                  result.hasNamePart_ = input.ReadString(ref result.namePart_);
-                  break;
-                }
-                case 16: {
-                  result.hasIsExtension = input.ReadBool(ref result.isExtension_);
-                  break;
-                }
-              }
-            }
-            
-            if (unknownFields != null) {
-              this.UnknownFields = unknownFields.Build();
-            }
-            return this;
-          }
-          
-          
-          public bool HasNamePart_ {
-            get { return result.hasNamePart_; }
-          }
-          public string NamePart_ {
-            get { return result.NamePart_; }
-            set { SetNamePart_(value); }
-          }
-          public Builder SetNamePart_(string value) {
-            pb::ThrowHelper.ThrowIfNull(value, "value");
-            PrepareBuilder();
-            result.hasNamePart_ = true;
-            result.namePart_ = value;
-            return this;
-          }
-          public Builder ClearNamePart_() {
-            PrepareBuilder();
-            result.hasNamePart_ = false;
-            result.namePart_ = "";
-            return this;
-          }
-          
-          public bool HasIsExtension {
-            get { return result.hasIsExtension; }
-          }
-          public bool IsExtension {
-            get { return result.IsExtension; }
-            set { SetIsExtension(value); }
-          }
-          public Builder SetIsExtension(bool value) {
-            PrepareBuilder();
-            result.hasIsExtension = true;
-            result.isExtension_ = value;
-            return this;
-          }
-          public Builder ClearIsExtension() {
-            PrepareBuilder();
-            result.hasIsExtension = false;
-            result.isExtension_ = false;
-            return this;
-          }
-        }
-        static NamePart() {
-          object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, null);
-        }
-      }
-      
-    }
-    #endregion
-    
-    public const int NameFieldNumber = 2;
-    private pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Types.NamePart> name_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Types.NamePart>();
-    public scg::IList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Types.NamePart> NameList {
-      get { return name_; }
-    }
-    public int NameCount {
-      get { return name_.Count; }
-    }
-    public global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Types.NamePart GetName(int index) {
-      return name_[index];
-    }
-    
-    public const int IdentifierValueFieldNumber = 3;
-    private bool hasIdentifierValue;
-    private string identifierValue_ = "";
-    public bool HasIdentifierValue {
-      get { return hasIdentifierValue; }
-    }
-    public string IdentifierValue {
-      get { return identifierValue_; }
-    }
-    
-    public const int PositiveIntValueFieldNumber = 4;
-    private bool hasPositiveIntValue;
-    private ulong positiveIntValue_;
-    public bool HasPositiveIntValue {
-      get { return hasPositiveIntValue; }
-    }
-    [global::System.CLSCompliant(false)]
-    public ulong PositiveIntValue {
-      get { return positiveIntValue_; }
-    }
-    
-    public const int NegativeIntValueFieldNumber = 5;
-    private bool hasNegativeIntValue;
-    private long negativeIntValue_;
-    public bool HasNegativeIntValue {
-      get { return hasNegativeIntValue; }
-    }
-    public long NegativeIntValue {
-      get { return negativeIntValue_; }
-    }
-    
-    public const int DoubleValueFieldNumber = 6;
-    private bool hasDoubleValue;
-    private double doubleValue_;
-    public bool HasDoubleValue {
-      get { return hasDoubleValue; }
-    }
-    public double DoubleValue {
-      get { return doubleValue_; }
-    }
-    
-    public const int StringValueFieldNumber = 7;
-    private bool hasStringValue;
-    private pb::ByteString stringValue_ = pb::ByteString.Empty;
-    public bool HasStringValue {
-      get { return hasStringValue; }
-    }
-    public pb::ByteString StringValue {
-      get { return stringValue_; }
-    }
-    
-    public const int AggregateValueFieldNumber = 8;
-    private bool hasAggregateValue;
-    private string aggregateValue_ = "";
-    public bool HasAggregateValue {
-      get { return hasAggregateValue; }
-    }
-    public string AggregateValue {
-      get { return aggregateValue_; }
-    }
-    
-    public override bool IsInitialized {
-      get {
-        foreach (global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Types.NamePart element in NameList) {
-          if (!element.IsInitialized) return false;
-        }
-        return true;
-      }
-    }
-    
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      int size = SerializedSize;
-      string[] field_names = _uninterpretedOptionFieldNames;
-      if (name_.Count > 0) {
-        output.WriteMessageArray(2, field_names[3], name_);
-      }
-      if (hasIdentifierValue) {
-        output.WriteString(3, field_names[2], IdentifierValue);
-      }
-      if (hasPositiveIntValue) {
-        output.WriteUInt64(4, field_names[5], PositiveIntValue);
-      }
-      if (hasNegativeIntValue) {
-        output.WriteInt64(5, field_names[4], NegativeIntValue);
-      }
-      if (hasDoubleValue) {
-        output.WriteDouble(6, field_names[1], DoubleValue);
-      }
-      if (hasStringValue) {
-        output.WriteBytes(7, field_names[6], StringValue);
-      }
-      if (hasAggregateValue) {
-        output.WriteString(8, field_names[0], AggregateValue);
-      }
-      UnknownFields.WriteTo(output);
-    }
-    
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        
-        size = 0;
-        foreach (global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Types.NamePart element in NameList) {
-          size += pb::CodedOutputStream.ComputeMessageSize(2, element);
-        }
-        if (hasIdentifierValue) {
-          size += pb::CodedOutputStream.ComputeStringSize(3, IdentifierValue);
-        }
-        if (hasPositiveIntValue) {
-          size += pb::CodedOutputStream.ComputeUInt64Size(4, PositiveIntValue);
-        }
-        if (hasNegativeIntValue) {
-          size += pb::CodedOutputStream.ComputeInt64Size(5, NegativeIntValue);
-        }
-        if (hasDoubleValue) {
-          size += pb::CodedOutputStream.ComputeDoubleSize(6, DoubleValue);
-        }
-        if (hasStringValue) {
-          size += pb::CodedOutputStream.ComputeBytesSize(7, StringValue);
-        }
-        if (hasAggregateValue) {
-          size += pb::CodedOutputStream.ComputeStringSize(8, AggregateValue);
-        }
-        size += UnknownFields.SerializedSize;
-        memoizedSerializedSize = size;
-        return size;
-      }
-    }
-    
-    public static UninterpretedOption ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static UninterpretedOption ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static UninterpretedOption ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static UninterpretedOption ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static UninterpretedOption ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static UninterpretedOption ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static UninterpretedOption ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static UninterpretedOption ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static UninterpretedOption ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static UninterpretedOption ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private UninterpretedOption MakeReadOnly() {
-      name_.MakeReadOnly();
-      return this;
-    }
-    
-    public static Builder CreateBuilder() { return new Builder(); }
-    public override Builder ToBuilder() { return CreateBuilder(this); }
-    public override Builder CreateBuilderForType() { return new Builder(); }
-    public static Builder CreateBuilder(UninterpretedOption prototype) {
-      return new Builder(prototype);
-    }
-    
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
-    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
-    public sealed partial class Builder : pb::GeneratedBuilder<UninterpretedOption, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(UninterpretedOption cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-      
-      private bool resultIsReadOnly;
-      private UninterpretedOption result;
-      
-      private UninterpretedOption PrepareBuilder() {
-        if (resultIsReadOnly) {
-          UninterpretedOption original = result;
-          result = new UninterpretedOption();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-      
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-      
-      protected override UninterpretedOption MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-      
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-      
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-      
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Descriptor; }
-      }
-      
-      public override UninterpretedOption DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.DefaultInstance; }
-      }
-      
-      public override UninterpretedOption BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-      
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is UninterpretedOption) {
-          return MergeFrom((UninterpretedOption) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-      
-      public override Builder MergeFrom(UninterpretedOption other) {
-        if (other == global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.name_.Count != 0) {
-          result.name_.Add(other.name_);
-        }
-        if (other.HasIdentifierValue) {
-          IdentifierValue = other.IdentifierValue;
-        }
-        if (other.HasPositiveIntValue) {
-          PositiveIntValue = other.PositiveIntValue;
-        }
-        if (other.HasNegativeIntValue) {
-          NegativeIntValue = other.NegativeIntValue;
-        }
-        if (other.HasDoubleValue) {
-          DoubleValue = other.DoubleValue;
-        }
-        if (other.HasStringValue) {
-          StringValue = other.StringValue;
-        }
-        if (other.HasAggregateValue) {
-          AggregateValue = other.AggregateValue;
-        }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-      
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-      
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_uninterpretedOptionFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _uninterpretedOptionFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            default: {
-              if (pb::WireFormat.IsEndGroupTag(tag)) {
-                if (unknownFields != null) {
-                  this.UnknownFields = unknownFields.Build();
-                }
-                return this;
-              }
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              break;
-            }
-            case 18: {
-              input.ReadMessageArray(tag, field_name, result.name_, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Types.NamePart.DefaultInstance, extensionRegistry);
-              break;
-            }
-            case 26: {
-              result.hasIdentifierValue = input.ReadString(ref result.identifierValue_);
-              break;
-            }
-            case 32: {
-              result.hasPositiveIntValue = input.ReadUInt64(ref result.positiveIntValue_);
-              break;
-            }
-            case 40: {
-              result.hasNegativeIntValue = input.ReadInt64(ref result.negativeIntValue_);
-              break;
-            }
-            case 49: {
-              result.hasDoubleValue = input.ReadDouble(ref result.doubleValue_);
-              break;
-            }
-            case 58: {
-              result.hasStringValue = input.ReadBytes(ref result.stringValue_);
-              break;
-            }
-            case 66: {
-              result.hasAggregateValue = input.ReadString(ref result.aggregateValue_);
-              break;
-            }
-          }
-        }
-        
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-      
-      
-      public pbc::IPopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Types.NamePart> NameList {
-        get { return PrepareBuilder().name_; }
-      }
-      public int NameCount {
-        get { return result.NameCount; }
-      }
-      public global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Types.NamePart GetName(int index) {
-        return result.GetName(index);
-      }
-      public Builder SetName(int index, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Types.NamePart value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.name_[index] = value;
-        return this;
-      }
-      public Builder SetName(int index, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Types.NamePart.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.name_[index] = builderForValue.Build();
-        return this;
-      }
-      public Builder AddName(global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Types.NamePart value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.name_.Add(value);
-        return this;
-      }
-      public Builder AddName(global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Types.NamePart.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.name_.Add(builderForValue.Build());
-        return this;
-      }
-      public Builder AddRangeName(scg::IEnumerable<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Types.NamePart> values) {
-        PrepareBuilder();
-        result.name_.Add(values);
-        return this;
-      }
-      public Builder ClearName() {
-        PrepareBuilder();
-        result.name_.Clear();
-        return this;
-      }
-      
-      public bool HasIdentifierValue {
-        get { return result.hasIdentifierValue; }
-      }
-      public string IdentifierValue {
-        get { return result.IdentifierValue; }
-        set { SetIdentifierValue(value); }
-      }
-      public Builder SetIdentifierValue(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasIdentifierValue = true;
-        result.identifierValue_ = value;
-        return this;
-      }
-      public Builder ClearIdentifierValue() {
-        PrepareBuilder();
-        result.hasIdentifierValue = false;
-        result.identifierValue_ = "";
-        return this;
-      }
-      
-      public bool HasPositiveIntValue {
-        get { return result.hasPositiveIntValue; }
-      }
-      [global::System.CLSCompliant(false)]
-      public ulong PositiveIntValue {
-        get { return result.PositiveIntValue; }
-        set { SetPositiveIntValue(value); }
-      }
-      [global::System.CLSCompliant(false)]
-      public Builder SetPositiveIntValue(ulong value) {
-        PrepareBuilder();
-        result.hasPositiveIntValue = true;
-        result.positiveIntValue_ = value;
-        return this;
-      }
-      public Builder ClearPositiveIntValue() {
-        PrepareBuilder();
-        result.hasPositiveIntValue = false;
-        result.positiveIntValue_ = 0UL;
-        return this;
-      }
-      
-      public bool HasNegativeIntValue {
-        get { return result.hasNegativeIntValue; }
-      }
-      public long NegativeIntValue {
-        get { return result.NegativeIntValue; }
-        set { SetNegativeIntValue(value); }
-      }
-      public Builder SetNegativeIntValue(long value) {
-        PrepareBuilder();
-        result.hasNegativeIntValue = true;
-        result.negativeIntValue_ = value;
-        return this;
-      }
-      public Builder ClearNegativeIntValue() {
-        PrepareBuilder();
-        result.hasNegativeIntValue = false;
-        result.negativeIntValue_ = 0L;
-        return this;
-      }
-      
-      public bool HasDoubleValue {
-        get { return result.hasDoubleValue; }
-      }
-      public double DoubleValue {
-        get { return result.DoubleValue; }
-        set { SetDoubleValue(value); }
-      }
-      public Builder SetDoubleValue(double value) {
-        PrepareBuilder();
-        result.hasDoubleValue = true;
-        result.doubleValue_ = value;
-        return this;
-      }
-      public Builder ClearDoubleValue() {
-        PrepareBuilder();
-        result.hasDoubleValue = false;
-        result.doubleValue_ = 0D;
-        return this;
-      }
-      
-      public bool HasStringValue {
-        get { return result.hasStringValue; }
-      }
-      public pb::ByteString StringValue {
-        get { return result.StringValue; }
-        set { SetStringValue(value); }
-      }
-      public Builder SetStringValue(pb::ByteString value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasStringValue = true;
-        result.stringValue_ = value;
-        return this;
-      }
-      public Builder ClearStringValue() {
-        PrepareBuilder();
-        result.hasStringValue = false;
-        result.stringValue_ = pb::ByteString.Empty;
-        return this;
-      }
-      
-      public bool HasAggregateValue {
-        get { return result.hasAggregateValue; }
-      }
-      public string AggregateValue {
-        get { return result.AggregateValue; }
-        set { SetAggregateValue(value); }
-      }
-      public Builder SetAggregateValue(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasAggregateValue = true;
-        result.aggregateValue_ = value;
-        return this;
-      }
-      public Builder ClearAggregateValue() {
-        PrepareBuilder();
-        result.hasAggregateValue = false;
-        result.aggregateValue_ = "";
-        return this;
-      }
-    }
-    static UninterpretedOption() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, null);
-    }
-  }
-  
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
-  [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
-  public sealed partial class SourceCodeInfo : pb::GeneratedMessage<SourceCodeInfo, SourceCodeInfo.Builder> {
-    private SourceCodeInfo() { }
-    private static readonly SourceCodeInfo defaultInstance = new SourceCodeInfo().MakeReadOnly();
-    private static readonly string[] _sourceCodeInfoFieldNames = new string[] { "location" };
-    private static readonly uint[] _sourceCodeInfoFieldTags = new uint[] { 10 };
-    public static SourceCodeInfo DefaultInstance {
-      get { return defaultInstance; }
-    }
-    
-    public override SourceCodeInfo DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-    
-    protected override SourceCodeInfo ThisMessage {
-      get { return this; }
-    }
-    
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_SourceCodeInfo__Descriptor; }
-    }
-    
-    protected override pb::FieldAccess.FieldAccessorTable<SourceCodeInfo, SourceCodeInfo.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_SourceCodeInfo__FieldAccessorTable; }
-    }
-    
-    #region Nested types
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
-    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
-    public static class Types {
-      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-      [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
-      [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
-      public sealed partial class Location : pb::GeneratedMessage<Location, Location.Builder> {
-        private Location() { }
-        private static readonly Location defaultInstance = new Location().MakeReadOnly();
-        private static readonly string[] _locationFieldNames = new string[] { "path", "span" };
-        private static readonly uint[] _locationFieldTags = new uint[] { 10, 18 };
-        public static Location DefaultInstance {
-          get { return defaultInstance; }
-        }
-        
-        public override Location DefaultInstanceForType {
-          get { return DefaultInstance; }
-        }
-        
-        protected override Location ThisMessage {
-          get { return this; }
-        }
-        
-        public static pbd::MessageDescriptor Descriptor {
-          get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_SourceCodeInfo_Location__Descriptor; }
-        }
-        
-        protected override pb::FieldAccess.FieldAccessorTable<Location, Location.Builder> InternalFieldAccessors {
-          get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_SourceCodeInfo_Location__FieldAccessorTable; }
-        }
-        
-        public const int PathFieldNumber = 1;
-        private int pathMemoizedSerializedSize;
-        private pbc::PopsicleList<int> path_ = new pbc::PopsicleList<int>();
-        public scg::IList<int> PathList {
-          get { return pbc::Lists.AsReadOnly(path_); }
-        }
-        public int PathCount {
-          get { return path_.Count; }
-        }
-        public int GetPath(int index) {
-          return path_[index];
-        }
-        
-        public const int SpanFieldNumber = 2;
-        private int spanMemoizedSerializedSize;
-        private pbc::PopsicleList<int> span_ = new pbc::PopsicleList<int>();
-        public scg::IList<int> SpanList {
-          get { return pbc::Lists.AsReadOnly(span_); }
-        }
-        public int SpanCount {
-          get { return span_.Count; }
-        }
-        public int GetSpan(int index) {
-          return span_[index];
-        }
-        
-        public override bool IsInitialized {
-          get {
-            return true;
-          }
-        }
-        
-        public override void WriteTo(pb::ICodedOutputStream output) {
-          int size = SerializedSize;
-          string[] field_names = _locationFieldNames;
-          if (path_.Count > 0) {
-            output.WritePackedInt32Array(1, field_names[0], pathMemoizedSerializedSize, path_);
-          }
-          if (span_.Count > 0) {
-            output.WritePackedInt32Array(2, field_names[1], spanMemoizedSerializedSize, span_);
-          }
-          UnknownFields.WriteTo(output);
-        }
-        
-        private int memoizedSerializedSize = -1;
-        public override int SerializedSize {
-          get {
-            int size = memoizedSerializedSize;
-            if (size != -1) return size;
-            
-            size = 0;
-            {
-              int dataSize = 0;
-              foreach (int element in PathList) {
-                dataSize += pb::CodedOutputStream.ComputeInt32SizeNoTag(element);
-              }
-              size += dataSize;
-              if (path_.Count != 0) {
-                size += 1 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
-              }
-              pathMemoizedSerializedSize = dataSize;
-            }
-            {
-              int dataSize = 0;
-              foreach (int element in SpanList) {
-                dataSize += pb::CodedOutputStream.ComputeInt32SizeNoTag(element);
-              }
-              size += dataSize;
-              if (span_.Count != 0) {
-                size += 1 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
-              }
-              spanMemoizedSerializedSize = dataSize;
-            }
-            size += UnknownFields.SerializedSize;
-            memoizedSerializedSize = size;
-            return size;
-          }
-        }
-        
-        public static Location ParseFrom(pb::ByteString data) {
-          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-        }
-        public static Location ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-        }
-        public static Location ParseFrom(byte[] data) {
-          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-        }
-        public static Location ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-        }
-        public static Location ParseFrom(global::System.IO.Stream input) {
-          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-        }
-        public static Location ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-        }
-        public static Location ParseDelimitedFrom(global::System.IO.Stream input) {
-          return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-        }
-        public static Location ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-          return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-        }
-        public static Location ParseFrom(pb::ICodedInputStream input) {
-          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-        }
-        public static Location ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-        }
-        private Location MakeReadOnly() {
-          path_.MakeReadOnly();
-          span_.MakeReadOnly();
-          return this;
-        }
-        
-        public static Builder CreateBuilder() { return new Builder(); }
-        public override Builder ToBuilder() { return CreateBuilder(this); }
-        public override Builder CreateBuilderForType() { return new Builder(); }
-        public static Builder CreateBuilder(Location prototype) {
-          return new Builder(prototype);
-        }
-        
-        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-        [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
-        [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
-        public sealed partial class Builder : pb::GeneratedBuilder<Location, Builder> {
-          protected override Builder ThisBuilder {
-            get { return this; }
-          }
-          public Builder() {
-            result = DefaultInstance;
-            resultIsReadOnly = true;
-          }
-          internal Builder(Location cloneFrom) {
-            result = cloneFrom;
-            resultIsReadOnly = true;
-          }
-          
-          private bool resultIsReadOnly;
-          private Location result;
-          
-          private Location PrepareBuilder() {
-            if (resultIsReadOnly) {
-              Location original = result;
-              result = new Location();
-              resultIsReadOnly = false;
-              MergeFrom(original);
-            }
-            return result;
-          }
-          
-          public override bool IsInitialized {
-            get { return result.IsInitialized; }
-          }
-          
-          protected override Location MessageBeingBuilt {
-            get { return PrepareBuilder(); }
-          }
-          
-          public override Builder Clear() {
-            result = DefaultInstance;
-            resultIsReadOnly = true;
-            return this;
-          }
-          
-          public override Builder Clone() {
-            if (resultIsReadOnly) {
-              return new Builder(result);
-            } else {
-              return new Builder().MergeFrom(result);
-            }
-          }
-          
-          public override pbd::MessageDescriptor DescriptorForType {
-            get { return global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Types.Location.Descriptor; }
-          }
-          
-          public override Location DefaultInstanceForType {
-            get { return global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Types.Location.DefaultInstance; }
-          }
-          
-          public override Location BuildPartial() {
-            if (resultIsReadOnly) {
-              return result;
-            }
-            resultIsReadOnly = true;
-            return result.MakeReadOnly();
-          }
-          
-          public override Builder MergeFrom(pb::IMessage other) {
-            if (other is Location) {
-              return MergeFrom((Location) other);
-            } else {
-              base.MergeFrom(other);
-              return this;
-            }
-          }
-          
-          public override Builder MergeFrom(Location other) {
-            if (other == global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Types.Location.DefaultInstance) return this;
-            PrepareBuilder();
-            if (other.path_.Count != 0) {
-              result.path_.Add(other.path_);
-            }
-            if (other.span_.Count != 0) {
-              result.span_.Add(other.span_);
-            }
-            this.MergeUnknownFields(other.UnknownFields);
-            return this;
-          }
-          
-          public override Builder MergeFrom(pb::ICodedInputStream input) {
-            return MergeFrom(input, pb::ExtensionRegistry.Empty);
-          }
-          
-          public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-            PrepareBuilder();
-            pb::UnknownFieldSet.Builder unknownFields = null;
-            uint tag;
-            string field_name;
-            while (input.ReadTag(out tag, out field_name)) {
-              if(tag == 0 && field_name != null) {
-                int field_ordinal = global::System.Array.BinarySearch(_locationFieldNames, field_name, global::System.StringComparer.Ordinal);
-                if(field_ordinal >= 0)
-                  tag = _locationFieldTags[field_ordinal];
-                else {
-                  if (unknownFields == null) {
-                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-                  }
-                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-                  continue;
-                }
-              }
-              switch (tag) {
-                case 0: {
-                  throw pb::InvalidProtocolBufferException.InvalidTag();
-                }
-                default: {
-                  if (pb::WireFormat.IsEndGroupTag(tag)) {
-                    if (unknownFields != null) {
-                      this.UnknownFields = unknownFields.Build();
-                    }
-                    return this;
-                  }
-                  if (unknownFields == null) {
-                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-                  }
-                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-                  break;
-                }
-                case 10:
-                case 8: {
-                  input.ReadInt32Array(tag, field_name, result.path_);
-                  break;
-                }
-                case 18:
-                case 16: {
-                  input.ReadInt32Array(tag, field_name, result.span_);
-                  break;
-                }
-              }
-            }
-            
-            if (unknownFields != null) {
-              this.UnknownFields = unknownFields.Build();
-            }
-            return this;
-          }
-          
-          
-          public pbc::IPopsicleList<int> PathList {
-            get { return PrepareBuilder().path_; }
-          }
-          public int PathCount {
-            get { return result.PathCount; }
-          }
-          public int GetPath(int index) {
-            return result.GetPath(index);
-          }
-          public Builder SetPath(int index, int value) {
-            PrepareBuilder();
-            result.path_[index] = value;
-            return this;
-          }
-          public Builder AddPath(int value) {
-            PrepareBuilder();
-            result.path_.Add(value);
-            return this;
-          }
-          public Builder AddRangePath(scg::IEnumerable<int> values) {
-            PrepareBuilder();
-            result.path_.Add(values);
-            return this;
-          }
-          public Builder ClearPath() {
-            PrepareBuilder();
-            result.path_.Clear();
-            return this;
-          }
-          
-          public pbc::IPopsicleList<int> SpanList {
-            get { return PrepareBuilder().span_; }
-          }
-          public int SpanCount {
-            get { return result.SpanCount; }
-          }
-          public int GetSpan(int index) {
-            return result.GetSpan(index);
-          }
-          public Builder SetSpan(int index, int value) {
-            PrepareBuilder();
-            result.span_[index] = value;
-            return this;
-          }
-          public Builder AddSpan(int value) {
-            PrepareBuilder();
-            result.span_.Add(value);
-            return this;
-          }
-          public Builder AddRangeSpan(scg::IEnumerable<int> values) {
-            PrepareBuilder();
-            result.span_.Add(values);
-            return this;
-          }
-          public Builder ClearSpan() {
-            PrepareBuilder();
-            result.span_.Clear();
-            return this;
-          }
-        }
-        static Location() {
-          object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, null);
-        }
-      }
-      
-    }
-    #endregion
-    
-    public const int LocationFieldNumber = 1;
-    private pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Types.Location> location_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Types.Location>();
-    public scg::IList<global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Types.Location> LocationList {
-      get { return location_; }
-    }
-    public int LocationCount {
-      get { return location_.Count; }
-    }
-    public global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Types.Location GetLocation(int index) {
-      return location_[index];
-    }
-    
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-    
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      int size = SerializedSize;
-      string[] field_names = _sourceCodeInfoFieldNames;
-      if (location_.Count > 0) {
-        output.WriteMessageArray(1, field_names[0], location_);
-      }
-      UnknownFields.WriteTo(output);
-    }
-    
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        
-        size = 0;
-        foreach (global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Types.Location element in LocationList) {
-          size += pb::CodedOutputStream.ComputeMessageSize(1, element);
-        }
-        size += UnknownFields.SerializedSize;
-        memoizedSerializedSize = size;
-        return size;
-      }
-    }
-    
-    public static SourceCodeInfo ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static SourceCodeInfo ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static SourceCodeInfo ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static SourceCodeInfo ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static SourceCodeInfo ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static SourceCodeInfo ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static SourceCodeInfo ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static SourceCodeInfo ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static SourceCodeInfo ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static SourceCodeInfo ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private SourceCodeInfo MakeReadOnly() {
-      location_.MakeReadOnly();
-      return this;
-    }
-    
-    public static Builder CreateBuilder() { return new Builder(); }
-    public override Builder ToBuilder() { return CreateBuilder(this); }
-    public override Builder CreateBuilderForType() { return new Builder(); }
-    public static Builder CreateBuilder(SourceCodeInfo prototype) {
-      return new Builder(prototype);
-    }
-    
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
-    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
-    public sealed partial class Builder : pb::GeneratedBuilder<SourceCodeInfo, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(SourceCodeInfo cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-      
-      private bool resultIsReadOnly;
-      private SourceCodeInfo result;
-      
-      private SourceCodeInfo PrepareBuilder() {
-        if (resultIsReadOnly) {
-          SourceCodeInfo original = result;
-          result = new SourceCodeInfo();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-      
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-      
-      protected override SourceCodeInfo MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-      
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-      
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-      
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Descriptor; }
-      }
-      
-      public override SourceCodeInfo DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.DefaultInstance; }
-      }
-      
-      public override SourceCodeInfo BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-      
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is SourceCodeInfo) {
-          return MergeFrom((SourceCodeInfo) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-      
-      public override Builder MergeFrom(SourceCodeInfo other) {
-        if (other == global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.location_.Count != 0) {
-          result.location_.Add(other.location_);
-        }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-      
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-      
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_sourceCodeInfoFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _sourceCodeInfoFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            default: {
-              if (pb::WireFormat.IsEndGroupTag(tag)) {
-                if (unknownFields != null) {
-                  this.UnknownFields = unknownFields.Build();
-                }
-                return this;
-              }
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              break;
-            }
-            case 10: {
-              input.ReadMessageArray(tag, field_name, result.location_, global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Types.Location.DefaultInstance, extensionRegistry);
-              break;
-            }
-          }
-        }
-        
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-      
-      
-      public pbc::IPopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Types.Location> LocationList {
-        get { return PrepareBuilder().location_; }
-      }
-      public int LocationCount {
-        get { return result.LocationCount; }
-      }
-      public global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Types.Location GetLocation(int index) {
-        return result.GetLocation(index);
-      }
-      public Builder SetLocation(int index, global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Types.Location value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.location_[index] = value;
-        return this;
-      }
-      public Builder SetLocation(int index, global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Types.Location.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.location_[index] = builderForValue.Build();
-        return this;
-      }
-      public Builder AddLocation(global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Types.Location value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.location_.Add(value);
-        return this;
-      }
-      public Builder AddLocation(global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Types.Location.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.location_.Add(builderForValue.Build());
-        return this;
-      }
-      public Builder AddRangeLocation(scg::IEnumerable<global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Types.Location> values) {
-        PrepareBuilder();
-        result.location_.Add(values);
-        return this;
-      }
-      public Builder ClearLocation() {
-        PrepareBuilder();
-        result.location_.Clear();
-        return this;
-      }
-    }
-    static SourceCodeInfo() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, null);
-    }
-  }
-  
-  #endregion
-  
-}
-
-#endregion Designer generated code
+// Generated by ProtoGen, Version=2.4.1.473, Culture=neutral, PublicKeyToken=55f7125234beb589.  DO NOT EDIT!
+#pragma warning disable 1591, 0612
+#region Designer generated code
+
+using pb = global::Google.ProtocolBuffers;
+using pbc = global::Google.ProtocolBuffers.Collections;
+using pbd = global::Google.ProtocolBuffers.Descriptors;
+using scg = global::System.Collections.Generic;
+namespace Google.ProtocolBuffers.DescriptorProtos {
+  
+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+  [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+  [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
+  public static partial class DescriptorProtoFile {
+  
+    #region Extension registration
+    public static void RegisterAllExtensions(pb::ExtensionRegistry registry) {
+    }
+    #endregion
+    #region Static variables
+    internal static pbd::MessageDescriptor internal__static_google_protobuf_FileDescriptorSet__Descriptor;
+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorSet, global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorSet.Builder> internal__static_google_protobuf_FileDescriptorSet__FieldAccessorTable;
+    internal static pbd::MessageDescriptor internal__static_google_protobuf_FileDescriptorProto__Descriptor;
+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto, global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto.Builder> internal__static_google_protobuf_FileDescriptorProto__FieldAccessorTable;
+    internal static pbd::MessageDescriptor internal__static_google_protobuf_DescriptorProto__Descriptor;
+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto, global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Builder> internal__static_google_protobuf_DescriptorProto__FieldAccessorTable;
+    internal static pbd::MessageDescriptor internal__static_google_protobuf_DescriptorProto_ExtensionRange__Descriptor;
+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Types.ExtensionRange, global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Types.ExtensionRange.Builder> internal__static_google_protobuf_DescriptorProto_ExtensionRange__FieldAccessorTable;
+    internal static pbd::MessageDescriptor internal__static_google_protobuf_FieldDescriptorProto__Descriptor;
+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto, global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Builder> internal__static_google_protobuf_FieldDescriptorProto__FieldAccessorTable;
+    internal static pbd::MessageDescriptor internal__static_google_protobuf_EnumDescriptorProto__Descriptor;
+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto, global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto.Builder> internal__static_google_protobuf_EnumDescriptorProto__FieldAccessorTable;
+    internal static pbd::MessageDescriptor internal__static_google_protobuf_EnumValueDescriptorProto__Descriptor;
+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.EnumValueDescriptorProto, global::Google.ProtocolBuffers.DescriptorProtos.EnumValueDescriptorProto.Builder> internal__static_google_protobuf_EnumValueDescriptorProto__FieldAccessorTable;
+    internal static pbd::MessageDescriptor internal__static_google_protobuf_ServiceDescriptorProto__Descriptor;
+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.ServiceDescriptorProto, global::Google.ProtocolBuffers.DescriptorProtos.ServiceDescriptorProto.Builder> internal__static_google_protobuf_ServiceDescriptorProto__FieldAccessorTable;
+    internal static pbd::MessageDescriptor internal__static_google_protobuf_MethodDescriptorProto__Descriptor;
+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.MethodDescriptorProto, global::Google.ProtocolBuffers.DescriptorProtos.MethodDescriptorProto.Builder> internal__static_google_protobuf_MethodDescriptorProto__FieldAccessorTable;
+    internal static pbd::MessageDescriptor internal__static_google_protobuf_FileOptions__Descriptor;
+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.FileOptions, global::Google.ProtocolBuffers.DescriptorProtos.FileOptions.Builder> internal__static_google_protobuf_FileOptions__FieldAccessorTable;
+    internal static pbd::MessageDescriptor internal__static_google_protobuf_MessageOptions__Descriptor;
+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.MessageOptions, global::Google.ProtocolBuffers.DescriptorProtos.MessageOptions.Builder> internal__static_google_protobuf_MessageOptions__FieldAccessorTable;
+    internal static pbd::MessageDescriptor internal__static_google_protobuf_FieldOptions__Descriptor;
+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions, global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions.Builder> internal__static_google_protobuf_FieldOptions__FieldAccessorTable;
+    internal static pbd::MessageDescriptor internal__static_google_protobuf_EnumOptions__Descriptor;
+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.EnumOptions, global::Google.ProtocolBuffers.DescriptorProtos.EnumOptions.Builder> internal__static_google_protobuf_EnumOptions__FieldAccessorTable;
+    internal static pbd::MessageDescriptor internal__static_google_protobuf_EnumValueOptions__Descriptor;
+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.EnumValueOptions, global::Google.ProtocolBuffers.DescriptorProtos.EnumValueOptions.Builder> internal__static_google_protobuf_EnumValueOptions__FieldAccessorTable;
+    internal static pbd::MessageDescriptor internal__static_google_protobuf_ServiceOptions__Descriptor;
+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.ServiceOptions, global::Google.ProtocolBuffers.DescriptorProtos.ServiceOptions.Builder> internal__static_google_protobuf_ServiceOptions__FieldAccessorTable;
+    internal static pbd::MessageDescriptor internal__static_google_protobuf_MethodOptions__Descriptor;
+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.MethodOptions, global::Google.ProtocolBuffers.DescriptorProtos.MethodOptions.Builder> internal__static_google_protobuf_MethodOptions__FieldAccessorTable;
+    internal static pbd::MessageDescriptor internal__static_google_protobuf_UninterpretedOption__Descriptor;
+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Builder> internal__static_google_protobuf_UninterpretedOption__FieldAccessorTable;
+    internal static pbd::MessageDescriptor internal__static_google_protobuf_UninterpretedOption_NamePart__Descriptor;
+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Types.NamePart, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Types.NamePart.Builder> internal__static_google_protobuf_UninterpretedOption_NamePart__FieldAccessorTable;
+    internal static pbd::MessageDescriptor internal__static_google_protobuf_SourceCodeInfo__Descriptor;
+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo, global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Builder> internal__static_google_protobuf_SourceCodeInfo__FieldAccessorTable;
+    internal static pbd::MessageDescriptor internal__static_google_protobuf_SourceCodeInfo_Location__Descriptor;
+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Types.Location, global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Types.Location.Builder> internal__static_google_protobuf_SourceCodeInfo_Location__FieldAccessorTable;
+    #endregion
+    #region Descriptor
+    public static pbd::FileDescriptor Descriptor {
+      get { return descriptor; }
+    }
+    private static pbd::FileDescriptor descriptor;
+    
+    static DescriptorProtoFile() {
+      byte[] descriptorData = global::System.Convert.FromBase64String(
+          "CiBnb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5wcm90bxIPZ29vZ2xlLnBy" + 
+          "b3RvYnVmIkcKEUZpbGVEZXNjcmlwdG9yU2V0EjIKBGZpbGUYASADKAsyJC5n" + 
+          "b29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90byKXAwoTRmlsZURl" + 
+          "c2NyaXB0b3JQcm90bxIMCgRuYW1lGAEgASgJEg8KB3BhY2thZ2UYAiABKAkS" + 
+          "EgoKZGVwZW5kZW5jeRgDIAMoCRI2CgxtZXNzYWdlX3R5cGUYBCADKAsyIC5n" + 
+          "b29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvEjcKCWVudW1fdHlwZRgF" + 
+          "IAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvEjgK" + 
+          "B3NlcnZpY2UYBiADKAsyJy5nb29nbGUucHJvdG9idWYuU2VydmljZURlc2Ny" + 
+          "aXB0b3JQcm90bxI4CglleHRlbnNpb24YByADKAsyJS5nb29nbGUucHJvdG9i" + 
+          "dWYuRmllbGREZXNjcmlwdG9yUHJvdG8SLQoHb3B0aW9ucxgIIAEoCzIcLmdv" + 
+          "b2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucxI5ChBzb3VyY2VfY29kZV9pbmZv" + 
+          "GAkgASgLMh8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvIqkDCg9E" + 
+          "ZXNjcmlwdG9yUHJvdG8SDAoEbmFtZRgBIAEoCRI0CgVmaWVsZBgCIAMoCzIl" + 
+          "Lmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90bxI4CglleHRl" + 
+          "bnNpb24YBiADKAsyJS5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9y" + 
+          "UHJvdG8SNQoLbmVzdGVkX3R5cGUYAyADKAsyIC5nb29nbGUucHJvdG9idWYu" + 
+          "RGVzY3JpcHRvclByb3RvEjcKCWVudW1fdHlwZRgEIAMoCzIkLmdvb2dsZS5w" + 
+          "cm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvEkgKD2V4dGVuc2lvbl9yYW5n" + 
+          "ZRgFIAMoCzIvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uRXh0" + 
+          "ZW5zaW9uUmFuZ2USMAoHb3B0aW9ucxgHIAEoCzIfLmdvb2dsZS5wcm90b2J1" + 
+          "Zi5NZXNzYWdlT3B0aW9ucxosCg5FeHRlbnNpb25SYW5nZRINCgVzdGFydBgB" + 
+          "IAEoBRILCgNlbmQYAiABKAUilAUKFEZpZWxkRGVzY3JpcHRvclByb3RvEgwK" + 
+          "BG5hbWUYASABKAkSDgoGbnVtYmVyGAMgASgFEjoKBWxhYmVsGAQgASgOMisu" + 
+          "Z29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLkxhYmVsEjgK" + 
+          "BHR5cGUYBSABKA4yKi5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9y" + 
+          "UHJvdG8uVHlwZRIRCgl0eXBlX25hbWUYBiABKAkSEAoIZXh0ZW5kZWUYAiAB" + 
+          "KAkSFQoNZGVmYXVsdF92YWx1ZRgHIAEoCRIuCgdvcHRpb25zGAggASgLMh0u" + 
+          "Z29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucyK2AgoEVHlwZRIPCgtUWVBF" + 
+          "X0RPVUJMRRABEg4KClRZUEVfRkxPQVQQAhIOCgpUWVBFX0lOVDY0EAMSDwoL" + 
+          "VFlQRV9VSU5UNjQQBBIOCgpUWVBFX0lOVDMyEAUSEAoMVFlQRV9GSVhFRDY0" + 
+          "EAYSEAoMVFlQRV9GSVhFRDMyEAcSDQoJVFlQRV9CT09MEAgSDwoLVFlQRV9T" + 
+          "VFJJTkcQCRIOCgpUWVBFX0dST1VQEAoSEAoMVFlQRV9NRVNTQUdFEAsSDgoK" + 
+          "VFlQRV9CWVRFUxAMEg8KC1RZUEVfVUlOVDMyEA0SDQoJVFlQRV9FTlVNEA4S" + 
+          "EQoNVFlQRV9TRklYRUQzMhAPEhEKDVRZUEVfU0ZJWEVENjQQEBIPCgtUWVBF" + 
+          "X1NJTlQzMhAREg8KC1RZUEVfU0lOVDY0EBIiQwoFTGFiZWwSEgoOTEFCRUxf" + 
+          "T1BUSU9OQUwQARISCg5MQUJFTF9SRVFVSVJFRBACEhIKDkxBQkVMX1JFUEVB" + 
+          "VEVEEAMijAEKE0VudW1EZXNjcmlwdG9yUHJvdG8SDAoEbmFtZRgBIAEoCRI4" + 
+          "CgV2YWx1ZRgCIAMoCzIpLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNj" + 
+          "cmlwdG9yUHJvdG8SLQoHb3B0aW9ucxgDIAEoCzIcLmdvb2dsZS5wcm90b2J1" + 
+          "Zi5FbnVtT3B0aW9ucyJsChhFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8SDAoE" + 
+          "bmFtZRgBIAEoCRIOCgZudW1iZXIYAiABKAUSMgoHb3B0aW9ucxgDIAEoCzIh" + 
+          "Lmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zIpABChZTZXJ2aWNl" + 
+          "RGVzY3JpcHRvclByb3RvEgwKBG5hbWUYASABKAkSNgoGbWV0aG9kGAIgAygL" + 
+          "MiYuZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90bxIwCgdv" + 
+          "cHRpb25zGAMgASgLMh8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25z" + 
+          "In8KFU1ldGhvZERlc2NyaXB0b3JQcm90bxIMCgRuYW1lGAEgASgJEhIKCmlu" + 
+          "cHV0X3R5cGUYAiABKAkSEwoLb3V0cHV0X3R5cGUYAyABKAkSLwoHb3B0aW9u" + 
+          "cxgEIAEoCzIeLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zItUDCgtG" + 
+          "aWxlT3B0aW9ucxIUCgxqYXZhX3BhY2thZ2UYASABKAkSHAoUamF2YV9vdXRl" + 
+          "cl9jbGFzc25hbWUYCCABKAkSIgoTamF2YV9tdWx0aXBsZV9maWxlcxgKIAEo" + 
+          "CDoFZmFsc2USLAodamF2YV9nZW5lcmF0ZV9lcXVhbHNfYW5kX2hhc2gYFCAB" + 
+          "KAg6BWZhbHNlEkYKDG9wdGltaXplX2ZvchgJIAEoDjIpLmdvb2dsZS5wcm90" + 
+          "b2J1Zi5GaWxlT3B0aW9ucy5PcHRpbWl6ZU1vZGU6BVNQRUVEEiIKE2NjX2dl" + 
+          "bmVyaWNfc2VydmljZXMYECABKAg6BWZhbHNlEiQKFWphdmFfZ2VuZXJpY19z" + 
+          "ZXJ2aWNlcxgRIAEoCDoFZmFsc2USIgoTcHlfZ2VuZXJpY19zZXJ2aWNlcxgS" + 
+          "IAEoCDoFZmFsc2USQwoUdW5pbnRlcnByZXRlZF9vcHRpb24Y5wcgAygLMiQu" + 
+          "Z29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24iOgoMT3B0aW1p" + 
+          "emVNb2RlEgkKBVNQRUVEEAESDQoJQ09ERV9TSVpFEAISEAoMTElURV9SVU5U" + 
+          "SU1FEAMqCQjoBxCAgICAAiK4AQoOTWVzc2FnZU9wdGlvbnMSJgoXbWVzc2Fn" + 
+          "ZV9zZXRfd2lyZV9mb3JtYXQYASABKAg6BWZhbHNlEi4KH25vX3N0YW5kYXJk" + 
+          "X2Rlc2NyaXB0b3JfYWNjZXNzb3IYAiABKAg6BWZhbHNlEkMKFHVuaW50ZXJw" + 
+          "cmV0ZWRfb3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVy" + 
+          "cHJldGVkT3B0aW9uKgkI6AcQgICAgAIilAIKDEZpZWxkT3B0aW9ucxI6CgVj" + 
+          "dHlwZRgBIAEoDjIjLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuQ1R5" + 
+          "cGU6BlNUUklORxIOCgZwYWNrZWQYAiABKAgSGQoKZGVwcmVjYXRlZBgDIAEo" + 
+          "CDoFZmFsc2USHAoUZXhwZXJpbWVudGFsX21hcF9rZXkYCSABKAkSQwoUdW5p" + 
+          "bnRlcnByZXRlZF9vcHRpb24Y5wcgAygLMiQuZ29vZ2xlLnByb3RvYnVmLlVu" + 
+          "aW50ZXJwcmV0ZWRPcHRpb24iLwoFQ1R5cGUSCgoGU1RSSU5HEAASCAoEQ09S" + 
+          "RBABEhAKDFNUUklOR19QSUVDRRACKgkI6AcQgICAgAIiXQoLRW51bU9wdGlv" + 
+          "bnMSQwoUdW5pbnRlcnByZXRlZF9vcHRpb24Y5wcgAygLMiQuZ29vZ2xlLnBy" + 
+          "b3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24qCQjoBxCAgICAAiJiChBFbnVt" + 
+          "VmFsdWVPcHRpb25zEkMKFHVuaW50ZXJwcmV0ZWRfb3B0aW9uGOcHIAMoCzIk" + 
+          "Lmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uKgkI6AcQgICA" + 
+          "gAIiYAoOU2VydmljZU9wdGlvbnMSQwoUdW5pbnRlcnByZXRlZF9vcHRpb24Y" + 
+          "5wcgAygLMiQuZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24q" + 
+          "CQjoBxCAgICAAiJfCg1NZXRob2RPcHRpb25zEkMKFHVuaW50ZXJwcmV0ZWRf" + 
+          "b3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVk" + 
+          "T3B0aW9uKgkI6AcQgICAgAIingIKE1VuaW50ZXJwcmV0ZWRPcHRpb24SOwoE" + 
+          "bmFtZRgCIAMoCzItLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0" + 
+          "aW9uLk5hbWVQYXJ0EhgKEGlkZW50aWZpZXJfdmFsdWUYAyABKAkSGgoScG9z" + 
+          "aXRpdmVfaW50X3ZhbHVlGAQgASgEEhoKEm5lZ2F0aXZlX2ludF92YWx1ZRgF" + 
+          "IAEoAxIUCgxkb3VibGVfdmFsdWUYBiABKAESFAoMc3RyaW5nX3ZhbHVlGAcg" + 
+          "ASgMEhcKD2FnZ3JlZ2F0ZV92YWx1ZRgIIAEoCRozCghOYW1lUGFydBIRCglu" + 
+          "YW1lX3BhcnQYASACKAkSFAoMaXNfZXh0ZW5zaW9uGAIgAigIInwKDlNvdXJj" + 
+          "ZUNvZGVJbmZvEjoKCGxvY2F0aW9uGAEgAygLMiguZ29vZ2xlLnByb3RvYnVm" + 
+          "LlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uGi4KCExvY2F0aW9uEhAKBHBhdGgY" + 
+          "ASADKAVCAhABEhAKBHNwYW4YAiADKAVCAhABQikKE2NvbS5nb29nbGUucHJv" + 
+          "dG9idWZCEERlc2NyaXB0b3JQcm90b3NIAQ==");
+      pbd::FileDescriptor.InternalDescriptorAssigner assigner = delegate(pbd::FileDescriptor root) {
+        descriptor = root;
+        internal__static_google_protobuf_FileDescriptorSet__Descriptor = Descriptor.MessageTypes[0];
+        internal__static_google_protobuf_FileDescriptorSet__FieldAccessorTable = 
+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorSet, global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorSet.Builder>(internal__static_google_protobuf_FileDescriptorSet__Descriptor,
+                new string[] { "File", });
+        internal__static_google_protobuf_FileDescriptorProto__Descriptor = Descriptor.MessageTypes[1];
+        internal__static_google_protobuf_FileDescriptorProto__FieldAccessorTable = 
+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto, global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto.Builder>(internal__static_google_protobuf_FileDescriptorProto__Descriptor,
+                new string[] { "Name", "Package", "Dependency", "MessageType", "EnumType", "Service", "Extension", "Options", "SourceCodeInfo", });
+        internal__static_google_protobuf_DescriptorProto__Descriptor = Descriptor.MessageTypes[2];
+        internal__static_google_protobuf_DescriptorProto__FieldAccessorTable = 
+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto, global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Builder>(internal__static_google_protobuf_DescriptorProto__Descriptor,
+                new string[] { "Name", "Field", "Extension", "NestedType", "EnumType", "ExtensionRange", "Options", });
+        internal__static_google_protobuf_DescriptorProto_ExtensionRange__Descriptor = internal__static_google_protobuf_DescriptorProto__Descriptor.NestedTypes[0];
+        internal__static_google_protobuf_DescriptorProto_ExtensionRange__FieldAccessorTable = 
+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Types.ExtensionRange, global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Types.ExtensionRange.Builder>(internal__static_google_protobuf_DescriptorProto_ExtensionRange__Descriptor,
+                new string[] { "Start", "End", });
+        internal__static_google_protobuf_FieldDescriptorProto__Descriptor = Descriptor.MessageTypes[3];
+        internal__static_google_protobuf_FieldDescriptorProto__FieldAccessorTable = 
+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto, global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Builder>(internal__static_google_protobuf_FieldDescriptorProto__Descriptor,
+                new string[] { "Name", "Number", "Label", "Type", "TypeName", "Extendee", "DefaultValue", "Options", });
+        internal__static_google_protobuf_EnumDescriptorProto__Descriptor = Descriptor.MessageTypes[4];
+        internal__static_google_protobuf_EnumDescriptorProto__FieldAccessorTable = 
+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto, global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto.Builder>(internal__static_google_protobuf_EnumDescriptorProto__Descriptor,
+                new string[] { "Name", "Value", "Options", });
+        internal__static_google_protobuf_EnumValueDescriptorProto__Descriptor = Descriptor.MessageTypes[5];
+        internal__static_google_protobuf_EnumValueDescriptorProto__FieldAccessorTable = 
+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.EnumValueDescriptorProto, global::Google.ProtocolBuffers.DescriptorProtos.EnumValueDescriptorProto.Builder>(internal__static_google_protobuf_EnumValueDescriptorProto__Descriptor,
+                new string[] { "Name", "Number", "Options", });
+        internal__static_google_protobuf_ServiceDescriptorProto__Descriptor = Descriptor.MessageTypes[6];
+        internal__static_google_protobuf_ServiceDescriptorProto__FieldAccessorTable = 
+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.ServiceDescriptorProto, global::Google.ProtocolBuffers.DescriptorProtos.ServiceDescriptorProto.Builder>(internal__static_google_protobuf_ServiceDescriptorProto__Descriptor,
+                new string[] { "Name", "Method", "Options", });
+        internal__static_google_protobuf_MethodDescriptorProto__Descriptor = Descriptor.MessageTypes[7];
+        internal__static_google_protobuf_MethodDescriptorProto__FieldAccessorTable = 
+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.MethodDescriptorProto, global::Google.ProtocolBuffers.DescriptorProtos.MethodDescriptorProto.Builder>(internal__static_google_protobuf_MethodDescriptorProto__Descriptor,
+                new string[] { "Name", "InputType", "OutputType", "Options", });
+        internal__static_google_protobuf_FileOptions__Descriptor = Descriptor.MessageTypes[8];
+        internal__static_google_protobuf_FileOptions__FieldAccessorTable = 
+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.FileOptions, global::Google.ProtocolBuffers.DescriptorProtos.FileOptions.Builder>(internal__static_google_protobuf_FileOptions__Descriptor,
+                new string[] { "JavaPackage", "JavaOuterClassname", "JavaMultipleFiles", "JavaGenerateEqualsAndHash", "OptimizeFor", "CcGenericServices", "JavaGenericServices", "PyGenericServices", "UninterpretedOption", });
+        internal__static_google_protobuf_MessageOptions__Descriptor = Descriptor.MessageTypes[9];
+        internal__static_google_protobuf_MessageOptions__FieldAccessorTable = 
+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.MessageOptions, global::Google.ProtocolBuffers.DescriptorProtos.MessageOptions.Builder>(internal__static_google_protobuf_MessageOptions__Descriptor,
+                new string[] { "MessageSetWireFormat", "NoStandardDescriptorAccessor", "UninterpretedOption", });
+        internal__static_google_protobuf_FieldOptions__Descriptor = Descriptor.MessageTypes[10];
+        internal__static_google_protobuf_FieldOptions__FieldAccessorTable = 
+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions, global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions.Builder>(internal__static_google_protobuf_FieldOptions__Descriptor,
+                new string[] { "Ctype", "Packed", "Deprecated", "ExperimentalMapKey", "UninterpretedOption", });
+        internal__static_google_protobuf_EnumOptions__Descriptor = Descriptor.MessageTypes[11];
+        internal__static_google_protobuf_EnumOptions__FieldAccessorTable = 
+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.EnumOptions, global::Google.ProtocolBuffers.DescriptorProtos.EnumOptions.Builder>(internal__static_google_protobuf_EnumOptions__Descriptor,
+                new string[] { "UninterpretedOption", });
+        internal__static_google_protobuf_EnumValueOptions__Descriptor = Descriptor.MessageTypes[12];
+        internal__static_google_protobuf_EnumValueOptions__FieldAccessorTable = 
+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.EnumValueOptions, global::Google.ProtocolBuffers.DescriptorProtos.EnumValueOptions.Builder>(internal__static_google_protobuf_EnumValueOptions__Descriptor,
+                new string[] { "UninterpretedOption", });
+        internal__static_google_protobuf_ServiceOptions__Descriptor = Descriptor.MessageTypes[13];
+        internal__static_google_protobuf_ServiceOptions__FieldAccessorTable = 
+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.ServiceOptions, global::Google.ProtocolBuffers.DescriptorProtos.ServiceOptions.Builder>(internal__static_google_protobuf_ServiceOptions__Descriptor,
+                new string[] { "UninterpretedOption", });
+        internal__static_google_protobuf_MethodOptions__Descriptor = Descriptor.MessageTypes[14];
+        internal__static_google_protobuf_MethodOptions__FieldAccessorTable = 
+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.MethodOptions, global::Google.ProtocolBuffers.DescriptorProtos.MethodOptions.Builder>(internal__static_google_protobuf_MethodOptions__Descriptor,
+                new string[] { "UninterpretedOption", });
+        internal__static_google_protobuf_UninterpretedOption__Descriptor = Descriptor.MessageTypes[15];
+        internal__static_google_protobuf_UninterpretedOption__FieldAccessorTable = 
+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Builder>(internal__static_google_protobuf_UninterpretedOption__Descriptor,
+                new string[] { "Name", "IdentifierValue", "PositiveIntValue", "NegativeIntValue", "DoubleValue", "StringValue", "AggregateValue", });
+        internal__static_google_protobuf_UninterpretedOption_NamePart__Descriptor = internal__static_google_protobuf_UninterpretedOption__Descriptor.NestedTypes[0];
+        internal__static_google_protobuf_UninterpretedOption_NamePart__FieldAccessorTable = 
+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Types.NamePart, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Types.NamePart.Builder>(internal__static_google_protobuf_UninterpretedOption_NamePart__Descriptor,
+                new string[] { "NamePart_", "IsExtension", });
+        internal__static_google_protobuf_SourceCodeInfo__Descriptor = Descriptor.MessageTypes[16];
+        internal__static_google_protobuf_SourceCodeInfo__FieldAccessorTable = 
+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo, global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Builder>(internal__static_google_protobuf_SourceCodeInfo__Descriptor,
+                new string[] { "Location", });
+        internal__static_google_protobuf_SourceCodeInfo_Location__Descriptor = internal__static_google_protobuf_SourceCodeInfo__Descriptor.NestedTypes[0];
+        internal__static_google_protobuf_SourceCodeInfo_Location__FieldAccessorTable = 
+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Types.Location, global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Types.Location.Builder>(internal__static_google_protobuf_SourceCodeInfo_Location__Descriptor,
+                new string[] { "Path", "Span", });
+        return null;
+      };
+      pbd::FileDescriptor.InternalBuildGeneratedFileFrom(descriptorData,
+          new pbd::FileDescriptor[] {
+          }, assigner);
+    }
+    #endregion
+    
+  }
+  #region Messages
+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+  [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+  [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
+  public sealed partial class FileDescriptorSet : pb::GeneratedMessage<FileDescriptorSet, FileDescriptorSet.Builder> {
+    private FileDescriptorSet() { }
+    private static readonly FileDescriptorSet defaultInstance = new FileDescriptorSet().MakeReadOnly();
+    private static readonly string[] _fileDescriptorSetFieldNames = new string[] { "file" };
+    private static readonly uint[] _fileDescriptorSetFieldTags = new uint[] { 10 };
+    public static FileDescriptorSet DefaultInstance {
+      get { return defaultInstance; }
+    }
+    
+    public override FileDescriptorSet DefaultInstanceForType {
+      get { return DefaultInstance; }
+    }
+    
+    protected override FileDescriptorSet ThisMessage {
+      get { return this; }
+    }
+    
+    public static pbd::MessageDescriptor Descriptor {
+      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_FileDescriptorSet__Descriptor; }
+    }
+    
+    protected override pb::FieldAccess.FieldAccessorTable<FileDescriptorSet, FileDescriptorSet.Builder> InternalFieldAccessors {
+      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_FileDescriptorSet__FieldAccessorTable; }
+    }
+    
+    public const int FileFieldNumber = 1;
+    private pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto> file_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto>();
+    public scg::IList<global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto> FileList {
+      get { return file_; }
+    }
+    public int FileCount {
+      get { return file_.Count; }
+    }
+    public global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto GetFile(int index) {
+      return file_[index];
+    }
+    
+    public override bool IsInitialized {
+      get {
+        foreach (global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto element in FileList) {
+          if (!element.IsInitialized) return false;
+        }
+        return true;
+      }
+    }
+    
+    public override void WriteTo(pb::ICodedOutputStream output) {
+      int size = SerializedSize;
+      string[] field_names = _fileDescriptorSetFieldNames;
+      if (file_.Count > 0) {
+        output.WriteMessageArray(1, field_names[0], file_);
+      }
+      UnknownFields.WriteTo(output);
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public override int SerializedSize {
+      get {
+        int size = memoizedSerializedSize;
+        if (size != -1) return size;
+        
+        size = 0;
+        foreach (global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto element in FileList) {
+          size += pb::CodedOutputStream.ComputeMessageSize(1, element);
+        }
+        size += UnknownFields.SerializedSize;
+        memoizedSerializedSize = size;
+        return size;
+      }
+    }
+    
+    public static FileDescriptorSet ParseFrom(pb::ByteString data) {
+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
+    }
+    public static FileDescriptorSet ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
+    }
+    public static FileDescriptorSet ParseFrom(byte[] data) {
+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
+    }
+    public static FileDescriptorSet ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
+    }
+    public static FileDescriptorSet ParseFrom(global::System.IO.Stream input) {
+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
+    }
+    public static FileDescriptorSet ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
+    }
+    public static FileDescriptorSet ParseDelimitedFrom(global::System.IO.Stream input) {
+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
+    }
+    public static FileDescriptorSet ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
+    }
+    public static FileDescriptorSet ParseFrom(pb::ICodedInputStream input) {
+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
+    }
+    public static FileDescriptorSet ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
+    }
+    private FileDescriptorSet MakeReadOnly() {
+      file_.MakeReadOnly();
+      return this;
+    }
+    
+    public static Builder CreateBuilder() { return new Builder(); }
+    public override Builder ToBuilder() { return CreateBuilder(this); }
+    public override Builder CreateBuilderForType() { return new Builder(); }
+    public static Builder CreateBuilder(FileDescriptorSet prototype) {
+      return new Builder(prototype);
+    }
+    
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
+    public sealed partial class Builder : pb::GeneratedBuilder<FileDescriptorSet, Builder> {
+      protected override Builder ThisBuilder {
+        get { return this; }
+      }
+      public Builder() {
+        result = DefaultInstance;
+        resultIsReadOnly = true;
+      }
+      internal Builder(FileDescriptorSet cloneFrom) {
+        result = cloneFrom;
+        resultIsReadOnly = true;
+      }
+      
+      private bool resultIsReadOnly;
+      private FileDescriptorSet result;
+      
+      private FileDescriptorSet PrepareBuilder() {
+        if (resultIsReadOnly) {
+          FileDescriptorSet original = result;
+          result = new FileDescriptorSet();
+          resultIsReadOnly = false;
+          MergeFrom(original);
+        }
+        return result;
+      }
+      
+      public override bool IsInitialized {
+        get { return result.IsInitialized; }
+      }
+      
+      protected override FileDescriptorSet MessageBeingBuilt {
+        get { return PrepareBuilder(); }
+      }
+      
+      public override Builder Clear() {
+        result = DefaultInstance;
+        resultIsReadOnly = true;
+        return this;
+      }
+      
+      public override Builder Clone() {
+        if (resultIsReadOnly) {
+          return new Builder(result);
+        } else {
+          return new Builder().MergeFrom(result);
+        }
+      }
+      
+      public override pbd::MessageDescriptor DescriptorForType {
+        get { return global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorSet.Descriptor; }
+      }
+      
+      public override FileDescriptorSet DefaultInstanceForType {
+        get { return global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorSet.DefaultInstance; }
+      }
+      
+      public override FileDescriptorSet BuildPartial() {
+        if (resultIsReadOnly) {
+          return result;
+        }
+        resultIsReadOnly = true;
+        return result.MakeReadOnly();
+      }
+      
+      public override Builder MergeFrom(pb::IMessage other) {
+        if (other is FileDescriptorSet) {
+          return MergeFrom((FileDescriptorSet) other);
+        } else {
+          base.MergeFrom(other);
+          return this;
+        }
+      }
+      
+      public override Builder MergeFrom(FileDescriptorSet other) {
+        if (other == global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorSet.DefaultInstance) return this;
+        PrepareBuilder();
+        if (other.file_.Count != 0) {
+          result.file_.Add(other.file_);
+        }
+        this.MergeUnknownFields(other.UnknownFields);
+        return this;
+      }
+      
+      public override Builder MergeFrom(pb::ICodedInputStream input) {
+        return MergeFrom(input, pb::ExtensionRegistry.Empty);
+      }
+      
+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+        PrepareBuilder();
+        pb::UnknownFieldSet.Builder unknownFields = null;
+        uint tag;
+        string field_name;
+        while (input.ReadTag(out tag, out field_name)) {
+          if(tag == 0 && field_name != null) {
+            int field_ordinal = global::System.Array.BinarySearch(_fileDescriptorSetFieldNames, field_name, global::System.StringComparer.Ordinal);
+            if(field_ordinal >= 0)
+              tag = _fileDescriptorSetFieldTags[field_ordinal];
+            else {
+              if (unknownFields == null) {
+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
+              }
+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
+              continue;
+            }
+          }
+          switch (tag) {
+            case 0: {
+              throw pb::InvalidProtocolBufferException.InvalidTag();
+            }
+            default: {
+              if (pb::WireFormat.IsEndGroupTag(tag)) {
+                if (unknownFields != null) {
+                  this.UnknownFields = unknownFields.Build();
+                }
+                return this;
+              }
+              if (unknownFields == null) {
+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
+              }
+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
+              break;
+            }
+            case 10: {
+              input.ReadMessageArray(tag, field_name, result.file_, global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto.DefaultInstance, extensionRegistry);
+              break;
+            }
+          }
+        }
+        
+        if (unknownFields != null) {
+          this.UnknownFields = unknownFields.Build();
+        }
+        return this;
+      }
+      
+      
+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto> FileList {
+        get { return PrepareBuilder().file_; }
+      }
+      public int FileCount {
+        get { return result.FileCount; }
+      }
+      public global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto GetFile(int index) {
+        return result.GetFile(index);
+      }
+      public Builder SetFile(int index, global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        result.file_[index] = value;
+        return this;
+      }
+      public Builder SetFile(int index, global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto.Builder builderForValue) {
+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
+        PrepareBuilder();
+        result.file_[index] = builderForValue.Build();
+        return this;
+      }
+      public Builder AddFile(global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        result.file_.Add(value);
+        return this;
+      }
+      public Builder AddFile(global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto.Builder builderForValue) {
+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
+        PrepareBuilder();
+        result.file_.Add(builderForValue.Build());
+        return this;
+      }
+      public Builder AddRangeFile(scg::IEnumerable<global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto> values) {
+        PrepareBuilder();
+        result.file_.Add(values);
+        return this;
+      }
+      public Builder ClearFile() {
+        PrepareBuilder();
+        result.file_.Clear();
+        return this;
+      }
+    }
+    static FileDescriptorSet() {
+      object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, null);
+    }
+  }
+  
+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+  [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+  [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
+  public sealed partial class FileDescriptorProto : pb::GeneratedMessage<FileDescriptorProto, FileDescriptorProto.Builder> {
+    private FileDescriptorProto() { }
+    private static readonly FileDescriptorProto defaultInstance = new FileDescriptorProto().MakeReadOnly();
+    private static readonly string[] _fileDescriptorProtoFieldNames = new string[] { "dependency", "enum_type", "extension", "message_type", "name", "options", "package", "service", "source_code_info" };
+    private static readonly uint[] _fileDescriptorProtoFieldTags = new uint[] { 26, 42, 58, 34, 10, 66, 18, 50, 74 };
+    public static FileDescriptorProto DefaultInstance {
+      get { return defaultInstance; }
+    }
+    
+    public override FileDescriptorProto DefaultInstanceForType {
+      get { return DefaultInstance; }
+    }
+    
+    protected override FileDescriptorProto ThisMessage {
+      get { return this; }
+    }
+    
+    public static pbd::MessageDescriptor Descriptor {
+      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_FileDescriptorProto__Descriptor; }
+    }
+    
+    protected override pb::FieldAccess.FieldAccessorTable<FileDescriptorProto, FileDescriptorProto.Builder> InternalFieldAccessors {
+      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_FileDescriptorProto__FieldAccessorTable; }
+    }
+    
+    public const int NameFieldNumber = 1;
+    private bool hasName;
+    private string name_ = "";
+    public bool HasName {
+      get { return hasName; }
+    }
+    public string Name {
+      get { return name_; }
+    }
+    
+    public const int PackageFieldNumber = 2;
+    private bool hasPackage;
+    private string package_ = "";
+    public bool HasPackage {
+      get { return hasPackage; }
+    }
+    public string Package {
+      get { return package_; }
+    }
+    
+    public const int DependencyFieldNumber = 3;
+    private pbc::PopsicleList<string> dependency_ = new pbc::PopsicleList<string>();
+    public scg::IList<string> DependencyList {
+      get { return pbc::Lists.AsReadOnly(dependency_); }
+    }
+    public int DependencyCount {
+      get { return dependency_.Count; }
+    }
+    public string GetDependency(int index) {
+      return dependency_[index];
+    }
+    
+    public const int MessageTypeFieldNumber = 4;
+    private pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto> messageType_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto>();
+    public scg::IList<global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto> MessageTypeList {
+      get { return messageType_; }
+    }
+    public int MessageTypeCount {
+      get { return messageType_.Count; }
+    }
+    public global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto GetMessageType(int index) {
+      return messageType_[index];
+    }
+    
+    public const int EnumTypeFieldNumber = 5;
+    private pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto> enumType_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto>();
+    public scg::IList<global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto> EnumTypeList {
+      get { return enumType_; }
+    }
+    public int EnumTypeCount {
+      get { return enumType_.Count; }
+    }
+    public global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto GetEnumType(int index) {
+      return enumType_[index];
+    }
+    
+    public const int ServiceFieldNumber = 6;
+    private pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.ServiceDescriptorProto> service_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.ServiceDescriptorProto>();
+    public scg::IList<global::Google.ProtocolBuffers.DescriptorProtos.ServiceDescriptorProto> ServiceList {
+      get { return service_; }
+    }
+    public int ServiceCount {
+      get { return service_.Count; }
+    }
+    public global::Google.ProtocolBuffers.DescriptorProtos.ServiceDescriptorProto GetService(int index) {
+      return service_[index];
+    }
+    
+    public const int ExtensionFieldNumber = 7;
+    private pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto> extension_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto>();
+    public scg::IList<global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto> ExtensionList {
+      get { return extension_; }
+    }
+    public int ExtensionCount {
+      get { return extension_.Count; }
+    }
+    public global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto GetExtension(int index) {
+      return extension_[index];
+    }
+    
+    public const int OptionsFieldNumber = 8;
+    private bool hasOptions;
+    private global::Google.ProtocolBuffers.DescriptorProtos.FileOptions options_;
+    public bool HasOptions {
+      get { return hasOptions; }
+    }
+    public global::Google.ProtocolBuffers.DescriptorProtos.FileOptions Options {
+      get { return options_ ?? global::Google.ProtocolBuffers.DescriptorProtos.FileOptions.DefaultInstance; }
+    }
+    
+    public const int SourceCodeInfoFieldNumber = 9;
+    private bool hasSourceCodeInfo;
+    private global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo sourceCodeInfo_;
+    public bool HasSourceCodeInfo {
+      get { return hasSourceCodeInfo; }
+    }
+    public global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo SourceCodeInfo {
+      get { return sourceCodeInfo_ ?? global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.DefaultInstance; }
+    }
+    
+    public override bool IsInitialized {
+      get {
+        foreach (global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto element in MessageTypeList) {
+          if (!element.IsInitialized) return false;
+        }
+        foreach (global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto element in EnumTypeList) {
+          if (!element.IsInitialized) return false;
+        }
+        foreach (global::Google.ProtocolBuffers.DescriptorProtos.ServiceDescriptorProto element in ServiceList) {
+          if (!element.IsInitialized) return false;
+        }
+        foreach (global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto element in ExtensionList) {
+          if (!element.IsInitialized) return false;
+        }
+        if (HasOptions) {
+          if (!Options.IsInitialized) return false;
+        }
+        return true;
+      }
+    }
+    
+    public override void WriteTo(pb::ICodedOutputStream output) {
+      int size = SerializedSize;
+      string[] field_names = _fileDescriptorProtoFieldNames;
+      if (hasName) {
+        output.WriteString(1, field_names[4], Name);
+      }
+      if (hasPackage) {
+        output.WriteString(2, field_names[6], Package);
+      }
+      if (dependency_.Count > 0) {
+        output.WriteStringArray(3, field_names[0], dependency_);
+      }
+      if (messageType_.Count > 0) {
+        output.WriteMessageArray(4, field_names[3], messageType_);
+      }
+      if (enumType_.Count > 0) {
+        output.WriteMessageArray(5, field_names[1], enumType_);
+      }
+      if (service_.Count > 0) {
+        output.WriteMessageArray(6, field_names[7], service_);
+      }
+      if (extension_.Count > 0) {
+        output.WriteMessageArray(7, field_names[2], extension_);
+      }
+      if (hasOptions) {
+        output.WriteMessage(8, field_names[5], Options);
+      }
+      if (hasSourceCodeInfo) {
+        output.WriteMessage(9, field_names[8], SourceCodeInfo);
+      }
+      UnknownFields.WriteTo(output);
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public override int SerializedSize {
+      get {
+        int size = memoizedSerializedSize;
+        if (size != -1) return size;
+        
+        size = 0;
+        if (hasName) {
+          size += pb::CodedOutputStream.ComputeStringSize(1, Name);
+        }
+        if (hasPackage) {
+          size += pb::CodedOutputStream.ComputeStringSize(2, Package);
+        }
+        {
+          int dataSize = 0;
+          foreach (string element in DependencyList) {
+            dataSize += pb::CodedOutputStream.ComputeStringSizeNoTag(element);
+          }
+          size += dataSize;
+          size += 1 * dependency_.Count;
+        }
+        foreach (global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto element in MessageTypeList) {
+          size += pb::CodedOutputStream.ComputeMessageSize(4, element);
+        }
+        foreach (global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto element in EnumTypeList) {
+          size += pb::CodedOutputStream.ComputeMessageSize(5, element);
+        }
+        foreach (global::Google.ProtocolBuffers.DescriptorProtos.ServiceDescriptorProto element in ServiceList) {
+          size += pb::CodedOutputStream.ComputeMessageSize(6, element);
+        }
+        foreach (global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto element in ExtensionList) {
+          size += pb::CodedOutputStream.ComputeMessageSize(7, element);
+        }
+        if (hasOptions) {
+          size += pb::CodedOutputStream.ComputeMessageSize(8, Options);
+        }
+        if (hasSourceCodeInfo) {
+          size += pb::CodedOutputStream.ComputeMessageSize(9, SourceCodeInfo);
+        }
+        size += UnknownFields.SerializedSize;
+        memoizedSerializedSize = size;
+        return size;
+      }
+    }
+    
+    public static FileDescriptorProto ParseFrom(pb::ByteString data) {
+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
+    }
+    public static FileDescriptorProto ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
+    }
+    public static FileDescriptorProto ParseFrom(byte[] data) {
+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
+    }
+    public static FileDescriptorProto ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
+    }
+    public static FileDescriptorProto ParseFrom(global::System.IO.Stream input) {
+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
+    }
+    public static FileDescriptorProto ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
+    }
+    public static FileDescriptorProto ParseDelimitedFrom(global::System.IO.Stream input) {
+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
+    }
+    public static FileDescriptorProto ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
+    }
+    public static FileDescriptorProto ParseFrom(pb::ICodedInputStream input) {
+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
+    }
+    public static FileDescriptorProto ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
+    }
+    private FileDescriptorProto MakeReadOnly() {
+      dependency_.MakeReadOnly();
+      messageType_.MakeReadOnly();
+      enumType_.MakeReadOnly();
+      service_.MakeReadOnly();
+      extension_.MakeReadOnly();
+      return this;
+    }
+    
+    public static Builder CreateBuilder() { return new Builder(); }
+    public override Builder ToBuilder() { return CreateBuilder(this); }
+    public override Builder CreateBuilderForType() { return new Builder(); }
+    public static Builder CreateBuilder(FileDescriptorProto prototype) {
+      return new Builder(prototype);
+    }
+    
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
+    public sealed partial class Builder : pb::GeneratedBuilder<FileDescriptorProto, Builder> {
+      protected override Builder ThisBuilder {
+        get { return this; }
+      }
+      public Builder() {
+        result = DefaultInstance;
+        resultIsReadOnly = true;
+      }
+      internal Builder(FileDescriptorProto cloneFrom) {
+        result = cloneFrom;
+        resultIsReadOnly = true;
+      }
+      
+      private bool resultIsReadOnly;
+      private FileDescriptorProto result;
+      
+      private FileDescriptorProto PrepareBuilder() {
+        if (resultIsReadOnly) {
+          FileDescriptorProto original = result;
+          result = new FileDescriptorProto();
+          resultIsReadOnly = false;
+          MergeFrom(original);
+        }
+        return result;
+      }
+      
+      public override bool IsInitialized {
+        get { return result.IsInitialized; }
+      }
+      
+      protected override FileDescriptorProto MessageBeingBuilt {
+        get { return PrepareBuilder(); }
+      }
+      
+      public override Builder Clear() {
+        result = DefaultInstance;
+        resultIsReadOnly = true;
+        return this;
+      }
+      
+      public override Builder Clone() {
+        if (resultIsReadOnly) {
+          return new Builder(result);
+        } else {
+          return new Builder().MergeFrom(result);
+        }
+      }
+      
+      public override pbd::MessageDescriptor DescriptorForType {
+        get { return global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto.Descriptor; }
+      }
+      
+      public override FileDescriptorProto DefaultInstanceForType {
+        get { return global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto.DefaultInstance; }
+      }
+      
+      public override FileDescriptorProto BuildPartial() {
+        if (resultIsReadOnly) {
+          return result;
+        }
+        resultIsReadOnly = true;
+        return result.MakeReadOnly();
+      }
+      
+      public override Builder MergeFrom(pb::IMessage other) {
+        if (other is FileDescriptorProto) {
+          return MergeFrom((FileDescriptorProto) other);
+        } else {
+          base.MergeFrom(other);
+          return this;
+        }
+      }
+      
+      public override Builder MergeFrom(FileDescriptorProto other) {
+        if (other == global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto.DefaultInstance) return this;
+        PrepareBuilder();
+        if (other.HasName) {
+          Name = other.Name;
+        }
+        if (other.HasPackage) {
+          Package = other.Package;
+        }
+        if (other.dependency_.Count != 0) {
+          result.dependency_.Add(other.dependency_);
+        }
+        if (other.messageType_.Count != 0) {
+          result.messageType_.Add(other.messageType_);
+        }
+        if (other.enumType_.Count != 0) {
+          result.enumType_.Add(other.enumType_);
+        }
+        if (other.service_.Count != 0) {
+          result.service_.Add(other.service_);
+        }
+        if (other.extension_.Count != 0) {
+          result.extension_.Add(other.extension_);
+        }
+        if (other.HasOptions) {
+          MergeOptions(other.Options);
+        }
+        if (other.HasSourceCodeInfo) {
+          MergeSourceCodeInfo(other.SourceCodeInfo);
+        }
+        this.MergeUnknownFields(other.UnknownFields);
+        return this;
+      }
+      
+      public override Builder MergeFrom(pb::ICodedInputStream input) {
+        return MergeFrom(input, pb::ExtensionRegistry.Empty);
+      }
+      
+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+        PrepareBuilder();
+        pb::UnknownFieldSet.Builder unknownFields = null;
+        uint tag;
+        string field_name;
+        while (input.ReadTag(out tag, out field_name)) {
+          if(tag == 0 && field_name != null) {
+            int field_ordinal = global::System.Array.BinarySearch(_fileDescriptorProtoFieldNames, field_name, global::System.StringComparer.Ordinal);
+            if(field_ordinal >= 0)
+              tag = _fileDescriptorProtoFieldTags[field_ordinal];
+            else {
+              if (unknownFields == null) {
+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
+              }
+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
+              continue;
+            }
+          }
+          switch (tag) {
+            case 0: {
+              throw pb::InvalidProtocolBufferException.InvalidTag();
+            }
+            default: {
+              if (pb::WireFormat.IsEndGroupTag(tag)) {
+                if (unknownFields != null) {
+                  this.UnknownFields = unknownFields.Build();
+                }
+                return this;
+              }
+              if (unknownFields == null) {
+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
+              }
+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
+              break;
+            }
+            case 10: {
+              result.hasName = input.ReadString(ref result.name_);
+              break;
+            }
+            case 18: {
+              result.hasPackage = input.ReadString(ref result.package_);
+              break;
+            }
+            case 26: {
+              input.ReadStringArray(tag, field_name, result.dependency_);
+              break;
+            }
+            case 34: {
+              input.ReadMessageArray(tag, field_name, result.messageType_, global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.DefaultInstance, extensionRegistry);
+              break;
+            }
+            case 42: {
+              input.ReadMessageArray(tag, field_name, result.enumType_, global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto.DefaultInstance, extensionRegistry);
+              break;
+            }
+            case 50: {
+              input.ReadMessageArray(tag, field_name, result.service_, global::Google.ProtocolBuffers.DescriptorProtos.ServiceDescriptorProto.DefaultInstance, extensionRegistry);
+              break;
+            }
+            case 58: {
+              input.ReadMessageArray(tag, field_name, result.extension_, global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.DefaultInstance, extensionRegistry);
+              break;
+            }
+            case 66: {
+              global::Google.ProtocolBuffers.DescriptorProtos.FileOptions.Builder subBuilder = global::Google.ProtocolBuffers.DescriptorProtos.FileOptions.CreateBuilder();
+              if (result.hasOptions) {
+                subBuilder.MergeFrom(Options);
+              }
+              input.ReadMessage(subBuilder, extensionRegistry);
+              Options = subBuilder.BuildPartial();
+              break;
+            }
+            case 74: {
+              global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Builder subBuilder = global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.CreateBuilder();
+              if (result.hasSourceCodeInfo) {
+                subBuilder.MergeFrom(SourceCodeInfo);
+              }
+              input.ReadMessage(subBuilder, extensionRegistry);
+              SourceCodeInfo = subBuilder.BuildPartial();
+              break;
+            }
+          }
+        }
+        
+        if (unknownFields != null) {
+          this.UnknownFields = unknownFields.Build();
+        }
+        return this;
+      }
+      
+      
+      public bool HasName {
+        get { return result.hasName; }
+      }
+      public string Name {
+        get { return result.Name; }
+        set { SetName(value); }
+      }
+      public Builder SetName(string value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        result.hasName = true;
+        result.name_ = value;
+        return this;
+      }
+      public Builder ClearName() {
+        PrepareBuilder();
+        result.hasName = false;
+        result.name_ = "";
+        return this;
+      }
+      
+      public bool HasPackage {
+        get { return result.hasPackage; }
+      }
+      public string Package {
+        get { return result.Package; }
+        set { SetPackage(value); }
+      }
+      public Builder SetPackage(string value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        result.hasPackage = true;
+        result.package_ = value;
+        return this;
+      }
+      public Builder ClearPackage() {
+        PrepareBuilder();
+        result.hasPackage = false;
+        result.package_ = "";
+        return this;
+      }
+      
+      public pbc::IPopsicleList<string> DependencyList {
+        get { return PrepareBuilder().dependency_; }
+      }
+      public int DependencyCount {
+        get { return result.DependencyCount; }
+      }
+      public string GetDependency(int index) {
+        return result.GetDependency(index);
+      }
+      public Builder SetDependency(int index, string value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        result.dependency_[index] = value;
+        return this;
+      }
+      public Builder AddDependency(string value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        result.dependency_.Add(value);
+        return this;
+      }
+      public Builder AddRangeDependency(scg::IEnumerable<string> values) {
+        PrepareBuilder();
+        result.dependency_.Add(values);
+        return this;
+      }
+      public Builder ClearDependency() {
+        PrepareBuilder();
+        result.dependency_.Clear();
+        return this;
+      }
+      
+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto> MessageTypeList {
+        get { return PrepareBuilder().messageType_; }
+      }
+      public int MessageTypeCount {
+        get { return result.MessageTypeCount; }
+      }
+      public global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto GetMessageType(int index) {
+        return result.GetMessageType(index);
+      }
+      public Builder SetMessageType(int index, global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        result.messageType_[index] = value;
+        return this;
+      }
+      public Builder SetMessageType(int index, global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Builder builderForValue) {
+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
+        PrepareBuilder();
+        result.messageType_[index] = builderForValue.Build();
+        return this;
+      }
+      public Builder AddMessageType(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        result.messageType_.Add(value);
+        return this;
+      }
+      public Builder AddMessageType(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Builder builderForValue) {
+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
+        PrepareBuilder();
+        result.messageType_.Add(builderForValue.Build());
+        return this;
+      }
+      public Builder AddRangeMessageType(scg::IEnumerable<global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto> values) {
+        PrepareBuilder();
+        result.messageType_.Add(values);
+        return this;
+      }
+      public Builder ClearMessageType() {
+        PrepareBuilder();
+        result.messageType_.Clear();
+        return this;
+      }
+      
+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto> EnumTypeList {
+        get { return PrepareBuilder().enumType_; }
+      }
+      public int EnumTypeCount {
+        get { return result.EnumTypeCount; }
+      }
+      public global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto GetEnumType(int index) {
+        return result.GetEnumType(index);
+      }
+      public Builder SetEnumType(int index, global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        result.enumType_[index] = value;
+        return this;
+      }
+      public Builder SetEnumType(int index, global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto.Builder builderForValue) {
+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
+        PrepareBuilder();
+        result.enumType_[index] = builderForValue.Build();
+        return this;
+      }
+      public Builder AddEnumType(global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        result.enumType_.Add(value);
+        return this;
+      }
+      public Builder AddEnumType(global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto.Builder builderForValue) {
+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
+        PrepareBuilder();
+        result.enumType_.Add(builderForValue.Build());
+        return this;
+      }
+      public Builder AddRangeEnumType(scg::IEnumerable<global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto> values) {
+        PrepareBuilder();
+        result.enumType_.Add(values);
+        return this;
+      }
+      public Builder ClearEnumType() {
+        PrepareBuilder();
+        result.enumType_.Clear();
+        return this;
+      }
+      
+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.ServiceDescriptorProto> ServiceList {
+        get { return PrepareBuilder().service_; }
+      }
+      public int ServiceCount {
+        get { return result.ServiceCount; }
+      }
+      public global::Google.ProtocolBuffers.DescriptorProtos.ServiceDescriptorProto GetService(int index) {
+        return result.GetService(index);
+      }
+      public Builder SetService(int index, global::Google.ProtocolBuffers.DescriptorProtos.ServiceDescriptorProto value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        result.service_[index] = value;
+        return this;
+      }
+      public Builder SetService(int index, global::Google.ProtocolBuffers.DescriptorProtos.ServiceDescriptorProto.Builder builderForValue) {
+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
+        PrepareBuilder();
+        result.service_[index] = builderForValue.Build();
+        return this;
+      }
+      public Builder AddService(global::Google.ProtocolBuffers.DescriptorProtos.ServiceDescriptorProto value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        result.service_.Add(value);
+        return this;
+      }
+      public Builder AddService(global::Google.ProtocolBuffers.DescriptorProtos.ServiceDescriptorProto.Builder builderForValue) {
+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
+        PrepareBuilder();
+        result.service_.Add(builderForValue.Build());
+        return this;
+      }
+      public Builder AddRangeService(scg::IEnumerable<global::Google.ProtocolBuffers.DescriptorProtos.ServiceDescriptorProto> values) {
+        PrepareBuilder();
+        result.service_.Add(values);
+        return this;
+      }
+      public Builder ClearService() {
+        PrepareBuilder();
+        result.service_.Clear();
+        return this;
+      }
+      
+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto> ExtensionList {
+        get { return PrepareBuilder().extension_; }
+      }
+      public int ExtensionCount {
+        get { return result.ExtensionCount; }
+      }
+      public global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto GetExtension(int index) {
+        return result.GetExtension(index);
+      }
+      public Builder SetExtension(int index, global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        result.extension_[index] = value;
+        return this;
+      }
+      public Builder SetExtension(int index, global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Builder builderForValue) {
+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
+        PrepareBuilder();
+        result.extension_[index] = builderForValue.Build();
+        return this;
+      }
+      public Builder AddExtension(global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        result.extension_.Add(value);
+        return this;
+      }
+      public Builder AddExtension(global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Builder builderForValue) {
+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
+        PrepareBuilder();
+        result.extension_.Add(builderForValue.Build());
+        return this;
+      }
+      public Builder AddRangeExtension(scg::IEnumerable<global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto> values) {
+        PrepareBuilder();
+        result.extension_.Add(values);
+        return this;
+      }
+      public Builder ClearExtension() {
+        PrepareBuilder();
+        result.extension_.Clear();
+        return this;
+      }
+      
+      public bool HasOptions {
+       get { return result.hasOptions; }
+      }
+      public global::Google.ProtocolBuffers.DescriptorProtos.FileOptions Options {
+        get { return result.Options; }
+        set { SetOptions(value); }
+      }
+      public Builder SetOptions(global::Google.ProtocolBuffers.DescriptorProtos.FileOptions value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        result.hasOptions = true;
+        result.options_ = value;
+        return this;
+      }
+      public Builder SetOptions(global::Google.ProtocolBuffers.DescriptorProtos.FileOptions.Builder builderForValue) {
+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
+        PrepareBuilder();
+        result.hasOptions = true;
+        result.options_ = builderForValue.Build();
+        return this;
+      }
+      public Builder MergeOptions(global::Google.ProtocolBuffers.DescriptorProtos.FileOptions value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        if (result.hasOptions &&
+            result.options_ != global::Google.ProtocolBuffers.DescriptorProtos.FileOptions.DefaultInstance) {
+            result.options_ = global::Google.ProtocolBuffers.DescriptorProtos.FileOptions.CreateBuilder(result.options_).MergeFrom(value).BuildPartial();
+        } else {
+          result.options_ = value;
+        }
+        result.hasOptions = true;
+        return this;
+      }
+      public Builder ClearOptions() {
+        PrepareBuilder();
+        result.hasOptions = false;
+        result.options_ = null;
+        return this;
+      }
+      
+      public bool HasSourceCodeInfo {
+       get { return result.hasSourceCodeInfo; }
+      }
+      public global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo SourceCodeInfo {
+        get { return result.SourceCodeInfo; }
+        set { SetSourceCodeInfo(value); }
+      }
+      public Builder SetSourceCodeInfo(global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        result.hasSourceCodeInfo = true;
+        result.sourceCodeInfo_ = value;
+        return this;
+      }
+      public Builder SetSourceCodeInfo(global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Builder builderForValue) {
+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
+        PrepareBuilder();
+        result.hasSourceCodeInfo = true;
+        result.sourceCodeInfo_ = builderForValue.Build();
+        return this;
+      }
+      public Builder MergeSourceCodeInfo(global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        if (result.hasSourceCodeInfo &&
+            result.sourceCodeInfo_ != global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.DefaultInstance) {
+            result.sourceCodeInfo_ = global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.CreateBuilder(result.sourceCodeInfo_).MergeFrom(value).BuildPartial();
+        } else {
+          result.sourceCodeInfo_ = value;
+        }
+        result.hasSourceCodeInfo = true;
+        return this;
+      }
+      public Builder ClearSourceCodeInfo() {
+        PrepareBuilder();
+        result.hasSourceCodeInfo = false;
+        result.sourceCodeInfo_ = null;
+        return this;
+      }
+    }
+    static FileDescriptorProto() {
+      object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, null);
+    }
+  }
+  
+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+  [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+  [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
+  public sealed partial class DescriptorProto : pb::GeneratedMessage<DescriptorProto, DescriptorProto.Builder> {
+    private DescriptorProto() { }
+    private static readonly DescriptorProto defaultInstance = new DescriptorProto().MakeReadOnly();
+    private static readonly string[] _descriptorProtoFieldNames = new string[] { "enum_type", "extension", "extension_range", "field", "name", "nested_type", "options" };
+    private static readonly uint[] _descriptorProtoFieldTags = new uint[] { 34, 50, 42, 18, 10, 26, 58 };
+    public static DescriptorProto DefaultInstance {
+      get { return defaultInstance; }
+    }
+    
+    public override DescriptorProto DefaultInstanceForType {
+      get { return DefaultInstance; }
+    }
+    
+    protected override DescriptorProto ThisMessage {
+      get { return this; }
+    }
+    
+    public static pbd::MessageDescriptor Descriptor {
+      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_DescriptorProto__Descriptor; }
+    }
+    
+    protected override pb::FieldAccess.FieldAccessorTable<DescriptorProto, DescriptorProto.Builder> InternalFieldAccessors {
+      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_DescriptorProto__FieldAccessorTable; }
+    }
+    
+    #region Nested types
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
+    public static class Types {
+      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+      [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+      [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
+      public sealed partial class ExtensionRange : pb::GeneratedMessage<ExtensionRange, ExtensionRange.Builder> {
+        private ExtensionRange() { }
+        private static readonly ExtensionRange defaultInstance = new ExtensionRange().MakeReadOnly();
+        private static readonly string[] _extensionRangeFieldNames = new string[] { "end", "start" };
+        private static readonly uint[] _extensionRangeFieldTags = new uint[] { 16, 8 };
+        public static ExtensionRange DefaultInstance {
+          get { return defaultInstance; }
+        }
+        
+        public override ExtensionRange DefaultInstanceForType {
+          get { return DefaultInstance; }
+        }
+        
+        protected override ExtensionRange ThisMessage {
+          get { return this; }
+        }
+        
+        public static pbd::MessageDescriptor Descriptor {
+          get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_DescriptorProto_ExtensionRange__Descriptor; }
+        }
+        
+        protected override pb::FieldAccess.FieldAccessorTable<ExtensionRange, ExtensionRange.Builder> InternalFieldAccessors {
+          get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_DescriptorProto_ExtensionRange__FieldAccessorTable; }
+        }
+        
+        public const int StartFieldNumber = 1;
+        private bool hasStart;
+        private int start_;
+        public bool HasStart {
+          get { return hasStart; }
+        }
+        public int Start {
+          get { return start_; }
+        }
+        
+        public const int EndFieldNumber = 2;
+        private bool hasEnd;
+        private int end_;
+        public bool HasEnd {
+          get { return hasEnd; }
+        }
+        public int End {
+          get { return end_; }
+        }
+        
+        public override bool IsInitialized {
+          get {
+            return true;
+          }
+        }
+        
+        public override void WriteTo(pb::ICodedOutputStream output) {
+          int size = SerializedSize;
+          string[] field_names = _extensionRangeFieldNames;
+          if (hasStart) {
+            output.WriteInt32(1, field_names[1], Start);
+          }
+          if (hasEnd) {
+            output.WriteInt32(2, field_names[0], End);
+          }
+          UnknownFields.WriteTo(output);
+        }
+        
+        private int memoizedSerializedSize = -1;
+        public override int SerializedSize {
+          get {
+            int size = memoizedSerializedSize;
+            if (size != -1) return size;
+            
+            size = 0;
+            if (hasStart) {
+              size += pb::CodedOutputStream.ComputeInt32Size(1, Start);
+            }
+            if (hasEnd) {
+              size += pb::CodedOutputStream.ComputeInt32Size(2, End);
+            }
+            size += UnknownFields.SerializedSize;
+            memoizedSerializedSize = size;
+            return size;
+          }
+        }
+        
+        public static ExtensionRange ParseFrom(pb::ByteString data) {
+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
+        }
+        public static ExtensionRange ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
+        }
+        public static ExtensionRange ParseFrom(byte[] data) {
+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
+        }
+        public static ExtensionRange ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
+        }
+        public static ExtensionRange ParseFrom(global::System.IO.Stream input) {
+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
+        }
+        public static ExtensionRange ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
+        }
+        public static ExtensionRange ParseDelimitedFrom(global::System.IO.Stream input) {
+          return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
+        }
+        public static ExtensionRange ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
+          return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
+        }
+        public static ExtensionRange ParseFrom(pb::ICodedInputStream input) {
+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
+        }
+        public static ExtensionRange ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
+        }
+        private ExtensionRange MakeReadOnly() {
+          return this;
+        }
+        
+        public static Builder CreateBuilder() { return new Builder(); }
+        public override Builder ToBuilder() { return CreateBuilder(this); }
+        public override Builder CreateBuilderForType() { return new Builder(); }
+        public static Builder CreateBuilder(ExtensionRange prototype) {
+          return new Builder(prototype);
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+        [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
+        public sealed partial class Builder : pb::GeneratedBuilder<ExtensionRange, Builder> {
+          protected override Builder ThisBuilder {
+            get { return this; }
+          }
+          public Builder() {
+            result = DefaultInstance;
+            resultIsReadOnly = true;
+          }
+          internal Builder(ExtensionRange cloneFrom) {
+            result = cloneFrom;
+            resultIsReadOnly = true;
+          }
+          
+          private bool resultIsReadOnly;
+          private ExtensionRange result;
+          
+          private ExtensionRange PrepareBuilder() {
+            if (resultIsReadOnly) {
+              ExtensionRange original = result;
+              result = new ExtensionRange();
+              resultIsReadOnly = false;
+              MergeFrom(original);
+            }
+            return result;
+          }
+          
+          public override bool IsInitialized {
+            get { return result.IsInitialized; }
+          }
+          
+          protected override ExtensionRange MessageBeingBuilt {
+            get { return PrepareBuilder(); }
+          }
+          
+          public override Builder Clear() {
+            result = DefaultInstance;
+            resultIsReadOnly = true;
+            return this;
+          }
+          
+          public override Builder Clone() {
+            if (resultIsReadOnly) {
+              return new Builder(result);
+            } else {
+              return new Builder().MergeFrom(result);
+            }
+          }
+          
+          public override pbd::MessageDescriptor DescriptorForType {
+            get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Types.ExtensionRange.Descriptor; }
+          }
+          
+          public override ExtensionRange DefaultInstanceForType {
+            get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Types.ExtensionRange.DefaultInstance; }
+          }
+          
+          public override ExtensionRange BuildPartial() {
+            if (resultIsReadOnly) {
+              return result;
+            }
+            resultIsReadOnly = true;
+            return result.MakeReadOnly();
+          }
+          
+          public override Builder MergeFrom(pb::IMessage other) {
+            if (other is ExtensionRange) {
+              return MergeFrom((ExtensionRange) other);
+            } else {
+              base.MergeFrom(other);
+              return this;
+            }
+          }
+          
+          public override Builder MergeFrom(ExtensionRange other) {
+            if (other == global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Types.ExtensionRange.DefaultInstance) return this;
+            PrepareBuilder();
+            if (other.HasStart) {
+              Start = other.Start;
+            }
+            if (other.HasEnd) {
+              End = other.End;
+            }
+            this.MergeUnknownFields(other.UnknownFields);
+            return this;
+          }
+          
+          public override Builder MergeFrom(pb::ICodedInputStream input) {
+            return MergeFrom(input, pb::ExtensionRegistry.Empty);
+          }
+          
+          public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+            PrepareBuilder();
+            pb::UnknownFieldSet.Builder unknownFields = null;
+            uint tag;
+            string field_name;
+            while (input.ReadTag(out tag, out field_name)) {
+              if(tag == 0 && field_name != null) {
+                int field_ordinal = global::System.Array.BinarySearch(_extensionRangeFieldNames, field_name, global::System.StringComparer.Ordinal);
+                if(field_ordinal >= 0)
+                  tag = _extensionRangeFieldTags[field_ordinal];
+                else {
+                  if (unknownFields == null) {
+                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
+                  }
+                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
+                  continue;
+                }
+              }
+              switch (tag) {
+                case 0: {
+                  throw pb::InvalidProtocolBufferException.InvalidTag();
+                }
+                default: {
+                  if (pb::WireFormat.IsEndGroupTag(tag)) {
+                    if (unknownFields != null) {
+                      this.UnknownFields = unknownFields.Build();
+                    }
+                    return this;
+                  }
+                  if (unknownFields == null) {
+                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
+                  }
+                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
+                  break;
+                }
+                case 8: {
+                  result.hasStart = input.ReadInt32(ref result.start_);
+                  break;
+                }
+                case 16: {
+                  result.hasEnd = input.ReadInt32(ref result.end_);
+                  break;
+                }
+              }
+            }
+            
+            if (unknownFields != null) {
+              this.UnknownFields = unknownFields.Build();
+            }
+            return this;
+          }
+          
+          
+          public bool HasStart {
+            get { return result.hasStart; }
+          }
+          public int Start {
+            get { return result.Start; }
+            set { SetStart(value); }
+          }
+          public Builder SetStart(int value) {
+            PrepareBuilder();
+            result.hasStart = true;
+            result.start_ = value;
+            return this;
+          }
+          public Builder ClearStart() {
+            PrepareBuilder();
+            result.hasStart = false;
+            result.start_ = 0;
+            return this;
+          }
+          
+          public bool HasEnd {
+            get { return result.hasEnd; }
+          }
+          public int End {
+            get { return result.End; }
+            set { SetEnd(value); }
+          }
+          public Builder SetEnd(int value) {
+            PrepareBuilder();
+            result.hasEnd = true;
+            result.end_ = value;
+            return this;
+          }
+          public Builder ClearEnd() {
+            PrepareBuilder();
+            result.hasEnd = false;
+            result.end_ = 0;
+            return this;
+          }
+        }
+        static ExtensionRange() {
+          object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, null);
+        }
+      }
+      
+    }
+    #endregion
+    
+    public const int NameFieldNumber = 1;
+    private bool hasName;
+    private string name_ = "";
+    public bool HasName {
+      get { return hasName; }
+    }
+    public string Name {
+      get { return name_; }
+    }
+    
+    public const int FieldFieldNumber = 2;
+    private pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto> field_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto>();
+    public scg::IList<global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto> FieldList {
+      get { return field_; }
+    }
+    public int FieldCount {
+      get { return field_.Count; }
+    }
+    public global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto GetField(int index) {
+      return field_[index];
+    }
+    
+    public const int ExtensionFieldNumber = 6;
+    private pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto> extension_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto>();
+    public scg::IList<global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto> ExtensionList {
+      get { return extension_; }
+    }
+    public int ExtensionCount {
+      get { return extension_.Count; }
+    }
+    public global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto GetExtension(int index) {
+      return extension_[index];
+    }
+    
+    public const int NestedTypeFieldNumber = 3;
+    private pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto> nestedType_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto>();
+    public scg::IList<global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto> NestedTypeList {
+      get { return nestedType_; }
+    }
+    public int NestedTypeCount {
+      get { return nestedType_.Count; }
+    }
+    public global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto GetNestedType(int index) {
+      return nestedType_[index];
+    }
+    
+    public const int EnumTypeFieldNumber = 4;
+    private pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto> enumType_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto>();
+    public scg::IList<global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto> EnumTypeList {
+      get { return enumType_; }
+    }
+    public int EnumTypeCount {
+      get { return enumType_.Count; }
+    }
+    public global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto GetEnumType(int index) {
+      return enumType_[index];
+    }
+    
+    public const int ExtensionRangeFieldNumber = 5;
+    private pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Types.ExtensionRange> extensionRange_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Types.ExtensionRange>();
+    public scg::IList<global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Types.ExtensionRange> ExtensionRangeList {
+      get { return extensionRange_; }
+    }
+    public int ExtensionRangeCount {
+      get { return extensionRange_.Count; }
+    }
+    public global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Types.ExtensionRange GetExtensionRange(int index) {
+      return extensionRange_[index];
+    }
+    
+    public const int OptionsFieldNumber = 7;
+    private bool hasOptions;
+    private global::Google.ProtocolBuffers.DescriptorProtos.MessageOptions options_;
+    public bool HasOptions {
+      get { return hasOptions; }
+    }
+    public global::Google.ProtocolBuffers.DescriptorProtos.MessageOptions Options {
+      get { return options_ ?? global::Google.ProtocolBuffers.DescriptorProtos.MessageOptions.DefaultInstance; }
+    }
+    
+    public override bool IsInitialized {
+      get {
+        foreach (global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto element in FieldList) {
+          if (!element.IsInitialized) return false;
+        }
+        foreach (global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto element in ExtensionList) {
+          if (!element.IsInitialized) return false;
+        }
+        foreach (global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto element in NestedTypeList) {
+          if (!element.IsInitialized) return false;
+        }
+        foreach (global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto element in EnumTypeList) {
+          if (!element.IsInitialized) return false;
+        }
+        if (HasOptions) {
+          if (!Options.IsInitialized) return false;
+        }
+        return true;
+      }
+    }
+    
+    public override void WriteTo(pb::ICodedOutputStream output) {
+      int size = SerializedSize;
+      string[] field_names = _descriptorProtoFieldNames;
+      if (hasName) {
+        output.WriteString(1, field_names[4], Name);
+      }
+      if (field_.Count > 0) {
+        output.WriteMessageArray(2, field_names[3], field_);
+      }
+      if (nestedType_.Count > 0) {
+        output.WriteMessageArray(3, field_names[5], nestedType_);
+      }
+      if (enumType_.Count > 0) {
+        output.WriteMessageArray(4, field_names[0], enumType_);
+      }
+      if (extensionRange_.Count > 0) {
+        output.WriteMessageArray(5, field_names[2], extensionRange_);
+      }
+      if (extension_.Count > 0) {
+        output.WriteMessageArray(6, field_names[1], extension_);
+      }
+      if (hasOptions) {
+        output.WriteMessage(7, field_names[6], Options);
+      }
+      UnknownFields.WriteTo(output);
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public override int SerializedSize {
+      get {
+        int size = memoizedSerializedSize;
+        if (size != -1) return size;
+        
+        size = 0;
+        if (hasName) {
+          size += pb::CodedOutputStream.ComputeStringSize(1, Name);
+        }
+        foreach (global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto element in FieldList) {
+          size += pb::CodedOutputStream.ComputeMessageSize(2, element);
+        }
+        foreach (global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto element in ExtensionList) {
+          size += pb::CodedOutputStream.ComputeMessageSize(6, element);
+        }
+        foreach (global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto element in NestedTypeList) {
+          size += pb::CodedOutputStream.ComputeMessageSize(3, element);
+        }
+        foreach (global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto element in EnumTypeList) {
+          size += pb::CodedOutputStream.ComputeMessageSize(4, element);
+        }
+        foreach (global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Types.ExtensionRange element in ExtensionRangeList) {
+          size += pb::CodedOutputStream.ComputeMessageSize(5, element);
+        }
+        if (hasOptions) {
+          size += pb::CodedOutputStream.ComputeMessageSize(7, Options);
+        }
+        size += UnknownFields.SerializedSize;
+        memoizedSerializedSize = size;
+        return size;
+      }
+    }
+    
+    public static DescriptorProto ParseFrom(pb::ByteString data) {
+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
+    }
+    public static DescriptorProto ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
+    }
+    public static DescriptorProto ParseFrom(byte[] data) {
+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
+    }
+    public static DescriptorProto ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
+    }
+    public static DescriptorProto ParseFrom(global::System.IO.Stream input) {
+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
+    }
+    public static DescriptorProto ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
+    }
+    public static DescriptorProto ParseDelimitedFrom(global::System.IO.Stream input) {
+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
+    }
+    public static DescriptorProto ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
+    }
+    public static DescriptorProto ParseFrom(pb::ICodedInputStream input) {
+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
+    }
+    public static DescriptorProto ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
+    }
+    private DescriptorProto MakeReadOnly() {
+      field_.MakeReadOnly();
+      extension_.MakeReadOnly();
+      nestedType_.MakeReadOnly();
+      enumType_.MakeReadOnly();
+      extensionRange_.MakeReadOnly();
+      return this;
+    }
+    
+    public static Builder CreateBuilder() { return new Builder(); }
+    public override Builder ToBuilder() { return CreateBuilder(this); }
+    public override Builder CreateBuilderForType() { return new Builder(); }
+    public static Builder CreateBuilder(DescriptorProto prototype) {
+      return new Builder(prototype);
+    }
+    
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
+    public sealed partial class Builder : pb::GeneratedBuilder<DescriptorProto, Builder> {
+      protected override Builder ThisBuilder {
+        get { return this; }
+      }
+      public Builder() {
+        result = DefaultInstance;
+        resultIsReadOnly = true;
+      }
+      internal Builder(DescriptorProto cloneFrom) {
+        result = cloneFrom;
+        resultIsReadOnly = true;
+      }
+      
+      private bool resultIsReadOnly;
+      private DescriptorProto result;
+      
+      private DescriptorProto PrepareBuilder() {
+        if (resultIsReadOnly) {
+          DescriptorProto original = result;
+          result = new DescriptorProto();
+          resultIsReadOnly = false;
+          MergeFrom(original);
+        }
+        return result;
+      }
+      
+      public override bool IsInitialized {
+        get { return result.IsInitialized; }
+      }
+      
+      protected override DescriptorProto MessageBeingBuilt {
+        get { return PrepareBuilder(); }
+      }
+      
+      public override Builder Clear() {
+        result = DefaultInstance;
+        resultIsReadOnly = true;
+        return this;
+      }
+      
+      public override Builder Clone() {
+        if (resultIsReadOnly) {
+          return new Builder(result);
+        } else {
+          return new Builder().MergeFrom(result);
+        }
+      }
+      
+      public override pbd::MessageDescriptor DescriptorForType {
+        get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Descriptor; }
+      }
+      
+      public override DescriptorProto DefaultInstanceForType {
+        get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.DefaultInstance; }
+      }
+      
+      public override DescriptorProto BuildPartial() {
+        if (resultIsReadOnly) {
+          return result;
+        }
+        resultIsReadOnly = true;
+        return result.MakeReadOnly();
+      }
+      
+      public override Builder MergeFrom(pb::IMessage other) {
+        if (other is DescriptorProto) {
+          return MergeFrom((DescriptorProto) other);
+        } else {
+          base.MergeFrom(other);
+          return this;
+        }
+      }
+      
+      public override Builder MergeFrom(DescriptorProto other) {
+        if (other == global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.DefaultInstance) return this;
+        PrepareBuilder();
+        if (other.HasName) {
+          Name = other.Name;
+        }
+        if (other.field_.Count != 0) {
+          result.field_.Add(other.field_);
+        }
+        if (other.extension_.Count != 0) {
+          result.extension_.Add(other.extension_);
+        }
+        if (other.nestedType_.Count != 0) {
+          result.nestedType_.Add(other.nestedType_);
+        }
+        if (other.enumType_.Count != 0) {
+          result.enumType_.Add(other.enumType_);
+        }
+        if (other.extensionRange_.Count != 0) {
+          result.extensionRange_.Add(other.extensionRange_);
+        }
+        if (other.HasOptions) {
+          MergeOptions(other.Options);
+        }
+        this.MergeUnknownFields(other.UnknownFields);
+        return this;
+      }
+      
+      public override Builder MergeFrom(pb::ICodedInputStream input) {
+        return MergeFrom(input, pb::ExtensionRegistry.Empty);
+      }
+      
+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+        PrepareBuilder();
+        pb::UnknownFieldSet.Builder unknownFields = null;
+        uint tag;
+        string field_name;
+        while (input.ReadTag(out tag, out field_name)) {
+          if(tag == 0 && field_name != null) {
+            int field_ordinal = global::System.Array.BinarySearch(_descriptorProtoFieldNames, field_name, global::System.StringComparer.Ordinal);
+            if(field_ordinal >= 0)
+              tag = _descriptorProtoFieldTags[field_ordinal];
+            else {
+              if (unknownFields == null) {
+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
+              }
+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
+              continue;
+            }
+          }
+          switch (tag) {
+            case 0: {
+              throw pb::InvalidProtocolBufferException.InvalidTag();
+            }
+            default: {
+              if (pb::WireFormat.IsEndGroupTag(tag)) {
+                if (unknownFields != null) {
+                  this.UnknownFields = unknownFields.Build();
+                }
+                return this;
+              }
+              if (unknownFields == null) {
+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
+              }
+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
+              break;
+            }
+            case 10: {
+              result.hasName = input.ReadString(ref result.name_);
+              break;
+            }
+            case 18: {
+              input.ReadMessageArray(tag, field_name, result.field_, global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.DefaultInstance, extensionRegistry);
+              break;
+            }
+            case 26: {
+              input.ReadMessageArray(tag, field_name, result.nestedType_, global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.DefaultInstance, extensionRegistry);
+              break;
+            }
+            case 34: {
+              input.ReadMessageArray(tag, field_name, result.enumType_, global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto.DefaultInstance, extensionRegistry);
+              break;
+            }
+            case 42: {
+              input.ReadMessageArray(tag, field_name, result.extensionRange_, global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Types.ExtensionRange.DefaultInstance, extensionRegistry);
+              break;
+            }
+            case 50: {
+              input.ReadMessageArray(tag, field_name, result.extension_, global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.DefaultInstance, extensionRegistry);
+              break;
+            }
+            case 58: {
+              global::Google.ProtocolBuffers.DescriptorProtos.MessageOptions.Builder subBuilder = global::Google.ProtocolBuffers.DescriptorProtos.MessageOptions.CreateBuilder();
+              if (result.hasOptions) {
+                subBuilder.MergeFrom(Options);
+              }
+              input.ReadMessage(subBuilder, extensionRegistry);
+              Options = subBuilder.BuildPartial();
+              break;
+            }
+          }
+        }
+        
+        if (unknownFields != null) {
+          this.UnknownFields = unknownFields.Build();
+        }
+        return this;
+      }
+      
+      
+      public bool HasName {
+        get { return result.hasName; }
+      }
+      public string Name {
+        get { return result.Name; }
+        set { SetName(value); }
+      }
+      public Builder SetName(string value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        result.hasName = true;
+        result.name_ = value;
+        return this;
+      }
+      public Builder ClearName() {
+        PrepareBuilder();
+        result.hasName = false;
+        result.name_ = "";
+        return this;
+      }
+      
+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto> FieldList {
+        get { return PrepareBuilder().field_; }
+      }
+      public int FieldCount {
+        get { return result.FieldCount; }
+      }
+      public global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto GetField(int index) {
+        return result.GetField(index);
+      }
+      public Builder SetField(int index, global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        result.field_[index] = value;
+        return this;
+      }
+      public Builder SetField(int index, global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Builder builderForValue) {
+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
+        PrepareBuilder();
+        result.field_[index] = builderForValue.Build();
+        return this;
+      }
+      public Builder AddField(global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        result.field_.Add(value);
+        return this;
+      }
+      public Builder AddField(global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Builder builderForValue) {
+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
+        PrepareBuilder();
+        result.field_.Add(builderForValue.Build());
+        return this;
+      }
+      public Builder AddRangeField(scg::IEnumerable<global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto> values) {
+        PrepareBuilder();
+        result.field_.Add(values);
+        return this;
+      }
+      public Builder ClearField() {
+        PrepareBuilder();
+        result.field_.Clear();
+        return this;
+      }
+      
+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto> ExtensionList {
+        get { return PrepareBuilder().extension_; }
+      }
+      public int ExtensionCount {
+        get { return result.ExtensionCount; }
+      }
+      public global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto GetExtension(int index) {
+        return result.GetExtension(index);
+      }
+      public Builder SetExtension(int index, global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        result.extension_[index] = value;
+        return this;
+      }
+      public Builder SetExtension(int index, global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Builder builderForValue) {
+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
+        PrepareBuilder();
+        result.extension_[index] = builderForValue.Build();
+        return this;
+      }
+      public Builder AddExtension(global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        result.extension_.Add(value);
+        return this;
+      }
+      public Builder AddExtension(global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Builder builderForValue) {
+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
+        PrepareBuilder();
+        result.extension_.Add(builderForValue.Build());
+        return this;
+      }
+      public Builder AddRangeExtension(scg::IEnumerable<global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto> values) {
+        PrepareBuilder();
+        result.extension_.Add(values);
+        return this;
+      }
+      public Builder ClearExtension() {
+        PrepareBuilder();
+        result.extension_.Clear();
+        return this;
+      }
+      
+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto> NestedTypeList {
+        get { return PrepareBuilder().nestedType_; }
+      }
+      public int NestedTypeCount {
+        get { return result.NestedTypeCount; }
+      }
+      public global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto GetNestedType(int index) {
+        return result.GetNestedType(index);
+      }
+      public Builder SetNestedType(int index, global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        result.nestedType_[index] = value;
+        return this;
+      }
+      public Builder SetNestedType(int index, global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Builder builderForValue) {
+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
+        PrepareBuilder();
+        result.nestedType_[index] = builderForValue.Build();
+        return this;
+      }
+      public Builder AddNestedType(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        result.nestedType_.Add(value);
+        return this;
+      }
+      public Builder AddNestedType(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Builder builderForValue) {
+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
+        PrepareBuilder();
+        result.nestedType_.Add(builderForValue.Build());
+        return this;
+      }
+      public Builder AddRangeNestedType(scg::IEnumerable<global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto> values) {
+        PrepareBuilder();
+        result.nestedType_.Add(values);
+        return this;
+      }
+      public Builder ClearNestedType() {
+        PrepareBuilder();
+        result.nestedType_.Clear();
+        return this;
+      }
+      
+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto> EnumTypeList {
+        get { return PrepareBuilder().enumType_; }
+      }
+      public int EnumTypeCount {
+        get { return result.EnumTypeCount; }
+      }
+      public global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto GetEnumType(int index) {
+        return result.GetEnumType(index);
+      }
+      public Builder SetEnumType(int index, global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        result.enumType_[index] = value;
+        return this;
+      }
+      public Builder SetEnumType(int index, global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto.Builder builderForValue) {
+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
+        PrepareBuilder();
+        result.enumType_[index] = builderForValue.Build();
+        return this;
+      }
+      public Builder AddEnumType(global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        result.enumType_.Add(value);
+        return this;
+      }
+      public Builder AddEnumType(global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto.Builder builderForValue) {
+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
+        PrepareBuilder();
+        result.enumType_.Add(builderForValue.Build());
+        return this;
+      }
+      public Builder AddRangeEnumType(scg::IEnumerable<global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto> values) {
+        PrepareBuilder();
+        result.enumType_.Add(values);
+        return this;
+      }
+      public Builder ClearEnumType() {
+        PrepareBuilder();
+        result.enumType_.Clear();
+        return this;
+      }
+      
+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Types.ExtensionRange> ExtensionRangeList {
+        get { return PrepareBuilder().extensionRange_; }
+      }
+      public int ExtensionRangeCount {
+        get { return result.ExtensionRangeCount; }
+      }
+      public global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Types.ExtensionRange GetExtensionRange(int index) {
+        return result.GetExtensionRange(index);
+      }
+      public Builder SetExtensionRange(int index, global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Types.ExtensionRange value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        result.extensionRange_[index] = value;
+        return this;
+      }
+      public Builder SetExtensionRange(int index, global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Types.ExtensionRange.Builder builderForValue) {
+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
+        PrepareBuilder();
+        result.extensionRange_[index] = builderForValue.Build();
+        return this;
+      }
+      public Builder AddExtensionRange(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Types.ExtensionRange value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        result.extensionRange_.Add(value);
+        return this;
+      }
+      public Builder AddExtensionRange(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Types.ExtensionRange.Builder builderForValue) {
+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
+        PrepareBuilder();
+        result.extensionRange_.Add(builderForValue.Build());
+        return this;
+      }
+      public Builder AddRangeExtensionRange(scg::IEnumerable<global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Types.ExtensionRange> values) {
+        PrepareBuilder();
+        result.extensionRange_.Add(values);
+        return this;
+      }
+      public Builder ClearExtensionRange() {
+        PrepareBuilder();
+        result.extensionRange_.Clear();
+        return this;
+      }
+      
+      public bool HasOptions {
+       get { return result.hasOptions; }
+      }
+      public global::Google.ProtocolBuffers.DescriptorProtos.MessageOptions Options {
+        get { return result.Options; }
+        set { SetOptions(value); }
+      }
+      public Builder SetOptions(global::Google.ProtocolBuffers.DescriptorProtos.MessageOptions value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        result.hasOptions = true;
+        result.options_ = value;
+        return this;
+      }
+      public Builder SetOptions(global::Google.ProtocolBuffers.DescriptorProtos.MessageOptions.Builder builderForValue) {
+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
+        PrepareBuilder();
+        result.hasOptions = true;
+        result.options_ = builderForValue.Build();
+        return this;
+      }
+      public Builder MergeOptions(global::Google.ProtocolBuffers.DescriptorProtos.MessageOptions value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        if (result.hasOptions &&
+            result.options_ != global::Google.ProtocolBuffers.DescriptorProtos.MessageOptions.DefaultInstance) {
+            result.options_ = global::Google.ProtocolBuffers.DescriptorProtos.MessageOptions.CreateBuilder(result.options_).MergeFrom(value).BuildPartial();
+        } else {
+          result.options_ = value;
+        }
+        result.hasOptions = true;
+        return this;
+      }
+      public Builder ClearOptions() {
+        PrepareBuilder();
+        result.hasOptions = false;
+        result.options_ = null;
+        return this;
+      }
+    }
+    static DescriptorProto() {
+      object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, null);
+    }
+  }
+  
+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+  [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+  [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
+  public sealed partial class FieldDescriptorProto : pb::GeneratedMessage<FieldDescriptorProto, FieldDescriptorProto.Builder> {
+    private FieldDescriptorProto() { }
+    private static readonly FieldDescriptorProto defaultInstance = new FieldDescriptorProto().MakeReadOnly();
+    private static readonly string[] _fieldDescriptorProtoFieldNames = new string[] { "default_value", "extendee", "label", "name", "number", "options", "type", "type_name" };
+    private static readonly uint[] _fieldDescriptorProtoFieldTags = new uint[] { 58, 18, 32, 10, 24, 66, 40, 50 };
+    public static FieldDescriptorProto DefaultInstance {
+      get { return defaultInstance; }
+    }
+    
+    public override FieldDescriptorProto DefaultInstanceForType {
+      get { return DefaultInstance; }
+    }
+    
+    protected override FieldDescriptorProto ThisMessage {
+      get { return this; }
+    }
+    
+    public static pbd::MessageDescriptor Descriptor {
+      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_FieldDescriptorProto__Descriptor; }
+    }
+    
+    protected override pb::FieldAccess.FieldAccessorTable<FieldDescriptorProto, FieldDescriptorProto.Builder> InternalFieldAccessors {
+      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_FieldDescriptorProto__FieldAccessorTable; }
+    }
+    
+    #region Nested types
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
+    public static class Types {
+      [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+      [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
+      public enum Type {
+        TYPE_DOUBLE = 1,
+        TYPE_FLOAT = 2,
+        TYPE_INT64 = 3,
+        TYPE_UINT64 = 4,
+        TYPE_INT32 = 5,
+        TYPE_FIXED64 = 6,
+        TYPE_FIXED32 = 7,
+        TYPE_BOOL = 8,
+        TYPE_STRING = 9,
+        TYPE_GROUP = 10,
+        TYPE_MESSAGE = 11,
+        TYPE_BYTES = 12,
+        TYPE_UINT32 = 13,
+        TYPE_ENUM = 14,
+        TYPE_SFIXED32 = 15,
+        TYPE_SFIXED64 = 16,
+        TYPE_SINT32 = 17,
+        TYPE_SINT64 = 18,
+      }
+      
+      [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+      [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
+      public enum Label {
+        LABEL_OPTIONAL = 1,
+        LABEL_REQUIRED = 2,
+        LABEL_REPEATED = 3,
+      }
+      
+    }
+    #endregion
+    
+    public const int NameFieldNumber = 1;
+    private bool hasName;
+    private string name_ = "";
+    public bool HasName {
+      get { return hasName; }
+    }
+    public string Name {
+      get { return name_; }
+    }
+    
+    public const int NumberFieldNumber = 3;
+    private bool hasNumber;
+    private int number_;
+    public bool HasNumber {
+      get { return hasNumber; }
+    }
+    public int Number {
+      get { return number_; }
+    }
+    
+    public const int LabelFieldNumber = 4;
+    private bool hasLabel;
+    private global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Types.Label label_ = global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Types.Label.LABEL_OPTIONAL;
+    public bool HasLabel {
+      get { return hasLabel; }
+    }
+    public global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Types.Label Label {
+      get { return label_; }
+    }
+    
+    public const int TypeFieldNumber = 5;
+    private bool hasType;
+    private global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Types.Type type_ = global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Types.Type.TYPE_DOUBLE;
+    public bool HasType {
+      get { return hasType; }
+    }
+    public global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Types.Type Type {
+      get { return type_; }
+    }
+    
+    public const int TypeNameFieldNumber = 6;
+    private bool hasTypeName;
+    private string typeName_ = "";
+    public bool HasTypeName {
+      get { return hasTypeName; }
+    }
+    public string TypeName {
+      get { return typeName_; }
+    }
+    
+    public const int ExtendeeFieldNumber = 2;
+    private bool hasExtendee;
+    private string extendee_ = "";
+    public bool HasExtendee {
+      get { return hasExtendee; }
+    }
+    public string Extendee {
+      get { return extendee_; }
+    }
+    
+    public const int DefaultValueFieldNumber = 7;
+    private bool hasDefaultValue;
+    private string defaultValue_ = "";
+    public bool HasDefaultValue {
+      get { return hasDefaultValue; }
+    }
+    public string DefaultValue {
+      get { return defaultValue_; }
+    }
+    
+    public const int OptionsFieldNumber = 8;
+    private bool hasOptions;
+    private global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions options_;
+    public bool HasOptions {
+      get { return hasOptions; }
+    }
+    public global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions Options {
+      get { return options_ ?? global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions.DefaultInstance; }
+    }
+    
+    public override bool IsInitialized {
+      get {
+        if (HasOptions) {
+          if (!Options.IsInitialized) return false;
+        }
+        return true;
+      }
+    }
+    
+    public override void WriteTo(pb::ICodedOutputStream output) {
+      int size = SerializedSize;
+      string[] field_names = _fieldDescriptorProtoFieldNames;
+      if (hasName) {
+        output.WriteString(1, field_names[3], Name);
+      }
+      if (hasExtendee) {
+        output.WriteString(2, field_names[1], Extendee);
+      }
+      if (hasNumber) {
+        output.WriteInt32(3, field_names[4], Number);
+      }
+      if (hasLabel) {
+        output.WriteEnum(4, field_names[2], (int) Label, Label);
+      }
+      if (hasType) {
+        output.WriteEnum(5, field_names[6], (int) Type, Type);
+      }
+      if (hasTypeName) {
+        output.WriteString(6, field_names[7], TypeName);
+      }
+      if (hasDefaultValue) {
+        output.WriteString(7, field_names[0], DefaultValue);
+      }
+      if (hasOptions) {
+        output.WriteMessage(8, field_names[5], Options);
+      }
+      UnknownFields.WriteTo(output);
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public override int SerializedSize {
+      get {
+        int size = memoizedSerializedSize;
+        if (size != -1) return size;
+        
+        size = 0;
+        if (hasName) {
+          size += pb::CodedOutputStream.ComputeStringSize(1, Name);
+        }
+        if (hasNumber) {
+          size += pb::CodedOutputStream.ComputeInt32Size(3, Number);
+        }
+        if (hasLabel) {
+          size += pb::CodedOutputStream.ComputeEnumSize(4, (int) Label);
+        }
+        if (hasType) {
+          size += pb::CodedOutputStream.ComputeEnumSize(5, (int) Type);
+        }
+        if (hasTypeName) {
+          size += pb::CodedOutputStream.ComputeStringSize(6, TypeName);
+        }
+        if (hasExtendee) {
+          size += pb::CodedOutputStream.ComputeStringSize(2, Extendee);
+        }
+        if (hasDefaultValue) {
+          size += pb::CodedOutputStream.ComputeStringSize(7, DefaultValue);
+        }
+        if (hasOptions) {
+          size += pb::CodedOutputStream.ComputeMessageSize(8, Options);
+        }
+        size += UnknownFields.SerializedSize;
+        memoizedSerializedSize = size;
+        return size;
+      }
+    }
+    
+    public static FieldDescriptorProto ParseFrom(pb::ByteString data) {
+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
+    }
+    public static FieldDescriptorProto ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
+    }
+    public static FieldDescriptorProto ParseFrom(byte[] data) {
+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
+    }
+    public static FieldDescriptorProto ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
+    }
+    public static FieldDescriptorProto ParseFrom(global::System.IO.Stream input) {
+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
+    }
+    public static FieldDescriptorProto ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
+    }
+    public static FieldDescriptorProto ParseDelimitedFrom(global::System.IO.Stream input) {
+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
+    }
+    public static FieldDescriptorProto ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
+    }
+    public static FieldDescriptorProto ParseFrom(pb::ICodedInputStream input) {
+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
+    }
+    public static FieldDescriptorProto ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
+    }
+    private FieldDescriptorProto MakeReadOnly() {
+      return this;
+    }
+    
+    public static Builder CreateBuilder() { return new Builder(); }
+    public override Builder ToBuilder() { return CreateBuilder(this); }
+    public override Builder CreateBuilderForType() { return new Builder(); }
+    public static Builder CreateBuilder(FieldDescriptorProto prototype) {
+      return new Builder(prototype);
+    }
+    
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
+    public sealed partial class Builder : pb::GeneratedBuilder<FieldDescriptorProto, Builder> {
+      protected override Builder ThisBuilder {
+        get { return this; }
+      }
+      public Builder() {
+        result = DefaultInstance;
+        resultIsReadOnly = true;
+      }
+      internal Builder(FieldDescriptorProto cloneFrom) {
+        result = cloneFrom;
+        resultIsReadOnly = true;
+      }
+      
+      private bool resultIsReadOnly;
+      private FieldDescriptorProto result;
+      
+      private FieldDescriptorProto PrepareBuilder() {
+        if (resultIsReadOnly) {
+          FieldDescriptorProto original = result;
+          result = new FieldDescriptorProto();
+          resultIsReadOnly = false;
+          MergeFrom(original);
+        }
+        return result;
+      }
+      
+      public override bool IsInitialized {
+        get { return result.IsInitialized; }
+      }
+      
+      protected override FieldDescriptorProto MessageBeingBuilt {
+        get { return PrepareBuilder(); }
+      }
+      
+      public override Builder Clear() {
+        result = DefaultInstance;
+        resultIsReadOnly = true;
+        return this;
+      }
+      
+      public override Builder Clone() {
+        if (resultIsReadOnly) {
+          return new Builder(result);
+        } else {
+          return new Builder().MergeFrom(result);
+        }
+      }
+      
+      public override pbd::MessageDescriptor DescriptorForType {
+        get { return global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Descriptor; }
+      }
+      
+      public override FieldDescriptorProto DefaultInstanceForType {
+        get { return global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.DefaultInstance; }
+      }
+      
+      public override FieldDescriptorProto BuildPartial() {
+        if (resultIsReadOnly) {
+          return result;
+        }
+        resultIsReadOnly = true;
+        return result.MakeReadOnly();
+      }
+      
+      public override Builder MergeFrom(pb::IMessage other) {
+        if (other is FieldDescriptorProto) {
+          return MergeFrom((FieldDescriptorProto) other);
+        } else {
+          base.MergeFrom(other);
+          return this;
+        }
+      }
+      
+      public override Builder MergeFrom(FieldDescriptorProto other) {
+        if (other == global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.DefaultInstance) return this;
+        PrepareBuilder();
+        if (other.HasName) {
+          Name = other.Name;
+        }
+        if (other.HasNumber) {
+          Number = other.Number;
+        }
+        if (other.HasLabel) {
+          Label = other.Label;
+        }
+        if (other.HasType) {
+          Type = other.Type;
+        }
+        if (other.HasTypeName) {
+          TypeName = other.TypeName;
+        }
+        if (other.HasExtendee) {
+          Extendee = other.Extendee;
+        }
+        if (other.HasDefaultValue) {
+          DefaultValue = other.DefaultValue;
+        }
+        if (other.HasOptions) {
+          MergeOptions(other.Options);
+        }
+        this.MergeUnknownFields(other.UnknownFields);
+        return this;
+      }
+      
+      public override Builder MergeFrom(pb::ICodedInputStream input) {
+        return MergeFrom(input, pb::ExtensionRegistry.Empty);
+      }
+      
+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+        PrepareBuilder();
+        pb::UnknownFieldSet.Builder unknownFields = null;
+        uint tag;
+        string field_name;
+        while (input.ReadTag(out tag, out field_name)) {
+          if(tag == 0 && field_name != null) {
+            int field_ordinal = global::System.Array.BinarySearch(_fieldDescriptorProtoFieldNames, field_name, global::System.StringComparer.Ordinal);
+            if(field_ordinal >= 0)
+              tag = _fieldDescriptorProtoFieldTags[field_ordinal];
+            else {
+              if (unknownFields == null) {
+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
+              }
+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
+              continue;
+            }
+          }
+          switch (tag) {
+            case 0: {
+              throw pb::InvalidProtocolBufferException.InvalidTag();
+            }
+            default: {
+              if (pb::WireFormat.IsEndGroupTag(tag)) {
+                if (unknownFields != null) {
+                  this.UnknownFields = unknownFields.Build();
+                }
+                return this;
+              }
+              if (unknownFields == null) {
+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
+              }
+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
+              break;
+            }
+            case 10: {
+              result.hasName = input.ReadString(ref result.name_);
+              break;
+            }
+            case 18: {
+              result.hasExtendee = input.ReadString(ref result.extendee_);
+              break;
+            }
+            case 24: {
+              result.hasNumber = input.ReadInt32(ref result.number_);
+              break;
+            }
+            case 32: {
+              object unknown;
+              if(input.ReadEnum(ref result.label_, out unknown)) {
+                result.hasLabel = true;
+              } else if(unknown is int) {
+                if (unknownFields == null) {
+                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
+                }
+                unknownFields.MergeVarintField(4, (ulong)(int)unknown);
+              }
+              break;
+            }
+            case 40: {
+              object unknown;
+              if(input.ReadEnum(ref result.type_, out unknown)) {
+                result.hasType = true;
+              } else if(unknown is int) {
+                if (unknownFields == null) {
+                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
+                }
+                unknownFields.MergeVarintField(5, (ulong)(int)unknown);
+              }
+              break;
+            }
+            case 50: {
+              result.hasTypeName = input.ReadString(ref result.typeName_);
+              break;
+            }
+            case 58: {
+              result.hasDefaultValue = input.ReadString(ref result.defaultValue_);
+              break;
+            }
+            case 66: {
+              global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions.Builder subBuilder = global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions.CreateBuilder();
+              if (result.hasOptions) {
+                subBuilder.MergeFrom(Options);
+              }
+              input.ReadMessage(subBuilder, extensionRegistry);
+              Options = subBuilder.BuildPartial();
+              break;
+            }
+          }
+        }
+        
+        if (unknownFields != null) {
+          this.UnknownFields = unknownFields.Build();
+        }
+        return this;
+      }
+      
+      
+      public bool HasName {
+        get { return result.hasName; }
+      }
+      public string Name {
+        get { return result.Name; }
+        set { SetName(value); }
+      }
+      public Builder SetName(string value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        result.hasName = true;
+        result.name_ = value;
+        return this;
+      }
+      public Builder ClearName() {
+        PrepareBuilder();
+        result.hasName = false;
+        result.name_ = "";
+        return this;
+      }
+      
+      public bool HasNumber {
+        get { return result.hasNumber; }
+      }
+      public int Number {
+        get { return result.Number; }
+        set { SetNumber(value); }
+      }
+      public Builder SetNumber(int value) {
+        PrepareBuilder();
+        result.hasNumber = true;
+        result.number_ = value;
+        return this;
+      }
+      public Builder ClearNumber() {
+        PrepareBuilder();
+        result.hasNumber = false;
+        result.number_ = 0;
+        return this;
+      }
+      
+      public bool HasLabel {
+       get { return result.hasLabel; }
+      }
+      public global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Types.Label Label {
+        get { return result.Label; }
+        set { SetLabel(value); }
+      }
+      public Builder SetLabel(global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Types.Label value) {
+        PrepareBuilder();
+        result.hasLabel = true;
+        result.label_ = value;
+        return this;
+      }
+      public Builder ClearLabel() {
+        PrepareBuilder();
+        result.hasLabel = false;
+        result.label_ = global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Types.Label.LABEL_OPTIONAL;
+        return this;
+      }
+      
+      public bool HasType {
+       get { return result.hasType; }
+      }
+      public global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Types.Type Type {
+        get { return result.Type; }
+        set { SetType(value); }
+      }
+      public Builder SetType(global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Types.Type value) {
+        PrepareBuilder();
+        result.hasType = true;
+        result.type_ = value;
+        return this;
+      }
+      public Builder ClearType() {
+        PrepareBuilder();
+        result.hasType = false;
+        result.type_ = global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Types.Type.TYPE_DOUBLE;
+        return this;
+      }
+      
+      public bool HasTypeName {
+        get { return result.hasTypeName; }
+      }
+      public string TypeName {
+        get { return result.TypeName; }
+        set { SetTypeName(value); }
+      }
+      public Builder SetTypeName(string value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        result.hasTypeName = true;
+        result.typeName_ = value;
+        return this;
+      }
+      public Builder ClearTypeName() {
+        PrepareBuilder();
+        result.hasTypeName = false;
+        result.typeName_ = "";
+        return this;
+      }
+      
+      public bool HasExtendee {
+        get { return result.hasExtendee; }
+      }
+      public string Extendee {
+        get { return result.Extendee; }
+        set { SetExtendee(value); }
+      }
+      public Builder SetExtendee(string value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        result.hasExtendee = true;
+        result.extendee_ = value;
+        return this;
+      }
+      public Builder ClearExtendee() {
+        PrepareBuilder();
+        result.hasExtendee = false;
+        result.extendee_ = "";
+        return this;
+      }
+      
+      public bool HasDefaultValue {
+        get { return result.hasDefaultValue; }
+      }
+      public string DefaultValue {
+        get { return result.DefaultValue; }
+        set { SetDefaultValue(value); }
+      }
+      public Builder SetDefaultValue(string value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        result.hasDefaultValue = true;
+        result.defaultValue_ = value;
+        return this;
+      }
+      public Builder ClearDefaultValue() {
+        PrepareBuilder();
+        result.hasDefaultValue = false;
+        result.defaultValue_ = "";
+        return this;
+      }
+      
+      public bool HasOptions {
+       get { return result.hasOptions; }
+      }
+      public global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions Options {
+        get { return result.Options; }
+        set { SetOptions(value); }
+      }
+      public Builder SetOptions(global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        result.hasOptions = true;
+        result.options_ = value;
+        return this;
+      }
+      public Builder SetOptions(global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions.Builder builderForValue) {
+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
+        PrepareBuilder();
+        result.hasOptions = true;
+        result.options_ = builderForValue.Build();
+        return this;
+      }
+      public Builder MergeOptions(global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        if (result.hasOptions &&
+            result.options_ != global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions.DefaultInstance) {
+            result.options_ = global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions.CreateBuilder(result.options_).MergeFrom(value).BuildPartial();
+        } else {
+          result.options_ = value;
+        }
+        result.hasOptions = true;
+        return this;
+      }
+      public Builder ClearOptions() {
+        PrepareBuilder();
+        result.hasOptions = false;
+        result.options_ = null;
+        return this;
+      }
+    }
+    static FieldDescriptorProto() {
+      object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, null);
+    }
+  }
+  
+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+  [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+  [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
+  public sealed partial class EnumDescriptorProto : pb::GeneratedMessage<EnumDescriptorProto, EnumDescriptorProto.Builder> {
+    private EnumDescriptorProto() { }
+    private static readonly EnumDescriptorProto defaultInstance = new EnumDescriptorProto().MakeReadOnly();
+    private static readonly string[] _enumDescriptorProtoFieldNames = new string[] { "name", "options", "value" };
+    private static readonly uint[] _enumDescriptorProtoFieldTags = new uint[] { 10, 26, 18 };
+    public static EnumDescriptorProto DefaultInstance {
+      get { return defaultInstance; }
+    }
+    
+    public override EnumDescriptorProto DefaultInstanceForType {
+      get { return DefaultInstance; }
+    }
+    
+    protected override EnumDescriptorProto ThisMessage {
+      get { return this; }
+    }
+    
+    public static pbd::MessageDescriptor Descriptor {
+      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_EnumDescriptorProto__Descriptor; }
+    }
+    
+    protected override pb::FieldAccess.FieldAccessorTable<EnumDescriptorProto, EnumDescriptorProto.Builder> InternalFieldAccessors {
+      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_EnumDescriptorProto__FieldAccessorTable; }
+    }
+    
+    public const int NameFieldNumber = 1;
+    private bool hasName;
+    private string name_ = "";
+    public bool HasName {
+      get { return hasName; }
+    }
+    public string Name {
+      get { return name_; }
+    }
+    
+    public const int ValueFieldNumber = 2;
+    private pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.EnumValueDescriptorProto> value_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.EnumValueDescriptorProto>();
+    public scg::IList<global::Google.ProtocolBuffers.DescriptorProtos.EnumValueDescriptorProto> ValueList {
+      get { return value_; }
+    }
+    public int ValueCount {
+      get { return value_.Count; }
+    }
+    public global::Google.ProtocolBuffers.DescriptorProtos.EnumValueDescriptorProto GetValue(int index) {
+      return value_[index];
+    }
+    
+    public const int OptionsFieldNumber = 3;
+    private bool hasOptions;
+    private global::Google.ProtocolBuffers.DescriptorProtos.EnumOptions options_;
+    public bool HasOptions {
+      get { return hasOptions; }
+    }
+    public global::Google.ProtocolBuffers.DescriptorProtos.EnumOptions Options {
+      get { return options_ ?? global::Google.ProtocolBuffers.DescriptorProtos.EnumOptions.DefaultInstance; }
+    }
+    
+    public override bool IsInitialized {
+      get {
+        foreach (global::Google.ProtocolBuffers.DescriptorProtos.EnumValueDescriptorProto element in ValueList) {
+          if (!element.IsInitialized) return false;
+        }
+        if (HasOptions) {
+          if (!Options.IsInitialized) return false;
+        }
+        return true;
+      }
+    }
+    
+    public override void WriteTo(pb::ICodedOutputStream output) {
+      int size = SerializedSize;
+      string[] field_names = _enumDescriptorProtoFieldNames;
+      if (hasName) {
+        output.WriteString(1, field_names[0], Name);
+      }
+      if (value_.Count > 0) {
+        output.WriteMessageArray(2, field_names[2], value_);
+      }
+      if (hasOptions) {
+        output.WriteMessage(3, field_names[1], Options);
+      }
+      UnknownFields.WriteTo(output);
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public override int SerializedSize {
+      get {
+        int size = memoizedSerializedSize;
+        if (size != -1) return size;
+        
+        size = 0;
+        if (hasName) {
+          size += pb::CodedOutputStream.ComputeStringSize(1, Name);
+        }
+        foreach (global::Google.ProtocolBuffers.DescriptorProtos.EnumValueDescriptorProto element in ValueList) {
+          size += pb::CodedOutputStream.ComputeMessageSize(2, element);
+        }
+        if (hasOptions) {
+          size += pb::CodedOutputStream.ComputeMessageSize(3, Options);
+        }
+        size += UnknownFields.SerializedSize;
+        memoizedSerializedSize = size;
+        return size;
+      }
+    }
+    
+    public static EnumDescriptorProto ParseFrom(pb::ByteString data) {
+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
+    }
+    public static EnumDescriptorProto ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
+    }
+    public static EnumDescriptorProto ParseFrom(byte[] data) {
+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
+    }
+    public static EnumDescriptorProto ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
+    }
+    public static EnumDescriptorProto ParseFrom(global::System.IO.Stream input) {
+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
+    }
+    public static EnumDescriptorProto ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
+    }
+    public static EnumDescriptorProto ParseDelimitedFrom(global::System.IO.Stream input) {
+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
+    }
+    public static EnumDescriptorProto ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
+    }
+    public static EnumDescriptorProto ParseFrom(pb::ICodedInputStream input) {
+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
+    }
+    public static EnumDescriptorProto ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
+    }
+    private EnumDescriptorProto MakeReadOnly() {
+      value_.MakeReadOnly();
+      return this;
+    }
+    
+    public static Builder CreateBuilder() { return new Builder(); }
+    public override Builder ToBuilder() { return CreateBuilder(this); }
+    public override Builder CreateBuilderForType() { return new Builder(); }
+    public static Builder CreateBuilder(EnumDescriptorProto prototype) {
+      return new Builder(prototype);
+    }
+    
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
+    public sealed partial class Builder : pb::GeneratedBuilder<EnumDescriptorProto, Builder> {
+      protected override Builder ThisBuilder {
+        get { return this; }
+      }
+      public Builder() {
+        result = DefaultInstance;
+        resultIsReadOnly = true;
+      }
+      internal Builder(EnumDescriptorProto cloneFrom) {
+        result = cloneFrom;
+        resultIsReadOnly = true;
+      }
+      
+      private bool resultIsReadOnly;
+      private EnumDescriptorProto result;
+      
+      private EnumDescriptorProto PrepareBuilder() {
+        if (resultIsReadOnly) {
+          EnumDescriptorProto original = result;
+          result = new EnumDescriptorProto();
+          resultIsReadOnly = false;
+          MergeFrom(original);
+        }
+        return result;
+      }
+      
+      public override bool IsInitialized {
+        get { return result.IsInitialized; }
+      }
+      
+      protected override EnumDescriptorProto MessageBeingBuilt {
+        get { return PrepareBuilder(); }
+      }
+      
+      public override Builder Clear() {
+        result = DefaultInstance;
+        resultIsReadOnly = true;
+        return this;
+      }
+      
+      public override Builder Clone() {
+        if (resultIsReadOnly) {
+          return new Builder(result);
+        } else {
+          return new Builder().MergeFrom(result);
+        }
+      }
+      
+      public override pbd::MessageDescriptor DescriptorForType {
+        get { return global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto.Descriptor; }
+      }
+      
+      public override EnumDescriptorProto DefaultInstanceForType {
+        get { return global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto.DefaultInstance; }
+      }
+      
+      public override EnumDescriptorProto BuildPartial() {
+        if (resultIsReadOnly) {
+          return result;
+        }
+        resultIsReadOnly = true;
+        return result.MakeReadOnly();
+      }
+      
+      public override Builder MergeFrom(pb::IMessage other) {
+        if (other is EnumDescriptorProto) {
+          return MergeFrom((EnumDescriptorProto) other);
+        } else {
+          base.MergeFrom(other);
+          return this;
+        }
+      }
+      
+      public override Builder MergeFrom(EnumDescriptorProto other) {
+        if (other == global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto.DefaultInstance) return this;
+        PrepareBuilder();
+        if (other.HasName) {
+          Name = other.Name;
+        }
+        if (other.value_.Count != 0) {
+          result.value_.Add(other.value_);
+        }
+        if (other.HasOptions) {
+          MergeOptions(other.Options);
+        }
+        this.MergeUnknownFields(other.UnknownFields);
+        return this;
+      }
+      
+      public override Builder MergeFrom(pb::ICodedInputStream input) {
+        return MergeFrom(input, pb::ExtensionRegistry.Empty);
+      }
+      
+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+        PrepareBuilder();
+        pb::UnknownFieldSet.Builder unknownFields = null;
+        uint tag;
+        string field_name;
+        while (input.ReadTag(out tag, out field_name)) {
+          if(tag == 0 && field_name != null) {
+            int field_ordinal = global::System.Array.BinarySearch(_enumDescriptorProtoFieldNames, field_name, global::System.StringComparer.Ordinal);
+            if(field_ordinal >= 0)
+              tag = _enumDescriptorProtoFieldTags[field_ordinal];
+            else {
+              if (unknownFields == null) {
+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
+              }
+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
+              continue;
+            }
+          }
+          switch (tag) {
+            case 0: {
+              throw pb::InvalidProtocolBufferException.InvalidTag();
+            }
+            default: {
+              if (pb::WireFormat.IsEndGroupTag(tag)) {
+                if (unknownFields != null) {
+                  this.UnknownFields = unknownFields.Build();
+                }
+                return this;
+              }
+              if (unknownFields == null) {
+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
+              }
+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
+              break;
+            }
+            case 10: {
+              result.hasName = input.ReadString(ref result.name_);
+              break;
+            }
+            case 18: {
+              input.ReadMessageArray(tag, field_name, result.value_, global::Google.ProtocolBuffers.DescriptorProtos.EnumValueDescriptorProto.DefaultInstance, extensionRegistry);
+              break;
+            }
+            case 26: {
+              global::Google.ProtocolBuffers.DescriptorProtos.EnumOptions.Builder subBuilder = global::Google.ProtocolBuffers.DescriptorProtos.EnumOptions.CreateBuilder();
+              if (result.hasOptions) {
+                subBuilder.MergeFrom(Options);
+              }
+              input.ReadMessage(subBuilder, extensionRegistry);
+              Options = subBuilder.BuildPartial();
+              break;
+            }
+          }
+        }
+        
+        if (unknownFields != null) {
+          this.UnknownFields = unknownFields.Build();
+        }
+        return this;
+      }
+      
+      
+      public bool HasName {
+        get { return result.hasName; }
+      }
+      public string Name {
+        get { return result.Name; }
+        set { SetName(value); }
+      }
+      public Builder SetName(string value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        result.hasName = true;
+        result.name_ = value;
+        return this;
+      }
+      public Builder ClearName() {
+        PrepareBuilder();
+        result.hasName = false;
+        result.name_ = "";
+        return this;
+      }
+      
+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.EnumValueDescriptorProto> ValueList {
+        get { return PrepareBuilder().value_; }
+      }
+      public int ValueCount {
+        get { return result.ValueCount; }
+      }
+      public global::Google.ProtocolBuffers.DescriptorProtos.EnumValueDescriptorProto GetValue(int index) {
+        return result.GetValue(index);
+      }
+      public Builder SetValue(int index, global::Google.ProtocolBuffers.DescriptorProtos.EnumValueDescriptorProto value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        result.value_[index] = value;
+        return this;
+      }
+      public Builder SetValue(int index, global::Google.ProtocolBuffers.DescriptorProtos.EnumValueDescriptorProto.Builder builderForValue) {
+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
+        PrepareBuilder();
+        result.value_[index] = builderForValue.Build();
+        return this;
+      }
+      public Builder AddValue(global::Google.ProtocolBuffers.DescriptorProtos.EnumValueDescriptorProto value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        result.value_.Add(value);
+        return this;
+      }
+      public Builder AddValue(global::Google.ProtocolBuffers.DescriptorProtos.EnumValueDescriptorProto.Builder builderForValue) {
+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
+        PrepareBuilder();
+        result.value_.Add(builderForValue.Build());
+        return this;
+      }
+      public Builder AddRangeValue(scg::IEnumerable<global::Google.ProtocolBuffers.DescriptorProtos.EnumValueDescriptorProto> values) {
+        PrepareBuilder();
+        result.value_.Add(values);
+        return this;
+      }
+      public Builder ClearValue() {
+        PrepareBuilder();
+        result.value_.Clear();
+        return this;
+      }
+      
+      public bool HasOptions {
+       get { return result.hasOptions; }
+      }
+      public global::Google.ProtocolBuffers.DescriptorProtos.EnumOptions Options {
+        get { return result.Options; }
+        set { SetOptions(value); }
+      }
+      public Builder SetOptions(global::Google.ProtocolBuffers.DescriptorProtos.EnumOptions value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        result.hasOptions = true;
+        result.options_ = value;
+        return this;
+      }
+      public Builder SetOptions(global::Google.ProtocolBuffers.DescriptorProtos.EnumOptions.Builder builderForValue) {
+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
+        PrepareBuilder();
+        result.hasOptions = true;
+        result.options_ = builderForValue.Build();
+        return this;
+      }
+      public Builder MergeOptions(global::Google.ProtocolBuffers.DescriptorProtos.EnumOptions value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        if (result.hasOptions &&
+            result.options_ != global::Google.ProtocolBuffers.DescriptorProtos.EnumOptions.DefaultInstance) {
+            result.options_ = global::Google.ProtocolBuffers.DescriptorProtos.EnumOptions.CreateBuilder(result.options_).MergeFrom(value).BuildPartial();
+        } else {
+          result.options_ = value;
+        }
+        result.hasOptions = true;
+        return this;
+      }
+      public Builder ClearOptions() {
+        PrepareBuilder();
+        result.hasOptions = false;
+        result.options_ = null;
+        return this;
+      }
+    }
+    static EnumDescriptorProto() {
+      object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, null);
+    }
+  }
+  
+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+  [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+  [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
+  public sealed partial class EnumValueDescriptorProto : pb::GeneratedMessage<EnumValueDescriptorProto, EnumValueDescriptorProto.Builder> {
+    private EnumValueDescriptorProto() { }
+    private static readonly EnumValueDescriptorProto defaultInstance = new EnumValueDescriptorProto().MakeReadOnly();
+    private static readonly string[] _enumValueDescriptorProtoFieldNames = new string[] { "name", "number", "options" };
+    private static readonly uint[] _enumValueDescriptorProtoFieldTags = new uint[] { 10, 16, 26 };
+    public static EnumValueDescriptorProto DefaultInstance {
+      get { return defaultInstance; }
+    }
+    
+    public override EnumValueDescriptorProto DefaultInstanceForType {
+      get { return DefaultInstance; }
+    }
+    
+    protected override EnumValueDescriptorProto ThisMessage {
+      get { return this; }
+    }
+    
+    public static pbd::MessageDescriptor Descriptor {
+      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_EnumValueDescriptorProto__Descriptor; }
+    }
+    
+    protected override pb::FieldAccess.FieldAccessorTable<EnumValueDescriptorProto, EnumValueDescriptorProto.Builder> InternalFieldAccessors {
+      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_EnumValueDescriptorProto__FieldAccessorTable; }
+    }
+    
+    public const int NameFieldNumber = 1;
+    private bool hasName;
+    private string name_ = "";
+    public bool HasName {
+      get { return hasName; }
+    }
+    public string Name {
+      get { return name_; }
+    }
+    
+    public const int NumberFieldNumber = 2;
+    private bool hasNumber;
+    private int number_;
+    public bool HasNumber {
+      get { return hasNumber; }
+    }
+    public int Number {
+      get { return number_; }
+    }
+    
+    public const int OptionsFieldNumber = 3;
+    private bool hasOptions;
+    private global::Google.ProtocolBuffers.DescriptorProtos.EnumValueOptions options_;
+    public bool HasOptions {
+      get { return hasOptions; }
+    }
+    public global::Google.ProtocolBuffers.DescriptorProtos.EnumValueOptions Options {
+      get { return options_ ?? global::Google.ProtocolBuffers.DescriptorProtos.EnumValueOptions.DefaultInstance; }
+    }
+    
+    public override bool IsInitialized {
+      get {
+        if (HasOptions) {
+          if (!Options.IsInitialized) return false;
+        }
+        return true;
+      }
+    }
+    
+    public override void WriteTo(pb::ICodedOutputStream output) {
+      int size = SerializedSize;
+      string[] field_names = _enumValueDescriptorProtoFieldNames;
+      if (hasName) {
+        output.WriteString(1, field_names[0], Name);
+      }
+      if (hasNumber) {
+        output.WriteInt32(2, field_names[1], Number);
+      }
+      if (hasOptions) {
+        output.WriteMessage(3, field_names[2], Options);
+      }
+      UnknownFields.WriteTo(output);
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public override int SerializedSize {
+      get {
+        int size = memoizedSerializedSize;
+        if (size != -1) return size;
+        
+        size = 0;
+        if (hasName) {
+          size += pb::CodedOutputStream.ComputeStringSize(1, Name);
+        }
+        if (hasNumber) {
+          size += pb::CodedOutputStream.ComputeInt32Size(2, Number);
+        }
+        if (hasOptions) {
+          size += pb::CodedOutputStream.ComputeMessageSize(3, Options);
+        }
+        size += UnknownFields.SerializedSize;
+        memoizedSerializedSize = size;
+        return size;
+      }
+    }
+    
+    public static EnumValueDescriptorProto ParseFrom(pb::ByteString data) {
+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
+    }
+    public static EnumValueDescriptorProto ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
+    }
+    public static EnumValueDescriptorProto ParseFrom(byte[] data) {
+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
+    }
+    public static EnumValueDescriptorProto ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
+    }
+    public static EnumValueDescriptorProto ParseFrom(global::System.IO.Stream input) {
+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
+    }
+    public static EnumValueDescriptorProto ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
+    }
+    public static EnumValueDescriptorProto ParseDelimitedFrom(global::System.IO.Stream input) {
+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
+    }
+    public static EnumValueDescriptorProto ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
+    }
+    public static EnumValueDescriptorProto ParseFrom(pb::ICodedInputStream input) {
+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
+    }
+    public static EnumValueDescriptorProto ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
+    }
+    private EnumValueDescriptorProto MakeReadOnly() {
+      return this;
+    }
+    
+    public static Builder CreateBuilder() { return new Builder(); }
+    public override Builder ToBuilder() { return CreateBuilder(this); }
+    public override Builder CreateBuilderForType() { return new Builder(); }
+    public static Builder CreateBuilder(EnumValueDescriptorProto prototype) {
+      return new Builder(prototype);
+    }
+    
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
+    public sealed partial class Builder : pb::GeneratedBuilder<EnumValueDescriptorProto, Builder> {
+      protected override Builder ThisBuilder {
+        get { return this; }
+      }
+      public Builder() {
+        result = DefaultInstance;
+        resultIsReadOnly = true;
+      }
+      internal Builder(EnumValueDescriptorProto cloneFrom) {
+        result = cloneFrom;
+        resultIsReadOnly = true;
+      }
+      
+      private bool resultIsReadOnly;
+      private EnumValueDescriptorProto result;
+      
+      private EnumValueDescriptorProto PrepareBuilder() {
+        if (resultIsReadOnly) {
+          EnumValueDescriptorProto original = result;
+          result = new EnumValueDescriptorProto();
+          resultIsReadOnly = false;
+          MergeFrom(original);
+        }
+        return result;
+      }
+      
+      public override bool IsInitialized {
+        get { return result.IsInitialized; }
+      }
+      
+      protected override EnumValueDescriptorProto MessageBeingBuilt {
+        get { return PrepareBuilder(); }
+      }
+      
+      public override Builder Clear() {
+        result = DefaultInstance;
+        resultIsReadOnly = true;
+        return this;
+      }
+      
+      public override Builder Clone() {
+        if (resultIsReadOnly) {
+          return new Builder(result);
+        } else {
+          return new Builder().MergeFrom(result);
+        }
+      }
+      
+      public override pbd::MessageDescriptor DescriptorForType {
+        get { return global::Google.ProtocolBuffers.DescriptorProtos.EnumValueDescriptorProto.Descriptor; }
+      }
+      
+      public override EnumValueDescriptorProto DefaultInstanceForType {
+        get { return global::Google.ProtocolBuffers.DescriptorProtos.EnumValueDescriptorProto.DefaultInstance; }
+      }
+      
+      public override EnumValueDescriptorProto BuildPartial() {
+        if (resultIsReadOnly) {
+          return result;
+        }
+        resultIsReadOnly = true;
+        return result.MakeReadOnly();
+      }
+      
+      public override Builder MergeFrom(pb::IMessage other) {
+        if (other is EnumValueDescriptorProto) {
+          return MergeFrom((EnumValueDescriptorProto) other);
+        } else {
+          base.MergeFrom(other);
+          return this;
+        }
+      }
+      
+      public override Builder MergeFrom(EnumValueDescriptorProto other) {
+        if (other == global::Google.ProtocolBuffers.DescriptorProtos.EnumValueDescriptorProto.DefaultInstance) return this;
+        PrepareBuilder();
+        if (other.HasName) {
+          Name = other.Name;
+        }
+        if (other.HasNumber) {
+          Number = other.Number;
+        }
+        if (other.HasOptions) {
+          MergeOptions(other.Options);
+        }
+        this.MergeUnknownFields(other.UnknownFields);
+        return this;
+      }
+      
+      public override Builder MergeFrom(pb::ICodedInputStream input) {
+        return MergeFrom(input, pb::ExtensionRegistry.Empty);
+      }
+      
+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+        PrepareBuilder();
+        pb::UnknownFieldSet.Builder unknownFields = null;
+        uint tag;
+        string field_name;
+        while (input.ReadTag(out tag, out field_name)) {
+          if(tag == 0 && field_name != null) {
+            int field_ordinal = global::System.Array.BinarySearch(_enumValueDescriptorProtoFieldNames, field_name, global::System.StringComparer.Ordinal);
+            if(field_ordinal >= 0)
+              tag = _enumValueDescriptorProtoFieldTags[field_ordinal];
+            else {
+              if (unknownFields == null) {
+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
+              }
+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
+              continue;
+            }
+          }
+          switch (tag) {
+            case 0: {
+              throw pb::InvalidProtocolBufferException.InvalidTag();
+            }
+            default: {
+              if (pb::WireFormat.IsEndGroupTag(tag)) {
+                if (unknownFields != null) {
+                  this.UnknownFields = unknownFields.Build();
+                }
+                return this;
+              }
+              if (unknownFields == null) {
+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
+              }
+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
+              break;
+            }
+            case 10: {
+              result.hasName = input.ReadString(ref result.name_);
+              break;
+            }
+            case 16: {
+              result.hasNumber = input.ReadInt32(ref result.number_);
+              break;
+            }
+            case 26: {
+              global::Google.ProtocolBuffers.DescriptorProtos.EnumValueOptions.Builder subBuilder = global::Google.ProtocolBuffers.DescriptorProtos.EnumValueOptions.CreateBuilder();
+              if (result.hasOptions) {
+                subBuilder.MergeFrom(Options);
+              }
+              input.ReadMessage(subBuilder, extensionRegistry);
+              Options = subBuilder.BuildPartial();
+              break;
+            }
+          }
+        }
+        
+        if (unknownFields != null) {
+          this.UnknownFields = unknownFields.Build();
+        }
+        return this;
+      }
+      
+      
+      public bool HasName {
+        get { return result.hasName; }
+      }
+      public string Name {
+        get { return result.Name; }
+        set { SetName(value); }
+      }
+      public Builder SetName(string value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        result.hasName = true;
+        result.name_ = value;
+        return this;
+      }
+      public Builder ClearName() {
+        PrepareBuilder();
+        result.hasName = false;
+        result.name_ = "";
+        return this;
+      }
+      
+      public bool HasNumber {
+        get { return result.hasNumber; }
+      }
+      public int Number {
+        get { return result.Number; }
+        set { SetNumber(value); }
+      }
+      public Builder SetNumber(int value) {
+        PrepareBuilder();
+        result.hasNumber = true;
+        result.number_ = value;
+        return this;
+      }
+      public Builder ClearNumber() {
+        PrepareBuilder();
+        result.hasNumber = false;
+        result.number_ = 0;
+        return this;
+      }
+      
+      public bool HasOptions {
+       get { return result.hasOptions; }
+      }
+      public global::Google.ProtocolBuffers.DescriptorProtos.EnumValueOptions Options {
+        get { return result.Options; }
+        set { SetOptions(value); }
+      }
+      public Builder SetOptions(global::Google.ProtocolBuffers.DescriptorProtos.EnumValueOptions value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        result.hasOptions = true;
+        result.options_ = value;
+        return this;
+      }
+      public Builder SetOptions(global::Google.ProtocolBuffers.DescriptorProtos.EnumValueOptions.Builder builderForValue) {
+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
+        PrepareBuilder();
+        result.hasOptions = true;
+        result.options_ = builderForValue.Build();
+        return this;
+      }
+      public Builder MergeOptions(global::Google.ProtocolBuffers.DescriptorProtos.EnumValueOptions value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        if (result.hasOptions &&
+            result.options_ != global::Google.ProtocolBuffers.DescriptorProtos.EnumValueOptions.DefaultInstance) {
+            result.options_ = global::Google.ProtocolBuffers.DescriptorProtos.EnumValueOptions.CreateBuilder(result.options_).MergeFrom(value).BuildPartial();
+        } else {
+          result.options_ = value;
+        }
+        result.hasOptions = true;
+        return this;
+      }
+      public Builder ClearOptions() {
+        PrepareBuilder();
+        result.hasOptions = false;
+        result.options_ = null;
+        return this;
+      }
+    }
+    static EnumValueDescriptorProto() {
+      object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, null);
+    }
+  }
+  
+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+  [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+  [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
+  public sealed partial class ServiceDescriptorProto : pb::GeneratedMessage<ServiceDescriptorProto, ServiceDescriptorProto.Builder> {
+    private ServiceDescriptorProto() { }
+    private static readonly ServiceDescriptorProto defaultInstance = new ServiceDescriptorProto().MakeReadOnly();
+    private static readonly string[] _serviceDescriptorProtoFieldNames = new string[] { "method", "name", "options" };
+    private static readonly uint[] _serviceDescriptorProtoFieldTags = new uint[] { 18, 10, 26 };
+    public static ServiceDescriptorProto DefaultInstance {
+      get { return defaultInstance; }
+    }
+    
+    public override ServiceDescriptorProto DefaultInstanceForType {
+      get { return DefaultInstance; }
+    }
+    
+    protected override ServiceDescriptorProto ThisMessage {
+      get { return this; }
+    }
+    
+    public static pbd::MessageDescriptor Descriptor {
+      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_ServiceDescriptorProto__Descriptor; }
+    }
+    
+    protected override pb::FieldAccess.FieldAccessorTable<ServiceDescriptorProto, ServiceDescriptorProto.Builder> InternalFieldAccessors {
+      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_ServiceDescriptorProto__FieldAccessorTable; }
+    }
+    
+    public const int NameFieldNumber = 1;
+    private bool hasName;
+    private string name_ = "";
+    public bool HasName {
+      get { return hasName; }
+    }
+    public string Name {
+      get { return name_; }
+    }
+    
+    public const int MethodFieldNumber = 2;
+    private pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.MethodDescriptorProto> method_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.MethodDescriptorProto>();
+    public scg::IList<global::Google.ProtocolBuffers.DescriptorProtos.MethodDescriptorProto> MethodList {
+      get { return method_; }
+    }
+    public int MethodCount {
+      get { return method_.Count; }
+    }
+    public global::Google.ProtocolBuffers.DescriptorProtos.MethodDescriptorProto GetMethod(int index) {
+      return method_[index];
+    }
+    
+    public const int OptionsFieldNumber = 3;
+    private bool hasOptions;
+    private global::Google.ProtocolBuffers.DescriptorProtos.ServiceOptions options_;
+    public bool HasOptions {
+      get { return hasOptions; }
+    }
+    public global::Google.ProtocolBuffers.DescriptorProtos.ServiceOptions Options {
+      get { return options_ ?? global::Google.ProtocolBuffers.DescriptorProtos.ServiceOptions.DefaultInstance; }
+    }
+    
+    public override bool IsInitialized {
+      get {
+        foreach (global::Google.ProtocolBuffers.DescriptorProtos.MethodDescriptorProto element in MethodList) {
+          if (!element.IsInitialized) return false;
+        }
+        if (HasOptions) {
+          if (!Options.IsInitialized) return false;
+        }
+        return true;
+      }
+    }
+    
+    public override void WriteTo(pb::ICodedOutputStream output) {
+      int size = SerializedSize;
+      string[] field_names = _serviceDescriptorProtoFieldNames;
+      if (hasName) {
+        output.WriteString(1, field_names[1], Name);
+      }
+      if (method_.Count > 0) {
+        output.WriteMessageArray(2, field_names[0], method_);
+      }
+      if (hasOptions) {
+        output.WriteMessage(3, field_names[2], Options);
+      }
+      UnknownFields.WriteTo(output);
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public override int SerializedSize {
+      get {
+        int size = memoizedSerializedSize;
+        if (size != -1) return size;
+        
+        size = 0;
+        if (hasName) {
+          size += pb::CodedOutputStream.ComputeStringSize(1, Name);
+        }
+        foreach (global::Google.ProtocolBuffers.DescriptorProtos.MethodDescriptorProto element in MethodList) {
+          size += pb::CodedOutputStream.ComputeMessageSize(2, element);
+        }
+        if (hasOptions) {
+          size += pb::CodedOutputStream.ComputeMessageSize(3, Options);
+        }
+        size += UnknownFields.SerializedSize;
+        memoizedSerializedSize = size;
+        return size;
+      }
+    }
+    
+    public static ServiceDescriptorProto ParseFrom(pb::ByteString data) {
+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
+    }
+    public static ServiceDescriptorProto ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
+    }
+    public static ServiceDescriptorProto ParseFrom(byte[] data) {
+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
+    }
+    public static ServiceDescriptorProto ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
+    }
+    public static ServiceDescriptorProto ParseFrom(global::System.IO.Stream input) {
+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
+    }
+    public static ServiceDescriptorProto ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
+    }
+    public static ServiceDescriptorProto ParseDelimitedFrom(global::System.IO.Stream input) {
+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
+    }
+    public static ServiceDescriptorProto ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
+    }
+    public static ServiceDescriptorProto ParseFrom(pb::ICodedInputStream input) {
+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
+    }
+    public static ServiceDescriptorProto ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
+    }
+    private ServiceDescriptorProto MakeReadOnly() {
+      method_.MakeReadOnly();
+      return this;
+    }
+    
+    public static Builder CreateBuilder() { return new Builder(); }
+    public override Builder ToBuilder() { return CreateBuilder(this); }
+    public override Builder CreateBuilderForType() { return new Builder(); }
+    public static Builder CreateBuilder(ServiceDescriptorProto prototype) {
+      return new Builder(prototype);
+    }
+    
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
+    public sealed partial class Builder : pb::GeneratedBuilder<ServiceDescriptorProto, Builder> {
+      protected override Builder ThisBuilder {
+        get { return this; }
+      }
+      public Builder() {
+        result = DefaultInstance;
+        resultIsReadOnly = true;
+      }
+      internal Builder(ServiceDescriptorProto cloneFrom) {
+        result = cloneFrom;
+        resultIsReadOnly = true;
+      }
+      
+      private bool resultIsReadOnly;
+      private ServiceDescriptorProto result;
+      
+      private ServiceDescriptorProto PrepareBuilder() {
+        if (resultIsReadOnly) {
+          ServiceDescriptorProto original = result;
+          result = new ServiceDescriptorProto();
+          resultIsReadOnly = false;
+          MergeFrom(original);
+        }
+        return result;
+      }
+      
+      public override bool IsInitialized {
+        get { return result.IsInitialized; }
+      }
+      
+      protected override ServiceDescriptorProto MessageBeingBuilt {
+        get { return PrepareBuilder(); }
+      }
+      
+      public override Builder Clear() {
+        result = DefaultInstance;
+        resultIsReadOnly = true;
+        return this;
+      }
+      
+      public override Builder Clone() {
+        if (resultIsReadOnly) {
+          return new Builder(result);
+        } else {
+          return new Builder().MergeFrom(result);
+        }
+      }
+      
+      public override pbd::MessageDescriptor DescriptorForType {
+        get { return global::Google.ProtocolBuffers.DescriptorProtos.ServiceDescriptorProto.Descriptor; }
+      }
+      
+      public override ServiceDescriptorProto DefaultInstanceForType {
+        get { return global::Google.ProtocolBuffers.DescriptorProtos.ServiceDescriptorProto.DefaultInstance; }
+      }
+      
+      public override ServiceDescriptorProto BuildPartial() {
+        if (resultIsReadOnly) {
+          return result;
+        }
+        resultIsReadOnly = true;
+        return result.MakeReadOnly();
+      }
+      
+      public override Builder MergeFrom(pb::IMessage other) {
+        if (other is ServiceDescriptorProto) {
+          return MergeFrom((ServiceDescriptorProto) other);
+        } else {
+          base.MergeFrom(other);
+          return this;
+        }
+      }
+      
+      public override Builder MergeFrom(ServiceDescriptorProto other) {
+        if (other == global::Google.ProtocolBuffers.DescriptorProtos.ServiceDescriptorProto.DefaultInstance) return this;
+        PrepareBuilder();
+        if (other.HasName) {
+          Name = other.Name;
+        }
+        if (other.method_.Count != 0) {
+          result.method_.Add(other.method_);
+        }
+        if (other.HasOptions) {
+          MergeOptions(other.Options);
+        }
+        this.MergeUnknownFields(other.UnknownFields);
+        return this;
+      }
+      
+      public override Builder MergeFrom(pb::ICodedInputStream input) {
+        return MergeFrom(input, pb::ExtensionRegistry.Empty);
+      }
+      
+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+        PrepareBuilder();
+        pb::UnknownFieldSet.Builder unknownFields = null;
+        uint tag;
+        string field_name;
+        while (input.ReadTag(out tag, out field_name)) {
+          if(tag == 0 && field_name != null) {
+            int field_ordinal = global::System.Array.BinarySearch(_serviceDescriptorProtoFieldNames, field_name, global::System.StringComparer.Ordinal);
+            if(field_ordinal >= 0)
+              tag = _serviceDescriptorProtoFieldTags[field_ordinal];
+            else {
+              if (unknownFields == null) {
+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
+              }
+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
+              continue;
+            }
+          }
+          switch (tag) {
+            case 0: {
+              throw pb::InvalidProtocolBufferException.InvalidTag();
+            }
+            default: {
+              if (pb::WireFormat.IsEndGroupTag(tag)) {
+                if (unknownFields != null) {
+                  this.UnknownFields = unknownFields.Build();
+                }
+                return this;
+              }
+              if (unknownFields == null) {
+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
+              }
+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
+              break;
+            }
+            case 10: {
+              result.hasName = input.ReadString(ref result.name_);
+              break;
+            }
+            case 18: {
+              input.ReadMessageArray(tag, field_name, result.method_, global::Google.ProtocolBuffers.DescriptorProtos.MethodDescriptorProto.DefaultInstance, extensionRegistry);
+              break;
+            }
+            case 26: {
+              global::Google.ProtocolBuffers.DescriptorProtos.ServiceOptions.Builder subBuilder = global::Google.ProtocolBuffers.DescriptorProtos.ServiceOptions.CreateBuilder();
+              if (result.hasOptions) {
+                subBuilder.MergeFrom(Options);
+              }
+              input.ReadMessage(subBuilder, extensionRegistry);
+              Options = subBuilder.BuildPartial();
+              break;
+            }
+          }
+        }
+        
+        if (unknownFields != null) {
+          this.UnknownFields = unknownFields.Build();
+        }
+        return this;
+      }
+      
+      
+      public bool HasName {
+        get { return result.hasName; }
+      }
+      public string Name {
+        get { return result.Name; }
+        set { SetName(value); }
+      }
+      public Builder SetName(string value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        result.hasName = true;
+        result.name_ = value;
+        return this;
+      }
+      public Builder ClearName() {
+        PrepareBuilder();
+        result.hasName = false;
+        result.name_ = "";
+        return this;
+      }
+      
+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.MethodDescriptorProto> MethodList {
+        get { return PrepareBuilder().method_; }
+      }
+      public int MethodCount {
+        get { return result.MethodCount; }
+      }
+      public global::Google.ProtocolBuffers.DescriptorProtos.MethodDescriptorProto GetMethod(int index) {
+        return result.GetMethod(index);
+      }
+      public Builder SetMethod(int index, global::Google.ProtocolBuffers.DescriptorProtos.MethodDescriptorProto value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        result.method_[index] = value;
+        return this;
+      }
+      public Builder SetMethod(int index, global::Google.ProtocolBuffers.DescriptorProtos.MethodDescriptorProto.Builder builderForValue) {
+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
+        PrepareBuilder();
+        result.method_[index] = builderForValue.Build();
+        return this;
+      }
+      public Builder AddMethod(global::Google.ProtocolBuffers.DescriptorProtos.MethodDescriptorProto value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        result.method_.Add(value);
+        return this;
+      }
+      public Builder AddMethod(global::Google.ProtocolBuffers.DescriptorProtos.MethodDescriptorProto.Builder builderForValue) {
+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
+        PrepareBuilder();
+        result.method_.Add(builderForValue.Build());
+        return this;
+      }
+      public Builder AddRangeMethod(scg::IEnumerable<global::Google.ProtocolBuffers.DescriptorProtos.MethodDescriptorProto> values) {
+        PrepareBuilder();
+        result.method_.Add(values);
+        return this;
+      }
+      public Builder ClearMethod() {
+        PrepareBuilder();
+        result.method_.Clear();
+        return this;
+      }
+      
+      public bool HasOptions {
+       get { return result.hasOptions; }
+      }
+      public global::Google.ProtocolBuffers.DescriptorProtos.ServiceOptions Options {
+        get { return result.Options; }
+        set { SetOptions(value); }
+      }
+      public Builder SetOptions(global::Google.ProtocolBuffers.DescriptorProtos.ServiceOptions value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        result.hasOptions = true;
+        result.options_ = value;
+        return this;
+      }
+      public Builder SetOptions(global::Google.ProtocolBuffers.DescriptorProtos.ServiceOptions.Builder builderForValue) {
+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
+        PrepareBuilder();
+        result.hasOptions = true;
+        result.options_ = builderForValue.Build();
+        return this;
+      }
+      public Builder MergeOptions(global::Google.ProtocolBuffers.DescriptorProtos.ServiceOptions value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        if (result.hasOptions &&
+            result.options_ != global::Google.ProtocolBuffers.DescriptorProtos.ServiceOptions.DefaultInstance) {
+            result.options_ = global::Google.ProtocolBuffers.DescriptorProtos.ServiceOptions.CreateBuilder(result.options_).MergeFrom(value).BuildPartial();
+        } else {
+          result.options_ = value;
+        }
+        result.hasOptions = true;
+        return this;
+      }
+      public Builder ClearOptions() {
+        PrepareBuilder();
+        result.hasOptions = false;
+        result.options_ = null;
+        return this;
+      }
+    }
+    static ServiceDescriptorProto() {
+      object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, null);
+    }
+  }
+  
+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+  [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+  [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
+  public sealed partial class MethodDescriptorProto : pb::GeneratedMessage<MethodDescriptorProto, MethodDescriptorProto.Builder> {
+    private MethodDescriptorProto() { }
+    private static readonly MethodDescriptorProto defaultInstance = new MethodDescriptorProto().MakeReadOnly();
+    private static readonly string[] _methodDescriptorProtoFieldNames = new string[] { "input_type", "name", "options", "output_type" };
+    private static readonly uint[] _methodDescriptorProtoFieldTags = new uint[] { 18, 10, 34, 26 };
+    public static MethodDescriptorProto DefaultInstance {
+      get { return defaultInstance; }
+    }
+    
+    public override MethodDescriptorProto DefaultInstanceForType {
+      get { return DefaultInstance; }
+    }
+    
+    protected override MethodDescriptorProto ThisMessage {
+      get { return this; }
+    }
+    
+    public static pbd::MessageDescriptor Descriptor {
+      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_MethodDescriptorProto__Descriptor; }
+    }
+    
+    protected override pb::FieldAccess.FieldAccessorTable<MethodDescriptorProto, MethodDescriptorProto.Builder> InternalFieldAccessors {
+      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_MethodDescriptorProto__FieldAccessorTable; }
+    }
+    
+    public const int NameFieldNumber = 1;
+    private bool hasName;
+    private string name_ = "";
+    public bool HasName {
+      get { return hasName; }
+    }
+    public string Name {
+      get { return name_; }
+    }
+    
+    public const int InputTypeFieldNumber = 2;
+    private bool hasInputType;
+    private string inputType_ = "";
+    public bool HasInputType {
+      get { return hasInputType; }
+    }
+    public string InputType {
+      get { return inputType_; }
+    }
+    
+    public const int OutputTypeFieldNumber = 3;
+    private bool hasOutputType;
+    private string outputType_ = "";
+    public bool HasOutputType {
+      get { return hasOutputType; }
+    }
+    public string OutputType {
+      get { return outputType_; }
+    }
+    
+    public const int OptionsFieldNumber = 4;
+    private bool hasOptions;
+    private global::Google.ProtocolBuffers.DescriptorProtos.MethodOptions options_;
+    public bool HasOptions {
+      get { return hasOptions; }
+    }
+    public global::Google.ProtocolBuffers.DescriptorProtos.MethodOptions Options {
+      get { return options_ ?? global::Google.ProtocolBuffers.DescriptorProtos.MethodOptions.DefaultInstance; }
+    }
+    
+    public override bool IsInitialized {
+      get {
+        if (HasOptions) {
+          if (!Options.IsInitialized) return false;
+        }
+        return true;
+      }
+    }
+    
+    public override void WriteTo(pb::ICodedOutputStream output) {
+      int size = SerializedSize;
+      string[] field_names = _methodDescriptorProtoFieldNames;
+      if (hasName) {
+        output.WriteString(1, field_names[1], Name);
+      }
+      if (hasInputType) {
+        output.WriteString(2, field_names[0], InputType);
+      }
+      if (hasOutputType) {
+        output.WriteString(3, field_names[3], OutputType);
+      }
+      if (hasOptions) {
+        output.WriteMessage(4, field_names[2], Options);
+      }
+      UnknownFields.WriteTo(output);
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public override int SerializedSize {
+      get {
+        int size = memoizedSerializedSize;
+        if (size != -1) return size;
+        
+        size = 0;
+        if (hasName) {
+          size += pb::CodedOutputStream.ComputeStringSize(1, Name);
+        }
+        if (hasInputType) {
+          size += pb::CodedOutputStream.ComputeStringSize(2, InputType);
+        }
+        if (hasOutputType) {
+          size += pb::CodedOutputStream.ComputeStringSize(3, OutputType);
+        }
+        if (hasOptions) {
+          size += pb::CodedOutputStream.ComputeMessageSize(4, Options);
+        }
+        size += UnknownFields.SerializedSize;
+        memoizedSerializedSize = size;
+        return size;
+      }
+    }
+    
+    public static MethodDescriptorProto ParseFrom(pb::ByteString data) {
+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
+    }
+    public static MethodDescriptorProto ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
+    }
+    public static MethodDescriptorProto ParseFrom(byte[] data) {
+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
+    }
+    public static MethodDescriptorProto ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
+    }
+    public static MethodDescriptorProto ParseFrom(global::System.IO.Stream input) {
+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
+    }
+    public static MethodDescriptorProto ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
+    }
+    public static MethodDescriptorProto ParseDelimitedFrom(global::System.IO.Stream input) {
+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
+    }
+    public static MethodDescriptorProto ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
+    }
+    public static MethodDescriptorProto ParseFrom(pb::ICodedInputStream input) {
+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
+    }
+    public static MethodDescriptorProto ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
+    }
+    private MethodDescriptorProto MakeReadOnly() {
+      return this;
+    }
+    
+    public static Builder CreateBuilder() { return new Builder(); }
+    public override Builder ToBuilder() { return CreateBuilder(this); }
+    public override Builder CreateBuilderForType() { return new Builder(); }
+    public static Builder CreateBuilder(MethodDescriptorProto prototype) {
+      return new Builder(prototype);
+    }
+    
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
+    public sealed partial class Builder : pb::GeneratedBuilder<MethodDescriptorProto, Builder> {
+      protected override Builder ThisBuilder {
+        get { return this; }
+      }
+      public Builder() {
+        result = DefaultInstance;
+        resultIsReadOnly = true;
+      }
+      internal Builder(MethodDescriptorProto cloneFrom) {
+        result = cloneFrom;
+        resultIsReadOnly = true;
+      }
+      
+      private bool resultIsReadOnly;
+      private MethodDescriptorProto result;
+      
+      private MethodDescriptorProto PrepareBuilder() {
+        if (resultIsReadOnly) {
+          MethodDescriptorProto original = result;
+          result = new MethodDescriptorProto();
+          resultIsReadOnly = false;
+          MergeFrom(original);
+        }
+        return result;
+      }
+      
+      public override bool IsInitialized {
+        get { return result.IsInitialized; }
+      }
+      
+      protected override MethodDescriptorProto MessageBeingBuilt {
+        get { return PrepareBuilder(); }
+      }
+      
+      public override Builder Clear() {
+        result = DefaultInstance;
+        resultIsReadOnly = true;
+        return this;
+      }
+      
+      public override Builder Clone() {
+        if (resultIsReadOnly) {
+          return new Builder(result);
+        } else {
+          return new Builder().MergeFrom(result);
+        }
+      }
+      
+      public override pbd::MessageDescriptor DescriptorForType {
+        get { return global::Google.ProtocolBuffers.DescriptorProtos.MethodDescriptorProto.Descriptor; }
+      }
+      
+      public override MethodDescriptorProto DefaultInstanceForType {
+        get { return global::Google.ProtocolBuffers.DescriptorProtos.MethodDescriptorProto.DefaultInstance; }
+      }
+      
+      public override MethodDescriptorProto BuildPartial() {
+        if (resultIsReadOnly) {
+          return result;
+        }
+        resultIsReadOnly = true;
+        return result.MakeReadOnly();
+      }
+      
+      public override Builder MergeFrom(pb::IMessage other) {
+        if (other is MethodDescriptorProto) {
+          return MergeFrom((MethodDescriptorProto) other);
+        } else {
+          base.MergeFrom(other);
+          return this;
+        }
+      }
+      
+      public override Builder MergeFrom(MethodDescriptorProto other) {
+        if (other == global::Google.ProtocolBuffers.DescriptorProtos.MethodDescriptorProto.DefaultInstance) return this;
+        PrepareBuilder();
+        if (other.HasName) {
+          Name = other.Name;
+        }
+        if (other.HasInputType) {
+          InputType = other.InputType;
+        }
+        if (other.HasOutputType) {
+          OutputType = other.OutputType;
+        }
+        if (other.HasOptions) {
+          MergeOptions(other.Options);
+        }
+        this.MergeUnknownFields(other.UnknownFields);
+        return this;
+      }
+      
+      public override Builder MergeFrom(pb::ICodedInputStream input) {
+        return MergeFrom(input, pb::ExtensionRegistry.Empty);
+      }
+      
+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+        PrepareBuilder();
+        pb::UnknownFieldSet.Builder unknownFields = null;
+        uint tag;
+        string field_name;
+        while (input.ReadTag(out tag, out field_name)) {
+          if(tag == 0 && field_name != null) {
+            int field_ordinal = global::System.Array.BinarySearch(_methodDescriptorProtoFieldNames, field_name, global::System.StringComparer.Ordinal);
+            if(field_ordinal >= 0)
+              tag = _methodDescriptorProtoFieldTags[field_ordinal];
+            else {
+              if (unknownFields == null) {
+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
+              }
+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
+              continue;
+            }
+          }
+          switch (tag) {
+            case 0: {
+              throw pb::InvalidProtocolBufferException.InvalidTag();
+            }
+            default: {
+              if (pb::WireFormat.IsEndGroupTag(tag)) {
+                if (unknownFields != null) {
+                  this.UnknownFields = unknownFields.Build();
+                }
+                return this;
+              }
+              if (unknownFields == null) {
+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
+              }
+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
+              break;
+            }
+            case 10: {
+              result.hasName = input.ReadString(ref result.name_);
+              break;
+            }
+            case 18: {
+              result.hasInputType = input.ReadString(ref result.inputType_);
+              break;
+            }
+            case 26: {
+              result.hasOutputType = input.ReadString(ref result.outputType_);
+              break;
+            }
+            case 34: {
+              global::Google.ProtocolBuffers.DescriptorProtos.MethodOptions.Builder subBuilder = global::Google.ProtocolBuffers.DescriptorProtos.MethodOptions.CreateBuilder();
+              if (result.hasOptions) {
+                subBuilder.MergeFrom(Options);
+              }
+              input.ReadMessage(subBuilder, extensionRegistry);
+              Options = subBuilder.BuildPartial();
+              break;
+            }
+          }
+        }
+        
+        if (unknownFields != null) {
+          this.UnknownFields = unknownFields.Build();
+        }
+        return this;
+      }
+      
+      
+      public bool HasName {
+        get { return result.hasName; }
+      }
+      public string Name {
+        get { return result.Name; }
+        set { SetName(value); }
+      }
+      public Builder SetName(string value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        result.hasName = true;
+        result.name_ = value;
+        return this;
+      }
+      public Builder ClearName() {
+        PrepareBuilder();
+        result.hasName = false;
+        result.name_ = "";
+        return this;
+      }
+      
+      public bool HasInputType {
+        get { return result.hasInputType; }
+      }
+      public string InputType {
+        get { return result.InputType; }
+        set { SetInputType(value); }
+      }
+      public Builder SetInputType(string value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        result.hasInputType = true;
+        result.inputType_ = value;
+        return this;
+      }
+      public Builder ClearInputType() {
+        PrepareBuilder();
+        result.hasInputType = false;
+        result.inputType_ = "";
+        return this;
+      }
+      
+      public bool HasOutputType {
+        get { return result.hasOutputType; }
+      }
+      public string OutputType {
+        get { return result.OutputType; }
+        set { SetOutputType(value); }
+      }
+      public Builder SetOutputType(string value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        result.hasOutputType = true;
+        result.outputType_ = value;
+        return this;
+      }
+      public Builder ClearOutputType() {
+        PrepareBuilder();
+        result.hasOutputType = false;
+        result.outputType_ = "";
+        return this;
+      }
+      
+      public bool HasOptions {
+       get { return result.hasOptions; }
+      }
+      public global::Google.ProtocolBuffers.DescriptorProtos.MethodOptions Options {
+        get { return result.Options; }
+        set { SetOptions(value); }
+      }
+      public Builder SetOptions(global::Google.ProtocolBuffers.DescriptorProtos.MethodOptions value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        result.hasOptions = true;
+        result.options_ = value;
+        return this;
+      }
+      public Builder SetOptions(global::Google.ProtocolBuffers.DescriptorProtos.MethodOptions.Builder builderForValue) {
+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
+        PrepareBuilder();
+        result.hasOptions = true;
+        result.options_ = builderForValue.Build();
+        return this;
+      }
+      public Builder MergeOptions(global::Google.ProtocolBuffers.DescriptorProtos.MethodOptions value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        if (result.hasOptions &&
+            result.options_ != global::Google.ProtocolBuffers.DescriptorProtos.MethodOptions.DefaultInstance) {
+            result.options_ = global::Google.ProtocolBuffers.DescriptorProtos.MethodOptions.CreateBuilder(result.options_).MergeFrom(value).BuildPartial();
+        } else {
+          result.options_ = value;
+        }
+        result.hasOptions = true;
+        return this;
+      }
+      public Builder ClearOptions() {
+        PrepareBuilder();
+        result.hasOptions = false;
+        result.options_ = null;
+        return this;
+      }
+    }
+    static MethodDescriptorProto() {
+      object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, null);
+    }
+  }
+  
+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+  [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+  [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
+  public sealed partial class FileOptions : pb::ExtendableMessage<FileOptions, FileOptions.Builder> {
+    private FileOptions() { }
+    private static readonly FileOptions defaultInstance = new FileOptions().MakeReadOnly();
+    private static readonly string[] _fileOptionsFieldNames = new string[] { "cc_generic_services", "java_generate_equals_and_hash", "java_generic_services", "java_multiple_files", "java_outer_classname", "java_package", "optimize_for", "py_generic_services", "uninterpreted_option" };
+    private static readonly uint[] _fileOptionsFieldTags = new uint[] { 128, 160, 136, 80, 66, 10, 72, 144, 7994 };
+    public static FileOptions DefaultInstance {
+      get { return defaultInstance; }
+    }
+    
+    public override FileOptions DefaultInstanceForType {
+      get { return DefaultInstance; }
+    }
+    
+    protected override FileOptions ThisMessage {
+      get { return this; }
+    }
+    
+    public static pbd::MessageDescriptor Descriptor {
+      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_FileOptions__Descriptor; }
+    }
+    
+    protected override pb::FieldAccess.FieldAccessorTable<FileOptions, FileOptions.Builder> InternalFieldAccessors {
+      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_FileOptions__FieldAccessorTable; }
+    }
+    
+    #region Nested types
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
+    public static class Types {
+      [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+      [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
+      public enum OptimizeMode {
+        SPEED = 1,
+        CODE_SIZE = 2,
+        LITE_RUNTIME = 3,
+      }
+      
+    }
+    #endregion
+    
+    public const int JavaPackageFieldNumber = 1;
+    private bool hasJavaPackage;
+    private string javaPackage_ = "";
+    public bool HasJavaPackage {
+      get { return hasJavaPackage; }
+    }
+    public string JavaPackage {
+      get { return javaPackage_; }
+    }
+    
+    public const int JavaOuterClassnameFieldNumber = 8;
+    private bool hasJavaOuterClassname;
+    private string javaOuterClassname_ = "";
+    public bool HasJavaOuterClassname {
+      get { return hasJavaOuterClassname; }
+    }
+    public string JavaOuterClassname {
+      get { return javaOuterClassname_; }
+    }
+    
+    public const int JavaMultipleFilesFieldNumber = 10;
+    private bool hasJavaMultipleFiles;
+    private bool javaMultipleFiles_;
+    public bool HasJavaMultipleFiles {
+      get { return hasJavaMultipleFiles; }
+    }
+    public bool JavaMultipleFiles {
+      get { return javaMultipleFiles_; }
+    }
+    
+    public const int JavaGenerateEqualsAndHashFieldNumber = 20;
+    private bool hasJavaGenerateEqualsAndHash;
+    private bool javaGenerateEqualsAndHash_;
+    public bool HasJavaGenerateEqualsAndHash {
+      get { return hasJavaGenerateEqualsAndHash; }
+    }
+    public bool JavaGenerateEqualsAndHash {
+      get { return javaGenerateEqualsAndHash_; }
+    }
+    
+    public const int OptimizeForFieldNumber = 9;
+    private bool hasOptimizeFor;
+    private global::Google.ProtocolBuffers.DescriptorProtos.FileOptions.Types.OptimizeMode optimizeFor_ = global::Google.ProtocolBuffers.DescriptorProtos.FileOptions.Types.OptimizeMode.SPEED;
+    public bool HasOptimizeFor {
+      get { return hasOptimizeFor; }
+    }
+    public global::Google.ProtocolBuffers.DescriptorProtos.FileOptions.Types.OptimizeMode OptimizeFor {
+      get { return optimizeFor_; }
+    }
+    
+    public const int CcGenericServicesFieldNumber = 16;
+    private bool hasCcGenericServices;
+    private bool ccGenericServices_;
+    public bool HasCcGenericServices {
+      get { return hasCcGenericServices; }
+    }
+    public bool CcGenericServices {
+      get { return ccGenericServices_; }
+    }
+    
+    public const int JavaGenericServicesFieldNumber = 17;
+    private bool hasJavaGenericServices;
+    private bool javaGenericServices_;
+    public bool HasJavaGenericServices {
+      get { return hasJavaGenericServices; }
+    }
+    public bool JavaGenericServices {
+      get { return javaGenericServices_; }
+    }
+    
+    public const int PyGenericServicesFieldNumber = 18;
+    private bool hasPyGenericServices;
+    private bool pyGenericServices_;
+    public bool HasPyGenericServices {
+      get { return hasPyGenericServices; }
+    }
+    public bool PyGenericServices {
+      get { return pyGenericServices_; }
+    }
+    
+    public const int UninterpretedOptionFieldNumber = 999;
+    private pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> uninterpretedOption_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption>();
+    public scg::IList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> UninterpretedOptionList {
+      get { return uninterpretedOption_; }
+    }
+    public int UninterpretedOptionCount {
+      get { return uninterpretedOption_.Count; }
+    }
+    public global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption GetUninterpretedOption(int index) {
+      return uninterpretedOption_[index];
+    }
+    
+    public override bool IsInitialized {
+      get {
+        foreach (global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption element in UninterpretedOptionList) {
+          if (!element.IsInitialized) return false;
+        }
+        if (!ExtensionsAreInitialized) return false;
+        return true;
+      }
+    }
+    
+    public override void WriteTo(pb::ICodedOutputStream output) {
+      int size = SerializedSize;
+      string[] field_names = _fileOptionsFieldNames;
+      pb::ExtendableMessage<FileOptions, FileOptions.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
+      if (hasJavaPackage) {
+        output.WriteString(1, field_names[5], JavaPackage);
+      }
+      if (hasJavaOuterClassname) {
+        output.WriteString(8, field_names[4], JavaOuterClassname);
+      }
+      if (hasOptimizeFor) {
+        output.WriteEnum(9, field_names[6], (int) OptimizeFor, OptimizeFor);
+      }
+      if (hasJavaMultipleFiles) {
+        output.WriteBool(10, field_names[3], JavaMultipleFiles);
+      }
+      if (hasCcGenericServices) {
+        output.WriteBool(16, field_names[0], CcGenericServices);
+      }
+      if (hasJavaGenericServices) {
+        output.WriteBool(17, field_names[2], JavaGenericServices);
+      }
+      if (hasPyGenericServices) {
+        output.WriteBool(18, field_names[7], PyGenericServices);
+      }
+      if (hasJavaGenerateEqualsAndHash) {
+        output.WriteBool(20, field_names[1], JavaGenerateEqualsAndHash);
+      }
+      if (uninterpretedOption_.Count > 0) {
+        output.WriteMessageArray(999, field_names[8], uninterpretedOption_);
+      }
+      extensionWriter.WriteUntil(536870912, output);
+      UnknownFields.WriteTo(output);
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public override int SerializedSize {
+      get {
+        int size = memoizedSerializedSize;
+        if (size != -1) return size;
+        
+        size = 0;
+        if (hasJavaPackage) {
+          size += pb::CodedOutputStream.ComputeStringSize(1, JavaPackage);
+        }
+        if (hasJavaOuterClassname) {
+          size += pb::CodedOutputStream.ComputeStringSize(8, JavaOuterClassname);
+        }
+        if (hasJavaMultipleFiles) {
+          size += pb::CodedOutputStream.ComputeBoolSize(10, JavaMultipleFiles);
+        }
+        if (hasJavaGenerateEqualsAndHash) {
+          size += pb::CodedOutputStream.ComputeBoolSize(20, JavaGenerateEqualsAndHash);
+        }
+        if (hasOptimizeFor) {
+          size += pb::CodedOutputStream.ComputeEnumSize(9, (int) OptimizeFor);
+        }
+        if (hasCcGenericServices) {
+          size += pb::CodedOutputStream.ComputeBoolSize(16, CcGenericServices);
+        }
+        if (hasJavaGenericServices) {
+          size += pb::CodedOutputStream.ComputeBoolSize(17, JavaGenericServices);
+        }
+        if (hasPyGenericServices) {
+          size += pb::CodedOutputStream.ComputeBoolSize(18, PyGenericServices);
+        }
+        foreach (global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption element in UninterpretedOptionList) {
+          size += pb::CodedOutputStream.ComputeMessageSize(999, element);
+        }
+        size += ExtensionsSerializedSize;
+        size += UnknownFields.SerializedSize;
+        memoizedSerializedSize = size;
+        return size;
+      }
+    }
+    
+    public static FileOptions ParseFrom(pb::ByteString data) {
+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
+    }
+    public static FileOptions ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
+    }
+    public static FileOptions ParseFrom(byte[] data) {
+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
+    }
+    public static FileOptions ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
+    }
+    public static FileOptions ParseFrom(global::System.IO.Stream input) {
+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
+    }
+    public static FileOptions ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
+    }
+    public static FileOptions ParseDelimitedFrom(global::System.IO.Stream input) {
+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
+    }
+    public static FileOptions ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
+    }
+    public static FileOptions ParseFrom(pb::ICodedInputStream input) {
+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
+    }
+    public static FileOptions ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
+    }
+    private FileOptions MakeReadOnly() {
+      uninterpretedOption_.MakeReadOnly();
+      return this;
+    }
+    
+    public static Builder CreateBuilder() { return new Builder(); }
+    public override Builder ToBuilder() { return CreateBuilder(this); }
+    public override Builder CreateBuilderForType() { return new Builder(); }
+    public static Builder CreateBuilder(FileOptions prototype) {
+      return new Builder(prototype);
+    }
+    
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
+    public sealed partial class Builder : pb::ExtendableBuilder<FileOptions, Builder> {
+      protected override Builder ThisBuilder {
+        get { return this; }
+      }
+      public Builder() {
+        result = DefaultInstance;
+        resultIsReadOnly = true;
+      }
+      internal Builder(FileOptions cloneFrom) {
+        result = cloneFrom;
+        resultIsReadOnly = true;
+      }
+      
+      private bool resultIsReadOnly;
+      private FileOptions result;
+      
+      private FileOptions PrepareBuilder() {
+        if (resultIsReadOnly) {
+          FileOptions original = result;
+          result = new FileOptions();
+          resultIsReadOnly = false;
+          MergeFrom(original);
+        }
+        return result;
+      }
+      
+      public override bool IsInitialized {
+        get { return result.IsInitialized; }
+      }
+      
+      protected override FileOptions MessageBeingBuilt {
+        get { return PrepareBuilder(); }
+      }
+      
+      public override Builder Clear() {
+        result = DefaultInstance;
+        resultIsReadOnly = true;
+        return this;
+      }
+      
+      public override Builder Clone() {
+        if (resultIsReadOnly) {
+          return new Builder(result);
+        } else {
+          return new Builder().MergeFrom(result);
+        }
+      }
+      
+      public override pbd::MessageDescriptor DescriptorForType {
+        get { return global::Google.ProtocolBuffers.DescriptorProtos.FileOptions.Descriptor; }
+      }
+      
+      public override FileOptions DefaultInstanceForType {
+        get { return global::Google.ProtocolBuffers.DescriptorProtos.FileOptions.DefaultInstance; }
+      }
+      
+      public override FileOptions BuildPartial() {
+        if (resultIsReadOnly) {
+          return result;
+        }
+        resultIsReadOnly = true;
+        return result.MakeReadOnly();
+      }
+      
+      public override Builder MergeFrom(pb::IMessage other) {
+        if (other is FileOptions) {
+          return MergeFrom((FileOptions) other);
+        } else {
+          base.MergeFrom(other);
+          return this;
+        }
+      }
+      
+      public override Builder MergeFrom(FileOptions other) {
+        if (other == global::Google.ProtocolBuffers.DescriptorProtos.FileOptions.DefaultInstance) return this;
+        PrepareBuilder();
+        if (other.HasJavaPackage) {
+          JavaPackage = other.JavaPackage;
+        }
+        if (other.HasJavaOuterClassname) {
+          JavaOuterClassname = other.JavaOuterClassname;
+        }
+        if (other.HasJavaMultipleFiles) {
+          JavaMultipleFiles = other.JavaMultipleFiles;
+        }
+        if (other.HasJavaGenerateEqualsAndHash) {
+          JavaGenerateEqualsAndHash = other.JavaGenerateEqualsAndHash;
+        }
+        if (other.HasOptimizeFor) {
+          OptimizeFor = other.OptimizeFor;
+        }
+        if (other.HasCcGenericServices) {
+          CcGenericServices = other.CcGenericServices;
+        }
+        if (other.HasJavaGenericServices) {
+          JavaGenericServices = other.JavaGenericServices;
+        }
+        if (other.HasPyGenericServices) {
+          PyGenericServices = other.PyGenericServices;
+        }
+        if (other.uninterpretedOption_.Count != 0) {
+          result.uninterpretedOption_.Add(other.uninterpretedOption_);
+        }
+          this.MergeExtensionFields(other);
+        this.MergeUnknownFields(other.UnknownFields);
+        return this;
+      }
+      
+      public override Builder MergeFrom(pb::ICodedInputStream input) {
+        return MergeFrom(input, pb::ExtensionRegistry.Empty);
+      }
+      
+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+        PrepareBuilder();
+        pb::UnknownFieldSet.Builder unknownFields = null;
+        uint tag;
+        string field_name;
+        while (input.ReadTag(out tag, out field_name)) {
+          if(tag == 0 && field_name != null) {
+            int field_ordinal = global::System.Array.BinarySearch(_fileOptionsFieldNames, field_name, global::System.StringComparer.Ordinal);
+            if(field_ordinal >= 0)
+              tag = _fileOptionsFieldTags[field_ordinal];
+            else {
+              if (unknownFields == null) {
+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
+              }
+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
+              continue;
+            }
+          }
+          switch (tag) {
+            case 0: {
+              throw pb::InvalidProtocolBufferException.InvalidTag();
+            }
+            default: {
+              if (pb::WireFormat.IsEndGroupTag(tag)) {
+                if (unknownFields != null) {
+                  this.UnknownFields = unknownFields.Build();
+                }
+                return this;
+              }
+              if (unknownFields == null) {
+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
+              }
+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
+              break;
+            }
+            case 10: {
+              result.hasJavaPackage = input.ReadString(ref result.javaPackage_);
+              break;
+            }
+            case 66: {
+              result.hasJavaOuterClassname = input.ReadString(ref result.javaOuterClassname_);
+              break;
+            }
+            case 72: {
+              object unknown;
+              if(input.ReadEnum(ref result.optimizeFor_, out unknown)) {
+                result.hasOptimizeFor = true;
+              } else if(unknown is int) {
+                if (unknownFields == null) {
+                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
+                }
+                unknownFields.MergeVarintField(9, (ulong)(int)unknown);
+              }
+              break;
+            }
+            case 80: {
+              result.hasJavaMultipleFiles = input.ReadBool(ref result.javaMultipleFiles_);
+              break;
+            }
+            case 128: {
+              result.hasCcGenericServices = input.ReadBool(ref result.ccGenericServices_);
+              break;
+            }
+            case 136: {
+              result.hasJavaGenericServices = input.ReadBool(ref result.javaGenericServices_);
+              break;
+            }
+            case 144: {
+              result.hasPyGenericServices = input.ReadBool(ref result.pyGenericServices_);
+              break;
+            }
+            case 160: {
+              result.hasJavaGenerateEqualsAndHash = input.ReadBool(ref result.javaGenerateEqualsAndHash_);
+              break;
+            }
+            case 7994: {
+              input.ReadMessageArray(tag, field_name, result.uninterpretedOption_, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.DefaultInstance, extensionRegistry);
+              break;
+            }
+          }
+        }
+        
+        if (unknownFields != null) {
+          this.UnknownFields = unknownFields.Build();
+        }
+        return this;
+      }
+      
+      
+      public bool HasJavaPackage {
+        get { return result.hasJavaPackage; }
+      }
+      public string JavaPackage {
+        get { return result.JavaPackage; }
+        set { SetJavaPackage(value); }
+      }
+      public Builder SetJavaPackage(string value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        result.hasJavaPackage = true;
+        result.javaPackage_ = value;
+        return this;
+      }
+      public Builder ClearJavaPackage() {
+        PrepareBuilder();
+        result.hasJavaPackage = false;
+        result.javaPackage_ = "";
+        return this;
+      }
+      
+      public bool HasJavaOuterClassname {
+        get { return result.hasJavaOuterClassname; }
+      }
+      public string JavaOuterClassname {
+        get { return result.JavaOuterClassname; }
+        set { SetJavaOuterClassname(value); }
+      }
+      public Builder SetJavaOuterClassname(string value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        result.hasJavaOuterClassname = true;
+        result.javaOuterClassname_ = value;
+        return this;
+      }
+      public Builder ClearJavaOuterClassname() {
+        PrepareBuilder();
+        result.hasJavaOuterClassname = false;
+        result.javaOuterClassname_ = "";
+        return this;
+      }
+      
+      public bool HasJavaMultipleFiles {
+        get { return result.hasJavaMultipleFiles; }
+      }
+      public bool JavaMultipleFiles {
+        get { return result.JavaMultipleFiles; }
+        set { SetJavaMultipleFiles(value); }
+      }
+      public Builder SetJavaMultipleFiles(bool value) {
+        PrepareBuilder();
+        result.hasJavaMultipleFiles = true;
+        result.javaMultipleFiles_ = value;
+        return this;
+      }
+      public Builder ClearJavaMultipleFiles() {
+        PrepareBuilder();
+        result.hasJavaMultipleFiles = false;
+        result.javaMultipleFiles_ = false;
+        return this;
+      }
+      
+      public bool HasJavaGenerateEqualsAndHash {
+        get { return result.hasJavaGenerateEqualsAndHash; }
+      }
+      public bool JavaGenerateEqualsAndHash {
+        get { return result.JavaGenerateEqualsAndHash; }
+        set { SetJavaGenerateEqualsAndHash(value); }
+      }
+      public Builder SetJavaGenerateEqualsAndHash(bool value) {
+        PrepareBuilder();
+        result.hasJavaGenerateEqualsAndHash = true;
+        result.javaGenerateEqualsAndHash_ = value;
+        return this;
+      }
+      public Builder ClearJavaGenerateEqualsAndHash() {
+        PrepareBuilder();
+        result.hasJavaGenerateEqualsAndHash = false;
+        result.javaGenerateEqualsAndHash_ = false;
+        return this;
+      }
+      
+      public bool HasOptimizeFor {
+       get { return result.hasOptimizeFor; }
+      }
+      public global::Google.ProtocolBuffers.DescriptorProtos.FileOptions.Types.OptimizeMode OptimizeFor {
+        get { return result.OptimizeFor; }
+        set { SetOptimizeFor(value); }
+      }
+      public Builder SetOptimizeFor(global::Google.ProtocolBuffers.DescriptorProtos.FileOptions.Types.OptimizeMode value) {
+        PrepareBuilder();
+        result.hasOptimizeFor = true;
+        result.optimizeFor_ = value;
+        return this;
+      }
+      public Builder ClearOptimizeFor() {
+        PrepareBuilder();
+        result.hasOptimizeFor = false;
+        result.optimizeFor_ = global::Google.ProtocolBuffers.DescriptorProtos.FileOptions.Types.OptimizeMode.SPEED;
+        return this;
+      }
+      
+      public bool HasCcGenericServices {
+        get { return result.hasCcGenericServices; }
+      }
+      public bool CcGenericServices {
+        get { return result.CcGenericServices; }
+        set { SetCcGenericServices(value); }
+      }
+      public Builder SetCcGenericServices(bool value) {
+        PrepareBuilder();
+        result.hasCcGenericServices = true;
+        result.ccGenericServices_ = value;
+        return this;
+      }
+      public Builder ClearCcGenericServices() {
+        PrepareBuilder();
+        result.hasCcGenericServices = false;
+        result.ccGenericServices_ = false;
+        return this;
+      }
+      
+      public bool HasJavaGenericServices {
+        get { return result.hasJavaGenericServices; }
+      }
+      public bool JavaGenericServices {
+        get { return result.JavaGenericServices; }
+        set { SetJavaGenericServices(value); }
+      }
+      public Builder SetJavaGenericServices(bool value) {
+        PrepareBuilder();
+        result.hasJavaGenericServices = true;
+        result.javaGenericServices_ = value;
+        return this;
+      }
+      public Builder ClearJavaGenericServices() {
+        PrepareBuilder();
+        result.hasJavaGenericServices = false;
+        result.javaGenericServices_ = false;
+        return this;
+      }
+      
+      public bool HasPyGenericServices {
+        get { return result.hasPyGenericServices; }
+      }
+      public bool PyGenericServices {
+        get { return result.PyGenericServices; }
+        set { SetPyGenericServices(value); }
+      }
+      public Builder SetPyGenericServices(bool value) {
+        PrepareBuilder();
+        result.hasPyGenericServices = true;
+        result.pyGenericServices_ = value;
+        return this;
+      }
+      public Builder ClearPyGenericServices() {
+        PrepareBuilder();
+        result.hasPyGenericServices = false;
+        result.pyGenericServices_ = false;
+        return this;
+      }
+      
+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> UninterpretedOptionList {
+        get { return PrepareBuilder().uninterpretedOption_; }
+      }
+      public int UninterpretedOptionCount {
+        get { return result.UninterpretedOptionCount; }
+      }
+      public global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption GetUninterpretedOption(int index) {
+        return result.GetUninterpretedOption(index);
+      }
+      public Builder SetUninterpretedOption(int index, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        result.uninterpretedOption_[index] = value;
+        return this;
+      }
+      public Builder SetUninterpretedOption(int index, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
+        PrepareBuilder();
+        result.uninterpretedOption_[index] = builderForValue.Build();
+        return this;
+      }
+      public Builder AddUninterpretedOption(global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        result.uninterpretedOption_.Add(value);
+        return this;
+      }
+      public Builder AddUninterpretedOption(global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
+        PrepareBuilder();
+        result.uninterpretedOption_.Add(builderForValue.Build());
+        return this;
+      }
+      public Builder AddRangeUninterpretedOption(scg::IEnumerable<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> values) {
+        PrepareBuilder();
+        result.uninterpretedOption_.Add(values);
+        return this;
+      }
+      public Builder ClearUninterpretedOption() {
+        PrepareBuilder();
+        result.uninterpretedOption_.Clear();
+        return this;
+      }
+    }
+    static FileOptions() {
+      object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, null);
+    }
+  }
+  
+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+  [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+  [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
+  public sealed partial class MessageOptions : pb::ExtendableMessage<MessageOptions, MessageOptions.Builder> {
+    private MessageOptions() { }
+    private static readonly MessageOptions defaultInstance = new MessageOptions().MakeReadOnly();
+    private static readonly string[] _messageOptionsFieldNames = new string[] { "message_set_wire_format", "no_standard_descriptor_accessor", "uninterpreted_option" };
+    private static readonly uint[] _messageOptionsFieldTags = new uint[] { 8, 16, 7994 };
+    public static MessageOptions DefaultInstance {
+      get { return defaultInstance; }
+    }
+    
+    public override MessageOptions DefaultInstanceForType {
+      get { return DefaultInstance; }
+    }
+    
+    protected override MessageOptions ThisMessage {
+      get { return this; }
+    }
+    
+    public static pbd::MessageDescriptor Descriptor {
+      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_MessageOptions__Descriptor; }
+    }
+    
+    protected override pb::FieldAccess.FieldAccessorTable<MessageOptions, MessageOptions.Builder> InternalFieldAccessors {
+      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_MessageOptions__FieldAccessorTable; }
+    }
+    
+    public const int MessageSetWireFormatFieldNumber = 1;
+    private bool hasMessageSetWireFormat;
+    private bool messageSetWireFormat_;
+    public bool HasMessageSetWireFormat {
+      get { return hasMessageSetWireFormat; }
+    }
+    public bool MessageSetWireFormat {
+      get { return messageSetWireFormat_; }
+    }
+    
+    public const int NoStandardDescriptorAccessorFieldNumber = 2;
+    private bool hasNoStandardDescriptorAccessor;
+    private bool noStandardDescriptorAccessor_;
+    public bool HasNoStandardDescriptorAccessor {
+      get { return hasNoStandardDescriptorAccessor; }
+    }
+    public bool NoStandardDescriptorAccessor {
+      get { return noStandardDescriptorAccessor_; }
+    }
+    
+    public const int UninterpretedOptionFieldNumber = 999;
+    private pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> uninterpretedOption_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption>();
+    public scg::IList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> UninterpretedOptionList {
+      get { return uninterpretedOption_; }
+    }
+    public int UninterpretedOptionCount {
+      get { return uninterpretedOption_.Count; }
+    }
+    public global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption GetUninterpretedOption(int index) {
+      return uninterpretedOption_[index];
+    }
+    
+    public override bool IsInitialized {
+      get {
+        foreach (global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption element in UninterpretedOptionList) {
+          if (!element.IsInitialized) return false;
+        }
+        if (!ExtensionsAreInitialized) return false;
+        return true;
+      }
+    }
+    
+    public override void WriteTo(pb::ICodedOutputStream output) {
+      int size = SerializedSize;
+      string[] field_names = _messageOptionsFieldNames;
+      pb::ExtendableMessage<MessageOptions, MessageOptions.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
+      if (hasMessageSetWireFormat) {
+        output.WriteBool(1, field_names[0], MessageSetWireFormat);
+      }
+      if (hasNoStandardDescriptorAccessor) {
+        output.WriteBool(2, field_names[1], NoStandardDescriptorAccessor);
+      }
+      if (uninterpretedOption_.Count > 0) {
+        output.WriteMessageArray(999, field_names[2], uninterpretedOption_);
+      }
+      extensionWriter.WriteUntil(536870912, output);
+      UnknownFields.WriteTo(output);
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public override int SerializedSize {
+      get {
+        int size = memoizedSerializedSize;
+        if (size != -1) return size;
+        
+        size = 0;
+        if (hasMessageSetWireFormat) {
+          size += pb::CodedOutputStream.ComputeBoolSize(1, MessageSetWireFormat);
+        }
+        if (hasNoStandardDescriptorAccessor) {
+          size += pb::CodedOutputStream.ComputeBoolSize(2, NoStandardDescriptorAccessor);
+        }
+        foreach (global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption element in UninterpretedOptionList) {
+          size += pb::CodedOutputStream.ComputeMessageSize(999, element);
+        }
+        size += ExtensionsSerializedSize;
+        size += UnknownFields.SerializedSize;
+        memoizedSerializedSize = size;
+        return size;
+      }
+    }
+    
+    public static MessageOptions ParseFrom(pb::ByteString data) {
+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
+    }
+    public static MessageOptions ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
+    }
+    public static MessageOptions ParseFrom(byte[] data) {
+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
+    }
+    public static MessageOptions ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
+    }
+    public static MessageOptions ParseFrom(global::System.IO.Stream input) {
+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
+    }
+    public static MessageOptions ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
+    }
+    public static MessageOptions ParseDelimitedFrom(global::System.IO.Stream input) {
+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
+    }
+    public static MessageOptions ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
+    }
+    public static MessageOptions ParseFrom(pb::ICodedInputStream input) {
+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
+    }
+    public static MessageOptions ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
+    }
+    private MessageOptions MakeReadOnly() {
+      uninterpretedOption_.MakeReadOnly();
+      return this;
+    }
+    
+    public static Builder CreateBuilder() { return new Builder(); }
+    public override Builder ToBuilder() { return CreateBuilder(this); }
+    public override Builder CreateBuilderForType() { return new Builder(); }
+    public static Builder CreateBuilder(MessageOptions prototype) {
+      return new Builder(prototype);
+    }
+    
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
+    public sealed partial class Builder : pb::ExtendableBuilder<MessageOptions, Builder> {
+      protected override Builder ThisBuilder {
+        get { return this; }
+      }
+      public Builder() {
+        result = DefaultInstance;
+        resultIsReadOnly = true;
+      }
+      internal Builder(MessageOptions cloneFrom) {
+        result = cloneFrom;
+        resultIsReadOnly = true;
+      }
+      
+      private bool resultIsReadOnly;
+      private MessageOptions result;
+      
+      private MessageOptions PrepareBuilder() {
+        if (resultIsReadOnly) {
+          MessageOptions original = result;
+          result = new MessageOptions();
+          resultIsReadOnly = false;
+          MergeFrom(original);
+        }
+        return result;
+      }
+      
+      public override bool IsInitialized {
+        get { return result.IsInitialized; }
+      }
+      
+      protected override MessageOptions MessageBeingBuilt {
+        get { return PrepareBuilder(); }
+      }
+      
+      public override Builder Clear() {
+        result = DefaultInstance;
+        resultIsReadOnly = true;
+        return this;
+      }
+      
+      public override Builder Clone() {
+        if (resultIsReadOnly) {
+          return new Builder(result);
+        } else {
+          return new Builder().MergeFrom(result);
+        }
+      }
+      
+      public override pbd::MessageDescriptor DescriptorForType {
+        get { return global::Google.ProtocolBuffers.DescriptorProtos.MessageOptions.Descriptor; }
+      }
+      
+      public override MessageOptions DefaultInstanceForType {
+        get { return global::Google.ProtocolBuffers.DescriptorProtos.MessageOptions.DefaultInstance; }
+      }
+      
+      public override MessageOptions BuildPartial() {
+        if (resultIsReadOnly) {
+          return result;
+        }
+        resultIsReadOnly = true;
+        return result.MakeReadOnly();
+      }
+      
+      public override Builder MergeFrom(pb::IMessage other) {
+        if (other is MessageOptions) {
+          return MergeFrom((MessageOptions) other);
+        } else {
+          base.MergeFrom(other);
+          return this;
+        }
+      }
+      
+      public override Builder MergeFrom(MessageOptions other) {
+        if (other == global::Google.ProtocolBuffers.DescriptorProtos.MessageOptions.DefaultInstance) return this;
+        PrepareBuilder();
+        if (other.HasMessageSetWireFormat) {
+          MessageSetWireFormat = other.MessageSetWireFormat;
+        }
+        if (other.HasNoStandardDescriptorAccessor) {
+          NoStandardDescriptorAccessor = other.NoStandardDescriptorAccessor;
+        }
+        if (other.uninterpretedOption_.Count != 0) {
+          result.uninterpretedOption_.Add(other.uninterpretedOption_);
+        }
+          this.MergeExtensionFields(other);
+        this.MergeUnknownFields(other.UnknownFields);
+        return this;
+      }
+      
+      public override Builder MergeFrom(pb::ICodedInputStream input) {
+        return MergeFrom(input, pb::ExtensionRegistry.Empty);
+      }
+      
+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+        PrepareBuilder();
+        pb::UnknownFieldSet.Builder unknownFields = null;
+        uint tag;
+        string field_name;
+        while (input.ReadTag(out tag, out field_name)) {
+          if(tag == 0 && field_name != null) {
+            int field_ordinal = global::System.Array.BinarySearch(_messageOptionsFieldNames, field_name, global::System.StringComparer.Ordinal);
+            if(field_ordinal >= 0)
+              tag = _messageOptionsFieldTags[field_ordinal];
+            else {
+              if (unknownFields == null) {
+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
+              }
+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
+              continue;
+            }
+          }
+          switch (tag) {
+            case 0: {
+              throw pb::InvalidProtocolBufferException.InvalidTag();
+            }
+            default: {
+              if (pb::WireFormat.IsEndGroupTag(tag)) {
+                if (unknownFields != null) {
+                  this.UnknownFields = unknownFields.Build();
+                }
+                return this;
+              }
+              if (unknownFields == null) {
+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
+              }
+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
+              break;
+            }
+            case 8: {
+              result.hasMessageSetWireFormat = input.ReadBool(ref result.messageSetWireFormat_);
+              break;
+            }
+            case 16: {
+              result.hasNoStandardDescriptorAccessor = input.ReadBool(ref result.noStandardDescriptorAccessor_);
+              break;
+            }
+            case 7994: {
+              input.ReadMessageArray(tag, field_name, result.uninterpretedOption_, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.DefaultInstance, extensionRegistry);
+              break;
+            }
+          }
+        }
+        
+        if (unknownFields != null) {
+          this.UnknownFields = unknownFields.Build();
+        }
+        return this;
+      }
+      
+      
+      public bool HasMessageSetWireFormat {
+        get { return result.hasMessageSetWireFormat; }
+      }
+      public bool MessageSetWireFormat {
+        get { return result.MessageSetWireFormat; }
+        set { SetMessageSetWireFormat(value); }
+      }
+      public Builder SetMessageSetWireFormat(bool value) {
+        PrepareBuilder();
+        result.hasMessageSetWireFormat = true;
+        result.messageSetWireFormat_ = value;
+        return this;
+      }
+      public Builder ClearMessageSetWireFormat() {
+        PrepareBuilder();
+        result.hasMessageSetWireFormat = false;
+        result.messageSetWireFormat_ = false;
+        return this;
+      }
+      
+      public bool HasNoStandardDescriptorAccessor {
+        get { return result.hasNoStandardDescriptorAccessor; }
+      }
+      public bool NoStandardDescriptorAccessor {
+        get { return result.NoStandardDescriptorAccessor; }
+        set { SetNoStandardDescriptorAccessor(value); }
+      }
+      public Builder SetNoStandardDescriptorAccessor(bool value) {
+        PrepareBuilder();
+        result.hasNoStandardDescriptorAccessor = true;
+        result.noStandardDescriptorAccessor_ = value;
+        return this;
+      }
+      public Builder ClearNoStandardDescriptorAccessor() {
+        PrepareBuilder();
+        result.hasNoStandardDescriptorAccessor = false;
+        result.noStandardDescriptorAccessor_ = false;
+        return this;
+      }
+      
+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> UninterpretedOptionList {
+        get { return PrepareBuilder().uninterpretedOption_; }
+      }
+      public int UninterpretedOptionCount {
+        get { return result.UninterpretedOptionCount; }
+      }
+      public global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption GetUninterpretedOption(int index) {
+        return result.GetUninterpretedOption(index);
+      }
+      public Builder SetUninterpretedOption(int index, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        result.uninterpretedOption_[index] = value;
+        return this;
+      }
+      public Builder SetUninterpretedOption(int index, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
+        PrepareBuilder();
+        result.uninterpretedOption_[index] = builderForValue.Build();
+        return this;
+      }
+      public Builder AddUninterpretedOption(global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        result.uninterpretedOption_.Add(value);
+        return this;
+      }
+      public Builder AddUninterpretedOption(global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
+        PrepareBuilder();
+        result.uninterpretedOption_.Add(builderForValue.Build());
+        return this;
+      }
+      public Builder AddRangeUninterpretedOption(scg::IEnumerable<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> values) {
+        PrepareBuilder();
+        result.uninterpretedOption_.Add(values);
+        return this;
+      }
+      public Builder ClearUninterpretedOption() {
+        PrepareBuilder();
+        result.uninterpretedOption_.Clear();
+        return this;
+      }
+    }
+    static MessageOptions() {
+      object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, null);
+    }
+  }
+  
+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+  [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+  [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
+  public sealed partial class FieldOptions : pb::ExtendableMessage<FieldOptions, FieldOptions.Builder> {
+    private FieldOptions() { }
+    private static readonly FieldOptions defaultInstance = new FieldOptions().MakeReadOnly();
+    private static readonly string[] _fieldOptionsFieldNames = new string[] { "ctype", "deprecated", "experimental_map_key", "packed", "uninterpreted_option" };
+    private static readonly uint[] _fieldOptionsFieldTags = new uint[] { 8, 24, 74, 16, 7994 };
+    public static FieldOptions DefaultInstance {
+      get { return defaultInstance; }
+    }
+    
+    public override FieldOptions DefaultInstanceForType {
+      get { return DefaultInstance; }
+    }
+    
+    protected override FieldOptions ThisMessage {
+      get { return this; }
+    }
+    
+    public static pbd::MessageDescriptor Descriptor {
+      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_FieldOptions__Descriptor; }
+    }
+    
+    protected override pb::FieldAccess.FieldAccessorTable<FieldOptions, FieldOptions.Builder> InternalFieldAccessors {
+      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_FieldOptions__FieldAccessorTable; }
+    }
+    
+    #region Nested types
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
+    public static class Types {
+      [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+      [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
+      public enum CType {
+        STRING = 0,
+        CORD = 1,
+        STRING_PIECE = 2,
+      }
+      
+    }
+    #endregion
+    
+    public const int CtypeFieldNumber = 1;
+    private bool hasCtype;
+    private global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions.Types.CType ctype_ = global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions.Types.CType.STRING;
+    public bool HasCtype {
+      get { return hasCtype; }
+    }
+    public global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions.Types.CType Ctype {
+      get { return ctype_; }
+    }
+    
+    public const int PackedFieldNumber = 2;
+    private bool hasPacked;
+    private bool packed_;
+    public bool HasPacked {
+      get { return hasPacked; }
+    }
+    public bool Packed {
+      get { return packed_; }
+    }
+    
+    public const int DeprecatedFieldNumber = 3;
+    private bool hasDeprecated;
+    private bool deprecated_;
+    public bool HasDeprecated {
+      get { return hasDeprecated; }
+    }
+    public bool Deprecated {
+      get { return deprecated_; }
+    }
+    
+    public const int ExperimentalMapKeyFieldNumber = 9;
+    private bool hasExperimentalMapKey;
+    private string experimentalMapKey_ = "";
+    public bool HasExperimentalMapKey {
+      get { return hasExperimentalMapKey; }
+    }
+    public string ExperimentalMapKey {
+      get { return experimentalMapKey_; }
+    }
+    
+    public const int UninterpretedOptionFieldNumber = 999;
+    private pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> uninterpretedOption_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption>();
+    public scg::IList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> UninterpretedOptionList {
+      get { return uninterpretedOption_; }
+    }
+    public int UninterpretedOptionCount {
+      get { return uninterpretedOption_.Count; }
+    }
+    public global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption GetUninterpretedOption(int index) {
+      return uninterpretedOption_[index];
+    }
+    
+    public override bool IsInitialized {
+      get {
+        foreach (global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption element in UninterpretedOptionList) {
+          if (!element.IsInitialized) return false;
+        }
+        if (!ExtensionsAreInitialized) return false;
+        return true;
+      }
+    }
+    
+    public override void WriteTo(pb::ICodedOutputStream output) {
+      int size = SerializedSize;
+      string[] field_names = _fieldOptionsFieldNames;
+      pb::ExtendableMessage<FieldOptions, FieldOptions.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
+      if (hasCtype) {
+        output.WriteEnum(1, field_names[0], (int) Ctype, Ctype);
+      }
+      if (hasPacked) {
+        output.WriteBool(2, field_names[3], Packed);
+      }
+      if (hasDeprecated) {
+        output.WriteBool(3, field_names[1], Deprecated);
+      }
+      if (hasExperimentalMapKey) {
+        output.WriteString(9, field_names[2], ExperimentalMapKey);
+      }
+      if (uninterpretedOption_.Count > 0) {
+        output.WriteMessageArray(999, field_names[4], uninterpretedOption_);
+      }
+      extensionWriter.WriteUntil(536870912, output);
+      UnknownFields.WriteTo(output);
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public override int SerializedSize {
+      get {
+        int size = memoizedSerializedSize;
+        if (size != -1) return size;
+        
+        size = 0;
+        if (hasCtype) {
+          size += pb::CodedOutputStream.ComputeEnumSize(1, (int) Ctype);
+        }
+        if (hasPacked) {
+          size += pb::CodedOutputStream.ComputeBoolSize(2, Packed);
+        }
+        if (hasDeprecated) {
+          size += pb::CodedOutputStream.ComputeBoolSize(3, Deprecated);
+        }
+        if (hasExperimentalMapKey) {
+          size += pb::CodedOutputStream.ComputeStringSize(9, ExperimentalMapKey);
+        }
+        foreach (global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption element in UninterpretedOptionList) {
+          size += pb::CodedOutputStream.ComputeMessageSize(999, element);
+        }
+        size += ExtensionsSerializedSize;
+        size += UnknownFields.SerializedSize;
+        memoizedSerializedSize = size;
+        return size;
+      }
+    }
+    
+    public static FieldOptions ParseFrom(pb::ByteString data) {
+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
+    }
+    public static FieldOptions ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
+    }
+    public static FieldOptions ParseFrom(byte[] data) {
+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
+    }
+    public static FieldOptions ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
+    }
+    public static FieldOptions ParseFrom(global::System.IO.Stream input) {
+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
+    }
+    public static FieldOptions ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
+    }
+    public static FieldOptions ParseDelimitedFrom(global::System.IO.Stream input) {
+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
+    }
+    public static FieldOptions ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
+    }
+    public static FieldOptions ParseFrom(pb::ICodedInputStream input) {
+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
+    }
+    public static FieldOptions ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
+    }
+    private FieldOptions MakeReadOnly() {
+      uninterpretedOption_.MakeReadOnly();
+      return this;
+    }
+    
+    public static Builder CreateBuilder() { return new Builder(); }
+    public override Builder ToBuilder() { return CreateBuilder(this); }
+    public override Builder CreateBuilderForType() { return new Builder(); }
+    public static Builder CreateBuilder(FieldOptions prototype) {
+      return new Builder(prototype);
+    }
+    
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
+    public sealed partial class Builder : pb::ExtendableBuilder<FieldOptions, Builder> {
+      protected override Builder ThisBuilder {
+        get { return this; }
+      }
+      public Builder() {
+        result = DefaultInstance;
+        resultIsReadOnly = true;
+      }
+      internal Builder(FieldOptions cloneFrom) {
+        result = cloneFrom;
+        resultIsReadOnly = true;
+      }
+      
+      private bool resultIsReadOnly;
+      private FieldOptions result;
+      
+      private FieldOptions PrepareBuilder() {
+        if (resultIsReadOnly) {
+          FieldOptions original = result;
+          result = new FieldOptions();
+          resultIsReadOnly = false;
+          MergeFrom(original);
+        }
+        return result;
+      }
+      
+      public override bool IsInitialized {
+        get { return result.IsInitialized; }
+      }
+      
+      protected override FieldOptions MessageBeingBuilt {
+        get { return PrepareBuilder(); }
+      }
+      
+      public override Builder Clear() {
+        result = DefaultInstance;
+        resultIsReadOnly = true;
+        return this;
+      }
+      
+      public override Builder Clone() {
+        if (resultIsReadOnly) {
+          return new Builder(result);
+        } else {
+          return new Builder().MergeFrom(result);
+        }
+      }
+      
+      public override pbd::MessageDescriptor DescriptorForType {
+        get { return global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions.Descriptor; }
+      }
+      
+      public override FieldOptions DefaultInstanceForType {
+        get { return global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions.DefaultInstance; }
+      }
+      
+      public override FieldOptions BuildPartial() {
+        if (resultIsReadOnly) {
+          return result;
+        }
+        resultIsReadOnly = true;
+        return result.MakeReadOnly();
+      }
+      
+      public override Builder MergeFrom(pb::IMessage other) {
+        if (other is FieldOptions) {
+          return MergeFrom((FieldOptions) other);
+        } else {
+          base.MergeFrom(other);
+          return this;
+        }
+      }
+      
+      public override Builder MergeFrom(FieldOptions other) {
+        if (other == global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions.DefaultInstance) return this;
+        PrepareBuilder();
+        if (other.HasCtype) {
+          Ctype = other.Ctype;
+        }
+        if (other.HasPacked) {
+          Packed = other.Packed;
+        }
+        if (other.HasDeprecated) {
+          Deprecated = other.Deprecated;
+        }
+        if (other.HasExperimentalMapKey) {
+          ExperimentalMapKey = other.ExperimentalMapKey;
+        }
+        if (other.uninterpretedOption_.Count != 0) {
+          result.uninterpretedOption_.Add(other.uninterpretedOption_);
+        }
+          this.MergeExtensionFields(other);
+        this.MergeUnknownFields(other.UnknownFields);
+        return this;
+      }
+      
+      public override Builder MergeFrom(pb::ICodedInputStream input) {
+        return MergeFrom(input, pb::ExtensionRegistry.Empty);
+      }
+      
+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+        PrepareBuilder();
+        pb::UnknownFieldSet.Builder unknownFields = null;
+        uint tag;
+        string field_name;
+        while (input.ReadTag(out tag, out field_name)) {
+          if(tag == 0 && field_name != null) {
+            int field_ordinal = global::System.Array.BinarySearch(_fieldOptionsFieldNames, field_name, global::System.StringComparer.Ordinal);
+            if(field_ordinal >= 0)
+              tag = _fieldOptionsFieldTags[field_ordinal];
+            else {
+              if (unknownFields == null) {
+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
+              }
+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
+              continue;
+            }
+          }
+          switch (tag) {
+            case 0: {
+              throw pb::InvalidProtocolBufferException.InvalidTag();
+            }
+            default: {
+              if (pb::WireFormat.IsEndGroupTag(tag)) {
+                if (unknownFields != null) {
+                  this.UnknownFields = unknownFields.Build();
+                }
+                return this;
+              }
+              if (unknownFields == null) {
+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
+              }
+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
+              break;
+            }
+            case 8: {
+              object unknown;
+              if(input.ReadEnum(ref result.ctype_, out unknown)) {
+                result.hasCtype = true;
+              } else if(unknown is int) {
+                if (unknownFields == null) {
+                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
+                }
+                unknownFields.MergeVarintField(1, (ulong)(int)unknown);
+              }
+              break;
+            }
+            case 16: {
+              result.hasPacked = input.ReadBool(ref result.packed_);
+              break;
+            }
+            case 24: {
+              result.hasDeprecated = input.ReadBool(ref result.deprecated_);
+              break;
+            }
+            case 74: {
+              result.hasExperimentalMapKey = input.ReadString(ref result.experimentalMapKey_);
+              break;
+            }
+            case 7994: {
+              input.ReadMessageArray(tag, field_name, result.uninterpretedOption_, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.DefaultInstance, extensionRegistry);
+              break;
+            }
+          }
+        }
+        
+        if (unknownFields != null) {
+          this.UnknownFields = unknownFields.Build();
+        }
+        return this;
+      }
+      
+      
+      public bool HasCtype {
+       get { return result.hasCtype; }
+      }
+      public global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions.Types.CType Ctype {
+        get { return result.Ctype; }
+        set { SetCtype(value); }
+      }
+      public Builder SetCtype(global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions.Types.CType value) {
+        PrepareBuilder();
+        result.hasCtype = true;
+        result.ctype_ = value;
+        return this;
+      }
+      public Builder ClearCtype() {
+        PrepareBuilder();
+        result.hasCtype = false;
+        result.ctype_ = global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions.Types.CType.STRING;
+        return this;
+      }
+      
+      public bool HasPacked {
+        get { return result.hasPacked; }
+      }
+      public bool Packed {
+        get { return result.Packed; }
+        set { SetPacked(value); }
+      }
+      public Builder SetPacked(bool value) {
+        PrepareBuilder();
+        result.hasPacked = true;
+        result.packed_ = value;
+        return this;
+      }
+      public Builder ClearPacked() {
+        PrepareBuilder();
+        result.hasPacked = false;
+        result.packed_ = false;
+        return this;
+      }
+      
+      public bool HasDeprecated {
+        get { return result.hasDeprecated; }
+      }
+      public bool Deprecated {
+        get { return result.Deprecated; }
+        set { SetDeprecated(value); }
+      }
+      public Builder SetDeprecated(bool value) {
+        PrepareBuilder();
+        result.hasDeprecated = true;
+        result.deprecated_ = value;
+        return this;
+      }
+      public Builder ClearDeprecated() {
+        PrepareBuilder();
+        result.hasDeprecated = false;
+        result.deprecated_ = false;
+        return this;
+      }
+      
+      public bool HasExperimentalMapKey {
+        get { return result.hasExperimentalMapKey; }
+      }
+      public string ExperimentalMapKey {
+        get { return result.ExperimentalMapKey; }
+        set { SetExperimentalMapKey(value); }
+      }
+      public Builder SetExperimentalMapKey(string value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        result.hasExperimentalMapKey = true;
+        result.experimentalMapKey_ = value;
+        return this;
+      }
+      public Builder ClearExperimentalMapKey() {
+        PrepareBuilder();
+        result.hasExperimentalMapKey = false;
+        result.experimentalMapKey_ = "";
+        return this;
+      }
+      
+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> UninterpretedOptionList {
+        get { return PrepareBuilder().uninterpretedOption_; }
+      }
+      public int UninterpretedOptionCount {
+        get { return result.UninterpretedOptionCount; }
+      }
+      public global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption GetUninterpretedOption(int index) {
+        return result.GetUninterpretedOption(index);
+      }
+      public Builder SetUninterpretedOption(int index, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        result.uninterpretedOption_[index] = value;
+        return this;
+      }
+      public Builder SetUninterpretedOption(int index, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
+        PrepareBuilder();
+        result.uninterpretedOption_[index] = builderForValue.Build();
+        return this;
+      }
+      public Builder AddUninterpretedOption(global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        result.uninterpretedOption_.Add(value);
+        return this;
+      }
+      public Builder AddUninterpretedOption(global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
+        PrepareBuilder();
+        result.uninterpretedOption_.Add(builderForValue.Build());
+        return this;
+      }
+      public Builder AddRangeUninterpretedOption(scg::IEnumerable<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> values) {
+        PrepareBuilder();
+        result.uninterpretedOption_.Add(values);
+        return this;
+      }
+      public Builder ClearUninterpretedOption() {
+        PrepareBuilder();
+        result.uninterpretedOption_.Clear();
+        return this;
+      }
+    }
+    static FieldOptions() {
+      object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, null);
+    }
+  }
+  
+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+  [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+  [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
+  public sealed partial class EnumOptions : pb::ExtendableMessage<EnumOptions, EnumOptions.Builder> {
+    private EnumOptions() { }
+    private static readonly EnumOptions defaultInstance = new EnumOptions().MakeReadOnly();
+    private static readonly string[] _enumOptionsFieldNames = new string[] { "uninterpreted_option" };
+    private static readonly uint[] _enumOptionsFieldTags = new uint[] { 7994 };
+    public static EnumOptions DefaultInstance {
+      get { return defaultInstance; }
+    }
+    
+    public override EnumOptions DefaultInstanceForType {
+      get { return DefaultInstance; }
+    }
+    
+    protected override EnumOptions ThisMessage {
+      get { return this; }
+    }
+    
+    public static pbd::MessageDescriptor Descriptor {
+      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_EnumOptions__Descriptor; }
+    }
+    
+    protected override pb::FieldAccess.FieldAccessorTable<EnumOptions, EnumOptions.Builder> InternalFieldAccessors {
+      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_EnumOptions__FieldAccessorTable; }
+    }
+    
+    public const int UninterpretedOptionFieldNumber = 999;
+    private pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> uninterpretedOption_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption>();
+    public scg::IList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> UninterpretedOptionList {
+      get { return uninterpretedOption_; }
+    }
+    public int UninterpretedOptionCount {
+      get { return uninterpretedOption_.Count; }
+    }
+    public global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption GetUninterpretedOption(int index) {
+      return uninterpretedOption_[index];
+    }
+    
+    public override bool IsInitialized {
+      get {
+        foreach (global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption element in UninterpretedOptionList) {
+          if (!element.IsInitialized) return false;
+        }
+        if (!ExtensionsAreInitialized) return false;
+        return true;
+      }
+    }
+    
+    public override void WriteTo(pb::ICodedOutputStream output) {
+      int size = SerializedSize;
+      string[] field_names = _enumOptionsFieldNames;
+      pb::ExtendableMessage<EnumOptions, EnumOptions.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
+      if (uninterpretedOption_.Count > 0) {
+        output.WriteMessageArray(999, field_names[0], uninterpretedOption_);
+      }
+      extensionWriter.WriteUntil(536870912, output);
+      UnknownFields.WriteTo(output);
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public override int SerializedSize {
+      get {
+        int size = memoizedSerializedSize;
+        if (size != -1) return size;
+        
+        size = 0;
+        foreach (global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption element in UninterpretedOptionList) {
+          size += pb::CodedOutputStream.ComputeMessageSize(999, element);
+        }
+        size += ExtensionsSerializedSize;
+        size += UnknownFields.SerializedSize;
+        memoizedSerializedSize = size;
+        return size;
+      }
+    }
+    
+    public static EnumOptions ParseFrom(pb::ByteString data) {
+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
+    }
+    public static EnumOptions ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
+    }
+    public static EnumOptions ParseFrom(byte[] data) {
+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
+    }
+    public static EnumOptions ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
+    }
+    public static EnumOptions ParseFrom(global::System.IO.Stream input) {
+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
+    }
+    public static EnumOptions ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
+    }
+    public static EnumOptions ParseDelimitedFrom(global::System.IO.Stream input) {
+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
+    }
+    public static EnumOptions ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
+    }
+    public static EnumOptions ParseFrom(pb::ICodedInputStream input) {
+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
+    }
+    public static EnumOptions ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
+    }
+    private EnumOptions MakeReadOnly() {
+      uninterpretedOption_.MakeReadOnly();
+      return this;
+    }
+    
+    public static Builder CreateBuilder() { return new Builder(); }
+    public override Builder ToBuilder() { return CreateBuilder(this); }
+    public override Builder CreateBuilderForType() { return new Builder(); }
+    public static Builder CreateBuilder(EnumOptions prototype) {
+      return new Builder(prototype);
+    }
+    
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
+    public sealed partial class Builder : pb::ExtendableBuilder<EnumOptions, Builder> {
+      protected override Builder ThisBuilder {
+        get { return this; }
+      }
+      public Builder() {
+        result = DefaultInstance;
+        resultIsReadOnly = true;
+      }
+      internal Builder(EnumOptions cloneFrom) {
+        result = cloneFrom;
+        resultIsReadOnly = true;
+      }
+      
+      private bool resultIsReadOnly;
+      private EnumOptions result;
+      
+      private EnumOptions PrepareBuilder() {
+        if (resultIsReadOnly) {
+          EnumOptions original = result;
+          result = new EnumOptions();
+          resultIsReadOnly = false;
+          MergeFrom(original);
+        }
+        return result;
+      }
+      
+      public override bool IsInitialized {
+        get { return result.IsInitialized; }
+      }
+      
+      protected override EnumOptions MessageBeingBuilt {
+        get { return PrepareBuilder(); }
+      }
+      
+      public override Builder Clear() {
+        result = DefaultInstance;
+        resultIsReadOnly = true;
+        return this;
+      }
+      
+      public override Builder Clone() {
+        if (resultIsReadOnly) {
+          return new Builder(result);
+        } else {
+          return new Builder().MergeFrom(result);
+        }
+      }
+      
+      public override pbd::MessageDescriptor DescriptorForType {
+        get { return global::Google.ProtocolBuffers.DescriptorProtos.EnumOptions.Descriptor; }
+      }
+      
+      public override EnumOptions DefaultInstanceForType {
+        get { return global::Google.ProtocolBuffers.DescriptorProtos.EnumOptions.DefaultInstance; }
+      }
+      
+      public override EnumOptions BuildPartial() {
+        if (resultIsReadOnly) {
+          return result;
+        }
+        resultIsReadOnly = true;
+        return result.MakeReadOnly();
+      }
+      
+      public override Builder MergeFrom(pb::IMessage other) {
+        if (other is EnumOptions) {
+          return MergeFrom((EnumOptions) other);
+        } else {
+          base.MergeFrom(other);
+          return this;
+        }
+      }
+      
+      public override Builder MergeFrom(EnumOptions other) {
+        if (other == global::Google.ProtocolBuffers.DescriptorProtos.EnumOptions.DefaultInstance) return this;
+        PrepareBuilder();
+        if (other.uninterpretedOption_.Count != 0) {
+          result.uninterpretedOption_.Add(other.uninterpretedOption_);
+        }
+          this.MergeExtensionFields(other);
+        this.MergeUnknownFields(other.UnknownFields);
+        return this;
+      }
+      
+      public override Builder MergeFrom(pb::ICodedInputStream input) {
+        return MergeFrom(input, pb::ExtensionRegistry.Empty);
+      }
+      
+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+        PrepareBuilder();
+        pb::UnknownFieldSet.Builder unknownFields = null;
+        uint tag;
+        string field_name;
+        while (input.ReadTag(out tag, out field_name)) {
+          if(tag == 0 && field_name != null) {
+            int field_ordinal = global::System.Array.BinarySearch(_enumOptionsFieldNames, field_name, global::System.StringComparer.Ordinal);
+            if(field_ordinal >= 0)
+              tag = _enumOptionsFieldTags[field_ordinal];
+            else {
+              if (unknownFields == null) {
+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
+              }
+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
+              continue;
+            }
+          }
+          switch (tag) {
+            case 0: {
+              throw pb::InvalidProtocolBufferException.InvalidTag();
+            }
+            default: {
+              if (pb::WireFormat.IsEndGroupTag(tag)) {
+                if (unknownFields != null) {
+                  this.UnknownFields = unknownFields.Build();
+                }
+                return this;
+              }
+              if (unknownFields == null) {
+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
+              }
+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
+              break;
+            }
+            case 7994: {
+              input.ReadMessageArray(tag, field_name, result.uninterpretedOption_, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.DefaultInstance, extensionRegistry);
+              break;
+            }
+          }
+        }
+        
+        if (unknownFields != null) {
+          this.UnknownFields = unknownFields.Build();
+        }
+        return this;
+      }
+      
+      
+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> UninterpretedOptionList {
+        get { return PrepareBuilder().uninterpretedOption_; }
+      }
+      public int UninterpretedOptionCount {
+        get { return result.UninterpretedOptionCount; }
+      }
+      public global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption GetUninterpretedOption(int index) {
+        return result.GetUninterpretedOption(index);
+      }
+      public Builder SetUninterpretedOption(int index, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        result.uninterpretedOption_[index] = value;
+        return this;
+      }
+      public Builder SetUninterpretedOption(int index, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
+        PrepareBuilder();
+        result.uninterpretedOption_[index] = builderForValue.Build();
+        return this;
+      }
+      public Builder AddUninterpretedOption(global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        result.uninterpretedOption_.Add(value);
+        return this;
+      }
+      public Builder AddUninterpretedOption(global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
+        PrepareBuilder();
+        result.uninterpretedOption_.Add(builderForValue.Build());
+        return this;
+      }
+      public Builder AddRangeUninterpretedOption(scg::IEnumerable<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> values) {
+        PrepareBuilder();
+        result.uninterpretedOption_.Add(values);
+        return this;
+      }
+      public Builder ClearUninterpretedOption() {
+        PrepareBuilder();
+        result.uninterpretedOption_.Clear();
+        return this;
+      }
+    }
+    static EnumOptions() {
+      object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, null);
+    }
+  }
+  
+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+  [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+  [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
+  public sealed partial class EnumValueOptions : pb::ExtendableMessage<EnumValueOptions, EnumValueOptions.Builder> {
+    private EnumValueOptions() { }
+    private static readonly EnumValueOptions defaultInstance = new EnumValueOptions().MakeReadOnly();
+    private static readonly string[] _enumValueOptionsFieldNames = new string[] { "uninterpreted_option" };
+    private static readonly uint[] _enumValueOptionsFieldTags = new uint[] { 7994 };
+    public static EnumValueOptions DefaultInstance {
+      get { return defaultInstance; }
+    }
+    
+    public override EnumValueOptions DefaultInstanceForType {
+      get { return DefaultInstance; }
+    }
+    
+    protected override EnumValueOptions ThisMessage {
+      get { return this; }
+    }
+    
+    public static pbd::MessageDescriptor Descriptor {
+      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_EnumValueOptions__Descriptor; }
+    }
+    
+    protected override pb::FieldAccess.FieldAccessorTable<EnumValueOptions, EnumValueOptions.Builder> InternalFieldAccessors {
+      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_EnumValueOptions__FieldAccessorTable; }
+    }
+    
+    public const int UninterpretedOptionFieldNumber = 999;
+    private pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> uninterpretedOption_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption>();
+    public scg::IList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> UninterpretedOptionList {
+      get { return uninterpretedOption_; }
+    }
+    public int UninterpretedOptionCount {
+      get { return uninterpretedOption_.Count; }
+    }
+    public global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption GetUninterpretedOption(int index) {
+      return uninterpretedOption_[index];
+    }
+    
+    public override bool IsInitialized {
+      get {
+        foreach (global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption element in UninterpretedOptionList) {
+          if (!element.IsInitialized) return false;
+        }
+        if (!ExtensionsAreInitialized) return false;
+        return true;
+      }
+    }
+    
+    public override void WriteTo(pb::ICodedOutputStream output) {
+      int size = SerializedSize;
+      string[] field_names = _enumValueOptionsFieldNames;
+      pb::ExtendableMessage<EnumValueOptions, EnumValueOptions.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
+      if (uninterpretedOption_.Count > 0) {
+        output.WriteMessageArray(999, field_names[0], uninterpretedOption_);
+      }
+      extensionWriter.WriteUntil(536870912, output);
+      UnknownFields.WriteTo(output);
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public override int SerializedSize {
+      get {
+        int size = memoizedSerializedSize;
+        if (size != -1) return size;
+        
+        size = 0;
+        foreach (global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption element in UninterpretedOptionList) {
+          size += pb::CodedOutputStream.ComputeMessageSize(999, element);
+        }
+        size += ExtensionsSerializedSize;
+        size += UnknownFields.SerializedSize;
+        memoizedSerializedSize = size;
+        return size;
+      }
+    }
+    
+    public static EnumValueOptions ParseFrom(pb::ByteString data) {
+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
+    }
+    public static EnumValueOptions ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
+    }
+    public static EnumValueOptions ParseFrom(byte[] data) {
+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
+    }
+    public static EnumValueOptions ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
+    }
+    public static EnumValueOptions ParseFrom(global::System.IO.Stream input) {
+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
+    }
+    public static EnumValueOptions ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
+    }
+    public static EnumValueOptions ParseDelimitedFrom(global::System.IO.Stream input) {
+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
+    }
+    public static EnumValueOptions ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
+    }
+    public static EnumValueOptions ParseFrom(pb::ICodedInputStream input) {
+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
+    }
+    public static EnumValueOptions ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
+    }
+    private EnumValueOptions MakeReadOnly() {
+      uninterpretedOption_.MakeReadOnly();
+      return this;
+    }
+    
+    public static Builder CreateBuilder() { return new Builder(); }
+    public override Builder ToBuilder() { return CreateBuilder(this); }
+    public override Builder CreateBuilderForType() { return new Builder(); }
+    public static Builder CreateBuilder(EnumValueOptions prototype) {
+      return new Builder(prototype);
+    }
+    
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
+    public sealed partial class Builder : pb::ExtendableBuilder<EnumValueOptions, Builder> {
+      protected override Builder ThisBuilder {
+        get { return this; }
+      }
+      public Builder() {
+        result = DefaultInstance;
+        resultIsReadOnly = true;
+      }
+      internal Builder(EnumValueOptions cloneFrom) {
+        result = cloneFrom;
+        resultIsReadOnly = true;
+      }
+      
+      private bool resultIsReadOnly;
+      private EnumValueOptions result;
+      
+      private EnumValueOptions PrepareBuilder() {
+        if (resultIsReadOnly) {
+          EnumValueOptions original = result;
+          result = new EnumValueOptions();
+          resultIsReadOnly = false;
+          MergeFrom(original);
+        }
+        return result;
+      }
+      
+      public override bool IsInitialized {
+        get { return result.IsInitialized; }
+      }
+      
+      protected override EnumValueOptions MessageBeingBuilt {
+        get { return PrepareBuilder(); }
+      }
+      
+      public override Builder Clear() {
+        result = DefaultInstance;
+        resultIsReadOnly = true;
+        return this;
+      }
+      
+      public override Builder Clone() {
+        if (resultIsReadOnly) {
+          return new Builder(result);
+        } else {
+          return new Builder().MergeFrom(result);
+        }
+      }
+      
+      public override pbd::MessageDescriptor DescriptorForType {
+        get { return global::Google.ProtocolBuffers.DescriptorProtos.EnumValueOptions.Descriptor; }
+      }
+      
+      public override EnumValueOptions DefaultInstanceForType {
+        get { return global::Google.ProtocolBuffers.DescriptorProtos.EnumValueOptions.DefaultInstance; }
+      }
+      
+      public override EnumValueOptions BuildPartial() {
+        if (resultIsReadOnly) {
+          return result;
+        }
+        resultIsReadOnly = true;
+        return result.MakeReadOnly();
+      }
+      
+      public override Builder MergeFrom(pb::IMessage other) {
+        if (other is EnumValueOptions) {
+          return MergeFrom((EnumValueOptions) other);
+        } else {
+          base.MergeFrom(other);
+          return this;
+        }
+      }
+      
+      public override Builder MergeFrom(EnumValueOptions other) {
+        if (other == global::Google.ProtocolBuffers.DescriptorProtos.EnumValueOptions.DefaultInstance) return this;
+        PrepareBuilder();
+        if (other.uninterpretedOption_.Count != 0) {
+          result.uninterpretedOption_.Add(other.uninterpretedOption_);
+        }
+          this.MergeExtensionFields(other);
+        this.MergeUnknownFields(other.UnknownFields);
+        return this;
+      }
+      
+      public override Builder MergeFrom(pb::ICodedInputStream input) {
+        return MergeFrom(input, pb::ExtensionRegistry.Empty);
+      }
+      
+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+        PrepareBuilder();
+        pb::UnknownFieldSet.Builder unknownFields = null;
+        uint tag;
+        string field_name;
+        while (input.ReadTag(out tag, out field_name)) {
+          if(tag == 0 && field_name != null) {
+            int field_ordinal = global::System.Array.BinarySearch(_enumValueOptionsFieldNames, field_name, global::System.StringComparer.Ordinal);
+            if(field_ordinal >= 0)
+              tag = _enumValueOptionsFieldTags[field_ordinal];
+            else {
+              if (unknownFields == null) {
+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
+              }
+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
+              continue;
+            }
+          }
+          switch (tag) {
+            case 0: {
+              throw pb::InvalidProtocolBufferException.InvalidTag();
+            }
+            default: {
+              if (pb::WireFormat.IsEndGroupTag(tag)) {
+                if (unknownFields != null) {
+                  this.UnknownFields = unknownFields.Build();
+                }
+                return this;
+              }
+              if (unknownFields == null) {
+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
+              }
+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
+              break;
+            }
+            case 7994: {
+              input.ReadMessageArray(tag, field_name, result.uninterpretedOption_, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.DefaultInstance, extensionRegistry);
+              break;
+            }
+          }
+        }
+        
+        if (unknownFields != null) {
+          this.UnknownFields = unknownFields.Build();
+        }
+        return this;
+      }
+      
+      
+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> UninterpretedOptionList {
+        get { return PrepareBuilder().uninterpretedOption_; }
+      }
+      public int UninterpretedOptionCount {
+        get { return result.UninterpretedOptionCount; }
+      }
+      public global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption GetUninterpretedOption(int index) {
+        return result.GetUninterpretedOption(index);
+      }
+      public Builder SetUninterpretedOption(int index, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        result.uninterpretedOption_[index] = value;
+        return this;
+      }
+      public Builder SetUninterpretedOption(int index, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
+        PrepareBuilder();
+        result.uninterpretedOption_[index] = builderForValue.Build();
+        return this;
+      }
+      public Builder AddUninterpretedOption(global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        result.uninterpretedOption_.Add(value);
+        return this;
+      }
+      public Builder AddUninterpretedOption(global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
+        PrepareBuilder();
+        result.uninterpretedOption_.Add(builderForValue.Build());
+        return this;
+      }
+      public Builder AddRangeUninterpretedOption(scg::IEnumerable<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> values) {
+        PrepareBuilder();
+        result.uninterpretedOption_.Add(values);
+        return this;
+      }
+      public Builder ClearUninterpretedOption() {
+        PrepareBuilder();
+        result.uninterpretedOption_.Clear();
+        return this;
+      }
+    }
+    static EnumValueOptions() {
+      object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, null);
+    }
+  }
+  
+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+  [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+  [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
+  public sealed partial class ServiceOptions : pb::ExtendableMessage<ServiceOptions, ServiceOptions.Builder> {
+    private ServiceOptions() { }
+    private static readonly ServiceOptions defaultInstance = new ServiceOptions().MakeReadOnly();
+    private static readonly string[] _serviceOptionsFieldNames = new string[] { "uninterpreted_option" };
+    private static readonly uint[] _serviceOptionsFieldTags = new uint[] { 7994 };
+    public static ServiceOptions DefaultInstance {
+      get { return defaultInstance; }
+    }
+    
+    public override ServiceOptions DefaultInstanceForType {
+      get { return DefaultInstance; }
+    }
+    
+    protected override ServiceOptions ThisMessage {
+      get { return this; }
+    }
+    
+    public static pbd::MessageDescriptor Descriptor {
+      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_ServiceOptions__Descriptor; }
+    }
+    
+    protected override pb::FieldAccess.FieldAccessorTable<ServiceOptions, ServiceOptions.Builder> InternalFieldAccessors {
+      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_ServiceOptions__FieldAccessorTable; }
+    }
+    
+    public const int UninterpretedOptionFieldNumber = 999;
+    private pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> uninterpretedOption_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption>();
+    public scg::IList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> UninterpretedOptionList {
+      get { return uninterpretedOption_; }
+    }
+    public int UninterpretedOptionCount {
+      get { return uninterpretedOption_.Count; }
+    }
+    public global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption GetUninterpretedOption(int index) {
+      return uninterpretedOption_[index];
+    }
+    
+    public override bool IsInitialized {
+      get {
+        foreach (global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption element in UninterpretedOptionList) {
+          if (!element.IsInitialized) return false;
+        }
+        if (!ExtensionsAreInitialized) return false;
+        return true;
+      }
+    }
+    
+    public override void WriteTo(pb::ICodedOutputStream output) {
+      int size = SerializedSize;
+      string[] field_names = _serviceOptionsFieldNames;
+      pb::ExtendableMessage<ServiceOptions, ServiceOptions.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
+      if (uninterpretedOption_.Count > 0) {
+        output.WriteMessageArray(999, field_names[0], uninterpretedOption_);
+      }
+      extensionWriter.WriteUntil(536870912, output);
+      UnknownFields.WriteTo(output);
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public override int SerializedSize {
+      get {
+        int size = memoizedSerializedSize;
+        if (size != -1) return size;
+        
+        size = 0;
+        foreach (global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption element in UninterpretedOptionList) {
+          size += pb::CodedOutputStream.ComputeMessageSize(999, element);
+        }
+        size += ExtensionsSerializedSize;
+        size += UnknownFields.SerializedSize;
+        memoizedSerializedSize = size;
+        return size;
+      }
+    }
+    
+    public static ServiceOptions ParseFrom(pb::ByteString data) {
+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
+    }
+    public static ServiceOptions ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
+    }
+    public static ServiceOptions ParseFrom(byte[] data) {
+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
+    }
+    public static ServiceOptions ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
+    }
+    public static ServiceOptions ParseFrom(global::System.IO.Stream input) {
+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
+    }
+    public static ServiceOptions ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
+    }
+    public static ServiceOptions ParseDelimitedFrom(global::System.IO.Stream input) {
+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
+    }
+    public static ServiceOptions ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
+    }
+    public static ServiceOptions ParseFrom(pb::ICodedInputStream input) {
+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
+    }
+    public static ServiceOptions ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
+    }
+    private ServiceOptions MakeReadOnly() {
+      uninterpretedOption_.MakeReadOnly();
+      return this;
+    }
+    
+    public static Builder CreateBuilder() { return new Builder(); }
+    public override Builder ToBuilder() { return CreateBuilder(this); }
+    public override Builder CreateBuilderForType() { return new Builder(); }
+    public static Builder CreateBuilder(ServiceOptions prototype) {
+      return new Builder(prototype);
+    }
+    
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
+    public sealed partial class Builder : pb::ExtendableBuilder<ServiceOptions, Builder> {
+      protected override Builder ThisBuilder {
+        get { return this; }
+      }
+      public Builder() {
+        result = DefaultInstance;
+        resultIsReadOnly = true;
+      }
+      internal Builder(ServiceOptions cloneFrom) {
+        result = cloneFrom;
+        resultIsReadOnly = true;
+      }
+      
+      private bool resultIsReadOnly;
+      private ServiceOptions result;
+      
+      private ServiceOptions PrepareBuilder() {
+        if (resultIsReadOnly) {
+          ServiceOptions original = result;
+          result = new ServiceOptions();
+          resultIsReadOnly = false;
+          MergeFrom(original);
+        }
+        return result;
+      }
+      
+      public override bool IsInitialized {
+        get { return result.IsInitialized; }
+      }
+      
+      protected override ServiceOptions MessageBeingBuilt {
+        get { return PrepareBuilder(); }
+      }
+      
+      public override Builder Clear() {
+        result = DefaultInstance;
+        resultIsReadOnly = true;
+        return this;
+      }
+      
+      public override Builder Clone() {
+        if (resultIsReadOnly) {
+          return new Builder(result);
+        } else {
+          return new Builder().MergeFrom(result);
+        }
+      }
+      
+      public override pbd::MessageDescriptor DescriptorForType {
+        get { return global::Google.ProtocolBuffers.DescriptorProtos.ServiceOptions.Descriptor; }
+      }
+      
+      public override ServiceOptions DefaultInstanceForType {
+        get { return global::Google.ProtocolBuffers.DescriptorProtos.ServiceOptions.DefaultInstance; }
+      }
+      
+      public override ServiceOptions BuildPartial() {
+        if (resultIsReadOnly) {
+          return result;
+        }
+        resultIsReadOnly = true;
+        return result.MakeReadOnly();
+      }
+      
+      public override Builder MergeFrom(pb::IMessage other) {
+        if (other is ServiceOptions) {
+          return MergeFrom((ServiceOptions) other);
+        } else {
+          base.MergeFrom(other);
+          return this;
+        }
+      }
+      
+      public override Builder MergeFrom(ServiceOptions other) {
+        if (other == global::Google.ProtocolBuffers.DescriptorProtos.ServiceOptions.DefaultInstance) return this;
+        PrepareBuilder();
+        if (other.uninterpretedOption_.Count != 0) {
+          result.uninterpretedOption_.Add(other.uninterpretedOption_);
+        }
+          this.MergeExtensionFields(other);
+        this.MergeUnknownFields(other.UnknownFields);
+        return this;
+      }
+      
+      public override Builder MergeFrom(pb::ICodedInputStream input) {
+        return MergeFrom(input, pb::ExtensionRegistry.Empty);
+      }
+      
+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+        PrepareBuilder();
+        pb::UnknownFieldSet.Builder unknownFields = null;
+        uint tag;
+        string field_name;
+        while (input.ReadTag(out tag, out field_name)) {
+          if(tag == 0 && field_name != null) {
+            int field_ordinal = global::System.Array.BinarySearch(_serviceOptionsFieldNames, field_name, global::System.StringComparer.Ordinal);
+            if(field_ordinal >= 0)
+              tag = _serviceOptionsFieldTags[field_ordinal];
+            else {
+              if (unknownFields == null) {
+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
+              }
+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
+              continue;
+            }
+          }
+          switch (tag) {
+            case 0: {
+              throw pb::InvalidProtocolBufferException.InvalidTag();
+            }
+            default: {
+              if (pb::WireFormat.IsEndGroupTag(tag)) {
+                if (unknownFields != null) {
+                  this.UnknownFields = unknownFields.Build();
+                }
+                return this;
+              }
+              if (unknownFields == null) {
+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
+              }
+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
+              break;
+            }
+            case 7994: {
+              input.ReadMessageArray(tag, field_name, result.uninterpretedOption_, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.DefaultInstance, extensionRegistry);
+              break;
+            }
+          }
+        }
+        
+        if (unknownFields != null) {
+          this.UnknownFields = unknownFields.Build();
+        }
+        return this;
+      }
+      
+      
+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> UninterpretedOptionList {
+        get { return PrepareBuilder().uninterpretedOption_; }
+      }
+      public int UninterpretedOptionCount {
+        get { return result.UninterpretedOptionCount; }
+      }
+      public global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption GetUninterpretedOption(int index) {
+        return result.GetUninterpretedOption(index);
+      }
+      public Builder SetUninterpretedOption(int index, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        result.uninterpretedOption_[index] = value;
+        return this;
+      }
+      public Builder SetUninterpretedOption(int index, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
+        PrepareBuilder();
+        result.uninterpretedOption_[index] = builderForValue.Build();
+        return this;
+      }
+      public Builder AddUninterpretedOption(global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        result.uninterpretedOption_.Add(value);
+        return this;
+      }
+      public Builder AddUninterpretedOption(global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
+        PrepareBuilder();
+        result.uninterpretedOption_.Add(builderForValue.Build());
+        return this;
+      }
+      public Builder AddRangeUninterpretedOption(scg::IEnumerable<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> values) {
+        PrepareBuilder();
+        result.uninterpretedOption_.Add(values);
+        return this;
+      }
+      public Builder ClearUninterpretedOption() {
+        PrepareBuilder();
+        result.uninterpretedOption_.Clear();
+        return this;
+      }
+    }
+    static ServiceOptions() {
+      object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, null);
+    }
+  }
+  
+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+  [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+  [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
+  public sealed partial class MethodOptions : pb::ExtendableMessage<MethodOptions, MethodOptions.Builder> {
+    private MethodOptions() { }
+    private static readonly MethodOptions defaultInstance = new MethodOptions().MakeReadOnly();
+    private static readonly string[] _methodOptionsFieldNames = new string[] { "uninterpreted_option" };
+    private static readonly uint[] _methodOptionsFieldTags = new uint[] { 7994 };
+    public static MethodOptions DefaultInstance {
+      get { return defaultInstance; }
+    }
+    
+    public override MethodOptions DefaultInstanceForType {
+      get { return DefaultInstance; }
+    }
+    
+    protected override MethodOptions ThisMessage {
+      get { return this; }
+    }
+    
+    public static pbd::MessageDescriptor Descriptor {
+      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_MethodOptions__Descriptor; }
+    }
+    
+    protected override pb::FieldAccess.FieldAccessorTable<MethodOptions, MethodOptions.Builder> InternalFieldAccessors {
+      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_MethodOptions__FieldAccessorTable; }
+    }
+    
+    public const int UninterpretedOptionFieldNumber = 999;
+    private pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> uninterpretedOption_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption>();
+    public scg::IList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> UninterpretedOptionList {
+      get { return uninterpretedOption_; }
+    }
+    public int UninterpretedOptionCount {
+      get { return uninterpretedOption_.Count; }
+    }
+    public global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption GetUninterpretedOption(int index) {
+      return uninterpretedOption_[index];
+    }
+    
+    public override bool IsInitialized {
+      get {
+        foreach (global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption element in UninterpretedOptionList) {
+          if (!element.IsInitialized) return false;
+        }
+        if (!ExtensionsAreInitialized) return false;
+        return true;
+      }
+    }
+    
+    public override void WriteTo(pb::ICodedOutputStream output) {
+      int size = SerializedSize;
+      string[] field_names = _methodOptionsFieldNames;
+      pb::ExtendableMessage<MethodOptions, MethodOptions.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
+      if (uninterpretedOption_.Count > 0) {
+        output.WriteMessageArray(999, field_names[0], uninterpretedOption_);
+      }
+      extensionWriter.WriteUntil(536870912, output);
+      UnknownFields.WriteTo(output);
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public override int SerializedSize {
+      get {
+        int size = memoizedSerializedSize;
+        if (size != -1) return size;
+        
+        size = 0;
+        foreach (global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption element in UninterpretedOptionList) {
+          size += pb::CodedOutputStream.ComputeMessageSize(999, element);
+        }
+        size += ExtensionsSerializedSize;
+        size += UnknownFields.SerializedSize;
+        memoizedSerializedSize = size;
+        return size;
+      }
+    }
+    
+    public static MethodOptions ParseFrom(pb::ByteString data) {
+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
+    }
+    public static MethodOptions ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
+    }
+    public static MethodOptions ParseFrom(byte[] data) {
+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
+    }
+    public static MethodOptions ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
+    }
+    public static MethodOptions ParseFrom(global::System.IO.Stream input) {
+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
+    }
+    public static MethodOptions ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
+    }
+    public static MethodOptions ParseDelimitedFrom(global::System.IO.Stream input) {
+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
+    }
+    public static MethodOptions ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
+    }
+    public static MethodOptions ParseFrom(pb::ICodedInputStream input) {
+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
+    }
+    public static MethodOptions ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
+    }
+    private MethodOptions MakeReadOnly() {
+      uninterpretedOption_.MakeReadOnly();
+      return this;
+    }
+    
+    public static Builder CreateBuilder() { return new Builder(); }
+    public override Builder ToBuilder() { return CreateBuilder(this); }
+    public override Builder CreateBuilderForType() { return new Builder(); }
+    public static Builder CreateBuilder(MethodOptions prototype) {
+      return new Builder(prototype);
+    }
+    
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
+    public sealed partial class Builder : pb::ExtendableBuilder<MethodOptions, Builder> {
+      protected override Builder ThisBuilder {
+        get { return this; }
+      }
+      public Builder() {
+        result = DefaultInstance;
+        resultIsReadOnly = true;
+      }
+      internal Builder(MethodOptions cloneFrom) {
+        result = cloneFrom;
+        resultIsReadOnly = true;
+      }
+      
+      private bool resultIsReadOnly;
+      private MethodOptions result;
+      
+      private MethodOptions PrepareBuilder() {
+        if (resultIsReadOnly) {
+          MethodOptions original = result;
+          result = new MethodOptions();
+          resultIsReadOnly = false;
+          MergeFrom(original);
+        }
+        return result;
+      }
+      
+      public override bool IsInitialized {
+        get { return result.IsInitialized; }
+      }
+      
+      protected override MethodOptions MessageBeingBuilt {
+        get { return PrepareBuilder(); }
+      }
+      
+      public override Builder Clear() {
+        result = DefaultInstance;
+        resultIsReadOnly = true;
+        return this;
+      }
+      
+      public override Builder Clone() {
+        if (resultIsReadOnly) {
+          return new Builder(result);
+        } else {
+          return new Builder().MergeFrom(result);
+        }
+      }
+      
+      public override pbd::MessageDescriptor DescriptorForType {
+        get { return global::Google.ProtocolBuffers.DescriptorProtos.MethodOptions.Descriptor; }
+      }
+      
+      public override MethodOptions DefaultInstanceForType {
+        get { return global::Google.ProtocolBuffers.DescriptorProtos.MethodOptions.DefaultInstance; }
+      }
+      
+      public override MethodOptions BuildPartial() {
+        if (resultIsReadOnly) {
+          return result;
+        }
+        resultIsReadOnly = true;
+        return result.MakeReadOnly();
+      }
+      
+      public override Builder MergeFrom(pb::IMessage other) {
+        if (other is MethodOptions) {
+          return MergeFrom((MethodOptions) other);
+        } else {
+          base.MergeFrom(other);
+          return this;
+        }
+      }
+      
+      public override Builder MergeFrom(MethodOptions other) {
+        if (other == global::Google.ProtocolBuffers.DescriptorProtos.MethodOptions.DefaultInstance) return this;
+        PrepareBuilder();
+        if (other.uninterpretedOption_.Count != 0) {
+          result.uninterpretedOption_.Add(other.uninterpretedOption_);
+        }
+          this.MergeExtensionFields(other);
+        this.MergeUnknownFields(other.UnknownFields);
+        return this;
+      }
+      
+      public override Builder MergeFrom(pb::ICodedInputStream input) {
+        return MergeFrom(input, pb::ExtensionRegistry.Empty);
+      }
+      
+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+        PrepareBuilder();
+        pb::UnknownFieldSet.Builder unknownFields = null;
+        uint tag;
+        string field_name;
+        while (input.ReadTag(out tag, out field_name)) {
+          if(tag == 0 && field_name != null) {
+            int field_ordinal = global::System.Array.BinarySearch(_methodOptionsFieldNames, field_name, global::System.StringComparer.Ordinal);
+            if(field_ordinal >= 0)
+              tag = _methodOptionsFieldTags[field_ordinal];
+            else {
+              if (unknownFields == null) {
+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
+              }
+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
+              continue;
+            }
+          }
+          switch (tag) {
+            case 0: {
+              throw pb::InvalidProtocolBufferException.InvalidTag();
+            }
+            default: {
+              if (pb::WireFormat.IsEndGroupTag(tag)) {
+                if (unknownFields != null) {
+                  this.UnknownFields = unknownFields.Build();
+                }
+                return this;
+              }
+              if (unknownFields == null) {
+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
+              }
+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
+              break;
+            }
+            case 7994: {
+              input.ReadMessageArray(tag, field_name, result.uninterpretedOption_, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.DefaultInstance, extensionRegistry);
+              break;
+            }
+          }
+        }
+        
+        if (unknownFields != null) {
+          this.UnknownFields = unknownFields.Build();
+        }
+        return this;
+      }
+      
+      
+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> UninterpretedOptionList {
+        get { return PrepareBuilder().uninterpretedOption_; }
+      }
+      public int UninterpretedOptionCount {
+        get { return result.UninterpretedOptionCount; }
+      }
+      public global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption GetUninterpretedOption(int index) {
+        return result.GetUninterpretedOption(index);
+      }
+      public Builder SetUninterpretedOption(int index, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        result.uninterpretedOption_[index] = value;
+        return this;
+      }
+      public Builder SetUninterpretedOption(int index, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
+        PrepareBuilder();
+        result.uninterpretedOption_[index] = builderForValue.Build();
+        return this;
+      }
+      public Builder AddUninterpretedOption(global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        result.uninterpretedOption_.Add(value);
+        return this;
+      }
+      public Builder AddUninterpretedOption(global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
+        PrepareBuilder();
+        result.uninterpretedOption_.Add(builderForValue.Build());
+        return this;
+      }
+      public Builder AddRangeUninterpretedOption(scg::IEnumerable<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> values) {
+        PrepareBuilder();
+        result.uninterpretedOption_.Add(values);
+        return this;
+      }
+      public Builder ClearUninterpretedOption() {
+        PrepareBuilder();
+        result.uninterpretedOption_.Clear();
+        return this;
+      }
+    }
+    static MethodOptions() {
+      object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, null);
+    }
+  }
+  
+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+  [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+  [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
+  public sealed partial class UninterpretedOption : pb::GeneratedMessage<UninterpretedOption, UninterpretedOption.Builder> {
+    private UninterpretedOption() { }
+    private static readonly UninterpretedOption defaultInstance = new UninterpretedOption().MakeReadOnly();
+    private static readonly string[] _uninterpretedOptionFieldNames = new string[] { "aggregate_value", "double_value", "identifier_value", "name", "negative_int_value", "positive_int_value", "string_value" };
+    private static readonly uint[] _uninterpretedOptionFieldTags = new uint[] { 66, 49, 26, 18, 40, 32, 58 };
+    public static UninterpretedOption DefaultInstance {
+      get { return defaultInstance; }
+    }
+    
+    public override UninterpretedOption DefaultInstanceForType {
+      get { return DefaultInstance; }
+    }
+    
+    protected override UninterpretedOption ThisMessage {
+      get { return this; }
+    }
+    
+    public static pbd::MessageDescriptor Descriptor {
+      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_UninterpretedOption__Descriptor; }
+    }
+    
+    protected override pb::FieldAccess.FieldAccessorTable<UninterpretedOption, UninterpretedOption.Builder> InternalFieldAccessors {
+      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_UninterpretedOption__FieldAccessorTable; }
+    }
+    
+    #region Nested types
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
+    public static class Types {
+      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+      [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+      [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
+      public sealed partial class NamePart : pb::GeneratedMessage<NamePart, NamePart.Builder> {
+        private NamePart() { }
+        private static readonly NamePart defaultInstance = new NamePart().MakeReadOnly();
+        private static readonly string[] _namePartFieldNames = new string[] { "is_extension", "name_part" };
+        private static readonly uint[] _namePartFieldTags = new uint[] { 16, 10 };
+        public static NamePart DefaultInstance {
+          get { return defaultInstance; }
+        }
+        
+        public override NamePart DefaultInstanceForType {
+          get { return DefaultInstance; }
+        }
+        
+        protected override NamePart ThisMessage {
+          get { return this; }
+        }
+        
+        public static pbd::MessageDescriptor Descriptor {
+          get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_UninterpretedOption_NamePart__Descriptor; }
+        }
+        
+        protected override pb::FieldAccess.FieldAccessorTable<NamePart, NamePart.Builder> InternalFieldAccessors {
+          get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_UninterpretedOption_NamePart__FieldAccessorTable; }
+        }
+        
+        public const int NamePart_FieldNumber = 1;
+        private bool hasNamePart_;
+        private string namePart_ = "";
+        public bool HasNamePart_ {
+          get { return hasNamePart_; }
+        }
+        public string NamePart_ {
+          get { return namePart_; }
+        }
+        
+        public const int IsExtensionFieldNumber = 2;
+        private bool hasIsExtension;
+        private bool isExtension_;
+        public bool HasIsExtension {
+          get { return hasIsExtension; }
+        }
+        public bool IsExtension {
+          get { return isExtension_; }
+        }
+        
+        public override bool IsInitialized {
+          get {
+            if (!hasNamePart_) return false;
+            if (!hasIsExtension) return false;
+            return true;
+          }
+        }
+        
+        public override void WriteTo(pb::ICodedOutputStream output) {
+          int size = SerializedSize;
+          string[] field_names = _namePartFieldNames;
+          if (hasNamePart_) {
+            output.WriteString(1, field_names[1], NamePart_);
+          }
+          if (hasIsExtension) {
+            output.WriteBool(2, field_names[0], IsExtension);
+          }
+          UnknownFields.WriteTo(output);
+        }
+        
+        private int memoizedSerializedSize = -1;
+        public override int SerializedSize {
+          get {
+            int size = memoizedSerializedSize;
+            if (size != -1) return size;
+            
+            size = 0;
+            if (hasNamePart_) {
+              size += pb::CodedOutputStream.ComputeStringSize(1, NamePart_);
+            }
+            if (hasIsExtension) {
+              size += pb::CodedOutputStream.ComputeBoolSize(2, IsExtension);
+            }
+            size += UnknownFields.SerializedSize;
+            memoizedSerializedSize = size;
+            return size;
+          }
+        }
+        
+        public static NamePart ParseFrom(pb::ByteString data) {
+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
+        }
+        public static NamePart ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
+        }
+        public static NamePart ParseFrom(byte[] data) {
+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
+        }
+        public static NamePart ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
+        }
+        public static NamePart ParseFrom(global::System.IO.Stream input) {
+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
+        }
+        public static NamePart ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
+        }
+        public static NamePart ParseDelimitedFrom(global::System.IO.Stream input) {
+          return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
+        }
+        public static NamePart ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
+          return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
+        }
+        public static NamePart ParseFrom(pb::ICodedInputStream input) {
+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
+        }
+        public static NamePart ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
+        }
+        private NamePart MakeReadOnly() {
+          return this;
+        }
+        
+        public static Builder CreateBuilder() { return new Builder(); }
+        public override Builder ToBuilder() { return CreateBuilder(this); }
+        public override Builder CreateBuilderForType() { return new Builder(); }
+        public static Builder CreateBuilder(NamePart prototype) {
+          return new Builder(prototype);
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+        [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
+        public sealed partial class Builder : pb::GeneratedBuilder<NamePart, Builder> {
+          protected override Builder ThisBuilder {
+            get { return this; }
+          }
+          public Builder() {
+            result = DefaultInstance;
+            resultIsReadOnly = true;
+          }
+          internal Builder(NamePart cloneFrom) {
+            result = cloneFrom;
+            resultIsReadOnly = true;
+          }
+          
+          private bool resultIsReadOnly;
+          private NamePart result;
+          
+          private NamePart PrepareBuilder() {
+            if (resultIsReadOnly) {
+              NamePart original = result;
+              result = new NamePart();
+              resultIsReadOnly = false;
+              MergeFrom(original);
+            }
+            return result;
+          }
+          
+          public override bool IsInitialized {
+            get { return result.IsInitialized; }
+          }
+          
+          protected override NamePart MessageBeingBuilt {
+            get { return PrepareBuilder(); }
+          }
+          
+          public override Builder Clear() {
+            result = DefaultInstance;
+            resultIsReadOnly = true;
+            return this;
+          }
+          
+          public override Builder Clone() {
+            if (resultIsReadOnly) {
+              return new Builder(result);
+            } else {
+              return new Builder().MergeFrom(result);
+            }
+          }
+          
+          public override pbd::MessageDescriptor DescriptorForType {
+            get { return global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Types.NamePart.Descriptor; }
+          }
+          
+          public override NamePart DefaultInstanceForType {
+            get { return global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Types.NamePart.DefaultInstance; }
+          }
+          
+          public override NamePart BuildPartial() {
+            if (resultIsReadOnly) {
+              return result;
+            }
+            resultIsReadOnly = true;
+            return result.MakeReadOnly();
+          }
+          
+          public override Builder MergeFrom(pb::IMessage other) {
+            if (other is NamePart) {
+              return MergeFrom((NamePart) other);
+            } else {
+              base.MergeFrom(other);
+              return this;
+            }
+          }
+          
+          public override Builder MergeFrom(NamePart other) {
+            if (other == global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Types.NamePart.DefaultInstance) return this;
+            PrepareBuilder();
+            if (other.HasNamePart_) {
+              NamePart_ = other.NamePart_;
+            }
+            if (other.HasIsExtension) {
+              IsExtension = other.IsExtension;
+            }
+            this.MergeUnknownFields(other.UnknownFields);
+            return this;
+          }
+          
+          public override Builder MergeFrom(pb::ICodedInputStream input) {
+            return MergeFrom(input, pb::ExtensionRegistry.Empty);
+          }
+          
+          public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+            PrepareBuilder();
+            pb::UnknownFieldSet.Builder unknownFields = null;
+            uint tag;
+            string field_name;
+            while (input.ReadTag(out tag, out field_name)) {
+              if(tag == 0 && field_name != null) {
+                int field_ordinal = global::System.Array.BinarySearch(_namePartFieldNames, field_name, global::System.StringComparer.Ordinal);
+                if(field_ordinal >= 0)
+                  tag = _namePartFieldTags[field_ordinal];
+                else {
+                  if (unknownFields == null) {
+                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
+                  }
+                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
+                  continue;
+                }
+              }
+              switch (tag) {
+                case 0: {
+                  throw pb::InvalidProtocolBufferException.InvalidTag();
+                }
+                default: {
+                  if (pb::WireFormat.IsEndGroupTag(tag)) {
+                    if (unknownFields != null) {
+                      this.UnknownFields = unknownFields.Build();
+                    }
+                    return this;
+                  }
+                  if (unknownFields == null) {
+                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
+                  }
+                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
+                  break;
+                }
+                case 10: {
+                  result.hasNamePart_ = input.ReadString(ref result.namePart_);
+                  break;
+                }
+                case 16: {
+                  result.hasIsExtension = input.ReadBool(ref result.isExtension_);
+                  break;
+                }
+              }
+            }
+            
+            if (unknownFields != null) {
+              this.UnknownFields = unknownFields.Build();
+            }
+            return this;
+          }
+          
+          
+          public bool HasNamePart_ {
+            get { return result.hasNamePart_; }
+          }
+          public string NamePart_ {
+            get { return result.NamePart_; }
+            set { SetNamePart_(value); }
+          }
+          public Builder SetNamePart_(string value) {
+            pb::ThrowHelper.ThrowIfNull(value, "value");
+            PrepareBuilder();
+            result.hasNamePart_ = true;
+            result.namePart_ = value;
+            return this;
+          }
+          public Builder ClearNamePart_() {
+            PrepareBuilder();
+            result.hasNamePart_ = false;
+            result.namePart_ = "";
+            return this;
+          }
+          
+          public bool HasIsExtension {
+            get { return result.hasIsExtension; }
+          }
+          public bool IsExtension {
+            get { return result.IsExtension; }
+            set { SetIsExtension(value); }
+          }
+          public Builder SetIsExtension(bool value) {
+            PrepareBuilder();
+            result.hasIsExtension = true;
+            result.isExtension_ = value;
+            return this;
+          }
+          public Builder ClearIsExtension() {
+            PrepareBuilder();
+            result.hasIsExtension = false;
+            result.isExtension_ = false;
+            return this;
+          }
+        }
+        static NamePart() {
+          object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, null);
+        }
+      }
+      
+    }
+    #endregion
+    
+    public const int NameFieldNumber = 2;
+    private pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Types.NamePart> name_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Types.NamePart>();
+    public scg::IList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Types.NamePart> NameList {
+      get { return name_; }
+    }
+    public int NameCount {
+      get { return name_.Count; }
+    }
+    public global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Types.NamePart GetName(int index) {
+      return name_[index];
+    }
+    
+    public const int IdentifierValueFieldNumber = 3;
+    private bool hasIdentifierValue;
+    private string identifierValue_ = "";
+    public bool HasIdentifierValue {
+      get { return hasIdentifierValue; }
+    }
+    public string IdentifierValue {
+      get { return identifierValue_; }
+    }
+    
+    public const int PositiveIntValueFieldNumber = 4;
+    private bool hasPositiveIntValue;
+    private ulong positiveIntValue_;
+    public bool HasPositiveIntValue {
+      get { return hasPositiveIntValue; }
+    }
+    [global::System.CLSCompliant(false)]
+    public ulong PositiveIntValue {
+      get { return positiveIntValue_; }
+    }
+    
+    public const int NegativeIntValueFieldNumber = 5;
+    private bool hasNegativeIntValue;
+    private long negativeIntValue_;
+    public bool HasNegativeIntValue {
+      get { return hasNegativeIntValue; }
+    }
+    public long NegativeIntValue {
+      get { return negativeIntValue_; }
+    }
+    
+    public const int DoubleValueFieldNumber = 6;
+    private bool hasDoubleValue;
+    private double doubleValue_;
+    public bool HasDoubleValue {
+      get { return hasDoubleValue; }
+    }
+    public double DoubleValue {
+      get { return doubleValue_; }
+    }
+    
+    public const int StringValueFieldNumber = 7;
+    private bool hasStringValue;
+    private pb::ByteString stringValue_ = pb::ByteString.Empty;
+    public bool HasStringValue {
+      get { return hasStringValue; }
+    }
+    public pb::ByteString StringValue {
+      get { return stringValue_; }
+    }
+    
+    public const int AggregateValueFieldNumber = 8;
+    private bool hasAggregateValue;
+    private string aggregateValue_ = "";
+    public bool HasAggregateValue {
+      get { return hasAggregateValue; }
+    }
+    public string AggregateValue {
+      get { return aggregateValue_; }
+    }
+    
+    public override bool IsInitialized {
+      get {
+        foreach (global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Types.NamePart element in NameList) {
+          if (!element.IsInitialized) return false;
+        }
+        return true;
+      }
+    }
+    
+    public override void WriteTo(pb::ICodedOutputStream output) {
+      int size = SerializedSize;
+      string[] field_names = _uninterpretedOptionFieldNames;
+      if (name_.Count > 0) {
+        output.WriteMessageArray(2, field_names[3], name_);
+      }
+      if (hasIdentifierValue) {
+        output.WriteString(3, field_names[2], IdentifierValue);
+      }
+      if (hasPositiveIntValue) {
+        output.WriteUInt64(4, field_names[5], PositiveIntValue);
+      }
+      if (hasNegativeIntValue) {
+        output.WriteInt64(5, field_names[4], NegativeIntValue);
+      }
+      if (hasDoubleValue) {
+        output.WriteDouble(6, field_names[1], DoubleValue);
+      }
+      if (hasStringValue) {
+        output.WriteBytes(7, field_names[6], StringValue);
+      }
+      if (hasAggregateValue) {
+        output.WriteString(8, field_names[0], AggregateValue);
+      }
+      UnknownFields.WriteTo(output);
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public override int SerializedSize {
+      get {
+        int size = memoizedSerializedSize;
+        if (size != -1) return size;
+        
+        size = 0;
+        foreach (global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Types.NamePart element in NameList) {
+          size += pb::CodedOutputStream.ComputeMessageSize(2, element);
+        }
+        if (hasIdentifierValue) {
+          size += pb::CodedOutputStream.ComputeStringSize(3, IdentifierValue);
+        }
+        if (hasPositiveIntValue) {
+          size += pb::CodedOutputStream.ComputeUInt64Size(4, PositiveIntValue);
+        }
+        if (hasNegativeIntValue) {
+          size += pb::CodedOutputStream.ComputeInt64Size(5, NegativeIntValue);
+        }
+        if (hasDoubleValue) {
+          size += pb::CodedOutputStream.ComputeDoubleSize(6, DoubleValue);
+        }
+        if (hasStringValue) {
+          size += pb::CodedOutputStream.ComputeBytesSize(7, StringValue);
+        }
+        if (hasAggregateValue) {
+          size += pb::CodedOutputStream.ComputeStringSize(8, AggregateValue);
+        }
+        size += UnknownFields.SerializedSize;
+        memoizedSerializedSize = size;
+        return size;
+      }
+    }
+    
+    public static UninterpretedOption ParseFrom(pb::ByteString data) {
+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
+    }
+    public static UninterpretedOption ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
+    }
+    public static UninterpretedOption ParseFrom(byte[] data) {
+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
+    }
+    public static UninterpretedOption ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
+    }
+    public static UninterpretedOption ParseFrom(global::System.IO.Stream input) {
+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
+    }
+    public static UninterpretedOption ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
+    }
+    public static UninterpretedOption ParseDelimitedFrom(global::System.IO.Stream input) {
+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
+    }
+    public static UninterpretedOption ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
+    }
+    public static UninterpretedOption ParseFrom(pb::ICodedInputStream input) {
+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
+    }
+    public static UninterpretedOption ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
+    }
+    private UninterpretedOption MakeReadOnly() {
+      name_.MakeReadOnly();
+      return this;
+    }
+    
+    public static Builder CreateBuilder() { return new Builder(); }
+    public override Builder ToBuilder() { return CreateBuilder(this); }
+    public override Builder CreateBuilderForType() { return new Builder(); }
+    public static Builder CreateBuilder(UninterpretedOption prototype) {
+      return new Builder(prototype);
+    }
+    
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
+    public sealed partial class Builder : pb::GeneratedBuilder<UninterpretedOption, Builder> {
+      protected override Builder ThisBuilder {
+        get { return this; }
+      }
+      public Builder() {
+        result = DefaultInstance;
+        resultIsReadOnly = true;
+      }
+      internal Builder(UninterpretedOption cloneFrom) {
+        result = cloneFrom;
+        resultIsReadOnly = true;
+      }
+      
+      private bool resultIsReadOnly;
+      private UninterpretedOption result;
+      
+      private UninterpretedOption PrepareBuilder() {
+        if (resultIsReadOnly) {
+          UninterpretedOption original = result;
+          result = new UninterpretedOption();
+          resultIsReadOnly = false;
+          MergeFrom(original);
+        }
+        return result;
+      }
+      
+      public override bool IsInitialized {
+        get { return result.IsInitialized; }
+      }
+      
+      protected override UninterpretedOption MessageBeingBuilt {
+        get { return PrepareBuilder(); }
+      }
+      
+      public override Builder Clear() {
+        result = DefaultInstance;
+        resultIsReadOnly = true;
+        return this;
+      }
+      
+      public override Builder Clone() {
+        if (resultIsReadOnly) {
+          return new Builder(result);
+        } else {
+          return new Builder().MergeFrom(result);
+        }
+      }
+      
+      public override pbd::MessageDescriptor DescriptorForType {
+        get { return global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Descriptor; }
+      }
+      
+      public override UninterpretedOption DefaultInstanceForType {
+        get { return global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.DefaultInstance; }
+      }
+      
+      public override UninterpretedOption BuildPartial() {
+        if (resultIsReadOnly) {
+          return result;
+        }
+        resultIsReadOnly = true;
+        return result.MakeReadOnly();
+      }
+      
+      public override Builder MergeFrom(pb::IMessage other) {
+        if (other is UninterpretedOption) {
+          return MergeFrom((UninterpretedOption) other);
+        } else {
+          base.MergeFrom(other);
+          return this;
+        }
+      }
+      
+      public override Builder MergeFrom(UninterpretedOption other) {
+        if (other == global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.DefaultInstance) return this;
+        PrepareBuilder();
+        if (other.name_.Count != 0) {
+          result.name_.Add(other.name_);
+        }
+        if (other.HasIdentifierValue) {
+          IdentifierValue = other.IdentifierValue;
+        }
+        if (other.HasPositiveIntValue) {
+          PositiveIntValue = other.PositiveIntValue;
+        }
+        if (other.HasNegativeIntValue) {
+          NegativeIntValue = other.NegativeIntValue;
+        }
+        if (other.HasDoubleValue) {
+          DoubleValue = other.DoubleValue;
+        }
+        if (other.HasStringValue) {
+          StringValue = other.StringValue;
+        }
+        if (other.HasAggregateValue) {
+          AggregateValue = other.AggregateValue;
+        }
+        this.MergeUnknownFields(other.UnknownFields);
+        return this;
+      }
+      
+      public override Builder MergeFrom(pb::ICodedInputStream input) {
+        return MergeFrom(input, pb::ExtensionRegistry.Empty);
+      }
+      
+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+        PrepareBuilder();
+        pb::UnknownFieldSet.Builder unknownFields = null;
+        uint tag;
+        string field_name;
+        while (input.ReadTag(out tag, out field_name)) {
+          if(tag == 0 && field_name != null) {
+            int field_ordinal = global::System.Array.BinarySearch(_uninterpretedOptionFieldNames, field_name, global::System.StringComparer.Ordinal);
+            if(field_ordinal >= 0)
+              tag = _uninterpretedOptionFieldTags[field_ordinal];
+            else {
+              if (unknownFields == null) {
+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
+              }
+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
+              continue;
+            }
+          }
+          switch (tag) {
+            case 0: {
+              throw pb::InvalidProtocolBufferException.InvalidTag();
+            }
+            default: {
+              if (pb::WireFormat.IsEndGroupTag(tag)) {
+                if (unknownFields != null) {
+                  this.UnknownFields = unknownFields.Build();
+                }
+                return this;
+              }
+              if (unknownFields == null) {
+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
+              }
+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
+              break;
+            }
+            case 18: {
+              input.ReadMessageArray(tag, field_name, result.name_, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Types.NamePart.DefaultInstance, extensionRegistry);
+              break;
+            }
+            case 26: {
+              result.hasIdentifierValue = input.ReadString(ref result.identifierValue_);
+              break;
+            }
+            case 32: {
+              result.hasPositiveIntValue = input.ReadUInt64(ref result.positiveIntValue_);
+              break;
+            }
+            case 40: {
+              result.hasNegativeIntValue = input.ReadInt64(ref result.negativeIntValue_);
+              break;
+            }
+            case 49: {
+              result.hasDoubleValue = input.ReadDouble(ref result.doubleValue_);
+              break;
+            }
+            case 58: {
+              result.hasStringValue = input.ReadBytes(ref result.stringValue_);
+              break;
+            }
+            case 66: {
+              result.hasAggregateValue = input.ReadString(ref result.aggregateValue_);
+              break;
+            }
+          }
+        }
+        
+        if (unknownFields != null) {
+          this.UnknownFields = unknownFields.Build();
+        }
+        return this;
+      }
+      
+      
+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Types.NamePart> NameList {
+        get { return PrepareBuilder().name_; }
+      }
+      public int NameCount {
+        get { return result.NameCount; }
+      }
+      public global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Types.NamePart GetName(int index) {
+        return result.GetName(index);
+      }
+      public Builder SetName(int index, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Types.NamePart value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        result.name_[index] = value;
+        return this;
+      }
+      public Builder SetName(int index, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Types.NamePart.Builder builderForValue) {
+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
+        PrepareBuilder();
+        result.name_[index] = builderForValue.Build();
+        return this;
+      }
+      public Builder AddName(global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Types.NamePart value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        result.name_.Add(value);
+        return this;
+      }
+      public Builder AddName(global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Types.NamePart.Builder builderForValue) {
+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
+        PrepareBuilder();
+        result.name_.Add(builderForValue.Build());
+        return this;
+      }
+      public Builder AddRangeName(scg::IEnumerable<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Types.NamePart> values) {
+        PrepareBuilder();
+        result.name_.Add(values);
+        return this;
+      }
+      public Builder ClearName() {
+        PrepareBuilder();
+        result.name_.Clear();
+        return this;
+      }
+      
+      public bool HasIdentifierValue {
+        get { return result.hasIdentifierValue; }
+      }
+      public string IdentifierValue {
+        get { return result.IdentifierValue; }
+        set { SetIdentifierValue(value); }
+      }
+      public Builder SetIdentifierValue(string value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        result.hasIdentifierValue = true;
+        result.identifierValue_ = value;
+        return this;
+      }
+      public Builder ClearIdentifierValue() {
+        PrepareBuilder();
+        result.hasIdentifierValue = false;
+        result.identifierValue_ = "";
+        return this;
+      }
+      
+      public bool HasPositiveIntValue {
+        get { return result.hasPositiveIntValue; }
+      }
+      [global::System.CLSCompliant(false)]
+      public ulong PositiveIntValue {
+        get { return result.PositiveIntValue; }
+        set { SetPositiveIntValue(value); }
+      }
+      [global::System.CLSCompliant(false)]
+      public Builder SetPositiveIntValue(ulong value) {
+        PrepareBuilder();
+        result.hasPositiveIntValue = true;
+        result.positiveIntValue_ = value;
+        return this;
+      }
+      public Builder ClearPositiveIntValue() {
+        PrepareBuilder();
+        result.hasPositiveIntValue = false;
+        result.positiveIntValue_ = 0UL;
+        return this;
+      }
+      
+      public bool HasNegativeIntValue {
+        get { return result.hasNegativeIntValue; }
+      }
+      public long NegativeIntValue {
+        get { return result.NegativeIntValue; }
+        set { SetNegativeIntValue(value); }
+      }
+      public Builder SetNegativeIntValue(long value) {
+        PrepareBuilder();
+        result.hasNegativeIntValue = true;
+        result.negativeIntValue_ = value;
+        return this;
+      }
+      public Builder ClearNegativeIntValue() {
+        PrepareBuilder();
+        result.hasNegativeIntValue = false;
+        result.negativeIntValue_ = 0L;
+        return this;
+      }
+      
+      public bool HasDoubleValue {
+        get { return result.hasDoubleValue; }
+      }
+      public double DoubleValue {
+        get { return result.DoubleValue; }
+        set { SetDoubleValue(value); }
+      }
+      public Builder SetDoubleValue(double value) {
+        PrepareBuilder();
+        result.hasDoubleValue = true;
+        result.doubleValue_ = value;
+        return this;
+      }
+      public Builder ClearDoubleValue() {
+        PrepareBuilder();
+        result.hasDoubleValue = false;
+        result.doubleValue_ = 0D;
+        return this;
+      }
+      
+      public bool HasStringValue {
+        get { return result.hasStringValue; }
+      }
+      public pb::ByteString StringValue {
+        get { return result.StringValue; }
+        set { SetStringValue(value); }
+      }
+      public Builder SetStringValue(pb::ByteString value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        result.hasStringValue = true;
+        result.stringValue_ = value;
+        return this;
+      }
+      public Builder ClearStringValue() {
+        PrepareBuilder();
+        result.hasStringValue = false;
+        result.stringValue_ = pb::ByteString.Empty;
+        return this;
+      }
+      
+      public bool HasAggregateValue {
+        get { return result.hasAggregateValue; }
+      }
+      public string AggregateValue {
+        get { return result.AggregateValue; }
+        set { SetAggregateValue(value); }
+      }
+      public Builder SetAggregateValue(string value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        result.hasAggregateValue = true;
+        result.aggregateValue_ = value;
+        return this;
+      }
+      public Builder ClearAggregateValue() {
+        PrepareBuilder();
+        result.hasAggregateValue = false;
+        result.aggregateValue_ = "";
+        return this;
+      }
+    }
+    static UninterpretedOption() {
+      object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, null);
+    }
+  }
+  
+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+  [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+  [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
+  public sealed partial class SourceCodeInfo : pb::GeneratedMessage<SourceCodeInfo, SourceCodeInfo.Builder> {
+    private SourceCodeInfo() { }
+    private static readonly SourceCodeInfo defaultInstance = new SourceCodeInfo().MakeReadOnly();
+    private static readonly string[] _sourceCodeInfoFieldNames = new string[] { "location" };
+    private static readonly uint[] _sourceCodeInfoFieldTags = new uint[] { 10 };
+    public static SourceCodeInfo DefaultInstance {
+      get { return defaultInstance; }
+    }
+    
+    public override SourceCodeInfo DefaultInstanceForType {
+      get { return DefaultInstance; }
+    }
+    
+    protected override SourceCodeInfo ThisMessage {
+      get { return this; }
+    }
+    
+    public static pbd::MessageDescriptor Descriptor {
+      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_SourceCodeInfo__Descriptor; }
+    }
+    
+    protected override pb::FieldAccess.FieldAccessorTable<SourceCodeInfo, SourceCodeInfo.Builder> InternalFieldAccessors {
+      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_SourceCodeInfo__FieldAccessorTable; }
+    }
+    
+    #region Nested types
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
+    public static class Types {
+      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+      [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+      [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
+      public sealed partial class Location : pb::GeneratedMessage<Location, Location.Builder> {
+        private Location() { }
+        private static readonly Location defaultInstance = new Location().MakeReadOnly();
+        private static readonly string[] _locationFieldNames = new string[] { "path", "span" };
+        private static readonly uint[] _locationFieldTags = new uint[] { 10, 18 };
+        public static Location DefaultInstance {
+          get { return defaultInstance; }
+        }
+        
+        public override Location DefaultInstanceForType {
+          get { return DefaultInstance; }
+        }
+        
+        protected override Location ThisMessage {
+          get { return this; }
+        }
+        
+        public static pbd::MessageDescriptor Descriptor {
+          get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_SourceCodeInfo_Location__Descriptor; }
+        }
+        
+        protected override pb::FieldAccess.FieldAccessorTable<Location, Location.Builder> InternalFieldAccessors {
+          get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_SourceCodeInfo_Location__FieldAccessorTable; }
+        }
+        
+        public const int PathFieldNumber = 1;
+        private int pathMemoizedSerializedSize;
+        private pbc::PopsicleList<int> path_ = new pbc::PopsicleList<int>();
+        public scg::IList<int> PathList {
+          get { return pbc::Lists.AsReadOnly(path_); }
+        }
+        public int PathCount {
+          get { return path_.Count; }
+        }
+        public int GetPath(int index) {
+          return path_[index];
+        }
+        
+        public const int SpanFieldNumber = 2;
+        private int spanMemoizedSerializedSize;
+        private pbc::PopsicleList<int> span_ = new pbc::PopsicleList<int>();
+        public scg::IList<int> SpanList {
+          get { return pbc::Lists.AsReadOnly(span_); }
+        }
+        public int SpanCount {
+          get { return span_.Count; }
+        }
+        public int GetSpan(int index) {
+          return span_[index];
+        }
+        
+        public override bool IsInitialized {
+          get {
+            return true;
+          }
+        }
+        
+        public override void WriteTo(pb::ICodedOutputStream output) {
+          int size = SerializedSize;
+          string[] field_names = _locationFieldNames;
+          if (path_.Count > 0) {
+            output.WritePackedInt32Array(1, field_names[0], pathMemoizedSerializedSize, path_);
+          }
+          if (span_.Count > 0) {
+            output.WritePackedInt32Array(2, field_names[1], spanMemoizedSerializedSize, span_);
+          }
+          UnknownFields.WriteTo(output);
+        }
+        
+        private int memoizedSerializedSize = -1;
+        public override int SerializedSize {
+          get {
+            int size = memoizedSerializedSize;
+            if (size != -1) return size;
+            
+            size = 0;
+            {
+              int dataSize = 0;
+              foreach (int element in PathList) {
+                dataSize += pb::CodedOutputStream.ComputeInt32SizeNoTag(element);
+              }
+              size += dataSize;
+              if (path_.Count != 0) {
+                size += 1 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
+              }
+              pathMemoizedSerializedSize = dataSize;
+            }
+            {
+              int dataSize = 0;
+              foreach (int element in SpanList) {
+                dataSize += pb::CodedOutputStream.ComputeInt32SizeNoTag(element);
+              }
+              size += dataSize;
+              if (span_.Count != 0) {
+                size += 1 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
+              }
+              spanMemoizedSerializedSize = dataSize;
+            }
+            size += UnknownFields.SerializedSize;
+            memoizedSerializedSize = size;
+            return size;
+          }
+        }
+        
+        public static Location ParseFrom(pb::ByteString data) {
+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
+        }
+        public static Location ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
+        }
+        public static Location ParseFrom(byte[] data) {
+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
+        }
+        public static Location ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
+        }
+        public static Location ParseFrom(global::System.IO.Stream input) {
+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
+        }
+        public static Location ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
+        }
+        public static Location ParseDelimitedFrom(global::System.IO.Stream input) {
+          return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
+        }
+        public static Location ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
+          return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
+        }
+        public static Location ParseFrom(pb::ICodedInputStream input) {
+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
+        }
+        public static Location ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
+        }
+        private Location MakeReadOnly() {
+          path_.MakeReadOnly();
+          span_.MakeReadOnly();
+          return this;
+        }
+        
+        public static Builder CreateBuilder() { return new Builder(); }
+        public override Builder ToBuilder() { return CreateBuilder(this); }
+        public override Builder CreateBuilderForType() { return new Builder(); }
+        public static Builder CreateBuilder(Location prototype) {
+          return new Builder(prototype);
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+        [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
+        public sealed partial class Builder : pb::GeneratedBuilder<Location, Builder> {
+          protected override Builder ThisBuilder {
+            get { return this; }
+          }
+          public Builder() {
+            result = DefaultInstance;
+            resultIsReadOnly = true;
+          }
+          internal Builder(Location cloneFrom) {
+            result = cloneFrom;
+            resultIsReadOnly = true;
+          }
+          
+          private bool resultIsReadOnly;
+          private Location result;
+          
+          private Location PrepareBuilder() {
+            if (resultIsReadOnly) {
+              Location original = result;
+              result = new Location();
+              resultIsReadOnly = false;
+              MergeFrom(original);
+            }
+            return result;
+          }
+          
+          public override bool IsInitialized {
+            get { return result.IsInitialized; }
+          }
+          
+          protected override Location MessageBeingBuilt {
+            get { return PrepareBuilder(); }
+          }
+          
+          public override Builder Clear() {
+            result = DefaultInstance;
+            resultIsReadOnly = true;
+            return this;
+          }
+          
+          public override Builder Clone() {
+            if (resultIsReadOnly) {
+              return new Builder(result);
+            } else {
+              return new Builder().MergeFrom(result);
+            }
+          }
+          
+          public override pbd::MessageDescriptor DescriptorForType {
+            get { return global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Types.Location.Descriptor; }
+          }
+          
+          public override Location DefaultInstanceForType {
+            get { return global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Types.Location.DefaultInstance; }
+          }
+          
+          public override Location BuildPartial() {
+            if (resultIsReadOnly) {
+              return result;
+            }
+            resultIsReadOnly = true;
+            return result.MakeReadOnly();
+          }
+          
+          public override Builder MergeFrom(pb::IMessage other) {
+            if (other is Location) {
+              return MergeFrom((Location) other);
+            } else {
+              base.MergeFrom(other);
+              return this;
+            }
+          }
+          
+          public override Builder MergeFrom(Location other) {
+            if (other == global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Types.Location.DefaultInstance) return this;
+            PrepareBuilder();
+            if (other.path_.Count != 0) {
+              result.path_.Add(other.path_);
+            }
+            if (other.span_.Count != 0) {
+              result.span_.Add(other.span_);
+            }
+            this.MergeUnknownFields(other.UnknownFields);
+            return this;
+          }
+          
+          public override Builder MergeFrom(pb::ICodedInputStream input) {
+            return MergeFrom(input, pb::ExtensionRegistry.Empty);
+          }
+          
+          public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+            PrepareBuilder();
+            pb::UnknownFieldSet.Builder unknownFields = null;
+            uint tag;
+            string field_name;
+            while (input.ReadTag(out tag, out field_name)) {
+              if(tag == 0 && field_name != null) {
+                int field_ordinal = global::System.Array.BinarySearch(_locationFieldNames, field_name, global::System.StringComparer.Ordinal);
+                if(field_ordinal >= 0)
+                  tag = _locationFieldTags[field_ordinal];
+                else {
+                  if (unknownFields == null) {
+                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
+                  }
+                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
+                  continue;
+                }
+              }
+              switch (tag) {
+                case 0: {
+                  throw pb::InvalidProtocolBufferException.InvalidTag();
+                }
+                default: {
+                  if (pb::WireFormat.IsEndGroupTag(tag)) {
+                    if (unknownFields != null) {
+                      this.UnknownFields = unknownFields.Build();
+                    }
+                    return this;
+                  }
+                  if (unknownFields == null) {
+                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
+                  }
+                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
+                  break;
+                }
+                case 10:
+                case 8: {
+                  input.ReadInt32Array(tag, field_name, result.path_);
+                  break;
+                }
+                case 18:
+                case 16: {
+                  input.ReadInt32Array(tag, field_name, result.span_);
+                  break;
+                }
+              }
+            }
+            
+            if (unknownFields != null) {
+              this.UnknownFields = unknownFields.Build();
+            }
+            return this;
+          }
+          
+          
+          public pbc::IPopsicleList<int> PathList {
+            get { return PrepareBuilder().path_; }
+          }
+          public int PathCount {
+            get { return result.PathCount; }
+          }
+          public int GetPath(int index) {
+            return result.GetPath(index);
+          }
+          public Builder SetPath(int index, int value) {
+            PrepareBuilder();
+            result.path_[index] = value;
+            return this;
+          }
+          public Builder AddPath(int value) {
+            PrepareBuilder();
+            result.path_.Add(value);
+            return this;
+          }
+          public Builder AddRangePath(scg::IEnumerable<int> values) {
+            PrepareBuilder();
+            result.path_.Add(values);
+            return this;
+          }
+          public Builder ClearPath() {
+            PrepareBuilder();
+            result.path_.Clear();
+            return this;
+          }
+          
+          public pbc::IPopsicleList<int> SpanList {
+            get { return PrepareBuilder().span_; }
+          }
+          public int SpanCount {
+            get { return result.SpanCount; }
+          }
+          public int GetSpan(int index) {
+            return result.GetSpan(index);
+          }
+          public Builder SetSpan(int index, int value) {
+            PrepareBuilder();
+            result.span_[index] = value;
+            return this;
+          }
+          public Builder AddSpan(int value) {
+            PrepareBuilder();
+            result.span_.Add(value);
+            return this;
+          }
+          public Builder AddRangeSpan(scg::IEnumerable<int> values) {
+            PrepareBuilder();
+            result.span_.Add(values);
+            return this;
+          }
+          public Builder ClearSpan() {
+            PrepareBuilder();
+            result.span_.Clear();
+            return this;
+          }
+        }
+        static Location() {
+          object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, null);
+        }
+      }
+      
+    }
+    #endregion
+    
+    public const int LocationFieldNumber = 1;
+    private pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Types.Location> location_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Types.Location>();
+    public scg::IList<global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Types.Location> LocationList {
+      get { return location_; }
+    }
+    public int LocationCount {
+      get { return location_.Count; }
+    }
+    public global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Types.Location GetLocation(int index) {
+      return location_[index];
+    }
+    
+    public override bool IsInitialized {
+      get {
+        return true;
+      }
+    }
+    
+    public override void WriteTo(pb::ICodedOutputStream output) {
+      int size = SerializedSize;
+      string[] field_names = _sourceCodeInfoFieldNames;
+      if (location_.Count > 0) {
+        output.WriteMessageArray(1, field_names[0], location_);
+      }
+      UnknownFields.WriteTo(output);
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public override int SerializedSize {
+      get {
+        int size = memoizedSerializedSize;
+        if (size != -1) return size;
+        
+        size = 0;
+        foreach (global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Types.Location element in LocationList) {
+          size += pb::CodedOutputStream.ComputeMessageSize(1, element);
+        }
+        size += UnknownFields.SerializedSize;
+        memoizedSerializedSize = size;
+        return size;
+      }
+    }
+    
+    public static SourceCodeInfo ParseFrom(pb::ByteString data) {
+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
+    }
+    public static SourceCodeInfo ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
+    }
+    public static SourceCodeInfo ParseFrom(byte[] data) {
+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
+    }
+    public static SourceCodeInfo ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
+    }
+    public static SourceCodeInfo ParseFrom(global::System.IO.Stream input) {
+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
+    }
+    public static SourceCodeInfo ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
+    }
+    public static SourceCodeInfo ParseDelimitedFrom(global::System.IO.Stream input) {
+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
+    }
+    public static SourceCodeInfo ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
+    }
+    public static SourceCodeInfo ParseFrom(pb::ICodedInputStream input) {
+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
+    }
+    public static SourceCodeInfo ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
+    }
+    private SourceCodeInfo MakeReadOnly() {
+      location_.MakeReadOnly();
+      return this;
+    }
+    
+    public static Builder CreateBuilder() { return new Builder(); }
+    public override Builder ToBuilder() { return CreateBuilder(this); }
+    public override Builder CreateBuilderForType() { return new Builder(); }
+    public static Builder CreateBuilder(SourceCodeInfo prototype) {
+      return new Builder(prototype);
+    }
+    
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
+    public sealed partial class Builder : pb::GeneratedBuilder<SourceCodeInfo, Builder> {
+      protected override Builder ThisBuilder {
+        get { return this; }
+      }
+      public Builder() {
+        result = DefaultInstance;
+        resultIsReadOnly = true;
+      }
+      internal Builder(SourceCodeInfo cloneFrom) {
+        result = cloneFrom;
+        resultIsReadOnly = true;
+      }
+      
+      private bool resultIsReadOnly;
+      private SourceCodeInfo result;
+      
+      private SourceCodeInfo PrepareBuilder() {
+        if (resultIsReadOnly) {
+          SourceCodeInfo original = result;
+          result = new SourceCodeInfo();
+          resultIsReadOnly = false;
+          MergeFrom(original);
+        }
+        return result;
+      }
+      
+      public override bool IsInitialized {
+        get { return result.IsInitialized; }
+      }
+      
+      protected override SourceCodeInfo MessageBeingBuilt {
+        get { return PrepareBuilder(); }
+      }
+      
+      public override Builder Clear() {
+        result = DefaultInstance;
+        resultIsReadOnly = true;
+        return this;
+      }
+      
+      public override Builder Clone() {
+        if (resultIsReadOnly) {
+          return new Builder(result);
+        } else {
+          return new Builder().MergeFrom(result);
+        }
+      }
+      
+      public override pbd::MessageDescriptor DescriptorForType {
+        get { return global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Descriptor; }
+      }
+      
+      public override SourceCodeInfo DefaultInstanceForType {
+        get { return global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.DefaultInstance; }
+      }
+      
+      public override SourceCodeInfo BuildPartial() {
+        if (resultIsReadOnly) {
+          return result;
+        }
+        resultIsReadOnly = true;
+        return result.MakeReadOnly();
+      }
+      
+      public override Builder MergeFrom(pb::IMessage other) {
+        if (other is SourceCodeInfo) {
+          return MergeFrom((SourceCodeInfo) other);
+        } else {
+          base.MergeFrom(other);
+          return this;
+        }
+      }
+      
+      public override Builder MergeFrom(SourceCodeInfo other) {
+        if (other == global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.DefaultInstance) return this;
+        PrepareBuilder();
+        if (other.location_.Count != 0) {
+          result.location_.Add(other.location_);
+        }
+        this.MergeUnknownFields(other.UnknownFields);
+        return this;
+      }
+      
+      public override Builder MergeFrom(pb::ICodedInputStream input) {
+        return MergeFrom(input, pb::ExtensionRegistry.Empty);
+      }
+      
+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+        PrepareBuilder();
+        pb::UnknownFieldSet.Builder unknownFields = null;
+        uint tag;
+        string field_name;
+        while (input.ReadTag(out tag, out field_name)) {
+          if(tag == 0 && field_name != null) {
+            int field_ordinal = global::System.Array.BinarySearch(_sourceCodeInfoFieldNames, field_name, global::System.StringComparer.Ordinal);
+            if(field_ordinal >= 0)
+              tag = _sourceCodeInfoFieldTags[field_ordinal];
+            else {
+              if (unknownFields == null) {
+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
+              }
+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
+              continue;
+            }
+          }
+          switch (tag) {
+            case 0: {
+              throw pb::InvalidProtocolBufferException.InvalidTag();
+            }
+            default: {
+              if (pb::WireFormat.IsEndGroupTag(tag)) {
+                if (unknownFields != null) {
+                  this.UnknownFields = unknownFields.Build();
+                }
+                return this;
+              }
+              if (unknownFields == null) {
+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
+              }
+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
+              break;
+            }
+            case 10: {
+              input.ReadMessageArray(tag, field_name, result.location_, global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Types.Location.DefaultInstance, extensionRegistry);
+              break;
+            }
+          }
+        }
+        
+        if (unknownFields != null) {
+          this.UnknownFields = unknownFields.Build();
+        }
+        return this;
+      }
+      
+      
+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Types.Location> LocationList {
+        get { return PrepareBuilder().location_; }
+      }
+      public int LocationCount {
+        get { return result.LocationCount; }
+      }
+      public global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Types.Location GetLocation(int index) {
+        return result.GetLocation(index);
+      }
+      public Builder SetLocation(int index, global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Types.Location value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        result.location_[index] = value;
+        return this;
+      }
+      public Builder SetLocation(int index, global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Types.Location.Builder builderForValue) {
+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
+        PrepareBuilder();
+        result.location_[index] = builderForValue.Build();
+        return this;
+      }
+      public Builder AddLocation(global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Types.Location value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        PrepareBuilder();
+        result.location_.Add(value);
+        return this;
+      }
+      public Builder AddLocation(global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Types.Location.Builder builderForValue) {
+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
+        PrepareBuilder();
+        result.location_.Add(builderForValue.Build());
+        return this;
+      }
+      public Builder AddRangeLocation(scg::IEnumerable<global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Types.Location> values) {
+        PrepareBuilder();
+        result.location_.Add(values);
+        return this;
+      }
+      public Builder ClearLocation() {
+        PrepareBuilder();
+        result.location_.Clear();
+        return this;
+      }
+    }
+    static SourceCodeInfo() {
+      object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, null);
+    }
+  }
+  
+  #endregion
+  
+}
+
+#endregion Designer generated code

+ 7 - 0
CSharp/App/Modules/BehaviorTree/Packages.config

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+  <package id="CommonServiceLocator" version="1.0" targetFramework="net40" />
+  <package id="NLog" version="2.0.0.2000" targetFramework="net40" />
+  <package id="Prism" version="4.1.0.0" targetFramework="net40" />
+  <package id="Prism.MEFExtensions" version="4.1.0.0" targetFramework="net40" />
+</packages>

+ 28 - 28
CSharp/Modules/BehaviorTree/TreeNode.cs → CSharp/App/Modules/BehaviorTree/TreeNode.cs

@@ -1,29 +1,29 @@
-namespace Modules.BehaviorTree
-{
-	public class TreeNode
-	{
-		public TreeNode(double x, double y)
-		{
-			this.X = x;
-			this.Y = y;
-		}
-
-		public double X
-		{
-			get;
-			set;
-		}
-
-		public double Y
-		{
-			get;
-			set;
-		}
-
-		public int Type
-		{
-			get;
-			set;
-		}
-	}
+namespace Modules.BehaviorTree
+{
+	public class TreeNode
+	{
+		public TreeNode(double x, double y)
+		{
+			this.X = x;
+			this.Y = y;
+		}
+
+		public double X
+		{
+			get;
+			set;
+		}
+
+		public double Y
+		{
+			get;
+			set;
+		}
+
+		public int Type
+		{
+			get;
+			set;
+		}
+	}
 }

+ 280 - 280
CSharp/Modules/BehaviorTree/TreeNodeViewModel.cs → CSharp/App/Modules/BehaviorTree/TreeNodeViewModel.cs

@@ -1,281 +1,281 @@
-using System.Collections.ObjectModel;
-using Microsoft.Practices.Prism.ViewModel;
-
-namespace Modules.BehaviorTree
-{
-	public class TreeNodeViewModel : NotificationObject
-	{
-		private static int globalNum;
-		private readonly int num;
-		private const double width = 80;
-		private const double height = 50;
-		private readonly TreeNode treeNode;
-		private double connectorX2;
-		private double connectorY2;
-		private double prelim;
-		private double modify;
-		private double ancestorModify;
-		private TreeNodeViewModel parent;
-		private ObservableCollection<TreeNodeViewModel> children = new ObservableCollection<TreeNodeViewModel>();
-
-		public TreeNodeViewModel(TreeNode treeNode, TreeNodeViewModel parent)
-		{
-			this.num = globalNum++;
-			this.treeNode = treeNode;
-			this.parent = parent ?? this;
-			if (this.parent == this)
-			{
-				this.connectorX2 = 0;
-				this.connectorY2 = Height / 2;
-			}
-			else
-			{
-				this.connectorX2 = Width + this.Parent.X - this.X;
-				this.connectorY2 = Height / 2 + this.Parent.Y - this.Y;
-			}
-		}
-
-		public int Num
-		{
-			get
-			{
-				return this.num;
-			}
-		}
-
-		public static double Width
-		{
-			get
-			{
-				return width;
-			}
-		}
-
-		public static double Height
-		{
-			get
-			{
-				return height;
-			}
-		}
-
-		public bool IsRoot
-		{
-			get
-			{
-				return this.Parent == this;
-			}
-		}
-
-		public double Prelim
-		{
-			get
-			{
-				return this.prelim;
-			}
-			set
-			{
-				this.prelim = value;
-			}
-		}
-
-		public double Modify
-		{
-			get
-			{
-				return this.modify;
-			}
-			set
-			{
-				this.modify = value;
-			}
-		}
-
-		public double X
-		{
-			get
-			{
-				return this.treeNode.X;
-			}
-			set
-			{
-				if (this.treeNode.X == value)
-				{
-					return;
-				}
-				this.treeNode.X = value;
-				this.RaisePropertyChanged("X");
-
-				this.ConnectorX2 = Width / 2 + this.Parent.X - this.X;
-
-				foreach (TreeNodeViewModel child in this.Children)
-				{
-					child.ConnectorX2 = Width / 2 + this.treeNode.X - child.X;
-				}
-			}
-		}
-
-		public double Y
-		{
-			get
-			{
-				return this.treeNode.Y;
-			}
-			set
-			{
-				if (this.treeNode.Y == value)
-				{
-					return;
-				}
-				this.treeNode.Y = value;
-				this.RaisePropertyChanged("Y");
-
-				this.ConnectorY2 = Height + this.Parent.Y - this.Y;
-
-				foreach (var child in this.Children)
-				{
-					child.ConnectorY2 = Height + this.treeNode.Y - child.Y;
-				}
-			}
-		}
-
-		public double ConnectorX1
-		{
-			get
-			{
-				return Width / 2;
-			}
-		}
-
-		public double ConnectorY1
-		{
-			get
-			{
-				return 0;
-			}
-		}
-
-		public double ConnectorX2
-		{
-			get
-			{
-				return this.IsRoot? width / 2 : this.connectorX2;
-			}
-			set
-			{
-				this.connectorX2 = value;
-				this.RaisePropertyChanged("ConnectorX2");
-			}
-		}
-
-		public double ConnectorY2
-		{
-			get
-			{
-				return this.IsRoot? 0 : this.connectorY2;
-			}
-			set
-			{
-				this.connectorY2 = value;
-				this.RaisePropertyChanged("ConnectorY2");
-			}
-		}
-
-		public int Type
-		{
-			get
-			{
-				return this.treeNode.Type;
-			}
-			set
-			{
-				if (this.treeNode.Type == value)
-				{
-					return;
-				}
-				this.treeNode.Type = value;
-				this.RaisePropertyChanged("Type");
-			}
-		}
-
-		public TreeNodeViewModel Parent
-		{
-			get
-			{
-				return this.parent;
-			}
-			set
-			{
-				this.parent = value;
-			}
-		}
-
-		public ObservableCollection<TreeNodeViewModel> Children
-		{
-			get
-			{
-				return this.children;
-			}
-			set
-			{
-				this.children = value;
-			}
-		}
-
-		public TreeNodeViewModel LeftSibling
-		{
-			get
-			{
-				if (this.IsRoot)
-				{
-					return null;
-				}
-
-				int index = this.Parent.Children.IndexOf(this);
-				return index == 0? null : this.Parent.Children[index - 1];
-			}
-		}
-
-		public TreeNodeViewModel LastChild
-		{
-			get
-			{
-				if (this.Children.Count == 0)
-				{
-					return null;
-				}
-
-				int maxIndex = this.Children.Count - 1;
-				return this.Children[maxIndex];
-			}
-		}
-
-		public TreeNodeViewModel FirstChild
-		{
-			get
-			{
-				return this.Children.Count == 0? null : this.Children[0];
-			}
-		}
-
-		public bool IsLeaf
-		{
-			get
-			{
-				return this.Children.Count == 0;
-			}
-		}
-
-		public double AncestorModify
-		{
-			get
-			{
-				return this.ancestorModify;
-			}
-			set
-			{
-				this.ancestorModify = value;
-			}
-		}
-	}
+using System.Collections.ObjectModel;
+using Microsoft.Practices.Prism.ViewModel;
+
+namespace Modules.BehaviorTree
+{
+	public class TreeNodeViewModel : NotificationObject
+	{
+		private static int globalNum;
+		private readonly int num;
+		private const double width = 80;
+		private const double height = 50;
+		private readonly TreeNode treeNode;
+		private double connectorX2;
+		private double connectorY2;
+		private double prelim;
+		private double modify;
+		private double ancestorModify;
+		private TreeNodeViewModel parent;
+		private ObservableCollection<TreeNodeViewModel> children = new ObservableCollection<TreeNodeViewModel>();
+
+		public TreeNodeViewModel(TreeNode treeNode, TreeNodeViewModel parent)
+		{
+			this.num = globalNum++;
+			this.treeNode = treeNode;
+			this.parent = parent ?? this;
+			if (this.parent == this)
+			{
+				this.connectorX2 = 0;
+				this.connectorY2 = Height / 2;
+			}
+			else
+			{
+				this.connectorX2 = Width + this.Parent.X - this.X;
+				this.connectorY2 = Height / 2 + this.Parent.Y - this.Y;
+			}
+		}
+
+		public int Num
+		{
+			get
+			{
+				return this.num;
+			}
+		}
+
+		public static double Width
+		{
+			get
+			{
+				return width;
+			}
+		}
+
+		public static double Height
+		{
+			get
+			{
+				return height;
+			}
+		}
+
+		public bool IsRoot
+		{
+			get
+			{
+				return this.Parent == this;
+			}
+		}
+
+		public double Prelim
+		{
+			get
+			{
+				return this.prelim;
+			}
+			set
+			{
+				this.prelim = value;
+			}
+		}
+
+		public double Modify
+		{
+			get
+			{
+				return this.modify;
+			}
+			set
+			{
+				this.modify = value;
+			}
+		}
+
+		public double X
+		{
+			get
+			{
+				return this.treeNode.X;
+			}
+			set
+			{
+				if (this.treeNode.X == value)
+				{
+					return;
+				}
+				this.treeNode.X = value;
+				this.RaisePropertyChanged("X");
+
+				this.ConnectorX2 = Width / 2 + this.Parent.X - this.X;
+
+				foreach (TreeNodeViewModel child in this.Children)
+				{
+					child.ConnectorX2 = Width / 2 + this.treeNode.X - child.X;
+				}
+			}
+		}
+
+		public double Y
+		{
+			get
+			{
+				return this.treeNode.Y;
+			}
+			set
+			{
+				if (this.treeNode.Y == value)
+				{
+					return;
+				}
+				this.treeNode.Y = value;
+				this.RaisePropertyChanged("Y");
+
+				this.ConnectorY2 = Height + this.Parent.Y - this.Y;
+
+				foreach (var child in this.Children)
+				{
+					child.ConnectorY2 = Height + this.treeNode.Y - child.Y;
+				}
+			}
+		}
+
+		public double ConnectorX1
+		{
+			get
+			{
+				return Width / 2;
+			}
+		}
+
+		public double ConnectorY1
+		{
+			get
+			{
+				return 0;
+			}
+		}
+
+		public double ConnectorX2
+		{
+			get
+			{
+				return this.IsRoot? width / 2 : this.connectorX2;
+			}
+			set
+			{
+				this.connectorX2 = value;
+				this.RaisePropertyChanged("ConnectorX2");
+			}
+		}
+
+		public double ConnectorY2
+		{
+			get
+			{
+				return this.IsRoot? 0 : this.connectorY2;
+			}
+			set
+			{
+				this.connectorY2 = value;
+				this.RaisePropertyChanged("ConnectorY2");
+			}
+		}
+
+		public int Type
+		{
+			get
+			{
+				return this.treeNode.Type;
+			}
+			set
+			{
+				if (this.treeNode.Type == value)
+				{
+					return;
+				}
+				this.treeNode.Type = value;
+				this.RaisePropertyChanged("Type");
+			}
+		}
+
+		public TreeNodeViewModel Parent
+		{
+			get
+			{
+				return this.parent;
+			}
+			set
+			{
+				this.parent = value;
+			}
+		}
+
+		public ObservableCollection<TreeNodeViewModel> Children
+		{
+			get
+			{
+				return this.children;
+			}
+			set
+			{
+				this.children = value;
+			}
+		}
+
+		public TreeNodeViewModel LeftSibling
+		{
+			get
+			{
+				if (this.IsRoot)
+				{
+					return null;
+				}
+
+				int index = this.Parent.Children.IndexOf(this);
+				return index == 0? null : this.Parent.Children[index - 1];
+			}
+		}
+
+		public TreeNodeViewModel LastChild
+		{
+			get
+			{
+				if (this.Children.Count == 0)
+				{
+					return null;
+				}
+
+				int maxIndex = this.Children.Count - 1;
+				return this.Children[maxIndex];
+			}
+		}
+
+		public TreeNodeViewModel FirstChild
+		{
+			get
+			{
+				return this.Children.Count == 0? null : this.Children[0];
+			}
+		}
+
+		public bool IsLeaf
+		{
+			get
+			{
+				return this.Children.Count == 0;
+			}
+		}
+
+		public double AncestorModify
+		{
+			get
+			{
+				return this.ancestorModify;
+			}
+			set
+			{
+				this.ancestorModify = value;
+			}
+		}
+	}
 }

+ 28 - 26
CSharp/CSharp.sln

@@ -1,14 +1,8 @@
 
 Microsoft Visual Studio Solution File, Format Version 11.00
 # Visual Studio 2010
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Editor", "Editor\Editor.csproj", "{C46F3337-0F48-4A72-84AD-8FDD1F159BB0}"
-EndProject
 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Modules", "Modules", "{C4C64188-4FAE-4CC3-A9E6-D9D4AF7429B6}"
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BehaviorTree", "Modules\BehaviorTree\BehaviorTree.csproj", "{6CD185D1-08E0-4729-A999-2D5B57BA8193}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Controls", "Controls", "{EEC1B63E-05B1-4107-9627-B2542EED2B28}"
-EndProject
 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{EAEF8202-B3F6-4F9B-9EFD-41C374433612}"
 	ProjectSection(SolutionItems) = preProject
 		.nuget\NuGet.Config = .nuget\NuGet.Config
@@ -20,6 +14,12 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Platform", "Platform", "{AD
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Infrastructure", "Platform\Infrastructure\Infrastructure.csproj", "{48A2E149-0DAC-41B4-BB54-DFBCCD6D42B3}"
 EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "App", "App", "{6E9D97F0-4243-452E-B832-1A855B8118EB}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BehaviorTree", "App\Modules\BehaviorTree\BehaviorTree.csproj", "{6CD185D1-08E0-4729-A999-2D5B57BA8193}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Editor", "App\Editor\Editor.csproj", "{C46F3337-0F48-4A72-84AD-8FDD1F159BB0}"
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
@@ -30,26 +30,6 @@ Global
 		Release|x86 = Release|x86
 	EndGlobalSection
 	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{C46F3337-0F48-4A72-84AD-8FDD1F159BB0}.Debug|Any CPU.ActiveCfg = Debug|x86
-		{C46F3337-0F48-4A72-84AD-8FDD1F159BB0}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
-		{C46F3337-0F48-4A72-84AD-8FDD1F159BB0}.Debug|Mixed Platforms.Build.0 = Debug|x86
-		{C46F3337-0F48-4A72-84AD-8FDD1F159BB0}.Debug|x86.ActiveCfg = Debug|x86
-		{C46F3337-0F48-4A72-84AD-8FDD1F159BB0}.Debug|x86.Build.0 = Debug|x86
-		{C46F3337-0F48-4A72-84AD-8FDD1F159BB0}.Release|Any CPU.ActiveCfg = Release|x86
-		{C46F3337-0F48-4A72-84AD-8FDD1F159BB0}.Release|Mixed Platforms.ActiveCfg = Release|x86
-		{C46F3337-0F48-4A72-84AD-8FDD1F159BB0}.Release|Mixed Platforms.Build.0 = Release|x86
-		{C46F3337-0F48-4A72-84AD-8FDD1F159BB0}.Release|x86.ActiveCfg = Release|x86
-		{C46F3337-0F48-4A72-84AD-8FDD1F159BB0}.Release|x86.Build.0 = Release|x86
-		{6CD185D1-08E0-4729-A999-2D5B57BA8193}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{6CD185D1-08E0-4729-A999-2D5B57BA8193}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{6CD185D1-08E0-4729-A999-2D5B57BA8193}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
-		{6CD185D1-08E0-4729-A999-2D5B57BA8193}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
-		{6CD185D1-08E0-4729-A999-2D5B57BA8193}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{6CD185D1-08E0-4729-A999-2D5B57BA8193}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{6CD185D1-08E0-4729-A999-2D5B57BA8193}.Release|Any CPU.Build.0 = Release|Any CPU
-		{6CD185D1-08E0-4729-A999-2D5B57BA8193}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
-		{6CD185D1-08E0-4729-A999-2D5B57BA8193}.Release|Mixed Platforms.Build.0 = Release|Any CPU
-		{6CD185D1-08E0-4729-A999-2D5B57BA8193}.Release|x86.ActiveCfg = Release|Any CPU
 		{48A2E149-0DAC-41B4-BB54-DFBCCD6D42B3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{48A2E149-0DAC-41B4-BB54-DFBCCD6D42B3}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{48A2E149-0DAC-41B4-BB54-DFBCCD6D42B3}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
@@ -60,11 +40,33 @@ Global
 		{48A2E149-0DAC-41B4-BB54-DFBCCD6D42B3}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
 		{48A2E149-0DAC-41B4-BB54-DFBCCD6D42B3}.Release|Mixed Platforms.Build.0 = Release|Any CPU
 		{48A2E149-0DAC-41B4-BB54-DFBCCD6D42B3}.Release|x86.ActiveCfg = Release|Any CPU
+		{6CD185D1-08E0-4729-A999-2D5B57BA8193}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{6CD185D1-08E0-4729-A999-2D5B57BA8193}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{6CD185D1-08E0-4729-A999-2D5B57BA8193}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{6CD185D1-08E0-4729-A999-2D5B57BA8193}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+		{6CD185D1-08E0-4729-A999-2D5B57BA8193}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{6CD185D1-08E0-4729-A999-2D5B57BA8193}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{6CD185D1-08E0-4729-A999-2D5B57BA8193}.Release|Any CPU.Build.0 = Release|Any CPU
+		{6CD185D1-08E0-4729-A999-2D5B57BA8193}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{6CD185D1-08E0-4729-A999-2D5B57BA8193}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+		{6CD185D1-08E0-4729-A999-2D5B57BA8193}.Release|x86.ActiveCfg = Release|Any CPU
+		{C46F3337-0F48-4A72-84AD-8FDD1F159BB0}.Debug|Any CPU.ActiveCfg = Debug|x86
+		{C46F3337-0F48-4A72-84AD-8FDD1F159BB0}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
+		{C46F3337-0F48-4A72-84AD-8FDD1F159BB0}.Debug|Mixed Platforms.Build.0 = Debug|x86
+		{C46F3337-0F48-4A72-84AD-8FDD1F159BB0}.Debug|x86.ActiveCfg = Debug|x86
+		{C46F3337-0F48-4A72-84AD-8FDD1F159BB0}.Debug|x86.Build.0 = Debug|x86
+		{C46F3337-0F48-4A72-84AD-8FDD1F159BB0}.Release|Any CPU.ActiveCfg = Release|x86
+		{C46F3337-0F48-4A72-84AD-8FDD1F159BB0}.Release|Mixed Platforms.ActiveCfg = Release|x86
+		{C46F3337-0F48-4A72-84AD-8FDD1F159BB0}.Release|Mixed Platforms.Build.0 = Release|x86
+		{C46F3337-0F48-4A72-84AD-8FDD1F159BB0}.Release|x86.ActiveCfg = Release|x86
+		{C46F3337-0F48-4A72-84AD-8FDD1F159BB0}.Release|x86.Build.0 = Release|x86
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
 	EndGlobalSection
 	GlobalSection(NestedProjects) = preSolution
+		{C4C64188-4FAE-4CC3-A9E6-D9D4AF7429B6} = {6E9D97F0-4243-452E-B832-1A855B8118EB}
+		{C46F3337-0F48-4A72-84AD-8FDD1F159BB0} = {6E9D97F0-4243-452E-B832-1A855B8118EB}
 		{6CD185D1-08E0-4729-A999-2D5B57BA8193} = {C4C64188-4FAE-4CC3-A9E6-D9D4AF7429B6}
 		{48A2E149-0DAC-41B4-BB54-DFBCCD6D42B3} = {ADBF5F67-B480-4A93-9D50-C81856FC61A9}
 	EndGlobalSection

+ 1 - 0
CSharp/CSharp.sln.DotSettings

@@ -38,6 +38,7 @@
 	<s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/REDUNDANT_THIS_QUALIFIER_STYLE/@EntryValue">ALWAYS_USE</s:String>
 	<s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/SIMPLE_EMBEDDED_STATEMENT_STYLE/@EntryValue">LINE_BREAK</s:String>
 	<s:Boolean x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/SPACE_AROUND_MULTIPLICATIVE_OP/@EntryValue">True</s:Boolean>
+	<s:Boolean x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/SPACE_BEFORE_TERNARY_QUEST/@EntryValue">False</s:Boolean>
 	<s:Boolean x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/STICK_COMMENT/@EntryValue">False</s:Boolean>
 	<s:Boolean x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/WRAP_AFTER_DECLARATION_LPAR/@EntryValue">True</s:Boolean>
 	<s:Boolean x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/WRAP_AFTER_INVOCATION_LPAR/@EntryValue">True</s:Boolean>

+ 0 - 6
CSharp/Editor/Packages.config

@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<packages>
-	<package id="CommonServiceLocator" version="1.0" targetFramework="net40-Client" />
-	<package id="Prism" version="4.1.0.0" targetFramework="net40-Client" />
-	<package id="Prism.MEFExtensions" version="4.1.0.0" targetFramework="net40-Client" />
-</packages>

+ 0 - 7
CSharp/Modules/BehaviorTree/Packages.config

@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<packages>
-	<package id="CommonServiceLocator" version="1.0" />
-	<package id="NLog" version="2.0.0.2000" />
-	<package id="Prism" version="4.1.0.0" />
-	<package id="Prism.MEFExtensions" version="4.1.0.0" />
-</packages>

+ 0 - 111
CSharp/Modules/BehaviorTree/google/protobuf/csharp_options.proto

@@ -1,111 +0,0 @@
-// Extra options for C# generator
-
-import "google/protobuf/descriptor.proto";
-
-package google.protobuf;
-
-message CSharpFileOptions {
-
-  // Namespace for generated classes; defaults to the package.
-  optional string namespace = 1;
-  
-  // Name of the "umbrella" class used for metadata about all
-  // the messages within this file. Default is based on the name
-  // of the file.
-  optional string umbrella_classname = 2;
-  
-  // Whether classes should be public (true) or internal (false)
-  optional bool public_classes = 3 [default = true];
-
-  // Whether to generate a single file for everything within the
-  // .proto file (false), or one file per message (true).
-  // This option is not currently honored; please log a feature
-  // request if you really want it.
-  optional bool multiple_files = 4;
-
-  // Whether to nest messages within a single umbrella class (true)
-  // or create the umbrella class as a peer, with messages as
-  // top-level classes in the namespace (false)
-  optional bool nest_classes = 5;
-  
-  // Generate appropriate support for Code Contracts
-  // (Ongoing; support should improve over time)
-  optional bool code_contracts = 6;
-  
-  // Create subdirectories for namespaces, e.g. namespace "Foo.Bar"
-  // would generate files within [output directory]/Foo/Bar
-  optional bool expand_namespace_directories = 7;
-
-  // Generate attributes indicating non-CLS-compliance
-  optional bool cls_compliance = 8 [default = true];
-  
-  // Generate messages/builders with the [Serializable] attribute
-  optional bool add_serializable = 9 [default = false];
-  
-  // Generates a private ctor for Message types
-  optional bool generate_private_ctor = 10 [default = true];
-
-  // The extension that should be appended to the umbrella_classname when creating files.
-  optional string file_extension = 221 [default = ".cs"];
-  
-  // A nested namespace for the umbrella class.  Helpful for name collisions caused by 
-  // umbrella_classname conflicting with an existing type.  This will be automatically
-  // set to 'Proto' if a collision is detected with types being generated.  This value
-  // is ignored when nest_classes == true
-  optional string umbrella_namespace = 222;
-  
-  // The output path for the source file(s) generated
-  optional string output_directory = 223 [default = "."];
-
-  // Will ignore the type generations and remove dependencies for the descriptor proto
-  // files that declare their package to be "google.protobuf"
-  optional bool ignore_google_protobuf = 224 [default = false];
-
-  // Controls how services are generated, GENERIC is the deprecated original implementation
-  // INTERFACE generates service interfaces only, RPCINTEROP generates interfaces and 
-  // implementations using the included Windows RPC interop libarary.
-  optional CSharpServiceType service_generator_type = 225 [default = NONE];
-}
-
-enum CSharpServiceType {
-  // Services are ignored by the generator
-  NONE = 0;
-  // Generates the original Java generic service implementations
-  GENERIC = 1;
-  // Generates an interface for the service and nothing else
-  INTERFACE = 2;
-  // Generates an interface for the service and client/server wrappers for the interface
-  IRPCDISPATCH = 3;
-}
-
-extend FileOptions {
-  optional CSharpFileOptions csharp_file_options = 1000;
-}
-
-extend FieldOptions {
-  optional CSharpFieldOptions csharp_field_options = 1000;
-}
-
-message CSharpFieldOptions {
-  // Provides the ability to override the name of the property
-  // generated for this field. This is applied to all properties
-  // and methods to do with this field, including HasFoo, FooCount,
-  // FooList etc.
-  optional string property_name = 1;
-}
-
-message CSharpServiceOptions {
-  optional string interface_id = 1;
-}
-
-extend ServiceOptions {
-  optional CSharpServiceOptions csharp_service_options = 1000;
-}
-
-message CSharpMethodOptions {
-  optional int32 dispatch_id = 1;
-}
-
-extend MethodOptions {
-  optional CSharpMethodOptions csharp_method_options = 1000;
-}

+ 0 - 533
CSharp/Modules/BehaviorTree/google/protobuf/descriptor.proto

@@ -1,533 +0,0 @@
-// Protocol Buffers - Google's data interchange format
-// Copyright 2008 Google Inc.  All rights reserved.
-// http://code.google.com/p/protobuf/
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-// Author: kenton@google.com (Kenton Varda)
-//  Based on original Protocol Buffers design by
-//  Sanjay Ghemawat, Jeff Dean, and others.
-//
-// The messages in this file describe the definitions found in .proto files.
-// A valid .proto file can be translated directly to a FileDescriptorProto
-// without any other information (e.g. without reading its imports).
-
-
-
-package google.protobuf;
-option java_package = "com.google.protobuf";
-option java_outer_classname = "DescriptorProtos";
-
-// descriptor.proto must be optimized for speed because reflection-based
-// algorithms don't work during bootstrapping.
-option optimize_for = SPEED;
-
-// The protocol compiler can output a FileDescriptorSet containing the .proto
-// files it parses.
-message FileDescriptorSet {
-  repeated FileDescriptorProto file = 1;
-}
-
-// Describes a complete .proto file.
-message FileDescriptorProto {
-  optional string name = 1;       // file name, relative to root of source tree
-  optional string package = 2;    // e.g. "foo", "foo.bar", etc.
-
-  // Names of files imported by this file.
-  repeated string dependency = 3;
-
-  // All top-level definitions in this file.
-  repeated DescriptorProto message_type = 4;
-  repeated EnumDescriptorProto enum_type = 5;
-  repeated ServiceDescriptorProto service = 6;
-  repeated FieldDescriptorProto extension = 7;
-
-  optional FileOptions options = 8;
-
-  // This field contains optional information about the original source code.
-  // You may safely remove this entire field whithout harming runtime
-  // functionality of the descriptors -- the information is needed only by
-  // development tools.
-  optional SourceCodeInfo source_code_info = 9;
-}
-
-// Describes a message type.
-message DescriptorProto {
-  optional string name = 1;
-
-  repeated FieldDescriptorProto field = 2;
-  repeated FieldDescriptorProto extension = 6;
-
-  repeated DescriptorProto nested_type = 3;
-  repeated EnumDescriptorProto enum_type = 4;
-
-  message ExtensionRange {
-    optional int32 start = 1;
-    optional int32 end = 2;
-  }
-  repeated ExtensionRange extension_range = 5;
-
-  optional MessageOptions options = 7;
-}
-
-// Describes a field within a message.
-message FieldDescriptorProto {
-  enum Type {
-    // 0 is reserved for errors.
-    // Order is weird for historical reasons.
-    TYPE_DOUBLE         = 1;
-    TYPE_FLOAT          = 2;
-    TYPE_INT64          = 3;   // Not ZigZag encoded.  Negative numbers
-                               // take 10 bytes.  Use TYPE_SINT64 if negative
-                               // values are likely.
-    TYPE_UINT64         = 4;
-    TYPE_INT32          = 5;   // Not ZigZag encoded.  Negative numbers
-                               // take 10 bytes.  Use TYPE_SINT32 if negative
-                               // values are likely.
-    TYPE_FIXED64        = 6;
-    TYPE_FIXED32        = 7;
-    TYPE_BOOL           = 8;
-    TYPE_STRING         = 9;
-    TYPE_GROUP          = 10;  // Tag-delimited aggregate.
-    TYPE_MESSAGE        = 11;  // Length-delimited aggregate.
-
-    // New in version 2.
-    TYPE_BYTES          = 12;
-    TYPE_UINT32         = 13;
-    TYPE_ENUM           = 14;
-    TYPE_SFIXED32       = 15;
-    TYPE_SFIXED64       = 16;
-    TYPE_SINT32         = 17;  // Uses ZigZag encoding.
-    TYPE_SINT64         = 18;  // Uses ZigZag encoding.
-  };
-
-  enum Label {
-    // 0 is reserved for errors
-    LABEL_OPTIONAL      = 1;
-    LABEL_REQUIRED      = 2;
-    LABEL_REPEATED      = 3;
-    // TODO(sanjay): Should we add LABEL_MAP?
-  };
-
-  optional string name = 1;
-  optional int32 number = 3;
-  optional Label label = 4;
-
-  // If type_name is set, this need not be set.  If both this and type_name
-  // are set, this must be either TYPE_ENUM or TYPE_MESSAGE.
-  optional Type type = 5;
-
-  // For message and enum types, this is the name of the type.  If the name
-  // starts with a '.', it is fully-qualified.  Otherwise, C++-like scoping
-  // rules are used to find the type (i.e. first the nested types within this
-  // message are searched, then within the parent, on up to the root
-  // namespace).
-  optional string type_name = 6;
-
-  // For extensions, this is the name of the type being extended.  It is
-  // resolved in the same manner as type_name.
-  optional string extendee = 2;
-
-  // For numeric types, contains the original text representation of the value.
-  // For booleans, "true" or "false".
-  // For strings, contains the default text contents (not escaped in any way).
-  // For bytes, contains the C escaped value.  All bytes >= 128 are escaped.
-  // TODO(kenton):  Base-64 encode?
-  optional string default_value = 7;
-
-  optional FieldOptions options = 8;
-}
-
-// Describes an enum type.
-message EnumDescriptorProto {
-  optional string name = 1;
-
-  repeated EnumValueDescriptorProto value = 2;
-
-  optional EnumOptions options = 3;
-}
-
-// Describes a value within an enum.
-message EnumValueDescriptorProto {
-  optional string name = 1;
-  optional int32 number = 2;
-
-  optional EnumValueOptions options = 3;
-}
-
-// Describes a service.
-message ServiceDescriptorProto {
-  optional string name = 1;
-  repeated MethodDescriptorProto method = 2;
-
-  optional ServiceOptions options = 3;
-}
-
-// Describes a method of a service.
-message MethodDescriptorProto {
-  optional string name = 1;
-
-  // Input and output type names.  These are resolved in the same way as
-  // FieldDescriptorProto.type_name, but must refer to a message type.
-  optional string input_type = 2;
-  optional string output_type = 3;
-
-  optional MethodOptions options = 4;
-}
-
-// ===================================================================
-// Options
-
-// Each of the definitions above may have "options" attached.  These are
-// just annotations which may cause code to be generated slightly differently
-// or may contain hints for code that manipulates protocol messages.
-//
-// Clients may define custom options as extensions of the *Options messages.
-// These extensions may not yet be known at parsing time, so the parser cannot
-// store the values in them.  Instead it stores them in a field in the *Options
-// message called uninterpreted_option. This field must have the same name
-// across all *Options messages. We then use this field to populate the
-// extensions when we build a descriptor, at which point all protos have been
-// parsed and so all extensions are known.
-//
-// Extension numbers for custom options may be chosen as follows:
-// * For options which will only be used within a single application or
-//   organization, or for experimental options, use field numbers 50000
-//   through 99999.  It is up to you to ensure that you do not use the
-//   same number for multiple options.
-// * For options which will be published and used publicly by multiple
-//   independent entities, e-mail kenton@google.com to reserve extension
-//   numbers.  Simply tell me how many you need and I'll send you back a
-//   set of numbers to use -- there's no need to explain how you intend to
-//   use them.  If this turns out to be popular, a web service will be set up
-//   to automatically assign option numbers.
-
-
-message FileOptions {
-
-  // Sets the Java package where classes generated from this .proto will be
-  // placed.  By default, the proto package is used, but this is often
-  // inappropriate because proto packages do not normally start with backwards
-  // domain names.
-  optional string java_package = 1;
-
-
-  // If set, all the classes from the .proto file are wrapped in a single
-  // outer class with the given name.  This applies to both Proto1
-  // (equivalent to the old "--one_java_file" option) and Proto2 (where
-  // a .proto always translates to a single class, but you may want to
-  // explicitly choose the class name).
-  optional string java_outer_classname = 8;
-
-  // If set true, then the Java code generator will generate a separate .java
-  // file for each top-level message, enum, and service defined in the .proto
-  // file.  Thus, these types will *not* be nested inside the outer class
-  // named by java_outer_classname.  However, the outer class will still be
-  // generated to contain the file's getDescriptor() method as well as any
-  // top-level extensions defined in the file.
-  optional bool java_multiple_files = 10 [default=false];
-
-  // If set true, then the Java code generator will generate equals() and
-  // hashCode() methods for all messages defined in the .proto file. This is
-  // purely a speed optimization, as the AbstractMessage base class includes
-  // reflection-based implementations of these methods.
-  optional bool java_generate_equals_and_hash = 20 [default=false];
-
-  // Generated classes can be optimized for speed or code size.
-  enum OptimizeMode {
-    SPEED = 1;        // Generate complete code for parsing, serialization,
-                      // etc.
-    CODE_SIZE = 2;    // Use ReflectionOps to implement these methods.
-    LITE_RUNTIME = 3; // Generate code using MessageLite and the lite runtime.
-  }
-  optional OptimizeMode optimize_for = 9 [default=SPEED];
-
-
-
-
-  // Should generic services be generated in each language?  "Generic" services
-  // are not specific to any particular RPC system.  They are generated by the
-  // main code generators in each language (without additional plugins).
-  // Generic services were the only kind of service generation supported by
-  // early versions of proto2.
-  //
-  // Generic services are now considered deprecated in favor of using plugins
-  // that generate code specific to your particular RPC system.  Therefore,
-  // these default to false.  Old code which depends on generic services should
-  // explicitly set them to true.
-  optional bool cc_generic_services = 16 [default=false];
-  optional bool java_generic_services = 17 [default=false];
-  optional bool py_generic_services = 18 [default=false];
-
-  // The parser stores options it doesn't recognize here. See above.
-  repeated UninterpretedOption uninterpreted_option = 999;
-
-  // Clients can define custom options in extensions of this message. See above.
-  extensions 1000 to max;
-}
-
-message MessageOptions {
-  // Set true to use the old proto1 MessageSet wire format for extensions.
-  // This is provided for backwards-compatibility with the MessageSet wire
-  // format.  You should not use this for any other reason:  It's less
-  // efficient, has fewer features, and is more complicated.
-  //
-  // The message must be defined exactly as follows:
-  //   message Foo {
-  //     option message_set_wire_format = true;
-  //     extensions 4 to max;
-  //   }
-  // Note that the message cannot have any defined fields; MessageSets only
-  // have extensions.
-  //
-  // All extensions of your type must be singular messages; e.g. they cannot
-  // be int32s, enums, or repeated messages.
-  //
-  // Because this is an option, the above two restrictions are not enforced by
-  // the protocol compiler.
-  optional bool message_set_wire_format = 1 [default=false];
-
-  // Disables the generation of the standard "descriptor()" accessor, which can
-  // conflict with a field of the same name.  This is meant to make migration
-  // from proto1 easier; new code should avoid fields named "descriptor".
-  optional bool no_standard_descriptor_accessor = 2 [default=false];
-
-  // The parser stores options it doesn't recognize here. See above.
-  repeated UninterpretedOption uninterpreted_option = 999;
-
-  // Clients can define custom options in extensions of this message. See above.
-  extensions 1000 to max;
-}
-
-message FieldOptions {
-  // The ctype option instructs the C++ code generator to use a different
-  // representation of the field than it normally would.  See the specific
-  // options below.  This option is not yet implemented in the open source
-  // release -- sorry, we'll try to include it in a future version!
-  optional CType ctype = 1 [default = STRING];
-  enum CType {
-    // Default mode.
-    STRING = 0;
-
-    CORD = 1;
-
-    STRING_PIECE = 2;
-  }
-  // The packed option can be enabled for repeated primitive fields to enable
-  // a more efficient representation on the wire. Rather than repeatedly
-  // writing the tag and type for each element, the entire array is encoded as
-  // a single length-delimited blob.
-  optional bool packed = 2;
-
-
-  // Is this field deprecated?
-  // Depending on the target platform, this can emit Deprecated annotations
-  // for accessors, or it will be completely ignored; in the very least, this
-  // is a formalization for deprecating fields.
-  optional bool deprecated = 3 [default=false];
-
-  // EXPERIMENTAL.  DO NOT USE.
-  // For "map" fields, the name of the field in the enclosed type that
-  // is the key for this map.  For example, suppose we have:
-  //   message Item {
-  //     required string name = 1;
-  //     required string value = 2;
-  //   }
-  //   message Config {
-  //     repeated Item items = 1 [experimental_map_key="name"];
-  //   }
-  // In this situation, the map key for Item will be set to "name".
-  // TODO: Fully-implement this, then remove the "experimental_" prefix.
-  optional string experimental_map_key = 9;
-
-  // The parser stores options it doesn't recognize here. See above.
-  repeated UninterpretedOption uninterpreted_option = 999;
-
-  // Clients can define custom options in extensions of this message. See above.
-  extensions 1000 to max;
-}
-
-message EnumOptions {
-
-  // The parser stores options it doesn't recognize here. See above.
-  repeated UninterpretedOption uninterpreted_option = 999;
-
-  // Clients can define custom options in extensions of this message. See above.
-  extensions 1000 to max;
-}
-
-message EnumValueOptions {
-  // The parser stores options it doesn't recognize here. See above.
-  repeated UninterpretedOption uninterpreted_option = 999;
-
-  // Clients can define custom options in extensions of this message. See above.
-  extensions 1000 to max;
-}
-
-message ServiceOptions {
-
-  // Note:  Field numbers 1 through 32 are reserved for Google's internal RPC
-  //   framework.  We apologize for hoarding these numbers to ourselves, but
-  //   we were already using them long before we decided to release Protocol
-  //   Buffers.
-
-  // The parser stores options it doesn't recognize here. See above.
-  repeated UninterpretedOption uninterpreted_option = 999;
-
-  // Clients can define custom options in extensions of this message. See above.
-  extensions 1000 to max;
-}
-
-message MethodOptions {
-
-  // Note:  Field numbers 1 through 32 are reserved for Google's internal RPC
-  //   framework.  We apologize for hoarding these numbers to ourselves, but
-  //   we were already using them long before we decided to release Protocol
-  //   Buffers.
-
-  // The parser stores options it doesn't recognize here. See above.
-  repeated UninterpretedOption uninterpreted_option = 999;
-
-  // Clients can define custom options in extensions of this message. See above.
-  extensions 1000 to max;
-}
-
-// A message representing a option the parser does not recognize. This only
-// appears in options protos created by the compiler::Parser class.
-// DescriptorPool resolves these when building Descriptor objects. Therefore,
-// options protos in descriptor objects (e.g. returned by Descriptor::options(),
-// or produced by Descriptor::CopyTo()) will never have UninterpretedOptions
-// in them.
-message UninterpretedOption {
-  // The name of the uninterpreted option.  Each string represents a segment in
-  // a dot-separated name.  is_extension is true iff a segment represents an
-  // extension (denoted with parentheses in options specs in .proto files).
-  // E.g.,{ ["foo", false], ["bar.baz", true], ["qux", false] } represents
-  // "foo.(bar.baz).qux".
-  message NamePart {
-    required string name_part = 1;
-    required bool is_extension = 2;
-  }
-  repeated NamePart name = 2;
-
-  // The value of the uninterpreted option, in whatever type the tokenizer
-  // identified it as during parsing. Exactly one of these should be set.
-  optional string identifier_value = 3;
-  optional uint64 positive_int_value = 4;
-  optional int64 negative_int_value = 5;
-  optional double double_value = 6;
-  optional bytes string_value = 7;
-  optional string aggregate_value = 8;
-}
-
-// ===================================================================
-// Optional source code info
-
-// Encapsulates information about the original source file from which a
-// FileDescriptorProto was generated.
-message SourceCodeInfo {
-  // A Location identifies a piece of source code in a .proto file which
-  // corresponds to a particular definition.  This information is intended
-  // to be useful to IDEs, code indexers, documentation generators, and similar
-  // tools.
-  //
-  // For example, say we have a file like:
-  //   message Foo {
-  //     optional string foo = 1;
-  //   }
-  // Let's look at just the field definition:
-  //   optional string foo = 1;
-  //   ^       ^^     ^^  ^  ^^^
-  //   a       bc     de  f  ghi
-  // We have the following locations:
-  //   span   path               represents
-  //   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
-  //   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
-  //   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
-  //   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
-  //   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
-  //
-  // Notes:
-  // - A location may refer to a repeated field itself (i.e. not to any
-  //   particular index within it).  This is used whenever a set of elements are
-  //   logically enclosed in a single code segment.  For example, an entire
-  //   extend block (possibly containing multiple extension definitions) will
-  //   have an outer location whose path refers to the "extensions" repeated
-  //   field without an index.
-  // - Multiple locations may have the same path.  This happens when a single
-  //   logical declaration is spread out across multiple places.  The most
-  //   obvious example is the "extend" block again -- there may be multiple
-  //   extend blocks in the same scope, each of which will have the same path.
-  // - A location's span is not always a subset of its parent's span.  For
-  //   example, the "extendee" of an extension declaration appears at the
-  //   beginning of the "extend" block and is shared by all extensions within
-  //   the block.
-  // - Just because a location's span is a subset of some other location's span
-  //   does not mean that it is a descendent.  For example, a "group" defines
-  //   both a type and a field in a single declaration.  Thus, the locations
-  //   corresponding to the type and field and their components will overlap.
-  // - Code which tries to interpret locations should probably be designed to
-  //   ignore those that it doesn't understand, as more types of locations could
-  //   be recorded in the future.
-  repeated Location location = 1;
-  message Location {
-    // Identifies which part of the FileDescriptorProto was defined at this
-    // location.
-    //
-    // Each element is a field number or an index.  They form a path from
-    // the root FileDescriptorProto to the place where the definition.  For
-    // example, this path:
-    //   [ 4, 3, 2, 7, 1 ]
-    // refers to:
-    //   file.message_type(3)  // 4, 3
-    //       .field(7)         // 2, 7
-    //       .name()           // 1
-    // This is because FileDescriptorProto.message_type has field number 4:
-    //   repeated DescriptorProto message_type = 4;
-    // and DescriptorProto.field has field number 2:
-    //   repeated FieldDescriptorProto field = 2;
-    // and FieldDescriptorProto.name has field number 1:
-    //   optional string name = 1;
-    //
-    // Thus, the above path gives the location of a field name.  If we removed
-    // the last element:
-    //   [ 4, 3, 2, 7 ]
-    // this path refers to the whole field declaration (from the beginning
-    // of the label to the terminating semicolon).
-    repeated int32 path = 1 [packed=true];
-
-    // Always has exactly three or four elements: start line, start column,
-    // end line (optional, otherwise assumed same as start line), end column.
-    // These are packed into a single field for efficiency.  Note that line
-    // and column numbers are zero-based -- typically you will want to add
-    // 1 to each before displaying to a user.
-    repeated int32 span = 2 [packed=true];
-
-    // TODO(kenton):  Record comments appearing before and after the
-    // declaration.
-  }
-}

+ 2 - 2
CSharp/Platform/Infrastructure/Infrastructure.csproj

@@ -33,7 +33,7 @@
     <WarningLevel>4</WarningLevel>
   </PropertyGroup>
   <ItemGroup>
-    <Reference Include="Microsoft.Practices.Prism">
+    <Reference Include="Microsoft.Practices.Prism, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
       <HintPath>..\..\packages\Prism.4.1.0.0\lib\NET40\Microsoft.Practices.Prism.dll</HintPath>
     </Reference>
     <Reference Include="PresentationFramework" />
@@ -51,7 +51,7 @@
     <Folder Include="Properties\" />
   </ItemGroup>
   <ItemGroup>
-    <None Include="Packages.config" />
+    <None Include="packages.config" />
   </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
   <PropertyGroup>

+ 3 - 2
CSharp/Platform/Infrastructure/Packages.config

@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <packages>
-	<package id="CommonServiceLocator" version="1.0" targetFramework="net40" />
-	<package id="Prism" version="4.1.0.0" targetFramework="net40" />
+  <package id="CommonServiceLocator" version="1.0" targetFramework="net40" />
+  <package id="Prism" version="4.1.0.0" targetFramework="net40" />
+  <package id="Prism.MEFExtensions" version="4.1.0.0" targetFramework="net40" />
 </packages>