// Code generated by protoc-gen-go. DO NOT EDIT.
// source: legacy/legacy.proto

package legacy

import (
	proto2_v0_0 "google.golang.org/protobuf/internal/testprotos/legacy/proto2.v0.0.0-20160225-2fc053c5"
	proto2_v0_01 "google.golang.org/protobuf/internal/testprotos/legacy/proto2.v0.0.0-20160519-a4ab9ec5"
	proto2_v1_0 "google.golang.org/protobuf/internal/testprotos/legacy/proto2.v1.0.0-20180125-92554152"
	proto2_v1_1 "google.golang.org/protobuf/internal/testprotos/legacy/proto2.v1.1.0-20180430-b4deda09"
	proto2_v1_2 "google.golang.org/protobuf/internal/testprotos/legacy/proto2.v1.2.0-20180814-aa810b61"
	proto2_v1_21 "google.golang.org/protobuf/internal/testprotos/legacy/proto2.v1.2.1-20181126-8d0c54c1"
	proto3_v0_0 "google.golang.org/protobuf/internal/testprotos/legacy/proto3.v0.0.0-20160225-2fc053c5"
	proto3_v0_01 "google.golang.org/protobuf/internal/testprotos/legacy/proto3.v0.0.0-20160519-a4ab9ec5"
	proto3_v1_0 "google.golang.org/protobuf/internal/testprotos/legacy/proto3.v1.0.0-20180125-92554152"
	proto3_v1_1 "google.golang.org/protobuf/internal/testprotos/legacy/proto3.v1.1.0-20180430-b4deda09"
	proto3_v1_2 "google.golang.org/protobuf/internal/testprotos/legacy/proto3.v1.2.0-20180814-aa810b61"
	proto3_v1_21 "google.golang.org/protobuf/internal/testprotos/legacy/proto3.v1.2.1-20181126-8d0c54c1"
	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
	protoiface "google.golang.org/protobuf/runtime/protoiface"
	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
	sync "sync"
)

const (
	// Verify that runtime/protoimpl is sufficiently up-to-date.
	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 0)
	// Verify that this generated code is sufficiently up-to-date.
	_ = protoimpl.EnforceVersion(0 - protoimpl.MinVersion)
)

type Legacy struct {
	state         protoimpl.MessageState
	F1            *proto2_v0_0.Message  `protobuf:"bytes,1,opt,name=f1,proto3" json:"f1,omitempty"`
	F2            *proto3_v0_0.Message  `protobuf:"bytes,2,opt,name=f2,proto3" json:"f2,omitempty"`
	F3            *proto2_v0_01.Message `protobuf:"bytes,3,opt,name=f3,proto3" json:"f3,omitempty"`
	F4            *proto3_v0_01.Message `protobuf:"bytes,4,opt,name=f4,proto3" json:"f4,omitempty"`
	F5            *proto2_v1_0.Message  `protobuf:"bytes,5,opt,name=f5,proto3" json:"f5,omitempty"`
	F6            *proto3_v1_0.Message  `protobuf:"bytes,6,opt,name=f6,proto3" json:"f6,omitempty"`
	F7            *proto2_v1_1.Message  `protobuf:"bytes,7,opt,name=f7,proto3" json:"f7,omitempty"`
	F8            *proto3_v1_1.Message  `protobuf:"bytes,8,opt,name=f8,proto3" json:"f8,omitempty"`
	F9            *proto2_v1_2.Message  `protobuf:"bytes,9,opt,name=f9,proto3" json:"f9,omitempty"`
	F10           *proto3_v1_2.Message  `protobuf:"bytes,10,opt,name=f10,proto3" json:"f10,omitempty"`
	F11           *proto2_v1_21.Message `protobuf:"bytes,11,opt,name=f11,proto3" json:"f11,omitempty"`
	F12           *proto3_v1_21.Message `protobuf:"bytes,12,opt,name=f12,proto3" json:"f12,omitempty"`
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields
}

func (x *Legacy) Reset() {
	*x = Legacy{}
}

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

func (*Legacy) ProtoMessage() {}

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

func (x *Legacy) XXX_Methods() *protoiface.Methods {
	return file_legacy_legacy_proto_msgTypes[0].Methods()
}

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

func (x *Legacy) GetF1() *proto2_v0_0.Message {
	if x != nil {
		return x.F1
	}
	return nil
}

func (x *Legacy) GetF2() *proto3_v0_0.Message {
	if x != nil {
		return x.F2
	}
	return nil
}

func (x *Legacy) GetF3() *proto2_v0_01.Message {
	if x != nil {
		return x.F3
	}
	return nil
}

func (x *Legacy) GetF4() *proto3_v0_01.Message {
	if x != nil {
		return x.F4
	}
	return nil
}

func (x *Legacy) GetF5() *proto2_v1_0.Message {
	if x != nil {
		return x.F5
	}
	return nil
}

func (x *Legacy) GetF6() *proto3_v1_0.Message {
	if x != nil {
		return x.F6
	}
	return nil
}

func (x *Legacy) GetF7() *proto2_v1_1.Message {
	if x != nil {
		return x.F7
	}
	return nil
}

func (x *Legacy) GetF8() *proto3_v1_1.Message {
	if x != nil {
		return x.F8
	}
	return nil
}

func (x *Legacy) GetF9() *proto2_v1_2.Message {
	if x != nil {
		return x.F9
	}
	return nil
}

func (x *Legacy) GetF10() *proto3_v1_2.Message {
	if x != nil {
		return x.F10
	}
	return nil
}

func (x *Legacy) GetF11() *proto2_v1_21.Message {
	if x != nil {
		return x.F11
	}
	return nil
}

func (x *Legacy) GetF12() *proto3_v1_21.Message {
	if x != nil {
		return x.F12
	}
	return nil
}

var File_legacy_legacy_proto protoreflect.FileDescriptor

var file_legacy_legacy_proto_rawDesc = []byte{
	0x0a, 0x13, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x2f, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x2e,
	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x11, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, 0x6f,
	0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x1a, 0x31, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79,
	0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x76, 0x30, 0x2e, 0x30, 0x2e, 0x30, 0x2d, 0x32,
	0x30, 0x31, 0x36, 0x30, 0x32, 0x32, 0x35, 0x2d, 0x32, 0x66, 0x63, 0x30, 0x35, 0x33, 0x63, 0x35,
	0x2f, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x31, 0x6c, 0x65, 0x67,
	0x61, 0x63, 0x79, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x76, 0x30, 0x2e, 0x30, 0x2e,
	0x30, 0x2d, 0x32, 0x30, 0x31, 0x36, 0x30, 0x32, 0x32, 0x35, 0x2d, 0x32, 0x66, 0x63, 0x30, 0x35,
	0x33, 0x63, 0x35, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x31,
	0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x76, 0x30,
	0x2e, 0x30, 0x2e, 0x30, 0x2d, 0x32, 0x30, 0x31, 0x36, 0x30, 0x35, 0x31, 0x39, 0x2d, 0x61, 0x34,
	0x61, 0x62, 0x39, 0x65, 0x63, 0x35, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74,
	0x6f, 0x1a, 0x31, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
	0x2e, 0x76, 0x30, 0x2e, 0x30, 0x2e, 0x30, 0x2d, 0x32, 0x30, 0x31, 0x36, 0x30, 0x35, 0x31, 0x39,
	0x2d, 0x61, 0x34, 0x61, 0x62, 0x39, 0x65, 0x63, 0x35, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x70,
	0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x31, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x2f, 0x70, 0x72, 0x6f,
	0x74, 0x6f, 0x32, 0x2e, 0x76, 0x31, 0x2e, 0x30, 0x2e, 0x30, 0x2d, 0x32, 0x30, 0x31, 0x38, 0x30,
	0x31, 0x32, 0x35, 0x2d, 0x39, 0x32, 0x35, 0x35, 0x34, 0x31, 0x35, 0x32, 0x2f, 0x74, 0x65, 0x73,
	0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x31, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x2f,
	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x76, 0x31, 0x2e, 0x30, 0x2e, 0x30, 0x2d, 0x32, 0x30,
	0x31, 0x38, 0x30, 0x31, 0x32, 0x35, 0x2d, 0x39, 0x32, 0x35, 0x35, 0x34, 0x31, 0x35, 0x32, 0x2f,
	0x74, 0x65, 0x73, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x31, 0x6c, 0x65, 0x67, 0x61,
	0x63, 0x79, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x76, 0x31, 0x2e, 0x31, 0x2e, 0x30,
	0x2d, 0x32, 0x30, 0x31, 0x38, 0x30, 0x34, 0x33, 0x30, 0x2d, 0x62, 0x34, 0x64, 0x65, 0x64, 0x61,
	0x30, 0x39, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x31, 0x6c,
	0x65, 0x67, 0x61, 0x63, 0x79, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x76, 0x31, 0x2e,
	0x31, 0x2e, 0x30, 0x2d, 0x32, 0x30, 0x31, 0x38, 0x30, 0x34, 0x33, 0x30, 0x2d, 0x62, 0x34, 0x64,
	0x65, 0x64, 0x61, 0x30, 0x39, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
	0x1a, 0x31, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e,
	0x76, 0x31, 0x2e, 0x32, 0x2e, 0x30, 0x2d, 0x32, 0x30, 0x31, 0x38, 0x30, 0x38, 0x31, 0x34, 0x2d,
	0x61, 0x61, 0x38, 0x31, 0x30, 0x62, 0x36, 0x31, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x70, 0x72,
	0x6f, 0x74, 0x6f, 0x1a, 0x31, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x2f, 0x70, 0x72, 0x6f, 0x74,
	0x6f, 0x33, 0x2e, 0x76, 0x31, 0x2e, 0x32, 0x2e, 0x30, 0x2d, 0x32, 0x30, 0x31, 0x38, 0x30, 0x38,
	0x31, 0x34, 0x2d, 0x61, 0x61, 0x38, 0x31, 0x30, 0x62, 0x36, 0x31, 0x2f, 0x74, 0x65, 0x73, 0x74,
	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x31, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x2f, 0x70,
	0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x76, 0x31, 0x2e, 0x32, 0x2e, 0x31, 0x2d, 0x32, 0x30, 0x31,
	0x38, 0x31, 0x31, 0x32, 0x36, 0x2d, 0x38, 0x64, 0x30, 0x63, 0x35, 0x34, 0x63, 0x31, 0x2f, 0x74,
	0x65, 0x73, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x31, 0x6c, 0x65, 0x67, 0x61, 0x63,
	0x79, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x76, 0x31, 0x2e, 0x32, 0x2e, 0x31, 0x2d,
	0x32, 0x30, 0x31, 0x38, 0x31, 0x31, 0x32, 0x36, 0x2d, 0x38, 0x64, 0x30, 0x63, 0x35, 0x34, 0x63,
	0x31, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xde, 0x05, 0x0a,
	0x06, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x12, 0x3a, 0x0a, 0x02, 0x66, 0x31, 0x18, 0x01, 0x20,
	0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, 0x6f, 0x6c,
	0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x5f, 0x32,
	0x30, 0x31, 0x36, 0x30, 0x32, 0x32, 0x35, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52,
	0x02, 0x66, 0x31, 0x12, 0x3a, 0x0a, 0x02, 0x66, 0x32, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32,
	0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e,
	0x6f, 0x72, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x5f, 0x32, 0x30, 0x31, 0x36, 0x30,
	0x32, 0x32, 0x35, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x02, 0x66, 0x32, 0x12,
	0x3a, 0x0a, 0x02, 0x66, 0x33, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x6f,
	0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2e,
	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x5f, 0x32, 0x30, 0x31, 0x36, 0x30, 0x35, 0x31, 0x39, 0x2e,
	0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x02, 0x66, 0x33, 0x12, 0x3a, 0x0a, 0x02, 0x66,
	0x34, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
	0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74,
	0x6f, 0x33, 0x5f, 0x32, 0x30, 0x31, 0x36, 0x30, 0x35, 0x31, 0x39, 0x2e, 0x4d, 0x65, 0x73, 0x73,
	0x61, 0x67, 0x65, 0x52, 0x02, 0x66, 0x34, 0x12, 0x3a, 0x0a, 0x02, 0x66, 0x35, 0x18, 0x05, 0x20,
	0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, 0x6f, 0x6c,
	0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x5f, 0x32,
	0x30, 0x31, 0x38, 0x30, 0x31, 0x32, 0x35, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52,
	0x02, 0x66, 0x35, 0x12, 0x3a, 0x0a, 0x02, 0x66, 0x36, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32,
	0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e,
	0x6f, 0x72, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x5f, 0x32, 0x30, 0x31, 0x38, 0x30,
	0x31, 0x32, 0x35, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x02, 0x66, 0x36, 0x12,
	0x3a, 0x0a, 0x02, 0x66, 0x37, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x6f,
	0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2e,
	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x5f, 0x32, 0x30, 0x31, 0x38, 0x30, 0x34, 0x33, 0x30, 0x2e,
	0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x02, 0x66, 0x37, 0x12, 0x3a, 0x0a, 0x02, 0x66,
	0x38, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
	0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74,
	0x6f, 0x33, 0x5f, 0x32, 0x30, 0x31, 0x38, 0x30, 0x34, 0x33, 0x30, 0x2e, 0x4d, 0x65, 0x73, 0x73,
	0x61, 0x67, 0x65, 0x52, 0x02, 0x66, 0x38, 0x12, 0x3a, 0x0a, 0x02, 0x66, 0x39, 0x18, 0x09, 0x20,
	0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, 0x6f, 0x6c,
	0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x5f, 0x32,
	0x30, 0x31, 0x38, 0x30, 0x38, 0x31, 0x34, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52,
	0x02, 0x66, 0x39, 0x12, 0x3c, 0x0a, 0x03, 0x66, 0x31, 0x30, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b,
	0x32, 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67,
	0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x5f, 0x32, 0x30, 0x31, 0x38,
	0x30, 0x38, 0x31, 0x34, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x03, 0x66, 0x31,
	0x30, 0x12, 0x3c, 0x0a, 0x03, 0x66, 0x31, 0x31, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a,
	0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f,
	0x72, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x5f, 0x32, 0x30, 0x31, 0x38, 0x31, 0x31,
	0x32, 0x36, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x03, 0x66, 0x31, 0x31, 0x12,
	0x3c, 0x0a, 0x03, 0x66, 0x31, 0x32, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67,
	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67,
	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x5f, 0x32, 0x30, 0x31, 0x38, 0x31, 0x31, 0x32, 0x36,
	0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x03, 0x66, 0x31, 0x32, 0x42, 0x37, 0x5a,
	0x35, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f,
	0x72, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x69, 0x6e, 0x74, 0x65,
	0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x2f,
	0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}

var (
	file_legacy_legacy_proto_rawDescOnce sync.Once
	file_legacy_legacy_proto_rawDescData = file_legacy_legacy_proto_rawDesc
)

func file_legacy_legacy_proto_rawDescGZIP() []byte {
	file_legacy_legacy_proto_rawDescOnce.Do(func() {
		file_legacy_legacy_proto_rawDescData = protoimpl.X.CompressGZIP(file_legacy_legacy_proto_rawDescData)
	})
	return file_legacy_legacy_proto_rawDescData
}

var file_legacy_legacy_proto_msgTypes = make([]protoimpl.MessageInfo, 1)
var file_legacy_legacy_proto_goTypes = []interface{}{
	(*Legacy)(nil),               // 0: google.golang.org.Legacy
	(*proto2_v0_0.Message)(nil),  // 1: google.golang.org.proto2_20160225.Message
	(*proto3_v0_0.Message)(nil),  // 2: google.golang.org.proto3_20160225.Message
	(*proto2_v0_01.Message)(nil), // 3: google.golang.org.proto2_20160519.Message
	(*proto3_v0_01.Message)(nil), // 4: google.golang.org.proto3_20160519.Message
	(*proto2_v1_0.Message)(nil),  // 5: google.golang.org.proto2_20180125.Message
	(*proto3_v1_0.Message)(nil),  // 6: google.golang.org.proto3_20180125.Message
	(*proto2_v1_1.Message)(nil),  // 7: google.golang.org.proto2_20180430.Message
	(*proto3_v1_1.Message)(nil),  // 8: google.golang.org.proto3_20180430.Message
	(*proto2_v1_2.Message)(nil),  // 9: google.golang.org.proto2_20180814.Message
	(*proto3_v1_2.Message)(nil),  // 10: google.golang.org.proto3_20180814.Message
	(*proto2_v1_21.Message)(nil), // 11: google.golang.org.proto2_20181126.Message
	(*proto3_v1_21.Message)(nil), // 12: google.golang.org.proto3_20181126.Message
}
var file_legacy_legacy_proto_depIdxs = []int32{
	1,  // google.golang.org.Legacy.f1:type_name -> google.golang.org.proto2_20160225.Message
	2,  // google.golang.org.Legacy.f2:type_name -> google.golang.org.proto3_20160225.Message
	3,  // google.golang.org.Legacy.f3:type_name -> google.golang.org.proto2_20160519.Message
	4,  // google.golang.org.Legacy.f4:type_name -> google.golang.org.proto3_20160519.Message
	5,  // google.golang.org.Legacy.f5:type_name -> google.golang.org.proto2_20180125.Message
	6,  // google.golang.org.Legacy.f6:type_name -> google.golang.org.proto3_20180125.Message
	7,  // google.golang.org.Legacy.f7:type_name -> google.golang.org.proto2_20180430.Message
	8,  // google.golang.org.Legacy.f8:type_name -> google.golang.org.proto3_20180430.Message
	9,  // google.golang.org.Legacy.f9:type_name -> google.golang.org.proto2_20180814.Message
	10, // google.golang.org.Legacy.f10:type_name -> google.golang.org.proto3_20180814.Message
	11, // google.golang.org.Legacy.f11:type_name -> google.golang.org.proto2_20181126.Message
	12, // google.golang.org.Legacy.f12:type_name -> google.golang.org.proto3_20181126.Message
	12, // starting offset of method output_type sub-list
	12, // starting offset of method input_type sub-list
	12, // starting offset of extension type_name sub-list
	12, // starting offset of extension extendee sub-list
	0,  // starting offset of field type_name sub-list
}

func init() { file_legacy_legacy_proto_init() }
func file_legacy_legacy_proto_init() {
	if File_legacy_legacy_proto != nil {
		return
	}
	if !protoimpl.UnsafeEnabled {
		file_legacy_legacy_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Legacy); i {
			case 0:
				return &v.state
			case 13:
				return &v.sizeCache
			case 14:
				return &v.unknownFields
			default:
				return nil
			}
		}
	}
	out := protoimpl.TypeBuilder{
		File: protoimpl.DescBuilder{
			RawDescriptor: file_legacy_legacy_proto_rawDesc,
			NumEnums:      0,
			NumMessages:   1,
			NumExtensions: 0,
			NumServices:   0,
		},
		GoTypes:           file_legacy_legacy_proto_goTypes,
		DependencyIndexes: file_legacy_legacy_proto_depIdxs,
		MessageInfos:      file_legacy_legacy_proto_msgTypes,
	}.Build()
	File_legacy_legacy_proto = out.File
	file_legacy_legacy_proto_rawDesc = nil
	file_legacy_legacy_proto_goTypes = nil
	file_legacy_legacy_proto_depIdxs = nil
}
