Full rutime working, Lite generator and runtime building but untested
diff --git a/src/ProtocolBuffersLite.Test/TestProtos/UnitTestLiteProtoFile.cs b/src/ProtocolBuffersLite.Test/TestProtos/UnitTestLiteProtoFile.cs
index 0e81d8e..52f0ad5 100644
--- a/src/ProtocolBuffersLite.Test/TestProtos/UnitTestLiteProtoFile.cs
+++ b/src/ProtocolBuffersLite.Test/TestProtos/UnitTestLiteProtoFile.cs
@@ -1,4 +1,4 @@
-// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// Generated by ProtoGen, Version=0.9.0.0, Culture=neutral, PublicKeyToken=8fd7408b07f8d2cd.  DO NOT EDIT!
 
 using pb = global::Google.ProtocolBuffers;
 using pbc = global::Google.ProtocolBuffers.Collections;
@@ -97,626 +97,895 @@
     #endregion
     #region Extensions
     public const int OptionalInt32ExtensionLiteFieldNumber = 1;
-    public static pb::GeneratedExtensionBase<int> OptionalInt32ExtensionLite;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, int> OptionalInt32ExtensionLite;
     public const int OptionalInt64ExtensionLiteFieldNumber = 2;
-    public static pb::GeneratedExtensionBase<long> OptionalInt64ExtensionLite;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, long> OptionalInt64ExtensionLite;
     public const int OptionalUint32ExtensionLiteFieldNumber = 3;
     [global::System.CLSCompliant(false)]
-    public static pb::GeneratedExtensionBase<uint> OptionalUint32ExtensionLite;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, uint> OptionalUint32ExtensionLite;
     public const int OptionalUint64ExtensionLiteFieldNumber = 4;
     [global::System.CLSCompliant(false)]
-    public static pb::GeneratedExtensionBase<ulong> OptionalUint64ExtensionLite;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, ulong> OptionalUint64ExtensionLite;
     public const int OptionalSint32ExtensionLiteFieldNumber = 5;
-    public static pb::GeneratedExtensionBase<int> OptionalSint32ExtensionLite;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, int> OptionalSint32ExtensionLite;
     public const int OptionalSint64ExtensionLiteFieldNumber = 6;
-    public static pb::GeneratedExtensionBase<long> OptionalSint64ExtensionLite;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, long> OptionalSint64ExtensionLite;
     public const int OptionalFixed32ExtensionLiteFieldNumber = 7;
     [global::System.CLSCompliant(false)]
-    public static pb::GeneratedExtensionBase<uint> OptionalFixed32ExtensionLite;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, uint> OptionalFixed32ExtensionLite;
     public const int OptionalFixed64ExtensionLiteFieldNumber = 8;
     [global::System.CLSCompliant(false)]
-    public static pb::GeneratedExtensionBase<ulong> OptionalFixed64ExtensionLite;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, ulong> OptionalFixed64ExtensionLite;
     public const int OptionalSfixed32ExtensionLiteFieldNumber = 9;
-    public static pb::GeneratedExtensionBase<int> OptionalSfixed32ExtensionLite;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, int> OptionalSfixed32ExtensionLite;
     public const int OptionalSfixed64ExtensionLiteFieldNumber = 10;
-    public static pb::GeneratedExtensionBase<long> OptionalSfixed64ExtensionLite;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, long> OptionalSfixed64ExtensionLite;
     public const int OptionalFloatExtensionLiteFieldNumber = 11;
-    public static pb::GeneratedExtensionBase<float> OptionalFloatExtensionLite;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, float> OptionalFloatExtensionLite;
     public const int OptionalDoubleExtensionLiteFieldNumber = 12;
-    public static pb::GeneratedExtensionBase<double> OptionalDoubleExtensionLite;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, double> OptionalDoubleExtensionLite;
     public const int OptionalBoolExtensionLiteFieldNumber = 13;
-    public static pb::GeneratedExtensionBase<bool> OptionalBoolExtensionLite;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, bool> OptionalBoolExtensionLite;
     public const int OptionalStringExtensionLiteFieldNumber = 14;
-    public static pb::GeneratedExtensionBase<string> OptionalStringExtensionLite;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, string> OptionalStringExtensionLite;
     public const int OptionalBytesExtensionLiteFieldNumber = 15;
-    public static pb::GeneratedExtensionBase<pb::ByteString> OptionalBytesExtensionLite;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, pb::ByteString> OptionalBytesExtensionLite;
     public const int OptionalGroupExtensionLiteFieldNumber = 16;
-    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.OptionalGroup_extension_lite> OptionalGroupExtensionLite;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.OptionalGroup_extension_lite> OptionalGroupExtensionLite;
     public const int OptionalNestedMessageExtensionLiteFieldNumber = 18;
-    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage> OptionalNestedMessageExtensionLite;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage> OptionalNestedMessageExtensionLite;
     public const int OptionalForeignMessageExtensionLiteFieldNumber = 19;
-    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite> OptionalForeignMessageExtensionLite;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite> OptionalForeignMessageExtensionLite;
     public const int OptionalImportMessageExtensionLiteFieldNumber = 20;
-    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.ImportMessageLite> OptionalImportMessageExtensionLite;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.ImportMessageLite> OptionalImportMessageExtensionLite;
     public const int OptionalNestedEnumExtensionLiteFieldNumber = 21;
-    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum> OptionalNestedEnumExtensionLite;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum> OptionalNestedEnumExtensionLite;
     public const int OptionalForeignEnumExtensionLiteFieldNumber = 22;
-    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite> OptionalForeignEnumExtensionLite;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite> OptionalForeignEnumExtensionLite;
     public const int OptionalImportEnumExtensionLiteFieldNumber = 23;
-    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.ImportEnumLite> OptionalImportEnumExtensionLite;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.ImportEnumLite> OptionalImportEnumExtensionLite;
     public const int OptionalStringPieceExtensionLiteFieldNumber = 24;
-    public static pb::GeneratedExtensionBase<string> OptionalStringPieceExtensionLite;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, string> OptionalStringPieceExtensionLite;
     public const int OptionalCordExtensionLiteFieldNumber = 25;
-    public static pb::GeneratedExtensionBase<string> OptionalCordExtensionLite;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, string> OptionalCordExtensionLite;
     public const int RepeatedInt32ExtensionLiteFieldNumber = 31;
-    public static pb::GeneratedExtensionBase<scg::IList<int>> RepeatedInt32ExtensionLite;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, int> RepeatedInt32ExtensionLite;
     public const int RepeatedInt64ExtensionLiteFieldNumber = 32;
-    public static pb::GeneratedExtensionBase<scg::IList<long>> RepeatedInt64ExtensionLite;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, long> RepeatedInt64ExtensionLite;
     public const int RepeatedUint32ExtensionLiteFieldNumber = 33;
     [global::System.CLSCompliant(false)]
-    public static pb::GeneratedExtensionBase<scg::IList<uint>> RepeatedUint32ExtensionLite;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, uint> RepeatedUint32ExtensionLite;
     public const int RepeatedUint64ExtensionLiteFieldNumber = 34;
     [global::System.CLSCompliant(false)]
-    public static pb::GeneratedExtensionBase<scg::IList<ulong>> RepeatedUint64ExtensionLite;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, ulong> RepeatedUint64ExtensionLite;
     public const int RepeatedSint32ExtensionLiteFieldNumber = 35;
-    public static pb::GeneratedExtensionBase<scg::IList<int>> RepeatedSint32ExtensionLite;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, int> RepeatedSint32ExtensionLite;
     public const int RepeatedSint64ExtensionLiteFieldNumber = 36;
-    public static pb::GeneratedExtensionBase<scg::IList<long>> RepeatedSint64ExtensionLite;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, long> RepeatedSint64ExtensionLite;
     public const int RepeatedFixed32ExtensionLiteFieldNumber = 37;
     [global::System.CLSCompliant(false)]
-    public static pb::GeneratedExtensionBase<scg::IList<uint>> RepeatedFixed32ExtensionLite;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, uint> RepeatedFixed32ExtensionLite;
     public const int RepeatedFixed64ExtensionLiteFieldNumber = 38;
     [global::System.CLSCompliant(false)]
-    public static pb::GeneratedExtensionBase<scg::IList<ulong>> RepeatedFixed64ExtensionLite;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, ulong> RepeatedFixed64ExtensionLite;
     public const int RepeatedSfixed32ExtensionLiteFieldNumber = 39;
-    public static pb::GeneratedExtensionBase<scg::IList<int>> RepeatedSfixed32ExtensionLite;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, int> RepeatedSfixed32ExtensionLite;
     public const int RepeatedSfixed64ExtensionLiteFieldNumber = 40;
-    public static pb::GeneratedExtensionBase<scg::IList<long>> RepeatedSfixed64ExtensionLite;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, long> RepeatedSfixed64ExtensionLite;
     public const int RepeatedFloatExtensionLiteFieldNumber = 41;
-    public static pb::GeneratedExtensionBase<scg::IList<float>> RepeatedFloatExtensionLite;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, float> RepeatedFloatExtensionLite;
     public const int RepeatedDoubleExtensionLiteFieldNumber = 42;
-    public static pb::GeneratedExtensionBase<scg::IList<double>> RepeatedDoubleExtensionLite;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, double> RepeatedDoubleExtensionLite;
     public const int RepeatedBoolExtensionLiteFieldNumber = 43;
-    public static pb::GeneratedExtensionBase<scg::IList<bool>> RepeatedBoolExtensionLite;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, bool> RepeatedBoolExtensionLite;
     public const int RepeatedStringExtensionLiteFieldNumber = 44;
-    public static pb::GeneratedExtensionBase<scg::IList<string>> RepeatedStringExtensionLite;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, string> RepeatedStringExtensionLite;
     public const int RepeatedBytesExtensionLiteFieldNumber = 45;
-    public static pb::GeneratedExtensionBase<scg::IList<pb::ByteString>> RepeatedBytesExtensionLite;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, pb::ByteString> RepeatedBytesExtensionLite;
     public const int RepeatedGroupExtensionLiteFieldNumber = 46;
-    public static pb::GeneratedExtensionBase<scg::IList<global::Google.ProtocolBuffers.TestProtos.RepeatedGroup_extension_lite>> RepeatedGroupExtensionLite;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.RepeatedGroup_extension_lite> RepeatedGroupExtensionLite;
     public const int RepeatedNestedMessageExtensionLiteFieldNumber = 48;
-    public static pb::GeneratedExtensionBase<scg::IList<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage>> RepeatedNestedMessageExtensionLite;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage> RepeatedNestedMessageExtensionLite;
     public const int RepeatedForeignMessageExtensionLiteFieldNumber = 49;
-    public static pb::GeneratedExtensionBase<scg::IList<global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite>> RepeatedForeignMessageExtensionLite;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite> RepeatedForeignMessageExtensionLite;
     public const int RepeatedImportMessageExtensionLiteFieldNumber = 50;
-    public static pb::GeneratedExtensionBase<scg::IList<global::Google.ProtocolBuffers.TestProtos.ImportMessageLite>> RepeatedImportMessageExtensionLite;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.ImportMessageLite> RepeatedImportMessageExtensionLite;
     public const int RepeatedNestedEnumExtensionLiteFieldNumber = 51;
-    public static pb::GeneratedExtensionBase<scg::IList<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum>> RepeatedNestedEnumExtensionLite;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum> RepeatedNestedEnumExtensionLite;
     public const int RepeatedForeignEnumExtensionLiteFieldNumber = 52;
-    public static pb::GeneratedExtensionBase<scg::IList<global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite>> RepeatedForeignEnumExtensionLite;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite> RepeatedForeignEnumExtensionLite;
     public const int RepeatedImportEnumExtensionLiteFieldNumber = 53;
-    public static pb::GeneratedExtensionBase<scg::IList<global::Google.ProtocolBuffers.TestProtos.ImportEnumLite>> RepeatedImportEnumExtensionLite;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.ImportEnumLite> RepeatedImportEnumExtensionLite;
     public const int RepeatedStringPieceExtensionLiteFieldNumber = 54;
-    public static pb::GeneratedExtensionBase<scg::IList<string>> RepeatedStringPieceExtensionLite;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, string> RepeatedStringPieceExtensionLite;
     public const int RepeatedCordExtensionLiteFieldNumber = 55;
-    public static pb::GeneratedExtensionBase<scg::IList<string>> RepeatedCordExtensionLite;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, string> RepeatedCordExtensionLite;
     public const int DefaultInt32ExtensionLiteFieldNumber = 61;
-    public static pb::GeneratedExtensionBase<int> DefaultInt32ExtensionLite;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, int> DefaultInt32ExtensionLite;
     public const int DefaultInt64ExtensionLiteFieldNumber = 62;
-    public static pb::GeneratedExtensionBase<long> DefaultInt64ExtensionLite;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, long> DefaultInt64ExtensionLite;
     public const int DefaultUint32ExtensionLiteFieldNumber = 63;
     [global::System.CLSCompliant(false)]
-    public static pb::GeneratedExtensionBase<uint> DefaultUint32ExtensionLite;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, uint> DefaultUint32ExtensionLite;
     public const int DefaultUint64ExtensionLiteFieldNumber = 64;
     [global::System.CLSCompliant(false)]
-    public static pb::GeneratedExtensionBase<ulong> DefaultUint64ExtensionLite;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, ulong> DefaultUint64ExtensionLite;
     public const int DefaultSint32ExtensionLiteFieldNumber = 65;
-    public static pb::GeneratedExtensionBase<int> DefaultSint32ExtensionLite;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, int> DefaultSint32ExtensionLite;
     public const int DefaultSint64ExtensionLiteFieldNumber = 66;
-    public static pb::GeneratedExtensionBase<long> DefaultSint64ExtensionLite;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, long> DefaultSint64ExtensionLite;
     public const int DefaultFixed32ExtensionLiteFieldNumber = 67;
     [global::System.CLSCompliant(false)]
-    public static pb::GeneratedExtensionBase<uint> DefaultFixed32ExtensionLite;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, uint> DefaultFixed32ExtensionLite;
     public const int DefaultFixed64ExtensionLiteFieldNumber = 68;
     [global::System.CLSCompliant(false)]
-    public static pb::GeneratedExtensionBase<ulong> DefaultFixed64ExtensionLite;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, ulong> DefaultFixed64ExtensionLite;
     public const int DefaultSfixed32ExtensionLiteFieldNumber = 69;
-    public static pb::GeneratedExtensionBase<int> DefaultSfixed32ExtensionLite;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, int> DefaultSfixed32ExtensionLite;
     public const int DefaultSfixed64ExtensionLiteFieldNumber = 70;
-    public static pb::GeneratedExtensionBase<long> DefaultSfixed64ExtensionLite;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, long> DefaultSfixed64ExtensionLite;
     public const int DefaultFloatExtensionLiteFieldNumber = 71;
-    public static pb::GeneratedExtensionBase<float> DefaultFloatExtensionLite;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, float> DefaultFloatExtensionLite;
     public const int DefaultDoubleExtensionLiteFieldNumber = 72;
-    public static pb::GeneratedExtensionBase<double> DefaultDoubleExtensionLite;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, double> DefaultDoubleExtensionLite;
     public const int DefaultBoolExtensionLiteFieldNumber = 73;
-    public static pb::GeneratedExtensionBase<bool> DefaultBoolExtensionLite;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, bool> DefaultBoolExtensionLite;
     public const int DefaultStringExtensionLiteFieldNumber = 74;
-    public static pb::GeneratedExtensionBase<string> DefaultStringExtensionLite;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, string> DefaultStringExtensionLite;
     public const int DefaultBytesExtensionLiteFieldNumber = 75;
-    public static pb::GeneratedExtensionBase<pb::ByteString> DefaultBytesExtensionLite;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, pb::ByteString> DefaultBytesExtensionLite;
     public const int DefaultNestedEnumExtensionLiteFieldNumber = 81;
-    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum> DefaultNestedEnumExtensionLite;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum> DefaultNestedEnumExtensionLite;
     public const int DefaultForeignEnumExtensionLiteFieldNumber = 82;
-    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite> DefaultForeignEnumExtensionLite;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite> DefaultForeignEnumExtensionLite;
     public const int DefaultImportEnumExtensionLiteFieldNumber = 83;
-    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.ImportEnumLite> DefaultImportEnumExtensionLite;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.ImportEnumLite> DefaultImportEnumExtensionLite;
     public const int DefaultStringPieceExtensionLiteFieldNumber = 84;
-    public static pb::GeneratedExtensionBase<string> DefaultStringPieceExtensionLite;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, string> DefaultStringPieceExtensionLite;
     public const int DefaultCordExtensionLiteFieldNumber = 85;
-    public static pb::GeneratedExtensionBase<string> DefaultCordExtensionLite;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, string> DefaultCordExtensionLite;
     public const int PackedInt32ExtensionLiteFieldNumber = 90;
-    public static pb::GeneratedExtensionBase<scg::IList<int>> PackedInt32ExtensionLite;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, int> PackedInt32ExtensionLite;
     public const int PackedInt64ExtensionLiteFieldNumber = 91;
-    public static pb::GeneratedExtensionBase<scg::IList<long>> PackedInt64ExtensionLite;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, long> PackedInt64ExtensionLite;
     public const int PackedUint32ExtensionLiteFieldNumber = 92;
     [global::System.CLSCompliant(false)]
-    public static pb::GeneratedExtensionBase<scg::IList<uint>> PackedUint32ExtensionLite;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, uint> PackedUint32ExtensionLite;
     public const int PackedUint64ExtensionLiteFieldNumber = 93;
     [global::System.CLSCompliant(false)]
-    public static pb::GeneratedExtensionBase<scg::IList<ulong>> PackedUint64ExtensionLite;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, ulong> PackedUint64ExtensionLite;
     public const int PackedSint32ExtensionLiteFieldNumber = 94;
-    public static pb::GeneratedExtensionBase<scg::IList<int>> PackedSint32ExtensionLite;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, int> PackedSint32ExtensionLite;
     public const int PackedSint64ExtensionLiteFieldNumber = 95;
-    public static pb::GeneratedExtensionBase<scg::IList<long>> PackedSint64ExtensionLite;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, long> PackedSint64ExtensionLite;
     public const int PackedFixed32ExtensionLiteFieldNumber = 96;
     [global::System.CLSCompliant(false)]
-    public static pb::GeneratedExtensionBase<scg::IList<uint>> PackedFixed32ExtensionLite;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, uint> PackedFixed32ExtensionLite;
     public const int PackedFixed64ExtensionLiteFieldNumber = 97;
     [global::System.CLSCompliant(false)]
-    public static pb::GeneratedExtensionBase<scg::IList<ulong>> PackedFixed64ExtensionLite;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, ulong> PackedFixed64ExtensionLite;
     public const int PackedSfixed32ExtensionLiteFieldNumber = 98;
-    public static pb::GeneratedExtensionBase<scg::IList<int>> PackedSfixed32ExtensionLite;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, int> PackedSfixed32ExtensionLite;
     public const int PackedSfixed64ExtensionLiteFieldNumber = 99;
-    public static pb::GeneratedExtensionBase<scg::IList<long>> PackedSfixed64ExtensionLite;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, long> PackedSfixed64ExtensionLite;
     public const int PackedFloatExtensionLiteFieldNumber = 100;
-    public static pb::GeneratedExtensionBase<scg::IList<float>> PackedFloatExtensionLite;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, float> PackedFloatExtensionLite;
     public const int PackedDoubleExtensionLiteFieldNumber = 101;
-    public static pb::GeneratedExtensionBase<scg::IList<double>> PackedDoubleExtensionLite;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, double> PackedDoubleExtensionLite;
     public const int PackedBoolExtensionLiteFieldNumber = 102;
-    public static pb::GeneratedExtensionBase<scg::IList<bool>> PackedBoolExtensionLite;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, bool> PackedBoolExtensionLite;
     public const int PackedEnumExtensionLiteFieldNumber = 103;
-    public static pb::GeneratedExtensionBase<scg::IList<global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite>> PackedEnumExtensionLite;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite> PackedEnumExtensionLite;
     #endregion
     
     #region Static variables
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestAllTypesLite__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Builder> internal__static_protobuf_unittest_TestAllTypesLite__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestAllTypesLite_NestedMessage__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage.Builder> internal__static_protobuf_unittest_TestAllTypesLite_NestedMessage__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestAllTypesLite_OptionalGroup__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.OptionalGroup, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.OptionalGroup.Builder> internal__static_protobuf_unittest_TestAllTypesLite_OptionalGroup__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestAllTypesLite_RepeatedGroup__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.RepeatedGroup, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.RepeatedGroup.Builder> internal__static_protobuf_unittest_TestAllTypesLite_RepeatedGroup__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_ForeignMessageLite__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite, global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite.Builder> internal__static_protobuf_unittest_ForeignMessageLite__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestPackedTypesLite__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestPackedTypesLite, global::Google.ProtocolBuffers.TestProtos.TestPackedTypesLite.Builder> internal__static_protobuf_unittest_TestPackedTypesLite__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestAllExtensionsLite__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.Builder> internal__static_protobuf_unittest_TestAllExtensionsLite__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_OptionalGroup_extension_lite__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.OptionalGroup_extension_lite, global::Google.ProtocolBuffers.TestProtos.OptionalGroup_extension_lite.Builder> internal__static_protobuf_unittest_OptionalGroup_extension_lite__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_RepeatedGroup_extension_lite__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.RepeatedGroup_extension_lite, global::Google.ProtocolBuffers.TestProtos.RepeatedGroup_extension_lite.Builder> internal__static_protobuf_unittest_RepeatedGroup_extension_lite__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestPackedExtensionsLite__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite.Builder> internal__static_protobuf_unittest_TestPackedExtensionsLite__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestNestedExtensionLite__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestNestedExtensionLite, global::Google.ProtocolBuffers.TestProtos.TestNestedExtensionLite.Builder> internal__static_protobuf_unittest_TestNestedExtensionLite__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestDeprecatedLite__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestDeprecatedLite, global::Google.ProtocolBuffers.TestProtos.TestDeprecatedLite.Builder> internal__static_protobuf_unittest_TestDeprecatedLite__FieldAccessorTable;
     #endregion
-    #region Descriptor
-    public static pbd::FileDescriptor Descriptor {
-      get { return descriptor; }
-    }
-    private static pbd::FileDescriptor descriptor;
-    
+    #region Extensions
+    internal static readonly object Descriptor;
     static UnitTestLiteProtoFile() {
-      byte[] descriptorData = global::System.Convert.FromBase64String(
-          "CiNnb29nbGUvcHJvdG9idWYvdW5pdHRlc3RfbGl0ZS5wcm90bxIRcHJvdG9i" + 
-          "dWZfdW5pdHRlc3QaJGdvb2dsZS9wcm90b2J1Zi9jc2hhcnBfb3B0aW9ucy5w" + 
-          "cm90bxoqZ29vZ2xlL3Byb3RvYnVmL3VuaXR0ZXN0X2ltcG9ydF9saXRlLnBy" + 
-          "b3RvIo0WChBUZXN0QWxsVHlwZXNMaXRlEhYKDm9wdGlvbmFsX2ludDMyGAEg" + 
-          "ASgFEhYKDm9wdGlvbmFsX2ludDY0GAIgASgDEhcKD29wdGlvbmFsX3VpbnQz" + 
-          "MhgDIAEoDRIXCg9vcHRpb25hbF91aW50NjQYBCABKAQSFwoPb3B0aW9uYWxf" + 
-          "c2ludDMyGAUgASgREhcKD29wdGlvbmFsX3NpbnQ2NBgGIAEoEhIYChBvcHRp" + 
-          "b25hbF9maXhlZDMyGAcgASgHEhgKEG9wdGlvbmFsX2ZpeGVkNjQYCCABKAYS" + 
-          "GQoRb3B0aW9uYWxfc2ZpeGVkMzIYCSABKA8SGQoRb3B0aW9uYWxfc2ZpeGVk" + 
-          "NjQYCiABKBASFgoOb3B0aW9uYWxfZmxvYXQYCyABKAISFwoPb3B0aW9uYWxf" + 
-          "ZG91YmxlGAwgASgBEhUKDW9wdGlvbmFsX2Jvb2wYDSABKAgSFwoPb3B0aW9u" + 
-          "YWxfc3RyaW5nGA4gASgJEhYKDm9wdGlvbmFsX2J5dGVzGA8gASgMEkgKDW9w" + 
-          "dGlvbmFsZ3JvdXAYECABKAoyMS5wcm90b2J1Zl91bml0dGVzdC5UZXN0QWxs" + 
-          "VHlwZXNMaXRlLk9wdGlvbmFsR3JvdXASUgoXb3B0aW9uYWxfbmVzdGVkX21l" + 
-          "c3NhZ2UYEiABKAsyMS5wcm90b2J1Zl91bml0dGVzdC5UZXN0QWxsVHlwZXNM" + 
-          "aXRlLk5lc3RlZE1lc3NhZ2USRwoYb3B0aW9uYWxfZm9yZWlnbl9tZXNzYWdl" + 
-          "GBMgASgLMiUucHJvdG9idWZfdW5pdHRlc3QuRm9yZWlnbk1lc3NhZ2VMaXRl" + 
-          "EkwKF29wdGlvbmFsX2ltcG9ydF9tZXNzYWdlGBQgASgLMisucHJvdG9idWZf" + 
-          "dW5pdHRlc3RfaW1wb3J0LkltcG9ydE1lc3NhZ2VMaXRlEkwKFG9wdGlvbmFs" + 
-          "X25lc3RlZF9lbnVtGBUgASgOMi4ucHJvdG9idWZfdW5pdHRlc3QuVGVzdEFs" + 
-          "bFR5cGVzTGl0ZS5OZXN0ZWRFbnVtEkEKFW9wdGlvbmFsX2ZvcmVpZ25fZW51" + 
-          "bRgWIAEoDjIiLnByb3RvYnVmX3VuaXR0ZXN0LkZvcmVpZ25FbnVtTGl0ZRJG" + 
-          "ChRvcHRpb25hbF9pbXBvcnRfZW51bRgXIAEoDjIoLnByb3RvYnVmX3VuaXR0" + 
-          "ZXN0X2ltcG9ydC5JbXBvcnRFbnVtTGl0ZRIhChVvcHRpb25hbF9zdHJpbmdf" + 
-          "cGllY2UYGCABKAlCAggCEhkKDW9wdGlvbmFsX2NvcmQYGSABKAlCAggBEhYK" + 
-          "DnJlcGVhdGVkX2ludDMyGB8gAygFEhYKDnJlcGVhdGVkX2ludDY0GCAgAygD" + 
-          "EhcKD3JlcGVhdGVkX3VpbnQzMhghIAMoDRIXCg9yZXBlYXRlZF91aW50NjQY" + 
-          "IiADKAQSFwoPcmVwZWF0ZWRfc2ludDMyGCMgAygREhcKD3JlcGVhdGVkX3Np" + 
-          "bnQ2NBgkIAMoEhIYChByZXBlYXRlZF9maXhlZDMyGCUgAygHEhgKEHJlcGVh" + 
-          "dGVkX2ZpeGVkNjQYJiADKAYSGQoRcmVwZWF0ZWRfc2ZpeGVkMzIYJyADKA8S" + 
-          "GQoRcmVwZWF0ZWRfc2ZpeGVkNjQYKCADKBASFgoOcmVwZWF0ZWRfZmxvYXQY" + 
-          "KSADKAISFwoPcmVwZWF0ZWRfZG91YmxlGCogAygBEhUKDXJlcGVhdGVkX2Jv" + 
-          "b2wYKyADKAgSFwoPcmVwZWF0ZWRfc3RyaW5nGCwgAygJEhYKDnJlcGVhdGVk" + 
-          "X2J5dGVzGC0gAygMEkgKDXJlcGVhdGVkZ3JvdXAYLiADKAoyMS5wcm90b2J1" + 
-          "Zl91bml0dGVzdC5UZXN0QWxsVHlwZXNMaXRlLlJlcGVhdGVkR3JvdXASUgoX" + 
-          "cmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2UYMCADKAsyMS5wcm90b2J1Zl91bml0" + 
-          "dGVzdC5UZXN0QWxsVHlwZXNMaXRlLk5lc3RlZE1lc3NhZ2USRwoYcmVwZWF0" + 
-          "ZWRfZm9yZWlnbl9tZXNzYWdlGDEgAygLMiUucHJvdG9idWZfdW5pdHRlc3Qu" + 
-          "Rm9yZWlnbk1lc3NhZ2VMaXRlEkwKF3JlcGVhdGVkX2ltcG9ydF9tZXNzYWdl" + 
-          "GDIgAygLMisucHJvdG9idWZfdW5pdHRlc3RfaW1wb3J0LkltcG9ydE1lc3Nh" + 
-          "Z2VMaXRlEkwKFHJlcGVhdGVkX25lc3RlZF9lbnVtGDMgAygOMi4ucHJvdG9i" + 
-          "dWZfdW5pdHRlc3QuVGVzdEFsbFR5cGVzTGl0ZS5OZXN0ZWRFbnVtEkEKFXJl" + 
-          "cGVhdGVkX2ZvcmVpZ25fZW51bRg0IAMoDjIiLnByb3RvYnVmX3VuaXR0ZXN0" + 
-          "LkZvcmVpZ25FbnVtTGl0ZRJGChRyZXBlYXRlZF9pbXBvcnRfZW51bRg1IAMo" + 
-          "DjIoLnByb3RvYnVmX3VuaXR0ZXN0X2ltcG9ydC5JbXBvcnRFbnVtTGl0ZRIh" + 
-          "ChVyZXBlYXRlZF9zdHJpbmdfcGllY2UYNiADKAlCAggCEhkKDXJlcGVhdGVk" + 
-          "X2NvcmQYNyADKAlCAggBEhkKDWRlZmF1bHRfaW50MzIYPSABKAU6AjQxEhkK" + 
-          "DWRlZmF1bHRfaW50NjQYPiABKAM6AjQyEhoKDmRlZmF1bHRfdWludDMyGD8g" + 
-          "ASgNOgI0MxIaCg5kZWZhdWx0X3VpbnQ2NBhAIAEoBDoCNDQSGwoOZGVmYXVs" + 
-          "dF9zaW50MzIYQSABKBE6Ay00NRIaCg5kZWZhdWx0X3NpbnQ2NBhCIAEoEjoC" + 
-          "NDYSGwoPZGVmYXVsdF9maXhlZDMyGEMgASgHOgI0NxIbCg9kZWZhdWx0X2Zp" + 
-          "eGVkNjQYRCABKAY6AjQ4EhwKEGRlZmF1bHRfc2ZpeGVkMzIYRSABKA86AjQ5" + 
-          "Eh0KEGRlZmF1bHRfc2ZpeGVkNjQYRiABKBA6Ay01MBIbCg1kZWZhdWx0X2Zs" + 
-          "b2F0GEcgASgCOgQ1MS41Eh0KDmRlZmF1bHRfZG91YmxlGEggASgBOgU1MjAw" + 
-          "MBIaCgxkZWZhdWx0X2Jvb2wYSSABKAg6BHRydWUSHQoOZGVmYXVsdF9zdHJp" + 
-          "bmcYSiABKAk6BWhlbGxvEhwKDWRlZmF1bHRfYnl0ZXMYSyABKAw6BXdvcmxk" + 
-          "ElAKE2RlZmF1bHRfbmVzdGVkX2VudW0YUSABKA4yLi5wcm90b2J1Zl91bml0" + 
-          "dGVzdC5UZXN0QWxsVHlwZXNMaXRlLk5lc3RlZEVudW06A0JBUhJSChRkZWZh" + 
-          "dWx0X2ZvcmVpZ25fZW51bRhSIAEoDjIiLnByb3RvYnVmX3VuaXR0ZXN0LkZv" + 
-          "cmVpZ25FbnVtTGl0ZToQRk9SRUlHTl9MSVRFX0JBUhJWChNkZWZhdWx0X2lt" + 
-          "cG9ydF9lbnVtGFMgASgOMigucHJvdG9idWZfdW5pdHRlc3RfaW1wb3J0Lklt" + 
-          "cG9ydEVudW1MaXRlOg9JTVBPUlRfTElURV9CQVISJQoUZGVmYXVsdF9zdHJp" + 
-          "bmdfcGllY2UYVCABKAk6A2FiY0ICCAISHQoMZGVmYXVsdF9jb3JkGFUgASgJ" + 
-          "OgMxMjNCAggBGhsKDU5lc3RlZE1lc3NhZ2USCgoCYmIYASABKAUaGgoNT3B0" + 
-          "aW9uYWxHcm91cBIJCgFhGBEgASgFGhoKDVJlcGVhdGVkR3JvdXASCQoBYRgv" + 
-          "IAEoBSInCgpOZXN0ZWRFbnVtEgcKA0ZPTxABEgcKA0JBUhACEgcKA0JBWhAD" + 
-          "Ih8KEkZvcmVpZ25NZXNzYWdlTGl0ZRIJCgFjGAEgASgFIrIDChNUZXN0UGFj" + 
-          "a2VkVHlwZXNMaXRlEhgKDHBhY2tlZF9pbnQzMhhaIAMoBUICEAESGAoMcGFj" + 
-          "a2VkX2ludDY0GFsgAygDQgIQARIZCg1wYWNrZWRfdWludDMyGFwgAygNQgIQ" + 
-          "ARIZCg1wYWNrZWRfdWludDY0GF0gAygEQgIQARIZCg1wYWNrZWRfc2ludDMy" + 
-          "GF4gAygRQgIQARIZCg1wYWNrZWRfc2ludDY0GF8gAygSQgIQARIaCg5wYWNr" + 
-          "ZWRfZml4ZWQzMhhgIAMoB0ICEAESGgoOcGFja2VkX2ZpeGVkNjQYYSADKAZC" + 
-          "AhABEhsKD3BhY2tlZF9zZml4ZWQzMhhiIAMoD0ICEAESGwoPcGFja2VkX3Nm" + 
-          "aXhlZDY0GGMgAygQQgIQARIYCgxwYWNrZWRfZmxvYXQYZCADKAJCAhABEhkK" + 
-          "DXBhY2tlZF9kb3VibGUYZSADKAFCAhABEhcKC3BhY2tlZF9ib29sGGYgAygI" + 
-          "QgIQARI7CgtwYWNrZWRfZW51bRhnIAMoDjIiLnByb3RvYnVmX3VuaXR0ZXN0" + 
-          "LkZvcmVpZ25FbnVtTGl0ZUICEAEiIQoVVGVzdEFsbEV4dGVuc2lvbnNMaXRl" + 
-          "KggIARCAgICAAiIpChxPcHRpb25hbEdyb3VwX2V4dGVuc2lvbl9saXRlEgkK" + 
-          "AWEYESABKAUiKQocUmVwZWF0ZWRHcm91cF9leHRlbnNpb25fbGl0ZRIJCgFh" + 
-          "GC8gASgFIiQKGFRlc3RQYWNrZWRFeHRlbnNpb25zTGl0ZSoICAEQgICAgAIi" + 
-          "XgoXVGVzdE5lc3RlZEV4dGVuc2lvbkxpdGUyQwoQbmVzdGVkX2V4dGVuc2lv" + 
-          "bhIoLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxFeHRlbnNpb25zTGl0ZRi5" + 
-          "YCABKAUiMgoSVGVzdERlcHJlY2F0ZWRMaXRlEhwKEGRlcHJlY2F0ZWRfZmll" + 
-          "bGQYASABKAVCAhgBKlMKD0ZvcmVpZ25FbnVtTGl0ZRIUChBGT1JFSUdOX0xJ" + 
-          "VEVfRk9PEAQSFAoQRk9SRUlHTl9MSVRFX0JBUhAFEhQKEEZPUkVJR05fTElU" + 
-          "RV9CQVoQBjpPCh1vcHRpb25hbF9pbnQzMl9leHRlbnNpb25fbGl0ZRIoLnBy" + 
-          "b3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxFeHRlbnNpb25zTGl0ZRgBIAEoBTpP" + 
-          "Ch1vcHRpb25hbF9pbnQ2NF9leHRlbnNpb25fbGl0ZRIoLnByb3RvYnVmX3Vu" + 
-          "aXR0ZXN0LlRlc3RBbGxFeHRlbnNpb25zTGl0ZRgCIAEoAzpQCh5vcHRpb25h" + 
-          "bF91aW50MzJfZXh0ZW5zaW9uX2xpdGUSKC5wcm90b2J1Zl91bml0dGVzdC5U" + 
-          "ZXN0QWxsRXh0ZW5zaW9uc0xpdGUYAyABKA06UAoeb3B0aW9uYWxfdWludDY0" + 
-          "X2V4dGVuc2lvbl9saXRlEigucHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbEV4" + 
-          "dGVuc2lvbnNMaXRlGAQgASgEOlAKHm9wdGlvbmFsX3NpbnQzMl9leHRlbnNp" + 
-          "b25fbGl0ZRIoLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxFeHRlbnNpb25z" + 
-          "TGl0ZRgFIAEoETpQCh5vcHRpb25hbF9zaW50NjRfZXh0ZW5zaW9uX2xpdGUS" + 
-          "KC5wcm90b2J1Zl91bml0dGVzdC5UZXN0QWxsRXh0ZW5zaW9uc0xpdGUYBiAB" + 
-          "KBI6UQofb3B0aW9uYWxfZml4ZWQzMl9leHRlbnNpb25fbGl0ZRIoLnByb3Rv" + 
-          "YnVmX3VuaXR0ZXN0LlRlc3RBbGxFeHRlbnNpb25zTGl0ZRgHIAEoBzpRCh9v" + 
-          "cHRpb25hbF9maXhlZDY0X2V4dGVuc2lvbl9saXRlEigucHJvdG9idWZfdW5p" + 
-          "dHRlc3QuVGVzdEFsbEV4dGVuc2lvbnNMaXRlGAggASgGOlIKIG9wdGlvbmFs" + 
-          "X3NmaXhlZDMyX2V4dGVuc2lvbl9saXRlEigucHJvdG9idWZfdW5pdHRlc3Qu" + 
-          "VGVzdEFsbEV4dGVuc2lvbnNMaXRlGAkgASgPOlIKIG9wdGlvbmFsX3NmaXhl" + 
-          "ZDY0X2V4dGVuc2lvbl9saXRlEigucHJvdG9idWZfdW5pdHRlc3QuVGVzdEFs" + 
-          "bEV4dGVuc2lvbnNMaXRlGAogASgQOk8KHW9wdGlvbmFsX2Zsb2F0X2V4dGVu" + 
-          "c2lvbl9saXRlEigucHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbEV4dGVuc2lv" + 
-          "bnNMaXRlGAsgASgCOlAKHm9wdGlvbmFsX2RvdWJsZV9leHRlbnNpb25fbGl0" + 
-          "ZRIoLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxFeHRlbnNpb25zTGl0ZRgM" + 
-          "IAEoATpOChxvcHRpb25hbF9ib29sX2V4dGVuc2lvbl9saXRlEigucHJvdG9i" + 
-          "dWZfdW5pdHRlc3QuVGVzdEFsbEV4dGVuc2lvbnNMaXRlGA0gASgIOlAKHm9w" + 
-          "dGlvbmFsX3N0cmluZ19leHRlbnNpb25fbGl0ZRIoLnByb3RvYnVmX3VuaXR0" + 
-          "ZXN0LlRlc3RBbGxFeHRlbnNpb25zTGl0ZRgOIAEoCTpPCh1vcHRpb25hbF9i" + 
-          "eXRlc19leHRlbnNpb25fbGl0ZRIoLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RB" + 
-          "bGxFeHRlbnNpb25zTGl0ZRgPIAEoDDp/ChxvcHRpb25hbGdyb3VwX2V4dGVu" + 
-          "c2lvbl9saXRlEigucHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbEV4dGVuc2lv" + 
-          "bnNMaXRlGBAgASgKMi8ucHJvdG9idWZfdW5pdHRlc3QuT3B0aW9uYWxHcm91" + 
-          "cF9leHRlbnNpb25fbGl0ZTqLAQomb3B0aW9uYWxfbmVzdGVkX21lc3NhZ2Vf" + 
-          "ZXh0ZW5zaW9uX2xpdGUSKC5wcm90b2J1Zl91bml0dGVzdC5UZXN0QWxsRXh0" + 
-          "ZW5zaW9uc0xpdGUYEiABKAsyMS5wcm90b2J1Zl91bml0dGVzdC5UZXN0QWxs" + 
-          "VHlwZXNMaXRlLk5lc3RlZE1lc3NhZ2U6gAEKJ29wdGlvbmFsX2ZvcmVpZ25f" + 
-          "bWVzc2FnZV9leHRlbnNpb25fbGl0ZRIoLnByb3RvYnVmX3VuaXR0ZXN0LlRl" + 
-          "c3RBbGxFeHRlbnNpb25zTGl0ZRgTIAEoCzIlLnByb3RvYnVmX3VuaXR0ZXN0" + 
-          "LkZvcmVpZ25NZXNzYWdlTGl0ZTqFAQomb3B0aW9uYWxfaW1wb3J0X21lc3Nh" + 
-          "Z2VfZXh0ZW5zaW9uX2xpdGUSKC5wcm90b2J1Zl91bml0dGVzdC5UZXN0QWxs" + 
-          "RXh0ZW5zaW9uc0xpdGUYFCABKAsyKy5wcm90b2J1Zl91bml0dGVzdF9pbXBv" + 
-          "cnQuSW1wb3J0TWVzc2FnZUxpdGU6hQEKI29wdGlvbmFsX25lc3RlZF9lbnVt" + 
-          "X2V4dGVuc2lvbl9saXRlEigucHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbEV4" + 
-          "dGVuc2lvbnNMaXRlGBUgASgOMi4ucHJvdG9idWZfdW5pdHRlc3QuVGVzdEFs" + 
-          "bFR5cGVzTGl0ZS5OZXN0ZWRFbnVtOnoKJG9wdGlvbmFsX2ZvcmVpZ25fZW51" + 
-          "bV9leHRlbnNpb25fbGl0ZRIoLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxF" + 
-          "eHRlbnNpb25zTGl0ZRgWIAEoDjIiLnByb3RvYnVmX3VuaXR0ZXN0LkZvcmVp" + 
-          "Z25FbnVtTGl0ZTp/CiNvcHRpb25hbF9pbXBvcnRfZW51bV9leHRlbnNpb25f" + 
-          "bGl0ZRIoLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxFeHRlbnNpb25zTGl0" + 
-          "ZRgXIAEoDjIoLnByb3RvYnVmX3VuaXR0ZXN0X2ltcG9ydC5JbXBvcnRFbnVt" + 
-          "TGl0ZTpaCiRvcHRpb25hbF9zdHJpbmdfcGllY2VfZXh0ZW5zaW9uX2xpdGUS" + 
-          "KC5wcm90b2J1Zl91bml0dGVzdC5UZXN0QWxsRXh0ZW5zaW9uc0xpdGUYGCAB" + 
-          "KAlCAggCOlIKHG9wdGlvbmFsX2NvcmRfZXh0ZW5zaW9uX2xpdGUSKC5wcm90" + 
-          "b2J1Zl91bml0dGVzdC5UZXN0QWxsRXh0ZW5zaW9uc0xpdGUYGSABKAlCAggB" + 
-          "Ok8KHXJlcGVhdGVkX2ludDMyX2V4dGVuc2lvbl9saXRlEigucHJvdG9idWZf" + 
-          "dW5pdHRlc3QuVGVzdEFsbEV4dGVuc2lvbnNMaXRlGB8gAygFOk8KHXJlcGVh" + 
-          "dGVkX2ludDY0X2V4dGVuc2lvbl9saXRlEigucHJvdG9idWZfdW5pdHRlc3Qu" + 
-          "VGVzdEFsbEV4dGVuc2lvbnNMaXRlGCAgAygDOlAKHnJlcGVhdGVkX3VpbnQz" + 
-          "Ml9leHRlbnNpb25fbGl0ZRIoLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxF" + 
-          "eHRlbnNpb25zTGl0ZRghIAMoDTpQCh5yZXBlYXRlZF91aW50NjRfZXh0ZW5z" + 
-          "aW9uX2xpdGUSKC5wcm90b2J1Zl91bml0dGVzdC5UZXN0QWxsRXh0ZW5zaW9u" + 
-          "c0xpdGUYIiADKAQ6UAoecmVwZWF0ZWRfc2ludDMyX2V4dGVuc2lvbl9saXRl" + 
-          "EigucHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbEV4dGVuc2lvbnNMaXRlGCMg" + 
-          "AygROlAKHnJlcGVhdGVkX3NpbnQ2NF9leHRlbnNpb25fbGl0ZRIoLnByb3Rv" + 
-          "YnVmX3VuaXR0ZXN0LlRlc3RBbGxFeHRlbnNpb25zTGl0ZRgkIAMoEjpRCh9y" + 
-          "ZXBlYXRlZF9maXhlZDMyX2V4dGVuc2lvbl9saXRlEigucHJvdG9idWZfdW5p" + 
-          "dHRlc3QuVGVzdEFsbEV4dGVuc2lvbnNMaXRlGCUgAygHOlEKH3JlcGVhdGVk" + 
-          "X2ZpeGVkNjRfZXh0ZW5zaW9uX2xpdGUSKC5wcm90b2J1Zl91bml0dGVzdC5U" + 
-          "ZXN0QWxsRXh0ZW5zaW9uc0xpdGUYJiADKAY6UgogcmVwZWF0ZWRfc2ZpeGVk" + 
-          "MzJfZXh0ZW5zaW9uX2xpdGUSKC5wcm90b2J1Zl91bml0dGVzdC5UZXN0QWxs" + 
-          "RXh0ZW5zaW9uc0xpdGUYJyADKA86UgogcmVwZWF0ZWRfc2ZpeGVkNjRfZXh0" + 
-          "ZW5zaW9uX2xpdGUSKC5wcm90b2J1Zl91bml0dGVzdC5UZXN0QWxsRXh0ZW5z" + 
-          "aW9uc0xpdGUYKCADKBA6TwodcmVwZWF0ZWRfZmxvYXRfZXh0ZW5zaW9uX2xp" + 
-          "dGUSKC5wcm90b2J1Zl91bml0dGVzdC5UZXN0QWxsRXh0ZW5zaW9uc0xpdGUY" + 
-          "KSADKAI6UAoecmVwZWF0ZWRfZG91YmxlX2V4dGVuc2lvbl9saXRlEigucHJv" + 
-          "dG9idWZfdW5pdHRlc3QuVGVzdEFsbEV4dGVuc2lvbnNMaXRlGCogAygBOk4K" + 
-          "HHJlcGVhdGVkX2Jvb2xfZXh0ZW5zaW9uX2xpdGUSKC5wcm90b2J1Zl91bml0" + 
-          "dGVzdC5UZXN0QWxsRXh0ZW5zaW9uc0xpdGUYKyADKAg6UAoecmVwZWF0ZWRf" + 
-          "c3RyaW5nX2V4dGVuc2lvbl9saXRlEigucHJvdG9idWZfdW5pdHRlc3QuVGVz" + 
-          "dEFsbEV4dGVuc2lvbnNMaXRlGCwgAygJOk8KHXJlcGVhdGVkX2J5dGVzX2V4" + 
-          "dGVuc2lvbl9saXRlEigucHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbEV4dGVu" + 
-          "c2lvbnNMaXRlGC0gAygMOn8KHHJlcGVhdGVkZ3JvdXBfZXh0ZW5zaW9uX2xp" + 
-          "dGUSKC5wcm90b2J1Zl91bml0dGVzdC5UZXN0QWxsRXh0ZW5zaW9uc0xpdGUY" + 
-          "LiADKAoyLy5wcm90b2J1Zl91bml0dGVzdC5SZXBlYXRlZEdyb3VwX2V4dGVu" + 
-          "c2lvbl9saXRlOosBCiZyZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZV9leHRlbnNp" + 
-          "b25fbGl0ZRIoLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxFeHRlbnNpb25z" + 
-          "TGl0ZRgwIAMoCzIxLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxUeXBlc0xp" + 
-          "dGUuTmVzdGVkTWVzc2FnZTqAAQoncmVwZWF0ZWRfZm9yZWlnbl9tZXNzYWdl" + 
-          "X2V4dGVuc2lvbl9saXRlEigucHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbEV4" + 
-          "dGVuc2lvbnNMaXRlGDEgAygLMiUucHJvdG9idWZfdW5pdHRlc3QuRm9yZWln" + 
-          "bk1lc3NhZ2VMaXRlOoUBCiZyZXBlYXRlZF9pbXBvcnRfbWVzc2FnZV9leHRl" + 
-          "bnNpb25fbGl0ZRIoLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxFeHRlbnNp" + 
-          "b25zTGl0ZRgyIAMoCzIrLnByb3RvYnVmX3VuaXR0ZXN0X2ltcG9ydC5JbXBv" + 
-          "cnRNZXNzYWdlTGl0ZTqFAQojcmVwZWF0ZWRfbmVzdGVkX2VudW1fZXh0ZW5z" + 
-          "aW9uX2xpdGUSKC5wcm90b2J1Zl91bml0dGVzdC5UZXN0QWxsRXh0ZW5zaW9u" + 
-          "c0xpdGUYMyADKA4yLi5wcm90b2J1Zl91bml0dGVzdC5UZXN0QWxsVHlwZXNM" + 
-          "aXRlLk5lc3RlZEVudW06egokcmVwZWF0ZWRfZm9yZWlnbl9lbnVtX2V4dGVu" + 
-          "c2lvbl9saXRlEigucHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbEV4dGVuc2lv" + 
-          "bnNMaXRlGDQgAygOMiIucHJvdG9idWZfdW5pdHRlc3QuRm9yZWlnbkVudW1M" + 
-          "aXRlOn8KI3JlcGVhdGVkX2ltcG9ydF9lbnVtX2V4dGVuc2lvbl9saXRlEigu" + 
-          "cHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbEV4dGVuc2lvbnNMaXRlGDUgAygO" + 
-          "MigucHJvdG9idWZfdW5pdHRlc3RfaW1wb3J0LkltcG9ydEVudW1MaXRlOloK" + 
-          "JHJlcGVhdGVkX3N0cmluZ19waWVjZV9leHRlbnNpb25fbGl0ZRIoLnByb3Rv" + 
-          "YnVmX3VuaXR0ZXN0LlRlc3RBbGxFeHRlbnNpb25zTGl0ZRg2IAMoCUICCAI6" + 
-          "UgoccmVwZWF0ZWRfY29yZF9leHRlbnNpb25fbGl0ZRIoLnByb3RvYnVmX3Vu" + 
-          "aXR0ZXN0LlRlc3RBbGxFeHRlbnNpb25zTGl0ZRg3IAMoCUICCAE6UgocZGVm" + 
-          "YXVsdF9pbnQzMl9leHRlbnNpb25fbGl0ZRIoLnByb3RvYnVmX3VuaXR0ZXN0" + 
-          "LlRlc3RBbGxFeHRlbnNpb25zTGl0ZRg9IAEoBToCNDE6UgocZGVmYXVsdF9p" + 
-          "bnQ2NF9leHRlbnNpb25fbGl0ZRIoLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RB" + 
-          "bGxFeHRlbnNpb25zTGl0ZRg+IAEoAzoCNDI6UwodZGVmYXVsdF91aW50MzJf" + 
-          "ZXh0ZW5zaW9uX2xpdGUSKC5wcm90b2J1Zl91bml0dGVzdC5UZXN0QWxsRXh0" + 
-          "ZW5zaW9uc0xpdGUYPyABKA06AjQzOlMKHWRlZmF1bHRfdWludDY0X2V4dGVu" + 
-          "c2lvbl9saXRlEigucHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbEV4dGVuc2lv" + 
-          "bnNMaXRlGEAgASgEOgI0NDpUCh1kZWZhdWx0X3NpbnQzMl9leHRlbnNpb25f" + 
-          "bGl0ZRIoLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxFeHRlbnNpb25zTGl0" + 
-          "ZRhBIAEoEToDLTQ1OlMKHWRlZmF1bHRfc2ludDY0X2V4dGVuc2lvbl9saXRl" + 
-          "EigucHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbEV4dGVuc2lvbnNMaXRlGEIg" + 
-          "ASgSOgI0NjpUCh5kZWZhdWx0X2ZpeGVkMzJfZXh0ZW5zaW9uX2xpdGUSKC5w" + 
-          "cm90b2J1Zl91bml0dGVzdC5UZXN0QWxsRXh0ZW5zaW9uc0xpdGUYQyABKAc6" + 
-          "AjQ3OlQKHmRlZmF1bHRfZml4ZWQ2NF9leHRlbnNpb25fbGl0ZRIoLnByb3Rv" + 
-          "YnVmX3VuaXR0ZXN0LlRlc3RBbGxFeHRlbnNpb25zTGl0ZRhEIAEoBjoCNDg6" + 
-          "VQofZGVmYXVsdF9zZml4ZWQzMl9leHRlbnNpb25fbGl0ZRIoLnByb3RvYnVm" + 
-          "X3VuaXR0ZXN0LlRlc3RBbGxFeHRlbnNpb25zTGl0ZRhFIAEoDzoCNDk6Vgof" + 
-          "ZGVmYXVsdF9zZml4ZWQ2NF9leHRlbnNpb25fbGl0ZRIoLnByb3RvYnVmX3Vu" + 
-          "aXR0ZXN0LlRlc3RBbGxFeHRlbnNpb25zTGl0ZRhGIAEoEDoDLTUwOlQKHGRl" + 
-          "ZmF1bHRfZmxvYXRfZXh0ZW5zaW9uX2xpdGUSKC5wcm90b2J1Zl91bml0dGVz" + 
-          "dC5UZXN0QWxsRXh0ZW5zaW9uc0xpdGUYRyABKAI6BDUxLjU6VgodZGVmYXVs" + 
-          "dF9kb3VibGVfZXh0ZW5zaW9uX2xpdGUSKC5wcm90b2J1Zl91bml0dGVzdC5U" + 
-          "ZXN0QWxsRXh0ZW5zaW9uc0xpdGUYSCABKAE6BTUyMDAwOlMKG2RlZmF1bHRf" + 
-          "Ym9vbF9leHRlbnNpb25fbGl0ZRIoLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RB" + 
-          "bGxFeHRlbnNpb25zTGl0ZRhJIAEoCDoEdHJ1ZTpWCh1kZWZhdWx0X3N0cmlu" + 
-          "Z19leHRlbnNpb25fbGl0ZRIoLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxF" + 
-          "eHRlbnNpb25zTGl0ZRhKIAEoCToFaGVsbG86VQocZGVmYXVsdF9ieXRlc19l" + 
-          "eHRlbnNpb25fbGl0ZRIoLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxFeHRl" + 
-          "bnNpb25zTGl0ZRhLIAEoDDoFd29ybGQ6iQEKImRlZmF1bHRfbmVzdGVkX2Vu" + 
-          "dW1fZXh0ZW5zaW9uX2xpdGUSKC5wcm90b2J1Zl91bml0dGVzdC5UZXN0QWxs" + 
-          "RXh0ZW5zaW9uc0xpdGUYUSABKA4yLi5wcm90b2J1Zl91bml0dGVzdC5UZXN0" + 
-          "QWxsVHlwZXNMaXRlLk5lc3RlZEVudW06A0JBUjqLAQojZGVmYXVsdF9mb3Jl" + 
-          "aWduX2VudW1fZXh0ZW5zaW9uX2xpdGUSKC5wcm90b2J1Zl91bml0dGVzdC5U" + 
-          "ZXN0QWxsRXh0ZW5zaW9uc0xpdGUYUiABKA4yIi5wcm90b2J1Zl91bml0dGVz" + 
-          "dC5Gb3JlaWduRW51bUxpdGU6EEZPUkVJR05fTElURV9CQVI6jwEKImRlZmF1" + 
-          "bHRfaW1wb3J0X2VudW1fZXh0ZW5zaW9uX2xpdGUSKC5wcm90b2J1Zl91bml0" + 
-          "dGVzdC5UZXN0QWxsRXh0ZW5zaW9uc0xpdGUYUyABKA4yKC5wcm90b2J1Zl91" + 
-          "bml0dGVzdF9pbXBvcnQuSW1wb3J0RW51bUxpdGU6D0lNUE9SVF9MSVRFX0JB" + 
-          "UjpeCiNkZWZhdWx0X3N0cmluZ19waWVjZV9leHRlbnNpb25fbGl0ZRIoLnBy" + 
-          "b3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxFeHRlbnNpb25zTGl0ZRhUIAEoCToD" + 
-          "YWJjQgIIAjpWChtkZWZhdWx0X2NvcmRfZXh0ZW5zaW9uX2xpdGUSKC5wcm90" + 
-          "b2J1Zl91bml0dGVzdC5UZXN0QWxsRXh0ZW5zaW9uc0xpdGUYVSABKAk6AzEy" + 
-          "M0ICCAE6VAobcGFja2VkX2ludDMyX2V4dGVuc2lvbl9saXRlEisucHJvdG9i" + 
-          "dWZfdW5pdHRlc3QuVGVzdFBhY2tlZEV4dGVuc2lvbnNMaXRlGFogAygFQgIQ" + 
-          "ATpUChtwYWNrZWRfaW50NjRfZXh0ZW5zaW9uX2xpdGUSKy5wcm90b2J1Zl91" + 
-          "bml0dGVzdC5UZXN0UGFja2VkRXh0ZW5zaW9uc0xpdGUYWyADKANCAhABOlUK" + 
-          "HHBhY2tlZF91aW50MzJfZXh0ZW5zaW9uX2xpdGUSKy5wcm90b2J1Zl91bml0" + 
-          "dGVzdC5UZXN0UGFja2VkRXh0ZW5zaW9uc0xpdGUYXCADKA1CAhABOlUKHHBh" + 
-          "Y2tlZF91aW50NjRfZXh0ZW5zaW9uX2xpdGUSKy5wcm90b2J1Zl91bml0dGVz" + 
-          "dC5UZXN0UGFja2VkRXh0ZW5zaW9uc0xpdGUYXSADKARCAhABOlUKHHBhY2tl" + 
-          "ZF9zaW50MzJfZXh0ZW5zaW9uX2xpdGUSKy5wcm90b2J1Zl91bml0dGVzdC5U" + 
-          "ZXN0UGFja2VkRXh0ZW5zaW9uc0xpdGUYXiADKBFCAhABOlUKHHBhY2tlZF9z" + 
-          "aW50NjRfZXh0ZW5zaW9uX2xpdGUSKy5wcm90b2J1Zl91bml0dGVzdC5UZXN0" + 
-          "UGFja2VkRXh0ZW5zaW9uc0xpdGUYXyADKBJCAhABOlYKHXBhY2tlZF9maXhl" + 
-          "ZDMyX2V4dGVuc2lvbl9saXRlEisucHJvdG9idWZfdW5pdHRlc3QuVGVzdFBh" + 
-          "Y2tlZEV4dGVuc2lvbnNMaXRlGGAgAygHQgIQATpWCh1wYWNrZWRfZml4ZWQ2" + 
-          "NF9leHRlbnNpb25fbGl0ZRIrLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RQYWNr" + 
-          "ZWRFeHRlbnNpb25zTGl0ZRhhIAMoBkICEAE6VwoecGFja2VkX3NmaXhlZDMy" + 
-          "X2V4dGVuc2lvbl9saXRlEisucHJvdG9idWZfdW5pdHRlc3QuVGVzdFBhY2tl" + 
-          "ZEV4dGVuc2lvbnNMaXRlGGIgAygPQgIQATpXCh5wYWNrZWRfc2ZpeGVkNjRf" + 
-          "ZXh0ZW5zaW9uX2xpdGUSKy5wcm90b2J1Zl91bml0dGVzdC5UZXN0UGFja2Vk" + 
-          "RXh0ZW5zaW9uc0xpdGUYYyADKBBCAhABOlQKG3BhY2tlZF9mbG9hdF9leHRl" + 
-          "bnNpb25fbGl0ZRIrLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RQYWNrZWRFeHRl" + 
-          "bnNpb25zTGl0ZRhkIAMoAkICEAE6VQoccGFja2VkX2RvdWJsZV9leHRlbnNp" + 
-          "b25fbGl0ZRIrLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RQYWNrZWRFeHRlbnNp" + 
-          "b25zTGl0ZRhlIAMoAUICEAE6UwoacGFja2VkX2Jvb2xfZXh0ZW5zaW9uX2xp" + 
-          "dGUSKy5wcm90b2J1Zl91bml0dGVzdC5UZXN0UGFja2VkRXh0ZW5zaW9uc0xp" + 
-          "dGUYZiADKAhCAhABOncKGnBhY2tlZF9lbnVtX2V4dGVuc2lvbl9saXRlEisu" + 
-          "cHJvdG9idWZfdW5pdHRlc3QuVGVzdFBhY2tlZEV4dGVuc2lvbnNMaXRlGGcg" + 
-          "AygOMiIucHJvdG9idWZfdW5pdHRlc3QuRm9yZWlnbkVudW1MaXRlQgIQAUJU" + 
-          "ChNjb20uZ29vZ2xlLnByb3RvYnVmSAPCPjoKIUdvb2dsZS5Qcm90b2NvbEJ1" + 
-          "ZmZlcnMuVGVzdFByb3RvcxIVVW5pdFRlc3RMaXRlUHJvdG9GaWxl");
-      pbd::FileDescriptor.InternalDescriptorAssigner assigner = delegate(pbd::FileDescriptor root) {
-        descriptor = root;
-        internal__static_protobuf_unittest_TestAllTypesLite__Descriptor = Descriptor.MessageTypes[0];
-        internal__static_protobuf_unittest_TestAllTypesLite__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Builder>(internal__static_protobuf_unittest_TestAllTypesLite__Descriptor,
-                new string[] { "OptionalInt32", "OptionalInt64", "OptionalUint32", "OptionalUint64", "OptionalSint32", "OptionalSint64", "OptionalFixed32", "OptionalFixed64", "OptionalSfixed32", "OptionalSfixed64", "OptionalFloat", "OptionalDouble", "OptionalBool", "OptionalString", "OptionalBytes", "OptionalGroup", "OptionalNestedMessage", "OptionalForeignMessage", "OptionalImportMessage", "OptionalNestedEnum", "OptionalForeignEnum", "OptionalImportEnum", "OptionalStringPiece", "OptionalCord", "RepeatedInt32", "RepeatedInt64", "RepeatedUint32", "RepeatedUint64", "RepeatedSint32", "RepeatedSint64", "RepeatedFixed32", "RepeatedFixed64", "RepeatedSfixed32", "RepeatedSfixed64", "RepeatedFloat", "RepeatedDouble", "RepeatedBool", "RepeatedString", "RepeatedBytes", "RepeatedGroup", "RepeatedNestedMessage", "RepeatedForeignMessage", "RepeatedImportMessage", "RepeatedNestedEnum", "RepeatedForeignEnum", "RepeatedImportEnum", "RepeatedStringPiece", "RepeatedCord", "DefaultInt32", "DefaultInt64", "DefaultUint32", "DefaultUint64", "DefaultSint32", "DefaultSint64", "DefaultFixed32", "DefaultFixed64", "DefaultSfixed32", "DefaultSfixed64", "DefaultFloat", "DefaultDouble", "DefaultBool", "DefaultString", "DefaultBytes", "DefaultNestedEnum", "DefaultForeignEnum", "DefaultImportEnum", "DefaultStringPiece", "DefaultCord", });
-        internal__static_protobuf_unittest_TestAllTypesLite_NestedMessage__Descriptor = internal__static_protobuf_unittest_TestAllTypesLite__Descriptor.NestedTypes[0];
-        internal__static_protobuf_unittest_TestAllTypesLite_NestedMessage__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage.Builder>(internal__static_protobuf_unittest_TestAllTypesLite_NestedMessage__Descriptor,
-                new string[] { "Bb", });
-        internal__static_protobuf_unittest_TestAllTypesLite_OptionalGroup__Descriptor = internal__static_protobuf_unittest_TestAllTypesLite__Descriptor.NestedTypes[1];
-        internal__static_protobuf_unittest_TestAllTypesLite_OptionalGroup__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.OptionalGroup, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.OptionalGroup.Builder>(internal__static_protobuf_unittest_TestAllTypesLite_OptionalGroup__Descriptor,
-                new string[] { "A", });
-        internal__static_protobuf_unittest_TestAllTypesLite_RepeatedGroup__Descriptor = internal__static_protobuf_unittest_TestAllTypesLite__Descriptor.NestedTypes[2];
-        internal__static_protobuf_unittest_TestAllTypesLite_RepeatedGroup__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.RepeatedGroup, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.RepeatedGroup.Builder>(internal__static_protobuf_unittest_TestAllTypesLite_RepeatedGroup__Descriptor,
-                new string[] { "A", });
-        internal__static_protobuf_unittest_ForeignMessageLite__Descriptor = Descriptor.MessageTypes[1];
-        internal__static_protobuf_unittest_ForeignMessageLite__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite, global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite.Builder>(internal__static_protobuf_unittest_ForeignMessageLite__Descriptor,
-                new string[] { "C", });
-        internal__static_protobuf_unittest_TestPackedTypesLite__Descriptor = Descriptor.MessageTypes[2];
-        internal__static_protobuf_unittest_TestPackedTypesLite__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestPackedTypesLite, global::Google.ProtocolBuffers.TestProtos.TestPackedTypesLite.Builder>(internal__static_protobuf_unittest_TestPackedTypesLite__Descriptor,
-                new string[] { "PackedInt32", "PackedInt64", "PackedUint32", "PackedUint64", "PackedSint32", "PackedSint64", "PackedFixed32", "PackedFixed64", "PackedSfixed32", "PackedSfixed64", "PackedFloat", "PackedDouble", "PackedBool", "PackedEnum", });
-        internal__static_protobuf_unittest_TestAllExtensionsLite__Descriptor = Descriptor.MessageTypes[3];
-        internal__static_protobuf_unittest_TestAllExtensionsLite__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.Builder>(internal__static_protobuf_unittest_TestAllExtensionsLite__Descriptor,
-                new string[] { });
-        internal__static_protobuf_unittest_OptionalGroup_extension_lite__Descriptor = Descriptor.MessageTypes[4];
-        internal__static_protobuf_unittest_OptionalGroup_extension_lite__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.OptionalGroup_extension_lite, global::Google.ProtocolBuffers.TestProtos.OptionalGroup_extension_lite.Builder>(internal__static_protobuf_unittest_OptionalGroup_extension_lite__Descriptor,
-                new string[] { "A", });
-        internal__static_protobuf_unittest_RepeatedGroup_extension_lite__Descriptor = Descriptor.MessageTypes[5];
-        internal__static_protobuf_unittest_RepeatedGroup_extension_lite__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.RepeatedGroup_extension_lite, global::Google.ProtocolBuffers.TestProtos.RepeatedGroup_extension_lite.Builder>(internal__static_protobuf_unittest_RepeatedGroup_extension_lite__Descriptor,
-                new string[] { "A", });
-        internal__static_protobuf_unittest_TestPackedExtensionsLite__Descriptor = Descriptor.MessageTypes[6];
-        internal__static_protobuf_unittest_TestPackedExtensionsLite__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite.Builder>(internal__static_protobuf_unittest_TestPackedExtensionsLite__Descriptor,
-                new string[] { });
-        internal__static_protobuf_unittest_TestNestedExtensionLite__Descriptor = Descriptor.MessageTypes[7];
-        internal__static_protobuf_unittest_TestNestedExtensionLite__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestNestedExtensionLite, global::Google.ProtocolBuffers.TestProtos.TestNestedExtensionLite.Builder>(internal__static_protobuf_unittest_TestNestedExtensionLite__Descriptor,
-                new string[] { });
-        global::Google.ProtocolBuffers.TestProtos.TestNestedExtensionLite.NestedExtension = pb::GeneratedSingleExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.TestNestedExtensionLite.Descriptor.Extensions[0]);
-        internal__static_protobuf_unittest_TestDeprecatedLite__Descriptor = Descriptor.MessageTypes[8];
-        internal__static_protobuf_unittest_TestDeprecatedLite__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestDeprecatedLite, global::Google.ProtocolBuffers.TestProtos.TestDeprecatedLite.Builder>(internal__static_protobuf_unittest_TestDeprecatedLite__Descriptor,
-                new string[] { "DeprecatedField", });
-        global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalInt32ExtensionLite = pb::GeneratedSingleExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor.Extensions[0]);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalInt64ExtensionLite = pb::GeneratedSingleExtension<long>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor.Extensions[1]);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalUint32ExtensionLite = pb::GeneratedSingleExtension<uint>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor.Extensions[2]);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalUint64ExtensionLite = pb::GeneratedSingleExtension<ulong>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor.Extensions[3]);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalSint32ExtensionLite = pb::GeneratedSingleExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor.Extensions[4]);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalSint64ExtensionLite = pb::GeneratedSingleExtension<long>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor.Extensions[5]);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalFixed32ExtensionLite = pb::GeneratedSingleExtension<uint>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor.Extensions[6]);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalFixed64ExtensionLite = pb::GeneratedSingleExtension<ulong>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor.Extensions[7]);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalSfixed32ExtensionLite = pb::GeneratedSingleExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor.Extensions[8]);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalSfixed64ExtensionLite = pb::GeneratedSingleExtension<long>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor.Extensions[9]);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalFloatExtensionLite = pb::GeneratedSingleExtension<float>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor.Extensions[10]);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalDoubleExtensionLite = pb::GeneratedSingleExtension<double>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor.Extensions[11]);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalBoolExtensionLite = pb::GeneratedSingleExtension<bool>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor.Extensions[12]);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalStringExtensionLite = pb::GeneratedSingleExtension<string>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor.Extensions[13]);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalBytesExtensionLite = pb::GeneratedSingleExtension<pb::ByteString>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor.Extensions[14]);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalGroupExtensionLite = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.OptionalGroup_extension_lite>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor.Extensions[15]);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalNestedMessageExtensionLite = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor.Extensions[16]);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalForeignMessageExtensionLite = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor.Extensions[17]);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalImportMessageExtensionLite = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.ImportMessageLite>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor.Extensions[18]);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalNestedEnumExtensionLite = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor.Extensions[19]);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalForeignEnumExtensionLite = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor.Extensions[20]);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalImportEnumExtensionLite = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.ImportEnumLite>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor.Extensions[21]);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalStringPieceExtensionLite = pb::GeneratedSingleExtension<string>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor.Extensions[22]);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalCordExtensionLite = pb::GeneratedSingleExtension<string>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor.Extensions[23]);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedInt32ExtensionLite = pb::GeneratedRepeatExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor.Extensions[24]);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedInt64ExtensionLite = pb::GeneratedRepeatExtension<long>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor.Extensions[25]);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedUint32ExtensionLite = pb::GeneratedRepeatExtension<uint>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor.Extensions[26]);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedUint64ExtensionLite = pb::GeneratedRepeatExtension<ulong>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor.Extensions[27]);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedSint32ExtensionLite = pb::GeneratedRepeatExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor.Extensions[28]);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedSint64ExtensionLite = pb::GeneratedRepeatExtension<long>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor.Extensions[29]);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedFixed32ExtensionLite = pb::GeneratedRepeatExtension<uint>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor.Extensions[30]);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedFixed64ExtensionLite = pb::GeneratedRepeatExtension<ulong>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor.Extensions[31]);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedSfixed32ExtensionLite = pb::GeneratedRepeatExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor.Extensions[32]);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedSfixed64ExtensionLite = pb::GeneratedRepeatExtension<long>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor.Extensions[33]);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedFloatExtensionLite = pb::GeneratedRepeatExtension<float>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor.Extensions[34]);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedDoubleExtensionLite = pb::GeneratedRepeatExtension<double>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor.Extensions[35]);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedBoolExtensionLite = pb::GeneratedRepeatExtension<bool>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor.Extensions[36]);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedStringExtensionLite = pb::GeneratedRepeatExtension<string>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor.Extensions[37]);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedBytesExtensionLite = pb::GeneratedRepeatExtension<pb::ByteString>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor.Extensions[38]);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedGroupExtensionLite = pb::GeneratedRepeatExtension<global::Google.ProtocolBuffers.TestProtos.RepeatedGroup_extension_lite>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor.Extensions[39]);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedNestedMessageExtensionLite = pb::GeneratedRepeatExtension<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor.Extensions[40]);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedForeignMessageExtensionLite = pb::GeneratedRepeatExtension<global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor.Extensions[41]);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedImportMessageExtensionLite = pb::GeneratedRepeatExtension<global::Google.ProtocolBuffers.TestProtos.ImportMessageLite>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor.Extensions[42]);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedNestedEnumExtensionLite = pb::GeneratedRepeatExtension<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor.Extensions[43]);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedForeignEnumExtensionLite = pb::GeneratedRepeatExtension<global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor.Extensions[44]);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedImportEnumExtensionLite = pb::GeneratedRepeatExtension<global::Google.ProtocolBuffers.TestProtos.ImportEnumLite>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor.Extensions[45]);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedStringPieceExtensionLite = pb::GeneratedRepeatExtension<string>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor.Extensions[46]);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedCordExtensionLite = pb::GeneratedRepeatExtension<string>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor.Extensions[47]);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultInt32ExtensionLite = pb::GeneratedSingleExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor.Extensions[48]);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultInt64ExtensionLite = pb::GeneratedSingleExtension<long>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor.Extensions[49]);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultUint32ExtensionLite = pb::GeneratedSingleExtension<uint>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor.Extensions[50]);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultUint64ExtensionLite = pb::GeneratedSingleExtension<ulong>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor.Extensions[51]);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultSint32ExtensionLite = pb::GeneratedSingleExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor.Extensions[52]);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultSint64ExtensionLite = pb::GeneratedSingleExtension<long>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor.Extensions[53]);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultFixed32ExtensionLite = pb::GeneratedSingleExtension<uint>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor.Extensions[54]);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultFixed64ExtensionLite = pb::GeneratedSingleExtension<ulong>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor.Extensions[55]);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultSfixed32ExtensionLite = pb::GeneratedSingleExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor.Extensions[56]);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultSfixed64ExtensionLite = pb::GeneratedSingleExtension<long>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor.Extensions[57]);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultFloatExtensionLite = pb::GeneratedSingleExtension<float>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor.Extensions[58]);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultDoubleExtensionLite = pb::GeneratedSingleExtension<double>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor.Extensions[59]);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultBoolExtensionLite = pb::GeneratedSingleExtension<bool>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor.Extensions[60]);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultStringExtensionLite = pb::GeneratedSingleExtension<string>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor.Extensions[61]);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultBytesExtensionLite = pb::GeneratedSingleExtension<pb::ByteString>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor.Extensions[62]);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultNestedEnumExtensionLite = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor.Extensions[63]);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultForeignEnumExtensionLite = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor.Extensions[64]);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultImportEnumExtensionLite = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.ImportEnumLite>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor.Extensions[65]);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultStringPieceExtensionLite = pb::GeneratedSingleExtension<string>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor.Extensions[66]);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultCordExtensionLite = pb::GeneratedSingleExtension<string>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor.Extensions[67]);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.PackedInt32ExtensionLite = pb::GeneratedRepeatExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor.Extensions[68]);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.PackedInt64ExtensionLite = pb::GeneratedRepeatExtension<long>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor.Extensions[69]);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.PackedUint32ExtensionLite = pb::GeneratedRepeatExtension<uint>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor.Extensions[70]);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.PackedUint64ExtensionLite = pb::GeneratedRepeatExtension<ulong>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor.Extensions[71]);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.PackedSint32ExtensionLite = pb::GeneratedRepeatExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor.Extensions[72]);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.PackedSint64ExtensionLite = pb::GeneratedRepeatExtension<long>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor.Extensions[73]);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.PackedFixed32ExtensionLite = pb::GeneratedRepeatExtension<uint>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor.Extensions[74]);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.PackedFixed64ExtensionLite = pb::GeneratedRepeatExtension<ulong>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor.Extensions[75]);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.PackedSfixed32ExtensionLite = pb::GeneratedRepeatExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor.Extensions[76]);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.PackedSfixed64ExtensionLite = pb::GeneratedRepeatExtension<long>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor.Extensions[77]);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.PackedFloatExtensionLite = pb::GeneratedRepeatExtension<float>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor.Extensions[78]);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.PackedDoubleExtensionLite = pb::GeneratedRepeatExtension<double>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor.Extensions[79]);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.PackedBoolExtensionLite = pb::GeneratedRepeatExtension<bool>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor.Extensions[80]);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.PackedEnumExtensionLite = pb::GeneratedRepeatExtension<global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor.Extensions[81]);
-        pb::ExtensionRegistry registry = pb::ExtensionRegistry.CreateInstance();
-        RegisterAllExtensions(registry);
-        global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.RegisterAllExtensions(registry);
-        global::Google.ProtocolBuffers.TestProtos.UnitTestImportLiteProtoFile.RegisterAllExtensions(registry);
-        return registry;
-      };
-      pbd::FileDescriptor.InternalBuildGeneratedFileFrom(descriptorData,
-          new pbd::FileDescriptor[] {
-          global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.Descriptor, 
-          global::Google.ProtocolBuffers.TestProtos.UnitTestImportLiteProtoFile.Descriptor, 
-          }, assigner);
+      Descriptor = null;
+      global::Google.ProtocolBuffers.TestProtos.TestNestedExtensionLite.NestedExtension = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, int>(
+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
+          default(int),
+          null,
+          null,
+          0,
+          pbd::FieldType.Int32);
+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalInt32ExtensionLite = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, int>(
+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
+          default(int),
+          null,
+          null,
+          0,
+          pbd::FieldType.Int32);
+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalInt64ExtensionLite = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, long>(
+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
+          default(long),
+          null,
+          null,
+          1,
+          pbd::FieldType.Int64);
+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalUint32ExtensionLite = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, uint>(
+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
+          default(uint),
+          null,
+          null,
+          2,
+          pbd::FieldType.UInt32);
+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalUint64ExtensionLite = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, ulong>(
+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
+          default(ulong),
+          null,
+          null,
+          3,
+          pbd::FieldType.UInt64);
+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalSint32ExtensionLite = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, int>(
+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
+          default(int),
+          null,
+          null,
+          4,
+          pbd::FieldType.SInt32);
+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalSint64ExtensionLite = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, long>(
+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
+          default(long),
+          null,
+          null,
+          5,
+          pbd::FieldType.SInt64);
+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalFixed32ExtensionLite = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, uint>(
+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
+          default(uint),
+          null,
+          null,
+          6,
+          pbd::FieldType.Fixed32);
+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalFixed64ExtensionLite = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, ulong>(
+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
+          default(ulong),
+          null,
+          null,
+          7,
+          pbd::FieldType.Fixed64);
+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalSfixed32ExtensionLite = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, int>(
+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
+          default(int),
+          null,
+          null,
+          8,
+          pbd::FieldType.SFixed32);
+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalSfixed64ExtensionLite = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, long>(
+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
+          default(long),
+          null,
+          null,
+          9,
+          pbd::FieldType.SFixed64);
+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalFloatExtensionLite = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, float>(
+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
+          default(float),
+          null,
+          null,
+          10,
+          pbd::FieldType.Float);
+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalDoubleExtensionLite = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, double>(
+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
+          default(double),
+          null,
+          null,
+          11,
+          pbd::FieldType.Double);
+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalBoolExtensionLite = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, bool>(
+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
+          default(bool),
+          null,
+          null,
+          12,
+          pbd::FieldType.Bool);
+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalStringExtensionLite = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, string>(
+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
+          null,
+          null,
+          null,
+          13,
+          pbd::FieldType.String);
+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalBytesExtensionLite = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, pb::ByteString>(
+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
+          null,
+          null,
+          null,
+          14,
+          pbd::FieldType.Bytes);
+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalGroupExtensionLite = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.OptionalGroup_extension_lite>(
+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
+          null,
+          global::Google.ProtocolBuffers.TestProtos.OptionalGroup_extension_lite.DefaultInstance,
+          null,
+          15,
+          pbd::FieldType.Group);
+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalNestedMessageExtensionLite = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage>(
+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
+          null,
+          global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage.DefaultInstance,
+          null,
+          16,
+          pbd::FieldType.Message);
+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalForeignMessageExtensionLite = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite>(
+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
+          null,
+          global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite.DefaultInstance,
+          null,
+          17,
+          pbd::FieldType.Message);
+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalImportMessageExtensionLite = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.ImportMessageLite>(
+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
+          null,
+          global::Google.ProtocolBuffers.TestProtos.ImportMessageLite.DefaultInstance,
+          null,
+          18,
+          pbd::FieldType.Message);
+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalNestedEnumExtensionLite = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum>(
+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
+          default(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum),
+          null,
+          new EnumLiteMap<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum>(),
+          19,
+          pbd::FieldType.Enum);
+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalForeignEnumExtensionLite = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite>(
+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
+          default(global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite),
+          null,
+          new EnumLiteMap<global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite>(),
+          20,
+          pbd::FieldType.Enum);
+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalImportEnumExtensionLite = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.ImportEnumLite>(
+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
+          default(global::Google.ProtocolBuffers.TestProtos.ImportEnumLite),
+          null,
+          new EnumLiteMap<global::Google.ProtocolBuffers.TestProtos.ImportEnumLite>(),
+          21,
+          pbd::FieldType.Enum);
+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalStringPieceExtensionLite = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, string>(
+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
+          null,
+          null,
+          null,
+          22,
+          pbd::FieldType.String);
+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalCordExtensionLite = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, string>(
+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
+          null,
+          null,
+          null,
+          23,
+          pbd::FieldType.String);
+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedInt32ExtensionLite = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, int>(
+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
+          default(int),
+          null,
+          null,
+          24,
+          pbd::FieldType.Int32,
+          false);
+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedInt64ExtensionLite = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, long>(
+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
+          default(long),
+          null,
+          null,
+          25,
+          pbd::FieldType.Int64,
+          false);
+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedUint32ExtensionLite = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, uint>(
+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
+          default(uint),
+          null,
+          null,
+          26,
+          pbd::FieldType.UInt32,
+          false);
+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedUint64ExtensionLite = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, ulong>(
+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
+          default(ulong),
+          null,
+          null,
+          27,
+          pbd::FieldType.UInt64,
+          false);
+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedSint32ExtensionLite = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, int>(
+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
+          default(int),
+          null,
+          null,
+          28,
+          pbd::FieldType.SInt32,
+          false);
+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedSint64ExtensionLite = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, long>(
+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
+          default(long),
+          null,
+          null,
+          29,
+          pbd::FieldType.SInt64,
+          false);
+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedFixed32ExtensionLite = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, uint>(
+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
+          default(uint),
+          null,
+          null,
+          30,
+          pbd::FieldType.Fixed32,
+          false);
+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedFixed64ExtensionLite = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, ulong>(
+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
+          default(ulong),
+          null,
+          null,
+          31,
+          pbd::FieldType.Fixed64,
+          false);
+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedSfixed32ExtensionLite = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, int>(
+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
+          default(int),
+          null,
+          null,
+          32,
+          pbd::FieldType.SFixed32,
+          false);
+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedSfixed64ExtensionLite = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, long>(
+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
+          default(long),
+          null,
+          null,
+          33,
+          pbd::FieldType.SFixed64,
+          false);
+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedFloatExtensionLite = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, float>(
+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
+          default(float),
+          null,
+          null,
+          34,
+          pbd::FieldType.Float,
+          false);
+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedDoubleExtensionLite = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, double>(
+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
+          default(double),
+          null,
+          null,
+          35,
+          pbd::FieldType.Double,
+          false);
+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedBoolExtensionLite = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, bool>(
+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
+          default(bool),
+          null,
+          null,
+          36,
+          pbd::FieldType.Bool,
+          false);
+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedStringExtensionLite = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, string>(
+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
+          null,
+          null,
+          null,
+          37,
+          pbd::FieldType.String,
+          false);
+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedBytesExtensionLite = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, pb::ByteString>(
+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
+          null,
+          null,
+          null,
+          38,
+          pbd::FieldType.Bytes,
+          false);
+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedGroupExtensionLite = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.RepeatedGroup_extension_lite>(
+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
+          null,
+          global::Google.ProtocolBuffers.TestProtos.RepeatedGroup_extension_lite.DefaultInstance,
+          null,
+          39,
+          pbd::FieldType.Group,
+          false);
+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedNestedMessageExtensionLite = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage>(
+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
+          null,
+          global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage.DefaultInstance,
+          null,
+          40,
+          pbd::FieldType.Message,
+          false);
+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedForeignMessageExtensionLite = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite>(
+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
+          null,
+          global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite.DefaultInstance,
+          null,
+          41,
+          pbd::FieldType.Message,
+          false);
+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedImportMessageExtensionLite = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.ImportMessageLite>(
+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
+          null,
+          global::Google.ProtocolBuffers.TestProtos.ImportMessageLite.DefaultInstance,
+          null,
+          42,
+          pbd::FieldType.Message,
+          false);
+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedNestedEnumExtensionLite = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum>(
+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
+          default(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum),
+          null,
+          new EnumLiteMap<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum>(),
+          43,
+          pbd::FieldType.Enum,
+          false);
+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedForeignEnumExtensionLite = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite>(
+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
+          default(global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite),
+          null,
+          new EnumLiteMap<global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite>(),
+          44,
+          pbd::FieldType.Enum,
+          false);
+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedImportEnumExtensionLite = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.ImportEnumLite>(
+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
+          default(global::Google.ProtocolBuffers.TestProtos.ImportEnumLite),
+          null,
+          new EnumLiteMap<global::Google.ProtocolBuffers.TestProtos.ImportEnumLite>(),
+          45,
+          pbd::FieldType.Enum,
+          false);
+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedStringPieceExtensionLite = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, string>(
+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
+          null,
+          null,
+          null,
+          46,
+          pbd::FieldType.String,
+          false);
+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedCordExtensionLite = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, string>(
+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
+          null,
+          null,
+          null,
+          47,
+          pbd::FieldType.String,
+          false);
+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultInt32ExtensionLite = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, int>(
+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
+          41,
+          null,
+          null,
+          48,
+          pbd::FieldType.Int32);
+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultInt64ExtensionLite = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, long>(
+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
+          42L,
+          null,
+          null,
+          49,
+          pbd::FieldType.Int64);
+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultUint32ExtensionLite = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, uint>(
+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
+          43,
+          null,
+          null,
+          50,
+          pbd::FieldType.UInt32);
+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultUint64ExtensionLite = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, ulong>(
+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
+          44UL,
+          null,
+          null,
+          51,
+          pbd::FieldType.UInt64);
+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultSint32ExtensionLite = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, int>(
+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
+          -45,
+          null,
+          null,
+          52,
+          pbd::FieldType.SInt32);
+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultSint64ExtensionLite = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, long>(
+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
+          46,
+          null,
+          null,
+          53,
+          pbd::FieldType.SInt64);
+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultFixed32ExtensionLite = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, uint>(
+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
+          47,
+          null,
+          null,
+          54,
+          pbd::FieldType.Fixed32);
+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultFixed64ExtensionLite = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, ulong>(
+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
+          48,
+          null,
+          null,
+          55,
+          pbd::FieldType.Fixed64);
+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultSfixed32ExtensionLite = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, int>(
+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
+          49,
+          null,
+          null,
+          56,
+          pbd::FieldType.SFixed32);
+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultSfixed64ExtensionLite = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, long>(
+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
+          -50,
+          null,
+          null,
+          57,
+          pbd::FieldType.SFixed64);
+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultFloatExtensionLite = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, float>(
+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
+          51.5F,
+          null,
+          null,
+          58,
+          pbd::FieldType.Float);
+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultDoubleExtensionLite = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, double>(
+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
+          52000D,
+          null,
+          null,
+          59,
+          pbd::FieldType.Double);
+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultBoolExtensionLite = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, bool>(
+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
+          true,
+          null,
+          null,
+          60,
+          pbd::FieldType.Bool);
+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultStringExtensionLite = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, string>(
+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
+          "hello",
+          null,
+          null,
+          61,
+          pbd::FieldType.String);
+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultBytesExtensionLite = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, pb::ByteString>(
+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
+          ByteString.FromBase64("d29ybGQ="),
+          null,
+          null,
+          62,
+          pbd::FieldType.Bytes);
+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultNestedEnumExtensionLite = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum>(
+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
+          global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum.BAR,
+          null,
+          new EnumLiteMap<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum>(),
+          63,
+          pbd::FieldType.Enum);
+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultForeignEnumExtensionLite = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite>(
+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
+          global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite.FOREIGN_LITE_BAR,
+          null,
+          new EnumLiteMap<global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite>(),
+          64,
+          pbd::FieldType.Enum);
+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultImportEnumExtensionLite = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.ImportEnumLite>(
+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
+          global::Google.ProtocolBuffers.TestProtos.ImportEnumLite.IMPORT_LITE_BAR,
+          null,
+          new EnumLiteMap<global::Google.ProtocolBuffers.TestProtos.ImportEnumLite>(),
+          65,
+          pbd::FieldType.Enum);
+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultStringPieceExtensionLite = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, string>(
+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
+          "abc",
+          null,
+          null,
+          66,
+          pbd::FieldType.String);
+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultCordExtensionLite = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, string>(
+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
+          "123",
+          null,
+          null,
+          67,
+          pbd::FieldType.String);
+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.PackedInt32ExtensionLite = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, int>(
+          global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite.DefaultInstance,
+          default(int),
+          null,
+          null,
+          68,
+          pbd::FieldType.Int32,
+          true);
+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.PackedInt64ExtensionLite = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, long>(
+          global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite.DefaultInstance,
+          default(long),
+          null,
+          null,
+          69,
+          pbd::FieldType.Int64,
+          true);
+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.PackedUint32ExtensionLite = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, uint>(
+          global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite.DefaultInstance,
+          default(uint),
+          null,
+          null,
+          70,
+          pbd::FieldType.UInt32,
+          true);
+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.PackedUint64ExtensionLite = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, ulong>(
+          global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite.DefaultInstance,
+          default(ulong),
+          null,
+          null,
+          71,
+          pbd::FieldType.UInt64,
+          true);
+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.PackedSint32ExtensionLite = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, int>(
+          global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite.DefaultInstance,
+          default(int),
+          null,
+          null,
+          72,
+          pbd::FieldType.SInt32,
+          true);
+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.PackedSint64ExtensionLite = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, long>(
+          global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite.DefaultInstance,
+          default(long),
+          null,
+          null,
+          73,
+          pbd::FieldType.SInt64,
+          true);
+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.PackedFixed32ExtensionLite = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, uint>(
+          global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite.DefaultInstance,
+          default(uint),
+          null,
+          null,
+          74,
+          pbd::FieldType.Fixed32,
+          true);
+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.PackedFixed64ExtensionLite = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, ulong>(
+          global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite.DefaultInstance,
+          default(ulong),
+          null,
+          null,
+          75,
+          pbd::FieldType.Fixed64,
+          true);
+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.PackedSfixed32ExtensionLite = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, int>(
+          global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite.DefaultInstance,
+          default(int),
+          null,
+          null,
+          76,
+          pbd::FieldType.SFixed32,
+          true);
+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.PackedSfixed64ExtensionLite = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, long>(
+          global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite.DefaultInstance,
+          default(long),
+          null,
+          null,
+          77,
+          pbd::FieldType.SFixed64,
+          true);
+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.PackedFloatExtensionLite = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, float>(
+          global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite.DefaultInstance,
+          default(float),
+          null,
+          null,
+          78,
+          pbd::FieldType.Float,
+          true);
+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.PackedDoubleExtensionLite = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, double>(
+          global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite.DefaultInstance,
+          default(double),
+          null,
+          null,
+          79,
+          pbd::FieldType.Double,
+          true);
+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.PackedBoolExtensionLite = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, bool>(
+          global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite.DefaultInstance,
+          default(bool),
+          null,
+          null,
+          80,
+          pbd::FieldType.Bool,
+          true);
+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.PackedEnumExtensionLite = 
+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite>(
+          global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite.DefaultInstance,
+          default(global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite),
+          null,
+          new EnumLiteMap<global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite>(),
+          81,
+          pbd::FieldType.Enum,
+          true);
     }
     #endregion
     
@@ -731,7 +1000,7 @@
   #endregion
   
   #region Messages
-  public sealed partial class TestAllTypesLite : pb::GeneratedMessage<TestAllTypesLite, TestAllTypesLite.Builder> {
+  public sealed partial class TestAllTypesLite : pb::GeneratedMessageLite<TestAllTypesLite, TestAllTypesLite.Builder> {
     private static readonly TestAllTypesLite defaultInstance = new Builder().BuildPartial();
     public static TestAllTypesLite DefaultInstance {
       get { return defaultInstance; }
@@ -745,14 +1014,6 @@
       get { return this; }
     }
     
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.internal__static_protobuf_unittest_TestAllTypesLite__Descriptor; }
-    }
-    
-    protected override pb::FieldAccess.FieldAccessorTable<TestAllTypesLite, TestAllTypesLite.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.internal__static_protobuf_unittest_TestAllTypesLite__FieldAccessorTable; }
-    }
-    
     #region Nested types
     public static class Types {
       public enum NestedEnum {
@@ -761,7 +1022,7 @@
         BAZ = 3,
       }
       
-      public sealed partial class NestedMessage : pb::GeneratedMessage<NestedMessage, NestedMessage.Builder> {
+      public sealed partial class NestedMessage : pb::GeneratedMessageLite<NestedMessage, NestedMessage.Builder> {
         private static readonly NestedMessage defaultInstance = new Builder().BuildPartial();
         public static NestedMessage DefaultInstance {
           get { return defaultInstance; }
@@ -775,14 +1036,6 @@
           get { return this; }
         }
         
-        public static pbd::MessageDescriptor Descriptor {
-          get { return global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.internal__static_protobuf_unittest_TestAllTypesLite_NestedMessage__Descriptor; }
-        }
-        
-        protected override pb::FieldAccess.FieldAccessorTable<NestedMessage, NestedMessage.Builder> InternalFieldAccessors {
-          get { return global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.internal__static_protobuf_unittest_TestAllTypesLite_NestedMessage__FieldAccessorTable; }
-        }
-        
         public const int BbFieldNumber = 1;
         private bool hasBb;
         private int bb_ = 0;
@@ -793,6 +1046,34 @@
           get { return bb_; }
         }
         
+        public override bool IsInitialized {
+          get {
+            return true;
+          }
+        }
+        
+        public override void WriteTo(pb::CodedOutputStream output) {
+          int size = SerializedSize;
+          if (HasBb) {
+            output.WriteInt32(1, Bb);
+          }
+        }
+        
+        private int memoizedSerializedSize = -1;
+        public override int SerializedSize {
+          get {
+            int size = memoizedSerializedSize;
+            if (size != -1) return size;
+            
+            size = 0;
+            if (HasBb) {
+              size += pb::CodedOutputStream.ComputeInt32Size(1, Bb);
+            }
+            memoizedSerializedSize = size;
+            return size;
+          }
+        }
+        
         public static NestedMessage ParseFrom(pb::ByteString data) {
           return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
         }
@@ -830,7 +1111,7 @@
           return (Builder) new Builder().MergeFrom(prototype);
         }
         
-        public sealed partial class Builder : pb::GeneratedBuilder<NestedMessage, Builder> {
+        public sealed partial class Builder : pb::GeneratedBuilderLite<NestedMessage, Builder> {
           protected override Builder ThisBuilder {
             get { return this; }
           }
@@ -851,10 +1132,6 @@
             return new Builder().MergeFrom(result);
           }
           
-          public override pbd::MessageDescriptor DescriptorForType {
-            get { return global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage.Descriptor; }
-          }
-          
           public override NestedMessage DefaultInstanceForType {
             get { return global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage.DefaultInstance; }
           }
@@ -868,6 +1145,49 @@
             return returnMe;
           }
           
+          public override Builder MergeFrom(pb::IMessageLite other) {
+            if (other is NestedMessage) {
+              return MergeFrom((NestedMessage) other);
+            } else {
+              base.MergeFrom(other);
+              return this;
+            }
+          }
+          
+          public override Builder MergeFrom(NestedMessage other) {
+            if (other == global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage.DefaultInstance) return this;
+            if (other.HasBb) {
+              Bb = other.Bb;
+            }
+            return this;
+          }
+          
+          public override Builder MergeFrom(pb::CodedInputStream input) {
+            return MergeFrom(input, pb::ExtensionRegistry.Empty);
+          }
+          
+          public override Builder MergeFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+            while (true) {
+              uint tag = input.ReadTag();
+              switch (tag) {
+                case 0: {
+                  return this;
+                }
+                default: {
+                  if (pb::WireFormat.IsEndGroupTag(tag)) {
+                    return this;
+                  }
+                  ParseUnknownField(input, extensionRegistry, tag);
+                  break;
+                }
+                case 8: {
+                  Bb = input.ReadInt32();
+                  break;
+                }
+              }
+            }
+          }
+          
           
           public bool HasBb {
             get { return result.HasBb; }
@@ -892,7 +1212,7 @@
         }
       }
       
-      public sealed partial class OptionalGroup : pb::GeneratedMessage<OptionalGroup, OptionalGroup.Builder> {
+      public sealed partial class OptionalGroup : pb::GeneratedMessageLite<OptionalGroup, OptionalGroup.Builder> {
         private static readonly OptionalGroup defaultInstance = new Builder().BuildPartial();
         public static OptionalGroup DefaultInstance {
           get { return defaultInstance; }
@@ -906,14 +1226,6 @@
           get { return this; }
         }
         
-        public static pbd::MessageDescriptor Descriptor {
-          get { return global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.internal__static_protobuf_unittest_TestAllTypesLite_OptionalGroup__Descriptor; }
-        }
-        
-        protected override pb::FieldAccess.FieldAccessorTable<OptionalGroup, OptionalGroup.Builder> InternalFieldAccessors {
-          get { return global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.internal__static_protobuf_unittest_TestAllTypesLite_OptionalGroup__FieldAccessorTable; }
-        }
-        
         public const int AFieldNumber = 17;
         private bool hasA;
         private int a_ = 0;
@@ -924,6 +1236,34 @@
           get { return a_; }
         }
         
+        public override bool IsInitialized {
+          get {
+            return true;
+          }
+        }
+        
+        public override void WriteTo(pb::CodedOutputStream output) {
+          int size = SerializedSize;
+          if (HasA) {
+            output.WriteInt32(17, A);
+          }
+        }
+        
+        private int memoizedSerializedSize = -1;
+        public override int SerializedSize {
+          get {
+            int size = memoizedSerializedSize;
+            if (size != -1) return size;
+            
+            size = 0;
+            if (HasA) {
+              size += pb::CodedOutputStream.ComputeInt32Size(17, A);
+            }
+            memoizedSerializedSize = size;
+            return size;
+          }
+        }
+        
         public static OptionalGroup ParseFrom(pb::ByteString data) {
           return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
         }
@@ -961,7 +1301,7 @@
           return (Builder) new Builder().MergeFrom(prototype);
         }
         
-        public sealed partial class Builder : pb::GeneratedBuilder<OptionalGroup, Builder> {
+        public sealed partial class Builder : pb::GeneratedBuilderLite<OptionalGroup, Builder> {
           protected override Builder ThisBuilder {
             get { return this; }
           }
@@ -982,10 +1322,6 @@
             return new Builder().MergeFrom(result);
           }
           
-          public override pbd::MessageDescriptor DescriptorForType {
-            get { return global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.OptionalGroup.Descriptor; }
-          }
-          
           public override OptionalGroup DefaultInstanceForType {
             get { return global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.OptionalGroup.DefaultInstance; }
           }
@@ -999,6 +1335,49 @@
             return returnMe;
           }
           
+          public override Builder MergeFrom(pb::IMessageLite other) {
+            if (other is OptionalGroup) {
+              return MergeFrom((OptionalGroup) other);
+            } else {
+              base.MergeFrom(other);
+              return this;
+            }
+          }
+          
+          public override Builder MergeFrom(OptionalGroup other) {
+            if (other == global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.OptionalGroup.DefaultInstance) return this;
+            if (other.HasA) {
+              A = other.A;
+            }
+            return this;
+          }
+          
+          public override Builder MergeFrom(pb::CodedInputStream input) {
+            return MergeFrom(input, pb::ExtensionRegistry.Empty);
+          }
+          
+          public override Builder MergeFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+            while (true) {
+              uint tag = input.ReadTag();
+              switch (tag) {
+                case 0: {
+                  return this;
+                }
+                default: {
+                  if (pb::WireFormat.IsEndGroupTag(tag)) {
+                    return this;
+                  }
+                  ParseUnknownField(input, extensionRegistry, tag);
+                  break;
+                }
+                case 136: {
+                  A = input.ReadInt32();
+                  break;
+                }
+              }
+            }
+          }
+          
           
           public bool HasA {
             get { return result.HasA; }
@@ -1023,7 +1402,7 @@
         }
       }
       
-      public sealed partial class RepeatedGroup : pb::GeneratedMessage<RepeatedGroup, RepeatedGroup.Builder> {
+      public sealed partial class RepeatedGroup : pb::GeneratedMessageLite<RepeatedGroup, RepeatedGroup.Builder> {
         private static readonly RepeatedGroup defaultInstance = new Builder().BuildPartial();
         public static RepeatedGroup DefaultInstance {
           get { return defaultInstance; }
@@ -1037,14 +1416,6 @@
           get { return this; }
         }
         
-        public static pbd::MessageDescriptor Descriptor {
-          get { return global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.internal__static_protobuf_unittest_TestAllTypesLite_RepeatedGroup__Descriptor; }
-        }
-        
-        protected override pb::FieldAccess.FieldAccessorTable<RepeatedGroup, RepeatedGroup.Builder> InternalFieldAccessors {
-          get { return global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.internal__static_protobuf_unittest_TestAllTypesLite_RepeatedGroup__FieldAccessorTable; }
-        }
-        
         public const int AFieldNumber = 47;
         private bool hasA;
         private int a_ = 0;
@@ -1055,6 +1426,34 @@
           get { return a_; }
         }
         
+        public override bool IsInitialized {
+          get {
+            return true;
+          }
+        }
+        
+        public override void WriteTo(pb::CodedOutputStream output) {
+          int size = SerializedSize;
+          if (HasA) {
+            output.WriteInt32(47, A);
+          }
+        }
+        
+        private int memoizedSerializedSize = -1;
+        public override int SerializedSize {
+          get {
+            int size = memoizedSerializedSize;
+            if (size != -1) return size;
+            
+            size = 0;
+            if (HasA) {
+              size += pb::CodedOutputStream.ComputeInt32Size(47, A);
+            }
+            memoizedSerializedSize = size;
+            return size;
+          }
+        }
+        
         public static RepeatedGroup ParseFrom(pb::ByteString data) {
           return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
         }
@@ -1092,7 +1491,7 @@
           return (Builder) new Builder().MergeFrom(prototype);
         }
         
-        public sealed partial class Builder : pb::GeneratedBuilder<RepeatedGroup, Builder> {
+        public sealed partial class Builder : pb::GeneratedBuilderLite<RepeatedGroup, Builder> {
           protected override Builder ThisBuilder {
             get { return this; }
           }
@@ -1113,10 +1512,6 @@
             return new Builder().MergeFrom(result);
           }
           
-          public override pbd::MessageDescriptor DescriptorForType {
-            get { return global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.RepeatedGroup.Descriptor; }
-          }
-          
           public override RepeatedGroup DefaultInstanceForType {
             get { return global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.RepeatedGroup.DefaultInstance; }
           }
@@ -1130,6 +1525,49 @@
             return returnMe;
           }
           
+          public override Builder MergeFrom(pb::IMessageLite other) {
+            if (other is RepeatedGroup) {
+              return MergeFrom((RepeatedGroup) other);
+            } else {
+              base.MergeFrom(other);
+              return this;
+            }
+          }
+          
+          public override Builder MergeFrom(RepeatedGroup other) {
+            if (other == global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.RepeatedGroup.DefaultInstance) return this;
+            if (other.HasA) {
+              A = other.A;
+            }
+            return this;
+          }
+          
+          public override Builder MergeFrom(pb::CodedInputStream input) {
+            return MergeFrom(input, pb::ExtensionRegistry.Empty);
+          }
+          
+          public override Builder MergeFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+            while (true) {
+              uint tag = input.ReadTag();
+              switch (tag) {
+                case 0: {
+                  return this;
+                }
+                default: {
+                  if (pb::WireFormat.IsEndGroupTag(tag)) {
+                    return this;
+                  }
+                  ParseUnknownField(input, extensionRegistry, tag);
+                  break;
+                }
+                case 376: {
+                  A = input.ReadInt32();
+                  break;
+                }
+              }
+            }
+          }
+          
           
           public bool HasA {
             get { return result.HasA; }
@@ -1843,7 +2281,7 @@
     
     public const int DefaultBytesFieldNumber = 75;
     private bool hasDefaultBytes;
-    private pb::ByteString defaultBytes_ = (pb::ByteString) global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Descriptor.Fields[62].DefaultValue;
+    private pb::ByteString defaultBytes_ = ByteString.FromBase64("d29ybGQ=");
     public bool HasDefaultBytes {
       get { return hasDefaultBytes; }
     }
@@ -1901,6 +2339,568 @@
       get { return defaultCord_; }
     }
     
+    public override bool IsInitialized {
+      get {
+        return true;
+      }
+    }
+    
+    public override void WriteTo(pb::CodedOutputStream output) {
+      int size = SerializedSize;
+      if (HasOptionalInt32) {
+        output.WriteInt32(1, OptionalInt32);
+      }
+      if (HasOptionalInt64) {
+        output.WriteInt64(2, OptionalInt64);
+      }
+      if (HasOptionalUint32) {
+        output.WriteUInt32(3, OptionalUint32);
+      }
+      if (HasOptionalUint64) {
+        output.WriteUInt64(4, OptionalUint64);
+      }
+      if (HasOptionalSint32) {
+        output.WriteSInt32(5, OptionalSint32);
+      }
+      if (HasOptionalSint64) {
+        output.WriteSInt64(6, OptionalSint64);
+      }
+      if (HasOptionalFixed32) {
+        output.WriteFixed32(7, OptionalFixed32);
+      }
+      if (HasOptionalFixed64) {
+        output.WriteFixed64(8, OptionalFixed64);
+      }
+      if (HasOptionalSfixed32) {
+        output.WriteSFixed32(9, OptionalSfixed32);
+      }
+      if (HasOptionalSfixed64) {
+        output.WriteSFixed64(10, OptionalSfixed64);
+      }
+      if (HasOptionalFloat) {
+        output.WriteFloat(11, OptionalFloat);
+      }
+      if (HasOptionalDouble) {
+        output.WriteDouble(12, OptionalDouble);
+      }
+      if (HasOptionalBool) {
+        output.WriteBool(13, OptionalBool);
+      }
+      if (HasOptionalString) {
+        output.WriteString(14, OptionalString);
+      }
+      if (HasOptionalBytes) {
+        output.WriteBytes(15, OptionalBytes);
+      }
+      if (HasOptionalGroup) {
+        output.WriteGroup(16, OptionalGroup);
+      }
+      if (HasOptionalNestedMessage) {
+        output.WriteMessage(18, OptionalNestedMessage);
+      }
+      if (HasOptionalForeignMessage) {
+        output.WriteMessage(19, OptionalForeignMessage);
+      }
+      if (HasOptionalImportMessage) {
+        output.WriteMessage(20, OptionalImportMessage);
+      }
+      if (HasOptionalNestedEnum) {
+        output.WriteEnum(21, (int) OptionalNestedEnum);
+      }
+      if (HasOptionalForeignEnum) {
+        output.WriteEnum(22, (int) OptionalForeignEnum);
+      }
+      if (HasOptionalImportEnum) {
+        output.WriteEnum(23, (int) OptionalImportEnum);
+      }
+      if (HasOptionalStringPiece) {
+        output.WriteString(24, OptionalStringPiece);
+      }
+      if (HasOptionalCord) {
+        output.WriteString(25, OptionalCord);
+      }
+      if (repeatedInt32_.Count > 0) {
+        foreach (int element in repeatedInt32_) {
+          output.WriteInt32(31, element);
+        }
+      }
+      if (repeatedInt64_.Count > 0) {
+        foreach (long element in repeatedInt64_) {
+          output.WriteInt64(32, element);
+        }
+      }
+      if (repeatedUint32_.Count > 0) {
+        foreach (uint element in repeatedUint32_) {
+          output.WriteUInt32(33, element);
+        }
+      }
+      if (repeatedUint64_.Count > 0) {
+        foreach (ulong element in repeatedUint64_) {
+          output.WriteUInt64(34, element);
+        }
+      }
+      if (repeatedSint32_.Count > 0) {
+        foreach (int element in repeatedSint32_) {
+          output.WriteSInt32(35, element);
+        }
+      }
+      if (repeatedSint64_.Count > 0) {
+        foreach (long element in repeatedSint64_) {
+          output.WriteSInt64(36, element);
+        }
+      }
+      if (repeatedFixed32_.Count > 0) {
+        foreach (uint element in repeatedFixed32_) {
+          output.WriteFixed32(37, element);
+        }
+      }
+      if (repeatedFixed64_.Count > 0) {
+        foreach (ulong element in repeatedFixed64_) {
+          output.WriteFixed64(38, element);
+        }
+      }
+      if (repeatedSfixed32_.Count > 0) {
+        foreach (int element in repeatedSfixed32_) {
+          output.WriteSFixed32(39, element);
+        }
+      }
+      if (repeatedSfixed64_.Count > 0) {
+        foreach (long element in repeatedSfixed64_) {
+          output.WriteSFixed64(40, element);
+        }
+      }
+      if (repeatedFloat_.Count > 0) {
+        foreach (float element in repeatedFloat_) {
+          output.WriteFloat(41, element);
+        }
+      }
+      if (repeatedDouble_.Count > 0) {
+        foreach (double element in repeatedDouble_) {
+          output.WriteDouble(42, element);
+        }
+      }
+      if (repeatedBool_.Count > 0) {
+        foreach (bool element in repeatedBool_) {
+          output.WriteBool(43, element);
+        }
+      }
+      if (repeatedString_.Count > 0) {
+        foreach (string element in repeatedString_) {
+          output.WriteString(44, element);
+        }
+      }
+      if (repeatedBytes_.Count > 0) {
+        foreach (pb::ByteString element in repeatedBytes_) {
+          output.WriteBytes(45, element);
+        }
+      }
+      foreach (global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.RepeatedGroup element in RepeatedGroupList) {
+        output.WriteGroup(46, element);
+      }
+      foreach (global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage element in RepeatedNestedMessageList) {
+        output.WriteMessage(48, element);
+      }
+      foreach (global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite element in RepeatedForeignMessageList) {
+        output.WriteMessage(49, element);
+      }
+      foreach (global::Google.ProtocolBuffers.TestProtos.ImportMessageLite element in RepeatedImportMessageList) {
+        output.WriteMessage(50, element);
+      }
+      if (repeatedNestedEnum_.Count > 0) {
+        foreach (int element in repeatedNestedEnum_) {
+          output.WriteEnum(51, element);
+        }
+      }
+      if (repeatedForeignEnum_.Count > 0) {
+        foreach (int element in repeatedForeignEnum_) {
+          output.WriteEnum(52, element);
+        }
+      }
+      if (repeatedImportEnum_.Count > 0) {
+        foreach (int element in repeatedImportEnum_) {
+          output.WriteEnum(53, element);
+        }
+      }
+      if (repeatedStringPiece_.Count > 0) {
+        foreach (string element in repeatedStringPiece_) {
+          output.WriteString(54, element);
+        }
+      }
+      if (repeatedCord_.Count > 0) {
+        foreach (string element in repeatedCord_) {
+          output.WriteString(55, element);
+        }
+      }
+      if (HasDefaultInt32) {
+        output.WriteInt32(61, DefaultInt32);
+      }
+      if (HasDefaultInt64) {
+        output.WriteInt64(62, DefaultInt64);
+      }
+      if (HasDefaultUint32) {
+        output.WriteUInt32(63, DefaultUint32);
+      }
+      if (HasDefaultUint64) {
+        output.WriteUInt64(64, DefaultUint64);
+      }
+      if (HasDefaultSint32) {
+        output.WriteSInt32(65, DefaultSint32);
+      }
+      if (HasDefaultSint64) {
+        output.WriteSInt64(66, DefaultSint64);
+      }
+      if (HasDefaultFixed32) {
+        output.WriteFixed32(67, DefaultFixed32);
+      }
+      if (HasDefaultFixed64) {
+        output.WriteFixed64(68, DefaultFixed64);
+      }
+      if (HasDefaultSfixed32) {
+        output.WriteSFixed32(69, DefaultSfixed32);
+      }
+      if (HasDefaultSfixed64) {
+        output.WriteSFixed64(70, DefaultSfixed64);
+      }
+      if (HasDefaultFloat) {
+        output.WriteFloat(71, DefaultFloat);
+      }
+      if (HasDefaultDouble) {
+        output.WriteDouble(72, DefaultDouble);
+      }
+      if (HasDefaultBool) {
+        output.WriteBool(73, DefaultBool);
+      }
+      if (HasDefaultString) {
+        output.WriteString(74, DefaultString);
+      }
+      if (HasDefaultBytes) {
+        output.WriteBytes(75, DefaultBytes);
+      }
+      if (HasDefaultNestedEnum) {
+        output.WriteEnum(81, (int) DefaultNestedEnum);
+      }
+      if (HasDefaultForeignEnum) {
+        output.WriteEnum(82, (int) DefaultForeignEnum);
+      }
+      if (HasDefaultImportEnum) {
+        output.WriteEnum(83, (int) DefaultImportEnum);
+      }
+      if (HasDefaultStringPiece) {
+        output.WriteString(84, DefaultStringPiece);
+      }
+      if (HasDefaultCord) {
+        output.WriteString(85, DefaultCord);
+      }
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public override int SerializedSize {
+      get {
+        int size = memoizedSerializedSize;
+        if (size != -1) return size;
+        
+        size = 0;
+        if (HasOptionalInt32) {
+          size += pb::CodedOutputStream.ComputeInt32Size(1, OptionalInt32);
+        }
+        if (HasOptionalInt64) {
+          size += pb::CodedOutputStream.ComputeInt64Size(2, OptionalInt64);
+        }
+        if (HasOptionalUint32) {
+          size += pb::CodedOutputStream.ComputeUInt32Size(3, OptionalUint32);
+        }
+        if (HasOptionalUint64) {
+          size += pb::CodedOutputStream.ComputeUInt64Size(4, OptionalUint64);
+        }
+        if (HasOptionalSint32) {
+          size += pb::CodedOutputStream.ComputeSInt32Size(5, OptionalSint32);
+        }
+        if (HasOptionalSint64) {
+          size += pb::CodedOutputStream.ComputeSInt64Size(6, OptionalSint64);
+        }
+        if (HasOptionalFixed32) {
+          size += pb::CodedOutputStream.ComputeFixed32Size(7, OptionalFixed32);
+        }
+        if (HasOptionalFixed64) {
+          size += pb::CodedOutputStream.ComputeFixed64Size(8, OptionalFixed64);
+        }
+        if (HasOptionalSfixed32) {
+          size += pb::CodedOutputStream.ComputeSFixed32Size(9, OptionalSfixed32);
+        }
+        if (HasOptionalSfixed64) {
+          size += pb::CodedOutputStream.ComputeSFixed64Size(10, OptionalSfixed64);
+        }
+        if (HasOptionalFloat) {
+          size += pb::CodedOutputStream.ComputeFloatSize(11, OptionalFloat);
+        }
+        if (HasOptionalDouble) {
+          size += pb::CodedOutputStream.ComputeDoubleSize(12, OptionalDouble);
+        }
+        if (HasOptionalBool) {
+          size += pb::CodedOutputStream.ComputeBoolSize(13, OptionalBool);
+        }
+        if (HasOptionalString) {
+          size += pb::CodedOutputStream.ComputeStringSize(14, OptionalString);
+        }
+        if (HasOptionalBytes) {
+          size += pb::CodedOutputStream.ComputeBytesSize(15, OptionalBytes);
+        }
+        if (HasOptionalGroup) {
+          size += pb::CodedOutputStream.ComputeGroupSize(16, OptionalGroup);
+        }
+        if (HasOptionalNestedMessage) {
+          size += pb::CodedOutputStream.ComputeMessageSize(18, OptionalNestedMessage);
+        }
+        if (HasOptionalForeignMessage) {
+          size += pb::CodedOutputStream.ComputeMessageSize(19, OptionalForeignMessage);
+        }
+        if (HasOptionalImportMessage) {
+          size += pb::CodedOutputStream.ComputeMessageSize(20, OptionalImportMessage);
+        }
+        if (HasOptionalNestedEnum) {
+          size += pb::CodedOutputStream.ComputeEnumSize(21, (int) OptionalNestedEnum);
+        }
+        if (HasOptionalForeignEnum) {
+          size += pb::CodedOutputStream.ComputeEnumSize(22, (int) OptionalForeignEnum);
+        }
+        if (HasOptionalImportEnum) {
+          size += pb::CodedOutputStream.ComputeEnumSize(23, (int) OptionalImportEnum);
+        }
+        if (HasOptionalStringPiece) {
+          size += pb::CodedOutputStream.ComputeStringSize(24, OptionalStringPiece);
+        }
+        if (HasOptionalCord) {
+          size += pb::CodedOutputStream.ComputeStringSize(25, OptionalCord);
+        }
+        {
+          int dataSize = 0;
+          foreach (int element in RepeatedInt32List) {
+            dataSize += pb::CodedOutputStream.ComputeInt32SizeNoTag(element);
+          }
+          size += dataSize;
+          size += 2 * repeatedInt32_.Count;
+        }
+        {
+          int dataSize = 0;
+          foreach (long element in RepeatedInt64List) {
+            dataSize += pb::CodedOutputStream.ComputeInt64SizeNoTag(element);
+          }
+          size += dataSize;
+          size += 2 * repeatedInt64_.Count;
+        }
+        {
+          int dataSize = 0;
+          foreach (uint element in RepeatedUint32List) {
+            dataSize += pb::CodedOutputStream.ComputeUInt32SizeNoTag(element);
+          }
+          size += dataSize;
+          size += 2 * repeatedUint32_.Count;
+        }
+        {
+          int dataSize = 0;
+          foreach (ulong element in RepeatedUint64List) {
+            dataSize += pb::CodedOutputStream.ComputeUInt64SizeNoTag(element);
+          }
+          size += dataSize;
+          size += 2 * repeatedUint64_.Count;
+        }
+        {
+          int dataSize = 0;
+          foreach (int element in RepeatedSint32List) {
+            dataSize += pb::CodedOutputStream.ComputeSInt32SizeNoTag(element);
+          }
+          size += dataSize;
+          size += 2 * repeatedSint32_.Count;
+        }
+        {
+          int dataSize = 0;
+          foreach (long element in RepeatedSint64List) {
+            dataSize += pb::CodedOutputStream.ComputeSInt64SizeNoTag(element);
+          }
+          size += dataSize;
+          size += 2 * repeatedSint64_.Count;
+        }
+        {
+          int dataSize = 0;
+          dataSize = 4 * repeatedFixed32_.Count;
+          size += dataSize;
+          size += 2 * repeatedFixed32_.Count;
+        }
+        {
+          int dataSize = 0;
+          dataSize = 8 * repeatedFixed64_.Count;
+          size += dataSize;
+          size += 2 * repeatedFixed64_.Count;
+        }
+        {
+          int dataSize = 0;
+          dataSize = 4 * repeatedSfixed32_.Count;
+          size += dataSize;
+          size += 2 * repeatedSfixed32_.Count;
+        }
+        {
+          int dataSize = 0;
+          dataSize = 8 * repeatedSfixed64_.Count;
+          size += dataSize;
+          size += 2 * repeatedSfixed64_.Count;
+        }
+        {
+          int dataSize = 0;
+          dataSize = 4 * repeatedFloat_.Count;
+          size += dataSize;
+          size += 2 * repeatedFloat_.Count;
+        }
+        {
+          int dataSize = 0;
+          dataSize = 8 * repeatedDouble_.Count;
+          size += dataSize;
+          size += 2 * repeatedDouble_.Count;
+        }
+        {
+          int dataSize = 0;
+          dataSize = 1 * repeatedBool_.Count;
+          size += dataSize;
+          size += 2 * repeatedBool_.Count;
+        }
+        {
+          int dataSize = 0;
+          foreach (string element in RepeatedStringList) {
+            dataSize += pb::CodedOutputStream.ComputeStringSizeNoTag(element);
+          }
+          size += dataSize;
+          size += 2 * repeatedString_.Count;
+        }
+        {
+          int dataSize = 0;
+          foreach (pb::ByteString element in RepeatedBytesList) {
+            dataSize += pb::CodedOutputStream.ComputeBytesSizeNoTag(element);
+          }
+          size += dataSize;
+          size += 2 * repeatedBytes_.Count;
+        }
+        foreach (global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.RepeatedGroup element in RepeatedGroupList) {
+          size += pb::CodedOutputStream.ComputeGroupSize(46, element);
+        }
+        foreach (global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage element in RepeatedNestedMessageList) {
+          size += pb::CodedOutputStream.ComputeMessageSize(48, element);
+        }
+        foreach (global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite element in RepeatedForeignMessageList) {
+          size += pb::CodedOutputStream.ComputeMessageSize(49, element);
+        }
+        foreach (global::Google.ProtocolBuffers.TestProtos.ImportMessageLite element in RepeatedImportMessageList) {
+          size += pb::CodedOutputStream.ComputeMessageSize(50, element);
+        }
+        {
+          int dataSize = 0;
+          if (repeatedNestedEnum_.Count > 0) {
+            foreach (global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum element in repeatedNestedEnum_) {
+              dataSize += pb::CodedOutputStream.ComputeEnumSizeNoTag((int) element);
+            }
+            size += dataSize;
+            size += 2 * repeatedNestedEnum_.Count;
+          }
+        }
+        {
+          int dataSize = 0;
+          if (repeatedForeignEnum_.Count > 0) {
+            foreach (global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite element in repeatedForeignEnum_) {
+              dataSize += pb::CodedOutputStream.ComputeEnumSizeNoTag((int) element);
+            }
+            size += dataSize;
+            size += 2 * repeatedForeignEnum_.Count;
+          }
+        }
+        {
+          int dataSize = 0;
+          if (repeatedImportEnum_.Count > 0) {
+            foreach (global::Google.ProtocolBuffers.TestProtos.ImportEnumLite element in repeatedImportEnum_) {
+              dataSize += pb::CodedOutputStream.ComputeEnumSizeNoTag((int) element);
+            }
+            size += dataSize;
+            size += 2 * repeatedImportEnum_.Count;
+          }
+        }
+        {
+          int dataSize = 0;
+          foreach (string element in RepeatedStringPieceList) {
+            dataSize += pb::CodedOutputStream.ComputeStringSizeNoTag(element);
+          }
+          size += dataSize;
+          size += 2 * repeatedStringPiece_.Count;
+        }
+        {
+          int dataSize = 0;
+          foreach (string element in RepeatedCordList) {
+            dataSize += pb::CodedOutputStream.ComputeStringSizeNoTag(element);
+          }
+          size += dataSize;
+          size += 2 * repeatedCord_.Count;
+        }
+        if (HasDefaultInt32) {
+          size += pb::CodedOutputStream.ComputeInt32Size(61, DefaultInt32);
+        }
+        if (HasDefaultInt64) {
+          size += pb::CodedOutputStream.ComputeInt64Size(62, DefaultInt64);
+        }
+        if (HasDefaultUint32) {
+          size += pb::CodedOutputStream.ComputeUInt32Size(63, DefaultUint32);
+        }
+        if (HasDefaultUint64) {
+          size += pb::CodedOutputStream.ComputeUInt64Size(64, DefaultUint64);
+        }
+        if (HasDefaultSint32) {
+          size += pb::CodedOutputStream.ComputeSInt32Size(65, DefaultSint32);
+        }
+        if (HasDefaultSint64) {
+          size += pb::CodedOutputStream.ComputeSInt64Size(66, DefaultSint64);
+        }
+        if (HasDefaultFixed32) {
+          size += pb::CodedOutputStream.ComputeFixed32Size(67, DefaultFixed32);
+        }
+        if (HasDefaultFixed64) {
+          size += pb::CodedOutputStream.ComputeFixed64Size(68, DefaultFixed64);
+        }
+        if (HasDefaultSfixed32) {
+          size += pb::CodedOutputStream.ComputeSFixed32Size(69, DefaultSfixed32);
+        }
+        if (HasDefaultSfixed64) {
+          size += pb::CodedOutputStream.ComputeSFixed64Size(70, DefaultSfixed64);
+        }
+        if (HasDefaultFloat) {
+          size += pb::CodedOutputStream.ComputeFloatSize(71, DefaultFloat);
+        }
+        if (HasDefaultDouble) {
+          size += pb::CodedOutputStream.ComputeDoubleSize(72, DefaultDouble);
+        }
+        if (HasDefaultBool) {
+          size += pb::CodedOutputStream.ComputeBoolSize(73, DefaultBool);
+        }
+        if (HasDefaultString) {
+          size += pb::CodedOutputStream.ComputeStringSize(74, DefaultString);
+        }
+        if (HasDefaultBytes) {
+          size += pb::CodedOutputStream.ComputeBytesSize(75, DefaultBytes);
+        }
+        if (HasDefaultNestedEnum) {
+          size += pb::CodedOutputStream.ComputeEnumSize(81, (int) DefaultNestedEnum);
+        }
+        if (HasDefaultForeignEnum) {
+          size += pb::CodedOutputStream.ComputeEnumSize(82, (int) DefaultForeignEnum);
+        }
+        if (HasDefaultImportEnum) {
+          size += pb::CodedOutputStream.ComputeEnumSize(83, (int) DefaultImportEnum);
+        }
+        if (HasDefaultStringPiece) {
+          size += pb::CodedOutputStream.ComputeStringSize(84, DefaultStringPiece);
+        }
+        if (HasDefaultCord) {
+          size += pb::CodedOutputStream.ComputeStringSize(85, DefaultCord);
+        }
+        memoizedSerializedSize = size;
+        return size;
+      }
+    }
+    
     public static TestAllTypesLite ParseFrom(pb::ByteString data) {
       return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
     }
@@ -1938,7 +2938,7 @@
       return (Builder) new Builder().MergeFrom(prototype);
     }
     
-    public sealed partial class Builder : pb::GeneratedBuilder<TestAllTypesLite, Builder> {
+    public sealed partial class Builder : pb::GeneratedBuilderLite<TestAllTypesLite, Builder> {
       protected override Builder ThisBuilder {
         get { return this; }
       }
@@ -1959,10 +2959,6 @@
         return new Builder().MergeFrom(result);
       }
       
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Descriptor; }
-      }
-      
       public override TestAllTypesLite DefaultInstanceForType {
         get { return global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.DefaultInstance; }
       }
@@ -2000,6 +2996,582 @@
         return returnMe;
       }
       
+      public override Builder MergeFrom(pb::IMessageLite other) {
+        if (other is TestAllTypesLite) {
+          return MergeFrom((TestAllTypesLite) other);
+        } else {
+          base.MergeFrom(other);
+          return this;
+        }
+      }
+      
+      public override Builder MergeFrom(TestAllTypesLite other) {
+        if (other == global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.DefaultInstance) return this;
+        if (other.HasOptionalInt32) {
+          OptionalInt32 = other.OptionalInt32;
+        }
+        if (other.HasOptionalInt64) {
+          OptionalInt64 = other.OptionalInt64;
+        }
+        if (other.HasOptionalUint32) {
+          OptionalUint32 = other.OptionalUint32;
+        }
+        if (other.HasOptionalUint64) {
+          OptionalUint64 = other.OptionalUint64;
+        }
+        if (other.HasOptionalSint32) {
+          OptionalSint32 = other.OptionalSint32;
+        }
+        if (other.HasOptionalSint64) {
+          OptionalSint64 = other.OptionalSint64;
+        }
+        if (other.HasOptionalFixed32) {
+          OptionalFixed32 = other.OptionalFixed32;
+        }
+        if (other.HasOptionalFixed64) {
+          OptionalFixed64 = other.OptionalFixed64;
+        }
+        if (other.HasOptionalSfixed32) {
+          OptionalSfixed32 = other.OptionalSfixed32;
+        }
+        if (other.HasOptionalSfixed64) {
+          OptionalSfixed64 = other.OptionalSfixed64;
+        }
+        if (other.HasOptionalFloat) {
+          OptionalFloat = other.OptionalFloat;
+        }
+        if (other.HasOptionalDouble) {
+          OptionalDouble = other.OptionalDouble;
+        }
+        if (other.HasOptionalBool) {
+          OptionalBool = other.OptionalBool;
+        }
+        if (other.HasOptionalString) {
+          OptionalString = other.OptionalString;
+        }
+        if (other.HasOptionalBytes) {
+          OptionalBytes = other.OptionalBytes;
+        }
+        if (other.HasOptionalGroup) {
+          MergeOptionalGroup(other.OptionalGroup);
+        }
+        if (other.HasOptionalNestedMessage) {
+          MergeOptionalNestedMessage(other.OptionalNestedMessage);
+        }
+        if (other.HasOptionalForeignMessage) {
+          MergeOptionalForeignMessage(other.OptionalForeignMessage);
+        }
+        if (other.HasOptionalImportMessage) {
+          MergeOptionalImportMessage(other.OptionalImportMessage);
+        }
+        if (other.HasOptionalNestedEnum) {
+          OptionalNestedEnum = other.OptionalNestedEnum;
+        }
+        if (other.HasOptionalForeignEnum) {
+          OptionalForeignEnum = other.OptionalForeignEnum;
+        }
+        if (other.HasOptionalImportEnum) {
+          OptionalImportEnum = other.OptionalImportEnum;
+        }
+        if (other.HasOptionalStringPiece) {
+          OptionalStringPiece = other.OptionalStringPiece;
+        }
+        if (other.HasOptionalCord) {
+          OptionalCord = other.OptionalCord;
+        }
+        if (other.repeatedInt32_.Count != 0) {
+          base.AddRange(other.repeatedInt32_, result.repeatedInt32_);
+        }
+        if (other.repeatedInt64_.Count != 0) {
+          base.AddRange(other.repeatedInt64_, result.repeatedInt64_);
+        }
+        if (other.repeatedUint32_.Count != 0) {
+          base.AddRange(other.repeatedUint32_, result.repeatedUint32_);
+        }
+        if (other.repeatedUint64_.Count != 0) {
+          base.AddRange(other.repeatedUint64_, result.repeatedUint64_);
+        }
+        if (other.repeatedSint32_.Count != 0) {
+          base.AddRange(other.repeatedSint32_, result.repeatedSint32_);
+        }
+        if (other.repeatedSint64_.Count != 0) {
+          base.AddRange(other.repeatedSint64_, result.repeatedSint64_);
+        }
+        if (other.repeatedFixed32_.Count != 0) {
+          base.AddRange(other.repeatedFixed32_, result.repeatedFixed32_);
+        }
+        if (other.repeatedFixed64_.Count != 0) {
+          base.AddRange(other.repeatedFixed64_, result.repeatedFixed64_);
+        }
+        if (other.repeatedSfixed32_.Count != 0) {
+          base.AddRange(other.repeatedSfixed32_, result.repeatedSfixed32_);
+        }
+        if (other.repeatedSfixed64_.Count != 0) {
+          base.AddRange(other.repeatedSfixed64_, result.repeatedSfixed64_);
+        }
+        if (other.repeatedFloat_.Count != 0) {
+          base.AddRange(other.repeatedFloat_, result.repeatedFloat_);
+        }
+        if (other.repeatedDouble_.Count != 0) {
+          base.AddRange(other.repeatedDouble_, result.repeatedDouble_);
+        }
+        if (other.repeatedBool_.Count != 0) {
+          base.AddRange(other.repeatedBool_, result.repeatedBool_);
+        }
+        if (other.repeatedString_.Count != 0) {
+          base.AddRange(other.repeatedString_, result.repeatedString_);
+        }
+        if (other.repeatedBytes_.Count != 0) {
+          base.AddRange(other.repeatedBytes_, result.repeatedBytes_);
+        }
+        if (other.repeatedGroup_.Count != 0) {
+          base.AddRange(other.repeatedGroup_, result.repeatedGroup_);
+        }
+        if (other.repeatedNestedMessage_.Count != 0) {
+          base.AddRange(other.repeatedNestedMessage_, result.repeatedNestedMessage_);
+        }
+        if (other.repeatedForeignMessage_.Count != 0) {
+          base.AddRange(other.repeatedForeignMessage_, result.repeatedForeignMessage_);
+        }
+        if (other.repeatedImportMessage_.Count != 0) {
+          base.AddRange(other.repeatedImportMessage_, result.repeatedImportMessage_);
+        }
+        if (other.repeatedNestedEnum_.Count != 0) {
+          base.AddRange(other.repeatedNestedEnum_, result.repeatedNestedEnum_);
+        }
+        if (other.repeatedForeignEnum_.Count != 0) {
+          base.AddRange(other.repeatedForeignEnum_, result.repeatedForeignEnum_);
+        }
+        if (other.repeatedImportEnum_.Count != 0) {
+          base.AddRange(other.repeatedImportEnum_, result.repeatedImportEnum_);
+        }
+        if (other.repeatedStringPiece_.Count != 0) {
+          base.AddRange(other.repeatedStringPiece_, result.repeatedStringPiece_);
+        }
+        if (other.repeatedCord_.Count != 0) {
+          base.AddRange(other.repeatedCord_, result.repeatedCord_);
+        }
+        if (other.HasDefaultInt32) {
+          DefaultInt32 = other.DefaultInt32;
+        }
+        if (other.HasDefaultInt64) {
+          DefaultInt64 = other.DefaultInt64;
+        }
+        if (other.HasDefaultUint32) {
+          DefaultUint32 = other.DefaultUint32;
+        }
+        if (other.HasDefaultUint64) {
+          DefaultUint64 = other.DefaultUint64;
+        }
+        if (other.HasDefaultSint32) {
+          DefaultSint32 = other.DefaultSint32;
+        }
+        if (other.HasDefaultSint64) {
+          DefaultSint64 = other.DefaultSint64;
+        }
+        if (other.HasDefaultFixed32) {
+          DefaultFixed32 = other.DefaultFixed32;
+        }
+        if (other.HasDefaultFixed64) {
+          DefaultFixed64 = other.DefaultFixed64;
+        }
+        if (other.HasDefaultSfixed32) {
+          DefaultSfixed32 = other.DefaultSfixed32;
+        }
+        if (other.HasDefaultSfixed64) {
+          DefaultSfixed64 = other.DefaultSfixed64;
+        }
+        if (other.HasDefaultFloat) {
+          DefaultFloat = other.DefaultFloat;
+        }
+        if (other.HasDefaultDouble) {
+          DefaultDouble = other.DefaultDouble;
+        }
+        if (other.HasDefaultBool) {
+          DefaultBool = other.DefaultBool;
+        }
+        if (other.HasDefaultString) {
+          DefaultString = other.DefaultString;
+        }
+        if (other.HasDefaultBytes) {
+          DefaultBytes = other.DefaultBytes;
+        }
+        if (other.HasDefaultNestedEnum) {
+          DefaultNestedEnum = other.DefaultNestedEnum;
+        }
+        if (other.HasDefaultForeignEnum) {
+          DefaultForeignEnum = other.DefaultForeignEnum;
+        }
+        if (other.HasDefaultImportEnum) {
+          DefaultImportEnum = other.DefaultImportEnum;
+        }
+        if (other.HasDefaultStringPiece) {
+          DefaultStringPiece = other.DefaultStringPiece;
+        }
+        if (other.HasDefaultCord) {
+          DefaultCord = other.DefaultCord;
+        }
+        return this;
+      }
+      
+      public override Builder MergeFrom(pb::CodedInputStream input) {
+        return MergeFrom(input, pb::ExtensionRegistry.Empty);
+      }
+      
+      public override Builder MergeFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+        while (true) {
+          uint tag = input.ReadTag();
+          switch (tag) {
+            case 0: {
+              return this;
+            }
+            default: {
+              if (pb::WireFormat.IsEndGroupTag(tag)) {
+                return this;
+              }
+              ParseUnknownField(input, extensionRegistry, tag);
+              break;
+            }
+            case 8: {
+              OptionalInt32 = input.ReadInt32();
+              break;
+            }
+            case 16: {
+              OptionalInt64 = input.ReadInt64();
+              break;
+            }
+            case 24: {
+              OptionalUint32 = input.ReadUInt32();
+              break;
+            }
+            case 32: {
+              OptionalUint64 = input.ReadUInt64();
+              break;
+            }
+            case 40: {
+              OptionalSint32 = input.ReadSInt32();
+              break;
+            }
+            case 48: {
+              OptionalSint64 = input.ReadSInt64();
+              break;
+            }
+            case 61: {
+              OptionalFixed32 = input.ReadFixed32();
+              break;
+            }
+            case 65: {
+              OptionalFixed64 = input.ReadFixed64();
+              break;
+            }
+            case 77: {
+              OptionalSfixed32 = input.ReadSFixed32();
+              break;
+            }
+            case 81: {
+              OptionalSfixed64 = input.ReadSFixed64();
+              break;
+            }
+            case 93: {
+              OptionalFloat = input.ReadFloat();
+              break;
+            }
+            case 97: {
+              OptionalDouble = input.ReadDouble();
+              break;
+            }
+            case 104: {
+              OptionalBool = input.ReadBool();
+              break;
+            }
+            case 114: {
+              OptionalString = input.ReadString();
+              break;
+            }
+            case 122: {
+              OptionalBytes = input.ReadBytes();
+              break;
+            }
+            case 131: {
+              global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.OptionalGroup.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.OptionalGroup.CreateBuilder();
+              if (HasOptionalGroup) {
+                subBuilder.MergeFrom(OptionalGroup);
+              }
+              input.ReadGroup(16, subBuilder, extensionRegistry);
+              OptionalGroup = subBuilder.BuildPartial();
+              break;
+            }
+            case 146: {
+              global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage.CreateBuilder();
+              if (HasOptionalNestedMessage) {
+                subBuilder.MergeFrom(OptionalNestedMessage);
+              }
+              input.ReadMessage(subBuilder, extensionRegistry);
+              OptionalNestedMessage = subBuilder.BuildPartial();
+              break;
+            }
+            case 154: {
+              global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite.CreateBuilder();
+              if (HasOptionalForeignMessage) {
+                subBuilder.MergeFrom(OptionalForeignMessage);
+              }
+              input.ReadMessage(subBuilder, extensionRegistry);
+              OptionalForeignMessage = subBuilder.BuildPartial();
+              break;
+            }
+            case 162: {
+              global::Google.ProtocolBuffers.TestProtos.ImportMessageLite.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.ImportMessageLite.CreateBuilder();
+              if (HasOptionalImportMessage) {
+                subBuilder.MergeFrom(OptionalImportMessage);
+              }
+              input.ReadMessage(subBuilder, extensionRegistry);
+              OptionalImportMessage = subBuilder.BuildPartial();
+              break;
+            }
+            case 168: {
+              int rawValue = input.ReadEnum();
+              if (!global::System.Enum.IsDefined(typeof(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum), rawValue)) {
+              } else {
+                OptionalNestedEnum = (global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum) rawValue;
+              }
+              break;
+            }
+            case 176: {
+              int rawValue = input.ReadEnum();
+              if (!global::System.Enum.IsDefined(typeof(global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite), rawValue)) {
+              } else {
+                OptionalForeignEnum = (global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite) rawValue;
+              }
+              break;
+            }
+            case 184: {
+              int rawValue = input.ReadEnum();
+              if (!global::System.Enum.IsDefined(typeof(global::Google.ProtocolBuffers.TestProtos.ImportEnumLite), rawValue)) {
+              } else {
+                OptionalImportEnum = (global::Google.ProtocolBuffers.TestProtos.ImportEnumLite) rawValue;
+              }
+              break;
+            }
+            case 194: {
+              OptionalStringPiece = input.ReadString();
+              break;
+            }
+            case 202: {
+              OptionalCord = input.ReadString();
+              break;
+            }
+            case 248: {
+              AddRepeatedInt32(input.ReadInt32());
+              break;
+            }
+            case 256: {
+              AddRepeatedInt64(input.ReadInt64());
+              break;
+            }
+            case 264: {
+              AddRepeatedUint32(input.ReadUInt32());
+              break;
+            }
+            case 272: {
+              AddRepeatedUint64(input.ReadUInt64());
+              break;
+            }
+            case 280: {
+              AddRepeatedSint32(input.ReadSInt32());
+              break;
+            }
+            case 288: {
+              AddRepeatedSint64(input.ReadSInt64());
+              break;
+            }
+            case 301: {
+              AddRepeatedFixed32(input.ReadFixed32());
+              break;
+            }
+            case 305: {
+              AddRepeatedFixed64(input.ReadFixed64());
+              break;
+            }
+            case 317: {
+              AddRepeatedSfixed32(input.ReadSFixed32());
+              break;
+            }
+            case 321: {
+              AddRepeatedSfixed64(input.ReadSFixed64());
+              break;
+            }
+            case 333: {
+              AddRepeatedFloat(input.ReadFloat());
+              break;
+            }
+            case 337: {
+              AddRepeatedDouble(input.ReadDouble());
+              break;
+            }
+            case 344: {
+              AddRepeatedBool(input.ReadBool());
+              break;
+            }
+            case 354: {
+              AddRepeatedString(input.ReadString());
+              break;
+            }
+            case 362: {
+              AddRepeatedBytes(input.ReadBytes());
+              break;
+            }
+            case 371: {
+              global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.RepeatedGroup.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.RepeatedGroup.CreateBuilder();
+              input.ReadGroup(46, subBuilder, extensionRegistry);
+              AddRepeatedGroup(subBuilder.BuildPartial());
+              break;
+            }
+            case 386: {
+              global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage.CreateBuilder();
+              input.ReadMessage(subBuilder, extensionRegistry);
+              AddRepeatedNestedMessage(subBuilder.BuildPartial());
+              break;
+            }
+            case 394: {
+              global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite.CreateBuilder();
+              input.ReadMessage(subBuilder, extensionRegistry);
+              AddRepeatedForeignMessage(subBuilder.BuildPartial());
+              break;
+            }
+            case 402: {
+              global::Google.ProtocolBuffers.TestProtos.ImportMessageLite.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.ImportMessageLite.CreateBuilder();
+              input.ReadMessage(subBuilder, extensionRegistry);
+              AddRepeatedImportMessage(subBuilder.BuildPartial());
+              break;
+            }
+            case 408: {
+              int rawValue = input.ReadEnum();
+              if (!global::System.Enum.IsDefined(typeof(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum), rawValue)) {
+              } else {
+                AddRepeatedNestedEnum((global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum) rawValue);
+              }
+              break;
+            }
+            case 416: {
+              int rawValue = input.ReadEnum();
+              if (!global::System.Enum.IsDefined(typeof(global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite), rawValue)) {
+              } else {
+                AddRepeatedForeignEnum((global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite) rawValue);
+              }
+              break;
+            }
+            case 424: {
+              int rawValue = input.ReadEnum();
+              if (!global::System.Enum.IsDefined(typeof(global::Google.ProtocolBuffers.TestProtos.ImportEnumLite), rawValue)) {
+              } else {
+                AddRepeatedImportEnum((global::Google.ProtocolBuffers.TestProtos.ImportEnumLite) rawValue);
+              }
+              break;
+            }
+            case 434: {
+              AddRepeatedStringPiece(input.ReadString());
+              break;
+            }
+            case 442: {
+              AddRepeatedCord(input.ReadString());
+              break;
+            }
+            case 488: {
+              DefaultInt32 = input.ReadInt32();
+              break;
+            }
+            case 496: {
+              DefaultInt64 = input.ReadInt64();
+              break;
+            }
+            case 504: {
+              DefaultUint32 = input.ReadUInt32();
+              break;
+            }
+            case 512: {
+              DefaultUint64 = input.ReadUInt64();
+              break;
+            }
+            case 520: {
+              DefaultSint32 = input.ReadSInt32();
+              break;
+            }
+            case 528: {
+              DefaultSint64 = input.ReadSInt64();
+              break;
+            }
+            case 541: {
+              DefaultFixed32 = input.ReadFixed32();
+              break;
+            }
+            case 545: {
+              DefaultFixed64 = input.ReadFixed64();
+              break;
+            }
+            case 557: {
+              DefaultSfixed32 = input.ReadSFixed32();
+              break;
+            }
+            case 561: {
+              DefaultSfixed64 = input.ReadSFixed64();
+              break;
+            }
+            case 573: {
+              DefaultFloat = input.ReadFloat();
+              break;
+            }
+            case 577: {
+              DefaultDouble = input.ReadDouble();
+              break;
+            }
+            case 584: {
+              DefaultBool = input.ReadBool();
+              break;
+            }
+            case 594: {
+              DefaultString = input.ReadString();
+              break;
+            }
+            case 602: {
+              DefaultBytes = input.ReadBytes();
+              break;
+            }
+            case 648: {
+              int rawValue = input.ReadEnum();
+              if (!global::System.Enum.IsDefined(typeof(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum), rawValue)) {
+              } else {
+                DefaultNestedEnum = (global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum) rawValue;
+              }
+              break;
+            }
+            case 656: {
+              int rawValue = input.ReadEnum();
+              if (!global::System.Enum.IsDefined(typeof(global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite), rawValue)) {
+              } else {
+                DefaultForeignEnum = (global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite) rawValue;
+              }
+              break;
+            }
+            case 664: {
+              int rawValue = input.ReadEnum();
+              if (!global::System.Enum.IsDefined(typeof(global::Google.ProtocolBuffers.TestProtos.ImportEnumLite), rawValue)) {
+              } else {
+                DefaultImportEnum = (global::Google.ProtocolBuffers.TestProtos.ImportEnumLite) rawValue;
+              }
+              break;
+            }
+            case 674: {
+              DefaultStringPiece = input.ReadString();
+              break;
+            }
+            case 682: {
+              DefaultCord = input.ReadString();
+              break;
+            }
+          }
+        }
+      }
+      
       
       public bool HasOptionalInt32 {
         get { return result.HasOptionalInt32; }
@@ -3493,7 +5065,7 @@
       }
       public Builder ClearDefaultBytes() {
         result.hasDefaultBytes = false;
-        result.defaultBytes_ = (pb::ByteString) global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Descriptor.Fields[62].DefaultValue;
+        result.defaultBytes_ = ByteString.FromBase64("d29ybGQ=");
         return this;
       }
       
@@ -3594,7 +5166,7 @@
     }
   }
   
-  public sealed partial class ForeignMessageLite : pb::GeneratedMessage<ForeignMessageLite, ForeignMessageLite.Builder> {
+  public sealed partial class ForeignMessageLite : pb::GeneratedMessageLite<ForeignMessageLite, ForeignMessageLite.Builder> {
     private static readonly ForeignMessageLite defaultInstance = new Builder().BuildPartial();
     public static ForeignMessageLite DefaultInstance {
       get { return defaultInstance; }
@@ -3608,14 +5180,6 @@
       get { return this; }
     }
     
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.internal__static_protobuf_unittest_ForeignMessageLite__Descriptor; }
-    }
-    
-    protected override pb::FieldAccess.FieldAccessorTable<ForeignMessageLite, ForeignMessageLite.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.internal__static_protobuf_unittest_ForeignMessageLite__FieldAccessorTable; }
-    }
-    
     public const int CFieldNumber = 1;
     private bool hasC;
     private int c_ = 0;
@@ -3626,6 +5190,34 @@
       get { return c_; }
     }
     
+    public override bool IsInitialized {
+      get {
+        return true;
+      }
+    }
+    
+    public override void WriteTo(pb::CodedOutputStream output) {
+      int size = SerializedSize;
+      if (HasC) {
+        output.WriteInt32(1, C);
+      }
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public override int SerializedSize {
+      get {
+        int size = memoizedSerializedSize;
+        if (size != -1) return size;
+        
+        size = 0;
+        if (HasC) {
+          size += pb::CodedOutputStream.ComputeInt32Size(1, C);
+        }
+        memoizedSerializedSize = size;
+        return size;
+      }
+    }
+    
     public static ForeignMessageLite ParseFrom(pb::ByteString data) {
       return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
     }
@@ -3663,7 +5255,7 @@
       return (Builder) new Builder().MergeFrom(prototype);
     }
     
-    public sealed partial class Builder : pb::GeneratedBuilder<ForeignMessageLite, Builder> {
+    public sealed partial class Builder : pb::GeneratedBuilderLite<ForeignMessageLite, Builder> {
       protected override Builder ThisBuilder {
         get { return this; }
       }
@@ -3684,10 +5276,6 @@
         return new Builder().MergeFrom(result);
       }
       
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite.Descriptor; }
-      }
-      
       public override ForeignMessageLite DefaultInstanceForType {
         get { return global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite.DefaultInstance; }
       }
@@ -3701,6 +5289,49 @@
         return returnMe;
       }
       
+      public override Builder MergeFrom(pb::IMessageLite other) {
+        if (other is ForeignMessageLite) {
+          return MergeFrom((ForeignMessageLite) other);
+        } else {
+          base.MergeFrom(other);
+          return this;
+        }
+      }
+      
+      public override Builder MergeFrom(ForeignMessageLite other) {
+        if (other == global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite.DefaultInstance) return this;
+        if (other.HasC) {
+          C = other.C;
+        }
+        return this;
+      }
+      
+      public override Builder MergeFrom(pb::CodedInputStream input) {
+        return MergeFrom(input, pb::ExtensionRegistry.Empty);
+      }
+      
+      public override Builder MergeFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+        while (true) {
+          uint tag = input.ReadTag();
+          switch (tag) {
+            case 0: {
+              return this;
+            }
+            default: {
+              if (pb::WireFormat.IsEndGroupTag(tag)) {
+                return this;
+              }
+              ParseUnknownField(input, extensionRegistry, tag);
+              break;
+            }
+            case 8: {
+              C = input.ReadInt32();
+              break;
+            }
+          }
+        }
+      }
+      
       
       public bool HasC {
         get { return result.HasC; }
@@ -3725,7 +5356,7 @@
     }
   }
   
-  public sealed partial class TestPackedTypesLite : pb::GeneratedMessage<TestPackedTypesLite, TestPackedTypesLite.Builder> {
+  public sealed partial class TestPackedTypesLite : pb::GeneratedMessageLite<TestPackedTypesLite, TestPackedTypesLite.Builder> {
     private static readonly TestPackedTypesLite defaultInstance = new Builder().BuildPartial();
     public static TestPackedTypesLite DefaultInstance {
       get { return defaultInstance; }
@@ -3739,15 +5370,8 @@
       get { return this; }
     }
     
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.internal__static_protobuf_unittest_TestPackedTypesLite__Descriptor; }
-    }
-    
-    protected override pb::FieldAccess.FieldAccessorTable<TestPackedTypesLite, TestPackedTypesLite.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.internal__static_protobuf_unittest_TestPackedTypesLite__FieldAccessorTable; }
-    }
-    
     public const int PackedInt32FieldNumber = 90;
+    private int packedInt32MemoizedSerializedSize;
     private pbc::PopsicleList<int> packedInt32_ = new pbc::PopsicleList<int>();
     public scg::IList<int> PackedInt32List {
       get { return pbc::Lists.AsReadOnly(packedInt32_); }
@@ -3760,6 +5384,7 @@
     }
     
     public const int PackedInt64FieldNumber = 91;
+    private int packedInt64MemoizedSerializedSize;
     private pbc::PopsicleList<long> packedInt64_ = new pbc::PopsicleList<long>();
     public scg::IList<long> PackedInt64List {
       get { return pbc::Lists.AsReadOnly(packedInt64_); }
@@ -3772,6 +5397,7 @@
     }
     
     public const int PackedUint32FieldNumber = 92;
+    private int packedUint32MemoizedSerializedSize;
     private pbc::PopsicleList<uint> packedUint32_ = new pbc::PopsicleList<uint>();
     [global::System.CLSCompliant(false)]
     public scg::IList<uint> PackedUint32List {
@@ -3786,6 +5412,7 @@
     }
     
     public const int PackedUint64FieldNumber = 93;
+    private int packedUint64MemoizedSerializedSize;
     private pbc::PopsicleList<ulong> packedUint64_ = new pbc::PopsicleList<ulong>();
     [global::System.CLSCompliant(false)]
     public scg::IList<ulong> PackedUint64List {
@@ -3800,6 +5427,7 @@
     }
     
     public const int PackedSint32FieldNumber = 94;
+    private int packedSint32MemoizedSerializedSize;
     private pbc::PopsicleList<int> packedSint32_ = new pbc::PopsicleList<int>();
     public scg::IList<int> PackedSint32List {
       get { return pbc::Lists.AsReadOnly(packedSint32_); }
@@ -3812,6 +5440,7 @@
     }
     
     public const int PackedSint64FieldNumber = 95;
+    private int packedSint64MemoizedSerializedSize;
     private pbc::PopsicleList<long> packedSint64_ = new pbc::PopsicleList<long>();
     public scg::IList<long> PackedSint64List {
       get { return pbc::Lists.AsReadOnly(packedSint64_); }
@@ -3824,6 +5453,7 @@
     }
     
     public const int PackedFixed32FieldNumber = 96;
+    private int packedFixed32MemoizedSerializedSize;
     private pbc::PopsicleList<uint> packedFixed32_ = new pbc::PopsicleList<uint>();
     [global::System.CLSCompliant(false)]
     public scg::IList<uint> PackedFixed32List {
@@ -3838,6 +5468,7 @@
     }
     
     public const int PackedFixed64FieldNumber = 97;
+    private int packedFixed64MemoizedSerializedSize;
     private pbc::PopsicleList<ulong> packedFixed64_ = new pbc::PopsicleList<ulong>();
     [global::System.CLSCompliant(false)]
     public scg::IList<ulong> PackedFixed64List {
@@ -3852,6 +5483,7 @@
     }
     
     public const int PackedSfixed32FieldNumber = 98;
+    private int packedSfixed32MemoizedSerializedSize;
     private pbc::PopsicleList<int> packedSfixed32_ = new pbc::PopsicleList<int>();
     public scg::IList<int> PackedSfixed32List {
       get { return pbc::Lists.AsReadOnly(packedSfixed32_); }
@@ -3864,6 +5496,7 @@
     }
     
     public const int PackedSfixed64FieldNumber = 99;
+    private int packedSfixed64MemoizedSerializedSize;
     private pbc::PopsicleList<long> packedSfixed64_ = new pbc::PopsicleList<long>();
     public scg::IList<long> PackedSfixed64List {
       get { return pbc::Lists.AsReadOnly(packedSfixed64_); }
@@ -3876,6 +5509,7 @@
     }
     
     public const int PackedFloatFieldNumber = 100;
+    private int packedFloatMemoizedSerializedSize;
     private pbc::PopsicleList<float> packedFloat_ = new pbc::PopsicleList<float>();
     public scg::IList<float> PackedFloatList {
       get { return pbc::Lists.AsReadOnly(packedFloat_); }
@@ -3888,6 +5522,7 @@
     }
     
     public const int PackedDoubleFieldNumber = 101;
+    private int packedDoubleMemoizedSerializedSize;
     private pbc::PopsicleList<double> packedDouble_ = new pbc::PopsicleList<double>();
     public scg::IList<double> PackedDoubleList {
       get { return pbc::Lists.AsReadOnly(packedDouble_); }
@@ -3900,6 +5535,7 @@
     }
     
     public const int PackedBoolFieldNumber = 102;
+    private int packedBoolMemoizedSerializedSize;
     private pbc::PopsicleList<bool> packedBool_ = new pbc::PopsicleList<bool>();
     public scg::IList<bool> PackedBoolList {
       get { return pbc::Lists.AsReadOnly(packedBool_); }
@@ -3912,6 +5548,7 @@
     }
     
     public const int PackedEnumFieldNumber = 103;
+    private int packedEnumMemoizedSerializedSize;
     private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite> packedEnum_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite>();
     public scg::IList<global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite> PackedEnumList {
       get { return pbc::Lists.AsReadOnly(packedEnum_); }
@@ -3923,6 +5560,267 @@
       return packedEnum_[index];
     }
     
+    public override bool IsInitialized {
+      get {
+        return true;
+      }
+    }
+    
+    public override void WriteTo(pb::CodedOutputStream output) {
+      int size = SerializedSize;
+      if (packedInt32_.Count > 0) {
+        output.WriteRawVarint32(722);
+        output.WriteRawVarint32((uint) packedInt32MemoizedSerializedSize);
+        foreach (int element in packedInt32_) {
+          output.WriteInt32NoTag(element);
+        }
+      }
+      if (packedInt64_.Count > 0) {
+        output.WriteRawVarint32(730);
+        output.WriteRawVarint32((uint) packedInt64MemoizedSerializedSize);
+        foreach (long element in packedInt64_) {
+          output.WriteInt64NoTag(element);
+        }
+      }
+      if (packedUint32_.Count > 0) {
+        output.WriteRawVarint32(738);
+        output.WriteRawVarint32((uint) packedUint32MemoizedSerializedSize);
+        foreach (uint element in packedUint32_) {
+          output.WriteUInt32NoTag(element);
+        }
+      }
+      if (packedUint64_.Count > 0) {
+        output.WriteRawVarint32(746);
+        output.WriteRawVarint32((uint) packedUint64MemoizedSerializedSize);
+        foreach (ulong element in packedUint64_) {
+          output.WriteUInt64NoTag(element);
+        }
+      }
+      if (packedSint32_.Count > 0) {
+        output.WriteRawVarint32(754);
+        output.WriteRawVarint32((uint) packedSint32MemoizedSerializedSize);
+        foreach (int element in packedSint32_) {
+          output.WriteSInt32NoTag(element);
+        }
+      }
+      if (packedSint64_.Count > 0) {
+        output.WriteRawVarint32(762);
+        output.WriteRawVarint32((uint) packedSint64MemoizedSerializedSize);
+        foreach (long element in packedSint64_) {
+          output.WriteSInt64NoTag(element);
+        }
+      }
+      if (packedFixed32_.Count > 0) {
+        output.WriteRawVarint32(770);
+        output.WriteRawVarint32((uint) packedFixed32MemoizedSerializedSize);
+        foreach (uint element in packedFixed32_) {
+          output.WriteFixed32NoTag(element);
+        }
+      }
+      if (packedFixed64_.Count > 0) {
+        output.WriteRawVarint32(778);
+        output.WriteRawVarint32((uint) packedFixed64MemoizedSerializedSize);
+        foreach (ulong element in packedFixed64_) {
+          output.WriteFixed64NoTag(element);
+        }
+      }
+      if (packedSfixed32_.Count > 0) {
+        output.WriteRawVarint32(786);
+        output.WriteRawVarint32((uint) packedSfixed32MemoizedSerializedSize);
+        foreach (int element in packedSfixed32_) {
+          output.WriteSFixed32NoTag(element);
+        }
+      }
+      if (packedSfixed64_.Count > 0) {
+        output.WriteRawVarint32(794);
+        output.WriteRawVarint32((uint) packedSfixed64MemoizedSerializedSize);
+        foreach (long element in packedSfixed64_) {
+          output.WriteSFixed64NoTag(element);
+        }
+      }
+      if (packedFloat_.Count > 0) {
+        output.WriteRawVarint32(802);
+        output.WriteRawVarint32((uint) packedFloatMemoizedSerializedSize);
+        foreach (float element in packedFloat_) {
+          output.WriteFloatNoTag(element);
+        }
+      }
+      if (packedDouble_.Count > 0) {
+        output.WriteRawVarint32(810);
+        output.WriteRawVarint32((uint) packedDoubleMemoizedSerializedSize);
+        foreach (double element in packedDouble_) {
+          output.WriteDoubleNoTag(element);
+        }
+      }
+      if (packedBool_.Count > 0) {
+        output.WriteRawVarint32(818);
+        output.WriteRawVarint32((uint) packedBoolMemoizedSerializedSize);
+        foreach (bool element in packedBool_) {
+          output.WriteBoolNoTag(element);
+        }
+      }
+      if (packedEnum_.Count > 0) {
+        output.WriteRawVarint32(826);
+        output.WriteRawVarint32((uint) packedEnumMemoizedSerializedSize);
+        foreach (int element in packedEnum_) {
+          output.WriteEnumNoTag(element);
+        }
+      }
+    }
+    
+    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 PackedInt32List) {
+            dataSize += pb::CodedOutputStream.ComputeInt32SizeNoTag(element);
+          }
+          size += dataSize;
+          if (packedInt32_.Count != 0) {
+            size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
+          }
+          packedInt32MemoizedSerializedSize = dataSize;
+        }
+        {
+          int dataSize = 0;
+          foreach (long element in PackedInt64List) {
+            dataSize += pb::CodedOutputStream.ComputeInt64SizeNoTag(element);
+          }
+          size += dataSize;
+          if (packedInt64_.Count != 0) {
+            size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
+          }
+          packedInt64MemoizedSerializedSize = dataSize;
+        }
+        {
+          int dataSize = 0;
+          foreach (uint element in PackedUint32List) {
+            dataSize += pb::CodedOutputStream.ComputeUInt32SizeNoTag(element);
+          }
+          size += dataSize;
+          if (packedUint32_.Count != 0) {
+            size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
+          }
+          packedUint32MemoizedSerializedSize = dataSize;
+        }
+        {
+          int dataSize = 0;
+          foreach (ulong element in PackedUint64List) {
+            dataSize += pb::CodedOutputStream.ComputeUInt64SizeNoTag(element);
+          }
+          size += dataSize;
+          if (packedUint64_.Count != 0) {
+            size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
+          }
+          packedUint64MemoizedSerializedSize = dataSize;
+        }
+        {
+          int dataSize = 0;
+          foreach (int element in PackedSint32List) {
+            dataSize += pb::CodedOutputStream.ComputeSInt32SizeNoTag(element);
+          }
+          size += dataSize;
+          if (packedSint32_.Count != 0) {
+            size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
+          }
+          packedSint32MemoizedSerializedSize = dataSize;
+        }
+        {
+          int dataSize = 0;
+          foreach (long element in PackedSint64List) {
+            dataSize += pb::CodedOutputStream.ComputeSInt64SizeNoTag(element);
+          }
+          size += dataSize;
+          if (packedSint64_.Count != 0) {
+            size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
+          }
+          packedSint64MemoizedSerializedSize = dataSize;
+        }
+        {
+          int dataSize = 0;
+          dataSize = 4 * packedFixed32_.Count;
+          size += dataSize;
+          if (packedFixed32_.Count != 0) {
+            size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
+          }
+          packedFixed32MemoizedSerializedSize = dataSize;
+        }
+        {
+          int dataSize = 0;
+          dataSize = 8 * packedFixed64_.Count;
+          size += dataSize;
+          if (packedFixed64_.Count != 0) {
+            size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
+          }
+          packedFixed64MemoizedSerializedSize = dataSize;
+        }
+        {
+          int dataSize = 0;
+          dataSize = 4 * packedSfixed32_.Count;
+          size += dataSize;
+          if (packedSfixed32_.Count != 0) {
+            size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
+          }
+          packedSfixed32MemoizedSerializedSize = dataSize;
+        }
+        {
+          int dataSize = 0;
+          dataSize = 8 * packedSfixed64_.Count;
+          size += dataSize;
+          if (packedSfixed64_.Count != 0) {
+            size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
+          }
+          packedSfixed64MemoizedSerializedSize = dataSize;
+        }
+        {
+          int dataSize = 0;
+          dataSize = 4 * packedFloat_.Count;
+          size += dataSize;
+          if (packedFloat_.Count != 0) {
+            size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
+          }
+          packedFloatMemoizedSerializedSize = dataSize;
+        }
+        {
+          int dataSize = 0;
+          dataSize = 8 * packedDouble_.Count;
+          size += dataSize;
+          if (packedDouble_.Count != 0) {
+            size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
+          }
+          packedDoubleMemoizedSerializedSize = dataSize;
+        }
+        {
+          int dataSize = 0;
+          dataSize = 1 * packedBool_.Count;
+          size += dataSize;
+          if (packedBool_.Count != 0) {
+            size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
+          }
+          packedBoolMemoizedSerializedSize = dataSize;
+        }
+        {
+          int dataSize = 0;
+          if (packedEnum_.Count > 0) {
+            foreach (global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite element in packedEnum_) {
+              dataSize += pb::CodedOutputStream.ComputeEnumSizeNoTag((int) element);
+            }
+            size += dataSize;
+            size += 2;
+            size += pb::CodedOutputStream.ComputeRawVarint32Size((uint) dataSize);
+          }
+          packedEnumMemoizedSerializedSize = dataSize;
+        }
+        memoizedSerializedSize = size;
+        return size;
+      }
+    }
+    
     public static TestPackedTypesLite ParseFrom(pb::ByteString data) {
       return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
     }
@@ -3960,7 +5858,7 @@
       return (Builder) new Builder().MergeFrom(prototype);
     }
     
-    public sealed partial class Builder : pb::GeneratedBuilder<TestPackedTypesLite, Builder> {
+    public sealed partial class Builder : pb::GeneratedBuilderLite<TestPackedTypesLite, Builder> {
       protected override Builder ThisBuilder {
         get { return this; }
       }
@@ -3981,10 +5879,6 @@
         return new Builder().MergeFrom(result);
       }
       
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestPackedTypesLite.Descriptor; }
-      }
-      
       public override TestPackedTypesLite DefaultInstanceForType {
         get { return global::Google.ProtocolBuffers.TestProtos.TestPackedTypesLite.DefaultInstance; }
       }
@@ -4012,6 +5906,214 @@
         return returnMe;
       }
       
+      public override Builder MergeFrom(pb::IMessageLite other) {
+        if (other is TestPackedTypesLite) {
+          return MergeFrom((TestPackedTypesLite) other);
+        } else {
+          base.MergeFrom(other);
+          return this;
+        }
+      }
+      
+      public override Builder MergeFrom(TestPackedTypesLite other) {
+        if (other == global::Google.ProtocolBuffers.TestProtos.TestPackedTypesLite.DefaultInstance) return this;
+        if (other.packedInt32_.Count != 0) {
+          base.AddRange(other.packedInt32_, result.packedInt32_);
+        }
+        if (other.packedInt64_.Count != 0) {
+          base.AddRange(other.packedInt64_, result.packedInt64_);
+        }
+        if (other.packedUint32_.Count != 0) {
+          base.AddRange(other.packedUint32_, result.packedUint32_);
+        }
+        if (other.packedUint64_.Count != 0) {
+          base.AddRange(other.packedUint64_, result.packedUint64_);
+        }
+        if (other.packedSint32_.Count != 0) {
+          base.AddRange(other.packedSint32_, result.packedSint32_);
+        }
+        if (other.packedSint64_.Count != 0) {
+          base.AddRange(other.packedSint64_, result.packedSint64_);
+        }
+        if (other.packedFixed32_.Count != 0) {
+          base.AddRange(other.packedFixed32_, result.packedFixed32_);
+        }
+        if (other.packedFixed64_.Count != 0) {
+          base.AddRange(other.packedFixed64_, result.packedFixed64_);
+        }
+        if (other.packedSfixed32_.Count != 0) {
+          base.AddRange(other.packedSfixed32_, result.packedSfixed32_);
+        }
+        if (other.packedSfixed64_.Count != 0) {
+          base.AddRange(other.packedSfixed64_, result.packedSfixed64_);
+        }
+        if (other.packedFloat_.Count != 0) {
+          base.AddRange(other.packedFloat_, result.packedFloat_);
+        }
+        if (other.packedDouble_.Count != 0) {
+          base.AddRange(other.packedDouble_, result.packedDouble_);
+        }
+        if (other.packedBool_.Count != 0) {
+          base.AddRange(other.packedBool_, result.packedBool_);
+        }
+        if (other.packedEnum_.Count != 0) {
+          base.AddRange(other.packedEnum_, result.packedEnum_);
+        }
+        return this;
+      }
+      
+      public override Builder MergeFrom(pb::CodedInputStream input) {
+        return MergeFrom(input, pb::ExtensionRegistry.Empty);
+      }
+      
+      public override Builder MergeFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+        while (true) {
+          uint tag = input.ReadTag();
+          switch (tag) {
+            case 0: {
+              return this;
+            }
+            default: {
+              if (pb::WireFormat.IsEndGroupTag(tag)) {
+                return this;
+              }
+              ParseUnknownField(input, extensionRegistry, tag);
+              break;
+            }
+            case 722: {
+              int length = input.ReadInt32();
+              int limit = input.PushLimit(length);
+              while (!input.ReachedLimit) {
+                AddPackedInt32(input.ReadInt32());
+              }
+              input.PopLimit(limit);
+              break;
+            }
+            case 730: {
+              int length = input.ReadInt32();
+              int limit = input.PushLimit(length);
+              while (!input.ReachedLimit) {
+                AddPackedInt64(input.ReadInt64());
+              }
+              input.PopLimit(limit);
+              break;
+            }
+            case 738: {
+              int length = input.ReadInt32();
+              int limit = input.PushLimit(length);
+              while (!input.ReachedLimit) {
+                AddPackedUint32(input.ReadUInt32());
+              }
+              input.PopLimit(limit);
+              break;
+            }
+            case 746: {
+              int length = input.ReadInt32();
+              int limit = input.PushLimit(length);
+              while (!input.ReachedLimit) {
+                AddPackedUint64(input.ReadUInt64());
+              }
+              input.PopLimit(limit);
+              break;
+            }
+            case 754: {
+              int length = input.ReadInt32();
+              int limit = input.PushLimit(length);
+              while (!input.ReachedLimit) {
+                AddPackedSint32(input.ReadSInt32());
+              }
+              input.PopLimit(limit);
+              break;
+            }
+            case 762: {
+              int length = input.ReadInt32();
+              int limit = input.PushLimit(length);
+              while (!input.ReachedLimit) {
+                AddPackedSint64(input.ReadSInt64());
+              }
+              input.PopLimit(limit);
+              break;
+            }
+            case 770: {
+              int length = input.ReadInt32();
+              int limit = input.PushLimit(length);
+              while (!input.ReachedLimit) {
+                AddPackedFixed32(input.ReadFixed32());
+              }
+              input.PopLimit(limit);
+              break;
+            }
+            case 778: {
+              int length = input.ReadInt32();
+              int limit = input.PushLimit(length);
+              while (!input.ReachedLimit) {
+                AddPackedFixed64(input.ReadFixed64());
+              }
+              input.PopLimit(limit);
+              break;
+            }
+            case 786: {
+              int length = input.ReadInt32();
+              int limit = input.PushLimit(length);
+              while (!input.ReachedLimit) {
+                AddPackedSfixed32(input.ReadSFixed32());
+              }
+              input.PopLimit(limit);
+              break;
+            }
+            case 794: {
+              int length = input.ReadInt32();
+              int limit = input.PushLimit(length);
+              while (!input.ReachedLimit) {
+                AddPackedSfixed64(input.ReadSFixed64());
+              }
+              input.PopLimit(limit);
+              break;
+            }
+            case 802: {
+              int length = input.ReadInt32();
+              int limit = input.PushLimit(length);
+              while (!input.ReachedLimit) {
+                AddPackedFloat(input.ReadFloat());
+              }
+              input.PopLimit(limit);
+              break;
+            }
+            case 810: {
+              int length = input.ReadInt32();
+              int limit = input.PushLimit(length);
+              while (!input.ReachedLimit) {
+                AddPackedDouble(input.ReadDouble());
+              }
+              input.PopLimit(limit);
+              break;
+            }
+            case 818: {
+              int length = input.ReadInt32();
+              int limit = input.PushLimit(length);
+              while (!input.ReachedLimit) {
+                AddPackedBool(input.ReadBool());
+              }
+              input.PopLimit(limit);
+              break;
+            }
+            case 826: {
+              int length = input.ReadInt32();
+              int oldLimit = input.PushLimit(length);
+              while (!input.ReachedLimit) {
+                int rawValue = input.ReadEnum();
+                if (!global::System.Enum.IsDefined(typeof(global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite), rawValue)) {
+                } else {
+                  AddPackedEnum((global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite) rawValue);
+                }
+              }
+              input.PopLimit(oldLimit);
+              break;
+            }
+          }
+        }
+      }
+      
       
       public pbc::IPopsicleList<int> PackedInt32List {
         get { return result.packedInt32_; }
@@ -4402,7 +6504,7 @@
     }
   }
   
-  public sealed partial class TestAllExtensionsLite : pb::ExtendableMessage<TestAllExtensionsLite, TestAllExtensionsLite.Builder> {
+  public sealed partial class TestAllExtensionsLite : pb::ExtendableMessageLite<TestAllExtensionsLite, TestAllExtensionsLite.Builder> {
     private static readonly TestAllExtensionsLite defaultInstance = new Builder().BuildPartial();
     public static TestAllExtensionsLite DefaultInstance {
       get { return defaultInstance; }
@@ -4416,12 +6518,30 @@
       get { return this; }
     }
     
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.internal__static_protobuf_unittest_TestAllExtensionsLite__Descriptor; }
+    public override bool IsInitialized {
+      get {
+        if (!ExtensionsAreInitialized) return false;
+        return true;
+      }
     }
     
-    protected override pb::FieldAccess.FieldAccessorTable<TestAllExtensionsLite, TestAllExtensionsLite.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.internal__static_protobuf_unittest_TestAllExtensionsLite__FieldAccessorTable; }
+    public override void WriteTo(pb::CodedOutputStream output) {
+      int size = SerializedSize;
+      pb::ExtendableMessageLite<TestAllExtensionsLite, TestAllExtensionsLite.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
+      extensionWriter.WriteUntil(536870912, output);
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public override int SerializedSize {
+      get {
+        int size = memoizedSerializedSize;
+        if (size != -1) return size;
+        
+        size = 0;
+        size += ExtensionsSerializedSize;
+        memoizedSerializedSize = size;
+        return size;
+      }
     }
     
     public static TestAllExtensionsLite ParseFrom(pb::ByteString data) {
@@ -4461,7 +6581,7 @@
       return (Builder) new Builder().MergeFrom(prototype);
     }
     
-    public sealed partial class Builder : pb::ExtendableBuilder<TestAllExtensionsLite, Builder> {
+    public sealed partial class Builder : pb::ExtendableBuilderLite<TestAllExtensionsLite, Builder> {
       protected override Builder ThisBuilder {
         get { return this; }
       }
@@ -4482,10 +6602,6 @@
         return new Builder().MergeFrom(result);
       }
       
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.Descriptor; }
-      }
-      
       public override TestAllExtensionsLite DefaultInstanceForType {
         get { return global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance; }
       }
@@ -4499,13 +6615,50 @@
         return returnMe;
       }
       
+      public override Builder MergeFrom(pb::IMessageLite other) {
+        if (other is TestAllExtensionsLite) {
+          return MergeFrom((TestAllExtensionsLite) other);
+        } else {
+          base.MergeFrom(other);
+          return this;
+        }
+      }
+      
+      public override Builder MergeFrom(TestAllExtensionsLite other) {
+        if (other == global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance) return this;
+          this.MergeExtensionFields(other);
+        return this;
+      }
+      
+      public override Builder MergeFrom(pb::CodedInputStream input) {
+        return MergeFrom(input, pb::ExtensionRegistry.Empty);
+      }
+      
+      public override Builder MergeFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+        while (true) {
+          uint tag = input.ReadTag();
+          switch (tag) {
+            case 0: {
+              return this;
+            }
+            default: {
+              if (pb::WireFormat.IsEndGroupTag(tag)) {
+                return this;
+              }
+              ParseUnknownField(input, extensionRegistry, tag);
+              break;
+            }
+          }
+        }
+      }
+      
     }
     static TestAllExtensionsLite() {
       object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor, null);
     }
   }
   
-  public sealed partial class OptionalGroup_extension_lite : pb::GeneratedMessage<OptionalGroup_extension_lite, OptionalGroup_extension_lite.Builder> {
+  public sealed partial class OptionalGroup_extension_lite : pb::GeneratedMessageLite<OptionalGroup_extension_lite, OptionalGroup_extension_lite.Builder> {
     private static readonly OptionalGroup_extension_lite defaultInstance = new Builder().BuildPartial();
     public static OptionalGroup_extension_lite DefaultInstance {
       get { return defaultInstance; }
@@ -4519,14 +6672,6 @@
       get { return this; }
     }
     
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.internal__static_protobuf_unittest_OptionalGroup_extension_lite__Descriptor; }
-    }
-    
-    protected override pb::FieldAccess.FieldAccessorTable<OptionalGroup_extension_lite, OptionalGroup_extension_lite.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.internal__static_protobuf_unittest_OptionalGroup_extension_lite__FieldAccessorTable; }
-    }
-    
     public const int AFieldNumber = 17;
     private bool hasA;
     private int a_ = 0;
@@ -4537,6 +6682,34 @@
       get { return a_; }
     }
     
+    public override bool IsInitialized {
+      get {
+        return true;
+      }
+    }
+    
+    public override void WriteTo(pb::CodedOutputStream output) {
+      int size = SerializedSize;
+      if (HasA) {
+        output.WriteInt32(17, A);
+      }
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public override int SerializedSize {
+      get {
+        int size = memoizedSerializedSize;
+        if (size != -1) return size;
+        
+        size = 0;
+        if (HasA) {
+          size += pb::CodedOutputStream.ComputeInt32Size(17, A);
+        }
+        memoizedSerializedSize = size;
+        return size;
+      }
+    }
+    
     public static OptionalGroup_extension_lite ParseFrom(pb::ByteString data) {
       return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
     }
@@ -4574,7 +6747,7 @@
       return (Builder) new Builder().MergeFrom(prototype);
     }
     
-    public sealed partial class Builder : pb::GeneratedBuilder<OptionalGroup_extension_lite, Builder> {
+    public sealed partial class Builder : pb::GeneratedBuilderLite<OptionalGroup_extension_lite, Builder> {
       protected override Builder ThisBuilder {
         get { return this; }
       }
@@ -4595,10 +6768,6 @@
         return new Builder().MergeFrom(result);
       }
       
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.OptionalGroup_extension_lite.Descriptor; }
-      }
-      
       public override OptionalGroup_extension_lite DefaultInstanceForType {
         get { return global::Google.ProtocolBuffers.TestProtos.OptionalGroup_extension_lite.DefaultInstance; }
       }
@@ -4612,6 +6781,49 @@
         return returnMe;
       }
       
+      public override Builder MergeFrom(pb::IMessageLite other) {
+        if (other is OptionalGroup_extension_lite) {
+          return MergeFrom((OptionalGroup_extension_lite) other);
+        } else {
+          base.MergeFrom(other);
+          return this;
+        }
+      }
+      
+      public override Builder MergeFrom(OptionalGroup_extension_lite other) {
+        if (other == global::Google.ProtocolBuffers.TestProtos.OptionalGroup_extension_lite.DefaultInstance) return this;
+        if (other.HasA) {
+          A = other.A;
+        }
+        return this;
+      }
+      
+      public override Builder MergeFrom(pb::CodedInputStream input) {
+        return MergeFrom(input, pb::ExtensionRegistry.Empty);
+      }
+      
+      public override Builder MergeFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+        while (true) {
+          uint tag = input.ReadTag();
+          switch (tag) {
+            case 0: {
+              return this;
+            }
+            default: {
+              if (pb::WireFormat.IsEndGroupTag(tag)) {
+                return this;
+              }
+              ParseUnknownField(input, extensionRegistry, tag);
+              break;
+            }
+            case 136: {
+              A = input.ReadInt32();
+              break;
+            }
+          }
+        }
+      }
+      
       
       public bool HasA {
         get { return result.HasA; }
@@ -4636,7 +6848,7 @@
     }
   }
   
-  public sealed partial class RepeatedGroup_extension_lite : pb::GeneratedMessage<RepeatedGroup_extension_lite, RepeatedGroup_extension_lite.Builder> {
+  public sealed partial class RepeatedGroup_extension_lite : pb::GeneratedMessageLite<RepeatedGroup_extension_lite, RepeatedGroup_extension_lite.Builder> {
     private static readonly RepeatedGroup_extension_lite defaultInstance = new Builder().BuildPartial();
     public static RepeatedGroup_extension_lite DefaultInstance {
       get { return defaultInstance; }
@@ -4650,14 +6862,6 @@
       get { return this; }
     }
     
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.internal__static_protobuf_unittest_RepeatedGroup_extension_lite__Descriptor; }
-    }
-    
-    protected override pb::FieldAccess.FieldAccessorTable<RepeatedGroup_extension_lite, RepeatedGroup_extension_lite.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.internal__static_protobuf_unittest_RepeatedGroup_extension_lite__FieldAccessorTable; }
-    }
-    
     public const int AFieldNumber = 47;
     private bool hasA;
     private int a_ = 0;
@@ -4668,6 +6872,34 @@
       get { return a_; }
     }
     
+    public override bool IsInitialized {
+      get {
+        return true;
+      }
+    }
+    
+    public override void WriteTo(pb::CodedOutputStream output) {
+      int size = SerializedSize;
+      if (HasA) {
+        output.WriteInt32(47, A);
+      }
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public override int SerializedSize {
+      get {
+        int size = memoizedSerializedSize;
+        if (size != -1) return size;
+        
+        size = 0;
+        if (HasA) {
+          size += pb::CodedOutputStream.ComputeInt32Size(47, A);
+        }
+        memoizedSerializedSize = size;
+        return size;
+      }
+    }
+    
     public static RepeatedGroup_extension_lite ParseFrom(pb::ByteString data) {
       return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
     }
@@ -4705,7 +6937,7 @@
       return (Builder) new Builder().MergeFrom(prototype);
     }
     
-    public sealed partial class Builder : pb::GeneratedBuilder<RepeatedGroup_extension_lite, Builder> {
+    public sealed partial class Builder : pb::GeneratedBuilderLite<RepeatedGroup_extension_lite, Builder> {
       protected override Builder ThisBuilder {
         get { return this; }
       }
@@ -4726,10 +6958,6 @@
         return new Builder().MergeFrom(result);
       }
       
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.RepeatedGroup_extension_lite.Descriptor; }
-      }
-      
       public override RepeatedGroup_extension_lite DefaultInstanceForType {
         get { return global::Google.ProtocolBuffers.TestProtos.RepeatedGroup_extension_lite.DefaultInstance; }
       }
@@ -4743,6 +6971,49 @@
         return returnMe;
       }
       
+      public override Builder MergeFrom(pb::IMessageLite other) {
+        if (other is RepeatedGroup_extension_lite) {
+          return MergeFrom((RepeatedGroup_extension_lite) other);
+        } else {
+          base.MergeFrom(other);
+          return this;
+        }
+      }
+      
+      public override Builder MergeFrom(RepeatedGroup_extension_lite other) {
+        if (other == global::Google.ProtocolBuffers.TestProtos.RepeatedGroup_extension_lite.DefaultInstance) return this;
+        if (other.HasA) {
+          A = other.A;
+        }
+        return this;
+      }
+      
+      public override Builder MergeFrom(pb::CodedInputStream input) {
+        return MergeFrom(input, pb::ExtensionRegistry.Empty);
+      }
+      
+      public override Builder MergeFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+        while (true) {
+          uint tag = input.ReadTag();
+          switch (tag) {
+            case 0: {
+              return this;
+            }
+            default: {
+              if (pb::WireFormat.IsEndGroupTag(tag)) {
+                return this;
+              }
+              ParseUnknownField(input, extensionRegistry, tag);
+              break;
+            }
+            case 376: {
+              A = input.ReadInt32();
+              break;
+            }
+          }
+        }
+      }
+      
       
       public bool HasA {
         get { return result.HasA; }
@@ -4767,7 +7038,7 @@
     }
   }
   
-  public sealed partial class TestPackedExtensionsLite : pb::ExtendableMessage<TestPackedExtensionsLite, TestPackedExtensionsLite.Builder> {
+  public sealed partial class TestPackedExtensionsLite : pb::ExtendableMessageLite<TestPackedExtensionsLite, TestPackedExtensionsLite.Builder> {
     private static readonly TestPackedExtensionsLite defaultInstance = new Builder().BuildPartial();
     public static TestPackedExtensionsLite DefaultInstance {
       get { return defaultInstance; }
@@ -4781,12 +7052,30 @@
       get { return this; }
     }
     
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.internal__static_protobuf_unittest_TestPackedExtensionsLite__Descriptor; }
+    public override bool IsInitialized {
+      get {
+        if (!ExtensionsAreInitialized) return false;
+        return true;
+      }
     }
     
-    protected override pb::FieldAccess.FieldAccessorTable<TestPackedExtensionsLite, TestPackedExtensionsLite.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.internal__static_protobuf_unittest_TestPackedExtensionsLite__FieldAccessorTable; }
+    public override void WriteTo(pb::CodedOutputStream output) {
+      int size = SerializedSize;
+      pb::ExtendableMessageLite<TestPackedExtensionsLite, TestPackedExtensionsLite.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
+      extensionWriter.WriteUntil(536870912, output);
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public override int SerializedSize {
+      get {
+        int size = memoizedSerializedSize;
+        if (size != -1) return size;
+        
+        size = 0;
+        size += ExtensionsSerializedSize;
+        memoizedSerializedSize = size;
+        return size;
+      }
     }
     
     public static TestPackedExtensionsLite ParseFrom(pb::ByteString data) {
@@ -4826,7 +7115,7 @@
       return (Builder) new Builder().MergeFrom(prototype);
     }
     
-    public sealed partial class Builder : pb::ExtendableBuilder<TestPackedExtensionsLite, Builder> {
+    public sealed partial class Builder : pb::ExtendableBuilderLite<TestPackedExtensionsLite, Builder> {
       protected override Builder ThisBuilder {
         get { return this; }
       }
@@ -4847,10 +7136,6 @@
         return new Builder().MergeFrom(result);
       }
       
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite.Descriptor; }
-      }
-      
       public override TestPackedExtensionsLite DefaultInstanceForType {
         get { return global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite.DefaultInstance; }
       }
@@ -4864,13 +7149,50 @@
         return returnMe;
       }
       
+      public override Builder MergeFrom(pb::IMessageLite other) {
+        if (other is TestPackedExtensionsLite) {
+          return MergeFrom((TestPackedExtensionsLite) other);
+        } else {
+          base.MergeFrom(other);
+          return this;
+        }
+      }
+      
+      public override Builder MergeFrom(TestPackedExtensionsLite other) {
+        if (other == global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite.DefaultInstance) return this;
+          this.MergeExtensionFields(other);
+        return this;
+      }
+      
+      public override Builder MergeFrom(pb::CodedInputStream input) {
+        return MergeFrom(input, pb::ExtensionRegistry.Empty);
+      }
+      
+      public override Builder MergeFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+        while (true) {
+          uint tag = input.ReadTag();
+          switch (tag) {
+            case 0: {
+              return this;
+            }
+            default: {
+              if (pb::WireFormat.IsEndGroupTag(tag)) {
+                return this;
+              }
+              ParseUnknownField(input, extensionRegistry, tag);
+              break;
+            }
+          }
+        }
+      }
+      
     }
     static TestPackedExtensionsLite() {
       object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor, null);
     }
   }
   
-  public sealed partial class TestNestedExtensionLite : pb::GeneratedMessage<TestNestedExtensionLite, TestNestedExtensionLite.Builder> {
+  public sealed partial class TestNestedExtensionLite : pb::GeneratedMessageLite<TestNestedExtensionLite, TestNestedExtensionLite.Builder> {
     private static readonly TestNestedExtensionLite defaultInstance = new Builder().BuildPartial();
     public static TestNestedExtensionLite DefaultInstance {
       get { return defaultInstance; }
@@ -4884,16 +7206,30 @@
       get { return this; }
     }
     
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.internal__static_protobuf_unittest_TestNestedExtensionLite__Descriptor; }
-    }
-    
-    protected override pb::FieldAccess.FieldAccessorTable<TestNestedExtensionLite, TestNestedExtensionLite.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.internal__static_protobuf_unittest_TestNestedExtensionLite__FieldAccessorTable; }
-    }
-    
     public const int NestedExtensionFieldNumber = 12345;
-    public static pb::GeneratedExtensionBase<int> NestedExtension;
+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, int> NestedExtension;
+    public override bool IsInitialized {
+      get {
+        return true;
+      }
+    }
+    
+    public override void WriteTo(pb::CodedOutputStream output) {
+      int size = SerializedSize;
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public override int SerializedSize {
+      get {
+        int size = memoizedSerializedSize;
+        if (size != -1) return size;
+        
+        size = 0;
+        memoizedSerializedSize = size;
+        return size;
+      }
+    }
+    
     public static TestNestedExtensionLite ParseFrom(pb::ByteString data) {
       return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
     }
@@ -4931,7 +7267,7 @@
       return (Builder) new Builder().MergeFrom(prototype);
     }
     
-    public sealed partial class Builder : pb::GeneratedBuilder<TestNestedExtensionLite, Builder> {
+    public sealed partial class Builder : pb::GeneratedBuilderLite<TestNestedExtensionLite, Builder> {
       protected override Builder ThisBuilder {
         get { return this; }
       }
@@ -4952,10 +7288,6 @@
         return new Builder().MergeFrom(result);
       }
       
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestNestedExtensionLite.Descriptor; }
-      }
-      
       public override TestNestedExtensionLite DefaultInstanceForType {
         get { return global::Google.ProtocolBuffers.TestProtos.TestNestedExtensionLite.DefaultInstance; }
       }
@@ -4969,13 +7301,49 @@
         return returnMe;
       }
       
+      public override Builder MergeFrom(pb::IMessageLite other) {
+        if (other is TestNestedExtensionLite) {
+          return MergeFrom((TestNestedExtensionLite) other);
+        } else {
+          base.MergeFrom(other);
+          return this;
+        }
+      }
+      
+      public override Builder MergeFrom(TestNestedExtensionLite other) {
+        if (other == global::Google.ProtocolBuffers.TestProtos.TestNestedExtensionLite.DefaultInstance) return this;
+        return this;
+      }
+      
+      public override Builder MergeFrom(pb::CodedInputStream input) {
+        return MergeFrom(input, pb::ExtensionRegistry.Empty);
+      }
+      
+      public override Builder MergeFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+        while (true) {
+          uint tag = input.ReadTag();
+          switch (tag) {
+            case 0: {
+              return this;
+            }
+            default: {
+              if (pb::WireFormat.IsEndGroupTag(tag)) {
+                return this;
+              }
+              ParseUnknownField(input, extensionRegistry, tag);
+              break;
+            }
+          }
+        }
+      }
+      
     }
     static TestNestedExtensionLite() {
       object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor, null);
     }
   }
   
-  public sealed partial class TestDeprecatedLite : pb::GeneratedMessage<TestDeprecatedLite, TestDeprecatedLite.Builder> {
+  public sealed partial class TestDeprecatedLite : pb::GeneratedMessageLite<TestDeprecatedLite, TestDeprecatedLite.Builder> {
     private static readonly TestDeprecatedLite defaultInstance = new Builder().BuildPartial();
     public static TestDeprecatedLite DefaultInstance {
       get { return defaultInstance; }
@@ -4989,14 +7357,6 @@
       get { return this; }
     }
     
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.internal__static_protobuf_unittest_TestDeprecatedLite__Descriptor; }
-    }
-    
-    protected override pb::FieldAccess.FieldAccessorTable<TestDeprecatedLite, TestDeprecatedLite.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.internal__static_protobuf_unittest_TestDeprecatedLite__FieldAccessorTable; }
-    }
-    
     public const int DeprecatedFieldFieldNumber = 1;
     private bool hasDeprecatedField;
     private int deprecatedField_ = 0;
@@ -5007,6 +7367,34 @@
       get { return deprecatedField_; }
     }
     
+    public override bool IsInitialized {
+      get {
+        return true;
+      }
+    }
+    
+    public override void WriteTo(pb::CodedOutputStream output) {
+      int size = SerializedSize;
+      if (HasDeprecatedField) {
+        output.WriteInt32(1, DeprecatedField);
+      }
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public override int SerializedSize {
+      get {
+        int size = memoizedSerializedSize;
+        if (size != -1) return size;
+        
+        size = 0;
+        if (HasDeprecatedField) {
+          size += pb::CodedOutputStream.ComputeInt32Size(1, DeprecatedField);
+        }
+        memoizedSerializedSize = size;
+        return size;
+      }
+    }
+    
     public static TestDeprecatedLite ParseFrom(pb::ByteString data) {
       return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
     }
@@ -5044,7 +7432,7 @@
       return (Builder) new Builder().MergeFrom(prototype);
     }
     
-    public sealed partial class Builder : pb::GeneratedBuilder<TestDeprecatedLite, Builder> {
+    public sealed partial class Builder : pb::GeneratedBuilderLite<TestDeprecatedLite, Builder> {
       protected override Builder ThisBuilder {
         get { return this; }
       }
@@ -5065,10 +7453,6 @@
         return new Builder().MergeFrom(result);
       }
       
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestDeprecatedLite.Descriptor; }
-      }
-      
       public override TestDeprecatedLite DefaultInstanceForType {
         get { return global::Google.ProtocolBuffers.TestProtos.TestDeprecatedLite.DefaultInstance; }
       }
@@ -5082,6 +7466,49 @@
         return returnMe;
       }
       
+      public override Builder MergeFrom(pb::IMessageLite other) {
+        if (other is TestDeprecatedLite) {
+          return MergeFrom((TestDeprecatedLite) other);
+        } else {
+          base.MergeFrom(other);
+          return this;
+        }
+      }
+      
+      public override Builder MergeFrom(TestDeprecatedLite other) {
+        if (other == global::Google.ProtocolBuffers.TestProtos.TestDeprecatedLite.DefaultInstance) return this;
+        if (other.HasDeprecatedField) {
+          DeprecatedField = other.DeprecatedField;
+        }
+        return this;
+      }
+      
+      public override Builder MergeFrom(pb::CodedInputStream input) {
+        return MergeFrom(input, pb::ExtensionRegistry.Empty);
+      }
+      
+      public override Builder MergeFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+        while (true) {
+          uint tag = input.ReadTag();
+          switch (tag) {
+            case 0: {
+              return this;
+            }
+            default: {
+              if (pb::WireFormat.IsEndGroupTag(tag)) {
+                return this;
+              }
+              ParseUnknownField(input, extensionRegistry, tag);
+              break;
+            }
+            case 8: {
+              DeprecatedField = input.ReadInt32();
+              break;
+            }
+          }
+        }
+      }
+      
       
       public bool HasDeprecatedField {
         get { return result.HasDeprecatedField; }