// Code generated by protoc-gen-gogo.
// source: deepcopy.proto
// DO NOT EDIT!

/*
Package test is a generated protocol buffer package.

It is generated from these files:
	deepcopy.proto

It has these top-level messages:
	BasicScalar
	RepeatedScalar
	RepeatedScalarPacked
	ExternalStruct
	RepeatedExternalStruct
	NonNullableExternalStruct
	RepeatedNonNullableExternalStruct
	MapStruct
*/
package test

import proto "github.com/gogo/protobuf/proto"
import fmt "fmt"
import math "math"
import _ "github.com/gogo/protobuf/gogoproto"

import bytes "bytes"

import strings "strings"
import reflect "reflect"
import github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys"

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
const _ = proto.GoGoProtoPackageIsVersion1

type BasicScalar struct {
	Field1  float64 `protobuf:"fixed64,1,opt,name=Field1,json=field1,proto3" json:"Field1,omitempty"`
	Field2  float32 `protobuf:"fixed32,2,opt,name=Field2,json=field2,proto3" json:"Field2,omitempty"`
	Field3  int32   `protobuf:"varint,3,opt,name=Field3,json=field3,proto3" json:"Field3,omitempty"`
	Field4  int64   `protobuf:"varint,4,opt,name=Field4,json=field4,proto3" json:"Field4,omitempty"`
	Field5  uint32  `protobuf:"varint,5,opt,name=Field5,json=field5,proto3" json:"Field5,omitempty"`
	Field6  uint64  `protobuf:"varint,6,opt,name=Field6,json=field6,proto3" json:"Field6,omitempty"`
	Field7  int32   `protobuf:"zigzag32,7,opt,name=Field7,json=field7,proto3" json:"Field7,omitempty"`
	Field8  int64   `protobuf:"zigzag64,8,opt,name=Field8,json=field8,proto3" json:"Field8,omitempty"`
	Field9  uint32  `protobuf:"fixed32,9,opt,name=Field9,json=field9,proto3" json:"Field9,omitempty"`
	Field10 int32   `protobuf:"fixed32,10,opt,name=Field10,json=field10,proto3" json:"Field10,omitempty"`
	Field11 uint64  `protobuf:"fixed64,11,opt,name=Field11,json=field11,proto3" json:"Field11,omitempty"`
	Field12 int64   `protobuf:"fixed64,12,opt,name=Field12,json=field12,proto3" json:"Field12,omitempty"`
	Field13 bool    `protobuf:"varint,13,opt,name=Field13,json=field13,proto3" json:"Field13,omitempty"`
	Field14 string  `protobuf:"bytes,14,opt,name=Field14,json=field14,proto3" json:"Field14,omitempty"`
	Field15 []byte  `protobuf:"bytes,15,opt,name=Field15,json=field15,proto3" json:"Field15,omitempty"`
}

func (m *BasicScalar) Reset()                    { *m = BasicScalar{} }
func (*BasicScalar) ProtoMessage()               {}
func (*BasicScalar) Descriptor() ([]byte, []int) { return fileDescriptorDeepcopy, []int{0} }

type RepeatedScalar struct {
	Field1  []float64 `protobuf:"fixed64,1,rep,name=Field1,json=field1" json:"Field1,omitempty"`
	Field2  []float32 `protobuf:"fixed32,2,rep,name=Field2,json=field2" json:"Field2,omitempty"`
	Field3  []int32   `protobuf:"varint,3,rep,name=Field3,json=field3" json:"Field3,omitempty"`
	Field4  []int64   `protobuf:"varint,4,rep,name=Field4,json=field4" json:"Field4,omitempty"`
	Field5  []uint32  `protobuf:"varint,5,rep,name=Field5,json=field5" json:"Field5,omitempty"`
	Field6  []uint64  `protobuf:"varint,6,rep,name=Field6,json=field6" json:"Field6,omitempty"`
	Field7  []int32   `protobuf:"zigzag32,7,rep,name=Field7,json=field7" json:"Field7,omitempty"`
	Field8  []int64   `protobuf:"zigzag64,8,rep,name=Field8,json=field8" json:"Field8,omitempty"`
	Field9  []uint32  `protobuf:"fixed32,9,rep,name=Field9,json=field9" json:"Field9,omitempty"`
	Field10 []int32   `protobuf:"fixed32,10,rep,name=Field10,json=field10" json:"Field10,omitempty"`
	Field11 []uint64  `protobuf:"fixed64,11,rep,name=Field11,json=field11" json:"Field11,omitempty"`
	Field12 []int64   `protobuf:"fixed64,12,rep,name=Field12,json=field12" json:"Field12,omitempty"`
	Field13 []bool    `protobuf:"varint,13,rep,name=Field13,json=field13" json:"Field13,omitempty"`
	Field14 []string  `protobuf:"bytes,14,rep,name=Field14,json=field14" json:"Field14,omitempty"`
	Field15 [][]byte  `protobuf:"bytes,15,rep,name=Field15,json=field15" json:"Field15,omitempty"`
}

func (m *RepeatedScalar) Reset()                    { *m = RepeatedScalar{} }
func (*RepeatedScalar) ProtoMessage()               {}
func (*RepeatedScalar) Descriptor() ([]byte, []int) { return fileDescriptorDeepcopy, []int{1} }

type RepeatedScalarPacked struct {
	Field1  []float64 `protobuf:"fixed64,1,rep,packed,name=Field1,json=field1" json:"Field1,omitempty"`
	Field2  []float32 `protobuf:"fixed32,2,rep,packed,name=Field2,json=field2" json:"Field2,omitempty"`
	Field3  []int32   `protobuf:"varint,3,rep,packed,name=Field3,json=field3" json:"Field3,omitempty"`
	Field4  []int64   `protobuf:"varint,4,rep,packed,name=Field4,json=field4" json:"Field4,omitempty"`
	Field5  []uint32  `protobuf:"varint,5,rep,packed,name=Field5,json=field5" json:"Field5,omitempty"`
	Field6  []uint64  `protobuf:"varint,6,rep,packed,name=Field6,json=field6" json:"Field6,omitempty"`
	Field7  []int32   `protobuf:"zigzag32,7,rep,packed,name=Field7,json=field7" json:"Field7,omitempty"`
	Field8  []int64   `protobuf:"zigzag64,8,rep,packed,name=Field8,json=field8" json:"Field8,omitempty"`
	Field9  []uint32  `protobuf:"fixed32,9,rep,packed,name=Field9,json=field9" json:"Field9,omitempty"`
	Field10 []int32   `protobuf:"fixed32,10,rep,packed,name=Field10,json=field10" json:"Field10,omitempty"`
	Field11 []uint64  `protobuf:"fixed64,11,rep,packed,name=Field11,json=field11" json:"Field11,omitempty"`
	Field12 []int64   `protobuf:"fixed64,12,rep,packed,name=Field12,json=field12" json:"Field12,omitempty"`
	Field13 []bool    `protobuf:"varint,13,rep,packed,name=Field13,json=field13" json:"Field13,omitempty"`
}

func (m *RepeatedScalarPacked) Reset()                    { *m = RepeatedScalarPacked{} }
func (*RepeatedScalarPacked) ProtoMessage()               {}
func (*RepeatedScalarPacked) Descriptor() ([]byte, []int) { return fileDescriptorDeepcopy, []int{2} }

type ExternalStruct struct {
	Field1 *BasicScalar          `protobuf:"bytes,1,opt,name=Field1,json=field1" json:"Field1,omitempty"`
	Field2 *RepeatedScalar       `protobuf:"bytes,2,opt,name=Field2,json=field2" json:"Field2,omitempty"`
	Field3 *RepeatedScalarPacked `protobuf:"bytes,3,opt,name=Field3,json=field3" json:"Field3,omitempty"`
}

func (m *ExternalStruct) Reset()                    { *m = ExternalStruct{} }
func (*ExternalStruct) ProtoMessage()               {}
func (*ExternalStruct) Descriptor() ([]byte, []int) { return fileDescriptorDeepcopy, []int{3} }

type RepeatedExternalStruct struct {
	Field1 []*BasicScalar          `protobuf:"bytes,1,rep,name=Field1,json=field1" json:"Field1,omitempty"`
	Field2 []*RepeatedScalar       `protobuf:"bytes,2,rep,name=Field2,json=field2" json:"Field2,omitempty"`
	Field3 []*RepeatedScalarPacked `protobuf:"bytes,3,rep,name=Field3,json=field3" json:"Field3,omitempty"`
}

func (m *RepeatedExternalStruct) Reset()                    { *m = RepeatedExternalStruct{} }
func (*RepeatedExternalStruct) ProtoMessage()               {}
func (*RepeatedExternalStruct) Descriptor() ([]byte, []int) { return fileDescriptorDeepcopy, []int{4} }

type NonNullableExternalStruct struct {
	Field1 BasicScalar          `protobuf:"bytes,1,opt,name=Field1,json=field1" json:"Field1"`
	Field2 RepeatedScalar       `protobuf:"bytes,2,opt,name=Field2,json=field2" json:"Field2"`
	Field3 RepeatedScalarPacked `protobuf:"bytes,3,opt,name=Field3,json=field3" json:"Field3"`
}

func (m *NonNullableExternalStruct) Reset()      { *m = NonNullableExternalStruct{} }
func (*NonNullableExternalStruct) ProtoMessage() {}
func (*NonNullableExternalStruct) Descriptor() ([]byte, []int) {
	return fileDescriptorDeepcopy, []int{5}
}

type RepeatedNonNullableExternalStruct struct {
	Field1 []BasicScalar          `protobuf:"bytes,1,rep,name=Field1,json=field1" json:"Field1"`
	Field2 []RepeatedScalar       `protobuf:"bytes,2,rep,name=Field2,json=field2" json:"Field2"`
	Field3 []RepeatedScalarPacked `protobuf:"bytes,3,rep,name=Field3,json=field3" json:"Field3"`
}

func (m *RepeatedNonNullableExternalStruct) Reset()      { *m = RepeatedNonNullableExternalStruct{} }
func (*RepeatedNonNullableExternalStruct) ProtoMessage() {}
func (*RepeatedNonNullableExternalStruct) Descriptor() ([]byte, []int) {
	return fileDescriptorDeepcopy, []int{6}
}

type MapStruct struct {
	NullableMap    map[string]*BasicScalar `protobuf:"bytes,1,rep,name=nullable_map,json=nullableMap" json:"nullable_map,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"`
	NonnullableMap map[string]BasicScalar  `protobuf:"bytes,2,rep,name=nonnullable_map,json=nonnullableMap" json:"nonnullable_map" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"`
}

func (m *MapStruct) Reset()                    { *m = MapStruct{} }
func (*MapStruct) ProtoMessage()               {}
func (*MapStruct) Descriptor() ([]byte, []int) { return fileDescriptorDeepcopy, []int{7} }

func init() {
	proto.RegisterType((*BasicScalar)(nil), "test.BasicScalar")
	proto.RegisterType((*RepeatedScalar)(nil), "test.RepeatedScalar")
	proto.RegisterType((*RepeatedScalarPacked)(nil), "test.RepeatedScalarPacked")
	proto.RegisterType((*ExternalStruct)(nil), "test.ExternalStruct")
	proto.RegisterType((*RepeatedExternalStruct)(nil), "test.RepeatedExternalStruct")
	proto.RegisterType((*NonNullableExternalStruct)(nil), "test.NonNullableExternalStruct")
	proto.RegisterType((*RepeatedNonNullableExternalStruct)(nil), "test.RepeatedNonNullableExternalStruct")
	proto.RegisterType((*MapStruct)(nil), "test.MapStruct")
}

func (m *BasicScalar) Copy() *BasicScalar {
	if m == nil {
		return nil
	}

	o := &BasicScalar{
		Field1:  m.Field1,
		Field2:  m.Field2,
		Field3:  m.Field3,
		Field4:  m.Field4,
		Field5:  m.Field5,
		Field6:  m.Field6,
		Field7:  m.Field7,
		Field8:  m.Field8,
		Field9:  m.Field9,
		Field10: m.Field10,
		Field11: m.Field11,
		Field12: m.Field12,
		Field13: m.Field13,
		Field14: m.Field14,
		Field15: m.Field15,
	}

	return o
}

func (m *RepeatedScalar) Copy() *RepeatedScalar {
	if m == nil {
		return nil
	}

	o := &RepeatedScalar{}

	if m.Field1 != nil {
		o.Field1 = make([]float64, 0, len(m.Field1))
		for _, v := range m.Field1 {
			o.Field1 = append(o.Field1, v)
		}
	}

	if m.Field2 != nil {
		o.Field2 = make([]float32, 0, len(m.Field2))
		for _, v := range m.Field2 {
			o.Field2 = append(o.Field2, v)
		}
	}

	if m.Field3 != nil {
		o.Field3 = make([]int32, 0, len(m.Field3))
		for _, v := range m.Field3 {
			o.Field3 = append(o.Field3, v)
		}
	}

	if m.Field4 != nil {
		o.Field4 = make([]int64, 0, len(m.Field4))
		for _, v := range m.Field4 {
			o.Field4 = append(o.Field4, v)
		}
	}

	if m.Field5 != nil {
		o.Field5 = make([]uint32, 0, len(m.Field5))
		for _, v := range m.Field5 {
			o.Field5 = append(o.Field5, v)
		}
	}

	if m.Field6 != nil {
		o.Field6 = make([]uint64, 0, len(m.Field6))
		for _, v := range m.Field6 {
			o.Field6 = append(o.Field6, v)
		}
	}

	if m.Field7 != nil {
		o.Field7 = make([]int32, 0, len(m.Field7))
		for _, v := range m.Field7 {
			o.Field7 = append(o.Field7, v)
		}
	}

	if m.Field8 != nil {
		o.Field8 = make([]int64, 0, len(m.Field8))
		for _, v := range m.Field8 {
			o.Field8 = append(o.Field8, v)
		}
	}

	if m.Field9 != nil {
		o.Field9 = make([]uint32, 0, len(m.Field9))
		for _, v := range m.Field9 {
			o.Field9 = append(o.Field9, v)
		}
	}

	if m.Field10 != nil {
		o.Field10 = make([]int32, 0, len(m.Field10))
		for _, v := range m.Field10 {
			o.Field10 = append(o.Field10, v)
		}
	}

	if m.Field11 != nil {
		o.Field11 = make([]uint64, 0, len(m.Field11))
		for _, v := range m.Field11 {
			o.Field11 = append(o.Field11, v)
		}
	}

	if m.Field12 != nil {
		o.Field12 = make([]int64, 0, len(m.Field12))
		for _, v := range m.Field12 {
			o.Field12 = append(o.Field12, v)
		}
	}

	if m.Field13 != nil {
		o.Field13 = make([]bool, 0, len(m.Field13))
		for _, v := range m.Field13 {
			o.Field13 = append(o.Field13, v)
		}
	}

	if m.Field14 != nil {
		o.Field14 = make([]string, 0, len(m.Field14))
		for _, v := range m.Field14 {
			o.Field14 = append(o.Field14, v)
		}
	}

	if m.Field15 != nil {
		o.Field15 = make([][]byte, 0, len(m.Field15))
		for _, v := range m.Field15 {
			o.Field15 = append(o.Field15, v)
		}
	}

	return o
}

func (m *RepeatedScalarPacked) Copy() *RepeatedScalarPacked {
	if m == nil {
		return nil
	}

	o := &RepeatedScalarPacked{}

	if m.Field1 != nil {
		o.Field1 = make([]float64, 0, len(m.Field1))
		for _, v := range m.Field1 {
			o.Field1 = append(o.Field1, v)
		}
	}

	if m.Field2 != nil {
		o.Field2 = make([]float32, 0, len(m.Field2))
		for _, v := range m.Field2 {
			o.Field2 = append(o.Field2, v)
		}
	}

	if m.Field3 != nil {
		o.Field3 = make([]int32, 0, len(m.Field3))
		for _, v := range m.Field3 {
			o.Field3 = append(o.Field3, v)
		}
	}

	if m.Field4 != nil {
		o.Field4 = make([]int64, 0, len(m.Field4))
		for _, v := range m.Field4 {
			o.Field4 = append(o.Field4, v)
		}
	}

	if m.Field5 != nil {
		o.Field5 = make([]uint32, 0, len(m.Field5))
		for _, v := range m.Field5 {
			o.Field5 = append(o.Field5, v)
		}
	}

	if m.Field6 != nil {
		o.Field6 = make([]uint64, 0, len(m.Field6))
		for _, v := range m.Field6 {
			o.Field6 = append(o.Field6, v)
		}
	}

	if m.Field7 != nil {
		o.Field7 = make([]int32, 0, len(m.Field7))
		for _, v := range m.Field7 {
			o.Field7 = append(o.Field7, v)
		}
	}

	if m.Field8 != nil {
		o.Field8 = make([]int64, 0, len(m.Field8))
		for _, v := range m.Field8 {
			o.Field8 = append(o.Field8, v)
		}
	}

	if m.Field9 != nil {
		o.Field9 = make([]uint32, 0, len(m.Field9))
		for _, v := range m.Field9 {
			o.Field9 = append(o.Field9, v)
		}
	}

	if m.Field10 != nil {
		o.Field10 = make([]int32, 0, len(m.Field10))
		for _, v := range m.Field10 {
			o.Field10 = append(o.Field10, v)
		}
	}

	if m.Field11 != nil {
		o.Field11 = make([]uint64, 0, len(m.Field11))
		for _, v := range m.Field11 {
			o.Field11 = append(o.Field11, v)
		}
	}

	if m.Field12 != nil {
		o.Field12 = make([]int64, 0, len(m.Field12))
		for _, v := range m.Field12 {
			o.Field12 = append(o.Field12, v)
		}
	}

	if m.Field13 != nil {
		o.Field13 = make([]bool, 0, len(m.Field13))
		for _, v := range m.Field13 {
			o.Field13 = append(o.Field13, v)
		}
	}

	return o
}

func (m *ExternalStruct) Copy() *ExternalStruct {
	if m == nil {
		return nil
	}

	o := &ExternalStruct{
		Field1: m.Field1.Copy(),
		Field2: m.Field2.Copy(),
		Field3: m.Field3.Copy(),
	}

	return o
}

func (m *RepeatedExternalStruct) Copy() *RepeatedExternalStruct {
	if m == nil {
		return nil
	}

	o := &RepeatedExternalStruct{}

	if m.Field1 != nil {
		o.Field1 = make([]*BasicScalar, 0, len(m.Field1))
		for _, v := range m.Field1 {
			o.Field1 = append(o.Field1, v.Copy())
		}
	}

	if m.Field2 != nil {
		o.Field2 = make([]*RepeatedScalar, 0, len(m.Field2))
		for _, v := range m.Field2 {
			o.Field2 = append(o.Field2, v.Copy())
		}
	}

	if m.Field3 != nil {
		o.Field3 = make([]*RepeatedScalarPacked, 0, len(m.Field3))
		for _, v := range m.Field3 {
			o.Field3 = append(o.Field3, v.Copy())
		}
	}

	return o
}

func (m *NonNullableExternalStruct) Copy() *NonNullableExternalStruct {
	if m == nil {
		return nil
	}

	o := &NonNullableExternalStruct{
		Field1: *m.Field1.Copy(),
		Field2: *m.Field2.Copy(),
		Field3: *m.Field3.Copy(),
	}

	return o
}

func (m *RepeatedNonNullableExternalStruct) Copy() *RepeatedNonNullableExternalStruct {
	if m == nil {
		return nil
	}

	o := &RepeatedNonNullableExternalStruct{}

	if m.Field1 != nil {
		o.Field1 = make([]BasicScalar, 0, len(m.Field1))
		for _, v := range m.Field1 {
			o.Field1 = append(o.Field1, *v.Copy())
		}
	}

	if m.Field2 != nil {
		o.Field2 = make([]RepeatedScalar, 0, len(m.Field2))
		for _, v := range m.Field2 {
			o.Field2 = append(o.Field2, *v.Copy())
		}
	}

	if m.Field3 != nil {
		o.Field3 = make([]RepeatedScalarPacked, 0, len(m.Field3))
		for _, v := range m.Field3 {
			o.Field3 = append(o.Field3, *v.Copy())
		}
	}

	return o
}

func (m *MapStruct) Copy() *MapStruct {
	if m == nil {
		return nil
	}

	o := &MapStruct{}

	if m.NullableMap != nil {
		o.NullableMap = make(map[string]*BasicScalar)
		for k, v := range m.NullableMap {
			o.NullableMap[k] = v.Copy()
		}
	}

	if m.NonnullableMap != nil {
		o.NonnullableMap = make(map[string]BasicScalar)
		for k, v := range m.NonnullableMap {
			o.NonnullableMap[k] = *v.Copy()
		}
	}

	return o
}

func (this *BasicScalar) Equal(that interface{}) bool {
	if that == nil {
		if this == nil {
			return true
		}
		return false
	}

	that1, ok := that.(*BasicScalar)
	if !ok {
		that2, ok := that.(BasicScalar)
		if ok {
			that1 = &that2
		} else {
			return false
		}
	}
	if that1 == nil {
		if this == nil {
			return true
		}
		return false
	} else if this == nil {
		return false
	}
	if this.Field1 != that1.Field1 {
		return false
	}
	if this.Field2 != that1.Field2 {
		return false
	}
	if this.Field3 != that1.Field3 {
		return false
	}
	if this.Field4 != that1.Field4 {
		return false
	}
	if this.Field5 != that1.Field5 {
		return false
	}
	if this.Field6 != that1.Field6 {
		return false
	}
	if this.Field7 != that1.Field7 {
		return false
	}
	if this.Field8 != that1.Field8 {
		return false
	}
	if this.Field9 != that1.Field9 {
		return false
	}
	if this.Field10 != that1.Field10 {
		return false
	}
	if this.Field11 != that1.Field11 {
		return false
	}
	if this.Field12 != that1.Field12 {
		return false
	}
	if this.Field13 != that1.Field13 {
		return false
	}
	if this.Field14 != that1.Field14 {
		return false
	}
	if !bytes.Equal(this.Field15, that1.Field15) {
		return false
	}
	return true
}
func (this *RepeatedScalar) Equal(that interface{}) bool {
	if that == nil {
		if this == nil {
			return true
		}
		return false
	}

	that1, ok := that.(*RepeatedScalar)
	if !ok {
		that2, ok := that.(RepeatedScalar)
		if ok {
			that1 = &that2
		} else {
			return false
		}
	}
	if that1 == nil {
		if this == nil {
			return true
		}
		return false
	} else if this == nil {
		return false
	}
	if len(this.Field1) != len(that1.Field1) {
		return false
	}
	for i := range this.Field1 {
		if this.Field1[i] != that1.Field1[i] {
			return false
		}
	}
	if len(this.Field2) != len(that1.Field2) {
		return false
	}
	for i := range this.Field2 {
		if this.Field2[i] != that1.Field2[i] {
			return false
		}
	}
	if len(this.Field3) != len(that1.Field3) {
		return false
	}
	for i := range this.Field3 {
		if this.Field3[i] != that1.Field3[i] {
			return false
		}
	}
	if len(this.Field4) != len(that1.Field4) {
		return false
	}
	for i := range this.Field4 {
		if this.Field4[i] != that1.Field4[i] {
			return false
		}
	}
	if len(this.Field5) != len(that1.Field5) {
		return false
	}
	for i := range this.Field5 {
		if this.Field5[i] != that1.Field5[i] {
			return false
		}
	}
	if len(this.Field6) != len(that1.Field6) {
		return false
	}
	for i := range this.Field6 {
		if this.Field6[i] != that1.Field6[i] {
			return false
		}
	}
	if len(this.Field7) != len(that1.Field7) {
		return false
	}
	for i := range this.Field7 {
		if this.Field7[i] != that1.Field7[i] {
			return false
		}
	}
	if len(this.Field8) != len(that1.Field8) {
		return false
	}
	for i := range this.Field8 {
		if this.Field8[i] != that1.Field8[i] {
			return false
		}
	}
	if len(this.Field9) != len(that1.Field9) {
		return false
	}
	for i := range this.Field9 {
		if this.Field9[i] != that1.Field9[i] {
			return false
		}
	}
	if len(this.Field10) != len(that1.Field10) {
		return false
	}
	for i := range this.Field10 {
		if this.Field10[i] != that1.Field10[i] {
			return false
		}
	}
	if len(this.Field11) != len(that1.Field11) {
		return false
	}
	for i := range this.Field11 {
		if this.Field11[i] != that1.Field11[i] {
			return false
		}
	}
	if len(this.Field12) != len(that1.Field12) {
		return false
	}
	for i := range this.Field12 {
		if this.Field12[i] != that1.Field12[i] {
			return false
		}
	}
	if len(this.Field13) != len(that1.Field13) {
		return false
	}
	for i := range this.Field13 {
		if this.Field13[i] != that1.Field13[i] {
			return false
		}
	}
	if len(this.Field14) != len(that1.Field14) {
		return false
	}
	for i := range this.Field14 {
		if this.Field14[i] != that1.Field14[i] {
			return false
		}
	}
	if len(this.Field15) != len(that1.Field15) {
		return false
	}
	for i := range this.Field15 {
		if !bytes.Equal(this.Field15[i], that1.Field15[i]) {
			return false
		}
	}
	return true
}
func (this *RepeatedScalarPacked) Equal(that interface{}) bool {
	if that == nil {
		if this == nil {
			return true
		}
		return false
	}

	that1, ok := that.(*RepeatedScalarPacked)
	if !ok {
		that2, ok := that.(RepeatedScalarPacked)
		if ok {
			that1 = &that2
		} else {
			return false
		}
	}
	if that1 == nil {
		if this == nil {
			return true
		}
		return false
	} else if this == nil {
		return false
	}
	if len(this.Field1) != len(that1.Field1) {
		return false
	}
	for i := range this.Field1 {
		if this.Field1[i] != that1.Field1[i] {
			return false
		}
	}
	if len(this.Field2) != len(that1.Field2) {
		return false
	}
	for i := range this.Field2 {
		if this.Field2[i] != that1.Field2[i] {
			return false
		}
	}
	if len(this.Field3) != len(that1.Field3) {
		return false
	}
	for i := range this.Field3 {
		if this.Field3[i] != that1.Field3[i] {
			return false
		}
	}
	if len(this.Field4) != len(that1.Field4) {
		return false
	}
	for i := range this.Field4 {
		if this.Field4[i] != that1.Field4[i] {
			return false
		}
	}
	if len(this.Field5) != len(that1.Field5) {
		return false
	}
	for i := range this.Field5 {
		if this.Field5[i] != that1.Field5[i] {
			return false
		}
	}
	if len(this.Field6) != len(that1.Field6) {
		return false
	}
	for i := range this.Field6 {
		if this.Field6[i] != that1.Field6[i] {
			return false
		}
	}
	if len(this.Field7) != len(that1.Field7) {
		return false
	}
	for i := range this.Field7 {
		if this.Field7[i] != that1.Field7[i] {
			return false
		}
	}
	if len(this.Field8) != len(that1.Field8) {
		return false
	}
	for i := range this.Field8 {
		if this.Field8[i] != that1.Field8[i] {
			return false
		}
	}
	if len(this.Field9) != len(that1.Field9) {
		return false
	}
	for i := range this.Field9 {
		if this.Field9[i] != that1.Field9[i] {
			return false
		}
	}
	if len(this.Field10) != len(that1.Field10) {
		return false
	}
	for i := range this.Field10 {
		if this.Field10[i] != that1.Field10[i] {
			return false
		}
	}
	if len(this.Field11) != len(that1.Field11) {
		return false
	}
	for i := range this.Field11 {
		if this.Field11[i] != that1.Field11[i] {
			return false
		}
	}
	if len(this.Field12) != len(that1.Field12) {
		return false
	}
	for i := range this.Field12 {
		if this.Field12[i] != that1.Field12[i] {
			return false
		}
	}
	if len(this.Field13) != len(that1.Field13) {
		return false
	}
	for i := range this.Field13 {
		if this.Field13[i] != that1.Field13[i] {
			return false
		}
	}
	return true
}
func (this *ExternalStruct) Equal(that interface{}) bool {
	if that == nil {
		if this == nil {
			return true
		}
		return false
	}

	that1, ok := that.(*ExternalStruct)
	if !ok {
		that2, ok := that.(ExternalStruct)
		if ok {
			that1 = &that2
		} else {
			return false
		}
	}
	if that1 == nil {
		if this == nil {
			return true
		}
		return false
	} else if this == nil {
		return false
	}
	if !this.Field1.Equal(that1.Field1) {
		return false
	}
	if !this.Field2.Equal(that1.Field2) {
		return false
	}
	if !this.Field3.Equal(that1.Field3) {
		return false
	}
	return true
}
func (this *RepeatedExternalStruct) Equal(that interface{}) bool {
	if that == nil {
		if this == nil {
			return true
		}
		return false
	}

	that1, ok := that.(*RepeatedExternalStruct)
	if !ok {
		that2, ok := that.(RepeatedExternalStruct)
		if ok {
			that1 = &that2
		} else {
			return false
		}
	}
	if that1 == nil {
		if this == nil {
			return true
		}
		return false
	} else if this == nil {
		return false
	}
	if len(this.Field1) != len(that1.Field1) {
		return false
	}
	for i := range this.Field1 {
		if !this.Field1[i].Equal(that1.Field1[i]) {
			return false
		}
	}
	if len(this.Field2) != len(that1.Field2) {
		return false
	}
	for i := range this.Field2 {
		if !this.Field2[i].Equal(that1.Field2[i]) {
			return false
		}
	}
	if len(this.Field3) != len(that1.Field3) {
		return false
	}
	for i := range this.Field3 {
		if !this.Field3[i].Equal(that1.Field3[i]) {
			return false
		}
	}
	return true
}
func (this *NonNullableExternalStruct) Equal(that interface{}) bool {
	if that == nil {
		if this == nil {
			return true
		}
		return false
	}

	that1, ok := that.(*NonNullableExternalStruct)
	if !ok {
		that2, ok := that.(NonNullableExternalStruct)
		if ok {
			that1 = &that2
		} else {
			return false
		}
	}
	if that1 == nil {
		if this == nil {
			return true
		}
		return false
	} else if this == nil {
		return false
	}
	if !this.Field1.Equal(&that1.Field1) {
		return false
	}
	if !this.Field2.Equal(&that1.Field2) {
		return false
	}
	if !this.Field3.Equal(&that1.Field3) {
		return false
	}
	return true
}
func (this *RepeatedNonNullableExternalStruct) Equal(that interface{}) bool {
	if that == nil {
		if this == nil {
			return true
		}
		return false
	}

	that1, ok := that.(*RepeatedNonNullableExternalStruct)
	if !ok {
		that2, ok := that.(RepeatedNonNullableExternalStruct)
		if ok {
			that1 = &that2
		} else {
			return false
		}
	}
	if that1 == nil {
		if this == nil {
			return true
		}
		return false
	} else if this == nil {
		return false
	}
	if len(this.Field1) != len(that1.Field1) {
		return false
	}
	for i := range this.Field1 {
		if !this.Field1[i].Equal(&that1.Field1[i]) {
			return false
		}
	}
	if len(this.Field2) != len(that1.Field2) {
		return false
	}
	for i := range this.Field2 {
		if !this.Field2[i].Equal(&that1.Field2[i]) {
			return false
		}
	}
	if len(this.Field3) != len(that1.Field3) {
		return false
	}
	for i := range this.Field3 {
		if !this.Field3[i].Equal(&that1.Field3[i]) {
			return false
		}
	}
	return true
}
func (this *MapStruct) Equal(that interface{}) bool {
	if that == nil {
		if this == nil {
			return true
		}
		return false
	}

	that1, ok := that.(*MapStruct)
	if !ok {
		that2, ok := that.(MapStruct)
		if ok {
			that1 = &that2
		} else {
			return false
		}
	}
	if that1 == nil {
		if this == nil {
			return true
		}
		return false
	} else if this == nil {
		return false
	}
	if len(this.NullableMap) != len(that1.NullableMap) {
		return false
	}
	for i := range this.NullableMap {
		if !this.NullableMap[i].Equal(that1.NullableMap[i]) {
			return false
		}
	}
	if len(this.NonnullableMap) != len(that1.NonnullableMap) {
		return false
	}
	for i := range this.NonnullableMap {
		a := this.NonnullableMap[i]
		b := that1.NonnullableMap[i]
		if !(&a).Equal(&b) {
			return false
		}
	}
	return true
}
func NewPopulatedBasicScalar(r randyDeepcopy, easy bool) *BasicScalar {
	this := &BasicScalar{}
	this.Field1 = float64(r.Float64())
	if r.Intn(2) == 0 {
		this.Field1 *= -1
	}
	this.Field2 = float32(r.Float32())
	if r.Intn(2) == 0 {
		this.Field2 *= -1
	}
	this.Field3 = int32(r.Int31())
	if r.Intn(2) == 0 {
		this.Field3 *= -1
	}
	this.Field4 = int64(r.Int63())
	if r.Intn(2) == 0 {
		this.Field4 *= -1
	}
	this.Field5 = uint32(r.Uint32())
	this.Field6 = uint64(uint64(r.Uint32()))
	this.Field7 = int32(r.Int31())
	if r.Intn(2) == 0 {
		this.Field7 *= -1
	}
	this.Field8 = int64(r.Int63())
	if r.Intn(2) == 0 {
		this.Field8 *= -1
	}
	this.Field9 = uint32(r.Uint32())
	this.Field10 = int32(r.Int31())
	if r.Intn(2) == 0 {
		this.Field10 *= -1
	}
	this.Field11 = uint64(uint64(r.Uint32()))
	this.Field12 = int64(r.Int63())
	if r.Intn(2) == 0 {
		this.Field12 *= -1
	}
	this.Field13 = bool(bool(r.Intn(2) == 0))
	this.Field14 = randStringDeepcopy(r)
	v1 := r.Intn(100)
	this.Field15 = make([]byte, v1)
	for i := 0; i < v1; i++ {
		this.Field15[i] = byte(r.Intn(256))
	}
	if !easy && r.Intn(10) != 0 {
	}
	return this
}

func NewPopulatedRepeatedScalar(r randyDeepcopy, easy bool) *RepeatedScalar {
	this := &RepeatedScalar{}
	v2 := r.Intn(10)
	this.Field1 = make([]float64, v2)
	for i := 0; i < v2; i++ {
		this.Field1[i] = float64(r.Float64())
		if r.Intn(2) == 0 {
			this.Field1[i] *= -1
		}
	}
	v3 := r.Intn(10)
	this.Field2 = make([]float32, v3)
	for i := 0; i < v3; i++ {
		this.Field2[i] = float32(r.Float32())
		if r.Intn(2) == 0 {
			this.Field2[i] *= -1
		}
	}
	v4 := r.Intn(10)
	this.Field3 = make([]int32, v4)
	for i := 0; i < v4; i++ {
		this.Field3[i] = int32(r.Int31())
		if r.Intn(2) == 0 {
			this.Field3[i] *= -1
		}
	}
	v5 := r.Intn(10)
	this.Field4 = make([]int64, v5)
	for i := 0; i < v5; i++ {
		this.Field4[i] = int64(r.Int63())
		if r.Intn(2) == 0 {
			this.Field4[i] *= -1
		}
	}
	v6 := r.Intn(10)
	this.Field5 = make([]uint32, v6)
	for i := 0; i < v6; i++ {
		this.Field5[i] = uint32(r.Uint32())
	}
	v7 := r.Intn(10)
	this.Field6 = make([]uint64, v7)
	for i := 0; i < v7; i++ {
		this.Field6[i] = uint64(uint64(r.Uint32()))
	}
	v8 := r.Intn(10)
	this.Field7 = make([]int32, v8)
	for i := 0; i < v8; i++ {
		this.Field7[i] = int32(r.Int31())
		if r.Intn(2) == 0 {
			this.Field7[i] *= -1
		}
	}
	v9 := r.Intn(10)
	this.Field8 = make([]int64, v9)
	for i := 0; i < v9; i++ {
		this.Field8[i] = int64(r.Int63())
		if r.Intn(2) == 0 {
			this.Field8[i] *= -1
		}
	}
	v10 := r.Intn(10)
	this.Field9 = make([]uint32, v10)
	for i := 0; i < v10; i++ {
		this.Field9[i] = uint32(r.Uint32())
	}
	v11 := r.Intn(10)
	this.Field10 = make([]int32, v11)
	for i := 0; i < v11; i++ {
		this.Field10[i] = int32(r.Int31())
		if r.Intn(2) == 0 {
			this.Field10[i] *= -1
		}
	}
	v12 := r.Intn(10)
	this.Field11 = make([]uint64, v12)
	for i := 0; i < v12; i++ {
		this.Field11[i] = uint64(uint64(r.Uint32()))
	}
	v13 := r.Intn(10)
	this.Field12 = make([]int64, v13)
	for i := 0; i < v13; i++ {
		this.Field12[i] = int64(r.Int63())
		if r.Intn(2) == 0 {
			this.Field12[i] *= -1
		}
	}
	v14 := r.Intn(10)
	this.Field13 = make([]bool, v14)
	for i := 0; i < v14; i++ {
		this.Field13[i] = bool(bool(r.Intn(2) == 0))
	}
	v15 := r.Intn(10)
	this.Field14 = make([]string, v15)
	for i := 0; i < v15; i++ {
		this.Field14[i] = randStringDeepcopy(r)
	}
	v16 := r.Intn(10)
	this.Field15 = make([][]byte, v16)
	for i := 0; i < v16; i++ {
		v17 := r.Intn(100)
		this.Field15[i] = make([]byte, v17)
		for j := 0; j < v17; j++ {
			this.Field15[i][j] = byte(r.Intn(256))
		}
	}
	if !easy && r.Intn(10) != 0 {
	}
	return this
}

func NewPopulatedRepeatedScalarPacked(r randyDeepcopy, easy bool) *RepeatedScalarPacked {
	this := &RepeatedScalarPacked{}
	v18 := r.Intn(10)
	this.Field1 = make([]float64, v18)
	for i := 0; i < v18; i++ {
		this.Field1[i] = float64(r.Float64())
		if r.Intn(2) == 0 {
			this.Field1[i] *= -1
		}
	}
	v19 := r.Intn(10)
	this.Field2 = make([]float32, v19)
	for i := 0; i < v19; i++ {
		this.Field2[i] = float32(r.Float32())
		if r.Intn(2) == 0 {
			this.Field2[i] *= -1
		}
	}
	v20 := r.Intn(10)
	this.Field3 = make([]int32, v20)
	for i := 0; i < v20; i++ {
		this.Field3[i] = int32(r.Int31())
		if r.Intn(2) == 0 {
			this.Field3[i] *= -1
		}
	}
	v21 := r.Intn(10)
	this.Field4 = make([]int64, v21)
	for i := 0; i < v21; i++ {
		this.Field4[i] = int64(r.Int63())
		if r.Intn(2) == 0 {
			this.Field4[i] *= -1
		}
	}
	v22 := r.Intn(10)
	this.Field5 = make([]uint32, v22)
	for i := 0; i < v22; i++ {
		this.Field5[i] = uint32(r.Uint32())
	}
	v23 := r.Intn(10)
	this.Field6 = make([]uint64, v23)
	for i := 0; i < v23; i++ {
		this.Field6[i] = uint64(uint64(r.Uint32()))
	}
	v24 := r.Intn(10)
	this.Field7 = make([]int32, v24)
	for i := 0; i < v24; i++ {
		this.Field7[i] = int32(r.Int31())
		if r.Intn(2) == 0 {
			this.Field7[i] *= -1
		}
	}
	v25 := r.Intn(10)
	this.Field8 = make([]int64, v25)
	for i := 0; i < v25; i++ {
		this.Field8[i] = int64(r.Int63())
		if r.Intn(2) == 0 {
			this.Field8[i] *= -1
		}
	}
	v26 := r.Intn(10)
	this.Field9 = make([]uint32, v26)
	for i := 0; i < v26; i++ {
		this.Field9[i] = uint32(r.Uint32())
	}
	v27 := r.Intn(10)
	this.Field10 = make([]int32, v27)
	for i := 0; i < v27; i++ {
		this.Field10[i] = int32(r.Int31())
		if r.Intn(2) == 0 {
			this.Field10[i] *= -1
		}
	}
	v28 := r.Intn(10)
	this.Field11 = make([]uint64, v28)
	for i := 0; i < v28; i++ {
		this.Field11[i] = uint64(uint64(r.Uint32()))
	}
	v29 := r.Intn(10)
	this.Field12 = make([]int64, v29)
	for i := 0; i < v29; i++ {
		this.Field12[i] = int64(r.Int63())
		if r.Intn(2) == 0 {
			this.Field12[i] *= -1
		}
	}
	v30 := r.Intn(10)
	this.Field13 = make([]bool, v30)
	for i := 0; i < v30; i++ {
		this.Field13[i] = bool(bool(r.Intn(2) == 0))
	}
	if !easy && r.Intn(10) != 0 {
	}
	return this
}

func NewPopulatedExternalStruct(r randyDeepcopy, easy bool) *ExternalStruct {
	this := &ExternalStruct{}
	if r.Intn(10) != 0 {
		this.Field1 = NewPopulatedBasicScalar(r, easy)
	}
	if r.Intn(10) != 0 {
		this.Field2 = NewPopulatedRepeatedScalar(r, easy)
	}
	if r.Intn(10) != 0 {
		this.Field3 = NewPopulatedRepeatedScalarPacked(r, easy)
	}
	if !easy && r.Intn(10) != 0 {
	}
	return this
}

func NewPopulatedRepeatedExternalStruct(r randyDeepcopy, easy bool) *RepeatedExternalStruct {
	this := &RepeatedExternalStruct{}
	if r.Intn(10) != 0 {
		v31 := r.Intn(5)
		this.Field1 = make([]*BasicScalar, v31)
		for i := 0; i < v31; i++ {
			this.Field1[i] = NewPopulatedBasicScalar(r, easy)
		}
	}
	if r.Intn(10) != 0 {
		v32 := r.Intn(5)
		this.Field2 = make([]*RepeatedScalar, v32)
		for i := 0; i < v32; i++ {
			this.Field2[i] = NewPopulatedRepeatedScalar(r, easy)
		}
	}
	if r.Intn(10) != 0 {
		v33 := r.Intn(5)
		this.Field3 = make([]*RepeatedScalarPacked, v33)
		for i := 0; i < v33; i++ {
			this.Field3[i] = NewPopulatedRepeatedScalarPacked(r, easy)
		}
	}
	if !easy && r.Intn(10) != 0 {
	}
	return this
}

func NewPopulatedNonNullableExternalStruct(r randyDeepcopy, easy bool) *NonNullableExternalStruct {
	this := &NonNullableExternalStruct{}
	v34 := NewPopulatedBasicScalar(r, easy)
	this.Field1 = *v34
	v35 := NewPopulatedRepeatedScalar(r, easy)
	this.Field2 = *v35
	v36 := NewPopulatedRepeatedScalarPacked(r, easy)
	this.Field3 = *v36
	if !easy && r.Intn(10) != 0 {
	}
	return this
}

func NewPopulatedRepeatedNonNullableExternalStruct(r randyDeepcopy, easy bool) *RepeatedNonNullableExternalStruct {
	this := &RepeatedNonNullableExternalStruct{}
	if r.Intn(10) != 0 {
		v37 := r.Intn(5)
		this.Field1 = make([]BasicScalar, v37)
		for i := 0; i < v37; i++ {
			v38 := NewPopulatedBasicScalar(r, easy)
			this.Field1[i] = *v38
		}
	}
	if r.Intn(10) != 0 {
		v39 := r.Intn(5)
		this.Field2 = make([]RepeatedScalar, v39)
		for i := 0; i < v39; i++ {
			v40 := NewPopulatedRepeatedScalar(r, easy)
			this.Field2[i] = *v40
		}
	}
	if r.Intn(10) != 0 {
		v41 := r.Intn(5)
		this.Field3 = make([]RepeatedScalarPacked, v41)
		for i := 0; i < v41; i++ {
			v42 := NewPopulatedRepeatedScalarPacked(r, easy)
			this.Field3[i] = *v42
		}
	}
	if !easy && r.Intn(10) != 0 {
	}
	return this
}

func NewPopulatedMapStruct(r randyDeepcopy, easy bool) *MapStruct {
	this := &MapStruct{}
	if r.Intn(10) != 0 {
		v43 := r.Intn(10)
		this.NullableMap = make(map[string]*BasicScalar)
		for i := 0; i < v43; i++ {
			this.NullableMap[randStringDeepcopy(r)] = NewPopulatedBasicScalar(r, easy)
		}
	}
	if r.Intn(10) != 0 {
		v44 := r.Intn(10)
		this.NonnullableMap = make(map[string]BasicScalar)
		for i := 0; i < v44; i++ {
			this.NonnullableMap[randStringDeepcopy(r)] = *NewPopulatedBasicScalar(r, easy)
		}
	}
	if !easy && r.Intn(10) != 0 {
	}
	return this
}

type randyDeepcopy interface {
	Float32() float32
	Float64() float64
	Int63() int64
	Int31() int32
	Uint32() uint32
	Intn(n int) int
}

func randUTF8RuneDeepcopy(r randyDeepcopy) rune {
	ru := r.Intn(62)
	if ru < 10 {
		return rune(ru + 48)
	} else if ru < 36 {
		return rune(ru + 55)
	}
	return rune(ru + 61)
}
func randStringDeepcopy(r randyDeepcopy) string {
	v45 := r.Intn(100)
	tmps := make([]rune, v45)
	for i := 0; i < v45; i++ {
		tmps[i] = randUTF8RuneDeepcopy(r)
	}
	return string(tmps)
}
func randUnrecognizedDeepcopy(r randyDeepcopy, maxFieldNumber int) (data []byte) {
	l := r.Intn(5)
	for i := 0; i < l; i++ {
		wire := r.Intn(4)
		if wire == 3 {
			wire = 5
		}
		fieldNumber := maxFieldNumber + r.Intn(100)
		data = randFieldDeepcopy(data, r, fieldNumber, wire)
	}
	return data
}
func randFieldDeepcopy(data []byte, r randyDeepcopy, fieldNumber int, wire int) []byte {
	key := uint32(fieldNumber)<<3 | uint32(wire)
	switch wire {
	case 0:
		data = encodeVarintPopulateDeepcopy(data, uint64(key))
		v46 := r.Int63()
		if r.Intn(2) == 0 {
			v46 *= -1
		}
		data = encodeVarintPopulateDeepcopy(data, uint64(v46))
	case 1:
		data = encodeVarintPopulateDeepcopy(data, uint64(key))
		data = append(data, byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)))
	case 2:
		data = encodeVarintPopulateDeepcopy(data, uint64(key))
		ll := r.Intn(100)
		data = encodeVarintPopulateDeepcopy(data, uint64(ll))
		for j := 0; j < ll; j++ {
			data = append(data, byte(r.Intn(256)))
		}
	default:
		data = encodeVarintPopulateDeepcopy(data, uint64(key))
		data = append(data, byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)))
	}
	return data
}
func encodeVarintPopulateDeepcopy(data []byte, v uint64) []byte {
	for v >= 1<<7 {
		data = append(data, uint8(uint64(v)&0x7f|0x80))
		v >>= 7
	}
	data = append(data, uint8(v))
	return data
}
func (this *BasicScalar) String() string {
	if this == nil {
		return "nil"
	}
	s := strings.Join([]string{`&BasicScalar{`,
		`Field1:` + fmt.Sprintf("%v", this.Field1) + `,`,
		`Field2:` + fmt.Sprintf("%v", this.Field2) + `,`,
		`Field3:` + fmt.Sprintf("%v", this.Field3) + `,`,
		`Field4:` + fmt.Sprintf("%v", this.Field4) + `,`,
		`Field5:` + fmt.Sprintf("%v", this.Field5) + `,`,
		`Field6:` + fmt.Sprintf("%v", this.Field6) + `,`,
		`Field7:` + fmt.Sprintf("%v", this.Field7) + `,`,
		`Field8:` + fmt.Sprintf("%v", this.Field8) + `,`,
		`Field9:` + fmt.Sprintf("%v", this.Field9) + `,`,
		`Field10:` + fmt.Sprintf("%v", this.Field10) + `,`,
		`Field11:` + fmt.Sprintf("%v", this.Field11) + `,`,
		`Field12:` + fmt.Sprintf("%v", this.Field12) + `,`,
		`Field13:` + fmt.Sprintf("%v", this.Field13) + `,`,
		`Field14:` + fmt.Sprintf("%v", this.Field14) + `,`,
		`Field15:` + fmt.Sprintf("%v", this.Field15) + `,`,
		`}`,
	}, "")
	return s
}
func (this *RepeatedScalar) String() string {
	if this == nil {
		return "nil"
	}
	s := strings.Join([]string{`&RepeatedScalar{`,
		`Field1:` + fmt.Sprintf("%v", this.Field1) + `,`,
		`Field2:` + fmt.Sprintf("%v", this.Field2) + `,`,
		`Field3:` + fmt.Sprintf("%v", this.Field3) + `,`,
		`Field4:` + fmt.Sprintf("%v", this.Field4) + `,`,
		`Field5:` + fmt.Sprintf("%v", this.Field5) + `,`,
		`Field6:` + fmt.Sprintf("%v", this.Field6) + `,`,
		`Field7:` + fmt.Sprintf("%v", this.Field7) + `,`,
		`Field8:` + fmt.Sprintf("%v", this.Field8) + `,`,
		`Field9:` + fmt.Sprintf("%v", this.Field9) + `,`,
		`Field10:` + fmt.Sprintf("%v", this.Field10) + `,`,
		`Field11:` + fmt.Sprintf("%v", this.Field11) + `,`,
		`Field12:` + fmt.Sprintf("%v", this.Field12) + `,`,
		`Field13:` + fmt.Sprintf("%v", this.Field13) + `,`,
		`Field14:` + fmt.Sprintf("%v", this.Field14) + `,`,
		`Field15:` + fmt.Sprintf("%v", this.Field15) + `,`,
		`}`,
	}, "")
	return s
}
func (this *RepeatedScalarPacked) String() string {
	if this == nil {
		return "nil"
	}
	s := strings.Join([]string{`&RepeatedScalarPacked{`,
		`Field1:` + fmt.Sprintf("%v", this.Field1) + `,`,
		`Field2:` + fmt.Sprintf("%v", this.Field2) + `,`,
		`Field3:` + fmt.Sprintf("%v", this.Field3) + `,`,
		`Field4:` + fmt.Sprintf("%v", this.Field4) + `,`,
		`Field5:` + fmt.Sprintf("%v", this.Field5) + `,`,
		`Field6:` + fmt.Sprintf("%v", this.Field6) + `,`,
		`Field7:` + fmt.Sprintf("%v", this.Field7) + `,`,
		`Field8:` + fmt.Sprintf("%v", this.Field8) + `,`,
		`Field9:` + fmt.Sprintf("%v", this.Field9) + `,`,
		`Field10:` + fmt.Sprintf("%v", this.Field10) + `,`,
		`Field11:` + fmt.Sprintf("%v", this.Field11) + `,`,
		`Field12:` + fmt.Sprintf("%v", this.Field12) + `,`,
		`Field13:` + fmt.Sprintf("%v", this.Field13) + `,`,
		`}`,
	}, "")
	return s
}
func (this *ExternalStruct) String() string {
	if this == nil {
		return "nil"
	}
	s := strings.Join([]string{`&ExternalStruct{`,
		`Field1:` + strings.Replace(fmt.Sprintf("%v", this.Field1), "BasicScalar", "BasicScalar", 1) + `,`,
		`Field2:` + strings.Replace(fmt.Sprintf("%v", this.Field2), "RepeatedScalar", "RepeatedScalar", 1) + `,`,
		`Field3:` + strings.Replace(fmt.Sprintf("%v", this.Field3), "RepeatedScalarPacked", "RepeatedScalarPacked", 1) + `,`,
		`}`,
	}, "")
	return s
}
func (this *RepeatedExternalStruct) String() string {
	if this == nil {
		return "nil"
	}
	s := strings.Join([]string{`&RepeatedExternalStruct{`,
		`Field1:` + strings.Replace(fmt.Sprintf("%v", this.Field1), "BasicScalar", "BasicScalar", 1) + `,`,
		`Field2:` + strings.Replace(fmt.Sprintf("%v", this.Field2), "RepeatedScalar", "RepeatedScalar", 1) + `,`,
		`Field3:` + strings.Replace(fmt.Sprintf("%v", this.Field3), "RepeatedScalarPacked", "RepeatedScalarPacked", 1) + `,`,
		`}`,
	}, "")
	return s
}
func (this *NonNullableExternalStruct) String() string {
	if this == nil {
		return "nil"
	}
	s := strings.Join([]string{`&NonNullableExternalStruct{`,
		`Field1:` + strings.Replace(strings.Replace(this.Field1.String(), "BasicScalar", "BasicScalar", 1), `&`, ``, 1) + `,`,
		`Field2:` + strings.Replace(strings.Replace(this.Field2.String(), "RepeatedScalar", "RepeatedScalar", 1), `&`, ``, 1) + `,`,
		`Field3:` + strings.Replace(strings.Replace(this.Field3.String(), "RepeatedScalarPacked", "RepeatedScalarPacked", 1), `&`, ``, 1) + `,`,
		`}`,
	}, "")
	return s
}
func (this *RepeatedNonNullableExternalStruct) String() string {
	if this == nil {
		return "nil"
	}
	s := strings.Join([]string{`&RepeatedNonNullableExternalStruct{`,
		`Field1:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Field1), "BasicScalar", "BasicScalar", 1), `&`, ``, 1) + `,`,
		`Field2:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Field2), "RepeatedScalar", "RepeatedScalar", 1), `&`, ``, 1) + `,`,
		`Field3:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Field3), "RepeatedScalarPacked", "RepeatedScalarPacked", 1), `&`, ``, 1) + `,`,
		`}`,
	}, "")
	return s
}
func (this *MapStruct) String() string {
	if this == nil {
		return "nil"
	}
	keysForNullableMap := make([]string, 0, len(this.NullableMap))
	for k, _ := range this.NullableMap {
		keysForNullableMap = append(keysForNullableMap, k)
	}
	github_com_gogo_protobuf_sortkeys.Strings(keysForNullableMap)
	mapStringForNullableMap := "map[string]*BasicScalar{"
	for _, k := range keysForNullableMap {
		mapStringForNullableMap += fmt.Sprintf("%v: %v,", k, this.NullableMap[k])
	}
	mapStringForNullableMap += "}"
	keysForNonnullableMap := make([]string, 0, len(this.NonnullableMap))
	for k, _ := range this.NonnullableMap {
		keysForNonnullableMap = append(keysForNonnullableMap, k)
	}
	github_com_gogo_protobuf_sortkeys.Strings(keysForNonnullableMap)
	mapStringForNonnullableMap := "map[string]BasicScalar{"
	for _, k := range keysForNonnullableMap {
		mapStringForNonnullableMap += fmt.Sprintf("%v: %v,", k, this.NonnullableMap[k])
	}
	mapStringForNonnullableMap += "}"
	s := strings.Join([]string{`&MapStruct{`,
		`NullableMap:` + mapStringForNullableMap + `,`,
		`NonnullableMap:` + mapStringForNonnullableMap + `,`,
		`}`,
	}, "")
	return s
}
func valueToStringDeepcopy(v interface{}) string {
	rv := reflect.ValueOf(v)
	if rv.IsNil() {
		return "nil"
	}
	pv := reflect.Indirect(rv).Interface()
	return fmt.Sprintf("*%v", pv)
}

var fileDescriptorDeepcopy = []byte{
	// 725 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xa4, 0x96, 0x31, 0x6f, 0xd3, 0x40,
	0x14, 0xc7, 0xeb, 0xbc, 0x34, 0x69, 0x2e, 0x6d, 0x9a, 0x9a, 0xaa, 0x3a, 0xa2, 0x2a, 0x94, 0x30,
	0x00, 0x12, 0xa4, 0x8d, 0x9d, 0xb4, 0x29, 0x63, 0xa0, 0x6c, 0x54, 0x90, 0xb2, 0x23, 0x27, 0xb9,
	0x96, 0xaa, 0xae, 0x1d, 0xa5, 0x0e, 0xa2, 0x5b, 0x91, 0x98, 0xf8, 0x0e, 0x48, 0x2c, 0x48, 0x7c,
	0x04, 0xc4, 0xc8, 0xd4, 0x05, 0x89, 0x91, 0x09, 0xd1, 0xb2, 0x74, 0xec, 0xd8, 0x91, 0x57, 0xfb,
	0x7c, 0x3e, 0x87, 0x1c, 0x24, 0x30, 0x3c, 0x29, 0xfe, 0xff, 0xce, 0xe7, 0xf7, 0xfc, 0xb3, 0x4e,
	0x21, 0xb9, 0x0e, 0x63, 0xdd, 0xb6, 0xdb, 0x3d, 0x2c, 0x77, 0x7b, 0xae, 0xe7, 0xea, 0x49, 0x8f,
	0x1d, 0x78, 0x85, 0xbb, 0x3b, 0xbb, 0xde, 0xf3, 0x7e, 0xab, 0xdc, 0x76, 0xf7, 0x97, 0x77, 0xdc,
	0x1d, 0x77, 0xd9, 0x87, 0xad, 0xfe, 0xb6, 0x7f, 0xe5, 0x5f, 0xf8, 0xbf, 0x82, 0x9b, 0x4a, 0xaf,
	0x80, 0x64, 0x1b, 0xd6, 0xc1, 0x6e, 0x7b, 0xab, 0x6d, 0xd9, 0x56, 0x4f, 0x5f, 0x20, 0xa9, 0x87,
	0xbb, 0xcc, 0xee, 0x54, 0xa8, 0xb6, 0xa4, 0xdd, 0xd2, 0x9a, 0xa9, 0x6d, 0xff, 0x4a, 0xe4, 0x06,
	0x4d, 0x60, 0x9e, 0xe0, 0xb9, 0x21, 0x72, 0x93, 0x02, 0xe6, 0x93, 0x3c, 0x37, 0x45, 0x5e, 0xa5,
	0x49, 0xcc, 0x81, 0xe7, 0x55, 0x91, 0xd7, 0xe8, 0x24, 0xe6, 0x33, 0x3c, 0xaf, 0x89, 0x7c, 0x95,
	0xa6, 0x30, 0x4f, 0xf2, 0x7c, 0x55, 0xe4, 0x6b, 0x34, 0x8d, 0xf9, 0x1c, 0xcf, 0xd7, 0x44, 0x5e,
	0xa7, 0x53, 0x98, 0xeb, 0x3c, 0xaf, 0x8b, 0x7c, 0x9d, 0x66, 0x30, 0x4f, 0xf3, 0x7c, 0x5d, 0xa7,
	0x24, 0x1d, 0xcc, 0xb5, 0x42, 0x09, 0x82, 0xd9, 0x66, 0x3a, 0x18, 0x6c, 0x25, 0x22, 0x15, 0x9a,
	0x45, 0x92, 0x0a, 0x49, 0x25, 0x22, 0x06, 0x9d, 0x46, 0x92, 0x0f, 0x89, 0x11, 0x11, 0x93, 0xce,
	0x20, 0x99, 0x0a, 0x89, 0x19, 0x91, 0x2a, 0xcd, 0x21, 0xc9, 0x84, 0xa4, 0x1a, 0x91, 0x1a, 0x9d,
	0x45, 0x32, 0x1d, 0x92, 0x5a, 0xe9, 0x35, 0x90, 0x5c, 0x93, 0x75, 0x99, 0xe5, 0xb1, 0xce, 0x10,
	0x0d, 0xa0, 0xd0, 0x00, 0x0a, 0x0d, 0xa0, 0xd0, 0x00, 0x0a, 0x0d, 0xa0, 0xd0, 0x00, 0x0a, 0x0d,
	0xa0, 0xd0, 0x00, 0x0a, 0x0d, 0xa0, 0xd2, 0x00, 0x4a, 0x0d, 0xa0, 0xd4, 0x00, 0x4a, 0x0d, 0xa0,
	0xd4, 0x00, 0x4a, 0x0d, 0x20, 0x6b, 0x78, 0x03, 0x64, 0x3e, 0xae, 0xe1, 0xb1, 0xd5, 0xde, 0x63,
	0x1d, 0xbd, 0x10, 0x97, 0xd1, 0x48, 0xe4, 0x23, 0x21, 0x85, 0xb8, 0x10, 0x89, 0x19, 0x82, 0x71,
	0x29, 0x12, 0x33, 0x05, 0xe3, 0x62, 0x24, 0x56, 0x15, 0x8c, 0xcb, 0x91, 0x58, 0x4d, 0x30, 0x2e,
	0x48, 0x62, 0xab, 0x82, 0x71, 0x49, 0x12, 0x5b, 0x13, 0x8c, 0x8b, 0x92, 0x58, 0x5d, 0x30, 0x2e,
	0x4b, 0x62, 0xeb, 0xfa, 0xe2, 0x80, 0x30, 0x1f, 0x0a, 0x69, 0x8b, 0x03, 0xd2, 0x64, 0x5a, 0x89,
	0x28, 0x17, 0x27, 0x53, 0x23, 0xa2, 0x5c, 0x9e, 0x4c, 0xcd, 0xd2, 0x5b, 0x8d, 0xe4, 0x36, 0x5e,
	0x7a, 0xac, 0xe7, 0x58, 0xf6, 0x96, 0xd7, 0xeb, 0xb7, 0x3d, 0xfd, 0x76, 0xec, 0x68, 0xca, 0x1a,
	0x73, 0xe5, 0xcb, 0x03, 0xaf, 0x2c, 0x9d, 0x5e, 0xc2, 0xca, 0x9d, 0xd8, 0x69, 0x95, 0x35, 0xe6,
	0x83, 0xa5, 0x71, 0xbb, 0xc2, 0x93, 0x11, 0x3b, 0xc3, 0xb2, 0x46, 0x61, 0xd8, 0xea, 0xe0, 0x5b,
	0x08, 0xfd, 0x95, 0xde, 0x6b, 0x64, 0x21, 0x5c, 0xf0, 0x87, 0x3e, 0x61, 0xf4, 0x3e, 0x61, 0xac,
	0x3e, 0x61, 0xc4, 0x3e, 0x3f, 0x69, 0xe4, 0xea, 0xa6, 0xeb, 0x6c, 0xf6, 0x6d, 0xdb, 0x6a, 0xd9,
	0x6c, 0xa0, 0xd5, 0xe5, 0xbf, 0xbe, 0xd2, 0x46, 0xf2, 0xf8, 0xfb, 0xb5, 0x09, 0xd1, 0xb0, 0x31,
	0xca, 0x8b, 0x8d, 0xdd, 0x63, 0xe8, 0xf5, 0xd1, 0x5f, 0x6f, 0xec, 0x4e, 0xb3, 0xf4, 0x59, 0x23,
	0xd7, 0xc3, 0x65, 0xa3, 0x0d, 0x01, 0xe3, 0x0e, 0x01, 0xff, 0x30, 0x04, 0x8c, 0x35, 0xc4, 0x97,
	0x04, 0xc9, 0x3c, 0xb2, 0xba, 0xbc, 0xd9, 0xfb, 0x64, 0xda, 0xe1, 0x63, 0x3c, 0xdb, 0xb7, 0xba,
	0xbc, 0xe5, 0xa5, 0x60, 0x37, 0xb1, 0xac, 0x1c, 0x8e, 0x8a, 0xc9, 0x86, 0xe3, 0xf5, 0x0e, 0x9b,
	0x59, 0x27, 0x4a, 0xf4, 0x26, 0x99, 0x75, 0x5c, 0x27, 0xb6, 0x4f, 0x30, 0xc9, 0x8d, 0xdf, 0xf6,
	0x89, 0x96, 0x85, 0x5b, 0xf1, 0xf6, 0x72, 0x4e, 0x0c, 0x15, 0x9e, 0x90, 0xfc, 0xe0, 0x43, 0xf5,
	0x3c, 0x81, 0x3d, 0x76, 0xe8, 0x7f, 0x1b, 0x99, 0xe6, 0xe5, 0x4f, 0xfd, 0x26, 0x99, 0x7c, 0x61,
	0xd9, 0x7d, 0xc6, 0xf5, 0x0f, 0xf9, 0xb4, 0x03, 0x7e, 0x2f, 0x51, 0xd7, 0x0a, 0x4f, 0xc9, 0x95,
	0x21, 0xcf, 0xff, 0xcf, 0x5d, 0x1b, 0x0f, 0x8e, 0x4f, 0x8a, 0x13, 0x5f, 0xb1, 0xbe, 0x61, 0x9d,
	0x61, 0x9d, 0x63, 0x5d, 0x9c, 0x14, 0xb5, 0xa3, 0xd3, 0xa2, 0xf6, 0x01, 0xeb, 0x23, 0xd6, 0xf1,
	0x29, 0xae, 0xc1, 0xfa, 0x81, 0x75, 0x86, 0x75, 0x8e, 0x75, 0x81, 0x75, 0xf4, 0xb3, 0x38, 0xf1,
	0x0e, 0xab, 0x95, 0xf2, 0xff, 0xfe, 0x98, 0xbf, 0x02, 0x00, 0x00, 0xff, 0xff, 0x95, 0x64, 0x5b,
	0xe4, 0x45, 0x09, 0x00, 0x00,
}
