diff --git a/ProtobufCore/Desc/HunterNetCore.protodesc b/ProtobufCore/Desc/HunterNetCore.protodesc
new file mode 100644
index 0000000..f301c8b
--- /dev/null
+++ b/ProtobufCore/Desc/HunterNetCore.protodesc
@@ -0,0 +1,10 @@
+
+�
+proto/HunterNetCore.protoStargoogle/protobuf/any.proto"o
+
HunterNet_C2S/
+HunterNetCore_CmdID (RHunterNetCoreCmdID-
+HunterNetCore_Data (RHunterNetCoreData"�
+
HunterNet_S2C/
+HunterNetCore_CmdID (RHunterNetCoreCmdID7
+HunterNetCore_ERRORCode (RHunterNetCoreERRORCode-
+HunterNetCore_Data (RHunterNetCoreDataBHbproto3
\ No newline at end of file
diff --git a/ProtobufCore/Desc/HunterStar.protodesc b/ProtobufCore/Desc/HunterStar.protodesc
new file mode 100644
index 0000000..ad75f3a
Binary files /dev/null and b/ProtobufCore/Desc/HunterStar.protodesc differ
diff --git a/ProtobufCore/Desc/KyCmdProtocol.protodesc b/ProtobufCore/Desc/KyCmdProtocol.protodesc
new file mode 100644
index 0000000..3117303
Binary files /dev/null and b/ProtobufCore/Desc/KyCmdProtocol.protodesc differ
diff --git a/ProtobufCore/Desc/KyMsgProtocol.protodesc b/ProtobufCore/Desc/KyMsgProtocol.protodesc
new file mode 100644
index 0000000..eb3d4a3
--- /dev/null
+++ b/ProtobufCore/Desc/KyMsgProtocol.protodesc
@@ -0,0 +1,267 @@
+
+�3
+proto/KyMsgProtocol.protoCC"*
+SystemErrorReponse
+State (RState"F
+SystemErrorInfoReponse
+State (RState
+ErrMsg (	RErrMsg"�
+CreateRoles
+Acc (	RAcc
+UserName (	RUserName
+Sex (RSex
+ZoneID (RZoneID
+occup (Roccup*
+PlatformDataList (	RPlatformDataList"Z
+CreateRolesReponse
+State (RState.
+SubRoleinfo (2.CC.RoleinfoRSubRoleinfo"�	
+Roleinfo
+JobID (RJobID
+CurLv (RCurLv
+CurExp (RCurExp
+	NextLvExp (R	NextLvExp
+POW (RPOW
+AGL (RAGL
+CON (RCON
+INT (RINT
+NickName	 (	RNickName
+Sex
+ (RSex
+Position (	RPosition
+Regtime (	RRegtime
+Lasttime
 (	RLasttime
+Isdel (RIsdel
+Deltime (	RDeltime
+RoleID (RRoleID
+MapCode (RMapCode$
+
RoleDirection (R
RoleDirection
+PosX (RPosX
+PosY (RPosY
+LifeV (RLifeV
+MaxLifeV (RMaxLifeV
+MagicV (RMagicV
+	MaxMagicV (R	MaxMagicV
+ZoneID (RZoneID
+RolePic (RRolePic
+KillLv (RKillLv
+Vitality (RVitality 
+VitalityTop (RVitalityTop
+Vigor (RVigor
+VigorTop (RVigorTop
+Mate  (RMate
+Faction! (RFaction
+Dianjuan" (RDianjuan
+Yuanbao# (RYuanbao
+Money1$ (RMoney1
+
+Reputation% (R
+Reputation
+Prestige& (RPrestige"
+Contribution' (RContribution&
+Transmigration( (RTransmigration
+PKMode) (RPKMode$
+
TeacherPlayer* (R
TeacherPlayer"
+AbilityPoint+ (RAbilityPoint 
+MyIntroduce, (RMyIntroduce3
+
SkillInfoList- (2
.CC.SkillInfoR
SkillInfoList$
+
isFlashplayer. (R
isFlashplayer"s
+	SkillInfo
+DBID (RDBID
+SkillID (RSkillID
+
+SkillLevel (R
+SkillLevel
+UsedNum (RUsedNum"8
+GetRolesList
+Acc (	RAcc
+ZoneID (RZoneID"[
+GetRolesListReponse
+State (RState.
+SubRoleinfo (2.CC.RoleinfoRSubRoleinfo"7
+InitialGame
+Acc (	RAcc
+RoleID (RRoleID"Z
+InitialGameReponse
+State (RState.
+SubRoleinfo (2.CC.RoleinfoRSubRoleinfo""
+PlayGame
+RoleID (RRoleID")
+PlayGameReponse
+RoleID (RRoleID"�
+
+SpriteMove
+RoleID (RRoleID
+MapCode (RMapCode
+action (Raction
+toX (RtoX
+toY (RtoY
+	extAction (R	extAction
+fromX (RfromX
+fromY (RfromY&
+startMoveTicks	 (RstartMoveTicks
+
+pathString
+ (	R
+pathString"
+targetRoleID (RtargetRoleID"�
+SpriteMovePosition
+RoleID (RRoleID
+MapCode (RMapCode
+ToMapX (RToMapX
+ToMapY (RToMapY
+
+ToDiection (R
+ToDiection 
+clientTicks (RclientTicks
+action (Raction
+TryRun (RTryRun"E
+SpriteMovePositionReponse
+RoleID (RRoleID
+xxx (Rxxx"�
+SpriteExchangeMap
+RoleID (RRoleID
+
+TeleportID (R
+TeleportID
+
+NewMapCode (R
+NewMapCode
+	ToNewMapX (R	ToNewMapX
+	ToNewMapY (R	ToNewMapY$
+
ToNewDiection (R
ToNewDiection
+State (RState"J
+OthersLeaveMap
+RoleID (RRoleID 
+SpriteTypes (RSpriteTypes"�
+RoleInfoDataMini
+RoleID (RRoleID
+RoleName (	RRoleName
+RoleSex (RRoleSex
+
+Occupation (R
+Occupation
+Level (RLevel
+MapCode (RMapCode
+PosX (RPosX
+PosY (RPosY$
+
RoleDirection	 (R
RoleDirection
+LifeV
+ (RLifeV
+MaxLifeV (RMaxLifeV
+MagicV (RMagicV
+	MaxMagicV
 (R	MaxMagicV
+ZoneID (RZoneID
+	SkillList (R	SkillList"�
+MonsterInfoData
+RoleID (RRoleID
+RoleName (	RRoleName
+RoleSex (RRoleSex
+Level (RLevel
+
+Experience (R
+Experience
+PosX (RPosX
+PosY (RPosY$
+
RoleDirection (R
RoleDirection
+LifeV	 (RLifeV
+MaxLifeV
+ (RMaxLifeV
+MagicV (RMagicV
+	MaxMagicV (R	MaxMagicV$
+
EquipmentBody
 (R
EquipmentBody 
+ExtensionID (RExtensionID 
+MonsterType (RMonsterType"
+MasterRoleID (RMasterRoleID$
+
AiControlType (R
AiControlType 
+AnimalSound (	RAnimalSound"
+MonsterLevel (RMonsterLevel"
+ZhongDuStart (RZhongDuStart&
+ZhongDuSeconds (RZhongDuSeconds
+
+FaintStart (R
+FaintStart"
+FaintSeconds (RFaintSeconds(
+BattleWitchSide (RBattleWitchSide"�
+
ProAttackData
+roleID (RroleID
+roleX (RroleX
+roleY (RroleY
+	magicCode (R	magicCode7
+
AttackObjList (2.CC.AttackObjInfoR
AttackObjList 
+WeaponsType (RWeaponsTypeA
+PointAttackdoube (2.CC.PointAttackDoubleRPointAttackdoube$
+
BallisticGUID (	R
BallisticGUID"5
+PointAttack
+PosX (RPosX
+PosY (RPosY";
+PointAttackDouble
+PosX (RPosX
+PosY (RPosY"�
+
AttackObjInfo
+enemy (Renemy
+enemyX (RenemyX
+enemyY (RenemyY
+
+realEnemyX (R
+realEnemyX
+
+realEnemyY (R
+realEnemyY"�
+ProAttackDataReponse$
+
attackerLevel (R
attackerLevel&
+attackerRoleID (RattackerRoleID
+SkillID (RSkillID8
+
AttackObjList (2.CC.AttackDataInfoR
AttackObjList"
+attackerPosX (RattackerPosX"
+attackerPosY (RattackerPosYA
+PointAttackdoube (2.CC.PointAttackDoubleRPointAttackdoube$
+
BallisticGUID (	R
BallisticGUID"�
+AttackDataInfo$
+
injuredRoleID (R
injuredRoleID
+burst (Rburst
+injure (Rinjure$
+
newExperience (R
newExperience,
+currentExperience (RcurrentExperience
+newLevel (RnewLevel"
+MerlinInjuer (RMerlinInjuer
+
+MerlinType (R
+MerlinType(
+injuredRoleLife	 (RinjuredRoleLife0
+injuredRoleMaxLifeV
+ (RinjuredRoleMaxLifeV*
+injuredRoleMagic (RinjuredRoleMagic2
+injuredRoleMaxMagicV (RinjuredRoleMaxMagicV 
+injuredType
 (RinjuredType"P
+
+DBAddSkill
+RoleID (RRoleID
+SkillID (RSkillID
+Lvl (RLvl"=
+DBAddSkillReponse
+State (RState
+DBID (RDBID"�
+AttackReadyData
+
+AttackerID (R
+AttackerID
+SkillID (RSkillIDA
+PointAttackdoube (2.CC.PointAttackDoubleRPointAttackdoube 
+NextSkillID (	RNextSkillID"5
+SpriteMonsterDead 
+MonsterList (RMonsterList"�
+PLAYBallisticData
+roleID (RroleID
+roleX (RroleX
+roleY (RroleY
+	magicCode (R	magicCodeA
+PointAttackdoube (2.CC.PointAttackDoubleRPointAttackdoube$
+
BallisticGUID (	R
BallisticGUID"�
+WorldEffectData
+roleID (RroleID
+roleX (RroleX
+roleY (RroleY
+	magicCode (R	magicCodeA
+PointAttackdoube (2.CC.PointAttackDoubleRPointAttackdoube"
+OtherEffectDatabproto3
\ No newline at end of file
diff --git a/ProtobufCore/Desc/protobuf_HunterNetCore.protodesc b/ProtobufCore/Desc/protobuf_HunterNetCore.protodesc
new file mode 100644
index 0000000..08ff949
--- /dev/null
+++ b/ProtobufCore/Desc/protobuf_HunterNetCore.protodesc
@@ -0,0 +1,10 @@
+
+�
+"proto/protobuf_HunterNetCore.protoHunterProtobufCore"o
+
HunterNet_C2S/
+HunterNetCore_CmdID (RHunterNetCoreCmdID-
+HunterNetCore_Data (RHunterNetCoreData"�
+
HunterNet_S2C/
+HunterNetCore_CmdID (RHunterNetCoreCmdID7
+HunterNetCore_ERRORCode (RHunterNetCoreERRORCode-
+HunterNetCore_Data (RHunterNetCoreDataBHbproto3
\ No newline at end of file
diff --git a/ProtobufCore/Desc/protobuf_HunterStar.protodesc b/ProtobufCore/Desc/protobuf_HunterStar.protodesc
new file mode 100644
index 0000000..1603b67
Binary files /dev/null and b/ProtobufCore/Desc/protobuf_HunterStar.protodesc differ
diff --git a/ProtobufCore/Protoc-Tools/Enyim.Caching.dll b/ProtobufCore/Protoc-Tools/Enyim.Caching.dll
new file mode 100644
index 0000000..0e44cd7
Binary files /dev/null and b/ProtobufCore/Protoc-Tools/Enyim.Caching.dll differ
diff --git a/ProtobufCore/Protoc-Tools/IKVM-LICENSE b/ProtobufCore/Protoc-Tools/IKVM-LICENSE
new file mode 100644
index 0000000..d3ae2c8
--- /dev/null
+++ b/ProtobufCore/Protoc-Tools/IKVM-LICENSE
@@ -0,0 +1,425 @@
+IMPORTANT NOTICE
+
+  Copyright (C) 1998-2008 Free Software Foundation, Inc.
+  Copyright (C) 1996-2012 Oracle and/or its affiliates
+  Copyright (C) 2002-2012 Jeroen Frijters
+
+  Some files in this distribution are part of GNU Classpath or OpenJDK and
+  are licensed under the GNU General Public License (GPL) version 2
+  with "Classpath" exception. This applies in particular to:
+    - IKVM.OpenJDK.*.dll
+    - some of the *.java files (see each file header for license)
+
+  See http://www.gnu.org/software/classpath/ for information on the
+  GNU Classpath license and "Classpath" exception.
+  
+  See below for a full copy of the GPL license and the Sun version of the
+  "Classpath" exception.
+
+-----------------------------------------------------------------------------
+
+  Copyright (C) 2002-2012 Jeroen Frijters
+
+  This software is provided 'as-is', without any express or implied
+  warranty.  In no event will the authors be held liable for any damages
+  arising from the use of this software.
+
+  Permission is granted to anyone to use this software for any purpose,
+  including commercial applications, and to alter it and redistribute it
+  freely, subject to the following restrictions:
+
+  1. The origin of this software must not be misrepresented; you must not
+     claim that you wrote the original software. If you use this software
+     in a product, an acknowledgment in the product documentation would be
+     appreciated but is not required.
+  2. Altered source versions must be plainly marked as such, and must not be
+     misrepresented as being the original software.
+  3. This notice may not be removed or altered from any source distribution.
+
+  Jeroen Frijters
+  jeroen@frijters.net
+
+-----------------------------------------------------------------------------
+
+The GNU General Public License (GPL)
+
+Version 2, June 1991
+
+Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+Everyone is permitted to copy and distribute verbatim copies of this license
+document, but changing it is not allowed.
+
+Preamble
+
+The licenses for most software are designed to take away your freedom to share
+and change it.  By contrast, the GNU General Public License is intended to
+guarantee your freedom to share and change free software--to make sure the
+software is free for all its users.  This General Public License applies to
+most of the Free Software Foundation's software and to any other program whose
+authors commit to using it.  (Some other Free Software Foundation software is
+covered by the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+When we speak of free software, we are referring to freedom, not price.  Our
+General Public Licenses are designed to make sure that you have the freedom to
+distribute copies of free software (and charge for this service if you wish),
+that you receive source code or can get it if you want it, that you can change
+the software or use pieces of it in new free programs; and that you know you
+can do these things.
+
+To protect your rights, we need to make restrictions that forbid anyone to deny
+you these rights or to ask you to surrender the rights.  These restrictions
+translate to certain responsibilities for you if you distribute copies of the
+software, or if you modify it.
+
+For example, if you distribute copies of such a program, whether gratis or for
+a fee, you must give the recipients all the rights that you have.  You must
+make sure that they, too, receive or can get the source code.  And you must
+show them these terms so they know their rights.
+
+We protect your rights with two steps: (1) copyright the software, and (2)
+offer you this license which gives you legal permission to copy, distribute
+and/or modify the software.
+
+Also, for each author's protection and ours, we want to make certain that
+everyone understands that there is no warranty for this free software.  If the
+software is modified by someone else and passed on, we want its recipients to
+know that what they have is not the original, so that any problems introduced
+by others will not reflect on the original authors' reputations.
+
+Finally, any free program is threatened constantly by software patents.  We
+wish to avoid the danger that redistributors of a free program will
+individually obtain patent licenses, in effect making the program proprietary.
+To prevent this, we have made it clear that any patent must be licensed for
+everyone's free use or not licensed at all.
+
+The precise terms and conditions for copying, distribution and modification
+follow.
+
+TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+0. This License applies to any program or other work which contains a notice
+placed by the copyright holder saying it may be distributed under the terms of
+this General Public License.  The "Program", below, refers to any such program
+or work, and a "work based on the Program" means either the Program or any
+derivative work under copyright law: that is to say, a work containing the
+Program or a portion of it, either verbatim or with modifications and/or
+translated into another language.  (Hereinafter, translation is included
+without limitation in the term "modification".) Each licensee is addressed as
+"you".
+
+Activities other than copying, distribution and modification are not covered by
+this License; they are outside its scope.  The act of running the Program is
+not restricted, and the output from the Program is covered only if its contents
+constitute a work based on the Program (independent of having been made by
+running the Program).  Whether that is true depends on what the Program does.
+
+1. You may copy and distribute verbatim copies of the Program's source code as
+you receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice and
+disclaimer of warranty; keep intact all the notices that refer to this License
+and to the absence of any warranty; and give any other recipients of the
+Program a copy of this License along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and you may
+at your option offer warranty protection in exchange for a fee.
+
+2. You may modify your copy or copies of the Program or any portion of it, thus
+forming a work based on the Program, and copy and distribute such modifications
+or work under the terms of Section 1 above, provided that you also meet all of
+these conditions:
+
+    a) You must cause the modified files to carry prominent notices stating
+    that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in whole or
+    in part contains or is derived from the Program or any part thereof, to be
+    licensed as a whole at no charge to all third parties under the terms of
+    this License.
+
+    c) If the modified program normally reads commands interactively when run,
+    you must cause it, when started running for such interactive use in the
+    most ordinary way, to print or display an announcement including an
+    appropriate copyright notice and a notice that there is no warranty (or
+    else, saying that you provide a warranty) and that users may redistribute
+    the program under these conditions, and telling the user how to view a copy
+    of this License.  (Exception: if the Program itself is interactive but does
+    not normally print such an announcement, your work based on the Program is
+    not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If identifiable
+sections of that work are not derived from the Program, and can be reasonably
+considered independent and separate works in themselves, then this License, and
+its terms, do not apply to those sections when you distribute them as separate
+works.  But when you distribute the same sections as part of a whole which is a
+work based on the Program, the distribution of the whole must be on the terms
+of this License, whose permissions for other licensees extend to the entire
+whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest your
+rights to work written entirely by you; rather, the intent is to exercise the
+right to control the distribution of derivative or collective works based on
+the Program.
+
+In addition, mere aggregation of another work not based on the Program with the
+Program (or with a work based on the Program) on a volume of a storage or
+distribution medium does not bring the other work under the scope of this
+License.
+
+3. You may copy and distribute the Program (or a work based on it, under
+Section 2) in object code or executable form under the terms of Sections 1 and
+2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable source
+    code, which must be distributed under the terms of Sections 1 and 2 above
+    on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three years, to
+    give any third party, for a charge no more than your cost of physically
+    performing source distribution, a complete machine-readable copy of the
+    corresponding source code, to be distributed under the terms of Sections 1
+    and 2 above on a medium customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer to
+    distribute corresponding source code.  (This alternative is allowed only
+    for noncommercial distribution and only if you received the program in
+    object code or executable form with such an offer, in accord with
+    Subsection b above.)
+
+The source code for a work means the preferred form of the work for making
+modifications to it.  For an executable work, complete source code means all
+the source code for all modules it contains, plus any associated interface
+definition files, plus the scripts used to control compilation and installation
+of the executable.  However, as a special exception, the source code
+distributed need not include anything that is normally distributed (in either
+source or binary form) with the major components (compiler, kernel, and so on)
+of the operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the source
+code from the same place counts as distribution of the source code, even though
+third parties are not compelled to copy the source along with the object code.
+
+4. You may not copy, modify, sublicense, or distribute the Program except as
+expressly provided under this License.  Any attempt otherwise to copy, modify,
+sublicense or distribute the Program is void, and will automatically terminate
+your rights under this License.  However, parties who have received copies, or
+rights, from you under this License will not have their licenses terminated so
+long as such parties remain in full compliance.
+
+5. You are not required to accept this License, since you have not signed it.
+However, nothing else grants you permission to modify or distribute the Program
+or its derivative works.  These actions are prohibited by law if you do not
+accept this License.  Therefore, by modifying or distributing the Program (or
+any work based on the Program), you indicate your acceptance of this License to
+do so, and all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+6. Each time you redistribute the Program (or any work based on the Program),
+the recipient automatically receives a license from the original licensor to
+copy, distribute or modify the Program subject to these terms and conditions.
+You may not impose any further restrictions on the recipients' exercise of the
+rights granted herein.  You are not responsible for enforcing compliance by
+third parties to this License.
+
+7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues), conditions
+are imposed on you (whether by court order, agreement or otherwise) that
+contradict the conditions of this License, they do not excuse you from the
+conditions of this License.  If you cannot distribute so as to satisfy
+simultaneously your obligations under this License and any other pertinent
+obligations, then as a consequence you may not distribute the Program at all.
+For example, if a patent license would not permit royalty-free redistribution
+of the Program by all those who receive copies directly or indirectly through
+you, then the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply and
+the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any patents or
+other property right claims or to contest validity of any such claims; this
+section has the sole purpose of protecting the integrity of the free software
+distribution system, which is implemented by public license practices.  Many
+people have made generous contributions to the wide range of software
+distributed through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing to
+distribute software through any other system and a licensee cannot impose that
+choice.
+
+This section is intended to make thoroughly clear what is believed to be a
+consequence of the rest of this License.
+
+8. If the distribution and/or use of the Program is restricted in certain
+countries either by patents or by copyrighted interfaces, the original
+copyright holder who places the Program under this License may add an explicit
+geographical distribution limitation excluding those countries, so that
+distribution is permitted only in or among countries not thus excluded.  In
+such case, this License incorporates the limitation as if written in the body
+of this License.
+
+9. The Free Software Foundation may publish revised and/or new versions of the
+General Public License from time to time.  Such new versions will be similar in
+spirit to the present version, but may differ in detail to address new problems
+or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any later
+version", you have the option of following the terms and conditions either of
+that version or of any later version published by the Free Software Foundation.
+If the Program does not specify a version number of this License, you may
+choose any version ever published by the Free Software Foundation.
+
+10. If you wish to incorporate parts of the Program into other free programs
+whose distribution conditions are different, write to the author to ask for
+permission.  For software which is copyrighted by the Free Software Foundation,
+write to the Free Software Foundation; we sometimes make exceptions for this.
+Our decision will be guided by the two goals of preserving the free status of
+all derivatives of our free software and of promoting the sharing and reuse of
+software generally.
+
+NO WARRANTY
+
+11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR
+THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN OTHERWISE
+STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE
+PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
+INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND
+PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE,
+YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL
+ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE
+PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR
+INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA
+BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER
+OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+END OF TERMS AND CONDITIONS
+
+How to Apply These Terms to Your New Programs
+
+If you develop a new program, and you want it to be of the greatest possible
+use to the public, the best way to achieve this is to make it free software
+which everyone can redistribute and change under these terms.
+
+To do so, attach the following notices to the program.  It is safest to attach
+them to the start of each source file to most effectively convey the exclusion
+of warranty; and each file should have at least the "copyright" line and a
+pointer to where the full notice is found.
+
+    One line to give the program's name and a brief idea of what it does.
+
+    Copyright (C) <year> <name of author>
+
+    This program is free software; you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by the Free
+    Software Foundation; either version 2 of the License, or (at your option)
+    any later version.
+
+    This program is distributed in the hope that it will be useful, but WITHOUT
+    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+    more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc., 59
+    Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this when it
+starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year name of author Gnomovision comes
+    with ABSOLUTELY NO WARRANTY; for details type 'show w'.  This is free
+    software, and you are welcome to redistribute it under certain conditions;
+    type 'show c' for details.
+
+The hypothetical commands 'show w' and 'show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may be
+called something other than 'show w' and 'show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.  Here
+is a sample; alter the names:
+
+    Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+    'Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+    signature of Ty Coon, 1 April 1989
+
+    Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General Public
+License instead of this License.
+
+
+"CLASSPATH" EXCEPTION TO THE GPL
+
+Certain source files distributed by Oracle America and/or its affiliates are
+subject to the following clarification and special exception to the GPL, but
+only where Oracle has expressly included in the particular source file's header
+the words "Oracle designates this particular file as subject to the "Classpath"
+exception as provided by Oracle in the LICENSE file that accompanied this code."
+
+    Linking this library statically or dynamically with other modules is making
+    a combined work based on this library.  Thus, the terms and conditions of
+    the GNU General Public License cover the whole combination.
+
+    As a special exception, the copyright holders of this library give you
+    permission to link this library with independent modules to produce an
+    executable, regardless of the license terms of these independent modules,
+    and to copy and distribute the resulting executable under terms of your
+    choice, provided that you also meet, for each linked independent module,
+    the terms and conditions of the license of that module.  An independent
+    module is a module which is not derived from or based on this library.  If
+    you modify this library, you may extend this exception to your version of
+    the library, but you are not obligated to do so.  If you do not wish to do
+    so, delete this exception statement from your version.
+
+-----------------------------------------------------------------------------
+
+ -------------------------------------------------------------------------
+        $Id: LICENSE,v 1.7.4.1 2012/06/12 08:44:39 jfrijters Exp $
+ -------------------------------------------------------------------------
+        Copyright (c) 1999 Visual Numerics Inc. All Rights Reserved.
+
+ Permission to use, copy, modify, and distribute this software is freely
+ granted by Visual Numerics, Inc., provided that the copyright notice
+ above and the following warranty disclaimer are preserved in human
+ readable form.
+
+ Because this software is licenses free of charge, it is provided
+ "AS IS", with NO WARRANTY.  TO THE EXTENT PERMITTED BY LAW, VNI
+ DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+ TO ITS PERFORMANCE, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ VNI WILL NOT BE LIABLE FOR ANY DAMAGES WHATSOEVER ARISING OUT OF THE USE
+ OF OR INABILITY TO USE THIS SOFTWARE, INCLUDING BUT NOT LIMITED TO DIRECT,
+ INDIRECT, SPECIAL, CONSEQUENTIAL, PUNITIVE, AND EXEMPLARY DAMAGES, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+
+ This Java code is based on C code in the package fdlibm,
+ which can be obtained from www.netlib.org.
+ The original fdlibm C code contains the following notice.
+
+ Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
+
+ Developed at SunSoft, a Sun Microsystems, Inc. business.
+ Permission to use, copy, modify, and distribute this
+ software is freely granted, provided that this notice
+ is preserved.
+
+-----------------------------------------------------------------------------
diff --git a/ProtobufCore/Protoc-Tools/IKVM.Reflection.dll b/ProtobufCore/Protoc-Tools/IKVM.Reflection.dll
new file mode 100644
index 0000000..c2b777c
Binary files /dev/null and b/ProtobufCore/Protoc-Tools/IKVM.Reflection.dll differ
diff --git a/ProtobufCore/Protoc-Tools/MiscUtil.dll b/ProtobufCore/Protoc-Tools/MiscUtil.dll
new file mode 100644
index 0000000..2c3cbbb
Binary files /dev/null and b/ProtobufCore/Protoc-Tools/MiscUtil.dll differ
diff --git a/ProtobufCore/Protoc-Tools/NHibernate lgpl.txt b/ProtobufCore/Protoc-Tools/NHibernate lgpl.txt
new file mode 100644
index 0000000..866688d
--- /dev/null
+++ b/ProtobufCore/Protoc-Tools/NHibernate lgpl.txt	
@@ -0,0 +1,460 @@
+                  GNU LESSER GENERAL PUBLIC LICENSE
+                     Version 2.1, February 1999
+
+       Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+       59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+     Everyone is permitted to copy and distribute verbatim copies
+       of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+                            Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+                  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+  
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+                            NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+                     END OF TERMS AND CONDITIONS
+
diff --git a/ProtobufCore/Protoc-Tools/NHibernate.dll b/ProtobufCore/Protoc-Tools/NHibernate.dll
new file mode 100644
index 0000000..f8b0bc2
Binary files /dev/null and b/ProtobufCore/Protoc-Tools/NHibernate.dll differ
diff --git a/ProtobufCore/Protoc-Tools/ProtoSharp.Core.dll b/ProtobufCore/Protoc-Tools/ProtoSharp.Core.dll
new file mode 100644
index 0000000..52dc1bd
Binary files /dev/null and b/ProtobufCore/Protoc-Tools/ProtoSharp.Core.dll differ
diff --git a/ProtobufCore/Protoc-Tools/Protocol Buffers.ppt b/ProtobufCore/Protoc-Tools/Protocol Buffers.ppt
new file mode 100644
index 0000000..71dcfc7
Binary files /dev/null and b/ProtobufCore/Protoc-Tools/Protocol Buffers.ppt differ
diff --git a/ProtobufCore/Protoc-Tools/bcl.proto b/ProtobufCore/Protoc-Tools/bcl.proto
new file mode 100644
index 0000000..35de280
--- /dev/null
+++ b/ProtobufCore/Protoc-Tools/bcl.proto
@@ -0,0 +1,53 @@
+// this is prototype only!!!
+
+package bcl;
+
+message TimeSpan {
+  optional sint64 value = 1; // the size of the timespan (in units of the selected scale)
+  optional TimeSpanScale scale = 2 [default = DAYS]; // the scale of the timespan
+  enum TimeSpanScale {
+    DAYS = 0;
+    HOURS = 1;
+    MINUTES = 2;
+    SECONDS = 3;
+    MILLISECONDS = 4;
+	TICKS = 5;
+
+    MINMAX = 15; // dubious
+  }
+}
+
+message DateTime {
+  optional sint64 value = 1; // the offset (in units of the selected scale) from 1970/01/01
+  optional TimeSpanScale scale = 2 [default = DAYS]; // the scale of the timespan
+  enum TimeSpanScale {
+    DAYS = 0;
+    HOURS = 1;
+    MINUTES = 2;
+    SECONDS = 3;
+    MILLISECONDS = 4;
+	TICKS = 5;
+
+    MINMAX = 15; // dubious
+  }
+}
+
+message NetObjectProxy {
+  optional int32 existingObjectKey = 1; // for a tracked object, the key of the **first** time this object was seen
+  optional int32 newObjectKey = 2; // for a tracked object, a **new** key, the first time this object is seen
+  optional int32 existingTypeKey = 3; // for dynamic typing, the key of the **first** time this type was seen
+  optional int32 newTypeKey = 4; // for dynamic typing, a **new** key, the first time this type is seen
+  optional string typeName = 8; // for dynamic typing, the name of the type (only present along with newTypeKey)
+  optional bytes payload = 10; // the new string/value (only present along with newObjectKey)
+}
+
+message Guid {
+  optional fixed64 lo = 1; // the first 8 bytes of the guid
+  optional fixed64 hi = 2; // the second 8 bytes of the guid
+}
+
+message Decimal {
+  optional uint64 lo = 1; // the first 64 bits of the underlying value
+  optional uint32 hi = 2; // the last 32 bis of the underlying value
+  optional uint32 signScale = 3; // the number of decimal digits (bits 1-16), and the sign (bit 0)
+}
\ No newline at end of file
diff --git a/ProtobufCore/Protoc-Tools/log4net.dll b/ProtobufCore/Protoc-Tools/log4net.dll
new file mode 100644
index 0000000..ffc57e1
Binary files /dev/null and b/ProtobufCore/Protoc-Tools/log4net.dll differ
diff --git a/ProtobufCore/Protoc-Tools/nunit.framework.dll b/ProtobufCore/Protoc-Tools/nunit.framework.dll
new file mode 100644
index 0000000..d67143f
Binary files /dev/null and b/ProtobufCore/Protoc-Tools/nunit.framework.dll differ
diff --git a/ProtobufCore/Protoc-Tools/nwind.groups.proto b/ProtobufCore/Protoc-Tools/nwind.groups.proto
new file mode 100644
index 0000000..ae89388
--- /dev/null
+++ b/ProtobufCore/Protoc-Tools/nwind.groups.proto
@@ -0,0 +1,5 @@
+package DAL;
+
+message Database {
+   repeated group Order Orders = 1;
+}
diff --git a/ProtobufCore/Protoc-Tools/nwind.groups.proto.bin b/ProtobufCore/Protoc-Tools/nwind.groups.proto.bin
new file mode 100644
index 0000000..4e6004e
Binary files /dev/null and b/ProtobufCore/Protoc-Tools/nwind.groups.proto.bin differ
diff --git a/ProtobufCore/Protoc-Tools/nwind.proto b/ProtobufCore/Protoc-Tools/nwind.proto
new file mode 100644
index 0000000..bbc5cc7
--- /dev/null
+++ b/ProtobufCore/Protoc-Tools/nwind.proto
@@ -0,0 +1,31 @@
+package DAL;
+
+message Database {
+   repeated Order Orders = 1;
+}
+
+message Order {
+   optional int32 OrderID = 1;
+   optional string CustomerID = 2;
+   optional int32 EmployeeID = 3;
+   optional bcl.DateTime OrderDate = 4;
+   optional bcl.DateTime RequiredDate = 5;
+   optional bcl.DateTime ShippedDate = 6;
+   optional int32 ShipVia = 7;
+   optional bcl.Decimal Freight = 8;
+   optional string ShipName = 9;
+   optional string ShipAddress = 10;
+   optional string ShipCity = 11;
+   optional string ShipRegion = 12;
+   optional string ShipPostalCode = 13;
+   optional string ShipCountry = 14;
+   repeated OrderLine Lines = 15;
+}
+
+message OrderLine {
+   optional int32 OrderID = 1;
+   optional int32 ProductID = 2;
+   optional bcl.Decimal UnitPrice = 3;
+   optional sint32 Quantity = 4;
+   optional float Discount = 5;
+}
diff --git a/ProtobufCore/Protoc-Tools/nwind.proto.bin b/ProtobufCore/Protoc-Tools/nwind.proto.bin
new file mode 100644
index 0000000..b7484d2
Binary files /dev/null and b/ProtobufCore/Protoc-Tools/nwind.proto.bin differ
diff --git a/ProtobufCore/Protoc-Tools/protoc-license.txt b/ProtobufCore/Protoc-Tools/protoc-license.txt
new file mode 100644
index 0000000..b462b56
--- /dev/null
+++ b/ProtobufCore/Protoc-Tools/protoc-license.txt
@@ -0,0 +1,15 @@
+Protocol Buffers - Google's data interchange format
+Copyright 2008 Google Inc.
+http://code.google.com/p/protobuf/
+
+This package contains a precompiled Win32 binary version of the protocol buffer
+compiler (protoc).  This binary is intended for Windows users who want to
+use Protocol Buffers in Java or Python but do not want to compile protoc
+themselves.  To install, simply place this binary somewhere in your PATH.
+
+This binary was built using MinGW, but the output is the same regardless of
+the C++ compiler used.
+
+You will still need to download the source code package in order to obtain the
+Java or Python runtime libraries.  Get it from:
+  http://code.google.com/p/protobuf/downloads/
diff --git a/ProtobufCore/Protoc-Tools/protoc.exe b/ProtobufCore/Protoc-Tools/protoc.exe
new file mode 100644
index 0000000..db74054
Binary files /dev/null and b/ProtobufCore/Protoc-Tools/protoc.exe differ
diff --git a/ProtobufCore/Protocol Buffers - Google's data interchange format.txt b/ProtobufCore/Protocol Buffers - Google's data interchange format.txt
new file mode 100644
index 0000000..e69de29
diff --git a/ProtobufCore/Protogen-Tools/common.xslt b/ProtobufCore/Protogen-Tools/common.xslt
new file mode 100644
index 0000000..85c3721
--- /dev/null
+++ b/ProtobufCore/Protogen-Tools/common.xslt
@@ -0,0 +1,109 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+    xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
+>
+  <!--
+  <xsl:template name="capitalizeFirst">
+    <xsl:param name="value"/>
+    <xsl:value-of select="translate(substring($value,1,1),$alpha,$ALPHA)"/>
+    <xsl:value-of select="substring($value,2)"/>
+  </xsl:template>
+  -->
+  <xsl:template match="*">
+    <xsl:message terminate="yes">
+      Node not handled: <xsl:for-each select="ancestor-or-self::*">/<xsl:value-of select="name()"/></xsl:for-each>
+      <xsl:for-each select="*">
+        ; <xsl:value-of select="concat(name(),'=',.)"/>
+      </xsl:for-each>
+    </xsl:message>
+  </xsl:template>
+  <xsl:param name="fixCase"/>
+  <xsl:variable name="optionFixCase" select="$fixCase='true'"/>
+  
+  <xsl:template name="escapeKeyword">
+    <xsl:param name="value"/>
+    <xsl:value-of select="$value"/>
+  </xsl:template>
+  
+  <xsl:template name="toCamelCase">
+    <xsl:param name="value"/>
+    <xsl:param name="delimiter" select="'_'"/>
+    <xsl:param name="keepDelimiter" select="false()"/>
+    <xsl:variable name="segment" select="substring-before($value, $delimiter)"/>
+    <xsl:choose>
+      <xsl:when test="$segment != ''">
+        <xsl:value-of select="$segment"/><xsl:if test="$keepDelimiter"><xsl:value-of select="$delimiter"/></xsl:if>
+        <xsl:call-template name="toPascalCase">
+          <xsl:with-param name="value" select="substring-after($value, $delimiter)"/>
+          <xsl:with-param name="delimiter" select="$delimiter"/>
+          <xsl:with-param name="keepDelimiter" select="$keepDelimiter"/>
+        </xsl:call-template>
+      </xsl:when>
+      <xsl:otherwise>
+        <xsl:value-of select="$value"/>
+      </xsl:otherwise>
+    </xsl:choose>
+  </xsl:template>
+
+  <xsl:variable name="alpha" select="'abcdefghijklmnopqrstuvwxyz'"/>
+  <xsl:variable name="ALPHA" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'"/>
+
+  <xsl:template name="toPascalCase">
+    <xsl:param name="value"/>
+    <xsl:param name="delimiter" select="'_'"/>
+    <xsl:param name="keepDelimiter" select="false()"/>
+    <xsl:if test="$value != ''">
+      <xsl:variable name="segment" select="substring-before($value, $delimiter)"/>
+      <xsl:choose>
+        <xsl:when test="$segment != ''">
+          <xsl:value-of select="translate(substring($segment,1,1),$alpha,$ALPHA)"/><xsl:value-of select="substring($segment,2)"/><xsl:if test="$keepDelimiter"><xsl:value-of select="$delimiter"/></xsl:if>
+          <xsl:call-template name="toPascalCase">
+            <xsl:with-param name="value" select="substring-after($value, $delimiter)"/>
+            <xsl:with-param name="delimiter" select="$delimiter"/>
+            <xsl:with-param name="keepDelimiter" select="$keepDelimiter"/>
+          </xsl:call-template>    
+        </xsl:when>
+        <xsl:otherwise>
+          <xsl:value-of select="translate(substring($value,1,1),$alpha,$ALPHA)"/><xsl:value-of select="substring($value,2)"/>
+        </xsl:otherwise>
+      </xsl:choose>      
+    </xsl:if>
+  </xsl:template>
+    <xsl:template name="pascal">
+    <xsl:param name="value" select="name"/>
+    <xsl:param name="delimiter" select="'_'"/>
+    <xsl:call-template name="escapeKeyword">
+      <xsl:with-param name="value"><xsl:choose>
+      <xsl:when test="$optionFixCase"><xsl:variable name="dotted"><xsl:call-template name="toPascalCase">
+          <xsl:with-param name="value" select="$value"/>
+          <xsl:with-param name="delimiter" select="'.'"/>
+          <xsl:with-param name="keepDelimiter" select="true()"/>
+        </xsl:call-template></xsl:variable><xsl:call-template name="toPascalCase">
+          <xsl:with-param name="value" select="$dotted"/>
+          <xsl:with-param name="delimiter" select="$delimiter"/>
+        </xsl:call-template></xsl:when>
+      <xsl:otherwise><xsl:value-of select="$value"/></xsl:otherwise>
+    </xsl:choose></xsl:with-param></xsl:call-template>
+  </xsl:template>
+  
+  <xsl:template name="PickNamespace"><xsl:param name="defaultNamespace"/><xsl:choose>
+    <xsl:when test="package"><xsl:call-template name="pascal">
+      <xsl:with-param name="value" select="package"/>
+    </xsl:call-template></xsl:when>
+    <xsl:when test="$defaultNamespace"><xsl:value-of select="$defaultNamespace"/></xsl:when>
+    <xsl:otherwise><xsl:variable name="trimmedName"><xsl:choose>
+      <xsl:when test="substring(name,string-length(name)-5,6)='.proto'"><xsl:value-of select="substring(name,1,string-length(name)-6)"/></xsl:when>
+      <xsl:otherwise><xsl:value-of select="name"/></xsl:otherwise>  
+    </xsl:choose></xsl:variable><xsl:call-template name="pascal">
+      <xsl:with-param name="value" select="$trimmedName"/>
+    </xsl:call-template></xsl:otherwise>    
+  </xsl:choose></xsl:template>
+
+  <xsl:template match="FieldDescriptorProto/options"/>
+  <xsl:template match="FileDescriptorProto/options"/>
+  <xsl:template match="DescriptorProto/options"/>
+  <xsl:template match="EnumValueDescriptorProto/options"/>
+  <xsl:template match="EnumDescriptorProto/options"/>
+  <xsl:template match="ServiceDescriptorProto/options"/>
+  <xsl:template match="MethodDescriptorProto/options"/>
+</xsl:stylesheet>
diff --git a/ProtobufCore/Protogen-Tools/csharp.xslt b/ProtobufCore/Protogen-Tools/csharp.xslt
new file mode 100644
index 0000000..6cd9219
--- /dev/null
+++ b/ProtobufCore/Protogen-Tools/csharp.xslt
@@ -0,0 +1,628 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xsl:stylesheet version="1.0"
+    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+    xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="xsl msxsl"
+>
+  <xsl:import href="common.xslt"/>
+  <xsl:param name="help"/>
+  <xsl:param name="xml"/>
+  <xsl:param name="datacontract"/>
+  <xsl:param name="binary"/>
+  <xsl:param name="protoRpc"/>
+  <xsl:param name="observable"/>
+  <xsl:param name="preObservable"/>
+  <xsl:param name="partialMethods"/>
+  <xsl:param name="detectMissing"/>
+  <xsl:param name="lightFramework"/>
+  <xsl:param name="asynchronous"/>
+  <xsl:param name="clientProxy"/>
+  <xsl:param name="defaultNamespace"/>
+  <xsl:param name="import"/>
+  
+  <xsl:key name="fieldNames" match="//FieldDescriptorProto" use="name"/>
+  <xsl:output method="text" indent="no" omit-xml-declaration="yes"/>
+
+  <xsl:variable name="optionXml" select="$xml='true'"/>
+  <xsl:variable name="optionDataContract" select="$datacontract='true'"/>
+  <xsl:variable name="optionBinary" select="$binary='true'"/>
+  <xsl:variable name="optionProtoRpc" select="$protoRpc='true'"/>
+  <xsl:variable name="optionObservable" select="$observable='true'"/>
+  <xsl:variable name="optionPreObservable" select="$preObservable='true'"/>
+  <xsl:variable name="optionPartialMethods" select="$partialMethods='true'"/>
+  <xsl:variable name="optionDetectMissing" select="$detectMissing='true'"/>
+  <xsl:variable name="optionFullFramework" select="not($lightFramework='true')"/>
+  <xsl:variable name="optionAsynchronous" select="$asynchronous='true'"/>
+  <xsl:variable name="optionClientProxy" select="$clientProxy='true'"/>
+
+  <xsl:template match="/">
+    <xsl:text disable-output-escaping="yes">//------------------------------------------------------------------------------
+// &lt;auto-generated&gt;
+//     This code was generated by a tool.
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// &lt;/auto-generated&gt;
+//------------------------------------------------------------------------------
+</xsl:text><!--
+    --><xsl:apply-templates select="*"/><!--
+  --></xsl:template>
+
+  <xsl:template name="WriteUsings">
+    <xsl:param name="ns"/>
+    <xsl:if test="$ns != ''"><xsl:choose>
+   <xsl:when test="contains($ns,';')">
+using <xsl:value-of select="substring-before($ns,';')"/>;<!--
+ --><xsl:call-template name="WriteUsings">
+       <xsl:with-param name="ns" select="substring-after($ns,';')"/>
+  </xsl:call-template>
+  </xsl:when>
+   <xsl:otherwise>
+using <xsl:value-of select="$ns"/>;
+   </xsl:otherwise>
+ </xsl:choose></xsl:if></xsl:template>
+  
+  <xsl:template match="FileDescriptorSet">
+    <xsl:if test="$help='true'">
+      <xsl:message terminate="yes">
+        CSharp template for protobuf-net.
+        Options:
+        General:
+          "help" - this page
+        Additional serializer support:
+          "xml" - enable explicit xml support (XmlSerializer)
+          "datacontract" - enable data-contract support (DataContractSerializer; requires .NET 3.0)
+          "binary" - enable binary support (BinaryFormatter; not supported on Silverlight)
+        Other:
+          "protoRpc" - enable proto-rpc client
+          "observable" - change notification (observer pattern) support
+          "preObservable" - pre-change notification (observer pattern) support (requires .NET 3.5)
+          "partialMethods" - provide partial methods for changes (requires C# 3.0)
+          "detectMissing" - provide *Specified properties to indicate whether fields are present
+          "lightFramework" - omit additional attributes not included in CF/Silverlight
+          "asynchronous" - emit asynchronous methods for use with WCF
+          "clientProxy" - emit asynchronous client proxy class
+          "import" - additional namespaces to import (semicolon delimited)
+          "fixCase" - change type/member names (types/properties become PascalCase; fields become camelCase)
+      </xsl:message>
+    </xsl:if>
+
+    <xsl:if test="$optionXml and $optionDataContract">
+      <xsl:message terminate="yes">
+        Invalid options: xml and data-contract serialization are mutually exclusive.
+      </xsl:message>
+    </xsl:if>
+    <xsl:if test="$optionXml">
+// Option: xml serialization ([XmlType]/[XmlElement]) enabled
+    </xsl:if><xsl:if test="$optionDataContract">
+// Option: data-contract serialization ([DataContract]/[DataMember]) enabled
+    </xsl:if><xsl:if test="$optionBinary">
+// Option: binary serialization (ISerializable) enabled
+    </xsl:if><xsl:if test="$optionObservable">
+// Option: observable (OnPropertyChanged) enabled
+    </xsl:if><xsl:if test="$optionPreObservable">
+// Option: pre-observable (OnPropertyChanging) enabled
+    </xsl:if><xsl:if test="$partialMethods">
+// Option: partial methods (On*Changing/On*Changed) enabled
+    </xsl:if><xsl:if test="$optionDetectMissing">
+// Option: missing-value detection (*Specified/ShouldSerialize*/Reset*) enabled
+    </xsl:if><xsl:if test="not($optionFullFramework)">
+// Option: light framework (CF/Silverlight) enabled
+    </xsl:if><xsl:if test="$optionProtoRpc">
+// Option: proto-rpc enabled
+  </xsl:if>
+    <xsl:call-template name="WriteUsings">
+      <xsl:with-param name="ns" select="$import"/>
+    </xsl:call-template>
+    <xsl:apply-templates select="file/FileDescriptorProto"/>
+  </xsl:template>
+
+  
+  <xsl:template match="FileDescriptorProto">
+// Generated from: <xsl:value-of select="name"/>
+    
+    <xsl:apply-templates select="dependency/string[.!='']"/>
+    <xsl:variable name="namespace"><xsl:call-template name="PickNamespace">
+      <xsl:with-param name="defaultNamespace" select="$defaultNamespace"/>
+        </xsl:call-template>
+      </xsl:variable>
+    <xsl:if test="string($namespace) != ''">
+namespace <xsl:value-of select="translate($namespace,':-/\','__..')"/>
+{</xsl:if>
+    <xsl:apply-templates select="message_type | enum_type | service"/>
+    <xsl:if test="string($namespace) != ''">
+}</xsl:if></xsl:template>
+  
+  <xsl:template match="FileDescriptorProto/dependency/string">
+// Note: requires additional types generated from: <xsl:value-of select="."/></xsl:template>
+
+
+  <xsl:template name="camel">
+    <xsl:param name="value" select="name"/>
+    <xsl:param name="delimiter" select="'_'"/>
+    <xsl:choose>
+      <xsl:when test="$optionFixCase"><xsl:call-template name="toCamelCase">
+          <xsl:with-param name="value" select="$value"/>
+          <xsl:with-param name="delimiter" select="$delimiter"/>
+        </xsl:call-template></xsl:when>
+      <xsl:otherwise><xsl:value-of select="$value"/></xsl:otherwise>
+    </xsl:choose>
+  </xsl:template>
+  
+  <xsl:template match="DescriptorProto">
+  [<xsl:if test="$optionFullFramework">global::System.Serializable, </xsl:if>global::ProtoBuf.ProtoContract(Name=@"<xsl:value-of select="name"/>")]
+  <xsl:if test="$optionDataContract">[global::System.Runtime.Serialization.DataContract(Name=@"<xsl:value-of select="name"/>")]
+  </xsl:if><xsl:if test="$optionXml">[global::System.Xml.Serialization.XmlType(TypeName=@"<xsl:value-of select="name"/>")]
+  </xsl:if><!--
+  -->public partial class <xsl:call-template name="pascal"/> : global::ProtoBuf.IExtensible<!--
+  --><xsl:if test="$optionBinary">, global::System.Runtime.Serialization.ISerializable</xsl:if><!--
+  --><xsl:if test="$optionObservable">, global::System.ComponentModel.INotifyPropertyChanged</xsl:if><!--
+  --><xsl:if test="$optionPreObservable">, global::System.ComponentModel.INotifyPropertyChanging</xsl:if>
+  {
+    public <xsl:call-template name="pascal"/>() {}
+    <xsl:apply-templates select="*"/><xsl:if test="$optionBinary">
+    protected <xsl:call-template name="pascal"/>(global::System.Runtime.Serialization.SerializationInfo info, global::System.Runtime.Serialization.StreamingContext context)
+      : this() { global::ProtoBuf.Serializer.Merge(info, this); }
+    void global::System.Runtime.Serialization.ISerializable.GetObjectData(global::System.Runtime.Serialization.SerializationInfo info, global::System.Runtime.Serialization.StreamingContext context)
+      { global::ProtoBuf.Serializer.Serialize(info, this); }
+    </xsl:if><xsl:if test="$optionObservable">
+    public event global::System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+    protected virtual void OnPropertyChanged(string propertyName)
+      { if(PropertyChanged != null) PropertyChanged(this, new global::System.ComponentModel.PropertyChangedEventArgs(propertyName)); }
+    </xsl:if><xsl:if test="$optionPreObservable">
+    public event global::System.ComponentModel.PropertyChangingEventHandler PropertyChanging;
+    protected virtual void OnPropertyChanging(string propertyName)
+    { if(PropertyChanging != null) PropertyChanging(this, new global::System.ComponentModel.PropertyChangingEventArgs(propertyName)); }
+    </xsl:if>
+    private global::ProtoBuf.IExtension extensionObject;
+    global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+      { return global::ProtoBuf.Extensible.GetExtensionObject(ref extensionObject, createIfMissing); }
+  }
+  </xsl:template>
+
+  <xsl:template match="DescriptorProto/name | DescriptorProto/extension_range | DescriptorProto/extension"/>
+  
+  <xsl:template match="
+                FileDescriptorProto/message_type | FileDescriptorProto/enum_type | FileDescriptorProto/service
+                | DescriptorProto/enum_type | DescriptorProto/message_type
+                | DescriptorProto/nested_type | EnumDescriptorProto/value | ServiceDescriptorProto/method">
+    <xsl:apply-templates select="*"/>
+  </xsl:template>
+
+  <xsl:template match="DescriptorProto/field">
+    <xsl:apply-templates select="*"/>
+    <xsl:variable name="extName" select="concat('.',(ancestor::FileDescriptorProto/package)[1],'.',../name)"/>
+    <xsl:apply-templates select="//FieldDescriptorProto[extendee=$extName]"/>
+  </xsl:template>
+
+  <xsl:template match="EnumDescriptorProto">
+    [global::ProtoBuf.ProtoContract(Name=@"<xsl:value-of select="name"/>")]
+    <xsl:if test="$optionDataContract">[global::System.Runtime.Serialization.DataContract(Name=@"<xsl:value-of select="name"/>")]
+    </xsl:if>
+    <xsl:if test="$optionXml">[global::System.Xml.Serialization.XmlType(TypeName=@"<xsl:value-of select="name"/>")]
+    </xsl:if><!--
+    -->public enum <xsl:call-template name="pascal"/>
+    {
+      <xsl:apply-templates select="value"/>
+    }
+  </xsl:template>
+
+  <xsl:template match="EnumValueDescriptorProto">
+      <xsl:variable name="value"><xsl:choose>
+        <xsl:when test="number"><xsl:value-of select="number"/></xsl:when>
+        <xsl:otherwise>0</xsl:otherwise>
+      </xsl:choose></xsl:variable>      
+      [global::ProtoBuf.ProtoEnum(Name=@"<xsl:value-of select="name"/>", Value=<xsl:value-of select="$value"/>)]<!--
+      --><xsl:if test="$optionDataContract">
+      [global::System.Runtime.Serialization.EnumMember(Value=@"<xsl:value-of select="name"/>")]</xsl:if><!--
+      --><xsl:if test="$optionXml">
+      [global::System.Xml.Serialization.XmlEnum(@"<xsl:value-of select="name"/>")]</xsl:if><!--
+      --><xsl:text disable-output-escaping="yes">
+      </xsl:text><xsl:call-template name="pascal"/><xsl:text xml:space="preserve"> = </xsl:text><xsl:value-of select="$value"/><xsl:if test="position()!=last()">,
+      </xsl:if>
+  </xsl:template>
+
+  <xsl:template match="FieldDescriptorProto" mode="field">
+    <xsl:variable name="field"><xsl:choose>
+      <xsl:when test="$optionFixCase"><xsl:call-template name="toCamelCase">
+          <xsl:with-param name="value" select="name"/>
+        </xsl:call-template></xsl:when>
+      <xsl:otherwise><xsl:value-of select="name"/></xsl:otherwise>
+    </xsl:choose></xsl:variable>
+    <xsl:call-template name="escapeKeyword">
+      <xsl:with-param name="value"><xsl:choose>
+      <xsl:when test="not(key('fieldNames',concat('_',$field)))"><xsl:value-of select="concat('_',$field)"/></xsl:when>
+      <xsl:when test="not(key('fieldNames',concat($field,'Field')))"><xsl:value-of select="concat($field,'Field')"/></xsl:when>
+      <xsl:otherwise><xsl:value-of select="concat('_',generate-id())"/></xsl:otherwise>
+    </xsl:choose></xsl:with-param>
+    </xsl:call-template>
+  </xsl:template>
+
+  <xsl:template name="escapeKeyword">
+    <xsl:param name="value"/>
+    <xsl:if test="contains($keywords,concat('|',$value,'|'))">@</xsl:if><xsl:value-of select="$value"/>
+  </xsl:template>
+  <xsl:variable name="keywords">|abstract|as|base|bool|break|byte|case|catch|char|checked|class|const|continue|decimal|default|delegate|do|double|else|enum|event|explicit|extern|false|finally|fixed|float|for|foreach|goto|if|implicit|in|int|interface|internal|is|lock|long|namespace|new|null|object|operator|out|override|params|private|protected|public|readonly|ref|return|sbyte|sealed|short|sizeof|stackalloc|static|string|struct|switch|this|throw|true|try|typeof|uint|ulong|unchecked|unsafe|ushort|using|virtual|void|volatile|while|</xsl:variable>
+
+  <xsl:template match="FieldDescriptorProto" mode="format">
+    <xsl:choose>
+      <xsl:when test="type='TYPE_DOUBLE' or type='TYPE_FLOAT'
+                or type='TYPE_FIXED32' or type='TYPE_FIXED64'
+                or type='TYPE_SFIXED32' or type='TYPE_SFIXED64'">FixedSize</xsl:when>
+      <xsl:when test="type='TYPE_GROUP'">Group</xsl:when>
+      <xsl:when test="not(type) or type='TYPE_INT32' or type='TYPE_INT64'
+                or type='TYPE_UINT32' or type='TYPE_UINT64'
+                or type='TYPE_ENUM'">TwosComplement</xsl:when>
+      <xsl:when test="type='TYPE_SINT32' or type='TYPE_SINT64'">ZigZag</xsl:when>
+      <xsl:otherwise>Default</xsl:otherwise>
+    </xsl:choose>
+  </xsl:template>
+  <xsl:template match="FieldDescriptorProto" mode="primitiveType">
+    <xsl:choose>
+      <xsl:when test="not(type)">struct</xsl:when>
+      <xsl:when test="type='TYPE_DOUBLE'">struct</xsl:when>
+      <xsl:when test="type='TYPE_FLOAT'">struct</xsl:when>
+      <xsl:when test="type='TYPE_INT64'">struct</xsl:when>
+      <xsl:when test="type='TYPE_UINT64'">struct</xsl:when>
+      <xsl:when test="type='TYPE_INT32'">struct</xsl:when>
+      <xsl:when test="type='TYPE_FIXED64'">struct</xsl:when>
+      <xsl:when test="type='TYPE_FIXED32'">struct</xsl:when>
+      <xsl:when test="type='TYPE_BOOL'">struct</xsl:when>
+      <xsl:when test="type='TYPE_STRING'">class</xsl:when>
+      <xsl:when test="type='TYPE_BYTES'">class</xsl:when>
+      <xsl:when test="type='TYPE_UINT32'">struct</xsl:when>
+      <xsl:when test="type='TYPE_SFIXED32'">struct</xsl:when>
+      <xsl:when test="type='TYPE_SFIXED64'">struct</xsl:when>
+      <xsl:when test="type='TYPE_SINT32'">struct</xsl:when>
+      <xsl:when test="type='TYPE_SINT64'">struct</xsl:when>
+      <xsl:when test="type='TYPE_ENUM'">struct</xsl:when>
+      <xsl:when test="type='TYPE_GROUP' or type='TYPE_MESSAGE'">none</xsl:when>
+      <xsl:otherwise>
+        <xsl:message terminate="yes">
+          Field type not implemented: <xsl:value-of select="type"/> (<xsl:value-of select="../../name"/>.<xsl:value-of select="name"/>)
+        </xsl:message>
+      </xsl:otherwise>
+    </xsl:choose>
+  </xsl:template>
+  <xsl:template match="FieldDescriptorProto" mode="type">
+    <xsl:choose>
+      <xsl:when test="not(type)">double</xsl:when>
+      <xsl:when test="type='TYPE_DOUBLE'">double</xsl:when>
+      <xsl:when test="type='TYPE_FLOAT'">float</xsl:when>
+      <xsl:when test="type='TYPE_INT64'">long</xsl:when>
+      <xsl:when test="type='TYPE_UINT64'">ulong</xsl:when>
+      <xsl:when test="type='TYPE_INT32'">int</xsl:when>
+      <xsl:when test="type='TYPE_FIXED64'">ulong</xsl:when>
+      <xsl:when test="type='TYPE_FIXED32'">uint</xsl:when>
+      <xsl:when test="type='TYPE_BOOL'">bool</xsl:when>
+      <xsl:when test="type='TYPE_STRING'">string</xsl:when>
+      <xsl:when test="type='TYPE_BYTES'">byte[]</xsl:when>
+      <xsl:when test="type='TYPE_UINT32'">uint</xsl:when>
+      <xsl:when test="type='TYPE_SFIXED32'">int</xsl:when>
+      <xsl:when test="type='TYPE_SFIXED64'">long</xsl:when>
+      <xsl:when test="type='TYPE_SINT32'">int</xsl:when>
+      <xsl:when test="type='TYPE_SINT64'">long</xsl:when>
+      <xsl:when test="type='TYPE_GROUP' or type='TYPE_MESSAGE' or type='TYPE_ENUM'"><xsl:call-template name="pascal">
+        <xsl:with-param name="value" select="substring-after(type_name,'.')"/>
+      </xsl:call-template></xsl:when>
+      <xsl:otherwise>
+        <xsl:message terminate="yes">
+          Field type not implemented: <xsl:value-of select="type"/> (<xsl:value-of select="../../name"/>.<xsl:value-of select="name"/>)
+        </xsl:message>
+      </xsl:otherwise>
+    </xsl:choose>
+    
+  </xsl:template>
+
+  <xsl:template match="FieldDescriptorProto[default_value]" mode="defaultValue">
+    <xsl:choose>
+      <xsl:when test="type='TYPE_STRING'">@"<xsl:value-of select="default_value"/>"</xsl:when>
+      <xsl:when test="type='TYPE_ENUM'"><xsl:apply-templates select="." mode="type"/>.<xsl:call-template name="pascal">
+        <xsl:with-param name="value" select="default_value"/>
+      </xsl:call-template></xsl:when>
+      <xsl:when test="type='TYPE_BYTES'"> /* 
+        <xsl:value-of select="default_value"/>
+        */ null </xsl:when>
+      <xsl:otherwise>(<xsl:apply-templates select="." mode="type"/>)<xsl:value-of select="default_value"/></xsl:otherwise>
+    </xsl:choose>
+  </xsl:template>
+
+  <!--
+    We need to find the first enum value given .foo.bar.SomeEnum - but the enum itself
+    only knows about SomeEnum; we need to look at all parent DescriptorProto nodes, and
+    the FileDescriptorProto for the namespace.
+    
+    This does an annoying up/down recursion... a bit expensive, but *generally* OK.
+    Could perhaps index the last part of the enum name to reduce overhead?
+  -->
+  <xsl:template name="GetFirstEnumValue">
+    <xsl:variable name="hunt" select="type_name"/>
+    <xsl:for-each select="//EnumDescriptorProto">
+      <xsl:variable name="fullName">
+        <xsl:for-each select="ancestor::FileDescriptorProto[package!='']">.<xsl:value-of select="package"/></xsl:for-each>
+        <xsl:for-each select="ancestor::DescriptorProto">.<xsl:value-of select="name"/></xsl:for-each>
+        <xsl:value-of select="'.'"/>
+        <xsl:call-template name="pascal"/>
+      </xsl:variable>
+      <xsl:if test="$fullName=$hunt"><xsl:value-of select="(value/EnumValueDescriptorProto)[1]/name"/></xsl:if>
+    </xsl:for-each>
+  </xsl:template>
+  
+  <xsl:template match="FieldDescriptorProto[not(default_value)]" mode="defaultValue">
+    <xsl:choose>
+      <xsl:when test="type='TYPE_STRING'">""</xsl:when>
+      <xsl:when test="type='TYPE_MESSAGE'">null</xsl:when>
+      <xsl:when test="type='TYPE_BYTES'">null</xsl:when>
+      <xsl:when test="type='TYPE_ENUM'"><xsl:apply-templates select="." mode="type"/>.<xsl:call-template name="GetFirstEnumValue"/></xsl:when>
+      <xsl:otherwise>default(<xsl:apply-templates select="." mode="type"/>)</xsl:otherwise>
+    </xsl:choose>
+  </xsl:template>
+
+  <xsl:template match="FieldDescriptorProto" mode="checkDeprecated"><!--
+    --><xsl:if test="options/deprecated='true'">global::System.Obsolete, </xsl:if><!--
+  --></xsl:template>
+  <xsl:template match="FieldDescriptorProto[label='LABEL_OPTIONAL' or not(label)]">
+    <xsl:variable name="propType"><xsl:apply-templates select="." mode="type"/></xsl:variable>
+    <xsl:variable name="format"><xsl:apply-templates select="." mode="format"/></xsl:variable>
+    <xsl:variable name="primitiveType"><xsl:apply-templates select="." mode="primitiveType"/></xsl:variable>
+    <xsl:variable name="defaultValue"><xsl:apply-templates select="." mode="defaultValue"/></xsl:variable>
+    <xsl:variable name="field"><xsl:apply-templates select="." mode="field"/></xsl:variable>
+    <xsl:variable name="specified" select="$optionDetectMissing and ($primitiveType='struct' or $primitiveType='class')"/>
+    <xsl:variable name="fieldType"><xsl:value-of select="$propType"/><xsl:if test="$specified and $primitiveType='struct'">?</xsl:if></xsl:variable>
+    private <xsl:value-of select="concat($fieldType,' ',$field)"/><xsl:if test="not($specified)"> = <xsl:value-of select="$defaultValue"/></xsl:if>;
+    [<xsl:apply-templates select="." mode="checkDeprecated"/>global::ProtoBuf.ProtoMember(<xsl:value-of select="number"/>, IsRequired = false, Name=@"<xsl:value-of select="name"/>", DataFormat = global::ProtoBuf.DataFormat.<xsl:value-of select="$format"/>)]<!--
+    --><xsl:if test="not($specified)">
+    [global::System.ComponentModel.DefaultValue(<xsl:value-of select="$defaultValue"/>)]</xsl:if><!--
+    --><xsl:if test="$optionXml">
+    [global::System.Xml.Serialization.XmlElement(@"<xsl:value-of select="name"/>", Order = <xsl:value-of select="number"/>)]
+    </xsl:if><xsl:if test="$optionDataContract">
+    [global::System.Runtime.Serialization.DataMember(Name=@"<xsl:value-of select="name"/>", Order = <xsl:value-of select="number"/>, IsRequired = false)]
+    </xsl:if><xsl:call-template name="WriteGetSet">
+      <xsl:with-param name="fieldType" select="$fieldType"/>
+      <xsl:with-param name="propType" select="$propType"/>
+      <xsl:with-param name="name"><xsl:call-template name="pascal"/></xsl:with-param>
+      <xsl:with-param name="field" select="$field"/>
+      <xsl:with-param name="defaultValue" select="$defaultValue"/>
+      <xsl:with-param name="specified" select="$specified"/>
+    </xsl:call-template>
+  </xsl:template>
+  
+  <xsl:template match="FieldDescriptorProto[label='LABEL_REQUIRED']">
+    <xsl:variable name="type"><xsl:apply-templates select="." mode="type"/></xsl:variable>
+    <xsl:variable name="format"><xsl:apply-templates select="." mode="format"/></xsl:variable>
+    <xsl:variable name="field"><xsl:apply-templates select="." mode="field"/></xsl:variable>
+    private <xsl:value-of select="concat($type, ' ', $field)"/>;
+    [<xsl:apply-templates select="." mode="checkDeprecated"/>global::ProtoBuf.ProtoMember(<xsl:value-of select="number"/>, IsRequired = true, Name=@"<xsl:value-of select="name"/>", DataFormat = global::ProtoBuf.DataFormat.<xsl:value-of select="$format"/>)]<!--
+    --><xsl:if test="$optionXml">
+    [global::System.Xml.Serialization.XmlElement(@"<xsl:value-of select="name"/>", Order = <xsl:value-of select="number"/>)]
+    </xsl:if><xsl:if test="$optionDataContract">
+    [global::System.Runtime.Serialization.DataMember(Name=@"<xsl:value-of select="name"/>", Order = <xsl:value-of select="number"/>, IsRequired = true)]
+    </xsl:if><xsl:call-template name="WriteGetSet">
+      <xsl:with-param name="fieldType" select="$type"/>
+      <xsl:with-param name="propType" select="$type"/>
+      <xsl:with-param name="name"><xsl:call-template name="pascal"/></xsl:with-param>
+      <xsl:with-param name="field" select="$field"/>
+    </xsl:call-template>    
+  </xsl:template>
+
+  <xsl:template name="stripKeyword">
+    <xsl:param name="value"/>
+    <xsl:choose>
+      <xsl:when test="starts-with($value,'@')"><xsl:value-of select="substring-after($value,'@')"/></xsl:when>
+      <xsl:otherwise><xsl:value-of select="$value"/></xsl:otherwise>
+    </xsl:choose>
+  </xsl:template>
+  
+  <xsl:template name="WriteGetSet">
+    <xsl:param name="fieldType"/>
+    <xsl:param name="propType"/>
+    <xsl:param name="name"/>
+    <xsl:param name="field"/>
+    <xsl:param name="specified" select="false()"/>
+    <xsl:param name="defaultValue"/>
+    <xsl:variable name="nameNoKeyword">
+      <xsl:call-template name="stripKeyword">
+        <xsl:with-param name="value" select="$name"/>
+      </xsl:call-template></xsl:variable>
+    public <xsl:value-of select="concat($fieldType,' ',$name)"/>
+    {
+      get { return <xsl:value-of select="$field"/>; }
+      set { <xsl:if test="$optionPartialMethods">On<xsl:value-of select="$nameNoKeyword"/>Changing(value); </xsl:if><xsl:if test="$optionPreObservable">OnPropertyChanging(@"<xsl:value-of select="$nameNoKeyword"/>"); </xsl:if><xsl:value-of select="$field"/> = value; <xsl:if test="$optionObservable">OnPropertyChanged(@"<xsl:value-of select="$nameNoKeyword"/>"); </xsl:if><xsl:if test="$optionPartialMethods">On<xsl:value-of select="$nameNoKeyword"/>Changed();</xsl:if>}
+    }<xsl:if test="$optionPartialMethods">
+    partial void On<xsl:value-of select="$nameNoKeyword"/>Changing(<xsl:value-of select="$propType"/> value);
+    partial void On<xsl:value-of select="$nameNoKeyword"/>Changed();</xsl:if><xsl:if test="$specified">
+    [global::System.Xml.Serialization.XmlIgnore]
+    <xsl:if test="$optionFullFramework">[global::System.ComponentModel.Browsable(false)]</xsl:if>
+    public bool <xsl:value-of select="$nameNoKeyword"/>Specified
+    {
+      get { return this.<xsl:value-of select="$field"/> != null; }
+      set { if (value == (this.<xsl:value-of select="$field"/>== null)) this.<xsl:value-of select="$field"/> = value ? this.<xsl:value-of select="$name"/> : (<xsl:value-of select="$fieldType"/>)null; }
+    }
+    private bool ShouldSerialize<xsl:value-of select="$nameNoKeyword"/>() { return <xsl:value-of select="$nameNoKeyword"/>Specified; }
+    private void Reset<xsl:value-of select="$nameNoKeyword"/>() { <xsl:value-of select="$nameNoKeyword"/>Specified = false; }
+    </xsl:if>
+  </xsl:template>
+  <xsl:template match="FieldDescriptorProto[label='LABEL_REPEATED']">
+    <xsl:variable name="type"><xsl:apply-templates select="." mode="type"/></xsl:variable>
+    <xsl:variable name="format"><xsl:apply-templates select="." mode="format"/></xsl:variable>
+    <xsl:variable name="field"><xsl:apply-templates select="." mode="field"/></xsl:variable>
+    private <xsl:if test="not($optionXml)">readonly</xsl:if> global::System.Collections.Generic.List&lt;<xsl:value-of select="$type" />&gt; <xsl:value-of select="$field"/> = new global::System.Collections.Generic.List&lt;<xsl:value-of select="$type"/>&gt;();
+    [<xsl:apply-templates select="." mode="checkDeprecated"/>global::ProtoBuf.ProtoMember(<xsl:value-of select="number"/>, Name=@"<xsl:value-of select="name"/>", DataFormat = global::ProtoBuf.DataFormat.<xsl:value-of select="$format"/><xsl:if test="options/packed='true'">, Options = global::ProtoBuf.MemberSerializationOptions.Packed</xsl:if>)]<!--
+    --><xsl:if test="$optionDataContract">
+    [global::System.Runtime.Serialization.DataMember(Name=@"<xsl:value-of select="name"/>", Order = <xsl:value-of select="number"/>, IsRequired = false)]
+    </xsl:if><xsl:if test="$optionXml">
+    [global::System.Xml.Serialization.XmlElement(@"<xsl:value-of select="name"/>", Order = <xsl:value-of select="number"/>)]
+    </xsl:if>
+    public global::System.Collections.Generic.List&lt;<xsl:value-of select="$type" />&gt; <xsl:call-template name="pascal"/>
+    {
+      get { return <xsl:value-of select="$field"/>; }<!--
+      --><xsl:if test="$optionXml">
+      set { <xsl:value-of select="$field"/> = value; }</xsl:if>
+    }
+  </xsl:template>
+
+  <xsl:template match="ServiceDescriptorProto">
+    <xsl:if test="($optionClientProxy or $optionDataContract)">
+    [global::System.ServiceModel.ServiceContract(Name = @"<xsl:value-of select="name"/>")]</xsl:if>
+    public interface I<xsl:value-of select="name"/>
+    {
+      <xsl:apply-templates select="method"/>
+    }
+    
+    <xsl:if test="$optionProtoRpc">
+    public class <xsl:value-of select="name"/>Client : global::ProtoBuf.ServiceModel.RpcClient
+    {
+      public <xsl:value-of select="name"/>Client() : base(typeof(I<xsl:value-of select="name"/>)) { }
+      <xsl:apply-templates select="method/MethodDescriptorProto" mode="protoRpc"/>
+    }
+    </xsl:if>
+    <xsl:apply-templates select="." mode="clientProxy"/>
+    
+  </xsl:template>
+
+  <xsl:template match="MethodDescriptorProto">
+    <xsl:if test="($optionClientProxy or $optionDataContract)">
+        [global::System.ServiceModel.OperationContract(Name = @"<xsl:value-of select="name"/>")]
+        <xsl:if test="$optionFullFramework">[global::ProtoBuf.ServiceModel.ProtoBehavior]</xsl:if>
+    </xsl:if>
+        <xsl:apply-templates select="output_type"/><xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name"/>(<xsl:apply-templates select="input_type"/> request);
+    <xsl:if test="$optionAsynchronous and ($optionClientProxy or $optionDataContract)">
+        [global::System.ServiceModel.OperationContract(AsyncPattern = true, Name = @"<xsl:value-of select="name"/>")]
+        global::System.IAsyncResult Begin<xsl:value-of select="name"/>(<xsl:apply-templates select="input_type"/> request, global::System.AsyncCallback callback, object state);
+    <xsl:apply-templates select="output_type"/> End<xsl:value-of select="name"/>(global::System.IAsyncResult ar);
+    </xsl:if>
+  </xsl:template>
+
+  <xsl:template match="MethodDescriptorProto" mode="protoRpc">
+        <xsl:apply-templates select="output_type"/><xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name"/>(<xsl:apply-templates select="input_type"/> request)
+        {
+            return (<xsl:apply-templates select="output_type"/>) Send(@"<xsl:value-of select="name"/>", request);
+        }
+  </xsl:template>
+
+  <xsl:template match="MethodDescriptorProto/input_type | MethodDescriptorProto/output_type">
+    <xsl:value-of select="substring-after(.,'.')"/>
+  </xsl:template>
+
+  <xsl:template match="MethodDescriptorProto" mode="CompleteEvent">
+  <xsl:if test="$optionAsynchronous and $optionDataContract">
+    public partial class <xsl:value-of select="name"/>CompletedEventArgs : global::System.ComponentModel.AsyncCompletedEventArgs
+    {
+        private object[] results;
+
+        public <xsl:value-of select="name"/>CompletedEventArgs(object[] results, global::System.Exception exception, bool cancelled, object userState)
+            : base(exception, cancelled, userState) 
+        {
+            this.results = results;
+        }
+        
+        public <xsl:apply-templates select="output_type"/> Result
+        {
+            get { 
+                base.RaiseExceptionIfNecessary();
+                return (<xsl:apply-templates select="output_type"/>)(this.results[0]); 
+            }
+        }
+    }
+  </xsl:if>
+  </xsl:template>
+
+  <xsl:template match="ServiceDescriptorProto" mode="clientProxy">
+  <xsl:if test="$optionAsynchronous and $optionDataContract and $optionClientProxy">
+    <xsl:apply-templates select="method/MethodDescriptorProto" mode="CompleteEvent"/>
+    
+    [global::System.Diagnostics.DebuggerStepThroughAttribute()]
+    public partial class <xsl:value-of select="name"/>Client : global::System.ServiceModel.ClientBase&lt;I<xsl:value-of select="name"/>&gt;, I<xsl:value-of select="name"/>
+    {
+
+        public <xsl:value-of select="name"/>Client()
+        {}
+        public <xsl:value-of select="name"/>Client(string endpointConfigurationName) 
+            : base(endpointConfigurationName) 
+        {}
+        public <xsl:value-of select="name"/>Client(string endpointConfigurationName, string remoteAddress) 
+            : base(endpointConfigurationName, remoteAddress)
+        {}
+        public <xsl:value-of select="name"/>Client(string endpointConfigurationName, global::System.ServiceModel.EndpointAddress remoteAddress)
+            : base(endpointConfigurationName, remoteAddress)
+        {}
+        public <xsl:value-of select="name"/>Client(global::System.ServiceModel.Channels.Binding binding, global::System.ServiceModel.EndpointAddress remoteAddress)
+            : base(binding, remoteAddress)
+        {}
+
+        <xsl:apply-templates select="method/MethodDescriptorProto" mode="clientProxy"/>
+    }  
+  </xsl:if>
+  </xsl:template>
+
+  <xsl:template match="MethodDescriptorProto" mode="clientProxy">
+  <xsl:if test="$optionAsynchronous and $optionDataContract and $optionClientProxy">
+        private BeginOperationDelegate onBegin<xsl:value-of select="name"/>Delegate;
+        private EndOperationDelegate onEnd<xsl:value-of select="name"/>Delegate;
+        private global::System.Threading.SendOrPostCallback on<xsl:value-of select="name"/>CompletedDelegate;
+
+        public event global::System.EventHandler&lt;<xsl:value-of select="name"/>CompletedEventArgs&gt; <xsl:value-of select="name"/>Completed;
+
+        public <xsl:apply-templates select="output_type"/><xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name"/>(<xsl:apply-templates select="input_type"/> request)
+        {
+            return base.Channel.<xsl:value-of select="name"/>(request);
+        }
+
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        public global::System.IAsyncResult Begin<xsl:value-of select="name"/>(<xsl:apply-templates select="input_type"/> request, global::System.AsyncCallback callback, object asyncState)
+        {
+            return base.Channel.Begin<xsl:value-of select="name"/>(request, callback, asyncState);
+        }
+
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        public <xsl:apply-templates select="output_type"/> End<xsl:value-of select="name"/>(global::System.IAsyncResult result)
+        {
+            return base.Channel.End<xsl:value-of select="name"/>(result);
+        }
+
+        private global::System.IAsyncResult OnBegin<xsl:value-of select="name"/>(object[] inValues, global::System.AsyncCallback callback, object asyncState)
+        {
+            <xsl:apply-templates select="input_type"/> request = ((<xsl:apply-templates select="input_type"/>)(inValues[0]));
+            return this.Begin<xsl:value-of select="name"/>(request, callback, asyncState);
+        }
+
+        private object[] OnEnd<xsl:value-of select="name"/>(global::System.IAsyncResult result)
+        {
+            <xsl:apply-templates select="output_type"/> retVal = this.End<xsl:value-of select="name"/>(result);
+            return new object[] {
+                retVal};
+        }
+
+        private void On<xsl:value-of select="name"/>Completed(object state)
+        {
+            if ((this.<xsl:value-of select="name"/>Completed != null))
+            {
+                InvokeAsyncCompletedEventArgs e = ((InvokeAsyncCompletedEventArgs)(state));
+                this.<xsl:value-of select="name"/>Completed(this, new <xsl:value-of select="name"/>CompletedEventArgs(e.Results, e.Error, e.Cancelled, e.UserState));
+            }
+        }
+
+        public void <xsl:value-of select="name"/>Async(<xsl:apply-templates select="input_type"/> request)
+        {
+            this.<xsl:value-of select="name"/>Async(request, null);
+        }
+
+        public void <xsl:value-of select="name"/>Async(<xsl:apply-templates select="input_type"/> request, object userState)
+        {
+            if ((this.onBegin<xsl:value-of select="name"/>Delegate == null))
+            {
+                this.onBegin<xsl:value-of select="name"/>Delegate = new BeginOperationDelegate(this.OnBegin<xsl:value-of select="name"/>);
+            }
+            if ((this.onEnd<xsl:value-of select="name"/>Delegate == null))
+            {
+                this.onEnd<xsl:value-of select="name"/>Delegate = new EndOperationDelegate(this.OnEnd<xsl:value-of select="name"/>);
+            }
+            if ((this.on<xsl:value-of select="name"/>CompletedDelegate == null))
+            {
+                this.on<xsl:value-of select="name"/>CompletedDelegate = new global::System.Threading.SendOrPostCallback(this.On<xsl:value-of select="name"/>Completed);
+            }
+            base.InvokeAsync(this.onBegin<xsl:value-of select="name"/>Delegate, new object[] {
+                    request}, this.onEnd<xsl:value-of select="name"/>Delegate, this.on<xsl:value-of select="name"/>CompletedDelegate, userState);
+        }
+    </xsl:if>
+    </xsl:template>
+</xsl:stylesheet>
diff --git a/ProtobufCore/Protogen-Tools/protobuf-net.dll b/ProtobufCore/Protogen-Tools/protobuf-net.dll
new file mode 100644
index 0000000..ade23fd
Binary files /dev/null and b/ProtobufCore/Protogen-Tools/protobuf-net.dll differ
diff --git a/ProtobufCore/Protogen-Tools/protobuf-net.xml b/ProtobufCore/Protogen-Tools/protobuf-net.xml
new file mode 100644
index 0000000..a6e609d
--- /dev/null
+++ b/ProtobufCore/Protogen-Tools/protobuf-net.xml
@@ -0,0 +1,2845 @@
+<?xml version="1.0"?>
+<doc>
+    <assembly>
+        <name>protobuf-net</name>
+    </assembly>
+    <members>
+        <member name="T:ProtoBuf.BclHelpers">
+            <summary>
+            Provides support for common .NET types that do not have a direct representation
+            in protobuf, using the definitions from bcl.proto
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.BclHelpers.GetUninitializedObject(System.Type)">
+            <summary>
+            Creates a new instance of the specified type, bypassing the constructor.
+            </summary>
+            <param name="type">The type to create</param>
+            <returns>The new instance</returns>
+            <exception cref="T:System.NotSupportedException">If the platform does not support constructor-skipping</exception>
+        </member>
+        <member name="M:ProtoBuf.BclHelpers.WriteTimeSpan(System.TimeSpan,ProtoBuf.ProtoWriter)">
+            <summary>
+            Writes a TimeSpan to a protobuf stream
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.BclHelpers.ReadTimeSpan(ProtoBuf.ProtoReader)">
+            <summary>
+            Parses a TimeSpan from a protobuf stream
+            </summary>        
+        </member>
+        <member name="M:ProtoBuf.BclHelpers.ReadDateTime(ProtoBuf.ProtoReader)">
+            <summary>
+            Parses a DateTime from a protobuf stream
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.BclHelpers.WriteDateTime(System.DateTime,ProtoBuf.ProtoWriter)">
+            <summary>
+            Writes a DateTime to a protobuf stream
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.BclHelpers.ReadDecimal(ProtoBuf.ProtoReader)">
+            <summary>
+            Parses a decimal from a protobuf stream
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.BclHelpers.WriteDecimal(System.Decimal,ProtoBuf.ProtoWriter)">
+            <summary>
+            Writes a decimal to a protobuf stream
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.BclHelpers.WriteGuid(System.Guid,ProtoBuf.ProtoWriter)">
+            <summary>
+            Writes a Guid to a protobuf stream
+            </summary>        
+        </member>
+        <member name="M:ProtoBuf.BclHelpers.ReadGuid(ProtoBuf.ProtoReader)">
+            <summary>
+            Parses a Guid from a protobuf stream
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.BclHelpers.ReadNetObject(System.Object,ProtoBuf.ProtoReader,System.Int32,System.Type,ProtoBuf.BclHelpers.NetObjectOptions)">
+            <summary>
+            Reads an *implementation specific* bundled .NET object, including (as options) type-metadata, identity/re-use, etc.
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.BclHelpers.WriteNetObject(System.Object,ProtoBuf.ProtoWriter,System.Int32,ProtoBuf.BclHelpers.NetObjectOptions)">
+            <summary>
+            Writes an *implementation specific* bundled .NET object, including (as options) type-metadata, identity/re-use, etc.
+            </summary>
+        </member>
+        <member name="T:ProtoBuf.BclHelpers.NetObjectOptions">
+            <summary>
+            Optional behaviours that introduce .NET-specific functionality
+            </summary>
+        </member>
+        <member name="F:ProtoBuf.BclHelpers.NetObjectOptions.None">
+            <summary>
+            No special behaviour
+            </summary>
+        </member>
+        <member name="F:ProtoBuf.BclHelpers.NetObjectOptions.AsReference">
+            <summary>
+            Enables full object-tracking/full-graph support.
+            </summary>
+        </member>
+        <member name="F:ProtoBuf.BclHelpers.NetObjectOptions.DynamicType">
+            <summary>
+            Embeds the type information into the stream, allowing usage with types not known in advance.
+            </summary>
+        </member>
+        <member name="F:ProtoBuf.BclHelpers.NetObjectOptions.UseConstructor">
+            <summary>
+            If false, the constructor for the type is bypassed during deserialization, meaning any field initializers
+            or other initialization code is skipped.
+            </summary>
+        </member>
+        <member name="T:ProtoBuf.BufferExtension">
+            <summary>
+            Provides a simple buffer-based implementation of an <see cref="T:ProtoBuf.IExtension">extension</see> object.
+            </summary>
+        </member>
+        <member name="T:ProtoBuf.IExtension">
+            <summary>
+            Provides addition capability for supporting unexpected fields during
+            protocol-buffer serialization/deserialization. This allows for loss-less
+            round-trip/merge, even when the data is not fully understood.
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.IExtension.BeginAppend">
+            <summary>
+            Requests a stream into which any unexpected fields can be persisted.
+            </summary>
+            <returns>A new stream suitable for storing data.</returns>
+        </member>
+        <member name="M:ProtoBuf.IExtension.EndAppend(System.IO.Stream,System.Boolean)">
+            <summary>
+            Indicates that all unexpected fields have now been stored. The
+            implementing class is responsible for closing the stream. If
+            "commit" is not true the data may be discarded.
+            </summary>
+            <param name="stream">The stream originally obtained by BeginAppend.</param>
+            <param name="commit">True if the append operation completed successfully.</param>
+        </member>
+        <member name="M:ProtoBuf.IExtension.BeginQuery">
+            <summary>
+            Requests a stream of the unexpected fields previously stored.
+            </summary>
+            <returns>A prepared stream of the unexpected fields.</returns>
+        </member>
+        <member name="M:ProtoBuf.IExtension.EndQuery(System.IO.Stream)">
+            <summary>
+            Indicates that all unexpected fields have now been read. The
+            implementing class is responsible for closing the stream.
+            </summary>
+            <param name="stream">The stream originally obtained by BeginQuery.</param>
+        </member>
+        <member name="M:ProtoBuf.IExtension.GetLength">
+            <summary>
+            Requests the length of the raw binary stream; this is used
+            when serializing sub-entities to indicate the expected size.
+            </summary>
+            <returns>The length of the binary stream representing unexpected data.</returns>
+        </member>
+        <member name="T:ProtoBuf.ProtoBeforeSerializationAttribute">
+            <summary>Specifies a method on the root-contract in an hierarchy to be invoked before serialization.</summary>
+        </member>
+        <member name="T:ProtoBuf.ProtoAfterSerializationAttribute">
+            <summary>Specifies a method on the root-contract in an hierarchy to be invoked after serialization.</summary>
+        </member>
+        <member name="T:ProtoBuf.ProtoBeforeDeserializationAttribute">
+            <summary>Specifies a method on the root-contract in an hierarchy to be invoked before deserialization.</summary>
+        </member>
+        <member name="T:ProtoBuf.ProtoAfterDeserializationAttribute">
+            <summary>Specifies a method on the root-contract in an hierarchy to be invoked after deserialization.</summary>
+        </member>
+        <member name="M:ProtoBuf.Compiler.CompilerContext.LoadNullRef">
+            <summary>
+            Pushes a null reference onto the stack. Note that this should only
+            be used to return a null (or set a variable to null); for null-tests
+            use BranchIfTrue / BranchIfFalse.
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.Compiler.CompilerContext.UsingBlock.#ctor(ProtoBuf.Compiler.CompilerContext,ProtoBuf.Compiler.Local)">
+            <summary>
+            Creates a new "using" block (equivalent) around a variable;
+            the variable must exist, and note that (unlike in C#) it is
+            the variables *final* value that gets disposed. If you need
+            *original* disposal, copy your variable first.
+            
+            It is the callers responsibility to ensure that the variable's
+            scope fully-encapsulates the "using"; if not, the variable
+            may be re-used (and thus re-assigned) unexpectedly.
+            </summary>
+        </member>
+        <member name="T:ProtoBuf.DataFormat">
+            <summary>
+            Sub-format to use when serializing/deserializing data
+            </summary>
+        </member>
+        <member name="F:ProtoBuf.DataFormat.Default">
+            <summary>
+            Uses the default encoding for the data-type.
+            </summary>
+        </member>
+        <member name="F:ProtoBuf.DataFormat.ZigZag">
+            <summary>
+            When applied to signed integer-based data (including Decimal), this
+            indicates that zigzag variant encoding will be used. This means that values
+            with small magnitude (regardless of sign) take a small amount
+            of space to encode.
+            </summary>
+        </member>
+        <member name="F:ProtoBuf.DataFormat.TwosComplement">
+            <summary>
+            When applied to signed integer-based data (including Decimal), this
+            indicates that two's-complement variant encoding will be used.
+            This means that any -ve number will take 10 bytes (even for 32-bit),
+            so should only be used for compatibility.
+            </summary>
+        </member>
+        <member name="F:ProtoBuf.DataFormat.FixedSize">
+            <summary>
+            When applied to signed integer-based data (including Decimal), this
+            indicates that a fixed amount of space will be used.
+            </summary>
+        </member>
+        <member name="F:ProtoBuf.DataFormat.Group">
+            <summary>
+            When applied to a sub-message, indicates that the value should be treated
+            as group-delimited.
+            </summary>
+        </member>
+        <member name="T:ProtoBuf.Extensible">
+            <summary>
+            Simple base class for supporting unexpected fields allowing
+            for loss-less round-tips/merge, even if the data is not understod.
+            The additional fields are (by default) stored in-memory in a buffer.
+            </summary>
+            <remarks>As an example of an alternative implementation, you might
+            choose to use the file system (temporary files) as the back-end, tracking
+            only the paths [such an object would ideally be IDisposable and use
+            a finalizer to ensure that the files are removed].</remarks>
+            <seealso cref="T:ProtoBuf.IExtensible"/>
+        </member>
+        <member name="T:ProtoBuf.IExtensible">
+            <summary>
+            Indicates that the implementing type has support for protocol-buffer
+            <see cref="T:ProtoBuf.IExtension">extensions</see>.
+            </summary>
+            <remarks>Can be implemented by deriving from Extensible.</remarks>
+        </member>
+        <member name="M:ProtoBuf.IExtensible.GetExtensionObject(System.Boolean)">
+            <summary>
+            Retrieves the <see cref="T:ProtoBuf.IExtension">extension</see> object for the current
+            instance, optionally creating it if it does not already exist.
+            </summary>
+            <param name="createIfMissing">Should a new extension object be
+            created if it does not already exist?</param>
+            <returns>The extension object if it exists (or was created), or null
+            if the extension object does not exist or is not available.</returns>
+            <remarks>The <c>createIfMissing</c> argument is false during serialization,
+            and true during deserialization upon encountering unexpected fields.</remarks>
+        </member>
+        <member name="M:ProtoBuf.Extensible.GetExtensionObject(System.Boolean)">
+            <summary>
+            Retrieves the <see cref="T:ProtoBuf.IExtension">extension</see> object for the current
+            instance, optionally creating it if it does not already exist.
+            </summary>
+            <param name="createIfMissing">Should a new extension object be
+            created if it does not already exist?</param>
+            <returns>The extension object if it exists (or was created), or null
+            if the extension object does not exist or is not available.</returns>
+            <remarks>The <c>createIfMissing</c> argument is false during serialization,
+            and true during deserialization upon encountering unexpected fields.</remarks>
+        </member>
+        <member name="M:ProtoBuf.Extensible.GetExtensionObject(ProtoBuf.IExtension@,System.Boolean)">
+            <summary>
+            Provides a simple, default implementation for <see cref="T:ProtoBuf.IExtension">extension</see> support,
+            optionally creating it if it does not already exist. Designed to be called by
+            classes implementing <see cref="T:ProtoBuf.IExtensible"/>.
+            </summary>
+            <param name="createIfMissing">Should a new extension object be
+            created if it does not already exist?</param>
+            <param name="extensionObject">The extension field to check (and possibly update).</param>
+            <returns>The extension object if it exists (or was created), or null
+            if the extension object does not exist or is not available.</returns>
+            <remarks>The <c>createIfMissing</c> argument is false during serialization,
+            and true during deserialization upon encountering unexpected fields.</remarks>
+        </member>
+        <member name="M:ProtoBuf.Extensible.AppendValue``1(ProtoBuf.IExtensible,System.Int32,``0)">
+            <summary>
+            Appends the value as an additional (unexpected) data-field for the instance.
+            Note that for non-repeated sub-objects, this equates to a merge operation;
+            for repeated sub-objects this adds a new instance to the set; for simple
+            values the new value supercedes the old value.
+            </summary>
+            <remarks>Note that appending a value does not remove the old value from
+            the stream; avoid repeatedly appending values for the same field.</remarks>
+            <typeparam name="TValue">The type of the value to append.</typeparam>
+            <param name="instance">The extensible object to append the value to.</param>
+            <param name="tag">The field identifier; the tag should not be defined as a known data-field for the instance.</param>
+            <param name="value">The value to append.</param>
+        </member>
+        <member name="M:ProtoBuf.Extensible.AppendValue``1(ProtoBuf.IExtensible,System.Int32,ProtoBuf.DataFormat,``0)">
+            <summary>
+            Appends the value as an additional (unexpected) data-field for the instance.
+            Note that for non-repeated sub-objects, this equates to a merge operation;
+            for repeated sub-objects this adds a new instance to the set; for simple
+            values the new value supercedes the old value.
+            </summary>
+            <remarks>Note that appending a value does not remove the old value from
+            the stream; avoid repeatedly appending values for the same field.</remarks>
+            <typeparam name="TValue">The data-type of the field.</typeparam>
+            <param name="format">The data-format to use when encoding the value.</param>
+            <param name="instance">The extensible object to append the value to.</param>
+            <param name="tag">The field identifier; the tag should not be defined as a known data-field for the instance.</param>
+            <param name="value">The value to append.</param>
+        </member>
+        <member name="M:ProtoBuf.Extensible.GetValue``1(ProtoBuf.IExtensible,System.Int32)">
+            <summary>
+            Queries an extensible object for an additional (unexpected) data-field for the instance.
+            The value returned is the composed value after merging any duplicated content; if the
+            value is "repeated" (a list), then use GetValues instead.
+            </summary>
+            <typeparam name="TValue">The data-type of the field.</typeparam>
+            <param name="instance">The extensible object to obtain the value from.</param>
+            <param name="tag">The field identifier; the tag should not be defined as a known data-field for the instance.</param>
+            <returns>The effective value of the field, or the default value if not found.</returns>
+        </member>
+        <member name="M:ProtoBuf.Extensible.GetValue``1(ProtoBuf.IExtensible,System.Int32,ProtoBuf.DataFormat)">
+            <summary>
+            Queries an extensible object for an additional (unexpected) data-field for the instance.
+            The value returned is the composed value after merging any duplicated content; if the
+            value is "repeated" (a list), then use GetValues instead.
+            </summary>
+            <typeparam name="TValue">The data-type of the field.</typeparam>
+            <param name="instance">The extensible object to obtain the value from.</param>
+            <param name="tag">The field identifier; the tag should not be defined as a known data-field for the instance.</param>
+            <param name="format">The data-format to use when decoding the value.</param>
+            <returns>The effective value of the field, or the default value if not found.</returns>
+        </member>
+        <member name="M:ProtoBuf.Extensible.TryGetValue``1(ProtoBuf.IExtensible,System.Int32,``0@)">
+            <summary>
+            Queries an extensible object for an additional (unexpected) data-field for the instance.
+            The value returned (in "value") is the composed value after merging any duplicated content;
+            if the value is "repeated" (a list), then use GetValues instead.
+            </summary>
+            <typeparam name="TValue">The data-type of the field.</typeparam>
+            <param name="value">The effective value of the field, or the default value if not found.</param>
+            <param name="instance">The extensible object to obtain the value from.</param>
+            <param name="tag">The field identifier; the tag should not be defined as a known data-field for the instance.</param>
+            <returns>True if data for the field was present, false otherwise.</returns>
+        </member>
+        <member name="M:ProtoBuf.Extensible.TryGetValue``1(ProtoBuf.IExtensible,System.Int32,ProtoBuf.DataFormat,``0@)">
+            <summary>
+            Queries an extensible object for an additional (unexpected) data-field for the instance.
+            The value returned (in "value") is the composed value after merging any duplicated content;
+            if the value is "repeated" (a list), then use GetValues instead.
+            </summary>
+            <typeparam name="TValue">The data-type of the field.</typeparam>
+            <param name="value">The effective value of the field, or the default value if not found.</param>
+            <param name="instance">The extensible object to obtain the value from.</param>
+            <param name="tag">The field identifier; the tag should not be defined as a known data-field for the instance.</param>
+            <param name="format">The data-format to use when decoding the value.</param>
+            <returns>True if data for the field was present, false otherwise.</returns>
+        </member>
+        <member name="M:ProtoBuf.Extensible.TryGetValue``1(ProtoBuf.IExtensible,System.Int32,ProtoBuf.DataFormat,System.Boolean,``0@)">
+            <summary>
+            Queries an extensible object for an additional (unexpected) data-field for the instance.
+            The value returned (in "value") is the composed value after merging any duplicated content;
+            if the value is "repeated" (a list), then use GetValues instead.
+            </summary>
+            <typeparam name="TValue">The data-type of the field.</typeparam>
+            <param name="value">The effective value of the field, or the default value if not found.</param>
+            <param name="instance">The extensible object to obtain the value from.</param>
+            <param name="tag">The field identifier; the tag should not be defined as a known data-field for the instance.</param>
+            <param name="format">The data-format to use when decoding the value.</param>
+            <param name="allowDefinedTag">Allow tags that are present as part of the definition; for example, to query unknown enum values.</param>
+            <returns>True if data for the field was present, false otherwise.</returns>
+        </member>
+        <member name="M:ProtoBuf.Extensible.GetValues``1(ProtoBuf.IExtensible,System.Int32)">
+            <summary>
+            Queries an extensible object for an additional (unexpected) data-field for the instance.
+            Each occurrence of the field is yielded separately, making this usage suitable for "repeated"
+            (list) fields.
+            </summary>
+            <remarks>The extended data is processed lazily as the enumerator is iterated.</remarks>
+            <typeparam name="TValue">The data-type of the field.</typeparam>
+            <param name="instance">The extensible object to obtain the value from.</param>
+            <param name="tag">The field identifier; the tag should not be defined as a known data-field for the instance.</param>
+            <returns>An enumerator that yields each occurrence of the field.</returns>
+        </member>
+        <member name="M:ProtoBuf.Extensible.GetValues``1(ProtoBuf.IExtensible,System.Int32,ProtoBuf.DataFormat)">
+            <summary>
+            Queries an extensible object for an additional (unexpected) data-field for the instance.
+            Each occurrence of the field is yielded separately, making this usage suitable for "repeated"
+            (list) fields.
+            </summary>
+            <remarks>The extended data is processed lazily as the enumerator is iterated.</remarks>
+            <typeparam name="TValue">The data-type of the field.</typeparam>
+            <param name="instance">The extensible object to obtain the value from.</param>
+            <param name="tag">The field identifier; the tag should not be defined as a known data-field for the instance.</param>
+            <param name="format">The data-format to use when decoding the value.</param>
+            <returns>An enumerator that yields each occurrence of the field.</returns>
+        </member>
+        <member name="M:ProtoBuf.Extensible.TryGetValue(ProtoBuf.Meta.TypeModel,System.Type,ProtoBuf.IExtensible,System.Int32,ProtoBuf.DataFormat,System.Boolean,System.Object@)">
+            <summary>
+            Queries an extensible object for an additional (unexpected) data-field for the instance.
+            The value returned (in "value") is the composed value after merging any duplicated content;
+            if the value is "repeated" (a list), then use GetValues instead.
+            </summary>
+            <param name="type">The data-type of the field.</param>
+            <param name="model">The model to use for configuration.</param>
+            <param name="value">The effective value of the field, or the default value if not found.</param>
+            <param name="instance">The extensible object to obtain the value from.</param>
+            <param name="tag">The field identifier; the tag should not be defined as a known data-field for the instance.</param>
+            <param name="format">The data-format to use when decoding the value.</param>
+            <param name="allowDefinedTag">Allow tags that are present as part of the definition; for example, to query unknown enum values.</param>
+            <returns>True if data for the field was present, false otherwise.</returns>
+        </member>
+        <member name="M:ProtoBuf.Extensible.GetValues(ProtoBuf.Meta.TypeModel,System.Type,ProtoBuf.IExtensible,System.Int32,ProtoBuf.DataFormat)">
+            <summary>
+            Queries an extensible object for an additional (unexpected) data-field for the instance.
+            Each occurrence of the field is yielded separately, making this usage suitable for "repeated"
+            (list) fields.
+            </summary>
+            <remarks>The extended data is processed lazily as the enumerator is iterated.</remarks>
+            <param name="model">The model to use for configuration.</param>
+            <param name="type">The data-type of the field.</param>
+            <param name="instance">The extensible object to obtain the value from.</param>
+            <param name="tag">The field identifier; the tag should not be defined as a known data-field for the instance.</param>
+            <param name="format">The data-format to use when decoding the value.</param>
+            <returns>An enumerator that yields each occurrence of the field.</returns>
+        </member>
+        <member name="M:ProtoBuf.Extensible.AppendValue(ProtoBuf.Meta.TypeModel,ProtoBuf.IExtensible,System.Int32,ProtoBuf.DataFormat,System.Object)">
+            <summary>
+            Appends the value as an additional (unexpected) data-field for the instance.
+            Note that for non-repeated sub-objects, this equates to a merge operation;
+            for repeated sub-objects this adds a new instance to the set; for simple
+            values the new value supercedes the old value.
+            </summary>
+            <remarks>Note that appending a value does not remove the old value from
+            the stream; avoid repeatedly appending values for the same field.</remarks>
+            <param name="model">The model to use for configuration.</param>
+            <param name="format">The data-format to use when encoding the value.</param>
+            <param name="instance">The extensible object to append the value to.</param>
+            <param name="tag">The field identifier; the tag should not be defined as a known data-field for the instance.</param>
+            <param name="value">The value to append.</param>
+        </member>
+        <member name="T:ProtoBuf.ExtensibleUtil">
+            <summary>
+            This class acts as an internal wrapper allowing us to do a dynamic
+            methodinfo invoke; an't put into Serializer as don't want on public
+            API; can't put into Serializer&lt;T&gt; since we need to invoke
+            accross classes, which isn't allowed in Silverlight)
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.ExtensibleUtil.GetExtendedValues``1(ProtoBuf.IExtensible,System.Int32,ProtoBuf.DataFormat,System.Boolean,System.Boolean)">
+            <summary>
+            All this does is call GetExtendedValuesTyped with the correct type for "instance";
+            this ensures that we don't get issues with subclasses declaring conflicting types -
+            the caller must respect the fields defined for the type they pass in.
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.ExtensibleUtil.GetExtendedValues(ProtoBuf.Meta.TypeModel,System.Type,ProtoBuf.IExtensible,System.Int32,ProtoBuf.DataFormat,System.Boolean,System.Boolean)">
+            <summary>
+            All this does is call GetExtendedValuesTyped with the correct type for "instance";
+            this ensures that we don't get issues with subclasses declaring conflicting types -
+            the caller must respect the fields defined for the type they pass in.
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.ExtensibleUtil.AppendExtendValueTyped``2(ProtoBuf.Meta.TypeModel,``0,System.Int32,ProtoBuf.DataFormat,``1)">
+            <summary>
+            Stores the given value into the instance's stream; the serializer
+            is inferred from TValue and format.
+            </summary>
+            <remarks>Needs to be public to be callable thru reflection in Silverlight</remarks>
+        </member>
+        <member name="T:ProtoBuf.Helpers">
+            <summary>
+            Not all frameworks are created equal (fx1.1 vs fx2.0,
+            micro-framework, compact-framework,
+            silverlight, etc). This class simply wraps up a few things that would
+            otherwise make the real code unnecessarily messy, providing fallback
+            implementations if necessary.
+            </summary>
+        </member>
+        <member name="T:ProtoBuf.ProtoTypeCode">
+            <summary>
+            Intended to be a direct map to regular TypeCode, but:
+            - with missing types
+            - existing on WinRT
+            </summary>
+        </member>
+        <member name="T:ProtoBuf.ImplicitFields">
+            <summary>
+            Specifies the method used to infer field tags for members of the type
+            under consideration. Tags are deduced using the invariant alphabetic
+            sequence of the members' names; this makes implicit field tags very brittle,
+            and susceptible to changes such as field names (normally an isolated
+            change).
+            </summary>
+        </member>
+        <member name="F:ProtoBuf.ImplicitFields.None">
+            <summary>
+            No members are serialized implicitly; all members require a suitable
+            attribute such as [ProtoMember]. This is the recmomended mode for
+            most scenarios.
+            </summary>
+        </member>
+        <member name="F:ProtoBuf.ImplicitFields.AllPublic">
+            <summary>
+            Public properties and fields are eligible for implicit serialization;
+            this treats the public API as a contract. Ordering beings from ImplicitFirstTag.
+            </summary>
+        </member>
+        <member name="F:ProtoBuf.ImplicitFields.AllFields">
+            <summary>
+            Public and non-public fields are eligible for implicit serialization;
+            this acts as a state/implementation serializer. Ordering beings from ImplicitFirstTag.
+            </summary>
+        </member>
+        <member name="T:ProtoBuf.Meta.CallbackSet">
+            <summary>
+            Represents the set of serialization callbacks to be used when serializing/deserializing a type.
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.Meta.CallbackSet.BeforeSerialize">
+            <summary>Called before serializing an instance</summary>
+        </member>
+        <member name="P:ProtoBuf.Meta.CallbackSet.BeforeDeserialize">
+            <summary>Called before deserializing an instance</summary>
+        </member>
+        <member name="P:ProtoBuf.Meta.CallbackSet.AfterSerialize">
+            <summary>Called after serializing an instance</summary>
+        </member>
+        <member name="P:ProtoBuf.Meta.CallbackSet.AfterDeserialize">
+            <summary>Called after deserializing an instance</summary>
+        </member>
+        <member name="P:ProtoBuf.Meta.CallbackSet.NonTrivial">
+            <summary>
+            True if any callback is set, else False
+            </summary>
+        </member>
+        <member name="T:ProtoBuf.Meta.MetaType">
+            <summary>
+            Represents a type at runtime for use with protobuf, allowing the field mappings (etc) to be defined
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.Meta.MetaType.ToString">
+            <summary>
+            Get the name of the type being represented
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.Meta.MetaType.AddSubType(System.Int32,System.Type)">
+            <summary>
+            Adds a known sub-type to the inheritance model
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.Meta.MetaType.AddSubType(System.Int32,System.Type,ProtoBuf.DataFormat)">
+            <summary>
+            Adds a known sub-type to the inheritance model
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.Meta.MetaType.SetCallbacks(System.Reflection.MethodInfo,System.Reflection.MethodInfo,System.Reflection.MethodInfo,System.Reflection.MethodInfo)">
+            <summary>
+            Assigns the callbacks to use during serialiation/deserialization.
+            </summary>
+            <param name="beforeSerialize">The method (or null) called before serialization begins.</param>
+            <param name="afterSerialize">The method (or null) called when serialization is complete.</param>
+            <param name="beforeDeserialize">The method (or null) called before deserialization begins (or when a new instance is created during deserialization).</param>
+            <param name="afterDeserialize">The method (or null) called when deserialization is complete.</param>
+            <returns>The set of callbacks.</returns>
+        </member>
+        <member name="M:ProtoBuf.Meta.MetaType.SetCallbacks(System.String,System.String,System.String,System.String)">
+            <summary>
+            Assigns the callbacks to use during serialiation/deserialization.
+            </summary>
+            <param name="beforeSerialize">The name of the method (or null) called before serialization begins.</param>
+            <param name="afterSerialize">The name of the method (or null) called when serialization is complete.</param>
+            <param name="beforeDeserialize">The name of the method (or null) called before deserialization begins (or when a new instance is created during deserialization).</param>
+            <param name="afterDeserialize">The name of the method (or null) called when deserialization is complete.</param>
+            <returns>The set of callbacks.</returns>
+        </member>
+        <member name="M:ProtoBuf.Meta.MetaType.SetFactory(System.Reflection.MethodInfo)">
+            <summary>
+            Designate a factory-method to use to create instances of this type
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.Meta.MetaType.SetFactory(System.String)">
+            <summary>
+            Designate a factory-method to use to create instances of this type
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.Meta.MetaType.ThrowIfFrozen">
+            <summary>
+            Throws an exception if the type has been made immutable
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.Meta.MetaType.Add(System.Int32,System.String)">
+            <summary>
+            Adds a member (by name) to the MetaType
+            </summary>        
+        </member>
+        <member name="M:ProtoBuf.Meta.MetaType.AddField(System.Int32,System.String)">
+            <summary>
+            Adds a member (by name) to the MetaType, returning the ValueMember rather than the fluent API.
+            This is otherwise identical to Add.
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.Meta.MetaType.Add(System.String)">
+            <summary>
+            Adds a member (by name) to the MetaType
+            </summary>     
+        </member>
+        <member name="M:ProtoBuf.Meta.MetaType.SetSurrogate(System.Type)">
+            <summary>
+            Performs serialization of this type via a surrogate; all
+            other serialization options are ignored and handled
+            by the surrogate's configuration.
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.Meta.MetaType.Add(System.String[])">
+            <summary>
+            Adds a set of members (by name) to the MetaType
+            </summary>     
+        </member>
+        <member name="M:ProtoBuf.Meta.MetaType.Add(System.Int32,System.String,System.Object)">
+            <summary>
+            Adds a member (by name) to the MetaType
+            </summary>        
+        </member>
+        <member name="M:ProtoBuf.Meta.MetaType.Add(System.Int32,System.String,System.Type,System.Type)">
+            <summary>
+            Adds a member (by name) to the MetaType, including an itemType and defaultType for representing lists
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.Meta.MetaType.AddField(System.Int32,System.String,System.Type,System.Type)">
+            <summary>
+            Adds a member (by name) to the MetaType, including an itemType and defaultType for representing lists, returning the ValueMember rather than the fluent API.
+            This is otherwise identical to Add.
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.Meta.MetaType.GetFields">
+            <summary>
+            Returns the ValueMember instances associated with this type
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.Meta.MetaType.GetSubtypes">
+            <summary>
+            Returns the SubType instances associated with this type
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.Meta.MetaType.CompileInPlace">
+            <summary>
+            Compiles the serializer for this type; this is *not* a full
+            standalone compile, but can significantly boost performance
+            while allowing additional types to be added.
+            </summary>
+            <remarks>An in-place compile can access non-public types / members</remarks>
+        </member>
+        <member name="P:ProtoBuf.Meta.MetaType.BaseType">
+            <summary>
+            Gets the base-type for this type
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.Meta.MetaType.IncludeSerializerMethod">
+            <summary>
+            When used to compile a model, should public serialization/deserialzation methods
+            be included for this type?
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.Meta.MetaType.AsReferenceDefault">
+            <summary>
+            Should this type be treated as a reference by default?
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.Meta.MetaType.HasCallbacks">
+            <summary>
+            Indicates whether the current type has defined callbacks 
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.Meta.MetaType.HasSubtypes">
+            <summary>
+            Indicates whether the current type has defined subtypes
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.Meta.MetaType.Callbacks">
+            <summary>
+            Returns the set of callbacks defined for this type
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.Meta.MetaType.Name">
+            <summary>
+            Gets or sets the name of this contract.
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.Meta.MetaType.Type">
+            <summary>
+            The runtime type that the meta-type represents
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.Meta.MetaType.UseConstructor">
+            <summary>
+            Gets or sets whether the type should use a parameterless constructor (the default),
+            or whether the type should skip the constructor completely. This option is not supported
+            on compact-framework.
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.Meta.MetaType.ConstructType">
+            <summary>
+            The concrete type to create when a new instance of this type is needed; this may be useful when dealing
+            with dynamic proxies, or with interface-based APIs
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.Meta.MetaType.Item(System.Int32)">
+            <summary>
+            Returns the ValueMember that matchs a given field number, or null if not found
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.Meta.MetaType.Item(System.Reflection.MemberInfo)">
+            <summary>
+            Returns the ValueMember that matchs a given member (property/field), or null if not found
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.Meta.MetaType.EnumPassthru">
+            <summary>
+            Gets or sets a value indicating that an enum should be treated directly as an int/short/etc, rather
+            than enforcing .proto enum rules. This is useful *in particul* for [Flags] enums.
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.Meta.MetaType.IgnoreListHandling">
+            <summary>
+            Gets or sets a value indicating that this type should NOT be treated as a list, even if it has
+            familiar list-like characteristics (enumerable, add, etc)
+            </summary>
+        </member>
+        <member name="T:ProtoBuf.Meta.RuntimeTypeModel">
+            <summary>
+            Provides protobuf serialization support for a number of types that can be defined at runtime
+            </summary>
+        </member>
+        <member name="T:ProtoBuf.Meta.TypeModel">
+            <summary>
+            Provides protobuf serialization support for a number of types
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.Meta.TypeModel.MapType(System.Type)">
+            <summary>
+            Resolve a System.Type to the compiler-specific type
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.Meta.TypeModel.MapType(System.Type,System.Boolean)">
+            <summary>
+            Resolve a System.Type to the compiler-specific type
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.Meta.TypeModel.TrySerializeAuxiliaryType(ProtoBuf.ProtoWriter,System.Type,ProtoBuf.DataFormat,System.Int32,System.Object,System.Boolean)">
+            <summary>
+            This is the more "complete" version of Serialize, which handles single instances of mapped types.
+            The value is written as a complete field, including field-header and (for sub-objects) a
+            length-prefix
+            In addition to that, this provides support for:
+             - basic values; individual int / string / Guid / etc
+             - IEnumerable sequences of any type handled by TrySerializeAuxiliaryType
+             
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.Meta.TypeModel.Serialize(System.IO.Stream,System.Object)">
+            <summary>
+            Writes a protocol-buffer representation of the given instance to the supplied stream.
+            </summary>
+            <param name="value">The existing instance to be serialized (cannot be null).</param>
+            <param name="dest">The destination stream to write to.</param>
+        </member>
+        <member name="M:ProtoBuf.Meta.TypeModel.Serialize(System.IO.Stream,System.Object,ProtoBuf.SerializationContext)">
+            <summary>
+            Writes a protocol-buffer representation of the given instance to the supplied stream.
+            </summary>
+            <param name="value">The existing instance to be serialized (cannot be null).</param>
+            <param name="dest">The destination stream to write to.</param>
+            <param name="context">Additional information about this serialization operation.</param>
+        </member>
+        <member name="M:ProtoBuf.Meta.TypeModel.Serialize(ProtoBuf.ProtoWriter,System.Object)">
+            <summary>
+            Writes a protocol-buffer representation of the given instance to the supplied writer.
+            </summary>
+            <param name="value">The existing instance to be serialized (cannot be null).</param>
+            <param name="dest">The destination writer to write to.</param>
+        </member>
+        <member name="M:ProtoBuf.Meta.TypeModel.DeserializeWithLengthPrefix(System.IO.Stream,System.Object,System.Type,ProtoBuf.PrefixStyle,System.Int32)">
+            <summary>
+            Applies a protocol-buffer stream to an existing instance (or null), using length-prefixed
+            data - useful with network IO.
+            </summary>
+            <param name="type">The type being merged.</param>
+            <param name="value">The existing instance to be modified (can be null).</param>
+            <param name="source">The binary stream to apply to the instance (cannot be null).</param>
+            <param name="style">How to encode the length prefix.</param>
+            <param name="fieldNumber">The tag used as a prefix to each record (only used with base-128 style prefixes).</param>
+            <returns>The updated instance; this may be different to the instance argument if
+            either the original instance was null, or the stream defines a known sub-type of the
+            original instance.</returns>
+        </member>
+        <member name="M:ProtoBuf.Meta.TypeModel.DeserializeWithLengthPrefix(System.IO.Stream,System.Object,System.Type,ProtoBuf.PrefixStyle,System.Int32,ProtoBuf.Serializer.TypeResolver)">
+            <summary>
+            Applies a protocol-buffer stream to an existing instance (or null), using length-prefixed
+            data - useful with network IO.
+            </summary>
+            <param name="type">The type being merged.</param>
+            <param name="value">The existing instance to be modified (can be null).</param>
+            <param name="source">The binary stream to apply to the instance (cannot be null).</param>
+            <param name="style">How to encode the length prefix.</param>
+            <param name="expectedField">The tag used as a prefix to each record (only used with base-128 style prefixes).</param>
+            <param name="resolver">Used to resolve types on a per-field basis.</param>
+            <returns>The updated instance; this may be different to the instance argument if
+            either the original instance was null, or the stream defines a known sub-type of the
+            original instance.</returns>
+        </member>
+        <member name="M:ProtoBuf.Meta.TypeModel.DeserializeWithLengthPrefix(System.IO.Stream,System.Object,System.Type,ProtoBuf.PrefixStyle,System.Int32,ProtoBuf.Serializer.TypeResolver,System.Int32@)">
+            <summary>
+            Applies a protocol-buffer stream to an existing instance (or null), using length-prefixed
+            data - useful with network IO.
+            </summary>
+            <param name="type">The type being merged.</param>
+            <param name="value">The existing instance to be modified (can be null).</param>
+            <param name="source">The binary stream to apply to the instance (cannot be null).</param>
+            <param name="style">How to encode the length prefix.</param>
+            <param name="expectedField">The tag used as a prefix to each record (only used with base-128 style prefixes).</param>
+            <param name="resolver">Used to resolve types on a per-field basis.</param>
+            <param name="bytesRead">Returns the number of bytes consumed by this operation (includes length-prefix overheads and any skipped data).</param>
+            <returns>The updated instance; this may be different to the instance argument if
+            either the original instance was null, or the stream defines a known sub-type of the
+            original instance.</returns>
+        </member>
+        <member name="M:ProtoBuf.Meta.TypeModel.DeserializeItems(System.IO.Stream,System.Type,ProtoBuf.PrefixStyle,System.Int32,ProtoBuf.Serializer.TypeResolver)">
+            <summary>
+            Reads a sequence of consecutive length-prefixed items from a stream, using
+            either base-128 or fixed-length prefixes. Base-128 prefixes with a tag
+            are directly comparable to serializing multiple items in succession
+            (use the <see cref="F:ProtoBuf.Serializer.ListItemTag"/> tag to emulate the implicit behavior
+            when serializing a list/array). When a tag is
+            specified, any records with different tags are silently omitted. The
+            tag is ignored. The tag is ignores for fixed-length prefixes.
+            </summary>
+            <param name="source">The binary stream containing the serialized records.</param>
+            <param name="style">The prefix style used in the data.</param>
+            <param name="expectedField">The tag of records to return (if non-positive, then no tag is
+            expected and all records are returned).</param>
+            <param name="resolver">On a field-by-field basis, the type of object to deserialize (can be null if "type" is specified). </param>
+            <param name="type">The type of object to deserialize (can be null if "resolver" is specified).</param>
+            <returns>The sequence of deserialized objects.</returns>
+        </member>
+        <member name="M:ProtoBuf.Meta.TypeModel.DeserializeItems(System.IO.Stream,System.Type,ProtoBuf.PrefixStyle,System.Int32,ProtoBuf.Serializer.TypeResolver,ProtoBuf.SerializationContext)">
+            <summary>
+            Reads a sequence of consecutive length-prefixed items from a stream, using
+            either base-128 or fixed-length prefixes. Base-128 prefixes with a tag
+            are directly comparable to serializing multiple items in succession
+            (use the <see cref="F:ProtoBuf.Serializer.ListItemTag"/> tag to emulate the implicit behavior
+            when serializing a list/array). When a tag is
+            specified, any records with different tags are silently omitted. The
+            tag is ignored. The tag is ignores for fixed-length prefixes.
+            </summary>
+            <param name="source">The binary stream containing the serialized records.</param>
+            <param name="style">The prefix style used in the data.</param>
+            <param name="expectedField">The tag of records to return (if non-positive, then no tag is
+            expected and all records are returned).</param>
+            <param name="resolver">On a field-by-field basis, the type of object to deserialize (can be null if "type" is specified). </param>
+            <param name="type">The type of object to deserialize (can be null if "resolver" is specified).</param>
+            <returns>The sequence of deserialized objects.</returns>
+            <param name="context">Additional information about this serialization operation.</param>
+        </member>
+        <member name="M:ProtoBuf.Meta.TypeModel.DeserializeItems``1(System.IO.Stream,ProtoBuf.PrefixStyle,System.Int32)">
+            <summary>
+            Reads a sequence of consecutive length-prefixed items from a stream, using
+            either base-128 or fixed-length prefixes. Base-128 prefixes with a tag
+            are directly comparable to serializing multiple items in succession
+            (use the <see cref="F:ProtoBuf.Serializer.ListItemTag"/> tag to emulate the implicit behavior
+            when serializing a list/array). When a tag is
+            specified, any records with different tags are silently omitted. The
+            tag is ignored. The tag is ignores for fixed-length prefixes.
+            </summary>
+            <typeparam name="T">The type of object to deserialize.</typeparam>
+            <param name="source">The binary stream containing the serialized records.</param>
+            <param name="style">The prefix style used in the data.</param>
+            <param name="expectedField">The tag of records to return (if non-positive, then no tag is
+            expected and all records are returned).</param>
+            <returns>The sequence of deserialized objects.</returns>
+        </member>
+        <member name="M:ProtoBuf.Meta.TypeModel.DeserializeItems``1(System.IO.Stream,ProtoBuf.PrefixStyle,System.Int32,ProtoBuf.SerializationContext)">
+            <summary>
+            Reads a sequence of consecutive length-prefixed items from a stream, using
+            either base-128 or fixed-length prefixes. Base-128 prefixes with a tag
+            are directly comparable to serializing multiple items in succession
+            (use the <see cref="F:ProtoBuf.Serializer.ListItemTag"/> tag to emulate the implicit behavior
+            when serializing a list/array). When a tag is
+            specified, any records with different tags are silently omitted. The
+            tag is ignored. The tag is ignores for fixed-length prefixes.
+            </summary>
+            <typeparam name="T">The type of object to deserialize.</typeparam>
+            <param name="source">The binary stream containing the serialized records.</param>
+            <param name="style">The prefix style used in the data.</param>
+            <param name="expectedField">The tag of records to return (if non-positive, then no tag is
+            expected and all records are returned).</param>
+            <returns>The sequence of deserialized objects.</returns>
+            <param name="context">Additional information about this serialization operation.</param>
+        </member>
+        <member name="M:ProtoBuf.Meta.TypeModel.SerializeWithLengthPrefix(System.IO.Stream,System.Object,System.Type,ProtoBuf.PrefixStyle,System.Int32)">
+            <summary>
+            Writes a protocol-buffer representation of the given instance to the supplied stream,
+            with a length-prefix. This is useful for socket programming,
+            as DeserializeWithLengthPrefix can be used to read the single object back
+            from an ongoing stream.
+            </summary>
+            <param name="type">The type being serialized.</param>
+            <param name="value">The existing instance to be serialized (cannot be null).</param>
+            <param name="style">How to encode the length prefix.</param>
+            <param name="dest">The destination stream to write to.</param>
+            <param name="fieldNumber">The tag used as a prefix to each record (only used with base-128 style prefixes).</param>
+        </member>
+        <member name="M:ProtoBuf.Meta.TypeModel.SerializeWithLengthPrefix(System.IO.Stream,System.Object,System.Type,ProtoBuf.PrefixStyle,System.Int32,ProtoBuf.SerializationContext)">
+            <summary>
+            Writes a protocol-buffer representation of the given instance to the supplied stream,
+            with a length-prefix. This is useful for socket programming,
+            as DeserializeWithLengthPrefix can be used to read the single object back
+            from an ongoing stream.
+            </summary>
+            <param name="type">The type being serialized.</param>
+            <param name="value">The existing instance to be serialized (cannot be null).</param>
+            <param name="style">How to encode the length prefix.</param>
+            <param name="dest">The destination stream to write to.</param>
+            <param name="fieldNumber">The tag used as a prefix to each record (only used with base-128 style prefixes).</param>
+            <param name="context">Additional information about this serialization operation.</param>
+        </member>
+        <member name="M:ProtoBuf.Meta.TypeModel.Deserialize(System.IO.Stream,System.Object,System.Type)">
+            <summary>
+            Applies a protocol-buffer stream to an existing instance (which may be null).
+            </summary>
+            <param name="type">The type (including inheritance) to consider.</param>
+            <param name="value">The existing instance to be modified (can be null).</param>
+            <param name="source">The binary stream to apply to the instance (cannot be null).</param>
+            <returns>The updated instance; this may be different to the instance argument if
+            either the original instance was null, or the stream defines a known sub-type of the
+            original instance.</returns>
+        </member>
+        <member name="M:ProtoBuf.Meta.TypeModel.Deserialize(System.IO.Stream,System.Object,System.Type,ProtoBuf.SerializationContext)">
+            <summary>
+            Applies a protocol-buffer stream to an existing instance (which may be null).
+            </summary>
+            <param name="type">The type (including inheritance) to consider.</param>
+            <param name="value">The existing instance to be modified (can be null).</param>
+            <param name="source">The binary stream to apply to the instance (cannot be null).</param>
+            <returns>The updated instance; this may be different to the instance argument if
+            either the original instance was null, or the stream defines a known sub-type of the
+            original instance.</returns>
+            <param name="context">Additional information about this serialization operation.</param>
+        </member>
+        <member name="M:ProtoBuf.Meta.TypeModel.Deserialize(System.IO.Stream,System.Object,System.Type,System.Int32)">
+            <summary>
+            Applies a protocol-buffer stream to an existing instance (which may be null).
+            </summary>
+            <param name="type">The type (including inheritance) to consider.</param>
+            <param name="value">The existing instance to be modified (can be null).</param>
+            <param name="source">The binary stream to apply to the instance (cannot be null).</param>
+            <param name="length">The number of bytes to consume.</param>
+            <returns>The updated instance; this may be different to the instance argument if
+            either the original instance was null, or the stream defines a known sub-type of the
+            original instance.</returns>
+        </member>
+        <member name="M:ProtoBuf.Meta.TypeModel.Deserialize(System.IO.Stream,System.Object,System.Type,System.Int32,ProtoBuf.SerializationContext)">
+            <summary>
+            Applies a protocol-buffer stream to an existing instance (which may be null).
+            </summary>
+            <param name="type">The type (including inheritance) to consider.</param>
+            <param name="value">The existing instance to be modified (can be null).</param>
+            <param name="source">The binary stream to apply to the instance (cannot be null).</param>
+            <param name="length">The number of bytes to consume (or -1 to read to the end of the stream).</param>
+            <returns>The updated instance; this may be different to the instance argument if
+            either the original instance was null, or the stream defines a known sub-type of the
+            original instance.</returns>
+            <param name="context">Additional information about this serialization operation.</param>
+        </member>
+        <member name="M:ProtoBuf.Meta.TypeModel.Deserialize(ProtoBuf.ProtoReader,System.Object,System.Type)">
+            <summary>
+            Applies a protocol-buffer reader to an existing instance (which may be null).
+            </summary>
+            <param name="type">The type (including inheritance) to consider.</param>
+            <param name="value">The existing instance to be modified (can be null).</param>
+            <param name="source">The reader to apply to the instance (cannot be null).</param>
+            <returns>The updated instance; this may be different to the instance argument if
+            either the original instance was null, or the stream defines a known sub-type of the
+            original instance.</returns>
+        </member>
+        <member name="M:ProtoBuf.Meta.TypeModel.TryDeserializeAuxiliaryType(ProtoBuf.ProtoReader,ProtoBuf.DataFormat,System.Int32,System.Type,System.Object@,System.Boolean,System.Boolean,System.Boolean,System.Boolean)">
+            <summary>
+            This is the more "complete" version of Deserialize, which handles single instances of mapped types.
+            The value is read as a complete field, including field-header and (for sub-objects) a
+            length-prefix..kmc  
+            
+            In addition to that, this provides support for:
+             - basic values; individual int / string / Guid / etc
+             - IList sets of any type handled by TryDeserializeAuxiliaryType
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.Meta.TypeModel.Create">
+            <summary>
+            Creates a new runtime model, to which the caller
+            can add support for a range of types. A model
+            can be used "as is", or can be compiled for
+            optimal performance.
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.Meta.TypeModel.ResolveProxies(System.Type)">
+            <summary>
+            Applies common proxy scenarios, resolving the actual type to consider
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.Meta.TypeModel.IsDefined(System.Type)">
+            <summary>
+            Indicates whether the supplied type is explicitly modelled by the model
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.Meta.TypeModel.GetKey(System.Type@)">
+            <summary>
+            Provides the key that represents a given type in the current model.
+            The type is also normalized for proxies at the same time.
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.Meta.TypeModel.GetKeyImpl(System.Type)">
+            <summary>
+            Provides the key that represents a given type in the current model.
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.Meta.TypeModel.Serialize(System.Int32,System.Object,ProtoBuf.ProtoWriter)">
+            <summary>
+            Writes a protocol-buffer representation of the given instance to the supplied stream.
+            </summary>
+            <param name="key">Represents the type (including inheritance) to consider.</param>
+            <param name="value">The existing instance to be serialized (cannot be null).</param>
+            <param name="dest">The destination stream to write to.</param>
+        </member>
+        <member name="M:ProtoBuf.Meta.TypeModel.Deserialize(System.Int32,System.Object,ProtoBuf.ProtoReader)">
+            <summary>
+            Applies a protocol-buffer stream to an existing instance (which may be null).
+            </summary>
+            <param name="key">Represents the type (including inheritance) to consider.</param>
+            <param name="value">The existing instance to be modified (can be null).</param>
+            <param name="source">The binary stream to apply to the instance (cannot be null).</param>
+            <returns>The updated instance; this may be different to the instance argument if
+            either the original instance was null, or the stream defines a known sub-type of the
+            original instance.</returns>
+        </member>
+        <member name="M:ProtoBuf.Meta.TypeModel.DeepClone(System.Object)">
+            <summary>
+            Create a deep clone of the supplied instance; any sub-items are also cloned.
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.Meta.TypeModel.ThrowUnexpectedSubtype(System.Type,System.Type)">
+            <summary>
+            Indicates that while an inheritance tree exists, the exact type encountered was not
+            specified in that hierarchy and cannot be processed.
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.Meta.TypeModel.ThrowUnexpectedType(System.Type)">
+            <summary>
+            Indicates that the given type was not expected, and cannot be processed.
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.Meta.TypeModel.ThrowCannotCreateInstance(System.Type)">
+            <summary>
+            Indicates that the given type cannot be constructed; it may still be possible to 
+            deserialize into existing instances.
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.Meta.TypeModel.CanSerializeContractType(System.Type)">
+            <summary>
+            Returns true if the type supplied is either a recognised contract type,
+            or a *list* of a recognised contract type. 
+            </summary>
+            <remarks>Note that primitives always return false, even though the engine
+            will, if forced, try to serialize such</remarks>
+            <returns>True if this type is recognised as a serializable entity, else false</returns>
+        </member>
+        <member name="M:ProtoBuf.Meta.TypeModel.CanSerialize(System.Type)">
+            <summary>
+            Returns true if the type supplied is a basic type with inbuilt handling,
+            a recognised contract type, or a *list* of a basic / contract type. 
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.Meta.TypeModel.CanSerializeBasicType(System.Type)">
+            <summary>
+            Returns true if the type supplied is a basic type with inbuilt handling,
+            or a *list* of a basic type with inbuilt handling
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.Meta.TypeModel.GetSchema(System.Type)">
+            <summary>
+            Suggest a .proto definition for the given type
+            </summary>
+            <param name="type">The type to generate a .proto definition for, or <c>null</c> to generate a .proto that represents the entire model</param>
+            <returns>The .proto definition as a string</returns>
+        </member>
+        <member name="M:ProtoBuf.Meta.TypeModel.CreateFormatter(System.Type)">
+            <summary>
+            Creates a new IFormatter that uses protocol-buffer [de]serialization.
+            </summary>
+            <returns>A new IFormatter to be used during [de]serialization.</returns>
+            <param name="type">The type of object to be [de]deserialized by the formatter.</param>
+        </member>
+        <member name="E:ProtoBuf.Meta.TypeModel.DynamicTypeFormatting">
+            <summary>
+            Used to provide custom services for writing and parsing type names when using dynamic types. Both parsing and formatting
+            are provided on a single API as it is essential that both are mapped identically at all times.
+            </summary>
+        </member>
+        <member name="T:ProtoBuf.Meta.TypeModel.CallbackType">
+            <summary>
+            Indicates the type of callback to be used
+            </summary>
+        </member>
+        <member name="F:ProtoBuf.Meta.TypeModel.CallbackType.BeforeSerialize">
+            <summary>
+            Invoked before an object is serialized
+            </summary>
+        </member>
+        <member name="F:ProtoBuf.Meta.TypeModel.CallbackType.AfterSerialize">
+            <summary>
+            Invoked after an object is serialized
+            </summary>
+        </member>
+        <member name="F:ProtoBuf.Meta.TypeModel.CallbackType.BeforeDeserialize">
+            <summary>
+            Invoked before an object is deserialized (or when a new instance is created)
+            </summary>            
+        </member>
+        <member name="F:ProtoBuf.Meta.TypeModel.CallbackType.AfterDeserialize">
+            <summary>
+            Invoked after an object is deserialized
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.Meta.RuntimeTypeModel.GetTypes">
+            <summary>
+            Returns a sequence of the Type instances that can be
+            processed by this model.
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.Meta.RuntimeTypeModel.GetSchema(System.Type)">
+            <summary>
+            Suggest a .proto definition for the given type
+            </summary>
+            <param name="type">The type to generate a .proto definition for, or <c>null</c> to generate a .proto that represents the entire model</param>
+            <returns>The .proto definition as a string</returns>
+        </member>
+        <member name="M:ProtoBuf.Meta.RuntimeTypeModel.Add(System.Type,System.Boolean)">
+            <summary>
+            Adds support for an additional type in this model, optionally
+            appplying inbuilt patterns. If the type is already known to the
+            model, the existing type is returned **without** applying
+            any additional behaviour.
+            </summary>
+            <remarks>Inbuilt patterns include:
+            [ProtoContract]/[ProtoMember(n)]
+            [DataContract]/[DataMember(Order=n)]
+            [XmlType]/[XmlElement(Order=n)]
+            [On{Des|S}erializ{ing|ed}]
+            ShouldSerialize*/*Specified
+            </remarks>
+            <param name="type">The type to be supported</param>
+            <param name="applyDefaultBehaviour">Whether to apply the inbuilt configuration patterns (via attributes etc), or
+            just add the type with no additional configuration (the type must then be manually configured).</param>
+            <returns>The MetaType representing this type, allowing
+            further configuration.</returns>
+        </member>
+        <member name="M:ProtoBuf.Meta.RuntimeTypeModel.ThrowIfFrozen">
+            <summary>
+            Verifies that the model is still open to changes; if not, an exception is thrown
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.Meta.RuntimeTypeModel.Freeze">
+            <summary>
+            Prevents further changes to this model
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.Meta.RuntimeTypeModel.GetKeyImpl(System.Type)">
+            <summary>
+            Provides the key that represents a given type in the current model.
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.Meta.RuntimeTypeModel.Serialize(System.Int32,System.Object,ProtoBuf.ProtoWriter)">
+            <summary>
+            Writes a protocol-buffer representation of the given instance to the supplied stream.
+            </summary>
+            <param name="key">Represents the type (including inheritance) to consider.</param>
+            <param name="value">The existing instance to be serialized (cannot be null).</param>
+            <param name="dest">The destination stream to write to.</param>
+        </member>
+        <member name="M:ProtoBuf.Meta.RuntimeTypeModel.Deserialize(System.Int32,System.Object,ProtoBuf.ProtoReader)">
+            <summary>
+            Applies a protocol-buffer stream to an existing instance (which may be null).
+            </summary>
+            <param name="key">Represents the type (including inheritance) to consider.</param>
+            <param name="value">The existing instance to be modified (can be null).</param>
+            <param name="source">The binary stream to apply to the instance (cannot be null).</param>
+            <returns>The updated instance; this may be different to the instance argument if
+            either the original instance was null, or the stream defines a known sub-type of the
+            original instance.</returns>
+        </member>
+        <member name="M:ProtoBuf.Meta.RuntimeTypeModel.CompileInPlace">
+            <summary>
+            Compiles the serializers individually; this is *not* a full
+            standalone compile, but can significantly boost performance
+            while allowing additional types to be added.
+            </summary>
+            <remarks>An in-place compile can access non-public types / members</remarks>
+        </member>
+        <member name="M:ProtoBuf.Meta.RuntimeTypeModel.Compile">
+            <summary>
+            Fully compiles the current model into a static-compiled model instance
+            </summary>
+            <remarks>A full compilation is restricted to accessing public types / members</remarks>
+            <returns>An instance of the newly created compiled type-model</returns>
+        </member>
+        <member name="M:ProtoBuf.Meta.RuntimeTypeModel.Compile(System.String,System.String)">
+            <summary>
+            Fully compiles the current model into a static-compiled serialization dll
+            (the serialization dll still requires protobuf-net for support services).
+            </summary>
+            <remarks>A full compilation is restricted to accessing public types / members</remarks>
+            <param name="name">The name of the TypeModel class to create</param>
+            <param name="path">The path for the new dll</param>
+            <returns>An instance of the newly created compiled type-model</returns>
+        </member>
+        <member name="M:ProtoBuf.Meta.RuntimeTypeModel.Compile(ProtoBuf.Meta.RuntimeTypeModel.CompilerOptions)">
+            <summary>
+            Fully compiles the current model into a static-compiled serialization dll
+            (the serialization dll still requires protobuf-net for support services).
+            </summary>
+            <remarks>A full compilation is restricted to accessing public types / members</remarks>
+            <returns>An instance of the newly created compiled type-model</returns>
+        </member>
+        <member name="P:ProtoBuf.Meta.RuntimeTypeModel.InferTagFromNameDefault">
+            <summary>
+            Global default that
+            enables/disables automatic tag generation based on the existing name / order
+            of the defined members. See <seealso cref="P:ProtoBuf.ProtoContractAttribute.InferTagFromName"/>
+            for usage and <b>important warning</b> / explanation.
+            You must set the global default before attempting to serialize/deserialize any
+            impacted type.
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.Meta.RuntimeTypeModel.AutoAddProtoContractTypesOnly">
+            <summary>
+            Global default that determines whether types are considered serializable
+            if they have [DataContract] / [XmlType]. With this enabled, <b>ONLY</b>
+            types marked as [ProtoContract] are added automatically.
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.Meta.RuntimeTypeModel.UseImplicitZeroDefaults">
+            <summary>
+            Global switch that enables or disables the implicit
+            handling of "zero defaults"; meanning: if no other default is specified,
+            it assumes bools always default to false, integers to zero, etc.
+            
+            If this is disabled, no such assumptions are made and only *explicit*
+            default values are processed. This is enabled by default to 
+            preserve similar logic to v1.
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.Meta.RuntimeTypeModel.AllowParseableTypes">
+            <summary>
+            Global switch that determines whether types with a <c>.ToString()</c> and a <c>Parse(string)</c>
+            should be serialized as strings.
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.Meta.RuntimeTypeModel.Default">
+            <summary>
+            The default model, used to support ProtoBuf.Serializer
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.Meta.RuntimeTypeModel.Item(System.Type)">
+            <summary>
+            Obtains the MetaType associated with a given Type for the current model,
+            allowing additional configuration.
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.Meta.RuntimeTypeModel.AutoCompile">
+            <summary>
+            Should serializers be compiled on demand? It may be useful
+            to disable this for debugging purposes.
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.Meta.RuntimeTypeModel.AutoAddMissingTypes">
+            <summary>
+            Should support for unexpected types be added automatically?
+            If false, an exception is thrown when unexpected types
+            are encountered.
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.Meta.RuntimeTypeModel.MetadataTimeoutMilliseconds">
+            <summary>
+            The amount of time to wait if there are concurrent metadata access operations
+            </summary>
+        </member>
+        <member name="E:ProtoBuf.Meta.RuntimeTypeModel.LockContended">
+            <summary>
+            If a lock-contention is detected, this event signals the *owner* of the lock responsible for the blockage, indicating
+            what caused the problem; this is only raised if the lock-owning code successfully completes.
+            </summary>
+        </member>
+        <member name="T:ProtoBuf.Meta.RuntimeTypeModel.CompilerOptions">
+            <summary>
+            Represents configuration options for compiling a model to 
+            a standalone assembly.
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.Meta.RuntimeTypeModel.CompilerOptions.SetFrameworkOptions(ProtoBuf.Meta.MetaType)">
+            <summary>
+            Import framework options from an existing type
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.Meta.RuntimeTypeModel.CompilerOptions.TargetFrameworkName">
+            <summary>
+            The TargetFrameworkAttribute FrameworkName value to burn into the generated assembly
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.Meta.RuntimeTypeModel.CompilerOptions.TargetFrameworkDisplayName">
+            <summary>
+            The TargetFrameworkAttribute FrameworkDisplayName value to burn into the generated assembly
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.Meta.RuntimeTypeModel.CompilerOptions.TypeName">
+            <summary>
+            The name of the TypeModel class to create
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.Meta.RuntimeTypeModel.CompilerOptions.OutputPath">
+            <summary>
+            The path for the new dll
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.Meta.RuntimeTypeModel.CompilerOptions.ImageRuntimeVersion">
+            <summary>
+            The runtime version for the generated assembly
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.Meta.RuntimeTypeModel.CompilerOptions.MetaDataVersion">
+            <summary>
+            The runtime version for the generated assembly
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.Meta.RuntimeTypeModel.CompilerOptions.Accessibility">
+            <summary>
+            The acecssibility of the generated serializer
+            </summary>
+        </member>
+        <member name="T:ProtoBuf.Meta.RuntimeTypeModel.Accessibility">
+            <summary>
+            Type accessibility
+            </summary>
+        </member>
+        <member name="F:ProtoBuf.Meta.RuntimeTypeModel.Accessibility.Public">
+            <summary>
+            Available to all callers
+            </summary>
+        </member>
+        <member name="F:ProtoBuf.Meta.RuntimeTypeModel.Accessibility.Internal">
+            <summary>
+            Available to all callers in the same assembly, or assemblies specified via [InternalsVisibleTo(...)]
+            </summary>
+        </member>
+        <member name="T:ProtoBuf.Meta.LockContentedEventArgs">
+            <summary>
+            Contains the stack-trace of the owning code when a lock-contention scenario is detected
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.Meta.LockContentedEventArgs.OwnerStackTrace">
+            <summary>
+            The stack-trace of the code that owned the lock when a lock-contention scenario occurred
+            </summary>
+        </member>
+        <member name="T:ProtoBuf.Meta.LockContentedEventHandler">
+            <summary>
+            Event-type that is raised when a lock-contention scenario is detected
+            </summary>
+        </member>
+        <member name="T:ProtoBuf.Meta.SubType">
+            <summary>
+            Represents an inherited type in a type hierarchy.
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.Meta.SubType.#ctor(System.Int32,ProtoBuf.Meta.MetaType,ProtoBuf.DataFormat)">
+            <summary>
+            Creates a new SubType instance.
+            </summary>
+            <param name="fieldNumber">The field-number that is used to encapsulate the data (as a nested
+            message) for the derived dype.</param>
+            <param name="derivedType">The sub-type to be considered.</param>
+            <param name="format">Specific encoding style to use; in particular, Grouped can be used to avoid buffering, but is not the default.</param>
+        </member>
+        <member name="P:ProtoBuf.Meta.SubType.FieldNumber">
+            <summary>
+            The field-number that is used to encapsulate the data (as a nested
+            message) for the derived dype.
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.Meta.SubType.DerivedType">
+            <summary>
+            The sub-type to be considered.
+            </summary>
+        </member>
+        <member name="T:ProtoBuf.Meta.TypeFormatEventArgs">
+            <summary>
+            Event arguments needed to perform type-formatting functions; this could be resolving a Type to a string suitable for serialization, or could
+            be requesting a Type from a string. If no changes are made, a default implementation will be used (from the assembly-qualified names).
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.Meta.TypeFormatEventArgs.Type">
+            <summary>
+            The type involved in this map; if this is initially null, a Type is expected to be provided for the string in FormattedName.
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.Meta.TypeFormatEventArgs.FormattedName">
+            <summary>
+            The formatted-name involved in this map; if this is initially null, a formatted-name is expected from the type in Type.
+            </summary>
+        </member>
+        <member name="T:ProtoBuf.Meta.TypeFormatEventHandler">
+            <summary>
+            Delegate type used to perform type-formatting functions; the sender originates as the type-model.
+            </summary>
+        </member>
+        <member name="T:ProtoBuf.Meta.ValueMember">
+            <summary>
+            Represents a member (property/field) that is mapped to a protobuf field
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.Meta.ValueMember.#ctor(ProtoBuf.Meta.RuntimeTypeModel,System.Type,System.Int32,System.Reflection.MemberInfo,System.Type,System.Type,System.Type,ProtoBuf.DataFormat,System.Object)">
+            <summary>
+            Creates a new ValueMember instance
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.Meta.ValueMember.#ctor(ProtoBuf.Meta.RuntimeTypeModel,System.Int32,System.Type,System.Type,System.Type,ProtoBuf.DataFormat)">
+            <summary>
+            Creates a new ValueMember instance
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.Meta.ValueMember.SetSpecified(System.Reflection.MethodInfo,System.Reflection.MethodInfo)">
+            <summary>
+            Specifies methods for working with optional data members.
+            </summary>
+            <param name="getSpecified">Provides a method (null for none) to query whether this member should
+            be serialized; it must be of the form "bool {Method}()". The member is only serialized if the
+            method returns true.</param>
+            <param name="setSpecified">Provides a method (null for none) to indicate that a member was
+            deserialized; it must be of the form "void {Method}(bool)", and will be called with "true"
+            when data is found.</param>
+        </member>
+        <member name="P:ProtoBuf.Meta.ValueMember.FieldNumber">
+            <summary>
+            The number that identifies this member in a protobuf stream
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.Meta.ValueMember.Member">
+            <summary>
+            Gets the member (field/property) which this member relates to.
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.Meta.ValueMember.ItemType">
+            <summary>
+            Within a list / array / etc, the type of object for each item in the list (especially useful with ArrayList)
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.Meta.ValueMember.MemberType">
+            <summary>
+            The underlying type of the member
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.Meta.ValueMember.DefaultType">
+            <summary>
+            For abstract types (IList etc), the type of concrete object to create (if required)
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.Meta.ValueMember.ParentType">
+            <summary>
+            The type the defines the member
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.Meta.ValueMember.DefaultValue">
+            <summary>
+            The default value of the item (members with this value will not be serialized)
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.Meta.ValueMember.DataFormat">
+            <summary>
+            Specifies the rules used to process the field; this is used to determine the most appropriate
+            wite-type, but also to describe subtypes <i>within</i> that wire-type (such as SignedVariant)
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.Meta.ValueMember.IsStrict">
+            <summary>
+            Indicates whether this field should follow strict encoding rules; this means (for example) that if a "fixed32"
+            is encountered when "variant" is defined, then it will fail (throw an exception) when parsing. Note that
+            when serializing the defined type is always used.
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.Meta.ValueMember.IsPacked">
+            <summary>
+            Indicates whether this field should use packed encoding (which can save lots of space for repeated primitive values).
+            This option only applies to list/array data of primitive types (int, double, etc).
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.Meta.ValueMember.OverwriteList">
+            <summary>
+            Indicates whether this field should *repace* existing values (the default is false, meaning *append*).
+            This option only applies to list/array data.
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.Meta.ValueMember.IsRequired">
+            <summary>
+            Indicates whether this field is mandatory.
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.Meta.ValueMember.AsReference">
+            <summary>
+            Enables full object-tracking/full-graph support.
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.Meta.ValueMember.DynamicType">
+            <summary>
+            Embeds the type information into the stream, allowing usage with types not known in advance.
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.Meta.ValueMember.Name">
+            <summary>
+            Gets the logical name for this member in the schema (this is not critical for binary serialization, but may be used
+            when inferring a schema).
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.Meta.ValueMember.SupportNull">
+            <summary>
+            Should lists have extended support for null values? Note this makes the serialization less efficient.
+            </summary>
+        </member>
+        <member name="T:ProtoBuf.PrefixStyle">
+            <summary>
+            Specifies the type of prefix that should be applied to messages.
+            </summary>
+        </member>
+        <member name="F:ProtoBuf.PrefixStyle.None">
+            <summary>
+            No length prefix is applied to the data; the data is terminated only be the end of the stream.
+            </summary>
+        </member>
+        <member name="F:ProtoBuf.PrefixStyle.Base128">
+            <summary>
+            A base-128 length prefix is applied to the data (efficient for short messages).
+            </summary>
+        </member>
+        <member name="F:ProtoBuf.PrefixStyle.Fixed32">
+            <summary>
+            A fixed-length (little-endian) length prefix is applied to the data (useful for compatibility).
+            </summary>
+        </member>
+        <member name="F:ProtoBuf.PrefixStyle.Fixed32BigEndian">
+            <summary>
+            A fixed-length (big-endian) length prefix is applied to the data (useful for compatibility).
+            </summary>
+        </member>
+        <member name="T:ProtoBuf.ProtoContractAttribute">
+            <summary>
+            Indicates that a type is defined for protocol-buffer serialization.
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.ProtoContractAttribute.Name">
+            <summary>
+            Gets or sets the defined name of the type.
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.ProtoContractAttribute.ImplicitFirstTag">
+            <summary>
+            Gets or sets the fist offset to use with implicit field tags;
+            only uesd if ImplicitFields is set.
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.ProtoContractAttribute.UseProtoMembersOnly">
+            <summary>
+            If specified, alternative contract markers (such as markers for XmlSerailizer or DataContractSerializer) are ignored.
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.ProtoContractAttribute.IgnoreListHandling">
+            <summary>
+            If specified, do NOT treat this type as a list, even if it looks like one.
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.ProtoContractAttribute.ImplicitFields">
+            <summary>
+            Gets or sets the mechanism used to automatically infer field tags
+            for members. This option should be used in advanced scenarios only.
+            Please review the important notes against the ImplicitFields enumeration.
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.ProtoContractAttribute.InferTagFromName">
+            <summary>
+            Enables/disables automatic tag generation based on the existing name / order
+            of the defined members. This option is not used for members marked
+            with ProtoMemberAttribute, as intended to provide compatibility with
+            WCF serialization. WARNING: when adding new fields you must take
+            care to increase the Order for new elements, otherwise data corruption
+            may occur.
+            </summary>
+            <remarks>If not explicitly specified, the default is assumed from Serializer.GlobalOptions.InferTagFromName.</remarks>
+        </member>
+        <member name="P:ProtoBuf.ProtoContractAttribute.InferTagFromNameHasValue">
+            <summary>
+            Has a InferTagFromName value been explicitly set? if not, the default from the type-model is assumed.
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.ProtoContractAttribute.DataMemberOffset">
+            <summary>
+            Specifies an offset to apply to [DataMember(Order=...)] markers;
+            this is useful when working with mex-generated classes that have
+            a different origin (usually 1 vs 0) than the original data-contract.
+            
+            This value is added to the Order of each member.
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.ProtoContractAttribute.SkipConstructor">
+            <summary>
+            If true, the constructor for the type is bypassed during deserialization, meaning any field initializers
+            or other initialization code is skipped.
+            </summary>
+        </member>
+        <member name="T:ProtoBuf.ProtoEnumAttribute">
+            <summary>
+            Used to define protocol-buffer specific behavior for
+            enumerated values.
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.ProtoEnumAttribute.HasValue">
+            <summary>
+            Indicates whether this instance has a customised value mapping
+            </summary>
+            <returns>true if a specific value is set</returns>
+        </member>
+        <member name="P:ProtoBuf.ProtoEnumAttribute.Value">
+            <summary>
+            Gets or sets the specific value to use for this enum during serialization.
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.ProtoEnumAttribute.Name">
+            <summary>
+            Gets or sets the defined name of the enum, as used in .proto
+            (this name is not used during serialization).
+            </summary>
+        </member>
+        <member name="T:ProtoBuf.ProtoException">
+            <summary>
+            Indicates an error during serialization/deserialization of a proto stream.
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.ProtoException.#ctor">
+            <summary>Creates a new ProtoException instance.</summary>
+        </member>
+        <member name="M:ProtoBuf.ProtoException.#ctor(System.String)">
+            <summary>Creates a new ProtoException instance.</summary>
+        </member>
+        <member name="M:ProtoBuf.ProtoException.#ctor(System.String,System.Exception)">
+            <summary>Creates a new ProtoException instance.</summary>
+        </member>
+        <member name="T:ProtoBuf.ProtoIgnoreAttribute">
+            <summary>
+            Indicates that a member should be excluded from serialization; this
+            is only normally used when using implict fields.
+            </summary>
+        </member>
+        <member name="T:ProtoBuf.ProtoPartialIgnoreAttribute">
+            <summary>
+            Indicates that a member should be excluded from serialization; this
+            is only normally used when using implict fields. This allows
+            ProtoIgnoreAttribute usage
+            even for partial classes where the individual members are not
+            under direct control.
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.ProtoPartialIgnoreAttribute.#ctor(System.String)">
+            <summary>
+            Creates a new ProtoPartialIgnoreAttribute instance.
+            </summary>
+            <param name="memberName">Specifies the member to be ignored.</param>
+        </member>
+        <member name="P:ProtoBuf.ProtoPartialIgnoreAttribute.MemberName">
+            <summary>
+            The name of the member to be ignored.
+            </summary>
+        </member>
+        <member name="T:ProtoBuf.ProtoIncludeAttribute">
+            <summary>
+            Indicates the known-types to support for an individual
+            message. This serializes each level in the hierarchy as
+            a nested message to retain wire-compatibility with
+            other protocol-buffer implementations.
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.ProtoIncludeAttribute.#ctor(System.Int32,System.Type)">
+            <summary>
+             Creates a new instance of the ProtoIncludeAttribute.
+             </summary>
+             <param name="tag">The unique index (within the type) that will identify this data.</param>
+             <param name="knownType">The additional type to serialize/deserialize.</param>
+        </member>
+        <member name="M:ProtoBuf.ProtoIncludeAttribute.#ctor(System.Int32,System.String)">
+            <summary>
+            Creates a new instance of the ProtoIncludeAttribute.
+            </summary>
+            <param name="tag">The unique index (within the type) that will identify this data.</param>
+            <param name="knownTypeName">The additional type to serialize/deserialize.</param>
+        </member>
+        <member name="P:ProtoBuf.ProtoIncludeAttribute.Tag">
+            <summary>
+            Gets the unique index (within the type) that will identify this data.
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.ProtoIncludeAttribute.KnownTypeName">
+            <summary>
+            Gets the additional type to serialize/deserialize.
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.ProtoIncludeAttribute.KnownType">
+            <summary>
+            Gets the additional type to serialize/deserialize.
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.ProtoIncludeAttribute.DataFormat">
+            <summary>
+            Specifies whether the inherited sype's sub-message should be
+            written with a length-prefix (default), or with group markers.
+            </summary>
+        </member>
+        <member name="T:ProtoBuf.ProtoMemberAttribute">
+            <summary>
+            Declares a member to be used in protocol-buffer serialization, using
+            the given Tag. A DataFormat may be used to optimise the serialization
+            format (for instance, using zigzag encoding for negative numbers, or 
+            fixed-length encoding for large values.
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.ProtoMemberAttribute.CompareTo(System.Object)">
+            <summary>
+            Compare with another ProtoMemberAttribute for sorting purposes
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.ProtoMemberAttribute.CompareTo(ProtoBuf.ProtoMemberAttribute)">
+            <summary>
+            Compare with another ProtoMemberAttribute for sorting purposes
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.ProtoMemberAttribute.#ctor(System.Int32)">
+            <summary>
+            Creates a new ProtoMemberAttribute instance.
+            </summary>
+            <param name="tag">Specifies the unique tag used to identify this member within the type.</param>
+        </member>
+        <member name="P:ProtoBuf.ProtoMemberAttribute.Name">
+            <summary>
+            Gets or sets the original name defined in the .proto; not used
+            during serialization.
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.ProtoMemberAttribute.DataFormat">
+            <summary>
+            Gets or sets the data-format to be used when encoding this value.
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.ProtoMemberAttribute.Tag">
+            <summary>
+            Gets the unique tag used to identify this member within the type.
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.ProtoMemberAttribute.IsRequired">
+            <summary>
+            Gets or sets a value indicating whether this member is mandatory.
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.ProtoMemberAttribute.IsPacked">
+            <summary>
+            Gets a value indicating whether this member is packed.
+            This option only applies to list/array data of primitive types (int, double, etc).
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.ProtoMemberAttribute.OverwriteList">
+            <summary>
+            Indicates whether this field should *repace* existing values (the default is false, meaning *append*).
+            This option only applies to list/array data.
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.ProtoMemberAttribute.AsReference">
+            <summary>
+            Enables full object-tracking/full-graph support.
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.ProtoMemberAttribute.DynamicType">
+            <summary>
+            Embeds the type information into the stream, allowing usage with types not known in advance.
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.ProtoMemberAttribute.Options">
+            <summary>
+            Gets or sets a value indicating whether this member is packed (lists/arrays).
+            </summary>
+        </member>
+        <member name="T:ProtoBuf.MemberSerializationOptions">
+            <summary>
+            Additional (optional) settings that control serialization of members
+            </summary>
+        </member>
+        <member name="F:ProtoBuf.MemberSerializationOptions.None">
+            <summary>
+            Default; no additional options
+            </summary>
+        </member>
+        <member name="F:ProtoBuf.MemberSerializationOptions.Packed">
+            <summary>
+            Indicates that repeated elements should use packed (length-prefixed) encoding
+            </summary>
+        </member>
+        <member name="F:ProtoBuf.MemberSerializationOptions.Required">
+            <summary>
+            Indicates that the given item is required
+            </summary>
+        </member>
+        <member name="F:ProtoBuf.MemberSerializationOptions.AsReference">
+            <summary>
+            Enables full object-tracking/full-graph support
+            </summary>
+        </member>
+        <member name="F:ProtoBuf.MemberSerializationOptions.DynamicType">
+            <summary>
+            Embeds the type information into the stream, allowing usage with types not known in advance
+            </summary>
+        </member>
+        <member name="F:ProtoBuf.MemberSerializationOptions.OverwriteList">
+            <summary>
+            Indicates whether this field should *repace* existing values (the default is false, meaning *append*).
+            This option only applies to list/array data.
+            </summary>
+        </member>
+        <member name="T:ProtoBuf.ProtoPartialMemberAttribute">
+            <summary>
+            Declares a member to be used in protocol-buffer serialization, using
+            the given Tag and MemberName. This allows ProtoMemberAttribute usage
+            even for partial classes where the individual members are not
+            under direct control.
+            A DataFormat may be used to optimise the serialization
+            format (for instance, using zigzag encoding for negative numbers, or 
+            fixed-length encoding for large values.
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.ProtoPartialMemberAttribute.#ctor(System.Int32,System.String)">
+            <summary>
+            Creates a new ProtoMemberAttribute instance.
+            </summary>
+            <param name="tag">Specifies the unique tag used to identify this member within the type.</param>
+            <param name="memberName">Specifies the member to be serialized.</param>
+        </member>
+        <member name="P:ProtoBuf.ProtoPartialMemberAttribute.MemberName">
+            <summary>
+            The name of the member to be serialized.
+            </summary>
+        </member>
+        <member name="T:ProtoBuf.ProtoReader">
+            <summary>
+            A stateful reader, used to read a protobuf stream. Typical usage would be (sequentially) to call
+            ReadFieldHeader and (after matching the field) an appropriate Read* method.
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.ProtoReader.#ctor(System.IO.Stream,ProtoBuf.Meta.TypeModel,ProtoBuf.SerializationContext)">
+            <summary>
+            Creates a new reader against a stream
+            </summary>
+            <param name="source">The source stream</param>
+            <param name="model">The model to use for serialization; this can be null, but this will impair the ability to deserialize sub-objects</param>
+            <param name="context">Additional context about this serialization operation</param>
+        </member>
+        <member name="M:ProtoBuf.ProtoReader.#ctor(System.IO.Stream,ProtoBuf.Meta.TypeModel,ProtoBuf.SerializationContext,System.Int32)">
+            <summary>
+            Creates a new reader against a stream
+            </summary>
+            <param name="source">The source stream</param>
+            <param name="model">The model to use for serialization; this can be null, but this will impair the ability to deserialize sub-objects</param>
+            <param name="context">Additional context about this serialization operation</param>
+            <param name="length">The number of bytes to read, or -1 to read until the end of the stream</param>
+        </member>
+        <member name="M:ProtoBuf.ProtoReader.Dispose">
+            <summary>
+            Releases resources used by the reader, but importantly <b>does not</b> Dispose the 
+            underlying stream; in many typical use-cases the stream is used for different
+            processes, so it is assumed that the consumer will Dispose their stream separately.
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.ProtoReader.ReadUInt32">
+            <summary>
+            Reads an unsigned 32-bit integer from the stream; supported wire-types: Variant, Fixed32, Fixed64
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.ProtoReader.ReadInt16">
+            <summary>
+            Reads a signed 16-bit integer from the stream: Variant, Fixed32, Fixed64, SignedVariant
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.ProtoReader.ReadUInt16">
+            <summary>
+            Reads an unsigned 16-bit integer from the stream; supported wire-types: Variant, Fixed32, Fixed64
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.ProtoReader.ReadByte">
+            <summary>
+            Reads an unsigned 8-bit integer from the stream; supported wire-types: Variant, Fixed32, Fixed64
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.ProtoReader.ReadSByte">
+            <summary>
+            Reads a signed 8-bit integer from the stream; supported wire-types: Variant, Fixed32, Fixed64, SignedVariant
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.ProtoReader.ReadInt32">
+            <summary>
+            Reads a signed 32-bit integer from the stream; supported wire-types: Variant, Fixed32, Fixed64, SignedVariant
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.ProtoReader.ReadInt64">
+            <summary>
+            Reads a signed 64-bit integer from the stream; supported wire-types: Variant, Fixed32, Fixed64, SignedVariant
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.ProtoReader.ReadString">
+            <summary>
+            Reads a string from the stream (using UTF8); supported wire-types: String
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.ProtoReader.ThrowEnumException(System.Type,System.Int32)">
+            <summary>
+            Throws an exception indication that the given value cannot be mapped to an enum.
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.ProtoReader.ReadDouble">
+            <summary>
+            Reads a double-precision number from the stream; supported wire-types: Fixed32, Fixed64
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.ProtoReader.ReadObject(System.Object,System.Int32,ProtoBuf.ProtoReader)">
+            <summary>
+            Reads (merges) a sub-message from the stream, internally calling StartSubItem and EndSubItem, and (in between)
+            parsing the message in accordance with the model associated with the reader
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.ProtoReader.EndSubItem(ProtoBuf.SubItemToken,ProtoBuf.ProtoReader)">
+            <summary>
+            Makes the end of consuming a nested message in the stream; the stream must be either at the correct EndGroup
+            marker, or all fields of the sub-message must have been consumed (in either case, this means ReadFieldHeader
+            should return zero)
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.ProtoReader.StartSubItem(ProtoBuf.ProtoReader)">
+            <summary>
+            Begins consuming a nested message in the stream; supported wire-types: StartGroup, String
+            </summary>
+            <remarks>The token returned must be help and used when callining EndSubItem</remarks>
+        </member>
+        <member name="M:ProtoBuf.ProtoReader.ReadFieldHeader">
+            <summary>
+            Reads a field header from the stream, setting the wire-type and retuning the field number. If no
+            more fields are available, then 0 is returned. This methods respects sub-messages.
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.ProtoReader.TryReadFieldHeader(System.Int32)">
+            <summary>
+            Looks ahead to see whether the next field in the stream is what we expect
+            (typically; what we've just finished reading - for example ot read successive list items)
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.ProtoReader.Hint(ProtoBuf.WireType)">
+            <summary>
+            Compares the streams current wire-type to the hinted wire-type, updating the reader if necessary; for example,
+            a Variant may be updated to SignedVariant. If the hinted wire-type is unrelated then no change is made.
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.ProtoReader.Assert(ProtoBuf.WireType)">
+            <summary>
+            Verifies that the stream's current wire-type is as expected, or a specialized sub-type (for example,
+            SignedVariant) - in which case the current wire-type is updated. Otherwise an exception is thrown.
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.ProtoReader.SkipField">
+            <summary>
+            Discards the data for the current field.
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.ProtoReader.ReadUInt64">
+            <summary>
+            Reads an unsigned 64-bit integer from the stream; supported wire-types: Variant, Fixed32, Fixed64
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.ProtoReader.ReadSingle">
+            <summary>
+            Reads a single-precision number from the stream; supported wire-types: Fixed32, Fixed64
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.ProtoReader.ReadBoolean">
+            <summary>
+            Reads a boolean value from the stream; supported wire-types: Variant, Fixed32, Fixed64
+            </summary>
+            <returns></returns>
+        </member>
+        <member name="M:ProtoBuf.ProtoReader.AppendBytes(System.Byte[],ProtoBuf.ProtoReader)">
+            <summary>
+            Reads a byte-sequence from the stream, appending them to an existing byte-sequence (which can be null); supported wire-types: String
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.ProtoReader.ReadLengthPrefix(System.IO.Stream,System.Boolean,ProtoBuf.PrefixStyle,System.Int32@)">
+            <summary>
+            Reads the length-prefix of a message from a stream without buffering additional data, allowing a fixed-length
+            reader to be created.
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.ProtoReader.DirectReadLittleEndianInt32(System.IO.Stream)">
+            <summary>
+            Reads a little-endian encoded integer. An exception is thrown if the data is not all available.
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.ProtoReader.DirectReadBigEndianInt32(System.IO.Stream)">
+            <summary>
+            Reads a big-endian encoded integer. An exception is thrown if the data is not all available.
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.ProtoReader.DirectReadVarintInt32(System.IO.Stream)">
+            <summary>
+            Reads a varint encoded integer. An exception is thrown if the data is not all available.
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.ProtoReader.DirectReadBytes(System.IO.Stream,System.Byte[],System.Int32,System.Int32)">
+            <summary>
+            Reads a string (of a given lenth, in bytes) directly from the source into a pre-existing buffer. An exception is thrown if the data is not all available.
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.ProtoReader.DirectReadBytes(System.IO.Stream,System.Int32)">
+            <summary>
+            Reads a given number of bytes directly from the source. An exception is thrown if the data is not all available.
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.ProtoReader.DirectReadString(System.IO.Stream,System.Int32)">
+            <summary>
+            Reads a string (of a given lenth, in bytes) directly from the source. An exception is thrown if the data is not all available.
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.ProtoReader.ReadLengthPrefix(System.IO.Stream,System.Boolean,ProtoBuf.PrefixStyle,System.Int32@,System.Int32@)">
+            <summary>
+            Reads the length-prefix of a message from a stream without buffering additional data, allowing a fixed-length
+            reader to be created.
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.ProtoReader.TryReadUInt32Variant(System.IO.Stream,System.UInt32@)">
+            <returns>The number of bytes consumed; 0 if no data available</returns>
+        </member>
+        <member name="M:ProtoBuf.ProtoReader.AppendExtensionData(ProtoBuf.IExtensible)">
+            <summary>
+            Copies the current field into the instance as extension data
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.ProtoReader.HasSubValue(ProtoBuf.WireType,ProtoBuf.ProtoReader)">
+            <summary>
+            Indicates whether the reader still has data remaining in the current sub-item,
+            additionally setting the wire-type for the next field if there is more data.
+            This is used when decoding packed data.
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.ProtoReader.NoteObject(System.Object,ProtoBuf.ProtoReader)">
+            <summary>
+            Utility method, not intended for public use; this helps maintain the root object is complex scenarios
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.ProtoReader.ReadType">
+            <summary>
+            Reads a Type from the stream, using the model's DynamicTypeFormatting if appropriate; supported wire-types: String
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.ProtoReader.FieldNumber">
+            <summary>
+            Gets the number of the field being processed.
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.ProtoReader.WireType">
+            <summary>
+            Indicates the underlying proto serialization format on the wire.
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.ProtoReader.InternStrings">
+            <summary>
+            Gets / sets a flag indicating whether strings should be checked for repetition; if
+            true, any repeated UTF-8 byte sequence will result in the same String instance, rather
+            than a second instance of the same string. Enabled by default. Note that this uses
+            a <i>custom</i> interner - the system-wide string interner is not used.
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.ProtoReader.Context">
+            <summary>
+            Addition information about this deserialization operation.
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.ProtoReader.Position">
+            <summary>
+            Returns the position of the current reader (note that this is not necessarily the same as the position
+            in the underlying stream, if multiple readers are used on the same stream)
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.ProtoReader.Model">
+            <summary>
+            Get the TypeModel associated with this reader
+            </summary>
+        </member>
+        <member name="T:ProtoBuf.ProtoWriter">
+            <summary>
+            Represents an output stream for writing protobuf data.
+            
+            Why is the API backwards (static methods with writer arguments)?
+            See: http://marcgravell.blogspot.com/2010/03/last-will-be-first-and-first-will-be.html
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.ProtoWriter.WriteObject(System.Object,System.Int32,ProtoBuf.ProtoWriter)">
+            <summary>
+            Write an encapsulated sub-object, using the supplied unique key (reprasenting a type).
+            </summary>
+            <param name="value">The object to write.</param>
+            <param name="key">The key that uniquely identifies the type within the model.</param>
+            <param name="writer">The destination.</param>
+        </member>
+        <member name="M:ProtoBuf.ProtoWriter.WriteRecursionSafeObject(System.Object,System.Int32,ProtoBuf.ProtoWriter)">
+            <summary>
+            Write an encapsulated sub-object, using the supplied unique key (reprasenting a type) - but the
+            caller is asserting that this relationship is non-recursive; no recursion check will be
+            performed.
+            </summary>
+            <param name="value">The object to write.</param>
+            <param name="key">The key that uniquely identifies the type within the model.</param>
+            <param name="writer">The destination.</param>
+        </member>
+        <member name="M:ProtoBuf.ProtoWriter.WriteFieldHeader(System.Int32,ProtoBuf.WireType,ProtoBuf.ProtoWriter)">
+            <summary>
+            Writes a field-header, indicating the format of the next data we plan to write.
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.ProtoWriter.WriteBytes(System.Byte[],ProtoBuf.ProtoWriter)">
+            <summary>
+            Writes a byte-array to the stream; supported wire-types: String
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.ProtoWriter.WriteBytes(System.Byte[],System.Int32,System.Int32,ProtoBuf.ProtoWriter)">
+            <summary>
+            Writes a byte-array to the stream; supported wire-types: String
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.ProtoWriter.StartSubItem(System.Object,ProtoBuf.ProtoWriter)">
+            <summary>
+            Indicates the start of a nested record.
+            </summary>
+            <param name="instance">The instance to write.</param>
+            <param name="writer">The destination.</param>
+            <returns>A token representing the state of the stream; this token is given to EndSubItem.</returns>
+        </member>
+        <member name="M:ProtoBuf.ProtoWriter.EndSubItem(ProtoBuf.SubItemToken,ProtoBuf.ProtoWriter)">
+            <summary>
+            Indicates the end of a nested record.
+            </summary>
+            <param name="token">The token obtained from StartubItem.</param>
+            <param name="writer">The destination.</param>
+        </member>
+        <member name="M:ProtoBuf.ProtoWriter.#ctor(System.IO.Stream,ProtoBuf.Meta.TypeModel,ProtoBuf.SerializationContext)">
+            <summary>
+            Creates a new writer against a stream
+            </summary>
+            <param name="dest">The destination stream</param>
+            <param name="model">The model to use for serialization; this can be null, but this will impair the ability to serialize sub-objects</param>
+            <param name="context">Additional context about this serialization operation</param>
+        </member>
+        <member name="M:ProtoBuf.ProtoWriter.Close">
+            <summary>
+            Flushes data to the underlying stream, and releases any resources. The underlying stream is *not* disposed
+            by this operation.
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.ProtoWriter.Flush(ProtoBuf.ProtoWriter)">
+            <summary>
+            Writes any buffered data (if possible) to the underlying stream.
+            </summary>
+            <param name="writer">The writer to flush</param>
+            <remarks>It is not always possible to fully flush, since some sequences
+            may require values to be back-filled into the byte-stream.</remarks>
+        </member>
+        <member name="M:ProtoBuf.ProtoWriter.WriteUInt32Variant(System.UInt32,ProtoBuf.ProtoWriter)">
+            <summary>
+            Writes an unsigned 32-bit integer to the stream; supported wire-types: Variant, Fixed32, Fixed64
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.ProtoWriter.WriteString(System.String,ProtoBuf.ProtoWriter)">
+            <summary>
+            Writes a string to the stream; supported wire-types: String
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.ProtoWriter.WriteUInt64(System.UInt64,ProtoBuf.ProtoWriter)">
+            <summary>
+            Writes an unsigned 64-bit integer to the stream; supported wire-types: Variant, Fixed32, Fixed64
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.ProtoWriter.WriteInt64(System.Int64,ProtoBuf.ProtoWriter)">
+            <summary>
+            Writes a signed 64-bit integer to the stream; supported wire-types: Variant, Fixed32, Fixed64, SignedVariant
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.ProtoWriter.WriteUInt32(System.UInt32,ProtoBuf.ProtoWriter)">
+            <summary>
+            Writes an unsigned 16-bit integer to the stream; supported wire-types: Variant, Fixed32, Fixed64
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.ProtoWriter.WriteInt16(System.Int16,ProtoBuf.ProtoWriter)">
+            <summary>
+            Writes a signed 16-bit integer to the stream; supported wire-types: Variant, Fixed32, Fixed64, SignedVariant
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.ProtoWriter.WriteUInt16(System.UInt16,ProtoBuf.ProtoWriter)">
+            <summary>
+            Writes an unsigned 16-bit integer to the stream; supported wire-types: Variant, Fixed32, Fixed64
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.ProtoWriter.WriteByte(System.Byte,ProtoBuf.ProtoWriter)">
+            <summary>
+            Writes an unsigned 8-bit integer to the stream; supported wire-types: Variant, Fixed32, Fixed64
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.ProtoWriter.WriteSByte(System.SByte,ProtoBuf.ProtoWriter)">
+            <summary>
+            Writes a signed 8-bit integer to the stream; supported wire-types: Variant, Fixed32, Fixed64, SignedVariant
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.ProtoWriter.WriteInt32(System.Int32,ProtoBuf.ProtoWriter)">
+            <summary>
+            Writes a signed 32-bit integer to the stream; supported wire-types: Variant, Fixed32, Fixed64, SignedVariant
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.ProtoWriter.WriteDouble(System.Double,ProtoBuf.ProtoWriter)">
+            <summary>
+            Writes a double-precision number to the stream; supported wire-types: Fixed32, Fixed64
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.ProtoWriter.WriteSingle(System.Single,ProtoBuf.ProtoWriter)">
+            <summary>
+            Writes a single-precision number to the stream; supported wire-types: Fixed32, Fixed64
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.ProtoWriter.ThrowEnumException(ProtoBuf.ProtoWriter,System.Object)">
+            <summary>
+            Throws an exception indicating that the given enum cannot be mapped to a serialized value.
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.ProtoWriter.WriteBoolean(System.Boolean,ProtoBuf.ProtoWriter)">
+            <summary>
+            Writes a boolean to the stream; supported wire-types: Variant, Fixed32, Fixed64
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.ProtoWriter.AppendExtensionData(ProtoBuf.IExtensible,ProtoBuf.ProtoWriter)">
+            <summary>
+            Copies any extension data stored for the instance to the underlying stream
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.ProtoWriter.SetPackedField(System.Int32,ProtoBuf.ProtoWriter)">
+            <summary>
+            Used for packed encoding; indicates that the next field should be skipped rather than
+            a field header written. Note that the field number must match, else an exception is thrown
+            when the attempt is made to write the (incorrect) field. The wire-type is taken from the
+            subsequent call to WriteFieldHeader. Only primitive types can be packed.
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.ProtoWriter.SetRootObject(System.Object)">
+            <summary>
+            Specifies a known root object to use during reference-tracked serialization
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.ProtoWriter.WriteType(System.Type,ProtoBuf.ProtoWriter)">
+            <summary>
+            Writes a Type to the stream, using the model's DynamicTypeFormatting if appropriate; supported wire-types: String
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.ProtoWriter.Context">
+            <summary>
+            Addition information about this serialization operation.
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.ProtoWriter.Model">
+            <summary>
+            Get the TypeModel associated with this writer
+            </summary>
+        </member>
+        <member name="T:ProtoBuf.SerializationContext">
+            <summary>
+            Additional information about a serialization operation
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.SerializationContext.op_Implicit(ProtoBuf.SerializationContext)~System.Runtime.Serialization.StreamingContext">
+            <summary>
+            Convert a SerializationContext to a StreamingContext
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.SerializationContext.op_Implicit(System.Runtime.Serialization.StreamingContext)~ProtoBuf.SerializationContext">
+            <summary>
+            Convert a StreamingContext to a SerializationContext
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.SerializationContext.Context">
+            <summary>
+            Gets or sets a user-defined object containing additional information about this serialization/deserialization operation.
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.SerializationContext.Default">
+            <summary>
+            A default SerializationContext, with minimal information.
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.SerializationContext.State">
+            <summary>
+            Gets or sets the source or destination of the transmitted data.
+            </summary>
+        </member>
+        <member name="T:ProtoBuf.Serializer">
+            <summary>
+            Provides protocol-buffer serialization capability for concrete, attributed types. This
+            is a *default* model, but custom serializer models are also supported.
+            </summary>
+            <remarks>
+            Protocol-buffer serialization is a compact binary format, designed to take
+            advantage of sparse data and knowledge of specific data types; it is also
+            extensible, allowing a type to be deserialized / merged even if some data is
+            not recognised.
+            </remarks>
+        </member>
+        <member name="F:ProtoBuf.Serializer.ListItemTag">
+            <summary>
+            The field number that is used as a default when serializing/deserializing a list of objects.
+            The data is treated as repeated message with field number 1.
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.Serializer.GetProto``1">
+            <summary>
+            Suggest a .proto definition for the given type
+            </summary>
+            <typeparam name="T">The type to generate a .proto definition for</typeparam>
+            <returns>The .proto definition as a string</returns>
+        </member>
+        <member name="M:ProtoBuf.Serializer.DeepClone``1(``0)">
+            <summary>
+            Create a deep clone of the supplied instance; any sub-items are also cloned.
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.Serializer.Merge``1(System.IO.Stream,``0)">
+            <summary>
+            Applies a protocol-buffer stream to an existing instance.
+            </summary>
+            <typeparam name="T">The type being merged.</typeparam>
+            <param name="instance">The existing instance to be modified (can be null).</param>
+            <param name="source">The binary stream to apply to the instance (cannot be null).</param>
+            <returns>The updated instance; this may be different to the instance argument if
+            either the original instance was null, or the stream defines a known sub-type of the
+            original instance.</returns>
+        </member>
+        <member name="M:ProtoBuf.Serializer.Deserialize``1(System.IO.Stream)">
+            <summary>
+            Creates a new instance from a protocol-buffer stream
+            </summary>
+            <typeparam name="T">The type to be created.</typeparam>
+            <param name="source">The binary stream to apply to the new instance (cannot be null).</param>
+            <returns>A new, initialized instance.</returns>
+        </member>
+        <member name="M:ProtoBuf.Serializer.Serialize``1(System.IO.Stream,``0)">
+            <summary>
+            Writes a protocol-buffer representation of the given instance to the supplied stream.
+            </summary>
+            <param name="instance">The existing instance to be serialized (cannot be null).</param>
+            <param name="destination">The destination stream to write to.</param>
+        </member>
+        <member name="M:ProtoBuf.Serializer.ChangeType``2(``0)">
+            <summary>
+            Serializes a given instance and deserializes it as a different type;
+            this can be used to translate between wire-compatible objects (where
+            two .NET types represent the same data), or to promote/demote a type
+            through an inheritance hierarchy.
+            </summary>
+            <remarks>No assumption of compatibility is made between the types.</remarks>
+            <typeparam name="TFrom">The type of the object being copied.</typeparam>
+            <typeparam name="TTo">The type of the new object to be created.</typeparam>
+            <param name="instance">The existing instance to use as a template.</param>
+            <returns>A new instane of type TNewType, with the data from TOldType.</returns>
+        </member>
+        <member name="M:ProtoBuf.Serializer.Serialize``1(System.Runtime.Serialization.SerializationInfo,``0)">
+            <summary>
+            Writes a protocol-buffer representation of the given instance to the supplied SerializationInfo.
+            </summary>
+            <typeparam name="T">The type being serialized.</typeparam>
+            <param name="instance">The existing instance to be serialized (cannot be null).</param>
+            <param name="info">The destination SerializationInfo to write to.</param>
+        </member>
+        <member name="M:ProtoBuf.Serializer.Serialize``1(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext,``0)">
+            <summary>
+            Writes a protocol-buffer representation of the given instance to the supplied SerializationInfo.
+            </summary>
+            <typeparam name="T">The type being serialized.</typeparam>
+            <param name="instance">The existing instance to be serialized (cannot be null).</param>
+            <param name="info">The destination SerializationInfo to write to.</param>
+            <param name="context">Additional information about this serialization operation.</param>
+        </member>
+        <member name="M:ProtoBuf.Serializer.Serialize``1(System.Xml.XmlWriter,``0)">
+            <summary>
+            Writes a protocol-buffer representation of the given instance to the supplied XmlWriter.
+            </summary>
+            <typeparam name="T">The type being serialized.</typeparam>
+            <param name="instance">The existing instance to be serialized (cannot be null).</param>
+            <param name="writer">The destination XmlWriter to write to.</param>
+        </member>
+        <member name="M:ProtoBuf.Serializer.Merge``1(System.Xml.XmlReader,``0)">
+            <summary>
+            Applies a protocol-buffer from an XmlReader to an existing instance.
+            </summary>
+            <typeparam name="T">The type being merged.</typeparam>
+            <param name="instance">The existing instance to be modified (cannot be null).</param>
+            <param name="reader">The XmlReader containing the data to apply to the instance (cannot be null).</param>
+        </member>
+        <member name="M:ProtoBuf.Serializer.Merge``1(System.Runtime.Serialization.SerializationInfo,``0)">
+            <summary>
+            Applies a protocol-buffer from a SerializationInfo to an existing instance.
+            </summary>
+            <typeparam name="T">The type being merged.</typeparam>
+            <param name="instance">The existing instance to be modified (cannot be null).</param>
+            <param name="info">The SerializationInfo containing the data to apply to the instance (cannot be null).</param>
+        </member>
+        <member name="M:ProtoBuf.Serializer.Merge``1(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext,``0)">
+            <summary>
+            Applies a protocol-buffer from a SerializationInfo to an existing instance.
+            </summary>
+            <typeparam name="T">The type being merged.</typeparam>
+            <param name="instance">The existing instance to be modified (cannot be null).</param>
+            <param name="info">The SerializationInfo containing the data to apply to the instance (cannot be null).</param>
+            <param name="context">Additional information about this serialization operation.</param>
+        </member>
+        <member name="M:ProtoBuf.Serializer.PrepareSerializer``1">
+            <summary>
+            Precompiles the serializer for a given type.
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.Serializer.CreateFormatter``1">
+            <summary>
+            Creates a new IFormatter that uses protocol-buffer [de]serialization.
+            </summary>
+            <typeparam name="T">The type of object to be [de]deserialized by the formatter.</typeparam>
+            <returns>A new IFormatter to be used during [de]serialization.</returns>
+        </member>
+        <member name="M:ProtoBuf.Serializer.DeserializeItems``1(System.IO.Stream,ProtoBuf.PrefixStyle,System.Int32)">
+            <summary>
+            Reads a sequence of consecutive length-prefixed items from a stream, using
+            either base-128 or fixed-length prefixes. Base-128 prefixes with a tag
+            are directly comparable to serializing multiple items in succession
+            (use the <see cref="F:ProtoBuf.Serializer.ListItemTag"/> tag to emulate the implicit behavior
+            when serializing a list/array). When a tag is
+            specified, any records with different tags are silently omitted. The
+            tag is ignored. The tag is ignores for fixed-length prefixes.
+            </summary>
+            <typeparam name="T">The type of object to deserialize.</typeparam>
+            <param name="source">The binary stream containing the serialized records.</param>
+            <param name="style">The prefix style used in the data.</param>
+            <param name="fieldNumber">The tag of records to return (if non-positive, then no tag is
+            expected and all records are returned).</param>
+            <returns>The sequence of deserialized objects.</returns>
+        </member>
+        <member name="M:ProtoBuf.Serializer.DeserializeWithLengthPrefix``1(System.IO.Stream,ProtoBuf.PrefixStyle)">
+            <summary>
+            Creates a new instance from a protocol-buffer stream that has a length-prefix
+            on data (to assist with network IO).
+            </summary>
+            <typeparam name="T">The type to be created.</typeparam>
+            <param name="source">The binary stream to apply to the new instance (cannot be null).</param>
+            <param name="style">How to encode the length prefix.</param>
+            <returns>A new, initialized instance.</returns>
+        </member>
+        <member name="M:ProtoBuf.Serializer.DeserializeWithLengthPrefix``1(System.IO.Stream,ProtoBuf.PrefixStyle,System.Int32)">
+            <summary>
+            Creates a new instance from a protocol-buffer stream that has a length-prefix
+            on data (to assist with network IO).
+            </summary>
+            <typeparam name="T">The type to be created.</typeparam>
+            <param name="source">The binary stream to apply to the new instance (cannot be null).</param>
+            <param name="style">How to encode the length prefix.</param>
+            <param name="fieldNumber">The expected tag of the item (only used with base-128 prefix style).</param>
+            <returns>A new, initialized instance.</returns>
+        </member>
+        <member name="M:ProtoBuf.Serializer.MergeWithLengthPrefix``1(System.IO.Stream,``0,ProtoBuf.PrefixStyle)">
+            <summary>
+            Applies a protocol-buffer stream to an existing instance, using length-prefixed
+            data - useful with network IO.
+            </summary>
+            <typeparam name="T">The type being merged.</typeparam>
+            <param name="instance">The existing instance to be modified (can be null).</param>
+            <param name="source">The binary stream to apply to the instance (cannot be null).</param>
+            <param name="style">How to encode the length prefix.</param>
+            <returns>The updated instance; this may be different to the instance argument if
+            either the original instance was null, or the stream defines a known sub-type of the
+            original instance.</returns>
+        </member>
+        <member name="M:ProtoBuf.Serializer.SerializeWithLengthPrefix``1(System.IO.Stream,``0,ProtoBuf.PrefixStyle)">
+            <summary>
+            Writes a protocol-buffer representation of the given instance to the supplied stream,
+            with a length-prefix. This is useful for socket programming,
+            as DeserializeWithLengthPrefix/MergeWithLengthPrefix can be used to read the single object back
+            from an ongoing stream.
+            </summary>
+            <typeparam name="T">The type being serialized.</typeparam>
+            <param name="instance">The existing instance to be serialized (cannot be null).</param>
+            <param name="style">How to encode the length prefix.</param>
+            <param name="destination">The destination stream to write to.</param>
+        </member>
+        <member name="M:ProtoBuf.Serializer.SerializeWithLengthPrefix``1(System.IO.Stream,``0,ProtoBuf.PrefixStyle,System.Int32)">
+            <summary>
+            Writes a protocol-buffer representation of the given instance to the supplied stream,
+            with a length-prefix. This is useful for socket programming,
+            as DeserializeWithLengthPrefix/MergeWithLengthPrefix can be used to read the single object back
+            from an ongoing stream.
+            </summary>
+            <typeparam name="T">The type being serialized.</typeparam>
+            <param name="instance">The existing instance to be serialized (cannot be null).</param>
+            <param name="style">How to encode the length prefix.</param>
+            <param name="destination">The destination stream to write to.</param>
+            <param name="fieldNumber">The tag used as a prefix to each record (only used with base-128 style prefixes).</param>
+        </member>
+        <member name="M:ProtoBuf.Serializer.TryReadLengthPrefix(System.IO.Stream,ProtoBuf.PrefixStyle,System.Int32@)">
+            <summary>Indicates the number of bytes expected for the next message.</summary>
+            <param name="source">The stream containing the data to investigate for a length.</param>
+            <param name="style">The algorithm used to encode the length.</param>
+            <param name="length">The length of the message, if it could be identified.</param>
+            <returns>True if a length could be obtained, false otherwise.</returns>
+        </member>
+        <member name="M:ProtoBuf.Serializer.TryReadLengthPrefix(System.Byte[],System.Int32,System.Int32,ProtoBuf.PrefixStyle,System.Int32@)">
+            <summary>Indicates the number of bytes expected for the next message.</summary>
+            <param name="buffer">The buffer containing the data to investigate for a length.</param>
+            <param name="index">The offset of the first byte to read from the buffer.</param>
+            <param name="count">The number of bytes to read from the buffer.</param>
+            <param name="style">The algorithm used to encode the length.</param>
+            <param name="length">The length of the message, if it could be identified.</param>
+            <returns>True if a length could be obtained, false otherwise.</returns>
+        </member>
+        <member name="M:ProtoBuf.Serializer.FlushPool">
+            <summary>
+            Releases any internal buffers that have been reserved for efficiency; this does not affect any serialization
+            operations; simply: it can be used (optionally) to release the buffers for garbage collection (at the expense
+            of having to re-allocate a new buffer for the next operation, rather than re-use prior buffers).
+            </summary>
+        </member>
+        <member name="T:ProtoBuf.Serializer.NonGeneric">
+            <summary>
+            Provides non-generic access to the default serializer.
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.Serializer.NonGeneric.DeepClone(System.Object)">
+            <summary>
+            Create a deep clone of the supplied instance; any sub-items are also cloned.
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.Serializer.NonGeneric.Serialize(System.IO.Stream,System.Object)">
+            <summary>
+            Writes a protocol-buffer representation of the given instance to the supplied stream.
+            </summary>
+            <param name="instance">The existing instance to be serialized (cannot be null).</param>
+            <param name="dest">The destination stream to write to.</param>
+        </member>
+        <member name="M:ProtoBuf.Serializer.NonGeneric.Deserialize(System.Type,System.IO.Stream)">
+            <summary>
+            Creates a new instance from a protocol-buffer stream
+            </summary>
+            <param name="type">The type to be created.</param>
+            <param name="source">The binary stream to apply to the new instance (cannot be null).</param>
+            <returns>A new, initialized instance.</returns>
+        </member>
+        <member name="M:ProtoBuf.Serializer.NonGeneric.Merge(System.IO.Stream,System.Object)">
+            <summary>Applies a protocol-buffer stream to an existing instance.</summary>
+            <param name="instance">The existing instance to be modified (cannot be null).</param>
+            <param name="source">The binary stream to apply to the instance (cannot be null).</param>
+            <returns>The updated instance</returns>
+        </member>
+        <member name="M:ProtoBuf.Serializer.NonGeneric.SerializeWithLengthPrefix(System.IO.Stream,System.Object,ProtoBuf.PrefixStyle,System.Int32)">
+            <summary>
+            Writes a protocol-buffer representation of the given instance to the supplied stream,
+            with a length-prefix. This is useful for socket programming,
+            as DeserializeWithLengthPrefix/MergeWithLengthPrefix can be used to read the single object back
+            from an ongoing stream.
+            </summary>
+            <param name="instance">The existing instance to be serialized (cannot be null).</param>
+            <param name="style">How to encode the length prefix.</param>
+            <param name="destination">The destination stream to write to.</param>
+            <param name="fieldNumber">The tag used as a prefix to each record (only used with base-128 style prefixes).</param>
+        </member>
+        <member name="M:ProtoBuf.Serializer.NonGeneric.TryDeserializeWithLengthPrefix(System.IO.Stream,ProtoBuf.PrefixStyle,ProtoBuf.Serializer.TypeResolver,System.Object@)">
+            <summary>
+            Applies a protocol-buffer stream to an existing instance (or null), using length-prefixed
+            data - useful with network IO.
+            </summary>
+            <param name="value">The existing instance to be modified (can be null).</param>
+            <param name="source">The binary stream to apply to the instance (cannot be null).</param>
+            <param name="style">How to encode the length prefix.</param>
+            <param name="resolver">Used to resolve types on a per-field basis.</param>
+            <returns>The updated instance; this may be different to the instance argument if
+            either the original instance was null, or the stream defines a known sub-type of the
+            original instance.</returns>
+        </member>
+        <member name="M:ProtoBuf.Serializer.NonGeneric.CanSerialize(System.Type)">
+            <summary>
+            Indicates whether the supplied type is explicitly modelled by the model
+            </summary>
+        </member>
+        <member name="T:ProtoBuf.Serializer.GlobalOptions">
+            <summary>
+            Global switches that change the behavior of protobuf-net
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.Serializer.GlobalOptions.InferTagFromName">
+            <summary>
+            <see cref="P:ProtoBuf.Meta.RuntimeTypeModel.InferTagFromNameDefault"/>
+            </summary>
+        </member>
+        <member name="T:ProtoBuf.Serializer.TypeResolver">
+            <summary>
+            Maps a field-number to a type
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.Serializers.IProtoSerializer.Write(System.Object,ProtoBuf.ProtoWriter)">
+            <summary>
+            Perform the steps necessary to serialize this data.
+            </summary>
+            <param name="value">The value to be serialized.</param>
+            <param name="dest">The writer entity that is accumulating the output data.</param>
+        </member>
+        <member name="M:ProtoBuf.Serializers.IProtoSerializer.Read(System.Object,ProtoBuf.ProtoReader)">
+            <summary>
+            Perform the steps necessary to deserialize this data.
+            </summary>
+            <param name="value">The current value, if appropriate.</param>
+            <param name="source">The reader providing the input data.</param>
+            <returns>The updated / replacement value.</returns>
+        </member>
+        <member name="M:ProtoBuf.Serializers.IProtoSerializer.EmitWrite(ProtoBuf.Compiler.CompilerContext,ProtoBuf.Compiler.Local)">
+            <summary>Emit the IL necessary to perform the given actions
+            to serialize this data.
+            </summary>
+            <param name="ctx">Details and utilities for the method being generated.</param>
+            <param name="valueFrom">The source of the data to work against;
+            If the value is only needed once, then LoadValue is sufficient. If
+            the value is needed multiple times, then note that a "null"
+            means "the top of the stack", in which case you should create your
+            own copy - GetLocalWithValue.</param>
+        </member>
+        <member name="M:ProtoBuf.Serializers.IProtoSerializer.EmitRead(ProtoBuf.Compiler.CompilerContext,ProtoBuf.Compiler.Local)">
+            <summary>
+            Emit the IL necessary to perform the given actions to deserialize this data.
+            </summary>
+            <param name="ctx">Details and utilities for the method being generated.</param>
+            <param name="entity">For nested values, the instance holding the values; note
+            that this is not always provided - a null means not supplied. Since this is always
+            a variable or argument, it is not necessary to consume this value.</param>
+        </member>
+        <member name="P:ProtoBuf.Serializers.IProtoSerializer.ExpectedType">
+            <summary>
+            The type that this serializer is intended to work for.
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.Serializers.IProtoSerializer.RequiresOldValue">
+            <summary>
+            Indicates whether a Read operation <em>replaces</em> the existing value, or
+            <em>extends</em> the value. If false, the "value" parameter to Read is
+            discarded, and should be passed in as null.
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.Serializers.IProtoSerializer.ReturnsValue">
+            <summary>
+            Now all Read operations return a value (although most do); if false no
+            value should be expected.
+            </summary>
+        </member>
+        <member name="T:ProtoBuf.ServiceModel.ProtoBehaviorAttribute">
+            <summary>
+            Uses protocol buffer serialization on the specified operation; note that this
+            must be enabled on both the client and server.
+            </summary>
+        </member>
+        <member name="T:ProtoBuf.ServiceModel.ProtoBehaviorExtension">
+            <summary>
+            Configuration element to swap out DatatContractSerilaizer with the XmlProtoSerializer for a given endpoint.
+            </summary>
+            <seealso cref="T:ProtoBuf.ServiceModel.ProtoEndpointBehavior"/>
+        </member>
+        <member name="M:ProtoBuf.ServiceModel.ProtoBehaviorExtension.#ctor">
+            <summary>
+            Creates a new ProtoBehaviorExtension instance.
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.ServiceModel.ProtoBehaviorExtension.CreateBehavior">
+            <summary>
+            Creates a behavior extension based on the current configuration settings.
+            </summary>
+            <returns>The behavior extension.</returns>
+        </member>
+        <member name="P:ProtoBuf.ServiceModel.ProtoBehaviorExtension.BehaviorType">
+            <summary>
+            Gets the type of behavior.
+            </summary>     
+        </member>
+        <member name="T:ProtoBuf.ServiceModel.ProtoEndpointBehavior">
+            <summary>
+            Behavior to swap out DatatContractSerilaizer with the XmlProtoSerializer for a given endpoint.
+             <example>
+            Add the following to the server and client app.config in the system.serviceModel section:
+             <behaviors>
+               <endpointBehaviors>
+                 <behavior name="ProtoBufBehaviorConfig">
+                   <ProtoBufSerialization/>
+                 </behavior>
+               </endpointBehaviors>
+             </behaviors>
+             <extensions>
+               <behaviorExtensions>
+                 <add name="ProtoBufSerialization" type="ProtoBuf.ServiceModel.ProtoBehaviorExtension, protobuf-net, Version=1.0.0.255, Culture=neutral, PublicKeyToken=257b51d87d2e4d67"/>
+               </behaviorExtensions>
+             </extensions>
+            
+            Configure your endpoints to have a behaviorConfiguration as follows:
+            
+             <service name="TK.Framework.Samples.ServiceModel.Contract.SampleService">
+               <endpoint address="http://myhost:9003/SampleService" binding="basicHttpBinding" behaviorConfiguration="ProtoBufBehaviorConfig"
+                bindingConfiguration="basicHttpBindingConfig" name="basicHttpProtoBuf" contract="ISampleServiceContract" />
+             </service>
+             <client>
+                 <endpoint address="http://myhost:9003/SampleService" binding="basicHttpBinding"
+                     bindingConfiguration="basicHttpBindingConfig" contract="ISampleServiceContract"
+                     name="BasicHttpProtoBufEndpoint" behaviorConfiguration="ProtoBufBehaviorConfig"/>
+              </client>
+            </example>
+            </summary>
+        </member>
+        <member name="T:ProtoBuf.ServiceModel.ProtoOperationBehavior">
+            <summary>
+            Describes a WCF operation behaviour that can perform protobuf serialization
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.ServiceModel.ProtoOperationBehavior.#ctor(System.ServiceModel.Description.OperationDescription)">
+            <summary>
+            Create a new ProtoOperationBehavior instance
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.ServiceModel.ProtoOperationBehavior.CreateSerializer(System.Type,System.Xml.XmlDictionaryString,System.Xml.XmlDictionaryString,System.Collections.Generic.IList{System.Type})">
+            <summary>
+            Creates a protobuf serializer if possible (falling back to the default WCF serializer)
+            </summary>
+        </member>
+        <member name="P:ProtoBuf.ServiceModel.ProtoOperationBehavior.Model">
+            <summary>
+            The type-model that should be used with this behaviour
+            </summary>
+        </member>
+        <member name="T:ProtoBuf.ServiceModel.XmlProtoSerializer">
+            <summary>
+            An xml object serializer that can embed protobuf data in a base-64 hunk (looking like a byte[])
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.ServiceModel.XmlProtoSerializer.TryCreate(ProtoBuf.Meta.TypeModel,System.Type)">
+            <summary>
+            Attempt to create a new serializer for the given model and type
+            </summary>
+            <returns>A new serializer instance if the type is recognised by the model; null otherwise</returns>
+        </member>
+        <member name="M:ProtoBuf.ServiceModel.XmlProtoSerializer.#ctor(ProtoBuf.Meta.TypeModel,System.Type)">
+            <summary>
+            Creates a new serializer for the given model and type
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.ServiceModel.XmlProtoSerializer.WriteEndObject(System.Xml.XmlDictionaryWriter)">
+            <summary>
+            Ends an object in the output
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.ServiceModel.XmlProtoSerializer.WriteStartObject(System.Xml.XmlDictionaryWriter,System.Object)">
+            <summary>
+            Begins an object in the output
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.ServiceModel.XmlProtoSerializer.WriteObjectContent(System.Xml.XmlDictionaryWriter,System.Object)">
+            <summary>
+            Writes the body of an object in the output
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.ServiceModel.XmlProtoSerializer.IsStartObject(System.Xml.XmlDictionaryReader)">
+            <summary>
+            Indicates whether this is the start of an object we are prepared to handle
+            </summary>
+        </member>
+        <member name="M:ProtoBuf.ServiceModel.XmlProtoSerializer.ReadObject(System.Xml.XmlDictionaryReader,System.Boolean)">
+            <summary>
+            Reads the body of an object
+            </summary>
+        </member>
+        <member name="T:ProtoBuf.SubItemToken">
+            <summary>
+            Used to hold particulars relating to nested objects. This is opaque to the caller - simply
+            give back the token you are given at the end of an object.
+            </summary>
+        </member>
+        <member name="T:ProtoBuf.WireType">
+            <summary>
+            Indicates the encoding used to represent an individual value in a protobuf stream
+            </summary>
+        </member>
+        <member name="F:ProtoBuf.WireType.None">
+            <summary>
+            Represents an error condition
+            </summary>
+        </member>
+        <member name="F:ProtoBuf.WireType.Variant">
+            <summary>
+            Base-128 variant-length encoding
+            </summary>
+        </member>
+        <member name="F:ProtoBuf.WireType.Fixed64">
+            <summary>
+            Fixed-length 8-byte encoding
+            </summary>
+        </member>
+        <member name="F:ProtoBuf.WireType.String">
+            <summary>
+            Length-variant-prefixed encoding
+            </summary>
+        </member>
+        <member name="F:ProtoBuf.WireType.StartGroup">
+            <summary>
+            Indicates the start of a group
+            </summary>
+        </member>
+        <member name="F:ProtoBuf.WireType.EndGroup">
+            <summary>
+            Indicates the end of a group
+            </summary>
+        </member>
+        <member name="F:ProtoBuf.WireType.Fixed32">
+            <summary>
+            Fixed-length 4-byte encoding
+            </summary>10
+        </member>
+        <member name="F:ProtoBuf.WireType.SignedVariant">
+            <summary>
+            This is not a formal wire-type in the "protocol buffers" spec, but
+            denotes a variant integer that should be interpreted using
+            zig-zag semantics (so -ve numbers aren't a significant overhead)
+            </summary>
+        </member>
+    </members>
+</doc>
diff --git a/ProtobufCore/Protogen-Tools/protogen.exe b/ProtobufCore/Protogen-Tools/protogen.exe
new file mode 100644
index 0000000..715751b
Binary files /dev/null and b/ProtobufCore/Protogen-Tools/protogen.exe differ
diff --git a/ProtobufCore/Protogen-Tools/protogen.exe.config b/ProtobufCore/Protogen-Tools/protogen.exe.config
new file mode 100644
index 0000000..e59af44
--- /dev/null
+++ b/ProtobufCore/Protogen-Tools/protogen.exe.config
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<configuration>
+<startup><supportedRuntime version="v2.0.50727"/></startup></configuration>
diff --git a/ProtobufCore/Protogen-Tools/vb.xslt b/ProtobufCore/Protogen-Tools/vb.xslt
new file mode 100644
index 0000000..b1d9162
--- /dev/null
+++ b/ProtobufCore/Protogen-Tools/vb.xslt
@@ -0,0 +1,745 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xsl:stylesheet version="1.0"
+    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+    xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="xsl msxsl"
+>
+  <xsl:import href="common.xslt"/>
+  <xsl:param name="help"/>
+  <xsl:param name="xml"/>
+  <xsl:param name="datacontract"/>
+  <xsl:param name="binary"/>
+  <xsl:param name="protoRpc"/>
+  <xsl:param name="observable"/>
+  <xsl:param name="preObservable"/>
+  <xsl:param name="partialMethods"/>
+  <xsl:param name="detectMissing"/>
+  <xsl:param name="lightFramework"/>
+  <xsl:param name="asynchronous"/>
+  <xsl:param name="clientProxy"/>
+  <xsl:param name="defaultNamespace"/>
+  
+  
+  <xsl:key name="fieldNames" match="//FieldDescriptorProto" use="name"/>
+  
+  <xsl:output method="text" indent="no" omit-xml-declaration="yes"/>
+  <xsl:variable name="types" select="//EnumDescriptorProto | //DescriptorProto"/>
+  <xsl:variable name="optionXml" select="$xml='true'"/>
+  <xsl:variable name="optionDataContract" select="$datacontract='true'"/>
+  <xsl:variable name="optionBinary" select="$binary='true'"/>
+  <xsl:variable name="optionProtoRpc" select="$protoRpc='true'"/>
+  <xsl:variable name="optionObservable" select="$observable='true'"/>
+  <xsl:variable name="optionPreObservable" select="$preObservable='true'"/>
+  <xsl:variable name="optionPartialMethods" select="$partialMethods='true'"/>
+  <xsl:variable name="optionDetectMissing" select="$detectMissing='true'"/>
+  <xsl:variable name="optionFullFramework" select="not($lightFramework='true')"/>
+  <xsl:variable name="optionAsynchronous" select="$asynchronous='true'"/>
+  <xsl:variable name="optionClientProxy" select="$clientProxy='true'"/>
+  <xsl:variable name="optionFixCase" select="$fixCase='true'"/>  
+  
+  <xsl:template match="FileDescriptorSet">
+    <xsl:if test="$help='true'">
+      <xsl:message terminate="yes">
+        VisualBasic template for protobuf-net.
+        Options:
+        General:
+          "help" - this page
+        Additional serializer support:
+          "xml" - enable explicit xml support (XmlSerializer)
+          "datacontract" - enable data-contract support (DataContractSerializer; requires .NET 3.0)
+          "binary" - enable binary support (BinaryFormatter; not supported on Silverlight)
+        Other:
+          "protoRpc" - enable proto-rpc client
+          "observable" - change notification (observer pattern) support
+          "preObservable" - pre-change notification (observer pattern) support (requires .NET 3.5)
+          "partialMethods" - provide partial methods for changes (requires C# 3.0)
+          "detectMissing" - provide *Specified properties to indicate whether fields are present
+          "lightFramework" - omit additional attributes not included in CF/Silverlight
+          "asynchronous" - emit asynchronous methods for use with WCF
+          "clientProxy" - emit asynchronous client proxy class
+      </xsl:message>
+    </xsl:if>
+
+    <xsl:if test="$optionXml and $optionDataContract">
+      <xsl:message terminate="yes">
+        Invalid options: xml and data-contract serialization are mutually exclusive.
+      </xsl:message>
+    </xsl:if>
+      ' Generated from <xsl:value-of select="name"/>
+    <xsl:if test="$optionXml">
+      ' Option: xml serialization ([XmlType]/[XmlElement]) enabled
+    </xsl:if><xsl:if test="$optionDataContract">
+      ' Option: data-contract serialization ([DataContract]/[DataMember]) enabled
+    </xsl:if><xsl:if test="$optionBinary">
+      ' Option: binary serialization (ISerializable) enabled
+    </xsl:if><xsl:if test="$optionObservable">
+      ' Option: observable (OnPropertyChanged) enabled
+    </xsl:if><xsl:if test="$optionPreObservable">
+      ' Option: pre-observable (OnPropertyChanging) enabled
+    </xsl:if><xsl:if test="$partialMethods">
+      ' Option: partial methods (On*Changing/On*Changed) enabled
+    </xsl:if><xsl:if test="$detectMissing">
+      ' Option: missing-value detection (*Specified/ShouldSerialize*/Reset*) enabled
+    </xsl:if><xsl:if test="not($optionFullFramework)">
+      ' Option: light framework (CF/Silverlight) enabled
+    </xsl:if><xsl:if test="$optionProtoRpc">
+      ' Option: proto-rpc enabled
+  </xsl:if>
+    <xsl:apply-templates select="file/FileDescriptorProto"/>
+  </xsl:template>
+
+  <xsl:template match="FileDescriptorProto">
+' Generated from: <xsl:value-of select="name"/>
+    <xsl:apply-templates select="dependency/string[.!='']"/>
+    <xsl:variable name="namespace"><xsl:call-template name="PickNamespace">
+      <xsl:with-param name="defaultNamespace" select="$defaultNamespace"/>
+        </xsl:call-template>
+      </xsl:variable>
+    <xsl:if test="string($namespace) != ''">
+Namespace <xsl:value-of select="translate($namespace,':-/\','__..')"/>
+</xsl:if>
+    <xsl:apply-templates select="message_type | enum_type | service"/>
+    <xsl:if test="string($namespace) != ''">
+End Namespace</xsl:if></xsl:template>
+  
+<xsl:template match="FileDescriptorProto/dependency/string">
+' Note: requires additional types generated from: <xsl:value-of select="."/></xsl:template>
+
+<xsl:template match="DescriptorProto">
+<xsl:choose>
+<xsl:when test="$optionDataContract">
+&lt;Global.System.Serializable, Global.ProtoBuf.ProtoContract(Name:="<xsl:value-of select="name"/>")&gt; _
+&lt;Global.System.Runtime.Serialization.DataContract(Name:="<xsl:value-of select="name"/>")&gt; _
+</xsl:when>
+<xsl:when test="$optionXml">
+&lt;Global.System.Serializable, Global.ProtoBuf.ProtoContract(Name:="<xsl:value-of select="name"/>")&gt; _
+&lt;Global.System.Xml.Serialization.XmlType(TypeName:="<xsl:value-of select="name"/>")&gt; _
+</xsl:when>
+<xsl:otherwise>
+&lt;Global.System.Serializable, Global.ProtoBuf.ProtoContract(Name:="<xsl:value-of select="name"/>")&gt; _
+</xsl:otherwise>
+</xsl:choose><!--
+-->Public Partial Class <xsl:call-template name="pascal"/>
+    implements Global.ProtoBuf.IExtensible<!--
+    --><xsl:if test="$optionBinary">, Global.System.Runtime.Serialization.ISerializable</xsl:if><!--
+    --><xsl:if test="$optionObservable">, Global.System.ComponentModel.INotifyPropertyChanged</xsl:if><!--
+    --><xsl:if test="$optionPreObservable">, Global.System.ComponentModel.INotifyPropertyChanging</xsl:if>
+	
+	Public Sub New
+	End Sub
+    <xsl:apply-templates select="*"/><xsl:if test="$optionBinary">
+    Protected Sub New(ByVal info As Global.System.Runtime.Serialization.SerializationInfo, ByVal context As Global.System.Runtime.Serialization.StreamingContext)
+          MyBase.New()
+          Global.ProtoBuf.Serializer.Merge(info, Me)
+    End Sub
+	  
+	Sub GetObjectData(ByVal info As Global.System.Runtime.Serialization.SerializationInfo, ByVal context As Global.System.Runtime.Serialization.StreamingContext) implements Global.System.Runtime.Serialization.ISerializable.GetObjectData
+		Global.ProtoBuf.Serializer.Serialize(info, Me)
+	End Sub
+	
+      </xsl:if><xsl:if test="$optionObservable">
+    Public Event PropertyChanged As Global.System.ComponentModel.PropertyChangedEventHandler Implements Global.System.ComponentModel.INotifyPropertyChanged.PropertyChanged
+    Protected Overridable Sub OnPropertyChanged(ByVal propertyName As String)
+        RaiseEvent PropertyChanged(Me, New Global.System.ComponentModel.PropertyChangedEventArgs(propertyName))
+    End Sub
+    </xsl:if><xsl:if test="$optionPreObservable">
+	Public Event PropertyChanging As Global.System.ComponentModel.PropertyChangingEventHandler Implements Global.System.ComponentModel.INotifyPropertyChanging.PropertyChanging
+	Protected Overridable Sub OnPropertyChanging(ByVal propertyName As String)
+		RaiseEvent PropertyChanging(Me, New Global.System.ComponentModel.PropertyChangingEventArgs(propertyName))
+	End Sub
+	</xsl:if>
+    Private extensionObject As Global.ProtoBuf.IExtension
+		Function GetExtensionObject(createIfMissing As Boolean) As Global.ProtoBuf.IExtension Implements Global.ProtoBuf.IExtensible.GetExtensionObject
+			Return Global.ProtoBuf.Extensible.GetExtensionObject(extensionObject, createIfMissing)
+		End Function
+End Class
+  </xsl:template>
+
+  
+  
+  <xsl:template match="DescriptorProto/name | DescriptorProto/extension_range | DescriptorProto/extension"/>
+  
+  <xsl:template match="
+                FileDescriptorProto/message_type | FileDescriptorProto/enum_type | FileDescriptorProto/service
+                | DescriptorProto/field | DescriptorProto/enum_type | DescriptorProto/message_type
+                | DescriptorProto/nested_type | EnumDescriptorProto/value | ServiceDescriptorProto/method">
+    <xsl:apply-templates select="*"/>
+  </xsl:template>
+
+  <xsl:template match="EnumDescriptorProto">
+    Public Enum <xsl:call-template name="pascal"/>
+      <xsl:apply-templates select="value"/>
+    End Enum
+  </xsl:template>
+
+  <xsl:template match="EnumValueDescriptorProto">
+	  	<xsl:text> 
+		</xsl:text>
+		<xsl:value-of select="name"/>
+		<xsl:text xml:space="preserve"> = </xsl:text><xsl:choose>
+	      <xsl:when test="number"><xsl:value-of select="number"/></xsl:when>
+	      <xsl:otherwise>0</xsl:otherwise>
+	    </xsl:choose><xsl:if test="position()!=last()">
+	    </xsl:if>
+  </xsl:template>
+
+  <xsl:template match="FieldDescriptorProto" mode="field">
+    <xsl:choose>
+      <xsl:when test="not(key('fieldNames',concat('_',name)))"><xsl:value-of select="concat('_',name)"/></xsl:when>
+      <xsl:when test="not(key('fieldNames',concat(name,'Field')))"><xsl:value-of select="concat(name,'Field')"/></xsl:when>
+      <xsl:otherwise><xsl:value-of select="concat('_',generate-id())"/></xsl:otherwise>
+    </xsl:choose>
+  </xsl:template>
+  
+  <xsl:template match="FieldDescriptorProto" mode="format">
+    <xsl:choose>
+      <xsl:when test="type='TYPE_DOUBLE' or type='TYPE_FLOAT'
+                or type='TYPE_FIXED32' or type='TYPE_FIXED64'
+                or type='TYPE_SFIXED32' or type='TYPE_SFIXED64'">FixedSize</xsl:when>
+      <xsl:when test="type='TYPE_GROUP'">Group</xsl:when>
+      <xsl:when test="not(type) or type='TYPE_INT32' or type='TYPE_INT64'
+                or type='TYPE_UINT32' or type='TYPE_UINT64'
+                or type='TYPE_ENUM'">TwosComplement</xsl:when>
+      <xsl:when test="type='TYPE_SINT32' or type='TYPE_SINT64'">ZigZag</xsl:when>
+      <xsl:otherwise>Default</xsl:otherwise>
+    </xsl:choose>
+  </xsl:template>
+  <xsl:template match="FieldDescriptorProto" mode="primitiveType">
+    <xsl:choose>
+      <xsl:when test="not(type)">struct</xsl:when>
+      <xsl:when test="type='TYPE_DOUBLE'">struct</xsl:when>
+      <xsl:when test="type='TYPE_FLOAT'">struct</xsl:when>
+      <xsl:when test="type='TYPE_INT64'">struct</xsl:when>
+      <xsl:when test="type='TYPE_UINT64'">struct</xsl:when>
+      <xsl:when test="type='TYPE_INT32'">struct</xsl:when>
+      <xsl:when test="type='TYPE_FIXED64'">struct</xsl:when>
+      <xsl:when test="type='TYPE_FIXED32'">struct</xsl:when>
+      <xsl:when test="type='TYPE_BOOL'">struct</xsl:when>
+      <xsl:when test="type='TYPE_STRING'">class</xsl:when>
+      <xsl:when test="type='TYPE_BYTES'">class</xsl:when>
+      <xsl:when test="type='TYPE_UINT32'">struct</xsl:when>
+      <xsl:when test="type='TYPE_SFIXED32'">struct</xsl:when>
+      <xsl:when test="type='TYPE_SFIXED64'">struct</xsl:when>
+      <xsl:when test="type='TYPE_SINT32'">struct</xsl:when>
+      <xsl:when test="type='TYPE_SINT64'">struct</xsl:when>
+      <xsl:when test="type='TYPE_ENUM'">struct</xsl:when>
+      <xsl:when test="type='TYPE_GROUP' or type='TYPE_MESSAGE'">none</xsl:when>
+      <xsl:otherwise>
+        <xsl:message terminate="yes">
+          Field type not implemented: <xsl:value-of select="type"/> (<xsl:value-of select="../../name"/>.<xsl:value-of select="name"/>)
+        </xsl:message>
+      </xsl:otherwise>
+    </xsl:choose>
+  </xsl:template>
+  <xsl:template match="FieldDescriptorProto" mode="type">
+    <xsl:choose>
+      <xsl:when test="not(type)">double</xsl:when>
+      <xsl:when test="type='TYPE_DOUBLE'">Double</xsl:when>
+      <xsl:when test="type='TYPE_FLOAT'">Single</xsl:when>
+      <xsl:when test="type='TYPE_INT64'">Long</xsl:when>
+      <xsl:when test="type='TYPE_UINT64'">ULong</xsl:when>
+      <xsl:when test="type='TYPE_INT32'">Integer</xsl:when>
+      <xsl:when test="type='TYPE_FIXED64'">ULong</xsl:when>
+      <xsl:when test="type='TYPE_FIXED32'">UInteger</xsl:when>
+      <xsl:when test="type='TYPE_BOOL'">Boolean</xsl:when>
+      <xsl:when test="type='TYPE_STRING'">String</xsl:when>
+      <xsl:when test="type='TYPE_BYTES'">Byte()</xsl:when>
+      <xsl:when test="type='TYPE_UINT32'">UInteger</xsl:when>
+      <xsl:when test="type='TYPE_SFIXED32'">Integer</xsl:when>
+      <xsl:when test="type='TYPE_SFIXED64'">Long</xsl:when>
+      <xsl:when test="type='TYPE_SINT32'">Integer</xsl:when>
+      <xsl:when test="type='TYPE_SINT64'">Long</xsl:when>
+      <xsl:when test="type='TYPE_GROUP' or type='TYPE_MESSAGE' or type='TYPE_ENUM'"><xsl:call-template name="pascal">
+          <xsl:with-param name="value" select="substring-after(type_name,'.')"/>
+        </xsl:call-template></xsl:when>
+      <xsl:otherwise>
+        <xsl:message terminate="yes">
+          Field type not implemented: <xsl:value-of select="type"/> (<xsl:value-of select="../../name"/>.<xsl:value-of select="name"/>)
+        </xsl:message>
+      </xsl:otherwise>
+    </xsl:choose>
+    
+  </xsl:template>
+
+  <xsl:template match="FieldDescriptorProto[default_value]" mode="defaultValue">
+    <xsl:choose>
+      <xsl:when test="type='TYPE_STRING'">"<xsl:value-of select="default_value"/>"</xsl:when>
+      <xsl:when test="type='TYPE_ENUM'"><xsl:apply-templates select="." mode="type"/>.<xsl:value-of select="default_value"/></xsl:when>
+      <xsl:when test="type='TYPE_BYTES'"> ' <xsl:value-of select="default_value"/></xsl:when>
+      <xsl:otherwise>CType(<xsl:value-of select="default_value"/>, <xsl:apply-templates select="." mode="type"/>)</xsl:otherwise>
+    </xsl:choose>
+  </xsl:template>
+
+  <!--
+    We need to find the first enum value given .foo.bar.SomeEnum - but the enum itself
+    only knows about SomeEnum; we need to look at all parent DescriptorProto nodes, and
+    the FileDescriptorProto for the namespace.
+    
+    This does an annoying up/down recursion... a bit expensive, but *generally* OK.
+    Could perhaps index the last part of the enum name to reduce overhead?
+  -->
+  <xsl:template name="GetFirstEnumValue">
+    <xsl:variable name="hunt" select="type_name"/>
+    <xsl:for-each select="//EnumDescriptorProto">
+      <xsl:variable name="fullName">
+        <xsl:for-each select="ancestor::FileDescriptorProto">.<xsl:value-of select="package"/></xsl:for-each>
+        <xsl:for-each select="ancestor::DescriptorProto">.<xsl:value-of select="name"/></xsl:for-each>
+        <xsl:value-of select="concat('.',name)"/>
+      </xsl:variable>
+      <xsl:if test="$fullName=$hunt"><xsl:value-of select="(value/EnumValueDescriptorProto)[1]/name"/></xsl:if>
+    </xsl:for-each>
+  </xsl:template>
+  
+  <xsl:template match="FieldDescriptorProto[not(default_value)]" mode="defaultValue">
+    <xsl:choose>
+      <xsl:when test="type='TYPE_DOUBLE'">0.0</xsl:when>
+      <xsl:when test="type='TYPE_FLOAT'">0.0F</xsl:when>
+      <xsl:when test="type='TYPE_INT64'">0L</xsl:when>
+      <xsl:when test="type='TYPE_UINT64'">0L</xsl:when>
+      <xsl:when test="type='TYPE_INT32'">0</xsl:when>
+      <xsl:when test="type='TYPE_FIXED64'">0L</xsl:when>
+      <xsl:when test="type='TYPE_FIXED32'">0</xsl:when>
+      <xsl:when test="type='TYPE_BOOL'">False</xsl:when>
+      <xsl:when test="type='TYPE_STRING'">""</xsl:when>
+      <xsl:when test="type='TYPE_BYTES'">Nothing</xsl:when>
+      <xsl:when test="type='TYPE_UINT32'">0</xsl:when>
+      <xsl:when test="type='TYPE_SFIXED32'">0</xsl:when>
+      <xsl:when test="type='TYPE_SFIXED64'">0L</xsl:when>
+      <xsl:when test="type='TYPE_SINT32'">0</xsl:when>
+      <xsl:when test="type='TYPE_SINT64'">0L</xsl:when>
+      <xsl:when test="type='TYPE_MESSAGE'">Nothing</xsl:when>
+      <xsl:when test="type='TYPE_ENUM'"><xsl:apply-templates select="." mode="type"/>.<xsl:call-template name="GetFirstEnumValue"/></xsl:when>
+      <xsl:otherwise>Nothing</xsl:otherwise>
+    </xsl:choose>
+  </xsl:template>
+
+  <xsl:template match="FieldDescriptorProto[label='LABEL_OPTIONAL' or not(label)]">
+    <xsl:variable name="propType"><xsl:apply-templates select="." mode="type"/></xsl:variable>
+    <xsl:variable name="format"><xsl:apply-templates select="." mode="format"/></xsl:variable>
+    <xsl:variable name="primitiveType"><xsl:apply-templates select="." mode="primitiveType"/></xsl:variable>
+    <xsl:variable name="defaultValue"><xsl:apply-templates select="." mode="defaultValue"/></xsl:variable>
+    <xsl:variable name="field"><xsl:apply-templates select="." mode="field"/></xsl:variable>
+	<xsl:variable name="specified" select="$optionDetectMissing and ($primitiveType='struct' or $primitiveType='class')"/>
+    <xsl:variable name="fieldType"><xsl:if test="$specified and $primitiveType='struct'">Nullable(Of </xsl:if><xsl:value-of select="$propType"/><xsl:if test="$specified and $primitiveType='struct'">)</xsl:if></xsl:variable>
+
+    <xsl:choose>
+	  <xsl:when test="substring-after($fieldType, 'google.protobuf.')">
+    Private <xsl:value-of select="concat($field,' As ',substring-after($fieldType, 'google.protobuf.'))"/><xsl:if test="not($specified)"> =<xsl:value-of select="$defaultValue"/></xsl:if>
+	  </xsl:when>
+	  <xsl:otherwise>
+    Private <xsl:value-of select="concat($field,' As ',$fieldType)"/><xsl:if test="not($specified)"> =<xsl:value-of select="$defaultValue"/></xsl:if>
+	  </xsl:otherwise>
+	</xsl:choose>
+	<xsl:choose>
+		<xsl:when test="not($specified) and $optionXml">
+    &lt;Global.ProtoBuf.ProtoMember(<xsl:value-of select="number"/>, IsRequired:=False, Name:="<xsl:value-of select="name"/>", DataFormat:=Global.ProtoBuf.DataFormat.<xsl:value-of select="$format"/>)&gt; _
+	<xsl:choose>
+		<xsl:when test="substring-after($fieldType, 'google.protobuf.')">
+    &lt;Global.System.ComponentModel.DefaultValue(CType(<xsl:value-of select="$defaultValue"/>, <xsl:value-of select="substring-after($fieldType, 'google.protobuf.')"/>))&gt; _
+		</xsl:when>
+		<xsl:otherwise>
+    &lt;Global.System.ComponentModel.DefaultValue(CType(<xsl:value-of select="$defaultValue"/>, <xsl:value-of select="$fieldType"/>))&gt; _
+		</xsl:otherwise>
+	</xsl:choose>
+    &lt;Global.System.Xml.Serialization.XmlElement("<xsl:value-of select="name"/>", Order:=<xsl:value-of select="number"/>)&gt; _ <!--
+		--></xsl:when>
+		<xsl:when test="not($specified) and $optionDataContract">
+    &lt;Global.ProtoBuf.ProtoMember(<xsl:value-of select="number"/>, IsRequired:=False, Name:="<xsl:value-of select="name"/>", DataFormat:=Global.ProtoBuf.DataFormat.<xsl:value-of select="$format"/>)&gt; _
+    <xsl:choose>
+		<xsl:when test="substring-after($fieldType, 'google.protobuf.')">
+    &lt;Global.System.ComponentModel.DefaultValue(CType(<xsl:value-of select="$defaultValue"/>, <xsl:value-of select="substring-after($fieldType, 'google.protobuf.')"/>))&gt; _
+		</xsl:when>
+		<xsl:otherwise>
+    &lt;Global.System.ComponentModel.DefaultValue(CType(<xsl:value-of select="$defaultValue"/>, <xsl:value-of select="$fieldType"/>))&gt; _
+		</xsl:otherwise>
+	</xsl:choose>
+    &lt;Global.System.Runtime.Serialization.DataMember(Name:="<xsl:value-of select="name"/>", Order:=<xsl:value-of select="number"/>, IsRequired:=False)&gt; _ <!--
+		--></xsl:when>
+		<xsl:when test="not($specified)">
+    &lt;Global.ProtoBuf.ProtoMember(<xsl:value-of select="number"/>, IsRequired:=False, Name:="<xsl:value-of select="name"/>", DataFormat:=Global.ProtoBuf.DataFormat.<xsl:value-of select="$format"/>)&gt; _ <!--
+    --><xsl:choose>
+		<xsl:when test="substring-after($fieldType, 'google.protobuf.')">
+    &lt;Global.System.ComponentModel.DefaultValue(CType(<xsl:value-of select="$defaultValue"/>, <xsl:value-of select="substring-after($fieldType, 'google.protobuf.')"/>))&gt; _ <!--
+		--></xsl:when>
+		<xsl:otherwise>
+    &lt;Global.System.ComponentModel.DefaultValue(CType(<xsl:value-of select="$defaultValue"/>, <xsl:value-of select="$fieldType"/>))&gt; _ <!--
+		--></xsl:otherwise>
+	</xsl:choose><!--
+		--></xsl:when>
+		<xsl:when test="$optionDataContract">
+    &lt;Global.ProtoBuf.ProtoMember(<xsl:value-of select="number"/>, IsRequired:=False, Name:="<xsl:value-of select="name"/>", DataFormat:=Global.ProtoBuf.DataFormat.<xsl:value-of select="$format"/>)&gt; _
+    &lt;Global.System.Runtime.Serialization.DataMember(Name:="<xsl:value-of select="name"/>", Order:=<xsl:value-of select="number"/>, IsRequired:=False)&gt; _ <!--
+		--></xsl:when>
+		<xsl:when test="$optionXml">
+    &lt;Global.ProtoBuf.ProtoMember(<xsl:value-of select="number"/>, IsRequired:=False, Name:="<xsl:value-of select="name"/>", DataFormat:=Global.ProtoBuf.DataFormat.<xsl:value-of select="$format"/>)&gt; _
+    &lt;Global.System.Xml.Serialization.XmlElement("<xsl:value-of select="name"/>", Order:=<xsl:value-of select="number"/>)&gt; _ <!--
+		--></xsl:when>
+		<xsl:otherwise>
+    &lt;Global.ProtoBuf.ProtoMember(<xsl:value-of select="number"/>, IsRequired:=False, Name:="<xsl:value-of select="name"/>", DataFormat:=Global.ProtoBuf.DataFormat.<xsl:value-of select="$format"/>)&gt; _ <!--
+		--></xsl:otherwise>
+	</xsl:choose><!--
+	--><xsl:call-template name="WriteGetSet">
+      <xsl:with-param name="fieldType" select="$fieldType"/>
+      <xsl:with-param name="propType" select="$propType"/>
+      <xsl:with-param name="name"><xsl:call-template name="pascalPropName"/></xsl:with-param>
+      <xsl:with-param name="field" select="$field"/>
+      <xsl:with-param name="defaultValue" select="$defaultValue"/>
+      <xsl:with-param name="specified" select="$specified"/>
+    </xsl:call-template>
+  </xsl:template>
+
+  <xsl:template name="pascalPropName">
+    <xsl:param name="value" select="name"/>
+    <xsl:param name="delimiter" select="'_'"/>
+    <xsl:variable name="valueUC" select="translate($value,$alpha,$ALPHA)"/>
+    <xsl:variable name="finalName">
+      <xsl:choose>
+        <xsl:when test="$types[translate(name,$alpha,$ALPHA)=$valueUC]"><xsl:value-of select="concat($value,$delimiter,'Property')"/></xsl:when>
+        <xsl:otherwise><xsl:value-of select="$value"/></xsl:otherwise>
+      </xsl:choose>
+    </xsl:variable>
+    <xsl:call-template name="pascal">
+      <xsl:with-param name="value" select="$finalName"/>
+      <xsl:with-param name="delimiter" select="$delimiter"/>
+    </xsl:call-template>
+  </xsl:template>
+  
+  <xsl:template match="FieldDescriptorProto[label='LABEL_REQUIRED']">
+    <xsl:variable name="type"><xsl:apply-templates select="." mode="type"/></xsl:variable>
+    <xsl:variable name="format"><xsl:apply-templates select="." mode="format"/></xsl:variable>
+    <xsl:variable name="field"><xsl:apply-templates select="." mode="field"/></xsl:variable>
+    Private <xsl:value-of select="concat($field, ' As ', $type)"/>
+	<xsl:choose>
+		<xsl:when test="$optionDataContract">
+    &lt;Global.ProtoBuf.ProtoMember(<xsl:value-of select="number"/>, IsRequired:=True, Name:="<xsl:value-of select="name"/>", DataFormat:=Global.ProtoBuf.DataFormat.<xsl:value-of select="$format"/>)&gt; _
+    &lt;Global.System.Runtime.Serialization.DataMember(Name:="<xsl:value-of select="name"/>", Order:=<xsl:value-of select="number"/>, IsRequired:=True)&gt; _ <!--
+		--></xsl:when>
+		<xsl:when test="$optionXml">
+    &lt;Global.ProtoBuf.ProtoMember(<xsl:value-of select="number"/>, IsRequired:=True, Name:="<xsl:value-of select="name"/>", DataFormat:=Global.ProtoBuf.DataFormat.<xsl:value-of select="$format"/>)&gt; _
+    &lt;Global.System.Xml.Serialization.XmlElement("<xsl:value-of select="name"/>", Order:=<xsl:value-of select="number"/>)&gt; _ <!--
+		--></xsl:when>
+		<xsl:otherwise>
+    &lt;Global.ProtoBuf.ProtoMember(<xsl:value-of select="number"/>, IsRequired:=True, Name:="<xsl:value-of select="name"/>", DataFormat:=Global.ProtoBuf.DataFormat.<xsl:value-of select="$format"/>)&gt; _ <!--
+		--></xsl:otherwise>
+	</xsl:choose><!--
+    --><xsl:call-template name="WriteGetSet">
+      <xsl:with-param name="fieldType" select="$type"/>
+      <xsl:with-param name="propType" select="$type"/>
+      <xsl:with-param name="name" select="name"/>
+      <xsl:with-param name="field" select="$field"/>
+    </xsl:call-template>    
+  </xsl:template>
+
+  <xsl:template name="WriteGetSet">
+    <xsl:param name="fieldType"/>
+    <xsl:param name="propType"/>
+    <xsl:param name="name"/>
+    <xsl:param name="field"/>
+    <xsl:param name="specified" select="false()"/>
+    <xsl:param name="defaultValue"/>
+	<xsl:variable name="primitiveType"><xsl:apply-templates select="." mode="primitiveType"/></xsl:variable>
+	<xsl:choose>
+		<xsl:when test="substring-after($fieldType, 'google.protobuf.')">
+    Public Property <xsl:value-of select="concat($name,' As ',substring-after($fieldType, 'google.protobuf.'))"/>
+		</xsl:when>
+		<xsl:otherwise>
+    Public Property <xsl:value-of select="concat($name,' As ',$fieldType)"/>
+		</xsl:otherwise>
+	</xsl:choose>
+		Get 
+			<xsl:choose>
+				<xsl:when test="$specified and $primitiveType='struct'"><!--
+					-->Return <xsl:value-of select="$field"/><!--
+					--></xsl:when>
+				<xsl:when test="$specified">
+			If Not <xsl:value-of select="$field"/> Is Nothing Then
+				Return <xsl:value-of select="$field"/>
+			Else
+				Return <xsl:value-of select="$defaultValue"/>
+			End If<!--
+				--></xsl:when>
+				<xsl:otherwise><!--
+			-->Return <xsl:value-of select="$field"/><!--
+				--></xsl:otherwise>
+			</xsl:choose>
+		End Get
+	<xsl:choose>
+		<xsl:when test="substring-after($fieldType, 'google.protobuf.')">
+		Set(<xsl:value-of select="concat('value As ',substring-after($fieldType, 'google.protobuf.'))"/>)
+		</xsl:when>
+		<xsl:otherwise>
+		Set(<xsl:value-of select="concat('value As ',$fieldType)"/>)
+		</xsl:otherwise>
+	</xsl:choose>
+			<xsl:if test="$optionPartialMethods">On<xsl:value-of select="$name"/>Changing(value)
+			</xsl:if><xsl:if test="$optionPreObservable">OnPropertyChanging("<xsl:value-of select="$name"/>") 
+			</xsl:if><xsl:value-of select="$field"/> = value 
+			<xsl:if test="$optionObservable">OnPropertyChanged("<xsl:value-of select="$name"/>") </xsl:if><xsl:if test="$optionPartialMethods">On<xsl:value-of select="$name"/>Changed()</xsl:if>
+		End Set
+	End Property
+    <xsl:if test="$optionPartialMethods">
+    partial void On<xsl:value-of select="$name"/>Changing(<xsl:value-of select="$propType"/> value);
+    partial void On<xsl:value-of select="$name"/>Changed();</xsl:if><xsl:if test="$specified">
+    &lt;Global.System.Xml.Serialization.XmlIgnore&gt; _
+    <xsl:if test="$optionFullFramework">&lt;Global.System.ComponentModel.Browsable(false)&gt; _ </xsl:if>
+	<xsl:choose>
+		<xsl:when test="$specified and $primitiveType='struct'">
+	Public Property <xsl:value-of select="$name"/>Specified As Boolean
+        Get 
+            Return <xsl:value-of select="$field"/>.HasValue
+        End Get
+        Set (ByVal value As Boolean) 
+            If Not <xsl:value-of select="$field"/>.HasValue Then
+				If value = True then <xsl:value-of select="$field"/> = <xsl:value-of select="$name"/>
+			Else
+				If value = False then <xsl:value-of select="$field"/> = Nothing
+			End If
+        End Set
+    End Property
+		</xsl:when>
+		<xsl:otherwise>
+	Public Property <xsl:value-of select="$name"/>Specified As Boolean
+        Get 
+            Return <xsl:value-of select="$field"/> IsNot Nothing
+        End Get
+        Set (ByVal value As Boolean) 
+            If <xsl:value-of select="$field"/> Is Nothing Then
+				If value = True then <xsl:value-of select="$field"/> = <xsl:value-of select="$name"/>
+			Else
+				If value = False then <xsl:value-of select="$field"/> = Nothing
+			End If
+        End Set
+    End Property
+		</xsl:otherwise>
+	</xsl:choose>
+	Private Function ShouldSerialize<xsl:value-of select="$name"/>() As Boolean
+		Return <xsl:value-of select="$name"/>Specified 
+	End Function
+    Private Sub Reset<xsl:value-of select="$name"/>()
+		<xsl:value-of select="$name"/>Specified = false
+	End Sub
+    </xsl:if>
+  </xsl:template>
+  <xsl:template match="FieldDescriptorProto[label='LABEL_REPEATED']">
+    <xsl:variable name="type"><xsl:apply-templates select="." mode="type"/></xsl:variable>
+    <xsl:variable name="format"><xsl:apply-templates select="." mode="format"/></xsl:variable>
+    <xsl:variable name="field"><xsl:apply-templates select="." mode="field"/></xsl:variable>
+	<xsl:choose>
+		<xsl:when test="substring-after($type, 'google.protobuf.')">
+    Private <xsl:if test="not($optionXml)">ReadOnly </xsl:if> <xsl:value-of select="$field"/> as Global.System.Collections.Generic.List(Of <xsl:value-of select="substring-after($type, 'google.protobuf.')" />) = New Global.System.Collections.Generic.List(Of <xsl:value-of select="substring-after($type, 'google.protobuf.')"/>)()
+		</xsl:when>
+		<xsl:otherwise>
+    Private <xsl:if test="not($optionXml)">ReadOnly </xsl:if> <xsl:value-of select="$field"/> as Global.System.Collections.Generic.List(Of <xsl:value-of select="$type" />) = New Global.System.Collections.Generic.List(Of <xsl:value-of select="$type"/>)()
+		</xsl:otherwise>
+	</xsl:choose>
+	<xsl:choose>
+		<xsl:when test="$optionDataContract">
+	&lt;Global.ProtoBuf.ProtoMember(<xsl:value-of select="number"/>, Name:="<xsl:value-of select="name"/>", DataFormat:=Global.ProtoBuf.DataFormat.<xsl:value-of select="$format"/>)&gt; _
+	&lt;Global.System.Runtime.Serialization.DataMember(Name:="<xsl:value-of select="name"/>", Order:=<xsl:value-of select="number"/>, IsRequired:=False)&gt; _ 
+		</xsl:when>
+		<xsl:when test="$optionXml">
+	&lt;Global.ProtoBuf.ProtoMember(<xsl:value-of select="number"/>, Name:="<xsl:value-of select="name"/>", DataFormat:=Global.ProtoBuf.DataFormat.<xsl:value-of select="$format"/>)&gt; _
+	&lt;Global.System.Xml.Serialization.XmlElement("<xsl:value-of select="name"/>", Order:=<xsl:value-of select="number"/>)&gt; _
+		</xsl:when>
+		<xsl:otherwise>
+	&lt;Global.ProtoBuf.ProtoMember(<xsl:value-of select="number"/>, Name:="<xsl:value-of select="name"/>", DataFormat:=Global.ProtoBuf.DataFormat.<xsl:value-of select="$format"/>)&gt; _
+		</xsl:otherwise>
+	</xsl:choose><!--
+	--><xsl:choose>
+		<xsl:when test="substring-after($type, 'google.protobuf.')"><!--
+    -->Public <xsl:if test="not($optionXml)">ReadOnly </xsl:if>Property <xsl:value-of select="name"/> As Global.System.Collections.Generic.List(Of <xsl:value-of select="substring-after($type, 'google.protobuf.')" />)
+		</xsl:when>
+		<xsl:otherwise><!--
+    -->Public <xsl:if test="not($optionXml)">ReadOnly </xsl:if>Property <xsl:value-of select="name"/> As Global.System.Collections.Generic.List(Of <xsl:value-of select="$type" />)
+		</xsl:otherwise>
+	</xsl:choose>
+		Get
+			Return <xsl:value-of select="$field"/>
+		End Get
+		<!----><xsl:if test="$optionXml">
+		<xsl:choose>
+			<xsl:when test="substring-after($type, 'google.protobuf.')">
+		Set (value As Global.System.Collections.Generic.List(Of <xsl:value-of select="substring-after($type, 'google.protobuf.')" />))
+			</xsl:when>
+			<xsl:otherwise>
+		Set (value As Global.System.Collections.Generic.List(Of <xsl:value-of select="$type" />))
+			</xsl:otherwise>
+		</xsl:choose>
+			<xsl:value-of select="$field"/> = value 
+		End Set
+		</xsl:if>
+	End Property
+  </xsl:template>
+
+  <xsl:template match="ServiceDescriptorProto">
+    <xsl:if test="($optionClientProxy or $optionDataContract)">
+    &lt;Global.System.ServiceModel.ServiceContract(Name:="<xsl:value-of select="name"/>")&gt; _
+    </xsl:if>
+    Public Interface I<xsl:value-of select="name"/>
+      <xsl:apply-templates select="method"/>
+    End Interface
+    
+    <xsl:if test="$optionProtoRpc">
+    Public Class <xsl:value-of select="name"/>Client : Global.ProtoBuf.ServiceModel.RpcClient
+      public <xsl:value-of select="name"/>Client() : base(typeof(I<xsl:value-of select="name"/>)) { }
+
+      <xsl:apply-templates select="method/MethodDescriptorProto" mode="protoRpc"/>
+    End Class
+    </xsl:if>
+    <xsl:apply-templates select="." mode="clientProxy"/>
+    
+  </xsl:template>
+
+  <xsl:template match="MethodDescriptorProto">
+    <xsl:if test="$optionDataContract">
+    &lt;Global.System.ServiceModel.OperationContract(Name:="<xsl:value-of select="name"/>")&gt; _
+    &lt;Global.ProtoBuf.ServiceModel.ProtoBehavior()&gt; _
+    </xsl:if>
+    <xsl:apply-templates select="output_type"/><xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name"/>(<xsl:apply-templates select="input_type"/> request);
+    <xsl:if test="$optionAsynchronous and $optionDataContract">
+    &lt;Global.System.ServiceModel.OperationContract(AsyncPattern:=True, Name:="<xsl:value-of select="name"/>")&gt; _
+    Global.System.IAsyncResult Begin<xsl:value-of select="name"/>(<xsl:apply-templates select="input_type"/> request, Global.System.AsyncCallback callback, object state);
+    <xsl:apply-templates select="output_type"/> End<xsl:value-of select="name"/>(Global.System.IAsyncResult ar);
+    </xsl:if>
+  </xsl:template>
+
+  <xsl:template match="MethodDescriptorProto" mode="protoRpc">
+      <xsl:apply-templates select="output_type"/><xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name"/>(<xsl:apply-templates select="input_type"/> request)
+      {
+        return (<xsl:apply-templates select="output_type"/>) Send("<xsl:value-of select="name"/>", request);
+      }
+  </xsl:template>
+
+  <xsl:template match="MethodDescriptorProto/input_type | MethodDescriptorProto/output_type">
+    <xsl:value-of select="substring-after(.,'.')"/>
+  </xsl:template>
+
+  <xsl:template match="MethodDescriptorProto" mode="CompleteEvent">
+  <xsl:if test="$optionAsynchronous and $optionDataContract">
+    Public Class <xsl:value-of select="name"/>CompletedEventArgs : Global.System.ComponentModel.AsyncCompletedEventArgs
+        private object[] results;
+
+        public <xsl:value-of select="name"/>CompletedEventArgs(object[] results, Global.System.Exception exception, bool cancelled, object userState)
+            : base(exception, cancelled, userState) 
+        {
+            this.results = results;
+        }
+        
+        public <xsl:apply-templates select="output_type"/> Result
+        {
+            get { 
+                base.RaiseExceptionIfNecessary();
+                return (<xsl:apply-templates select="output_type"/>)(this.results[0]); 
+            }
+        }
+    End Class
+  </xsl:if>
+  </xsl:template>
+
+  <xsl:template match="ServiceDescriptorProto" mode="clientProxy">
+  <xsl:if test="$optionAsynchronous and $optionDataContract and $optionClientProxy">
+    <xsl:apply-templates select="method/MethodDescriptorProto" mode="CompleteEvent"/>
+    
+    &lt;Global.System.Diagnostics.DebuggerStepThroughAttribute()&gt; _
+    public partial class <xsl:value-of select="name"/>Client : Global.System.ServiceModel.ClientBase&lt;I<xsl:value-of select="name"/>&gt;, I<xsl:value-of select="name"/>
+    {
+
+        public <xsl:value-of select="name"/>Client()
+        {}
+        public <xsl:value-of select="name"/>Client(string endpointConfigurationName) 
+            : base(endpointConfigurationName) 
+        {}
+        public <xsl:value-of select="name"/>Client(string endpointConfigurationName, string remoteAddress) 
+            : base(endpointConfigurationName, remoteAddress)
+        {}
+        public <xsl:value-of select="name"/>Client(string endpointConfigurationName, Global.System.ServiceModel.EndpointAddress remoteAddress)
+            : base(endpointConfigurationName, remoteAddress)
+        {}
+        public <xsl:value-of select="name"/>Client(Global.System.ServiceModel.Channels.Binding binding, Global.System.ServiceModel.EndpointAddress remoteAddress)
+            : base(binding, remoteAddress)
+        {}
+
+        <xsl:apply-templates select="method/MethodDescriptorProto" mode="clientProxy"/>
+    }  
+  </xsl:if>
+  </xsl:template>
+
+  <xsl:template match="MethodDescriptorProto" mode="clientProxy">
+  <xsl:if test="$optionAsynchronous and $optionDataContract and $optionClientProxy">
+        private BeginOperationDelegate onBegin<xsl:value-of select="name"/>Delegate;
+        private EndOperationDelegate onEnd<xsl:value-of select="name"/>Delegate;
+        private Global.System.Threading.SendOrPostCallback on<xsl:value-of select="name"/>CompletedDelegate;
+
+        public event Global.System.EventHandler&lt;<xsl:value-of select="name"/>CompletedEventArgs&gt; <xsl:value-of select="name"/>Completed;
+
+        public <xsl:apply-templates select="output_type"/><xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name"/>(<xsl:apply-templates select="input_type"/> request)
+        {
+            return base.Channel.<xsl:value-of select="name"/>(request);
+        }
+
+        &lt;Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)&gt; _
+        public Global.System.IAsyncResult Begin<xsl:value-of select="name"/>(<xsl:apply-templates select="input_type"/> request, Global.System.AsyncCallback callback, object asyncState)
+        {
+            return base.Channel.Begin<xsl:value-of select="name"/>(request, callback, asyncState);
+        }
+
+        &lt;Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)&gt; _
+        public <xsl:apply-templates select="output_type"/> End<xsl:value-of select="name"/>(Global.System.IAsyncResult result)
+        {
+            return base.Channel.End<xsl:value-of select="name"/>(result);
+        }
+
+        private Global.System.IAsyncResult OnBegin<xsl:value-of select="name"/>(object[] inValues, Global.System.AsyncCallback callback, object asyncState)
+        {
+            <xsl:apply-templates select="input_type"/> request = ((<xsl:apply-templates select="input_type"/>)(inValues[0]));
+            return this.Begin<xsl:value-of select="name"/>(request, callback, asyncState);
+        }
+
+        private object[] OnEnd<xsl:value-of select="name"/>(Global.System.IAsyncResult result)
+        {
+            <xsl:apply-templates select="output_type"/> retVal = this.End<xsl:value-of select="name"/>(result);
+            return new object[] {
+                retVal};
+        }
+
+        private void On<xsl:value-of select="name"/>Completed(object state)
+        {
+            if ((this.<xsl:value-of select="name"/>Completed != null))
+            {
+                InvokeAsyncCompletedEventArgs e = ((InvokeAsyncCompletedEventArgs)(state));
+                this.<xsl:value-of select="name"/>Completed(this, new <xsl:value-of select="name"/>CompletedEventArgs(e.Results, e.Error, e.Cancelled, e.UserState));
+            }
+        }
+
+        public void <xsl:value-of select="name"/>Async(<xsl:apply-templates select="input_type"/> request)
+        {
+            this.<xsl:value-of select="name"/>Async(request, null);
+        }
+
+        public void <xsl:value-of select="name"/>Async(<xsl:apply-templates select="input_type"/> request, object userState)
+        {
+            if ((this.onBegin<xsl:value-of select="name"/>Delegate == null))
+            {
+                this.onBegin<xsl:value-of select="name"/>Delegate = new BeginOperationDelegate(this.OnBegin<xsl:value-of select="name"/>);
+            }
+            if ((this.onEnd<xsl:value-of select="name"/>Delegate == null))
+            {
+                this.onEnd<xsl:value-of select="name"/>Delegate = new EndOperationDelegate(this.OnEnd<xsl:value-of select="name"/>);
+            }
+            if ((this.on<xsl:value-of select="name"/>CompletedDelegate == null))
+            {
+                this.on<xsl:value-of select="name"/>CompletedDelegate = new Global.System.Threading.SendOrPostCallback(this.On<xsl:value-of select="name"/>Completed);
+            }
+            base.InvokeAsync(this.onBegin<xsl:value-of select="name"/>Delegate, new object[] {
+                    request}, this.onEnd<xsl:value-of select="name"/>Delegate, this.on<xsl:value-of select="name"/>CompletedDelegate, userState);
+        }
+    </xsl:if>
+    </xsl:template>
+  
+  <xsl:template name="escapeKeyword"><xsl:param name="value"/><xsl:choose>
+      <xsl:when test="contains($keywordsUpper,concat('|',translate($value, $alpha, $ALPHA),'|'))">[<xsl:value-of select="$value"/>]</xsl:when>
+      <xsl:otherwise><xsl:value-of select="$value"/></xsl:otherwise>
+    </xsl:choose></xsl:template>
+  <xsl:variable name="keywords">|AddHandler|AddressOf|Alias|And|AndAlso|As|Boolean|ByRef|Byte|ByVal|Call|Case|Catch|CBool|CByte|CChar|CDate|CDec|CDbl|Char|CInt|Class|CLng|CObj|Const|Continue|CSByte|CShort|CSng|CStr|CType|CUInt|CULng|CUShort|Date|Decimal|Declare|Default|Delegate|Dim|DirectCast|Do|Double|Each|Else|ElseIf|End|EndIf|Enum|Erase|Error|Event|Exit|False|Finally|For|Friend|Function|Get|GetType|GetXMLNamespace|Global|GoSub|GoTo|Handles|If|Implements|Imports|In|Inherits|Integer|Interface|Is|IsNot|Let|Lib|Like|Long|Loop|Me|Mod|Module|MustInherit|MustOverride|MyBase|MyClass|Namespace|Narrowing|New|Next|Not|Nothing|NotInheritable|NotOverridable|Object|Of|On|Operator|Option|Optional|Or|OrElse|Overloads|Overridable|Overrides|ParamArray|Partial|Private|Property|Protected|Public|RaiseEvent|ReadOnly|ReDim|REM|RemoveHandler|Resume|Return|SByte|Select|Set|Shadows|Shared|Short|Single|Static|Step|Stop|String|Structure|Sub|SyncLock|Then|Throw|To|True|Try|TryCast|TypeOf|Variant|Wend|UInteger|ULong|UShort|Using|When|While|Widening|With|WithEvents|WriteOnly|Xor|</xsl:variable>
+  <xsl:variable name="keywordsUpper" select="translate($keywords, $alpha, $ALPHA)"/>
+
+</xsl:stylesheet>
diff --git a/ProtobufCore/Protogen-Tools/xml.xslt b/ProtobufCore/Protogen-Tools/xml.xslt
new file mode 100644
index 0000000..a8b1828
--- /dev/null
+++ b/ProtobufCore/Protogen-Tools/xml.xslt
@@ -0,0 +1,26 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+    xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="xsl msxsl"
+>
+  <xsl:param name="help"/>
+  <xsl:output method="xml" indent="yes"/>
+
+
+  <xsl:template match="/*">
+    <xsl:if test="$help='true'">
+      <xsl:message terminate="yes">
+        Xml template for protobuf-net.
+        
+        This template writes the proto descriptor as xml.
+        No options available.
+      </xsl:message>
+    </xsl:if>
+    <xsl:call-template name="main"/>
+  </xsl:template>
+  
+    <xsl:template match="@* | node()" name="main">
+        <xsl:copy>
+            <xsl:apply-templates select="@* | node()"/>
+        </xsl:copy>
+    </xsl:template>
+</xsl:stylesheet>
diff --git a/ProtobufCore/Target/protobuf_HunterNetCore.cs b/ProtobufCore/Target/protobuf_HunterNetCore.cs
new file mode 100644
index 0000000..740871f
--- /dev/null
+++ b/ProtobufCore/Target/protobuf_HunterNetCore.cs
@@ -0,0 +1,120 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+// Option: missing-value detection (*Specified/ShouldSerialize*/Reset*) enabled
+    
+// Generated from: proto/protobuf_HunterNetCore.proto
+namespace HunterProtobufCore
+{
+  [global::System.Serializable, global::ProtoBuf.ProtoContract(Name=@"HunterNet_C2S")]
+  public partial class HunterNet_C2S : global::ProtoBuf.IExtensible
+  {
+    public HunterNet_C2S() {}
+    
+    private int? _HunterNetCore_CmdID;
+    [global::ProtoBuf.ProtoMember(1, IsRequired = false, Name=@"HunterNetCore_CmdID", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
+    public int? HunterNetCore_CmdID
+    {
+      get { return _HunterNetCore_CmdID; }
+      set { _HunterNetCore_CmdID = value; }
+    }
+    [global::System.Xml.Serialization.XmlIgnore]
+    [global::System.ComponentModel.Browsable(false)]
+    public bool HunterNetCore_CmdIDSpecified
+    {
+      get { return this._HunterNetCore_CmdID != null; }
+      set { if (value == (this._HunterNetCore_CmdID== null)) this._HunterNetCore_CmdID = value ? this.HunterNetCore_CmdID : (int?)null; }
+    }
+    private bool ShouldSerializeHunterNetCore_CmdID() { return HunterNetCore_CmdIDSpecified; }
+    private void ResetHunterNetCore_CmdID() { HunterNetCore_CmdIDSpecified = false; }
+    
+    private byte[] _HunterNetCore_Data;
+    [global::ProtoBuf.ProtoMember(2, IsRequired = false, Name=@"HunterNetCore_Data", DataFormat = global::ProtoBuf.DataFormat.Default)]
+    public byte[] HunterNetCore_Data
+    {
+      get { return _HunterNetCore_Data; }
+      set { _HunterNetCore_Data = value; }
+    }
+    [global::System.Xml.Serialization.XmlIgnore]
+    [global::System.ComponentModel.Browsable(false)]
+    public bool HunterNetCore_DataSpecified
+    {
+      get { return this._HunterNetCore_Data != null; }
+      set { if (value == (this._HunterNetCore_Data== null)) this._HunterNetCore_Data = value ? this.HunterNetCore_Data : (byte[])null; }
+    }
+    private bool ShouldSerializeHunterNetCore_Data() { return HunterNetCore_DataSpecified; }
+    private void ResetHunterNetCore_Data() { HunterNetCore_DataSpecified = false; }
+    
+    private global::ProtoBuf.IExtension extensionObject;
+    global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+      { return global::ProtoBuf.Extensible.GetExtensionObject(ref extensionObject, createIfMissing); }
+  }
+  
+  [global::System.Serializable, global::ProtoBuf.ProtoContract(Name=@"HunterNet_S2C")]
+  public partial class HunterNet_S2C : global::ProtoBuf.IExtensible
+  {
+    public HunterNet_S2C() {}
+    
+    private int? _HunterNetCore_CmdID;
+    [global::ProtoBuf.ProtoMember(1, IsRequired = false, Name=@"HunterNetCore_CmdID", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
+    public int? HunterNetCore_CmdID
+    {
+      get { return _HunterNetCore_CmdID; }
+      set { _HunterNetCore_CmdID = value; }
+    }
+    [global::System.Xml.Serialization.XmlIgnore]
+    [global::System.ComponentModel.Browsable(false)]
+    public bool HunterNetCore_CmdIDSpecified
+    {
+      get { return this._HunterNetCore_CmdID != null; }
+      set { if (value == (this._HunterNetCore_CmdID== null)) this._HunterNetCore_CmdID = value ? this.HunterNetCore_CmdID : (int?)null; }
+    }
+    private bool ShouldSerializeHunterNetCore_CmdID() { return HunterNetCore_CmdIDSpecified; }
+    private void ResetHunterNetCore_CmdID() { HunterNetCore_CmdIDSpecified = false; }
+    
+    private int? _HunterNetCore_ERRORCode;
+    [global::ProtoBuf.ProtoMember(2, IsRequired = false, Name=@"HunterNetCore_ERRORCode", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
+    public int? HunterNetCore_ERRORCode
+    {
+      get { return _HunterNetCore_ERRORCode; }
+      set { _HunterNetCore_ERRORCode = value; }
+    }
+    [global::System.Xml.Serialization.XmlIgnore]
+    [global::System.ComponentModel.Browsable(false)]
+    public bool HunterNetCore_ERRORCodeSpecified
+    {
+      get { return this._HunterNetCore_ERRORCode != null; }
+      set { if (value == (this._HunterNetCore_ERRORCode== null)) this._HunterNetCore_ERRORCode = value ? this.HunterNetCore_ERRORCode : (int?)null; }
+    }
+    private bool ShouldSerializeHunterNetCore_ERRORCode() { return HunterNetCore_ERRORCodeSpecified; }
+    private void ResetHunterNetCore_ERRORCode() { HunterNetCore_ERRORCodeSpecified = false; }
+    
+    private byte[] _HunterNetCore_Data;
+    [global::ProtoBuf.ProtoMember(3, IsRequired = false, Name=@"HunterNetCore_Data", DataFormat = global::ProtoBuf.DataFormat.Default)]
+    public byte[] HunterNetCore_Data
+    {
+      get { return _HunterNetCore_Data; }
+      set { _HunterNetCore_Data = value; }
+    }
+    [global::System.Xml.Serialization.XmlIgnore]
+    [global::System.ComponentModel.Browsable(false)]
+    public bool HunterNetCore_DataSpecified
+    {
+      get { return this._HunterNetCore_Data != null; }
+      set { if (value == (this._HunterNetCore_Data== null)) this._HunterNetCore_Data = value ? this.HunterNetCore_Data : (byte[])null; }
+    }
+    private bool ShouldSerializeHunterNetCore_Data() { return HunterNetCore_DataSpecified; }
+    private void ResetHunterNetCore_Data() { HunterNetCore_DataSpecified = false; }
+    
+    private global::ProtoBuf.IExtension extensionObject;
+    global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+      { return global::ProtoBuf.Extensible.GetExtensionObject(ref extensionObject, createIfMissing); }
+  }
+  
+}
\ No newline at end of file
diff --git a/ProtobufCore/build.bat b/ProtobufCore/build.bat
new file mode 100644
index 0000000..5df9e2d
--- /dev/null
+++ b/ProtobufCore/build.bat
@@ -0,0 +1,7 @@
+@echo off
+cd..
+set "protopath=%cd%"
+cd protocol
+protoc --proto_path=./proto --cpp_out=out "./proto/KyCmdProtocol.proto"
+protoc --proto_path=./proto --cpp_out=out "./proto/KyMsgProtocol.proto"
+pause
\ No newline at end of file
diff --git a/ProtobufCore/proto/protobuf_HunterNetCore.proto b/ProtobufCore/proto/protobuf_HunterNetCore.proto
new file mode 100644
index 0000000..06c335b
--- /dev/null
+++ b/ProtobufCore/proto/protobuf_HunterNetCore.proto
@@ -0,0 +1,16 @@
+syntax = "proto3";
+package HunterProtobufCore;
+option optimize_for = SPEED;
+
+//上行
+message HunterNet_C2S {
+    int32 HunterNetCore_CmdID = 1;
+    bytes HunterNetCore_Data = 2;
+}
+
+//下行
+message HunterNet_S2C {
+    int32 HunterNetCore_CmdID = 1;
+	int32 HunterNetCore_ERRORCode = 2;
+    bytes HunterNetCore_Data = 3;
+}
\ No newline at end of file
diff --git a/ProtobufCore/protobuf-net.dll b/ProtobufCore/protobuf-net.dll
new file mode 100644
index 0000000..942e33b
Binary files /dev/null and b/ProtobufCore/protobuf-net.dll differ
diff --git a/ProtobufCore/protoc.exe b/ProtobufCore/protoc.exe
new file mode 100644
index 0000000..db74054
Binary files /dev/null and b/ProtobufCore/protoc.exe differ
diff --git a/ProtobufCore/protoc_net.bat b/ProtobufCore/protoc_net.bat
new file mode 100644
index 0000000..0c9f56e
--- /dev/null
+++ b/ProtobufCore/protoc_net.bat
@@ -0,0 +1,2 @@
+call protoc proto\protobuf_HunterNetCore.proto --descriptor_set_out=Desc\protobuf_HunterNetCore.protodesc
+pause
\ No newline at end of file
diff --git a/ProtobufCore/protogen.exe.config b/ProtobufCore/protogen.exe.config
new file mode 100644
index 0000000..e59af44
--- /dev/null
+++ b/ProtobufCore/protogen.exe.config
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<configuration>
+<startup><supportedRuntime version="v2.0.50727"/></startup></configuration>
diff --git a/ProtobufCore/protogen_net.bat b/ProtobufCore/protogen_net.bat
new file mode 100644
index 0000000..1a3510d
--- /dev/null
+++ b/ProtobufCore/protogen_net.bat
@@ -0,0 +1,2 @@
+call Protogen-Tools\protogen -i:Desc\protobuf_HunterNetCore.protodesc -o:Target\protobuf_HunterNetCore.cs  -p:detectMissing
+
