// Protocol Buffers - Google's data interchange format
// Copyright 2008 Google Inc.  All rights reserved.
//
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file or at
// https://developers.google.com/open-source/licenses/bsd

// Author: kenton@google.com (Kenton Varda)
//  Based on original Protocol Buffers design by
//  Sanjay Ghemawat, Jeff Dean, and others.
//
// A proto file we will use for unit testing.
//
// LINT: ALLOW_GROUPS, LEGACY_NAMES

syntax = "proto2";

// Some generic_services option(s) added automatically.
// See:  http://go/proto2-generic-services-default
option cc_generic_services = true;     // auto-added
option java_generic_services = true;   // auto-added
option py_generic_services = true;     // auto-added
option cc_enable_arenas = true;

import "google/protobuf/unittest_import.proto";

// We don't put this in a package within proto2 because we need to make sure
// that the generated code doesn't depend on being in the proto2 namespace.
// In test_util.h we do "using namespace unittest = protobuf_unittest".
package protobuf_unittest;

// Protos optimized for SPEED use a strict superset of the generated code
// of equivalent ones optimized for CODE_SIZE, so we should optimize all our
// tests for speed unless explicitly testing code size optimization.
option optimize_for = SPEED;

option java_outer_classname = "UnittestProto";

// This proto includes every type of field in both singular and repeated
// forms.
message TestAllTypes {
  message NestedMessage {
    // The field name "b" fails to compile in proto1 because it conflicts with
    // a local variable named "b" in one of the generated methods.  Doh.
    // This file needs to compile in proto1 to test backwards-compatibility.
    optional int32 bb = 1;
  }

  enum NestedEnum {
    FOO = 1;
    BAR = 2;
    BAZ = 3;
    NEG = -1;  // Intentionally negative.
  }

  // Singular
  optional    int32 optional_int32    =  1;
  optional    int64 optional_int64    =  2;
  optional   uint32 optional_uint32   =  3;
  optional   uint64 optional_uint64   =  4;
  optional   sint32 optional_sint32   =  5;
  optional   sint64 optional_sint64   =  6;
  optional  fixed32 optional_fixed32  =  7;
  optional  fixed64 optional_fixed64  =  8;
  optional sfixed32 optional_sfixed32 =  9;
  optional sfixed64 optional_sfixed64 = 10;
  optional    float optional_float    = 11;
  optional   double optional_double   = 12;
  optional     bool optional_bool     = 13;
  optional   string optional_string   = 14;
  optional    bytes optional_bytes    = 15;

  optional group OptionalGroup = 16 {
    optional int32 a = 17;
  }

  optional NestedMessage                        optional_nested_message  = 18;
  optional ForeignMessage                       optional_foreign_message = 19;
  optional protobuf_unittest_import.ImportMessage optional_import_message  = 20;

  optional NestedEnum                           optional_nested_enum     = 21;
  optional ForeignEnum                          optional_foreign_enum    = 22;
  optional protobuf_unittest_import.ImportEnum    optional_import_enum     = 23;

  optional string optional_string_piece = 24 [ctype=STRING_PIECE];
  optional string optional_cord = 25 [ctype=CORD];

  // Defined in unittest_import_public.proto
  optional protobuf_unittest_import.PublicImportMessage
      optional_public_import_message = 26;

  optional NestedMessage optional_lazy_message = 27 [lazy=true];
  optional NestedMessage optional_unverified_lazy_message = 28 [unverified_lazy=true];

  // Repeated
  repeated    int32 repeated_int32    = 31;
  repeated    int64 repeated_int64    = 32;
  repeated   uint32 repeated_uint32   = 33;
  repeated   uint64 repeated_uint64   = 34;
  repeated   sint32 repeated_sint32   = 35;
  repeated   sint64 repeated_sint64   = 36;
  repeated  fixed32 repeated_fixed32  = 37;
  repeated  fixed64 repeated_fixed64  = 38;
  repeated sfixed32 repeated_sfixed32 = 39;
  repeated sfixed64 repeated_sfixed64 = 40;
  repeated    float repeated_float    = 41;
  repeated   double repeated_double   = 42;
  repeated     bool repeated_bool     = 43;
  repeated   string repeated_string   = 44;
  repeated    bytes repeated_bytes    = 45;

  repeated group RepeatedGroup = 46 {
    optional int32 a = 47;
  }

  repeated NestedMessage                        repeated_nested_message  = 48;
  repeated ForeignMessage                       repeated_foreign_message = 49;
  repeated protobuf_unittest_import.ImportMessage repeated_import_message  = 50;

  repeated NestedEnum                           repeated_nested_enum     = 51;
  repeated ForeignEnum                          repeated_foreign_enum    = 52;
  repeated protobuf_unittest_import.ImportEnum    repeated_import_enum     = 53;

  repeated string repeated_string_piece = 54 [ctype=STRING_PIECE];
  repeated string repeated_cord = 55 [ctype=CORD];

  repeated NestedMessage repeated_lazy_message = 57 ;

  // Singular with defaults
  optional    int32 default_int32    = 61 [default =  41    ];
  optional    int64 default_int64    = 62 [default =  42    ];
  optional   uint32 default_uint32   = 63 [default =  43    ];
  optional   uint64 default_uint64   = 64 [default =  44    ];
  optional   sint32 default_sint32   = 65 [default = -45    ];
  optional   sint64 default_sint64   = 66 [default =  46    ];
  optional  fixed32 default_fixed32  = 67 [default =  47    ];
  optional  fixed64 default_fixed64  = 68 [default =  48    ];
  optional sfixed32 default_sfixed32 = 69 [default =  49    ];
  optional sfixed64 default_sfixed64 = 70 [default = -50    ];
  optional    float default_float    = 71 [default =  51.5  ];
  optional   double default_double   = 72 [default =  52e3  ];
  optional     bool default_bool     = 73 [default = true   ];
  optional   string default_string   = 74 [default = "hello"];
  optional    bytes default_bytes    = 75 [default = "world"];

  optional NestedEnum  default_nested_enum  = 81 [default = BAR        ];
  optional ForeignEnum default_foreign_enum = 82 [default = FOREIGN_BAR];
  optional protobuf_unittest_import.ImportEnum
      default_import_enum = 83 [default = IMPORT_BAR];

  optional string default_string_piece = 84 [ctype=STRING_PIECE,default="abc"];
  optional string default_cord = 85 [ctype=CORD,default="123"];

  // For oneof test
  oneof oneof_field {
    uint32 oneof_uint32 = 111;
    NestedMessage oneof_nested_message = 112;
    string oneof_string = 113;
    bytes oneof_bytes = 114;
    string oneof_cord = 115 [ctype=CORD];
    string oneof_string_piece = 116 [ctype=STRING_PIECE];
    NestedMessage oneof_lazy_nested_message = 117 [lazy=true];
  }
}

// This proto includes a recursively nested message.
message NestedTestAllTypes {
  optional NestedTestAllTypes child = 1;
  optional TestAllTypes payload = 2;
  repeated NestedTestAllTypes repeated_child = 3;
  optional NestedTestAllTypes lazy_child = 4 [lazy=true];
  optional TestAllTypes eager_child = 5 [lazy=false];
}

message TestDeprecatedFields {
  optional int32 deprecated_int32 = 1 [deprecated=true];
  repeated string deprecated_repeated_string = 4 [deprecated=true];
  optional TestAllTypes.NestedMessage deprecated_message = 3 [deprecated=true];
  oneof oneof_fields {
    int32 deprecated_int32_in_oneof = 2 [deprecated=true];
  }
  optional TestDeprecatedFields nested = 5;
}

message TestDeprecatedMessage {
  option deprecated = true;
}

// Define these after TestAllTypes to make sure the compiler can handle
// that.
message ForeignMessage {
  optional int32 c = 1;
  optional int32 d = 2;
}

enum ForeignEnum {
  FOREIGN_FOO = 4;
  FOREIGN_BAR = 5;
  FOREIGN_BAZ = 6;
  FOREIGN_BAX = 32;  // (1 << 32) to generate a 64b bitmask would be incorrect.
  FOREIGN_LARGE = 123456;  // Large enough to escape the Boxed Integer cache.
}

message TestReservedFields {
  reserved 2, 15, 9 to 11;
  reserved "bar", "baz";
}

enum TestReservedEnumFields {
  UNKNOWN = 0;
  reserved 2, 15, 9 to 11;
  reserved "bar", "baz";
}

message TestAllExtensions {
  extensions 1 to max;
}

extend TestAllExtensions {
  // Singular
  optional    int32 optional_int32_extension    =  1;
  optional    int64 optional_int64_extension    =  2;
  optional   uint32 optional_uint32_extension   =  3;
  optional   uint64 optional_uint64_extension   =  4;
  optional   sint32 optional_sint32_extension   =  5;
  optional   sint64 optional_sint64_extension   =  6;
  optional  fixed32 optional_fixed32_extension  =  7;
  optional  fixed64 optional_fixed64_extension  =  8;
  optional sfixed32 optional_sfixed32_extension =  9;
  optional sfixed64 optional_sfixed64_extension = 10;
  optional    float optional_float_extension    = 11;
  optional   double optional_double_extension   = 12;
  optional     bool optional_bool_extension     = 13;
  optional   string optional_string_extension   = 14;
  optional    bytes optional_bytes_extension    = 15;

  optional group OptionalGroup_extension = 16 {
    optional int32 a = 17;
  }

  optional TestAllTypes.NestedMessage optional_nested_message_extension = 18;
  optional ForeignMessage optional_foreign_message_extension = 19;
  optional protobuf_unittest_import.ImportMessage
    optional_import_message_extension = 20;

  optional TestAllTypes.NestedEnum optional_nested_enum_extension = 21;
  optional ForeignEnum optional_foreign_enum_extension = 22;
  optional protobuf_unittest_import.ImportEnum
    optional_import_enum_extension = 23;

  optional string optional_string_piece_extension = 24 [ctype=STRING_PIECE];
  // TODO: ctype=CORD is not supported for extension. Add
  // ctype=CORD option back after it is supported.
  optional string optional_cord_extension = 25;

  optional protobuf_unittest_import.PublicImportMessage
    optional_public_import_message_extension = 26;

  optional TestAllTypes.NestedMessage
    optional_lazy_message_extension = 27 [lazy=true];
  optional TestAllTypes.NestedMessage
    optional_unverified_lazy_message_extension = 28 [unverified_lazy=true];

  // Repeated
  repeated    int32 repeated_int32_extension    = 31;
  repeated    int64 repeated_int64_extension    = 32;
  repeated   uint32 repeated_uint32_extension   = 33;
  repeated   uint64 repeated_uint64_extension   = 34;
  repeated   sint32 repeated_sint32_extension   = 35;
  repeated   sint64 repeated_sint64_extension   = 36;
  repeated  fixed32 repeated_fixed32_extension  = 37;
  repeated  fixed64 repeated_fixed64_extension  = 38;
  repeated sfixed32 repeated_sfixed32_extension = 39;
  repeated sfixed64 repeated_sfixed64_extension = 40;
  repeated    float repeated_float_extension    = 41;
  repeated   double repeated_double_extension   = 42;
  repeated     bool repeated_bool_extension     = 43;
  repeated   string repeated_string_extension   = 44;
  repeated    bytes repeated_bytes_extension    = 45;

  repeated group RepeatedGroup_extension = 46 {
    optional int32 a = 47;
  }

  repeated TestAllTypes.NestedMessage repeated_nested_message_extension = 48;
  repeated ForeignMessage repeated_foreign_message_extension = 49;
  repeated protobuf_unittest_import.ImportMessage
    repeated_import_message_extension = 50;

  repeated TestAllTypes.NestedEnum repeated_nested_enum_extension = 51;
  repeated ForeignEnum repeated_foreign_enum_extension = 52;
  repeated protobuf_unittest_import.ImportEnum
    repeated_import_enum_extension = 53;

  repeated string repeated_string_piece_extension = 54 [ctype=STRING_PIECE];
  // TODO: ctype=CORD is not supported for extension. Add
  // ctype=CORD option back after it is supported.
  repeated string repeated_cord_extension = 55;

  repeated TestAllTypes.NestedMessage
    repeated_lazy_message_extension = 57 [lazy=true];

  // Singular with defaults
  optional    int32 default_int32_extension    = 61 [default =  41    ];
  optional    int64 default_int64_extension    = 62 [default =  42    ];
  optional   uint32 default_uint32_extension   = 63 [default =  43    ];
  optional   uint64 default_uint64_extension   = 64 [default =  44    ];
  optional   sint32 default_sint32_extension   = 65 [default = -45    ];
  optional   sint64 default_sint64_extension   = 66 [default =  46    ];
  optional  fixed32 default_fixed32_extension  = 67 [default =  47    ];
  optional  fixed64 default_fixed64_extension  = 68 [default =  48    ];
  optional sfixed32 default_sfixed32_extension = 69 [default =  49    ];
  optional sfixed64 default_sfixed64_extension = 70 [default = -50    ];
  optional    float default_float_extension    = 71 [default =  51.5  ];
  optional   double default_double_extension   = 72 [default =  52e3  ];
  optional     bool default_bool_extension     = 73 [default = true   ];
  optional   string default_string_extension   = 74 [default = "hello"];
  optional    bytes default_bytes_extension    = 75 [default = "world"];

  optional TestAllTypes.NestedEnum
    default_nested_enum_extension = 81 [default = BAR];
  optional ForeignEnum
    default_foreign_enum_extension = 82 [default = FOREIGN_BAR];
  optional protobuf_unittest_import.ImportEnum
    default_import_enum_extension = 83 [default = IMPORT_BAR];

  optional string default_string_piece_extension = 84 [ctype=STRING_PIECE,
                                                       default="abc"];
  // TODO: ctype=CORD is not supported for extension. Add
  // ctype=CORD option back after it is supported.
  optional string default_cord_extension = 85 [default="123"];

  // For oneof test
  optional uint32 oneof_uint32_extension = 111;
  optional TestAllTypes.NestedMessage oneof_nested_message_extension = 112;
  optional string oneof_string_extension = 113;
  optional bytes oneof_bytes_extension = 114;
}

message TestMixedFieldsAndExtensions {
  optional int32 a = 1;
  repeated fixed32 b = 3;
  extensions 2, 4;
  extend TestMixedFieldsAndExtensions {
    optional int32 c = 2;
    repeated fixed32 d = 4;
  }
}

message TestGroup {
  optional group OptionalGroup = 16 {
    optional int32 a = 17;
    optional int32 zz = 89;  // fast table size must be at least 16, for this
                             // field to be parsed by the fast parser, since
                             // 89 - 17 = 72 is a multiple of 8.
  }
  optional ForeignEnum optional_foreign_enum = 22;
}

message TestGroupExtension {
  extensions 1 to max;
}

message TestNestedExtension {
  extend TestAllExtensions {
    // Check for bug where string extensions declared in tested scope did not
    // compile.
    optional string test = 1002 [default="test"];
    // Used to test if generated extension name is correct when there are
    // underscores.
    optional string nested_string_extension = 1003;
  }

  extend TestGroupExtension {
    optional group OptionalGroup_extension = 16 {
      optional int32 a = 17;
    }
    optional ForeignEnum optional_foreign_enum_extension = 22;
  }
}

message TestChildExtension {
  optional string a = 1;
  optional string b = 2;
  optional TestAllExtensions optional_extension = 3;
}

// Emulates wireformat data of TestChildExtension with dynamic extension
// (DynamicExtension).
message TestChildExtensionData {
  message NestedTestAllExtensionsData {
    message NestedDynamicExtensions {
      optional int32 a = 1;
      optional int32 b = 2;
    }
    optional NestedDynamicExtensions dynamic = 409707008;
  }
  optional string a = 1;
  optional string b = 2;
  optional NestedTestAllExtensionsData optional_extension = 3;
}

message TestNestedChildExtension {
  optional int32 a = 1;
  optional TestChildExtension child = 2;
}

// Emulates wireformat data of TestNestedChildExtension with dynamic extension
// (DynamicExtension).
message TestNestedChildExtensionData {
  optional int32 a = 1;
  optional TestChildExtensionData child = 2;
}

// Required and closed enum fields are considered unknown fields if the value is
// not valid. We need to make sure it functions as expected.
message TestRequiredEnum {
  required ForeignEnum required_enum = 1;

  // A dummy optional field.
  optional int32 a = 2;
}

// TestRequiredEnum + using enum values that won't fit to 64 bitmask.
message TestRequiredEnumNoMask {
  enum NestedEnum {
    UNSPECIFIED = 0;
    FOO = 2;
    BAR = 100;
    BAZ = -1;  // Intentionally negative.
  }

  required NestedEnum required_enum = 1;

  // A dummy optional field.
  optional int32 a = 2;
}

message TestRequiredEnumMulti {
  enum NestedEnum {
    UNSPECIFIED = 0;
    FOO = 1;
    BAR = 2;
    BAZ = 100;
  }

  // Intentionally placed in descending field number to force sorting in closed
  // enum verification.
  required NestedEnum required_enum_4 = 4;
  optional int32 a_3 = 3;
  required NestedEnum required_enum_2 = 2;
  required ForeignEnum required_enum_1 = 1;
}

message TestRequiredNoMaskMulti {
  enum NestedEnum {
    UNSPECIFIED = 0;
    FOO = 1;
    BAR = 2;
    BAZ = 100;
  }

  // Intentionally placed in descending field number to force sorting in closed
  // enum verification. Also, using large field numbers to use tag only
  // matching for required fields.
  required fixed32 required_fixed32_80 = 80;
  required fixed32 required_fixed32_70 = 70;

  required NestedEnum required_enum_64 = 64;
  required NestedEnum required_enum_4 = 4;
  optional int32 a_3 = 3;
  required NestedEnum required_enum_2 = 2;
  required ForeignEnum required_enum_1 = 1;
}

// We have separate messages for testing required fields because it's
// annoying to have to fill in required fields in TestProto in order to
// do anything with it.  Note that we don't need to test every type of
// required filed because the code output is basically identical to
// optional fields for all types.
message TestRequired {
  required int32 a = 1;
  optional int32 dummy2 = 2;
  required int32 b = 3;

  extend TestAllExtensions {
    optional TestRequired single = 1000;
    repeated TestRequired multi  = 1001;
  }

  // Pad the field count to 32 so that we can test that IsInitialized()
  // properly checks multiple elements of has_bits_.
  optional int32 dummy4  =  4;
  optional int32 dummy5  =  5;
  optional int32 dummy6  =  6;
  optional int32 dummy7  =  7;
  optional int32 dummy8  =  8;
  optional int32 dummy9  =  9;
  optional int32 dummy10 = 10;
  optional int32 dummy11 = 11;
  optional int32 dummy12 = 12;
  optional int32 dummy13 = 13;
  optional int32 dummy14 = 14;
  optional int32 dummy15 = 15;
  optional int32 dummy16 = 16;
  optional int32 dummy17 = 17;
  optional int32 dummy18 = 18;
  optional int32 dummy19 = 19;
  optional int32 dummy20 = 20;
  optional int32 dummy21 = 21;
  optional int32 dummy22 = 22;
  optional int32 dummy23 = 23;
  optional int32 dummy24 = 24;
  optional int32 dummy25 = 25;
  optional int32 dummy26 = 26;
  optional int32 dummy27 = 27;
  optional int32 dummy28 = 28;
  optional int32 dummy29 = 29;
  optional int32 dummy30 = 30;
  optional int32 dummy31 = 31;
  optional int32 dummy32 = 32;

  required int32 c = 33;

  // Add an optional child message to make this non-trivial for go/pdlazy.
  optional ForeignMessage optional_foreign = 34;
}

message TestRequiredForeign {
  optional TestRequired optional_message = 1;
  repeated TestRequired repeated_message = 2;
  optional int32 dummy = 3;

  // Missing required fields must not affect verification of child messages.
  optional NestedTestAllTypes optional_lazy_message = 4 [lazy = true];
}

message TestRequiredMessage {
  optional TestRequired optional_message = 1;
  repeated TestRequired repeated_message = 2;
  required TestRequired required_message = 3;
}

message TestNestedRequiredForeign {
  optional TestNestedRequiredForeign child = 1;
  optional TestRequiredForeign payload = 2;
  optional int32 dummy = 3;
  // optional message to test required closed enum.
  optional TestRequiredEnum required_enum = 5;
  optional TestRequiredEnumNoMask required_enum_no_mask = 6;
  optional TestRequiredEnumMulti required_enum_multi = 7;
  optional TestRequiredNoMaskMulti required_no_mask = 9;
}

// Test that we can use NestedMessage from outside TestAllTypes.
message TestForeignNested {
  optional TestAllTypes.NestedMessage foreign_nested = 1;
}

// TestEmptyMessage is used to test unknown field support.
message TestEmptyMessage {
}

// Like above, but declare all field numbers as potential extensions.  No
// actual extensions should ever be defined for this type.
message TestEmptyMessageWithExtensions {
  extensions 1 to max;
}

// Needed for a Python test.
message TestPickleNestedMessage {
  message NestedMessage {
    optional int32 bb = 1;
    message NestedNestedMessage {
      optional int32 cc = 1;
    }
  }
}

message TestMultipleExtensionRanges {
  extensions 42;
  extensions 4143 to 4243;
  extensions 65536 to max;
}

// Test that really large tag numbers don't break anything.
message TestReallyLargeTagNumber {
  // The largest possible tag number is 2^28 - 1, since the wire format uses
  // three bits to communicate wire type.
  optional int32 a = 1;
  optional int32 bb = 268435455;
}

message TestRecursiveMessage {
  optional TestRecursiveMessage a = 1;
  optional int32 i = 2;
}

// Test that mutual recursion works.
message TestMutualRecursionA {
  message SubMessage {
    optional TestMutualRecursionB b = 1;
  }
  optional TestMutualRecursionB bb = 1;
  optional group SubGroup = 2 {
    optional SubMessage sub_message = 3;  // Needed because of bug in javatest
    optional TestAllTypes not_in_this_scc = 4;
  }
  repeated group SubGroupR = 5 {
    optional TestAllTypes payload = 6;
  }
}

message TestMutualRecursionB {
  optional TestMutualRecursionA a = 1;
  optional int32 optional_int32 = 2;
}

message TestIsInitialized {
  message SubMessage {
    optional group SubGroup = 1 {
      required int32 i = 2;
    }
  }
  optional SubMessage sub_message = 1;
}

// Test that groups have disjoint field numbers from their siblings and
// parents.  This is NOT possible in proto1; only google.protobuf.  When attempting
// to compile with proto1, this will emit an error; so we only include it
// in protobuf_unittest_proto.
message TestDupFieldNumber {                        // NO_PROTO1
  optional int32 a = 1;                             // NO_PROTO1
  optional group Foo = 2 { optional int32 a = 1; }  // NO_PROTO1
  optional group Bar = 3 { optional int32 a = 1; }  // NO_PROTO1
}                                                   // NO_PROTO1

// Additional messages for testing lazy fields.
message TestEagerMessage {
  optional TestAllTypes sub_message = 1 [lazy=false];
}
message TestLazyMessage {
  optional TestAllTypes sub_message = 1 [lazy=true];
}
message TestLazyMessageRepeated {
  repeated TestLazyMessage repeated_message = 1;
}
message TestEagerMaybeLazy {
  message NestedMessage {
    optional TestPackedTypes packed = 1;
  }
  optional TestAllTypes message_foo = 1;
  optional TestAllTypes message_bar = 2;
  optional NestedMessage message_baz = 3;
}
// Needed for a Python test.
message TestNestedMessageHasBits {
  message NestedMessage {
    repeated int32 nestedmessage_repeated_int32 = 1;
    repeated ForeignMessage nestedmessage_repeated_foreignmessage = 2;
  }
  optional NestedMessage optional_nested_message = 1;
}


// Test an enum that has multiple values with the same number.
enum TestEnumWithDupValue {
  option allow_alias = true;

  FOO1 = 1;
  BAR1 = 2;
  BAZ = 3;
  FOO2 = 1;
  BAR2 = 2;
}

// Test an enum with large, unordered values.
enum TestSparseEnum {
  SPARSE_A = 123;
  SPARSE_B = 62374;
  SPARSE_C = 12589234;
  SPARSE_D = -15;
  SPARSE_E = -53452;
  SPARSE_F = 0;
  SPARSE_G = 2;
}

// Test message with CamelCase field names.  This violates Protocol Buffer
// standard style.
message TestCamelCaseFieldNames {
  optional int32 PrimitiveField = 1;
  optional string StringField = 2;
  optional ForeignEnum EnumField = 3;
  optional ForeignMessage MessageField = 4;
  optional string StringPieceField = 5 [ctype=STRING_PIECE];
  optional string CordField = 6 [ctype=CORD];

  repeated int32 RepeatedPrimitiveField = 7;
  repeated string RepeatedStringField = 8;
  repeated ForeignEnum RepeatedEnumField = 9;
  repeated ForeignMessage RepeatedMessageField = 10;
  repeated string RepeatedStringPieceField = 11 [ctype=STRING_PIECE];
  repeated string RepeatedCordField = 12 [ctype=CORD];
}


// We list fields out of order, to ensure that we're using field number and not
// field index to determine serialization order.
message TestFieldOrderings {
  optional string my_string = 11;
  extensions 2 to 10;
  optional int64 my_int = 1;
  extensions 12 to 100;
  optional float my_float = 101;
  message NestedMessage {
    optional int64 oo = 2;
    // The field name "b" fails to compile in proto1 because it conflicts with
    // a local variable named "b" in one of the generated methods.  Doh.
    // This file needs to compile in proto1 to test backwards-compatibility.
    optional int32 bb = 1;
  }

  optional NestedMessage optional_nested_message  = 200;
}

extend TestFieldOrderings {
  optional string my_extension_string = 50;
  optional int32 my_extension_int = 5;
}

message TestExtensionOrderings1 {
  extend TestFieldOrderings {
    optional TestExtensionOrderings1 test_ext_orderings1 = 13;
  }
  optional string my_string = 1;
}

message TestExtensionOrderings2 {
  extend TestFieldOrderings {
    optional TestExtensionOrderings2 test_ext_orderings2 = 12;
  }
  message TestExtensionOrderings3 {
    extend TestFieldOrderings {
      optional TestExtensionOrderings3 test_ext_orderings3 = 14;
    }
    optional string my_string = 1;
  }
  optional string my_string = 1;
}

message TestExtremeDefaultValues {
  optional bytes escaped_bytes = 1 [default = "\0\001\a\b\f\n\r\t\v\\\'\"\xfe"];
  optional uint32 large_uint32 = 2 [default = 0xFFFFFFFF];
  optional uint64 large_uint64 = 3 [default = 0xFFFFFFFFFFFFFFFF];
  optional  int32 small_int32  = 4 [default = -0x7FFFFFFF];
  optional  int64 small_int64  = 5 [default = -0x7FFFFFFFFFFFFFFF];
  optional  int32 really_small_int32 = 21 [default = -0x80000000];
  optional  int64 really_small_int64 = 22 [default = -0x8000000000000000];

  // The default value here is UTF-8 for "\u1234".  (We could also just type
  // the UTF-8 text directly into this text file rather than escape it, but
  // lots of people use editors that would be confused by this.)
  optional string utf8_string = 6 [default = "\341\210\264"];

  // Tests for single-precision floating-point values.
  optional float zero_float = 7 [default = 0];
  optional float one_float = 8 [default = 1];
  optional float small_float = 9 [default = 1.5];
  optional float negative_one_float = 10 [default = -1];
  optional float negative_float = 11 [default = -1.5];
  // Using exponents
  optional float large_float = 12 [default = 2E8];
  optional float small_negative_float = 13 [default = -8e-28];

  // Text for nonfinite floating-point values.
  optional double inf_double = 14 [default = inf];
  optional double neg_inf_double = 15 [default = -inf];
  optional double nan_double = 16 [default = nan];
  optional float inf_float = 17 [default = inf];
  optional float neg_inf_float = 18 [default = -inf];
  optional float nan_float = 19 [default = nan];

  // Tests for C++ trigraphs.
  // Trigraphs should be escaped in C++ generated files, but they should not be
  // escaped for other languages.
  // Note that in .proto file, "\?" is a valid way to escape ? in string
  // literals.
  optional string cpp_trigraph = 20 [default = "? \? ?? \?? \??? ??/ ?\?-"];

  // String defaults containing the character '\000'
  optional string string_with_zero       = 23 [default = "hel\000lo"];
  optional  bytes bytes_with_zero        = 24 [default = "wor\000ld"];
  optional string string_piece_with_zero = 25 [ctype=STRING_PIECE,
                                               default="ab\000c"];
  optional string cord_with_zero         = 26 [ctype=CORD,
                                               default="12\0003"];
  optional string replacement_string     = 27 [default="${unknown}"];
}

message SparseEnumMessage {
  optional TestSparseEnum sparse_enum = 1;
}

// Test String and Bytes: string is for valid UTF-8 strings
message OneString {
  optional string data = 1;
}

message MoreString {
  repeated string data = 1;
}

message OneBytes {
  optional bytes data = 1;
}

message MoreBytes {
  repeated bytes data = 1;
}

message ManyOptionalString {
  optional string str1 = 1;
  optional string str2 = 2;
  optional string str3 = 3;
  optional string str4 = 4;
  optional string str5 = 5;
  optional string str6 = 6;
  optional string str7 = 7;
  optional string str8 = 8;
  optional string str9 = 9;
  optional string str10 = 10;
  optional string str11 = 11;
  optional string str12 = 12;
  optional string str13 = 13;
  optional string str14 = 14;
  optional string str15 = 15;
  optional string str16 = 16;
  optional string str17 = 17;
  optional string str18 = 18;
  optional string str19 = 19;
  optional string str20 = 20;
  optional string str21 = 21;
  optional string str22 = 22;
  optional string str23 = 23;
  optional string str24 = 24;
  optional string str25 = 25;
  optional string str26 = 26;
  optional string str27 = 27;
  optional string str28 = 28;
  optional string str29 = 29;
  optional string str30 = 30;
  optional string str31 = 31;
  optional string str32 = 32;
}

// Test int32, uint32, int64, uint64, and bool are all compatible
message Int32Message {
  optional int32 data = 1;
}

message Uint32Message {
  optional uint32 data = 1;
}

message Int64Message {
  optional int64 data = 1;
}

message Uint64Message {
  optional uint64 data = 1;
}

message BoolMessage {
  optional bool data = 1;
}

// Test oneofs.
message TestOneof {
  oneof foo {
    int32 foo_int = 1;
    string foo_string = 2;
    TestAllTypes foo_message = 3;
    group FooGroup = 4 {
      optional int32 a = 5;
      optional string b = 6;
    }
  }
}

message TestOneofBackwardsCompatible {
  optional int32 foo_int = 1;
  optional string foo_string = 2;
  optional TestAllTypes foo_message = 3;
  optional group FooGroup = 4 {
    optional int32 a = 5;
    optional string b = 6;
  }
}

message TestOneof2 {
  oneof foo {
    int32 foo_int = 1;
    string foo_string = 2;
    string foo_cord = 3 [ctype=CORD];
    string foo_string_piece = 4 [ctype=STRING_PIECE];
    bytes foo_bytes = 5;
    NestedEnum foo_enum = 6;
    NestedMessage foo_message = 7;
    group FooGroup = 8 {
      optional int32 a = 9;
      optional string b = 10;
    }
    NestedMessage foo_lazy_message = 11 [lazy=true];
    bytes foo_bytes_cord = 30 [ctype=CORD];
  }

  oneof bar {
    int32 bar_int = 12 [default = 5];
    string bar_string = 13 [default = "STRING"];
    string bar_cord = 14 [ctype=CORD, default = "CORD"];
    string bar_string_piece = 15 [ctype=STRING_PIECE, default = "SPIECE"];
    bytes bar_bytes = 16 [default = "BYTES"];
    NestedEnum bar_enum = 17 [default = BAR];
    string bar_string_with_empty_default = 20 [default = ""];
    string bar_cord_with_empty_default = 21 [ctype=CORD, default = ""];
    string bar_string_piece_with_empty_default = 22 [ctype=STRING_PIECE, default = ""];
    bytes bar_bytes_with_empty_default = 23 [default = ""];
  }

  optional int32 baz_int = 18;
  optional string baz_string = 19 [default = "BAZ"];

  message NestedMessage {
    optional int64 moo_int = 1;
    repeated int32 corge_int = 2;
    optional NestedMessage child = 3;
  }

  enum NestedEnum {
    FOO = 1;
    BAR = 2;
    BAZ = 3;
  }
}

message TestRequiredOneof {
  oneof foo {
    int32 foo_int = 1;
    string foo_string = 2;
    NestedMessage foo_message = 3;
    NestedMessage foo_lazy_message = 4 [lazy = true];
  }
  message NestedMessage {
    required double required_double = 1;
  }
}

// Test messages for packed fields

message TestPackedTypes {
  repeated    int32 packed_int32    =  90 [packed = true];
  repeated    int64 packed_int64    =  91 [packed = true];
  repeated   uint32 packed_uint32   =  92 [packed = true];
  repeated   uint64 packed_uint64   =  93 [packed = true];
  repeated   sint32 packed_sint32   =  94 [packed = true];
  repeated   sint64 packed_sint64   =  95 [packed = true];
  repeated  fixed32 packed_fixed32  =  96 [packed = true];
  repeated  fixed64 packed_fixed64  =  97 [packed = true];
  repeated sfixed32 packed_sfixed32 =  98 [packed = true];
  repeated sfixed64 packed_sfixed64 =  99 [packed = true];
  repeated    float packed_float    = 100 [packed = true];
  repeated   double packed_double   = 101 [packed = true];
  repeated     bool packed_bool     = 102 [packed = true];
  repeated ForeignEnum packed_enum  = 103 [packed = true];
}

// A message with the same fields as TestPackedTypes, but without packing. Used
// to test packed <-> unpacked wire compatibility.
message TestUnpackedTypes {
  repeated    int32 unpacked_int32    =  90 [packed = false];
  repeated    int64 unpacked_int64    =  91 [packed = false];
  repeated   uint32 unpacked_uint32   =  92 [packed = false];
  repeated   uint64 unpacked_uint64   =  93 [packed = false];
  repeated   sint32 unpacked_sint32   =  94 [packed = false];
  repeated   sint64 unpacked_sint64   =  95 [packed = false];
  repeated  fixed32 unpacked_fixed32  =  96 [packed = false];
  repeated  fixed64 unpacked_fixed64  =  97 [packed = false];
  repeated sfixed32 unpacked_sfixed32 =  98 [packed = false];
  repeated sfixed64 unpacked_sfixed64 =  99 [packed = false];
  repeated    float unpacked_float    = 100 [packed = false];
  repeated   double unpacked_double   = 101 [packed = false];
  repeated     bool unpacked_bool     = 102 [packed = false];
  repeated ForeignEnum unpacked_enum  = 103 [packed = false];
}

message TestPackedExtensions {
  extensions 1 to max;
}

extend TestPackedExtensions {
  repeated    int32 packed_int32_extension    =  90 [packed = true];
  repeated    int64 packed_int64_extension    =  91 [packed = true];
  repeated   uint32 packed_uint32_extension   =  92 [packed = true];
  repeated   uint64 packed_uint64_extension   =  93 [packed = true];
  repeated   sint32 packed_sint32_extension   =  94 [packed = true];
  repeated   sint64 packed_sint64_extension   =  95 [packed = true];
  repeated  fixed32 packed_fixed32_extension  =  96 [packed = true];
  repeated  fixed64 packed_fixed64_extension  =  97 [packed = true];
  repeated sfixed32 packed_sfixed32_extension =  98 [packed = true];
  repeated sfixed64 packed_sfixed64_extension =  99 [packed = true];
  repeated    float packed_float_extension    = 100 [packed = true];
  repeated   double packed_double_extension   = 101 [packed = true];
  repeated     bool packed_bool_extension     = 102 [packed = true];
  repeated ForeignEnum packed_enum_extension  = 103 [packed = true];
}

message TestUnpackedExtensions {
  extensions 1 to max;
}

extend TestUnpackedExtensions {
  repeated    int32 unpacked_int32_extension    =  90 [packed = false];
  repeated    int64 unpacked_int64_extension    =  91 [packed = false];
  repeated   uint32 unpacked_uint32_extension   =  92 [packed = false];
  repeated   uint64 unpacked_uint64_extension   =  93 [packed = false];
  repeated   sint32 unpacked_sint32_extension   =  94 [packed = false];
  repeated   sint64 unpacked_sint64_extension   =  95 [packed = false];
  repeated  fixed32 unpacked_fixed32_extension  =  96 [packed = false];
  repeated  fixed64 unpacked_fixed64_extension  =  97 [packed = false];
  repeated sfixed32 unpacked_sfixed32_extension =  98 [packed = false];
  repeated sfixed64 unpacked_sfixed64_extension =  99 [packed = false];
  repeated    float unpacked_float_extension    = 100 [packed = false];
  repeated   double unpacked_double_extension   = 101 [packed = false];
  repeated     bool unpacked_bool_extension     = 102 [packed = false];
  repeated ForeignEnum unpacked_enum_extension  = 103 [packed = false];
}

// Used by ExtensionSetTest/DynamicExtensions.  The test actually builds
// a set of extensions to TestAllExtensions dynamically, based on the fields
// of this message type.
message TestDynamicExtensions {
  enum DynamicEnumType {
    DYNAMIC_FOO = 2200;
    DYNAMIC_BAR = 2201;
    DYNAMIC_BAZ = 2202;
  }
  message DynamicMessageType {
    optional int32 dynamic_field = 2100;
  }

  optional fixed32 scalar_extension = 2000;
  optional ForeignEnum enum_extension = 2001;
  optional DynamicEnumType dynamic_enum_extension = 2002;

  optional ForeignMessage message_extension = 2003;
  optional DynamicMessageType dynamic_message_extension = 2004;

  repeated string repeated_extension = 2005;
  repeated sint32 packed_extension = 2006 [packed = true];
}

message TestRepeatedString {
  repeated string repeated_string1 = 1;
  repeated string repeated_string2 = 2;

  repeated bytes repeated_bytes11 = 11;
  repeated bytes repeated_bytes12 = 12;
}

message TestRepeatedScalarDifferentTagSizes {
  // Parsing repeated fixed size values used to fail. This message needs to be
  // used in order to get a tag of the right size; all of the repeated fields
  // in TestAllTypes didn't trigger the check.
  repeated fixed32 repeated_fixed32 = 12;
  // Check for a varint type, just for good measure.
  repeated int32   repeated_int32   = 13;

  // These have two-byte tags.
  repeated fixed64 repeated_fixed64 = 2046;
  repeated int64   repeated_int64   = 2047;

  // Three byte tags.
  repeated float   repeated_float   = 262142;
  repeated uint64  repeated_uint64  = 262143;
}

// Test that if an optional or required message/group field appears multiple
// times in the input, they need to be merged.
message TestParsingMerge {
  // RepeatedFieldsGenerator defines matching field types as TestParsingMerge,
  // except that all fields are repeated. In the tests, we will serialize the
  // RepeatedFieldsGenerator to bytes, and parse the bytes to TestParsingMerge.
  // Repeated fields in RepeatedFieldsGenerator are expected to be merged into
  // the corresponding required/optional fields in TestParsingMerge.
  message RepeatedFieldsGenerator {
    repeated TestAllTypes field1 = 1;
    repeated TestAllTypes field2 = 2;
    repeated TestAllTypes field3 = 3;
    repeated group Group1 = 10 {
      optional TestAllTypes field1 = 11;
    }
    repeated group Group2 = 20 {
      optional TestAllTypes field1 = 21;
    }
    repeated TestAllTypes ext1 = 1000;
    repeated TestAllTypes ext2 = 1001;
  }
  required TestAllTypes required_all_types = 1;
  optional TestAllTypes optional_all_types = 2;
  repeated TestAllTypes repeated_all_types = 3;
  optional group OptionalGroup = 10 {
    optional TestAllTypes optional_group_all_types = 11;
  }
  repeated group RepeatedGroup = 20 {
    optional TestAllTypes repeated_group_all_types = 21;
  }
  extensions 1000 to max;
  extend TestParsingMerge {
    optional TestAllTypes optional_ext = 1000;
    repeated TestAllTypes repeated_ext = 1001;
  }
}

// Test that the correct exception is thrown by parseFrom in a corner case
// involving merging, extensions, and required fields.
message TestMergeException {
  optional TestAllExtensions all_extensions = 1;
}

message TestCommentInjectionMessage {
  // */ <- This should not close the generated doc comment
  optional string a = 1 [default="*/ <- Neither should this."];
}

// Used to check that the c++ code generator re-orders messages to reduce
// padding.
message TestMessageSize {
  optional bool m1 = 1;
  optional int64 m2 = 2;
  optional bool m3 = 3;
  optional string m4 = 4;
  optional int32 m5 = 5;
  optional int64 m6 = 6;
}

// Test that RPC services work.
message FooRequest  {}
message FooResponse {}

message FooClientMessage {}
message FooServerMessage{}

service TestService {
  rpc Foo(FooRequest) returns (FooResponse);
  rpc Bar(BarRequest) returns (BarResponse);
}

message BarRequest  {}
message BarResponse {}

message TestJsonName {
  optional int32 field_name1 = 1;
  optional int32 fieldName2 = 2;
  optional int32 FieldName3 = 3;
  optional int32 _field_name4 = 4;
  optional int32 FIELD_NAME5 = 5;
  optional int32 field_name6 = 6 [json_name = "@type"];
  optional int32 fieldname7 = 7;
}

message TestHugeFieldNumbers {
  optional int32 optional_int32 = 536870000;
  optional int32 fixed_32 = 536870001;
  repeated int32 repeated_int32 = 536870002 [packed = false];
  repeated int32 packed_int32 = 536870003 [packed = true];

  optional ForeignEnum optional_enum = 536870004;
  optional string optional_string = 536870005;
  optional bytes optional_bytes = 536870006;
  optional ForeignMessage optional_message = 536870007;

  optional group OptionalGroup = 536870008 {
    optional int32 group_a = 536870009;
  }

  map<string, string> string_string_map = 536870010;

  oneof oneof_field {
    uint32 oneof_uint32 = 536870011;
    TestAllTypes oneof_test_all_types = 536870012;
    string oneof_string = 536870013;
    bytes oneof_bytes = 536870014;
  }

  extensions 536860000 to 536869999 [declaration = {
    number: 536860000
    full_name: ".protobuf_unittest.test_all_types"
    type: ".protobuf_unittest.TestAllTypes"
  }];
}

extend TestHugeFieldNumbers {
  optional TestAllTypes test_all_types = 536860000;
}

message TestExtensionInsideTable {
  optional int32 field1 = 1;
  optional int32 field2 = 2;
  optional int32 field3 = 3;
  optional int32 field4 = 4;
  extensions 5 to 5;
  optional int32 field6 = 6;
  optional int32 field7 = 7;
  optional int32 field8 = 8;
  optional int32 field9 = 9;
  optional int32 field10 = 10;
}

extend TestExtensionInsideTable {
  optional int32 test_extension_inside_table_extension = 5;
}

// NOTE: Intentionally nested to mirror go/glep.
message TestNestedGroupExtensionOuter {
  optional group Layer1OptionalGroup = 1 {
    repeated group Layer2RepeatedGroup = 2 {
      extensions 3
        // NOTE: extension metadata is not supported due to targets such as
        // `//google/protobuf_legacy_opensource/src:shell_scripts_test`,
        // eee https://screenshot.googleplex.com/Axz2QD8nxjdpyFF
        //[metadata = {
        // NOTE: can't write type there due to some clever build gen code at
        // http://google3/google/protobuf/BUILD;l=1247;rcl=411090862
        // type: "protobuf_unittest.TestNestedGroupExtensionInnerExtension",
        // name: "inner",
        // }]
        ;
      optional string another_field = 6;
    }
    repeated group Layer2AnotherOptionalRepeatedGroup = 4 {
      optional string but_why_tho = 5;
    }
  }
}

message TestNestedGroupExtensionInnerExtension {
  optional string inner_name= 1;
}

extend TestNestedGroupExtensionOuter.Layer1OptionalGroup.Layer2RepeatedGroup {
  optional TestNestedGroupExtensionInnerExtension inner = 3;
}

enum VeryLargeEnum {
  ENUM_LABEL_DEFAULT = 0;
  ENUM_LABEL_1 = 1;
  ENUM_LABEL_2 = 2;
  ENUM_LABEL_3 = 3;
  ENUM_LABEL_4 = 4;
  ENUM_LABEL_5 = 5;
  ENUM_LABEL_6 = 6;
  ENUM_LABEL_7 = 7;
  ENUM_LABEL_8 = 8;
  ENUM_LABEL_9 = 9;
  ENUM_LABEL_10 = 10;
  ENUM_LABEL_11 = 11;
  ENUM_LABEL_12 = 12;
  ENUM_LABEL_13 = 13;
  ENUM_LABEL_14 = 14;
  ENUM_LABEL_15 = 15;
  ENUM_LABEL_16 = 16;
  ENUM_LABEL_17 = 17;
  ENUM_LABEL_18 = 18;
  ENUM_LABEL_19 = 19;
  ENUM_LABEL_20 = 20;
  ENUM_LABEL_21 = 21;
  ENUM_LABEL_22 = 22;
  ENUM_LABEL_23 = 23;
  ENUM_LABEL_24 = 24;
  ENUM_LABEL_25 = 25;
  ENUM_LABEL_26 = 26;
  ENUM_LABEL_27 = 27;
  ENUM_LABEL_28 = 28;
  ENUM_LABEL_29 = 29;
  ENUM_LABEL_30 = 30;
  ENUM_LABEL_31 = 31;
  ENUM_LABEL_32 = 32;
  ENUM_LABEL_33 = 33;
  ENUM_LABEL_34 = 34;
  ENUM_LABEL_35 = 35;
  ENUM_LABEL_36 = 36;
  ENUM_LABEL_37 = 37;
  ENUM_LABEL_38 = 38;
  ENUM_LABEL_39 = 39;
  ENUM_LABEL_40 = 40;
  ENUM_LABEL_41 = 41;
  ENUM_LABEL_42 = 42;
  ENUM_LABEL_43 = 43;
  ENUM_LABEL_44 = 44;
  ENUM_LABEL_45 = 45;
  ENUM_LABEL_46 = 46;
  ENUM_LABEL_47 = 47;
  ENUM_LABEL_48 = 48;
  ENUM_LABEL_49 = 49;
  ENUM_LABEL_50 = 50;
  ENUM_LABEL_51 = 51;
  ENUM_LABEL_52 = 52;
  ENUM_LABEL_53 = 53;
  ENUM_LABEL_54 = 54;
  ENUM_LABEL_55 = 55;
  ENUM_LABEL_56 = 56;
  ENUM_LABEL_57 = 57;
  ENUM_LABEL_58 = 58;
  ENUM_LABEL_59 = 59;
  ENUM_LABEL_60 = 60;
  ENUM_LABEL_61 = 61;
  ENUM_LABEL_62 = 62;
  ENUM_LABEL_63 = 63;
  ENUM_LABEL_64 = 64;
  ENUM_LABEL_65 = 65;
  ENUM_LABEL_66 = 66;
  ENUM_LABEL_67 = 67;
  ENUM_LABEL_68 = 68;
  ENUM_LABEL_69 = 69;
  ENUM_LABEL_70 = 70;
  ENUM_LABEL_71 = 71;
  ENUM_LABEL_72 = 72;
  ENUM_LABEL_73 = 73;
  ENUM_LABEL_74 = 74;
  ENUM_LABEL_75 = 75;
  ENUM_LABEL_76 = 76;
  ENUM_LABEL_77 = 77;
  ENUM_LABEL_78 = 78;
  ENUM_LABEL_79 = 79;
  ENUM_LABEL_80 = 80;
  ENUM_LABEL_81 = 81;
  ENUM_LABEL_82 = 82;
  ENUM_LABEL_83 = 83;
  ENUM_LABEL_84 = 84;
  ENUM_LABEL_85 = 85;
  ENUM_LABEL_86 = 86;
  ENUM_LABEL_87 = 87;
  ENUM_LABEL_88 = 88;
  ENUM_LABEL_89 = 89;
  ENUM_LABEL_90 = 90;
  ENUM_LABEL_91 = 91;
  ENUM_LABEL_92 = 92;
  ENUM_LABEL_93 = 93;
  ENUM_LABEL_94 = 94;
  ENUM_LABEL_95 = 95;
  ENUM_LABEL_96 = 96;
  ENUM_LABEL_97 = 97;
  ENUM_LABEL_98 = 98;
  ENUM_LABEL_99 = 99;
  ENUM_LABEL_100 = 100;
};

message TestExtensionRangeSerialize {
  optional int32 foo_one = 1;

  extensions 2 to 2;
  extensions 3 to 4;

  optional int32 foo_two = 6;
  optional int32 foo_three = 7;

  extensions 9 to 10;

  optional int32 foo_four = 13;

  extensions 15 to 15;
  extensions 17 to 17;
  extensions 19 to 19;

  extend TestExtensionRangeSerialize {
    optional int32 bar_one = 2;
    optional int32 bar_two = 4;

    optional int32 bar_three = 10;

    optional int32 bar_four = 15;
    optional int32 bar_five = 19;
  }
}

message TestVerifyInt32Simple {
    optional int32 optional_int32_1 = 1;
    optional int32 optional_int32_2 = 2;
    optional int32 optional_int32_63 = 63;
    optional int32 optional_int32_64 = 64;
}

message TestVerifyInt32 {
    optional int32 optional_int32_1 = 1;
    optional int32 optional_int32_2 = 2;
    optional int32 optional_int32_63 = 63;
    optional int32 optional_int32_64 = 64;

    optional TestAllTypes optional_all_types = 9;
    repeated TestAllTypes repeated_all_types = 10;
}

message TestVerifyMostlyInt32 {
    optional int64 optional_int64_30 = 30;

    optional int32 optional_int32_1 = 1;
    optional int32 optional_int32_2 = 2;
    optional int32 optional_int32_3 = 3;
    optional int32 optional_int32_4 = 4;
    optional int32 optional_int32_63 = 63;
    optional int32 optional_int32_64 = 64;

    optional TestAllTypes optional_all_types = 9;
    repeated TestAllTypes repeated_all_types = 10;
}

message TestVerifyMostlyInt32BigFieldNumber {
    optional int64 optional_int64_30 = 30;
    optional int32 optional_int32_300 = 300;

    optional int32 optional_int32_1 = 1;
    optional int32 optional_int32_2 = 2;
    optional int32 optional_int32_3 = 3;
    optional int32 optional_int32_4 = 4;
    optional int32 optional_int32_63 = 63;
    optional int32 optional_int32_64 = 64;

    optional TestAllTypes optional_all_types = 9;
    repeated TestAllTypes repeated_all_types = 10;
}

message TestVerifyUint32Simple {
    optional uint32 optional_uint32_1 = 1;
    optional uint32 optional_uint32_2 = 2;
    optional uint32 optional_uint32_63 = 63;
    optional uint32 optional_uint32_64 = 64;
}

message TestVerifyUint32 {
    optional uint32 optional_uint32_1 = 1;
    optional uint32 optional_uint32_2 = 2;
    optional uint32 optional_uint32_63 = 63;
    optional uint32 optional_uint32_64 = 64;

    optional TestAllTypes optional_all_types = 9;
    repeated TestAllTypes repeated_all_types = 10;
}

message TestVerifyOneUint32 {
    optional uint32 optional_uint32_1 = 1;
    optional int32 optional_int32_2 = 2;
    optional int32 optional_int32_63 = 63;
    optional int32 optional_int32_64 = 64;

    optional TestAllTypes optional_all_types = 9;
    repeated TestAllTypes repeated_all_types = 10;
}

message TestVerifyOneInt32BigFieldNumber {
    optional int32 optional_int32_65 = 65;

    optional int64 optional_int64_1 = 1;
    optional int64 optional_int64_2 = 2;
    optional int64 optional_int64_63 = 63;
    optional int64 optional_int64_64 = 64;

    optional TestAllTypes optional_all_types = 9;
    repeated TestAllTypes repeated_all_types = 10;
}

message TestVerifyInt32BigFieldNumber {
    optional int32 optional_int32_1000 = 1000;
    optional int32 optional_int32_65 = 65;

    optional int32 optional_int32_1 = 1;
    optional int32 optional_int32_2 = 2;
    optional int32 optional_int32_63 = 63;
    optional int32 optional_int32_64 = 64;

    optional TestAllTypes optional_all_types = 9;
    repeated TestAllTypes repeated_all_types = 10;
}

message TestVerifyUint32BigFieldNumber {
    optional uint32 optional_uint32_1000 = 1000;
    optional uint32 optional_uint32_65 = 65;

    optional uint32 optional_uint32_1 = 1;
    optional uint32 optional_uint32_2 = 2;
    optional uint32 optional_uint32_63 = 63;
    optional uint32 optional_uint32_64 = 64;

    optional TestAllTypes optional_all_types = 9;
    repeated TestAllTypes repeated_all_types = 10;
}

message TestVerifyBigFieldNumberUint32 {
  message Nested {
    optional uint32 optional_uint32_5000 = 5000;
    optional uint32 optional_uint32_1000 = 1000;
    optional uint32 optional_uint32_66 = 66;
    optional uint32 optional_uint32_65 = 65;

    optional uint32 optional_uint32_1 = 1;
    optional uint32 optional_uint32_2 = 2;
    optional uint32 optional_uint32_63 = 63;
    optional uint32 optional_uint32_64 = 64;

    optional Nested optional_nested = 9;
    repeated Nested repeated_nested = 10;
  }
  optional Nested optional_nested = 1;
}

// This message contains different kind of enums to exercise the different
// parsers in table-driven.
message EnumParseTester {
  enum SeqSmall0 {
    SEQ_SMALL_0_DEFAULT = 0;
    SEQ_SMALL_0_1 = 1;
    SEQ_SMALL_0_2 = 2;
  };
  optional SeqSmall0 optional_seq_small_0_lowfield = 1;
  optional SeqSmall0 optional_seq_small_0_midfield = 1001;
  optional SeqSmall0 optional_seq_small_0_hifield = 1000001;
  repeated SeqSmall0 repeated_seq_small_0_lowfield = 2;
  repeated SeqSmall0 repeated_seq_small_0_midfield = 1002;
  repeated SeqSmall0 repeated_seq_small_0_hifield = 1000002;
  repeated SeqSmall0 packed_seq_small_0_lowfield = 3 [packed = true];
  repeated SeqSmall0 packed_seq_small_0_midfield = 1003 [packed = true];
  repeated SeqSmall0 packed_seq_small_0_hifield = 1000003 [packed = true];

  enum SeqSmall1 {
    SEQ_SMALL_1_DEFAULT = 1;
    SEQ_SMALL_1_2 = 2;
    SEQ_SMALL_1_3 = 3;
  };
  optional SeqSmall1 optional_seq_small_1_lowfield = 4;
  optional SeqSmall1 optional_seq_small_1_midfield = 1004;
  optional SeqSmall1 optional_seq_small_1_hifield = 1000004;
  repeated SeqSmall1 repeated_seq_small_1_lowfield = 5;
  repeated SeqSmall1 repeated_seq_small_1_midfield = 1005;
  repeated SeqSmall1 repeated_seq_small_1_hifield = 1000005;
  repeated SeqSmall1 packed_seq_small_1_lowfield = 6 [packed = true];
  repeated SeqSmall1 packed_seq_small_1_midfield = 1006 [packed = true];
  repeated SeqSmall1 packed_seq_small_1_hifield = 1000006 [packed = true];

  enum SeqLarge {
    SEQ_LARGE_DEFAULT = -1;
    SEQ_LARGE_0 = 0;
    SEQ_LARGE_1 = 1;
    SEQ_LARGE_2 = 2;
    SEQ_LARGE_3 = 3;
    SEQ_LARGE_4 = 4;
    SEQ_LARGE_5 = 5;
    SEQ_LARGE_6 = 6;
    SEQ_LARGE_7 = 7;
    SEQ_LARGE_8 = 8;
    SEQ_LARGE_9 = 9;
    SEQ_LARGE_10 = 10;
    SEQ_LARGE_11 = 11;
    SEQ_LARGE_12 = 12;
    SEQ_LARGE_13 = 13;
    SEQ_LARGE_14 = 14;
    SEQ_LARGE_15 = 15;
    SEQ_LARGE_16 = 16;
    SEQ_LARGE_17 = 17;
    SEQ_LARGE_18 = 18;
    SEQ_LARGE_19 = 19;
    SEQ_LARGE_20 = 20;
    SEQ_LARGE_21 = 21;
    SEQ_LARGE_22 = 22;
    SEQ_LARGE_23 = 23;
    SEQ_LARGE_24 = 24;
    SEQ_LARGE_25 = 25;
    SEQ_LARGE_26 = 26;
    SEQ_LARGE_27 = 27;
    SEQ_LARGE_28 = 28;
    SEQ_LARGE_29 = 29;
    SEQ_LARGE_30 = 30;
    SEQ_LARGE_31 = 31;
    SEQ_LARGE_32 = 32;
    SEQ_LARGE_33 = 33;
  };
  optional SeqLarge optional_seq_large_lowfield = 7;
  optional SeqLarge optional_seq_large_midfield = 1007;
  optional SeqLarge optional_seq_large_hifield = 1000007;
  repeated SeqLarge repeated_seq_large_lowfield = 8;
  repeated SeqLarge repeated_seq_large_midfield = 1008;
  repeated SeqLarge repeated_seq_large_hifield = 1000008;
  repeated SeqLarge packed_seq_large_lowfield = 9 [packed = true];
  repeated SeqLarge packed_seq_large_midfield = 1009 [packed = true];
  repeated SeqLarge packed_seq_large_hifield = 1000009 [packed = true];

  enum Arbitrary {
    ARBITRARY_DEFAULT = -123123;
    ARBITRARY_1 = -123;
    ARBITRARY_2 = 213;
    ARBITRARY_3 = 213213;
    ARBITRARY_MIN = -2147483648;
    ARBITRARY_MAX = 2147483647;
  };
  optional Arbitrary optional_arbitrary_lowfield = 10;
  optional Arbitrary optional_arbitrary_midfield = 1010;
  optional Arbitrary optional_arbitrary_hifield = 1000010;
  repeated Arbitrary repeated_arbitrary_lowfield = 11;
  repeated Arbitrary repeated_arbitrary_midfield = 1011;
  repeated Arbitrary repeated_arbitrary_hifield = 1000011;
  repeated Arbitrary packed_arbitrary_lowfield = 12 [packed = true];
  repeated Arbitrary packed_arbitrary_midfield = 1012 [packed = true];
  repeated Arbitrary packed_arbitrary_hifield = 1000012 [packed = true];

  extensions 2000000 to max;
  extend EnumParseTester {
    optional Arbitrary optional_arbitrary_ext = 2000000;
    repeated Arbitrary repeated_arbitrary_ext = 2000001;
    repeated Arbitrary packed_arbitrary_ext = 2000002 [packed = true];
  }

  // An arbitrary field we can append to to break the runs of repeated fields.
  optional int32 other_field = 99;
}

// This message contains different kind of bool fields to exercise the different
// parsers in table-drived.
message BoolParseTester {
  optional bool optional_bool_lowfield = 1;
  optional bool optional_bool_midfield = 1001;
  optional bool optional_bool_hifield = 1000001;
  repeated bool repeated_bool_lowfield = 2;
  repeated bool repeated_bool_midfield = 1002;
  repeated bool repeated_bool_hifield = 1000002;
  repeated bool packed_bool_lowfield = 3 [packed = true];
  repeated bool packed_bool_midfield = 1003 [packed = true];
  repeated bool packed_bool_hifield = 1000003 [packed = true];

  extensions 2000000 to max;
  extend BoolParseTester {
    optional bool optional_bool_ext = 2000000;
    repeated bool repeated_bool_ext = 2000001;
    repeated bool packed_bool_ext = 2000002 [packed = true];
  }

  // An arbitrary field we can append to to break the runs of repeated fields.
  optional int32 other_field = 99;
}

message Int32ParseTester {
  optional int32 optional_int32_lowfield = 1;
  optional int32 optional_int32_midfield = 1001;
  optional int32 optional_int32_hifield = 1000001;
  repeated int32 repeated_int32_lowfield = 2;
  repeated int32 repeated_int32_midfield = 1002;
  repeated int32 repeated_int32_hifield = 1000002;
  repeated int32 packed_int32_lowfield = 3 [packed = true];
  repeated int32 packed_int32_midfield = 1003 [packed = true];
  repeated int32 packed_int32_hifield = 1000003 [packed = true];

  extensions 2000000 to max;
  extend Int32ParseTester {
    optional int32 optional_int32_ext = 2000000;
    repeated int32 repeated_int32_ext = 2000001;
    repeated int32 packed_int32_ext = 2000002 [packed = true];
  }

  // An arbitrary field we can append to to break the runs of repeated fields.
  optional int32 other_field = 99;
}

message Int64ParseTester {
  optional int64 optional_int64_lowfield = 1;
  optional int64 optional_int64_midfield = 1001;
  optional int64 optional_int64_hifield = 1000001;
  repeated int64 repeated_int64_lowfield = 2;
  repeated int64 repeated_int64_midfield = 1002;
  repeated int64 repeated_int64_hifield = 1000002;
  repeated int64 packed_int64_lowfield = 3 [packed = true];
  repeated int64 packed_int64_midfield = 1003 [packed = true];
  repeated int64 packed_int64_hifield = 1000003 [packed = true];

  extensions 2000000 to max;
  extend Int64ParseTester {
    optional int64 optional_int64_ext = 2000000;
    repeated int64 repeated_int64_ext = 2000001;
    repeated int64 packed_int64_ext = 2000002 [packed = true];
  }

  // An arbitrary field we can append to to break the runs of repeated fields.
  optional int32 other_field = 99;
}

message InlinedStringIdxRegressionProto {
  // We mix data to make sure aux ids and inlined string idx do not match.
  // aux_idx == inlined_string_idx == 1
  optional string str1 = 1;
  // aux_idx == 2
  optional InlinedStringIdxRegressionProto sub = 2;
  // aux_idx == 3, inlined_string_idx == 2
  optional string str2 = 3;
  // aux_idx == 4, inlined_string_idx == 3
  optional bytes str3 = 4;
}

message StringParseTester {
  optional string optional_string_lowfield = 1;
  optional string optional_string_midfield = 1001;
  optional string optional_string_hifield = 1000001;
  repeated string repeated_string_lowfield = 2;
  repeated string repeated_string_midfield = 1002;
  repeated string repeated_string_hifield = 1000002;

  extensions 2000000 to max;
  extend StringParseTester {
    optional string optional_string_ext = 2000000;
    repeated string repeated_string_ext = 2000001;
  }
}

message BadFieldNames{
  optional int32 OptionalInt32 = 1;
  optional int32 for = 2;
}

message TestNestedMessageRedaction {
  optional string optional_unredacted_nested_string = 1;
  optional string optional_redacted_nested_string = 2 [debug_redact = true];
}

message RedactedFields {
  optional string optional_redacted_string = 1 [debug_redact = true];
  optional string optional_unredacted_string = 2;
  repeated string repeated_redacted_string = 3 [debug_redact = true];
  repeated string repeated_unredacted_string = 4;
  optional TestNestedMessageRedaction optional_redacted_message = 5 [debug_redact = true];
  optional TestNestedMessageRedaction optional_unredacted_message = 6;
  repeated TestNestedMessageRedaction repeated_redacted_message = 7
      [debug_redact = true];
  repeated TestNestedMessageRedaction repeated_unredacted_message = 8;
  map<string, string> map_redacted_string = 9 [debug_redact = true];
  map<string, string> map_unredacted_string = 10;
  optional string optional_redacted_false_string = 11 [debug_redact = false];
  extensions 20 to 30;
}

extend RedactedFields {
  optional string redacted_extension = 20 [debug_redact = true];
}

message TestCord{
  optional bytes optional_bytes_cord = 1 [ctype=CORD];
  optional bytes optional_bytes_cord_default = 2 [ctype=CORD, default = "hello"];
}

message TestPackedEnumSmallRange {
  enum NestedEnum {
    UNSPECIFIED = 0;
    FOO = 1;
    BAR = 2;
    BAZ = 3;
  }
  repeated NestedEnum vals = 1 [packed = true];
}

message EnumsForBenchmark {
  enum Flat {
    A0 = 0;
    A1 = 1;
    A2 = 2;
    A3 = 3;
    A4 = 4;
    A5 = 5;
    A6 = 6;
    A7 = 7;
    A8 = 8;
    A9 = 9;
    A10 = 10;
    A11 = 11;
    A12 = 12;
    A13 = 13;
    A14 = 14;
    A15 = 15;
  }
  // Has a few holes, bitmap can be used.
  enum AlmostFlat {
    B0 = 0;
    B1 = 1;
    B2 = 2;
    B3 = 3;
    B5 = 5;
    B6 = 6;
    B7 = 7;
    B8 = 8;
    B9 = 9;
    B11 = 11;
    B12 = 12;
    B13 = 13;
    B14 = 14;
    B15 = 15;
    B17 = 17;
    B19 = 19;
  }
  enum Sparse {
    C536 = 536;
    C8387 = 8387;
    C9673 = 9673;
    C10285 = 10285;
    C13318 = 13318;
    C15963 = 15963;
    C16439 = 16439;
    C18197 = 18197;
    C19430 = 19430;
    C20361 = 20361;
    C20706 = 20706;
    C21050 = 21050;
    C21906 = 21906;
    C27265 = 27265;
    C30109 = 30109;
    C31670 = 31670;
  }
}

message TestMessageWithManyRepeatedPtrFields {
  repeated string repeated_string_1 = 1;
  repeated string repeated_string_2 = 2;
  repeated string repeated_string_3 = 3;
  repeated string repeated_string_4 = 4;
  repeated string repeated_string_5 = 5;
  repeated string repeated_string_6 = 6;
  repeated string repeated_string_7 = 7;
  repeated string repeated_string_8 = 8;
  repeated string repeated_string_9 = 9;
  repeated string repeated_string_10 = 10;
  repeated string repeated_string_11 = 11;
  repeated string repeated_string_12 = 12;
  repeated string repeated_string_13 = 13;
  repeated string repeated_string_14 = 14;
  repeated string repeated_string_15 = 15;
  repeated string repeated_string_16 = 16;
  repeated string repeated_string_17 = 17;
  repeated string repeated_string_18 = 18;
  repeated string repeated_string_19 = 19;
  repeated string repeated_string_20 = 20;
  repeated string repeated_string_21 = 21;
  repeated string repeated_string_22 = 22;
  repeated string repeated_string_23 = 23;
  repeated string repeated_string_24 = 24;
  repeated string repeated_string_25 = 25;
  repeated string repeated_string_26 = 26;
  repeated string repeated_string_27 = 27;
  repeated string repeated_string_28 = 28;
  repeated string repeated_string_29 = 29;
  repeated string repeated_string_30 = 30;
  repeated string repeated_string_31 = 31;
  repeated string repeated_string_32 = 32;
}
