aboutsummaryrefslogblamecommitdiff
path: root/csharp/src/ProtocolBuffers.Test/TestProtos/MapUnittestProto3.cs
blob: 365c03a7af876463023f60291b7263c004d1c936 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
3898
3899
3900
3901
3902
3903
3904
3905
3906
3907
3908
3909
3910
3911
3912
3913
3914
3915
3916
3917
3918
3919
3920
3921
3922
3923
3924
3925
3926
3927
3928
3929
3930
3931
3932
3933
3934
3935
3936
3937
3938
3939
3940
3941
3942
3943
3944
3945
3946
3947
3948
3949
3950
3951
3952
3953
3954
3955
3956
3957
3958
3959
3960
3961
3962
3963
3964
3965
3966
3967
3968
3969
3970
3971
3972
3973
3974
3975
3976
3977
3978
3979
3980
3981
3982
3983
3984
3985
3986
3987
3988
3989
3990
3991
3992
3993
3994
3995
3996
3997
3998
3999
4000
4001
4002
4003
4004
4005
4006
4007
4008
4009
4010
4011
4012
4013
4014
4015
4016
4017
4018
4019
4020
4021
4022
4023
4024
4025
4026
4027
4028
4029
4030
4031
4032
4033
4034
4035
4036
4037
4038
4039
4040
4041
4042
4043
4044
4045
4046
4047
4048
4049
4050
4051
4052
4053
4054
4055
4056
4057
4058
4059
4060
4061
4062
4063
4064
4065
4066
4067
4068
4069
4070
4071
4072
4073
4074
4075
4076
4077
4078
4079
4080
4081
4082
4083
4084
4085
4086
4087
4088
4089
4090
4091
4092
4093
4094
4095
4096
4097
4098
4099
4100
4101
4102
4103
4104
4105
4106
4107
4108
4109
4110
4111
4112
4113
4114
4115
4116
4117
4118
4119
4120
4121
4122
4123
4124
4125
4126
4127
4128
4129
4130
4131
4132
4133
4134
4135
4136
4137
4138
4139
4140
4141
4142
4143
4144
4145
4146
4147
4148
4149
4150
4151
4152
4153
4154
4155
4156
4157
4158
4159
4160
4161
4162
4163
4164
4165
4166
4167
4168
4169
4170
4171
4172
4173
4174
4175
4176
4177
4178
4179
4180
4181
4182
4183
4184
4185
4186
4187
4188
4189
4190
4191
4192
4193
4194
4195
4196
4197
4198
4199
4200
4201
4202
4203
4204
4205
4206
4207
4208
4209
4210
4211
4212
4213
4214
4215
4216
4217
4218
4219
4220
4221
4222
4223
4224
4225
4226
4227
4228
4229
4230
4231
4232
4233
4234
4235
4236
4237
4238
4239
4240
4241
4242
4243
4244
4245
4246
4247
4248
4249
4250
4251
4252
4253
4254
4255
4256
4257
4258
4259
4260
4261
4262
4263














                                                             











































                                                                                                                                                         





































































































































                                                                            
                                                                                     

                                                                        




































































































































                                                                                                                                                                                                                                                                                                                                                                      





















                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                     

     
                                                      



















































































































































































































































































































































































































                                                                                                                                                                                                                    
                                                                                              

         
                                                          





































































































































                                                                                                                                                                
                                                                                              

         
                                                          





































































































































                                                                                                                                                                
                                                                                              

         
                                                          





































































































































                                                                                                                                                                  
                                                                                              

         
                                                          





































































































































                                                                                                                                                                  
                                                                                              

         
                                                          





































































































































                                                                                                                                                                  
                                                                                              

         
                                                          





































































































































                                                                                                                                                                      
                                                                                              

         
                                                          





































































































































                                                                                                                                                                      
                                                                                              

         
                                                          





































































































































                                                                                                                                                                            
                                                                                              

         
                                                          





































































































































                                                                                                                                                                            
                                                                                              

         
                                                          





































































































































                                                                                                                                                                      
                                                                                               

         
                                                          





































































































































                                                                                                                                                                
                                                                                               

         
                                                          





































































































































                                                                                                                                                                 
                                                                                               

         
                                                          





































































































































                                                                                                                                                                
                                                                                               

         
                                                          





































































































































                                                                                                                                                                  
                                                                                               

         
                                                          





































































































































                                                                                                                                                                
                                                                                               

         
                                                          





































































































































                                                                                                                                                                                     
                                                                                               

         
                                                          

















































































































































                                                                                                                                                                         
                                                                                                     

     
                                                      

















































































































                                                                                                                                                   
                                                                                                     

     
                                                      



































































































                                                                                                                                                                                                               
                                                                                                     

         
                                                          

















































































































































                                                                                                                                                                         
                                                                                                     

     
                                                      






















































































































                                                                                                                                                 
                                                                                                      

         
                                                          





































































































































                                                                                                                                                               
                                                                                                      

         
                                                          










































































































































                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                     

     
                                                      













































































































































































































































































































































































                                                                                                                                                                                                                    
                                                                                                   

         
                                                          





































































































































                                                                                                                                                                     
                                                                                                   

         
                                                          





































































































































                                                                                                                                                                     
                                                                                                   

         
                                                          





































































































































                                                                                                                                                                       
                                                                                                   

         
                                                          





































































































































                                                                                                                                                                       
                                                                                                   

         
                                                          





































































































































                                                                                                                                                                       
                                                                                                   

         
                                                          





































































































































                                                                                                                                                                       
                                                                                                   

         
                                                          





































































































































                                                                                                                                                                         
                                                                                                   

         
                                                          





































































































































                                                                                                                                                                            
                                                                                                   

         
                                                          





































































































































                                                                                                                                                                            
                                                                                                   

         
                                                          





































































































































                                                                                                                                                                           
                                                                                                    

         
                                                          





































































































































                                                                                                                                                                     
                                                                                                    

         
                                                          





































































































































                                                                                                                                                                      
                                                                                                    

         
                                                          





































































































































                                                                                                                                                                   
                                                                                                    

         
                                                          





































































































































                                                                                                                                                                                     
                                                                                                    

         
                                                          

















































































































































                                                                                                                                                                                             
                                                                                                     

     
                                                      







































































































                                                                                                                                                                                                                                                     
                                                                                                                      

         
                                                          

















































































































































                                                                                                                                                                                             
                                                                                                     

     
                                                      



































































































                                                                                                                                                                 
                                                                                                                      

         
                                                          







































































































































                                                                                                                                                                                
// Generated by the protocol buffer compiler.  DO NOT EDIT!
// source: google/protobuf/map_unittest_proto3.proto
#pragma warning disable 1591, 0612, 3021
#region Designer generated code

using pb = global::Google.Protobuf;
using pbc = global::Google.Protobuf.Collections;
using pbd = global::Google.Protobuf.Descriptors;
using scg = global::System.Collections.Generic;
namespace Google.Protobuf.TestProtos {

  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
  public static partial class MapUnittestProto3 {

    #region Static variables
    internal static pb::FieldAccess.FieldAccessorTable internal__static_protobuf_unittest_TestMap__FieldAccessorTable;
    internal static pb::FieldAccess.FieldAccessorTable internal__static_protobuf_unittest_TestMap_MapInt32Int32Entry__FieldAccessorTable;
    internal static pb::FieldAccess.FieldAccessorTable internal__static_protobuf_unittest_TestMap_MapInt64Int64Entry__FieldAccessorTable;
    internal static pb::FieldAccess.FieldAccessorTable internal__static_protobuf_unittest_TestMap_MapUint32Uint32Entry__FieldAccessorTable;
    internal static pb::FieldAccess.FieldAccessorTable internal__static_protobuf_unittest_TestMap_MapUint64Uint64Entry__FieldAccessorTable;
    internal static pb::FieldAccess.FieldAccessorTable internal__static_protobuf_unittest_TestMap_MapSint32Sint32Entry__FieldAccessorTable;
    internal static pb::FieldAccess.FieldAccessorTable internal__static_protobuf_unittest_TestMap_MapSint64Sint64Entry__FieldAccessorTable;
    internal static pb::FieldAccess.FieldAccessorTable internal__static_protobuf_unittest_TestMap_MapFixed32Fixed32Entry__FieldAccessorTable;
    internal static pb::FieldAccess.FieldAccessorTable internal__static_protobuf_unittest_TestMap_MapFixed64Fixed64Entry__FieldAccessorTable;
    internal static pb::FieldAccess.FieldAccessorTable internal__static_protobuf_unittest_TestMap_MapSfixed32Sfixed32Entry__FieldAccessorTable;
    internal static pb::FieldAccess.FieldAccessorTable internal__static_protobuf_unittest_TestMap_MapSfixed64Sfixed64Entry__FieldAccessorTable;
    internal static pb::FieldAccess.FieldAccessorTable internal__static_protobuf_unittest_TestMap_MapInt32FloatEntry__FieldAccessorTable;
    internal static pb::FieldAccess.FieldAccessorTable internal__static_protobuf_unittest_TestMap_MapInt32DoubleEntry__FieldAccessorTable;
    internal static pb::FieldAccess.FieldAccessorTable internal__static_protobuf_unittest_TestMap_MapBoolBoolEntry__FieldAccessorTable;
    internal static pb::FieldAccess.FieldAccessorTable internal__static_protobuf_unittest_TestMap_MapStringStringEntry__FieldAccessorTable;
    internal static pb::FieldAccess.FieldAccessorTable internal__static_protobuf_unittest_TestMap_MapInt32BytesEntry__FieldAccessorTable;
    internal static pb::FieldAccess.FieldAccessorTable internal__static_protobuf_unittest_TestMap_MapInt32EnumEntry__FieldAccessorTable;
    internal static pb::FieldAccess.FieldAccessorTable internal__static_protobuf_unittest_TestMap_MapInt32ForeignMessageEntry__FieldAccessorTable;
    internal static pb::FieldAccess.FieldAccessorTable internal__static_protobuf_unittest_TestMapSubmessage__FieldAccessorTable;
    internal static pb::FieldAccess.FieldAccessorTable internal__static_protobuf_unittest_TestMessageMap__FieldAccessorTable;
    internal static pb::FieldAccess.FieldAccessorTable internal__static_protobuf_unittest_TestMessageMap_MapInt32MessageEntry__FieldAccessorTable;
    internal static pb::FieldAccess.FieldAccessorTable internal__static_protobuf_unittest_TestSameTypeMap__FieldAccessorTable;
    internal static pb::FieldAccess.FieldAccessorTable internal__static_protobuf_unittest_TestSameTypeMap_Map1Entry__FieldAccessorTable;
    internal static pb::FieldAccess.FieldAccessorTable internal__static_protobuf_unittest_TestSameTypeMap_Map2Entry__FieldAccessorTable;
    internal static pb::FieldAccess.FieldAccessorTable internal__static_protobuf_unittest_TestArenaMap__FieldAccessorTable;
    internal static pb::FieldAccess.FieldAccessorTable internal__static_protobuf_unittest_TestArenaMap_MapInt32Int32Entry__FieldAccessorTable;
    internal static pb::FieldAccess.FieldAccessorTable internal__static_protobuf_unittest_TestArenaMap_MapInt64Int64Entry__FieldAccessorTable;
    internal static pb::FieldAccess.FieldAccessorTable internal__static_protobuf_unittest_TestArenaMap_MapUint32Uint32Entry__FieldAccessorTable;
    internal static pb::FieldAccess.FieldAccessorTable internal__static_protobuf_unittest_TestArenaMap_MapUint64Uint64Entry__FieldAccessorTable;
    internal static pb::FieldAccess.FieldAccessorTable internal__static_protobuf_unittest_TestArenaMap_MapSint32Sint32Entry__FieldAccessorTable;
    internal static pb::FieldAccess.FieldAccessorTable internal__static_protobuf_unittest_TestArenaMap_MapSint64Sint64Entry__FieldAccessorTable;
    internal static pb::FieldAccess.FieldAccessorTable internal__static_protobuf_unittest_TestArenaMap_MapFixed32Fixed32Entry__FieldAccessorTable;
    internal static pb::FieldAccess.FieldAccessorTable internal__static_protobuf_unittest_TestArenaMap_MapFixed64Fixed64Entry__FieldAccessorTable;
    internal static pb::FieldAccess.FieldAccessorTable internal__static_protobuf_unittest_TestArenaMap_MapSfixed32Sfixed32Entry__FieldAccessorTable;
    internal static pb::FieldAccess.FieldAccessorTable internal__static_protobuf_unittest_TestArenaMap_MapSfixed64Sfixed64Entry__FieldAccessorTable;
    internal static pb::FieldAccess.FieldAccessorTable internal__static_protobuf_unittest_TestArenaMap_MapInt32FloatEntry__FieldAccessorTable;
    internal static pb::FieldAccess.FieldAccessorTable internal__static_protobuf_unittest_TestArenaMap_MapInt32DoubleEntry__FieldAccessorTable;
    internal static pb::FieldAccess.FieldAccessorTable internal__static_protobuf_unittest_TestArenaMap_MapBoolBoolEntry__FieldAccessorTable;
    internal static pb::FieldAccess.FieldAccessorTable internal__static_protobuf_unittest_TestArenaMap_MapInt32EnumEntry__FieldAccessorTable;
    internal static pb::FieldAccess.FieldAccessorTable internal__static_protobuf_unittest_TestArenaMap_MapInt32ForeignMessageEntry__FieldAccessorTable;
    internal static pb::FieldAccess.FieldAccessorTable internal__static_protobuf_unittest_MessageContainingEnumCalledType__FieldAccessorTable;
    internal static pb::FieldAccess.FieldAccessorTable internal__static_protobuf_unittest_MessageContainingEnumCalledType_TypeEntry__FieldAccessorTable;
    internal static pb::FieldAccess.FieldAccessorTable internal__static_protobuf_unittest_MessageContainingMapCalledEntry__FieldAccessorTable;
    internal static pb::FieldAccess.FieldAccessorTable internal__static_protobuf_unittest_MessageContainingMapCalledEntry_EntryEntry__FieldAccessorTable;
    #endregion
    #region Descriptor
    public static pbd::FileDescriptor Descriptor {
      get { return descriptor; }
    }
    private static pbd::FileDescriptor descriptor;

    static MapUnittestProto3() {
      byte[] descriptorData = global::System.Convert.FromBase64String(
          string.Concat(
            "Cilnb29nbGUvcHJvdG9idWYvbWFwX3VuaXR0ZXN0X3Byb3RvMy5wcm90bxIR", 
            "cHJvdG9idWZfdW5pdHRlc3QaJWdvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9w", 
            "cm90bzMucHJvdG8ilhIKB1Rlc3RNYXASRgoPbWFwX2ludDMyX2ludDMyGAEg", 
            "AygLMi0ucHJvdG9idWZfdW5pdHRlc3QuVGVzdE1hcC5NYXBJbnQzMkludDMy", 
            "RW50cnkSRgoPbWFwX2ludDY0X2ludDY0GAIgAygLMi0ucHJvdG9idWZfdW5p", 
            "dHRlc3QuVGVzdE1hcC5NYXBJbnQ2NEludDY0RW50cnkSSgoRbWFwX3VpbnQz", 
            "Ml91aW50MzIYAyADKAsyLy5wcm90b2J1Zl91bml0dGVzdC5UZXN0TWFwLk1h", 
            "cFVpbnQzMlVpbnQzMkVudHJ5EkoKEW1hcF91aW50NjRfdWludDY0GAQgAygL", 
            "Mi8ucHJvdG9idWZfdW5pdHRlc3QuVGVzdE1hcC5NYXBVaW50NjRVaW50NjRF", 
            "bnRyeRJKChFtYXBfc2ludDMyX3NpbnQzMhgFIAMoCzIvLnByb3RvYnVmX3Vu", 
            "aXR0ZXN0LlRlc3RNYXAuTWFwU2ludDMyU2ludDMyRW50cnkSSgoRbWFwX3Np", 
            "bnQ2NF9zaW50NjQYBiADKAsyLy5wcm90b2J1Zl91bml0dGVzdC5UZXN0TWFw", 
            "Lk1hcFNpbnQ2NFNpbnQ2NEVudHJ5Ek4KE21hcF9maXhlZDMyX2ZpeGVkMzIY", 
            "ByADKAsyMS5wcm90b2J1Zl91bml0dGVzdC5UZXN0TWFwLk1hcEZpeGVkMzJG", 
            "aXhlZDMyRW50cnkSTgoTbWFwX2ZpeGVkNjRfZml4ZWQ2NBgIIAMoCzIxLnBy", 
            "b3RvYnVmX3VuaXR0ZXN0LlRlc3RNYXAuTWFwRml4ZWQ2NEZpeGVkNjRFbnRy", 
            "eRJSChVtYXBfc2ZpeGVkMzJfc2ZpeGVkMzIYCSADKAsyMy5wcm90b2J1Zl91", 
            "bml0dGVzdC5UZXN0TWFwLk1hcFNmaXhlZDMyU2ZpeGVkMzJFbnRyeRJSChVt", 
            "YXBfc2ZpeGVkNjRfc2ZpeGVkNjQYCiADKAsyMy5wcm90b2J1Zl91bml0dGVz", 
            "dC5UZXN0TWFwLk1hcFNmaXhlZDY0U2ZpeGVkNjRFbnRyeRJGCg9tYXBfaW50", 
            "MzJfZmxvYXQYCyADKAsyLS5wcm90b2J1Zl91bml0dGVzdC5UZXN0TWFwLk1h", 
            "cEludDMyRmxvYXRFbnRyeRJIChBtYXBfaW50MzJfZG91YmxlGAwgAygLMi4u", 
            "cHJvdG9idWZfdW5pdHRlc3QuVGVzdE1hcC5NYXBJbnQzMkRvdWJsZUVudHJ5", 
            "EkIKDW1hcF9ib29sX2Jvb2wYDSADKAsyKy5wcm90b2J1Zl91bml0dGVzdC5U", 
            "ZXN0TWFwLk1hcEJvb2xCb29sRW50cnkSSgoRbWFwX3N0cmluZ19zdHJpbmcY", 
            "DiADKAsyLy5wcm90b2J1Zl91bml0dGVzdC5UZXN0TWFwLk1hcFN0cmluZ1N0", 
            "cmluZ0VudHJ5EkYKD21hcF9pbnQzMl9ieXRlcxgPIAMoCzItLnByb3RvYnVm", 
            "X3VuaXR0ZXN0LlRlc3RNYXAuTWFwSW50MzJCeXRlc0VudHJ5EkQKDm1hcF9p", 
            "bnQzMl9lbnVtGBAgAygLMiwucHJvdG9idWZfdW5pdHRlc3QuVGVzdE1hcC5N", 
            "YXBJbnQzMkVudW1FbnRyeRJZChltYXBfaW50MzJfZm9yZWlnbl9tZXNzYWdl", 
            "GBEgAygLMjYucHJvdG9idWZfdW5pdHRlc3QuVGVzdE1hcC5NYXBJbnQzMkZv", 
            "cmVpZ25NZXNzYWdlRW50cnkaNAoSTWFwSW50MzJJbnQzMkVudHJ5EgsKA2tl", 
            "eRgBIAEoBRINCgV2YWx1ZRgCIAEoBToCOAEaNAoSTWFwSW50NjRJbnQ2NEVu", 
            "dHJ5EgsKA2tleRgBIAEoAxINCgV2YWx1ZRgCIAEoAzoCOAEaNgoUTWFwVWlu", 
            "dDMyVWludDMyRW50cnkSCwoDa2V5GAEgASgNEg0KBXZhbHVlGAIgASgNOgI4", 
            "ARo2ChRNYXBVaW50NjRVaW50NjRFbnRyeRILCgNrZXkYASABKAQSDQoFdmFs", 
            "dWUYAiABKAQ6AjgBGjYKFE1hcFNpbnQzMlNpbnQzMkVudHJ5EgsKA2tleRgB", 
            "IAEoERINCgV2YWx1ZRgCIAEoEToCOAEaNgoUTWFwU2ludDY0U2ludDY0RW50", 
            "cnkSCwoDa2V5GAEgASgSEg0KBXZhbHVlGAIgASgSOgI4ARo4ChZNYXBGaXhl", 
            "ZDMyRml4ZWQzMkVudHJ5EgsKA2tleRgBIAEoBxINCgV2YWx1ZRgCIAEoBzoC", 
            "OAEaOAoWTWFwRml4ZWQ2NEZpeGVkNjRFbnRyeRILCgNrZXkYASABKAYSDQoF", 
            "dmFsdWUYAiABKAY6AjgBGjoKGE1hcFNmaXhlZDMyU2ZpeGVkMzJFbnRyeRIL", 
            "CgNrZXkYASABKA8SDQoFdmFsdWUYAiABKA86AjgBGjoKGE1hcFNmaXhlZDY0", 
            "U2ZpeGVkNjRFbnRyeRILCgNrZXkYASABKBASDQoFdmFsdWUYAiABKBA6AjgB", 
            "GjQKEk1hcEludDMyRmxvYXRFbnRyeRILCgNrZXkYASABKAUSDQoFdmFsdWUY", 
            "AiABKAI6AjgBGjUKE01hcEludDMyRG91YmxlRW50cnkSCwoDa2V5GAEgASgF", 
            "Eg0KBXZhbHVlGAIgASgBOgI4ARoyChBNYXBCb29sQm9vbEVudHJ5EgsKA2tl", 
            "eRgBIAEoCBINCgV2YWx1ZRgCIAEoCDoCOAEaNgoUTWFwU3RyaW5nU3RyaW5n", 
            "RW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ARo0ChJNYXBJ", 
            "bnQzMkJ5dGVzRW50cnkSCwoDa2V5GAEgASgFEg0KBXZhbHVlGAIgASgMOgI4", 
            "ARpPChFNYXBJbnQzMkVudW1FbnRyeRILCgNrZXkYASABKAUSKQoFdmFsdWUY", 
            "AiABKA4yGi5wcm90b2J1Zl91bml0dGVzdC5NYXBFbnVtOgI4ARpgChtNYXBJ", 
            "bnQzMkZvcmVpZ25NZXNzYWdlRW50cnkSCwoDa2V5GAEgASgFEjAKBXZhbHVl", 
            "GAIgASgLMiEucHJvdG9idWZfdW5pdHRlc3QuRm9yZWlnbk1lc3NhZ2U6AjgB", 
            "IkEKEVRlc3RNYXBTdWJtZXNzYWdlEiwKCHRlc3RfbWFwGAEgASgLMhoucHJv", 
            "dG9idWZfdW5pdHRlc3QuVGVzdE1hcCK8AQoOVGVzdE1lc3NhZ2VNYXASUQoR", 
            "bWFwX2ludDMyX21lc3NhZ2UYASADKAsyNi5wcm90b2J1Zl91bml0dGVzdC5U", 
            "ZXN0TWVzc2FnZU1hcC5NYXBJbnQzMk1lc3NhZ2VFbnRyeRpXChRNYXBJbnQz", 
            "Mk1lc3NhZ2VFbnRyeRILCgNrZXkYASABKAUSLgoFdmFsdWUYAiABKAsyHy5w", 
            "cm90b2J1Zl91bml0dGVzdC5UZXN0QWxsVHlwZXM6AjgBIuMBCg9UZXN0U2Ft", 
            "ZVR5cGVNYXASOgoEbWFwMRgBIAMoCzIsLnByb3RvYnVmX3VuaXR0ZXN0LlRl", 
            "c3RTYW1lVHlwZU1hcC5NYXAxRW50cnkSOgoEbWFwMhgCIAMoCzIsLnByb3Rv", 
            "YnVmX3VuaXR0ZXN0LlRlc3RTYW1lVHlwZU1hcC5NYXAyRW50cnkaKwoJTWFw", 
            "MUVudHJ5EgsKA2tleRgBIAEoBRINCgV2YWx1ZRgCIAEoBToCOAEaKwoJTWFw", 
            "MkVudHJ5EgsKA2tleRgBIAEoBRINCgV2YWx1ZRgCIAEoBToCOAEi5BAKDFRl", 
            "c3RBcmVuYU1hcBJLCg9tYXBfaW50MzJfaW50MzIYASADKAsyMi5wcm90b2J1", 
            "Zl91bml0dGVzdC5UZXN0QXJlbmFNYXAuTWFwSW50MzJJbnQzMkVudHJ5EksK", 
            "D21hcF9pbnQ2NF9pbnQ2NBgCIAMoCzIyLnByb3RvYnVmX3VuaXR0ZXN0LlRl", 
            "c3RBcmVuYU1hcC5NYXBJbnQ2NEludDY0RW50cnkSTwoRbWFwX3VpbnQzMl91", 
            "aW50MzIYAyADKAsyNC5wcm90b2J1Zl91bml0dGVzdC5UZXN0QXJlbmFNYXAu", 
            "TWFwVWludDMyVWludDMyRW50cnkSTwoRbWFwX3VpbnQ2NF91aW50NjQYBCAD", 
            "KAsyNC5wcm90b2J1Zl91bml0dGVzdC5UZXN0QXJlbmFNYXAuTWFwVWludDY0", 
            "VWludDY0RW50cnkSTwoRbWFwX3NpbnQzMl9zaW50MzIYBSADKAsyNC5wcm90", 
            "b2J1Zl91bml0dGVzdC5UZXN0QXJlbmFNYXAuTWFwU2ludDMyU2ludDMyRW50", 
            "cnkSTwoRbWFwX3NpbnQ2NF9zaW50NjQYBiADKAsyNC5wcm90b2J1Zl91bml0", 
            "dGVzdC5UZXN0QXJlbmFNYXAuTWFwU2ludDY0U2ludDY0RW50cnkSUwoTbWFw", 
            "X2ZpeGVkMzJfZml4ZWQzMhgHIAMoCzI2LnByb3RvYnVmX3VuaXR0ZXN0LlRl", 
            "c3RBcmVuYU1hcC5NYXBGaXhlZDMyRml4ZWQzMkVudHJ5ElMKE21hcF9maXhl", 
            "ZDY0X2ZpeGVkNjQYCCADKAsyNi5wcm90b2J1Zl91bml0dGVzdC5UZXN0QXJl", 
            "bmFNYXAuTWFwRml4ZWQ2NEZpeGVkNjRFbnRyeRJXChVtYXBfc2ZpeGVkMzJf", 
            "c2ZpeGVkMzIYCSADKAsyOC5wcm90b2J1Zl91bml0dGVzdC5UZXN0QXJlbmFN", 
            "YXAuTWFwU2ZpeGVkMzJTZml4ZWQzMkVudHJ5ElcKFW1hcF9zZml4ZWQ2NF9z", 
            "Zml4ZWQ2NBgKIAMoCzI4LnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RBcmVuYU1h", 
            "cC5NYXBTZml4ZWQ2NFNmaXhlZDY0RW50cnkSSwoPbWFwX2ludDMyX2Zsb2F0", 
            "GAsgAygLMjIucHJvdG9idWZfdW5pdHRlc3QuVGVzdEFyZW5hTWFwLk1hcElu", 
            "dDMyRmxvYXRFbnRyeRJNChBtYXBfaW50MzJfZG91YmxlGAwgAygLMjMucHJv", 
            "dG9idWZfdW5pdHRlc3QuVGVzdEFyZW5hTWFwLk1hcEludDMyRG91YmxlRW50", 
            "cnkSRwoNbWFwX2Jvb2xfYm9vbBgNIAMoCzIwLnByb3RvYnVmX3VuaXR0ZXN0", 
            "LlRlc3RBcmVuYU1hcC5NYXBCb29sQm9vbEVudHJ5EkkKDm1hcF9pbnQzMl9l", 
            "bnVtGA4gAygLMjEucHJvdG9idWZfdW5pdHRlc3QuVGVzdEFyZW5hTWFwLk1h", 
            "cEludDMyRW51bUVudHJ5El4KGW1hcF9pbnQzMl9mb3JlaWduX21lc3NhZ2UY", 
            "DyADKAsyOy5wcm90b2J1Zl91bml0dGVzdC5UZXN0QXJlbmFNYXAuTWFwSW50", 
            "MzJGb3JlaWduTWVzc2FnZUVudHJ5GjQKEk1hcEludDMySW50MzJFbnRyeRIL", 
            "CgNrZXkYASABKAUSDQoFdmFsdWUYAiABKAU6AjgBGjQKEk1hcEludDY0SW50", 
            "NjRFbnRyeRILCgNrZXkYASABKAMSDQoFdmFsdWUYAiABKAM6AjgBGjYKFE1h", 
            "cFVpbnQzMlVpbnQzMkVudHJ5EgsKA2tleRgBIAEoDRINCgV2YWx1ZRgCIAEo", 
            "DToCOAEaNgoUTWFwVWludDY0VWludDY0RW50cnkSCwoDa2V5GAEgASgEEg0K", 
            "BXZhbHVlGAIgASgEOgI4ARo2ChRNYXBTaW50MzJTaW50MzJFbnRyeRILCgNr", 
            "ZXkYASABKBESDQoFdmFsdWUYAiABKBE6AjgBGjYKFE1hcFNpbnQ2NFNpbnQ2", 
            "NEVudHJ5EgsKA2tleRgBIAEoEhINCgV2YWx1ZRgCIAEoEjoCOAEaOAoWTWFw", 
            "Rml4ZWQzMkZpeGVkMzJFbnRyeRILCgNrZXkYASABKAcSDQoFdmFsdWUYAiAB", 
            "KAc6AjgBGjgKFk1hcEZpeGVkNjRGaXhlZDY0RW50cnkSCwoDa2V5GAEgASgG", 
            "Eg0KBXZhbHVlGAIgASgGOgI4ARo6ChhNYXBTZml4ZWQzMlNmaXhlZDMyRW50", 
            "cnkSCwoDa2V5GAEgASgPEg0KBXZhbHVlGAIgASgPOgI4ARo6ChhNYXBTZml4", 
            "ZWQ2NFNmaXhlZDY0RW50cnkSCwoDa2V5GAEgASgQEg0KBXZhbHVlGAIgASgQ", 
            "OgI4ARo0ChJNYXBJbnQzMkZsb2F0RW50cnkSCwoDa2V5GAEgASgFEg0KBXZh", 
            "bHVlGAIgASgCOgI4ARo1ChNNYXBJbnQzMkRvdWJsZUVudHJ5EgsKA2tleRgB", 
            "IAEoBRINCgV2YWx1ZRgCIAEoAToCOAEaMgoQTWFwQm9vbEJvb2xFbnRyeRIL", 
            "CgNrZXkYASABKAgSDQoFdmFsdWUYAiABKAg6AjgBGk8KEU1hcEludDMyRW51", 
            "bUVudHJ5EgsKA2tleRgBIAEoBRIpCgV2YWx1ZRgCIAEoDjIaLnByb3RvYnVm", 
            "X3VuaXR0ZXN0Lk1hcEVudW06AjgBGmAKG01hcEludDMyRm9yZWlnbk1lc3Nh", 
            "Z2VFbnRyeRILCgNrZXkYASABKAUSMAoFdmFsdWUYAiABKAsyIS5wcm90b2J1", 
            "Zl91bml0dGVzdC5Gb3JlaWduTWVzc2FnZToCOAEi5AEKH01lc3NhZ2VDb250", 
            "YWluaW5nRW51bUNhbGxlZFR5cGUSSgoEdHlwZRgBIAMoCzI8LnByb3RvYnVm", 
            "X3VuaXR0ZXN0Lk1lc3NhZ2VDb250YWluaW5nRW51bUNhbGxlZFR5cGUuVHlw", 
            "ZUVudHJ5Gl8KCVR5cGVFbnRyeRILCgNrZXkYASABKAUSQQoFdmFsdWUYAiAB", 
            "KAsyMi5wcm90b2J1Zl91bml0dGVzdC5NZXNzYWdlQ29udGFpbmluZ0VudW1D", 
            "YWxsZWRUeXBlOgI4ASIUCgRUeXBlEgwKCFRZUEVfRk9PEAAinQEKH01lc3Nh", 
            "Z2VDb250YWluaW5nTWFwQ2FsbGVkRW50cnkSTAoFZW50cnkYASADKAsyPS5w", 
            "cm90b2J1Zl91bml0dGVzdC5NZXNzYWdlQ29udGFpbmluZ01hcENhbGxlZEVu", 
            "dHJ5LkVudHJ5RW50cnkaLAoKRW50cnlFbnRyeRILCgNrZXkYASABKAUSDQoF", 
            "dmFsdWUYAiABKAU6AjgBKj8KB01hcEVudW0SEAoMTUFQX0VOVU1fRk9PEAAS", 
            "EAoMTUFQX0VOVU1fQkFSEAESEAoMTUFQX0VOVU1fQkFaEAJCIPgBAaoCGkdv", 
          "b2dsZS5Qcm90b2J1Zi5UZXN0UHJvdG9zYgZwcm90bzM="));
      descriptor = pbd::FileDescriptor.InternalBuildGeneratedFileFrom(descriptorData,
          new pbd::FileDescriptor[] {
          global::Google.Protobuf.TestProtos.UnittestProto3.Descriptor, 
          });
      internal__static_protobuf_unittest_TestMap__FieldAccessorTable = 
          new pb::FieldAccess.FieldAccessorTable(typeof(global::Google.Protobuf.TestProtos.TestMap), descriptor.MessageTypes[0],
              new string[] { "MapInt32Int32", "MapInt64Int64", "MapUint32Uint32", "MapUint64Uint64", "MapSint32Sint32", "MapSint64Sint64", "MapFixed32Fixed32", "MapFixed64Fixed64", "MapSfixed32Sfixed32", "MapSfixed64Sfixed64", "MapInt32Float", "MapInt32Double", "MapBoolBool", "MapStringString", "MapInt32Bytes", "MapInt32Enum", "MapInt32ForeignMessage", });
      internal__static_protobuf_unittest_TestMap_MapInt32Int32Entry__FieldAccessorTable = 
          new pb::FieldAccess.FieldAccessorTable(typeof(global::Google.Protobuf.TestProtos.TestMap.Types.MapInt32Int32Entry), descriptor.MessageTypes[0].NestedTypes[0],
              new string[] { "Key", "Value", });
      internal__static_protobuf_unittest_TestMap_MapInt64Int64Entry__FieldAccessorTable = 
          new pb::FieldAccess.FieldAccessorTable(typeof(global::Google.Protobuf.TestProtos.TestMap.Types.MapInt64Int64Entry), descriptor.MessageTypes[0].NestedTypes[1],
              new string[] { "Key", "Value", });
      internal__static_protobuf_unittest_TestMap_MapUint32Uint32Entry__FieldAccessorTable = 
          new pb::FieldAccess.FieldAccessorTable(typeof(global::Google.Protobuf.TestProtos.TestMap.Types.MapUint32Uint32Entry), descriptor.MessageTypes[0].NestedTypes[2],
              new string[] { "Key", "Value", });
      internal__static_protobuf_unittest_TestMap_MapUint64Uint64Entry__FieldAccessorTable = 
          new pb::FieldAccess.FieldAccessorTable(typeof(global::Google.Protobuf.TestProtos.TestMap.Types.MapUint64Uint64Entry), descriptor.MessageTypes[0].NestedTypes[3],
              new string[] { "Key", "Value", });
      internal__static_protobuf_unittest_TestMap_MapSint32Sint32Entry__FieldAccessorTable = 
          new pb::FieldAccess.FieldAccessorTable(typeof(global::Google.Protobuf.TestProtos.TestMap.Types.MapSint32Sint32Entry), descriptor.MessageTypes[0].NestedTypes[4],
              new string[] { "Key", "Value", });
      internal__static_protobuf_unittest_TestMap_MapSint64Sint64Entry__FieldAccessorTable = 
          new pb::FieldAccess.FieldAccessorTable(typeof(global::Google.Protobuf.TestProtos.TestMap.Types.MapSint64Sint64Entry), descriptor.MessageTypes[0].NestedTypes[5],
              new string[] { "Key", "Value", });
      internal__static_protobuf_unittest_TestMap_MapFixed32Fixed32Entry__FieldAccessorTable = 
          new pb::FieldAccess.FieldAccessorTable(typeof(global::Google.Protobuf.TestProtos.TestMap.Types.MapFixed32Fixed32Entry), descriptor.MessageTypes[0].NestedTypes[6],
              new string[] { "Key", "Value", });
      internal__static_protobuf_unittest_TestMap_MapFixed64Fixed64Entry__FieldAccessorTable = 
          new pb::FieldAccess.FieldAccessorTable(typeof(global::Google.Protobuf.TestProtos.TestMap.Types.MapFixed64Fixed64Entry), descriptor.MessageTypes[0].NestedTypes[7],
              new string[] { "Key", "Value", });
      internal__static_protobuf_unittest_TestMap_MapSfixed32Sfixed32Entry__FieldAccessorTable = 
          new pb::FieldAccess.FieldAccessorTable(typeof(global::Google.Protobuf.TestProtos.TestMap.Types.MapSfixed32Sfixed32Entry), descriptor.MessageTypes[0].NestedTypes[8],
              new string[] { "Key", "Value", });
      internal__static_protobuf_unittest_TestMap_MapSfixed64Sfixed64Entry__FieldAccessorTable = 
          new pb::FieldAccess.FieldAccessorTable(typeof(global::Google.Protobuf.TestProtos.TestMap.Types.MapSfixed64Sfixed64Entry), descriptor.MessageTypes[0].NestedTypes[9],
              new string[] { "Key", "Value", });
      internal__static_protobuf_unittest_TestMap_MapInt32FloatEntry__FieldAccessorTable = 
          new pb::FieldAccess.FieldAccessorTable(typeof(global::Google.Protobuf.TestProtos.TestMap.Types.MapInt32FloatEntry), descriptor.MessageTypes[0].NestedTypes[10],
              new string[] { "Key", "Value", });
      internal__static_protobuf_unittest_TestMap_MapInt32DoubleEntry__FieldAccessorTable = 
          new pb::FieldAccess.FieldAccessorTable(typeof(global::Google.Protobuf.TestProtos.TestMap.Types.MapInt32DoubleEntry), descriptor.MessageTypes[0].NestedTypes[11],
              new string[] { "Key", "Value", });
      internal__static_protobuf_unittest_TestMap_MapBoolBoolEntry__FieldAccessorTable = 
          new pb::FieldAccess.FieldAccessorTable(typeof(global::Google.Protobuf.TestProtos.TestMap.Types.MapBoolBoolEntry), descriptor.MessageTypes[0].NestedTypes[12],
              new string[] { "Key", "Value", });
      internal__static_protobuf_unittest_TestMap_MapStringStringEntry__FieldAccessorTable = 
          new pb::FieldAccess.FieldAccessorTable(typeof(global::Google.Protobuf.TestProtos.TestMap.Types.MapStringStringEntry), descriptor.MessageTypes[0].NestedTypes[13],
              new string[] { "Key", "Value", });
      internal__static_protobuf_unittest_TestMap_MapInt32BytesEntry__FieldAccessorTable = 
          new pb::FieldAccess.FieldAccessorTable(typeof(global::Google.Protobuf.TestProtos.TestMap.Types.MapInt32BytesEntry), descriptor.MessageTypes[0].NestedTypes[14],
              new string[] { "Key", "Value", });
      internal__static_protobuf_unittest_TestMap_MapInt32EnumEntry__FieldAccessorTable = 
          new pb::FieldAccess.FieldAccessorTable(typeof(global::Google.Protobuf.TestProtos.TestMap.Types.MapInt32EnumEntry), descriptor.MessageTypes[0].NestedTypes[15],
              new string[] { "Key", "Value", });
      internal__static_protobuf_unittest_TestMap_MapInt32ForeignMessageEntry__FieldAccessorTable = 
          new pb::FieldAccess.FieldAccessorTable(typeof(global::Google.Protobuf.TestProtos.TestMap.Types.MapInt32ForeignMessageEntry), descriptor.MessageTypes[0].NestedTypes[16],
              new string[] { "Key", "Value", });
      internal__static_protobuf_unittest_TestMapSubmessage__FieldAccessorTable = 
          new pb::FieldAccess.FieldAccessorTable(typeof(global::Google.Protobuf.TestProtos.TestMapSubmessage), descriptor.MessageTypes[1],
              new string[] { "TestMap", });
      internal__static_protobuf_unittest_TestMessageMap__FieldAccessorTable = 
          new pb::FieldAccess.FieldAccessorTable(typeof(global::Google.Protobuf.TestProtos.TestMessageMap), descriptor.MessageTypes[2],
              new string[] { "MapInt32Message", });
      internal__static_protobuf_unittest_TestMessageMap_MapInt32MessageEntry__FieldAccessorTable = 
          new pb::FieldAccess.FieldAccessorTable(typeof(global::Google.Protobuf.TestProtos.TestMessageMap.Types.MapInt32MessageEntry), descriptor.MessageTypes[2].NestedTypes[0],
              new string[] { "Key", "Value", });
      internal__static_protobuf_unittest_TestSameTypeMap__FieldAccessorTable = 
          new pb::FieldAccess.FieldAccessorTable(typeof(global::Google.Protobuf.TestProtos.TestSameTypeMap), descriptor.MessageTypes[3],
              new string[] { "Map1", "Map2", });
      internal__static_protobuf_unittest_TestSameTypeMap_Map1Entry__FieldAccessorTable = 
          new pb::FieldAccess.FieldAccessorTable(typeof(global::Google.Protobuf.TestProtos.TestSameTypeMap.Types.Map1Entry), descriptor.MessageTypes[3].NestedTypes[0],
              new string[] { "Key", "Value", });
      internal__static_protobuf_unittest_TestSameTypeMap_Map2Entry__FieldAccessorTable = 
          new pb::FieldAccess.FieldAccessorTable(typeof(global::Google.Protobuf.TestProtos.TestSameTypeMap.Types.Map2Entry), descriptor.MessageTypes[3].NestedTypes[1],
              new string[] { "Key", "Value", });
      internal__static_protobuf_unittest_TestArenaMap__FieldAccessorTable = 
          new pb::FieldAccess.FieldAccessorTable(typeof(global::Google.Protobuf.TestProtos.TestArenaMap), descriptor.MessageTypes[4],
              new string[] { "MapInt32Int32", "MapInt64Int64", "MapUint32Uint32", "MapUint64Uint64", "MapSint32Sint32", "MapSint64Sint64", "MapFixed32Fixed32", "MapFixed64Fixed64", "MapSfixed32Sfixed32", "MapSfixed64Sfixed64", "MapInt32Float", "MapInt32Double", "MapBoolBool", "MapInt32Enum", "MapInt32ForeignMessage", });
      internal__static_protobuf_unittest_TestArenaMap_MapInt32Int32Entry__FieldAccessorTable = 
          new pb::FieldAccess.FieldAccessorTable(typeof(global::Google.Protobuf.TestProtos.TestArenaMap.Types.MapInt32Int32Entry), descriptor.MessageTypes[4].NestedTypes[0],
              new string[] { "Key", "Value", });
      internal__static_protobuf_unittest_TestArenaMap_MapInt64Int64Entry__FieldAccessorTable = 
          new pb::FieldAccess.FieldAccessorTable(typeof(global::Google.Protobuf.TestProtos.TestArenaMap.Types.MapInt64Int64Entry), descriptor.MessageTypes[4].NestedTypes[1],
              new string[] { "Key", "Value", });
      internal__static_protobuf_unittest_TestArenaMap_MapUint32Uint32Entry__FieldAccessorTable = 
          new pb::FieldAccess.FieldAccessorTable(typeof(global::Google.Protobuf.TestProtos.TestArenaMap.Types.MapUint32Uint32Entry), descriptor.MessageTypes[4].NestedTypes[2],
              new string[] { "Key", "Value", });
      internal__static_protobuf_unittest_TestArenaMap_MapUint64Uint64Entry__FieldAccessorTable = 
          new pb::FieldAccess.FieldAccessorTable(typeof(global::Google.Protobuf.TestProtos.TestArenaMap.Types.MapUint64Uint64Entry), descriptor.MessageTypes[4].NestedTypes[3],
              new string[] { "Key", "Value", });
      internal__static_protobuf_unittest_TestArenaMap_MapSint32Sint32Entry__FieldAccessorTable = 
          new pb::FieldAccess.FieldAccessorTable(typeof(global::Google.Protobuf.TestProtos.TestArenaMap.Types.MapSint32Sint32Entry), descriptor.MessageTypes[4].NestedTypes[4],
              new string[] { "Key", "Value", });
      internal__static_protobuf_unittest_TestArenaMap_MapSint64Sint64Entry__FieldAccessorTable = 
          new pb::FieldAccess.FieldAccessorTable(typeof(global::Google.Protobuf.TestProtos.TestArenaMap.Types.MapSint64Sint64Entry), descriptor.MessageTypes[4].NestedTypes[5],
              new string[] { "Key", "Value", });
      internal__static_protobuf_unittest_TestArenaMap_MapFixed32Fixed32Entry__FieldAccessorTable = 
          new pb::FieldAccess.FieldAccessorTable(typeof(global::Google.Protobuf.TestProtos.TestArenaMap.Types.MapFixed32Fixed32Entry), descriptor.MessageTypes[4].NestedTypes[6],
              new string[] { "Key", "Value", });
      internal__static_protobuf_unittest_TestArenaMap_MapFixed64Fixed64Entry__FieldAccessorTable = 
          new pb::FieldAccess.FieldAccessorTable(typeof(global::Google.Protobuf.TestProtos.TestArenaMap.Types.MapFixed64Fixed64Entry), descriptor.MessageTypes[4].NestedTypes[7],
              new string[] { "Key", "Value", });
      internal__static_protobuf_unittest_TestArenaMap_MapSfixed32Sfixed32Entry__FieldAccessorTable = 
          new pb::FieldAccess.FieldAccessorTable(typeof(global::Google.Protobuf.TestProtos.TestArenaMap.Types.MapSfixed32Sfixed32Entry), descriptor.MessageTypes[4].NestedTypes[8],
              new string[] { "Key", "Value", });
      internal__static_protobuf_unittest_TestArenaMap_MapSfixed64Sfixed64Entry__FieldAccessorTable = 
          new pb::FieldAccess.FieldAccessorTable(typeof(global::Google.Protobuf.TestProtos.TestArenaMap.Types.MapSfixed64Sfixed64Entry), descriptor.MessageTypes[4].NestedTypes[9],
              new string[] { "Key", "Value", });
      internal__static_protobuf_unittest_TestArenaMap_MapInt32FloatEntry__FieldAccessorTable = 
          new pb::FieldAccess.FieldAccessorTable(typeof(global::Google.Protobuf.TestProtos.TestArenaMap.Types.MapInt32FloatEntry), descriptor.MessageTypes[4].NestedTypes[10],
              new string[] { "Key", "Value", });
      internal__static_protobuf_unittest_TestArenaMap_MapInt32DoubleEntry__FieldAccessorTable = 
          new pb::FieldAccess.FieldAccessorTable(typeof(global::Google.Protobuf.TestProtos.TestArenaMap.Types.MapInt32DoubleEntry), descriptor.MessageTypes[4].NestedTypes[11],
              new string[] { "Key", "Value", });
      internal__static_protobuf_unittest_TestArenaMap_MapBoolBoolEntry__FieldAccessorTable = 
          new pb::FieldAccess.FieldAccessorTable(typeof(global::Google.Protobuf.TestProtos.TestArenaMap.Types.MapBoolBoolEntry), descriptor.MessageTypes[4].NestedTypes[12],
              new string[] { "Key", "Value", });
      internal__static_protobuf_unittest_TestArenaMap_MapInt32EnumEntry__FieldAccessorTable = 
          new pb::FieldAccess.FieldAccessorTable(typeof(global::Google.Protobuf.TestProtos.TestArenaMap.Types.MapInt32EnumEntry), descriptor.MessageTypes[4].NestedTypes[13],
              new string[] { "Key", "Value", });
      internal__static_protobuf_unittest_TestArenaMap_MapInt32ForeignMessageEntry__FieldAccessorTable = 
          new pb::FieldAccess.FieldAccessorTable(typeof(global::Google.Protobuf.TestProtos.TestArenaMap.Types.MapInt32ForeignMessageEntry), descriptor.MessageTypes[4].NestedTypes[14],
              new string[] { "Key", "Value", });
      internal__static_protobuf_unittest_MessageContainingEnumCalledType__FieldAccessorTable = 
          new pb::FieldAccess.FieldAccessorTable(typeof(global::Google.Protobuf.TestProtos.MessageContainingEnumCalledType), descriptor.MessageTypes[5],
              new string[] { "Type", });
      internal__static_protobuf_unittest_MessageContainingEnumCalledType_TypeEntry__FieldAccessorTable = 
          new pb::FieldAccess.FieldAccessorTable(typeof(global::Google.Protobuf.TestProtos.MessageContainingEnumCalledType.Types.TypeEntry), descriptor.MessageTypes[5].NestedTypes[0],
              new string[] { "Key", "Value", });
      internal__static_protobuf_unittest_MessageContainingMapCalledEntry__FieldAccessorTable = 
          new pb::FieldAccess.FieldAccessorTable(typeof(global::Google.Protobuf.TestProtos.MessageContainingMapCalledEntry), descriptor.MessageTypes[6],
              new string[] { "Entry", });
      internal__static_protobuf_unittest_MessageContainingMapCalledEntry_EntryEntry__FieldAccessorTable = 
          new pb::FieldAccess.FieldAccessorTable(typeof(global::Google.Protobuf.TestProtos.MessageContainingMapCalledEntry.Types.EntryEntry), descriptor.MessageTypes[6].NestedTypes[0],
              new string[] { "Key", "Value", });
    }
    #endregion

  }
  #region Enums
  public enum MapEnum {
    MAP_ENUM_FOO = 0,
    MAP_ENUM_BAR = 1,
    MAP_ENUM_BAZ = 2,
  }

  #endregion

  #region Messages
  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
  public sealed partial class TestMap : pb::IMessage<TestMap> {
    private static readonly pb::MessageParser<TestMap> _parser = new pb::MessageParser<TestMap>(() => new TestMap());
    public static pb::MessageParser<TestMap> Parser { get { return _parser; } }

    private static readonly string[] _fieldNames = new string[] { "map_bool_bool", "map_fixed32_fixed32", "map_fixed64_fixed64", "map_int32_bytes", "map_int32_double", "map_int32_enum", "map_int32_float", "map_int32_foreign_message", "map_int32_int32", "map_int64_int64", "map_sfixed32_sfixed32", "map_sfixed64_sfixed64", "map_sint32_sint32", "map_sint64_sint64", "map_string_string", "map_uint32_uint32", "map_uint64_uint64" };
    private static readonly uint[] _fieldTags = new uint[] { 106, 58, 66, 122, 98, 130, 90, 138, 10, 18, 74, 82, 42, 50, 114, 26, 34 };
    public static pbd::MessageDescriptor Descriptor {
      get { return global::Google.Protobuf.TestProtos.MapUnittestProto3.Descriptor.MessageTypes[0]; }
    }

    public pb::FieldAccess.FieldAccessorTable Fields {
      get { return global::Google.Protobuf.TestProtos.MapUnittestProto3.internal__static_protobuf_unittest_TestMap__FieldAccessorTable; }
    }

    private bool _frozen = false;
    public bool IsFrozen { get { return _frozen; } }

    public TestMap() { }

    public TestMap(TestMap other) {
      mapInt32Int32_ = other.mapInt32Int32_.Clone();
      mapInt64Int64_ = other.mapInt64Int64_.Clone();
      mapUint32Uint32_ = other.mapUint32Uint32_.Clone();
      mapUint64Uint64_ = other.mapUint64Uint64_.Clone();
      mapSint32Sint32_ = other.mapSint32Sint32_.Clone();
      mapSint64Sint64_ = other.mapSint64Sint64_.Clone();
      mapFixed32Fixed32_ = other.mapFixed32Fixed32_.Clone();
      mapFixed64Fixed64_ = other.mapFixed64Fixed64_.Clone();
      mapSfixed32Sfixed32_ = other.mapSfixed32Sfixed32_.Clone();
      mapSfixed64Sfixed64_ = other.mapSfixed64Sfixed64_.Clone();
      mapInt32Float_ = other.mapInt32Float_.Clone();
      mapInt32Double_ = other.mapInt32Double_.Clone();
      mapBoolBool_ = other.mapBoolBool_.Clone();
      mapStringString_ = other.mapStringString_.Clone();
      mapInt32Bytes_ = other.mapInt32Bytes_.Clone();
      mapInt32Enum_ = other.mapInt32Enum_.Clone();
      mapInt32ForeignMessage_ = other.mapInt32ForeignMessage_.Clone();
    }

    public TestMap Clone() {
      return new TestMap(this);
    }

    public void Freeze() {
      if (IsFrozen) {
        return;
      }
      _frozen = true;
      mapInt32Int32_.Freeze();
      mapInt64Int64_.Freeze();
      mapUint32Uint32_.Freeze();
      mapUint64Uint64_.Freeze();
      mapSint32Sint32_.Freeze();
      mapSint64Sint64_.Freeze();
      mapFixed32Fixed32_.Freeze();
      mapFixed64Fixed64_.Freeze();
      mapSfixed32Sfixed32_.Freeze();
      mapSfixed64Sfixed64_.Freeze();
      mapInt32Float_.Freeze();
      mapInt32Double_.Freeze();
      mapBoolBool_.Freeze();
      mapStringString_.Freeze();
      mapInt32Bytes_.Freeze();
      mapInt32Enum_.Freeze();
      mapInt32ForeignMessage_.Freeze();
    }

    public const int MapInt32Int32FieldNumber = 1;
    private static readonly pbc::MapField<int, int>.Codec _map_mapInt32Int32_codec
        = new pbc::MapField<int, int>.Codec(pb::FieldCodec.ForInt32(8), pb::FieldCodec.ForInt32(16), 10);
    private readonly pbc::MapField<int, int> mapInt32Int32_ = new pbc::MapField<int, int>();
    public pbc::MapField<int, int> MapInt32Int32 {
      get { return mapInt32Int32_; }
    }

    public const int MapInt64Int64FieldNumber = 2;
    private static readonly pbc::MapField<long, long>.Codec _map_mapInt64Int64_codec
        = new pbc::MapField<long, long>.Codec(pb::FieldCodec.ForInt64(8), pb::FieldCodec.ForInt64(16), 18);
    private readonly pbc::MapField<long, long> mapInt64Int64_ = new pbc::MapField<long, long>();
    public pbc::MapField<long, long> MapInt64Int64 {
      get { return mapInt64Int64_; }
    }

    public const int MapUint32Uint32FieldNumber = 3;
    private static readonly pbc::MapField<uint, uint>.Codec _map_mapUint32Uint32_codec
        = new pbc::MapField<uint, uint>.Codec(pb::FieldCodec.ForUInt32(8), pb::FieldCodec.ForUInt32(16), 26);
    private readonly pbc::MapField<uint, uint> mapUint32Uint32_ = new pbc::MapField<uint, uint>();
    public pbc::MapField<uint, uint> MapUint32Uint32 {
      get { return mapUint32Uint32_; }
    }

    public const int MapUint64Uint64FieldNumber = 4;
    private static readonly pbc::MapField<ulong, ulong>.Codec _map_mapUint64Uint64_codec
        = new pbc::MapField<ulong, ulong>.Codec(pb::FieldCodec.ForUInt64(8), pb::FieldCodec.ForUInt64(16), 34);
    private readonly pbc::MapField<ulong, ulong> mapUint64Uint64_ = new pbc::MapField<ulong, ulong>();
    public pbc::MapField<ulong, ulong> MapUint64Uint64 {
      get { return mapUint64Uint64_; }
    }

    public const int MapSint32Sint32FieldNumber = 5;
    private static readonly pbc::MapField<int, int>.Codec _map_mapSint32Sint32_codec
        = new pbc::MapField<int, int>.Codec(pb::FieldCodec.ForSInt32(8), pb::FieldCodec.ForSInt32(16), 42);
    private readonly pbc::MapField<int, int> mapSint32Sint32_ = new pbc::MapField<int, int>();
    public pbc::MapField<int, int> MapSint32Sint32 {
      get { return mapSint32Sint32_; }
    }

    public const int MapSint64Sint64FieldNumber = 6;
    private static readonly pbc::MapField<long, long>.Codec _map_mapSint64Sint64_codec
        = new pbc::MapField<long, long>.Codec(pb::FieldCodec.ForSInt64(8), pb::FieldCodec.ForSInt64(16), 50);
    private readonly pbc::MapField<long, long> mapSint64Sint64_ = new pbc::MapField<long, long>();
    public pbc::MapField<long, long> MapSint64Sint64 {
      get { return mapSint64Sint64_; }
    }

    public const int MapFixed32Fixed32FieldNumber = 7;
    private static readonly pbc::MapField<uint, uint>.Codec _map_mapFixed32Fixed32_codec
        = new pbc::MapField<uint, uint>.Codec(pb::FieldCodec.ForFixed32(13), pb::FieldCodec.ForFixed32(21), 58);
    private readonly pbc::MapField<uint, uint> mapFixed32Fixed32_ = new pbc::MapField<uint, uint>();
    public pbc::MapField<uint, uint> MapFixed32Fixed32 {
      get { return mapFixed32Fixed32_; }
    }

    public const int MapFixed64Fixed64FieldNumber = 8;
    private static readonly pbc::MapField<ulong, ulong>.Codec _map_mapFixed64Fixed64_codec
        = new pbc::MapField<ulong, ulong>.Codec(pb::FieldCodec.ForFixed64(9), pb::FieldCodec.ForFixed64(17), 66);
    private readonly pbc::MapField<ulong, ulong> mapFixed64Fixed64_ = new pbc::MapField<ulong, ulong>();
    public pbc::MapField<ulong, ulong> MapFixed64Fixed64 {
      get { return mapFixed64Fixed64_; }
    }

    public const int MapSfixed32Sfixed32FieldNumber = 9;
    private static readonly pbc::MapField<int, int>.Codec _map_mapSfixed32Sfixed32_codec
        = new pbc::MapField<int, int>.Codec(pb::FieldCodec.ForSFixed32(13), pb::FieldCodec.ForSFixed32(21), 74);
    private readonly pbc::MapField<int, int> mapSfixed32Sfixed32_ = new pbc::MapField<int, int>();
    public pbc::MapField<int, int> MapSfixed32Sfixed32 {
      get { return mapSfixed32Sfixed32_; }
    }

    public const int MapSfixed64Sfixed64FieldNumber = 10;
    private static readonly pbc::MapField<long, long>.Codec _map_mapSfixed64Sfixed64_codec
        = new pbc::MapField<long, long>.Codec(pb::FieldCodec.ForSFixed64(9), pb::FieldCodec.ForSFixed64(17), 82);
    private readonly pbc::MapField<long, long> mapSfixed64Sfixed64_ = new pbc::MapField<long, long>();
    public pbc::MapField<long, long> MapSfixed64Sfixed64 {
      get { return mapSfixed64Sfixed64_; }
    }

    public const int MapInt32FloatFieldNumber = 11;
    private static readonly pbc::MapField<int, float>.Codec _map_mapInt32Float_codec
        = new pbc::MapField<int, float>.Codec(pb::FieldCodec.ForInt32(8), pb::FieldCodec.ForFloat(21), 90);
    private readonly pbc::MapField<int, float> mapInt32Float_ = new pbc::MapField<int, float>();
    public pbc::MapField<int, float> MapInt32Float {
      get { return mapInt32Float_; }
    }

    public const int MapInt32DoubleFieldNumber = 12;
    private static readonly pbc::MapField<int, double>.Codec _map_mapInt32Double_codec
        = new pbc::MapField<int, double>.Codec(pb::FieldCodec.ForInt32(8), pb::FieldCodec.ForDouble(17), 98);
    private readonly pbc::MapField<int, double> mapInt32Double_ = new pbc::MapField<int, double>();
    public pbc::MapField<int, double> MapInt32Double {
      get { return mapInt32Double_; }
    }

    public const int MapBoolBoolFieldNumber = 13;
    private static readonly pbc::MapField<bool, bool>.Codec _map_mapBoolBool_codec
        = new pbc::MapField<bool, bool>.Codec(pb::FieldCodec.ForBool(8), pb::FieldCodec.ForBool(16), 106);
    private readonly pbc::MapField<bool, bool> mapBoolBool_ = new pbc::MapField<bool, bool>();
    public pbc::MapField<bool, bool> MapBoolBool {
      get { return mapBoolBool_; }
    }

    public const int MapStringStringFieldNumber = 14;
    private static readonly pbc::MapField<string, string>.Codec _map_mapStringString_codec
        = new pbc::MapField<string, string>.Codec(pb::FieldCodec.ForString(10), pb::FieldCodec.ForString(18), 114);
    private readonly pbc::MapField<string, string> mapStringString_ = new pbc::MapField<string, string>();
    public pbc::MapField<string, string> MapStringString {
      get { return mapStringString_; }
    }

    public const int MapInt32BytesFieldNumber = 15;
    private static readonly pbc::MapField<int, pb::ByteString>.Codec _map_mapInt32Bytes_codec
        = new pbc::MapField<int, pb::ByteString>.Codec(pb::FieldCodec.ForInt32(8), pb::FieldCodec.ForBytes(18), 122);
    private readonly pbc::MapField<int, pb::ByteString> mapInt32Bytes_ = new pbc::MapField<int, pb::ByteString>();
    public pbc::MapField<int, pb::ByteString> MapInt32Bytes {
      get { return mapInt32Bytes_; }
    }

    public const int MapInt32EnumFieldNumber = 16;
    private static readonly pbc::MapField<int, global::Google.Protobuf.TestProtos.MapEnum>.Codec _map_mapInt32Enum_codec
        = new pbc::MapField<int, global::Google.Protobuf.TestProtos.MapEnum>.Codec(pb::FieldCodec.ForInt32(8), pb::FieldCodec.ForEnum(16, x => (int) x, x => (global::Google.Protobuf.TestProtos.MapEnum) x), 130);
    private readonly pbc::MapField<int, global::Google.Protobuf.TestProtos.MapEnum> mapInt32Enum_ = new pbc::MapField<int, global::Google.Protobuf.TestProtos.MapEnum>();
    public pbc::MapField<int, global::Google.Protobuf.TestProtos.MapEnum> MapInt32Enum {
      get { return mapInt32Enum_; }
    }

    public const int MapInt32ForeignMessageFieldNumber = 17;
    private static readonly pbc::MapField<int, global::Google.Protobuf.TestProtos.ForeignMessage>.Codec _map_mapInt32ForeignMessage_codec
        = new pbc::MapField<int, global::Google.Protobuf.TestProtos.ForeignMessage>.Codec(pb::FieldCodec.ForInt32(8), pb::FieldCodec.ForMessage(18, global::Google.Protobuf.TestProtos.ForeignMessage.Parser), 138);
    private readonly pbc::MapField<int, global::Google.Protobuf.TestProtos.ForeignMessage> mapInt32ForeignMessage_ = new pbc::MapField<int, global::Google.Protobuf.TestProtos.ForeignMessage>();
    public pbc::MapField<int, global::Google.Protobuf.TestProtos.ForeignMessage> MapInt32ForeignMessage {
      get { return mapInt32ForeignMessage_; }
    }

    public override bool Equals(object other) {
      return Equals(other as TestMap);
    }

    public bool Equals(TestMap other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (!MapInt32Int32.Equals(other.MapInt32Int32)) return false;
      if (!MapInt64Int64.Equals(other.MapInt64Int64)) return false;
      if (!MapUint32Uint32.Equals(other.MapUint32Uint32)) return false;
      if (!MapUint64Uint64.Equals(other.MapUint64Uint64)) return false;
      if (!MapSint32Sint32.Equals(other.MapSint32Sint32)) return false;
      if (!MapSint64Sint64.Equals(other.MapSint64Sint64)) return false;
      if (!MapFixed32Fixed32.Equals(other.MapFixed32Fixed32)) return false;
      if (!MapFixed64Fixed64.Equals(other.MapFixed64Fixed64)) return false;
      if (!MapSfixed32Sfixed32.Equals(other.MapSfixed32Sfixed32)) return false;
      if (!MapSfixed64Sfixed64.Equals(other.MapSfixed64Sfixed64)) return false;
      if (!MapInt32Float.Equals(other.MapInt32Float)) return false;
      if (!MapInt32Double.Equals(other.MapInt32Double)) return false;
      if (!MapBoolBool.Equals(other.MapBoolBool)) return false;
      if (!MapStringString.Equals(other.MapStringString)) return false;
      if (!MapInt32Bytes.Equals(other.MapInt32Bytes)) return false;
      if (!MapInt32Enum.Equals(other.MapInt32Enum)) return false;
      if (!MapInt32ForeignMessage.Equals(other.MapInt32ForeignMessage)) return false;
      return true;
    }

    public override int GetHashCode() {
      int hash = 1;
      hash ^= MapInt32Int32.GetHashCode();
      hash ^= MapInt64Int64.GetHashCode();
      hash ^= MapUint32Uint32.GetHashCode();
      hash ^= MapUint64Uint64.GetHashCode();
      hash ^= MapSint32Sint32.GetHashCode();
      hash ^= MapSint64Sint64.GetHashCode();
      hash ^= MapFixed32Fixed32.GetHashCode();
      hash ^= MapFixed64Fixed64.GetHashCode();
      hash ^= MapSfixed32Sfixed32.GetHashCode();
      hash ^= MapSfixed64Sfixed64.GetHashCode();
      hash ^= MapInt32Float.GetHashCode();
      hash ^= MapInt32Double.GetHashCode();
      hash ^= MapBoolBool.GetHashCode();
      hash ^= MapStringString.GetHashCode();
      hash ^= MapInt32Bytes.GetHashCode();
      hash ^= MapInt32Enum.GetHashCode();
      hash ^= MapInt32ForeignMessage.GetHashCode();
      return hash;
    }

    public void WriteTo(pb::CodedOutputStream output) {
      mapInt32Int32_.WriteTo(output, _map_mapInt32Int32_codec);
      mapInt64Int64_.WriteTo(output, _map_mapInt64Int64_codec);
      mapUint32Uint32_.WriteTo(output, _map_mapUint32Uint32_codec);
      mapUint64Uint64_.WriteTo(output, _map_mapUint64Uint64_codec);
      mapSint32Sint32_.WriteTo(output, _map_mapSint32Sint32_codec);
      mapSint64Sint64_.WriteTo(output, _map_mapSint64Sint64_codec);
      mapFixed32Fixed32_.WriteTo(output, _map_mapFixed32Fixed32_codec);
      mapFixed64Fixed64_.WriteTo(output, _map_mapFixed64Fixed64_codec);
      mapSfixed32Sfixed32_.WriteTo(output, _map_mapSfixed32Sfixed32_codec);
      mapSfixed64Sfixed64_.WriteTo(output, _map_mapSfixed64Sfixed64_codec);
      mapInt32Float_.WriteTo(output, _map_mapInt32Float_codec);
      mapInt32Double_.WriteTo(output, _map_mapInt32Double_codec);
      mapBoolBool_.WriteTo(output, _map_mapBoolBool_codec);
      mapStringString_.WriteTo(output, _map_mapStringString_codec);
      mapInt32Bytes_.WriteTo(output, _map_mapInt32Bytes_codec);
      mapInt32Enum_.WriteTo(output, _map_mapInt32Enum_codec);
      mapInt32ForeignMessage_.WriteTo(output, _map_mapInt32ForeignMessage_codec);
    }

    public int CalculateSize() {
      int size = 0;
      size += mapInt32Int32_.CalculateSize(_map_mapInt32Int32_codec);
      size += mapInt64Int64_.CalculateSize(_map_mapInt64Int64_codec);
      size += mapUint32Uint32_.CalculateSize(_map_mapUint32Uint32_codec);
      size += mapUint64Uint64_.CalculateSize(_map_mapUint64Uint64_codec);
      size += mapSint32Sint32_.CalculateSize(_map_mapSint32Sint32_codec);
      size += mapSint64Sint64_.CalculateSize(_map_mapSint64Sint64_codec);
      size += mapFixed32Fixed32_.CalculateSize(_map_mapFixed32Fixed32_codec);
      size += mapFixed64Fixed64_.CalculateSize(_map_mapFixed64Fixed64_codec);
      size += mapSfixed32Sfixed32_.CalculateSize(_map_mapSfixed32Sfixed32_codec);
      size += mapSfixed64Sfixed64_.CalculateSize(_map_mapSfixed64Sfixed64_codec);
      size += mapInt32Float_.CalculateSize(_map_mapInt32Float_codec);
      size += mapInt32Double_.CalculateSize(_map_mapInt32Double_codec);
      size += mapBoolBool_.CalculateSize(_map_mapBoolBool_codec);
      size += mapStringString_.CalculateSize(_map_mapStringString_codec);
      size += mapInt32Bytes_.CalculateSize(_map_mapInt32Bytes_codec);
      size += mapInt32Enum_.CalculateSize(_map_mapInt32Enum_codec);
      size += mapInt32ForeignMessage_.CalculateSize(_map_mapInt32ForeignMessage_codec);
      return size;
    }

    public void MergeFrom(TestMap other) {
      if (other == null) {
        return;
      }
      mapInt32Int32_.Add(other.mapInt32Int32_);
      mapInt64Int64_.Add(other.mapInt64Int64_);
      mapUint32Uint32_.Add(other.mapUint32Uint32_);
      mapUint64Uint64_.Add(other.mapUint64Uint64_);
      mapSint32Sint32_.Add(other.mapSint32Sint32_);
      mapSint64Sint64_.Add(other.mapSint64Sint64_);
      mapFixed32Fixed32_.Add(other.mapFixed32Fixed32_);
      mapFixed64Fixed64_.Add(other.mapFixed64Fixed64_);
      mapSfixed32Sfixed32_.Add(other.mapSfixed32Sfixed32_);
      mapSfixed64Sfixed64_.Add(other.mapSfixed64Sfixed64_);
      mapInt32Float_.Add(other.mapInt32Float_);
      mapInt32Double_.Add(other.mapInt32Double_);
      mapBoolBool_.Add(other.mapBoolBool_);
      mapStringString_.Add(other.mapStringString_);
      mapInt32Bytes_.Add(other.mapInt32Bytes_);
      mapInt32Enum_.Add(other.mapInt32Enum_);
      mapInt32ForeignMessage_.Add(other.mapInt32ForeignMessage_);
    }

    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while (input.ReadTag(out tag)) {
        switch(tag) {
          case 0:
            throw pb::InvalidProtocolBufferException.InvalidTag();
          default:
            if (pb::WireFormat.IsEndGroupTag(tag)) {
              return;
            }
            break;
          case 10: {
            mapInt32Int32_.AddEntriesFrom(input, _map_mapInt32Int32_codec);
            break;
          }
          case 18: {
            mapInt64Int64_.AddEntriesFrom(input, _map_mapInt64Int64_codec);
            break;
          }
          case 26: {
            mapUint32Uint32_.AddEntriesFrom(input, _map_mapUint32Uint32_codec);
            break;
          }
          case 34: {
            mapUint64Uint64_.AddEntriesFrom(input, _map_mapUint64Uint64_codec);
            break;
          }
          case 42: {
            mapSint32Sint32_.AddEntriesFrom(input, _map_mapSint32Sint32_codec);
            break;
          }
          case 50: {
            mapSint64Sint64_.AddEntriesFrom(input, _map_mapSint64Sint64_codec);
            break;
          }
          case 58: {
            mapFixed32Fixed32_.AddEntriesFrom(input, _map_mapFixed32Fixed32_codec);
            break;
          }
          case 66: {
            mapFixed64Fixed64_.AddEntriesFrom(input, _map_mapFixed64Fixed64_codec);
            break;
          }
          case 74: {
            mapSfixed32Sfixed32_.AddEntriesFrom(input, _map_mapSfixed32Sfixed32_codec);
            break;
          }
          case 82: {
            mapSfixed64Sfixed64_.AddEntriesFrom(input, _map_mapSfixed64Sfixed64_codec);
            break;
          }
          case 90: {
            mapInt32Float_.AddEntriesFrom(input, _map_mapInt32Float_codec);
            break;
          }
          case 98: {
            mapInt32Double_.AddEntriesFrom(input, _map_mapInt32Double_codec);
            break;
          }
          case 106: {
            mapBoolBool_.AddEntriesFrom(input, _map_mapBoolBool_codec);
            break;
          }
          case 114: {
            mapStringString_.AddEntriesFrom(input, _map_mapStringString_codec);
            break;
          }
          case 122: {
            mapInt32Bytes_.AddEntriesFrom(input, _map_mapInt32Bytes_codec);
            break;
          }
          case 130: {
            mapInt32Enum_.AddEntriesFrom(input, _map_mapInt32Enum_codec);
            break;
          }
          case 138: {
            mapInt32ForeignMessage_.AddEntriesFrom(input, _map_mapInt32ForeignMessage_codec);
            break;
          }
        }
      }
    }

    #region Nested types
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
    public static partial class Types {
      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
      public sealed partial class MapInt32Int32Entry : pb::IMessage<MapInt32Int32Entry> {
        private static readonly pb::MessageParser<MapInt32Int32Entry> _parser = new pb::MessageParser<MapInt32Int32Entry>(() => new MapInt32Int32Entry());
        public static pb::MessageParser<MapInt32Int32Entry> Parser { get { return _parser; } }

        private static readonly string[] _fieldNames = new string[] { "key", "value" };
        private static readonly uint[] _fieldTags = new uint[] { 8, 16 };
        public static pbd::MessageDescriptor Descriptor {
          get { return global::Google.Protobuf.TestProtos.TestMap.Descriptor.NestedTypes[0]; }
        }

        public pb::FieldAccess.FieldAccessorTable Fields {
          get { return global::Google.Protobuf.TestProtos.MapUnittestProto3.internal__static_protobuf_unittest_TestMap_MapInt32Int32Entry__FieldAccessorTable; }
        }

        private bool _frozen = false;
        public bool IsFrozen { get { return _frozen; } }

        public MapInt32Int32Entry() { }

        public MapInt32Int32Entry(MapInt32Int32Entry other) {
          key_ = other.key_;
          value_ = other.value_;
        }

        public MapInt32Int32Entry Clone() {
          return new MapInt32Int32Entry(this);
        }

        public void Freeze() {
          if (IsFrozen) {
            return;
          }
          _frozen = true;
        }

        public const int KeyFieldNumber = 1;
        private int key_;
        public int Key {
          get { return key_; }
          set {
            pb::Freezable.CheckMutable(this);
            key_ = value;
          }
        }

        public const int ValueFieldNumber = 2;
        private int value_;
        public int Value {
          get { return value_; }
          set {
            pb::Freezable.CheckMutable(this);
            value_ = value;
          }
        }

        public override bool Equals(object other) {
          return Equals(other as MapInt32Int32Entry);
        }

        public bool Equals(MapInt32Int32Entry other) {
          if (ReferenceEquals(other, null)) {
            return false;
          }
          if (ReferenceEquals(other, this)) {
            return true;
          }
          if (Key != other.Key) return false;
          if (Value != other.Value) return false;
          return true;
        }

        public override int GetHashCode() {
          int hash = 1;
          if (Key != 0) hash ^= Key.GetHashCode();
          if (Value != 0) hash ^= Value.GetHashCode();
          return hash;
        }

        public void WriteTo(pb::CodedOutputStream output) {
          if (Key != 0) {
            output.WriteRawTag(8);
            output.WriteInt32(Key);
          }
          if (Value != 0) {
            output.WriteRawTag(16);
            output.WriteInt32(Value);
          }
        }

        public int CalculateSize() {
          int size = 0;
          if (Key != 0) {
            size += 1 + pb::CodedOutputStream.ComputeInt32Size(Key);
          }
          if (Value != 0) {
            size += 1 + pb::CodedOutputStream.ComputeInt32Size(Value);
          }
          return size;
        }

        public void MergeFrom(MapInt32Int32Entry other) {
          if (other == null) {
            return;
          }
          if (other.Key != 0) {
            Key = other.Key;
          }
          if (other.Value != 0) {
            Value = other.Value;
          }
        }

        public void MergeFrom(pb::CodedInputStream input) {
          uint tag;
          while (input.ReadTag(out tag)) {
            switch(tag) {
              case 0:
                throw pb::InvalidProtocolBufferException.InvalidTag();
              default:
                if (pb::WireFormat.IsEndGroupTag(tag)) {
                  return;
                }
                break;
              case 8: {
                Key = input.ReadInt32();
                break;
              }
              case 16: {
                Value = input.ReadInt32();
                break;
              }
            }
          }
        }

      }

      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
      public sealed partial class MapInt64Int64Entry : pb::IMessage<MapInt64Int64Entry> {
        private static readonly pb::MessageParser<MapInt64Int64Entry> _parser = new pb::MessageParser<MapInt64Int64Entry>(() => new MapInt64Int64Entry());
        public static pb::MessageParser<MapInt64Int64Entry> Parser { get { return _parser; } }

        private static readonly string[] _fieldNames = new string[] { "key", "value" };
        private static readonly uint[] _fieldTags = new uint[] { 8, 16 };
        public static pbd::MessageDescriptor Descriptor {
          get { return global::Google.Protobuf.TestProtos.TestMap.Descriptor.NestedTypes[1]; }
        }

        public pb::FieldAccess.FieldAccessorTable Fields {
          get { return global::Google.Protobuf.TestProtos.MapUnittestProto3.internal__static_protobuf_unittest_TestMap_MapInt64Int64Entry__FieldAccessorTable; }
        }

        private bool _frozen = false;
        public bool IsFrozen { get { return _frozen; } }

        public MapInt64Int64Entry() { }

        public MapInt64Int64Entry(MapInt64Int64Entry other) {
          key_ = other.key_;
          value_ = other.value_;
        }

        public MapInt64Int64Entry Clone() {
          return new MapInt64Int64Entry(this);
        }

        public void Freeze() {
          if (IsFrozen) {
            return;
          }
          _frozen = true;
        }

        public const int KeyFieldNumber = 1;
        private long key_;
        public long Key {
          get { return key_; }
          set {
            pb::Freezable.CheckMutable(this);
            key_ = value;
          }
        }

        public const int ValueFieldNumber = 2;
        private long value_;
        public long Value {
          get { return value_; }
          set {
            pb::Freezable.CheckMutable(this);
            value_ = value;
          }
        }

        public override bool Equals(object other) {
          return Equals(other as MapInt64Int64Entry);
        }

        public bool Equals(MapInt64Int64Entry other) {
          if (ReferenceEquals(other, null)) {
            return false;
          }
          if (ReferenceEquals(other, this)) {
            return true;
          }
          if (Key != other.Key) return false;
          if (Value != other.Value) return false;
          return true;
        }

        public override int GetHashCode() {
          int hash = 1;
          if (Key != 0L) hash ^= Key.GetHashCode();
          if (Value != 0L) hash ^= Value.GetHashCode();
          return hash;
        }

        public void WriteTo(pb::CodedOutputStream output) {
          if (Key != 0L) {
            output.WriteRawTag(8);
            output.WriteInt64(Key);
          }
          if (Value != 0L) {
            output.WriteRawTag(16);
            output.WriteInt64(Value);
          }
        }

        public int CalculateSize() {
          int size = 0;
          if (Key != 0L) {
            size += 1 + pb::CodedOutputStream.ComputeInt64Size(Key);
          }
          if (Value != 0L) {
            size += 1 + pb::CodedOutputStream.ComputeInt64Size(Value);
          }
          return size;
        }

        public void MergeFrom(MapInt64Int64Entry other) {
          if (other == null) {
            return;
          }
          if (other.Key != 0L) {
            Key = other.Key;
          }
          if (other.Value != 0L) {
            Value = other.Value;
          }
        }

        public void MergeFrom(pb::CodedInputStream input) {
          uint tag;
          while (input.ReadTag(out tag)) {
            switch(tag) {
              case 0:
                throw pb::InvalidProtocolBufferException.InvalidTag();
              default:
                if (pb::WireFormat.IsEndGroupTag(tag)) {
                  return;
                }
                break;
              case 8: {
                Key = input.ReadInt64();
                break;
              }
              case 16: {
                Value = input.ReadInt64();
                break;
              }
            }
          }
        }

      }

      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
      public sealed partial class MapUint32Uint32Entry : pb::IMessage<MapUint32Uint32Entry> {
        private static readonly pb::MessageParser<MapUint32Uint32Entry> _parser = new pb::MessageParser<MapUint32Uint32Entry>(() => new MapUint32Uint32Entry());
        public static pb::MessageParser<MapUint32Uint32Entry> Parser { get { return _parser; } }

        private static readonly string[] _fieldNames = new string[] { "key", "value" };
        private static readonly uint[] _fieldTags = new uint[] { 8, 16 };
        public static pbd::MessageDescriptor Descriptor {
          get { return global::Google.Protobuf.TestProtos.TestMap.Descriptor.NestedTypes[2]; }
        }

        public pb::FieldAccess.FieldAccessorTable Fields {
          get { return global::Google.Protobuf.TestProtos.MapUnittestProto3.internal__static_protobuf_unittest_TestMap_MapUint32Uint32Entry__FieldAccessorTable; }
        }

        private bool _frozen = false;
        public bool IsFrozen { get { return _frozen; } }

        public MapUint32Uint32Entry() { }

        public MapUint32Uint32Entry(MapUint32Uint32Entry other) {
          key_ = other.key_;
          value_ = other.value_;
        }

        public MapUint32Uint32Entry Clone() {
          return new MapUint32Uint32Entry(this);
        }

        public void Freeze() {
          if (IsFrozen) {
            return;
          }
          _frozen = true;
        }

        public const int KeyFieldNumber = 1;
        private uint key_;
        public uint Key {
          get { return key_; }
          set {
            pb::Freezable.CheckMutable(this);
            key_ = value;
          }
        }

        public const int ValueFieldNumber = 2;
        private uint value_;
        public uint Value {
          get { return value_; }
          set {
            pb::Freezable.CheckMutable(this);
            value_ = value;
          }
        }

        public override bool Equals(object other) {
          return Equals(other as MapUint32Uint32Entry);
        }

        public bool Equals(MapUint32Uint32Entry other) {
          if (ReferenceEquals(other, null)) {
            return false;
          }
          if (ReferenceEquals(other, this)) {
            return true;
          }
          if (Key != other.Key) return false;
          if (Value != other.Value) return false;
          return true;
        }

        public override int GetHashCode() {
          int hash = 1;
          if (Key != 0) hash ^= Key.GetHashCode();
          if (Value != 0) hash ^= Value.GetHashCode();
          return hash;
        }

        public void WriteTo(pb::CodedOutputStream output) {
          if (Key != 0) {
            output.WriteRawTag(8);
            output.WriteUInt32(Key);
          }
          if (Value != 0) {
            output.WriteRawTag(16);
            output.WriteUInt32(Value);
          }
        }

        public int CalculateSize() {
          int size = 0;
          if (Key != 0) {
            size += 1 + pb::CodedOutputStream.ComputeUInt32Size(Key);
          }
          if (Value != 0) {
            size += 1 + pb::CodedOutputStream.ComputeUInt32Size(Value);
          }
          return size;
        }

        public void MergeFrom(MapUint32Uint32Entry other) {
          if (other == null) {
            return;
          }
          if (other.Key != 0) {
            Key = other.Key;
          }
          if (other.Value != 0) {
            Value = other.Value;
          }
        }

        public void MergeFrom(pb::CodedInputStream input) {
          uint tag;
          while (input.ReadTag(out tag)) {
            switch(tag) {
              case 0:
                throw pb::InvalidProtocolBufferException.InvalidTag();
              default:
                if (pb::WireFormat.IsEndGroupTag(tag)) {
                  return;
                }
                break;
              case 8: {
                Key = input.ReadUInt32();
                break;
              }
              case 16: {
                Value = input.ReadUInt32();
                break;
              }
            }
          }
        }

      }

      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
      public sealed partial class MapUint64Uint64Entry : pb::IMessage<MapUint64Uint64Entry> {
        private static readonly pb::MessageParser<MapUint64Uint64Entry> _parser = new pb::MessageParser<MapUint64Uint64Entry>(() => new MapUint64Uint64Entry());
        public static pb::MessageParser<MapUint64Uint64Entry> Parser { get { return _parser; } }

        private static readonly string[] _fieldNames = new string[] { "key", "value" };
        private static readonly uint[] _fieldTags = new uint[] { 8, 16 };
        public static pbd::MessageDescriptor Descriptor {
          get { return global::Google.Protobuf.TestProtos.TestMap.Descriptor.NestedTypes[3]; }
        }

        public pb::FieldAccess.FieldAccessorTable Fields {
          get { return global::Google.Protobuf.TestProtos.MapUnittestProto3.internal__static_protobuf_unittest_TestMap_MapUint64Uint64Entry__FieldAccessorTable; }
        }

        private bool _frozen = false;
        public bool IsFrozen { get { return _frozen; } }

        public MapUint64Uint64Entry() { }

        public MapUint64Uint64Entry(MapUint64Uint64Entry other) {
          key_ = other.key_;
          value_ = other.value_;
        }

        public MapUint64Uint64Entry Clone() {
          return new MapUint64Uint64Entry(this);
        }

        public void Freeze() {
          if (IsFrozen) {
            return;
          }
          _frozen = true;
        }

        public const int KeyFieldNumber = 1;
        private ulong key_;
        public ulong Key {
          get { return key_; }
          set {
            pb::Freezable.CheckMutable(this);
            key_ = value;
          }
        }

        public const int ValueFieldNumber = 2;
        private ulong value_;
        public ulong Value {
          get { return value_; }
          set {
            pb::Freezable.CheckMutable(this);
            value_ = value;
          }
        }

        public override bool Equals(object other) {
          return Equals(other as MapUint64Uint64Entry);
        }

        public bool Equals(MapUint64Uint64Entry other) {
          if (ReferenceEquals(other, null)) {
            return false;
          }
          if (ReferenceEquals(other, this)) {
            return true;
          }
          if (Key != other.Key) return false;
          if (Value != other.Value) return false;
          return true;
        }

        public override int GetHashCode() {
          int hash = 1;
          if (Key != 0UL) hash ^= Key.GetHashCode();
          if (Value != 0UL) hash ^= Value.GetHashCode();
          return hash;
        }

        public void WriteTo(pb::CodedOutputStream output) {
          if (Key != 0UL) {
            output.WriteRawTag(8);
            output.WriteUInt64(Key);
          }
          if (Value != 0UL) {
            output.WriteRawTag(16);
            output.WriteUInt64(Value);
          }
        }

        public int CalculateSize() {
          int size = 0;
          if (Key != 0UL) {
            size += 1 + pb::CodedOutputStream.ComputeUInt64Size(Key);
          }
          if (Value != 0UL) {
            size += 1 + pb::CodedOutputStream.ComputeUInt64Size(Value);
          }
          return size;
        }

        public void MergeFrom(MapUint64Uint64Entry other) {
          if (other == null) {
            return;
          }
          if (other.Key != 0UL) {
            Key = other.Key;
          }
          if (other.Value != 0UL) {
            Value = other.Value;
          }
        }

        public void MergeFrom(pb::CodedInputStream input) {
          uint tag;
          while (input.ReadTag(out tag)) {
            switch(tag) {
              case 0:
                throw pb::InvalidProtocolBufferException.InvalidTag();
              default:
                if (pb::WireFormat.IsEndGroupTag(tag)) {
                  return;
                }
                break;
              case 8: {
                Key = input.ReadUInt64();
                break;
              }
              case 16: {
                Value = input.ReadUInt64();
                break;
              }
            }
          }
        }

      }

      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
      public sealed partial class MapSint32Sint32Entry : pb::IMessage<MapSint32Sint32Entry> {
        private static readonly pb::MessageParser<MapSint32Sint32Entry> _parser = new pb::MessageParser<MapSint32Sint32Entry>(() => new MapSint32Sint32Entry());
        public static pb::MessageParser<MapSint32Sint32Entry> Parser { get { return _parser; } }

        private static readonly string[] _fieldNames = new string[] { "key", "value" };
        private static readonly uint[] _fieldTags = new uint[] { 8, 16 };
        public static pbd::MessageDescriptor Descriptor {
          get { return global::Google.Protobuf.TestProtos.TestMap.Descriptor.NestedTypes[4]; }
        }

        public pb::FieldAccess.FieldAccessorTable Fields {
          get { return global::Google.Protobuf.TestProtos.MapUnittestProto3.internal__static_protobuf_unittest_TestMap_MapSint32Sint32Entry__FieldAccessorTable; }
        }

        private bool _frozen = false;
        public bool IsFrozen { get { return _frozen; } }

        public MapSint32Sint32Entry() { }

        public MapSint32Sint32Entry(MapSint32Sint32Entry other) {
          key_ = other.key_;
          value_ = other.value_;
        }

        public MapSint32Sint32Entry Clone() {
          return new MapSint32Sint32Entry(this);
        }

        public void Freeze() {
          if (IsFrozen) {
            return;
          }
          _frozen = true;
        }

        public const int KeyFieldNumber = 1;
        private int key_;
        public int Key {
          get { return key_; }
          set {
            pb::Freezable.CheckMutable(this);
            key_ = value;
          }
        }

        public const int ValueFieldNumber = 2;
        private int value_;
        public int Value {
          get { return value_; }
          set {
            pb::Freezable.CheckMutable(this);
            value_ = value;
          }
        }

        public override bool Equals(object other) {
          return Equals(other as MapSint32Sint32Entry);
        }

        public bool Equals(MapSint32Sint32Entry other) {
          if (ReferenceEquals(other, null)) {
            return false;
          }
          if (ReferenceEquals(other, this)) {
            return true;
          }
          if (Key != other.Key) return false;
          if (Value != other.Value) return false;
          return true;
        }

        public override int GetHashCode() {
          int hash = 1;
          if (Key != 0) hash ^= Key.GetHashCode();
          if (Value != 0) hash ^= Value.GetHashCode();
          return hash;
        }

        public void WriteTo(pb::CodedOutputStream output) {
          if (Key != 0) {
            output.WriteRawTag(8);
            output.WriteSInt32(Key);
          }
          if (Value != 0) {
            output.WriteRawTag(16);
            output.WriteSInt32(Value);
          }
        }

        public int CalculateSize() {
          int size = 0;
          if (Key != 0) {
            size += 1 + pb::CodedOutputStream.ComputeSInt32Size(Key);
          }
          if (Value != 0) {
            size += 1 + pb::CodedOutputStream.ComputeSInt32Size(Value);
          }
          return size;
        }

        public void MergeFrom(MapSint32Sint32Entry other) {
          if (other == null) {
            return;
          }
          if (other.Key != 0) {
            Key = other.Key;
          }
          if (other.Value != 0) {
            Value = other.Value;
          }
        }

        public void MergeFrom(pb::CodedInputStream input) {
          uint tag;
          while (input.ReadTag(out tag)) {
            switch(tag) {
              case 0:
                throw pb::InvalidProtocolBufferException.InvalidTag();
              default:
                if (pb::WireFormat.IsEndGroupTag(tag)) {
                  return;
                }
                break;
              case 8: {
                Key = input.ReadSInt32();
                break;
              }
              case 16: {
                Value = input.ReadSInt32();
                break;
              }
            }
          }
        }

      }

      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
      public sealed partial class MapSint64Sint64Entry : pb::IMessage<MapSint64Sint64Entry> {
        private static readonly pb::MessageParser<MapSint64Sint64Entry> _parser = new pb::MessageParser<MapSint64Sint64Entry>(() => new MapSint64Sint64Entry());
        public static pb::MessageParser<MapSint64Sint64Entry> Parser { get { return _parser; } }

        private static readonly string[] _fieldNames = new string[] { "key", "value" };
        private static readonly uint[] _fieldTags = new uint[] { 8, 16 };
        public static pbd::MessageDescriptor Descriptor {
          get { return global::Google.Protobuf.TestProtos.TestMap.Descriptor.NestedTypes[5]; }
        }

        public pb::FieldAccess.FieldAccessorTable Fields {
          get { return global::Google.Protobuf.TestProtos.MapUnittestProto3.internal__static_protobuf_unittest_TestMap_MapSint64Sint64Entry__FieldAccessorTable; }
        }

        private bool _frozen = false;
        public bool IsFrozen { get { return _frozen; } }

        public MapSint64Sint64Entry() { }

        public MapSint64Sint64Entry(MapSint64Sint64Entry other) {
          key_ = other.key_;
          value_ = other.value_;
        }

        public MapSint64Sint64Entry Clone() {
          return new MapSint64Sint64Entry(this);
        }

        public void Freeze() {
          if (IsFrozen) {
            return;
          }
          _frozen = true;
        }

        public const int KeyFieldNumber = 1;
        private long key_;
        public long Key {
          get { return key_; }
          set {
            pb::Freezable.CheckMutable(this);
            key_ = value;
          }
        }

        public const int ValueFieldNumber = 2;
        private long value_;
        public long Value {
          get { return value_; }
          set {
            pb::Freezable.CheckMutable(this);
            value_ = value;
          }
        }

        public override bool Equals(object other) {
          return Equals(other as MapSint64Sint64Entry);
        }

        public bool Equals(MapSint64Sint64Entry other) {
          if (ReferenceEquals(other, null)) {
            return false;
          }
          if (ReferenceEquals(other, this)) {
            return true;
          }
          if (Key != other.Key) return false;
          if (Value != other.Value) return false;
          return true;
        }

        public override int GetHashCode() {
          int hash = 1;
          if (Key != 0L) hash ^= Key.GetHashCode();
          if (Value != 0L) hash ^= Value.GetHashCode();
          return hash;
        }

        public void WriteTo(pb::CodedOutputStream output) {
          if (Key != 0L) {
            output.WriteRawTag(8);
            output.WriteSInt64(Key);
          }
          if (Value != 0L) {
            output.WriteRawTag(16);
            output.WriteSInt64(Value);
          }
        }

        public int CalculateSize() {
          int size = 0;
          if (Key != 0L) {
            size += 1 + pb::CodedOutputStream.ComputeSInt64Size(Key);
          }
          if (Value != 0L) {
            size += 1 + pb::CodedOutputStream.ComputeSInt64Size(Value);
          }
          return size;
        }

        public void MergeFrom(MapSint64Sint64Entry other) {
          if (other == null) {
            return;
          }
          if (other.Key != 0L) {
            Key = other.Key;
          }
          if (other.Value != 0L) {
            Value = other.Value;
          }
        }

        public void MergeFrom(pb::CodedInputStream input) {
          uint tag;
          while (input.ReadTag(out tag)) {
            switch(tag) {
              case 0:
                throw pb::InvalidProtocolBufferException.InvalidTag();
              default:
                if (pb::WireFormat.IsEndGroupTag(tag)) {
                  return;
                }
                break;
              case 8: {
                Key = input.ReadSInt64();
                break;
              }
              case 16: {
                Value = input.ReadSInt64();
                break;
              }
            }
          }
        }

      }

      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
      public sealed partial class MapFixed32Fixed32Entry : pb::IMessage<MapFixed32Fixed32Entry> {
        private static readonly pb::MessageParser<MapFixed32Fixed32Entry> _parser = new pb::MessageParser<MapFixed32Fixed32Entry>(() => new MapFixed32Fixed32Entry());
        public static pb::MessageParser<MapFixed32Fixed32Entry> Parser { get { return _parser; } }

        private static readonly string[] _fieldNames = new string[] { "key", "value" };
        private static readonly uint[] _fieldTags = new uint[] { 13, 21 };
        public static pbd::MessageDescriptor Descriptor {
          get { return global::Google.Protobuf.TestProtos.TestMap.Descriptor.NestedTypes[6]; }
        }

        public pb::FieldAccess.FieldAccessorTable Fields {
          get { return global::Google.Protobuf.TestProtos.MapUnittestProto3.internal__static_protobuf_unittest_TestMap_MapFixed32Fixed32Entry__FieldAccessorTable; }
        }

        private bool _frozen = false;
        public bool IsFrozen { get { return _frozen; } }

        public MapFixed32Fixed32Entry() { }

        public MapFixed32Fixed32Entry(MapFixed32Fixed32Entry other) {
          key_ = other.key_;
          value_ = other.value_;
        }

        public MapFixed32Fixed32Entry Clone() {
          return new MapFixed32Fixed32Entry(this);
        }

        public void Freeze() {
          if (IsFrozen) {
            return;
          }
          _frozen = true;
        }

        public const int KeyFieldNumber = 1;
        private uint key_;
        public uint Key {
          get { return key_; }
          set {
            pb::Freezable.CheckMutable(this);
            key_ = value;
          }
        }

        public const int ValueFieldNumber = 2;
        private uint value_;
        public uint Value {
          get { return value_; }
          set {
            pb::Freezable.CheckMutable(this);
            value_ = value;
          }
        }

        public override bool Equals(object other) {
          return Equals(other as MapFixed32Fixed32Entry);
        }

        public bool Equals(MapFixed32Fixed32Entry other) {
          if (ReferenceEquals(other, null)) {
            return false;
          }
          if (ReferenceEquals(other, this)) {
            return true;
          }
          if (Key != other.Key) return false;
          if (Value != other.Value) return false;
          return true;
        }

        public override int GetHashCode() {
          int hash = 1;
          if (Key != 0) hash ^= Key.GetHashCode();
          if (Value != 0) hash ^= Value.GetHashCode();
          return hash;
        }

        public void WriteTo(pb::CodedOutputStream output) {
          if (Key != 0) {
            output.WriteRawTag(13);
            output.WriteFixed32(Key);
          }
          if (Value != 0) {
            output.WriteRawTag(21);
            output.WriteFixed32(Value);
          }
        }

        public int CalculateSize() {
          int size = 0;
          if (Key != 0) {
            size += 1 + 4;
          }
          if (Value != 0) {
            size += 1 + 4;
          }
          return size;
        }

        public void MergeFrom(MapFixed32Fixed32Entry other) {
          if (other == null) {
            return;
          }
          if (other.Key != 0) {
            Key = other.Key;
          }
          if (other.Value != 0) {
            Value = other.Value;
          }
        }

        public void MergeFrom(pb::CodedInputStream input) {
          uint tag;
          while (input.ReadTag(out tag)) {
            switch(tag) {
              case 0:
                throw pb::InvalidProtocolBufferException.InvalidTag();
              default:
                if (pb::WireFormat.IsEndGroupTag(tag)) {
                  return;
                }
                break;
              case 13: {
                Key = input.ReadFixed32();
                break;
              }
              case 21: {
                Value = input.ReadFixed32();
                break;
              }
            }
          }
        }

      }

      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
      public sealed partial class MapFixed64Fixed64Entry : pb::IMessage<MapFixed64Fixed64Entry> {
        private static readonly pb::MessageParser<MapFixed64Fixed64Entry> _parser = new pb::MessageParser<MapFixed64Fixed64Entry>(() => new MapFixed64Fixed64Entry());
        public static pb::MessageParser<MapFixed64Fixed64Entry> Parser { get { return _parser; } }

        private static readonly string[] _fieldNames = new string[] { "key", "value" };
        private static readonly uint[] _fieldTags = new uint[] { 9, 17 };
        public static pbd::MessageDescriptor Descriptor {
          get { return global::Google.Protobuf.TestProtos.TestMap.Descriptor.NestedTypes[7]; }
        }

        public pb::FieldAccess.FieldAccessorTable Fields {
          get { return global::Google.Protobuf.TestProtos.MapUnittestProto3.internal__static_protobuf_unittest_TestMap_MapFixed64Fixed64Entry__FieldAccessorTable; }
        }

        private bool _frozen = false;
        public bool IsFrozen { get { return _frozen; } }

        public MapFixed64Fixed64Entry() { }

        public MapFixed64Fixed64Entry(MapFixed64Fixed64Entry other) {
          key_ = other.key_;
          value_ = other.value_;
        }

        public MapFixed64Fixed64Entry Clone() {
          return new MapFixed64Fixed64Entry(this);
        }

        public void Freeze() {
          if (IsFrozen) {
            return;
          }
          _frozen = true;
        }

        public const int KeyFieldNumber = 1;
        private ulong key_;
        public ulong Key {
          get { return key_; }
          set {
            pb::Freezable.CheckMutable(this);
            key_ = value;
          }
        }

        public const int ValueFieldNumber = 2;
        private ulong value_;
        public ulong Value {
          get { return value_; }
          set {
            pb::Freezable.CheckMutable(this);
            value_ = value;
          }
        }

        public override bool Equals(object other) {
          return Equals(other as MapFixed64Fixed64Entry);
        }

        public bool Equals(MapFixed64Fixed64Entry other) {
          if (ReferenceEquals(other, null)) {
            return false;
          }
          if (ReferenceEquals(other, this)) {
            return true;
          }
          if (Key != other.Key) return false;
          if (Value != other.Value) return false;
          return true;
        }

        public override int GetHashCode() {
          int hash = 1;
          if (Key != 0UL) hash ^= Key.GetHashCode();
          if (Value != 0UL) hash ^= Value.GetHashCode();
          return hash;
        }

        public void WriteTo(pb::CodedOutputStream output) {
          if (Key != 0UL) {
            output.WriteRawTag(9);
            output.WriteFixed64(Key);
          }
          if (Value != 0UL) {
            output.WriteRawTag(17);
            output.WriteFixed64(Value);
          }
        }

        public int CalculateSize() {
          int size = 0;
          if (Key != 0UL) {
            size += 1 + 8;
          }
          if (Value != 0UL) {
            size += 1 + 8;
          }
          return size;
        }

        public void MergeFrom(MapFixed64Fixed64Entry other) {
          if (other == null) {
            return;
          }
          if (other.Key != 0UL) {
            Key = other.Key;
          }
          if (other.Value != 0UL) {
            Value = other.Value;
          }
        }

        public void MergeFrom(pb::CodedInputStream input) {
          uint tag;
          while (input.ReadTag(out tag)) {
            switch(tag) {
              case 0:
                throw pb::InvalidProtocolBufferException.InvalidTag();
              default:
                if (pb::WireFormat.IsEndGroupTag(tag)) {
                  return;
                }
                break;
              case 9: {
                Key = input.ReadFixed64();
                break;
              }
              case 17: {
                Value = input.ReadFixed64();
                break;
              }
            }
          }
        }

      }

      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
      public sealed partial class MapSfixed32Sfixed32Entry : pb::IMessage<MapSfixed32Sfixed32Entry> {
        private static readonly pb::MessageParser<MapSfixed32Sfixed32Entry> _parser = new pb::MessageParser<MapSfixed32Sfixed32Entry>(() => new MapSfixed32Sfixed32Entry());
        public static pb::MessageParser<MapSfixed32Sfixed32Entry> Parser { get { return _parser; } }

        private static readonly string[] _fieldNames = new string[] { "key", "value" };
        private static readonly uint[] _fieldTags = new uint[] { 13, 21 };
        public static pbd::MessageDescriptor Descriptor {
          get { return global::Google.Protobuf.TestProtos.TestMap.Descriptor.NestedTypes[8]; }
        }

        public pb::FieldAccess.FieldAccessorTable Fields {
          get { return global::Google.Protobuf.TestProtos.MapUnittestProto3.internal__static_protobuf_unittest_TestMap_MapSfixed32Sfixed32Entry__FieldAccessorTable; }
        }

        private bool _frozen = false;
        public bool IsFrozen { get { return _frozen; } }

        public MapSfixed32Sfixed32Entry() { }

        public MapSfixed32Sfixed32Entry(MapSfixed32Sfixed32Entry other) {
          key_ = other.key_;
          value_ = other.value_;
        }

        public MapSfixed32Sfixed32Entry Clone() {
          return new MapSfixed32Sfixed32Entry(this);
        }

        public void Freeze() {
          if (IsFrozen) {
            return;
          }
          _frozen = true;
        }

        public const int KeyFieldNumber = 1;
        private int key_;
        public int Key {
          get { return key_; }
          set {
            pb::Freezable.CheckMutable(this);
            key_ = value;
          }
        }

        public const int ValueFieldNumber = 2;
        private int value_;
        public int Value {
          get { return value_; }
          set {
            pb::Freezable.CheckMutable(this);
            value_ = value;
          }
        }

        public override bool Equals(object other) {
          return Equals(other as MapSfixed32Sfixed32Entry);
        }

        public bool Equals(MapSfixed32Sfixed32Entry other) {
          if (ReferenceEquals(other, null)) {
            return false;
          }
          if (ReferenceEquals(other, this)) {
            return true;
          }
          if (Key != other.Key) return false;
          if (Value != other.Value) return false;
          return true;
        }

        public override int GetHashCode() {
          int hash = 1;
          if (Key != 0) hash ^= Key.GetHashCode();
          if (Value != 0) hash ^= Value.GetHashCode();
          return hash;
        }

        public void WriteTo(pb::CodedOutputStream output) {
          if (Key != 0) {
            output.WriteRawTag(13);
            output.WriteSFixed32(Key);
          }
          if (Value != 0) {
            output.WriteRawTag(21);
            output.WriteSFixed32(Value);
          }
        }

        public int CalculateSize() {
          int size = 0;
          if (Key != 0) {
            size += 1 + 4;
          }
          if (Value != 0) {
            size += 1 + 4;
          }
          return size;
        }

        public void MergeFrom(MapSfixed32Sfixed32Entry other) {
          if (other == null) {
            return;
          }
          if (other.Key != 0) {
            Key = other.Key;
          }
          if (other.Value != 0) {
            Value = other.Value;
          }
        }

        public void MergeFrom(pb::CodedInputStream input) {
          uint tag;
          while (input.ReadTag(out tag)) {
            switch(tag) {
              case 0:
                throw pb::InvalidProtocolBufferException.InvalidTag();
              default:
                if (pb::WireFormat.IsEndGroupTag(tag)) {
                  return;
                }
                break;
              case 13: {
                Key = input.ReadSFixed32();
                break;
              }
              case 21: {
                Value = input.ReadSFixed32();
                break;
              }
            }
          }
        }

      }

      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
      public sealed partial class MapSfixed64Sfixed64Entry : pb::IMessage<MapSfixed64Sfixed64Entry> {
        private static readonly pb::MessageParser<MapSfixed64Sfixed64Entry> _parser = new pb::MessageParser<MapSfixed64Sfixed64Entry>(() => new MapSfixed64Sfixed64Entry());
        public static pb::MessageParser<MapSfixed64Sfixed64Entry> Parser { get { return _parser; } }

        private static readonly string[] _fieldNames = new string[] { "key", "value" };
        private static readonly uint[] _fieldTags = new uint[] { 9, 17 };
        public static pbd::MessageDescriptor Descriptor {
          get { return global::Google.Protobuf.TestProtos.TestMap.Descriptor.NestedTypes[9]; }
        }

        public pb::FieldAccess.FieldAccessorTable Fields {
          get { return global::Google.Protobuf.TestProtos.MapUnittestProto3.internal__static_protobuf_unittest_TestMap_MapSfixed64Sfixed64Entry__FieldAccessorTable; }
        }

        private bool _frozen = false;
        public bool IsFrozen { get { return _frozen; } }

        public MapSfixed64Sfixed64Entry() { }

        public MapSfixed64Sfixed64Entry(MapSfixed64Sfixed64Entry other) {
          key_ = other.key_;
          value_ = other.value_;
        }

        public MapSfixed64Sfixed64Entry Clone() {
          return new MapSfixed64Sfixed64Entry(this);
        }

        public void Freeze() {
          if (IsFrozen) {
            return;
          }
          _frozen = true;
        }

        public const int KeyFieldNumber = 1;
        private long key_;
        public long Key {
          get { return key_; }
          set {
            pb::Freezable.CheckMutable(this);
            key_ = value;
          }
        }

        public const int ValueFieldNumber = 2;
        private long value_;
        public long Value {
          get { return value_; }
          set {
            pb::Freezable.CheckMutable(this);
            value_ = value;
          }
        }

        public override bool Equals(object other) {
          return Equals(other as MapSfixed64Sfixed64Entry);
        }

        public bool Equals(MapSfixed64Sfixed64Entry other) {
          if (ReferenceEquals(other, null)) {
            return false;
          }
          if (ReferenceEquals(other, this)) {
            return true;
          }
          if (Key != other.Key) return false;
          if (Value != other.Value) return false;
          return true;
        }

        public override int GetHashCode() {
          int hash = 1;
          if (Key != 0L) hash ^= Key.GetHashCode();
          if (Value != 0L) hash ^= Value.GetHashCode();
          return hash;
        }

        public void WriteTo(pb::CodedOutputStream output) {
          if (Key != 0L) {
            output.WriteRawTag(9);
            output.WriteSFixed64(Key);
          }
          if (Value != 0L) {
            output.WriteRawTag(17);
            output.WriteSFixed64(Value);
          }
        }

        public int CalculateSize() {
          int size = 0;
          if (Key != 0L) {
            size += 1 + 8;
          }
          if (Value != 0L) {
            size += 1 + 8;
          }
          return size;
        }

        public void MergeFrom(MapSfixed64Sfixed64Entry other) {
          if (other == null) {
            return;
          }
          if (other.Key != 0L) {
            Key = other.Key;
          }
          if (other.Value != 0L) {
            Value = other.Value;
          }
        }

        public void MergeFrom(pb::CodedInputStream input) {
          uint tag;
          while (input.ReadTag(out tag)) {
            switch(tag) {
              case 0:
                throw pb::InvalidProtocolBufferException.InvalidTag();
              default:
                if (pb::WireFormat.IsEndGroupTag(tag)) {
                  return;
                }
                break;
              case 9: {
                Key = input.ReadSFixed64();
                break;
              }
              case 17: {
                Value = input.ReadSFixed64();
                break;
              }
            }
          }
        }

      }

      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
      public sealed partial class MapInt32FloatEntry : pb::IMessage<MapInt32FloatEntry> {
        private static readonly pb::MessageParser<MapInt32FloatEntry> _parser = new pb::MessageParser<MapInt32FloatEntry>(() => new MapInt32FloatEntry());
        public static pb::MessageParser<MapInt32FloatEntry> Parser { get { return _parser; } }

        private static readonly string[] _fieldNames = new string[] { "key", "value" };
        private static readonly uint[] _fieldTags = new uint[] { 8, 21 };
        public static pbd::MessageDescriptor Descriptor {
          get { return global::Google.Protobuf.TestProtos.TestMap.Descriptor.NestedTypes[10]; }
        }

        public pb::FieldAccess.FieldAccessorTable Fields {
          get { return global::Google.Protobuf.TestProtos.MapUnittestProto3.internal__static_protobuf_unittest_TestMap_MapInt32FloatEntry__FieldAccessorTable; }
        }

        private bool _frozen = false;
        public bool IsFrozen { get { return _frozen; } }

        public MapInt32FloatEntry() { }

        public MapInt32FloatEntry(MapInt32FloatEntry other) {
          key_ = other.key_;
          value_ = other.value_;
        }

        public MapInt32FloatEntry Clone() {
          return new MapInt32FloatEntry(this);
        }

        public void Freeze() {
          if (IsFrozen) {
            return;
          }
          _frozen = true;
        }

        public const int KeyFieldNumber = 1;
        private int key_;
        public int Key {
          get { return key_; }
          set {
            pb::Freezable.CheckMutable(this);
            key_ = value;
          }
        }

        public const int ValueFieldNumber = 2;
        private float value_;
        public float Value {
          get { return value_; }
          set {
            pb::Freezable.CheckMutable(this);
            value_ = value;
          }
        }

        public override bool Equals(object other) {
          return Equals(other as MapInt32FloatEntry);
        }

        public bool Equals(MapInt32FloatEntry other) {
          if (ReferenceEquals(other, null)) {
            return false;
          }
          if (ReferenceEquals(other, this)) {
            return true;
          }
          if (Key != other.Key) return false;
          if (Value != other.Value) return false;
          return true;
        }

        public override int GetHashCode() {
          int hash = 1;
          if (Key != 0) hash ^= Key.GetHashCode();
          if (Value != 0F) hash ^= Value.GetHashCode();
          return hash;
        }

        public void WriteTo(pb::CodedOutputStream output) {
          if (Key != 0) {
            output.WriteRawTag(8);
            output.WriteInt32(Key);
          }
          if (Value != 0F) {
            output.WriteRawTag(21);
            output.WriteFloat(Value);
          }
        }

        public int CalculateSize() {
          int size = 0;
          if (Key != 0) {
            size += 1 + pb::CodedOutputStream.ComputeInt32Size(Key);
          }
          if (Value != 0F) {
            size += 1 + 4;
          }
          return size;
        }

        public void MergeFrom(MapInt32FloatEntry other) {
          if (other == null) {
            return;
          }
          if (other.Key != 0) {
            Key = other.Key;
          }
          if (other.Value != 0F) {
            Value = other.Value;
          }
        }

        public void MergeFrom(pb::CodedInputStream input) {
          uint tag;
          while (input.ReadTag(out tag)) {
            switch(tag) {
              case 0:
                throw pb::InvalidProtocolBufferException.InvalidTag();
              default:
                if (pb::WireFormat.IsEndGroupTag(tag)) {
                  return;
                }
                break;
              case 8: {
                Key = input.ReadInt32();
                break;
              }
              case 21: {
                Value = input.ReadFloat();
                break;
              }
            }
          }
        }

      }

      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
      public sealed partial class MapInt32DoubleEntry : pb::IMessage<MapInt32DoubleEntry> {
        private static readonly pb::MessageParser<MapInt32DoubleEntry> _parser = new pb::MessageParser<MapInt32DoubleEntry>(() => new MapInt32DoubleEntry());
        public static pb::MessageParser<MapInt32DoubleEntry> Parser { get { return _parser; } }

        private static readonly string[] _fieldNames = new string[] { "key", "value" };
        private static readonly uint[] _fieldTags = new uint[] { 8, 17 };
        public static pbd::MessageDescriptor Descriptor {
          get { return global::Google.Protobuf.TestProtos.TestMap.Descriptor.NestedTypes[11]; }
        }

        public pb::FieldAccess.FieldAccessorTable Fields {
          get { return global::Google.Protobuf.TestProtos.MapUnittestProto3.internal__static_protobuf_unittest_TestMap_MapInt32DoubleEntry__FieldAccessorTable; }
        }

        private bool _frozen = false;
        public bool IsFrozen { get { return _frozen; } }

        public MapInt32DoubleEntry() { }

        public MapInt32DoubleEntry(MapInt32DoubleEntry other) {
          key_ = other.key_;
          value_ = other.value_;
        }

        public MapInt32DoubleEntry Clone() {
          return new MapInt32DoubleEntry(this);
        }

        public void Freeze() {
          if (IsFrozen) {
            return;
          }
          _frozen = true;
        }

        public const int KeyFieldNumber = 1;
        private int key_;
        public int Key {
          get { return key_; }
          set {
            pb::Freezable.CheckMutable(this);
            key_ = value;
          }
        }

        public const int ValueFieldNumber = 2;
        private double value_;
        public double Value {
          get { return value_; }
          set {
            pb::Freezable.CheckMutable(this);
            value_ = value;
          }
        }

        public override bool Equals(object other) {
          return Equals(other as MapInt32DoubleEntry);
        }

        public bool Equals(MapInt32DoubleEntry other) {
          if (ReferenceEquals(other, null)) {
            return false;
          }
          if (ReferenceEquals(other, this)) {
            return true;
          }
          if (Key != other.Key) return false;
          if (Value != other.Value) return false;
          return true;
        }

        public override int GetHashCode() {
          int hash = 1;
          if (Key != 0) hash ^= Key.GetHashCode();
          if (Value != 0D) hash ^= Value.GetHashCode();
          return hash;
        }

        public void WriteTo(pb::CodedOutputStream output) {
          if (Key != 0) {
            output.WriteRawTag(8);
            output.WriteInt32(Key);
          }
          if (Value != 0D) {
            output.WriteRawTag(17);
            output.WriteDouble(Value);
          }
        }

        public int CalculateSize() {
          int size = 0;
          if (Key != 0) {
            size += 1 + pb::CodedOutputStream.ComputeInt32Size(Key);
          }
          if (Value != 0D) {
            size += 1 + 8;
          }
          return size;
        }

        public void MergeFrom(MapInt32DoubleEntry other) {
          if (other == null) {
            return;
          }
          if (other.Key != 0) {
            Key = other.Key;
          }
          if (other.Value != 0D) {
            Value = other.Value;
          }
        }

        public void MergeFrom(pb::CodedInputStream input) {
          uint tag;
          while (input.ReadTag(out tag)) {
            switch(tag) {
              case 0:
                throw pb::InvalidProtocolBufferException.InvalidTag();
              default:
                if (pb::WireFormat.IsEndGroupTag(tag)) {
                  return;
                }
                break;
              case 8: {
                Key = input.ReadInt32();
                break;
              }
              case 17: {
                Value = input.ReadDouble();
                break;
              }
            }
          }
        }

      }

      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
      public sealed partial class MapBoolBoolEntry : pb::IMessage<MapBoolBoolEntry> {
        private static readonly pb::MessageParser<MapBoolBoolEntry> _parser = new pb::MessageParser<MapBoolBoolEntry>(() => new MapBoolBoolEntry());
        public static pb::MessageParser<MapBoolBoolEntry> Parser { get { return _parser; } }

        private static readonly string[] _fieldNames = new string[] { "key", "value" };
        private static readonly uint[] _fieldTags = new uint[] { 8, 16 };
        public static pbd::MessageDescriptor Descriptor {
          get { return global::Google.Protobuf.TestProtos.TestMap.Descriptor.NestedTypes[12]; }
        }

        public pb::FieldAccess.FieldAccessorTable Fields {
          get { return global::Google.Protobuf.TestProtos.MapUnittestProto3.internal__static_protobuf_unittest_TestMap_MapBoolBoolEntry__FieldAccessorTable; }
        }

        private bool _frozen = false;
        public bool IsFrozen { get { return _frozen; } }

        public MapBoolBoolEntry() { }

        public MapBoolBoolEntry(MapBoolBoolEntry other) {
          key_ = other.key_;
          value_ = other.value_;
        }

        public MapBoolBoolEntry Clone() {
          return new MapBoolBoolEntry(this);
        }

        public void Freeze() {
          if (IsFrozen) {
            return;
          }
          _frozen = true;
        }

        public const int KeyFieldNumber = 1;
        private bool key_;
        public bool Key {
          get { return key_; }
          set {
            pb::Freezable.CheckMutable(this);
            key_ = value;
          }
        }

        public const int ValueFieldNumber = 2;
        private bool value_;
        public bool Value {
          get { return value_; }
          set {
            pb::Freezable.CheckMutable(this);
            value_ = value;
          }
        }

        public override bool Equals(object other) {
          return Equals(other as MapBoolBoolEntry);
        }

        public bool Equals(MapBoolBoolEntry other) {
          if (ReferenceEquals(other, null)) {
            return false;
          }
          if (ReferenceEquals(other, this)) {
            return true;
          }
          if (Key != other.Key) return false;
          if (Value != other.Value) return false;
          return true;
        }

        public override int GetHashCode() {
          int hash = 1;
          if (Key != false) hash ^= Key.GetHashCode();
          if (Value != false) hash ^= Value.GetHashCode();
          return hash;
        }

        public void WriteTo(pb::CodedOutputStream output) {
          if (Key != false) {
            output.WriteRawTag(8);
            output.WriteBool(Key);
          }
          if (Value != false) {
            output.WriteRawTag(16);
            output.WriteBool(Value);
          }
        }

        public int CalculateSize() {
          int size = 0;
          if (Key != false) {
            size += 1 + 1;
          }
          if (Value != false) {
            size += 1 + 1;
          }
          return size;
        }

        public void MergeFrom(MapBoolBoolEntry other) {
          if (other == null) {
            return;
          }
          if (other.Key != false) {
            Key = other.Key;
          }
          if (other.Value != false) {
            Value = other.Value;
          }
        }

        public void MergeFrom(pb::CodedInputStream input) {
          uint tag;
          while (input.ReadTag(out tag)) {
            switch(tag) {
              case 0:
                throw pb::InvalidProtocolBufferException.InvalidTag();
              default:
                if (pb::WireFormat.IsEndGroupTag(tag)) {
                  return;
                }
                break;
              case 8: {
                Key = input.ReadBool();
                break;
              }
              case 16: {
                Value = input.ReadBool();
                break;
              }
            }
          }
        }

      }

      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
      public sealed partial class MapStringStringEntry : pb::IMessage<MapStringStringEntry> {
        private static readonly pb::MessageParser<MapStringStringEntry> _parser = new pb::MessageParser<MapStringStringEntry>(() => new MapStringStringEntry());
        public static pb::MessageParser<MapStringStringEntry> Parser { get { return _parser; } }

        private static readonly string[] _fieldNames = new string[] { "key", "value" };
        private static readonly uint[] _fieldTags = new uint[] { 10, 18 };
        public static pbd::MessageDescriptor Descriptor {
          get { return global::Google.Protobuf.TestProtos.TestMap.Descriptor.NestedTypes[13]; }
        }

        public pb::FieldAccess.FieldAccessorTable Fields {
          get { return global::Google.Protobuf.TestProtos.MapUnittestProto3.internal__static_protobuf_unittest_TestMap_MapStringStringEntry__FieldAccessorTable; }
        }

        private bool _frozen = false;
        public bool IsFrozen { get { return _frozen; } }

        public MapStringStringEntry() { }

        public MapStringStringEntry(MapStringStringEntry other) {
          key_ = other.key_;
          value_ = other.value_;
        }

        public MapStringStringEntry Clone() {
          return new MapStringStringEntry(this);
        }

        public void Freeze() {
          if (IsFrozen) {
            return;
          }
          _frozen = true;
        }

        public const int KeyFieldNumber = 1;
        private string key_ = "";
        public string Key {
          get { return key_; }
          set {
            pb::Freezable.CheckMutable(this);
            key_ = value ?? "";
          }
        }

        public const int ValueFieldNumber = 2;
        private string value_ = "";
        public string Value {
          get { return value_; }
          set {
            pb::Freezable.CheckMutable(this);
            value_ = value ?? "";
          }
        }

        public override bool Equals(object other) {
          return Equals(other as MapStringStringEntry);
        }

        public bool Equals(MapStringStringEntry other) {
          if (ReferenceEquals(other, null)) {
            return false;
          }
          if (ReferenceEquals(other, this)) {
            return true;
          }
          if (Key != other.Key) return false;
          if (Value != other.Value) return false;
          return true;
        }

        public override int GetHashCode() {
          int hash = 1;
          if (Key.Length != 0) hash ^= Key.GetHashCode();
          if (Value.Length != 0) hash ^= Value.GetHashCode();
          return hash;
        }

        public void WriteTo(pb::CodedOutputStream output) {
          if (Key.Length != 0) {
            output.WriteRawTag(10);
            output.WriteString(Key);
          }
          if (Value.Length != 0) {
            output.WriteRawTag(18);
            output.WriteString(Value);
          }
        }

        public int CalculateSize() {
          int size = 0;
          if (Key.Length != 0) {
            size += 1 + pb::CodedOutputStream.ComputeStringSize(Key);
          }
          if (Value.Length != 0) {
            size += 1 + pb::CodedOutputStream.ComputeStringSize(Value);
          }
          return size;
        }

        public void MergeFrom(MapStringStringEntry other) {
          if (other == null) {
            return;
          }
          if (other.Key.Length != 0) {
            Key = other.Key;
          }
          if (other.Value.Length != 0) {
            Value = other.Value;
          }
        }

        public void MergeFrom(pb::CodedInputStream input) {
          uint tag;
          while (input.ReadTag(out tag)) {
            switch(tag) {
              case 0:
                throw pb::InvalidProtocolBufferException.InvalidTag();
              default:
                if (pb::WireFormat.IsEndGroupTag(tag)) {
                  return;
                }
                break;
              case 10: {
                Key = input.ReadString();
                break;
              }
              case 18: {
                Value = input.ReadString();
                break;
              }
            }
          }
        }

      }

      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
      public sealed partial class MapInt32BytesEntry : pb::IMessage<MapInt32BytesEntry> {
        private static readonly pb::MessageParser<MapInt32BytesEntry> _parser = new pb::MessageParser<MapInt32BytesEntry>(() => new MapInt32BytesEntry());
        public static pb::MessageParser<MapInt32BytesEntry> Parser { get { return _parser; } }

        private static readonly string[] _fieldNames = new string[] { "key", "value" };
        private static readonly uint[] _fieldTags = new uint[] { 8, 18 };
        public static pbd::MessageDescriptor Descriptor {
          get { return global::Google.Protobuf.TestProtos.TestMap.Descriptor.NestedTypes[14]; }
        }

        public pb::FieldAccess.FieldAccessorTable Fields {
          get { return global::Google.Protobuf.TestProtos.MapUnittestProto3.internal__static_protobuf_unittest_TestMap_MapInt32BytesEntry__FieldAccessorTable; }
        }

        private bool _frozen = false;
        public bool IsFrozen { get { return _frozen; } }

        public MapInt32BytesEntry() { }

        public MapInt32BytesEntry(MapInt32BytesEntry other) {
          key_ = other.key_;
          value_ = other.value_;
        }

        public MapInt32BytesEntry Clone() {
          return new MapInt32BytesEntry(this);
        }

        public void Freeze() {
          if (IsFrozen) {
            return;
          }
          _frozen = true;
        }

        public const int KeyFieldNumber = 1;
        private int key_;
        public int Key {
          get { return key_; }
          set {
            pb::Freezable.CheckMutable(this);
            key_ = value;
          }
        }

        public const int ValueFieldNumber = 2;
        private pb::ByteString value_ = pb::ByteString.Empty;
        public pb::ByteString Value {
          get { return value_; }
          set {
            pb::Freezable.CheckMutable(this);
            value_ = value ?? pb::ByteString.Empty;
          }
        }

        public override bool Equals(object other) {
          return Equals(other as MapInt32BytesEntry);
        }

        public bool Equals(MapInt32BytesEntry other) {
          if (ReferenceEquals(other, null)) {
            return false;
          }
          if (ReferenceEquals(other, this)) {
            return true;
          }
          if (Key != other.Key) return false;
          if (Value != other.Value) return false;
          return true;
        }

        public override int GetHashCode() {
          int hash = 1;
          if (Key != 0) hash ^= Key.GetHashCode();
          if (Value.Length != 0) hash ^= Value.GetHashCode();
          return hash;
        }

        public void WriteTo(pb::CodedOutputStream output) {
          if (Key != 0) {
            output.WriteRawTag(8);
            output.WriteInt32(Key);
          }
          if (Value.Length != 0) {
            output.WriteRawTag(18);
            output.WriteBytes(Value);
          }
        }

        public int CalculateSize() {
          int size = 0;
          if (Key != 0) {
            size += 1 + pb::CodedOutputStream.ComputeInt32Size(Key);
          }
          if (Value.Length != 0) {
            size += 1 + pb::CodedOutputStream.ComputeBytesSize(Value);
          }
          return size;
        }

        public void MergeFrom(MapInt32BytesEntry other) {
          if (other == null) {
            return;
          }
          if (other.Key != 0) {
            Key = other.Key;
          }
          if (other.Value.Length != 0) {
            Value = other.Value;
          }
        }

        public void MergeFrom(pb::CodedInputStream input) {
          uint tag;
          while (input.ReadTag(out tag)) {
            switch(tag) {
              case 0:
                throw pb::InvalidProtocolBufferException.InvalidTag();
              default:
                if (pb::WireFormat.IsEndGroupTag(tag)) {
                  return;
                }
                break;
              case 8: {
                Key = input.ReadInt32();
                break;
              }
              case 18: {
                Value = input.ReadBytes();
                break;
              }
            }
          }
        }

      }

      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
      public sealed partial class MapInt32EnumEntry : pb::IMessage<MapInt32EnumEntry> {
        private static readonly pb::MessageParser<MapInt32EnumEntry> _parser = new pb::MessageParser<MapInt32EnumEntry>(() => new MapInt32EnumEntry());
        public static pb::MessageParser<MapInt32EnumEntry> Parser { get { return _parser; } }

        private static readonly string[] _fieldNames = new string[] { "key", "value" };
        private static readonly uint[] _fieldTags = new uint[] { 8, 16 };
        public static pbd::MessageDescriptor Descriptor {
          get { return global::Google.Protobuf.TestProtos.TestMap.Descriptor.NestedTypes[15]; }
        }

        public pb::FieldAccess.FieldAccessorTable Fields {
          get { return global::Google.Protobuf.TestProtos.MapUnittestProto3.internal__static_protobuf_unittest_TestMap_MapInt32EnumEntry__FieldAccessorTable; }
        }

        private bool _frozen = false;
        public bool IsFrozen { get { return _frozen; } }

        public MapInt32EnumEntry() { }

        public MapInt32EnumEntry(MapInt32EnumEntry other) {
          key_ = other.key_;
          value_ = other.value_;
        }

        public MapInt32EnumEntry Clone() {
          return new MapInt32EnumEntry(this);
        }

        public void Freeze() {
          if (IsFrozen) {
            return;
          }
          _frozen = true;
        }

        public const int KeyFieldNumber = 1;
        private int key_;
        public int Key {
          get { return key_; }
          set {
            pb::Freezable.CheckMutable(this);
            key_ = value;
          }
        }

        public const int ValueFieldNumber = 2;
        private global::Google.Protobuf.TestProtos.MapEnum value_ = global::Google.Protobuf.TestProtos.MapEnum.MAP_ENUM_FOO;
        public global::Google.Protobuf.TestProtos.MapEnum Value {
          get { return value_; }
          set {
            pb::Freezable.CheckMutable(this);
            value_ = value;
          }
        }

        public override bool Equals(object other) {
          return Equals(other as MapInt32EnumEntry);
        }

        public bool Equals(MapInt32EnumEntry other) {
          if (ReferenceEquals(other, null)) {
            return false;
          }
          if (ReferenceEquals(other, this)) {
            return true;
          }
          if (Key != other.Key) return false;
          if (Value != other.Value) return false;
          return true;
        }

        public override int GetHashCode() {
          int hash = 1;
          if (Key != 0) hash ^= Key.GetHashCode();
          if (Value != global::Google.Protobuf.TestProtos.MapEnum.MAP_ENUM_FOO) hash ^= Value.GetHashCode();
          return hash;
        }

        public void WriteTo(pb::CodedOutputStream output) {
          if (Key != 0) {
            output.WriteRawTag(8);
            output.WriteInt32(Key);
          }
          if (Value != global::Google.Protobuf.TestProtos.MapEnum.MAP_ENUM_FOO) {
            output.WriteRawTag(16);
            output.WriteEnum((int) Value);
          }
        }

        public int CalculateSize() {
          int size = 0;
          if (Key != 0) {
            size += 1 + pb::CodedOutputStream.ComputeInt32Size(Key);
          }
          if (Value != global::Google.Protobuf.TestProtos.MapEnum.MAP_ENUM_FOO) {
            size += 1 + pb::CodedOutputStream.ComputeEnumSize((int) Value);
          }
          return size;
        }

        public void MergeFrom(MapInt32EnumEntry other) {
          if (other == null) {
            return;
          }
          if (other.Key != 0) {
            Key = other.Key;
          }
          if (other.Value != global::Google.Protobuf.TestProtos.MapEnum.MAP_ENUM_FOO) {
            Value = other.Value;
          }
        }

        public void MergeFrom(pb::CodedInputStream input) {
          uint tag;
          while (input.ReadTag(out tag)) {
            switch(tag) {
              case 0:
                throw pb::InvalidProtocolBufferException.InvalidTag();
              default:
                if (pb::WireFormat.IsEndGroupTag(tag)) {
                  return;
                }
                break;
              case 8: {
                Key = input.ReadInt32();
                break;
              }
              case 16: {
                value_ = (global::Google.Protobuf.TestProtos.MapEnum) input.ReadEnum();
                break;
              }
            }
          }
        }

      }

      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
      public sealed partial class MapInt32ForeignMessageEntry : pb::IMessage<MapInt32ForeignMessageEntry> {
        private static readonly pb::MessageParser<MapInt32ForeignMessageEntry> _parser = new pb::MessageParser<MapInt32ForeignMessageEntry>(() => new MapInt32ForeignMessageEntry());
        public static pb::MessageParser<MapInt32ForeignMessageEntry> Parser { get { return _parser; } }

        private static readonly string[] _fieldNames = new string[] { "key", "value" };
        private static readonly uint[] _fieldTags = new uint[] { 8, 18 };
        public static pbd::MessageDescriptor Descriptor {
          get { return global::Google.Protobuf.TestProtos.TestMap.Descriptor.NestedTypes[16]; }
        }

        public pb::FieldAccess.FieldAccessorTable Fields {
          get { return global::Google.Protobuf.TestProtos.MapUnittestProto3.internal__static_protobuf_unittest_TestMap_MapInt32ForeignMessageEntry__FieldAccessorTable; }
        }

        private bool _frozen = false;
        public bool IsFrozen { get { return _frozen; } }

        public MapInt32ForeignMessageEntry() { }

        public MapInt32ForeignMessageEntry(MapInt32ForeignMessageEntry other) {
          key_ = other.key_;
          Value = other.value_ != null ? other.Value.Clone() : null;
        }

        public MapInt32ForeignMessageEntry Clone() {
          return new MapInt32ForeignMessageEntry(this);
        }

        public void Freeze() {
          if (IsFrozen) {
            return;
          }
          _frozen = true;
          if (value_ != null) Value.Freeze();
        }

        public const int KeyFieldNumber = 1;
        private int key_;
        public int Key {
          get { return key_; }
          set {
            pb::Freezable.CheckMutable(this);
            key_ = value;
          }
        }

        public const int ValueFieldNumber = 2;
        private global::Google.Protobuf.TestProtos.ForeignMessage value_;
        public global::Google.Protobuf.TestProtos.ForeignMessage Value {
          get { return value_; }
          set {
            pb::Freezable.CheckMutable(this);
            value_ = value;
          }
        }

        public override bool Equals(object other) {
          return Equals(other as MapInt32ForeignMessageEntry);
        }

        public bool Equals(MapInt32ForeignMessageEntry other) {
          if (ReferenceEquals(other, null)) {
            return false;
          }
          if (ReferenceEquals(other, this)) {
            return true;
          }
          if (Key != other.Key) return false;
          if (!object.Equals(Value, other.Value)) return false;
          return true;
        }

        public override int GetHashCode() {
          int hash = 1;
          if (Key != 0) hash ^= Key.GetHashCode();
          if (value_ != null) hash ^= Value.GetHashCode();
          return hash;
        }

        public void WriteTo(pb::CodedOutputStream output) {
          if (Key != 0) {
            output.WriteRawTag(8);
            output.WriteInt32(Key);
          }
          if (value_ != null) {
            output.WriteRawTag(18);
            output.WriteMessage(Value);
          }
        }

        public int CalculateSize() {
          int size = 0;
          if (Key != 0) {
            size += 1 + pb::CodedOutputStream.ComputeInt32Size(Key);
          }
          if (value_ != null) {
            size += 1 + pb::CodedOutputStream.ComputeMessageSize(Value);
          }
          return size;
        }

        public void MergeFrom(MapInt32ForeignMessageEntry other) {
          if (other == null) {
            return;
          }
          if (other.Key != 0) {
            Key = other.Key;
          }
          if (other.value_ != null) {
            if (value_ == null) {
              value_ = new global::Google.Protobuf.TestProtos.ForeignMessage();
            }
            Value.MergeFrom(other.Value);
          }
        }

        public void MergeFrom(pb::CodedInputStream input) {
          uint tag;
          while (input.ReadTag(out tag)) {
            switch(tag) {
              case 0:
                throw pb::InvalidProtocolBufferException.InvalidTag();
              default:
                if (pb::WireFormat.IsEndGroupTag(tag)) {
                  return;
                }
                break;
              case 8: {
                Key = input.ReadInt32();
                break;
              }
              case 18: {
                if (value_ == null) {
                  value_ = new global::Google.Protobuf.TestProtos.ForeignMessage();
                }
                input.ReadMessage(value_);
                break;
              }
            }
          }
        }

      }

    }
    #endregion

  }

  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
  public sealed partial class TestMapSubmessage : pb::IMessage<TestMapSubmessage> {
    private static readonly pb::MessageParser<TestMapSubmessage> _parser = new pb::MessageParser<TestMapSubmessage>(() => new TestMapSubmessage());
    public static pb::MessageParser<TestMapSubmessage> Parser { get { return _parser; } }

    private static readonly string[] _fieldNames = new string[] { "test_map" };
    private static readonly uint[] _fieldTags = new uint[] { 10 };
    public static pbd::MessageDescriptor Descriptor {
      get { return global::Google.Protobuf.TestProtos.MapUnittestProto3.Descriptor.MessageTypes[1]; }
    }

    public pb::FieldAccess.FieldAccessorTable Fields {
      get { return global::Google.Protobuf.TestProtos.MapUnittestProto3.internal__static_protobuf_unittest_TestMapSubmessage__FieldAccessorTable; }
    }

    private bool _frozen = false;
    public bool IsFrozen { get { return _frozen; } }

    public TestMapSubmessage() { }

    public TestMapSubmessage(TestMapSubmessage other) {
      TestMap = other.testMap_ != null ? other.TestMap.Clone() : null;
    }

    public TestMapSubmessage Clone() {
      return new TestMapSubmessage(this);
    }

    public void Freeze() {
      if (IsFrozen) {
        return;
      }
      _frozen = true;
      if (testMap_ != null) TestMap.Freeze();
    }

    public const int TestMapFieldNumber = 1;
    private global::Google.Protobuf.TestProtos.TestMap testMap_;
    public global::Google.Protobuf.TestProtos.TestMap TestMap {
      get { return testMap_; }
      set {
        pb::Freezable.CheckMutable(this);
        testMap_ = value;
      }
    }

    public override bool Equals(object other) {
      return Equals(other as TestMapSubmessage);
    }

    public bool Equals(TestMapSubmessage other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (!object.Equals(TestMap, other.TestMap)) return false;
      return true;
    }

    public override int GetHashCode() {
      int hash = 1;
      if (testMap_ != null) hash ^= TestMap.GetHashCode();
      return hash;
    }

    public void WriteTo(pb::CodedOutputStream output) {
      if (testMap_ != null) {
        output.WriteRawTag(10);
        output.WriteMessage(TestMap);
      }
    }

    public int CalculateSize() {
      int size = 0;
      if (testMap_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(TestMap);
      }
      return size;
    }

    public void MergeFrom(TestMapSubmessage other) {
      if (other == null) {
        return;
      }
      if (other.testMap_ != null) {
        if (testMap_ == null) {
          testMap_ = new global::Google.Protobuf.TestProtos.TestMap();
        }
        TestMap.MergeFrom(other.TestMap);
      }
    }

    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while (input.ReadTag(out tag)) {
        switch(tag) {
          case 0:
            throw pb::InvalidProtocolBufferException.InvalidTag();
          default:
            if (pb::WireFormat.IsEndGroupTag(tag)) {
              return;
            }
            break;
          case 10: {
            if (testMap_ == null) {
              testMap_ = new global::Google.Protobuf.TestProtos.TestMap();
            }
            input.ReadMessage(testMap_);
            break;
          }
        }
      }
    }

  }

  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
  public sealed partial class TestMessageMap : pb::IMessage<TestMessageMap> {
    private static readonly pb::MessageParser<TestMessageMap> _parser = new pb::MessageParser<TestMessageMap>(() => new TestMessageMap());
    public static pb::MessageParser<TestMessageMap> Parser { get { return _parser; } }

    private static readonly string[] _fieldNames = new string[] { "map_int32_message" };
    private static readonly uint[] _fieldTags = new uint[] { 10 };
    public static pbd::MessageDescriptor Descriptor {
      get { return global::Google.Protobuf.TestProtos.MapUnittestProto3.Descriptor.MessageTypes[2]; }
    }

    public pb::FieldAccess.FieldAccessorTable Fields {
      get { return global::Google.Protobuf.TestProtos.MapUnittestProto3.internal__static_protobuf_unittest_TestMessageMap__FieldAccessorTable; }
    }

    private bool _frozen = false;
    public bool IsFrozen { get { return _frozen; } }

    public TestMessageMap() { }

    public TestMessageMap(TestMessageMap other) {
      mapInt32Message_ = other.mapInt32Message_.Clone();
    }

    public TestMessageMap Clone() {
      return new TestMessageMap(this);
    }

    public void Freeze() {
      if (IsFrozen) {
        return;
      }
      _frozen = true;
      mapInt32Message_.Freeze();
    }

    public const int MapInt32MessageFieldNumber = 1;
    private static readonly pbc::MapField<int, global::Google.Protobuf.TestProtos.TestAllTypes>.Codec _map_mapInt32Message_codec
        = new pbc::MapField<int, global::Google.Protobuf.TestProtos.TestAllTypes>.Codec(pb::FieldCodec.ForInt32(8), pb::FieldCodec.ForMessage(18, global::Google.Protobuf.TestProtos.TestAllTypes.Parser), 10);
    private readonly pbc::MapField<int, global::Google.Protobuf.TestProtos.TestAllTypes> mapInt32Message_ = new pbc::MapField<int, global::Google.Protobuf.TestProtos.TestAllTypes>();
    public pbc::MapField<int, global::Google.Protobuf.TestProtos.TestAllTypes> MapInt32Message {
      get { return mapInt32Message_; }
    }

    public override bool Equals(object other) {
      return Equals(other as TestMessageMap);
    }

    public bool Equals(TestMessageMap other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (!MapInt32Message.Equals(other.MapInt32Message)) return false;
      return true;
    }

    public override int GetHashCode() {
      int hash = 1;
      hash ^= MapInt32Message.GetHashCode();
      return hash;
    }

    public void WriteTo(pb::CodedOutputStream output) {
      mapInt32Message_.WriteTo(output, _map_mapInt32Message_codec);
    }

    public int CalculateSize() {
      int size = 0;
      size += mapInt32Message_.CalculateSize(_map_mapInt32Message_codec);
      return size;
    }

    public void MergeFrom(TestMessageMap other) {
      if (other == null) {
        return;
      }
      mapInt32Message_.Add(other.mapInt32Message_);
    }

    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while (input.ReadTag(out tag)) {
        switch(tag) {
          case 0:
            throw pb::InvalidProtocolBufferException.InvalidTag();
          default:
            if (pb::WireFormat.IsEndGroupTag(tag)) {
              return;
            }
            break;
          case 10: {
            mapInt32Message_.AddEntriesFrom(input, _map_mapInt32Message_codec);
            break;
          }
        }
      }
    }

    #region Nested types
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
    public static partial class Types {
      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
      public sealed partial class MapInt32MessageEntry : pb::IMessage<MapInt32MessageEntry> {
        private static readonly pb::MessageParser<MapInt32MessageEntry> _parser = new pb::MessageParser<MapInt32MessageEntry>(() => new MapInt32MessageEntry());
        public static pb::MessageParser<MapInt32MessageEntry> Parser { get { return _parser; } }

        private static readonly string[] _fieldNames = new string[] { "key", "value" };
        private static readonly uint[] _fieldTags = new uint[] { 8, 18 };
        public static pbd::MessageDescriptor Descriptor {
          get { return global::Google.Protobuf.TestProtos.TestMessageMap.Descriptor.NestedTypes[0]; }
        }

        public pb::FieldAccess.FieldAccessorTable Fields {
          get { return global::Google.Protobuf.TestProtos.MapUnittestProto3.internal__static_protobuf_unittest_TestMessageMap_MapInt32MessageEntry__FieldAccessorTable; }
        }

        private bool _frozen = false;
        public bool IsFrozen { get { return _frozen; } }

        public MapInt32MessageEntry() { }

        public MapInt32MessageEntry(MapInt32MessageEntry other) {
          key_ = other.key_;
          Value = other.value_ != null ? other.Value.Clone() : null;
        }

        public MapInt32MessageEntry Clone() {
          return new MapInt32MessageEntry(this);
        }

        public void Freeze() {
          if (IsFrozen) {
            return;
          }
          _frozen = true;
          if (value_ != null) Value.Freeze();
        }

        public const int KeyFieldNumber = 1;
        private int key_;
        public int Key {
          get { return key_; }
          set {
            pb::Freezable.CheckMutable(this);
            key_ = value;
          }
        }

        public const int ValueFieldNumber = 2;
        private global::Google.Protobuf.TestProtos.TestAllTypes value_;
        public global::Google.Protobuf.TestProtos.TestAllTypes Value {
          get { return value_; }
          set {
            pb::Freezable.CheckMutable(this);
            value_ = value;
          }
        }

        public override bool Equals(object other) {
          return Equals(other as MapInt32MessageEntry);
        }

        public bool Equals(MapInt32MessageEntry other) {
          if (ReferenceEquals(other, null)) {
            return false;
          }
          if (ReferenceEquals(other, this)) {
            return true;
          }
          if (Key != other.Key) return false;
          if (!object.Equals(Value, other.Value)) return false;
          return true;
        }

        public override int GetHashCode() {
          int hash = 1;
          if (Key != 0) hash ^= Key.GetHashCode();
          if (value_ != null) hash ^= Value.GetHashCode();
          return hash;
        }

        public void WriteTo(pb::CodedOutputStream output) {
          if (Key != 0) {
            output.WriteRawTag(8);
            output.WriteInt32(Key);
          }
          if (value_ != null) {
            output.WriteRawTag(18);
            output.WriteMessage(Value);
          }
        }

        public int CalculateSize() {
          int size = 0;
          if (Key != 0) {
            size += 1 + pb::CodedOutputStream.ComputeInt32Size(Key);
          }
          if (value_ != null) {
            size += 1 + pb::CodedOutputStream.ComputeMessageSize(Value);
          }
          return size;
        }

        public void MergeFrom(MapInt32MessageEntry other) {
          if (other == null) {
            return;
          }
          if (other.Key != 0) {
            Key = other.Key;
          }
          if (other.value_ != null) {
            if (value_ == null) {
              value_ = new global::Google.Protobuf.TestProtos.TestAllTypes();
            }
            Value.MergeFrom(other.Value);
          }
        }

        public void MergeFrom(pb::CodedInputStream input) {
          uint tag;
          while (input.ReadTag(out tag)) {
            switch(tag) {
              case 0:
                throw pb::InvalidProtocolBufferException.InvalidTag();
              default:
                if (pb::WireFormat.IsEndGroupTag(tag)) {
                  return;
                }
                break;
              case 8: {
                Key = input.ReadInt32();
                break;
              }
              case 18: {
                if (value_ == null) {
                  value_ = new global::Google.Protobuf.TestProtos.TestAllTypes();
                }
                input.ReadMessage(value_);
                break;
              }
            }
          }
        }

      }

    }
    #endregion

  }

  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
  public sealed partial class TestSameTypeMap : pb::IMessage<TestSameTypeMap> {
    private static readonly pb::MessageParser<TestSameTypeMap> _parser = new pb::MessageParser<TestSameTypeMap>(() => new TestSameTypeMap());
    public static pb::MessageParser<TestSameTypeMap> Parser { get { return _parser; } }

    private static readonly string[] _fieldNames = new string[] { "map1", "map2" };
    private static readonly uint[] _fieldTags = new uint[] { 10, 18 };
    public static pbd::MessageDescriptor Descriptor {
      get { return global::Google.Protobuf.TestProtos.MapUnittestProto3.Descriptor.MessageTypes[3]; }
    }

    public pb::FieldAccess.FieldAccessorTable Fields {
      get { return global::Google.Protobuf.TestProtos.MapUnittestProto3.internal__static_protobuf_unittest_TestSameTypeMap__FieldAccessorTable; }
    }

    private bool _frozen = false;
    public bool IsFrozen { get { return _frozen; } }

    public TestSameTypeMap() { }

    public TestSameTypeMap(TestSameTypeMap other) {
      map1_ = other.map1_.Clone();
      map2_ = other.map2_.Clone();
    }

    public TestSameTypeMap Clone() {
      return new TestSameTypeMap(this);
    }

    public void Freeze() {
      if (IsFrozen) {
        return;
      }
      _frozen = true;
      map1_.Freeze();
      map2_.Freeze();
    }

    public const int Map1FieldNumber = 1;
    private static readonly pbc::MapField<int, int>.Codec _map_map1_codec
        = new pbc::MapField<int, int>.Codec(pb::FieldCodec.ForInt32(8), pb::FieldCodec.ForInt32(16), 10);
    private readonly pbc::MapField<int, int> map1_ = new pbc::MapField<int, int>();
    public pbc::MapField<int, int> Map1 {
      get { return map1_; }
    }

    public const int Map2FieldNumber = 2;
    private static readonly pbc::MapField<int, int>.Codec _map_map2_codec
        = new pbc::MapField<int, int>.Codec(pb::FieldCodec.ForInt32(8), pb::FieldCodec.ForInt32(16), 18);
    private readonly pbc::MapField<int, int> map2_ = new pbc::MapField<int, int>();
    public pbc::MapField<int, int> Map2 {
      get { return map2_; }
    }

    public override bool Equals(object other) {
      return Equals(other as TestSameTypeMap);
    }

    public bool Equals(TestSameTypeMap other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (!Map1.Equals(other.Map1)) return false;
      if (!Map2.Equals(other.Map2)) return false;
      return true;
    }

    public override int GetHashCode() {
      int hash = 1;
      hash ^= Map1.GetHashCode();
      hash ^= Map2.GetHashCode();
      return hash;
    }

    public void WriteTo(pb::CodedOutputStream output) {
      map1_.WriteTo(output, _map_map1_codec);
      map2_.WriteTo(output, _map_map2_codec);
    }

    public int CalculateSize() {
      int size = 0;
      size += map1_.CalculateSize(_map_map1_codec);
      size += map2_.CalculateSize(_map_map2_codec);
      return size;
    }

    public void MergeFrom(TestSameTypeMap other) {
      if (other == null) {
        return;
      }
      map1_.Add(other.map1_);
      map2_.Add(other.map2_);
    }

    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while (input.ReadTag(out tag)) {
        switch(tag) {
          case 0:
            throw pb::InvalidProtocolBufferException.InvalidTag();
          default:
            if (pb::WireFormat.IsEndGroupTag(tag)) {
              return;
            }
            break;
          case 10: {
            map1_.AddEntriesFrom(input, _map_map1_codec);
            break;
          }
          case 18: {
            map2_.AddEntriesFrom(input, _map_map2_codec);
            break;
          }
        }
      }
    }

    #region Nested types
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
    public static partial class Types {
      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
      public sealed partial class Map1Entry : pb::IMessage<Map1Entry> {
        private static readonly pb::MessageParser<Map1Entry> _parser = new pb::MessageParser<Map1Entry>(() => new Map1Entry());
        public static pb::MessageParser<Map1Entry> Parser { get { return _parser; } }

        private static readonly string[] _fieldNames = new string[] { "key", "value" };
        private static readonly uint[] _fieldTags = new uint[] { 8, 16 };
        public static pbd::MessageDescriptor Descriptor {
          get { return global::Google.Protobuf.TestProtos.TestSameTypeMap.Descriptor.NestedTypes[0]; }
        }

        public pb::FieldAccess.FieldAccessorTable Fields {
          get { return global::Google.Protobuf.TestProtos.MapUnittestProto3.internal__static_protobuf_unittest_TestSameTypeMap_Map1Entry__FieldAccessorTable; }
        }

        private bool _frozen = false;
        public bool IsFrozen { get { return _frozen; } }

        public Map1Entry() { }

        public Map1Entry(Map1Entry other) {
          key_ = other.key_;
          value_ = other.value_;
        }

        public Map1Entry Clone() {
          return new Map1Entry(this);
        }

        public void Freeze() {
          if (IsFrozen) {
            return;
          }
          _frozen = true;
        }

        public const int KeyFieldNumber = 1;
        private int key_;
        public int Key {
          get { return key_; }
          set {
            pb::Freezable.CheckMutable(this);
            key_ = value;
          }
        }

        public const int ValueFieldNumber = 2;
        private int value_;
        public int Value {
          get { return value_; }
          set {
            pb::Freezable.CheckMutable(this);
            value_ = value;
          }
        }

        public override bool Equals(object other) {
          return Equals(other as Map1Entry);
        }

        public bool Equals(Map1Entry other) {
          if (ReferenceEquals(other, null)) {
            return false;
          }
          if (ReferenceEquals(other, this)) {
            return true;
          }
          if (Key != other.Key) return false;
          if (Value != other.Value) return false;
          return true;
        }

        public override int GetHashCode() {
          int hash = 1;
          if (Key != 0) hash ^= Key.GetHashCode();
          if (Value != 0) hash ^= Value.GetHashCode();
          return hash;
        }

        public void WriteTo(pb::CodedOutputStream output) {
          if (Key != 0) {
            output.WriteRawTag(8);
            output.WriteInt32(Key);
          }
          if (Value != 0) {
            output.WriteRawTag(16);
            output.WriteInt32(Value);
          }
        }

        public int CalculateSize() {
          int size = 0;
          if (Key != 0) {
            size += 1 + pb::CodedOutputStream.ComputeInt32Size(Key);
          }
          if (Value != 0) {
            size += 1 + pb::CodedOutputStream.ComputeInt32Size(Value);
          }
          return size;
        }

        public void MergeFrom(Map1Entry other) {
          if (other == null) {
            return;
          }
          if (other.Key != 0) {
            Key = other.Key;
          }
          if (other.Value != 0) {
            Value = other.Value;
          }
        }

        public void MergeFrom(pb::CodedInputStream input) {
          uint tag;
          while (input.ReadTag(out tag)) {
            switch(tag) {
              case 0:
                throw pb::InvalidProtocolBufferException.InvalidTag();
              default:
                if (pb::WireFormat.IsEndGroupTag(tag)) {
                  return;
                }
                break;
              case 8: {
                Key = input.ReadInt32();
                break;
              }
              case 16: {
                Value = input.ReadInt32();
                break;
              }
            }
          }
        }

      }

      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
      public sealed partial class Map2Entry : pb::IMessage<Map2Entry> {
        private static readonly pb::MessageParser<Map2Entry> _parser = new pb::MessageParser<Map2Entry>(() => new Map2Entry());
        public static pb::MessageParser<Map2Entry> Parser { get { return _parser; } }

        private static readonly string[] _fieldNames = new string[] { "key", "value" };
        private static readonly uint[] _fieldTags = new uint[] { 8, 16 };
        public static pbd::MessageDescriptor Descriptor {
          get { return global::Google.Protobuf.TestProtos.TestSameTypeMap.Descriptor.NestedTypes[1]; }
        }

        public pb::FieldAccess.FieldAccessorTable Fields {
          get { return global::Google.Protobuf.TestProtos.MapUnittestProto3.internal__static_protobuf_unittest_TestSameTypeMap_Map2Entry__FieldAccessorTable; }
        }

        private bool _frozen = false;
        public bool IsFrozen { get { return _frozen; } }

        public Map2Entry() { }

        public Map2Entry(Map2Entry other) {
          key_ = other.key_;
          value_ = other.value_;
        }

        public Map2Entry Clone() {
          return new Map2Entry(this);
        }

        public void Freeze() {
          if (IsFrozen) {
            return;
          }
          _frozen = true;
        }

        public const int KeyFieldNumber = 1;
        private int key_;
        public int Key {
          get { return key_; }
          set {
            pb::Freezable.CheckMutable(this);
            key_ = value;
          }
        }

        public const int ValueFieldNumber = 2;
        private int value_;
        public int Value {
          get { return value_; }
          set {
            pb::Freezable.CheckMutable(this);
            value_ = value;
          }
        }

        public override bool Equals(object other) {
          return Equals(other as Map2Entry);
        }

        public bool Equals(Map2Entry other) {
          if (ReferenceEquals(other, null)) {
            return false;
          }
          if (ReferenceEquals(other, this)) {
            return true;
          }
          if (Key != other.Key) return false;
          if (Value != other.Value) return false;
          return true;
        }

        public override int GetHashCode() {
          int hash = 1;
          if (Key != 0) hash ^= Key.GetHashCode();
          if (Value != 0) hash ^= Value.GetHashCode();
          return hash;
        }

        public void WriteTo(pb::CodedOutputStream output) {
          if (Key != 0) {
            output.WriteRawTag(8);
            output.WriteInt32(Key);
          }
          if (Value != 0) {
            output.WriteRawTag(16);
            output.WriteInt32(Value);
          }
        }

        public int CalculateSize() {
          int size = 0;
          if (Key != 0) {
            size += 1 + pb::CodedOutputStream.ComputeInt32Size(Key);
          }
          if (Value != 0) {
            size += 1 + pb::CodedOutputStream.ComputeInt32Size(Value);
          }
          return size;
        }

        public void MergeFrom(Map2Entry other) {
          if (other == null) {
            return;
          }
          if (other.Key != 0) {
            Key = other.Key;
          }
          if (other.Value != 0) {
            Value = other.Value;
          }
        }

        public void MergeFrom(pb::CodedInputStream input) {
          uint tag;
          while (input.ReadTag(out tag)) {
            switch(tag) {
              case 0:
                throw pb::InvalidProtocolBufferException.InvalidTag();
              default:
                if (pb::WireFormat.IsEndGroupTag(tag)) {
                  return;
                }
                break;
              case 8: {
                Key = input.ReadInt32();
                break;
              }
              case 16: {
                Value = input.ReadInt32();
                break;
              }
            }
          }
        }

      }

    }
    #endregion

  }

  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
  public sealed partial class TestArenaMap : pb::IMessage<TestArenaMap> {
    private static readonly pb::MessageParser<TestArenaMap> _parser = new pb::MessageParser<TestArenaMap>(() => new TestArenaMap());
    public static pb::MessageParser<TestArenaMap> Parser { get { return _parser; } }

    private static readonly string[] _fieldNames = new string[] { "map_bool_bool", "map_fixed32_fixed32", "map_fixed64_fixed64", "map_int32_double", "map_int32_enum", "map_int32_float", "map_int32_foreign_message", "map_int32_int32", "map_int64_int64", "map_sfixed32_sfixed32", "map_sfixed64_sfixed64", "map_sint32_sint32", "map_sint64_sint64", "map_uint32_uint32", "map_uint64_uint64" };
    private static readonly uint[] _fieldTags = new uint[] { 106, 58, 66, 98, 114, 90, 122, 10, 18, 74, 82, 42, 50, 26, 34 };
    public static pbd::MessageDescriptor Descriptor {
      get { return global::Google.Protobuf.TestProtos.MapUnittestProto3.Descriptor.MessageTypes[4]; }
    }

    public pb::FieldAccess.FieldAccessorTable Fields {
      get { return global::Google.Protobuf.TestProtos.MapUnittestProto3.internal__static_protobuf_unittest_TestArenaMap__FieldAccessorTable; }
    }

    private bool _frozen = false;
    public bool IsFrozen { get { return _frozen; } }

    public TestArenaMap() { }

    public TestArenaMap(TestArenaMap other) {
      mapInt32Int32_ = other.mapInt32Int32_.Clone();
      mapInt64Int64_ = other.mapInt64Int64_.Clone();
      mapUint32Uint32_ = other.mapUint32Uint32_.Clone();
      mapUint64Uint64_ = other.mapUint64Uint64_.Clone();
      mapSint32Sint32_ = other.mapSint32Sint32_.Clone();
      mapSint64Sint64_ = other.mapSint64Sint64_.Clone();
      mapFixed32Fixed32_ = other.mapFixed32Fixed32_.Clone();
      mapFixed64Fixed64_ = other.mapFixed64Fixed64_.Clone();
      mapSfixed32Sfixed32_ = other.mapSfixed32Sfixed32_.Clone();
      mapSfixed64Sfixed64_ = other.mapSfixed64Sfixed64_.Clone();
      mapInt32Float_ = other.mapInt32Float_.Clone();
      mapInt32Double_ = other.mapInt32Double_.Clone();
      mapBoolBool_ = other.mapBoolBool_.Clone();
      mapInt32Enum_ = other.mapInt32Enum_.Clone();
      mapInt32ForeignMessage_ = other.mapInt32ForeignMessage_.Clone();
    }

    public TestArenaMap Clone() {
      return new TestArenaMap(this);
    }

    public void Freeze() {
      if (IsFrozen) {
        return;
      }
      _frozen = true;
      mapInt32Int32_.Freeze();
      mapInt64Int64_.Freeze();
      mapUint32Uint32_.Freeze();
      mapUint64Uint64_.Freeze();
      mapSint32Sint32_.Freeze();
      mapSint64Sint64_.Freeze();
      mapFixed32Fixed32_.Freeze();
      mapFixed64Fixed64_.Freeze();
      mapSfixed32Sfixed32_.Freeze();
      mapSfixed64Sfixed64_.Freeze();
      mapInt32Float_.Freeze();
      mapInt32Double_.Freeze();
      mapBoolBool_.Freeze();
      mapInt32Enum_.Freeze();
      mapInt32ForeignMessage_.Freeze();
    }

    public const int MapInt32Int32FieldNumber = 1;
    private static readonly pbc::MapField<int, int>.Codec _map_mapInt32Int32_codec
        = new pbc::MapField<int, int>.Codec(pb::FieldCodec.ForInt32(8), pb::FieldCodec.ForInt32(16), 10);
    private readonly pbc::MapField<int, int> mapInt32Int32_ = new pbc::MapField<int, int>();
    public pbc::MapField<int, int> MapInt32Int32 {
      get { return mapInt32Int32_; }
    }

    public const int MapInt64Int64FieldNumber = 2;
    private static readonly pbc::MapField<long, long>.Codec _map_mapInt64Int64_codec
        = new pbc::MapField<long, long>.Codec(pb::FieldCodec.ForInt64(8), pb::FieldCodec.ForInt64(16), 18);
    private readonly pbc::MapField<long, long> mapInt64Int64_ = new pbc::MapField<long, long>();
    public pbc::MapField<long, long> MapInt64Int64 {
      get { return mapInt64Int64_; }
    }

    public const int MapUint32Uint32FieldNumber = 3;
    private static readonly pbc::MapField<uint, uint>.Codec _map_mapUint32Uint32_codec
        = new pbc::MapField<uint, uint>.Codec(pb::FieldCodec.ForUInt32(8), pb::FieldCodec.ForUInt32(16), 26);
    private readonly pbc::MapField<uint, uint> mapUint32Uint32_ = new pbc::MapField<uint, uint>();
    public pbc::MapField<uint, uint> MapUint32Uint32 {
      get { return mapUint32Uint32_; }
    }

    public const int MapUint64Uint64FieldNumber = 4;
    private static readonly pbc::MapField<ulong, ulong>.Codec _map_mapUint64Uint64_codec
        = new pbc::MapField<ulong, ulong>.Codec(pb::FieldCodec.ForUInt64(8), pb::FieldCodec.ForUInt64(16), 34);
    private readonly pbc::MapField<ulong, ulong> mapUint64Uint64_ = new pbc::MapField<ulong, ulong>();
    public pbc::MapField<ulong, ulong> MapUint64Uint64 {
      get { return mapUint64Uint64_; }
    }

    public const int MapSint32Sint32FieldNumber = 5;
    private static readonly pbc::MapField<int, int>.Codec _map_mapSint32Sint32_codec
        = new pbc::MapField<int, int>.Codec(pb::FieldCodec.ForSInt32(8), pb::FieldCodec.ForSInt32(16), 42);
    private readonly pbc::MapField<int, int> mapSint32Sint32_ = new pbc::MapField<int, int>();
    public pbc::MapField<int, int> MapSint32Sint32 {
      get { return mapSint32Sint32_; }
    }

    public const int MapSint64Sint64FieldNumber = 6;
    private static readonly pbc::MapField<long, long>.Codec _map_mapSint64Sint64_codec
        = new pbc::MapField<long, long>.Codec(pb::FieldCodec.ForSInt64(8), pb::FieldCodec.ForSInt64(16), 50);
    private readonly pbc::MapField<long, long> mapSint64Sint64_ = new pbc::MapField<long, long>();
    public pbc::MapField<long, long> MapSint64Sint64 {
      get { return mapSint64Sint64_; }
    }

    public const int MapFixed32Fixed32FieldNumber = 7;
    private static readonly pbc::MapField<uint, uint>.Codec _map_mapFixed32Fixed32_codec
        = new pbc::MapField<uint, uint>.Codec(pb::FieldCodec.ForFixed32(13), pb::FieldCodec.ForFixed32(21), 58);
    private readonly pbc::MapField<uint, uint> mapFixed32Fixed32_ = new pbc::MapField<uint, uint>();
    public pbc::MapField<uint, uint> MapFixed32Fixed32 {
      get { return mapFixed32Fixed32_; }
    }

    public const int MapFixed64Fixed64FieldNumber = 8;
    private static readonly pbc::MapField<ulong, ulong>.Codec _map_mapFixed64Fixed64_codec
        = new pbc::MapField<ulong, ulong>.Codec(pb::FieldCodec.ForFixed64(9), pb::FieldCodec.ForFixed64(17), 66);
    private readonly pbc::MapField<ulong, ulong> mapFixed64Fixed64_ = new pbc::MapField<ulong, ulong>();
    public pbc::MapField<ulong, ulong> MapFixed64Fixed64 {
      get { return mapFixed64Fixed64_; }
    }

    public const int MapSfixed32Sfixed32FieldNumber = 9;
    private static readonly pbc::MapField<int, int>.Codec _map_mapSfixed32Sfixed32_codec
        = new pbc::MapField<int, int>.Codec(pb::FieldCodec.ForSFixed32(13), pb::FieldCodec.ForSFixed32(21), 74);
    private readonly pbc::MapField<int, int> mapSfixed32Sfixed32_ = new pbc::MapField<int, int>();
    public pbc::MapField<int, int> MapSfixed32Sfixed32 {
      get { return mapSfixed32Sfixed32_; }
    }

    public const int MapSfixed64Sfixed64FieldNumber = 10;
    private static readonly pbc::MapField<long, long>.Codec _map_mapSfixed64Sfixed64_codec
        = new pbc::MapField<long, long>.Codec(pb::FieldCodec.ForSFixed64(9), pb::FieldCodec.ForSFixed64(17), 82);
    private readonly pbc::MapField<long, long> mapSfixed64Sfixed64_ = new pbc::MapField<long, long>();
    public pbc::MapField<long, long> MapSfixed64Sfixed64 {
      get { return mapSfixed64Sfixed64_; }
    }

    public const int MapInt32FloatFieldNumber = 11;
    private static readonly pbc::MapField<int, float>.Codec _map_mapInt32Float_codec
        = new pbc::MapField<int, float>.Codec(pb::FieldCodec.ForInt32(8), pb::FieldCodec.ForFloat(21), 90);
    private readonly pbc::MapField<int, float> mapInt32Float_ = new pbc::MapField<int, float>();
    public pbc::MapField<int, float> MapInt32Float {
      get { return mapInt32Float_; }
    }

    public const int MapInt32DoubleFieldNumber = 12;
    private static readonly pbc::MapField<int, double>.Codec _map_mapInt32Double_codec
        = new pbc::MapField<int, double>.Codec(pb::FieldCodec.ForInt32(8), pb::FieldCodec.ForDouble(17), 98);
    private readonly pbc::MapField<int, double> mapInt32Double_ = new pbc::MapField<int, double>();
    public pbc::MapField<int, double> MapInt32Double {
      get { return mapInt32Double_; }
    }

    public const int MapBoolBoolFieldNumber = 13;
    private static readonly pbc::MapField<bool, bool>.Codec _map_mapBoolBool_codec
        = new pbc::MapField<bool, bool>.Codec(pb::FieldCodec.ForBool(8), pb::FieldCodec.ForBool(16), 106);
    private readonly pbc::MapField<bool, bool> mapBoolBool_ = new pbc::MapField<bool, bool>();
    public pbc::MapField<bool, bool> MapBoolBool {
      get { return mapBoolBool_; }
    }

    public const int MapInt32EnumFieldNumber = 14;
    private static readonly pbc::MapField<int, global::Google.Protobuf.TestProtos.MapEnum>.Codec _map_mapInt32Enum_codec
        = new pbc::MapField<int, global::Google.Protobuf.TestProtos.MapEnum>.Codec(pb::FieldCodec.ForInt32(8), pb::FieldCodec.ForEnum(16, x => (int) x, x => (global::Google.Protobuf.TestProtos.MapEnum) x), 114);
    private readonly pbc::MapField<int, global::Google.Protobuf.TestProtos.MapEnum> mapInt32Enum_ = new pbc::MapField<int, global::Google.Protobuf.TestProtos.MapEnum>();
    public pbc::MapField<int, global::Google.Protobuf.TestProtos.MapEnum> MapInt32Enum {
      get { return mapInt32Enum_; }
    }

    public const int MapInt32ForeignMessageFieldNumber = 15;
    private static readonly pbc::MapField<int, global::Google.Protobuf.TestProtos.ForeignMessage>.Codec _map_mapInt32ForeignMessage_codec
        = new pbc::MapField<int, global::Google.Protobuf.TestProtos.ForeignMessage>.Codec(pb::FieldCodec.ForInt32(8), pb::FieldCodec.ForMessage(18, global::Google.Protobuf.TestProtos.ForeignMessage.Parser), 122);
    private readonly pbc::MapField<int, global::Google.Protobuf.TestProtos.ForeignMessage> mapInt32ForeignMessage_ = new pbc::MapField<int, global::Google.Protobuf.TestProtos.ForeignMessage>();
    public pbc::MapField<int, global::Google.Protobuf.TestProtos.ForeignMessage> MapInt32ForeignMessage {
      get { return mapInt32ForeignMessage_; }
    }

    public override bool Equals(object other) {
      return Equals(other as TestArenaMap);
    }

    public bool Equals(TestArenaMap other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (!MapInt32Int32.Equals(other.MapInt32Int32)) return false;
      if (!MapInt64Int64.Equals(other.MapInt64Int64)) return false;
      if (!MapUint32Uint32.Equals(other.MapUint32Uint32)) return false;
      if (!MapUint64Uint64.Equals(other.MapUint64Uint64)) return false;
      if (!MapSint32Sint32.Equals(other.MapSint32Sint32)) return false;
      if (!MapSint64Sint64.Equals(other.MapSint64Sint64)) return false;
      if (!MapFixed32Fixed32.Equals(other.MapFixed32Fixed32)) return false;
      if (!MapFixed64Fixed64.Equals(other.MapFixed64Fixed64)) return false;
      if (!MapSfixed32Sfixed32.Equals(other.MapSfixed32Sfixed32)) return false;
      if (!MapSfixed64Sfixed64.Equals(other.MapSfixed64Sfixed64)) return false;
      if (!MapInt32Float.Equals(other.MapInt32Float)) return false;
      if (!MapInt32Double.Equals(other.MapInt32Double)) return false;
      if (!MapBoolBool.Equals(other.MapBoolBool)) return false;
      if (!MapInt32Enum.Equals(other.MapInt32Enum)) return false;
      if (!MapInt32ForeignMessage.Equals(other.MapInt32ForeignMessage)) return false;
      return true;
    }

    public override int GetHashCode() {
      int hash = 1;
      hash ^= MapInt32Int32.GetHashCode();
      hash ^= MapInt64Int64.GetHashCode();
      hash ^= MapUint32Uint32.GetHashCode();
      hash ^= MapUint64Uint64.GetHashCode();
      hash ^= MapSint32Sint32.GetHashCode();
      hash ^= MapSint64Sint64.GetHashCode();
      hash ^= MapFixed32Fixed32.GetHashCode();
      hash ^= MapFixed64Fixed64.GetHashCode();
      hash ^= MapSfixed32Sfixed32.GetHashCode();
      hash ^= MapSfixed64Sfixed64.GetHashCode();
      hash ^= MapInt32Float.GetHashCode();
      hash ^= MapInt32Double.GetHashCode();
      hash ^= MapBoolBool.GetHashCode();
      hash ^= MapInt32Enum.GetHashCode();
      hash ^= MapInt32ForeignMessage.GetHashCode();
      return hash;
    }

    public void WriteTo(pb::CodedOutputStream output) {
      mapInt32Int32_.WriteTo(output, _map_mapInt32Int32_codec);
      mapInt64Int64_.WriteTo(output, _map_mapInt64Int64_codec);
      mapUint32Uint32_.WriteTo(output, _map_mapUint32Uint32_codec);
      mapUint64Uint64_.WriteTo(output, _map_mapUint64Uint64_codec);
      mapSint32Sint32_.WriteTo(output, _map_mapSint32Sint32_codec);
      mapSint64Sint64_.WriteTo(output, _map_mapSint64Sint64_codec);
      mapFixed32Fixed32_.WriteTo(output, _map_mapFixed32Fixed32_codec);
      mapFixed64Fixed64_.WriteTo(output, _map_mapFixed64Fixed64_codec);
      mapSfixed32Sfixed32_.WriteTo(output, _map_mapSfixed32Sfixed32_codec);
      mapSfixed64Sfixed64_.WriteTo(output, _map_mapSfixed64Sfixed64_codec);
      mapInt32Float_.WriteTo(output, _map_mapInt32Float_codec);
      mapInt32Double_.WriteTo(output, _map_mapInt32Double_codec);
      mapBoolBool_.WriteTo(output, _map_mapBoolBool_codec);
      mapInt32Enum_.WriteTo(output, _map_mapInt32Enum_codec);
      mapInt32ForeignMessage_.WriteTo(output, _map_mapInt32ForeignMessage_codec);
    }

    public int CalculateSize() {
      int size = 0;
      size += mapInt32Int32_.CalculateSize(_map_mapInt32Int32_codec);
      size += mapInt64Int64_.CalculateSize(_map_mapInt64Int64_codec);
      size += mapUint32Uint32_.CalculateSize(_map_mapUint32Uint32_codec);
      size += mapUint64Uint64_.CalculateSize(_map_mapUint64Uint64_codec);
      size += mapSint32Sint32_.CalculateSize(_map_mapSint32Sint32_codec);
      size += mapSint64Sint64_.CalculateSize(_map_mapSint64Sint64_codec);
      size += mapFixed32Fixed32_.CalculateSize(_map_mapFixed32Fixed32_codec);
      size += mapFixed64Fixed64_.CalculateSize(_map_mapFixed64Fixed64_codec);
      size += mapSfixed32Sfixed32_.CalculateSize(_map_mapSfixed32Sfixed32_codec);
      size += mapSfixed64Sfixed64_.CalculateSize(_map_mapSfixed64Sfixed64_codec);
      size += mapInt32Float_.CalculateSize(_map_mapInt32Float_codec);
      size += mapInt32Double_.CalculateSize(_map_mapInt32Double_codec);
      size += mapBoolBool_.CalculateSize(_map_mapBoolBool_codec);
      size += mapInt32Enum_.CalculateSize(_map_mapInt32Enum_codec);
      size += mapInt32ForeignMessage_.CalculateSize(_map_mapInt32ForeignMessage_codec);
      return size;
    }

    public void MergeFrom(TestArenaMap other) {
      if (other == null) {
        return;
      }
      mapInt32Int32_.Add(other.mapInt32Int32_);
      mapInt64Int64_.Add(other.mapInt64Int64_);
      mapUint32Uint32_.Add(other.mapUint32Uint32_);
      mapUint64Uint64_.Add(other.mapUint64Uint64_);
      mapSint32Sint32_.Add(other.mapSint32Sint32_);
      mapSint64Sint64_.Add(other.mapSint64Sint64_);
      mapFixed32Fixed32_.Add(other.mapFixed32Fixed32_);
      mapFixed64Fixed64_.Add(other.mapFixed64Fixed64_);
      mapSfixed32Sfixed32_.Add(other.mapSfixed32Sfixed32_);
      mapSfixed64Sfixed64_.Add(other.mapSfixed64Sfixed64_);
      mapInt32Float_.Add(other.mapInt32Float_);
      mapInt32Double_.Add(other.mapInt32Double_);
      mapBoolBool_.Add(other.mapBoolBool_);
      mapInt32Enum_.Add(other.mapInt32Enum_);
      mapInt32ForeignMessage_.Add(other.mapInt32ForeignMessage_);
    }

    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while (input.ReadTag(out tag)) {
        switch(tag) {
          case 0:
            throw pb::InvalidProtocolBufferException.InvalidTag();
          default:
            if (pb::WireFormat.IsEndGroupTag(tag)) {
              return;
            }
            break;
          case 10: {
            mapInt32Int32_.AddEntriesFrom(input, _map_mapInt32Int32_codec);
            break;
          }
          case 18: {
            mapInt64Int64_.AddEntriesFrom(input, _map_mapInt64Int64_codec);
            break;
          }
          case 26: {
            mapUint32Uint32_.AddEntriesFrom(input, _map_mapUint32Uint32_codec);
            break;
          }
          case 34: {
            mapUint64Uint64_.AddEntriesFrom(input, _map_mapUint64Uint64_codec);
            break;
          }
          case 42: {
            mapSint32Sint32_.AddEntriesFrom(input, _map_mapSint32Sint32_codec);
            break;
          }
          case 50: {
            mapSint64Sint64_.AddEntriesFrom(input, _map_mapSint64Sint64_codec);
            break;
          }
          case 58: {
            mapFixed32Fixed32_.AddEntriesFrom(input, _map_mapFixed32Fixed32_codec);
            break;
          }
          case 66: {
            mapFixed64Fixed64_.AddEntriesFrom(input, _map_mapFixed64Fixed64_codec);
            break;
          }
          case 74: {
            mapSfixed32Sfixed32_.AddEntriesFrom(input, _map_mapSfixed32Sfixed32_codec);
            break;
          }
          case 82: {
            mapSfixed64Sfixed64_.AddEntriesFrom(input, _map_mapSfixed64Sfixed64_codec);
            break;
          }
          case 90: {
            mapInt32Float_.AddEntriesFrom(input, _map_mapInt32Float_codec);
            break;
          }
          case 98: {
            mapInt32Double_.AddEntriesFrom(input, _map_mapInt32Double_codec);
            break;
          }
          case 106: {
            mapBoolBool_.AddEntriesFrom(input, _map_mapBoolBool_codec);
            break;
          }
          case 114: {
            mapInt32Enum_.AddEntriesFrom(input, _map_mapInt32Enum_codec);
            break;
          }
          case 122: {
            mapInt32ForeignMessage_.AddEntriesFrom(input, _map_mapInt32ForeignMessage_codec);
            break;
          }
        }
      }
    }

    #region Nested types
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
    public static partial class Types {
      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
      public sealed partial class MapInt32Int32Entry : pb::IMessage<MapInt32Int32Entry> {
        private static readonly pb::MessageParser<MapInt32Int32Entry> _parser = new pb::MessageParser<MapInt32Int32Entry>(() => new MapInt32Int32Entry());
        public static pb::MessageParser<MapInt32Int32Entry> Parser { get { return _parser; } }

        private static readonly string[] _fieldNames = new string[] { "key", "value" };
        private static readonly uint[] _fieldTags = new uint[] { 8, 16 };
        public static pbd::MessageDescriptor Descriptor {
          get { return global::Google.Protobuf.TestProtos.TestArenaMap.Descriptor.NestedTypes[0]; }
        }

        public pb::FieldAccess.FieldAccessorTable Fields {
          get { return global::Google.Protobuf.TestProtos.MapUnittestProto3.internal__static_protobuf_unittest_TestArenaMap_MapInt32Int32Entry__FieldAccessorTable; }
        }

        private bool _frozen = false;
        public bool IsFrozen { get { return _frozen; } }

        public MapInt32Int32Entry() { }

        public MapInt32Int32Entry(MapInt32Int32Entry other) {
          key_ = other.key_;
          value_ = other.value_;
        }

        public MapInt32Int32Entry Clone() {
          return new MapInt32Int32Entry(this);
        }

        public void Freeze() {
          if (IsFrozen) {
            return;
          }
          _frozen = true;
        }

        public const int KeyFieldNumber = 1;
        private int key_;
        public int Key {
          get { return key_; }
          set {
            pb::Freezable.CheckMutable(this);
            key_ = value;
          }
        }

        public const int ValueFieldNumber = 2;
        private int value_;
        public int Value {
          get { return value_; }
          set {
            pb::Freezable.CheckMutable(this);
            value_ = value;
          }
        }

        public override bool Equals(object other) {
          return Equals(other as MapInt32Int32Entry);
        }

        public bool Equals(MapInt32Int32Entry other) {
          if (ReferenceEquals(other, null)) {
            return false;
          }
          if (ReferenceEquals(other, this)) {
            return true;
          }
          if (Key != other.Key) return false;
          if (Value != other.Value) return false;
          return true;
        }

        public override int GetHashCode() {
          int hash = 1;
          if (Key != 0) hash ^= Key.GetHashCode();
          if (Value != 0) hash ^= Value.GetHashCode();
          return hash;
        }

        public void WriteTo(pb::CodedOutputStream output) {
          if (Key != 0) {
            output.WriteRawTag(8);
            output.WriteInt32(Key);
          }
          if (Value != 0) {
            output.WriteRawTag(16);
            output.WriteInt32(Value);
          }
        }

        public int CalculateSize() {
          int size = 0;
          if (Key != 0) {
            size += 1 + pb::CodedOutputStream.ComputeInt32Size(Key);
          }
          if (Value != 0) {
            size += 1 + pb::CodedOutputStream.ComputeInt32Size(Value);
          }
          return size;
        }

        public void MergeFrom(MapInt32Int32Entry other) {
          if (other == null) {
            return;
          }
          if (other.Key != 0) {
            Key = other.Key;
          }
          if (other.Value != 0) {
            Value = other.Value;
          }
        }

        public void MergeFrom(pb::CodedInputStream input) {
          uint tag;
          while (input.ReadTag(out tag)) {
            switch(tag) {
              case 0:
                throw pb::InvalidProtocolBufferException.InvalidTag();
              default:
                if (pb::WireFormat.IsEndGroupTag(tag)) {
                  return;
                }
                break;
              case 8: {
                Key = input.ReadInt32();
                break;
              }
              case 16: {
                Value = input.ReadInt32();
                break;
              }
            }
          }
        }

      }

      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
      public sealed partial class MapInt64Int64Entry : pb::IMessage<MapInt64Int64Entry> {
        private static readonly pb::MessageParser<MapInt64Int64Entry> _parser = new pb::MessageParser<MapInt64Int64Entry>(() => new MapInt64Int64Entry());
        public static pb::MessageParser<MapInt64Int64Entry> Parser { get { return _parser; } }

        private static readonly string[] _fieldNames = new string[] { "key", "value" };
        private static readonly uint[] _fieldTags = new uint[] { 8, 16 };
        public static pbd::MessageDescriptor Descriptor {
          get { return global::Google.Protobuf.TestProtos.TestArenaMap.Descriptor.NestedTypes[1]; }
        }

        public pb::FieldAccess.FieldAccessorTable Fields {
          get { return global::Google.Protobuf.TestProtos.MapUnittestProto3.internal__static_protobuf_unittest_TestArenaMap_MapInt64Int64Entry__FieldAccessorTable; }
        }

        private bool _frozen = false;
        public bool IsFrozen { get { return _frozen; } }

        public MapInt64Int64Entry() { }

        public MapInt64Int64Entry(MapInt64Int64Entry other) {
          key_ = other.key_;
          value_ = other.value_;
        }

        public MapInt64Int64Entry Clone() {
          return new MapInt64Int64Entry(this);
        }

        public void Freeze() {
          if (IsFrozen) {
            return;
          }
          _frozen = true;
        }

        public const int KeyFieldNumber = 1;
        private long key_;
        public long Key {
          get { return key_; }
          set {
            pb::Freezable.CheckMutable(this);
            key_ = value;
          }
        }

        public const int ValueFieldNumber = 2;
        private long value_;
        public long Value {
          get { return value_; }
          set {
            pb::Freezable.CheckMutable(this);
            value_ = value;
          }
        }

        public override bool Equals(object other) {
          return Equals(other as MapInt64Int64Entry);
        }

        public bool Equals(MapInt64Int64Entry other) {
          if (ReferenceEquals(other, null)) {
            return false;
          }
          if (ReferenceEquals(other, this)) {
            return true;
          }
          if (Key != other.Key) return false;
          if (Value != other.Value) return false;
          return true;
        }

        public override int GetHashCode() {
          int hash = 1;
          if (Key != 0L) hash ^= Key.GetHashCode();
          if (Value != 0L) hash ^= Value.GetHashCode();
          return hash;
        }

        public void WriteTo(pb::CodedOutputStream output) {
          if (Key != 0L) {
            output.WriteRawTag(8);
            output.WriteInt64(Key);
          }
          if (Value != 0L) {
            output.WriteRawTag(16);
            output.WriteInt64(Value);
          }
        }

        public int CalculateSize() {
          int size = 0;
          if (Key != 0L) {
            size += 1 + pb::CodedOutputStream.ComputeInt64Size(Key);
          }
          if (Value != 0L) {
            size += 1 + pb::CodedOutputStream.ComputeInt64Size(Value);
          }
          return size;
        }

        public void MergeFrom(MapInt64Int64Entry other) {
          if (other == null) {
            return;
          }
          if (other.Key != 0L) {
            Key = other.Key;
          }
          if (other.Value != 0L) {
            Value = other.Value;
          }
        }

        public void MergeFrom(pb::CodedInputStream input) {
          uint tag;
          while (input.ReadTag(out tag)) {
            switch(tag) {
              case 0:
                throw pb::InvalidProtocolBufferException.InvalidTag();
              default:
                if (pb::WireFormat.IsEndGroupTag(tag)) {
                  return;
                }
                break;
              case 8: {
                Key = input.ReadInt64();
                break;
              }
              case 16: {
                Value = input.ReadInt64();
                break;
              }
            }
          }
        }

      }

      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
      public sealed partial class MapUint32Uint32Entry : pb::IMessage<MapUint32Uint32Entry> {
        private static readonly pb::MessageParser<MapUint32Uint32Entry> _parser = new pb::MessageParser<MapUint32Uint32Entry>(() => new MapUint32Uint32Entry());
        public static pb::MessageParser<MapUint32Uint32Entry> Parser { get { return _parser; } }

        private static readonly string[] _fieldNames = new string[] { "key", "value" };
        private static readonly uint[] _fieldTags = new uint[] { 8, 16 };
        public static pbd::MessageDescriptor Descriptor {
          get { return global::Google.Protobuf.TestProtos.TestArenaMap.Descriptor.NestedTypes[2]; }
        }

        public pb::FieldAccess.FieldAccessorTable Fields {
          get { return global::Google.Protobuf.TestProtos.MapUnittestProto3.internal__static_protobuf_unittest_TestArenaMap_MapUint32Uint32Entry__FieldAccessorTable; }
        }

        private bool _frozen = false;
        public bool IsFrozen { get { return _frozen; } }

        public MapUint32Uint32Entry() { }

        public MapUint32Uint32Entry(MapUint32Uint32Entry other) {
          key_ = other.key_;
          value_ = other.value_;
        }

        public MapUint32Uint32Entry Clone() {
          return new MapUint32Uint32Entry(this);
        }

        public void Freeze() {
          if (IsFrozen) {
            return;
          }
          _frozen = true;
        }

        public const int KeyFieldNumber = 1;
        private uint key_;
        public uint Key {
          get { return key_; }
          set {
            pb::Freezable.CheckMutable(this);
            key_ = value;
          }
        }

        public const int ValueFieldNumber = 2;
        private uint value_;
        public uint Value {
          get { return value_; }
          set {
            pb::Freezable.CheckMutable(this);
            value_ = value;
          }
        }

        public override bool Equals(object other) {
          return Equals(other as MapUint32Uint32Entry);
        }

        public bool Equals(MapUint32Uint32Entry other) {
          if (ReferenceEquals(other, null)) {
            return false;
          }
          if (ReferenceEquals(other, this)) {
            return true;
          }
          if (Key != other.Key) return false;
          if (Value != other.Value) return false;
          return true;
        }

        public override int GetHashCode() {
          int hash = 1;
          if (Key != 0) hash ^= Key.GetHashCode();
          if (Value != 0) hash ^= Value.GetHashCode();
          return hash;
        }

        public void WriteTo(pb::CodedOutputStream output) {
          if (Key != 0) {
            output.WriteRawTag(8);
            output.WriteUInt32(Key);
          }
          if (Value != 0) {
            output.WriteRawTag(16);
            output.WriteUInt32(Value);
          }
        }

        public int CalculateSize() {
          int size = 0;
          if (Key != 0) {
            size += 1 + pb::CodedOutputStream.ComputeUInt32Size(Key);
          }
          if (Value != 0) {
            size += 1 + pb::CodedOutputStream.ComputeUInt32Size(Value);
          }
          return size;
        }

        public void MergeFrom(MapUint32Uint32Entry other) {
          if (other == null) {
            return;
          }
          if (other.Key != 0) {
            Key = other.Key;
          }
          if (other.Value != 0) {
            Value = other.Value;
          }
        }

        public void MergeFrom(pb::CodedInputStream input) {
          uint tag;
          while (input.ReadTag(out tag)) {
            switch(tag) {
              case 0:
                throw pb::InvalidProtocolBufferException.InvalidTag();
              default:
                if (pb::WireFormat.IsEndGroupTag(tag)) {
                  return;
                }
                break;
              case 8: {
                Key = input.ReadUInt32();
                break;
              }
              case 16: {
                Value = input.ReadUInt32();
                break;
              }
            }
          }
        }

      }

      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
      public sealed partial class MapUint64Uint64Entry : pb::IMessage<MapUint64Uint64Entry> {
        private static readonly pb::MessageParser<MapUint64Uint64Entry> _parser = new pb::MessageParser<MapUint64Uint64Entry>(() => new MapUint64Uint64Entry());
        public static pb::MessageParser<MapUint64Uint64Entry> Parser { get { return _parser; } }

        private static readonly string[] _fieldNames = new string[] { "key", "value" };
        private static readonly uint[] _fieldTags = new uint[] { 8, 16 };
        public static pbd::MessageDescriptor Descriptor {
          get { return global::Google.Protobuf.TestProtos.TestArenaMap.Descriptor.NestedTypes[3]; }
        }

        public pb::FieldAccess.FieldAccessorTable Fields {
          get { return global::Google.Protobuf.TestProtos.MapUnittestProto3.internal__static_protobuf_unittest_TestArenaMap_MapUint64Uint64Entry__FieldAccessorTable; }
        }

        private bool _frozen = false;
        public bool IsFrozen { get { return _frozen; } }

        public MapUint64Uint64Entry() { }

        public MapUint64Uint64Entry(MapUint64Uint64Entry other) {
          key_ = other.key_;
          value_ = other.value_;
        }

        public MapUint64Uint64Entry Clone() {
          return new MapUint64Uint64Entry(this);
        }

        public void Freeze() {
          if (IsFrozen) {
            return;
          }
          _frozen = true;
        }

        public const int KeyFieldNumber = 1;
        private ulong key_;
        public ulong Key {
          get { return key_; }
          set {
            pb::Freezable.CheckMutable(this);
            key_ = value;
          }
        }

        public const int ValueFieldNumber = 2;
        private ulong value_;
        public ulong Value {
          get { return value_; }
          set {
            pb::Freezable.CheckMutable(this);
            value_ = value;
          }
        }

        public override bool Equals(object other) {
          return Equals(other as MapUint64Uint64Entry);
        }

        public bool Equals(MapUint64Uint64Entry other) {
          if (ReferenceEquals(other, null)) {
            return false;
          }
          if (ReferenceEquals(other, this)) {
            return true;
          }
          if (Key != other.Key) return false;
          if (Value != other.Value) return false;
          return true;
        }

        public override int GetHashCode() {
          int hash = 1;
          if (Key != 0UL) hash ^= Key.GetHashCode();
          if (Value != 0UL) hash ^= Value.GetHashCode();
          return hash;
        }

        public void WriteTo(pb::CodedOutputStream output) {
          if (Key != 0UL) {
            output.WriteRawTag(8);
            output.WriteUInt64(Key);
          }
          if (Value != 0UL) {
            output.WriteRawTag(16);
            output.WriteUInt64(Value);
          }
        }

        public int CalculateSize() {
          int size = 0;
          if (Key != 0UL) {
            size += 1 + pb::CodedOutputStream.ComputeUInt64Size(Key);
          }
          if (Value != 0UL) {
            size += 1 + pb::CodedOutputStream.ComputeUInt64Size(Value);
          }
          return size;
        }

        public void MergeFrom(MapUint64Uint64Entry other) {
          if (other == null) {
            return;
          }
          if (other.Key != 0UL) {
            Key = other.Key;
          }
          if (other.Value != 0UL) {
            Value = other.Value;
          }
        }

        public void MergeFrom(pb::CodedInputStream input) {
          uint tag;
          while (input.ReadTag(out tag)) {
            switch(tag) {
              case 0:
                throw pb::InvalidProtocolBufferException.InvalidTag();
              default:
                if (pb::WireFormat.IsEndGroupTag(tag)) {
                  return;
                }
                break;
              case 8: {
                Key = input.ReadUInt64();
                break;
              }
              case 16: {
                Value = input.ReadUInt64();
                break;
              }
            }
          }
        }

      }

      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
      public sealed partial class MapSint32Sint32Entry : pb::IMessage<MapSint32Sint32Entry> {
        private static readonly pb::MessageParser<MapSint32Sint32Entry> _parser = new pb::MessageParser<MapSint32Sint32Entry>(() => new MapSint32Sint32Entry());
        public static pb::MessageParser<MapSint32Sint32Entry> Parser { get { return _parser; } }

        private static readonly string[] _fieldNames = new string[] { "key", "value" };
        private static readonly uint[] _fieldTags = new uint[] { 8, 16 };
        public static pbd::MessageDescriptor Descriptor {
          get { return global::Google.Protobuf.TestProtos.TestArenaMap.Descriptor.NestedTypes[4]; }
        }

        public pb::FieldAccess.FieldAccessorTable Fields {
          get { return global::Google.Protobuf.TestProtos.MapUnittestProto3.internal__static_protobuf_unittest_TestArenaMap_MapSint32Sint32Entry__FieldAccessorTable; }
        }

        private bool _frozen = false;
        public bool IsFrozen { get { return _frozen; } }

        public MapSint32Sint32Entry() { }

        public MapSint32Sint32Entry(MapSint32Sint32Entry other) {
          key_ = other.key_;
          value_ = other.value_;
        }

        public MapSint32Sint32Entry Clone() {
          return new MapSint32Sint32Entry(this);
        }

        public void Freeze() {
          if (IsFrozen) {
            return;
          }
          _frozen = true;
        }

        public const int KeyFieldNumber = 1;
        private int key_;
        public int Key {
          get { return key_; }
          set {
            pb::Freezable.CheckMutable(this);
            key_ = value;
          }
        }

        public const int ValueFieldNumber = 2;
        private int value_;
        public int Value {
          get { return value_; }
          set {
            pb::Freezable.CheckMutable(this);
            value_ = value;
          }
        }

        public override bool Equals(object other) {
          return Equals(other as MapSint32Sint32Entry);
        }

        public bool Equals(MapSint32Sint32Entry other) {
          if (ReferenceEquals(other, null)) {
            return false;
          }
          if (ReferenceEquals(other, this)) {
            return true;
          }
          if (Key != other.Key) return false;
          if (Value != other.Value) return false;
          return true;
        }

        public override int GetHashCode() {
          int hash = 1;
          if (Key != 0) hash ^= Key.GetHashCode();
          if (Value != 0) hash ^= Value.GetHashCode();
          return hash;
        }

        public void WriteTo(pb::CodedOutputStream output) {
          if (Key != 0) {
            output.WriteRawTag(8);
            output.WriteSInt32(Key);
          }
          if (Value != 0) {
            output.WriteRawTag(16);
            output.WriteSInt32(Value);
          }
        }

        public int CalculateSize() {
          int size = 0;
          if (Key != 0) {
            size += 1 + pb::CodedOutputStream.ComputeSInt32Size(Key);
          }
          if (Value != 0) {
            size += 1 + pb::CodedOutputStream.ComputeSInt32Size(Value);
          }
          return size;
        }

        public void MergeFrom(MapSint32Sint32Entry other) {
          if (other == null) {
            return;
          }
          if (other.Key != 0) {
            Key = other.Key;
          }
          if (other.Value != 0) {
            Value = other.Value;
          }
        }

        public void MergeFrom(pb::CodedInputStream input) {
          uint tag;
          while (input.ReadTag(out tag)) {
            switch(tag) {
              case 0:
                throw pb::InvalidProtocolBufferException.InvalidTag();
              default:
                if (pb::WireFormat.IsEndGroupTag(tag)) {
                  return;
                }
                break;
              case 8: {
                Key = input.ReadSInt32();
                break;
              }
              case 16: {
                Value = input.ReadSInt32();
                break;
              }
            }
          }
        }

      }

      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
      public sealed partial class MapSint64Sint64Entry : pb::IMessage<MapSint64Sint64Entry> {
        private static readonly pb::MessageParser<MapSint64Sint64Entry> _parser = new pb::MessageParser<MapSint64Sint64Entry>(() => new MapSint64Sint64Entry());
        public static pb::MessageParser<MapSint64Sint64Entry> Parser { get { return _parser; } }

        private static readonly string[] _fieldNames = new string[] { "key", "value" };
        private static readonly uint[] _fieldTags = new uint[] { 8, 16 };
        public static pbd::MessageDescriptor Descriptor {
          get { return global::Google.Protobuf.TestProtos.TestArenaMap.Descriptor.NestedTypes[5]; }
        }

        public pb::FieldAccess.FieldAccessorTable Fields {
          get { return global::Google.Protobuf.TestProtos.MapUnittestProto3.internal__static_protobuf_unittest_TestArenaMap_MapSint64Sint64Entry__FieldAccessorTable; }
        }

        private bool _frozen = false;
        public bool IsFrozen { get { return _frozen; } }

        public MapSint64Sint64Entry() { }

        public MapSint64Sint64Entry(MapSint64Sint64Entry other) {
          key_ = other.key_;
          value_ = other.value_;
        }

        public MapSint64Sint64Entry Clone() {
          return new MapSint64Sint64Entry(this);
        }

        public void Freeze() {
          if (IsFrozen) {
            return;
          }
          _frozen = true;
        }

        public const int KeyFieldNumber = 1;
        private long key_;
        public long Key {
          get { return key_; }
          set {
            pb::Freezable.CheckMutable(this);
            key_ = value;
          }
        }

        public const int ValueFieldNumber = 2;
        private long value_;
        public long Value {
          get { return value_; }
          set {
            pb::Freezable.CheckMutable(this);
            value_ = value;
          }
        }

        public override bool Equals(object other) {
          return Equals(other as MapSint64Sint64Entry);
        }

        public bool Equals(MapSint64Sint64Entry other) {
          if (ReferenceEquals(other, null)) {
            return false;
          }
          if (ReferenceEquals(other, this)) {
            return true;
          }
          if (Key != other.Key) return false;
          if (Value != other.Value) return false;
          return true;
        }

        public override int GetHashCode() {
          int hash = 1;
          if (Key != 0L) hash ^= Key.GetHashCode();
          if (Value != 0L) hash ^= Value.GetHashCode();
          return hash;
        }

        public void WriteTo(pb::CodedOutputStream output) {
          if (Key != 0L) {
            output.WriteRawTag(8);
            output.WriteSInt64(Key);
          }
          if (Value != 0L) {
            output.WriteRawTag(16);
            output.WriteSInt64(Value);
          }
        }

        public int CalculateSize() {
          int size = 0;
          if (Key != 0L) {
            size += 1 + pb::CodedOutputStream.ComputeSInt64Size(Key);
          }
          if (Value != 0L) {
            size += 1 + pb::CodedOutputStream.ComputeSInt64Size(Value);
          }
          return size;
        }

        public void MergeFrom(MapSint64Sint64Entry other) {
          if (other == null) {
            return;
          }
          if (other.Key != 0L) {
            Key = other.Key;
          }
          if (other.Value != 0L) {
            Value = other.Value;
          }
        }

        public void MergeFrom(pb::CodedInputStream input) {
          uint tag;
          while (input.ReadTag(out tag)) {
            switch(tag) {
              case 0:
                throw pb::InvalidProtocolBufferException.InvalidTag();
              default:
                if (pb::WireFormat.IsEndGroupTag(tag)) {
                  return;
                }
                break;
              case 8: {
                Key = input.ReadSInt64();
                break;
              }
              case 16: {
                Value = input.ReadSInt64();
                break;
              }
            }
          }
        }

      }

      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
      public sealed partial class MapFixed32Fixed32Entry : pb::IMessage<MapFixed32Fixed32Entry> {
        private static readonly pb::MessageParser<MapFixed32Fixed32Entry> _parser = new pb::MessageParser<MapFixed32Fixed32Entry>(() => new MapFixed32Fixed32Entry());
        public static pb::MessageParser<MapFixed32Fixed32Entry> Parser { get { return _parser; } }

        private static readonly string[] _fieldNames = new string[] { "key", "value" };
        private static readonly uint[] _fieldTags = new uint[] { 13, 21 };
        public static pbd::MessageDescriptor Descriptor {
          get { return global::Google.Protobuf.TestProtos.TestArenaMap.Descriptor.NestedTypes[6]; }
        }

        public pb::FieldAccess.FieldAccessorTable Fields {
          get { return global::Google.Protobuf.TestProtos.MapUnittestProto3.internal__static_protobuf_unittest_TestArenaMap_MapFixed32Fixed32Entry__FieldAccessorTable; }
        }

        private bool _frozen = false;
        public bool IsFrozen { get { return _frozen; } }

        public MapFixed32Fixed32Entry() { }

        public MapFixed32Fixed32Entry(MapFixed32Fixed32Entry other) {
          key_ = other.key_;
          value_ = other.value_;
        }

        public MapFixed32Fixed32Entry Clone() {
          return new MapFixed32Fixed32Entry(this);
        }

        public void Freeze() {
          if (IsFrozen) {
            return;
          }
          _frozen = true;
        }

        public const int KeyFieldNumber = 1;
        private uint key_;
        public uint Key {
          get { return key_; }
          set {
            pb::Freezable.CheckMutable(this);
            key_ = value;
          }
        }

        public const int ValueFieldNumber = 2;
        private uint value_;
        public uint Value {
          get { return value_; }
          set {
            pb::Freezable.CheckMutable(this);
            value_ = value;
          }
        }

        public override bool Equals(object other) {
          return Equals(other as MapFixed32Fixed32Entry);
        }

        public bool Equals(MapFixed32Fixed32Entry other) {
          if (ReferenceEquals(other, null)) {
            return false;
          }
          if (ReferenceEquals(other, this)) {
            return true;
          }
          if (Key != other.Key) return false;
          if (Value != other.Value) return false;
          return true;
        }

        public override int GetHashCode() {
          int hash = 1;
          if (Key != 0) hash ^= Key.GetHashCode();
          if (Value != 0) hash ^= Value.GetHashCode();
          return hash;
        }

        public void WriteTo(pb::CodedOutputStream output) {
          if (Key != 0) {
            output.WriteRawTag(13);
            output.WriteFixed32(Key);
          }
          if (Value != 0) {
            output.WriteRawTag(21);
            output.WriteFixed32(Value);
          }
        }

        public int CalculateSize() {
          int size = 0;
          if (Key != 0) {
            size += 1 + 4;
          }
          if (Value != 0) {
            size += 1 + 4;
          }
          return size;
        }

        public void MergeFrom(MapFixed32Fixed32Entry other) {
          if (other == null) {
            return;
          }
          if (other.Key != 0) {
            Key = other.Key;
          }
          if (other.Value != 0) {
            Value = other.Value;
          }
        }

        public void MergeFrom(pb::CodedInputStream input) {
          uint tag;
          while (input.ReadTag(out tag)) {
            switch(tag) {
              case 0:
                throw pb::InvalidProtocolBufferException.InvalidTag();
              default:
                if (pb::WireFormat.IsEndGroupTag(tag)) {
                  return;
                }
                break;
              case 13: {
                Key = input.ReadFixed32();
                break;
              }
              case 21: {
                Value = input.ReadFixed32();
                break;
              }
            }
          }
        }

      }

      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
      public sealed partial class MapFixed64Fixed64Entry : pb::IMessage<MapFixed64Fixed64Entry> {
        private static readonly pb::MessageParser<MapFixed64Fixed64Entry> _parser = new pb::MessageParser<MapFixed64Fixed64Entry>(() => new MapFixed64Fixed64Entry());
        public static pb::MessageParser<MapFixed64Fixed64Entry> Parser { get { return _parser; } }

        private static readonly string[] _fieldNames = new string[] { "key", "value" };
        private static readonly uint[] _fieldTags = new uint[] { 9, 17 };
        public static pbd::MessageDescriptor Descriptor {
          get { return global::Google.Protobuf.TestProtos.TestArenaMap.Descriptor.NestedTypes[7]; }
        }

        public pb::FieldAccess.FieldAccessorTable Fields {
          get { return global::Google.Protobuf.TestProtos.MapUnittestProto3.internal__static_protobuf_unittest_TestArenaMap_MapFixed64Fixed64Entry__FieldAccessorTable; }
        }

        private bool _frozen = false;
        public bool IsFrozen { get { return _frozen; } }

        public MapFixed64Fixed64Entry() { }

        public MapFixed64Fixed64Entry(MapFixed64Fixed64Entry other) {
          key_ = other.key_;
          value_ = other.value_;
        }

        public MapFixed64Fixed64Entry Clone() {
          return new MapFixed64Fixed64Entry(this);
        }

        public void Freeze() {
          if (IsFrozen) {
            return;
          }
          _frozen = true;
        }

        public const int KeyFieldNumber = 1;
        private ulong key_;
        public ulong Key {
          get { return key_; }
          set {
            pb::Freezable.CheckMutable(this);
            key_ = value;
          }
        }

        public const int ValueFieldNumber = 2;
        private ulong value_;
        public ulong Value {
          get { return value_; }
          set {
            pb::Freezable.CheckMutable(this);
            value_ = value;
          }
        }

        public override bool Equals(object other) {
          return Equals(other as MapFixed64Fixed64Entry);
        }

        public bool Equals(MapFixed64Fixed64Entry other) {
          if (ReferenceEquals(other, null)) {
            return false;
          }
          if (ReferenceEquals(other, this)) {
            return true;
          }
          if (Key != other.Key) return false;
          if (Value != other.Value) return false;
          return true;
        }

        public override int GetHashCode() {
          int hash = 1;
          if (Key != 0UL) hash ^= Key.GetHashCode();
          if (Value != 0UL) hash ^= Value.GetHashCode();
          return hash;
        }

        public void WriteTo(pb::CodedOutputStream output) {
          if (Key != 0UL) {
            output.WriteRawTag(9);
            output.WriteFixed64(Key);
          }
          if (Value != 0UL) {
            output.WriteRawTag(17);
            output.WriteFixed64(Value);
          }
        }

        public int CalculateSize() {
          int size = 0;
          if (Key != 0UL) {
            size += 1 + 8;
          }
          if (Value != 0UL) {
            size += 1 + 8;
          }
          return size;
        }

        public void MergeFrom(MapFixed64Fixed64Entry other) {
          if (other == null) {
            return;
          }
          if (other.Key != 0UL) {
            Key = other.Key;
          }
          if (other.Value != 0UL) {
            Value = other.Value;
          }
        }

        public void MergeFrom(pb::CodedInputStream input) {
          uint tag;
          while (input.ReadTag(out tag)) {
            switch(tag) {
              case 0:
                throw pb::InvalidProtocolBufferException.InvalidTag();
              default:
                if (pb::WireFormat.IsEndGroupTag(tag)) {
                  return;
                }
                break;
              case 9: {
                Key = input.ReadFixed64();
                break;
              }
              case 17: {
                Value = input.ReadFixed64();
                break;
              }
            }
          }
        }

      }

      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
      public sealed partial class MapSfixed32Sfixed32Entry : pb::IMessage<MapSfixed32Sfixed32Entry> {
        private static readonly pb::MessageParser<MapSfixed32Sfixed32Entry> _parser = new pb::MessageParser<MapSfixed32Sfixed32Entry>(() => new MapSfixed32Sfixed32Entry());
        public static pb::MessageParser<MapSfixed32Sfixed32Entry> Parser { get { return _parser; } }

        private static readonly string[] _fieldNames = new string[] { "key", "value" };
        private static readonly uint[] _fieldTags = new uint[] { 13, 21 };
        public static pbd::MessageDescriptor Descriptor {
          get { return global::Google.Protobuf.TestProtos.TestArenaMap.Descriptor.NestedTypes[8]; }
        }

        public pb::FieldAccess.FieldAccessorTable Fields {
          get { return global::Google.Protobuf.TestProtos.MapUnittestProto3.internal__static_protobuf_unittest_TestArenaMap_MapSfixed32Sfixed32Entry__FieldAccessorTable; }
        }

        private bool _frozen = false;
        public bool IsFrozen { get { return _frozen; } }

        public MapSfixed32Sfixed32Entry() { }

        public MapSfixed32Sfixed32Entry(MapSfixed32Sfixed32Entry other) {
          key_ = other.key_;
          value_ = other.value_;
        }

        public MapSfixed32Sfixed32Entry Clone() {
          return new MapSfixed32Sfixed32Entry(this);
        }

        public void Freeze() {
          if (IsFrozen) {
            return;
          }
          _frozen = true;
        }

        public const int KeyFieldNumber = 1;
        private int key_;
        public int Key {
          get { return key_; }
          set {
            pb::Freezable.CheckMutable(this);
            key_ = value;
          }
        }

        public const int ValueFieldNumber = 2;
        private int value_;
        public int Value {
          get { return value_; }
          set {
            pb::Freezable.CheckMutable(this);
            value_ = value;
          }
        }

        public override bool Equals(object other) {
          return Equals(other as MapSfixed32Sfixed32Entry);
        }

        public bool Equals(MapSfixed32Sfixed32Entry other) {
          if (ReferenceEquals(other, null)) {
            return false;
          }
          if (ReferenceEquals(other, this)) {
            return true;
          }
          if (Key != other.Key) return false;
          if (Value != other.Value) return false;
          return true;
        }

        public override int GetHashCode() {
          int hash = 1;
          if (Key != 0) hash ^= Key.GetHashCode();
          if (Value != 0) hash ^= Value.GetHashCode();
          return hash;
        }

        public void WriteTo(pb::CodedOutputStream output) {
          if (Key != 0) {
            output.WriteRawTag(13);
            output.WriteSFixed32(Key);
          }
          if (Value != 0) {
            output.WriteRawTag(21);
            output.WriteSFixed32(Value);
          }
        }

        public int CalculateSize() {
          int size = 0;
          if (Key != 0) {
            size += 1 + 4;
          }
          if (Value != 0) {
            size += 1 + 4;
          }
          return size;
        }

        public void MergeFrom(MapSfixed32Sfixed32Entry other) {
          if (other == null) {
            return;
          }
          if (other.Key != 0) {
            Key = other.Key;
          }
          if (other.Value != 0) {
            Value = other.Value;
          }
        }

        public void MergeFrom(pb::CodedInputStream input) {
          uint tag;
          while (input.ReadTag(out tag)) {
            switch(tag) {
              case 0:
                throw pb::InvalidProtocolBufferException.InvalidTag();
              default:
                if (pb::WireFormat.IsEndGroupTag(tag)) {
                  return;
                }
                break;
              case 13: {
                Key = input.ReadSFixed32();
                break;
              }
              case 21: {
                Value = input.ReadSFixed32();
                break;
              }
            }
          }
        }

      }

      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
      public sealed partial class MapSfixed64Sfixed64Entry : pb::IMessage<MapSfixed64Sfixed64Entry> {
        private static readonly pb::MessageParser<MapSfixed64Sfixed64Entry> _parser = new pb::MessageParser<MapSfixed64Sfixed64Entry>(() => new MapSfixed64Sfixed64Entry());
        public static pb::MessageParser<MapSfixed64Sfixed64Entry> Parser { get { return _parser; } }

        private static readonly string[] _fieldNames = new string[] { "key", "value" };
        private static readonly uint[] _fieldTags = new uint[] { 9, 17 };
        public static pbd::MessageDescriptor Descriptor {
          get { return global::Google.Protobuf.TestProtos.TestArenaMap.Descriptor.NestedTypes[9]; }
        }

        public pb::FieldAccess.FieldAccessorTable Fields {
          get { return global::Google.Protobuf.TestProtos.MapUnittestProto3.internal__static_protobuf_unittest_TestArenaMap_MapSfixed64Sfixed64Entry__FieldAccessorTable; }
        }

        private bool _frozen = false;
        public bool IsFrozen { get { return _frozen; } }

        public MapSfixed64Sfixed64Entry() { }

        public MapSfixed64Sfixed64Entry(MapSfixed64Sfixed64Entry other) {
          key_ = other.key_;
          value_ = other.value_;
        }

        public MapSfixed64Sfixed64Entry Clone() {
          return new MapSfixed64Sfixed64Entry(this);
        }

        public void Freeze() {
          if (IsFrozen) {
            return;
          }
          _frozen = true;
        }

        public const int KeyFieldNumber = 1;
        private long key_;
        public long Key {
          get { return key_; }
          set {
            pb::Freezable.CheckMutable(this);
            key_ = value;
          }
        }

        public const int ValueFieldNumber = 2;
        private long value_;
        public long Value {
          get { return value_; }
          set {
            pb::Freezable.CheckMutable(this);
            value_ = value;
          }
        }

        public override bool Equals(object other) {
          return Equals(other as MapSfixed64Sfixed64Entry);
        }

        public bool Equals(MapSfixed64Sfixed64Entry other) {
          if (ReferenceEquals(other, null)) {
            return false;
          }
          if (ReferenceEquals(other, this)) {
            return true;
          }
          if (Key != other.Key) return false;
          if (Value != other.Value) return false;
          return true;
        }

        public override int GetHashCode() {
          int hash = 1;
          if (Key != 0L) hash ^= Key.GetHashCode();
          if (Value != 0L) hash ^= Value.GetHashCode();
          return hash;
        }

        public void WriteTo(pb::CodedOutputStream output) {
          if (Key != 0L) {
            output.WriteRawTag(9);
            output.WriteSFixed64(Key);
          }
          if (Value != 0L) {
            output.WriteRawTag(17);
            output.WriteSFixed64(Value);
          }
        }

        public int CalculateSize() {
          int size = 0;
          if (Key != 0L) {
            size += 1 + 8;
          }
          if (Value != 0L) {
            size += 1 + 8;
          }
          return size;
        }

        public void MergeFrom(MapSfixed64Sfixed64Entry other) {
          if (other == null) {
            return;
          }
          if (other.Key != 0L) {
            Key = other.Key;
          }
          if (other.Value != 0L) {
            Value = other.Value;
          }
        }

        public void MergeFrom(pb::CodedInputStream input) {
          uint tag;
          while (input.ReadTag(out tag)) {
            switch(tag) {
              case 0:
                throw pb::InvalidProtocolBufferException.InvalidTag();
              default:
                if (pb::WireFormat.IsEndGroupTag(tag)) {
                  return;
                }
                break;
              case 9: {
                Key = input.ReadSFixed64();
                break;
              }
              case 17: {
                Value = input.ReadSFixed64();
                break;
              }
            }
          }
        }

      }

      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
      public sealed partial class MapInt32FloatEntry : pb::IMessage<MapInt32FloatEntry> {
        private static readonly pb::MessageParser<MapInt32FloatEntry> _parser = new pb::MessageParser<MapInt32FloatEntry>(() => new MapInt32FloatEntry());
        public static pb::MessageParser<MapInt32FloatEntry> Parser { get { return _parser; } }

        private static readonly string[] _fieldNames = new string[] { "key", "value" };
        private static readonly uint[] _fieldTags = new uint[] { 8, 21 };
        public static pbd::MessageDescriptor Descriptor {
          get { return global::Google.Protobuf.TestProtos.TestArenaMap.Descriptor.NestedTypes[10]; }
        }

        public pb::FieldAccess.FieldAccessorTable Fields {
          get { return global::Google.Protobuf.TestProtos.MapUnittestProto3.internal__static_protobuf_unittest_TestArenaMap_MapInt32FloatEntry__FieldAccessorTable; }
        }

        private bool _frozen = false;
        public bool IsFrozen { get { return _frozen; } }

        public MapInt32FloatEntry() { }

        public MapInt32FloatEntry(MapInt32FloatEntry other) {
          key_ = other.key_;
          value_ = other.value_;
        }

        public MapInt32FloatEntry Clone() {
          return new MapInt32FloatEntry(this);
        }

        public void Freeze() {
          if (IsFrozen) {
            return;
          }
          _frozen = true;
        }

        public const int KeyFieldNumber = 1;
        private int key_;
        public int Key {
          get { return key_; }
          set {
            pb::Freezable.CheckMutable(this);
            key_ = value;
          }
        }

        public const int ValueFieldNumber = 2;
        private float value_;
        public float Value {
          get { return value_; }
          set {
            pb::Freezable.CheckMutable(this);
            value_ = value;
          }
        }

        public override bool Equals(object other) {
          return Equals(other as MapInt32FloatEntry);
        }

        public bool Equals(MapInt32FloatEntry other) {
          if (ReferenceEquals(other, null)) {
            return false;
          }
          if (ReferenceEquals(other, this)) {
            return true;
          }
          if (Key != other.Key) return false;
          if (Value != other.Value) return false;
          return true;
        }

        public override int GetHashCode() {
          int hash = 1;
          if (Key != 0) hash ^= Key.GetHashCode();
          if (Value != 0F) hash ^= Value.GetHashCode();
          return hash;
        }

        public void WriteTo(pb::CodedOutputStream output) {
          if (Key != 0) {
            output.WriteRawTag(8);
            output.WriteInt32(Key);
          }
          if (Value != 0F) {
            output.WriteRawTag(21);
            output.WriteFloat(Value);
          }
        }

        public int CalculateSize() {
          int size = 0;
          if (Key != 0) {
            size += 1 + pb::CodedOutputStream.ComputeInt32Size(Key);
          }
          if (Value != 0F) {
            size += 1 + 4;
          }
          return size;
        }

        public void MergeFrom(MapInt32FloatEntry other) {
          if (other == null) {
            return;
          }
          if (other.Key != 0) {
            Key = other.Key;
          }
          if (other.Value != 0F) {
            Value = other.Value;
          }
        }

        public void MergeFrom(pb::CodedInputStream input) {
          uint tag;
          while (input.ReadTag(out tag)) {
            switch(tag) {
              case 0:
                throw pb::InvalidProtocolBufferException.InvalidTag();
              default:
                if (pb::WireFormat.IsEndGroupTag(tag)) {
                  return;
                }
                break;
              case 8: {
                Key = input.ReadInt32();
                break;
              }
              case 21: {
                Value = input.ReadFloat();
                break;
              }
            }
          }
        }

      }

      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
      public sealed partial class MapInt32DoubleEntry : pb::IMessage<MapInt32DoubleEntry> {
        private static readonly pb::MessageParser<MapInt32DoubleEntry> _parser = new pb::MessageParser<MapInt32DoubleEntry>(() => new MapInt32DoubleEntry());
        public static pb::MessageParser<MapInt32DoubleEntry> Parser { get { return _parser; } }

        private static readonly string[] _fieldNames = new string[] { "key", "value" };
        private static readonly uint[] _fieldTags = new uint[] { 8, 17 };
        public static pbd::MessageDescriptor Descriptor {
          get { return global::Google.Protobuf.TestProtos.TestArenaMap.Descriptor.NestedTypes[11]; }
        }

        public pb::FieldAccess.FieldAccessorTable Fields {
          get { return global::Google.Protobuf.TestProtos.MapUnittestProto3.internal__static_protobuf_unittest_TestArenaMap_MapInt32DoubleEntry__FieldAccessorTable; }
        }

        private bool _frozen = false;
        public bool IsFrozen { get { return _frozen; } }

        public MapInt32DoubleEntry() { }

        public MapInt32DoubleEntry(MapInt32DoubleEntry other) {
          key_ = other.key_;
          value_ = other.value_;
        }

        public MapInt32DoubleEntry Clone() {
          return new MapInt32DoubleEntry(this);
        }

        public void Freeze() {
          if (IsFrozen) {
            return;
          }
          _frozen = true;
        }

        public const int KeyFieldNumber = 1;
        private int key_;
        public int Key {
          get { return key_; }
          set {
            pb::Freezable.CheckMutable(this);
            key_ = value;
          }
        }

        public const int ValueFieldNumber = 2;
        private double value_;
        public double Value {
          get { return value_; }
          set {
            pb::Freezable.CheckMutable(this);
            value_ = value;
          }
        }

        public override bool Equals(object other) {
          return Equals(other as MapInt32DoubleEntry);
        }

        public bool Equals(MapInt32DoubleEntry other) {
          if (ReferenceEquals(other, null)) {
            return false;
          }
          if (ReferenceEquals(other, this)) {
            return true;
          }
          if (Key != other.Key) return false;
          if (Value != other.Value) return false;
          return true;
        }

        public override int GetHashCode() {
          int hash = 1;
          if (Key != 0) hash ^= Key.GetHashCode();
          if (Value != 0D) hash ^= Value.GetHashCode();
          return hash;
        }

        public void WriteTo(pb::CodedOutputStream output) {
          if (Key != 0) {
            output.WriteRawTag(8);
            output.WriteInt32(Key);
          }
          if (Value != 0D) {
            output.WriteRawTag(17);
            output.WriteDouble(Value);
          }
        }

        public int CalculateSize() {
          int size = 0;
          if (Key != 0) {
            size += 1 + pb::CodedOutputStream.ComputeInt32Size(Key);
          }
          if (Value != 0D) {
            size += 1 + 8;
          }
          return size;
        }

        public void MergeFrom(MapInt32DoubleEntry other) {
          if (other == null) {
            return;
          }
          if (other.Key != 0) {
            Key = other.Key;
          }
          if (other.Value != 0D) {
            Value = other.Value;
          }
        }

        public void MergeFrom(pb::CodedInputStream input) {
          uint tag;
          while (input.ReadTag(out tag)) {
            switch(tag) {
              case 0:
                throw pb::InvalidProtocolBufferException.InvalidTag();
              default:
                if (pb::WireFormat.IsEndGroupTag(tag)) {
                  return;
                }
                break;
              case 8: {
                Key = input.ReadInt32();
                break;
              }
              case 17: {
                Value = input.ReadDouble();
                break;
              }
            }
          }
        }

      }

      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
      public sealed partial class MapBoolBoolEntry : pb::IMessage<MapBoolBoolEntry> {
        private static readonly pb::MessageParser<MapBoolBoolEntry> _parser = new pb::MessageParser<MapBoolBoolEntry>(() => new MapBoolBoolEntry());
        public static pb::MessageParser<MapBoolBoolEntry> Parser { get { return _parser; } }

        private static readonly string[] _fieldNames = new string[] { "key", "value" };
        private static readonly uint[] _fieldTags = new uint[] { 8, 16 };
        public static pbd::MessageDescriptor Descriptor {
          get { return global::Google.Protobuf.TestProtos.TestArenaMap.Descriptor.NestedTypes[12]; }
        }

        public pb::FieldAccess.FieldAccessorTable Fields {
          get { return global::Google.Protobuf.TestProtos.MapUnittestProto3.internal__static_protobuf_unittest_TestArenaMap_MapBoolBoolEntry__FieldAccessorTable; }
        }

        private bool _frozen = false;
        public bool IsFrozen { get { return _frozen; } }

        public MapBoolBoolEntry() { }

        public MapBoolBoolEntry(MapBoolBoolEntry other) {
          key_ = other.key_;
          value_ = other.value_;
        }

        public MapBoolBoolEntry Clone() {
          return new MapBoolBoolEntry(this);
        }

        public void Freeze() {
          if (IsFrozen) {
            return;
          }
          _frozen = true;
        }

        public const int KeyFieldNumber = 1;
        private bool key_;
        public bool Key {
          get { return key_; }
          set {
            pb::Freezable.CheckMutable(this);
            key_ = value;
          }
        }

        public const int ValueFieldNumber = 2;
        private bool value_;
        public bool Value {
          get { return value_; }
          set {
            pb::Freezable.CheckMutable(this);
            value_ = value;
          }
        }

        public override bool Equals(object other) {
          return Equals(other as MapBoolBoolEntry);
        }

        public bool Equals(MapBoolBoolEntry other) {
          if (ReferenceEquals(other, null)) {
            return false;
          }
          if (ReferenceEquals(other, this)) {
            return true;
          }
          if (Key != other.Key) return false;
          if (Value != other.Value) return false;
          return true;
        }

        public override int GetHashCode() {
          int hash = 1;
          if (Key != false) hash ^= Key.GetHashCode();
          if (Value != false) hash ^= Value.GetHashCode();
          return hash;
        }

        public void WriteTo(pb::CodedOutputStream output) {
          if (Key != false) {
            output.WriteRawTag(8);
            output.WriteBool(Key);
          }
          if (Value != false) {
            output.WriteRawTag(16);
            output.WriteBool(Value);
          }
        }

        public int CalculateSize() {
          int size = 0;
          if (Key != false) {
            size += 1 + 1;
          }
          if (Value != false) {
            size += 1 + 1;
          }
          return size;
        }

        public void MergeFrom(MapBoolBoolEntry other) {
          if (other == null) {
            return;
          }
          if (other.Key != false) {
            Key = other.Key;
          }
          if (other.Value != false) {
            Value = other.Value;
          }
        }

        public void MergeFrom(pb::CodedInputStream input) {
          uint tag;
          while (input.ReadTag(out tag)) {
            switch(tag) {
              case 0:
                throw pb::InvalidProtocolBufferException.InvalidTag();
              default:
                if (pb::WireFormat.IsEndGroupTag(tag)) {
                  return;
                }
                break;
              case 8: {
                Key = input.ReadBool();
                break;
              }
              case 16: {
                Value = input.ReadBool();
                break;
              }
            }
          }
        }

      }

      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
      public sealed partial class MapInt32EnumEntry : pb::IMessage<MapInt32EnumEntry> {
        private static readonly pb::MessageParser<MapInt32EnumEntry> _parser = new pb::MessageParser<MapInt32EnumEntry>(() => new MapInt32EnumEntry());
        public static pb::MessageParser<MapInt32EnumEntry> Parser { get { return _parser; } }

        private static readonly string[] _fieldNames = new string[] { "key", "value" };
        private static readonly uint[] _fieldTags = new uint[] { 8, 16 };
        public static pbd::MessageDescriptor Descriptor {
          get { return global::Google.Protobuf.TestProtos.TestArenaMap.Descriptor.NestedTypes[13]; }
        }

        public pb::FieldAccess.FieldAccessorTable Fields {
          get { return global::Google.Protobuf.TestProtos.MapUnittestProto3.internal__static_protobuf_unittest_TestArenaMap_MapInt32EnumEntry__FieldAccessorTable; }
        }

        private bool _frozen = false;
        public bool IsFrozen { get { return _frozen; } }

        public MapInt32EnumEntry() { }

        public MapInt32EnumEntry(MapInt32EnumEntry other) {
          key_ = other.key_;
          value_ = other.value_;
        }

        public MapInt32EnumEntry Clone() {
          return new MapInt32EnumEntry(this);
        }

        public void Freeze() {
          if (IsFrozen) {
            return;
          }
          _frozen = true;
        }

        public const int KeyFieldNumber = 1;
        private int key_;
        public int Key {
          get { return key_; }
          set {
            pb::Freezable.CheckMutable(this);
            key_ = value;
          }
        }

        public const int ValueFieldNumber = 2;
        private global::Google.Protobuf.TestProtos.MapEnum value_ = global::Google.Protobuf.TestProtos.MapEnum.MAP_ENUM_FOO;
        public global::Google.Protobuf.TestProtos.MapEnum Value {
          get { return value_; }
          set {
            pb::Freezable.CheckMutable(this);
            value_ = value;
          }
        }

        public override bool Equals(object other) {
          return Equals(other as MapInt32EnumEntry);
        }

        public bool Equals(MapInt32EnumEntry other) {
          if (ReferenceEquals(other, null)) {
            return false;
          }
          if (ReferenceEquals(other, this)) {
            return true;
          }
          if (Key != other.Key) return false;
          if (Value != other.Value) return false;
          return true;
        }

        public override int GetHashCode() {
          int hash = 1;
          if (Key != 0) hash ^= Key.GetHashCode();
          if (Value != global::Google.Protobuf.TestProtos.MapEnum.MAP_ENUM_FOO) hash ^= Value.GetHashCode();
          return hash;
        }

        public void WriteTo(pb::CodedOutputStream output) {
          if (Key != 0) {
            output.WriteRawTag(8);
            output.WriteInt32(Key);
          }
          if (Value != global::Google.Protobuf.TestProtos.MapEnum.MAP_ENUM_FOO) {
            output.WriteRawTag(16);
            output.WriteEnum((int) Value);
          }
        }

        public int CalculateSize() {
          int size = 0;
          if (Key != 0) {
            size += 1 + pb::CodedOutputStream.ComputeInt32Size(Key);
          }
          if (Value != global::Google.Protobuf.TestProtos.MapEnum.MAP_ENUM_FOO) {
            size += 1 + pb::CodedOutputStream.ComputeEnumSize((int) Value);
          }
          return size;
        }

        public void MergeFrom(MapInt32EnumEntry other) {
          if (other == null) {
            return;
          }
          if (other.Key != 0) {
            Key = other.Key;
          }
          if (other.Value != global::Google.Protobuf.TestProtos.MapEnum.MAP_ENUM_FOO) {
            Value = other.Value;
          }
        }

        public void MergeFrom(pb::CodedInputStream input) {
          uint tag;
          while (input.ReadTag(out tag)) {
            switch(tag) {
              case 0:
                throw pb::InvalidProtocolBufferException.InvalidTag();
              default:
                if (pb::WireFormat.IsEndGroupTag(tag)) {
                  return;
                }
                break;
              case 8: {
                Key = input.ReadInt32();
                break;
              }
              case 16: {
                value_ = (global::Google.Protobuf.TestProtos.MapEnum) input.ReadEnum();
                break;
              }
            }
          }
        }

      }

      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
      public sealed partial class MapInt32ForeignMessageEntry : pb::IMessage<MapInt32ForeignMessageEntry> {
        private static readonly pb::MessageParser<MapInt32ForeignMessageEntry> _parser = new pb::MessageParser<MapInt32ForeignMessageEntry>(() => new MapInt32ForeignMessageEntry());
        public static pb::MessageParser<MapInt32ForeignMessageEntry> Parser { get { return _parser; } }

        private static readonly string[] _fieldNames = new string[] { "key", "value" };
        private static readonly uint[] _fieldTags = new uint[] { 8, 18 };
        public static pbd::MessageDescriptor Descriptor {
          get { return global::Google.Protobuf.TestProtos.TestArenaMap.Descriptor.NestedTypes[14]; }
        }

        public pb::FieldAccess.FieldAccessorTable Fields {
          get { return global::Google.Protobuf.TestProtos.MapUnittestProto3.internal__static_protobuf_unittest_TestArenaMap_MapInt32ForeignMessageEntry__FieldAccessorTable; }
        }

        private bool _frozen = false;
        public bool IsFrozen { get { return _frozen; } }

        public MapInt32ForeignMessageEntry() { }

        public MapInt32ForeignMessageEntry(MapInt32ForeignMessageEntry other) {
          key_ = other.key_;
          Value = other.value_ != null ? other.Value.Clone() : null;
        }

        public MapInt32ForeignMessageEntry Clone() {
          return new MapInt32ForeignMessageEntry(this);
        }

        public void Freeze() {
          if (IsFrozen) {
            return;
          }
          _frozen = true;
          if (value_ != null) Value.Freeze();
        }

        public const int KeyFieldNumber = 1;
        private int key_;
        public int Key {
          get { return key_; }
          set {
            pb::Freezable.CheckMutable(this);
            key_ = value;
          }
        }

        public const int ValueFieldNumber = 2;
        private global::Google.Protobuf.TestProtos.ForeignMessage value_;
        public global::Google.Protobuf.TestProtos.ForeignMessage Value {
          get { return value_; }
          set {
            pb::Freezable.CheckMutable(this);
            value_ = value;
          }
        }

        public override bool Equals(object other) {
          return Equals(other as MapInt32ForeignMessageEntry);
        }

        public bool Equals(MapInt32ForeignMessageEntry other) {
          if (ReferenceEquals(other, null)) {
            return false;
          }
          if (ReferenceEquals(other, this)) {
            return true;
          }
          if (Key != other.Key) return false;
          if (!object.Equals(Value, other.Value)) return false;
          return true;
        }

        public override int GetHashCode() {
          int hash = 1;
          if (Key != 0) hash ^= Key.GetHashCode();
          if (value_ != null) hash ^= Value.GetHashCode();
          return hash;
        }

        public void WriteTo(pb::CodedOutputStream output) {
          if (Key != 0) {
            output.WriteRawTag(8);
            output.WriteInt32(Key);
          }
          if (value_ != null) {
            output.WriteRawTag(18);
            output.WriteMessage(Value);
          }
        }

        public int CalculateSize() {
          int size = 0;
          if (Key != 0) {
            size += 1 + pb::CodedOutputStream.ComputeInt32Size(Key);
          }
          if (value_ != null) {
            size += 1 + pb::CodedOutputStream.ComputeMessageSize(Value);
          }
          return size;
        }

        public void MergeFrom(MapInt32ForeignMessageEntry other) {
          if (other == null) {
            return;
          }
          if (other.Key != 0) {
            Key = other.Key;
          }
          if (other.value_ != null) {
            if (value_ == null) {
              value_ = new global::Google.Protobuf.TestProtos.ForeignMessage();
            }
            Value.MergeFrom(other.Value);
          }
        }

        public void MergeFrom(pb::CodedInputStream input) {
          uint tag;
          while (input.ReadTag(out tag)) {
            switch(tag) {
              case 0:
                throw pb::InvalidProtocolBufferException.InvalidTag();
              default:
                if (pb::WireFormat.IsEndGroupTag(tag)) {
                  return;
                }
                break;
              case 8: {
                Key = input.ReadInt32();
                break;
              }
              case 18: {
                if (value_ == null) {
                  value_ = new global::Google.Protobuf.TestProtos.ForeignMessage();
                }
                input.ReadMessage(value_);
                break;
              }
            }
          }
        }

      }

    }
    #endregion

  }

  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
  public sealed partial class MessageContainingEnumCalledType : pb::IMessage<MessageContainingEnumCalledType> {
    private static readonly pb::MessageParser<MessageContainingEnumCalledType> _parser = new pb::MessageParser<MessageContainingEnumCalledType>(() => new MessageContainingEnumCalledType());
    public static pb::MessageParser<MessageContainingEnumCalledType> Parser { get { return _parser; } }

    private static readonly string[] _fieldNames = new string[] { "type" };
    private static readonly uint[] _fieldTags = new uint[] { 10 };
    public static pbd::MessageDescriptor Descriptor {
      get { return global::Google.Protobuf.TestProtos.MapUnittestProto3.Descriptor.MessageTypes[5]; }
    }

    public pb::FieldAccess.FieldAccessorTable Fields {
      get { return global::Google.Protobuf.TestProtos.MapUnittestProto3.internal__static_protobuf_unittest_MessageContainingEnumCalledType__FieldAccessorTable; }
    }

    private bool _frozen = false;
    public bool IsFrozen { get { return _frozen; } }

    public MessageContainingEnumCalledType() { }

    public MessageContainingEnumCalledType(MessageContainingEnumCalledType other) {
      type_ = other.type_.Clone();
    }

    public MessageContainingEnumCalledType Clone() {
      return new MessageContainingEnumCalledType(this);
    }

    public void Freeze() {
      if (IsFrozen) {
        return;
      }
      _frozen = true;
      type_.Freeze();
    }

    public const int TypeFieldNumber = 1;
    private static readonly pbc::MapField<int, global::Google.Protobuf.TestProtos.MessageContainingEnumCalledType>.Codec _map_type_codec
        = new pbc::MapField<int, global::Google.Protobuf.TestProtos.MessageContainingEnumCalledType>.Codec(pb::FieldCodec.ForInt32(8), pb::FieldCodec.ForMessage(18, global::Google.Protobuf.TestProtos.MessageContainingEnumCalledType.Parser), 10);
    private readonly pbc::MapField<int, global::Google.Protobuf.TestProtos.MessageContainingEnumCalledType> type_ = new pbc::MapField<int, global::Google.Protobuf.TestProtos.MessageContainingEnumCalledType>();
    public pbc::MapField<int, global::Google.Protobuf.TestProtos.MessageContainingEnumCalledType> Type {
      get { return type_; }
    }

    public override bool Equals(object other) {
      return Equals(other as MessageContainingEnumCalledType);
    }

    public bool Equals(MessageContainingEnumCalledType other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (!Type.Equals(other.Type)) return false;
      return true;
    }

    public override int GetHashCode() {
      int hash = 1;
      hash ^= Type.GetHashCode();
      return hash;
    }

    public void WriteTo(pb::CodedOutputStream output) {
      type_.WriteTo(output, _map_type_codec);
    }

    public int CalculateSize() {
      int size = 0;
      size += type_.CalculateSize(_map_type_codec);
      return size;
    }

    public void MergeFrom(MessageContainingEnumCalledType other) {
      if (other == null) {
        return;
      }
      type_.Add(other.type_);
    }

    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while (input.ReadTag(out tag)) {
        switch(tag) {
          case 0:
            throw pb::InvalidProtocolBufferException.InvalidTag();
          default:
            if (pb::WireFormat.IsEndGroupTag(tag)) {
              return;
            }
            break;
          case 10: {
            type_.AddEntriesFrom(input, _map_type_codec);
            break;
          }
        }
      }
    }

    #region Nested types
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
    public static partial class Types {
      public enum Type {
        TYPE_FOO = 0,
      }

      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
      public sealed partial class TypeEntry : pb::IMessage<TypeEntry> {
        private static readonly pb::MessageParser<TypeEntry> _parser = new pb::MessageParser<TypeEntry>(() => new TypeEntry());
        public static pb::MessageParser<TypeEntry> Parser { get { return _parser; } }

        private static readonly string[] _fieldNames = new string[] { "key", "value" };
        private static readonly uint[] _fieldTags = new uint[] { 8, 18 };
        public static pbd::MessageDescriptor Descriptor {
          get { return global::Google.Protobuf.TestProtos.MessageContainingEnumCalledType.Descriptor.NestedTypes[0]; }
        }

        public pb::FieldAccess.FieldAccessorTable Fields {
          get { return global::Google.Protobuf.TestProtos.MapUnittestProto3.internal__static_protobuf_unittest_MessageContainingEnumCalledType_TypeEntry__FieldAccessorTable; }
        }

        private bool _frozen = false;
        public bool IsFrozen { get { return _frozen; } }

        public TypeEntry() { }

        public TypeEntry(TypeEntry other) {
          key_ = other.key_;
          Value = other.value_ != null ? other.Value.Clone() : null;
        }

        public TypeEntry Clone() {
          return new TypeEntry(this);
        }

        public void Freeze() {
          if (IsFrozen) {
            return;
          }
          _frozen = true;
          if (value_ != null) Value.Freeze();
        }

        public const int KeyFieldNumber = 1;
        private int key_;
        public int Key {
          get { return key_; }
          set {
            pb::Freezable.CheckMutable(this);
            key_ = value;
          }
        }

        public const int ValueFieldNumber = 2;
        private global::Google.Protobuf.TestProtos.MessageContainingEnumCalledType value_;
        public global::Google.Protobuf.TestProtos.MessageContainingEnumCalledType Value {
          get { return value_; }
          set {
            pb::Freezable.CheckMutable(this);
            value_ = value;
          }
        }

        public override bool Equals(object other) {
          return Equals(other as TypeEntry);
        }

        public bool Equals(TypeEntry other) {
          if (ReferenceEquals(other, null)) {
            return false;
          }
          if (ReferenceEquals(other, this)) {
            return true;
          }
          if (Key != other.Key) return false;
          if (!object.Equals(Value, other.Value)) return false;
          return true;
        }

        public override int GetHashCode() {
          int hash = 1;
          if (Key != 0) hash ^= Key.GetHashCode();
          if (value_ != null) hash ^= Value.GetHashCode();
          return hash;
        }

        public void WriteTo(pb::CodedOutputStream output) {
          if (Key != 0) {
            output.WriteRawTag(8);
            output.WriteInt32(Key);
          }
          if (value_ != null) {
            output.WriteRawTag(18);
            output.WriteMessage(Value);
          }
        }

        public int CalculateSize() {
          int size = 0;
          if (Key != 0) {
            size += 1 + pb::CodedOutputStream.ComputeInt32Size(Key);
          }
          if (value_ != null) {
            size += 1 + pb::CodedOutputStream.ComputeMessageSize(Value);
          }
          return size;
        }

        public void MergeFrom(TypeEntry other) {
          if (other == null) {
            return;
          }
          if (other.Key != 0) {
            Key = other.Key;
          }
          if (other.value_ != null) {
            if (value_ == null) {
              value_ = new global::Google.Protobuf.TestProtos.MessageContainingEnumCalledType();
            }
            Value.MergeFrom(other.Value);
          }
        }

        public void MergeFrom(pb::CodedInputStream input) {
          uint tag;
          while (input.ReadTag(out tag)) {
            switch(tag) {
              case 0:
                throw pb::InvalidProtocolBufferException.InvalidTag();
              default:
                if (pb::WireFormat.IsEndGroupTag(tag)) {
                  return;
                }
                break;
              case 8: {
                Key = input.ReadInt32();
                break;
              }
              case 18: {
                if (value_ == null) {
                  value_ = new global::Google.Protobuf.TestProtos.MessageContainingEnumCalledType();
                }
                input.ReadMessage(value_);
                break;
              }
            }
          }
        }

      }

    }
    #endregion

  }

  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
  public sealed partial class MessageContainingMapCalledEntry : pb::IMessage<MessageContainingMapCalledEntry> {
    private static readonly pb::MessageParser<MessageContainingMapCalledEntry> _parser = new pb::MessageParser<MessageContainingMapCalledEntry>(() => new MessageContainingMapCalledEntry());
    public static pb::MessageParser<MessageContainingMapCalledEntry> Parser { get { return _parser; } }

    private static readonly string[] _fieldNames = new string[] { "entry" };
    private static readonly uint[] _fieldTags = new uint[] { 10 };
    public static pbd::MessageDescriptor Descriptor {
      get { return global::Google.Protobuf.TestProtos.MapUnittestProto3.Descriptor.MessageTypes[6]; }
    }

    public pb::FieldAccess.FieldAccessorTable Fields {
      get { return global::Google.Protobuf.TestProtos.MapUnittestProto3.internal__static_protobuf_unittest_MessageContainingMapCalledEntry__FieldAccessorTable; }
    }

    private bool _frozen = false;
    public bool IsFrozen { get { return _frozen; } }

    public MessageContainingMapCalledEntry() { }

    public MessageContainingMapCalledEntry(MessageContainingMapCalledEntry other) {
      entry_ = other.entry_.Clone();
    }

    public MessageContainingMapCalledEntry Clone() {
      return new MessageContainingMapCalledEntry(this);
    }

    public void Freeze() {
      if (IsFrozen) {
        return;
      }
      _frozen = true;
      entry_.Freeze();
    }

    public const int EntryFieldNumber = 1;
    private static readonly pbc::MapField<int, int>.Codec _map_entry_codec
        = new pbc::MapField<int, int>.Codec(pb::FieldCodec.ForInt32(8), pb::FieldCodec.ForInt32(16), 10);
    private readonly pbc::MapField<int, int> entry_ = new pbc::MapField<int, int>();
    public pbc::MapField<int, int> Entry {
      get { return entry_; }
    }

    public override bool Equals(object other) {
      return Equals(other as MessageContainingMapCalledEntry);
    }

    public bool Equals(MessageContainingMapCalledEntry other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (!Entry.Equals(other.Entry)) return false;
      return true;
    }

    public override int GetHashCode() {
      int hash = 1;
      hash ^= Entry.GetHashCode();
      return hash;
    }

    public void WriteTo(pb::CodedOutputStream output) {
      entry_.WriteTo(output, _map_entry_codec);
    }

    public int CalculateSize() {
      int size = 0;
      size += entry_.CalculateSize(_map_entry_codec);
      return size;
    }

    public void MergeFrom(MessageContainingMapCalledEntry other) {
      if (other == null) {
        return;
      }
      entry_.Add(other.entry_);
    }

    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while (input.ReadTag(out tag)) {
        switch(tag) {
          case 0:
            throw pb::InvalidProtocolBufferException.InvalidTag();
          default:
            if (pb::WireFormat.IsEndGroupTag(tag)) {
              return;
            }
            break;
          case 10: {
            entry_.AddEntriesFrom(input, _map_entry_codec);
            break;
          }
        }
      }
    }

    #region Nested types
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
    public static partial class Types {
      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
      public sealed partial class EntryEntry : pb::IMessage<EntryEntry> {
        private static readonly pb::MessageParser<EntryEntry> _parser = new pb::MessageParser<EntryEntry>(() => new EntryEntry());
        public static pb::MessageParser<EntryEntry> Parser { get { return _parser; } }

        private static readonly string[] _fieldNames = new string[] { "key", "value" };
        private static readonly uint[] _fieldTags = new uint[] { 8, 16 };
        public static pbd::MessageDescriptor Descriptor {
          get { return global::Google.Protobuf.TestProtos.MessageContainingMapCalledEntry.Descriptor.NestedTypes[0]; }
        }

        public pb::FieldAccess.FieldAccessorTable Fields {
          get { return global::Google.Protobuf.TestProtos.MapUnittestProto3.internal__static_protobuf_unittest_MessageContainingMapCalledEntry_EntryEntry__FieldAccessorTable; }
        }

        private bool _frozen = false;
        public bool IsFrozen { get { return _frozen; } }

        public EntryEntry() { }

        public EntryEntry(EntryEntry other) {
          key_ = other.key_;
          value_ = other.value_;
        }

        public EntryEntry Clone() {
          return new EntryEntry(this);
        }

        public void Freeze() {
          if (IsFrozen) {
            return;
          }
          _frozen = true;
        }

        public const int KeyFieldNumber = 1;
        private int key_;
        public int Key {
          get { return key_; }
          set {
            pb::Freezable.CheckMutable(this);
            key_ = value;
          }
        }

        public const int ValueFieldNumber = 2;
        private int value_;
        public int Value {
          get { return value_; }
          set {
            pb::Freezable.CheckMutable(this);
            value_ = value;
          }
        }

        public override bool Equals(object other) {
          return Equals(other as EntryEntry);
        }

        public bool Equals(EntryEntry other) {
          if (ReferenceEquals(other, null)) {
            return false;
          }
          if (ReferenceEquals(other, this)) {
            return true;
          }
          if (Key != other.Key) return false;
          if (Value != other.Value) return false;
          return true;
        }

        public override int GetHashCode() {
          int hash = 1;
          if (Key != 0) hash ^= Key.GetHashCode();
          if (Value != 0) hash ^= Value.GetHashCode();
          return hash;
        }

        public void WriteTo(pb::CodedOutputStream output) {
          if (Key != 0) {
            output.WriteRawTag(8);
            output.WriteInt32(Key);
          }
          if (Value != 0) {
            output.WriteRawTag(16);
            output.WriteInt32(Value);
          }
        }

        public int CalculateSize() {
          int size = 0;
          if (Key != 0) {
            size += 1 + pb::CodedOutputStream.ComputeInt32Size(Key);
          }
          if (Value != 0) {
            size += 1 + pb::CodedOutputStream.ComputeInt32Size(Value);
          }
          return size;
        }

        public void MergeFrom(EntryEntry other) {
          if (other == null) {
            return;
          }
          if (other.Key != 0) {
            Key = other.Key;
          }
          if (other.Value != 0) {
            Value = other.Value;
          }
        }

        public void MergeFrom(pb::CodedInputStream input) {
          uint tag;
          while (input.ReadTag(out tag)) {
            switch(tag) {
              case 0:
                throw pb::InvalidProtocolBufferException.InvalidTag();
              default:
                if (pb::WireFormat.IsEndGroupTag(tag)) {
                  return;
                }
                break;
              case 8: {
                Key = input.ReadInt32();
                break;
              }
              case 16: {
                Value = input.ReadInt32();
                break;
              }
            }
          }
        }

      }

    }
    #endregion

  }

  #endregion

}

#endregion Designer generated code