// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// 	protoc-gen-go v1.28.0
// 	protoc        v3.19.4
// source: goods/v1/goods.proto

package v1

import (
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
	emptypb "google.golang.org/protobuf/types/known/emptypb"
	reflect "reflect"
	sync "sync"
)

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

type AttrValueRequest struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Id      int64  `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
	AttrId  int64  `protobuf:"varint,2,opt,name=attrId,proto3" json:"attrId,omitempty"`
	GroupId int64  `protobuf:"varint,3,opt,name=groupId,proto3" json:"groupId,omitempty"`
	Value   string `protobuf:"bytes,4,opt,name=value,proto3" json:"value,omitempty"`
}

func (x *AttrValueRequest) Reset() {
	*x = AttrValueRequest{}
	if protoimpl.UnsafeEnabled {
		mi := &file_goods_v1_goods_proto_msgTypes[0]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*AttrValueRequest) ProtoMessage() {}

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

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

func (x *AttrValueRequest) GetId() int64 {
	if x != nil {
		return x.Id
	}
	return 0
}

func (x *AttrValueRequest) GetAttrId() int64 {
	if x != nil {
		return x.AttrId
	}
	return 0
}

func (x *AttrValueRequest) GetGroupId() int64 {
	if x != nil {
		return x.GroupId
	}
	return 0
}

func (x *AttrValueRequest) GetValue() string {
	if x != nil {
		return x.Value
	}
	return ""
}

type AttrRequest struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Id        int64               `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
	TypeId    int64               `protobuf:"varint,2,opt,name=typeId,proto3" json:"typeId,omitempty"`
	GroupId   int64               `protobuf:"varint,3,opt,name=groupId,proto3" json:"groupId,omitempty"`
	Title     string              `protobuf:"bytes,4,opt,name=title,proto3" json:"title,omitempty"`
	Desc      string              `protobuf:"bytes,5,opt,name=desc,proto3" json:"desc,omitempty"`
	Status    bool                `protobuf:"varint,6,opt,name=status,proto3" json:"status,omitempty"`
	Sort      int32               `protobuf:"varint,7,opt,name=sort,proto3" json:"sort,omitempty"`
	AttrValue []*AttrValueRequest `protobuf:"bytes,8,rep,name=attrValue,proto3" json:"attrValue,omitempty"`
}

func (x *AttrRequest) Reset() {
	*x = AttrRequest{}
	if protoimpl.UnsafeEnabled {
		mi := &file_goods_v1_goods_proto_msgTypes[1]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*AttrRequest) ProtoMessage() {}

func (x *AttrRequest) ProtoReflect() protoreflect.Message {
	mi := &file_goods_v1_goods_proto_msgTypes[1]
	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)
}

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

func (x *AttrRequest) GetId() int64 {
	if x != nil {
		return x.Id
	}
	return 0
}

func (x *AttrRequest) GetTypeId() int64 {
	if x != nil {
		return x.TypeId
	}
	return 0
}

func (x *AttrRequest) GetGroupId() int64 {
	if x != nil {
		return x.GroupId
	}
	return 0
}

func (x *AttrRequest) GetTitle() string {
	if x != nil {
		return x.Title
	}
	return ""
}

func (x *AttrRequest) GetDesc() string {
	if x != nil {
		return x.Desc
	}
	return ""
}

func (x *AttrRequest) GetStatus() bool {
	if x != nil {
		return x.Status
	}
	return false
}

func (x *AttrRequest) GetSort() int32 {
	if x != nil {
		return x.Sort
	}
	return 0
}

func (x *AttrRequest) GetAttrValue() []*AttrValueRequest {
	if x != nil {
		return x.AttrValue
	}
	return nil
}

type AttrValueResponse struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Id      int64  `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
	AttrId  int64  `protobuf:"varint,2,opt,name=attrId,proto3" json:"attrId,omitempty"`
	GroupId int64  `protobuf:"varint,3,opt,name=groupId,proto3" json:"groupId,omitempty"`
	Value   string `protobuf:"bytes,4,opt,name=value,proto3" json:"value,omitempty"`
}

func (x *AttrValueResponse) Reset() {
	*x = AttrValueResponse{}
	if protoimpl.UnsafeEnabled {
		mi := &file_goods_v1_goods_proto_msgTypes[2]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*AttrValueResponse) ProtoMessage() {}

func (x *AttrValueResponse) ProtoReflect() protoreflect.Message {
	mi := &file_goods_v1_goods_proto_msgTypes[2]
	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)
}

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

func (x *AttrValueResponse) GetId() int64 {
	if x != nil {
		return x.Id
	}
	return 0
}

func (x *AttrValueResponse) GetAttrId() int64 {
	if x != nil {
		return x.AttrId
	}
	return 0
}

func (x *AttrValueResponse) GetGroupId() int64 {
	if x != nil {
		return x.GroupId
	}
	return 0
}

func (x *AttrValueResponse) GetValue() string {
	if x != nil {
		return x.Value
	}
	return ""
}

type AttrResponse struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Id        int64                `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
	TypeId    int64                `protobuf:"varint,2,opt,name=typeId,proto3" json:"typeId,omitempty"`
	GroupId   int64                `protobuf:"varint,3,opt,name=groupId,proto3" json:"groupId,omitempty"`
	Title     string               `protobuf:"bytes,4,opt,name=title,proto3" json:"title,omitempty"`
	Desc      string               `protobuf:"bytes,5,opt,name=desc,proto3" json:"desc,omitempty"`
	Status    bool                 `protobuf:"varint,6,opt,name=status,proto3" json:"status,omitempty"`
	Sort      int32                `protobuf:"varint,7,opt,name=sort,proto3" json:"sort,omitempty"`
	AttrValue []*AttrValueResponse `protobuf:"bytes,8,rep,name=attrValue,proto3" json:"attrValue,omitempty"`
}

func (x *AttrResponse) Reset() {
	*x = AttrResponse{}
	if protoimpl.UnsafeEnabled {
		mi := &file_goods_v1_goods_proto_msgTypes[3]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*AttrResponse) ProtoMessage() {}

func (x *AttrResponse) ProtoReflect() protoreflect.Message {
	mi := &file_goods_v1_goods_proto_msgTypes[3]
	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)
}

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

func (x *AttrResponse) GetId() int64 {
	if x != nil {
		return x.Id
	}
	return 0
}

func (x *AttrResponse) GetTypeId() int64 {
	if x != nil {
		return x.TypeId
	}
	return 0
}

func (x *AttrResponse) GetGroupId() int64 {
	if x != nil {
		return x.GroupId
	}
	return 0
}

func (x *AttrResponse) GetTitle() string {
	if x != nil {
		return x.Title
	}
	return ""
}

func (x *AttrResponse) GetDesc() string {
	if x != nil {
		return x.Desc
	}
	return ""
}

func (x *AttrResponse) GetStatus() bool {
	if x != nil {
		return x.Status
	}
	return false
}

func (x *AttrResponse) GetSort() int32 {
	if x != nil {
		return x.Sort
	}
	return 0
}

func (x *AttrResponse) GetAttrValue() []*AttrValueResponse {
	if x != nil {
		return x.AttrValue
	}
	return nil
}

type AttrGroupRequest struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Id     int64  `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
	TypeId int64  `protobuf:"varint,2,opt,name=typeId,proto3" json:"typeId,omitempty"`
	Title  string `protobuf:"bytes,3,opt,name=title,proto3" json:"title,omitempty"`
	Desc   string `protobuf:"bytes,4,opt,name=desc,proto3" json:"desc,omitempty"`
	Status bool   `protobuf:"varint,5,opt,name=status,proto3" json:"status,omitempty"`
	Sort   int32  `protobuf:"varint,6,opt,name=sort,proto3" json:"sort,omitempty"`
}

func (x *AttrGroupRequest) Reset() {
	*x = AttrGroupRequest{}
	if protoimpl.UnsafeEnabled {
		mi := &file_goods_v1_goods_proto_msgTypes[4]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*AttrGroupRequest) ProtoMessage() {}

func (x *AttrGroupRequest) ProtoReflect() protoreflect.Message {
	mi := &file_goods_v1_goods_proto_msgTypes[4]
	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)
}

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

func (x *AttrGroupRequest) GetId() int64 {
	if x != nil {
		return x.Id
	}
	return 0
}

func (x *AttrGroupRequest) GetTypeId() int64 {
	if x != nil {
		return x.TypeId
	}
	return 0
}

func (x *AttrGroupRequest) GetTitle() string {
	if x != nil {
		return x.Title
	}
	return ""
}

func (x *AttrGroupRequest) GetDesc() string {
	if x != nil {
		return x.Desc
	}
	return ""
}

func (x *AttrGroupRequest) GetStatus() bool {
	if x != nil {
		return x.Status
	}
	return false
}

func (x *AttrGroupRequest) GetSort() int32 {
	if x != nil {
		return x.Sort
	}
	return 0
}

type AttrGroupResponse struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Id     int64  `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
	TypeId int64  `protobuf:"varint,2,opt,name=typeId,proto3" json:"typeId,omitempty"`
	Title  string `protobuf:"bytes,3,opt,name=title,proto3" json:"title,omitempty"`
	Desc   string `protobuf:"bytes,4,opt,name=desc,proto3" json:"desc,omitempty"`
	Status bool   `protobuf:"varint,5,opt,name=status,proto3" json:"status,omitempty"`
	Sort   int32  `protobuf:"varint,6,opt,name=sort,proto3" json:"sort,omitempty"`
}

func (x *AttrGroupResponse) Reset() {
	*x = AttrGroupResponse{}
	if protoimpl.UnsafeEnabled {
		mi := &file_goods_v1_goods_proto_msgTypes[5]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*AttrGroupResponse) ProtoMessage() {}

func (x *AttrGroupResponse) ProtoReflect() protoreflect.Message {
	mi := &file_goods_v1_goods_proto_msgTypes[5]
	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)
}

// Deprecated: Use AttrGroupResponse.ProtoReflect.Descriptor instead.
func (*AttrGroupResponse) Descriptor() ([]byte, []int) {
	return file_goods_v1_goods_proto_rawDescGZIP(), []int{5}
}

func (x *AttrGroupResponse) GetId() int64 {
	if x != nil {
		return x.Id
	}
	return 0
}

func (x *AttrGroupResponse) GetTypeId() int64 {
	if x != nil {
		return x.TypeId
	}
	return 0
}

func (x *AttrGroupResponse) GetTitle() string {
	if x != nil {
		return x.Title
	}
	return ""
}

func (x *AttrGroupResponse) GetDesc() string {
	if x != nil {
		return x.Desc
	}
	return ""
}

func (x *AttrGroupResponse) GetStatus() bool {
	if x != nil {
		return x.Status
	}
	return false
}

func (x *AttrGroupResponse) GetSort() int32 {
	if x != nil {
		return x.Sort
	}
	return 0
}

type SpecificationValue struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Id     int64  `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
	AttrId int64  `protobuf:"varint,2,opt,name=attrId,proto3" json:"attrId,omitempty"`
	Value  string `protobuf:"bytes,3,opt,name=value,proto3" json:"value,omitempty"`
	Sort   int32  `protobuf:"varint,4,opt,name=sort,proto3" json:"sort,omitempty"`
}

func (x *SpecificationValue) Reset() {
	*x = SpecificationValue{}
	if protoimpl.UnsafeEnabled {
		mi := &file_goods_v1_goods_proto_msgTypes[6]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*SpecificationValue) ProtoMessage() {}

func (x *SpecificationValue) ProtoReflect() protoreflect.Message {
	mi := &file_goods_v1_goods_proto_msgTypes[6]
	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)
}

// Deprecated: Use SpecificationValue.ProtoReflect.Descriptor instead.
func (*SpecificationValue) Descriptor() ([]byte, []int) {
	return file_goods_v1_goods_proto_rawDescGZIP(), []int{6}
}

func (x *SpecificationValue) GetId() int64 {
	if x != nil {
		return x.Id
	}
	return 0
}

func (x *SpecificationValue) GetAttrId() int64 {
	if x != nil {
		return x.AttrId
	}
	return 0
}

func (x *SpecificationValue) GetValue() string {
	if x != nil {
		return x.Value
	}
	return ""
}

func (x *SpecificationValue) GetSort() int32 {
	if x != nil {
		return x.Sort
	}
	return 0
}

type SpecificationValueResponse struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Id     int64  `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
	AttrId int64  `protobuf:"varint,2,opt,name=attrId,proto3" json:"attrId,omitempty"`
	Value  string `protobuf:"bytes,3,opt,name=value,proto3" json:"value,omitempty"`
	Sort   int32  `protobuf:"varint,4,opt,name=sort,proto3" json:"sort,omitempty"`
}

func (x *SpecificationValueResponse) Reset() {
	*x = SpecificationValueResponse{}
	if protoimpl.UnsafeEnabled {
		mi := &file_goods_v1_goods_proto_msgTypes[7]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*SpecificationValueResponse) ProtoMessage() {}

func (x *SpecificationValueResponse) ProtoReflect() protoreflect.Message {
	mi := &file_goods_v1_goods_proto_msgTypes[7]
	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)
}

// Deprecated: Use SpecificationValueResponse.ProtoReflect.Descriptor instead.
func (*SpecificationValueResponse) Descriptor() ([]byte, []int) {
	return file_goods_v1_goods_proto_rawDescGZIP(), []int{7}
}

func (x *SpecificationValueResponse) GetId() int64 {
	if x != nil {
		return x.Id
	}
	return 0
}

func (x *SpecificationValueResponse) GetAttrId() int64 {
	if x != nil {
		return x.AttrId
	}
	return 0
}

func (x *SpecificationValueResponse) GetValue() string {
	if x != nil {
		return x.Value
	}
	return ""
}

func (x *SpecificationValueResponse) GetSort() int32 {
	if x != nil {
		return x.Sort
	}
	return 0
}

type SpecificationRequest struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Id                 int64                 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
	TypeId             int64                 `protobuf:"varint,2,opt,name=typeId,proto3" json:"typeId,omitempty"`
	Name               string                `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"`
	Sort               int32                 `protobuf:"varint,4,opt,name=sort,proto3" json:"sort,omitempty"`
	Status             bool                  `protobuf:"varint,5,opt,name=status,proto3" json:"status,omitempty"`
	IsSku              bool                  `protobuf:"varint,6,opt,name=isSku,proto3" json:"isSku,omitempty"`
	IsSelect           bool                  `protobuf:"varint,7,opt,name=isSelect,proto3" json:"isSelect,omitempty"`
	SpecificationValue []*SpecificationValue `protobuf:"bytes,8,rep,name=specificationValue,proto3" json:"specificationValue,omitempty"`
}

func (x *SpecificationRequest) Reset() {
	*x = SpecificationRequest{}
	if protoimpl.UnsafeEnabled {
		mi := &file_goods_v1_goods_proto_msgTypes[8]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*SpecificationRequest) ProtoMessage() {}

func (x *SpecificationRequest) ProtoReflect() protoreflect.Message {
	mi := &file_goods_v1_goods_proto_msgTypes[8]
	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)
}

// Deprecated: Use SpecificationRequest.ProtoReflect.Descriptor instead.
func (*SpecificationRequest) Descriptor() ([]byte, []int) {
	return file_goods_v1_goods_proto_rawDescGZIP(), []int{8}
}

func (x *SpecificationRequest) GetId() int64 {
	if x != nil {
		return x.Id
	}
	return 0
}

func (x *SpecificationRequest) GetTypeId() int64 {
	if x != nil {
		return x.TypeId
	}
	return 0
}

func (x *SpecificationRequest) GetName() string {
	if x != nil {
		return x.Name
	}
	return ""
}

func (x *SpecificationRequest) GetSort() int32 {
	if x != nil {
		return x.Sort
	}
	return 0
}

func (x *SpecificationRequest) GetStatus() bool {
	if x != nil {
		return x.Status
	}
	return false
}

func (x *SpecificationRequest) GetIsSku() bool {
	if x != nil {
		return x.IsSku
	}
	return false
}

func (x *SpecificationRequest) GetIsSelect() bool {
	if x != nil {
		return x.IsSelect
	}
	return false
}

func (x *SpecificationRequest) GetSpecificationValue() []*SpecificationValue {
	if x != nil {
		return x.SpecificationValue
	}
	return nil
}

type SpecificationResponse struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
}

func (x *SpecificationResponse) Reset() {
	*x = SpecificationResponse{}
	if protoimpl.UnsafeEnabled {
		mi := &file_goods_v1_goods_proto_msgTypes[9]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*SpecificationResponse) ProtoMessage() {}

func (x *SpecificationResponse) ProtoReflect() protoreflect.Message {
	mi := &file_goods_v1_goods_proto_msgTypes[9]
	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)
}

// Deprecated: Use SpecificationResponse.ProtoReflect.Descriptor instead.
func (*SpecificationResponse) Descriptor() ([]byte, []int) {
	return file_goods_v1_goods_proto_rawDescGZIP(), []int{9}
}

func (x *SpecificationResponse) GetId() int64 {
	if x != nil {
		return x.Id
	}
	return 0
}

type GoodsTypeRequest struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Id        int64  `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
	Name      string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
	TypeCode  string `protobuf:"bytes,3,opt,name=typeCode,proto3" json:"typeCode,omitempty"`
	NameAlias string `protobuf:"bytes,4,opt,name=nameAlias,proto3" json:"nameAlias,omitempty"`
	IsVirtual bool   `protobuf:"varint,5,opt,name=isVirtual,proto3" json:"isVirtual,omitempty"`
	Desc      string `protobuf:"bytes,6,opt,name=desc,proto3" json:"desc,omitempty"`
	Sort      int32  `protobuf:"varint,7,opt,name=sort,proto3" json:"sort,omitempty"`
	BrandIds  string `protobuf:"bytes,8,opt,name=brandIds,proto3" json:"brandIds,omitempty"`
}

func (x *GoodsTypeRequest) Reset() {
	*x = GoodsTypeRequest{}
	if protoimpl.UnsafeEnabled {
		mi := &file_goods_v1_goods_proto_msgTypes[10]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*GoodsTypeRequest) ProtoMessage() {}

func (x *GoodsTypeRequest) ProtoReflect() protoreflect.Message {
	mi := &file_goods_v1_goods_proto_msgTypes[10]
	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)
}

// Deprecated: Use GoodsTypeRequest.ProtoReflect.Descriptor instead.
func (*GoodsTypeRequest) Descriptor() ([]byte, []int) {
	return file_goods_v1_goods_proto_rawDescGZIP(), []int{10}
}

func (x *GoodsTypeRequest) GetId() int64 {
	if x != nil {
		return x.Id
	}
	return 0
}

func (x *GoodsTypeRequest) GetName() string {
	if x != nil {
		return x.Name
	}
	return ""
}

func (x *GoodsTypeRequest) GetTypeCode() string {
	if x != nil {
		return x.TypeCode
	}
	return ""
}

func (x *GoodsTypeRequest) GetNameAlias() string {
	if x != nil {
		return x.NameAlias
	}
	return ""
}

func (x *GoodsTypeRequest) GetIsVirtual() bool {
	if x != nil {
		return x.IsVirtual
	}
	return false
}

func (x *GoodsTypeRequest) GetDesc() string {
	if x != nil {
		return x.Desc
	}
	return ""
}

func (x *GoodsTypeRequest) GetSort() int32 {
	if x != nil {
		return x.Sort
	}
	return 0
}

func (x *GoodsTypeRequest) GetBrandIds() string {
	if x != nil {
		return x.BrandIds
	}
	return ""
}

type GoodsTypeResponse struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
}

func (x *GoodsTypeResponse) Reset() {
	*x = GoodsTypeResponse{}
	if protoimpl.UnsafeEnabled {
		mi := &file_goods_v1_goods_proto_msgTypes[11]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*GoodsTypeResponse) ProtoMessage() {}

func (x *GoodsTypeResponse) ProtoReflect() protoreflect.Message {
	mi := &file_goods_v1_goods_proto_msgTypes[11]
	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)
}

// Deprecated: Use GoodsTypeResponse.ProtoReflect.Descriptor instead.
func (*GoodsTypeResponse) Descriptor() ([]byte, []int) {
	return file_goods_v1_goods_proto_rawDescGZIP(), []int{11}
}

func (x *GoodsTypeResponse) GetId() int64 {
	if x != nil {
		return x.Id
	}
	return 0
}

type CreateGoodsRequest struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Id              int64                         `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
	CategoryId      int32                         `protobuf:"varint,2,opt,name=categoryId,proto3" json:"categoryId,omitempty"`
	BrandId         int32                         `protobuf:"varint,3,opt,name=brandId,proto3" json:"brandId,omitempty"`
	TypeId          int64                         `protobuf:"varint,4,opt,name=typeId,proto3" json:"typeId,omitempty"`
	Name            string                        `protobuf:"bytes,5,opt,name=name,proto3" json:"name,omitempty"`
	NameAlias       string                        `protobuf:"bytes,6,opt,name=nameAlias,proto3" json:"nameAlias,omitempty"`
	GoodsTags       string                        `protobuf:"bytes,7,opt,name=goodsTags,proto3" json:"goodsTags,omitempty"`
	GoodsSn         string                        `protobuf:"bytes,8,opt,name=goodsSn,proto3" json:"goodsSn,omitempty"`
	ShopPrice       int64                         `protobuf:"varint,9,opt,name=shopPrice,proto3" json:"shopPrice,omitempty"`
	MarketPrice     int64                         `protobuf:"varint,10,opt,name=marketPrice,proto3" json:"marketPrice,omitempty"`
	Inventory       int64                         `protobuf:"varint,11,opt,name=inventory,proto3" json:"inventory,omitempty"`
	GoodsBrief      string                        `protobuf:"bytes,12,opt,name=goodsBrief,proto3" json:"goodsBrief,omitempty"`
	GoodsFrontImage string                        `protobuf:"bytes,13,opt,name=goodsFrontImage,proto3" json:"goodsFrontImage,omitempty"`
	GoodsImages     []string                      `protobuf:"bytes,14,rep,name=goodsImages,proto3" json:"goodsImages,omitempty"`
	ShipFree        bool                          `protobuf:"varint,15,opt,name=shipFree,proto3" json:"shipFree,omitempty"`
	ShipId          int32                         `protobuf:"varint,16,opt,name=shipId,proto3" json:"shipId,omitempty"`
	IsNew           bool                          `protobuf:"varint,17,opt,name=isNew,proto3" json:"isNew,omitempty"`
	IsHot           bool                          `protobuf:"varint,18,opt,name=isHot,proto3" json:"isHot,omitempty"`
	OnSale          bool                          `protobuf:"varint,19,opt,name=onSale,proto3" json:"onSale,omitempty"`
	Sku             []*CreateGoodsRequestGoodsSku `protobuf:"bytes,20,rep,name=sku,proto3" json:"sku,omitempty"`
}

func (x *CreateGoodsRequest) Reset() {
	*x = CreateGoodsRequest{}
	if protoimpl.UnsafeEnabled {
		mi := &file_goods_v1_goods_proto_msgTypes[12]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*CreateGoodsRequest) ProtoMessage() {}

func (x *CreateGoodsRequest) ProtoReflect() protoreflect.Message {
	mi := &file_goods_v1_goods_proto_msgTypes[12]
	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)
}

// Deprecated: Use CreateGoodsRequest.ProtoReflect.Descriptor instead.
func (*CreateGoodsRequest) Descriptor() ([]byte, []int) {
	return file_goods_v1_goods_proto_rawDescGZIP(), []int{12}
}

func (x *CreateGoodsRequest) GetId() int64 {
	if x != nil {
		return x.Id
	}
	return 0
}

func (x *CreateGoodsRequest) GetCategoryId() int32 {
	if x != nil {
		return x.CategoryId
	}
	return 0
}

func (x *CreateGoodsRequest) GetBrandId() int32 {
	if x != nil {
		return x.BrandId
	}
	return 0
}

func (x *CreateGoodsRequest) GetTypeId() int64 {
	if x != nil {
		return x.TypeId
	}
	return 0
}

func (x *CreateGoodsRequest) GetName() string {
	if x != nil {
		return x.Name
	}
	return ""
}

func (x *CreateGoodsRequest) GetNameAlias() string {
	if x != nil {
		return x.NameAlias
	}
	return ""
}

func (x *CreateGoodsRequest) GetGoodsTags() string {
	if x != nil {
		return x.GoodsTags
	}
	return ""
}

func (x *CreateGoodsRequest) GetGoodsSn() string {
	if x != nil {
		return x.GoodsSn
	}
	return ""
}

func (x *CreateGoodsRequest) GetShopPrice() int64 {
	if x != nil {
		return x.ShopPrice
	}
	return 0
}

func (x *CreateGoodsRequest) GetMarketPrice() int64 {
	if x != nil {
		return x.MarketPrice
	}
	return 0
}

func (x *CreateGoodsRequest) GetInventory() int64 {
	if x != nil {
		return x.Inventory
	}
	return 0
}

func (x *CreateGoodsRequest) GetGoodsBrief() string {
	if x != nil {
		return x.GoodsBrief
	}
	return ""
}

func (x *CreateGoodsRequest) GetGoodsFrontImage() string {
	if x != nil {
		return x.GoodsFrontImage
	}
	return ""
}

func (x *CreateGoodsRequest) GetGoodsImages() []string {
	if x != nil {
		return x.GoodsImages
	}
	return nil
}

func (x *CreateGoodsRequest) GetShipFree() bool {
	if x != nil {
		return x.ShipFree
	}
	return false
}

func (x *CreateGoodsRequest) GetShipId() int32 {
	if x != nil {
		return x.ShipId
	}
	return 0
}

func (x *CreateGoodsRequest) GetIsNew() bool {
	if x != nil {
		return x.IsNew
	}
	return false
}

func (x *CreateGoodsRequest) GetIsHot() bool {
	if x != nil {
		return x.IsHot
	}
	return false
}

func (x *CreateGoodsRequest) GetOnSale() bool {
	if x != nil {
		return x.OnSale
	}
	return false
}

func (x *CreateGoodsRequest) GetSku() []*CreateGoodsRequestGoodsSku {
	if x != nil {
		return x.Sku
	}
	return nil
}

type CreateGoodsResponse struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	ID int64 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"`
}

func (x *CreateGoodsResponse) Reset() {
	*x = CreateGoodsResponse{}
	if protoimpl.UnsafeEnabled {
		mi := &file_goods_v1_goods_proto_msgTypes[13]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*CreateGoodsResponse) ProtoMessage() {}

func (x *CreateGoodsResponse) ProtoReflect() protoreflect.Message {
	mi := &file_goods_v1_goods_proto_msgTypes[13]
	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)
}

// Deprecated: Use CreateGoodsResponse.ProtoReflect.Descriptor instead.
func (*CreateGoodsResponse) Descriptor() ([]byte, []int) {
	return file_goods_v1_goods_proto_rawDescGZIP(), []int{13}
}

func (x *CreateGoodsResponse) GetID() int64 {
	if x != nil {
		return x.ID
	}
	return 0
}

type GoodsInfoResponse struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Id          int64    `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
	CategoryId  int32    `protobuf:"varint,2,opt,name=categoryId,proto3" json:"categoryId,omitempty"`
	BrandId     int32    `protobuf:"varint,3,opt,name=brandId,proto3" json:"brandId,omitempty"`
	Name        string   `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"`
	GoodsSn     string   `protobuf:"bytes,5,opt,name=goodsSn,proto3" json:"goodsSn,omitempty"`
	ClickNum    int64    `protobuf:"varint,6,opt,name=clickNum,proto3" json:"clickNum,omitempty"`
	SoldNum     int64    `protobuf:"varint,7,opt,name=soldNum,proto3" json:"soldNum,omitempty"`
	FavNum      int64    `protobuf:"varint,8,opt,name=favNum,proto3" json:"favNum,omitempty"`
	MarketPrice int64    `protobuf:"varint,9,opt,name=marketPrice,proto3" json:"marketPrice,omitempty"`
	GoodsBrief  string   `protobuf:"bytes,10,opt,name=goodsBrief,proto3" json:"goodsBrief,omitempty"`
	GoodsDesc   string   `protobuf:"bytes,11,opt,name=goodsDesc,proto3" json:"goodsDesc,omitempty"`
	ShipFree    bool     `protobuf:"varint,12,opt,name=shipFree,proto3" json:"shipFree,omitempty"`
	Images      string   `protobuf:"bytes,13,opt,name=images,proto3" json:"images,omitempty"`
	GoodsImages []string `protobuf:"bytes,14,rep,name=goodsImages,proto3" json:"goodsImages,omitempty"`
	IsNew       bool     `protobuf:"varint,15,opt,name=isNew,proto3" json:"isNew,omitempty"`
	IsHot       bool     `protobuf:"varint,16,opt,name=isHot,proto3" json:"isHot,omitempty"`
	OnSale      bool     `protobuf:"varint,17,opt,name=onSale,proto3" json:"onSale,omitempty"`
}

func (x *GoodsInfoResponse) Reset() {
	*x = GoodsInfoResponse{}
	if protoimpl.UnsafeEnabled {
		mi := &file_goods_v1_goods_proto_msgTypes[14]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*GoodsInfoResponse) ProtoMessage() {}

func (x *GoodsInfoResponse) ProtoReflect() protoreflect.Message {
	mi := &file_goods_v1_goods_proto_msgTypes[14]
	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)
}

// Deprecated: Use GoodsInfoResponse.ProtoReflect.Descriptor instead.
func (*GoodsInfoResponse) Descriptor() ([]byte, []int) {
	return file_goods_v1_goods_proto_rawDescGZIP(), []int{14}
}

func (x *GoodsInfoResponse) GetId() int64 {
	if x != nil {
		return x.Id
	}
	return 0
}

func (x *GoodsInfoResponse) GetCategoryId() int32 {
	if x != nil {
		return x.CategoryId
	}
	return 0
}

func (x *GoodsInfoResponse) GetBrandId() int32 {
	if x != nil {
		return x.BrandId
	}
	return 0
}

func (x *GoodsInfoResponse) GetName() string {
	if x != nil {
		return x.Name
	}
	return ""
}

func (x *GoodsInfoResponse) GetGoodsSn() string {
	if x != nil {
		return x.GoodsSn
	}
	return ""
}

func (x *GoodsInfoResponse) GetClickNum() int64 {
	if x != nil {
		return x.ClickNum
	}
	return 0
}

func (x *GoodsInfoResponse) GetSoldNum() int64 {
	if x != nil {
		return x.SoldNum
	}
	return 0
}

func (x *GoodsInfoResponse) GetFavNum() int64 {
	if x != nil {
		return x.FavNum
	}
	return 0
}

func (x *GoodsInfoResponse) GetMarketPrice() int64 {
	if x != nil {
		return x.MarketPrice
	}
	return 0
}

func (x *GoodsInfoResponse) GetGoodsBrief() string {
	if x != nil {
		return x.GoodsBrief
	}
	return ""
}

func (x *GoodsInfoResponse) GetGoodsDesc() string {
	if x != nil {
		return x.GoodsDesc
	}
	return ""
}

func (x *GoodsInfoResponse) GetShipFree() bool {
	if x != nil {
		return x.ShipFree
	}
	return false
}

func (x *GoodsInfoResponse) GetImages() string {
	if x != nil {
		return x.Images
	}
	return ""
}

func (x *GoodsInfoResponse) GetGoodsImages() []string {
	if x != nil {
		return x.GoodsImages
	}
	return nil
}

func (x *GoodsInfoResponse) GetIsNew() bool {
	if x != nil {
		return x.IsNew
	}
	return false
}

func (x *GoodsInfoResponse) GetIsHot() bool {
	if x != nil {
		return x.IsHot
	}
	return false
}

func (x *GoodsInfoResponse) GetOnSale() bool {
	if x != nil {
		return x.OnSale
	}
	return false
}

type GoodsListResponse struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Total int64                `protobuf:"varint,1,opt,name=total,proto3" json:"total,omitempty"`
	List  []*GoodsInfoResponse `protobuf:"bytes,2,rep,name=list,proto3" json:"list,omitempty"`
}

func (x *GoodsListResponse) Reset() {
	*x = GoodsListResponse{}
	if protoimpl.UnsafeEnabled {
		mi := &file_goods_v1_goods_proto_msgTypes[15]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*GoodsListResponse) ProtoMessage() {}

func (x *GoodsListResponse) ProtoReflect() protoreflect.Message {
	mi := &file_goods_v1_goods_proto_msgTypes[15]
	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)
}

// Deprecated: Use GoodsListResponse.ProtoReflect.Descriptor instead.
func (*GoodsListResponse) Descriptor() ([]byte, []int) {
	return file_goods_v1_goods_proto_rawDescGZIP(), []int{15}
}

func (x *GoodsListResponse) GetTotal() int64 {
	if x != nil {
		return x.Total
	}
	return 0
}

func (x *GoodsListResponse) GetList() []*GoodsInfoResponse {
	if x != nil {
		return x.List
	}
	return nil
}

type GoodsFilterRequest struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Keywords    string `protobuf:"bytes,1,opt,name=keywords,proto3" json:"keywords,omitempty"`
	CategoryId  int32  `protobuf:"varint,2,opt,name=categoryId,proto3" json:"categoryId,omitempty"`
	BrandId     int32  `protobuf:"varint,3,opt,name=brandId,proto3" json:"brandId,omitempty"`
	MinPrice    int64  `protobuf:"varint,4,opt,name=minPrice,proto3" json:"minPrice,omitempty"`
	MaxPrice    int64  `protobuf:"varint,5,opt,name=maxPrice,proto3" json:"maxPrice,omitempty"`
	IsHot       bool   `protobuf:"varint,6,opt,name=isHot,proto3" json:"isHot,omitempty"`
	IsNew       bool   `protobuf:"varint,7,opt,name=isNew,proto3" json:"isNew,omitempty"`
	IsTab       bool   `protobuf:"varint,8,opt,name=isTab,proto3" json:"isTab,omitempty"`
	ClickNum    int64  `protobuf:"varint,9,opt,name=clickNum,proto3" json:"clickNum,omitempty"`
	SoldNum     int64  `protobuf:"varint,10,opt,name=soldNum,proto3" json:"soldNum,omitempty"`
	FavNum      int64  `protobuf:"varint,11,opt,name=favNum,proto3" json:"favNum,omitempty"`
	Pages       int64  `protobuf:"varint,12,opt,name=pages,proto3" json:"pages,omitempty"`
	PagePerNums int64  `protobuf:"varint,13,opt,name=pagePerNums,proto3" json:"pagePerNums,omitempty"`
	Id          int64  `protobuf:"varint,14,opt,name=id,proto3" json:"id,omitempty"`
}

func (x *GoodsFilterRequest) Reset() {
	*x = GoodsFilterRequest{}
	if protoimpl.UnsafeEnabled {
		mi := &file_goods_v1_goods_proto_msgTypes[16]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*GoodsFilterRequest) ProtoMessage() {}

func (x *GoodsFilterRequest) ProtoReflect() protoreflect.Message {
	mi := &file_goods_v1_goods_proto_msgTypes[16]
	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)
}

// Deprecated: Use GoodsFilterRequest.ProtoReflect.Descriptor instead.
func (*GoodsFilterRequest) Descriptor() ([]byte, []int) {
	return file_goods_v1_goods_proto_rawDescGZIP(), []int{16}
}

func (x *GoodsFilterRequest) GetKeywords() string {
	if x != nil {
		return x.Keywords
	}
	return ""
}

func (x *GoodsFilterRequest) GetCategoryId() int32 {
	if x != nil {
		return x.CategoryId
	}
	return 0
}

func (x *GoodsFilterRequest) GetBrandId() int32 {
	if x != nil {
		return x.BrandId
	}
	return 0
}

func (x *GoodsFilterRequest) GetMinPrice() int64 {
	if x != nil {
		return x.MinPrice
	}
	return 0
}

func (x *GoodsFilterRequest) GetMaxPrice() int64 {
	if x != nil {
		return x.MaxPrice
	}
	return 0
}

func (x *GoodsFilterRequest) GetIsHot() bool {
	if x != nil {
		return x.IsHot
	}
	return false
}

func (x *GoodsFilterRequest) GetIsNew() bool {
	if x != nil {
		return x.IsNew
	}
	return false
}

func (x *GoodsFilterRequest) GetIsTab() bool {
	if x != nil {
		return x.IsTab
	}
	return false
}

func (x *GoodsFilterRequest) GetClickNum() int64 {
	if x != nil {
		return x.ClickNum
	}
	return 0
}

func (x *GoodsFilterRequest) GetSoldNum() int64 {
	if x != nil {
		return x.SoldNum
	}
	return 0
}

func (x *GoodsFilterRequest) GetFavNum() int64 {
	if x != nil {
		return x.FavNum
	}
	return 0
}

func (x *GoodsFilterRequest) GetPages() int64 {
	if x != nil {
		return x.Pages
	}
	return 0
}

func (x *GoodsFilterRequest) GetPagePerNums() int64 {
	if x != nil {
		return x.PagePerNums
	}
	return 0
}

func (x *GoodsFilterRequest) GetId() int64 {
	if x != nil {
		return x.Id
	}
	return 0
}

// 商品分类
type CategoryInfoResponse struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Id             int32  `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
	Name           string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
	ParentCategory int32  `protobuf:"varint,3,opt,name=parentCategory,proto3" json:"parentCategory,omitempty"`
	Level          int32  `protobuf:"varint,4,opt,name=level,proto3" json:"level,omitempty"`
	IsTab          bool   `protobuf:"varint,5,opt,name=isTab,proto3" json:"isTab,omitempty"`
	Sort           int32  `protobuf:"varint,6,opt,name=sort,proto3" json:"sort,omitempty"`
}

func (x *CategoryInfoResponse) Reset() {
	*x = CategoryInfoResponse{}
	if protoimpl.UnsafeEnabled {
		mi := &file_goods_v1_goods_proto_msgTypes[17]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*CategoryInfoResponse) ProtoMessage() {}

func (x *CategoryInfoResponse) ProtoReflect() protoreflect.Message {
	mi := &file_goods_v1_goods_proto_msgTypes[17]
	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)
}

// Deprecated: Use CategoryInfoResponse.ProtoReflect.Descriptor instead.
func (*CategoryInfoResponse) Descriptor() ([]byte, []int) {
	return file_goods_v1_goods_proto_rawDescGZIP(), []int{17}
}

func (x *CategoryInfoResponse) GetId() int32 {
	if x != nil {
		return x.Id
	}
	return 0
}

func (x *CategoryInfoResponse) GetName() string {
	if x != nil {
		return x.Name
	}
	return ""
}

func (x *CategoryInfoResponse) GetParentCategory() int32 {
	if x != nil {
		return x.ParentCategory
	}
	return 0
}

func (x *CategoryInfoResponse) GetLevel() int32 {
	if x != nil {
		return x.Level
	}
	return 0
}

func (x *CategoryInfoResponse) GetIsTab() bool {
	if x != nil {
		return x.IsTab
	}
	return false
}

func (x *CategoryInfoResponse) GetSort() int32 {
	if x != nil {
		return x.Sort
	}
	return 0
}

type CategoryListResponse struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	JsonData string `protobuf:"bytes,1,opt,name=jsonData,proto3" json:"jsonData,omitempty"`
}

func (x *CategoryListResponse) Reset() {
	*x = CategoryListResponse{}
	if protoimpl.UnsafeEnabled {
		mi := &file_goods_v1_goods_proto_msgTypes[18]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*CategoryListResponse) ProtoMessage() {}

func (x *CategoryListResponse) ProtoReflect() protoreflect.Message {
	mi := &file_goods_v1_goods_proto_msgTypes[18]
	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)
}

// Deprecated: Use CategoryListResponse.ProtoReflect.Descriptor instead.
func (*CategoryListResponse) Descriptor() ([]byte, []int) {
	return file_goods_v1_goods_proto_rawDescGZIP(), []int{18}
}

func (x *CategoryListResponse) GetJsonData() string {
	if x != nil {
		return x.JsonData
	}
	return ""
}

type CategoryListRequest struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Id    int32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
	Level int32 `protobuf:"varint,2,opt,name=level,proto3" json:"level,omitempty"`
}

func (x *CategoryListRequest) Reset() {
	*x = CategoryListRequest{}
	if protoimpl.UnsafeEnabled {
		mi := &file_goods_v1_goods_proto_msgTypes[19]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*CategoryListRequest) ProtoMessage() {}

func (x *CategoryListRequest) ProtoReflect() protoreflect.Message {
	mi := &file_goods_v1_goods_proto_msgTypes[19]
	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)
}

// Deprecated: Use CategoryListRequest.ProtoReflect.Descriptor instead.
func (*CategoryListRequest) Descriptor() ([]byte, []int) {
	return file_goods_v1_goods_proto_rawDescGZIP(), []int{19}
}

func (x *CategoryListRequest) GetId() int32 {
	if x != nil {
		return x.Id
	}
	return 0
}

func (x *CategoryListRequest) GetLevel() int32 {
	if x != nil {
		return x.Level
	}
	return 0
}

type SubCategoryListResponse struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Info        *CategoryInfoResponse   `protobuf:"bytes,1,opt,name=info,proto3" json:"info,omitempty"`
	SubCategory []*CategoryInfoResponse `protobuf:"bytes,2,rep,name=subCategory,proto3" json:"subCategory,omitempty"`
}

func (x *SubCategoryListResponse) Reset() {
	*x = SubCategoryListResponse{}
	if protoimpl.UnsafeEnabled {
		mi := &file_goods_v1_goods_proto_msgTypes[20]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*SubCategoryListResponse) ProtoMessage() {}

func (x *SubCategoryListResponse) ProtoReflect() protoreflect.Message {
	mi := &file_goods_v1_goods_proto_msgTypes[20]
	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)
}

// Deprecated: Use SubCategoryListResponse.ProtoReflect.Descriptor instead.
func (*SubCategoryListResponse) Descriptor() ([]byte, []int) {
	return file_goods_v1_goods_proto_rawDescGZIP(), []int{20}
}

func (x *SubCategoryListResponse) GetInfo() *CategoryInfoResponse {
	if x != nil {
		return x.Info
	}
	return nil
}

func (x *SubCategoryListResponse) GetSubCategory() []*CategoryInfoResponse {
	if x != nil {
		return x.SubCategory
	}
	return nil
}

type CategoryInfoRequest struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Id             int32  `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
	Name           string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
	ParentCategory int32  `protobuf:"varint,3,opt,name=parentCategory,proto3" json:"parentCategory,omitempty"`
	Level          int32  `protobuf:"varint,4,opt,name=level,proto3" json:"level,omitempty"`
	IsTab          bool   `protobuf:"varint,5,opt,name=isTab,proto3" json:"isTab,omitempty"`
	Sort           int32  `protobuf:"varint,6,opt,name=sort,proto3" json:"sort,omitempty"`
}

func (x *CategoryInfoRequest) Reset() {
	*x = CategoryInfoRequest{}
	if protoimpl.UnsafeEnabled {
		mi := &file_goods_v1_goods_proto_msgTypes[21]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*CategoryInfoRequest) ProtoMessage() {}

func (x *CategoryInfoRequest) ProtoReflect() protoreflect.Message {
	mi := &file_goods_v1_goods_proto_msgTypes[21]
	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)
}

// Deprecated: Use CategoryInfoRequest.ProtoReflect.Descriptor instead.
func (*CategoryInfoRequest) Descriptor() ([]byte, []int) {
	return file_goods_v1_goods_proto_rawDescGZIP(), []int{21}
}

func (x *CategoryInfoRequest) GetId() int32 {
	if x != nil {
		return x.Id
	}
	return 0
}

func (x *CategoryInfoRequest) GetName() string {
	if x != nil {
		return x.Name
	}
	return ""
}

func (x *CategoryInfoRequest) GetParentCategory() int32 {
	if x != nil {
		return x.ParentCategory
	}
	return 0
}

func (x *CategoryInfoRequest) GetLevel() int32 {
	if x != nil {
		return x.Level
	}
	return 0
}

func (x *CategoryInfoRequest) GetIsTab() bool {
	if x != nil {
		return x.IsTab
	}
	return false
}

func (x *CategoryInfoRequest) GetSort() int32 {
	if x != nil {
		return x.Sort
	}
	return 0
}

type BatchCategoryInfoRequest struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Id        []int32 `protobuf:"varint,1,rep,packed,name=id,proto3" json:"id,omitempty"`
	GoodsNums int32   `protobuf:"varint,2,opt,name=goodsNums,proto3" json:"goodsNums,omitempty"`
	BrandNums int32   `protobuf:"varint,3,opt,name=brandNums,proto3" json:"brandNums,omitempty"`
}

func (x *BatchCategoryInfoRequest) Reset() {
	*x = BatchCategoryInfoRequest{}
	if protoimpl.UnsafeEnabled {
		mi := &file_goods_v1_goods_proto_msgTypes[22]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*BatchCategoryInfoRequest) ProtoMessage() {}

func (x *BatchCategoryInfoRequest) ProtoReflect() protoreflect.Message {
	mi := &file_goods_v1_goods_proto_msgTypes[22]
	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)
}

// Deprecated: Use BatchCategoryInfoRequest.ProtoReflect.Descriptor instead.
func (*BatchCategoryInfoRequest) Descriptor() ([]byte, []int) {
	return file_goods_v1_goods_proto_rawDescGZIP(), []int{22}
}

func (x *BatchCategoryInfoRequest) GetId() []int32 {
	if x != nil {
		return x.Id
	}
	return nil
}

func (x *BatchCategoryInfoRequest) GetGoodsNums() int32 {
	if x != nil {
		return x.GoodsNums
	}
	return 0
}

func (x *BatchCategoryInfoRequest) GetBrandNums() int32 {
	if x != nil {
		return x.BrandNums
	}
	return 0
}

type DeleteCategoryRequest struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Id int32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
}

func (x *DeleteCategoryRequest) Reset() {
	*x = DeleteCategoryRequest{}
	if protoimpl.UnsafeEnabled {
		mi := &file_goods_v1_goods_proto_msgTypes[23]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*DeleteCategoryRequest) ProtoMessage() {}

func (x *DeleteCategoryRequest) ProtoReflect() protoreflect.Message {
	mi := &file_goods_v1_goods_proto_msgTypes[23]
	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)
}

// Deprecated: Use DeleteCategoryRequest.ProtoReflect.Descriptor instead.
func (*DeleteCategoryRequest) Descriptor() ([]byte, []int) {
	return file_goods_v1_goods_proto_rawDescGZIP(), []int{23}
}

func (x *DeleteCategoryRequest) GetId() int32 {
	if x != nil {
		return x.Id
	}
	return 0
}

type BrandListRequest struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Pages       int32 `protobuf:"varint,1,opt,name=pages,proto3" json:"pages,omitempty"`
	PagePerNums int32 `protobuf:"varint,2,opt,name=pagePerNums,proto3" json:"pagePerNums,omitempty"`
}

func (x *BrandListRequest) Reset() {
	*x = BrandListRequest{}
	if protoimpl.UnsafeEnabled {
		mi := &file_goods_v1_goods_proto_msgTypes[24]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*BrandListRequest) ProtoMessage() {}

func (x *BrandListRequest) ProtoReflect() protoreflect.Message {
	mi := &file_goods_v1_goods_proto_msgTypes[24]
	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)
}

// Deprecated: Use BrandListRequest.ProtoReflect.Descriptor instead.
func (*BrandListRequest) Descriptor() ([]byte, []int) {
	return file_goods_v1_goods_proto_rawDescGZIP(), []int{24}
}

func (x *BrandListRequest) GetPages() int32 {
	if x != nil {
		return x.Pages
	}
	return 0
}

func (x *BrandListRequest) GetPagePerNums() int32 {
	if x != nil {
		return x.PagePerNums
	}
	return 0
}

type BrandRequest struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Id    int32  `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
	Name  string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
	Logo  string `protobuf:"bytes,3,opt,name=logo,proto3" json:"logo,omitempty"`
	Desc  string `protobuf:"bytes,4,opt,name=desc,proto3" json:"desc,omitempty"`
	IsTab bool   `protobuf:"varint,5,opt,name=isTab,proto3" json:"isTab,omitempty"`
	Sort  int32  `protobuf:"varint,6,opt,name=sort,proto3" json:"sort,omitempty"`
}

func (x *BrandRequest) Reset() {
	*x = BrandRequest{}
	if protoimpl.UnsafeEnabled {
		mi := &file_goods_v1_goods_proto_msgTypes[25]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*BrandRequest) ProtoMessage() {}

func (x *BrandRequest) ProtoReflect() protoreflect.Message {
	mi := &file_goods_v1_goods_proto_msgTypes[25]
	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)
}

// Deprecated: Use BrandRequest.ProtoReflect.Descriptor instead.
func (*BrandRequest) Descriptor() ([]byte, []int) {
	return file_goods_v1_goods_proto_rawDescGZIP(), []int{25}
}

func (x *BrandRequest) GetId() int32 {
	if x != nil {
		return x.Id
	}
	return 0
}

func (x *BrandRequest) GetName() string {
	if x != nil {
		return x.Name
	}
	return ""
}

func (x *BrandRequest) GetLogo() string {
	if x != nil {
		return x.Logo
	}
	return ""
}

func (x *BrandRequest) GetDesc() string {
	if x != nil {
		return x.Desc
	}
	return ""
}

func (x *BrandRequest) GetIsTab() bool {
	if x != nil {
		return x.IsTab
	}
	return false
}

func (x *BrandRequest) GetSort() int32 {
	if x != nil {
		return x.Sort
	}
	return 0
}

type BrandInfoResponse struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Id    int32  `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
	Name  string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
	Logo  string `protobuf:"bytes,3,opt,name=logo,proto3" json:"logo,omitempty"`
	Desc  string `protobuf:"bytes,4,opt,name=desc,proto3" json:"desc,omitempty"`
	IsTab bool   `protobuf:"varint,5,opt,name=isTab,proto3" json:"isTab,omitempty"`
	Sort  int32  `protobuf:"varint,6,opt,name=sort,proto3" json:"sort,omitempty"`
}

func (x *BrandInfoResponse) Reset() {
	*x = BrandInfoResponse{}
	if protoimpl.UnsafeEnabled {
		mi := &file_goods_v1_goods_proto_msgTypes[26]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*BrandInfoResponse) ProtoMessage() {}

func (x *BrandInfoResponse) ProtoReflect() protoreflect.Message {
	mi := &file_goods_v1_goods_proto_msgTypes[26]
	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)
}

// Deprecated: Use BrandInfoResponse.ProtoReflect.Descriptor instead.
func (*BrandInfoResponse) Descriptor() ([]byte, []int) {
	return file_goods_v1_goods_proto_rawDescGZIP(), []int{26}
}

func (x *BrandInfoResponse) GetId() int32 {
	if x != nil {
		return x.Id
	}
	return 0
}

func (x *BrandInfoResponse) GetName() string {
	if x != nil {
		return x.Name
	}
	return ""
}

func (x *BrandInfoResponse) GetLogo() string {
	if x != nil {
		return x.Logo
	}
	return ""
}

func (x *BrandInfoResponse) GetDesc() string {
	if x != nil {
		return x.Desc
	}
	return ""
}

func (x *BrandInfoResponse) GetIsTab() bool {
	if x != nil {
		return x.IsTab
	}
	return false
}

func (x *BrandInfoResponse) GetSort() int32 {
	if x != nil {
		return x.Sort
	}
	return 0
}

type BrandListResponse struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Total int32                `protobuf:"varint,1,opt,name=total,proto3" json:"total,omitempty"`
	Data  []*BrandInfoResponse `protobuf:"bytes,2,rep,name=data,proto3" json:"data,omitempty"`
}

func (x *BrandListResponse) Reset() {
	*x = BrandListResponse{}
	if protoimpl.UnsafeEnabled {
		mi := &file_goods_v1_goods_proto_msgTypes[27]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*BrandListResponse) ProtoMessage() {}

func (x *BrandListResponse) ProtoReflect() protoreflect.Message {
	mi := &file_goods_v1_goods_proto_msgTypes[27]
	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)
}

// Deprecated: Use BrandListResponse.ProtoReflect.Descriptor instead.
func (*BrandListResponse) Descriptor() ([]byte, []int) {
	return file_goods_v1_goods_proto_rawDescGZIP(), []int{27}
}

func (x *BrandListResponse) GetTotal() int32 {
	if x != nil {
		return x.Total
	}
	return 0
}

func (x *BrandListResponse) GetData() []*BrandInfoResponse {
	if x != nil {
		return x.Data
	}
	return nil
}

// 根据商品类型 选择商品规格信息并选择
// 商品 sku 属性值 里面有规格的ID和属性的ID，分别是几组信息
type CreateGoodsRequestGoodsSku struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Id                int64                                      `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
	GoodsId           int64                                      `protobuf:"varint,2,opt,name=goodsId,proto3" json:"goodsId,omitempty"`
	SkuName           string                                     `protobuf:"bytes,3,opt,name=skuName,proto3" json:"skuName,omitempty"`
	Code              string                                     `protobuf:"bytes,4,opt,name=code,proto3" json:"code,omitempty"`
	BarCode           string                                     `protobuf:"bytes,5,opt,name=barCode,proto3" json:"barCode,omitempty"`
	Price             int64                                      `protobuf:"varint,6,opt,name=price,proto3" json:"price,omitempty"`
	PromotionPrice    int64                                      `protobuf:"varint,7,opt,name=promotionPrice,proto3" json:"promotionPrice,omitempty"`
	Points            int64                                      `protobuf:"varint,8,opt,name=points,proto3" json:"points,omitempty"`
	Image             string                                     `protobuf:"bytes,9,opt,name=image,proto3" json:"image,omitempty"`
	Sort              int32                                      `protobuf:"varint,10,opt,name=sort,proto3" json:"sort,omitempty"`
	Inventory         int64                                      `protobuf:"varint,11,opt,name=inventory,proto3" json:"inventory,omitempty"` // sku 库存
	SpecificationInfo []*CreateGoodsRequestGoodsSkuSpecification `protobuf:"bytes,12,rep,name=specificationInfo,proto3" json:"specificationInfo,omitempty"`
	GroupAttrInfo     []*CreateGoodsRequestGoodsSkuGroupAttr     `protobuf:"bytes,13,rep,name=groupAttrInfo,proto3" json:"groupAttrInfo,omitempty"`
}

func (x *CreateGoodsRequestGoodsSku) Reset() {
	*x = CreateGoodsRequestGoodsSku{}
	if protoimpl.UnsafeEnabled {
		mi := &file_goods_v1_goods_proto_msgTypes[28]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*CreateGoodsRequestGoodsSku) ProtoMessage() {}

func (x *CreateGoodsRequestGoodsSku) ProtoReflect() protoreflect.Message {
	mi := &file_goods_v1_goods_proto_msgTypes[28]
	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)
}

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

func (x *CreateGoodsRequestGoodsSku) GetId() int64 {
	if x != nil {
		return x.Id
	}
	return 0
}

func (x *CreateGoodsRequestGoodsSku) GetGoodsId() int64 {
	if x != nil {
		return x.GoodsId
	}
	return 0
}

func (x *CreateGoodsRequestGoodsSku) GetSkuName() string {
	if x != nil {
		return x.SkuName
	}
	return ""
}

func (x *CreateGoodsRequestGoodsSku) GetCode() string {
	if x != nil {
		return x.Code
	}
	return ""
}

func (x *CreateGoodsRequestGoodsSku) GetBarCode() string {
	if x != nil {
		return x.BarCode
	}
	return ""
}

func (x *CreateGoodsRequestGoodsSku) GetPrice() int64 {
	if x != nil {
		return x.Price
	}
	return 0
}

func (x *CreateGoodsRequestGoodsSku) GetPromotionPrice() int64 {
	if x != nil {
		return x.PromotionPrice
	}
	return 0
}

func (x *CreateGoodsRequestGoodsSku) GetPoints() int64 {
	if x != nil {
		return x.Points
	}
	return 0
}

func (x *CreateGoodsRequestGoodsSku) GetImage() string {
	if x != nil {
		return x.Image
	}
	return ""
}

func (x *CreateGoodsRequestGoodsSku) GetSort() int32 {
	if x != nil {
		return x.Sort
	}
	return 0
}

func (x *CreateGoodsRequestGoodsSku) GetInventory() int64 {
	if x != nil {
		return x.Inventory
	}
	return 0
}

func (x *CreateGoodsRequestGoodsSku) GetSpecificationInfo() []*CreateGoodsRequestGoodsSkuSpecification {
	if x != nil {
		return x.SpecificationInfo
	}
	return nil
}

func (x *CreateGoodsRequestGoodsSku) GetGroupAttrInfo() []*CreateGoodsRequestGoodsSkuGroupAttr {
	if x != nil {
		return x.GroupAttrInfo
	}
	return nil
}

// 规格
type CreateGoodsRequestGoodsSkuSpecification struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	SId int64 `protobuf:"varint,1,opt,name=sId,proto3" json:"sId,omitempty"`
	VId int64 `protobuf:"varint,2,opt,name=vId,proto3" json:"vId,omitempty"`
}

func (x *CreateGoodsRequestGoodsSkuSpecification) Reset() {
	*x = CreateGoodsRequestGoodsSkuSpecification{}
	if protoimpl.UnsafeEnabled {
		mi := &file_goods_v1_goods_proto_msgTypes[29]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*CreateGoodsRequestGoodsSkuSpecification) ProtoMessage() {}

func (x *CreateGoodsRequestGoodsSkuSpecification) ProtoReflect() protoreflect.Message {
	mi := &file_goods_v1_goods_proto_msgTypes[29]
	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)
}

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

func (x *CreateGoodsRequestGoodsSkuSpecification) GetSId() int64 {
	if x != nil {
		return x.SId
	}
	return 0
}

func (x *CreateGoodsRequestGoodsSkuSpecification) GetVId() int64 {
	if x != nil {
		return x.VId
	}
	return 0
}

// 属性组
type CreateGoodsRequestGoodsSkuGroupAttr struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	GroupId   int64                                      `protobuf:"varint,1,opt,name=groupId,proto3" json:"groupId,omitempty"`
	GroupName string                                     `protobuf:"bytes,2,opt,name=groupName,proto3" json:"groupName,omitempty"`
	AttrInfo  []*CreateGoodsRequestGoodsSkuGroupAttrAttr `protobuf:"bytes,3,rep,name=attrInfo,proto3" json:"attrInfo,omitempty"`
}

func (x *CreateGoodsRequestGoodsSkuGroupAttr) Reset() {
	*x = CreateGoodsRequestGoodsSkuGroupAttr{}
	if protoimpl.UnsafeEnabled {
		mi := &file_goods_v1_goods_proto_msgTypes[30]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*CreateGoodsRequestGoodsSkuGroupAttr) ProtoMessage() {}

func (x *CreateGoodsRequestGoodsSkuGroupAttr) ProtoReflect() protoreflect.Message {
	mi := &file_goods_v1_goods_proto_msgTypes[30]
	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)
}

// Deprecated: Use CreateGoodsRequestGoodsSkuGroupAttr.ProtoReflect.Descriptor instead.
func (*CreateGoodsRequestGoodsSkuGroupAttr) Descriptor() ([]byte, []int) {
	return file_goods_v1_goods_proto_rawDescGZIP(), []int{12, 0, 1}
}

func (x *CreateGoodsRequestGoodsSkuGroupAttr) GetGroupId() int64 {
	if x != nil {
		return x.GroupId
	}
	return 0
}

func (x *CreateGoodsRequestGoodsSkuGroupAttr) GetGroupName() string {
	if x != nil {
		return x.GroupName
	}
	return ""
}

func (x *CreateGoodsRequestGoodsSkuGroupAttr) GetAttrInfo() []*CreateGoodsRequestGoodsSkuGroupAttrAttr {
	if x != nil {
		return x.AttrInfo
	}
	return nil
}

type CreateGoodsRequestGoodsSkuGroupAttrAttr struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	AttrId        int64  `protobuf:"varint,1,opt,name=attrId,proto3" json:"attrId,omitempty"`
	AttrName      string `protobuf:"bytes,2,opt,name=attrName,proto3" json:"attrName,omitempty"`
	AttrValueId   int64  `protobuf:"varint,3,opt,name=attrValueId,proto3" json:"attrValueId,omitempty"`
	AttrValueName string `protobuf:"bytes,4,opt,name=attrValueName,proto3" json:"attrValueName,omitempty"`
}

func (x *CreateGoodsRequestGoodsSkuGroupAttrAttr) Reset() {
	*x = CreateGoodsRequestGoodsSkuGroupAttrAttr{}
	if protoimpl.UnsafeEnabled {
		mi := &file_goods_v1_goods_proto_msgTypes[31]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*CreateGoodsRequestGoodsSkuGroupAttrAttr) ProtoMessage() {}

func (x *CreateGoodsRequestGoodsSkuGroupAttrAttr) ProtoReflect() protoreflect.Message {
	mi := &file_goods_v1_goods_proto_msgTypes[31]
	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)
}

// Deprecated: Use CreateGoodsRequestGoodsSkuGroupAttrAttr.ProtoReflect.Descriptor instead.
func (*CreateGoodsRequestGoodsSkuGroupAttrAttr) Descriptor() ([]byte, []int) {
	return file_goods_v1_goods_proto_rawDescGZIP(), []int{12, 0, 1, 0}
}

func (x *CreateGoodsRequestGoodsSkuGroupAttrAttr) GetAttrId() int64 {
	if x != nil {
		return x.AttrId
	}
	return 0
}

func (x *CreateGoodsRequestGoodsSkuGroupAttrAttr) GetAttrName() string {
	if x != nil {
		return x.AttrName
	}
	return ""
}

func (x *CreateGoodsRequestGoodsSkuGroupAttrAttr) GetAttrValueId() int64 {
	if x != nil {
		return x.AttrValueId
	}
	return 0
}

func (x *CreateGoodsRequestGoodsSkuGroupAttrAttr) GetAttrValueName() string {
	if x != nil {
		return x.AttrValueName
	}
	return ""
}

var File_goods_v1_goods_proto protoreflect.FileDescriptor

var file_goods_v1_goods_proto_rawDesc = []byte{
	0x0a, 0x14, 0x67, 0x6f, 0x6f, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x6f, 0x6f, 0x64, 0x73,
	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x08, 0x67, 0x6f, 0x6f, 0x64, 0x73, 0x2e, 0x76, 0x31,
	0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
	0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x76,
	0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65,
	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x7c, 0x0a, 0x10, 0x41, 0x74, 0x74, 0x72, 0x56, 0x61,
	0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64,
	0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x74,
	0x74, 0x72, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x61, 0x74, 0x74, 0x72,
	0x49, 0x64, 0x12, 0x21, 0x0a, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x18, 0x03, 0x20,
	0x01, 0x28, 0x03, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x22, 0x02, 0x28, 0x01, 0x52, 0x07, 0x67, 0x72,
	0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04,
	0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x03, 0x52, 0x05, 0x76,
	0x61, 0x6c, 0x75, 0x65, 0x22, 0x83, 0x02, 0x0a, 0x0b, 0x41, 0x74, 0x74, 0x72, 0x52, 0x65, 0x71,
	0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03,
	0x52, 0x02, 0x69, 0x64, 0x12, 0x1f, 0x0a, 0x06, 0x74, 0x79, 0x70, 0x65, 0x49, 0x64, 0x18, 0x02,
	0x20, 0x01, 0x28, 0x03, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x22, 0x02, 0x28, 0x01, 0x52, 0x06, 0x74,
	0x79, 0x70, 0x65, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64,
	0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x22, 0x02, 0x28, 0x01, 0x52,
	0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c,
	0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01,
	0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x65, 0x73, 0x63, 0x18,
	0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x65, 0x73, 0x63, 0x12, 0x16, 0x0a, 0x06, 0x73,
	0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x73, 0x74, 0x61,
	0x74, 0x75, 0x73, 0x12, 0x1b, 0x0a, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28,
	0x05, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x1a, 0x02, 0x28, 0x01, 0x52, 0x04, 0x73, 0x6f, 0x72, 0x74,
	0x12, 0x38, 0x0a, 0x09, 0x61, 0x74, 0x74, 0x72, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x08, 0x20,
	0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x41,
	0x74, 0x74, 0x72, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52,
	0x09, 0x61, 0x74, 0x74, 0x72, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x6b, 0x0a, 0x11, 0x41, 0x74,
	0x74, 0x72, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
	0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x12,
	0x16, 0x0a, 0x06, 0x61, 0x74, 0x74, 0x72, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52,
	0x06, 0x61, 0x74, 0x74, 0x72, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70,
	0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49,
	0x64, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09,
	0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xe1, 0x01, 0x0a, 0x0c, 0x41, 0x74, 0x74, 0x72,
	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01,
	0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x79, 0x70, 0x65,
	0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x74, 0x79, 0x70, 0x65, 0x49, 0x64,
	0x12, 0x18, 0x0a, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28,
	0x03, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69,
	0x74, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65,
	0x12, 0x12, 0x0a, 0x04, 0x64, 0x65, 0x73, 0x63, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,
	0x64, 0x65, 0x73, 0x63, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x06,
	0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x12, 0x0a, 0x04,
	0x73, 0x6f, 0x72, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x73, 0x6f, 0x72, 0x74,
	0x12, 0x39, 0x0a, 0x09, 0x61, 0x74, 0x74, 0x72, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x08, 0x20,
	0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x41,
	0x74, 0x74, 0x72, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
	0x52, 0x09, 0x61, 0x74, 0x74, 0x72, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xab, 0x01, 0x0a, 0x10,
	0x41, 0x74, 0x74, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
	0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64,
	0x12, 0x1f, 0x0a, 0x06, 0x74, 0x79, 0x70, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03,
	0x42, 0x07, 0xfa, 0x42, 0x04, 0x22, 0x02, 0x28, 0x01, 0x52, 0x06, 0x74, 0x79, 0x70, 0x65, 0x49,
	0x64, 0x12, 0x1d, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09,
	0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x03, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65,
	0x12, 0x12, 0x0a, 0x04, 0x64, 0x65, 0x73, 0x63, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,
	0x64, 0x65, 0x73, 0x63, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x05,
	0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1b, 0x0a, 0x04,
	0x73, 0x6f, 0x72, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x1a,
	0x02, 0x28, 0x01, 0x52, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x22, 0x91, 0x01, 0x0a, 0x11, 0x41, 0x74,
	0x74, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
	0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x12,
	0x16, 0x0a, 0x06, 0x74, 0x79, 0x70, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52,
	0x06, 0x74, 0x79, 0x70, 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65,
	0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x12, 0x0a,
	0x04, 0x64, 0x65, 0x73, 0x63, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x65, 0x73,
	0x63, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28,
	0x08, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6f, 0x72,
	0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x22, 0x78, 0x0a,
	0x12, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61,
	0x6c, 0x75, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52,
	0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x74, 0x74, 0x72, 0x49, 0x64, 0x18, 0x02, 0x20,
	0x01, 0x28, 0x03, 0x52, 0x06, 0x61, 0x74, 0x74, 0x72, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x05, 0x76,
	0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72,
	0x02, 0x10, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1b, 0x0a, 0x04, 0x73, 0x6f,
	0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x1a, 0x02, 0x28,
	0x01, 0x52, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x22, 0x6e, 0x0a, 0x1a, 0x53, 0x70, 0x65, 0x63, 0x69,
	0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73,
	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
	0x03, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x74, 0x74, 0x72, 0x49, 0x64, 0x18,
	0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x61, 0x74, 0x74, 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a,
	0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61,
	0x6c, 0x75, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28,
	0x05, 0x52, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x22, 0x99, 0x02, 0x0a, 0x14, 0x53, 0x70, 0x65, 0x63,
	0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
	0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64,
	0x12, 0x1f, 0x0a, 0x06, 0x74, 0x79, 0x70, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03,
	0x42, 0x07, 0xfa, 0x42, 0x04, 0x22, 0x02, 0x28, 0x01, 0x52, 0x06, 0x74, 0x79, 0x70, 0x65, 0x49,
	0x64, 0x12, 0x1b, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42,
	0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x02, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1b,
	0x0a, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x42, 0x07, 0xfa, 0x42,
	0x04, 0x1a, 0x02, 0x28, 0x01, 0x52, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73,
	0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x73, 0x74, 0x61,
	0x74, 0x75, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x73, 0x53, 0x6b, 0x75, 0x18, 0x06, 0x20, 0x01,
	0x28, 0x08, 0x52, 0x05, 0x69, 0x73, 0x53, 0x6b, 0x75, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x73, 0x53,
	0x65, 0x6c, 0x65, 0x63, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x53,
	0x65, 0x6c, 0x65, 0x63, 0x74, 0x12, 0x4c, 0x0a, 0x12, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69,
	0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x08, 0x20, 0x03, 0x28,
	0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x70, 0x65,
	0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52,
	0x12, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61,
	0x6c, 0x75, 0x65, 0x22, 0x27, 0x0a, 0x15, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61,
	0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02,
	0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x22, 0xed, 0x01, 0x0a,
	0x10, 0x47, 0x6f, 0x6f, 0x64, 0x73, 0x54, 0x79, 0x70, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
	0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69,
	0x64, 0x12, 0x1b, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42,
	0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x03, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x23,
	0x0a, 0x08, 0x74, 0x79, 0x70, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09,
	0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x03, 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, 0x43,
	0x6f, 0x64, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x41, 0x6c, 0x69, 0x61, 0x73,
	0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x41, 0x6c, 0x69, 0x61,
	0x73, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x73, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x18, 0x05,
	0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x73, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x12,
	0x12, 0x0a, 0x04, 0x64, 0x65, 0x73, 0x63, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64,
	0x65, 0x73, 0x63, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28,
	0x05, 0x52, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x12, 0x23, 0x0a, 0x08, 0x62, 0x72, 0x61, 0x6e, 0x64,
	0x49, 0x64, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02,
	0x10, 0x01, 0x52, 0x08, 0x62, 0x72, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x73, 0x22, 0x23, 0x0a, 0x11,
	0x47, 0x6f, 0x6f, 0x64, 0x73, 0x54, 0x79, 0x70, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
	0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69,
	0x64, 0x22, 0xf0, 0x0b, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x6f, 0x6f, 0x64,
	0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01,
	0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x12, 0x27, 0x0a, 0x0a, 0x63, 0x61, 0x74, 0x65,
	0x67, 0x6f, 0x72, 0x79, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x42, 0x07, 0xfa, 0x42,
	0x04, 0x1a, 0x02, 0x28, 0x01, 0x52, 0x0a, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x49,
	0x64, 0x12, 0x21, 0x0a, 0x07, 0x62, 0x72, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01,
	0x28, 0x05, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x1a, 0x02, 0x28, 0x01, 0x52, 0x07, 0x62, 0x72, 0x61,
	0x6e, 0x64, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x06, 0x74, 0x79, 0x70, 0x65, 0x49, 0x64, 0x18, 0x04,
	0x20, 0x01, 0x28, 0x03, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x22, 0x02, 0x28, 0x01, 0x52, 0x06, 0x74,
	0x79, 0x70, 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20,
	0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d,
	0x65, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61,
	0x6d, 0x65, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x67, 0x6f, 0x6f, 0x64, 0x73,
	0x54, 0x61, 0x67, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x6f, 0x6f, 0x64,
	0x73, 0x54, 0x61, 0x67, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x67, 0x6f, 0x6f, 0x64, 0x73, 0x53, 0x6e,
	0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x67, 0x6f, 0x6f, 0x64, 0x73, 0x53, 0x6e, 0x12,
	0x1c, 0x0a, 0x09, 0x73, 0x68, 0x6f, 0x70, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x09, 0x20, 0x01,
	0x28, 0x03, 0x52, 0x09, 0x73, 0x68, 0x6f, 0x70, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x20, 0x0a,
	0x0b, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x0a, 0x20, 0x01,
	0x28, 0x03, 0x52, 0x0b, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12,
	0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x0b, 0x20, 0x01,
	0x28, 0x03, 0x52, 0x09, 0x69, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x1e, 0x0a,
	0x0a, 0x67, 0x6f, 0x6f, 0x64, 0x73, 0x42, 0x72, 0x69, 0x65, 0x66, 0x18, 0x0c, 0x20, 0x01, 0x28,
	0x09, 0x52, 0x0a, 0x67, 0x6f, 0x6f, 0x64, 0x73, 0x42, 0x72, 0x69, 0x65, 0x66, 0x12, 0x28, 0x0a,
	0x0f, 0x67, 0x6f, 0x6f, 0x64, 0x73, 0x46, 0x72, 0x6f, 0x6e, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65,
	0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x67, 0x6f, 0x6f, 0x64, 0x73, 0x46, 0x72, 0x6f,
	0x6e, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x67, 0x6f, 0x6f, 0x64, 0x73,
	0x49, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x67, 0x6f,
	0x6f, 0x64, 0x73, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x68, 0x69,
	0x70, 0x46, 0x72, 0x65, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x73, 0x68, 0x69,
	0x70, 0x46, 0x72, 0x65, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x68, 0x69, 0x70, 0x49, 0x64, 0x18,
	0x10, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x73, 0x68, 0x69, 0x70, 0x49, 0x64, 0x12, 0x14, 0x0a,
	0x05, 0x69, 0x73, 0x4e, 0x65, 0x77, 0x18, 0x11, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x69, 0x73,
	0x4e, 0x65, 0x77, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x73, 0x48, 0x6f, 0x74, 0x18, 0x12, 0x20, 0x01,
	0x28, 0x08, 0x52, 0x05, 0x69, 0x73, 0x48, 0x6f, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x6e, 0x53,
	0x61, 0x6c, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x6f, 0x6e, 0x53, 0x61, 0x6c,
	0x65, 0x12, 0x37, 0x0a, 0x03, 0x73, 0x6b, 0x75, 0x18, 0x14, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25,
	0x2e, 0x67, 0x6f, 0x6f, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,
	0x47, 0x6f, 0x6f, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x67, 0x6f, 0x6f,
	0x64, 0x73, 0x53, 0x6b, 0x75, 0x52, 0x03, 0x73, 0x6b, 0x75, 0x1a, 0xf7, 0x06, 0x0a, 0x08, 0x67,
	0x6f, 0x6f, 0x64, 0x73, 0x53, 0x6b, 0x75, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20,
	0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x67, 0x6f, 0x6f, 0x64, 0x73,
	0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x67, 0x6f, 0x6f, 0x64, 0x73, 0x49,
	0x64, 0x12, 0x21, 0x0a, 0x07, 0x73, 0x6b, 0x75, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01,
	0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x07, 0x73, 0x6b, 0x75,
	0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01,
	0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x04, 0x63, 0x6f, 0x64,
	0x65, 0x12, 0x21, 0x0a, 0x07, 0x62, 0x61, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x05, 0x20, 0x01,
	0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x07, 0x62, 0x61, 0x72,
	0x43, 0x6f, 0x64, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x72, 0x69, 0x63, 0x65, 0x18, 0x06, 0x20,
	0x01, 0x28, 0x03, 0x52, 0x05, 0x70, 0x72, 0x69, 0x63, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x70, 0x72,
	0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01,
	0x28, 0x03, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x69,
	0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x08, 0x20, 0x01,
	0x28, 0x03, 0x52, 0x06, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6d,
	0x61, 0x67, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65,
	0x12, 0x12, 0x0a, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04,
	0x73, 0x6f, 0x72, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72,
	0x79, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x69, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f,
	0x72, 0x79, 0x12, 0x61, 0x0a, 0x11, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74,
	0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, 0x2e,
	0x67, 0x6f, 0x6f, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47,
	0x6f, 0x6f, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x67, 0x6f, 0x6f, 0x64,
	0x73, 0x53, 0x6b, 0x75, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69,
	0x6f, 0x6e, 0x52, 0x11, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f,
	0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x55, 0x0a, 0x0d, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x74,
	0x74, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67,
	0x6f, 0x6f, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x6f,
	0x6f, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x67, 0x6f, 0x6f, 0x64, 0x73,
	0x53, 0x6b, 0x75, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x74, 0x74, 0x72, 0x52, 0x0d, 0x67,
	0x72, 0x6f, 0x75, 0x70, 0x41, 0x74, 0x74, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x1a, 0x45, 0x0a, 0x0d,
	0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x19, 0x0a,
	0x03, 0x73, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x22,
	0x02, 0x28, 0x01, 0x52, 0x03, 0x73, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x03, 0x76, 0x49, 0x64, 0x18,
	0x02, 0x20, 0x01, 0x28, 0x03, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x22, 0x02, 0x28, 0x01, 0x52, 0x03,
	0x76, 0x49, 0x64, 0x1a, 0xbe, 0x02, 0x0a, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x74, 0x74,
	0x72, 0x12, 0x18, 0x0a, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01,
	0x28, 0x03, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x67,
	0x72, 0x6f, 0x75, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09,
	0x67, 0x72, 0x6f, 0x75, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x50, 0x0a, 0x08, 0x61, 0x74, 0x74,
	0x72, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x6f,
	0x6f, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x6f, 0x6f,
	0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x67, 0x6f, 0x6f, 0x64, 0x73, 0x53,
	0x6b, 0x75, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x74, 0x74, 0x72, 0x2e, 0x61, 0x74, 0x74,
	0x72, 0x52, 0x08, 0x61, 0x74, 0x74, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x1a, 0xa6, 0x01, 0x0a, 0x04,
	0x61, 0x74, 0x74, 0x72, 0x12, 0x1f, 0x0a, 0x06, 0x61, 0x74, 0x74, 0x72, 0x49, 0x64, 0x18, 0x01,
	0x20, 0x01, 0x28, 0x03, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x22, 0x02, 0x28, 0x01, 0x52, 0x06, 0x61,
	0x74, 0x74, 0x72, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x08, 0x61, 0x74, 0x74, 0x72, 0x4e, 0x61, 0x6d,
	0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01,
	0x52, 0x08, 0x61, 0x74, 0x74, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x29, 0x0a, 0x0b, 0x61, 0x74,
	0x74, 0x72, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x42,
	0x07, 0xfa, 0x42, 0x04, 0x22, 0x02, 0x28, 0x01, 0x52, 0x0b, 0x61, 0x74, 0x74, 0x72, 0x56, 0x61,
	0x6c, 0x75, 0x65, 0x49, 0x64, 0x12, 0x2d, 0x0a, 0x0d, 0x61, 0x74, 0x74, 0x72, 0x56, 0x61, 0x6c,
	0x75, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42,
	0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x0d, 0x61, 0x74, 0x74, 0x72, 0x56, 0x61, 0x6c, 0x75, 0x65,
	0x4e, 0x61, 0x6d, 0x65, 0x22, 0x25, 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x6f,
	0x6f, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x49,
	0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x49, 0x44, 0x22, 0xd3, 0x03, 0x0a, 0x11,
	0x47, 0x6f, 0x6f, 0x64, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
	0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69,
	0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x49, 0x64, 0x18,
	0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x49,
	0x64, 0x12, 0x18, 0x0a, 0x07, 0x62, 0x72, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01,
	0x28, 0x05, 0x52, 0x07, 0x62, 0x72, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e,
	0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12,
	0x18, 0x0a, 0x07, 0x67, 0x6f, 0x6f, 0x64, 0x73, 0x53, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09,
	0x52, 0x07, 0x67, 0x6f, 0x6f, 0x64, 0x73, 0x53, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6c, 0x69,
	0x63, 0x6b, 0x4e, 0x75, 0x6d, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x63, 0x6c, 0x69,
	0x63, 0x6b, 0x4e, 0x75, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x6f, 0x6c, 0x64, 0x4e, 0x75, 0x6d,
	0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x73, 0x6f, 0x6c, 0x64, 0x4e, 0x75, 0x6d, 0x12,
	0x16, 0x0a, 0x06, 0x66, 0x61, 0x76, 0x4e, 0x75, 0x6d, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52,
	0x06, 0x66, 0x61, 0x76, 0x4e, 0x75, 0x6d, 0x12, 0x20, 0x0a, 0x0b, 0x6d, 0x61, 0x72, 0x6b, 0x65,
	0x74, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x6d, 0x61,
	0x72, 0x6b, 0x65, 0x74, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x67, 0x6f, 0x6f,
	0x64, 0x73, 0x42, 0x72, 0x69, 0x65, 0x66, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x67,
	0x6f, 0x6f, 0x64, 0x73, 0x42, 0x72, 0x69, 0x65, 0x66, 0x12, 0x1c, 0x0a, 0x09, 0x67, 0x6f, 0x6f,
	0x64, 0x73, 0x44, 0x65, 0x73, 0x63, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x6f,
	0x6f, 0x64, 0x73, 0x44, 0x65, 0x73, 0x63, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x68, 0x69, 0x70, 0x46,
	0x72, 0x65, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x73, 0x68, 0x69, 0x70, 0x46,
	0x72, 0x65, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x18, 0x0d, 0x20,
	0x01, 0x28, 0x09, 0x52, 0x06, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x67,
	0x6f, 0x6f, 0x64, 0x73, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x09,
	0x52, 0x0b, 0x67, 0x6f, 0x6f, 0x64, 0x73, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x12, 0x14, 0x0a,
	0x05, 0x69, 0x73, 0x4e, 0x65, 0x77, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x69, 0x73,
	0x4e, 0x65, 0x77, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x73, 0x48, 0x6f, 0x74, 0x18, 0x10, 0x20, 0x01,
	0x28, 0x08, 0x52, 0x05, 0x69, 0x73, 0x48, 0x6f, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x6e, 0x53,
	0x61, 0x6c, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x6f, 0x6e, 0x53, 0x61, 0x6c,
	0x65, 0x22, 0x5a, 0x0a, 0x11, 0x47, 0x6f, 0x6f, 0x64, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65,
	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18,
	0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x2f, 0x0a, 0x04,
	0x6c, 0x69, 0x73, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f,
	0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x6f, 0x6f, 0x64, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x52,
	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x22, 0xfa, 0x02,
	0x0a, 0x12, 0x47, 0x6f, 0x6f, 0x64, 0x73, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71,
	0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x73,
	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x73,
	0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x49, 0x64, 0x18, 0x02,
	0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x49, 0x64,
	0x12, 0x18, 0x0a, 0x07, 0x62, 0x72, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28,
	0x05, 0x52, 0x07, 0x62, 0x72, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x69,
	0x6e, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x6d, 0x69,
	0x6e, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x50, 0x72, 0x69,
	0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x50, 0x72, 0x69,
	0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x73, 0x48, 0x6f, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28,
	0x08, 0x52, 0x05, 0x69, 0x73, 0x48, 0x6f, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x73, 0x4e, 0x65,
	0x77, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x69, 0x73, 0x4e, 0x65, 0x77, 0x12, 0x14,
	0x0a, 0x05, 0x69, 0x73, 0x54, 0x61, 0x62, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x69,
	0x73, 0x54, 0x61, 0x62, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x4e, 0x75, 0x6d,
	0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x4e, 0x75, 0x6d,
	0x12, 0x18, 0x0a, 0x07, 0x73, 0x6f, 0x6c, 0x64, 0x4e, 0x75, 0x6d, 0x18, 0x0a, 0x20, 0x01, 0x28,
	0x03, 0x52, 0x07, 0x73, 0x6f, 0x6c, 0x64, 0x4e, 0x75, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x61,
	0x76, 0x4e, 0x75, 0x6d, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x66, 0x61, 0x76, 0x4e,
	0x75, 0x6d, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x61, 0x67, 0x65, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28,
	0x03, 0x52, 0x05, 0x70, 0x61, 0x67, 0x65, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x61, 0x67, 0x65,
	0x50, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x70,
	0x61, 0x67, 0x65, 0x50, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64,
	0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x22, 0xa2, 0x01, 0x0a, 0x14, 0x43,
	0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f,
	0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52,
	0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
	0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x70, 0x61, 0x72, 0x65, 0x6e,
	0x74, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52,
	0x0e, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12,
	0x14, 0x0a, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05,
	0x6c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x73, 0x54, 0x61, 0x62, 0x18, 0x05,
	0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x69, 0x73, 0x54, 0x61, 0x62, 0x12, 0x12, 0x0a, 0x04, 0x73,
	0x6f, 0x72, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x22,
	0x32, 0x0a, 0x14, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x52,
	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6a, 0x73, 0x6f, 0x6e, 0x44,
	0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6a, 0x73, 0x6f, 0x6e, 0x44,
	0x61, 0x74, 0x61, 0x22, 0x3b, 0x0a, 0x13, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x4c,
	0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64,
	0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x65,
	0x76, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c,
	0x22, 0x8f, 0x01, 0x0a, 0x17, 0x53, 0x75, 0x62, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79,
	0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a, 0x04,
	0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x67, 0x6f, 0x6f,
	0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x49, 0x6e,
	0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f,
	0x12, 0x40, 0x0a, 0x0b, 0x73, 0x75, 0x62, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18,
	0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x67, 0x6f, 0x6f, 0x64, 0x73, 0x2e, 0x76, 0x31,
	0x2e, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73,
	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0b, 0x73, 0x75, 0x62, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f,
	0x72, 0x79, 0x22, 0xa1, 0x01, 0x0a, 0x13, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x49,
	0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64,
	0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61,
	0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x26,
	0x0a, 0x0e, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79,
	0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x61,
	0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18,
	0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x14, 0x0a, 0x05,
	0x69, 0x73, 0x54, 0x61, 0x62, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x69, 0x73, 0x54,
	0x61, 0x62, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05,
	0x52, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x22, 0x66, 0x0a, 0x18, 0x42, 0x61, 0x74, 0x63, 0x68, 0x43,
	0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65,
	0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x05, 0x52, 0x02,
	0x69, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x67, 0x6f, 0x6f, 0x64, 0x73, 0x4e, 0x75, 0x6d, 0x73, 0x18,
	0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x67, 0x6f, 0x6f, 0x64, 0x73, 0x4e, 0x75, 0x6d, 0x73,
	0x12, 0x1c, 0x0a, 0x09, 0x62, 0x72, 0x61, 0x6e, 0x64, 0x4e, 0x75, 0x6d, 0x73, 0x18, 0x03, 0x20,
	0x01, 0x28, 0x05, 0x52, 0x09, 0x62, 0x72, 0x61, 0x6e, 0x64, 0x4e, 0x75, 0x6d, 0x73, 0x22, 0x27,
	0x0a, 0x15, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79,
	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20,
	0x01, 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, 0x22, 0x4a, 0x0a, 0x10, 0x42, 0x72, 0x61, 0x6e, 0x64,
	0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x70,
	0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x70, 0x61, 0x67, 0x65,
	0x73, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x61, 0x67, 0x65, 0x50, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x73,
	0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x70, 0x61, 0x67, 0x65, 0x50, 0x65, 0x72, 0x4e,
	0x75, 0x6d, 0x73, 0x22, 0x84, 0x01, 0x0a, 0x0c, 0x42, 0x72, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x71,
	0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05,
	0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01,
	0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6c, 0x6f, 0x67, 0x6f,
	0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6c, 0x6f, 0x67, 0x6f, 0x12, 0x12, 0x0a, 0x04,
	0x64, 0x65, 0x73, 0x63, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x65, 0x73, 0x63,
	0x12, 0x14, 0x0a, 0x05, 0x69, 0x73, 0x54, 0x61, 0x62, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52,
	0x05, 0x69, 0x73, 0x54, 0x61, 0x62, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x18, 0x06,
	0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x22, 0x89, 0x01, 0x0a, 0x11, 0x42,
	0x72, 0x61, 0x6e, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
	0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, 0x64,
	0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,
	0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6c, 0x6f, 0x67, 0x6f, 0x18, 0x03, 0x20, 0x01,
	0x28, 0x09, 0x52, 0x04, 0x6c, 0x6f, 0x67, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x65, 0x73, 0x63,
	0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x65, 0x73, 0x63, 0x12, 0x14, 0x0a, 0x05,
	0x69, 0x73, 0x54, 0x61, 0x62, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x69, 0x73, 0x54,
	0x61, 0x62, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05,
	0x52, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x22, 0x5a, 0x0a, 0x11, 0x42, 0x72, 0x61, 0x6e, 0x64, 0x4c,
	0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74,
	0x6f, 0x74, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61,
	0x6c, 0x12, 0x2f, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32,
	0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x72, 0x61, 0x6e, 0x64,
	0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x04, 0x64, 0x61,
	0x74, 0x61, 0x32, 0xa6, 0x09, 0x0a, 0x05, 0x47, 0x6f, 0x6f, 0x64, 0x73, 0x12, 0x4c, 0x0a, 0x12,
	0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x4c, 0x69,
	0x73, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
	0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1e, 0x2e, 0x67, 0x6f, 0x6f,
	0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x4c, 0x69,
	0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0e, 0x47, 0x65,
	0x74, 0x53, 0x75, 0x62, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x1d, 0x2e, 0x67,
	0x6f, 0x6f, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79,
	0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x67, 0x6f,
	0x6f, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, 0x62, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f,
	0x72, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4f,
	0x0a, 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79,
	0x12, 0x1d, 0x2e, 0x67, 0x6f, 0x6f, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x74, 0x65,
	0x67, 0x6f, 0x72, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
	0x1e, 0x2e, 0x67, 0x6f, 0x6f, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x74, 0x65, 0x67,
	0x6f, 0x72, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
	0x49, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72,
	0x79, 0x12, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c,
	0x65, 0x74, 0x65, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65,
	0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
	0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x47, 0x0a, 0x0e, 0x55, 0x70,
	0x64, 0x61, 0x74, 0x65, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x1d, 0x2e, 0x67,
	0x6f, 0x6f, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79,
	0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f,
	0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d,
	0x70, 0x74, 0x79, 0x12, 0x44, 0x0a, 0x09, 0x42, 0x72, 0x61, 0x6e, 0x64, 0x4c, 0x69, 0x73, 0x74,
	0x12, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x72, 0x61, 0x6e,
	0x64, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x67,
	0x6f, 0x6f, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x72, 0x61, 0x6e, 0x64, 0x4c, 0x69, 0x73,
	0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x42, 0x0a, 0x0b, 0x43, 0x72, 0x65,
	0x61, 0x74, 0x65, 0x42, 0x72, 0x61, 0x6e, 0x64, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x64, 0x73,
	0x2e, 0x76, 0x31, 0x2e, 0x42, 0x72, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
	0x1a, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x72, 0x61, 0x6e,
	0x64, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a,
	0x0b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x42, 0x72, 0x61, 0x6e, 0x64, 0x12, 0x16, 0x2e, 0x67,
	0x6f, 0x6f, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x72, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x71,
	0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
	0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x3d, 0x0a, 0x0b,
	0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x72, 0x61, 0x6e, 0x64, 0x12, 0x16, 0x2e, 0x67, 0x6f,
	0x6f, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x72, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75,
	0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
	0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x4a, 0x0a, 0x0f, 0x43,
	0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x6f, 0x6f, 0x64, 0x73, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1a,
	0x2e, 0x67, 0x6f, 0x6f, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x6f, 0x6f, 0x64, 0x73, 0x54,
	0x79, 0x70, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x67, 0x6f, 0x6f,
	0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x6f, 0x6f, 0x64, 0x73, 0x54, 0x79, 0x70, 0x65, 0x52,
	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, 0x0a, 0x18, 0x43, 0x72, 0x65, 0x61, 0x74,
	0x65, 0x47, 0x6f, 0x6f, 0x64, 0x73, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74,
	0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x2e, 0x67, 0x6f, 0x6f, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53,
	0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75,
	0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53,
	0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70,
	0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4a, 0x0a, 0x0f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x74,
	0x74, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x64, 0x73, 0x2e,
	0x76, 0x31, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75,
	0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x41,
	0x74, 0x74, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
	0x12, 0x40, 0x0a, 0x0f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x74, 0x74, 0x72, 0x56, 0x61,
	0x6c, 0x75, 0x65, 0x12, 0x15, 0x2e, 0x67, 0x6f, 0x6f, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x41,
	0x74, 0x74, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f,
	0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
	0x73, 0x65, 0x12, 0x4a, 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x6f, 0x6f, 0x64,
	0x73, 0x12, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65,
	0x61, 0x74, 0x65, 0x47, 0x6f, 0x6f, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
	0x1d, 0x2e, 0x67, 0x6f, 0x6f, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74,
	0x65, 0x47, 0x6f, 0x6f, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43,
	0x0a, 0x0b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x6f, 0x6f, 0x64, 0x73, 0x12, 0x1c, 0x2e,
	0x67, 0x6f, 0x6f, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47,
	0x6f, 0x6f, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f,
	0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d,
	0x70, 0x74, 0x79, 0x12, 0x46, 0x0a, 0x09, 0x47, 0x6f, 0x6f, 0x64, 0x73, 0x4c, 0x69, 0x73, 0x74,
	0x12, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x6f, 0x6f, 0x64,
	0x73, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b,
	0x2e, 0x67, 0x6f, 0x6f, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x6f, 0x6f, 0x64, 0x73, 0x4c,
	0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x17, 0x5a, 0x15, 0x67,
	0x6f, 0x6f, 0x64, 0x73, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x6f, 0x64, 0x73, 0x2f, 0x76,
	0x31, 0x3b, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}

var (
	file_goods_v1_goods_proto_rawDescOnce sync.Once
	file_goods_v1_goods_proto_rawDescData = file_goods_v1_goods_proto_rawDesc
)

func file_goods_v1_goods_proto_rawDescGZIP() []byte {
	file_goods_v1_goods_proto_rawDescOnce.Do(func() {
		file_goods_v1_goods_proto_rawDescData = protoimpl.X.CompressGZIP(file_goods_v1_goods_proto_rawDescData)
	})
	return file_goods_v1_goods_proto_rawDescData
}

var file_goods_v1_goods_proto_msgTypes = make([]protoimpl.MessageInfo, 32)
var file_goods_v1_goods_proto_goTypes = []interface{}{
	(*AttrValueRequest)(nil),                        // 0: goods.v1.AttrValueRequest
	(*AttrRequest)(nil),                             // 1: goods.v1.AttrRequest
	(*AttrValueResponse)(nil),                       // 2: goods.v1.AttrValueResponse
	(*AttrResponse)(nil),                            // 3: goods.v1.AttrResponse
	(*AttrGroupRequest)(nil),                        // 4: goods.v1.AttrGroupRequest
	(*AttrGroupResponse)(nil),                       // 5: goods.v1.AttrGroupResponse
	(*SpecificationValue)(nil),                      // 6: goods.v1.SpecificationValue
	(*SpecificationValueResponse)(nil),              // 7: goods.v1.SpecificationValueResponse
	(*SpecificationRequest)(nil),                    // 8: goods.v1.SpecificationRequest
	(*SpecificationResponse)(nil),                   // 9: goods.v1.SpecificationResponse
	(*GoodsTypeRequest)(nil),                        // 10: goods.v1.GoodsTypeRequest
	(*GoodsTypeResponse)(nil),                       // 11: goods.v1.GoodsTypeResponse
	(*CreateGoodsRequest)(nil),                      // 12: goods.v1.CreateGoodsRequest
	(*CreateGoodsResponse)(nil),                     // 13: goods.v1.CreateGoodsResponse
	(*GoodsInfoResponse)(nil),                       // 14: goods.v1.GoodsInfoResponse
	(*GoodsListResponse)(nil),                       // 15: goods.v1.GoodsListResponse
	(*GoodsFilterRequest)(nil),                      // 16: goods.v1.GoodsFilterRequest
	(*CategoryInfoResponse)(nil),                    // 17: goods.v1.CategoryInfoResponse
	(*CategoryListResponse)(nil),                    // 18: goods.v1.CategoryListResponse
	(*CategoryListRequest)(nil),                     // 19: goods.v1.CategoryListRequest
	(*SubCategoryListResponse)(nil),                 // 20: goods.v1.SubCategoryListResponse
	(*CategoryInfoRequest)(nil),                     // 21: goods.v1.CategoryInfoRequest
	(*BatchCategoryInfoRequest)(nil),                // 22: goods.v1.BatchCategoryInfoRequest
	(*DeleteCategoryRequest)(nil),                   // 23: goods.v1.DeleteCategoryRequest
	(*BrandListRequest)(nil),                        // 24: goods.v1.BrandListRequest
	(*BrandRequest)(nil),                            // 25: goods.v1.BrandRequest
	(*BrandInfoResponse)(nil),                       // 26: goods.v1.BrandInfoResponse
	(*BrandListResponse)(nil),                       // 27: goods.v1.BrandListResponse
	(*CreateGoodsRequestGoodsSku)(nil),              // 28: goods.v1.CreateGoodsRequest.goodsSku
	(*CreateGoodsRequestGoodsSkuSpecification)(nil), // 29: goods.v1.CreateGoodsRequest.goodsSku.specification
	(*CreateGoodsRequestGoodsSkuGroupAttr)(nil),     // 30: goods.v1.CreateGoodsRequest.goodsSku.groupAttr
	(*CreateGoodsRequestGoodsSkuGroupAttrAttr)(nil), // 31: goods.v1.CreateGoodsRequest.goodsSku.groupAttr.attr
	(*emptypb.Empty)(nil),                           // 32: google.protobuf.Empty
}
var file_goods_v1_goods_proto_depIdxs = []int32{
	0,  // 0: goods.v1.AttrRequest.attrValue:type_name -> goods.v1.AttrValueRequest
	2,  // 1: goods.v1.AttrResponse.attrValue:type_name -> goods.v1.AttrValueResponse
	6,  // 2: goods.v1.SpecificationRequest.specificationValue:type_name -> goods.v1.SpecificationValue
	28, // 3: goods.v1.CreateGoodsRequest.sku:type_name -> goods.v1.CreateGoodsRequest.goodsSku
	14, // 4: goods.v1.GoodsListResponse.list:type_name -> goods.v1.GoodsInfoResponse
	17, // 5: goods.v1.SubCategoryListResponse.info:type_name -> goods.v1.CategoryInfoResponse
	17, // 6: goods.v1.SubCategoryListResponse.subCategory:type_name -> goods.v1.CategoryInfoResponse
	26, // 7: goods.v1.BrandListResponse.data:type_name -> goods.v1.BrandInfoResponse
	29, // 8: goods.v1.CreateGoodsRequest.goodsSku.specificationInfo:type_name -> goods.v1.CreateGoodsRequest.goodsSku.specification
	30, // 9: goods.v1.CreateGoodsRequest.goodsSku.groupAttrInfo:type_name -> goods.v1.CreateGoodsRequest.goodsSku.groupAttr
	31, // 10: goods.v1.CreateGoodsRequest.goodsSku.groupAttr.attrInfo:type_name -> goods.v1.CreateGoodsRequest.goodsSku.groupAttr.attr
	32, // 11: goods.v1.Goods.GetAllCategoryList:input_type -> google.protobuf.Empty
	19, // 12: goods.v1.Goods.GetSubCategory:input_type -> goods.v1.CategoryListRequest
	21, // 13: goods.v1.Goods.CreateCategory:input_type -> goods.v1.CategoryInfoRequest
	23, // 14: goods.v1.Goods.DeleteCategory:input_type -> goods.v1.DeleteCategoryRequest
	21, // 15: goods.v1.Goods.UpdateCategory:input_type -> goods.v1.CategoryInfoRequest
	24, // 16: goods.v1.Goods.BrandList:input_type -> goods.v1.BrandListRequest
	25, // 17: goods.v1.Goods.CreateBrand:input_type -> goods.v1.BrandRequest
	25, // 18: goods.v1.Goods.DeleteBrand:input_type -> goods.v1.BrandRequest
	25, // 19: goods.v1.Goods.UpdateBrand:input_type -> goods.v1.BrandRequest
	10, // 20: goods.v1.Goods.CreateGoodsType:input_type -> goods.v1.GoodsTypeRequest
	8,  // 21: goods.v1.Goods.CreateGoodsSpecification:input_type -> goods.v1.SpecificationRequest
	4,  // 22: goods.v1.Goods.CreateAttrGroup:input_type -> goods.v1.AttrGroupRequest
	1,  // 23: goods.v1.Goods.CreateAttrValue:input_type -> goods.v1.AttrRequest
	12, // 24: goods.v1.Goods.CreateGoods:input_type -> goods.v1.CreateGoodsRequest
	12, // 25: goods.v1.Goods.UpdateGoods:input_type -> goods.v1.CreateGoodsRequest
	16, // 26: goods.v1.Goods.GoodsList:input_type -> goods.v1.GoodsFilterRequest
	18, // 27: goods.v1.Goods.GetAllCategoryList:output_type -> goods.v1.CategoryListResponse
	20, // 28: goods.v1.Goods.GetSubCategory:output_type -> goods.v1.SubCategoryListResponse
	17, // 29: goods.v1.Goods.CreateCategory:output_type -> goods.v1.CategoryInfoResponse
	32, // 30: goods.v1.Goods.DeleteCategory:output_type -> google.protobuf.Empty
	32, // 31: goods.v1.Goods.UpdateCategory:output_type -> google.protobuf.Empty
	27, // 32: goods.v1.Goods.BrandList:output_type -> goods.v1.BrandListResponse
	26, // 33: goods.v1.Goods.CreateBrand:output_type -> goods.v1.BrandInfoResponse
	32, // 34: goods.v1.Goods.DeleteBrand:output_type -> google.protobuf.Empty
	32, // 35: goods.v1.Goods.UpdateBrand:output_type -> google.protobuf.Empty
	11, // 36: goods.v1.Goods.CreateGoodsType:output_type -> goods.v1.GoodsTypeResponse
	9,  // 37: goods.v1.Goods.CreateGoodsSpecification:output_type -> goods.v1.SpecificationResponse
	5,  // 38: goods.v1.Goods.CreateAttrGroup:output_type -> goods.v1.AttrGroupResponse
	3,  // 39: goods.v1.Goods.CreateAttrValue:output_type -> goods.v1.AttrResponse
	13, // 40: goods.v1.Goods.CreateGoods:output_type -> goods.v1.CreateGoodsResponse
	32, // 41: goods.v1.Goods.UpdateGoods:output_type -> google.protobuf.Empty
	15, // 42: goods.v1.Goods.GoodsList:output_type -> goods.v1.GoodsListResponse
	27, // [27:43] is the sub-list for method output_type
	11, // [11:27] is the sub-list for method input_type
	11, // [11:11] is the sub-list for extension type_name
	11, // [11:11] is the sub-list for extension extendee
	0,  // [0:11] is the sub-list for field type_name
}

func init() { file_goods_v1_goods_proto_init() }
func file_goods_v1_goods_proto_init() {
	if File_goods_v1_goods_proto != nil {
		return
	}
	if !protoimpl.UnsafeEnabled {
		file_goods_v1_goods_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*AttrValueRequest); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_goods_v1_goods_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*AttrRequest); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_goods_v1_goods_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*AttrValueResponse); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_goods_v1_goods_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*AttrResponse); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_goods_v1_goods_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*AttrGroupRequest); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_goods_v1_goods_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*AttrGroupResponse); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_goods_v1_goods_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*SpecificationValue); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_goods_v1_goods_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*SpecificationValueResponse); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_goods_v1_goods_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*SpecificationRequest); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_goods_v1_goods_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*SpecificationResponse); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_goods_v1_goods_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GoodsTypeRequest); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_goods_v1_goods_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GoodsTypeResponse); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_goods_v1_goods_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*CreateGoodsRequest); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_goods_v1_goods_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*CreateGoodsResponse); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_goods_v1_goods_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GoodsInfoResponse); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_goods_v1_goods_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GoodsListResponse); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_goods_v1_goods_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GoodsFilterRequest); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_goods_v1_goods_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*CategoryInfoResponse); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_goods_v1_goods_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*CategoryListResponse); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_goods_v1_goods_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*CategoryListRequest); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_goods_v1_goods_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*SubCategoryListResponse); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_goods_v1_goods_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*CategoryInfoRequest); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_goods_v1_goods_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BatchCategoryInfoRequest); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_goods_v1_goods_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*DeleteCategoryRequest); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_goods_v1_goods_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BrandListRequest); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_goods_v1_goods_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BrandRequest); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_goods_v1_goods_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BrandInfoResponse); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_goods_v1_goods_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BrandListResponse); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_goods_v1_goods_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*CreateGoodsRequestGoodsSku); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_goods_v1_goods_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*CreateGoodsRequestGoodsSkuSpecification); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_goods_v1_goods_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*CreateGoodsRequestGoodsSkuGroupAttr); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_goods_v1_goods_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*CreateGoodsRequestGoodsSkuGroupAttrAttr); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
	}
	type x struct{}
	out := protoimpl.TypeBuilder{
		File: protoimpl.DescBuilder{
			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
			RawDescriptor: file_goods_v1_goods_proto_rawDesc,
			NumEnums:      0,
			NumMessages:   32,
			NumExtensions: 0,
			NumServices:   1,
		},
		GoTypes:           file_goods_v1_goods_proto_goTypes,
		DependencyIndexes: file_goods_v1_goods_proto_depIdxs,
		MessageInfos:      file_goods_v1_goods_proto_msgTypes,
	}.Build()
	File_goods_v1_goods_proto = out.File
	file_goods_v1_goods_proto_rawDesc = nil
	file_goods_v1_goods_proto_goTypes = nil
	file_goods_v1_goods_proto_depIdxs = nil
}
