// 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/test_extension.proto

package testeditions

import (
	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
	reflect "reflect"
	sync "sync"
	unsafe "unsafe"
)

type TestAllExtensions struct {
	state           protoimpl.MessageState `protogen:"open.v1"`
	extensionFields protoimpl.ExtensionFields
	unknownFields   protoimpl.UnknownFields
	sizeCache       protoimpl.SizeCache
}

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

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

func (*TestAllExtensions) ProtoMessage() {}

func (x *TestAllExtensions) ProtoReflect() protoreflect.Message {
	mi := &file_internal_testprotos_testeditions_test_extension_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)
}

// Deprecated: Use TestAllExtensions.ProtoReflect.Descriptor instead.
func (*TestAllExtensions) Descriptor() ([]byte, []int) {
	return file_internal_testprotos_testeditions_test_extension_proto_rawDescGZIP(), []int{0}
}

type OptionalGroup struct {
	state                 protoimpl.MessageState           `protogen:"open.v1"`
	A                     *int32                           `protobuf:"varint,17,opt,name=a" json:"a,omitempty"`
	SameFieldNumber       *int32                           `protobuf:"varint,16,opt,name=same_field_number,json=sameFieldNumber" json:"same_field_number,omitempty"`
	OptionalNestedMessage *TestAllExtensions_NestedMessage `protobuf:"bytes,1000,opt,name=optional_nested_message,json=optionalNestedMessage" json:"optional_nested_message,omitempty"`
	unknownFields         protoimpl.UnknownFields
	sizeCache             protoimpl.SizeCache
}

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

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

func (*OptionalGroup) ProtoMessage() {}

func (x *OptionalGroup) ProtoReflect() protoreflect.Message {
	mi := &file_internal_testprotos_testeditions_test_extension_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)
}

// Deprecated: Use OptionalGroup.ProtoReflect.Descriptor instead.
func (*OptionalGroup) Descriptor() ([]byte, []int) {
	return file_internal_testprotos_testeditions_test_extension_proto_rawDescGZIP(), []int{1}
}

func (x *OptionalGroup) GetA() int32 {
	if x != nil && x.A != nil {
		return *x.A
	}
	return 0
}

func (x *OptionalGroup) GetSameFieldNumber() int32 {
	if x != nil && x.SameFieldNumber != nil {
		return *x.SameFieldNumber
	}
	return 0
}

func (x *OptionalGroup) GetOptionalNestedMessage() *TestAllExtensions_NestedMessage {
	if x != nil {
		return x.OptionalNestedMessage
	}
	return nil
}

type RepeatedGroup struct {
	state                 protoimpl.MessageState           `protogen:"open.v1"`
	A                     *int32                           `protobuf:"varint,47,opt,name=a" json:"a,omitempty"`
	OptionalNestedMessage *TestAllExtensions_NestedMessage `protobuf:"bytes,1001,opt,name=optional_nested_message,json=optionalNestedMessage" json:"optional_nested_message,omitempty"`
	unknownFields         protoimpl.UnknownFields
	sizeCache             protoimpl.SizeCache
}

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

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

func (*RepeatedGroup) ProtoMessage() {}

func (x *RepeatedGroup) ProtoReflect() protoreflect.Message {
	mi := &file_internal_testprotos_testeditions_test_extension_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)
}

// Deprecated: Use RepeatedGroup.ProtoReflect.Descriptor instead.
func (*RepeatedGroup) Descriptor() ([]byte, []int) {
	return file_internal_testprotos_testeditions_test_extension_proto_rawDescGZIP(), []int{2}
}

func (x *RepeatedGroup) GetA() int32 {
	if x != nil && x.A != nil {
		return *x.A
	}
	return 0
}

func (x *RepeatedGroup) GetOptionalNestedMessage() *TestAllExtensions_NestedMessage {
	if x != nil {
		return x.OptionalNestedMessage
	}
	return nil
}

type TestFeatureResolution struct {
	state           protoimpl.MessageState `protogen:"open.v1"`
	extensionFields protoimpl.ExtensionFields
	unknownFields   protoimpl.UnknownFields
	sizeCache       protoimpl.SizeCache
}

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

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

func (*TestFeatureResolution) ProtoMessage() {}

func (x *TestFeatureResolution) ProtoReflect() protoreflect.Message {
	mi := &file_internal_testprotos_testeditions_test_extension_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)
}

// Deprecated: Use TestFeatureResolution.ProtoReflect.Descriptor instead.
func (*TestFeatureResolution) Descriptor() ([]byte, []int) {
	return file_internal_testprotos_testeditions_test_extension_proto_rawDescGZIP(), []int{3}
}

type RepeatedFieldEncoding struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *RepeatedFieldEncoding) Reset() {
	*x = RepeatedFieldEncoding{}
	mi := &file_internal_testprotos_testeditions_test_extension_proto_msgTypes[4]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

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

func (*RepeatedFieldEncoding) ProtoMessage() {}

func (x *RepeatedFieldEncoding) ProtoReflect() protoreflect.Message {
	mi := &file_internal_testprotos_testeditions_test_extension_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)
}

// Deprecated: Use RepeatedFieldEncoding.ProtoReflect.Descriptor instead.
func (*RepeatedFieldEncoding) Descriptor() ([]byte, []int) {
	return file_internal_testprotos_testeditions_test_extension_proto_rawDescGZIP(), []int{4}
}

type TestAllExtensions_NestedMessage struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	A             *int32                 `protobuf:"varint,1,opt,name=a" json:"a,omitempty"`
	Corecursive   *TestAllExtensions     `protobuf:"bytes,2,opt,name=corecursive" json:"corecursive,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *TestAllExtensions_NestedMessage) Reset() {
	*x = TestAllExtensions_NestedMessage{}
	mi := &file_internal_testprotos_testeditions_test_extension_proto_msgTypes[5]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

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

func (*TestAllExtensions_NestedMessage) ProtoMessage() {}

func (x *TestAllExtensions_NestedMessage) ProtoReflect() protoreflect.Message {
	mi := &file_internal_testprotos_testeditions_test_extension_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)
}

// Deprecated: Use TestAllExtensions_NestedMessage.ProtoReflect.Descriptor instead.
func (*TestAllExtensions_NestedMessage) Descriptor() ([]byte, []int) {
	return file_internal_testprotos_testeditions_test_extension_proto_rawDescGZIP(), []int{0, 0}
}

func (x *TestAllExtensions_NestedMessage) GetA() int32 {
	if x != nil && x.A != nil {
		return *x.A
	}
	return 0
}

func (x *TestAllExtensions_NestedMessage) GetCorecursive() *TestAllExtensions {
	if x != nil {
		return x.Corecursive
	}
	return nil
}

var file_internal_testprotos_testeditions_test_extension_proto_extTypes = []protoimpl.ExtensionInfo{
	{
		ExtendedType:  (*TestAllExtensions)(nil),
		ExtensionType: (*int32)(nil),
		Field:         1,
		Name:          "goproto.proto.testeditions.optional_int32",
		Tag:           "varint,1,opt,name=optional_int32",
		Filename:      "internal/testprotos/testeditions/test_extension.proto",
	},
	{
		ExtendedType:  (*TestAllExtensions)(nil),
		ExtensionType: (*int64)(nil),
		Field:         2,
		Name:          "goproto.proto.testeditions.optional_int64",
		Tag:           "varint,2,opt,name=optional_int64",
		Filename:      "internal/testprotos/testeditions/test_extension.proto",
	},
	{
		ExtendedType:  (*TestAllExtensions)(nil),
		ExtensionType: (*uint32)(nil),
		Field:         3,
		Name:          "goproto.proto.testeditions.optional_uint32",
		Tag:           "varint,3,opt,name=optional_uint32",
		Filename:      "internal/testprotos/testeditions/test_extension.proto",
	},
	{
		ExtendedType:  (*TestAllExtensions)(nil),
		ExtensionType: (*uint64)(nil),
		Field:         4,
		Name:          "goproto.proto.testeditions.optional_uint64",
		Tag:           "varint,4,opt,name=optional_uint64",
		Filename:      "internal/testprotos/testeditions/test_extension.proto",
	},
	{
		ExtendedType:  (*TestAllExtensions)(nil),
		ExtensionType: (*int32)(nil),
		Field:         5,
		Name:          "goproto.proto.testeditions.optional_sint32",
		Tag:           "zigzag32,5,opt,name=optional_sint32",
		Filename:      "internal/testprotos/testeditions/test_extension.proto",
	},
	{
		ExtendedType:  (*TestAllExtensions)(nil),
		ExtensionType: (*int64)(nil),
		Field:         6,
		Name:          "goproto.proto.testeditions.optional_sint64",
		Tag:           "zigzag64,6,opt,name=optional_sint64",
		Filename:      "internal/testprotos/testeditions/test_extension.proto",
	},
	{
		ExtendedType:  (*TestAllExtensions)(nil),
		ExtensionType: (*uint32)(nil),
		Field:         7,
		Name:          "goproto.proto.testeditions.optional_fixed32",
		Tag:           "fixed32,7,opt,name=optional_fixed32",
		Filename:      "internal/testprotos/testeditions/test_extension.proto",
	},
	{
		ExtendedType:  (*TestAllExtensions)(nil),
		ExtensionType: (*uint64)(nil),
		Field:         8,
		Name:          "goproto.proto.testeditions.optional_fixed64",
		Tag:           "fixed64,8,opt,name=optional_fixed64",
		Filename:      "internal/testprotos/testeditions/test_extension.proto",
	},
	{
		ExtendedType:  (*TestAllExtensions)(nil),
		ExtensionType: (*int32)(nil),
		Field:         9,
		Name:          "goproto.proto.testeditions.optional_sfixed32",
		Tag:           "fixed32,9,opt,name=optional_sfixed32",
		Filename:      "internal/testprotos/testeditions/test_extension.proto",
	},
	{
		ExtendedType:  (*TestAllExtensions)(nil),
		ExtensionType: (*int64)(nil),
		Field:         10,
		Name:          "goproto.proto.testeditions.optional_sfixed64",
		Tag:           "fixed64,10,opt,name=optional_sfixed64",
		Filename:      "internal/testprotos/testeditions/test_extension.proto",
	},
	{
		ExtendedType:  (*TestAllExtensions)(nil),
		ExtensionType: (*float32)(nil),
		Field:         11,
		Name:          "goproto.proto.testeditions.optional_float",
		Tag:           "fixed32,11,opt,name=optional_float",
		Filename:      "internal/testprotos/testeditions/test_extension.proto",
	},
	{
		ExtendedType:  (*TestAllExtensions)(nil),
		ExtensionType: (*float64)(nil),
		Field:         12,
		Name:          "goproto.proto.testeditions.optional_double",
		Tag:           "fixed64,12,opt,name=optional_double",
		Filename:      "internal/testprotos/testeditions/test_extension.proto",
	},
	{
		ExtendedType:  (*TestAllExtensions)(nil),
		ExtensionType: (*bool)(nil),
		Field:         13,
		Name:          "goproto.proto.testeditions.optional_bool",
		Tag:           "varint,13,opt,name=optional_bool",
		Filename:      "internal/testprotos/testeditions/test_extension.proto",
	},
	{
		ExtendedType:  (*TestAllExtensions)(nil),
		ExtensionType: (*string)(nil),
		Field:         14,
		Name:          "goproto.proto.testeditions.optional_string",
		Tag:           "bytes,14,opt,name=optional_string",
		Filename:      "internal/testprotos/testeditions/test_extension.proto",
	},
	{
		ExtendedType:  (*TestAllExtensions)(nil),
		ExtensionType: ([]byte)(nil),
		Field:         15,
		Name:          "goproto.proto.testeditions.optional_bytes",
		Tag:           "bytes,15,opt,name=optional_bytes",
		Filename:      "internal/testprotos/testeditions/test_extension.proto",
	},
	{
		ExtendedType:  (*TestAllExtensions)(nil),
		ExtensionType: (*OptionalGroup)(nil),
		Field:         16,
		Name:          "goproto.proto.testeditions.optionalgroup",
		Tag:           "group,16,opt,name=OptionalGroup",
		Filename:      "internal/testprotos/testeditions/test_extension.proto",
	},
	{
		ExtendedType:  (*TestAllExtensions)(nil),
		ExtensionType: (*TestAllExtensions_NestedMessage)(nil),
		Field:         18,
		Name:          "goproto.proto.testeditions.optional_nested_message",
		Tag:           "bytes,18,opt,name=optional_nested_message",
		Filename:      "internal/testprotos/testeditions/test_extension.proto",
	},
	{
		ExtendedType:  (*TestAllExtensions)(nil),
		ExtensionType: (*TestAllTypes_NestedEnum)(nil),
		Field:         21,
		Name:          "goproto.proto.testeditions.optional_nested_enum",
		Tag:           "varint,21,opt,name=optional_nested_enum,enum=goproto.proto.testeditions.TestAllTypes_NestedEnum",
		Filename:      "internal/testprotos/testeditions/test_extension.proto",
	},
	{
		ExtendedType:  (*TestAllExtensions)(nil),
		ExtensionType: ([]int32)(nil),
		Field:         31,
		Name:          "goproto.proto.testeditions.repeated_int32",
		Tag:           "varint,31,rep,name=repeated_int32",
		Filename:      "internal/testprotos/testeditions/test_extension.proto",
	},
	{
		ExtendedType:  (*TestAllExtensions)(nil),
		ExtensionType: ([]int64)(nil),
		Field:         32,
		Name:          "goproto.proto.testeditions.repeated_int64",
		Tag:           "varint,32,rep,name=repeated_int64",
		Filename:      "internal/testprotos/testeditions/test_extension.proto",
	},
	{
		ExtendedType:  (*TestAllExtensions)(nil),
		ExtensionType: ([]uint32)(nil),
		Field:         33,
		Name:          "goproto.proto.testeditions.repeated_uint32",
		Tag:           "varint,33,rep,name=repeated_uint32",
		Filename:      "internal/testprotos/testeditions/test_extension.proto",
	},
	{
		ExtendedType:  (*TestAllExtensions)(nil),
		ExtensionType: ([]uint64)(nil),
		Field:         34,
		Name:          "goproto.proto.testeditions.repeated_uint64",
		Tag:           "varint,34,rep,name=repeated_uint64",
		Filename:      "internal/testprotos/testeditions/test_extension.proto",
	},
	{
		ExtendedType:  (*TestAllExtensions)(nil),
		ExtensionType: ([]int32)(nil),
		Field:         35,
		Name:          "goproto.proto.testeditions.repeated_sint32",
		Tag:           "zigzag32,35,rep,name=repeated_sint32",
		Filename:      "internal/testprotos/testeditions/test_extension.proto",
	},
	{
		ExtendedType:  (*TestAllExtensions)(nil),
		ExtensionType: ([]int64)(nil),
		Field:         36,
		Name:          "goproto.proto.testeditions.repeated_sint64",
		Tag:           "zigzag64,36,rep,name=repeated_sint64",
		Filename:      "internal/testprotos/testeditions/test_extension.proto",
	},
	{
		ExtendedType:  (*TestAllExtensions)(nil),
		ExtensionType: ([]uint32)(nil),
		Field:         37,
		Name:          "goproto.proto.testeditions.repeated_fixed32",
		Tag:           "fixed32,37,rep,name=repeated_fixed32",
		Filename:      "internal/testprotos/testeditions/test_extension.proto",
	},
	{
		ExtendedType:  (*TestAllExtensions)(nil),
		ExtensionType: ([]uint64)(nil),
		Field:         38,
		Name:          "goproto.proto.testeditions.repeated_fixed64",
		Tag:           "fixed64,38,rep,name=repeated_fixed64",
		Filename:      "internal/testprotos/testeditions/test_extension.proto",
	},
	{
		ExtendedType:  (*TestAllExtensions)(nil),
		ExtensionType: ([]int32)(nil),
		Field:         39,
		Name:          "goproto.proto.testeditions.repeated_sfixed32",
		Tag:           "fixed32,39,rep,name=repeated_sfixed32",
		Filename:      "internal/testprotos/testeditions/test_extension.proto",
	},
	{
		ExtendedType:  (*TestAllExtensions)(nil),
		ExtensionType: ([]int64)(nil),
		Field:         40,
		Name:          "goproto.proto.testeditions.repeated_sfixed64",
		Tag:           "fixed64,40,rep,name=repeated_sfixed64",
		Filename:      "internal/testprotos/testeditions/test_extension.proto",
	},
	{
		ExtendedType:  (*TestAllExtensions)(nil),
		ExtensionType: ([]float32)(nil),
		Field:         41,
		Name:          "goproto.proto.testeditions.repeated_float",
		Tag:           "fixed32,41,rep,name=repeated_float",
		Filename:      "internal/testprotos/testeditions/test_extension.proto",
	},
	{
		ExtendedType:  (*TestAllExtensions)(nil),
		ExtensionType: ([]float64)(nil),
		Field:         42,
		Name:          "goproto.proto.testeditions.repeated_double",
		Tag:           "fixed64,42,rep,name=repeated_double",
		Filename:      "internal/testprotos/testeditions/test_extension.proto",
	},
	{
		ExtendedType:  (*TestAllExtensions)(nil),
		ExtensionType: ([]bool)(nil),
		Field:         43,
		Name:          "goproto.proto.testeditions.repeated_bool",
		Tag:           "varint,43,rep,name=repeated_bool",
		Filename:      "internal/testprotos/testeditions/test_extension.proto",
	},
	{
		ExtendedType:  (*TestAllExtensions)(nil),
		ExtensionType: ([]string)(nil),
		Field:         44,
		Name:          "goproto.proto.testeditions.repeated_string",
		Tag:           "bytes,44,rep,name=repeated_string",
		Filename:      "internal/testprotos/testeditions/test_extension.proto",
	},
	{
		ExtendedType:  (*TestAllExtensions)(nil),
		ExtensionType: ([][]byte)(nil),
		Field:         45,
		Name:          "goproto.proto.testeditions.repeated_bytes",
		Tag:           "bytes,45,rep,name=repeated_bytes",
		Filename:      "internal/testprotos/testeditions/test_extension.proto",
	},
	{
		ExtendedType:  (*TestAllExtensions)(nil),
		ExtensionType: ([]*RepeatedGroup)(nil),
		Field:         46,
		Name:          "goproto.proto.testeditions.repeatedgroup",
		Tag:           "group,46,rep,name=RepeatedGroup",
		Filename:      "internal/testprotos/testeditions/test_extension.proto",
	},
	{
		ExtendedType:  (*TestAllExtensions)(nil),
		ExtensionType: ([]*TestAllExtensions_NestedMessage)(nil),
		Field:         48,
		Name:          "goproto.proto.testeditions.repeated_nested_message",
		Tag:           "bytes,48,rep,name=repeated_nested_message",
		Filename:      "internal/testprotos/testeditions/test_extension.proto",
	},
	{
		ExtendedType:  (*TestAllExtensions)(nil),
		ExtensionType: ([]TestAllTypes_NestedEnum)(nil),
		Field:         51,
		Name:          "goproto.proto.testeditions.repeated_nested_enum",
		Tag:           "varint,51,rep,name=repeated_nested_enum,enum=goproto.proto.testeditions.TestAllTypes_NestedEnum",
		Filename:      "internal/testprotos/testeditions/test_extension.proto",
	},
	{
		ExtendedType:  (*TestAllExtensions)(nil),
		ExtensionType: (*int32)(nil),
		Field:         81,
		Name:          "goproto.proto.testeditions.default_int32",
		Tag:           "varint,81,opt,name=default_int32,def=81",
		Filename:      "internal/testprotos/testeditions/test_extension.proto",
	},
	{
		ExtendedType:  (*TestAllExtensions)(nil),
		ExtensionType: (*int64)(nil),
		Field:         82,
		Name:          "goproto.proto.testeditions.default_int64",
		Tag:           "varint,82,opt,name=default_int64,def=82",
		Filename:      "internal/testprotos/testeditions/test_extension.proto",
	},
	{
		ExtendedType:  (*TestAllExtensions)(nil),
		ExtensionType: (*uint32)(nil),
		Field:         83,
		Name:          "goproto.proto.testeditions.default_uint32",
		Tag:           "varint,83,opt,name=default_uint32,def=83",
		Filename:      "internal/testprotos/testeditions/test_extension.proto",
	},
	{
		ExtendedType:  (*TestAllExtensions)(nil),
		ExtensionType: (*uint64)(nil),
		Field:         84,
		Name:          "goproto.proto.testeditions.default_uint64",
		Tag:           "varint,84,opt,name=default_uint64,def=84",
		Filename:      "internal/testprotos/testeditions/test_extension.proto",
	},
	{
		ExtendedType:  (*TestAllExtensions)(nil),
		ExtensionType: (*int32)(nil),
		Field:         85,
		Name:          "goproto.proto.testeditions.default_sint32",
		Tag:           "zigzag32,85,opt,name=default_sint32,def=-85",
		Filename:      "internal/testprotos/testeditions/test_extension.proto",
	},
	{
		ExtendedType:  (*TestAllExtensions)(nil),
		ExtensionType: (*int64)(nil),
		Field:         86,
		Name:          "goproto.proto.testeditions.default_sint64",
		Tag:           "zigzag64,86,opt,name=default_sint64,def=86",
		Filename:      "internal/testprotos/testeditions/test_extension.proto",
	},
	{
		ExtendedType:  (*TestAllExtensions)(nil),
		ExtensionType: (*uint32)(nil),
		Field:         87,
		Name:          "goproto.proto.testeditions.default_fixed32",
		Tag:           "fixed32,87,opt,name=default_fixed32,def=87",
		Filename:      "internal/testprotos/testeditions/test_extension.proto",
	},
	{
		ExtendedType:  (*TestAllExtensions)(nil),
		ExtensionType: (*uint64)(nil),
		Field:         88,
		Name:          "goproto.proto.testeditions.default_fixed64",
		Tag:           "fixed64,88,opt,name=default_fixed64,def=88",
		Filename:      "internal/testprotos/testeditions/test_extension.proto",
	},
	{
		ExtendedType:  (*TestAllExtensions)(nil),
		ExtensionType: (*int32)(nil),
		Field:         89,
		Name:          "goproto.proto.testeditions.default_sfixed32",
		Tag:           "fixed32,89,opt,name=default_sfixed32,def=89",
		Filename:      "internal/testprotos/testeditions/test_extension.proto",
	},
	{
		ExtendedType:  (*TestAllExtensions)(nil),
		ExtensionType: (*int64)(nil),
		Field:         80,
		Name:          "goproto.proto.testeditions.default_sfixed64",
		Tag:           "fixed64,80,opt,name=default_sfixed64,def=-90",
		Filename:      "internal/testprotos/testeditions/test_extension.proto",
	},
	{
		ExtendedType:  (*TestAllExtensions)(nil),
		ExtensionType: (*float32)(nil),
		Field:         91,
		Name:          "goproto.proto.testeditions.default_float",
		Tag:           "fixed32,91,opt,name=default_float,def=91.5",
		Filename:      "internal/testprotos/testeditions/test_extension.proto",
	},
	{
		ExtendedType:  (*TestAllExtensions)(nil),
		ExtensionType: (*float64)(nil),
		Field:         92,
		Name:          "goproto.proto.testeditions.default_double",
		Tag:           "fixed64,92,opt,name=default_double,def=92000",
		Filename:      "internal/testprotos/testeditions/test_extension.proto",
	},
	{
		ExtendedType:  (*TestAllExtensions)(nil),
		ExtensionType: (*bool)(nil),
		Field:         93,
		Name:          "goproto.proto.testeditions.default_bool",
		Tag:           "varint,93,opt,name=default_bool,def=1",
		Filename:      "internal/testprotos/testeditions/test_extension.proto",
	},
	{
		ExtendedType:  (*TestAllExtensions)(nil),
		ExtensionType: (*string)(nil),
		Field:         94,
		Name:          "goproto.proto.testeditions.default_string",
		Tag:           "bytes,94,opt,name=default_string,def=hello",
		Filename:      "internal/testprotos/testeditions/test_extension.proto",
	},
	{
		ExtendedType:  (*TestAllExtensions)(nil),
		ExtensionType: ([]byte)(nil),
		Field:         95,
		Name:          "goproto.proto.testeditions.default_bytes",
		Tag:           "bytes,95,opt,name=default_bytes,def=world",
		Filename:      "internal/testprotos/testeditions/test_extension.proto",
	},
	{
		ExtendedType:  (*TestAllExtensions)(nil),
		ExtensionType: (*TestRequired)(nil),
		Field:         1000,
		Name:          "goproto.proto.testeditions.single",
		Tag:           "bytes,1000,opt,name=single",
		Filename:      "internal/testprotos/testeditions/test_extension.proto",
	},
	{
		ExtendedType:  (*TestAllExtensions)(nil),
		ExtensionType: ([]*TestRequired)(nil),
		Field:         1001,
		Name:          "goproto.proto.testeditions.multi",
		Tag:           "bytes,1001,rep,name=multi",
		Filename:      "internal/testprotos/testeditions/test_extension.proto",
	},
	{
		ExtendedType:  (*TestFeatureResolution)(nil),
		ExtensionType: ([]int32)(nil),
		Field:         2,
		Name:          "goproto.proto.testeditions.global_expanded_extension",
		Tag:           "varint,2,rep,name=global_expanded_extension",
		Filename:      "internal/testprotos/testeditions/test_extension.proto",
	},
	{
		ExtendedType:  (*TestFeatureResolution)(nil),
		ExtensionType: ([]int32)(nil),
		Field:         3,
		Name:          "goproto.proto.testeditions.global_packed_extension_overriden",
		Tag:           "varint,3,rep,packed,name=global_packed_extension_overriden",
		Filename:      "internal/testprotos/testeditions/test_extension.proto",
	},
	{
		ExtendedType:  (*TestFeatureResolution)(nil),
		ExtensionType: ([]int32)(nil),
		Field:         4,
		Name:          "goproto.proto.testeditions.RepeatedFieldEncoding.message_expanded_extension",
		Tag:           "varint,4,rep,name=message_expanded_extension",
		Filename:      "internal/testprotos/testeditions/test_extension.proto",
	},
	{
		ExtendedType:  (*TestFeatureResolution)(nil),
		ExtensionType: ([]int32)(nil),
		Field:         5,
		Name:          "goproto.proto.testeditions.RepeatedFieldEncoding.message_packed_extension_overriden",
		Tag:           "varint,5,rep,packed,name=message_packed_extension_overriden",
		Filename:      "internal/testprotos/testeditions/test_extension.proto",
	},
}

// Extension fields to TestAllExtensions.
var (
	// optional int32 optional_int32 = 1;
	E_OptionalInt32 = &file_internal_testprotos_testeditions_test_extension_proto_extTypes[0]
	// optional int64 optional_int64 = 2;
	E_OptionalInt64 = &file_internal_testprotos_testeditions_test_extension_proto_extTypes[1]
	// optional uint32 optional_uint32 = 3;
	E_OptionalUint32 = &file_internal_testprotos_testeditions_test_extension_proto_extTypes[2]
	// optional uint64 optional_uint64 = 4;
	E_OptionalUint64 = &file_internal_testprotos_testeditions_test_extension_proto_extTypes[3]
	// optional sint32 optional_sint32 = 5;
	E_OptionalSint32 = &file_internal_testprotos_testeditions_test_extension_proto_extTypes[4]
	// optional sint64 optional_sint64 = 6;
	E_OptionalSint64 = &file_internal_testprotos_testeditions_test_extension_proto_extTypes[5]
	// optional fixed32 optional_fixed32 = 7;
	E_OptionalFixed32 = &file_internal_testprotos_testeditions_test_extension_proto_extTypes[6]
	// optional fixed64 optional_fixed64 = 8;
	E_OptionalFixed64 = &file_internal_testprotos_testeditions_test_extension_proto_extTypes[7]
	// optional sfixed32 optional_sfixed32 = 9;
	E_OptionalSfixed32 = &file_internal_testprotos_testeditions_test_extension_proto_extTypes[8]
	// optional sfixed64 optional_sfixed64 = 10;
	E_OptionalSfixed64 = &file_internal_testprotos_testeditions_test_extension_proto_extTypes[9]
	// optional float optional_float = 11;
	E_OptionalFloat = &file_internal_testprotos_testeditions_test_extension_proto_extTypes[10]
	// optional double optional_double = 12;
	E_OptionalDouble = &file_internal_testprotos_testeditions_test_extension_proto_extTypes[11]
	// optional bool optional_bool = 13;
	E_OptionalBool = &file_internal_testprotos_testeditions_test_extension_proto_extTypes[12]
	// optional string optional_string = 14;
	E_OptionalString = &file_internal_testprotos_testeditions_test_extension_proto_extTypes[13]
	// optional bytes optional_bytes = 15;
	E_OptionalBytes = &file_internal_testprotos_testeditions_test_extension_proto_extTypes[14]
	// optional goproto.proto.testeditions.OptionalGroup optionalgroup = 16;
	E_Optionalgroup = &file_internal_testprotos_testeditions_test_extension_proto_extTypes[15]
	// optional goproto.proto.testeditions.TestAllExtensions.NestedMessage optional_nested_message = 18;
	E_OptionalNestedMessage = &file_internal_testprotos_testeditions_test_extension_proto_extTypes[16]
	// optional goproto.proto.testeditions.TestAllTypes.NestedEnum optional_nested_enum = 21;
	E_OptionalNestedEnum = &file_internal_testprotos_testeditions_test_extension_proto_extTypes[17]
	// repeated int32 repeated_int32 = 31;
	E_RepeatedInt32 = &file_internal_testprotos_testeditions_test_extension_proto_extTypes[18]
	// repeated int64 repeated_int64 = 32;
	E_RepeatedInt64 = &file_internal_testprotos_testeditions_test_extension_proto_extTypes[19]
	// repeated uint32 repeated_uint32 = 33;
	E_RepeatedUint32 = &file_internal_testprotos_testeditions_test_extension_proto_extTypes[20]
	// repeated uint64 repeated_uint64 = 34;
	E_RepeatedUint64 = &file_internal_testprotos_testeditions_test_extension_proto_extTypes[21]
	// repeated sint32 repeated_sint32 = 35;
	E_RepeatedSint32 = &file_internal_testprotos_testeditions_test_extension_proto_extTypes[22]
	// repeated sint64 repeated_sint64 = 36;
	E_RepeatedSint64 = &file_internal_testprotos_testeditions_test_extension_proto_extTypes[23]
	// repeated fixed32 repeated_fixed32 = 37;
	E_RepeatedFixed32 = &file_internal_testprotos_testeditions_test_extension_proto_extTypes[24]
	// repeated fixed64 repeated_fixed64 = 38;
	E_RepeatedFixed64 = &file_internal_testprotos_testeditions_test_extension_proto_extTypes[25]
	// repeated sfixed32 repeated_sfixed32 = 39;
	E_RepeatedSfixed32 = &file_internal_testprotos_testeditions_test_extension_proto_extTypes[26]
	// repeated sfixed64 repeated_sfixed64 = 40;
	E_RepeatedSfixed64 = &file_internal_testprotos_testeditions_test_extension_proto_extTypes[27]
	// repeated float repeated_float = 41;
	E_RepeatedFloat = &file_internal_testprotos_testeditions_test_extension_proto_extTypes[28]
	// repeated double repeated_double = 42;
	E_RepeatedDouble = &file_internal_testprotos_testeditions_test_extension_proto_extTypes[29]
	// repeated bool repeated_bool = 43;
	E_RepeatedBool = &file_internal_testprotos_testeditions_test_extension_proto_extTypes[30]
	// repeated string repeated_string = 44;
	E_RepeatedString = &file_internal_testprotos_testeditions_test_extension_proto_extTypes[31]
	// repeated bytes repeated_bytes = 45;
	E_RepeatedBytes = &file_internal_testprotos_testeditions_test_extension_proto_extTypes[32]
	// repeated goproto.proto.testeditions.RepeatedGroup repeatedgroup = 46;
	E_Repeatedgroup = &file_internal_testprotos_testeditions_test_extension_proto_extTypes[33]
	// repeated goproto.proto.testeditions.TestAllExtensions.NestedMessage repeated_nested_message = 48;
	E_RepeatedNestedMessage = &file_internal_testprotos_testeditions_test_extension_proto_extTypes[34]
	// repeated goproto.proto.testeditions.TestAllTypes.NestedEnum repeated_nested_enum = 51;
	E_RepeatedNestedEnum = &file_internal_testprotos_testeditions_test_extension_proto_extTypes[35]
	// optional int32 default_int32 = 81;
	E_DefaultInt32 = &file_internal_testprotos_testeditions_test_extension_proto_extTypes[36]
	// optional int64 default_int64 = 82;
	E_DefaultInt64 = &file_internal_testprotos_testeditions_test_extension_proto_extTypes[37]
	// optional uint32 default_uint32 = 83;
	E_DefaultUint32 = &file_internal_testprotos_testeditions_test_extension_proto_extTypes[38]
	// optional uint64 default_uint64 = 84;
	E_DefaultUint64 = &file_internal_testprotos_testeditions_test_extension_proto_extTypes[39]
	// optional sint32 default_sint32 = 85;
	E_DefaultSint32 = &file_internal_testprotos_testeditions_test_extension_proto_extTypes[40]
	// optional sint64 default_sint64 = 86;
	E_DefaultSint64 = &file_internal_testprotos_testeditions_test_extension_proto_extTypes[41]
	// optional fixed32 default_fixed32 = 87;
	E_DefaultFixed32 = &file_internal_testprotos_testeditions_test_extension_proto_extTypes[42]
	// optional fixed64 default_fixed64 = 88;
	E_DefaultFixed64 = &file_internal_testprotos_testeditions_test_extension_proto_extTypes[43]
	// optional sfixed32 default_sfixed32 = 89;
	E_DefaultSfixed32 = &file_internal_testprotos_testeditions_test_extension_proto_extTypes[44]
	// optional sfixed64 default_sfixed64 = 80;
	E_DefaultSfixed64 = &file_internal_testprotos_testeditions_test_extension_proto_extTypes[45]
	// optional float default_float = 91;
	E_DefaultFloat = &file_internal_testprotos_testeditions_test_extension_proto_extTypes[46]
	// optional double default_double = 92;
	E_DefaultDouble = &file_internal_testprotos_testeditions_test_extension_proto_extTypes[47]
	// optional bool default_bool = 93;
	E_DefaultBool = &file_internal_testprotos_testeditions_test_extension_proto_extTypes[48]
	// optional string default_string = 94;
	E_DefaultString = &file_internal_testprotos_testeditions_test_extension_proto_extTypes[49]
	// optional bytes default_bytes = 95;
	E_DefaultBytes = &file_internal_testprotos_testeditions_test_extension_proto_extTypes[50]
	// optional goproto.proto.testeditions.TestRequired single = 1000;
	E_Single = &file_internal_testprotos_testeditions_test_extension_proto_extTypes[51]
	// repeated goproto.proto.testeditions.TestRequired multi = 1001;
	E_Multi = &file_internal_testprotos_testeditions_test_extension_proto_extTypes[52]
)

// Extension fields to TestFeatureResolution.
var (
	// repeated int32 global_expanded_extension = 2;
	E_GlobalExpandedExtension = &file_internal_testprotos_testeditions_test_extension_proto_extTypes[53]
	// repeated int32 global_packed_extension_overriden = 3;
	E_GlobalPackedExtensionOverriden = &file_internal_testprotos_testeditions_test_extension_proto_extTypes[54]
	// repeated int32 message_expanded_extension = 4;
	E_RepeatedFieldEncoding_MessageExpandedExtension = &file_internal_testprotos_testeditions_test_extension_proto_extTypes[55]
	// repeated int32 message_packed_extension_overriden = 5;
	E_RepeatedFieldEncoding_MessagePackedExtensionOverriden = &file_internal_testprotos_testeditions_test_extension_proto_extTypes[56]
)

var File_internal_testprotos_testeditions_test_extension_proto protoreflect.FileDescriptor

const file_internal_testprotos_testeditions_test_extension_proto_rawDesc = "" +
	"\n" +
	"5internal/testprotos/testeditions/test_extension.proto\x12\x1agoproto.proto.testeditions\x1a+internal/testprotos/testeditions/test.proto\"\x8d\x01\n" +
	"\x11TestAllExtensions\x1an\n" +
	"\rNestedMessage\x12\f\n" +
	"\x01a\x18\x01 \x01(\x05R\x01a\x12O\n" +
	"\vcorecursive\x18\x02 \x01(\v2-.goproto.proto.testeditions.TestAllExtensionsR\vcorecursive*\b\b\x01\x10\x80\x80\x80\x80\x02\"\xbf\x01\n" +
	"\rOptionalGroup\x12\f\n" +
	"\x01a\x18\x11 \x01(\x05R\x01a\x12*\n" +
	"\x11same_field_number\x18\x10 \x01(\x05R\x0fsameFieldNumber\x12t\n" +
	"\x17optional_nested_message\x18\xe8\a \x01(\v2;.goproto.proto.testeditions.TestAllExtensions.NestedMessageR\x15optionalNestedMessage\"\x93\x01\n" +
	"\rRepeatedGroup\x12\f\n" +
	"\x01a\x18/ \x01(\x05R\x01a\x12t\n" +
	"\x17optional_nested_message\x18\xe9\a \x01(\v2;.goproto.proto.testeditions.TestAllExtensions.NestedMessageR\x15optionalNestedMessage\"!\n" +
	"\x15TestFeatureResolution*\b\b\x02\x10\x80\x80\x80\x80\x02\"\x90\x02\n" +
	"\x15RepeatedFieldEncoding2o\n" +
	"\x1amessage_expanded_extension\x121.goproto.proto.testeditions.TestFeatureResolution\x18\x04 \x03(\x05R\x18messageExpandedExtension2\x85\x01\n" +
	"\"message_packed_extension_overriden\x121.goproto.proto.testeditions.TestFeatureResolution\x18\x05 \x03(\x05B\x05\xaa\x01\x02\x18\x01R\x1fmessagePackedExtensionOverriden:T\n" +
	"\x0eoptional_int32\x12-.goproto.proto.testeditions.TestAllExtensions\x18\x01 \x01(\x05R\roptionalInt32:T\n" +
	"\x0eoptional_int64\x12-.goproto.proto.testeditions.TestAllExtensions\x18\x02 \x01(\x03R\roptionalInt64:V\n" +
	"\x0foptional_uint32\x12-.goproto.proto.testeditions.TestAllExtensions\x18\x03 \x01(\rR\x0eoptionalUint32:V\n" +
	"\x0foptional_uint64\x12-.goproto.proto.testeditions.TestAllExtensions\x18\x04 \x01(\x04R\x0eoptionalUint64:V\n" +
	"\x0foptional_sint32\x12-.goproto.proto.testeditions.TestAllExtensions\x18\x05 \x01(\x11R\x0eoptionalSint32:V\n" +
	"\x0foptional_sint64\x12-.goproto.proto.testeditions.TestAllExtensions\x18\x06 \x01(\x12R\x0eoptionalSint64:X\n" +
	"\x10optional_fixed32\x12-.goproto.proto.testeditions.TestAllExtensions\x18\a \x01(\aR\x0foptionalFixed32:X\n" +
	"\x10optional_fixed64\x12-.goproto.proto.testeditions.TestAllExtensions\x18\b \x01(\x06R\x0foptionalFixed64:Z\n" +
	"\x11optional_sfixed32\x12-.goproto.proto.testeditions.TestAllExtensions\x18\t \x01(\x0fR\x10optionalSfixed32:Z\n" +
	"\x11optional_sfixed64\x12-.goproto.proto.testeditions.TestAllExtensions\x18\n" +
	" \x01(\x10R\x10optionalSfixed64:T\n" +
	"\x0eoptional_float\x12-.goproto.proto.testeditions.TestAllExtensions\x18\v \x01(\x02R\roptionalFloat:V\n" +
	"\x0foptional_double\x12-.goproto.proto.testeditions.TestAllExtensions\x18\f \x01(\x01R\x0eoptionalDouble:R\n" +
	"\roptional_bool\x12-.goproto.proto.testeditions.TestAllExtensions\x18\r \x01(\bR\foptionalBool:V\n" +
	"\x0foptional_string\x12-.goproto.proto.testeditions.TestAllExtensions\x18\x0e \x01(\tR\x0eoptionalString:T\n" +
	"\x0eoptional_bytes\x12-.goproto.proto.testeditions.TestAllExtensions\x18\x0f \x01(\fR\roptionalBytes:\x85\x01\n" +
	"\roptionalgroup\x12-.goproto.proto.testeditions.TestAllExtensions\x18\x10 \x01(\v2).goproto.proto.testeditions.OptionalGroupB\x05\xaa\x01\x02(\x02R\roptionalgroup:\xa2\x01\n" +
	"\x17optional_nested_message\x12-.goproto.proto.testeditions.TestAllExtensions\x18\x12 \x01(\v2;.goproto.proto.testeditions.TestAllExtensions.NestedMessageR\x15optionalNestedMessage:\x94\x01\n" +
	"\x14optional_nested_enum\x12-.goproto.proto.testeditions.TestAllExtensions\x18\x15 \x01(\x0e23.goproto.proto.testeditions.TestAllTypes.NestedEnumR\x12optionalNestedEnum:T\n" +
	"\x0erepeated_int32\x12-.goproto.proto.testeditions.TestAllExtensions\x18\x1f \x03(\x05R\rrepeatedInt32:T\n" +
	"\x0erepeated_int64\x12-.goproto.proto.testeditions.TestAllExtensions\x18  \x03(\x03R\rrepeatedInt64:V\n" +
	"\x0frepeated_uint32\x12-.goproto.proto.testeditions.TestAllExtensions\x18! \x03(\rR\x0erepeatedUint32:V\n" +
	"\x0frepeated_uint64\x12-.goproto.proto.testeditions.TestAllExtensions\x18\" \x03(\x04R\x0erepeatedUint64:V\n" +
	"\x0frepeated_sint32\x12-.goproto.proto.testeditions.TestAllExtensions\x18# \x03(\x11R\x0erepeatedSint32:V\n" +
	"\x0frepeated_sint64\x12-.goproto.proto.testeditions.TestAllExtensions\x18$ \x03(\x12R\x0erepeatedSint64:X\n" +
	"\x10repeated_fixed32\x12-.goproto.proto.testeditions.TestAllExtensions\x18% \x03(\aR\x0frepeatedFixed32:X\n" +
	"\x10repeated_fixed64\x12-.goproto.proto.testeditions.TestAllExtensions\x18& \x03(\x06R\x0frepeatedFixed64:Z\n" +
	"\x11repeated_sfixed32\x12-.goproto.proto.testeditions.TestAllExtensions\x18' \x03(\x0fR\x10repeatedSfixed32:Z\n" +
	"\x11repeated_sfixed64\x12-.goproto.proto.testeditions.TestAllExtensions\x18( \x03(\x10R\x10repeatedSfixed64:T\n" +
	"\x0erepeated_float\x12-.goproto.proto.testeditions.TestAllExtensions\x18) \x03(\x02R\rrepeatedFloat:V\n" +
	"\x0frepeated_double\x12-.goproto.proto.testeditions.TestAllExtensions\x18* \x03(\x01R\x0erepeatedDouble:R\n" +
	"\rrepeated_bool\x12-.goproto.proto.testeditions.TestAllExtensions\x18+ \x03(\bR\frepeatedBool:V\n" +
	"\x0frepeated_string\x12-.goproto.proto.testeditions.TestAllExtensions\x18, \x03(\tR\x0erepeatedString:T\n" +
	"\x0erepeated_bytes\x12-.goproto.proto.testeditions.TestAllExtensions\x18- \x03(\fR\rrepeatedBytes:\x85\x01\n" +
	"\rrepeatedgroup\x12-.goproto.proto.testeditions.TestAllExtensions\x18. \x03(\v2).goproto.proto.testeditions.RepeatedGroupB\x05\xaa\x01\x02(\x02R\rrepeatedgroup:\xa2\x01\n" +
	"\x17repeated_nested_message\x12-.goproto.proto.testeditions.TestAllExtensions\x180 \x03(\v2;.goproto.proto.testeditions.TestAllExtensions.NestedMessageR\x15repeatedNestedMessage:\x94\x01\n" +
	"\x14repeated_nested_enum\x12-.goproto.proto.testeditions.TestAllExtensions\x183 \x03(\x0e23.goproto.proto.testeditions.TestAllTypes.NestedEnumR\x12repeatedNestedEnum:V\n" +
	"\rdefault_int32\x12-.goproto.proto.testeditions.TestAllExtensions\x18Q \x01(\x05:\x0281R\fdefaultInt32:V\n" +
	"\rdefault_int64\x12-.goproto.proto.testeditions.TestAllExtensions\x18R \x01(\x03:\x0282R\fdefaultInt64:X\n" +
	"\x0edefault_uint32\x12-.goproto.proto.testeditions.TestAllExtensions\x18S \x01(\r:\x0283R\rdefaultUint32:X\n" +
	"\x0edefault_uint64\x12-.goproto.proto.testeditions.TestAllExtensions\x18T \x01(\x04:\x0284R\rdefaultUint64:Y\n" +
	"\x0edefault_sint32\x12-.goproto.proto.testeditions.TestAllExtensions\x18U \x01(\x11:\x03-85R\rdefaultSint32:X\n" +
	"\x0edefault_sint64\x12-.goproto.proto.testeditions.TestAllExtensions\x18V \x01(\x12:\x0286R\rdefaultSint64:Z\n" +
	"\x0fdefault_fixed32\x12-.goproto.proto.testeditions.TestAllExtensions\x18W \x01(\a:\x0287R\x0edefaultFixed32:Z\n" +
	"\x0fdefault_fixed64\x12-.goproto.proto.testeditions.TestAllExtensions\x18X \x01(\x06:\x0288R\x0edefaultFixed64:\\\n" +
	"\x10default_sfixed32\x12-.goproto.proto.testeditions.TestAllExtensions\x18Y \x01(\x0f:\x0289R\x0fdefaultSfixed32:]\n" +
	"\x10default_sfixed64\x12-.goproto.proto.testeditions.TestAllExtensions\x18P \x01(\x10:\x03-90R\x0fdefaultSfixed64:X\n" +
	"\rdefault_float\x12-.goproto.proto.testeditions.TestAllExtensions\x18[ \x01(\x02:\x0491.5R\fdefaultFloat:[\n" +
	"\x0edefault_double\x12-.goproto.proto.testeditions.TestAllExtensions\x18\\ \x01(\x01:\x0592000R\rdefaultDouble:V\n" +
	"\fdefault_bool\x12-.goproto.proto.testeditions.TestAllExtensions\x18] \x01(\b:\x04trueR\vdefaultBool:[\n" +
	"\x0edefault_string\x12-.goproto.proto.testeditions.TestAllExtensions\x18^ \x01(\t:\x05helloR\rdefaultString:Y\n" +
	"\rdefault_bytes\x12-.goproto.proto.testeditions.TestAllExtensions\x18_ \x01(\f:\x05worldR\fdefaultBytes:p\n" +
	"\x06single\x12-.goproto.proto.testeditions.TestAllExtensions\x18\xe8\a \x01(\v2(.goproto.proto.testeditions.TestRequiredR\x06single:n\n" +
	"\x05multi\x12-.goproto.proto.testeditions.TestAllExtensions\x18\xe9\a \x03(\v2(.goproto.proto.testeditions.TestRequiredR\x05multi:m\n" +
	"\x19global_expanded_extension\x121.goproto.proto.testeditions.TestFeatureResolution\x18\x02 \x03(\x05R\x17globalExpandedExtension:\x83\x01\n" +
	"!global_packed_extension_overriden\x121.goproto.proto.testeditions.TestFeatureResolution\x18\x03 \x03(\x05B\x05\xaa\x01\x02\x18\x01R\x1eglobalPackedExtensionOverridenBDZ;google.golang.org/protobuf/internal/testprotos/testeditions\x92\x03\x04\x18\x02 \x03b\beditionsp\xe8\a"

var (
	file_internal_testprotos_testeditions_test_extension_proto_rawDescOnce sync.Once
	file_internal_testprotos_testeditions_test_extension_proto_rawDescData []byte
)

func file_internal_testprotos_testeditions_test_extension_proto_rawDescGZIP() []byte {
	file_internal_testprotos_testeditions_test_extension_proto_rawDescOnce.Do(func() {
		file_internal_testprotos_testeditions_test_extension_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_internal_testprotos_testeditions_test_extension_proto_rawDesc), len(file_internal_testprotos_testeditions_test_extension_proto_rawDesc)))
	})
	return file_internal_testprotos_testeditions_test_extension_proto_rawDescData
}

var file_internal_testprotos_testeditions_test_extension_proto_msgTypes = make([]protoimpl.MessageInfo, 6)
var file_internal_testprotos_testeditions_test_extension_proto_goTypes = []any{
	(*TestAllExtensions)(nil),               // 0: goproto.proto.testeditions.TestAllExtensions
	(*OptionalGroup)(nil),                   // 1: goproto.proto.testeditions.OptionalGroup
	(*RepeatedGroup)(nil),                   // 2: goproto.proto.testeditions.RepeatedGroup
	(*TestFeatureResolution)(nil),           // 3: goproto.proto.testeditions.TestFeatureResolution
	(*RepeatedFieldEncoding)(nil),           // 4: goproto.proto.testeditions.RepeatedFieldEncoding
	(*TestAllExtensions_NestedMessage)(nil), // 5: goproto.proto.testeditions.TestAllExtensions.NestedMessage
	(TestAllTypes_NestedEnum)(0),            // 6: goproto.proto.testeditions.TestAllTypes.NestedEnum
	(*TestRequired)(nil),                    // 7: goproto.proto.testeditions.TestRequired
}
var file_internal_testprotos_testeditions_test_extension_proto_depIdxs = []int32{
	5,  // 0: goproto.proto.testeditions.OptionalGroup.optional_nested_message:type_name -> goproto.proto.testeditions.TestAllExtensions.NestedMessage
	5,  // 1: goproto.proto.testeditions.RepeatedGroup.optional_nested_message:type_name -> goproto.proto.testeditions.TestAllExtensions.NestedMessage
	0,  // 2: goproto.proto.testeditions.TestAllExtensions.NestedMessage.corecursive:type_name -> goproto.proto.testeditions.TestAllExtensions
	0,  // 3: goproto.proto.testeditions.optional_int32:extendee -> goproto.proto.testeditions.TestAllExtensions
	0,  // 4: goproto.proto.testeditions.optional_int64:extendee -> goproto.proto.testeditions.TestAllExtensions
	0,  // 5: goproto.proto.testeditions.optional_uint32:extendee -> goproto.proto.testeditions.TestAllExtensions
	0,  // 6: goproto.proto.testeditions.optional_uint64:extendee -> goproto.proto.testeditions.TestAllExtensions
	0,  // 7: goproto.proto.testeditions.optional_sint32:extendee -> goproto.proto.testeditions.TestAllExtensions
	0,  // 8: goproto.proto.testeditions.optional_sint64:extendee -> goproto.proto.testeditions.TestAllExtensions
	0,  // 9: goproto.proto.testeditions.optional_fixed32:extendee -> goproto.proto.testeditions.TestAllExtensions
	0,  // 10: goproto.proto.testeditions.optional_fixed64:extendee -> goproto.proto.testeditions.TestAllExtensions
	0,  // 11: goproto.proto.testeditions.optional_sfixed32:extendee -> goproto.proto.testeditions.TestAllExtensions
	0,  // 12: goproto.proto.testeditions.optional_sfixed64:extendee -> goproto.proto.testeditions.TestAllExtensions
	0,  // 13: goproto.proto.testeditions.optional_float:extendee -> goproto.proto.testeditions.TestAllExtensions
	0,  // 14: goproto.proto.testeditions.optional_double:extendee -> goproto.proto.testeditions.TestAllExtensions
	0,  // 15: goproto.proto.testeditions.optional_bool:extendee -> goproto.proto.testeditions.TestAllExtensions
	0,  // 16: goproto.proto.testeditions.optional_string:extendee -> goproto.proto.testeditions.TestAllExtensions
	0,  // 17: goproto.proto.testeditions.optional_bytes:extendee -> goproto.proto.testeditions.TestAllExtensions
	0,  // 18: goproto.proto.testeditions.optionalgroup:extendee -> goproto.proto.testeditions.TestAllExtensions
	0,  // 19: goproto.proto.testeditions.optional_nested_message:extendee -> goproto.proto.testeditions.TestAllExtensions
	0,  // 20: goproto.proto.testeditions.optional_nested_enum:extendee -> goproto.proto.testeditions.TestAllExtensions
	0,  // 21: goproto.proto.testeditions.repeated_int32:extendee -> goproto.proto.testeditions.TestAllExtensions
	0,  // 22: goproto.proto.testeditions.repeated_int64:extendee -> goproto.proto.testeditions.TestAllExtensions
	0,  // 23: goproto.proto.testeditions.repeated_uint32:extendee -> goproto.proto.testeditions.TestAllExtensions
	0,  // 24: goproto.proto.testeditions.repeated_uint64:extendee -> goproto.proto.testeditions.TestAllExtensions
	0,  // 25: goproto.proto.testeditions.repeated_sint32:extendee -> goproto.proto.testeditions.TestAllExtensions
	0,  // 26: goproto.proto.testeditions.repeated_sint64:extendee -> goproto.proto.testeditions.TestAllExtensions
	0,  // 27: goproto.proto.testeditions.repeated_fixed32:extendee -> goproto.proto.testeditions.TestAllExtensions
	0,  // 28: goproto.proto.testeditions.repeated_fixed64:extendee -> goproto.proto.testeditions.TestAllExtensions
	0,  // 29: goproto.proto.testeditions.repeated_sfixed32:extendee -> goproto.proto.testeditions.TestAllExtensions
	0,  // 30: goproto.proto.testeditions.repeated_sfixed64:extendee -> goproto.proto.testeditions.TestAllExtensions
	0,  // 31: goproto.proto.testeditions.repeated_float:extendee -> goproto.proto.testeditions.TestAllExtensions
	0,  // 32: goproto.proto.testeditions.repeated_double:extendee -> goproto.proto.testeditions.TestAllExtensions
	0,  // 33: goproto.proto.testeditions.repeated_bool:extendee -> goproto.proto.testeditions.TestAllExtensions
	0,  // 34: goproto.proto.testeditions.repeated_string:extendee -> goproto.proto.testeditions.TestAllExtensions
	0,  // 35: goproto.proto.testeditions.repeated_bytes:extendee -> goproto.proto.testeditions.TestAllExtensions
	0,  // 36: goproto.proto.testeditions.repeatedgroup:extendee -> goproto.proto.testeditions.TestAllExtensions
	0,  // 37: goproto.proto.testeditions.repeated_nested_message:extendee -> goproto.proto.testeditions.TestAllExtensions
	0,  // 38: goproto.proto.testeditions.repeated_nested_enum:extendee -> goproto.proto.testeditions.TestAllExtensions
	0,  // 39: goproto.proto.testeditions.default_int32:extendee -> goproto.proto.testeditions.TestAllExtensions
	0,  // 40: goproto.proto.testeditions.default_int64:extendee -> goproto.proto.testeditions.TestAllExtensions
	0,  // 41: goproto.proto.testeditions.default_uint32:extendee -> goproto.proto.testeditions.TestAllExtensions
	0,  // 42: goproto.proto.testeditions.default_uint64:extendee -> goproto.proto.testeditions.TestAllExtensions
	0,  // 43: goproto.proto.testeditions.default_sint32:extendee -> goproto.proto.testeditions.TestAllExtensions
	0,  // 44: goproto.proto.testeditions.default_sint64:extendee -> goproto.proto.testeditions.TestAllExtensions
	0,  // 45: goproto.proto.testeditions.default_fixed32:extendee -> goproto.proto.testeditions.TestAllExtensions
	0,  // 46: goproto.proto.testeditions.default_fixed64:extendee -> goproto.proto.testeditions.TestAllExtensions
	0,  // 47: goproto.proto.testeditions.default_sfixed32:extendee -> goproto.proto.testeditions.TestAllExtensions
	0,  // 48: goproto.proto.testeditions.default_sfixed64:extendee -> goproto.proto.testeditions.TestAllExtensions
	0,  // 49: goproto.proto.testeditions.default_float:extendee -> goproto.proto.testeditions.TestAllExtensions
	0,  // 50: goproto.proto.testeditions.default_double:extendee -> goproto.proto.testeditions.TestAllExtensions
	0,  // 51: goproto.proto.testeditions.default_bool:extendee -> goproto.proto.testeditions.TestAllExtensions
	0,  // 52: goproto.proto.testeditions.default_string:extendee -> goproto.proto.testeditions.TestAllExtensions
	0,  // 53: goproto.proto.testeditions.default_bytes:extendee -> goproto.proto.testeditions.TestAllExtensions
	0,  // 54: goproto.proto.testeditions.single:extendee -> goproto.proto.testeditions.TestAllExtensions
	0,  // 55: goproto.proto.testeditions.multi:extendee -> goproto.proto.testeditions.TestAllExtensions
	3,  // 56: goproto.proto.testeditions.global_expanded_extension:extendee -> goproto.proto.testeditions.TestFeatureResolution
	3,  // 57: goproto.proto.testeditions.global_packed_extension_overriden:extendee -> goproto.proto.testeditions.TestFeatureResolution
	3,  // 58: goproto.proto.testeditions.RepeatedFieldEncoding.message_expanded_extension:extendee -> goproto.proto.testeditions.TestFeatureResolution
	3,  // 59: goproto.proto.testeditions.RepeatedFieldEncoding.message_packed_extension_overriden:extendee -> goproto.proto.testeditions.TestFeatureResolution
	1,  // 60: goproto.proto.testeditions.optionalgroup:type_name -> goproto.proto.testeditions.OptionalGroup
	5,  // 61: goproto.proto.testeditions.optional_nested_message:type_name -> goproto.proto.testeditions.TestAllExtensions.NestedMessage
	6,  // 62: goproto.proto.testeditions.optional_nested_enum:type_name -> goproto.proto.testeditions.TestAllTypes.NestedEnum
	2,  // 63: goproto.proto.testeditions.repeatedgroup:type_name -> goproto.proto.testeditions.RepeatedGroup
	5,  // 64: goproto.proto.testeditions.repeated_nested_message:type_name -> goproto.proto.testeditions.TestAllExtensions.NestedMessage
	6,  // 65: goproto.proto.testeditions.repeated_nested_enum:type_name -> goproto.proto.testeditions.TestAllTypes.NestedEnum
	7,  // 66: goproto.proto.testeditions.single:type_name -> goproto.proto.testeditions.TestRequired
	7,  // 67: goproto.proto.testeditions.multi:type_name -> goproto.proto.testeditions.TestRequired
	68, // [68:68] is the sub-list for method output_type
	68, // [68:68] is the sub-list for method input_type
	60, // [60:68] is the sub-list for extension type_name
	3,  // [3:60] is the sub-list for extension extendee
	0,  // [0:3] is the sub-list for field type_name
}

func init() { file_internal_testprotos_testeditions_test_extension_proto_init() }
func file_internal_testprotos_testeditions_test_extension_proto_init() {
	if File_internal_testprotos_testeditions_test_extension_proto != nil {
		return
	}
	file_internal_testprotos_testeditions_test_proto_init()
	type x struct{}
	out := protoimpl.TypeBuilder{
		File: protoimpl.DescBuilder{
			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
			RawDescriptor: unsafe.Slice(unsafe.StringData(file_internal_testprotos_testeditions_test_extension_proto_rawDesc), len(file_internal_testprotos_testeditions_test_extension_proto_rawDesc)),
			NumEnums:      0,
			NumMessages:   6,
			NumExtensions: 57,
			NumServices:   0,
		},
		GoTypes:           file_internal_testprotos_testeditions_test_extension_proto_goTypes,
		DependencyIndexes: file_internal_testprotos_testeditions_test_extension_proto_depIdxs,
		MessageInfos:      file_internal_testprotos_testeditions_test_extension_proto_msgTypes,
		ExtensionInfos:    file_internal_testprotos_testeditions_test_extension_proto_extTypes,
	}.Build()
	File_internal_testprotos_testeditions_test_extension_proto = out.File
	file_internal_testprotos_testeditions_test_extension_proto_goTypes = nil
	file_internal_testprotos_testeditions_test_extension_proto_depIdxs = nil
}
