// Copyright 2024 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Code generated by protoc-gen-go. DO NOT EDIT.
// source: internal/testprotos/testeditions/testeditions_opaque/test.opaque.proto

package testeditions_opaque

import (
	enums_opaque "google.golang.org/protobuf/internal/testprotos/enums/enums_opaque"
	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
	_ "google.golang.org/protobuf/types/gofeaturespb"
	reflect "reflect"
	unsafe "unsafe"
)

type ForeignEnum int32

const (
	ForeignEnum_FOREIGN_ZERO ForeignEnum = 0
	ForeignEnum_FOREIGN_FOO  ForeignEnum = 4
	ForeignEnum_FOREIGN_BAR  ForeignEnum = 5
	ForeignEnum_FOREIGN_BAZ  ForeignEnum = 6
)

// Enum value maps for ForeignEnum.
var (
	ForeignEnum_name = map[int32]string{
		0: "FOREIGN_ZERO",
		4: "FOREIGN_FOO",
		5: "FOREIGN_BAR",
		6: "FOREIGN_BAZ",
	}
	ForeignEnum_value = map[string]int32{
		"FOREIGN_ZERO": 0,
		"FOREIGN_FOO":  4,
		"FOREIGN_BAR":  5,
		"FOREIGN_BAZ":  6,
	}
)

func (x ForeignEnum) Enum() *ForeignEnum {
	p := new(ForeignEnum)
	*p = x
	return p
}

func (x ForeignEnum) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (ForeignEnum) Descriptor() protoreflect.EnumDescriptor {
	return file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_enumTypes[0].Descriptor()
}

func (ForeignEnum) Type() protoreflect.EnumType {
	return &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_enumTypes[0]
}

func (x ForeignEnum) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

type TestAllTypes_NestedEnum int32

const (
	TestAllTypes_FOO TestAllTypes_NestedEnum = 0
	TestAllTypes_BAR TestAllTypes_NestedEnum = 1
	TestAllTypes_BAZ TestAllTypes_NestedEnum = 2
	TestAllTypes_NEG TestAllTypes_NestedEnum = -1 // Intentionally negative.
)

// Enum value maps for TestAllTypes_NestedEnum.
var (
	TestAllTypes_NestedEnum_name = map[int32]string{
		0:  "FOO",
		1:  "BAR",
		2:  "BAZ",
		-1: "NEG",
	}
	TestAllTypes_NestedEnum_value = map[string]int32{
		"FOO": 0,
		"BAR": 1,
		"BAZ": 2,
		"NEG": -1,
	}
)

func (x TestAllTypes_NestedEnum) Enum() *TestAllTypes_NestedEnum {
	p := new(TestAllTypes_NestedEnum)
	*p = x
	return p
}

func (x TestAllTypes_NestedEnum) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (TestAllTypes_NestedEnum) Descriptor() protoreflect.EnumDescriptor {
	return file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_enumTypes[1].Descriptor()
}

func (TestAllTypes_NestedEnum) Type() protoreflect.EnumType {
	return &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_enumTypes[1]
}

func (x TestAllTypes_NestedEnum) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

type TestAllTypes struct {
	state                                protoimpl.MessageState                 `protogen:"opaque.v1"`
	xxx_hidden_SingularInt32             int32                                  `protobuf:"varint,124,opt,name=singular_int32,json=singularInt32"`
	xxx_hidden_SingularInt64             int64                                  `protobuf:"varint,125,opt,name=singular_int64,json=singularInt64"`
	xxx_hidden_SingularUint32            uint32                                 `protobuf:"varint,126,opt,name=singular_uint32,json=singularUint32"`
	xxx_hidden_SingularUint64            uint64                                 `protobuf:"varint,127,opt,name=singular_uint64,json=singularUint64"`
	xxx_hidden_SingularSint32            int32                                  `protobuf:"zigzag32,128,opt,name=singular_sint32,json=singularSint32"`
	xxx_hidden_SingularSint64            int64                                  `protobuf:"zigzag64,129,opt,name=singular_sint64,json=singularSint64"`
	xxx_hidden_SingularFixed32           uint32                                 `protobuf:"fixed32,130,opt,name=singular_fixed32,json=singularFixed32"`
	xxx_hidden_SingularFixed64           uint64                                 `protobuf:"fixed64,131,opt,name=singular_fixed64,json=singularFixed64"`
	xxx_hidden_SingularSfixed32          int32                                  `protobuf:"fixed32,132,opt,name=singular_sfixed32,json=singularSfixed32"`
	xxx_hidden_SingularSfixed64          int64                                  `protobuf:"fixed64,133,opt,name=singular_sfixed64,json=singularSfixed64"`
	xxx_hidden_SingularFloat             float32                                `protobuf:"fixed32,134,opt,name=singular_float,json=singularFloat"`
	xxx_hidden_SingularDouble            float64                                `protobuf:"fixed64,135,opt,name=singular_double,json=singularDouble"`
	xxx_hidden_SingularBool              bool                                   `protobuf:"varint,136,opt,name=singular_bool,json=singularBool"`
	xxx_hidden_SingularString            string                                 `protobuf:"bytes,137,opt,name=singular_string,json=singularString"`
	xxx_hidden_SingularBytes             []byte                                 `protobuf:"bytes,138,opt,name=singular_bytes,json=singularBytes"`
	xxx_hidden_SingularNestedEnum        TestAllTypes_NestedEnum                `protobuf:"varint,142,opt,name=singular_nested_enum,json=singularNestedEnum,enum=opaque.goproto.proto.testeditions.TestAllTypes_NestedEnum"`
	xxx_hidden_SingularForeignEnum       ForeignEnum                            `protobuf:"varint,143,opt,name=singular_foreign_enum,json=singularForeignEnum,enum=opaque.goproto.proto.testeditions.ForeignEnum"`
	xxx_hidden_SingularImportEnum        ImportEnum                             `protobuf:"varint,144,opt,name=singular_import_enum,json=singularImportEnum,enum=opaque.goproto.proto.testeditions.ImportEnum"`
	xxx_hidden_OptionalInt32             int32                                  `protobuf:"varint,1,opt,name=optional_int32,json=optionalInt32"`
	xxx_hidden_OptionalInt64             int64                                  `protobuf:"varint,2,opt,name=optional_int64,json=optionalInt64"`
	xxx_hidden_OptionalUint32            uint32                                 `protobuf:"varint,3,opt,name=optional_uint32,json=optionalUint32"`
	xxx_hidden_OptionalUint64            uint64                                 `protobuf:"varint,4,opt,name=optional_uint64,json=optionalUint64"`
	xxx_hidden_OptionalSint32            int32                                  `protobuf:"zigzag32,5,opt,name=optional_sint32,json=optionalSint32"`
	xxx_hidden_OptionalSint64            int64                                  `protobuf:"zigzag64,6,opt,name=optional_sint64,json=optionalSint64"`
	xxx_hidden_OptionalFixed32           uint32                                 `protobuf:"fixed32,7,opt,name=optional_fixed32,json=optionalFixed32"`
	xxx_hidden_OptionalFixed64           uint64                                 `protobuf:"fixed64,8,opt,name=optional_fixed64,json=optionalFixed64"`
	xxx_hidden_OptionalSfixed32          int32                                  `protobuf:"fixed32,9,opt,name=optional_sfixed32,json=optionalSfixed32"`
	xxx_hidden_OptionalSfixed64          int64                                  `protobuf:"fixed64,10,opt,name=optional_sfixed64,json=optionalSfixed64"`
	xxx_hidden_OptionalFloat             float32                                `protobuf:"fixed32,11,opt,name=optional_float,json=optionalFloat"`
	xxx_hidden_OptionalDouble            float64                                `protobuf:"fixed64,12,opt,name=optional_double,json=optionalDouble"`
	xxx_hidden_OptionalBool              bool                                   `protobuf:"varint,13,opt,name=optional_bool,json=optionalBool"`
	xxx_hidden_OptionalString            *string                                `protobuf:"bytes,14,opt,name=optional_string,json=optionalString"`
	xxx_hidden_OptionalBytes             []byte                                 `protobuf:"bytes,15,opt,name=optional_bytes,json=optionalBytes"`
	xxx_hidden_Optionalgroup             *TestAllTypes_OptionalGroup            `protobuf:"group,16,opt,name=OptionalGroup,json=optionalgroup"`
	xxx_hidden_NotGroupLikeDelimited     *TestAllTypes_OptionalGroup            `protobuf:"group,17,opt,name=OptionalGroup,json=notGroupLikeDelimited"`
	xxx_hidden_OptionalNestedMessage     *TestAllTypes_NestedMessage            `protobuf:"bytes,18,opt,name=optional_nested_message,json=optionalNestedMessage"`
	xxx_hidden_OptionalForeignMessage    *ForeignMessage                        `protobuf:"bytes,19,opt,name=optional_foreign_message,json=optionalForeignMessage"`
	xxx_hidden_OptionalImportMessage     *ImportMessage                         `protobuf:"bytes,20,opt,name=optional_import_message,json=optionalImportMessage"`
	xxx_hidden_OptionalNestedEnum        TestAllTypes_NestedEnum                `protobuf:"varint,21,opt,name=optional_nested_enum,json=optionalNestedEnum,enum=opaque.goproto.proto.testeditions.TestAllTypes_NestedEnum"`
	xxx_hidden_OptionalForeignEnum       ForeignEnum                            `protobuf:"varint,22,opt,name=optional_foreign_enum,json=optionalForeignEnum,enum=opaque.goproto.proto.testeditions.ForeignEnum"`
	xxx_hidden_OptionalImportEnum        ImportEnum                             `protobuf:"varint,23,opt,name=optional_import_enum,json=optionalImportEnum,enum=opaque.goproto.proto.testeditions.ImportEnum"`
	xxx_hidden_OptionalLazyNestedMessage *TestAllTypes_NestedMessage            `protobuf:"bytes,24,opt,name=optional_lazy_nested_message,json=optionalLazyNestedMessage"`
	xxx_hidden_RepeatedInt32             []int32                                `protobuf:"varint,31,rep,packed,name=repeated_int32,json=repeatedInt32"`
	xxx_hidden_RepeatedInt64             []int64                                `protobuf:"varint,32,rep,packed,name=repeated_int64,json=repeatedInt64"`
	xxx_hidden_RepeatedUint32            []uint32                               `protobuf:"varint,33,rep,packed,name=repeated_uint32,json=repeatedUint32"`
	xxx_hidden_RepeatedUint64            []uint64                               `protobuf:"varint,34,rep,packed,name=repeated_uint64,json=repeatedUint64"`
	xxx_hidden_RepeatedSint32            []int32                                `protobuf:"zigzag32,35,rep,packed,name=repeated_sint32,json=repeatedSint32"`
	xxx_hidden_RepeatedSint64            []int64                                `protobuf:"zigzag64,36,rep,packed,name=repeated_sint64,json=repeatedSint64"`
	xxx_hidden_RepeatedFixed32           []uint32                               `protobuf:"fixed32,37,rep,packed,name=repeated_fixed32,json=repeatedFixed32"`
	xxx_hidden_RepeatedFixed64           []uint64                               `protobuf:"fixed64,38,rep,packed,name=repeated_fixed64,json=repeatedFixed64"`
	xxx_hidden_RepeatedSfixed32          []int32                                `protobuf:"fixed32,39,rep,packed,name=repeated_sfixed32,json=repeatedSfixed32"`
	xxx_hidden_RepeatedSfixed64          []int64                                `protobuf:"fixed64,40,rep,packed,name=repeated_sfixed64,json=repeatedSfixed64"`
	xxx_hidden_RepeatedFloat             []float32                              `protobuf:"fixed32,41,rep,packed,name=repeated_float,json=repeatedFloat"`
	xxx_hidden_RepeatedDouble            []float64                              `protobuf:"fixed64,42,rep,packed,name=repeated_double,json=repeatedDouble"`
	xxx_hidden_RepeatedBool              []bool                                 `protobuf:"varint,43,rep,packed,name=repeated_bool,json=repeatedBool"`
	xxx_hidden_RepeatedString            []string                               `protobuf:"bytes,44,rep,name=repeated_string,json=repeatedString"`
	xxx_hidden_RepeatedBytes             [][]byte                               `protobuf:"bytes,45,rep,name=repeated_bytes,json=repeatedBytes"`
	xxx_hidden_Repeatedgroup             *[]*TestAllTypes_RepeatedGroup         `protobuf:"group,46,rep,name=RepeatedGroup,json=repeatedgroup"`
	xxx_hidden_RepeatedNestedMessage     *[]*TestAllTypes_NestedMessage         `protobuf:"bytes,48,rep,name=repeated_nested_message,json=repeatedNestedMessage"`
	xxx_hidden_RepeatedForeignMessage    *[]*ForeignMessage                     `protobuf:"bytes,49,rep,name=repeated_foreign_message,json=repeatedForeignMessage"`
	xxx_hidden_RepeatedImportmessage     *[]*ImportMessage                      `protobuf:"bytes,50,rep,name=repeated_importmessage,json=repeatedImportmessage"`
	xxx_hidden_RepeatedNestedEnum        []TestAllTypes_NestedEnum              `protobuf:"varint,51,rep,packed,name=repeated_nested_enum,json=repeatedNestedEnum,enum=opaque.goproto.proto.testeditions.TestAllTypes_NestedEnum"`
	xxx_hidden_RepeatedForeignEnum       []ForeignEnum                          `protobuf:"varint,52,rep,packed,name=repeated_foreign_enum,json=repeatedForeignEnum,enum=opaque.goproto.proto.testeditions.ForeignEnum"`
	xxx_hidden_RepeatedImportenum        []ImportEnum                           `protobuf:"varint,53,rep,packed,name=repeated_importenum,json=repeatedImportenum,enum=opaque.goproto.proto.testeditions.ImportEnum"`
	xxx_hidden_MapInt32Int32             map[int32]int32                        `protobuf:"bytes,56,rep,name=map_int32_int32,json=mapInt32Int32" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"`
	xxx_hidden_MapInt64Int64             map[int64]int64                        `protobuf:"bytes,57,rep,name=map_int64_int64,json=mapInt64Int64" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"`
	xxx_hidden_MapUint32Uint32           map[uint32]uint32                      `protobuf:"bytes,58,rep,name=map_uint32_uint32,json=mapUint32Uint32" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"`
	xxx_hidden_MapUint64Uint64           map[uint64]uint64                      `protobuf:"bytes,59,rep,name=map_uint64_uint64,json=mapUint64Uint64" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"`
	xxx_hidden_MapSint32Sint32           map[int32]int32                        `protobuf:"bytes,60,rep,name=map_sint32_sint32,json=mapSint32Sint32" protobuf_key:"zigzag32,1,opt,name=key" protobuf_val:"zigzag32,2,opt,name=value"`
	xxx_hidden_MapSint64Sint64           map[int64]int64                        `protobuf:"bytes,61,rep,name=map_sint64_sint64,json=mapSint64Sint64" protobuf_key:"zigzag64,1,opt,name=key" protobuf_val:"zigzag64,2,opt,name=value"`
	xxx_hidden_MapFixed32Fixed32         map[uint32]uint32                      `protobuf:"bytes,62,rep,name=map_fixed32_fixed32,json=mapFixed32Fixed32" protobuf_key:"fixed32,1,opt,name=key" protobuf_val:"fixed32,2,opt,name=value"`
	xxx_hidden_MapFixed64Fixed64         map[uint64]uint64                      `protobuf:"bytes,63,rep,name=map_fixed64_fixed64,json=mapFixed64Fixed64" protobuf_key:"fixed64,1,opt,name=key" protobuf_val:"fixed64,2,opt,name=value"`
	xxx_hidden_MapSfixed32Sfixed32       map[int32]int32                        `protobuf:"bytes,64,rep,name=map_sfixed32_sfixed32,json=mapSfixed32Sfixed32" protobuf_key:"fixed32,1,opt,name=key" protobuf_val:"fixed32,2,opt,name=value"`
	xxx_hidden_MapSfixed64Sfixed64       map[int64]int64                        `protobuf:"bytes,65,rep,name=map_sfixed64_sfixed64,json=mapSfixed64Sfixed64" protobuf_key:"fixed64,1,opt,name=key" protobuf_val:"fixed64,2,opt,name=value"`
	xxx_hidden_MapInt32Float             map[int32]float32                      `protobuf:"bytes,66,rep,name=map_int32_float,json=mapInt32Float" protobuf_key:"varint,1,opt,name=key" protobuf_val:"fixed32,2,opt,name=value"`
	xxx_hidden_MapInt32Double            map[int32]float64                      `protobuf:"bytes,67,rep,name=map_int32_double,json=mapInt32Double" protobuf_key:"varint,1,opt,name=key" protobuf_val:"fixed64,2,opt,name=value"`
	xxx_hidden_MapBoolBool               map[bool]bool                          `protobuf:"bytes,68,rep,name=map_bool_bool,json=mapBoolBool" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"`
	xxx_hidden_MapStringString           map[string]string                      `protobuf:"bytes,69,rep,name=map_string_string,json=mapStringString" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
	xxx_hidden_MapStringBytes            map[string][]byte                      `protobuf:"bytes,70,rep,name=map_string_bytes,json=mapStringBytes" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
	xxx_hidden_MapStringNestedMessage    map[string]*TestAllTypes_NestedMessage `protobuf:"bytes,71,rep,name=map_string_nested_message,json=mapStringNestedMessage" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
	xxx_hidden_MapStringNestedEnum       map[string]TestAllTypes_NestedEnum     `protobuf:"bytes,73,rep,name=map_string_nested_enum,json=mapStringNestedEnum" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"varint,2,opt,name=value,enum=opaque.goproto.proto.testeditions.TestAllTypes_NestedEnum"`
	xxx_hidden_DefaultInt32              int32                                  `protobuf:"varint,81,opt,name=default_int32,json=defaultInt32,def=81"`
	xxx_hidden_DefaultInt64              int64                                  `protobuf:"varint,82,opt,name=default_int64,json=defaultInt64,def=82"`
	xxx_hidden_DefaultUint32             uint32                                 `protobuf:"varint,83,opt,name=default_uint32,json=defaultUint32,def=83"`
	xxx_hidden_DefaultUint64             uint64                                 `protobuf:"varint,84,opt,name=default_uint64,json=defaultUint64,def=84"`
	xxx_hidden_DefaultSint32             int32                                  `protobuf:"zigzag32,85,opt,name=default_sint32,json=defaultSint32,def=-85"`
	xxx_hidden_DefaultSint64             int64                                  `protobuf:"zigzag64,86,opt,name=default_sint64,json=defaultSint64,def=86"`
	xxx_hidden_DefaultFixed32            uint32                                 `protobuf:"fixed32,87,opt,name=default_fixed32,json=defaultFixed32,def=87"`
	xxx_hidden_DefaultFixed64            uint64                                 `protobuf:"fixed64,88,opt,name=default_fixed64,json=defaultFixed64,def=88"`
	xxx_hidden_DefaultSfixed32           int32                                  `protobuf:"fixed32,89,opt,name=default_sfixed32,json=defaultSfixed32,def=89"`
	xxx_hidden_DefaultSfixed64           int64                                  `protobuf:"fixed64,80,opt,name=default_sfixed64,json=defaultSfixed64,def=-90"`
	xxx_hidden_DefaultFloat              float32                                `protobuf:"fixed32,91,opt,name=default_float,json=defaultFloat,def=91.5"`
	xxx_hidden_DefaultDouble             float64                                `protobuf:"fixed64,92,opt,name=default_double,json=defaultDouble,def=92000"`
	xxx_hidden_DefaultBool               bool                                   `protobuf:"varint,93,opt,name=default_bool,json=defaultBool,def=1"`
	xxx_hidden_DefaultString             *string                                `protobuf:"bytes,94,opt,name=default_string,json=defaultString,def=hello"`
	xxx_hidden_DefaultBytes              []byte                                 `protobuf:"bytes,95,opt,name=default_bytes,json=defaultBytes,def=world"`
	xxx_hidden_DefaultNestedEnum         TestAllTypes_NestedEnum                `protobuf:"varint,96,opt,name=default_nested_enum,json=defaultNestedEnum,enum=opaque.goproto.proto.testeditions.TestAllTypes_NestedEnum,def=1"`
	xxx_hidden_DefaultForeignEnum        ForeignEnum                            `protobuf:"varint,97,opt,name=default_foreign_enum,json=defaultForeignEnum,enum=opaque.goproto.proto.testeditions.ForeignEnum,def=5"`
	xxx_hidden_OneofField                isTestAllTypes_OneofField              `protobuf_oneof:"oneof_field"`
	xxx_hidden_OneofOptional             isTestAllTypes_OneofOptional           `protobuf_oneof:"oneof_optional"`
	// Deprecated: Do not use. This will be deleted in the near future.
	XXX_lazyUnmarshalInfo  protoimpl.LazyUnmarshalInfo
	XXX_raceDetectHookData protoimpl.RaceDetectHookData
	XXX_presence           [4]uint32
	unknownFields          protoimpl.UnknownFields
	sizeCache              protoimpl.SizeCache
}

// Default values for TestAllTypes fields.
const (
	Default_TestAllTypes_DefaultInt32       = int32(81)
	Default_TestAllTypes_DefaultInt64       = int64(82)
	Default_TestAllTypes_DefaultUint32      = uint32(83)
	Default_TestAllTypes_DefaultUint64      = uint64(84)
	Default_TestAllTypes_DefaultSint32      = int32(-85)
	Default_TestAllTypes_DefaultSint64      = int64(86)
	Default_TestAllTypes_DefaultFixed32     = uint32(87)
	Default_TestAllTypes_DefaultFixed64     = uint64(88)
	Default_TestAllTypes_DefaultSfixed32    = int32(89)
	Default_TestAllTypes_DefaultSfixed64    = int64(-90)
	Default_TestAllTypes_DefaultFloat       = float32(91.5)
	Default_TestAllTypes_DefaultDouble      = float64(92000)
	Default_TestAllTypes_DefaultBool        = bool(true)
	Default_TestAllTypes_DefaultString      = string("hello")
	Default_TestAllTypes_DefaultNestedEnum  = TestAllTypes_BAR
	Default_TestAllTypes_DefaultForeignEnum = ForeignEnum_FOREIGN_BAR
)

// Default values for TestAllTypes fields.
var (
	Default_TestAllTypes_DefaultBytes = []byte("world")
)

func (x *TestAllTypes) Reset() {
	*x = TestAllTypes{}
	mi := &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_msgTypes[0]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *TestAllTypes) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*TestAllTypes) ProtoMessage() {}

func (x *TestAllTypes) ProtoReflect() protoreflect.Message {
	mi := &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_msgTypes[0]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

func (x *TestAllTypes) GetSingularInt32() int32 {
	if x != nil {
		return x.xxx_hidden_SingularInt32
	}
	return 0
}

func (x *TestAllTypes) GetSingularInt64() int64 {
	if x != nil {
		return x.xxx_hidden_SingularInt64
	}
	return 0
}

func (x *TestAllTypes) GetSingularUint32() uint32 {
	if x != nil {
		return x.xxx_hidden_SingularUint32
	}
	return 0
}

func (x *TestAllTypes) GetSingularUint64() uint64 {
	if x != nil {
		return x.xxx_hidden_SingularUint64
	}
	return 0
}

func (x *TestAllTypes) GetSingularSint32() int32 {
	if x != nil {
		return x.xxx_hidden_SingularSint32
	}
	return 0
}

func (x *TestAllTypes) GetSingularSint64() int64 {
	if x != nil {
		return x.xxx_hidden_SingularSint64
	}
	return 0
}

func (x *TestAllTypes) GetSingularFixed32() uint32 {
	if x != nil {
		return x.xxx_hidden_SingularFixed32
	}
	return 0
}

func (x *TestAllTypes) GetSingularFixed64() uint64 {
	if x != nil {
		return x.xxx_hidden_SingularFixed64
	}
	return 0
}

func (x *TestAllTypes) GetSingularSfixed32() int32 {
	if x != nil {
		return x.xxx_hidden_SingularSfixed32
	}
	return 0
}

func (x *TestAllTypes) GetSingularSfixed64() int64 {
	if x != nil {
		return x.xxx_hidden_SingularSfixed64
	}
	return 0
}

func (x *TestAllTypes) GetSingularFloat() float32 {
	if x != nil {
		return x.xxx_hidden_SingularFloat
	}
	return 0
}

func (x *TestAllTypes) GetSingularDouble() float64 {
	if x != nil {
		return x.xxx_hidden_SingularDouble
	}
	return 0
}

func (x *TestAllTypes) GetSingularBool() bool {
	if x != nil {
		return x.xxx_hidden_SingularBool
	}
	return false
}

func (x *TestAllTypes) GetSingularString() string {
	if x != nil {
		return x.xxx_hidden_SingularString
	}
	return ""
}

func (x *TestAllTypes) GetSingularBytes() []byte {
	if x != nil {
		return x.xxx_hidden_SingularBytes
	}
	return nil
}

func (x *TestAllTypes) GetSingularNestedEnum() TestAllTypes_NestedEnum {
	if x != nil {
		return x.xxx_hidden_SingularNestedEnum
	}
	return TestAllTypes_FOO
}

func (x *TestAllTypes) GetSingularForeignEnum() ForeignEnum {
	if x != nil {
		return x.xxx_hidden_SingularForeignEnum
	}
	return ForeignEnum_FOREIGN_ZERO
}

func (x *TestAllTypes) GetSingularImportEnum() ImportEnum {
	if x != nil {
		return x.xxx_hidden_SingularImportEnum
	}
	return ImportEnum_IMPORT_ZERO
}

func (x *TestAllTypes) GetOptionalInt32() int32 {
	if x != nil {
		return x.xxx_hidden_OptionalInt32
	}
	return 0
}

func (x *TestAllTypes) GetOptionalInt64() int64 {
	if x != nil {
		return x.xxx_hidden_OptionalInt64
	}
	return 0
}

func (x *TestAllTypes) GetOptionalUint32() uint32 {
	if x != nil {
		return x.xxx_hidden_OptionalUint32
	}
	return 0
}

func (x *TestAllTypes) GetOptionalUint64() uint64 {
	if x != nil {
		return x.xxx_hidden_OptionalUint64
	}
	return 0
}

func (x *TestAllTypes) GetOptionalSint32() int32 {
	if x != nil {
		return x.xxx_hidden_OptionalSint32
	}
	return 0
}

func (x *TestAllTypes) GetOptionalSint64() int64 {
	if x != nil {
		return x.xxx_hidden_OptionalSint64
	}
	return 0
}

func (x *TestAllTypes) GetOptionalFixed32() uint32 {
	if x != nil {
		return x.xxx_hidden_OptionalFixed32
	}
	return 0
}

func (x *TestAllTypes) GetOptionalFixed64() uint64 {
	if x != nil {
		return x.xxx_hidden_OptionalFixed64
	}
	return 0
}

func (x *TestAllTypes) GetOptionalSfixed32() int32 {
	if x != nil {
		return x.xxx_hidden_OptionalSfixed32
	}
	return 0
}

func (x *TestAllTypes) GetOptionalSfixed64() int64 {
	if x != nil {
		return x.xxx_hidden_OptionalSfixed64
	}
	return 0
}

func (x *TestAllTypes) GetOptionalFloat() float32 {
	if x != nil {
		return x.xxx_hidden_OptionalFloat
	}
	return 0
}

func (x *TestAllTypes) GetOptionalDouble() float64 {
	if x != nil {
		return x.xxx_hidden_OptionalDouble
	}
	return 0
}

func (x *TestAllTypes) GetOptionalBool() bool {
	if x != nil {
		return x.xxx_hidden_OptionalBool
	}
	return false
}

func (x *TestAllTypes) GetOptionalString() string {
	if x != nil {
		if x.xxx_hidden_OptionalString != nil {
			return *x.xxx_hidden_OptionalString
		}
		return ""
	}
	return ""
}

func (x *TestAllTypes) GetOptionalBytes() []byte {
	if x != nil {
		return x.xxx_hidden_OptionalBytes
	}
	return nil
}

func (x *TestAllTypes) GetOptionalgroup() *TestAllTypes_OptionalGroup {
	if x != nil {
		return x.xxx_hidden_Optionalgroup
	}
	return nil
}

func (x *TestAllTypes) GetNotGroupLikeDelimited() *TestAllTypes_OptionalGroup {
	if x != nil {
		return x.xxx_hidden_NotGroupLikeDelimited
	}
	return nil
}

func (x *TestAllTypes) GetOptionalNestedMessage() *TestAllTypes_NestedMessage {
	if x != nil {
		return x.xxx_hidden_OptionalNestedMessage
	}
	return nil
}

func (x *TestAllTypes) GetOptionalForeignMessage() *ForeignMessage {
	if x != nil {
		return x.xxx_hidden_OptionalForeignMessage
	}
	return nil
}

func (x *TestAllTypes) GetOptionalImportMessage() *ImportMessage {
	if x != nil {
		return x.xxx_hidden_OptionalImportMessage
	}
	return nil
}

func (x *TestAllTypes) GetOptionalNestedEnum() TestAllTypes_NestedEnum {
	if x != nil {
		if protoimpl.X.Present(&(x.XXX_presence[1]), 38) {
			return x.xxx_hidden_OptionalNestedEnum
		}
	}
	return TestAllTypes_FOO
}

func (x *TestAllTypes) GetOptionalForeignEnum() ForeignEnum {
	if x != nil {
		if protoimpl.X.Present(&(x.XXX_presence[1]), 39) {
			return x.xxx_hidden_OptionalForeignEnum
		}
	}
	return ForeignEnum_FOREIGN_ZERO
}

func (x *TestAllTypes) GetOptionalImportEnum() ImportEnum {
	if x != nil {
		if protoimpl.X.Present(&(x.XXX_presence[1]), 40) {
			return x.xxx_hidden_OptionalImportEnum
		}
	}
	return ImportEnum_IMPORT_ZERO
}

func (x *TestAllTypes) GetOptionalLazyNestedMessage() *TestAllTypes_NestedMessage {
	if x != nil {
		if protoimpl.X.Present(&(x.XXX_presence[1]), 41) {
			if protoimpl.X.AtomicCheckPointerIsNil(&x.xxx_hidden_OptionalLazyNestedMessage) {
				protoimpl.X.UnmarshalField(x, 24)
			}
			var rv *TestAllTypes_NestedMessage
			protoimpl.X.AtomicLoadPointer(protoimpl.Pointer(&x.xxx_hidden_OptionalLazyNestedMessage), protoimpl.Pointer(&rv))
			return rv
		}
	}
	return nil
}

func (x *TestAllTypes) GetRepeatedInt32() []int32 {
	if x != nil {
		return x.xxx_hidden_RepeatedInt32
	}
	return nil
}

func (x *TestAllTypes) GetRepeatedInt64() []int64 {
	if x != nil {
		return x.xxx_hidden_RepeatedInt64
	}
	return nil
}

func (x *TestAllTypes) GetRepeatedUint32() []uint32 {
	if x != nil {
		return x.xxx_hidden_RepeatedUint32
	}
	return nil
}

func (x *TestAllTypes) GetRepeatedUint64() []uint64 {
	if x != nil {
		return x.xxx_hidden_RepeatedUint64
	}
	return nil
}

func (x *TestAllTypes) GetRepeatedSint32() []int32 {
	if x != nil {
		return x.xxx_hidden_RepeatedSint32
	}
	return nil
}

func (x *TestAllTypes) GetRepeatedSint64() []int64 {
	if x != nil {
		return x.xxx_hidden_RepeatedSint64
	}
	return nil
}

func (x *TestAllTypes) GetRepeatedFixed32() []uint32 {
	if x != nil {
		return x.xxx_hidden_RepeatedFixed32
	}
	return nil
}

func (x *TestAllTypes) GetRepeatedFixed64() []uint64 {
	if x != nil {
		return x.xxx_hidden_RepeatedFixed64
	}
	return nil
}

func (x *TestAllTypes) GetRepeatedSfixed32() []int32 {
	if x != nil {
		return x.xxx_hidden_RepeatedSfixed32
	}
	return nil
}

func (x *TestAllTypes) GetRepeatedSfixed64() []int64 {
	if x != nil {
		return x.xxx_hidden_RepeatedSfixed64
	}
	return nil
}

func (x *TestAllTypes) GetRepeatedFloat() []float32 {
	if x != nil {
		return x.xxx_hidden_RepeatedFloat
	}
	return nil
}

func (x *TestAllTypes) GetRepeatedDouble() []float64 {
	if x != nil {
		return x.xxx_hidden_RepeatedDouble
	}
	return nil
}

func (x *TestAllTypes) GetRepeatedBool() []bool {
	if x != nil {
		return x.xxx_hidden_RepeatedBool
	}
	return nil
}

func (x *TestAllTypes) GetRepeatedString() []string {
	if x != nil {
		return x.xxx_hidden_RepeatedString
	}
	return nil
}

func (x *TestAllTypes) GetRepeatedBytes() [][]byte {
	if x != nil {
		return x.xxx_hidden_RepeatedBytes
	}
	return nil
}

func (x *TestAllTypes) GetRepeatedgroup() []*TestAllTypes_RepeatedGroup {
	if x != nil {
		if x.xxx_hidden_Repeatedgroup != nil {
			return *x.xxx_hidden_Repeatedgroup
		}
	}
	return nil
}

func (x *TestAllTypes) GetRepeatedNestedMessage() []*TestAllTypes_NestedMessage {
	if x != nil {
		if x.xxx_hidden_RepeatedNestedMessage != nil {
			return *x.xxx_hidden_RepeatedNestedMessage
		}
	}
	return nil
}

func (x *TestAllTypes) GetRepeatedForeignMessage() []*ForeignMessage {
	if x != nil {
		if x.xxx_hidden_RepeatedForeignMessage != nil {
			return *x.xxx_hidden_RepeatedForeignMessage
		}
	}
	return nil
}

func (x *TestAllTypes) GetRepeatedImportmessage() []*ImportMessage {
	if x != nil {
		if x.xxx_hidden_RepeatedImportmessage != nil {
			return *x.xxx_hidden_RepeatedImportmessage
		}
	}
	return nil
}

func (x *TestAllTypes) GetRepeatedNestedEnum() []TestAllTypes_NestedEnum {
	if x != nil {
		return x.xxx_hidden_RepeatedNestedEnum
	}
	return nil
}

func (x *TestAllTypes) GetRepeatedForeignEnum() []ForeignEnum {
	if x != nil {
		return x.xxx_hidden_RepeatedForeignEnum
	}
	return nil
}

func (x *TestAllTypes) GetRepeatedImportenum() []ImportEnum {
	if x != nil {
		return x.xxx_hidden_RepeatedImportenum
	}
	return nil
}

func (x *TestAllTypes) GetMapInt32Int32() map[int32]int32 {
	if x != nil {
		return x.xxx_hidden_MapInt32Int32
	}
	return nil
}

func (x *TestAllTypes) GetMapInt64Int64() map[int64]int64 {
	if x != nil {
		return x.xxx_hidden_MapInt64Int64
	}
	return nil
}

func (x *TestAllTypes) GetMapUint32Uint32() map[uint32]uint32 {
	if x != nil {
		return x.xxx_hidden_MapUint32Uint32
	}
	return nil
}

func (x *TestAllTypes) GetMapUint64Uint64() map[uint64]uint64 {
	if x != nil {
		return x.xxx_hidden_MapUint64Uint64
	}
	return nil
}

func (x *TestAllTypes) GetMapSint32Sint32() map[int32]int32 {
	if x != nil {
		return x.xxx_hidden_MapSint32Sint32
	}
	return nil
}

func (x *TestAllTypes) GetMapSint64Sint64() map[int64]int64 {
	if x != nil {
		return x.xxx_hidden_MapSint64Sint64
	}
	return nil
}

func (x *TestAllTypes) GetMapFixed32Fixed32() map[uint32]uint32 {
	if x != nil {
		return x.xxx_hidden_MapFixed32Fixed32
	}
	return nil
}

func (x *TestAllTypes) GetMapFixed64Fixed64() map[uint64]uint64 {
	if x != nil {
		return x.xxx_hidden_MapFixed64Fixed64
	}
	return nil
}

func (x *TestAllTypes) GetMapSfixed32Sfixed32() map[int32]int32 {
	if x != nil {
		return x.xxx_hidden_MapSfixed32Sfixed32
	}
	return nil
}

func (x *TestAllTypes) GetMapSfixed64Sfixed64() map[int64]int64 {
	if x != nil {
		return x.xxx_hidden_MapSfixed64Sfixed64
	}
	return nil
}

func (x *TestAllTypes) GetMapInt32Float() map[int32]float32 {
	if x != nil {
		return x.xxx_hidden_MapInt32Float
	}
	return nil
}

func (x *TestAllTypes) GetMapInt32Double() map[int32]float64 {
	if x != nil {
		return x.xxx_hidden_MapInt32Double
	}
	return nil
}

func (x *TestAllTypes) GetMapBoolBool() map[bool]bool {
	if x != nil {
		return x.xxx_hidden_MapBoolBool
	}
	return nil
}

func (x *TestAllTypes) GetMapStringString() map[string]string {
	if x != nil {
		return x.xxx_hidden_MapStringString
	}
	return nil
}

func (x *TestAllTypes) GetMapStringBytes() map[string][]byte {
	if x != nil {
		return x.xxx_hidden_MapStringBytes
	}
	return nil
}

func (x *TestAllTypes) GetMapStringNestedMessage() map[string]*TestAllTypes_NestedMessage {
	if x != nil {
		return x.xxx_hidden_MapStringNestedMessage
	}
	return nil
}

func (x *TestAllTypes) GetMapStringNestedEnum() map[string]TestAllTypes_NestedEnum {
	if x != nil {
		return x.xxx_hidden_MapStringNestedEnum
	}
	return nil
}

func (x *TestAllTypes) GetDefaultInt32() int32 {
	if x != nil {
		if protoimpl.X.Present(&(x.XXX_presence[2]), 81) {
			return x.xxx_hidden_DefaultInt32
		}
	}
	return Default_TestAllTypes_DefaultInt32
}

func (x *TestAllTypes) GetDefaultInt64() int64 {
	if x != nil {
		if protoimpl.X.Present(&(x.XXX_presence[2]), 82) {
			return x.xxx_hidden_DefaultInt64
		}
	}
	return Default_TestAllTypes_DefaultInt64
}

func (x *TestAllTypes) GetDefaultUint32() uint32 {
	if x != nil {
		if protoimpl.X.Present(&(x.XXX_presence[2]), 83) {
			return x.xxx_hidden_DefaultUint32
		}
	}
	return Default_TestAllTypes_DefaultUint32
}

func (x *TestAllTypes) GetDefaultUint64() uint64 {
	if x != nil {
		if protoimpl.X.Present(&(x.XXX_presence[2]), 84) {
			return x.xxx_hidden_DefaultUint64
		}
	}
	return Default_TestAllTypes_DefaultUint64
}

func (x *TestAllTypes) GetDefaultSint32() int32 {
	if x != nil {
		if protoimpl.X.Present(&(x.XXX_presence[2]), 85) {
			return x.xxx_hidden_DefaultSint32
		}
	}
	return Default_TestAllTypes_DefaultSint32
}

func (x *TestAllTypes) GetDefaultSint64() int64 {
	if x != nil {
		if protoimpl.X.Present(&(x.XXX_presence[2]), 86) {
			return x.xxx_hidden_DefaultSint64
		}
	}
	return Default_TestAllTypes_DefaultSint64
}

func (x *TestAllTypes) GetDefaultFixed32() uint32 {
	if x != nil {
		if protoimpl.X.Present(&(x.XXX_presence[2]), 87) {
			return x.xxx_hidden_DefaultFixed32
		}
	}
	return Default_TestAllTypes_DefaultFixed32
}

func (x *TestAllTypes) GetDefaultFixed64() uint64 {
	if x != nil {
		if protoimpl.X.Present(&(x.XXX_presence[2]), 88) {
			return x.xxx_hidden_DefaultFixed64
		}
	}
	return Default_TestAllTypes_DefaultFixed64
}

func (x *TestAllTypes) GetDefaultSfixed32() int32 {
	if x != nil {
		if protoimpl.X.Present(&(x.XXX_presence[2]), 89) {
			return x.xxx_hidden_DefaultSfixed32
		}
	}
	return Default_TestAllTypes_DefaultSfixed32
}

func (x *TestAllTypes) GetDefaultSfixed64() int64 {
	if x != nil {
		if protoimpl.X.Present(&(x.XXX_presence[2]), 90) {
			return x.xxx_hidden_DefaultSfixed64
		}
	}
	return Default_TestAllTypes_DefaultSfixed64
}

func (x *TestAllTypes) GetDefaultFloat() float32 {
	if x != nil {
		if protoimpl.X.Present(&(x.XXX_presence[2]), 91) {
			return x.xxx_hidden_DefaultFloat
		}
	}
	return Default_TestAllTypes_DefaultFloat
}

func (x *TestAllTypes) GetDefaultDouble() float64 {
	if x != nil {
		if protoimpl.X.Present(&(x.XXX_presence[2]), 92) {
			return x.xxx_hidden_DefaultDouble
		}
	}
	return Default_TestAllTypes_DefaultDouble
}

func (x *TestAllTypes) GetDefaultBool() bool {
	if x != nil {
		if protoimpl.X.Present(&(x.XXX_presence[2]), 93) {
			return x.xxx_hidden_DefaultBool
		}
	}
	return Default_TestAllTypes_DefaultBool
}

func (x *TestAllTypes) GetDefaultString() string {
	if x != nil {
		if protoimpl.X.Present(&(x.XXX_presence[2]), 94) {
			if x.xxx_hidden_DefaultString != nil {
				return *x.xxx_hidden_DefaultString
			}
			return Default_TestAllTypes_DefaultString
		}
	}
	return Default_TestAllTypes_DefaultString
}

func (x *TestAllTypes) GetDefaultBytes() []byte {
	if x != nil {
		if protoimpl.X.Present(&(x.XXX_presence[2]), 95) {
			return x.xxx_hidden_DefaultBytes
		}
	}
	return append([]byte(nil), Default_TestAllTypes_DefaultBytes...)
}

func (x *TestAllTypes) GetDefaultNestedEnum() TestAllTypes_NestedEnum {
	if x != nil {
		if protoimpl.X.Present(&(x.XXX_presence[3]), 96) {
			return x.xxx_hidden_DefaultNestedEnum
		}
	}
	return Default_TestAllTypes_DefaultNestedEnum
}

func (x *TestAllTypes) GetDefaultForeignEnum() ForeignEnum {
	if x != nil {
		if protoimpl.X.Present(&(x.XXX_presence[3]), 97) {
			return x.xxx_hidden_DefaultForeignEnum
		}
	}
	return Default_TestAllTypes_DefaultForeignEnum
}

func (x *TestAllTypes) GetOneofUint32() uint32 {
	if x != nil {
		if x, ok := x.xxx_hidden_OneofField.(*testAllTypes_OneofUint32); ok {
			return x.OneofUint32
		}
	}
	return 0
}

func (x *TestAllTypes) GetOneofNestedMessage() *TestAllTypes_NestedMessage {
	if x != nil {
		if x, ok := x.xxx_hidden_OneofField.(*testAllTypes_OneofNestedMessage); ok {
			return x.OneofNestedMessage
		}
	}
	return nil
}

func (x *TestAllTypes) GetOneofString() string {
	if x != nil {
		if x, ok := x.xxx_hidden_OneofField.(*testAllTypes_OneofString); ok {
			return x.OneofString
		}
	}
	return ""
}

func (x *TestAllTypes) GetOneofBytes() []byte {
	if x != nil {
		if x, ok := x.xxx_hidden_OneofField.(*testAllTypes_OneofBytes); ok {
			return x.OneofBytes
		}
	}
	return nil
}

func (x *TestAllTypes) GetOneofBool() bool {
	if x != nil {
		if x, ok := x.xxx_hidden_OneofField.(*testAllTypes_OneofBool); ok {
			return x.OneofBool
		}
	}
	return false
}

func (x *TestAllTypes) GetOneofUint64() uint64 {
	if x != nil {
		if x, ok := x.xxx_hidden_OneofField.(*testAllTypes_OneofUint64); ok {
			return x.OneofUint64
		}
	}
	return 0
}

func (x *TestAllTypes) GetOneofFloat() float32 {
	if x != nil {
		if x, ok := x.xxx_hidden_OneofField.(*testAllTypes_OneofFloat); ok {
			return x.OneofFloat
		}
	}
	return 0
}

func (x *TestAllTypes) GetOneofDouble() float64 {
	if x != nil {
		if x, ok := x.xxx_hidden_OneofField.(*testAllTypes_OneofDouble); ok {
			return x.OneofDouble
		}
	}
	return 0
}

func (x *TestAllTypes) GetOneofEnum() TestAllTypes_NestedEnum {
	if x != nil {
		if x, ok := x.xxx_hidden_OneofField.(*testAllTypes_OneofEnum); ok {
			return x.OneofEnum
		}
	}
	return TestAllTypes_FOO
}

func (x *TestAllTypes) GetOneofgroup() *TestAllTypes_OneofGroup {
	if x != nil {
		if x, ok := x.xxx_hidden_OneofField.(*testAllTypes_Oneofgroup); ok {
			return x.Oneofgroup
		}
	}
	return nil
}

func (x *TestAllTypes) GetOneofOptionalUint32() uint32 {
	if x != nil {
		if x, ok := x.xxx_hidden_OneofOptional.(*testAllTypes_OneofOptionalUint32); ok {
			return x.OneofOptionalUint32
		}
	}
	return 0
}

func (x *TestAllTypes) SetSingularInt32(v int32) {
	x.xxx_hidden_SingularInt32 = v
}

func (x *TestAllTypes) SetSingularInt64(v int64) {
	x.xxx_hidden_SingularInt64 = v
}

func (x *TestAllTypes) SetSingularUint32(v uint32) {
	x.xxx_hidden_SingularUint32 = v
}

func (x *TestAllTypes) SetSingularUint64(v uint64) {
	x.xxx_hidden_SingularUint64 = v
}

func (x *TestAllTypes) SetSingularSint32(v int32) {
	x.xxx_hidden_SingularSint32 = v
}

func (x *TestAllTypes) SetSingularSint64(v int64) {
	x.xxx_hidden_SingularSint64 = v
}

func (x *TestAllTypes) SetSingularFixed32(v uint32) {
	x.xxx_hidden_SingularFixed32 = v
}

func (x *TestAllTypes) SetSingularFixed64(v uint64) {
	x.xxx_hidden_SingularFixed64 = v
}

func (x *TestAllTypes) SetSingularSfixed32(v int32) {
	x.xxx_hidden_SingularSfixed32 = v
}

func (x *TestAllTypes) SetSingularSfixed64(v int64) {
	x.xxx_hidden_SingularSfixed64 = v
}

func (x *TestAllTypes) SetSingularFloat(v float32) {
	x.xxx_hidden_SingularFloat = v
}

func (x *TestAllTypes) SetSingularDouble(v float64) {
	x.xxx_hidden_SingularDouble = v
}

func (x *TestAllTypes) SetSingularBool(v bool) {
	x.xxx_hidden_SingularBool = v
}

func (x *TestAllTypes) SetSingularString(v string) {
	x.xxx_hidden_SingularString = v
}

func (x *TestAllTypes) SetSingularBytes(v []byte) {
	if v == nil {
		v = []byte{}
	}
	x.xxx_hidden_SingularBytes = v
}

func (x *TestAllTypes) SetSingularNestedEnum(v TestAllTypes_NestedEnum) {
	x.xxx_hidden_SingularNestedEnum = v
}

func (x *TestAllTypes) SetSingularForeignEnum(v ForeignEnum) {
	x.xxx_hidden_SingularForeignEnum = v
}

func (x *TestAllTypes) SetSingularImportEnum(v ImportEnum) {
	x.xxx_hidden_SingularImportEnum = v
}

func (x *TestAllTypes) SetOptionalInt32(v int32) {
	x.xxx_hidden_OptionalInt32 = v
	protoimpl.X.SetPresent(&(x.XXX_presence[0]), 18, 100)
}

func (x *TestAllTypes) SetOptionalInt64(v int64) {
	x.xxx_hidden_OptionalInt64 = v
	protoimpl.X.SetPresent(&(x.XXX_presence[0]), 19, 100)
}

func (x *TestAllTypes) SetOptionalUint32(v uint32) {
	x.xxx_hidden_OptionalUint32 = v
	protoimpl.X.SetPresent(&(x.XXX_presence[0]), 20, 100)
}

func (x *TestAllTypes) SetOptionalUint64(v uint64) {
	x.xxx_hidden_OptionalUint64 = v
	protoimpl.X.SetPresent(&(x.XXX_presence[0]), 21, 100)
}

func (x *TestAllTypes) SetOptionalSint32(v int32) {
	x.xxx_hidden_OptionalSint32 = v
	protoimpl.X.SetPresent(&(x.XXX_presence[0]), 22, 100)
}

func (x *TestAllTypes) SetOptionalSint64(v int64) {
	x.xxx_hidden_OptionalSint64 = v
	protoimpl.X.SetPresent(&(x.XXX_presence[0]), 23, 100)
}

func (x *TestAllTypes) SetOptionalFixed32(v uint32) {
	x.xxx_hidden_OptionalFixed32 = v
	protoimpl.X.SetPresent(&(x.XXX_presence[0]), 24, 100)
}

func (x *TestAllTypes) SetOptionalFixed64(v uint64) {
	x.xxx_hidden_OptionalFixed64 = v
	protoimpl.X.SetPresent(&(x.XXX_presence[0]), 25, 100)
}

func (x *TestAllTypes) SetOptionalSfixed32(v int32) {
	x.xxx_hidden_OptionalSfixed32 = v
	protoimpl.X.SetPresent(&(x.XXX_presence[0]), 26, 100)
}

func (x *TestAllTypes) SetOptionalSfixed64(v int64) {
	x.xxx_hidden_OptionalSfixed64 = v
	protoimpl.X.SetPresent(&(x.XXX_presence[0]), 27, 100)
}

func (x *TestAllTypes) SetOptionalFloat(v float32) {
	x.xxx_hidden_OptionalFloat = v
	protoimpl.X.SetPresent(&(x.XXX_presence[0]), 28, 100)
}

func (x *TestAllTypes) SetOptionalDouble(v float64) {
	x.xxx_hidden_OptionalDouble = v
	protoimpl.X.SetPresent(&(x.XXX_presence[0]), 29, 100)
}

func (x *TestAllTypes) SetOptionalBool(v bool) {
	x.xxx_hidden_OptionalBool = v
	protoimpl.X.SetPresent(&(x.XXX_presence[0]), 30, 100)
}

func (x *TestAllTypes) SetOptionalString(v string) {
	x.xxx_hidden_OptionalString = &v
	protoimpl.X.SetPresent(&(x.XXX_presence[0]), 31, 100)
}

func (x *TestAllTypes) SetOptionalBytes(v []byte) {
	if v == nil {
		v = []byte{}
	}
	x.xxx_hidden_OptionalBytes = v
	protoimpl.X.SetPresent(&(x.XXX_presence[1]), 32, 100)
}

func (x *TestAllTypes) SetOptionalgroup(v *TestAllTypes_OptionalGroup) {
	x.xxx_hidden_Optionalgroup = v
}

func (x *TestAllTypes) SetNotGroupLikeDelimited(v *TestAllTypes_OptionalGroup) {
	x.xxx_hidden_NotGroupLikeDelimited = v
}

func (x *TestAllTypes) SetOptionalNestedMessage(v *TestAllTypes_NestedMessage) {
	x.xxx_hidden_OptionalNestedMessage = v
}

func (x *TestAllTypes) SetOptionalForeignMessage(v *ForeignMessage) {
	x.xxx_hidden_OptionalForeignMessage = v
}

func (x *TestAllTypes) SetOptionalImportMessage(v *ImportMessage) {
	x.xxx_hidden_OptionalImportMessage = v
}

func (x *TestAllTypes) SetOptionalNestedEnum(v TestAllTypes_NestedEnum) {
	x.xxx_hidden_OptionalNestedEnum = v
	protoimpl.X.SetPresent(&(x.XXX_presence[1]), 38, 100)
}

func (x *TestAllTypes) SetOptionalForeignEnum(v ForeignEnum) {
	x.xxx_hidden_OptionalForeignEnum = v
	protoimpl.X.SetPresent(&(x.XXX_presence[1]), 39, 100)
}

func (x *TestAllTypes) SetOptionalImportEnum(v ImportEnum) {
	x.xxx_hidden_OptionalImportEnum = v
	protoimpl.X.SetPresent(&(x.XXX_presence[1]), 40, 100)
}

func (x *TestAllTypes) SetOptionalLazyNestedMessage(v *TestAllTypes_NestedMessage) {
	protoimpl.X.AtomicSetPointer(&x.xxx_hidden_OptionalLazyNestedMessage, v)
	if v == nil {
		protoimpl.X.ClearPresent(&(x.XXX_presence[1]), 41)
	} else {
		protoimpl.X.SetPresent(&(x.XXX_presence[1]), 41, 100)
	}
}

func (x *TestAllTypes) SetRepeatedInt32(v []int32) {
	x.xxx_hidden_RepeatedInt32 = v
}

func (x *TestAllTypes) SetRepeatedInt64(v []int64) {
	x.xxx_hidden_RepeatedInt64 = v
}

func (x *TestAllTypes) SetRepeatedUint32(v []uint32) {
	x.xxx_hidden_RepeatedUint32 = v
}

func (x *TestAllTypes) SetRepeatedUint64(v []uint64) {
	x.xxx_hidden_RepeatedUint64 = v
}

func (x *TestAllTypes) SetRepeatedSint32(v []int32) {
	x.xxx_hidden_RepeatedSint32 = v
}

func (x *TestAllTypes) SetRepeatedSint64(v []int64) {
	x.xxx_hidden_RepeatedSint64 = v
}

func (x *TestAllTypes) SetRepeatedFixed32(v []uint32) {
	x.xxx_hidden_RepeatedFixed32 = v
}

func (x *TestAllTypes) SetRepeatedFixed64(v []uint64) {
	x.xxx_hidden_RepeatedFixed64 = v
}

func (x *TestAllTypes) SetRepeatedSfixed32(v []int32) {
	x.xxx_hidden_RepeatedSfixed32 = v
}

func (x *TestAllTypes) SetRepeatedSfixed64(v []int64) {
	x.xxx_hidden_RepeatedSfixed64 = v
}

func (x *TestAllTypes) SetRepeatedFloat(v []float32) {
	x.xxx_hidden_RepeatedFloat = v
}

func (x *TestAllTypes) SetRepeatedDouble(v []float64) {
	x.xxx_hidden_RepeatedDouble = v
}

func (x *TestAllTypes) SetRepeatedBool(v []bool) {
	x.xxx_hidden_RepeatedBool = v
}

func (x *TestAllTypes) SetRepeatedString(v []string) {
	x.xxx_hidden_RepeatedString = v
}

func (x *TestAllTypes) SetRepeatedBytes(v [][]byte) {
	x.xxx_hidden_RepeatedBytes = v
}

func (x *TestAllTypes) SetRepeatedgroup(v []*TestAllTypes_RepeatedGroup) {
	x.xxx_hidden_Repeatedgroup = &v
}

func (x *TestAllTypes) SetRepeatedNestedMessage(v []*TestAllTypes_NestedMessage) {
	x.xxx_hidden_RepeatedNestedMessage = &v
}

func (x *TestAllTypes) SetRepeatedForeignMessage(v []*ForeignMessage) {
	x.xxx_hidden_RepeatedForeignMessage = &v
}

func (x *TestAllTypes) SetRepeatedImportmessage(v []*ImportMessage) {
	x.xxx_hidden_RepeatedImportmessage = &v
}

func (x *TestAllTypes) SetRepeatedNestedEnum(v []TestAllTypes_NestedEnum) {
	x.xxx_hidden_RepeatedNestedEnum = v
}

func (x *TestAllTypes) SetRepeatedForeignEnum(v []ForeignEnum) {
	x.xxx_hidden_RepeatedForeignEnum = v
}

func (x *TestAllTypes) SetRepeatedImportenum(v []ImportEnum) {
	x.xxx_hidden_RepeatedImportenum = v
}

func (x *TestAllTypes) SetMapInt32Int32(v map[int32]int32) {
	x.xxx_hidden_MapInt32Int32 = v
}

func (x *TestAllTypes) SetMapInt64Int64(v map[int64]int64) {
	x.xxx_hidden_MapInt64Int64 = v
}

func (x *TestAllTypes) SetMapUint32Uint32(v map[uint32]uint32) {
	x.xxx_hidden_MapUint32Uint32 = v
}

func (x *TestAllTypes) SetMapUint64Uint64(v map[uint64]uint64) {
	x.xxx_hidden_MapUint64Uint64 = v
}

func (x *TestAllTypes) SetMapSint32Sint32(v map[int32]int32) {
	x.xxx_hidden_MapSint32Sint32 = v
}

func (x *TestAllTypes) SetMapSint64Sint64(v map[int64]int64) {
	x.xxx_hidden_MapSint64Sint64 = v
}

func (x *TestAllTypes) SetMapFixed32Fixed32(v map[uint32]uint32) {
	x.xxx_hidden_MapFixed32Fixed32 = v
}

func (x *TestAllTypes) SetMapFixed64Fixed64(v map[uint64]uint64) {
	x.xxx_hidden_MapFixed64Fixed64 = v
}

func (x *TestAllTypes) SetMapSfixed32Sfixed32(v map[int32]int32) {
	x.xxx_hidden_MapSfixed32Sfixed32 = v
}

func (x *TestAllTypes) SetMapSfixed64Sfixed64(v map[int64]int64) {
	x.xxx_hidden_MapSfixed64Sfixed64 = v
}

func (x *TestAllTypes) SetMapInt32Float(v map[int32]float32) {
	x.xxx_hidden_MapInt32Float = v
}

func (x *TestAllTypes) SetMapInt32Double(v map[int32]float64) {
	x.xxx_hidden_MapInt32Double = v
}

func (x *TestAllTypes) SetMapBoolBool(v map[bool]bool) {
	x.xxx_hidden_MapBoolBool = v
}

func (x *TestAllTypes) SetMapStringString(v map[string]string) {
	x.xxx_hidden_MapStringString = v
}

func (x *TestAllTypes) SetMapStringBytes(v map[string][]byte) {
	x.xxx_hidden_MapStringBytes = v
}

func (x *TestAllTypes) SetMapStringNestedMessage(v map[string]*TestAllTypes_NestedMessage) {
	x.xxx_hidden_MapStringNestedMessage = v
}

func (x *TestAllTypes) SetMapStringNestedEnum(v map[string]TestAllTypes_NestedEnum) {
	x.xxx_hidden_MapStringNestedEnum = v
}

func (x *TestAllTypes) SetDefaultInt32(v int32) {
	x.xxx_hidden_DefaultInt32 = v
	protoimpl.X.SetPresent(&(x.XXX_presence[2]), 81, 100)
}

func (x *TestAllTypes) SetDefaultInt64(v int64) {
	x.xxx_hidden_DefaultInt64 = v
	protoimpl.X.SetPresent(&(x.XXX_presence[2]), 82, 100)
}

func (x *TestAllTypes) SetDefaultUint32(v uint32) {
	x.xxx_hidden_DefaultUint32 = v
	protoimpl.X.SetPresent(&(x.XXX_presence[2]), 83, 100)
}

func (x *TestAllTypes) SetDefaultUint64(v uint64) {
	x.xxx_hidden_DefaultUint64 = v
	protoimpl.X.SetPresent(&(x.XXX_presence[2]), 84, 100)
}

func (x *TestAllTypes) SetDefaultSint32(v int32) {
	x.xxx_hidden_DefaultSint32 = v
	protoimpl.X.SetPresent(&(x.XXX_presence[2]), 85, 100)
}

func (x *TestAllTypes) SetDefaultSint64(v int64) {
	x.xxx_hidden_DefaultSint64 = v
	protoimpl.X.SetPresent(&(x.XXX_presence[2]), 86, 100)
}

func (x *TestAllTypes) SetDefaultFixed32(v uint32) {
	x.xxx_hidden_DefaultFixed32 = v
	protoimpl.X.SetPresent(&(x.XXX_presence[2]), 87, 100)
}

func (x *TestAllTypes) SetDefaultFixed64(v uint64) {
	x.xxx_hidden_DefaultFixed64 = v
	protoimpl.X.SetPresent(&(x.XXX_presence[2]), 88, 100)
}

func (x *TestAllTypes) SetDefaultSfixed32(v int32) {
	x.xxx_hidden_DefaultSfixed32 = v
	protoimpl.X.SetPresent(&(x.XXX_presence[2]), 89, 100)
}

func (x *TestAllTypes) SetDefaultSfixed64(v int64) {
	x.xxx_hidden_DefaultSfixed64 = v
	protoimpl.X.SetPresent(&(x.XXX_presence[2]), 90, 100)
}

func (x *TestAllTypes) SetDefaultFloat(v float32) {
	x.xxx_hidden_DefaultFloat = v
	protoimpl.X.SetPresent(&(x.XXX_presence[2]), 91, 100)
}

func (x *TestAllTypes) SetDefaultDouble(v float64) {
	x.xxx_hidden_DefaultDouble = v
	protoimpl.X.SetPresent(&(x.XXX_presence[2]), 92, 100)
}

func (x *TestAllTypes) SetDefaultBool(v bool) {
	x.xxx_hidden_DefaultBool = v
	protoimpl.X.SetPresent(&(x.XXX_presence[2]), 93, 100)
}

func (x *TestAllTypes) SetDefaultString(v string) {
	x.xxx_hidden_DefaultString = &v
	protoimpl.X.SetPresent(&(x.XXX_presence[2]), 94, 100)
}

func (x *TestAllTypes) SetDefaultBytes(v []byte) {
	if v == nil {
		v = []byte{}
	}
	x.xxx_hidden_DefaultBytes = v
	protoimpl.X.SetPresent(&(x.XXX_presence[2]), 95, 100)
}

func (x *TestAllTypes) SetDefaultNestedEnum(v TestAllTypes_NestedEnum) {
	x.xxx_hidden_DefaultNestedEnum = v
	protoimpl.X.SetPresent(&(x.XXX_presence[3]), 96, 100)
}

func (x *TestAllTypes) SetDefaultForeignEnum(v ForeignEnum) {
	x.xxx_hidden_DefaultForeignEnum = v
	protoimpl.X.SetPresent(&(x.XXX_presence[3]), 97, 100)
}

func (x *TestAllTypes) SetOneofUint32(v uint32) {
	x.xxx_hidden_OneofField = &testAllTypes_OneofUint32{v}
}

func (x *TestAllTypes) SetOneofNestedMessage(v *TestAllTypes_NestedMessage) {
	if v == nil {
		x.xxx_hidden_OneofField = nil
		return
	}
	x.xxx_hidden_OneofField = &testAllTypes_OneofNestedMessage{v}
}

func (x *TestAllTypes) SetOneofString(v string) {
	x.xxx_hidden_OneofField = &testAllTypes_OneofString{v}
}

func (x *TestAllTypes) SetOneofBytes(v []byte) {
	if v == nil {
		v = []byte{}
	}
	x.xxx_hidden_OneofField = &testAllTypes_OneofBytes{v}
}

func (x *TestAllTypes) SetOneofBool(v bool) {
	x.xxx_hidden_OneofField = &testAllTypes_OneofBool{v}
}

func (x *TestAllTypes) SetOneofUint64(v uint64) {
	x.xxx_hidden_OneofField = &testAllTypes_OneofUint64{v}
}

func (x *TestAllTypes) SetOneofFloat(v float32) {
	x.xxx_hidden_OneofField = &testAllTypes_OneofFloat{v}
}

func (x *TestAllTypes) SetOneofDouble(v float64) {
	x.xxx_hidden_OneofField = &testAllTypes_OneofDouble{v}
}

func (x *TestAllTypes) SetOneofEnum(v TestAllTypes_NestedEnum) {
	x.xxx_hidden_OneofField = &testAllTypes_OneofEnum{v}
}

func (x *TestAllTypes) SetOneofgroup(v *TestAllTypes_OneofGroup) {
	if v == nil {
		x.xxx_hidden_OneofField = nil
		return
	}
	x.xxx_hidden_OneofField = &testAllTypes_Oneofgroup{v}
}

func (x *TestAllTypes) SetOneofOptionalUint32(v uint32) {
	x.xxx_hidden_OneofOptional = &testAllTypes_OneofOptionalUint32{v}
}

func (x *TestAllTypes) HasOptionalInt32() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[0]), 18)
}

func (x *TestAllTypes) HasOptionalInt64() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[0]), 19)
}

func (x *TestAllTypes) HasOptionalUint32() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[0]), 20)
}

func (x *TestAllTypes) HasOptionalUint64() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[0]), 21)
}

func (x *TestAllTypes) HasOptionalSint32() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[0]), 22)
}

func (x *TestAllTypes) HasOptionalSint64() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[0]), 23)
}

func (x *TestAllTypes) HasOptionalFixed32() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[0]), 24)
}

func (x *TestAllTypes) HasOptionalFixed64() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[0]), 25)
}

func (x *TestAllTypes) HasOptionalSfixed32() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[0]), 26)
}

func (x *TestAllTypes) HasOptionalSfixed64() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[0]), 27)
}

func (x *TestAllTypes) HasOptionalFloat() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[0]), 28)
}

func (x *TestAllTypes) HasOptionalDouble() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[0]), 29)
}

func (x *TestAllTypes) HasOptionalBool() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[0]), 30)
}

func (x *TestAllTypes) HasOptionalString() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[0]), 31)
}

func (x *TestAllTypes) HasOptionalBytes() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[1]), 32)
}

func (x *TestAllTypes) HasOptionalgroup() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_Optionalgroup != nil
}

func (x *TestAllTypes) HasNotGroupLikeDelimited() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_NotGroupLikeDelimited != nil
}

func (x *TestAllTypes) HasOptionalNestedMessage() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_OptionalNestedMessage != nil
}

func (x *TestAllTypes) HasOptionalForeignMessage() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_OptionalForeignMessage != nil
}

func (x *TestAllTypes) HasOptionalImportMessage() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_OptionalImportMessage != nil
}

func (x *TestAllTypes) HasOptionalNestedEnum() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[1]), 38)
}

func (x *TestAllTypes) HasOptionalForeignEnum() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[1]), 39)
}

func (x *TestAllTypes) HasOptionalImportEnum() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[1]), 40)
}

func (x *TestAllTypes) HasOptionalLazyNestedMessage() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[1]), 41)
}

func (x *TestAllTypes) HasDefaultInt32() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[2]), 81)
}

func (x *TestAllTypes) HasDefaultInt64() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[2]), 82)
}

func (x *TestAllTypes) HasDefaultUint32() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[2]), 83)
}

func (x *TestAllTypes) HasDefaultUint64() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[2]), 84)
}

func (x *TestAllTypes) HasDefaultSint32() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[2]), 85)
}

func (x *TestAllTypes) HasDefaultSint64() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[2]), 86)
}

func (x *TestAllTypes) HasDefaultFixed32() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[2]), 87)
}

func (x *TestAllTypes) HasDefaultFixed64() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[2]), 88)
}

func (x *TestAllTypes) HasDefaultSfixed32() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[2]), 89)
}

func (x *TestAllTypes) HasDefaultSfixed64() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[2]), 90)
}

func (x *TestAllTypes) HasDefaultFloat() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[2]), 91)
}

func (x *TestAllTypes) HasDefaultDouble() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[2]), 92)
}

func (x *TestAllTypes) HasDefaultBool() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[2]), 93)
}

func (x *TestAllTypes) HasDefaultString() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[2]), 94)
}

func (x *TestAllTypes) HasDefaultBytes() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[2]), 95)
}

func (x *TestAllTypes) HasDefaultNestedEnum() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[3]), 96)
}

func (x *TestAllTypes) HasDefaultForeignEnum() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[3]), 97)
}

func (x *TestAllTypes) HasOneofField() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_OneofField != nil
}

func (x *TestAllTypes) HasOneofUint32() bool {
	if x == nil {
		return false
	}
	_, ok := x.xxx_hidden_OneofField.(*testAllTypes_OneofUint32)
	return ok
}

func (x *TestAllTypes) HasOneofNestedMessage() bool {
	if x == nil {
		return false
	}
	_, ok := x.xxx_hidden_OneofField.(*testAllTypes_OneofNestedMessage)
	return ok
}

func (x *TestAllTypes) HasOneofString() bool {
	if x == nil {
		return false
	}
	_, ok := x.xxx_hidden_OneofField.(*testAllTypes_OneofString)
	return ok
}

func (x *TestAllTypes) HasOneofBytes() bool {
	if x == nil {
		return false
	}
	_, ok := x.xxx_hidden_OneofField.(*testAllTypes_OneofBytes)
	return ok
}

func (x *TestAllTypes) HasOneofBool() bool {
	if x == nil {
		return false
	}
	_, ok := x.xxx_hidden_OneofField.(*testAllTypes_OneofBool)
	return ok
}

func (x *TestAllTypes) HasOneofUint64() bool {
	if x == nil {
		return false
	}
	_, ok := x.xxx_hidden_OneofField.(*testAllTypes_OneofUint64)
	return ok
}

func (x *TestAllTypes) HasOneofFloat() bool {
	if x == nil {
		return false
	}
	_, ok := x.xxx_hidden_OneofField.(*testAllTypes_OneofFloat)
	return ok
}

func (x *TestAllTypes) HasOneofDouble() bool {
	if x == nil {
		return false
	}
	_, ok := x.xxx_hidden_OneofField.(*testAllTypes_OneofDouble)
	return ok
}

func (x *TestAllTypes) HasOneofEnum() bool {
	if x == nil {
		return false
	}
	_, ok := x.xxx_hidden_OneofField.(*testAllTypes_OneofEnum)
	return ok
}

func (x *TestAllTypes) HasOneofgroup() bool {
	if x == nil {
		return false
	}
	_, ok := x.xxx_hidden_OneofField.(*testAllTypes_Oneofgroup)
	return ok
}

func (x *TestAllTypes) HasOneofOptional() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_OneofOptional != nil
}

func (x *TestAllTypes) HasOneofOptionalUint32() bool {
	if x == nil {
		return false
	}
	_, ok := x.xxx_hidden_OneofOptional.(*testAllTypes_OneofOptionalUint32)
	return ok
}

func (x *TestAllTypes) ClearOptionalInt32() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[0]), 18)
	x.xxx_hidden_OptionalInt32 = 0
}

func (x *TestAllTypes) ClearOptionalInt64() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[0]), 19)
	x.xxx_hidden_OptionalInt64 = 0
}

func (x *TestAllTypes) ClearOptionalUint32() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[0]), 20)
	x.xxx_hidden_OptionalUint32 = 0
}

func (x *TestAllTypes) ClearOptionalUint64() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[0]), 21)
	x.xxx_hidden_OptionalUint64 = 0
}

func (x *TestAllTypes) ClearOptionalSint32() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[0]), 22)
	x.xxx_hidden_OptionalSint32 = 0
}

func (x *TestAllTypes) ClearOptionalSint64() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[0]), 23)
	x.xxx_hidden_OptionalSint64 = 0
}

func (x *TestAllTypes) ClearOptionalFixed32() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[0]), 24)
	x.xxx_hidden_OptionalFixed32 = 0
}

func (x *TestAllTypes) ClearOptionalFixed64() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[0]), 25)
	x.xxx_hidden_OptionalFixed64 = 0
}

func (x *TestAllTypes) ClearOptionalSfixed32() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[0]), 26)
	x.xxx_hidden_OptionalSfixed32 = 0
}

func (x *TestAllTypes) ClearOptionalSfixed64() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[0]), 27)
	x.xxx_hidden_OptionalSfixed64 = 0
}

func (x *TestAllTypes) ClearOptionalFloat() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[0]), 28)
	x.xxx_hidden_OptionalFloat = 0
}

func (x *TestAllTypes) ClearOptionalDouble() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[0]), 29)
	x.xxx_hidden_OptionalDouble = 0
}

func (x *TestAllTypes) ClearOptionalBool() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[0]), 30)
	x.xxx_hidden_OptionalBool = false
}

func (x *TestAllTypes) ClearOptionalString() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[0]), 31)
	x.xxx_hidden_OptionalString = nil
}

func (x *TestAllTypes) ClearOptionalBytes() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[1]), 32)
	x.xxx_hidden_OptionalBytes = nil
}

func (x *TestAllTypes) ClearOptionalgroup() {
	x.xxx_hidden_Optionalgroup = nil
}

func (x *TestAllTypes) ClearNotGroupLikeDelimited() {
	x.xxx_hidden_NotGroupLikeDelimited = nil
}

func (x *TestAllTypes) ClearOptionalNestedMessage() {
	x.xxx_hidden_OptionalNestedMessage = nil
}

func (x *TestAllTypes) ClearOptionalForeignMessage() {
	x.xxx_hidden_OptionalForeignMessage = nil
}

func (x *TestAllTypes) ClearOptionalImportMessage() {
	x.xxx_hidden_OptionalImportMessage = nil
}

func (x *TestAllTypes) ClearOptionalNestedEnum() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[1]), 38)
	x.xxx_hidden_OptionalNestedEnum = TestAllTypes_FOO
}

func (x *TestAllTypes) ClearOptionalForeignEnum() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[1]), 39)
	x.xxx_hidden_OptionalForeignEnum = ForeignEnum_FOREIGN_ZERO
}

func (x *TestAllTypes) ClearOptionalImportEnum() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[1]), 40)
	x.xxx_hidden_OptionalImportEnum = ImportEnum_IMPORT_ZERO
}

func (x *TestAllTypes) ClearOptionalLazyNestedMessage() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[1]), 41)
	protoimpl.X.AtomicSetPointer(&x.xxx_hidden_OptionalLazyNestedMessage, (*TestAllTypes_NestedMessage)(nil))
}

func (x *TestAllTypes) ClearDefaultInt32() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[2]), 81)
}

func (x *TestAllTypes) ClearDefaultInt64() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[2]), 82)
}

func (x *TestAllTypes) ClearDefaultUint32() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[2]), 83)
}

func (x *TestAllTypes) ClearDefaultUint64() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[2]), 84)
}

func (x *TestAllTypes) ClearDefaultSint32() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[2]), 85)
}

func (x *TestAllTypes) ClearDefaultSint64() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[2]), 86)
}

func (x *TestAllTypes) ClearDefaultFixed32() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[2]), 87)
}

func (x *TestAllTypes) ClearDefaultFixed64() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[2]), 88)
}

func (x *TestAllTypes) ClearDefaultSfixed32() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[2]), 89)
}

func (x *TestAllTypes) ClearDefaultSfixed64() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[2]), 90)
}

func (x *TestAllTypes) ClearDefaultFloat() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[2]), 91)
}

func (x *TestAllTypes) ClearDefaultDouble() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[2]), 92)
}

func (x *TestAllTypes) ClearDefaultBool() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[2]), 93)
}

func (x *TestAllTypes) ClearDefaultString() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[2]), 94)
}

func (x *TestAllTypes) ClearDefaultBytes() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[2]), 95)
}

func (x *TestAllTypes) ClearDefaultNestedEnum() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[3]), 96)
}

func (x *TestAllTypes) ClearDefaultForeignEnum() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[3]), 97)
}

func (x *TestAllTypes) ClearOneofField() {
	x.xxx_hidden_OneofField = nil
}

func (x *TestAllTypes) ClearOneofUint32() {
	if _, ok := x.xxx_hidden_OneofField.(*testAllTypes_OneofUint32); ok {
		x.xxx_hidden_OneofField = nil
	}
}

func (x *TestAllTypes) ClearOneofNestedMessage() {
	if _, ok := x.xxx_hidden_OneofField.(*testAllTypes_OneofNestedMessage); ok {
		x.xxx_hidden_OneofField = nil
	}
}

func (x *TestAllTypes) ClearOneofString() {
	if _, ok := x.xxx_hidden_OneofField.(*testAllTypes_OneofString); ok {
		x.xxx_hidden_OneofField = nil
	}
}

func (x *TestAllTypes) ClearOneofBytes() {
	if _, ok := x.xxx_hidden_OneofField.(*testAllTypes_OneofBytes); ok {
		x.xxx_hidden_OneofField = nil
	}
}

func (x *TestAllTypes) ClearOneofBool() {
	if _, ok := x.xxx_hidden_OneofField.(*testAllTypes_OneofBool); ok {
		x.xxx_hidden_OneofField = nil
	}
}

func (x *TestAllTypes) ClearOneofUint64() {
	if _, ok := x.xxx_hidden_OneofField.(*testAllTypes_OneofUint64); ok {
		x.xxx_hidden_OneofField = nil
	}
}

func (x *TestAllTypes) ClearOneofFloat() {
	if _, ok := x.xxx_hidden_OneofField.(*testAllTypes_OneofFloat); ok {
		x.xxx_hidden_OneofField = nil
	}
}

func (x *TestAllTypes) ClearOneofDouble() {
	if _, ok := x.xxx_hidden_OneofField.(*testAllTypes_OneofDouble); ok {
		x.xxx_hidden_OneofField = nil
	}
}

func (x *TestAllTypes) ClearOneofEnum() {
	if _, ok := x.xxx_hidden_OneofField.(*testAllTypes_OneofEnum); ok {
		x.xxx_hidden_OneofField = nil
	}
}

func (x *TestAllTypes) ClearOneofgroup() {
	if _, ok := x.xxx_hidden_OneofField.(*testAllTypes_Oneofgroup); ok {
		x.xxx_hidden_OneofField = nil
	}
}

func (x *TestAllTypes) ClearOneofOptional() {
	x.xxx_hidden_OneofOptional = nil
}

func (x *TestAllTypes) ClearOneofOptionalUint32() {
	if _, ok := x.xxx_hidden_OneofOptional.(*testAllTypes_OneofOptionalUint32); ok {
		x.xxx_hidden_OneofOptional = nil
	}
}

const TestAllTypes_OneofField_not_set_case case_TestAllTypes_OneofField = 0
const TestAllTypes_OneofUint32_case case_TestAllTypes_OneofField = 111
const TestAllTypes_OneofNestedMessage_case case_TestAllTypes_OneofField = 112
const TestAllTypes_OneofString_case case_TestAllTypes_OneofField = 113
const TestAllTypes_OneofBytes_case case_TestAllTypes_OneofField = 114
const TestAllTypes_OneofBool_case case_TestAllTypes_OneofField = 115
const TestAllTypes_OneofUint64_case case_TestAllTypes_OneofField = 116
const TestAllTypes_OneofFloat_case case_TestAllTypes_OneofField = 117
const TestAllTypes_OneofDouble_case case_TestAllTypes_OneofField = 118
const TestAllTypes_OneofEnum_case case_TestAllTypes_OneofField = 119
const TestAllTypes_Oneofgroup_case case_TestAllTypes_OneofField = 121

func (x *TestAllTypes) WhichOneofField() case_TestAllTypes_OneofField {
	if x == nil {
		return TestAllTypes_OneofField_not_set_case
	}
	switch x.xxx_hidden_OneofField.(type) {
	case *testAllTypes_OneofUint32:
		return TestAllTypes_OneofUint32_case
	case *testAllTypes_OneofNestedMessage:
		return TestAllTypes_OneofNestedMessage_case
	case *testAllTypes_OneofString:
		return TestAllTypes_OneofString_case
	case *testAllTypes_OneofBytes:
		return TestAllTypes_OneofBytes_case
	case *testAllTypes_OneofBool:
		return TestAllTypes_OneofBool_case
	case *testAllTypes_OneofUint64:
		return TestAllTypes_OneofUint64_case
	case *testAllTypes_OneofFloat:
		return TestAllTypes_OneofFloat_case
	case *testAllTypes_OneofDouble:
		return TestAllTypes_OneofDouble_case
	case *testAllTypes_OneofEnum:
		return TestAllTypes_OneofEnum_case
	case *testAllTypes_Oneofgroup:
		return TestAllTypes_Oneofgroup_case
	default:
		return TestAllTypes_OneofField_not_set_case
	}
}

const TestAllTypes_OneofOptional_not_set_case case_TestAllTypes_OneofOptional = 0
const TestAllTypes_OneofOptionalUint32_case case_TestAllTypes_OneofOptional = 120

func (x *TestAllTypes) WhichOneofOptional() case_TestAllTypes_OneofOptional {
	if x == nil {
		return TestAllTypes_OneofOptional_not_set_case
	}
	switch x.xxx_hidden_OneofOptional.(type) {
	case *testAllTypes_OneofOptionalUint32:
		return TestAllTypes_OneofOptionalUint32_case
	default:
		return TestAllTypes_OneofOptional_not_set_case
	}
}

type TestAllTypes_builder struct {
	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.

	SingularInt32    int32
	SingularInt64    int64
	SingularUint32   uint32
	SingularUint64   uint64
	SingularSint32   int32
	SingularSint64   int64
	SingularFixed32  uint32
	SingularFixed64  uint64
	SingularSfixed32 int32
	SingularSfixed64 int64
	SingularFloat    float32
	SingularDouble   float64
	SingularBool     bool
	SingularString   string
	SingularBytes    []byte
	// message-typed fields elided, as they cannot specify implicit presence.
	SingularNestedEnum        TestAllTypes_NestedEnum
	SingularForeignEnum       ForeignEnum
	SingularImportEnum        ImportEnum
	OptionalInt32             *int32
	OptionalInt64             *int64
	OptionalUint32            *uint32
	OptionalUint64            *uint64
	OptionalSint32            *int32
	OptionalSint64            *int64
	OptionalFixed32           *uint32
	OptionalFixed64           *uint64
	OptionalSfixed32          *int32
	OptionalSfixed64          *int64
	OptionalFloat             *float32
	OptionalDouble            *float64
	OptionalBool              *bool
	OptionalString            *string
	OptionalBytes             []byte
	Optionalgroup             *TestAllTypes_OptionalGroup
	NotGroupLikeDelimited     *TestAllTypes_OptionalGroup
	OptionalNestedMessage     *TestAllTypes_NestedMessage
	OptionalForeignMessage    *ForeignMessage
	OptionalImportMessage     *ImportMessage
	OptionalNestedEnum        *TestAllTypes_NestedEnum
	OptionalForeignEnum       *ForeignEnum
	OptionalImportEnum        *ImportEnum
	OptionalLazyNestedMessage *TestAllTypes_NestedMessage
	RepeatedInt32             []int32
	RepeatedInt64             []int64
	RepeatedUint32            []uint32
	RepeatedUint64            []uint64
	RepeatedSint32            []int32
	RepeatedSint64            []int64
	RepeatedFixed32           []uint32
	RepeatedFixed64           []uint64
	RepeatedSfixed32          []int32
	RepeatedSfixed64          []int64
	RepeatedFloat             []float32
	RepeatedDouble            []float64
	RepeatedBool              []bool
	RepeatedString            []string
	RepeatedBytes             [][]byte
	Repeatedgroup             []*TestAllTypes_RepeatedGroup
	RepeatedNestedMessage     []*TestAllTypes_NestedMessage
	RepeatedForeignMessage    []*ForeignMessage
	RepeatedImportmessage     []*ImportMessage
	RepeatedNestedEnum        []TestAllTypes_NestedEnum
	RepeatedForeignEnum       []ForeignEnum
	RepeatedImportenum        []ImportEnum
	MapInt32Int32             map[int32]int32
	MapInt64Int64             map[int64]int64
	MapUint32Uint32           map[uint32]uint32
	MapUint64Uint64           map[uint64]uint64
	MapSint32Sint32           map[int32]int32
	MapSint64Sint64           map[int64]int64
	MapFixed32Fixed32         map[uint32]uint32
	MapFixed64Fixed64         map[uint64]uint64
	MapSfixed32Sfixed32       map[int32]int32
	MapSfixed64Sfixed64       map[int64]int64
	MapInt32Float             map[int32]float32
	MapInt32Double            map[int32]float64
	MapBoolBool               map[bool]bool
	MapStringString           map[string]string
	MapStringBytes            map[string][]byte
	MapStringNestedMessage    map[string]*TestAllTypes_NestedMessage
	MapStringNestedEnum       map[string]TestAllTypes_NestedEnum
	// Singular with defaults
	DefaultInt32       *int32
	DefaultInt64       *int64
	DefaultUint32      *uint32
	DefaultUint64      *uint64
	DefaultSint32      *int32
	DefaultSint64      *int64
	DefaultFixed32     *uint32
	DefaultFixed64     *uint64
	DefaultSfixed32    *int32
	DefaultSfixed64    *int64
	DefaultFloat       *float32
	DefaultDouble      *float64
	DefaultBool        *bool
	DefaultString      *string
	DefaultBytes       []byte
	DefaultNestedEnum  *TestAllTypes_NestedEnum
	DefaultForeignEnum *ForeignEnum
	// Fields of oneof xxx_hidden_OneofField:
	OneofUint32        *uint32
	OneofNestedMessage *TestAllTypes_NestedMessage
	OneofString        *string
	OneofBytes         []byte
	OneofBool          *bool
	OneofUint64        *uint64
	OneofFloat         *float32
	OneofDouble        *float64
	OneofEnum          *TestAllTypes_NestedEnum
	Oneofgroup         *TestAllTypes_OneofGroup
	// -- end of xxx_hidden_OneofField
	// A oneof with exactly one field.

	// Fields of oneof xxx_hidden_OneofOptional:
	OneofOptionalUint32 *uint32
	// -- end of xxx_hidden_OneofOptional
}

func (b0 TestAllTypes_builder) Build() *TestAllTypes {
	m0 := &TestAllTypes{}
	b, x := &b0, m0
	_, _ = b, x
	x.xxx_hidden_SingularInt32 = b.SingularInt32
	x.xxx_hidden_SingularInt64 = b.SingularInt64
	x.xxx_hidden_SingularUint32 = b.SingularUint32
	x.xxx_hidden_SingularUint64 = b.SingularUint64
	x.xxx_hidden_SingularSint32 = b.SingularSint32
	x.xxx_hidden_SingularSint64 = b.SingularSint64
	x.xxx_hidden_SingularFixed32 = b.SingularFixed32
	x.xxx_hidden_SingularFixed64 = b.SingularFixed64
	x.xxx_hidden_SingularSfixed32 = b.SingularSfixed32
	x.xxx_hidden_SingularSfixed64 = b.SingularSfixed64
	x.xxx_hidden_SingularFloat = b.SingularFloat
	x.xxx_hidden_SingularDouble = b.SingularDouble
	x.xxx_hidden_SingularBool = b.SingularBool
	x.xxx_hidden_SingularString = b.SingularString
	x.xxx_hidden_SingularBytes = b.SingularBytes
	x.xxx_hidden_SingularNestedEnum = b.SingularNestedEnum
	x.xxx_hidden_SingularForeignEnum = b.SingularForeignEnum
	x.xxx_hidden_SingularImportEnum = b.SingularImportEnum
	if b.OptionalInt32 != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 18, 100)
		x.xxx_hidden_OptionalInt32 = *b.OptionalInt32
	}
	if b.OptionalInt64 != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 19, 100)
		x.xxx_hidden_OptionalInt64 = *b.OptionalInt64
	}
	if b.OptionalUint32 != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 20, 100)
		x.xxx_hidden_OptionalUint32 = *b.OptionalUint32
	}
	if b.OptionalUint64 != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 21, 100)
		x.xxx_hidden_OptionalUint64 = *b.OptionalUint64
	}
	if b.OptionalSint32 != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 22, 100)
		x.xxx_hidden_OptionalSint32 = *b.OptionalSint32
	}
	if b.OptionalSint64 != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 23, 100)
		x.xxx_hidden_OptionalSint64 = *b.OptionalSint64
	}
	if b.OptionalFixed32 != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 24, 100)
		x.xxx_hidden_OptionalFixed32 = *b.OptionalFixed32
	}
	if b.OptionalFixed64 != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 25, 100)
		x.xxx_hidden_OptionalFixed64 = *b.OptionalFixed64
	}
	if b.OptionalSfixed32 != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 26, 100)
		x.xxx_hidden_OptionalSfixed32 = *b.OptionalSfixed32
	}
	if b.OptionalSfixed64 != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 27, 100)
		x.xxx_hidden_OptionalSfixed64 = *b.OptionalSfixed64
	}
	if b.OptionalFloat != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 28, 100)
		x.xxx_hidden_OptionalFloat = *b.OptionalFloat
	}
	if b.OptionalDouble != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 29, 100)
		x.xxx_hidden_OptionalDouble = *b.OptionalDouble
	}
	if b.OptionalBool != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 30, 100)
		x.xxx_hidden_OptionalBool = *b.OptionalBool
	}
	if b.OptionalString != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 31, 100)
		x.xxx_hidden_OptionalString = b.OptionalString
	}
	if b.OptionalBytes != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[1]), 32, 100)
		x.xxx_hidden_OptionalBytes = b.OptionalBytes
	}
	x.xxx_hidden_Optionalgroup = b.Optionalgroup
	x.xxx_hidden_NotGroupLikeDelimited = b.NotGroupLikeDelimited
	x.xxx_hidden_OptionalNestedMessage = b.OptionalNestedMessage
	x.xxx_hidden_OptionalForeignMessage = b.OptionalForeignMessage
	x.xxx_hidden_OptionalImportMessage = b.OptionalImportMessage
	if b.OptionalNestedEnum != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[1]), 38, 100)
		x.xxx_hidden_OptionalNestedEnum = *b.OptionalNestedEnum
	}
	if b.OptionalForeignEnum != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[1]), 39, 100)
		x.xxx_hidden_OptionalForeignEnum = *b.OptionalForeignEnum
	}
	if b.OptionalImportEnum != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[1]), 40, 100)
		x.xxx_hidden_OptionalImportEnum = *b.OptionalImportEnum
	}
	if b.OptionalLazyNestedMessage != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[1]), 41, 100)
		x.xxx_hidden_OptionalLazyNestedMessage = b.OptionalLazyNestedMessage
	}
	x.xxx_hidden_RepeatedInt32 = b.RepeatedInt32
	x.xxx_hidden_RepeatedInt64 = b.RepeatedInt64
	x.xxx_hidden_RepeatedUint32 = b.RepeatedUint32
	x.xxx_hidden_RepeatedUint64 = b.RepeatedUint64
	x.xxx_hidden_RepeatedSint32 = b.RepeatedSint32
	x.xxx_hidden_RepeatedSint64 = b.RepeatedSint64
	x.xxx_hidden_RepeatedFixed32 = b.RepeatedFixed32
	x.xxx_hidden_RepeatedFixed64 = b.RepeatedFixed64
	x.xxx_hidden_RepeatedSfixed32 = b.RepeatedSfixed32
	x.xxx_hidden_RepeatedSfixed64 = b.RepeatedSfixed64
	x.xxx_hidden_RepeatedFloat = b.RepeatedFloat
	x.xxx_hidden_RepeatedDouble = b.RepeatedDouble
	x.xxx_hidden_RepeatedBool = b.RepeatedBool
	x.xxx_hidden_RepeatedString = b.RepeatedString
	x.xxx_hidden_RepeatedBytes = b.RepeatedBytes
	x.xxx_hidden_Repeatedgroup = &b.Repeatedgroup
	x.xxx_hidden_RepeatedNestedMessage = &b.RepeatedNestedMessage
	x.xxx_hidden_RepeatedForeignMessage = &b.RepeatedForeignMessage
	x.xxx_hidden_RepeatedImportmessage = &b.RepeatedImportmessage
	x.xxx_hidden_RepeatedNestedEnum = b.RepeatedNestedEnum
	x.xxx_hidden_RepeatedForeignEnum = b.RepeatedForeignEnum
	x.xxx_hidden_RepeatedImportenum = b.RepeatedImportenum
	x.xxx_hidden_MapInt32Int32 = b.MapInt32Int32
	x.xxx_hidden_MapInt64Int64 = b.MapInt64Int64
	x.xxx_hidden_MapUint32Uint32 = b.MapUint32Uint32
	x.xxx_hidden_MapUint64Uint64 = b.MapUint64Uint64
	x.xxx_hidden_MapSint32Sint32 = b.MapSint32Sint32
	x.xxx_hidden_MapSint64Sint64 = b.MapSint64Sint64
	x.xxx_hidden_MapFixed32Fixed32 = b.MapFixed32Fixed32
	x.xxx_hidden_MapFixed64Fixed64 = b.MapFixed64Fixed64
	x.xxx_hidden_MapSfixed32Sfixed32 = b.MapSfixed32Sfixed32
	x.xxx_hidden_MapSfixed64Sfixed64 = b.MapSfixed64Sfixed64
	x.xxx_hidden_MapInt32Float = b.MapInt32Float
	x.xxx_hidden_MapInt32Double = b.MapInt32Double
	x.xxx_hidden_MapBoolBool = b.MapBoolBool
	x.xxx_hidden_MapStringString = b.MapStringString
	x.xxx_hidden_MapStringBytes = b.MapStringBytes
	x.xxx_hidden_MapStringNestedMessage = b.MapStringNestedMessage
	x.xxx_hidden_MapStringNestedEnum = b.MapStringNestedEnum
	if b.DefaultInt32 != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[2]), 81, 100)
		x.xxx_hidden_DefaultInt32 = *b.DefaultInt32
	}
	if b.DefaultInt64 != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[2]), 82, 100)
		x.xxx_hidden_DefaultInt64 = *b.DefaultInt64
	}
	if b.DefaultUint32 != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[2]), 83, 100)
		x.xxx_hidden_DefaultUint32 = *b.DefaultUint32
	}
	if b.DefaultUint64 != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[2]), 84, 100)
		x.xxx_hidden_DefaultUint64 = *b.DefaultUint64
	}
	if b.DefaultSint32 != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[2]), 85, 100)
		x.xxx_hidden_DefaultSint32 = *b.DefaultSint32
	}
	if b.DefaultSint64 != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[2]), 86, 100)
		x.xxx_hidden_DefaultSint64 = *b.DefaultSint64
	}
	if b.DefaultFixed32 != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[2]), 87, 100)
		x.xxx_hidden_DefaultFixed32 = *b.DefaultFixed32
	}
	if b.DefaultFixed64 != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[2]), 88, 100)
		x.xxx_hidden_DefaultFixed64 = *b.DefaultFixed64
	}
	if b.DefaultSfixed32 != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[2]), 89, 100)
		x.xxx_hidden_DefaultSfixed32 = *b.DefaultSfixed32
	}
	if b.DefaultSfixed64 != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[2]), 90, 100)
		x.xxx_hidden_DefaultSfixed64 = *b.DefaultSfixed64
	}
	if b.DefaultFloat != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[2]), 91, 100)
		x.xxx_hidden_DefaultFloat = *b.DefaultFloat
	}
	if b.DefaultDouble != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[2]), 92, 100)
		x.xxx_hidden_DefaultDouble = *b.DefaultDouble
	}
	if b.DefaultBool != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[2]), 93, 100)
		x.xxx_hidden_DefaultBool = *b.DefaultBool
	}
	if b.DefaultString != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[2]), 94, 100)
		x.xxx_hidden_DefaultString = b.DefaultString
	}
	if b.DefaultBytes != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[2]), 95, 100)
		x.xxx_hidden_DefaultBytes = b.DefaultBytes
	}
	if b.DefaultNestedEnum != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[3]), 96, 100)
		x.xxx_hidden_DefaultNestedEnum = *b.DefaultNestedEnum
	}
	if b.DefaultForeignEnum != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[3]), 97, 100)
		x.xxx_hidden_DefaultForeignEnum = *b.DefaultForeignEnum
	}
	if b.OneofUint32 != nil {
		x.xxx_hidden_OneofField = &testAllTypes_OneofUint32{*b.OneofUint32}
	}
	if b.OneofNestedMessage != nil {
		x.xxx_hidden_OneofField = &testAllTypes_OneofNestedMessage{b.OneofNestedMessage}
	}
	if b.OneofString != nil {
		x.xxx_hidden_OneofField = &testAllTypes_OneofString{*b.OneofString}
	}
	if b.OneofBytes != nil {
		x.xxx_hidden_OneofField = &testAllTypes_OneofBytes{b.OneofBytes}
	}
	if b.OneofBool != nil {
		x.xxx_hidden_OneofField = &testAllTypes_OneofBool{*b.OneofBool}
	}
	if b.OneofUint64 != nil {
		x.xxx_hidden_OneofField = &testAllTypes_OneofUint64{*b.OneofUint64}
	}
	if b.OneofFloat != nil {
		x.xxx_hidden_OneofField = &testAllTypes_OneofFloat{*b.OneofFloat}
	}
	if b.OneofDouble != nil {
		x.xxx_hidden_OneofField = &testAllTypes_OneofDouble{*b.OneofDouble}
	}
	if b.OneofEnum != nil {
		x.xxx_hidden_OneofField = &testAllTypes_OneofEnum{*b.OneofEnum}
	}
	if b.Oneofgroup != nil {
		x.xxx_hidden_OneofField = &testAllTypes_Oneofgroup{b.Oneofgroup}
	}
	if b.OneofOptionalUint32 != nil {
		x.xxx_hidden_OneofOptional = &testAllTypes_OneofOptionalUint32{*b.OneofOptionalUint32}
	}
	return m0
}

type case_TestAllTypes_OneofField protoreflect.FieldNumber

func (x case_TestAllTypes_OneofField) String() string {
	md := file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_msgTypes[0].Descriptor()
	if x == 0 {
		return "not set"
	}
	return protoimpl.X.MessageFieldStringOf(md, protoreflect.FieldNumber(x))
}

type case_TestAllTypes_OneofOptional protoreflect.FieldNumber

func (x case_TestAllTypes_OneofOptional) String() string {
	md := file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_msgTypes[0].Descriptor()
	if x == 0 {
		return "not set"
	}
	return protoimpl.X.MessageFieldStringOf(md, protoreflect.FieldNumber(x))
}

type isTestAllTypes_OneofField interface {
	isTestAllTypes_OneofField()
}

type testAllTypes_OneofUint32 struct {
	OneofUint32 uint32 `protobuf:"varint,111,opt,name=oneof_uint32,json=oneofUint32,oneof"`
}

type testAllTypes_OneofNestedMessage struct {
	OneofNestedMessage *TestAllTypes_NestedMessage `protobuf:"bytes,112,opt,name=oneof_nested_message,json=oneofNestedMessage,oneof"`
}

type testAllTypes_OneofString struct {
	OneofString string `protobuf:"bytes,113,opt,name=oneof_string,json=oneofString,oneof"`
}

type testAllTypes_OneofBytes struct {
	OneofBytes []byte `protobuf:"bytes,114,opt,name=oneof_bytes,json=oneofBytes,oneof"`
}

type testAllTypes_OneofBool struct {
	OneofBool bool `protobuf:"varint,115,opt,name=oneof_bool,json=oneofBool,oneof"`
}

type testAllTypes_OneofUint64 struct {
	OneofUint64 uint64 `protobuf:"varint,116,opt,name=oneof_uint64,json=oneofUint64,oneof"`
}

type testAllTypes_OneofFloat struct {
	OneofFloat float32 `protobuf:"fixed32,117,opt,name=oneof_float,json=oneofFloat,oneof"`
}

type testAllTypes_OneofDouble struct {
	OneofDouble float64 `protobuf:"fixed64,118,opt,name=oneof_double,json=oneofDouble,oneof"`
}

type testAllTypes_OneofEnum struct {
	OneofEnum TestAllTypes_NestedEnum `protobuf:"varint,119,opt,name=oneof_enum,json=oneofEnum,enum=opaque.goproto.proto.testeditions.TestAllTypes_NestedEnum,oneof"`
}

type testAllTypes_Oneofgroup struct {
	Oneofgroup *TestAllTypes_OneofGroup `protobuf:"group,121,opt,name=OneofGroup,json=oneofgroup,oneof"`
}

func (*testAllTypes_OneofUint32) isTestAllTypes_OneofField() {}

func (*testAllTypes_OneofNestedMessage) isTestAllTypes_OneofField() {}

func (*testAllTypes_OneofString) isTestAllTypes_OneofField() {}

func (*testAllTypes_OneofBytes) isTestAllTypes_OneofField() {}

func (*testAllTypes_OneofBool) isTestAllTypes_OneofField() {}

func (*testAllTypes_OneofUint64) isTestAllTypes_OneofField() {}

func (*testAllTypes_OneofFloat) isTestAllTypes_OneofField() {}

func (*testAllTypes_OneofDouble) isTestAllTypes_OneofField() {}

func (*testAllTypes_OneofEnum) isTestAllTypes_OneofField() {}

func (*testAllTypes_Oneofgroup) isTestAllTypes_OneofField() {}

type isTestAllTypes_OneofOptional interface {
	isTestAllTypes_OneofOptional()
}

type testAllTypes_OneofOptionalUint32 struct {
	OneofOptionalUint32 uint32 `protobuf:"varint,120,opt,name=oneof_optional_uint32,json=oneofOptionalUint32,oneof"`
}

func (*testAllTypes_OneofOptionalUint32) isTestAllTypes_OneofOptional() {}

type TestManyMessageFieldsMessage struct {
	state           protoimpl.MessageState `protogen:"opaque.v1"`
	xxx_hidden_F1   *TestAllTypes          `protobuf:"bytes,1,opt,name=f1"`
	xxx_hidden_F2   *TestAllTypes          `protobuf:"bytes,2,opt,name=f2"`
	xxx_hidden_F3   *TestAllTypes          `protobuf:"bytes,3,opt,name=f3"`
	xxx_hidden_F4   *TestAllTypes          `protobuf:"bytes,4,opt,name=f4"`
	xxx_hidden_F5   *TestAllTypes          `protobuf:"bytes,5,opt,name=f5"`
	xxx_hidden_F6   *TestAllTypes          `protobuf:"bytes,6,opt,name=f6"`
	xxx_hidden_F7   *TestAllTypes          `protobuf:"bytes,7,opt,name=f7"`
	xxx_hidden_F8   *TestAllTypes          `protobuf:"bytes,8,opt,name=f8"`
	xxx_hidden_F9   *TestAllTypes          `protobuf:"bytes,9,opt,name=f9"`
	xxx_hidden_F10  *TestAllTypes          `protobuf:"bytes,10,opt,name=f10"`
	xxx_hidden_F11  *TestAllTypes          `protobuf:"bytes,11,opt,name=f11"`
	xxx_hidden_F12  *TestAllTypes          `protobuf:"bytes,12,opt,name=f12"`
	xxx_hidden_F13  *TestAllTypes          `protobuf:"bytes,13,opt,name=f13"`
	xxx_hidden_F14  *TestAllTypes          `protobuf:"bytes,14,opt,name=f14"`
	xxx_hidden_F15  *TestAllTypes          `protobuf:"bytes,15,opt,name=f15"`
	xxx_hidden_F16  *TestAllTypes          `protobuf:"bytes,16,opt,name=f16"`
	xxx_hidden_F17  *TestAllTypes          `protobuf:"bytes,17,opt,name=f17"`
	xxx_hidden_F18  *TestAllTypes          `protobuf:"bytes,18,opt,name=f18"`
	xxx_hidden_F19  *TestAllTypes          `protobuf:"bytes,19,opt,name=f19"`
	xxx_hidden_F20  *TestAllTypes          `protobuf:"bytes,20,opt,name=f20"`
	xxx_hidden_F21  *TestAllTypes          `protobuf:"bytes,21,opt,name=f21"`
	xxx_hidden_F22  *TestAllTypes          `protobuf:"bytes,22,opt,name=f22"`
	xxx_hidden_F23  *TestAllTypes          `protobuf:"bytes,23,opt,name=f23"`
	xxx_hidden_F24  *TestAllTypes          `protobuf:"bytes,24,opt,name=f24"`
	xxx_hidden_F25  *TestAllTypes          `protobuf:"bytes,25,opt,name=f25"`
	xxx_hidden_F26  *TestAllTypes          `protobuf:"bytes,26,opt,name=f26"`
	xxx_hidden_F27  *TestAllTypes          `protobuf:"bytes,27,opt,name=f27"`
	xxx_hidden_F28  *TestAllTypes          `protobuf:"bytes,28,opt,name=f28"`
	xxx_hidden_F29  *TestAllTypes          `protobuf:"bytes,29,opt,name=f29"`
	xxx_hidden_F30  *TestAllTypes          `protobuf:"bytes,30,opt,name=f30"`
	xxx_hidden_F31  *TestAllTypes          `protobuf:"bytes,31,opt,name=f31"`
	xxx_hidden_F32  *TestAllTypes          `protobuf:"bytes,32,opt,name=f32"`
	xxx_hidden_F33  *TestAllTypes          `protobuf:"bytes,33,opt,name=f33"`
	xxx_hidden_F34  *TestAllTypes          `protobuf:"bytes,34,opt,name=f34"`
	xxx_hidden_F35  *TestAllTypes          `protobuf:"bytes,35,opt,name=f35"`
	xxx_hidden_F36  *TestAllTypes          `protobuf:"bytes,36,opt,name=f36"`
	xxx_hidden_F37  *TestAllTypes          `protobuf:"bytes,37,opt,name=f37"`
	xxx_hidden_F38  *TestAllTypes          `protobuf:"bytes,38,opt,name=f38"`
	xxx_hidden_F39  *TestAllTypes          `protobuf:"bytes,39,opt,name=f39"`
	xxx_hidden_F40  *TestAllTypes          `protobuf:"bytes,40,opt,name=f40"`
	xxx_hidden_F41  *TestAllTypes          `protobuf:"bytes,41,opt,name=f41"`
	xxx_hidden_F42  *TestAllTypes          `protobuf:"bytes,42,opt,name=f42"`
	xxx_hidden_F43  *TestAllTypes          `protobuf:"bytes,43,opt,name=f43"`
	xxx_hidden_F44  *TestAllTypes          `protobuf:"bytes,44,opt,name=f44"`
	xxx_hidden_F45  *TestAllTypes          `protobuf:"bytes,45,opt,name=f45"`
	xxx_hidden_F46  *TestAllTypes          `protobuf:"bytes,46,opt,name=f46"`
	xxx_hidden_F47  *TestAllTypes          `protobuf:"bytes,47,opt,name=f47"`
	xxx_hidden_F48  *TestAllTypes          `protobuf:"bytes,48,opt,name=f48"`
	xxx_hidden_F49  *TestAllTypes          `protobuf:"bytes,49,opt,name=f49"`
	xxx_hidden_F50  *TestAllTypes          `protobuf:"bytes,50,opt,name=f50"`
	xxx_hidden_F51  *TestAllTypes          `protobuf:"bytes,51,opt,name=f51"`
	xxx_hidden_F52  *TestAllTypes          `protobuf:"bytes,52,opt,name=f52"`
	xxx_hidden_F53  *TestAllTypes          `protobuf:"bytes,53,opt,name=f53"`
	xxx_hidden_F54  *TestAllTypes          `protobuf:"bytes,54,opt,name=f54"`
	xxx_hidden_F55  *TestAllTypes          `protobuf:"bytes,55,opt,name=f55"`
	xxx_hidden_F56  *TestAllTypes          `protobuf:"bytes,56,opt,name=f56"`
	xxx_hidden_F57  *TestAllTypes          `protobuf:"bytes,57,opt,name=f57"`
	xxx_hidden_F58  *TestAllTypes          `protobuf:"bytes,58,opt,name=f58"`
	xxx_hidden_F59  *TestAllTypes          `protobuf:"bytes,59,opt,name=f59"`
	xxx_hidden_F60  *TestAllTypes          `protobuf:"bytes,60,opt,name=f60"`
	xxx_hidden_F61  *TestAllTypes          `protobuf:"bytes,61,opt,name=f61"`
	xxx_hidden_F62  *TestAllTypes          `protobuf:"bytes,62,opt,name=f62"`
	xxx_hidden_F63  *TestAllTypes          `protobuf:"bytes,63,opt,name=f63"`
	xxx_hidden_F64  *TestAllTypes          `protobuf:"bytes,64,opt,name=f64"`
	xxx_hidden_F65  *TestAllTypes          `protobuf:"bytes,65,opt,name=f65"`
	xxx_hidden_F66  *TestAllTypes          `protobuf:"bytes,66,opt,name=f66"`
	xxx_hidden_F67  *TestAllTypes          `protobuf:"bytes,67,opt,name=f67"`
	xxx_hidden_F68  *TestAllTypes          `protobuf:"bytes,68,opt,name=f68"`
	xxx_hidden_F69  *TestAllTypes          `protobuf:"bytes,69,opt,name=f69"`
	xxx_hidden_F70  *TestAllTypes          `protobuf:"bytes,70,opt,name=f70"`
	xxx_hidden_F71  *TestAllTypes          `protobuf:"bytes,71,opt,name=f71"`
	xxx_hidden_F72  *TestAllTypes          `protobuf:"bytes,72,opt,name=f72"`
	xxx_hidden_F73  *TestAllTypes          `protobuf:"bytes,73,opt,name=f73"`
	xxx_hidden_F74  *TestAllTypes          `protobuf:"bytes,74,opt,name=f74"`
	xxx_hidden_F75  *TestAllTypes          `protobuf:"bytes,75,opt,name=f75"`
	xxx_hidden_F76  *TestAllTypes          `protobuf:"bytes,76,opt,name=f76"`
	xxx_hidden_F77  *TestAllTypes          `protobuf:"bytes,77,opt,name=f77"`
	xxx_hidden_F78  *TestAllTypes          `protobuf:"bytes,78,opt,name=f78"`
	xxx_hidden_F79  *TestAllTypes          `protobuf:"bytes,79,opt,name=f79"`
	xxx_hidden_F80  *TestAllTypes          `protobuf:"bytes,80,opt,name=f80"`
	xxx_hidden_F81  *TestAllTypes          `protobuf:"bytes,81,opt,name=f81"`
	xxx_hidden_F82  *TestAllTypes          `protobuf:"bytes,82,opt,name=f82"`
	xxx_hidden_F83  *TestAllTypes          `protobuf:"bytes,83,opt,name=f83"`
	xxx_hidden_F84  *TestAllTypes          `protobuf:"bytes,84,opt,name=f84"`
	xxx_hidden_F85  *TestAllTypes          `protobuf:"bytes,85,opt,name=f85"`
	xxx_hidden_F86  *TestAllTypes          `protobuf:"bytes,86,opt,name=f86"`
	xxx_hidden_F87  *TestAllTypes          `protobuf:"bytes,87,opt,name=f87"`
	xxx_hidden_F88  *TestAllTypes          `protobuf:"bytes,88,opt,name=f88"`
	xxx_hidden_F89  *TestAllTypes          `protobuf:"bytes,89,opt,name=f89"`
	xxx_hidden_F90  *TestAllTypes          `protobuf:"bytes,90,opt,name=f90"`
	xxx_hidden_F91  *TestAllTypes          `protobuf:"bytes,91,opt,name=f91"`
	xxx_hidden_F92  *TestAllTypes          `protobuf:"bytes,92,opt,name=f92"`
	xxx_hidden_F93  *TestAllTypes          `protobuf:"bytes,93,opt,name=f93"`
	xxx_hidden_F94  *TestAllTypes          `protobuf:"bytes,94,opt,name=f94"`
	xxx_hidden_F95  *TestAllTypes          `protobuf:"bytes,95,opt,name=f95"`
	xxx_hidden_F96  *TestAllTypes          `protobuf:"bytes,96,opt,name=f96"`
	xxx_hidden_F97  *TestAllTypes          `protobuf:"bytes,97,opt,name=f97"`
	xxx_hidden_F98  *TestAllTypes          `protobuf:"bytes,98,opt,name=f98"`
	xxx_hidden_F99  *TestAllTypes          `protobuf:"bytes,99,opt,name=f99"`
	xxx_hidden_F100 *TestAllTypes          `protobuf:"bytes,100,opt,name=f100"`
	unknownFields   protoimpl.UnknownFields
	sizeCache       protoimpl.SizeCache
}

func (x *TestManyMessageFieldsMessage) Reset() {
	*x = TestManyMessageFieldsMessage{}
	mi := &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_msgTypes[1]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *TestManyMessageFieldsMessage) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*TestManyMessageFieldsMessage) ProtoMessage() {}

func (x *TestManyMessageFieldsMessage) ProtoReflect() protoreflect.Message {
	mi := &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_msgTypes[1]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

func (x *TestManyMessageFieldsMessage) GetF1() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F1
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF2() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F2
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF3() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F3
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF4() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F4
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF5() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F5
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF6() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F6
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF7() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F7
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF8() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F8
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF9() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F9
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF10() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F10
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF11() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F11
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF12() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F12
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF13() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F13
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF14() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F14
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF15() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F15
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF16() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F16
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF17() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F17
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF18() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F18
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF19() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F19
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF20() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F20
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF21() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F21
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF22() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F22
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF23() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F23
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF24() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F24
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF25() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F25
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF26() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F26
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF27() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F27
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF28() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F28
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF29() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F29
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF30() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F30
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF31() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F31
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF32() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F32
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF33() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F33
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF34() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F34
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF35() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F35
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF36() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F36
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF37() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F37
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF38() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F38
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF39() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F39
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF40() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F40
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF41() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F41
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF42() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F42
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF43() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F43
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF44() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F44
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF45() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F45
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF46() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F46
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF47() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F47
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF48() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F48
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF49() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F49
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF50() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F50
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF51() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F51
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF52() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F52
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF53() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F53
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF54() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F54
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF55() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F55
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF56() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F56
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF57() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F57
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF58() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F58
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF59() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F59
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF60() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F60
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF61() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F61
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF62() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F62
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF63() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F63
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF64() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F64
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF65() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F65
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF66() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F66
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF67() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F67
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF68() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F68
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF69() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F69
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF70() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F70
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF71() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F71
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF72() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F72
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF73() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F73
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF74() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F74
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF75() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F75
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF76() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F76
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF77() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F77
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF78() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F78
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF79() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F79
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF80() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F80
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF81() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F81
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF82() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F82
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF83() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F83
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF84() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F84
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF85() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F85
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF86() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F86
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF87() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F87
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF88() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F88
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF89() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F89
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF90() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F90
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF91() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F91
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF92() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F92
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF93() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F93
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF94() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F94
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF95() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F95
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF96() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F96
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF97() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F97
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF98() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F98
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF99() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F99
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF100() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F100
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) SetF1(v *TestAllTypes) {
	x.xxx_hidden_F1 = v
}

func (x *TestManyMessageFieldsMessage) SetF2(v *TestAllTypes) {
	x.xxx_hidden_F2 = v
}

func (x *TestManyMessageFieldsMessage) SetF3(v *TestAllTypes) {
	x.xxx_hidden_F3 = v
}

func (x *TestManyMessageFieldsMessage) SetF4(v *TestAllTypes) {
	x.xxx_hidden_F4 = v
}

func (x *TestManyMessageFieldsMessage) SetF5(v *TestAllTypes) {
	x.xxx_hidden_F5 = v
}

func (x *TestManyMessageFieldsMessage) SetF6(v *TestAllTypes) {
	x.xxx_hidden_F6 = v
}

func (x *TestManyMessageFieldsMessage) SetF7(v *TestAllTypes) {
	x.xxx_hidden_F7 = v
}

func (x *TestManyMessageFieldsMessage) SetF8(v *TestAllTypes) {
	x.xxx_hidden_F8 = v
}

func (x *TestManyMessageFieldsMessage) SetF9(v *TestAllTypes) {
	x.xxx_hidden_F9 = v
}

func (x *TestManyMessageFieldsMessage) SetF10(v *TestAllTypes) {
	x.xxx_hidden_F10 = v
}

func (x *TestManyMessageFieldsMessage) SetF11(v *TestAllTypes) {
	x.xxx_hidden_F11 = v
}

func (x *TestManyMessageFieldsMessage) SetF12(v *TestAllTypes) {
	x.xxx_hidden_F12 = v
}

func (x *TestManyMessageFieldsMessage) SetF13(v *TestAllTypes) {
	x.xxx_hidden_F13 = v
}

func (x *TestManyMessageFieldsMessage) SetF14(v *TestAllTypes) {
	x.xxx_hidden_F14 = v
}

func (x *TestManyMessageFieldsMessage) SetF15(v *TestAllTypes) {
	x.xxx_hidden_F15 = v
}

func (x *TestManyMessageFieldsMessage) SetF16(v *TestAllTypes) {
	x.xxx_hidden_F16 = v
}

func (x *TestManyMessageFieldsMessage) SetF17(v *TestAllTypes) {
	x.xxx_hidden_F17 = v
}

func (x *TestManyMessageFieldsMessage) SetF18(v *TestAllTypes) {
	x.xxx_hidden_F18 = v
}

func (x *TestManyMessageFieldsMessage) SetF19(v *TestAllTypes) {
	x.xxx_hidden_F19 = v
}

func (x *TestManyMessageFieldsMessage) SetF20(v *TestAllTypes) {
	x.xxx_hidden_F20 = v
}

func (x *TestManyMessageFieldsMessage) SetF21(v *TestAllTypes) {
	x.xxx_hidden_F21 = v
}

func (x *TestManyMessageFieldsMessage) SetF22(v *TestAllTypes) {
	x.xxx_hidden_F22 = v
}

func (x *TestManyMessageFieldsMessage) SetF23(v *TestAllTypes) {
	x.xxx_hidden_F23 = v
}

func (x *TestManyMessageFieldsMessage) SetF24(v *TestAllTypes) {
	x.xxx_hidden_F24 = v
}

func (x *TestManyMessageFieldsMessage) SetF25(v *TestAllTypes) {
	x.xxx_hidden_F25 = v
}

func (x *TestManyMessageFieldsMessage) SetF26(v *TestAllTypes) {
	x.xxx_hidden_F26 = v
}

func (x *TestManyMessageFieldsMessage) SetF27(v *TestAllTypes) {
	x.xxx_hidden_F27 = v
}

func (x *TestManyMessageFieldsMessage) SetF28(v *TestAllTypes) {
	x.xxx_hidden_F28 = v
}

func (x *TestManyMessageFieldsMessage) SetF29(v *TestAllTypes) {
	x.xxx_hidden_F29 = v
}

func (x *TestManyMessageFieldsMessage) SetF30(v *TestAllTypes) {
	x.xxx_hidden_F30 = v
}

func (x *TestManyMessageFieldsMessage) SetF31(v *TestAllTypes) {
	x.xxx_hidden_F31 = v
}

func (x *TestManyMessageFieldsMessage) SetF32(v *TestAllTypes) {
	x.xxx_hidden_F32 = v
}

func (x *TestManyMessageFieldsMessage) SetF33(v *TestAllTypes) {
	x.xxx_hidden_F33 = v
}

func (x *TestManyMessageFieldsMessage) SetF34(v *TestAllTypes) {
	x.xxx_hidden_F34 = v
}

func (x *TestManyMessageFieldsMessage) SetF35(v *TestAllTypes) {
	x.xxx_hidden_F35 = v
}

func (x *TestManyMessageFieldsMessage) SetF36(v *TestAllTypes) {
	x.xxx_hidden_F36 = v
}

func (x *TestManyMessageFieldsMessage) SetF37(v *TestAllTypes) {
	x.xxx_hidden_F37 = v
}

func (x *TestManyMessageFieldsMessage) SetF38(v *TestAllTypes) {
	x.xxx_hidden_F38 = v
}

func (x *TestManyMessageFieldsMessage) SetF39(v *TestAllTypes) {
	x.xxx_hidden_F39 = v
}

func (x *TestManyMessageFieldsMessage) SetF40(v *TestAllTypes) {
	x.xxx_hidden_F40 = v
}

func (x *TestManyMessageFieldsMessage) SetF41(v *TestAllTypes) {
	x.xxx_hidden_F41 = v
}

func (x *TestManyMessageFieldsMessage) SetF42(v *TestAllTypes) {
	x.xxx_hidden_F42 = v
}

func (x *TestManyMessageFieldsMessage) SetF43(v *TestAllTypes) {
	x.xxx_hidden_F43 = v
}

func (x *TestManyMessageFieldsMessage) SetF44(v *TestAllTypes) {
	x.xxx_hidden_F44 = v
}

func (x *TestManyMessageFieldsMessage) SetF45(v *TestAllTypes) {
	x.xxx_hidden_F45 = v
}

func (x *TestManyMessageFieldsMessage) SetF46(v *TestAllTypes) {
	x.xxx_hidden_F46 = v
}

func (x *TestManyMessageFieldsMessage) SetF47(v *TestAllTypes) {
	x.xxx_hidden_F47 = v
}

func (x *TestManyMessageFieldsMessage) SetF48(v *TestAllTypes) {
	x.xxx_hidden_F48 = v
}

func (x *TestManyMessageFieldsMessage) SetF49(v *TestAllTypes) {
	x.xxx_hidden_F49 = v
}

func (x *TestManyMessageFieldsMessage) SetF50(v *TestAllTypes) {
	x.xxx_hidden_F50 = v
}

func (x *TestManyMessageFieldsMessage) SetF51(v *TestAllTypes) {
	x.xxx_hidden_F51 = v
}

func (x *TestManyMessageFieldsMessage) SetF52(v *TestAllTypes) {
	x.xxx_hidden_F52 = v
}

func (x *TestManyMessageFieldsMessage) SetF53(v *TestAllTypes) {
	x.xxx_hidden_F53 = v
}

func (x *TestManyMessageFieldsMessage) SetF54(v *TestAllTypes) {
	x.xxx_hidden_F54 = v
}

func (x *TestManyMessageFieldsMessage) SetF55(v *TestAllTypes) {
	x.xxx_hidden_F55 = v
}

func (x *TestManyMessageFieldsMessage) SetF56(v *TestAllTypes) {
	x.xxx_hidden_F56 = v
}

func (x *TestManyMessageFieldsMessage) SetF57(v *TestAllTypes) {
	x.xxx_hidden_F57 = v
}

func (x *TestManyMessageFieldsMessage) SetF58(v *TestAllTypes) {
	x.xxx_hidden_F58 = v
}

func (x *TestManyMessageFieldsMessage) SetF59(v *TestAllTypes) {
	x.xxx_hidden_F59 = v
}

func (x *TestManyMessageFieldsMessage) SetF60(v *TestAllTypes) {
	x.xxx_hidden_F60 = v
}

func (x *TestManyMessageFieldsMessage) SetF61(v *TestAllTypes) {
	x.xxx_hidden_F61 = v
}

func (x *TestManyMessageFieldsMessage) SetF62(v *TestAllTypes) {
	x.xxx_hidden_F62 = v
}

func (x *TestManyMessageFieldsMessage) SetF63(v *TestAllTypes) {
	x.xxx_hidden_F63 = v
}

func (x *TestManyMessageFieldsMessage) SetF64(v *TestAllTypes) {
	x.xxx_hidden_F64 = v
}

func (x *TestManyMessageFieldsMessage) SetF65(v *TestAllTypes) {
	x.xxx_hidden_F65 = v
}

func (x *TestManyMessageFieldsMessage) SetF66(v *TestAllTypes) {
	x.xxx_hidden_F66 = v
}

func (x *TestManyMessageFieldsMessage) SetF67(v *TestAllTypes) {
	x.xxx_hidden_F67 = v
}

func (x *TestManyMessageFieldsMessage) SetF68(v *TestAllTypes) {
	x.xxx_hidden_F68 = v
}

func (x *TestManyMessageFieldsMessage) SetF69(v *TestAllTypes) {
	x.xxx_hidden_F69 = v
}

func (x *TestManyMessageFieldsMessage) SetF70(v *TestAllTypes) {
	x.xxx_hidden_F70 = v
}

func (x *TestManyMessageFieldsMessage) SetF71(v *TestAllTypes) {
	x.xxx_hidden_F71 = v
}

func (x *TestManyMessageFieldsMessage) SetF72(v *TestAllTypes) {
	x.xxx_hidden_F72 = v
}

func (x *TestManyMessageFieldsMessage) SetF73(v *TestAllTypes) {
	x.xxx_hidden_F73 = v
}

func (x *TestManyMessageFieldsMessage) SetF74(v *TestAllTypes) {
	x.xxx_hidden_F74 = v
}

func (x *TestManyMessageFieldsMessage) SetF75(v *TestAllTypes) {
	x.xxx_hidden_F75 = v
}

func (x *TestManyMessageFieldsMessage) SetF76(v *TestAllTypes) {
	x.xxx_hidden_F76 = v
}

func (x *TestManyMessageFieldsMessage) SetF77(v *TestAllTypes) {
	x.xxx_hidden_F77 = v
}

func (x *TestManyMessageFieldsMessage) SetF78(v *TestAllTypes) {
	x.xxx_hidden_F78 = v
}

func (x *TestManyMessageFieldsMessage) SetF79(v *TestAllTypes) {
	x.xxx_hidden_F79 = v
}

func (x *TestManyMessageFieldsMessage) SetF80(v *TestAllTypes) {
	x.xxx_hidden_F80 = v
}

func (x *TestManyMessageFieldsMessage) SetF81(v *TestAllTypes) {
	x.xxx_hidden_F81 = v
}

func (x *TestManyMessageFieldsMessage) SetF82(v *TestAllTypes) {
	x.xxx_hidden_F82 = v
}

func (x *TestManyMessageFieldsMessage) SetF83(v *TestAllTypes) {
	x.xxx_hidden_F83 = v
}

func (x *TestManyMessageFieldsMessage) SetF84(v *TestAllTypes) {
	x.xxx_hidden_F84 = v
}

func (x *TestManyMessageFieldsMessage) SetF85(v *TestAllTypes) {
	x.xxx_hidden_F85 = v
}

func (x *TestManyMessageFieldsMessage) SetF86(v *TestAllTypes) {
	x.xxx_hidden_F86 = v
}

func (x *TestManyMessageFieldsMessage) SetF87(v *TestAllTypes) {
	x.xxx_hidden_F87 = v
}

func (x *TestManyMessageFieldsMessage) SetF88(v *TestAllTypes) {
	x.xxx_hidden_F88 = v
}

func (x *TestManyMessageFieldsMessage) SetF89(v *TestAllTypes) {
	x.xxx_hidden_F89 = v
}

func (x *TestManyMessageFieldsMessage) SetF90(v *TestAllTypes) {
	x.xxx_hidden_F90 = v
}

func (x *TestManyMessageFieldsMessage) SetF91(v *TestAllTypes) {
	x.xxx_hidden_F91 = v
}

func (x *TestManyMessageFieldsMessage) SetF92(v *TestAllTypes) {
	x.xxx_hidden_F92 = v
}

func (x *TestManyMessageFieldsMessage) SetF93(v *TestAllTypes) {
	x.xxx_hidden_F93 = v
}

func (x *TestManyMessageFieldsMessage) SetF94(v *TestAllTypes) {
	x.xxx_hidden_F94 = v
}

func (x *TestManyMessageFieldsMessage) SetF95(v *TestAllTypes) {
	x.xxx_hidden_F95 = v
}

func (x *TestManyMessageFieldsMessage) SetF96(v *TestAllTypes) {
	x.xxx_hidden_F96 = v
}

func (x *TestManyMessageFieldsMessage) SetF97(v *TestAllTypes) {
	x.xxx_hidden_F97 = v
}

func (x *TestManyMessageFieldsMessage) SetF98(v *TestAllTypes) {
	x.xxx_hidden_F98 = v
}

func (x *TestManyMessageFieldsMessage) SetF99(v *TestAllTypes) {
	x.xxx_hidden_F99 = v
}

func (x *TestManyMessageFieldsMessage) SetF100(v *TestAllTypes) {
	x.xxx_hidden_F100 = v
}

func (x *TestManyMessageFieldsMessage) HasF1() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F1 != nil
}

func (x *TestManyMessageFieldsMessage) HasF2() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F2 != nil
}

func (x *TestManyMessageFieldsMessage) HasF3() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F3 != nil
}

func (x *TestManyMessageFieldsMessage) HasF4() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F4 != nil
}

func (x *TestManyMessageFieldsMessage) HasF5() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F5 != nil
}

func (x *TestManyMessageFieldsMessage) HasF6() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F6 != nil
}

func (x *TestManyMessageFieldsMessage) HasF7() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F7 != nil
}

func (x *TestManyMessageFieldsMessage) HasF8() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F8 != nil
}

func (x *TestManyMessageFieldsMessage) HasF9() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F9 != nil
}

func (x *TestManyMessageFieldsMessage) HasF10() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F10 != nil
}

func (x *TestManyMessageFieldsMessage) HasF11() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F11 != nil
}

func (x *TestManyMessageFieldsMessage) HasF12() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F12 != nil
}

func (x *TestManyMessageFieldsMessage) HasF13() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F13 != nil
}

func (x *TestManyMessageFieldsMessage) HasF14() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F14 != nil
}

func (x *TestManyMessageFieldsMessage) HasF15() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F15 != nil
}

func (x *TestManyMessageFieldsMessage) HasF16() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F16 != nil
}

func (x *TestManyMessageFieldsMessage) HasF17() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F17 != nil
}

func (x *TestManyMessageFieldsMessage) HasF18() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F18 != nil
}

func (x *TestManyMessageFieldsMessage) HasF19() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F19 != nil
}

func (x *TestManyMessageFieldsMessage) HasF20() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F20 != nil
}

func (x *TestManyMessageFieldsMessage) HasF21() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F21 != nil
}

func (x *TestManyMessageFieldsMessage) HasF22() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F22 != nil
}

func (x *TestManyMessageFieldsMessage) HasF23() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F23 != nil
}

func (x *TestManyMessageFieldsMessage) HasF24() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F24 != nil
}

func (x *TestManyMessageFieldsMessage) HasF25() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F25 != nil
}

func (x *TestManyMessageFieldsMessage) HasF26() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F26 != nil
}

func (x *TestManyMessageFieldsMessage) HasF27() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F27 != nil
}

func (x *TestManyMessageFieldsMessage) HasF28() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F28 != nil
}

func (x *TestManyMessageFieldsMessage) HasF29() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F29 != nil
}

func (x *TestManyMessageFieldsMessage) HasF30() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F30 != nil
}

func (x *TestManyMessageFieldsMessage) HasF31() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F31 != nil
}

func (x *TestManyMessageFieldsMessage) HasF32() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F32 != nil
}

func (x *TestManyMessageFieldsMessage) HasF33() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F33 != nil
}

func (x *TestManyMessageFieldsMessage) HasF34() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F34 != nil
}

func (x *TestManyMessageFieldsMessage) HasF35() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F35 != nil
}

func (x *TestManyMessageFieldsMessage) HasF36() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F36 != nil
}

func (x *TestManyMessageFieldsMessage) HasF37() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F37 != nil
}

func (x *TestManyMessageFieldsMessage) HasF38() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F38 != nil
}

func (x *TestManyMessageFieldsMessage) HasF39() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F39 != nil
}

func (x *TestManyMessageFieldsMessage) HasF40() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F40 != nil
}

func (x *TestManyMessageFieldsMessage) HasF41() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F41 != nil
}

func (x *TestManyMessageFieldsMessage) HasF42() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F42 != nil
}

func (x *TestManyMessageFieldsMessage) HasF43() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F43 != nil
}

func (x *TestManyMessageFieldsMessage) HasF44() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F44 != nil
}

func (x *TestManyMessageFieldsMessage) HasF45() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F45 != nil
}

func (x *TestManyMessageFieldsMessage) HasF46() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F46 != nil
}

func (x *TestManyMessageFieldsMessage) HasF47() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F47 != nil
}

func (x *TestManyMessageFieldsMessage) HasF48() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F48 != nil
}

func (x *TestManyMessageFieldsMessage) HasF49() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F49 != nil
}

func (x *TestManyMessageFieldsMessage) HasF50() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F50 != nil
}

func (x *TestManyMessageFieldsMessage) HasF51() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F51 != nil
}

func (x *TestManyMessageFieldsMessage) HasF52() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F52 != nil
}

func (x *TestManyMessageFieldsMessage) HasF53() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F53 != nil
}

func (x *TestManyMessageFieldsMessage) HasF54() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F54 != nil
}

func (x *TestManyMessageFieldsMessage) HasF55() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F55 != nil
}

func (x *TestManyMessageFieldsMessage) HasF56() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F56 != nil
}

func (x *TestManyMessageFieldsMessage) HasF57() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F57 != nil
}

func (x *TestManyMessageFieldsMessage) HasF58() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F58 != nil
}

func (x *TestManyMessageFieldsMessage) HasF59() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F59 != nil
}

func (x *TestManyMessageFieldsMessage) HasF60() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F60 != nil
}

func (x *TestManyMessageFieldsMessage) HasF61() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F61 != nil
}

func (x *TestManyMessageFieldsMessage) HasF62() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F62 != nil
}

func (x *TestManyMessageFieldsMessage) HasF63() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F63 != nil
}

func (x *TestManyMessageFieldsMessage) HasF64() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F64 != nil
}

func (x *TestManyMessageFieldsMessage) HasF65() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F65 != nil
}

func (x *TestManyMessageFieldsMessage) HasF66() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F66 != nil
}

func (x *TestManyMessageFieldsMessage) HasF67() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F67 != nil
}

func (x *TestManyMessageFieldsMessage) HasF68() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F68 != nil
}

func (x *TestManyMessageFieldsMessage) HasF69() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F69 != nil
}

func (x *TestManyMessageFieldsMessage) HasF70() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F70 != nil
}

func (x *TestManyMessageFieldsMessage) HasF71() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F71 != nil
}

func (x *TestManyMessageFieldsMessage) HasF72() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F72 != nil
}

func (x *TestManyMessageFieldsMessage) HasF73() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F73 != nil
}

func (x *TestManyMessageFieldsMessage) HasF74() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F74 != nil
}

func (x *TestManyMessageFieldsMessage) HasF75() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F75 != nil
}

func (x *TestManyMessageFieldsMessage) HasF76() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F76 != nil
}

func (x *TestManyMessageFieldsMessage) HasF77() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F77 != nil
}

func (x *TestManyMessageFieldsMessage) HasF78() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F78 != nil
}

func (x *TestManyMessageFieldsMessage) HasF79() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F79 != nil
}

func (x *TestManyMessageFieldsMessage) HasF80() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F80 != nil
}

func (x *TestManyMessageFieldsMessage) HasF81() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F81 != nil
}

func (x *TestManyMessageFieldsMessage) HasF82() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F82 != nil
}

func (x *TestManyMessageFieldsMessage) HasF83() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F83 != nil
}

func (x *TestManyMessageFieldsMessage) HasF84() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F84 != nil
}

func (x *TestManyMessageFieldsMessage) HasF85() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F85 != nil
}

func (x *TestManyMessageFieldsMessage) HasF86() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F86 != nil
}

func (x *TestManyMessageFieldsMessage) HasF87() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F87 != nil
}

func (x *TestManyMessageFieldsMessage) HasF88() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F88 != nil
}

func (x *TestManyMessageFieldsMessage) HasF89() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F89 != nil
}

func (x *TestManyMessageFieldsMessage) HasF90() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F90 != nil
}

func (x *TestManyMessageFieldsMessage) HasF91() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F91 != nil
}

func (x *TestManyMessageFieldsMessage) HasF92() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F92 != nil
}

func (x *TestManyMessageFieldsMessage) HasF93() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F93 != nil
}

func (x *TestManyMessageFieldsMessage) HasF94() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F94 != nil
}

func (x *TestManyMessageFieldsMessage) HasF95() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F95 != nil
}

func (x *TestManyMessageFieldsMessage) HasF96() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F96 != nil
}

func (x *TestManyMessageFieldsMessage) HasF97() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F97 != nil
}

func (x *TestManyMessageFieldsMessage) HasF98() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F98 != nil
}

func (x *TestManyMessageFieldsMessage) HasF99() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F99 != nil
}

func (x *TestManyMessageFieldsMessage) HasF100() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F100 != nil
}

func (x *TestManyMessageFieldsMessage) ClearF1() {
	x.xxx_hidden_F1 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF2() {
	x.xxx_hidden_F2 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF3() {
	x.xxx_hidden_F3 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF4() {
	x.xxx_hidden_F4 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF5() {
	x.xxx_hidden_F5 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF6() {
	x.xxx_hidden_F6 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF7() {
	x.xxx_hidden_F7 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF8() {
	x.xxx_hidden_F8 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF9() {
	x.xxx_hidden_F9 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF10() {
	x.xxx_hidden_F10 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF11() {
	x.xxx_hidden_F11 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF12() {
	x.xxx_hidden_F12 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF13() {
	x.xxx_hidden_F13 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF14() {
	x.xxx_hidden_F14 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF15() {
	x.xxx_hidden_F15 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF16() {
	x.xxx_hidden_F16 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF17() {
	x.xxx_hidden_F17 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF18() {
	x.xxx_hidden_F18 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF19() {
	x.xxx_hidden_F19 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF20() {
	x.xxx_hidden_F20 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF21() {
	x.xxx_hidden_F21 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF22() {
	x.xxx_hidden_F22 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF23() {
	x.xxx_hidden_F23 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF24() {
	x.xxx_hidden_F24 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF25() {
	x.xxx_hidden_F25 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF26() {
	x.xxx_hidden_F26 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF27() {
	x.xxx_hidden_F27 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF28() {
	x.xxx_hidden_F28 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF29() {
	x.xxx_hidden_F29 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF30() {
	x.xxx_hidden_F30 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF31() {
	x.xxx_hidden_F31 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF32() {
	x.xxx_hidden_F32 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF33() {
	x.xxx_hidden_F33 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF34() {
	x.xxx_hidden_F34 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF35() {
	x.xxx_hidden_F35 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF36() {
	x.xxx_hidden_F36 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF37() {
	x.xxx_hidden_F37 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF38() {
	x.xxx_hidden_F38 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF39() {
	x.xxx_hidden_F39 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF40() {
	x.xxx_hidden_F40 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF41() {
	x.xxx_hidden_F41 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF42() {
	x.xxx_hidden_F42 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF43() {
	x.xxx_hidden_F43 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF44() {
	x.xxx_hidden_F44 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF45() {
	x.xxx_hidden_F45 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF46() {
	x.xxx_hidden_F46 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF47() {
	x.xxx_hidden_F47 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF48() {
	x.xxx_hidden_F48 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF49() {
	x.xxx_hidden_F49 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF50() {
	x.xxx_hidden_F50 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF51() {
	x.xxx_hidden_F51 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF52() {
	x.xxx_hidden_F52 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF53() {
	x.xxx_hidden_F53 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF54() {
	x.xxx_hidden_F54 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF55() {
	x.xxx_hidden_F55 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF56() {
	x.xxx_hidden_F56 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF57() {
	x.xxx_hidden_F57 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF58() {
	x.xxx_hidden_F58 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF59() {
	x.xxx_hidden_F59 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF60() {
	x.xxx_hidden_F60 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF61() {
	x.xxx_hidden_F61 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF62() {
	x.xxx_hidden_F62 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF63() {
	x.xxx_hidden_F63 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF64() {
	x.xxx_hidden_F64 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF65() {
	x.xxx_hidden_F65 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF66() {
	x.xxx_hidden_F66 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF67() {
	x.xxx_hidden_F67 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF68() {
	x.xxx_hidden_F68 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF69() {
	x.xxx_hidden_F69 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF70() {
	x.xxx_hidden_F70 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF71() {
	x.xxx_hidden_F71 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF72() {
	x.xxx_hidden_F72 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF73() {
	x.xxx_hidden_F73 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF74() {
	x.xxx_hidden_F74 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF75() {
	x.xxx_hidden_F75 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF76() {
	x.xxx_hidden_F76 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF77() {
	x.xxx_hidden_F77 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF78() {
	x.xxx_hidden_F78 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF79() {
	x.xxx_hidden_F79 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF80() {
	x.xxx_hidden_F80 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF81() {
	x.xxx_hidden_F81 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF82() {
	x.xxx_hidden_F82 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF83() {
	x.xxx_hidden_F83 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF84() {
	x.xxx_hidden_F84 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF85() {
	x.xxx_hidden_F85 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF86() {
	x.xxx_hidden_F86 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF87() {
	x.xxx_hidden_F87 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF88() {
	x.xxx_hidden_F88 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF89() {
	x.xxx_hidden_F89 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF90() {
	x.xxx_hidden_F90 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF91() {
	x.xxx_hidden_F91 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF92() {
	x.xxx_hidden_F92 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF93() {
	x.xxx_hidden_F93 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF94() {
	x.xxx_hidden_F94 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF95() {
	x.xxx_hidden_F95 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF96() {
	x.xxx_hidden_F96 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF97() {
	x.xxx_hidden_F97 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF98() {
	x.xxx_hidden_F98 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF99() {
	x.xxx_hidden_F99 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF100() {
	x.xxx_hidden_F100 = nil
}

type TestManyMessageFieldsMessage_builder struct {
	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.

	F1   *TestAllTypes
	F2   *TestAllTypes
	F3   *TestAllTypes
	F4   *TestAllTypes
	F5   *TestAllTypes
	F6   *TestAllTypes
	F7   *TestAllTypes
	F8   *TestAllTypes
	F9   *TestAllTypes
	F10  *TestAllTypes
	F11  *TestAllTypes
	F12  *TestAllTypes
	F13  *TestAllTypes
	F14  *TestAllTypes
	F15  *TestAllTypes
	F16  *TestAllTypes
	F17  *TestAllTypes
	F18  *TestAllTypes
	F19  *TestAllTypes
	F20  *TestAllTypes
	F21  *TestAllTypes
	F22  *TestAllTypes
	F23  *TestAllTypes
	F24  *TestAllTypes
	F25  *TestAllTypes
	F26  *TestAllTypes
	F27  *TestAllTypes
	F28  *TestAllTypes
	F29  *TestAllTypes
	F30  *TestAllTypes
	F31  *TestAllTypes
	F32  *TestAllTypes
	F33  *TestAllTypes
	F34  *TestAllTypes
	F35  *TestAllTypes
	F36  *TestAllTypes
	F37  *TestAllTypes
	F38  *TestAllTypes
	F39  *TestAllTypes
	F40  *TestAllTypes
	F41  *TestAllTypes
	F42  *TestAllTypes
	F43  *TestAllTypes
	F44  *TestAllTypes
	F45  *TestAllTypes
	F46  *TestAllTypes
	F47  *TestAllTypes
	F48  *TestAllTypes
	F49  *TestAllTypes
	F50  *TestAllTypes
	F51  *TestAllTypes
	F52  *TestAllTypes
	F53  *TestAllTypes
	F54  *TestAllTypes
	F55  *TestAllTypes
	F56  *TestAllTypes
	F57  *TestAllTypes
	F58  *TestAllTypes
	F59  *TestAllTypes
	F60  *TestAllTypes
	F61  *TestAllTypes
	F62  *TestAllTypes
	F63  *TestAllTypes
	F64  *TestAllTypes
	F65  *TestAllTypes
	F66  *TestAllTypes
	F67  *TestAllTypes
	F68  *TestAllTypes
	F69  *TestAllTypes
	F70  *TestAllTypes
	F71  *TestAllTypes
	F72  *TestAllTypes
	F73  *TestAllTypes
	F74  *TestAllTypes
	F75  *TestAllTypes
	F76  *TestAllTypes
	F77  *TestAllTypes
	F78  *TestAllTypes
	F79  *TestAllTypes
	F80  *TestAllTypes
	F81  *TestAllTypes
	F82  *TestAllTypes
	F83  *TestAllTypes
	F84  *TestAllTypes
	F85  *TestAllTypes
	F86  *TestAllTypes
	F87  *TestAllTypes
	F88  *TestAllTypes
	F89  *TestAllTypes
	F90  *TestAllTypes
	F91  *TestAllTypes
	F92  *TestAllTypes
	F93  *TestAllTypes
	F94  *TestAllTypes
	F95  *TestAllTypes
	F96  *TestAllTypes
	F97  *TestAllTypes
	F98  *TestAllTypes
	F99  *TestAllTypes
	F100 *TestAllTypes
}

func (b0 TestManyMessageFieldsMessage_builder) Build() *TestManyMessageFieldsMessage {
	m0 := &TestManyMessageFieldsMessage{}
	b, x := &b0, m0
	_, _ = b, x
	x.xxx_hidden_F1 = b.F1
	x.xxx_hidden_F2 = b.F2
	x.xxx_hidden_F3 = b.F3
	x.xxx_hidden_F4 = b.F4
	x.xxx_hidden_F5 = b.F5
	x.xxx_hidden_F6 = b.F6
	x.xxx_hidden_F7 = b.F7
	x.xxx_hidden_F8 = b.F8
	x.xxx_hidden_F9 = b.F9
	x.xxx_hidden_F10 = b.F10
	x.xxx_hidden_F11 = b.F11
	x.xxx_hidden_F12 = b.F12
	x.xxx_hidden_F13 = b.F13
	x.xxx_hidden_F14 = b.F14
	x.xxx_hidden_F15 = b.F15
	x.xxx_hidden_F16 = b.F16
	x.xxx_hidden_F17 = b.F17
	x.xxx_hidden_F18 = b.F18
	x.xxx_hidden_F19 = b.F19
	x.xxx_hidden_F20 = b.F20
	x.xxx_hidden_F21 = b.F21
	x.xxx_hidden_F22 = b.F22
	x.xxx_hidden_F23 = b.F23
	x.xxx_hidden_F24 = b.F24
	x.xxx_hidden_F25 = b.F25
	x.xxx_hidden_F26 = b.F26
	x.xxx_hidden_F27 = b.F27
	x.xxx_hidden_F28 = b.F28
	x.xxx_hidden_F29 = b.F29
	x.xxx_hidden_F30 = b.F30
	x.xxx_hidden_F31 = b.F31
	x.xxx_hidden_F32 = b.F32
	x.xxx_hidden_F33 = b.F33
	x.xxx_hidden_F34 = b.F34
	x.xxx_hidden_F35 = b.F35
	x.xxx_hidden_F36 = b.F36
	x.xxx_hidden_F37 = b.F37
	x.xxx_hidden_F38 = b.F38
	x.xxx_hidden_F39 = b.F39
	x.xxx_hidden_F40 = b.F40
	x.xxx_hidden_F41 = b.F41
	x.xxx_hidden_F42 = b.F42
	x.xxx_hidden_F43 = b.F43
	x.xxx_hidden_F44 = b.F44
	x.xxx_hidden_F45 = b.F45
	x.xxx_hidden_F46 = b.F46
	x.xxx_hidden_F47 = b.F47
	x.xxx_hidden_F48 = b.F48
	x.xxx_hidden_F49 = b.F49
	x.xxx_hidden_F50 = b.F50
	x.xxx_hidden_F51 = b.F51
	x.xxx_hidden_F52 = b.F52
	x.xxx_hidden_F53 = b.F53
	x.xxx_hidden_F54 = b.F54
	x.xxx_hidden_F55 = b.F55
	x.xxx_hidden_F56 = b.F56
	x.xxx_hidden_F57 = b.F57
	x.xxx_hidden_F58 = b.F58
	x.xxx_hidden_F59 = b.F59
	x.xxx_hidden_F60 = b.F60
	x.xxx_hidden_F61 = b.F61
	x.xxx_hidden_F62 = b.F62
	x.xxx_hidden_F63 = b.F63
	x.xxx_hidden_F64 = b.F64
	x.xxx_hidden_F65 = b.F65
	x.xxx_hidden_F66 = b.F66
	x.xxx_hidden_F67 = b.F67
	x.xxx_hidden_F68 = b.F68
	x.xxx_hidden_F69 = b.F69
	x.xxx_hidden_F70 = b.F70
	x.xxx_hidden_F71 = b.F71
	x.xxx_hidden_F72 = b.F72
	x.xxx_hidden_F73 = b.F73
	x.xxx_hidden_F74 = b.F74
	x.xxx_hidden_F75 = b.F75
	x.xxx_hidden_F76 = b.F76
	x.xxx_hidden_F77 = b.F77
	x.xxx_hidden_F78 = b.F78
	x.xxx_hidden_F79 = b.F79
	x.xxx_hidden_F80 = b.F80
	x.xxx_hidden_F81 = b.F81
	x.xxx_hidden_F82 = b.F82
	x.xxx_hidden_F83 = b.F83
	x.xxx_hidden_F84 = b.F84
	x.xxx_hidden_F85 = b.F85
	x.xxx_hidden_F86 = b.F86
	x.xxx_hidden_F87 = b.F87
	x.xxx_hidden_F88 = b.F88
	x.xxx_hidden_F89 = b.F89
	x.xxx_hidden_F90 = b.F90
	x.xxx_hidden_F91 = b.F91
	x.xxx_hidden_F92 = b.F92
	x.xxx_hidden_F93 = b.F93
	x.xxx_hidden_F94 = b.F94
	x.xxx_hidden_F95 = b.F95
	x.xxx_hidden_F96 = b.F96
	x.xxx_hidden_F97 = b.F97
	x.xxx_hidden_F98 = b.F98
	x.xxx_hidden_F99 = b.F99
	x.xxx_hidden_F100 = b.F100
	return m0
}

type ForeignMessage struct {
	state                  protoimpl.MessageState `protogen:"opaque.v1"`
	xxx_hidden_C           int32                  `protobuf:"varint,1,opt,name=c"`
	xxx_hidden_D           int32                  `protobuf:"varint,2,opt,name=d"`
	XXX_raceDetectHookData protoimpl.RaceDetectHookData
	XXX_presence           [1]uint32
	unknownFields          protoimpl.UnknownFields
	sizeCache              protoimpl.SizeCache
}

func (x *ForeignMessage) Reset() {
	*x = ForeignMessage{}
	mi := &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_msgTypes[2]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *ForeignMessage) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ForeignMessage) ProtoMessage() {}

func (x *ForeignMessage) ProtoReflect() protoreflect.Message {
	mi := &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_msgTypes[2]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

func (x *ForeignMessage) GetC() int32 {
	if x != nil {
		return x.xxx_hidden_C
	}
	return 0
}

func (x *ForeignMessage) GetD() int32 {
	if x != nil {
		return x.xxx_hidden_D
	}
	return 0
}

func (x *ForeignMessage) SetC(v int32) {
	x.xxx_hidden_C = v
	protoimpl.X.SetPresent(&(x.XXX_presence[0]), 0, 2)
}

func (x *ForeignMessage) SetD(v int32) {
	x.xxx_hidden_D = v
	protoimpl.X.SetPresent(&(x.XXX_presence[0]), 1, 2)
}

func (x *ForeignMessage) HasC() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[0]), 0)
}

func (x *ForeignMessage) HasD() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[0]), 1)
}

func (x *ForeignMessage) ClearC() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[0]), 0)
	x.xxx_hidden_C = 0
}

func (x *ForeignMessage) ClearD() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[0]), 1)
	x.xxx_hidden_D = 0
}

type ForeignMessage_builder struct {
	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.

	C *int32
	D *int32
}

func (b0 ForeignMessage_builder) Build() *ForeignMessage {
	m0 := &ForeignMessage{}
	b, x := &b0, m0
	_, _ = b, x
	if b.C != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 0, 2)
		x.xxx_hidden_C = *b.C
	}
	if b.D != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 1, 2)
		x.xxx_hidden_D = *b.D
	}
	return m0
}

type TestRequired struct {
	state                    protoimpl.MessageState `protogen:"opaque.v1"`
	xxx_hidden_RequiredField int32                  `protobuf:"varint,1,req,name=required_field,json=requiredField"`
	XXX_raceDetectHookData   protoimpl.RaceDetectHookData
	XXX_presence             [1]uint32
	unknownFields            protoimpl.UnknownFields
	sizeCache                protoimpl.SizeCache
}

func (x *TestRequired) Reset() {
	*x = TestRequired{}
	mi := &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_msgTypes[3]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *TestRequired) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*TestRequired) ProtoMessage() {}

func (x *TestRequired) ProtoReflect() protoreflect.Message {
	mi := &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_msgTypes[3]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

func (x *TestRequired) GetRequiredField() int32 {
	if x != nil {
		return x.xxx_hidden_RequiredField
	}
	return 0
}

func (x *TestRequired) SetRequiredField(v int32) {
	x.xxx_hidden_RequiredField = v
	protoimpl.X.SetPresent(&(x.XXX_presence[0]), 0, 1)
}

func (x *TestRequired) HasRequiredField() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[0]), 0)
}

func (x *TestRequired) ClearRequiredField() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[0]), 0)
	x.xxx_hidden_RequiredField = 0
}

type TestRequired_builder struct {
	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.

	RequiredField *int32
}

func (b0 TestRequired_builder) Build() *TestRequired {
	m0 := &TestRequired{}
	b, x := &b0, m0
	_, _ = b, x
	if b.RequiredField != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 0, 1)
		x.xxx_hidden_RequiredField = *b.RequiredField
	}
	return m0
}

type TestRequiredForeign struct {
	state                      protoimpl.MessageState           `protogen:"opaque.v1"`
	xxx_hidden_OptionalMessage *TestRequired                    `protobuf:"bytes,1,opt,name=optional_message,json=optionalMessage"`
	xxx_hidden_RepeatedMessage *[]*TestRequired                 `protobuf:"bytes,2,rep,name=repeated_message,json=repeatedMessage"`
	xxx_hidden_MapMessage      map[int32]*TestRequired          `protobuf:"bytes,3,rep,name=map_message,json=mapMessage" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
	xxx_hidden_OneofField      isTestRequiredForeign_OneofField `protobuf_oneof:"oneof_field"`
	unknownFields              protoimpl.UnknownFields
	sizeCache                  protoimpl.SizeCache
}

func (x *TestRequiredForeign) Reset() {
	*x = TestRequiredForeign{}
	mi := &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_msgTypes[4]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *TestRequiredForeign) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*TestRequiredForeign) ProtoMessage() {}

func (x *TestRequiredForeign) ProtoReflect() protoreflect.Message {
	mi := &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_msgTypes[4]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

func (x *TestRequiredForeign) GetOptionalMessage() *TestRequired {
	if x != nil {
		return x.xxx_hidden_OptionalMessage
	}
	return nil
}

func (x *TestRequiredForeign) GetRepeatedMessage() []*TestRequired {
	if x != nil {
		if x.xxx_hidden_RepeatedMessage != nil {
			return *x.xxx_hidden_RepeatedMessage
		}
	}
	return nil
}

func (x *TestRequiredForeign) GetMapMessage() map[int32]*TestRequired {
	if x != nil {
		return x.xxx_hidden_MapMessage
	}
	return nil
}

func (x *TestRequiredForeign) GetOneofMessage() *TestRequired {
	if x != nil {
		if x, ok := x.xxx_hidden_OneofField.(*testRequiredForeign_OneofMessage); ok {
			return x.OneofMessage
		}
	}
	return nil
}

func (x *TestRequiredForeign) SetOptionalMessage(v *TestRequired) {
	x.xxx_hidden_OptionalMessage = v
}

func (x *TestRequiredForeign) SetRepeatedMessage(v []*TestRequired) {
	x.xxx_hidden_RepeatedMessage = &v
}

func (x *TestRequiredForeign) SetMapMessage(v map[int32]*TestRequired) {
	x.xxx_hidden_MapMessage = v
}

func (x *TestRequiredForeign) SetOneofMessage(v *TestRequired) {
	if v == nil {
		x.xxx_hidden_OneofField = nil
		return
	}
	x.xxx_hidden_OneofField = &testRequiredForeign_OneofMessage{v}
}

func (x *TestRequiredForeign) HasOptionalMessage() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_OptionalMessage != nil
}

func (x *TestRequiredForeign) HasOneofField() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_OneofField != nil
}

func (x *TestRequiredForeign) HasOneofMessage() bool {
	if x == nil {
		return false
	}
	_, ok := x.xxx_hidden_OneofField.(*testRequiredForeign_OneofMessage)
	return ok
}

func (x *TestRequiredForeign) ClearOptionalMessage() {
	x.xxx_hidden_OptionalMessage = nil
}

func (x *TestRequiredForeign) ClearOneofField() {
	x.xxx_hidden_OneofField = nil
}

func (x *TestRequiredForeign) ClearOneofMessage() {
	if _, ok := x.xxx_hidden_OneofField.(*testRequiredForeign_OneofMessage); ok {
		x.xxx_hidden_OneofField = nil
	}
}

const TestRequiredForeign_OneofField_not_set_case case_TestRequiredForeign_OneofField = 0
const TestRequiredForeign_OneofMessage_case case_TestRequiredForeign_OneofField = 4

func (x *TestRequiredForeign) WhichOneofField() case_TestRequiredForeign_OneofField {
	if x == nil {
		return TestRequiredForeign_OneofField_not_set_case
	}
	switch x.xxx_hidden_OneofField.(type) {
	case *testRequiredForeign_OneofMessage:
		return TestRequiredForeign_OneofMessage_case
	default:
		return TestRequiredForeign_OneofField_not_set_case
	}
}

type TestRequiredForeign_builder struct {
	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.

	OptionalMessage *TestRequired
	RepeatedMessage []*TestRequired
	MapMessage      map[int32]*TestRequired
	// Fields of oneof xxx_hidden_OneofField:
	OneofMessage *TestRequired
	// -- end of xxx_hidden_OneofField
}

func (b0 TestRequiredForeign_builder) Build() *TestRequiredForeign {
	m0 := &TestRequiredForeign{}
	b, x := &b0, m0
	_, _ = b, x
	x.xxx_hidden_OptionalMessage = b.OptionalMessage
	x.xxx_hidden_RepeatedMessage = &b.RepeatedMessage
	x.xxx_hidden_MapMessage = b.MapMessage
	if b.OneofMessage != nil {
		x.xxx_hidden_OneofField = &testRequiredForeign_OneofMessage{b.OneofMessage}
	}
	return m0
}

type case_TestRequiredForeign_OneofField protoreflect.FieldNumber

func (x case_TestRequiredForeign_OneofField) String() string {
	md := file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_msgTypes[4].Descriptor()
	if x == 0 {
		return "not set"
	}
	return protoimpl.X.MessageFieldStringOf(md, protoreflect.FieldNumber(x))
}

type isTestRequiredForeign_OneofField interface {
	isTestRequiredForeign_OneofField()
}

type testRequiredForeign_OneofMessage struct {
	OneofMessage *TestRequired `protobuf:"bytes,4,opt,name=oneof_message,json=oneofMessage,oneof"`
}

func (*testRequiredForeign_OneofMessage) isTestRequiredForeign_OneofField() {}

type TestRequiredGroupFields struct {
	state                    protoimpl.MessageState                    `protogen:"opaque.v1"`
	xxx_hidden_Optionalgroup *TestRequiredGroupFields_OptionalGroup    `protobuf:"group,1,opt,name=OptionalGroup,json=optionalgroup"`
	xxx_hidden_Repeatedgroup *[]*TestRequiredGroupFields_RepeatedGroup `protobuf:"group,3,rep,name=RepeatedGroup,json=repeatedgroup"`
	unknownFields            protoimpl.UnknownFields
	sizeCache                protoimpl.SizeCache
}

func (x *TestRequiredGroupFields) Reset() {
	*x = TestRequiredGroupFields{}
	mi := &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_msgTypes[5]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *TestRequiredGroupFields) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*TestRequiredGroupFields) ProtoMessage() {}

func (x *TestRequiredGroupFields) ProtoReflect() protoreflect.Message {
	mi := &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_msgTypes[5]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

func (x *TestRequiredGroupFields) GetOptionalgroup() *TestRequiredGroupFields_OptionalGroup {
	if x != nil {
		return x.xxx_hidden_Optionalgroup
	}
	return nil
}

func (x *TestRequiredGroupFields) GetRepeatedgroup() []*TestRequiredGroupFields_RepeatedGroup {
	if x != nil {
		if x.xxx_hidden_Repeatedgroup != nil {
			return *x.xxx_hidden_Repeatedgroup
		}
	}
	return nil
}

func (x *TestRequiredGroupFields) SetOptionalgroup(v *TestRequiredGroupFields_OptionalGroup) {
	x.xxx_hidden_Optionalgroup = v
}

func (x *TestRequiredGroupFields) SetRepeatedgroup(v []*TestRequiredGroupFields_RepeatedGroup) {
	x.xxx_hidden_Repeatedgroup = &v
}

func (x *TestRequiredGroupFields) HasOptionalgroup() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_Optionalgroup != nil
}

func (x *TestRequiredGroupFields) ClearOptionalgroup() {
	x.xxx_hidden_Optionalgroup = nil
}

type TestRequiredGroupFields_builder struct {
	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.

	Optionalgroup *TestRequiredGroupFields_OptionalGroup
	Repeatedgroup []*TestRequiredGroupFields_RepeatedGroup
}

func (b0 TestRequiredGroupFields_builder) Build() *TestRequiredGroupFields {
	m0 := &TestRequiredGroupFields{}
	b, x := &b0, m0
	_, _ = b, x
	x.xxx_hidden_Optionalgroup = b.Optionalgroup
	x.xxx_hidden_Repeatedgroup = &b.Repeatedgroup
	return m0
}

type TestRequiredLazy struct {
	state                          protoimpl.MessageState `protogen:"opaque.v1"`
	xxx_hidden_OptionalLazyMessage *TestRequired          `protobuf:"bytes,1,opt,name=optional_lazy_message,json=optionalLazyMessage"`
	// Deprecated: Do not use. This will be deleted in the near future.
	XXX_lazyUnmarshalInfo  protoimpl.LazyUnmarshalInfo
	XXX_raceDetectHookData protoimpl.RaceDetectHookData
	XXX_presence           [1]uint32
	unknownFields          protoimpl.UnknownFields
	sizeCache              protoimpl.SizeCache
}

func (x *TestRequiredLazy) Reset() {
	*x = TestRequiredLazy{}
	mi := &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_msgTypes[6]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *TestRequiredLazy) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*TestRequiredLazy) ProtoMessage() {}

func (x *TestRequiredLazy) ProtoReflect() protoreflect.Message {
	mi := &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_msgTypes[6]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

func (x *TestRequiredLazy) GetOptionalLazyMessage() *TestRequired {
	if x != nil {
		if protoimpl.X.Present(&(x.XXX_presence[0]), 0) {
			if protoimpl.X.AtomicCheckPointerIsNil(&x.xxx_hidden_OptionalLazyMessage) {
				protoimpl.X.UnmarshalField(x, 1)
			}
			var rv *TestRequired
			protoimpl.X.AtomicLoadPointer(protoimpl.Pointer(&x.xxx_hidden_OptionalLazyMessage), protoimpl.Pointer(&rv))
			return rv
		}
	}
	return nil
}

func (x *TestRequiredLazy) SetOptionalLazyMessage(v *TestRequired) {
	protoimpl.X.AtomicSetPointer(&x.xxx_hidden_OptionalLazyMessage, v)
	if v == nil {
		protoimpl.X.ClearPresent(&(x.XXX_presence[0]), 0)
	} else {
		protoimpl.X.SetPresent(&(x.XXX_presence[0]), 0, 1)
	}
}

func (x *TestRequiredLazy) HasOptionalLazyMessage() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[0]), 0)
}

func (x *TestRequiredLazy) ClearOptionalLazyMessage() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[0]), 0)
	protoimpl.X.AtomicSetPointer(&x.xxx_hidden_OptionalLazyMessage, (*TestRequired)(nil))
}

type TestRequiredLazy_builder struct {
	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.

	OptionalLazyMessage *TestRequired
}

func (b0 TestRequiredLazy_builder) Build() *TestRequiredLazy {
	m0 := &TestRequiredLazy{}
	b, x := &b0, m0
	_, _ = b, x
	if b.OptionalLazyMessage != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 0, 1)
		x.xxx_hidden_OptionalLazyMessage = b.OptionalLazyMessage
	}
	return m0
}

type TestPackedTypes struct {
	state                     protoimpl.MessageState `protogen:"opaque.v1"`
	xxx_hidden_PackedInt32    []int32                `protobuf:"varint,90,rep,packed,name=packed_int32,json=packedInt32"`
	xxx_hidden_PackedInt64    []int64                `protobuf:"varint,91,rep,packed,name=packed_int64,json=packedInt64"`
	xxx_hidden_PackedUint32   []uint32               `protobuf:"varint,92,rep,packed,name=packed_uint32,json=packedUint32"`
	xxx_hidden_PackedUint64   []uint64               `protobuf:"varint,93,rep,packed,name=packed_uint64,json=packedUint64"`
	xxx_hidden_PackedSint32   []int32                `protobuf:"zigzag32,94,rep,packed,name=packed_sint32,json=packedSint32"`
	xxx_hidden_PackedSint64   []int64                `protobuf:"zigzag64,95,rep,packed,name=packed_sint64,json=packedSint64"`
	xxx_hidden_PackedFixed32  []uint32               `protobuf:"fixed32,96,rep,packed,name=packed_fixed32,json=packedFixed32"`
	xxx_hidden_PackedFixed64  []uint64               `protobuf:"fixed64,97,rep,packed,name=packed_fixed64,json=packedFixed64"`
	xxx_hidden_PackedSfixed32 []int32                `protobuf:"fixed32,98,rep,packed,name=packed_sfixed32,json=packedSfixed32"`
	xxx_hidden_PackedSfixed64 []int64                `protobuf:"fixed64,99,rep,packed,name=packed_sfixed64,json=packedSfixed64"`
	xxx_hidden_PackedFloat    []float32              `protobuf:"fixed32,100,rep,packed,name=packed_float,json=packedFloat"`
	xxx_hidden_PackedDouble   []float64              `protobuf:"fixed64,101,rep,packed,name=packed_double,json=packedDouble"`
	xxx_hidden_PackedBool     []bool                 `protobuf:"varint,102,rep,packed,name=packed_bool,json=packedBool"`
	xxx_hidden_PackedEnum     []ForeignEnum          `protobuf:"varint,103,rep,packed,name=packed_enum,json=packedEnum,enum=opaque.goproto.proto.testeditions.ForeignEnum"`
	unknownFields             protoimpl.UnknownFields
	sizeCache                 protoimpl.SizeCache
}

func (x *TestPackedTypes) Reset() {
	*x = TestPackedTypes{}
	mi := &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_msgTypes[7]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *TestPackedTypes) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*TestPackedTypes) ProtoMessage() {}

func (x *TestPackedTypes) ProtoReflect() protoreflect.Message {
	mi := &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_msgTypes[7]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

func (x *TestPackedTypes) GetPackedInt32() []int32 {
	if x != nil {
		return x.xxx_hidden_PackedInt32
	}
	return nil
}

func (x *TestPackedTypes) GetPackedInt64() []int64 {
	if x != nil {
		return x.xxx_hidden_PackedInt64
	}
	return nil
}

func (x *TestPackedTypes) GetPackedUint32() []uint32 {
	if x != nil {
		return x.xxx_hidden_PackedUint32
	}
	return nil
}

func (x *TestPackedTypes) GetPackedUint64() []uint64 {
	if x != nil {
		return x.xxx_hidden_PackedUint64
	}
	return nil
}

func (x *TestPackedTypes) GetPackedSint32() []int32 {
	if x != nil {
		return x.xxx_hidden_PackedSint32
	}
	return nil
}

func (x *TestPackedTypes) GetPackedSint64() []int64 {
	if x != nil {
		return x.xxx_hidden_PackedSint64
	}
	return nil
}

func (x *TestPackedTypes) GetPackedFixed32() []uint32 {
	if x != nil {
		return x.xxx_hidden_PackedFixed32
	}
	return nil
}

func (x *TestPackedTypes) GetPackedFixed64() []uint64 {
	if x != nil {
		return x.xxx_hidden_PackedFixed64
	}
	return nil
}

func (x *TestPackedTypes) GetPackedSfixed32() []int32 {
	if x != nil {
		return x.xxx_hidden_PackedSfixed32
	}
	return nil
}

func (x *TestPackedTypes) GetPackedSfixed64() []int64 {
	if x != nil {
		return x.xxx_hidden_PackedSfixed64
	}
	return nil
}

func (x *TestPackedTypes) GetPackedFloat() []float32 {
	if x != nil {
		return x.xxx_hidden_PackedFloat
	}
	return nil
}

func (x *TestPackedTypes) GetPackedDouble() []float64 {
	if x != nil {
		return x.xxx_hidden_PackedDouble
	}
	return nil
}

func (x *TestPackedTypes) GetPackedBool() []bool {
	if x != nil {
		return x.xxx_hidden_PackedBool
	}
	return nil
}

func (x *TestPackedTypes) GetPackedEnum() []ForeignEnum {
	if x != nil {
		return x.xxx_hidden_PackedEnum
	}
	return nil
}

func (x *TestPackedTypes) SetPackedInt32(v []int32) {
	x.xxx_hidden_PackedInt32 = v
}

func (x *TestPackedTypes) SetPackedInt64(v []int64) {
	x.xxx_hidden_PackedInt64 = v
}

func (x *TestPackedTypes) SetPackedUint32(v []uint32) {
	x.xxx_hidden_PackedUint32 = v
}

func (x *TestPackedTypes) SetPackedUint64(v []uint64) {
	x.xxx_hidden_PackedUint64 = v
}

func (x *TestPackedTypes) SetPackedSint32(v []int32) {
	x.xxx_hidden_PackedSint32 = v
}

func (x *TestPackedTypes) SetPackedSint64(v []int64) {
	x.xxx_hidden_PackedSint64 = v
}

func (x *TestPackedTypes) SetPackedFixed32(v []uint32) {
	x.xxx_hidden_PackedFixed32 = v
}

func (x *TestPackedTypes) SetPackedFixed64(v []uint64) {
	x.xxx_hidden_PackedFixed64 = v
}

func (x *TestPackedTypes) SetPackedSfixed32(v []int32) {
	x.xxx_hidden_PackedSfixed32 = v
}

func (x *TestPackedTypes) SetPackedSfixed64(v []int64) {
	x.xxx_hidden_PackedSfixed64 = v
}

func (x *TestPackedTypes) SetPackedFloat(v []float32) {
	x.xxx_hidden_PackedFloat = v
}

func (x *TestPackedTypes) SetPackedDouble(v []float64) {
	x.xxx_hidden_PackedDouble = v
}

func (x *TestPackedTypes) SetPackedBool(v []bool) {
	x.xxx_hidden_PackedBool = v
}

func (x *TestPackedTypes) SetPackedEnum(v []ForeignEnum) {
	x.xxx_hidden_PackedEnum = v
}

type TestPackedTypes_builder struct {
	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.

	PackedInt32    []int32
	PackedInt64    []int64
	PackedUint32   []uint32
	PackedUint64   []uint64
	PackedSint32   []int32
	PackedSint64   []int64
	PackedFixed32  []uint32
	PackedFixed64  []uint64
	PackedSfixed32 []int32
	PackedSfixed64 []int64
	PackedFloat    []float32
	PackedDouble   []float64
	PackedBool     []bool
	PackedEnum     []ForeignEnum
}

func (b0 TestPackedTypes_builder) Build() *TestPackedTypes {
	m0 := &TestPackedTypes{}
	b, x := &b0, m0
	_, _ = b, x
	x.xxx_hidden_PackedInt32 = b.PackedInt32
	x.xxx_hidden_PackedInt64 = b.PackedInt64
	x.xxx_hidden_PackedUint32 = b.PackedUint32
	x.xxx_hidden_PackedUint64 = b.PackedUint64
	x.xxx_hidden_PackedSint32 = b.PackedSint32
	x.xxx_hidden_PackedSint64 = b.PackedSint64
	x.xxx_hidden_PackedFixed32 = b.PackedFixed32
	x.xxx_hidden_PackedFixed64 = b.PackedFixed64
	x.xxx_hidden_PackedSfixed32 = b.PackedSfixed32
	x.xxx_hidden_PackedSfixed64 = b.PackedSfixed64
	x.xxx_hidden_PackedFloat = b.PackedFloat
	x.xxx_hidden_PackedDouble = b.PackedDouble
	x.xxx_hidden_PackedBool = b.PackedBool
	x.xxx_hidden_PackedEnum = b.PackedEnum
	return m0
}

type TestPackedExtensions struct {
	state           protoimpl.MessageState `protogen:"opaque.v1"`
	extensionFields protoimpl.ExtensionFields
	unknownFields   protoimpl.UnknownFields
	sizeCache       protoimpl.SizeCache
}

func (x *TestPackedExtensions) Reset() {
	*x = TestPackedExtensions{}
	mi := &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_msgTypes[8]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *TestPackedExtensions) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*TestPackedExtensions) ProtoMessage() {}

func (x *TestPackedExtensions) ProtoReflect() protoreflect.Message {
	mi := &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_msgTypes[8]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

type TestPackedExtensions_builder struct {
	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.

}

func (b0 TestPackedExtensions_builder) Build() *TestPackedExtensions {
	m0 := &TestPackedExtensions{}
	b, x := &b0, m0
	_, _ = b, x
	return m0
}

type RemoteDefault struct {
	state                  protoimpl.MessageState `protogen:"opaque.v1"`
	xxx_hidden_Default     enums_opaque.Enum      `protobuf:"varint,1,opt,name=default,enum=opaque.goproto.proto.enums.Enum"`
	xxx_hidden_Zero        enums_opaque.Enum      `protobuf:"varint,2,opt,name=zero,enum=opaque.goproto.proto.enums.Enum,def=0"`
	xxx_hidden_One         enums_opaque.Enum      `protobuf:"varint,3,opt,name=one,enum=opaque.goproto.proto.enums.Enum,def=1"`
	xxx_hidden_Elevent     enums_opaque.Enum      `protobuf:"varint,4,opt,name=elevent,enum=opaque.goproto.proto.enums.Enum,def=11"`
	xxx_hidden_Seventeen   enums_opaque.Enum      `protobuf:"varint,5,opt,name=seventeen,enum=opaque.goproto.proto.enums.Enum,def=17"`
	xxx_hidden_Thirtyseven enums_opaque.Enum      `protobuf:"varint,6,opt,name=thirtyseven,enum=opaque.goproto.proto.enums.Enum,def=37"`
	xxx_hidden_Sixtyseven  enums_opaque.Enum      `protobuf:"varint,7,opt,name=sixtyseven,enum=opaque.goproto.proto.enums.Enum,def=67"`
	xxx_hidden_Negative    enums_opaque.Enum      `protobuf:"varint,8,opt,name=negative,enum=opaque.goproto.proto.enums.Enum,def=-1"`
	XXX_raceDetectHookData protoimpl.RaceDetectHookData
	XXX_presence           [1]uint32
	unknownFields          protoimpl.UnknownFields
	sizeCache              protoimpl.SizeCache
}

// Default values for RemoteDefault fields.
const (
	Default_RemoteDefault_Zero        = enums_opaque.Enum(0)  // enums_opaque.Enum_ZERO
	Default_RemoteDefault_One         = enums_opaque.Enum(1)  // enums_opaque.Enum_ONE
	Default_RemoteDefault_Elevent     = enums_opaque.Enum(11) // enums_opaque.Enum_ELEVENT
	Default_RemoteDefault_Seventeen   = enums_opaque.Enum(17) // enums_opaque.Enum_SEVENTEEN
	Default_RemoteDefault_Thirtyseven = enums_opaque.Enum(37) // enums_opaque.Enum_THIRTYSEVEN
	Default_RemoteDefault_Sixtyseven  = enums_opaque.Enum(67) // enums_opaque.Enum_SIXTYSEVEN
	Default_RemoteDefault_Negative    = enums_opaque.Enum(-1) // enums_opaque.Enum_NEGATIVE
)

func (x *RemoteDefault) Reset() {
	*x = RemoteDefault{}
	mi := &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_msgTypes[9]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *RemoteDefault) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*RemoteDefault) ProtoMessage() {}

func (x *RemoteDefault) ProtoReflect() protoreflect.Message {
	mi := &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_msgTypes[9]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

func (x *RemoteDefault) GetDefault() enums_opaque.Enum {
	if x != nil {
		if protoimpl.X.Present(&(x.XXX_presence[0]), 0) {
			return x.xxx_hidden_Default
		}
	}
	return enums_opaque.Enum(1337)
}

func (x *RemoteDefault) GetZero() enums_opaque.Enum {
	if x != nil {
		if protoimpl.X.Present(&(x.XXX_presence[0]), 1) {
			return x.xxx_hidden_Zero
		}
	}
	return Default_RemoteDefault_Zero
}

func (x *RemoteDefault) GetOne() enums_opaque.Enum {
	if x != nil {
		if protoimpl.X.Present(&(x.XXX_presence[0]), 2) {
			return x.xxx_hidden_One
		}
	}
	return Default_RemoteDefault_One
}

func (x *RemoteDefault) GetElevent() enums_opaque.Enum {
	if x != nil {
		if protoimpl.X.Present(&(x.XXX_presence[0]), 3) {
			return x.xxx_hidden_Elevent
		}
	}
	return Default_RemoteDefault_Elevent
}

func (x *RemoteDefault) GetSeventeen() enums_opaque.Enum {
	if x != nil {
		if protoimpl.X.Present(&(x.XXX_presence[0]), 4) {
			return x.xxx_hidden_Seventeen
		}
	}
	return Default_RemoteDefault_Seventeen
}

func (x *RemoteDefault) GetThirtyseven() enums_opaque.Enum {
	if x != nil {
		if protoimpl.X.Present(&(x.XXX_presence[0]), 5) {
			return x.xxx_hidden_Thirtyseven
		}
	}
	return Default_RemoteDefault_Thirtyseven
}

func (x *RemoteDefault) GetSixtyseven() enums_opaque.Enum {
	if x != nil {
		if protoimpl.X.Present(&(x.XXX_presence[0]), 6) {
			return x.xxx_hidden_Sixtyseven
		}
	}
	return Default_RemoteDefault_Sixtyseven
}

func (x *RemoteDefault) GetNegative() enums_opaque.Enum {
	if x != nil {
		if protoimpl.X.Present(&(x.XXX_presence[0]), 7) {
			return x.xxx_hidden_Negative
		}
	}
	return Default_RemoteDefault_Negative
}

func (x *RemoteDefault) SetDefault(v enums_opaque.Enum) {
	x.xxx_hidden_Default = v
	protoimpl.X.SetPresent(&(x.XXX_presence[0]), 0, 8)
}

func (x *RemoteDefault) SetZero(v enums_opaque.Enum) {
	x.xxx_hidden_Zero = v
	protoimpl.X.SetPresent(&(x.XXX_presence[0]), 1, 8)
}

func (x *RemoteDefault) SetOne(v enums_opaque.Enum) {
	x.xxx_hidden_One = v
	protoimpl.X.SetPresent(&(x.XXX_presence[0]), 2, 8)
}

func (x *RemoteDefault) SetElevent(v enums_opaque.Enum) {
	x.xxx_hidden_Elevent = v
	protoimpl.X.SetPresent(&(x.XXX_presence[0]), 3, 8)
}

func (x *RemoteDefault) SetSeventeen(v enums_opaque.Enum) {
	x.xxx_hidden_Seventeen = v
	protoimpl.X.SetPresent(&(x.XXX_presence[0]), 4, 8)
}

func (x *RemoteDefault) SetThirtyseven(v enums_opaque.Enum) {
	x.xxx_hidden_Thirtyseven = v
	protoimpl.X.SetPresent(&(x.XXX_presence[0]), 5, 8)
}

func (x *RemoteDefault) SetSixtyseven(v enums_opaque.Enum) {
	x.xxx_hidden_Sixtyseven = v
	protoimpl.X.SetPresent(&(x.XXX_presence[0]), 6, 8)
}

func (x *RemoteDefault) SetNegative(v enums_opaque.Enum) {
	x.xxx_hidden_Negative = v
	protoimpl.X.SetPresent(&(x.XXX_presence[0]), 7, 8)
}

func (x *RemoteDefault) HasDefault() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[0]), 0)
}

func (x *RemoteDefault) HasZero() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[0]), 1)
}

func (x *RemoteDefault) HasOne() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[0]), 2)
}

func (x *RemoteDefault) HasElevent() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[0]), 3)
}

func (x *RemoteDefault) HasSeventeen() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[0]), 4)
}

func (x *RemoteDefault) HasThirtyseven() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[0]), 5)
}

func (x *RemoteDefault) HasSixtyseven() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[0]), 6)
}

func (x *RemoteDefault) HasNegative() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[0]), 7)
}

func (x *RemoteDefault) ClearDefault() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[0]), 0)
	x.xxx_hidden_Default = enums_opaque.Enum_DEFAULT
}

func (x *RemoteDefault) ClearZero() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[0]), 1)
}

func (x *RemoteDefault) ClearOne() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[0]), 2)
}

func (x *RemoteDefault) ClearElevent() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[0]), 3)
}

func (x *RemoteDefault) ClearSeventeen() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[0]), 4)
}

func (x *RemoteDefault) ClearThirtyseven() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[0]), 5)
}

func (x *RemoteDefault) ClearSixtyseven() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[0]), 6)
}

func (x *RemoteDefault) ClearNegative() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[0]), 7)
}

type RemoteDefault_builder struct {
	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.

	Default     *enums_opaque.Enum
	Zero        *enums_opaque.Enum
	One         *enums_opaque.Enum
	Elevent     *enums_opaque.Enum
	Seventeen   *enums_opaque.Enum
	Thirtyseven *enums_opaque.Enum
	Sixtyseven  *enums_opaque.Enum
	Negative    *enums_opaque.Enum
}

func (b0 RemoteDefault_builder) Build() *RemoteDefault {
	m0 := &RemoteDefault{}
	b, x := &b0, m0
	_, _ = b, x
	if b.Default != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 0, 8)
		x.xxx_hidden_Default = *b.Default
	}
	if b.Zero != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 1, 8)
		x.xxx_hidden_Zero = *b.Zero
	}
	if b.One != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 2, 8)
		x.xxx_hidden_One = *b.One
	}
	if b.Elevent != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 3, 8)
		x.xxx_hidden_Elevent = *b.Elevent
	}
	if b.Seventeen != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 4, 8)
		x.xxx_hidden_Seventeen = *b.Seventeen
	}
	if b.Thirtyseven != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 5, 8)
		x.xxx_hidden_Thirtyseven = *b.Thirtyseven
	}
	if b.Sixtyseven != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 6, 8)
		x.xxx_hidden_Sixtyseven = *b.Sixtyseven
	}
	if b.Negative != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 7, 8)
		x.xxx_hidden_Negative = *b.Negative
	}
	return m0
}

type TestAllTypes_NestedMessage struct {
	state                  protoimpl.MessageState `protogen:"opaque.v1"`
	xxx_hidden_A           int32                  `protobuf:"varint,1,opt,name=a"`
	xxx_hidden_Corecursive *TestAllTypes          `protobuf:"bytes,2,opt,name=corecursive"`
	XXX_raceDetectHookData protoimpl.RaceDetectHookData
	XXX_presence           [1]uint32
	unknownFields          protoimpl.UnknownFields
	sizeCache              protoimpl.SizeCache
}

func (x *TestAllTypes_NestedMessage) Reset() {
	*x = TestAllTypes_NestedMessage{}
	mi := &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_msgTypes[10]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *TestAllTypes_NestedMessage) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*TestAllTypes_NestedMessage) ProtoMessage() {}

func (x *TestAllTypes_NestedMessage) ProtoReflect() protoreflect.Message {
	mi := &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_msgTypes[10]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

func (x *TestAllTypes_NestedMessage) GetA() int32 {
	if x != nil {
		return x.xxx_hidden_A
	}
	return 0
}

func (x *TestAllTypes_NestedMessage) GetCorecursive() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_Corecursive
	}
	return nil
}

func (x *TestAllTypes_NestedMessage) SetA(v int32) {
	x.xxx_hidden_A = v
	protoimpl.X.SetPresent(&(x.XXX_presence[0]), 0, 2)
}

func (x *TestAllTypes_NestedMessage) SetCorecursive(v *TestAllTypes) {
	x.xxx_hidden_Corecursive = v
}

func (x *TestAllTypes_NestedMessage) HasA() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[0]), 0)
}

func (x *TestAllTypes_NestedMessage) HasCorecursive() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_Corecursive != nil
}

func (x *TestAllTypes_NestedMessage) ClearA() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[0]), 0)
	x.xxx_hidden_A = 0
}

func (x *TestAllTypes_NestedMessage) ClearCorecursive() {
	x.xxx_hidden_Corecursive = nil
}

type TestAllTypes_NestedMessage_builder struct {
	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.

	A           *int32
	Corecursive *TestAllTypes
}

func (b0 TestAllTypes_NestedMessage_builder) Build() *TestAllTypes_NestedMessage {
	m0 := &TestAllTypes_NestedMessage{}
	b, x := &b0, m0
	_, _ = b, x
	if b.A != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 0, 2)
		x.xxx_hidden_A = *b.A
	}
	x.xxx_hidden_Corecursive = b.Corecursive
	return m0
}

type TestAllTypes_OptionalGroup struct {
	state                            protoimpl.MessageState      `protogen:"opaque.v1"`
	xxx_hidden_A                     int32                       `protobuf:"varint,17,opt,name=a"`
	xxx_hidden_OptionalNestedMessage *TestAllTypes_NestedMessage `protobuf:"bytes,1000,opt,name=optional_nested_message,json=optionalNestedMessage"`
	xxx_hidden_SameFieldNumber       int32                       `protobuf:"varint,16,opt,name=same_field_number,json=sameFieldNumber"`
	XXX_raceDetectHookData           protoimpl.RaceDetectHookData
	XXX_presence                     [1]uint32
	unknownFields                    protoimpl.UnknownFields
	sizeCache                        protoimpl.SizeCache
}

func (x *TestAllTypes_OptionalGroup) Reset() {
	*x = TestAllTypes_OptionalGroup{}
	mi := &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_msgTypes[11]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *TestAllTypes_OptionalGroup) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*TestAllTypes_OptionalGroup) ProtoMessage() {}

func (x *TestAllTypes_OptionalGroup) ProtoReflect() protoreflect.Message {
	mi := &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_msgTypes[11]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

func (x *TestAllTypes_OptionalGroup) GetA() int32 {
	if x != nil {
		return x.xxx_hidden_A
	}
	return 0
}

func (x *TestAllTypes_OptionalGroup) GetOptionalNestedMessage() *TestAllTypes_NestedMessage {
	if x != nil {
		return x.xxx_hidden_OptionalNestedMessage
	}
	return nil
}

func (x *TestAllTypes_OptionalGroup) GetSameFieldNumber() int32 {
	if x != nil {
		return x.xxx_hidden_SameFieldNumber
	}
	return 0
}

func (x *TestAllTypes_OptionalGroup) SetA(v int32) {
	x.xxx_hidden_A = v
	protoimpl.X.SetPresent(&(x.XXX_presence[0]), 0, 3)
}

func (x *TestAllTypes_OptionalGroup) SetOptionalNestedMessage(v *TestAllTypes_NestedMessage) {
	x.xxx_hidden_OptionalNestedMessage = v
}

func (x *TestAllTypes_OptionalGroup) SetSameFieldNumber(v int32) {
	x.xxx_hidden_SameFieldNumber = v
	protoimpl.X.SetPresent(&(x.XXX_presence[0]), 2, 3)
}

func (x *TestAllTypes_OptionalGroup) HasA() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[0]), 0)
}

func (x *TestAllTypes_OptionalGroup) HasOptionalNestedMessage() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_OptionalNestedMessage != nil
}

func (x *TestAllTypes_OptionalGroup) HasSameFieldNumber() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[0]), 2)
}

func (x *TestAllTypes_OptionalGroup) ClearA() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[0]), 0)
	x.xxx_hidden_A = 0
}

func (x *TestAllTypes_OptionalGroup) ClearOptionalNestedMessage() {
	x.xxx_hidden_OptionalNestedMessage = nil
}

func (x *TestAllTypes_OptionalGroup) ClearSameFieldNumber() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[0]), 2)
	x.xxx_hidden_SameFieldNumber = 0
}

type TestAllTypes_OptionalGroup_builder struct {
	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.

	A                     *int32
	OptionalNestedMessage *TestAllTypes_NestedMessage
	SameFieldNumber       *int32
}

func (b0 TestAllTypes_OptionalGroup_builder) Build() *TestAllTypes_OptionalGroup {
	m0 := &TestAllTypes_OptionalGroup{}
	b, x := &b0, m0
	_, _ = b, x
	if b.A != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 0, 3)
		x.xxx_hidden_A = *b.A
	}
	x.xxx_hidden_OptionalNestedMessage = b.OptionalNestedMessage
	if b.SameFieldNumber != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 2, 3)
		x.xxx_hidden_SameFieldNumber = *b.SameFieldNumber
	}
	return m0
}

type TestAllTypes_RepeatedGroup struct {
	state                            protoimpl.MessageState      `protogen:"opaque.v1"`
	xxx_hidden_A                     int32                       `protobuf:"varint,47,opt,name=a"`
	xxx_hidden_OptionalNestedMessage *TestAllTypes_NestedMessage `protobuf:"bytes,1001,opt,name=optional_nested_message,json=optionalNestedMessage"`
	XXX_raceDetectHookData           protoimpl.RaceDetectHookData
	XXX_presence                     [1]uint32
	unknownFields                    protoimpl.UnknownFields
	sizeCache                        protoimpl.SizeCache
}

func (x *TestAllTypes_RepeatedGroup) Reset() {
	*x = TestAllTypes_RepeatedGroup{}
	mi := &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_msgTypes[12]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *TestAllTypes_RepeatedGroup) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*TestAllTypes_RepeatedGroup) ProtoMessage() {}

func (x *TestAllTypes_RepeatedGroup) ProtoReflect() protoreflect.Message {
	mi := &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_msgTypes[12]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

func (x *TestAllTypes_RepeatedGroup) GetA() int32 {
	if x != nil {
		return x.xxx_hidden_A
	}
	return 0
}

func (x *TestAllTypes_RepeatedGroup) GetOptionalNestedMessage() *TestAllTypes_NestedMessage {
	if x != nil {
		return x.xxx_hidden_OptionalNestedMessage
	}
	return nil
}

func (x *TestAllTypes_RepeatedGroup) SetA(v int32) {
	x.xxx_hidden_A = v
	protoimpl.X.SetPresent(&(x.XXX_presence[0]), 0, 2)
}

func (x *TestAllTypes_RepeatedGroup) SetOptionalNestedMessage(v *TestAllTypes_NestedMessage) {
	x.xxx_hidden_OptionalNestedMessage = v
}

func (x *TestAllTypes_RepeatedGroup) HasA() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[0]), 0)
}

func (x *TestAllTypes_RepeatedGroup) HasOptionalNestedMessage() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_OptionalNestedMessage != nil
}

func (x *TestAllTypes_RepeatedGroup) ClearA() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[0]), 0)
	x.xxx_hidden_A = 0
}

func (x *TestAllTypes_RepeatedGroup) ClearOptionalNestedMessage() {
	x.xxx_hidden_OptionalNestedMessage = nil
}

type TestAllTypes_RepeatedGroup_builder struct {
	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.

	A                     *int32
	OptionalNestedMessage *TestAllTypes_NestedMessage
}

func (b0 TestAllTypes_RepeatedGroup_builder) Build() *TestAllTypes_RepeatedGroup {
	m0 := &TestAllTypes_RepeatedGroup{}
	b, x := &b0, m0
	_, _ = b, x
	if b.A != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 0, 2)
		x.xxx_hidden_A = *b.A
	}
	x.xxx_hidden_OptionalNestedMessage = b.OptionalNestedMessage
	return m0
}

type TestAllTypes_OneofGroup struct {
	state                  protoimpl.MessageState `protogen:"opaque.v1"`
	xxx_hidden_A           int32                  `protobuf:"varint,1,opt,name=a"`
	xxx_hidden_B           int32                  `protobuf:"varint,2,opt,name=b"`
	XXX_raceDetectHookData protoimpl.RaceDetectHookData
	XXX_presence           [1]uint32
	unknownFields          protoimpl.UnknownFields
	sizeCache              protoimpl.SizeCache
}

func (x *TestAllTypes_OneofGroup) Reset() {
	*x = TestAllTypes_OneofGroup{}
	mi := &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_msgTypes[30]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *TestAllTypes_OneofGroup) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*TestAllTypes_OneofGroup) ProtoMessage() {}

func (x *TestAllTypes_OneofGroup) ProtoReflect() protoreflect.Message {
	mi := &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_msgTypes[30]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

func (x *TestAllTypes_OneofGroup) GetA() int32 {
	if x != nil {
		return x.xxx_hidden_A
	}
	return 0
}

func (x *TestAllTypes_OneofGroup) GetB() int32 {
	if x != nil {
		return x.xxx_hidden_B
	}
	return 0
}

func (x *TestAllTypes_OneofGroup) SetA(v int32) {
	x.xxx_hidden_A = v
	protoimpl.X.SetPresent(&(x.XXX_presence[0]), 0, 2)
}

func (x *TestAllTypes_OneofGroup) SetB(v int32) {
	x.xxx_hidden_B = v
	protoimpl.X.SetPresent(&(x.XXX_presence[0]), 1, 2)
}

func (x *TestAllTypes_OneofGroup) HasA() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[0]), 0)
}

func (x *TestAllTypes_OneofGroup) HasB() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[0]), 1)
}

func (x *TestAllTypes_OneofGroup) ClearA() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[0]), 0)
	x.xxx_hidden_A = 0
}

func (x *TestAllTypes_OneofGroup) ClearB() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[0]), 1)
	x.xxx_hidden_B = 0
}

type TestAllTypes_OneofGroup_builder struct {
	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.

	A *int32
	B *int32
}

func (b0 TestAllTypes_OneofGroup_builder) Build() *TestAllTypes_OneofGroup {
	m0 := &TestAllTypes_OneofGroup{}
	b, x := &b0, m0
	_, _ = b, x
	if b.A != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 0, 2)
		x.xxx_hidden_A = *b.A
	}
	if b.B != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 1, 2)
		x.xxx_hidden_B = *b.B
	}
	return m0
}

type TestRequiredGroupFields_OptionalGroup struct {
	state                  protoimpl.MessageState `protogen:"opaque.v1"`
	xxx_hidden_A           int32                  `protobuf:"varint,2,req,name=a"`
	XXX_raceDetectHookData protoimpl.RaceDetectHookData
	XXX_presence           [1]uint32
	unknownFields          protoimpl.UnknownFields
	sizeCache              protoimpl.SizeCache
}

func (x *TestRequiredGroupFields_OptionalGroup) Reset() {
	*x = TestRequiredGroupFields_OptionalGroup{}
	mi := &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_msgTypes[32]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *TestRequiredGroupFields_OptionalGroup) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*TestRequiredGroupFields_OptionalGroup) ProtoMessage() {}

func (x *TestRequiredGroupFields_OptionalGroup) ProtoReflect() protoreflect.Message {
	mi := &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_msgTypes[32]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

func (x *TestRequiredGroupFields_OptionalGroup) GetA() int32 {
	if x != nil {
		return x.xxx_hidden_A
	}
	return 0
}

func (x *TestRequiredGroupFields_OptionalGroup) SetA(v int32) {
	x.xxx_hidden_A = v
	protoimpl.X.SetPresent(&(x.XXX_presence[0]), 0, 1)
}

func (x *TestRequiredGroupFields_OptionalGroup) HasA() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[0]), 0)
}

func (x *TestRequiredGroupFields_OptionalGroup) ClearA() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[0]), 0)
	x.xxx_hidden_A = 0
}

type TestRequiredGroupFields_OptionalGroup_builder struct {
	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.

	A *int32
}

func (b0 TestRequiredGroupFields_OptionalGroup_builder) Build() *TestRequiredGroupFields_OptionalGroup {
	m0 := &TestRequiredGroupFields_OptionalGroup{}
	b, x := &b0, m0
	_, _ = b, x
	if b.A != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 0, 1)
		x.xxx_hidden_A = *b.A
	}
	return m0
}

type TestRequiredGroupFields_RepeatedGroup struct {
	state                  protoimpl.MessageState `protogen:"opaque.v1"`
	xxx_hidden_A           int32                  `protobuf:"varint,4,req,name=a"`
	XXX_raceDetectHookData protoimpl.RaceDetectHookData
	XXX_presence           [1]uint32
	unknownFields          protoimpl.UnknownFields
	sizeCache              protoimpl.SizeCache
}

func (x *TestRequiredGroupFields_RepeatedGroup) Reset() {
	*x = TestRequiredGroupFields_RepeatedGroup{}
	mi := &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_msgTypes[33]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *TestRequiredGroupFields_RepeatedGroup) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*TestRequiredGroupFields_RepeatedGroup) ProtoMessage() {}

func (x *TestRequiredGroupFields_RepeatedGroup) ProtoReflect() protoreflect.Message {
	mi := &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_msgTypes[33]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

func (x *TestRequiredGroupFields_RepeatedGroup) GetA() int32 {
	if x != nil {
		return x.xxx_hidden_A
	}
	return 0
}

func (x *TestRequiredGroupFields_RepeatedGroup) SetA(v int32) {
	x.xxx_hidden_A = v
	protoimpl.X.SetPresent(&(x.XXX_presence[0]), 0, 1)
}

func (x *TestRequiredGroupFields_RepeatedGroup) HasA() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[0]), 0)
}

func (x *TestRequiredGroupFields_RepeatedGroup) ClearA() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[0]), 0)
	x.xxx_hidden_A = 0
}

type TestRequiredGroupFields_RepeatedGroup_builder struct {
	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.

	A *int32
}

func (b0 TestRequiredGroupFields_RepeatedGroup_builder) Build() *TestRequiredGroupFields_RepeatedGroup {
	m0 := &TestRequiredGroupFields_RepeatedGroup{}
	b, x := &b0, m0
	_, _ = b, x
	if b.A != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 0, 1)
		x.xxx_hidden_A = *b.A
	}
	return m0
}

var file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_extTypes = []protoimpl.ExtensionInfo{
	{
		ExtendedType:  (*TestPackedExtensions)(nil),
		ExtensionType: ([]int32)(nil),
		Field:         90,
		Name:          "opaque.goproto.proto.testeditions.packed_int32",
		Tag:           "varint,90,rep,packed,name=packed_int32",
		Filename:      "internal/testprotos/testeditions/testeditions_opaque/test.opaque.proto",
	},
	{
		ExtendedType:  (*TestPackedExtensions)(nil),
		ExtensionType: ([]int64)(nil),
		Field:         91,
		Name:          "opaque.goproto.proto.testeditions.packed_int64",
		Tag:           "varint,91,rep,packed,name=packed_int64",
		Filename:      "internal/testprotos/testeditions/testeditions_opaque/test.opaque.proto",
	},
	{
		ExtendedType:  (*TestPackedExtensions)(nil),
		ExtensionType: ([]uint32)(nil),
		Field:         92,
		Name:          "opaque.goproto.proto.testeditions.packed_uint32",
		Tag:           "varint,92,rep,packed,name=packed_uint32",
		Filename:      "internal/testprotos/testeditions/testeditions_opaque/test.opaque.proto",
	},
	{
		ExtendedType:  (*TestPackedExtensions)(nil),
		ExtensionType: ([]uint64)(nil),
		Field:         93,
		Name:          "opaque.goproto.proto.testeditions.packed_uint64",
		Tag:           "varint,93,rep,packed,name=packed_uint64",
		Filename:      "internal/testprotos/testeditions/testeditions_opaque/test.opaque.proto",
	},
	{
		ExtendedType:  (*TestPackedExtensions)(nil),
		ExtensionType: ([]int32)(nil),
		Field:         94,
		Name:          "opaque.goproto.proto.testeditions.packed_sint32",
		Tag:           "zigzag32,94,rep,packed,name=packed_sint32",
		Filename:      "internal/testprotos/testeditions/testeditions_opaque/test.opaque.proto",
	},
	{
		ExtendedType:  (*TestPackedExtensions)(nil),
		ExtensionType: ([]int64)(nil),
		Field:         95,
		Name:          "opaque.goproto.proto.testeditions.packed_sint64",
		Tag:           "zigzag64,95,rep,packed,name=packed_sint64",
		Filename:      "internal/testprotos/testeditions/testeditions_opaque/test.opaque.proto",
	},
	{
		ExtendedType:  (*TestPackedExtensions)(nil),
		ExtensionType: ([]uint32)(nil),
		Field:         96,
		Name:          "opaque.goproto.proto.testeditions.packed_fixed32",
		Tag:           "fixed32,96,rep,packed,name=packed_fixed32",
		Filename:      "internal/testprotos/testeditions/testeditions_opaque/test.opaque.proto",
	},
	{
		ExtendedType:  (*TestPackedExtensions)(nil),
		ExtensionType: ([]uint64)(nil),
		Field:         97,
		Name:          "opaque.goproto.proto.testeditions.packed_fixed64",
		Tag:           "fixed64,97,rep,packed,name=packed_fixed64",
		Filename:      "internal/testprotos/testeditions/testeditions_opaque/test.opaque.proto",
	},
	{
		ExtendedType:  (*TestPackedExtensions)(nil),
		ExtensionType: ([]int32)(nil),
		Field:         98,
		Name:          "opaque.goproto.proto.testeditions.packed_sfixed32",
		Tag:           "fixed32,98,rep,packed,name=packed_sfixed32",
		Filename:      "internal/testprotos/testeditions/testeditions_opaque/test.opaque.proto",
	},
	{
		ExtendedType:  (*TestPackedExtensions)(nil),
		ExtensionType: ([]int64)(nil),
		Field:         99,
		Name:          "opaque.goproto.proto.testeditions.packed_sfixed64",
		Tag:           "fixed64,99,rep,packed,name=packed_sfixed64",
		Filename:      "internal/testprotos/testeditions/testeditions_opaque/test.opaque.proto",
	},
	{
		ExtendedType:  (*TestPackedExtensions)(nil),
		ExtensionType: ([]float32)(nil),
		Field:         100,
		Name:          "opaque.goproto.proto.testeditions.packed_float",
		Tag:           "fixed32,100,rep,packed,name=packed_float",
		Filename:      "internal/testprotos/testeditions/testeditions_opaque/test.opaque.proto",
	},
	{
		ExtendedType:  (*TestPackedExtensions)(nil),
		ExtensionType: ([]float64)(nil),
		Field:         101,
		Name:          "opaque.goproto.proto.testeditions.packed_double",
		Tag:           "fixed64,101,rep,packed,name=packed_double",
		Filename:      "internal/testprotos/testeditions/testeditions_opaque/test.opaque.proto",
	},
	{
		ExtendedType:  (*TestPackedExtensions)(nil),
		ExtensionType: ([]bool)(nil),
		Field:         102,
		Name:          "opaque.goproto.proto.testeditions.packed_bool",
		Tag:           "varint,102,rep,packed,name=packed_bool",
		Filename:      "internal/testprotos/testeditions/testeditions_opaque/test.opaque.proto",
	},
	{
		ExtendedType:  (*TestPackedExtensions)(nil),
		ExtensionType: ([]ForeignEnum)(nil),
		Field:         103,
		Name:          "opaque.goproto.proto.testeditions.packed_enum",
		Tag:           "varint,103,rep,packed,name=packed_enum,enum=opaque.goproto.proto.testeditions.ForeignEnum",
		Filename:      "internal/testprotos/testeditions/testeditions_opaque/test.opaque.proto",
	},
}

// Extension fields to TestPackedExtensions.
var (
	// repeated int32 packed_int32 = 90;
	E_PackedInt32 = &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_extTypes[0]
	// repeated int64 packed_int64 = 91;
	E_PackedInt64 = &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_extTypes[1]
	// repeated uint32 packed_uint32 = 92;
	E_PackedUint32 = &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_extTypes[2]
	// repeated uint64 packed_uint64 = 93;
	E_PackedUint64 = &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_extTypes[3]
	// repeated sint32 packed_sint32 = 94;
	E_PackedSint32 = &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_extTypes[4]
	// repeated sint64 packed_sint64 = 95;
	E_PackedSint64 = &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_extTypes[5]
	// repeated fixed32 packed_fixed32 = 96;
	E_PackedFixed32 = &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_extTypes[6]
	// repeated fixed64 packed_fixed64 = 97;
	E_PackedFixed64 = &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_extTypes[7]
	// repeated sfixed32 packed_sfixed32 = 98;
	E_PackedSfixed32 = &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_extTypes[8]
	// repeated sfixed64 packed_sfixed64 = 99;
	E_PackedSfixed64 = &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_extTypes[9]
	// repeated float packed_float = 100;
	E_PackedFloat = &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_extTypes[10]
	// repeated double packed_double = 101;
	E_PackedDouble = &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_extTypes[11]
	// repeated bool packed_bool = 102;
	E_PackedBool = &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_extTypes[12]
	// repeated opaque.goproto.proto.testeditions.ForeignEnum packed_enum = 103;
	E_PackedEnum = &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_extTypes[13]
)

var File_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto protoreflect.FileDescriptor

const file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_rawDesc = "\nFinternal/testprotos/testeditions/testeditions_opaque/test.opaque.proto!opaque.goproto.proto.testeditions9internal/testprotos/enums/enums_opaque/enums.opaque.protoMinternal/testprotos/testeditions/testeditions_opaque/test_import.opaque.proto!google/protobuf/go_features.proto\"\xd0I\nTestAllTypes,\nsingular_int32| (B\xaaR\rsingularInt32,\nsingular_int64} (B\xaaR\rsingularInt64.\nsingular_uint32~ (\rB\xaaRsingularUint32.\nsingular_uint64 (B\xaaRsingularUint64/\nsingular_sint32\x80 (B\xaaRsingularSint32/\nsingular_sint64\x81 (B\xaaRsingularSint641\nsingular_fixed32\x82 (B\xaaRsingularFixed321\nsingular_fixed64\x83 (B\xaaRsingularFixed643\nsingular_sfixed32\x84 (B\xaaRsingularSfixed323\nsingular_sfixed64\x85 (B\xaaRsingularSfixed64-\nsingular_float\x86 (B\xaaR\rsingularFloat/\nsingular_double\x87 (B\xaaRsingularDouble+\n\rsingular_bool\x88 (B\xaaRsingularBool/\nsingular_string\x89 (	B\xaaRsingularString-\nsingular_bytes\x8a (B\xaaR\rsingularBytest\nsingular_nested_enum\x8e (2:.opaque.goproto.proto.testeditions.TestAllTypes.NestedEnumB\xaaRsingularNestedEnumj\nsingular_foreign_enum\x8f (2..opaque.goproto.proto.testeditions.ForeignEnumB\xaaRsingularForeignEnumg\nsingular_import_enum\x90 (2-.opaque.goproto.proto.testeditions.ImportEnumB\xaaRsingularImportEnum%\noptional_int32 (R\roptionalInt32%\noptional_int64 (R\roptionalInt64'\noptional_uint32 (\rRoptionalUint32'\noptional_uint64 (RoptionalUint64'\noptional_sint32 (RoptionalSint32'\noptional_sint64 (RoptionalSint64)\noptional_fixed32 (RoptionalFixed32)\noptional_fixed64 (RoptionalFixed64+\noptional_sfixed32	 (RoptionalSfixed32+\noptional_sfixed64\n (RoptionalSfixed64%\noptional_float (R\roptionalFloat'\noptional_double (RoptionalDouble#\n\roptional_bool\r (RoptionalBool'\noptional_string (	RoptionalString%\noptional_bytes (R\roptionalBytesj\n\roptionalgroup (2=.opaque.goproto.proto.testeditions.TestAllTypes.OptionalGroupB\xaa(R\roptionalgroup}\nnot_group_like_delimited (2=.opaque.goproto.proto.testeditions.TestAllTypes.OptionalGroupB\xaa(RnotGroupLikeDelimitedu\noptional_nested_message (2=.opaque.goproto.proto.testeditions.TestAllTypes.NestedMessageRoptionalNestedMessagek\noptional_foreign_message (21.opaque.goproto.proto.testeditions.ForeignMessageRoptionalForeignMessageh\noptional_import_message (20.opaque.goproto.proto.testeditions.ImportMessageRoptionalImportMessagel\noptional_nested_enum (2:.opaque.goproto.proto.testeditions.TestAllTypes.NestedEnumRoptionalNestedEnumb\noptional_foreign_enum (2..opaque.goproto.proto.testeditions.ForeignEnumRoptionalForeignEnum_\noptional_import_enum (2-.opaque.goproto.proto.testeditions.ImportEnumRoptionalImportEnum\x82\noptional_lazy_nested_message (2=.opaque.goproto.proto.testeditions.TestAllTypes.NestedMessageB(RoptionalLazyNestedMessage%\nrepeated_int32 (R\rrepeatedInt32%\nrepeated_int64  (R\rrepeatedInt64'\nrepeated_uint32! (\rRrepeatedUint32'\nrepeated_uint64\" (RrepeatedUint64'\nrepeated_sint32# (RrepeatedSint32'\nrepeated_sint64$ (RrepeatedSint64)\nrepeated_fixed32% (RrepeatedFixed32)\nrepeated_fixed64& (RrepeatedFixed64+\nrepeated_sfixed32' (RrepeatedSfixed32+\nrepeated_sfixed64( (RrepeatedSfixed64%\nrepeated_float) (R\rrepeatedFloat'\nrepeated_double* (RrepeatedDouble#\n\rrepeated_bool+ (RrepeatedBool'\nrepeated_string, (	RrepeatedString%\nrepeated_bytes- (R\rrepeatedBytesl\n\rrepeatedgroup. (2=.opaque.goproto.proto.testeditions.TestAllTypes.RepeatedGroupB\xaa(R\rrepeatedgroupu\nrepeated_nested_message0 (2=.opaque.goproto.proto.testeditions.TestAllTypes.NestedMessageRrepeatedNestedMessagek\nrepeated_foreign_message1 (21.opaque.goproto.proto.testeditions.ForeignMessageRrepeatedForeignMessageg\nrepeated_importmessage2 (20.opaque.goproto.proto.testeditions.ImportMessageRrepeatedImportmessagel\nrepeated_nested_enum3 (2:.opaque.goproto.proto.testeditions.TestAllTypes.NestedEnumRrepeatedNestedEnumb\nrepeated_foreign_enum4 (2..opaque.goproto.proto.testeditions.ForeignEnumRrepeatedForeignEnum^\nrepeated_importenum5 (2-.opaque.goproto.proto.testeditions.ImportEnumRrepeatedImportenumj\nmap_int32_int328 (2B.opaque.goproto.proto.testeditions.TestAllTypes.MapInt32Int32EntryR\rmapInt32Int32j\nmap_int64_int649 (2B.opaque.goproto.proto.testeditions.TestAllTypes.MapInt64Int64EntryR\rmapInt64Int64p\nmap_uint32_uint32: (2D.opaque.goproto.proto.testeditions.TestAllTypes.MapUint32Uint32EntryRmapUint32Uint32p\nmap_uint64_uint64; (2D.opaque.goproto.proto.testeditions.TestAllTypes.MapUint64Uint64EntryRmapUint64Uint64p\nmap_sint32_sint32< (2D.opaque.goproto.proto.testeditions.TestAllTypes.MapSint32Sint32EntryRmapSint32Sint32p\nmap_sint64_sint64= (2D.opaque.goproto.proto.testeditions.TestAllTypes.MapSint64Sint64EntryRmapSint64Sint64v\nmap_fixed32_fixed32> (2F.opaque.goproto.proto.testeditions.TestAllTypes.MapFixed32Fixed32EntryRmapFixed32Fixed32v\nmap_fixed64_fixed64? (2F.opaque.goproto.proto.testeditions.TestAllTypes.MapFixed64Fixed64EntryRmapFixed64Fixed64|\nmap_sfixed32_sfixed32@ (2H.opaque.goproto.proto.testeditions.TestAllTypes.MapSfixed32Sfixed32EntryRmapSfixed32Sfixed32|\nmap_sfixed64_sfixed64A (2H.opaque.goproto.proto.testeditions.TestAllTypes.MapSfixed64Sfixed64EntryRmapSfixed64Sfixed64j\nmap_int32_floatB (2B.opaque.goproto.proto.testeditions.TestAllTypes.MapInt32FloatEntryR\rmapInt32Floatm\nmap_int32_doubleC (2C.opaque.goproto.proto.testeditions.TestAllTypes.MapInt32DoubleEntryRmapInt32Doubled\n\rmap_bool_boolD (2@.opaque.goproto.proto.testeditions.TestAllTypes.MapBoolBoolEntryRmapBoolBoolp\nmap_string_stringE (2D.opaque.goproto.proto.testeditions.TestAllTypes.MapStringStringEntryRmapStringStringm\nmap_string_bytesF (2C.opaque.goproto.proto.testeditions.TestAllTypes.MapStringBytesEntryRmapStringBytes\x86\nmap_string_nested_messageG (2K.opaque.goproto.proto.testeditions.TestAllTypes.MapStringNestedMessageEntryRmapStringNestedMessage}\nmap_string_nested_enumI (2H.opaque.goproto.proto.testeditions.TestAllTypes.MapStringNestedEnumEntryRmapStringNestedEnum'\n\rdefault_int32Q (:81RdefaultInt32'\n\rdefault_int64R (:82RdefaultInt64)\ndefault_uint32S (\r:83R\rdefaultUint32)\ndefault_uint64T (:84R\rdefaultUint64*\ndefault_sint32U (:-85R\rdefaultSint32)\ndefault_sint64V (:86R\rdefaultSint64+\ndefault_fixed32W (:87RdefaultFixed32+\ndefault_fixed64X (:88RdefaultFixed64-\ndefault_sfixed32Y (:89RdefaultSfixed32.\ndefault_sfixed64P (:-90RdefaultSfixed64)\n\rdefault_float[ (:91.5RdefaultFloat,\ndefault_double\\ (:92000R\rdefaultDouble'\ndefault_bool] (:trueRdefaultBool,\ndefault_string^ (	:helloR\rdefaultString*\n\rdefault_bytes_ (:worldRdefaultByteso\ndefault_nested_enum` (2:.opaque.goproto.proto.testeditions.TestAllTypes.NestedEnum:BARRdefaultNestedEnumm\ndefault_foreign_enuma (2..opaque.goproto.proto.testeditions.ForeignEnum:FOREIGN_BARRdefaultForeignEnum#\noneof_uint32o (\rH\x00RoneofUint32q\noneof_nested_messagep (2=.opaque.goproto.proto.testeditions.TestAllTypes.NestedMessageH\x00RoneofNestedMessage#\noneof_stringq (	H\x00RoneofString!\noneof_bytesr (H\x00R\noneofBytes\n\noneof_bools (H\x00R	oneofBool#\noneof_uint64t (H\x00RoneofUint64!\noneof_floatu (H\x00R\noneofFloat#\noneof_doublev (H\x00RoneofDouble[\n\noneof_enumw (2:.opaque.goproto.proto.testeditions.TestAllTypes.NestedEnumH\x00R	oneofEnumc\n\noneofgroupy (2:.opaque.goproto.proto.testeditions.TestAllTypes.OneofGroupB\xaa(H\x00R\noneofgroup4\noneof_optional_uint32x (\rHRoneofOptionalUint32p\n\rNestedMessage\na (RaQ\ncorecursive (2/.opaque.goproto.proto.testeditions.TestAllTypesRcorecursive\xc1\n\rOptionalGroup\na (Rav\noptional_nested_message\xe8 (2=.opaque.goproto.proto.testeditions.TestAllTypes.NestedMessageRoptionalNestedMessage*\nsame_field_number (RsameFieldNumber\x95\n\rRepeatedGroup\na/ (Rav\noptional_nested_message\xe9 (2=.opaque.goproto.proto.testeditions.TestAllTypes.NestedMessageRoptionalNestedMessage@\nMapInt32Int32Entry\nkey (Rkey\nvalue (Rvalue:8@\nMapInt64Int64Entry\nkey (Rkey\nvalue (Rvalue:8B\nMapUint32Uint32Entry\nkey (\rRkey\nvalue (\rRvalue:8B\nMapUint64Uint64Entry\nkey (Rkey\nvalue (Rvalue:8B\nMapSint32Sint32Entry\nkey (Rkey\nvalue (Rvalue:8B\nMapSint64Sint64Entry\nkey (Rkey\nvalue (Rvalue:8D\nMapFixed32Fixed32Entry\nkey (Rkey\nvalue (Rvalue:8D\nMapFixed64Fixed64Entry\nkey (Rkey\nvalue (Rvalue:8F\nMapSfixed32Sfixed32Entry\nkey (Rkey\nvalue (Rvalue:8F\nMapSfixed64Sfixed64Entry\nkey (Rkey\nvalue (Rvalue:8@\nMapInt32FloatEntry\nkey (Rkey\nvalue (Rvalue:8A\nMapInt32DoubleEntry\nkey (Rkey\nvalue (Rvalue:8>\nMapBoolBoolEntry\nkey (Rkey\nvalue (Rvalue:8B\nMapStringStringEntry\nkey (	Rkey\nvalue (	Rvalue:8A\nMapStringBytesEntry\nkey (	Rkey\nvalue (Rvalue:8\x88\nMapStringNestedMessageEntry\nkey (	RkeyS\nvalue (2=.opaque.goproto.proto.testeditions.TestAllTypes.NestedMessageRvalue:8\x82\nMapStringNestedEnumEntry\nkey (	RkeyP\nvalue (2:.opaque.goproto.proto.testeditions.TestAllTypes.NestedEnumRvalue:8(\n\nOneofGroup\na (Ra\nb (Rb\"9\n\nNestedEnum\nFOO\x00\nBAR\nBAZ\nNEG\xff\xff\xff\xff\xff\xff\xff\xff\xffB\r\noneof_fieldB\noneof_optional\"\xba4\nTestManyMessageFieldsMessage?\nf1 (2/.opaque.goproto.proto.testeditions.TestAllTypesRf1?\nf2 (2/.opaque.goproto.proto.testeditions.TestAllTypesRf2?\nf3 (2/.opaque.goproto.proto.testeditions.TestAllTypesRf3?\nf4 (2/.opaque.goproto.proto.testeditions.TestAllTypesRf4?\nf5 (2/.opaque.goproto.proto.testeditions.TestAllTypesRf5?\nf6 (2/.opaque.goproto.proto.testeditions.TestAllTypesRf6?\nf7 (2/.opaque.goproto.proto.testeditions.TestAllTypesRf7?\nf8 (2/.opaque.goproto.proto.testeditions.TestAllTypesRf8?\nf9	 (2/.opaque.goproto.proto.testeditions.TestAllTypesRf9A\nf10\n (2/.opaque.goproto.proto.testeditions.TestAllTypesRf10A\nf11 (2/.opaque.goproto.proto.testeditions.TestAllTypesRf11A\nf12 (2/.opaque.goproto.proto.testeditions.TestAllTypesRf12A\nf13\r (2/.opaque.goproto.proto.testeditions.TestAllTypesRf13A\nf14 (2/.opaque.goproto.proto.testeditions.TestAllTypesRf14A\nf15 (2/.opaque.goproto.proto.testeditions.TestAllTypesRf15A\nf16 (2/.opaque.goproto.proto.testeditions.TestAllTypesRf16A\nf17 (2/.opaque.goproto.proto.testeditions.TestAllTypesRf17A\nf18 (2/.opaque.goproto.proto.testeditions.TestAllTypesRf18A\nf19 (2/.opaque.goproto.proto.testeditions.TestAllTypesRf19A\nf20 (2/.opaque.goproto.proto.testeditions.TestAllTypesRf20A\nf21 (2/.opaque.goproto.proto.testeditions.TestAllTypesRf21A\nf22 (2/.opaque.goproto.proto.testeditions.TestAllTypesRf22A\nf23 (2/.opaque.goproto.proto.testeditions.TestAllTypesRf23A\nf24 (2/.opaque.goproto.proto.testeditions.TestAllTypesRf24A\nf25 (2/.opaque.goproto.proto.testeditions.TestAllTypesRf25A\nf26 (2/.opaque.goproto.proto.testeditions.TestAllTypesRf26A\nf27 (2/.opaque.goproto.proto.testeditions.TestAllTypesRf27A\nf28 (2/.opaque.goproto.proto.testeditions.TestAllTypesRf28A\nf29 (2/.opaque.goproto.proto.testeditions.TestAllTypesRf29A\nf30 (2/.opaque.goproto.proto.testeditions.TestAllTypesRf30A\nf31 (2/.opaque.goproto.proto.testeditions.TestAllTypesRf31A\nf32  (2/.opaque.goproto.proto.testeditions.TestAllTypesRf32A\nf33! (2/.opaque.goproto.proto.testeditions.TestAllTypesRf33A\nf34\" (2/.opaque.goproto.proto.testeditions.TestAllTypesRf34A\nf35# (2/.opaque.goproto.proto.testeditions.TestAllTypesRf35A\nf36$ (2/.opaque.goproto.proto.testeditions.TestAllTypesRf36A\nf37% (2/.opaque.goproto.proto.testeditions.TestAllTypesRf37A\nf38& (2/.opaque.goproto.proto.testeditions.TestAllTypesRf38A\nf39' (2/.opaque.goproto.proto.testeditions.TestAllTypesRf39A\nf40( (2/.opaque.goproto.proto.testeditions.TestAllTypesRf40A\nf41) (2/.opaque.goproto.proto.testeditions.TestAllTypesRf41A\nf42* (2/.opaque.goproto.proto.testeditions.TestAllTypesRf42A\nf43+ (2/.opaque.goproto.proto.testeditions.TestAllTypesRf43A\nf44, (2/.opaque.goproto.proto.testeditions.TestAllTypesRf44A\nf45- (2/.opaque.goproto.proto.testeditions.TestAllTypesRf45A\nf46. (2/.opaque.goproto.proto.testeditions.TestAllTypesRf46A\nf47/ (2/.opaque.goproto.proto.testeditions.TestAllTypesRf47A\nf480 (2/.opaque.goproto.proto.testeditions.TestAllTypesRf48A\nf491 (2/.opaque.goproto.proto.testeditions.TestAllTypesRf49A\nf502 (2/.opaque.goproto.proto.testeditions.TestAllTypesRf50A\nf513 (2/.opaque.goproto.proto.testeditions.TestAllTypesRf51A\nf524 (2/.opaque.goproto.proto.testeditions.TestAllTypesRf52A\nf535 (2/.opaque.goproto.proto.testeditions.TestAllTypesRf53A\nf546 (2/.opaque.goproto.proto.testeditions.TestAllTypesRf54A\nf557 (2/.opaque.goproto.proto.testeditions.TestAllTypesRf55A\nf568 (2/.opaque.goproto.proto.testeditions.TestAllTypesRf56A\nf579 (2/.opaque.goproto.proto.testeditions.TestAllTypesRf57A\nf58: (2/.opaque.goproto.proto.testeditions.TestAllTypesRf58A\nf59; (2/.opaque.goproto.proto.testeditions.TestAllTypesRf59A\nf60< (2/.opaque.goproto.proto.testeditions.TestAllTypesRf60A\nf61= (2/.opaque.goproto.proto.testeditions.TestAllTypesRf61A\nf62> (2/.opaque.goproto.proto.testeditions.TestAllTypesRf62A\nf63? (2/.opaque.goproto.proto.testeditions.TestAllTypesRf63A\nf64@ (2/.opaque.goproto.proto.testeditions.TestAllTypesRf64A\nf65A (2/.opaque.goproto.proto.testeditions.TestAllTypesRf65A\nf66B (2/.opaque.goproto.proto.testeditions.TestAllTypesRf66A\nf67C (2/.opaque.goproto.proto.testeditions.TestAllTypesRf67A\nf68D (2/.opaque.goproto.proto.testeditions.TestAllTypesRf68A\nf69E (2/.opaque.goproto.proto.testeditions.TestAllTypesRf69A\nf70F (2/.opaque.goproto.proto.testeditions.TestAllTypesRf70A\nf71G (2/.opaque.goproto.proto.testeditions.TestAllTypesRf71A\nf72H (2/.opaque.goproto.proto.testeditions.TestAllTypesRf72A\nf73I (2/.opaque.goproto.proto.testeditions.TestAllTypesRf73A\nf74J (2/.opaque.goproto.proto.testeditions.TestAllTypesRf74A\nf75K (2/.opaque.goproto.proto.testeditions.TestAllTypesRf75A\nf76L (2/.opaque.goproto.proto.testeditions.TestAllTypesRf76A\nf77M (2/.opaque.goproto.proto.testeditions.TestAllTypesRf77A\nf78N (2/.opaque.goproto.proto.testeditions.TestAllTypesRf78A\nf79O (2/.opaque.goproto.proto.testeditions.TestAllTypesRf79A\nf80P (2/.opaque.goproto.proto.testeditions.TestAllTypesRf80A\nf81Q (2/.opaque.goproto.proto.testeditions.TestAllTypesRf81A\nf82R (2/.opaque.goproto.proto.testeditions.TestAllTypesRf82A\nf83S (2/.opaque.goproto.proto.testeditions.TestAllTypesRf83A\nf84T (2/.opaque.goproto.proto.testeditions.TestAllTypesRf84A\nf85U (2/.opaque.goproto.proto.testeditions.TestAllTypesRf85A\nf86V (2/.opaque.goproto.proto.testeditions.TestAllTypesRf86A\nf87W (2/.opaque.goproto.proto.testeditions.TestAllTypesRf87A\nf88X (2/.opaque.goproto.proto.testeditions.TestAllTypesRf88A\nf89Y (2/.opaque.goproto.proto.testeditions.TestAllTypesRf89A\nf90Z (2/.opaque.goproto.proto.testeditions.TestAllTypesRf90A\nf91[ (2/.opaque.goproto.proto.testeditions.TestAllTypesRf91A\nf92\\ (2/.opaque.goproto.proto.testeditions.TestAllTypesRf92A\nf93] (2/.opaque.goproto.proto.testeditions.TestAllTypesRf93A\nf94^ (2/.opaque.goproto.proto.testeditions.TestAllTypesRf94A\nf95_ (2/.opaque.goproto.proto.testeditions.TestAllTypesRf95A\nf96` (2/.opaque.goproto.proto.testeditions.TestAllTypesRf96A\nf97a (2/.opaque.goproto.proto.testeditions.TestAllTypesRf97A\nf98b (2/.opaque.goproto.proto.testeditions.TestAllTypesRf98A\nf99c (2/.opaque.goproto.proto.testeditions.TestAllTypesRf99C\nf100d (2/.opaque.goproto.proto.testeditions.TestAllTypesRf100\",\nForeignMessage\nc (Rc\nd (Rd\"<\nTestRequired,\nrequired_field (B\xaaR\rrequiredField\"\x8d\nTestRequiredForeignZ\noptional_message (2/.opaque.goproto.proto.testeditions.TestRequiredRoptionalMessageZ\nrepeated_message (2/.opaque.goproto.proto.testeditions.TestRequiredRrepeatedMessageg\nmap_message (2F.opaque.goproto.proto.testeditions.TestRequiredForeign.MapMessageEntryR\nmapMessageV\n\roneof_message (2/.opaque.goproto.proto.testeditions.TestRequiredH\x00RoneofMessagen\nMapMessageEntry\nkey (RkeyE\nvalue (2/.opaque.goproto.proto.testeditions.TestRequiredRvalue:8B\r\noneof_field\"\xd3\nTestRequiredGroupFieldsu\n\roptionalgroup (2H.opaque.goproto.proto.testeditions.TestRequiredGroupFields.OptionalGroupB\xaa(R\roptionalgroupu\n\rrepeatedgroup (2H.opaque.goproto.proto.testeditions.TestRequiredGroupFields.RepeatedGroupB\xaa(R\rrepeatedgroup$\n\rOptionalGroup\na (B\xaaRa$\n\rRepeatedGroup\na (B\xaaRa\"{\nTestRequiredLazyg\noptional_lazy_message (2/.opaque.goproto.proto.testeditions.TestRequiredB(RoptionalLazyMessage\"\xa7\nTestPackedTypes(\npacked_int32Z (B\xaaRpackedInt32(\npacked_int64[ (B\xaaRpackedInt64*\n\rpacked_uint32\\ (\rB\xaaRpackedUint32*\n\rpacked_uint64] (B\xaaRpackedUint64*\n\rpacked_sint32^ (B\xaaRpackedSint32*\n\rpacked_sint64_ (B\xaaRpackedSint64,\npacked_fixed32` (B\xaaR\rpackedFixed32,\npacked_fixed64a (B\xaaR\rpackedFixed64.\npacked_sfixed32b (B\xaaRpackedSfixed32.\npacked_sfixed64c (B\xaaRpackedSfixed64(\npacked_floatd (B\xaaRpackedFloat*\n\rpacked_doublee (B\xaaRpackedDouble&\npacked_boolf (B\xaaR\npackedBoolV\npacked_enumg (2..opaque.goproto.proto.testeditions.ForeignEnumB\xaaR\npackedEnum\" \nTestPackedExtensions*\x80\x80\x80\x80\"\xb7\n\rRemoteDefault:\ndefault (2 .opaque.goproto.proto.enums.EnumRdefault:\nzero (2 .opaque.goproto.proto.enums.Enum:ZERORzero7\none (2 .opaque.goproto.proto.enums.Enum:ONERoneC\nelevent (2 .opaque.goproto.proto.enums.Enum:ELEVENTReleventI\n	seventeen (2 .opaque.goproto.proto.enums.Enum:	SEVENTEENR	seventeenO\nthirtyseven (2 .opaque.goproto.proto.enums.Enum:THIRTYSEVENRthirtysevenL\n\nsixtyseven (2 .opaque.goproto.proto.enums.Enum:\nSIXTYSEVENR\nsixtysevenF\nnegative (2 .opaque.goproto.proto.enums.Enum:NEGATIVERnegative*R\nForeignEnum\nFOREIGN_ZERO\x00\nFOREIGN_FOO\nFOREIGN_BAR\nFOREIGN_BAZ:a\npacked_int327.opaque.goproto.proto.testeditions.TestPackedExtensionsZ (B\xaaRpackedInt32:a\npacked_int647.opaque.goproto.proto.testeditions.TestPackedExtensions[ (B\xaaRpackedInt64:c\n\rpacked_uint327.opaque.goproto.proto.testeditions.TestPackedExtensions\\ (\rB\xaaRpackedUint32:c\n\rpacked_uint647.opaque.goproto.proto.testeditions.TestPackedExtensions] (B\xaaRpackedUint64:c\n\rpacked_sint327.opaque.goproto.proto.testeditions.TestPackedExtensions^ (B\xaaRpackedSint32:c\n\rpacked_sint647.opaque.goproto.proto.testeditions.TestPackedExtensions_ (B\xaaRpackedSint64:e\npacked_fixed327.opaque.goproto.proto.testeditions.TestPackedExtensions` (B\xaaR\rpackedFixed32:e\npacked_fixed647.opaque.goproto.proto.testeditions.TestPackedExtensionsa (B\xaaR\rpackedFixed64:g\npacked_sfixed327.opaque.goproto.proto.testeditions.TestPackedExtensionsb (B\xaaRpackedSfixed32:g\npacked_sfixed647.opaque.goproto.proto.testeditions.TestPackedExtensionsc (B\xaaRpackedSfixed64:a\npacked_float7.opaque.goproto.proto.testeditions.TestPackedExtensionsd (B\xaaRpackedFloat:c\n\rpacked_double7.opaque.goproto.proto.testeditions.TestPackedExtensionse (B\xaaRpackedDouble:_\npacked_bool7.opaque.goproto.proto.testeditions.TestPackedExtensionsf (B\xaaR\npackedBool:\x8f\npacked_enum7.opaque.goproto.proto.testeditions.TestPackedExtensionsg (2..opaque.goproto.proto.testeditions.ForeignEnumB\xaaR\npackedEnumBYZOgoogle.golang.org/protobuf/internal/testprotos/testeditions/testeditions_opaque\x92\xd2>beditionsp\xe8"

var file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_enumTypes = make([]protoimpl.EnumInfo, 2)
var file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_msgTypes = make([]protoimpl.MessageInfo, 34)
var file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_goTypes = []any{
	(ForeignEnum)(0),                     // 0: opaque.goproto.proto.testeditions.ForeignEnum
	(TestAllTypes_NestedEnum)(0),         // 1: opaque.goproto.proto.testeditions.TestAllTypes.NestedEnum
	(*TestAllTypes)(nil),                 // 2: opaque.goproto.proto.testeditions.TestAllTypes
	(*TestManyMessageFieldsMessage)(nil), // 3: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage
	(*ForeignMessage)(nil),               // 4: opaque.goproto.proto.testeditions.ForeignMessage
	(*TestRequired)(nil),                 // 5: opaque.goproto.proto.testeditions.TestRequired
	(*TestRequiredForeign)(nil),          // 6: opaque.goproto.proto.testeditions.TestRequiredForeign
	(*TestRequiredGroupFields)(nil),      // 7: opaque.goproto.proto.testeditions.TestRequiredGroupFields
	(*TestRequiredLazy)(nil),             // 8: opaque.goproto.proto.testeditions.TestRequiredLazy
	(*TestPackedTypes)(nil),              // 9: opaque.goproto.proto.testeditions.TestPackedTypes
	(*TestPackedExtensions)(nil),         // 10: opaque.goproto.proto.testeditions.TestPackedExtensions
	(*RemoteDefault)(nil),                // 11: opaque.goproto.proto.testeditions.RemoteDefault
	(*TestAllTypes_NestedMessage)(nil),   // 12: opaque.goproto.proto.testeditions.TestAllTypes.NestedMessage
	(*TestAllTypes_OptionalGroup)(nil),   // 13: opaque.goproto.proto.testeditions.TestAllTypes.OptionalGroup
	(*TestAllTypes_RepeatedGroup)(nil),   // 14: opaque.goproto.proto.testeditions.TestAllTypes.RepeatedGroup
	nil,                                  // 15: opaque.goproto.proto.testeditions.TestAllTypes.MapInt32Int32Entry
	nil,                                  // 16: opaque.goproto.proto.testeditions.TestAllTypes.MapInt64Int64Entry
	nil,                                  // 17: opaque.goproto.proto.testeditions.TestAllTypes.MapUint32Uint32Entry
	nil,                                  // 18: opaque.goproto.proto.testeditions.TestAllTypes.MapUint64Uint64Entry
	nil,                                  // 19: opaque.goproto.proto.testeditions.TestAllTypes.MapSint32Sint32Entry
	nil,                                  // 20: opaque.goproto.proto.testeditions.TestAllTypes.MapSint64Sint64Entry
	nil,                                  // 21: opaque.goproto.proto.testeditions.TestAllTypes.MapFixed32Fixed32Entry
	nil,                                  // 22: opaque.goproto.proto.testeditions.TestAllTypes.MapFixed64Fixed64Entry
	nil,                                  // 23: opaque.goproto.proto.testeditions.TestAllTypes.MapSfixed32Sfixed32Entry
	nil,                                  // 24: opaque.goproto.proto.testeditions.TestAllTypes.MapSfixed64Sfixed64Entry
	nil,                                  // 25: opaque.goproto.proto.testeditions.TestAllTypes.MapInt32FloatEntry
	nil,                                  // 26: opaque.goproto.proto.testeditions.TestAllTypes.MapInt32DoubleEntry
	nil,                                  // 27: opaque.goproto.proto.testeditions.TestAllTypes.MapBoolBoolEntry
	nil,                                  // 28: opaque.goproto.proto.testeditions.TestAllTypes.MapStringStringEntry
	nil,                                  // 29: opaque.goproto.proto.testeditions.TestAllTypes.MapStringBytesEntry
	nil,                                  // 30: opaque.goproto.proto.testeditions.TestAllTypes.MapStringNestedMessageEntry
	nil,                                  // 31: opaque.goproto.proto.testeditions.TestAllTypes.MapStringNestedEnumEntry
	(*TestAllTypes_OneofGroup)(nil),      // 32: opaque.goproto.proto.testeditions.TestAllTypes.OneofGroup
	nil,                                  // 33: opaque.goproto.proto.testeditions.TestRequiredForeign.MapMessageEntry
	(*TestRequiredGroupFields_OptionalGroup)(nil), // 34: opaque.goproto.proto.testeditions.TestRequiredGroupFields.OptionalGroup
	(*TestRequiredGroupFields_RepeatedGroup)(nil), // 35: opaque.goproto.proto.testeditions.TestRequiredGroupFields.RepeatedGroup
	(ImportEnum)(0),        // 36: opaque.goproto.proto.testeditions.ImportEnum
	(*ImportMessage)(nil),  // 37: opaque.goproto.proto.testeditions.ImportMessage
	(enums_opaque.Enum)(0), // 38: opaque.goproto.proto.enums.Enum
}
var file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_depIdxs = []int32{
	1,   // 0: opaque.goproto.proto.testeditions.TestAllTypes.singular_nested_enum:type_name -> opaque.goproto.proto.testeditions.TestAllTypes.NestedEnum
	0,   // 1: opaque.goproto.proto.testeditions.TestAllTypes.singular_foreign_enum:type_name -> opaque.goproto.proto.testeditions.ForeignEnum
	36,  // 2: opaque.goproto.proto.testeditions.TestAllTypes.singular_import_enum:type_name -> opaque.goproto.proto.testeditions.ImportEnum
	13,  // 3: opaque.goproto.proto.testeditions.TestAllTypes.optionalgroup:type_name -> opaque.goproto.proto.testeditions.TestAllTypes.OptionalGroup
	13,  // 4: opaque.goproto.proto.testeditions.TestAllTypes.not_group_like_delimited:type_name -> opaque.goproto.proto.testeditions.TestAllTypes.OptionalGroup
	12,  // 5: opaque.goproto.proto.testeditions.TestAllTypes.optional_nested_message:type_name -> opaque.goproto.proto.testeditions.TestAllTypes.NestedMessage
	4,   // 6: opaque.goproto.proto.testeditions.TestAllTypes.optional_foreign_message:type_name -> opaque.goproto.proto.testeditions.ForeignMessage
	37,  // 7: opaque.goproto.proto.testeditions.TestAllTypes.optional_import_message:type_name -> opaque.goproto.proto.testeditions.ImportMessage
	1,   // 8: opaque.goproto.proto.testeditions.TestAllTypes.optional_nested_enum:type_name -> opaque.goproto.proto.testeditions.TestAllTypes.NestedEnum
	0,   // 9: opaque.goproto.proto.testeditions.TestAllTypes.optional_foreign_enum:type_name -> opaque.goproto.proto.testeditions.ForeignEnum
	36,  // 10: opaque.goproto.proto.testeditions.TestAllTypes.optional_import_enum:type_name -> opaque.goproto.proto.testeditions.ImportEnum
	12,  // 11: opaque.goproto.proto.testeditions.TestAllTypes.optional_lazy_nested_message:type_name -> opaque.goproto.proto.testeditions.TestAllTypes.NestedMessage
	14,  // 12: opaque.goproto.proto.testeditions.TestAllTypes.repeatedgroup:type_name -> opaque.goproto.proto.testeditions.TestAllTypes.RepeatedGroup
	12,  // 13: opaque.goproto.proto.testeditions.TestAllTypes.repeated_nested_message:type_name -> opaque.goproto.proto.testeditions.TestAllTypes.NestedMessage
	4,   // 14: opaque.goproto.proto.testeditions.TestAllTypes.repeated_foreign_message:type_name -> opaque.goproto.proto.testeditions.ForeignMessage
	37,  // 15: opaque.goproto.proto.testeditions.TestAllTypes.repeated_importmessage:type_name -> opaque.goproto.proto.testeditions.ImportMessage
	1,   // 16: opaque.goproto.proto.testeditions.TestAllTypes.repeated_nested_enum:type_name -> opaque.goproto.proto.testeditions.TestAllTypes.NestedEnum
	0,   // 17: opaque.goproto.proto.testeditions.TestAllTypes.repeated_foreign_enum:type_name -> opaque.goproto.proto.testeditions.ForeignEnum
	36,  // 18: opaque.goproto.proto.testeditions.TestAllTypes.repeated_importenum:type_name -> opaque.goproto.proto.testeditions.ImportEnum
	15,  // 19: opaque.goproto.proto.testeditions.TestAllTypes.map_int32_int32:type_name -> opaque.goproto.proto.testeditions.TestAllTypes.MapInt32Int32Entry
	16,  // 20: opaque.goproto.proto.testeditions.TestAllTypes.map_int64_int64:type_name -> opaque.goproto.proto.testeditions.TestAllTypes.MapInt64Int64Entry
	17,  // 21: opaque.goproto.proto.testeditions.TestAllTypes.map_uint32_uint32:type_name -> opaque.goproto.proto.testeditions.TestAllTypes.MapUint32Uint32Entry
	18,  // 22: opaque.goproto.proto.testeditions.TestAllTypes.map_uint64_uint64:type_name -> opaque.goproto.proto.testeditions.TestAllTypes.MapUint64Uint64Entry
	19,  // 23: opaque.goproto.proto.testeditions.TestAllTypes.map_sint32_sint32:type_name -> opaque.goproto.proto.testeditions.TestAllTypes.MapSint32Sint32Entry
	20,  // 24: opaque.goproto.proto.testeditions.TestAllTypes.map_sint64_sint64:type_name -> opaque.goproto.proto.testeditions.TestAllTypes.MapSint64Sint64Entry
	21,  // 25: opaque.goproto.proto.testeditions.TestAllTypes.map_fixed32_fixed32:type_name -> opaque.goproto.proto.testeditions.TestAllTypes.MapFixed32Fixed32Entry
	22,  // 26: opaque.goproto.proto.testeditions.TestAllTypes.map_fixed64_fixed64:type_name -> opaque.goproto.proto.testeditions.TestAllTypes.MapFixed64Fixed64Entry
	23,  // 27: opaque.goproto.proto.testeditions.TestAllTypes.map_sfixed32_sfixed32:type_name -> opaque.goproto.proto.testeditions.TestAllTypes.MapSfixed32Sfixed32Entry
	24,  // 28: opaque.goproto.proto.testeditions.TestAllTypes.map_sfixed64_sfixed64:type_name -> opaque.goproto.proto.testeditions.TestAllTypes.MapSfixed64Sfixed64Entry
	25,  // 29: opaque.goproto.proto.testeditions.TestAllTypes.map_int32_float:type_name -> opaque.goproto.proto.testeditions.TestAllTypes.MapInt32FloatEntry
	26,  // 30: opaque.goproto.proto.testeditions.TestAllTypes.map_int32_double:type_name -> opaque.goproto.proto.testeditions.TestAllTypes.MapInt32DoubleEntry
	27,  // 31: opaque.goproto.proto.testeditions.TestAllTypes.map_bool_bool:type_name -> opaque.goproto.proto.testeditions.TestAllTypes.MapBoolBoolEntry
	28,  // 32: opaque.goproto.proto.testeditions.TestAllTypes.map_string_string:type_name -> opaque.goproto.proto.testeditions.TestAllTypes.MapStringStringEntry
	29,  // 33: opaque.goproto.proto.testeditions.TestAllTypes.map_string_bytes:type_name -> opaque.goproto.proto.testeditions.TestAllTypes.MapStringBytesEntry
	30,  // 34: opaque.goproto.proto.testeditions.TestAllTypes.map_string_nested_message:type_name -> opaque.goproto.proto.testeditions.TestAllTypes.MapStringNestedMessageEntry
	31,  // 35: opaque.goproto.proto.testeditions.TestAllTypes.map_string_nested_enum:type_name -> opaque.goproto.proto.testeditions.TestAllTypes.MapStringNestedEnumEntry
	1,   // 36: opaque.goproto.proto.testeditions.TestAllTypes.default_nested_enum:type_name -> opaque.goproto.proto.testeditions.TestAllTypes.NestedEnum
	0,   // 37: opaque.goproto.proto.testeditions.TestAllTypes.default_foreign_enum:type_name -> opaque.goproto.proto.testeditions.ForeignEnum
	12,  // 38: opaque.goproto.proto.testeditions.TestAllTypes.oneof_nested_message:type_name -> opaque.goproto.proto.testeditions.TestAllTypes.NestedMessage
	1,   // 39: opaque.goproto.proto.testeditions.TestAllTypes.oneof_enum:type_name -> opaque.goproto.proto.testeditions.TestAllTypes.NestedEnum
	32,  // 40: opaque.goproto.proto.testeditions.TestAllTypes.oneofgroup:type_name -> opaque.goproto.proto.testeditions.TestAllTypes.OneofGroup
	2,   // 41: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f1:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 42: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f2:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 43: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f3:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 44: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f4:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 45: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f5:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 46: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f6:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 47: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f7:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 48: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f8:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 49: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f9:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 50: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f10:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 51: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f11:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 52: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f12:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 53: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f13:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 54: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f14:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 55: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f15:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 56: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f16:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 57: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f17:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 58: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f18:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 59: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f19:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 60: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f20:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 61: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f21:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 62: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f22:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 63: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f23:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 64: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f24:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 65: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f25:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 66: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f26:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 67: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f27:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 68: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f28:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 69: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f29:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 70: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f30:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 71: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f31:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 72: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f32:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 73: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f33:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 74: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f34:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 75: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f35:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 76: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f36:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 77: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f37:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 78: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f38:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 79: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f39:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 80: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f40:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 81: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f41:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 82: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f42:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 83: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f43:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 84: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f44:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 85: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f45:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 86: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f46:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 87: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f47:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 88: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f48:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 89: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f49:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 90: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f50:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 91: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f51:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 92: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f52:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 93: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f53:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 94: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f54:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 95: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f55:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 96: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f56:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 97: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f57:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 98: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f58:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 99: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f59:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 100: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f60:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 101: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f61:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 102: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f62:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 103: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f63:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 104: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f64:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 105: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f65:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 106: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f66:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 107: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f67:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 108: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f68:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 109: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f69:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 110: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f70:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 111: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f71:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 112: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f72:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 113: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f73:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 114: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f74:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 115: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f75:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 116: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f76:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 117: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f77:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 118: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f78:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 119: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f79:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 120: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f80:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 121: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f81:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 122: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f82:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 123: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f83:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 124: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f84:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 125: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f85:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 126: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f86:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 127: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f87:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 128: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f88:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 129: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f89:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 130: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f90:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 131: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f91:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 132: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f92:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 133: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f93:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 134: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f94:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 135: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f95:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 136: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f96:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 137: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f97:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 138: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f98:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 139: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f99:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 140: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f100:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	5,   // 141: opaque.goproto.proto.testeditions.TestRequiredForeign.optional_message:type_name -> opaque.goproto.proto.testeditions.TestRequired
	5,   // 142: opaque.goproto.proto.testeditions.TestRequiredForeign.repeated_message:type_name -> opaque.goproto.proto.testeditions.TestRequired
	33,  // 143: opaque.goproto.proto.testeditions.TestRequiredForeign.map_message:type_name -> opaque.goproto.proto.testeditions.TestRequiredForeign.MapMessageEntry
	5,   // 144: opaque.goproto.proto.testeditions.TestRequiredForeign.oneof_message:type_name -> opaque.goproto.proto.testeditions.TestRequired
	34,  // 145: opaque.goproto.proto.testeditions.TestRequiredGroupFields.optionalgroup:type_name -> opaque.goproto.proto.testeditions.TestRequiredGroupFields.OptionalGroup
	35,  // 146: opaque.goproto.proto.testeditions.TestRequiredGroupFields.repeatedgroup:type_name -> opaque.goproto.proto.testeditions.TestRequiredGroupFields.RepeatedGroup
	5,   // 147: opaque.goproto.proto.testeditions.TestRequiredLazy.optional_lazy_message:type_name -> opaque.goproto.proto.testeditions.TestRequired
	0,   // 148: opaque.goproto.proto.testeditions.TestPackedTypes.packed_enum:type_name -> opaque.goproto.proto.testeditions.ForeignEnum
	38,  // 149: opaque.goproto.proto.testeditions.RemoteDefault.default:type_name -> opaque.goproto.proto.enums.Enum
	38,  // 150: opaque.goproto.proto.testeditions.RemoteDefault.zero:type_name -> opaque.goproto.proto.enums.Enum
	38,  // 151: opaque.goproto.proto.testeditions.RemoteDefault.one:type_name -> opaque.goproto.proto.enums.Enum
	38,  // 152: opaque.goproto.proto.testeditions.RemoteDefault.elevent:type_name -> opaque.goproto.proto.enums.Enum
	38,  // 153: opaque.goproto.proto.testeditions.RemoteDefault.seventeen:type_name -> opaque.goproto.proto.enums.Enum
	38,  // 154: opaque.goproto.proto.testeditions.RemoteDefault.thirtyseven:type_name -> opaque.goproto.proto.enums.Enum
	38,  // 155: opaque.goproto.proto.testeditions.RemoteDefault.sixtyseven:type_name -> opaque.goproto.proto.enums.Enum
	38,  // 156: opaque.goproto.proto.testeditions.RemoteDefault.negative:type_name -> opaque.goproto.proto.enums.Enum
	2,   // 157: opaque.goproto.proto.testeditions.TestAllTypes.NestedMessage.corecursive:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	12,  // 158: opaque.goproto.proto.testeditions.TestAllTypes.OptionalGroup.optional_nested_message:type_name -> opaque.goproto.proto.testeditions.TestAllTypes.NestedMessage
	12,  // 159: opaque.goproto.proto.testeditions.TestAllTypes.RepeatedGroup.optional_nested_message:type_name -> opaque.goproto.proto.testeditions.TestAllTypes.NestedMessage
	12,  // 160: opaque.goproto.proto.testeditions.TestAllTypes.MapStringNestedMessageEntry.value:type_name -> opaque.goproto.proto.testeditions.TestAllTypes.NestedMessage
	1,   // 161: opaque.goproto.proto.testeditions.TestAllTypes.MapStringNestedEnumEntry.value:type_name -> opaque.goproto.proto.testeditions.TestAllTypes.NestedEnum
	5,   // 162: opaque.goproto.proto.testeditions.TestRequiredForeign.MapMessageEntry.value:type_name -> opaque.goproto.proto.testeditions.TestRequired
	10,  // 163: opaque.goproto.proto.testeditions.packed_int32:extendee -> opaque.goproto.proto.testeditions.TestPackedExtensions
	10,  // 164: opaque.goproto.proto.testeditions.packed_int64:extendee -> opaque.goproto.proto.testeditions.TestPackedExtensions
	10,  // 165: opaque.goproto.proto.testeditions.packed_uint32:extendee -> opaque.goproto.proto.testeditions.TestPackedExtensions
	10,  // 166: opaque.goproto.proto.testeditions.packed_uint64:extendee -> opaque.goproto.proto.testeditions.TestPackedExtensions
	10,  // 167: opaque.goproto.proto.testeditions.packed_sint32:extendee -> opaque.goproto.proto.testeditions.TestPackedExtensions
	10,  // 168: opaque.goproto.proto.testeditions.packed_sint64:extendee -> opaque.goproto.proto.testeditions.TestPackedExtensions
	10,  // 169: opaque.goproto.proto.testeditions.packed_fixed32:extendee -> opaque.goproto.proto.testeditions.TestPackedExtensions
	10,  // 170: opaque.goproto.proto.testeditions.packed_fixed64:extendee -> opaque.goproto.proto.testeditions.TestPackedExtensions
	10,  // 171: opaque.goproto.proto.testeditions.packed_sfixed32:extendee -> opaque.goproto.proto.testeditions.TestPackedExtensions
	10,  // 172: opaque.goproto.proto.testeditions.packed_sfixed64:extendee -> opaque.goproto.proto.testeditions.TestPackedExtensions
	10,  // 173: opaque.goproto.proto.testeditions.packed_float:extendee -> opaque.goproto.proto.testeditions.TestPackedExtensions
	10,  // 174: opaque.goproto.proto.testeditions.packed_double:extendee -> opaque.goproto.proto.testeditions.TestPackedExtensions
	10,  // 175: opaque.goproto.proto.testeditions.packed_bool:extendee -> opaque.goproto.proto.testeditions.TestPackedExtensions
	10,  // 176: opaque.goproto.proto.testeditions.packed_enum:extendee -> opaque.goproto.proto.testeditions.TestPackedExtensions
	0,   // 177: opaque.goproto.proto.testeditions.packed_enum:type_name -> opaque.goproto.proto.testeditions.ForeignEnum
	178, // [178:178] is the sub-list for method output_type
	178, // [178:178] is the sub-list for method input_type
	177, // [177:178] is the sub-list for extension type_name
	163, // [163:177] is the sub-list for extension extendee
	0,   // [0:163] is the sub-list for field type_name
}

func init() { file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_init() }
func file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_init() {
	if File_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto != nil {
		return
	}
	file_internal_testprotos_testeditions_testeditions_opaque_test_import_opaque_proto_init()
	file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_msgTypes[0].OneofWrappers = []any{
		(*testAllTypes_OneofUint32)(nil),
		(*testAllTypes_OneofNestedMessage)(nil),
		(*testAllTypes_OneofString)(nil),
		(*testAllTypes_OneofBytes)(nil),
		(*testAllTypes_OneofBool)(nil),
		(*testAllTypes_OneofUint64)(nil),
		(*testAllTypes_OneofFloat)(nil),
		(*testAllTypes_OneofDouble)(nil),
		(*testAllTypes_OneofEnum)(nil),
		(*testAllTypes_Oneofgroup)(nil),
		(*testAllTypes_OneofOptionalUint32)(nil),
	}
	file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_msgTypes[4].OneofWrappers = []any{
		(*testRequiredForeign_OneofMessage)(nil),
	}
	type x struct{}
	out := protoimpl.TypeBuilder{
		File: protoimpl.DescBuilder{
			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
			RawDescriptor: unsafe.Slice(unsafe.StringData(file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_rawDesc), len(file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_rawDesc)),
			NumEnums:      2,
			NumMessages:   34,
			NumExtensions: 14,
			NumServices:   0,
		},
		GoTypes:           file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_goTypes,
		DependencyIndexes: file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_depIdxs,
		EnumInfos:         file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_enumTypes,
		MessageInfos:      file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_msgTypes,
		ExtensionInfos:    file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_extTypes,
	}.Build()
	File_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto = out.File
	file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_goTypes = nil
	file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_depIdxs = nil
}
