// Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.5 // protoc v3.19.4 // source: generate/protobuf/product.proto package product import ( protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" sync "sync" unsafe "unsafe" ) 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) ) // OKResp type OKResp struct { state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *OKResp) Reset() { *x = OKResp{} mi := &file_generate_protobuf_product_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *OKResp) String() string { return protoimpl.X.MessageStringOf(x) } func (*OKResp) ProtoMessage() {} func (x *OKResp) ProtoReflect() protoreflect.Message { mi := &file_generate_protobuf_product_proto_msgTypes[0] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use OKResp.ProtoReflect.Descriptor instead. func (*OKResp) Descriptor() ([]byte, []int) { return file_generate_protobuf_product_proto_rawDescGZIP(), []int{0} } // NoneReq type NoneReq struct { state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *NoneReq) Reset() { *x = NoneReq{} mi := &file_generate_protobuf_product_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *NoneReq) String() string { return protoimpl.X.MessageStringOf(x) } func (*NoneReq) ProtoMessage() {} func (x *NoneReq) ProtoReflect() protoreflect.Message { mi := &file_generate_protobuf_product_proto_msgTypes[1] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use NoneReq.ProtoReflect.Descriptor instead. func (*NoneReq) Descriptor() ([]byte, []int) { return file_generate_protobuf_product_proto_rawDescGZIP(), []int{1} } // ====================== Category Param ====================== type CreateCategoryReq struct { state protoimpl.MessageState `protogen:"open.v1"` Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *CreateCategoryReq) Reset() { *x = CreateCategoryReq{} mi := &file_generate_protobuf_product_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *CreateCategoryReq) String() string { return protoimpl.X.MessageStringOf(x) } func (*CreateCategoryReq) ProtoMessage() {} func (x *CreateCategoryReq) ProtoReflect() protoreflect.Message { mi := &file_generate_protobuf_product_proto_msgTypes[2] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use CreateCategoryReq.ProtoReflect.Descriptor instead. func (*CreateCategoryReq) Descriptor() ([]byte, []int) { return file_generate_protobuf_product_proto_rawDescGZIP(), []int{2} } func (x *CreateCategoryReq) GetName() string { if x != nil { return x.Name } return "" } type ModifyCategoryReq struct { state protoimpl.MessageState `protogen:"open.v1"` Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *ModifyCategoryReq) Reset() { *x = ModifyCategoryReq{} mi := &file_generate_protobuf_product_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *ModifyCategoryReq) String() string { return protoimpl.X.MessageStringOf(x) } func (*ModifyCategoryReq) ProtoMessage() {} func (x *ModifyCategoryReq) ProtoReflect() protoreflect.Message { mi := &file_generate_protobuf_product_proto_msgTypes[3] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use ModifyCategoryReq.ProtoReflect.Descriptor instead. func (*ModifyCategoryReq) Descriptor() ([]byte, []int) { return file_generate_protobuf_product_proto_rawDescGZIP(), []int{3} } func (x *ModifyCategoryReq) GetId() string { if x != nil { return x.Id } return "" } func (x *ModifyCategoryReq) GetName() string { if x != nil { return x.Name } return "" } type CategoryReq struct { state protoimpl.MessageState `protogen:"open.v1"` Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *CategoryReq) Reset() { *x = CategoryReq{} mi := &file_generate_protobuf_product_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *CategoryReq) String() string { return protoimpl.X.MessageStringOf(x) } func (*CategoryReq) ProtoMessage() {} func (x *CategoryReq) ProtoReflect() protoreflect.Message { mi := &file_generate_protobuf_product_proto_msgTypes[4] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use CategoryReq.ProtoReflect.Descriptor instead. func (*CategoryReq) Descriptor() ([]byte, []int) { return file_generate_protobuf_product_proto_rawDescGZIP(), []int{4} } func (x *CategoryReq) GetId() string { if x != nil { return x.Id } return "" } type Category struct { state protoimpl.MessageState `protogen:"open.v1"` Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` CreateTime int64 `protobuf:"varint,3,opt,name=create_time,json=createTime,proto3" json:"create_time,omitempty"` UpdateTime int64 `protobuf:"varint,4,opt,name=update_time,json=updateTime,proto3" json:"update_time,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *Category) Reset() { *x = Category{} mi := &file_generate_protobuf_product_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *Category) String() string { return protoimpl.X.MessageStringOf(x) } func (*Category) ProtoMessage() {} func (x *Category) ProtoReflect() protoreflect.Message { mi := &file_generate_protobuf_product_proto_msgTypes[5] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use Category.ProtoReflect.Descriptor instead. func (*Category) Descriptor() ([]byte, []int) { return file_generate_protobuf_product_proto_rawDescGZIP(), []int{5} } func (x *Category) GetId() string { if x != nil { return x.Id } return "" } func (x *Category) GetName() string { if x != nil { return x.Name } return "" } func (x *Category) GetCreateTime() int64 { if x != nil { return x.CreateTime } return 0 } func (x *Category) GetUpdateTime() int64 { if x != nil { return x.UpdateTime } return 0 } type ListCategoryReq struct { state protoimpl.MessageState `protogen:"open.v1"` PageIndex int64 `protobuf:"varint,1,opt,name=page_index,json=pageIndex,proto3" json:"page_index,omitempty"` PageSize int64 `protobuf:"varint,2,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` Ids []string `protobuf:"bytes,3,rep,name=ids,proto3" json:"ids,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *ListCategoryReq) Reset() { *x = ListCategoryReq{} mi := &file_generate_protobuf_product_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *ListCategoryReq) String() string { return protoimpl.X.MessageStringOf(x) } func (*ListCategoryReq) ProtoMessage() {} func (x *ListCategoryReq) ProtoReflect() protoreflect.Message { mi := &file_generate_protobuf_product_proto_msgTypes[6] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use ListCategoryReq.ProtoReflect.Descriptor instead. func (*ListCategoryReq) Descriptor() ([]byte, []int) { return file_generate_protobuf_product_proto_rawDescGZIP(), []int{6} } func (x *ListCategoryReq) GetPageIndex() int64 { if x != nil { return x.PageIndex } return 0 } func (x *ListCategoryReq) GetPageSize() int64 { if x != nil { return x.PageSize } return 0 } func (x *ListCategoryReq) GetIds() []string { if x != nil { return x.Ids } return nil } type ListCategoryResp struct { state protoimpl.MessageState `protogen:"open.v1"` Total int64 `protobuf:"varint,1,opt,name=total,proto3" json:"total,omitempty"` Data []*Category `protobuf:"bytes,3,rep,name=data,proto3" json:"data,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *ListCategoryResp) Reset() { *x = ListCategoryResp{} mi := &file_generate_protobuf_product_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *ListCategoryResp) String() string { return protoimpl.X.MessageStringOf(x) } func (*ListCategoryResp) ProtoMessage() {} func (x *ListCategoryResp) ProtoReflect() protoreflect.Message { mi := &file_generate_protobuf_product_proto_msgTypes[7] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use ListCategoryResp.ProtoReflect.Descriptor instead. func (*ListCategoryResp) Descriptor() ([]byte, []int) { return file_generate_protobuf_product_proto_rawDescGZIP(), []int{7} } func (x *ListCategoryResp) GetTotal() int64 { if x != nil { return x.Total } return 0 } func (x *ListCategoryResp) GetData() []*Category { if x != nil { return x.Data } return nil } type CreateTagsReq struct { state protoimpl.MessageState `protogen:"open.v1"` Types int32 `protobuf:"varint,1,opt,name=types,proto3" json:"types,omitempty"` Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` ShowType int64 `protobuf:"varint,3,opt,name=show_type,json=showType,proto3" json:"show_type,omitempty"` Cover *string `protobuf:"bytes,4,opt,name=cover,proto3,oneof" json:"cover,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *CreateTagsReq) Reset() { *x = CreateTagsReq{} mi := &file_generate_protobuf_product_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *CreateTagsReq) String() string { return protoimpl.X.MessageStringOf(x) } func (*CreateTagsReq) ProtoMessage() {} func (x *CreateTagsReq) ProtoReflect() protoreflect.Message { mi := &file_generate_protobuf_product_proto_msgTypes[8] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use CreateTagsReq.ProtoReflect.Descriptor instead. func (*CreateTagsReq) Descriptor() ([]byte, []int) { return file_generate_protobuf_product_proto_rawDescGZIP(), []int{8} } func (x *CreateTagsReq) GetTypes() int32 { if x != nil { return x.Types } return 0 } func (x *CreateTagsReq) GetName() string { if x != nil { return x.Name } return "" } func (x *CreateTagsReq) GetShowType() int64 { if x != nil { return x.ShowType } return 0 } func (x *CreateTagsReq) GetCover() string { if x != nil && x.Cover != nil { return *x.Cover } return "" } type ModifyTagsReq struct { state protoimpl.MessageState `protogen:"open.v1"` Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` Types *int32 `protobuf:"varint,2,opt,name=types,proto3,oneof" json:"types,omitempty"` Name *string `protobuf:"bytes,3,opt,name=name,proto3,oneof" json:"name,omitempty"` ShowType *int64 `protobuf:"varint,4,opt,name=show_type,json=showType,proto3,oneof" json:"show_type,omitempty"` Cover *string `protobuf:"bytes,5,opt,name=cover,proto3,oneof" json:"cover,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *ModifyTagsReq) Reset() { *x = ModifyTagsReq{} mi := &file_generate_protobuf_product_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *ModifyTagsReq) String() string { return protoimpl.X.MessageStringOf(x) } func (*ModifyTagsReq) ProtoMessage() {} func (x *ModifyTagsReq) ProtoReflect() protoreflect.Message { mi := &file_generate_protobuf_product_proto_msgTypes[9] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use ModifyTagsReq.ProtoReflect.Descriptor instead. func (*ModifyTagsReq) Descriptor() ([]byte, []int) { return file_generate_protobuf_product_proto_rawDescGZIP(), []int{9} } func (x *ModifyTagsReq) GetId() string { if x != nil { return x.Id } return "" } func (x *ModifyTagsReq) GetTypes() int32 { if x != nil && x.Types != nil { return *x.Types } return 0 } func (x *ModifyTagsReq) GetName() string { if x != nil && x.Name != nil { return *x.Name } return "" } func (x *ModifyTagsReq) GetShowType() int64 { if x != nil && x.ShowType != nil { return *x.ShowType } return 0 } func (x *ModifyTagsReq) GetCover() string { if x != nil && x.Cover != nil { return *x.Cover } return "" } type TagsReq struct { state protoimpl.MessageState `protogen:"open.v1"` Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *TagsReq) Reset() { *x = TagsReq{} mi := &file_generate_protobuf_product_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *TagsReq) String() string { return protoimpl.X.MessageStringOf(x) } func (*TagsReq) ProtoMessage() {} func (x *TagsReq) ProtoReflect() protoreflect.Message { mi := &file_generate_protobuf_product_proto_msgTypes[10] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use TagsReq.ProtoReflect.Descriptor instead. func (*TagsReq) Descriptor() ([]byte, []int) { return file_generate_protobuf_product_proto_rawDescGZIP(), []int{10} } func (x *TagsReq) GetId() string { if x != nil { return x.Id } return "" } type Tags struct { state protoimpl.MessageState `protogen:"open.v1"` Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` Types int32 `protobuf:"varint,2,opt,name=types,proto3" json:"types,omitempty"` Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` ShowType int64 `protobuf:"varint,4,opt,name=show_type,json=showType,proto3" json:"show_type,omitempty"` Cover string `protobuf:"bytes,5,opt,name=cover,proto3" json:"cover,omitempty"` UpdateAt int64 `protobuf:"varint,6,opt,name=update_at,json=updateAt,proto3" json:"update_at,omitempty"` CreatedAt int64 `protobuf:"varint,7,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *Tags) Reset() { *x = Tags{} mi := &file_generate_protobuf_product_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *Tags) String() string { return protoimpl.X.MessageStringOf(x) } func (*Tags) ProtoMessage() {} func (x *Tags) ProtoReflect() protoreflect.Message { mi := &file_generate_protobuf_product_proto_msgTypes[11] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use Tags.ProtoReflect.Descriptor instead. func (*Tags) Descriptor() ([]byte, []int) { return file_generate_protobuf_product_proto_rawDescGZIP(), []int{11} } func (x *Tags) GetId() string { if x != nil { return x.Id } return "" } func (x *Tags) GetTypes() int32 { if x != nil { return x.Types } return 0 } func (x *Tags) GetName() string { if x != nil { return x.Name } return "" } func (x *Tags) GetShowType() int64 { if x != nil { return x.ShowType } return 0 } func (x *Tags) GetCover() string { if x != nil { return x.Cover } return "" } func (x *Tags) GetUpdateAt() int64 { if x != nil { return x.UpdateAt } return 0 } func (x *Tags) GetCreatedAt() int64 { if x != nil { return x.CreatedAt } return 0 } type ListTagsReq struct { state protoimpl.MessageState `protogen:"open.v1"` PageIndex int64 `protobuf:"varint,1,opt,name=page_index,json=pageIndex,proto3" json:"page_index,omitempty"` PageSize int64 `protobuf:"varint,2,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` Ids []string `protobuf:"bytes,3,rep,name=ids,proto3" json:"ids,omitempty"` Name *string `protobuf:"bytes,4,opt,name=name,proto3,oneof" json:"name,omitempty"` Types *int32 `protobuf:"varint,5,opt,name=types,proto3,oneof" json:"types,omitempty"` ShowType *int64 `protobuf:"varint,6,opt,name=show_type,json=showType,proto3,oneof" json:"show_type,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *ListTagsReq) Reset() { *x = ListTagsReq{} mi := &file_generate_protobuf_product_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *ListTagsReq) String() string { return protoimpl.X.MessageStringOf(x) } func (*ListTagsReq) ProtoMessage() {} func (x *ListTagsReq) ProtoReflect() protoreflect.Message { mi := &file_generate_protobuf_product_proto_msgTypes[12] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use ListTagsReq.ProtoReflect.Descriptor instead. func (*ListTagsReq) Descriptor() ([]byte, []int) { return file_generate_protobuf_product_proto_rawDescGZIP(), []int{12} } func (x *ListTagsReq) GetPageIndex() int64 { if x != nil { return x.PageIndex } return 0 } func (x *ListTagsReq) GetPageSize() int64 { if x != nil { return x.PageSize } return 0 } func (x *ListTagsReq) GetIds() []string { if x != nil { return x.Ids } return nil } func (x *ListTagsReq) GetName() string { if x != nil && x.Name != nil { return *x.Name } return "" } func (x *ListTagsReq) GetTypes() int32 { if x != nil && x.Types != nil { return *x.Types } return 0 } func (x *ListTagsReq) GetShowType() int64 { if x != nil && x.ShowType != nil { return *x.ShowType } return 0 } type ListTagsResp struct { state protoimpl.MessageState `protogen:"open.v1"` Total int64 `protobuf:"varint,1,opt,name=total,proto3" json:"total,omitempty"` Data []*Tags `protobuf:"bytes,3,rep,name=data,proto3" json:"data,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *ListTagsResp) Reset() { *x = ListTagsResp{} mi := &file_generate_protobuf_product_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *ListTagsResp) String() string { return protoimpl.X.MessageStringOf(x) } func (*ListTagsResp) ProtoMessage() {} func (x *ListTagsResp) ProtoReflect() protoreflect.Message { mi := &file_generate_protobuf_product_proto_msgTypes[13] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use ListTagsResp.ProtoReflect.Descriptor instead. func (*ListTagsResp) Descriptor() ([]byte, []int) { return file_generate_protobuf_product_proto_rawDescGZIP(), []int{13} } func (x *ListTagsResp) GetTotal() int64 { if x != nil { return x.Total } return 0 } func (x *ListTagsResp) GetData() []*Tags { if x != nil { return x.Data } return nil } // ====================== KYC Param ====================== type KYC struct { state protoimpl.MessageState `protogen:"open.v1"` Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // MongoDB ObjectID 字串格式 Uid string `protobuf:"bytes,2,opt,name=uid,proto3" json:"uid,omitempty"` // 驗證人 UID CountryRegion string `protobuf:"bytes,3,opt,name=country_region,json=countryRegion,proto3" json:"country_region,omitempty"` // 地區(例如 "TW", "JP", "US"...) Name string `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"` // 真實姓名 Identification string `protobuf:"bytes,5,opt,name=identification,proto3" json:"identification,omitempty"` // 身分證字號 or 護照號碼 IdentificationType string `protobuf:"bytes,6,opt,name=identification_type,json=identificationType,proto3" json:"identification_type,omitempty"` // ID 類型:ID_CARD, PASSPORT, RESIDENT_CERT Address string `protobuf:"bytes,7,opt,name=address,proto3" json:"address,omitempty"` // 戶籍地址(或居住地址) PostalCode string `protobuf:"bytes,8,opt,name=postal_code,json=postalCode,proto3" json:"postal_code,omitempty"` // 郵遞區號(海外使用) IdFrontImage string `protobuf:"bytes,9,opt,name=id_front_image,json=idFrontImage,proto3" json:"id_front_image,omitempty"` // 身分證/護照 正面 IdBackImage string `protobuf:"bytes,10,opt,name=id_back_image,json=idBackImage,proto3" json:"id_back_image,omitempty"` // 身分證/居留證 反面 BankStatementImg string `protobuf:"bytes,11,opt,name=bank_statement_img,json=bankStatementImg,proto3" json:"bank_statement_img,omitempty"` // 銀行存摺封面照 BankCode string `protobuf:"bytes,12,opt,name=bank_code,json=bankCode,proto3" json:"bank_code,omitempty"` // 銀行代碼(可為 SWIFT) BankName string `protobuf:"bytes,13,opt,name=bank_name,json=bankName,proto3" json:"bank_name,omitempty"` // 銀行名稱(顯示用) BranchCode string `protobuf:"bytes,14,opt,name=branch_code,json=branchCode,proto3" json:"branch_code,omitempty"` // 分行代碼 BranchName string `protobuf:"bytes,15,opt,name=branch_name,json=branchName,proto3" json:"branch_name,omitempty"` // 分行名稱(顯示用) BankAccount string `protobuf:"bytes,16,opt,name=bank_account,json=bankAccount,proto3" json:"bank_account,omitempty"` // 銀行帳號 Status string `protobuf:"bytes,17,opt,name=status,proto3" json:"status,omitempty"` // 審核狀態:PENDING, APPROVED, REJECTED RejectReason string `protobuf:"bytes,18,opt,name=reject_reason,json=rejectReason,proto3" json:"reject_reason,omitempty"` // 若被駁回,原因描述 UpdatedAt int64 `protobuf:"varint,19,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"` // 更新時間(timestamp) CreatedAt int64 `protobuf:"varint,20,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` // 建立時間(timestamp) unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *KYC) Reset() { *x = KYC{} mi := &file_generate_protobuf_product_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *KYC) String() string { return protoimpl.X.MessageStringOf(x) } func (*KYC) ProtoMessage() {} func (x *KYC) ProtoReflect() protoreflect.Message { mi := &file_generate_protobuf_product_proto_msgTypes[14] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use KYC.ProtoReflect.Descriptor instead. func (*KYC) Descriptor() ([]byte, []int) { return file_generate_protobuf_product_proto_rawDescGZIP(), []int{14} } func (x *KYC) GetId() string { if x != nil { return x.Id } return "" } func (x *KYC) GetUid() string { if x != nil { return x.Uid } return "" } func (x *KYC) GetCountryRegion() string { if x != nil { return x.CountryRegion } return "" } func (x *KYC) GetName() string { if x != nil { return x.Name } return "" } func (x *KYC) GetIdentification() string { if x != nil { return x.Identification } return "" } func (x *KYC) GetIdentificationType() string { if x != nil { return x.IdentificationType } return "" } func (x *KYC) GetAddress() string { if x != nil { return x.Address } return "" } func (x *KYC) GetPostalCode() string { if x != nil { return x.PostalCode } return "" } func (x *KYC) GetIdFrontImage() string { if x != nil { return x.IdFrontImage } return "" } func (x *KYC) GetIdBackImage() string { if x != nil { return x.IdBackImage } return "" } func (x *KYC) GetBankStatementImg() string { if x != nil { return x.BankStatementImg } return "" } func (x *KYC) GetBankCode() string { if x != nil { return x.BankCode } return "" } func (x *KYC) GetBankName() string { if x != nil { return x.BankName } return "" } func (x *KYC) GetBranchCode() string { if x != nil { return x.BranchCode } return "" } func (x *KYC) GetBranchName() string { if x != nil { return x.BranchName } return "" } func (x *KYC) GetBankAccount() string { if x != nil { return x.BankAccount } return "" } func (x *KYC) GetStatus() string { if x != nil { return x.Status } return "" } func (x *KYC) GetRejectReason() string { if x != nil { return x.RejectReason } return "" } func (x *KYC) GetUpdatedAt() int64 { if x != nil { return x.UpdatedAt } return 0 } func (x *KYC) GetCreatedAt() int64 { if x != nil { return x.CreatedAt } return 0 } type CreateKYCReq struct { state protoimpl.MessageState `protogen:"open.v1"` Uid string `protobuf:"bytes,1,opt,name=uid,proto3" json:"uid,omitempty"` CountryRegion string `protobuf:"bytes,2,opt,name=country_region,json=countryRegion,proto3" json:"country_region,omitempty"` Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` Identification string `protobuf:"bytes,4,opt,name=identification,proto3" json:"identification,omitempty"` IdentificationType string `protobuf:"bytes,5,opt,name=identification_type,json=identificationType,proto3" json:"identification_type,omitempty"` Address string `protobuf:"bytes,6,opt,name=address,proto3" json:"address,omitempty"` PostalCode string `protobuf:"bytes,7,opt,name=postal_code,json=postalCode,proto3" json:"postal_code,omitempty"` IdFrontImage string `protobuf:"bytes,8,opt,name=id_front_image,json=idFrontImage,proto3" json:"id_front_image,omitempty"` IdBackImage string `protobuf:"bytes,9,opt,name=id_back_image,json=idBackImage,proto3" json:"id_back_image,omitempty"` BankStatementImg string `protobuf:"bytes,10,opt,name=bank_statement_img,json=bankStatementImg,proto3" json:"bank_statement_img,omitempty"` BankCode string `protobuf:"bytes,11,opt,name=bank_code,json=bankCode,proto3" json:"bank_code,omitempty"` BankName string `protobuf:"bytes,12,opt,name=bank_name,json=bankName,proto3" json:"bank_name,omitempty"` BranchCode string `protobuf:"bytes,13,opt,name=branch_code,json=branchCode,proto3" json:"branch_code,omitempty"` BranchName string `protobuf:"bytes,14,opt,name=branch_name,json=branchName,proto3" json:"branch_name,omitempty"` BankAccount string `protobuf:"bytes,15,opt,name=bank_account,json=bankAccount,proto3" json:"bank_account,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *CreateKYCReq) Reset() { *x = CreateKYCReq{} mi := &file_generate_protobuf_product_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *CreateKYCReq) String() string { return protoimpl.X.MessageStringOf(x) } func (*CreateKYCReq) ProtoMessage() {} func (x *CreateKYCReq) ProtoReflect() protoreflect.Message { mi := &file_generate_protobuf_product_proto_msgTypes[15] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use CreateKYCReq.ProtoReflect.Descriptor instead. func (*CreateKYCReq) Descriptor() ([]byte, []int) { return file_generate_protobuf_product_proto_rawDescGZIP(), []int{15} } func (x *CreateKYCReq) GetUid() string { if x != nil { return x.Uid } return "" } func (x *CreateKYCReq) GetCountryRegion() string { if x != nil { return x.CountryRegion } return "" } func (x *CreateKYCReq) GetName() string { if x != nil { return x.Name } return "" } func (x *CreateKYCReq) GetIdentification() string { if x != nil { return x.Identification } return "" } func (x *CreateKYCReq) GetIdentificationType() string { if x != nil { return x.IdentificationType } return "" } func (x *CreateKYCReq) GetAddress() string { if x != nil { return x.Address } return "" } func (x *CreateKYCReq) GetPostalCode() string { if x != nil { return x.PostalCode } return "" } func (x *CreateKYCReq) GetIdFrontImage() string { if x != nil { return x.IdFrontImage } return "" } func (x *CreateKYCReq) GetIdBackImage() string { if x != nil { return x.IdBackImage } return "" } func (x *CreateKYCReq) GetBankStatementImg() string { if x != nil { return x.BankStatementImg } return "" } func (x *CreateKYCReq) GetBankCode() string { if x != nil { return x.BankCode } return "" } func (x *CreateKYCReq) GetBankName() string { if x != nil { return x.BankName } return "" } func (x *CreateKYCReq) GetBranchCode() string { if x != nil { return x.BranchCode } return "" } func (x *CreateKYCReq) GetBranchName() string { if x != nil { return x.BranchName } return "" } func (x *CreateKYCReq) GetBankAccount() string { if x != nil { return x.BankAccount } return "" } type FindLatestKYCByUIDReq struct { state protoimpl.MessageState `protogen:"open.v1"` Uid string `protobuf:"bytes,1,opt,name=uid,proto3" json:"uid,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *FindLatestKYCByUIDReq) Reset() { *x = FindLatestKYCByUIDReq{} mi := &file_generate_protobuf_product_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *FindLatestKYCByUIDReq) String() string { return protoimpl.X.MessageStringOf(x) } func (*FindLatestKYCByUIDReq) ProtoMessage() {} func (x *FindLatestKYCByUIDReq) ProtoReflect() protoreflect.Message { mi := &file_generate_protobuf_product_proto_msgTypes[16] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use FindLatestKYCByUIDReq.ProtoReflect.Descriptor instead. func (*FindLatestKYCByUIDReq) Descriptor() ([]byte, []int) { return file_generate_protobuf_product_proto_rawDescGZIP(), []int{16} } func (x *FindLatestKYCByUIDReq) GetUid() string { if x != nil { return x.Uid } return "" } type FindKYCByIDReq struct { state protoimpl.MessageState `protogen:"open.v1"` Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *FindKYCByIDReq) Reset() { *x = FindKYCByIDReq{} mi := &file_generate_protobuf_product_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *FindKYCByIDReq) String() string { return protoimpl.X.MessageStringOf(x) } func (*FindKYCByIDReq) ProtoMessage() {} func (x *FindKYCByIDReq) ProtoReflect() protoreflect.Message { mi := &file_generate_protobuf_product_proto_msgTypes[17] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use FindKYCByIDReq.ProtoReflect.Descriptor instead. func (*FindKYCByIDReq) Descriptor() ([]byte, []int) { return file_generate_protobuf_product_proto_rawDescGZIP(), []int{17} } func (x *FindKYCByIDReq) GetId() string { if x != nil { return x.Id } return "" } type ListKYCReq struct { state protoimpl.MessageState `protogen:"open.v1"` Uid *string `protobuf:"bytes,1,opt,name=uid,proto3,oneof" json:"uid,omitempty"` Country *string `protobuf:"bytes,2,opt,name=country,proto3,oneof" json:"country,omitempty"` Status *string `protobuf:"bytes,3,opt,name=status,proto3,oneof" json:"status,omitempty"` // 可改 enum PageSize int64 `protobuf:"varint,4,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` PageIndex int64 `protobuf:"varint,5,opt,name=page_index,json=pageIndex,proto3" json:"page_index,omitempty"` SortByDate bool `protobuf:"varint,6,opt,name=sort_by_date,json=sortByDate,proto3" json:"sort_by_date,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *ListKYCReq) Reset() { *x = ListKYCReq{} mi := &file_generate_protobuf_product_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *ListKYCReq) String() string { return protoimpl.X.MessageStringOf(x) } func (*ListKYCReq) ProtoMessage() {} func (x *ListKYCReq) ProtoReflect() protoreflect.Message { mi := &file_generate_protobuf_product_proto_msgTypes[18] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use ListKYCReq.ProtoReflect.Descriptor instead. func (*ListKYCReq) Descriptor() ([]byte, []int) { return file_generate_protobuf_product_proto_rawDescGZIP(), []int{18} } func (x *ListKYCReq) GetUid() string { if x != nil && x.Uid != nil { return *x.Uid } return "" } func (x *ListKYCReq) GetCountry() string { if x != nil && x.Country != nil { return *x.Country } return "" } func (x *ListKYCReq) GetStatus() string { if x != nil && x.Status != nil { return *x.Status } return "" } func (x *ListKYCReq) GetPageSize() int64 { if x != nil { return x.PageSize } return 0 } func (x *ListKYCReq) GetPageIndex() int64 { if x != nil { return x.PageIndex } return 0 } func (x *ListKYCReq) GetSortByDate() bool { if x != nil { return x.SortByDate } return false } type ListKYCResp struct { state protoimpl.MessageState `protogen:"open.v1"` List []*KYC `protobuf:"bytes,1,rep,name=list,proto3" json:"list,omitempty"` Total int64 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *ListKYCResp) Reset() { *x = ListKYCResp{} mi := &file_generate_protobuf_product_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *ListKYCResp) String() string { return protoimpl.X.MessageStringOf(x) } func (*ListKYCResp) ProtoMessage() {} func (x *ListKYCResp) ProtoReflect() protoreflect.Message { mi := &file_generate_protobuf_product_proto_msgTypes[19] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use ListKYCResp.ProtoReflect.Descriptor instead. func (*ListKYCResp) Descriptor() ([]byte, []int) { return file_generate_protobuf_product_proto_rawDescGZIP(), []int{19} } func (x *ListKYCResp) GetList() []*KYC { if x != nil { return x.List } return nil } func (x *ListKYCResp) GetTotal() int64 { if x != nil { return x.Total } return 0 } type UpdateKYCStatusReq struct { state protoimpl.MessageState `protogen:"open.v1"` Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` Status string `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"` // 可改 enum:PENDING, APPROVED, REJECTED Reason *string `protobuf:"bytes,3,opt,name=reason,proto3,oneof" json:"reason,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *UpdateKYCStatusReq) Reset() { *x = UpdateKYCStatusReq{} mi := &file_generate_protobuf_product_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *UpdateKYCStatusReq) String() string { return protoimpl.X.MessageStringOf(x) } func (*UpdateKYCStatusReq) ProtoMessage() {} func (x *UpdateKYCStatusReq) ProtoReflect() protoreflect.Message { mi := &file_generate_protobuf_product_proto_msgTypes[20] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use UpdateKYCStatusReq.ProtoReflect.Descriptor instead. func (*UpdateKYCStatusReq) Descriptor() ([]byte, []int) { return file_generate_protobuf_product_proto_rawDescGZIP(), []int{20} } func (x *UpdateKYCStatusReq) GetId() string { if x != nil { return x.Id } return "" } func (x *UpdateKYCStatusReq) GetStatus() string { if x != nil { return x.Status } return "" } func (x *UpdateKYCStatusReq) GetReason() string { if x != nil && x.Reason != nil { return *x.Reason } return "" } type UpdateKYCInfoReq struct { state protoimpl.MessageState `protogen:"open.v1"` Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` Name *string `protobuf:"bytes,2,opt,name=name,proto3,oneof" json:"name,omitempty"` Identification *string `protobuf:"bytes,3,opt,name=identification,proto3,oneof" json:"identification,omitempty"` IdentificationType *string `protobuf:"bytes,4,opt,name=identification_type,json=identificationType,proto3,oneof" json:"identification_type,omitempty"` Address *string `protobuf:"bytes,5,opt,name=address,proto3,oneof" json:"address,omitempty"` PostalCode *string `protobuf:"bytes,6,opt,name=postal_code,json=postalCode,proto3,oneof" json:"postal_code,omitempty"` IdFrontImage *string `protobuf:"bytes,7,opt,name=id_front_image,json=idFrontImage,proto3,oneof" json:"id_front_image,omitempty"` IdBackImage *string `protobuf:"bytes,8,opt,name=id_back_image,json=idBackImage,proto3,oneof" json:"id_back_image,omitempty"` BankStatementImg *string `protobuf:"bytes,9,opt,name=bank_statement_img,json=bankStatementImg,proto3,oneof" json:"bank_statement_img,omitempty"` BankCode *string `protobuf:"bytes,10,opt,name=bank_code,json=bankCode,proto3,oneof" json:"bank_code,omitempty"` BankName *string `protobuf:"bytes,11,opt,name=bank_name,json=bankName,proto3,oneof" json:"bank_name,omitempty"` BranchCode *string `protobuf:"bytes,12,opt,name=branch_code,json=branchCode,proto3,oneof" json:"branch_code,omitempty"` BranchName *string `protobuf:"bytes,13,opt,name=branch_name,json=branchName,proto3,oneof" json:"branch_name,omitempty"` BankAccount *string `protobuf:"bytes,14,opt,name=bank_account,json=bankAccount,proto3,oneof" json:"bank_account,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *UpdateKYCInfoReq) Reset() { *x = UpdateKYCInfoReq{} mi := &file_generate_protobuf_product_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *UpdateKYCInfoReq) String() string { return protoimpl.X.MessageStringOf(x) } func (*UpdateKYCInfoReq) ProtoMessage() {} func (x *UpdateKYCInfoReq) ProtoReflect() protoreflect.Message { mi := &file_generate_protobuf_product_proto_msgTypes[21] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use UpdateKYCInfoReq.ProtoReflect.Descriptor instead. func (*UpdateKYCInfoReq) Descriptor() ([]byte, []int) { return file_generate_protobuf_product_proto_rawDescGZIP(), []int{21} } func (x *UpdateKYCInfoReq) GetId() string { if x != nil { return x.Id } return "" } func (x *UpdateKYCInfoReq) GetName() string { if x != nil && x.Name != nil { return *x.Name } return "" } func (x *UpdateKYCInfoReq) GetIdentification() string { if x != nil && x.Identification != nil { return *x.Identification } return "" } func (x *UpdateKYCInfoReq) GetIdentificationType() string { if x != nil && x.IdentificationType != nil { return *x.IdentificationType } return "" } func (x *UpdateKYCInfoReq) GetAddress() string { if x != nil && x.Address != nil { return *x.Address } return "" } func (x *UpdateKYCInfoReq) GetPostalCode() string { if x != nil && x.PostalCode != nil { return *x.PostalCode } return "" } func (x *UpdateKYCInfoReq) GetIdFrontImage() string { if x != nil && x.IdFrontImage != nil { return *x.IdFrontImage } return "" } func (x *UpdateKYCInfoReq) GetIdBackImage() string { if x != nil && x.IdBackImage != nil { return *x.IdBackImage } return "" } func (x *UpdateKYCInfoReq) GetBankStatementImg() string { if x != nil && x.BankStatementImg != nil { return *x.BankStatementImg } return "" } func (x *UpdateKYCInfoReq) GetBankCode() string { if x != nil && x.BankCode != nil { return *x.BankCode } return "" } func (x *UpdateKYCInfoReq) GetBankName() string { if x != nil && x.BankName != nil { return *x.BankName } return "" } func (x *UpdateKYCInfoReq) GetBranchCode() string { if x != nil && x.BranchCode != nil { return *x.BranchCode } return "" } func (x *UpdateKYCInfoReq) GetBranchName() string { if x != nil && x.BranchName != nil { return *x.BranchName } return "" } func (x *UpdateKYCInfoReq) GetBankAccount() string { if x != nil && x.BankAccount != nil { return *x.BankAccount } return "" } var File_generate_protobuf_product_proto protoreflect.FileDescriptor var file_generate_protobuf_product_proto_rawDesc = string([]byte{ 0x0a, 0x1f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x07, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x22, 0x08, 0x0a, 0x06, 0x4f, 0x4b, 0x52, 0x65, 0x73, 0x70, 0x22, 0x09, 0x0a, 0x07, 0x4e, 0x6f, 0x6e, 0x65, 0x52, 0x65, 0x71, 0x22, 0x27, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x37, 0x0a, 0x11, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x1d, 0x0a, 0x0b, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x70, 0x0a, 0x08, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 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, 0x1f, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x5f, 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x69, 0x64, 0x73, 0x22, 0x4f, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x25, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x2e, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x7b, 0x0a, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x73, 0x52, 0x65, 0x71, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x74, 0x79, 0x70, 0x65, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x68, 0x6f, 0x77, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x73, 0x68, 0x6f, 0x77, 0x54, 0x79, 0x70, 0x65, 0x12, 0x19, 0x0a, 0x05, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x05, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x88, 0x01, 0x01, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x22, 0xbb, 0x01, 0x0a, 0x0d, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x54, 0x61, 0x67, 0x73, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x19, 0x0a, 0x05, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x48, 0x00, 0x52, 0x05, 0x74, 0x79, 0x70, 0x65, 0x73, 0x88, 0x01, 0x01, 0x12, 0x17, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, 0x20, 0x0a, 0x09, 0x73, 0x68, 0x6f, 0x77, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x48, 0x02, 0x52, 0x08, 0x73, 0x68, 0x6f, 0x77, 0x54, 0x79, 0x70, 0x65, 0x88, 0x01, 0x01, 0x12, 0x19, 0x0a, 0x05, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x03, 0x52, 0x05, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x88, 0x01, 0x01, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x73, 0x68, 0x6f, 0x77, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x22, 0x19, 0x0a, 0x07, 0x54, 0x61, 0x67, 0x73, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0xaf, 0x01, 0x0a, 0x04, 0x54, 0x61, 0x67, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x74, 0x79, 0x70, 0x65, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x68, 0x6f, 0x77, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x73, 0x68, 0x6f, 0x77, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x61, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x22, 0xd2, 0x01, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x67, 0x73, 0x52, 0x65, 0x71, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x69, 0x64, 0x73, 0x12, 0x17, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, 0x19, 0x0a, 0x05, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x48, 0x01, 0x52, 0x05, 0x74, 0x79, 0x70, 0x65, 0x73, 0x88, 0x01, 0x01, 0x12, 0x20, 0x0a, 0x09, 0x73, 0x68, 0x6f, 0x77, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x48, 0x02, 0x52, 0x08, 0x73, 0x68, 0x6f, 0x77, 0x54, 0x79, 0x70, 0x65, 0x88, 0x01, 0x01, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x73, 0x68, 0x6f, 0x77, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x22, 0x47, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x21, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x2e, 0x54, 0x61, 0x67, 0x73, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x88, 0x05, 0x0a, 0x03, 0x4b, 0x59, 0x43, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2f, 0x0a, 0x13, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6f, 0x73, 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6f, 0x73, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x69, 0x64, 0x5f, 0x66, 0x72, 0x6f, 0x6e, 0x74, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x69, 0x64, 0x46, 0x72, 0x6f, 0x6e, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x22, 0x0a, 0x0d, 0x69, 0x64, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x69, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x62, 0x61, 0x6e, 0x6b, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6d, 0x67, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x62, 0x61, 0x6e, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x6d, 0x67, 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x61, 0x6e, 0x6b, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x62, 0x61, 0x6e, 0x6b, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x61, 0x6e, 0x6b, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x62, 0x61, 0x6e, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x62, 0x61, 0x6e, 0x6b, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x62, 0x61, 0x6e, 0x6b, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x13, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x14, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x22, 0x86, 0x04, 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4b, 0x59, 0x43, 0x52, 0x65, 0x71, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2f, 0x0a, 0x13, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6f, 0x73, 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6f, 0x73, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x69, 0x64, 0x5f, 0x66, 0x72, 0x6f, 0x6e, 0x74, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x69, 0x64, 0x46, 0x72, 0x6f, 0x6e, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x22, 0x0a, 0x0d, 0x69, 0x64, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x69, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x62, 0x61, 0x6e, 0x6b, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6d, 0x67, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x62, 0x61, 0x6e, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x6d, 0x67, 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x61, 0x6e, 0x6b, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x62, 0x61, 0x6e, 0x6b, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x61, 0x6e, 0x6b, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x62, 0x61, 0x6e, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x62, 0x61, 0x6e, 0x6b, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x62, 0x61, 0x6e, 0x6b, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x29, 0x0a, 0x15, 0x46, 0x69, 0x6e, 0x64, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x4b, 0x59, 0x43, 0x42, 0x79, 0x55, 0x49, 0x44, 0x52, 0x65, 0x71, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x69, 0x64, 0x22, 0x20, 0x0a, 0x0e, 0x46, 0x69, 0x6e, 0x64, 0x4b, 0x59, 0x43, 0x42, 0x79, 0x49, 0x44, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0xdc, 0x01, 0x0a, 0x0a, 0x4c, 0x69, 0x73, 0x74, 0x4b, 0x59, 0x43, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x03, 0x75, 0x69, 0x64, 0x88, 0x01, 0x01, 0x12, 0x1d, 0x0a, 0x07, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x07, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x88, 0x01, 0x01, 0x12, 0x1b, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x02, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x88, 0x01, 0x01, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x20, 0x0a, 0x0c, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x62, 0x79, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x73, 0x6f, 0x72, 0x74, 0x42, 0x79, 0x44, 0x61, 0x74, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x75, 0x69, 0x64, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x45, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x4b, 0x59, 0x43, 0x52, 0x65, 0x73, 0x70, 0x12, 0x20, 0x0a, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x2e, 0x4b, 0x59, 0x43, 0x52, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x22, 0x64, 0x0a, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4b, 0x59, 0x43, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1b, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x22, 0xfb, 0x05, 0x0a, 0x10, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4b, 0x59, 0x43, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x17, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, 0x2b, 0x0a, 0x0e, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x0e, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x34, 0x0a, 0x13, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x02, 0x52, 0x12, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x88, 0x01, 0x01, 0x12, 0x1d, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x03, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x88, 0x01, 0x01, 0x12, 0x24, 0x0a, 0x0b, 0x70, 0x6f, 0x73, 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x48, 0x04, 0x52, 0x0a, 0x70, 0x6f, 0x73, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x64, 0x65, 0x88, 0x01, 0x01, 0x12, 0x29, 0x0a, 0x0e, 0x69, 0x64, 0x5f, 0x66, 0x72, 0x6f, 0x6e, 0x74, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x48, 0x05, 0x52, 0x0c, 0x69, 0x64, 0x46, 0x72, 0x6f, 0x6e, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x88, 0x01, 0x01, 0x12, 0x27, 0x0a, 0x0d, 0x69, 0x64, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x48, 0x06, 0x52, 0x0b, 0x69, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x88, 0x01, 0x01, 0x12, 0x31, 0x0a, 0x12, 0x62, 0x61, 0x6e, 0x6b, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6d, 0x67, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x48, 0x07, 0x52, 0x10, 0x62, 0x61, 0x6e, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x6d, 0x67, 0x88, 0x01, 0x01, 0x12, 0x20, 0x0a, 0x09, 0x62, 0x61, 0x6e, 0x6b, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x48, 0x08, 0x52, 0x08, 0x62, 0x61, 0x6e, 0x6b, 0x43, 0x6f, 0x64, 0x65, 0x88, 0x01, 0x01, 0x12, 0x20, 0x0a, 0x09, 0x62, 0x61, 0x6e, 0x6b, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x48, 0x09, 0x52, 0x08, 0x62, 0x61, 0x6e, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, 0x24, 0x0a, 0x0b, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x48, 0x0a, 0x52, 0x0a, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x43, 0x6f, 0x64, 0x65, 0x88, 0x01, 0x01, 0x12, 0x24, 0x0a, 0x0b, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x48, 0x0b, 0x52, 0x0a, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x4e, 0x61, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, 0x26, 0x0a, 0x0c, 0x62, 0x61, 0x6e, 0x6b, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x48, 0x0c, 0x52, 0x0b, 0x62, 0x61, 0x6e, 0x6b, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x88, 0x01, 0x01, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x42, 0x11, 0x0a, 0x0f, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x16, 0x0a, 0x14, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x70, 0x6f, 0x73, 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x42, 0x11, 0x0a, 0x0f, 0x5f, 0x69, 0x64, 0x5f, 0x66, 0x72, 0x6f, 0x6e, 0x74, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x69, 0x64, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x42, 0x15, 0x0a, 0x13, 0x5f, 0x62, 0x61, 0x6e, 0x6b, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6d, 0x67, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x62, 0x61, 0x6e, 0x6b, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x62, 0x61, 0x6e, 0x6b, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x62, 0x61, 0x6e, 0x6b, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x32, 0xa4, 0x07, 0x0a, 0x07, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x12, 0x3d, 0x0a, 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x1a, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x2e, 0x4f, 0x4b, 0x52, 0x65, 0x73, 0x70, 0x12, 0x3d, 0x0a, 0x0e, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x2e, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x1a, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x2e, 0x4f, 0x4b, 0x52, 0x65, 0x73, 0x70, 0x12, 0x37, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x14, 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x2e, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x1a, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x2e, 0x4f, 0x4b, 0x52, 0x65, 0x73, 0x70, 0x12, 0x36, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x14, 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x2e, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x2e, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x43, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x1a, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x12, 0x35, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x73, 0x12, 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x2e, 0x4f, 0x4b, 0x52, 0x65, 0x73, 0x70, 0x12, 0x35, 0x0a, 0x0a, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x54, 0x61, 0x67, 0x73, 0x12, 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x2e, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x54, 0x61, 0x67, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x2e, 0x4f, 0x4b, 0x52, 0x65, 0x73, 0x70, 0x12, 0x2f, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x67, 0x73, 0x12, 0x10, 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x2e, 0x54, 0x61, 0x67, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x2e, 0x4f, 0x4b, 0x52, 0x65, 0x73, 0x70, 0x12, 0x2a, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x54, 0x61, 0x67, 0x73, 0x12, 0x10, 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x2e, 0x54, 0x61, 0x67, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x0d, 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x2e, 0x54, 0x61, 0x67, 0x73, 0x12, 0x37, 0x0a, 0x08, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x67, 0x73, 0x12, 0x14, 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x67, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x33, 0x0a, 0x09, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4b, 0x59, 0x43, 0x12, 0x15, 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4b, 0x59, 0x43, 0x52, 0x65, 0x71, 0x1a, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x2e, 0x4f, 0x4b, 0x52, 0x65, 0x73, 0x70, 0x12, 0x42, 0x0a, 0x12, 0x46, 0x69, 0x6e, 0x64, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x4b, 0x59, 0x43, 0x42, 0x79, 0x55, 0x49, 0x44, 0x12, 0x1e, 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x4b, 0x59, 0x43, 0x42, 0x79, 0x55, 0x49, 0x44, 0x52, 0x65, 0x71, 0x1a, 0x0c, 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x2e, 0x4b, 0x59, 0x43, 0x12, 0x34, 0x0a, 0x0b, 0x46, 0x69, 0x6e, 0x64, 0x4b, 0x59, 0x43, 0x42, 0x79, 0x49, 0x44, 0x12, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x4b, 0x59, 0x43, 0x42, 0x79, 0x49, 0x44, 0x52, 0x65, 0x71, 0x1a, 0x0c, 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x2e, 0x4b, 0x59, 0x43, 0x12, 0x34, 0x0a, 0x07, 0x4c, 0x69, 0x73, 0x74, 0x4b, 0x59, 0x43, 0x12, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4b, 0x59, 0x43, 0x52, 0x65, 0x71, 0x1a, 0x14, 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4b, 0x59, 0x43, 0x52, 0x65, 0x73, 0x70, 0x12, 0x3f, 0x0a, 0x0f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4b, 0x59, 0x43, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4b, 0x59, 0x43, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x2e, 0x4f, 0x4b, 0x52, 0x65, 0x73, 0x70, 0x12, 0x3b, 0x0a, 0x0d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4b, 0x59, 0x43, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4b, 0x59, 0x43, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x1a, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x2e, 0x4f, 0x4b, 0x52, 0x65, 0x73, 0x70, 0x42, 0x0b, 0x5a, 0x09, 0x2e, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, }) var ( file_generate_protobuf_product_proto_rawDescOnce sync.Once file_generate_protobuf_product_proto_rawDescData []byte ) func file_generate_protobuf_product_proto_rawDescGZIP() []byte { file_generate_protobuf_product_proto_rawDescOnce.Do(func() { file_generate_protobuf_product_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_generate_protobuf_product_proto_rawDesc), len(file_generate_protobuf_product_proto_rawDesc))) }) return file_generate_protobuf_product_proto_rawDescData } var file_generate_protobuf_product_proto_msgTypes = make([]protoimpl.MessageInfo, 22) var file_generate_protobuf_product_proto_goTypes = []any{ (*OKResp)(nil), // 0: product.OKResp (*NoneReq)(nil), // 1: product.NoneReq (*CreateCategoryReq)(nil), // 2: product.CreateCategoryReq (*ModifyCategoryReq)(nil), // 3: product.ModifyCategoryReq (*CategoryReq)(nil), // 4: product.CategoryReq (*Category)(nil), // 5: product.Category (*ListCategoryReq)(nil), // 6: product.ListCategoryReq (*ListCategoryResp)(nil), // 7: product.ListCategoryResp (*CreateTagsReq)(nil), // 8: product.CreateTagsReq (*ModifyTagsReq)(nil), // 9: product.ModifyTagsReq (*TagsReq)(nil), // 10: product.TagsReq (*Tags)(nil), // 11: product.Tags (*ListTagsReq)(nil), // 12: product.ListTagsReq (*ListTagsResp)(nil), // 13: product.ListTagsResp (*KYC)(nil), // 14: product.KYC (*CreateKYCReq)(nil), // 15: product.CreateKYCReq (*FindLatestKYCByUIDReq)(nil), // 16: product.FindLatestKYCByUIDReq (*FindKYCByIDReq)(nil), // 17: product.FindKYCByIDReq (*ListKYCReq)(nil), // 18: product.ListKYCReq (*ListKYCResp)(nil), // 19: product.ListKYCResp (*UpdateKYCStatusReq)(nil), // 20: product.UpdateKYCStatusReq (*UpdateKYCInfoReq)(nil), // 21: product.UpdateKYCInfoReq } var file_generate_protobuf_product_proto_depIdxs = []int32{ 5, // 0: product.ListCategoryResp.data:type_name -> product.Category 11, // 1: product.ListTagsResp.data:type_name -> product.Tags 14, // 2: product.ListKYCResp.list:type_name -> product.KYC 2, // 3: product.Product.CreateCategory:input_type -> product.CreateCategoryReq 3, // 4: product.Product.ModifyCategory:input_type -> product.ModifyCategoryReq 4, // 5: product.Product.DeleteCategory:input_type -> product.CategoryReq 4, // 6: product.Product.GetCategory:input_type -> product.CategoryReq 6, // 7: product.Product.ListCategory:input_type -> product.ListCategoryReq 8, // 8: product.Product.CreateTags:input_type -> product.CreateTagsReq 9, // 9: product.Product.ModifyTags:input_type -> product.ModifyTagsReq 10, // 10: product.Product.DeleteTags:input_type -> product.TagsReq 10, // 11: product.Product.GetTags:input_type -> product.TagsReq 12, // 12: product.Product.ListTags:input_type -> product.ListTagsReq 15, // 13: product.Product.CreateKYC:input_type -> product.CreateKYCReq 16, // 14: product.Product.FindLatestKYCByUID:input_type -> product.FindLatestKYCByUIDReq 17, // 15: product.Product.FindKYCByID:input_type -> product.FindKYCByIDReq 18, // 16: product.Product.ListKYC:input_type -> product.ListKYCReq 20, // 17: product.Product.UpdateKYCStatus:input_type -> product.UpdateKYCStatusReq 21, // 18: product.Product.UpdateKYCInfo:input_type -> product.UpdateKYCInfoReq 0, // 19: product.Product.CreateCategory:output_type -> product.OKResp 0, // 20: product.Product.ModifyCategory:output_type -> product.OKResp 0, // 21: product.Product.DeleteCategory:output_type -> product.OKResp 5, // 22: product.Product.GetCategory:output_type -> product.Category 7, // 23: product.Product.ListCategory:output_type -> product.ListCategoryResp 0, // 24: product.Product.CreateTags:output_type -> product.OKResp 0, // 25: product.Product.ModifyTags:output_type -> product.OKResp 0, // 26: product.Product.DeleteTags:output_type -> product.OKResp 11, // 27: product.Product.GetTags:output_type -> product.Tags 13, // 28: product.Product.ListTags:output_type -> product.ListTagsResp 0, // 29: product.Product.CreateKYC:output_type -> product.OKResp 14, // 30: product.Product.FindLatestKYCByUID:output_type -> product.KYC 14, // 31: product.Product.FindKYCByID:output_type -> product.KYC 19, // 32: product.Product.ListKYC:output_type -> product.ListKYCResp 0, // 33: product.Product.UpdateKYCStatus:output_type -> product.OKResp 0, // 34: product.Product.UpdateKYCInfo:output_type -> product.OKResp 19, // [19:35] is the sub-list for method output_type 3, // [3:19] is the sub-list for method input_type 3, // [3:3] is the sub-list for extension type_name 3, // [3:3] is the sub-list for extension extendee 0, // [0:3] is the sub-list for field type_name } func init() { file_generate_protobuf_product_proto_init() } func file_generate_protobuf_product_proto_init() { if File_generate_protobuf_product_proto != nil { return } file_generate_protobuf_product_proto_msgTypes[8].OneofWrappers = []any{} file_generate_protobuf_product_proto_msgTypes[9].OneofWrappers = []any{} file_generate_protobuf_product_proto_msgTypes[12].OneofWrappers = []any{} file_generate_protobuf_product_proto_msgTypes[18].OneofWrappers = []any{} file_generate_protobuf_product_proto_msgTypes[20].OneofWrappers = []any{} file_generate_protobuf_product_proto_msgTypes[21].OneofWrappers = []any{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: unsafe.Slice(unsafe.StringData(file_generate_protobuf_product_proto_rawDesc), len(file_generate_protobuf_product_proto_rawDesc)), NumEnums: 0, NumMessages: 22, NumExtensions: 0, NumServices: 1, }, GoTypes: file_generate_protobuf_product_proto_goTypes, DependencyIndexes: file_generate_protobuf_product_proto_depIdxs, MessageInfos: file_generate_protobuf_product_proto_msgTypes, }.Build() File_generate_protobuf_product_proto = out.File file_generate_protobuf_product_proto_goTypes = nil file_generate_protobuf_product_proto_depIdxs = nil }