// Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.29.0 // protoc v4.22.2 // source: mdbc.proto package mdbc import ( protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" timestamppb "google.golang.org/protobuf/types/known/timestamppb" 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 AdminType int32 const ( // @desc: 普通用户 AdminType_AdminTypeNil AdminType = 0 // @desc: 管理员 AdminType_AdminTypeAdmin AdminType = 1 // @desc: 群主 AdminType_AdminTypeOwner AdminType = 2 ) // Enum value maps for AdminType. var ( AdminType_name = map[int32]string{ 0: "AdminTypeNil", 1: "AdminTypeAdmin", 2: "AdminTypeOwner", } AdminType_value = map[string]int32{ "AdminTypeNil": 0, "AdminTypeAdmin": 1, "AdminTypeOwner": 2, } ) func (x AdminType) Enum() *AdminType { p := new(AdminType) *p = x return p } func (x AdminType) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (AdminType) Descriptor() protoreflect.EnumDescriptor { return file_mdbc_proto_enumTypes[0].Descriptor() } func (AdminType) Type() protoreflect.EnumType { return &file_mdbc_proto_enumTypes[0] } func (x AdminType) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use AdminType.Descriptor instead. func (AdminType) EnumDescriptor() ([]byte, []int) { return file_mdbc_proto_rawDescGZIP(), []int{0} } type TaskState int32 const ( TaskState_TaskStateNil TaskState = 0 //已初始化 TaskState_TaskStateRunning TaskState = 1 //运行中 TaskState_TaskStateFailed TaskState = 2 //失败退出 TaskState_TaskStateCompleted TaskState = 3 //完成 ) // Enum value maps for TaskState. var ( TaskState_name = map[int32]string{ 0: "TaskStateNil", 1: "TaskStateRunning", 2: "TaskStateFailed", 3: "TaskStateCompleted", } TaskState_value = map[string]int32{ "TaskStateNil": 0, "TaskStateRunning": 1, "TaskStateFailed": 2, "TaskStateCompleted": 3, } ) func (x TaskState) Enum() *TaskState { p := new(TaskState) *p = x return p } func (x TaskState) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (TaskState) Descriptor() protoreflect.EnumDescriptor { return file_mdbc_proto_enumTypes[1].Descriptor() } func (TaskState) Type() protoreflect.EnumType { return &file_mdbc_proto_enumTypes[1] } func (x TaskState) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use TaskState.Descriptor instead. func (TaskState) EnumDescriptor() ([]byte, []int) { return file_mdbc_proto_rawDescGZIP(), []int{1} } // @table_name: tb_friends_info type ModelFriendInfo struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // 主键ID wxid md5 WechatId string `protobuf:"bytes,2,opt,name=wechat_id,json=wechatId,proto3" json:"wechat_id,omitempty"` // 用户微信ID // @bson: nick_name Nickname string `protobuf:"bytes,3,opt,name=nickname,proto3" json:"nickname,omitempty"` // 用户暱称 WechatAlias string `protobuf:"bytes,4,opt,name=wechat_alias,json=wechatAlias,proto3" json:"wechat_alias,omitempty"` // 用户微信号 AvatarUrl string `protobuf:"bytes,5,opt,name=avatar_url,json=avatarUrl,proto3" json:"avatar_url,omitempty"` // 用户头像 Phone string `protobuf:"bytes,6,opt,name=phone,proto3" json:"phone,omitempty"` // 手机号码 Country string `protobuf:"bytes,7,opt,name=country,proto3" json:"country,omitempty"` // 国家 Province string `protobuf:"bytes,8,opt,name=province,proto3" json:"province,omitempty"` // 省份 City string `protobuf:"bytes,9,opt,name=city,proto3" json:"city,omitempty"` // 城市 Sex int32 `protobuf:"varint,10,opt,name=sex,proto3" json:"sex,omitempty"` // 0未知 1男 2女 CreateTime int64 `protobuf:"varint,12,opt,name=create_time,json=createTime,proto3" json:"create_time,omitempty"` // 创建时间 UpdateTime int64 `protobuf:"varint,13,opt,name=update_time,json=updateTime,proto3" json:"update_time,omitempty"` // 更新时间 } func (x *ModelFriendInfo) Reset() { *x = ModelFriendInfo{} if protoimpl.UnsafeEnabled { mi := &file_mdbc_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ModelFriendInfo) String() string { return protoimpl.X.MessageStringOf(x) } func (*ModelFriendInfo) ProtoMessage() {} func (x *ModelFriendInfo) ProtoReflect() protoreflect.Message { mi := &file_mdbc_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 ModelFriendInfo.ProtoReflect.Descriptor instead. func (*ModelFriendInfo) Descriptor() ([]byte, []int) { return file_mdbc_proto_rawDescGZIP(), []int{0} } func (x *ModelFriendInfo) GetId() string { if x != nil { return x.Id } return "" } func (x *ModelFriendInfo) GetWechatId() string { if x != nil { return x.WechatId } return "" } func (x *ModelFriendInfo) GetNickname() string { if x != nil { return x.Nickname } return "" } func (x *ModelFriendInfo) GetWechatAlias() string { if x != nil { return x.WechatAlias } return "" } func (x *ModelFriendInfo) GetAvatarUrl() string { if x != nil { return x.AvatarUrl } return "" } func (x *ModelFriendInfo) GetPhone() string { if x != nil { return x.Phone } return "" } func (x *ModelFriendInfo) GetCountry() string { if x != nil { return x.Country } return "" } func (x *ModelFriendInfo) GetProvince() string { if x != nil { return x.Province } return "" } func (x *ModelFriendInfo) GetCity() string { if x != nil { return x.City } return "" } func (x *ModelFriendInfo) GetSex() int32 { if x != nil { return x.Sex } return 0 } func (x *ModelFriendInfo) GetCreateTime() int64 { if x != nil { return x.CreateTime } return 0 } func (x *ModelFriendInfo) GetUpdateTime() int64 { if x != nil { return x.UpdateTime } return 0 } // @table_name: tb_crm_group_chat type ModelGroupChat struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // 主键ID CreatedAt int64 `protobuf:"varint,2,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` // 创建时间 UpdatedAt int64 `protobuf:"varint,3,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"` // 更新时间 DeletedAt int64 `protobuf:"varint,4,opt,name=deleted_at,json=deletedAt,proto3" json:"deleted_at,omitempty"` // 删除时间【记: 此表正常情况下 只进行软删除】非零 历史群 0正常群 RobotWxId string `protobuf:"bytes,6,opt,name=robot_wx_id,json=robotWxId,proto3" json:"robot_wx_id,omitempty"` // 机器人id GroupWxId string `protobuf:"bytes,7,opt,name=group_wx_id,json=groupWxId,proto3" json:"group_wx_id,omitempty"` // 群id OwnerWxId string `protobuf:"bytes,8,opt,name=owner_wx_id,json=ownerWxId,proto3" json:"owner_wx_id,omitempty"` // 群主id GroupName string `protobuf:"bytes,9,opt,name=group_name,json=groupName,proto3" json:"group_name,omitempty"` // 群名称 MemberCount uint32 `protobuf:"varint,10,opt,name=member_count,json=memberCount,proto3" json:"member_count,omitempty"` // 群成员数量 OwnerName string `protobuf:"bytes,11,opt,name=owner_name,json=ownerName,proto3" json:"owner_name,omitempty"` // 群主名称 GroupAvatarUrl string `protobuf:"bytes,12,opt,name=group_avatar_url,json=groupAvatarUrl,proto3" json:"group_avatar_url,omitempty"` // 群头像 IsWatch bool `protobuf:"varint,13,opt,name=is_watch,json=isWatch,proto3" json:"is_watch,omitempty"` // 是否关注群 HasBeenWatch bool `protobuf:"varint,14,opt,name=has_been_watch,json=hasBeenWatch,proto3" json:"has_been_watch,omitempty"` // 以前有关注过 IsDefaultGroupName bool `protobuf:"varint,15,opt,name=is_default_group_name,json=isDefaultGroupName,proto3" json:"is_default_group_name,omitempty"` // 是否是默认的群名称 InContact bool `protobuf:"varint,16,opt,name=in_contact,json=inContact,proto3" json:"in_contact,omitempty"` // 是否在通讯录中 DisableInvite bool `protobuf:"varint,17,opt,name=disable_invite,json=disableInvite,proto3" json:"disable_invite,omitempty"` // 是否开启了群聊邀请确认 true 开启了 false 关闭了 LastSyncAt int64 `protobuf:"varint,20,opt,name=last_sync_at,json=lastSyncAt,proto3" json:"last_sync_at,omitempty"` // 最后更新群信息时间 【通过这里 指定规则 去拉群基本信息】 LastSyncMemberAt int64 `protobuf:"varint,21,opt,name=last_sync_member_at,json=lastSyncMemberAt,proto3" json:"last_sync_member_at,omitempty"` // 最后更新群成员时间 【通过这里 指定规则 去拉群成员信息】 Notice string `protobuf:"bytes,22,opt,name=notice,proto3" json:"notice,omitempty"` // 群公告 QrcodeUpdatedAt int64 `protobuf:"varint,23,opt,name=qrcode_updated_at,json=qrcodeUpdatedAt,proto3" json:"qrcode_updated_at,omitempty"` // 群聊二维码更新时间 QrcodeUrl string `protobuf:"bytes,24,opt,name=qrcode_url,json=qrcodeUrl,proto3" json:"qrcode_url,omitempty"` // 群聊二维码 AdminType AdminType `protobuf:"varint,25,opt,name=admin_type,json=adminType,proto3,enum=mdbc.AdminType" json:"admin_type,omitempty"` // 机器人权限类型 } func (x *ModelGroupChat) Reset() { *x = ModelGroupChat{} if protoimpl.UnsafeEnabled { mi := &file_mdbc_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ModelGroupChat) String() string { return protoimpl.X.MessageStringOf(x) } func (*ModelGroupChat) ProtoMessage() {} func (x *ModelGroupChat) ProtoReflect() protoreflect.Message { mi := &file_mdbc_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 ModelGroupChat.ProtoReflect.Descriptor instead. func (*ModelGroupChat) Descriptor() ([]byte, []int) { return file_mdbc_proto_rawDescGZIP(), []int{1} } func (x *ModelGroupChat) GetId() string { if x != nil { return x.Id } return "" } func (x *ModelGroupChat) GetCreatedAt() int64 { if x != nil { return x.CreatedAt } return 0 } func (x *ModelGroupChat) GetUpdatedAt() int64 { if x != nil { return x.UpdatedAt } return 0 } func (x *ModelGroupChat) GetDeletedAt() int64 { if x != nil { return x.DeletedAt } return 0 } func (x *ModelGroupChat) GetRobotWxId() string { if x != nil { return x.RobotWxId } return "" } func (x *ModelGroupChat) GetGroupWxId() string { if x != nil { return x.GroupWxId } return "" } func (x *ModelGroupChat) GetOwnerWxId() string { if x != nil { return x.OwnerWxId } return "" } func (x *ModelGroupChat) GetGroupName() string { if x != nil { return x.GroupName } return "" } func (x *ModelGroupChat) GetMemberCount() uint32 { if x != nil { return x.MemberCount } return 0 } func (x *ModelGroupChat) GetOwnerName() string { if x != nil { return x.OwnerName } return "" } func (x *ModelGroupChat) GetGroupAvatarUrl() string { if x != nil { return x.GroupAvatarUrl } return "" } func (x *ModelGroupChat) GetIsWatch() bool { if x != nil { return x.IsWatch } return false } func (x *ModelGroupChat) GetHasBeenWatch() bool { if x != nil { return x.HasBeenWatch } return false } func (x *ModelGroupChat) GetIsDefaultGroupName() bool { if x != nil { return x.IsDefaultGroupName } return false } func (x *ModelGroupChat) GetInContact() bool { if x != nil { return x.InContact } return false } func (x *ModelGroupChat) GetDisableInvite() bool { if x != nil { return x.DisableInvite } return false } func (x *ModelGroupChat) GetLastSyncAt() int64 { if x != nil { return x.LastSyncAt } return 0 } func (x *ModelGroupChat) GetLastSyncMemberAt() int64 { if x != nil { return x.LastSyncMemberAt } return 0 } func (x *ModelGroupChat) GetNotice() string { if x != nil { return x.Notice } return "" } func (x *ModelGroupChat) GetQrcodeUpdatedAt() int64 { if x != nil { return x.QrcodeUpdatedAt } return 0 } func (x *ModelGroupChat) GetQrcodeUrl() string { if x != nil { return x.QrcodeUrl } return "" } func (x *ModelGroupChat) GetAdminType() AdminType { if x != nil { return x.AdminType } return AdminType_AdminTypeNil } // @table_name: tb_crm_group_chat_member type ModelGroupChatMember struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // id CreatedAt int64 `protobuf:"varint,2,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` // 创建时间 UpdatedAt int64 `protobuf:"varint,3,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"` // 更新时间 DeletedAt int64 `protobuf:"varint,4,opt,name=deleted_at,json=deletedAt,proto3" json:"deleted_at,omitempty"` // 删除时间 这个表一般直接硬删除 GroupChatId string `protobuf:"bytes,5,opt,name=group_chat_id,json=groupChatId,proto3" json:"group_chat_id,omitempty"` // 群 ModelGroupChat 的ID MemberWxId string `protobuf:"bytes,6,opt,name=member_wx_id,json=memberWxId,proto3" json:"member_wx_id,omitempty"` // 群成员微信id MemberName string `protobuf:"bytes,7,opt,name=member_name,json=memberName,proto3" json:"member_name,omitempty"` // 群成员名称 MemberAvatar string `protobuf:"bytes,8,opt,name=member_avatar,json=memberAvatar,proto3" json:"member_avatar,omitempty"` // 群成员头像 MemberAlias string `protobuf:"bytes,9,opt,name=member_alias,json=memberAlias,proto3" json:"member_alias,omitempty"` // 群昵称 MemberSex uint32 `protobuf:"varint,10,opt,name=member_sex,json=memberSex,proto3" json:"member_sex,omitempty"` // 性别 IsRobot bool `protobuf:"varint,11,opt,name=is_robot,json=isRobot,proto3" json:"is_robot,omitempty"` // 是否是机器人 AdminType AdminType `protobuf:"varint,12,opt,name=admin_type,json=adminType,proto3,enum=mdbc.AdminType" json:"admin_type,omitempty"` // 权限类型 群主 管理员 普通成员 LastSyncAt int64 `protobuf:"varint,13,opt,name=last_sync_at,json=lastSyncAt,proto3" json:"last_sync_at,omitempty"` // 该群该成员 最后更新时间 } func (x *ModelGroupChatMember) Reset() { *x = ModelGroupChatMember{} if protoimpl.UnsafeEnabled { mi := &file_mdbc_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ModelGroupChatMember) String() string { return protoimpl.X.MessageStringOf(x) } func (*ModelGroupChatMember) ProtoMessage() {} func (x *ModelGroupChatMember) ProtoReflect() protoreflect.Message { mi := &file_mdbc_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 ModelGroupChatMember.ProtoReflect.Descriptor instead. func (*ModelGroupChatMember) Descriptor() ([]byte, []int) { return file_mdbc_proto_rawDescGZIP(), []int{2} } func (x *ModelGroupChatMember) GetId() string { if x != nil { return x.Id } return "" } func (x *ModelGroupChatMember) GetCreatedAt() int64 { if x != nil { return x.CreatedAt } return 0 } func (x *ModelGroupChatMember) GetUpdatedAt() int64 { if x != nil { return x.UpdatedAt } return 0 } func (x *ModelGroupChatMember) GetDeletedAt() int64 { if x != nil { return x.DeletedAt } return 0 } func (x *ModelGroupChatMember) GetGroupChatId() string { if x != nil { return x.GroupChatId } return "" } func (x *ModelGroupChatMember) GetMemberWxId() string { if x != nil { return x.MemberWxId } return "" } func (x *ModelGroupChatMember) GetMemberName() string { if x != nil { return x.MemberName } return "" } func (x *ModelGroupChatMember) GetMemberAvatar() string { if x != nil { return x.MemberAvatar } return "" } func (x *ModelGroupChatMember) GetMemberAlias() string { if x != nil { return x.MemberAlias } return "" } func (x *ModelGroupChatMember) GetMemberSex() uint32 { if x != nil { return x.MemberSex } return 0 } func (x *ModelGroupChatMember) GetIsRobot() bool { if x != nil { return x.IsRobot } return false } func (x *ModelGroupChatMember) GetAdminType() AdminType { if x != nil { return x.AdminType } return AdminType_AdminTypeNil } func (x *ModelGroupChatMember) GetLastSyncAt() int64 { if x != nil { return x.LastSyncAt } return 0 } // @table_name: tb_crm_private_msg_session type ModelTbPrivateMsgSession struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` //会话ID (md5(机器人id+好友id)) All int32 `protobuf:"varint,2,opt,name=all,proto3" json:"all,omitempty"` //消息最大游标(消息总数:只算有效的消息) Read int32 `protobuf:"varint,3,opt,name=read,proto3" json:"read,omitempty"` //已读游标 Unread int32 `protobuf:"varint,4,opt,name=unread,proto3" json:"unread,omitempty"` //未读消息游标 LastMsgAt int64 `protobuf:"varint,5,opt,name=last_msg_at,json=lastMsgAt,proto3" json:"last_msg_at,omitempty"` //最后一条消息时间 LastFriendMsgAt int64 `protobuf:"varint,6,opt,name=last_friend_msg_at,json=lastFriendMsgAt,proto3" json:"last_friend_msg_at,omitempty"` //接受到最后一条好友消息时间 RobotWxId string `protobuf:"bytes,7,opt,name=robot_wx_id,json=robotWxId,proto3" json:"robot_wx_id,omitempty"` //机器人id UserWxId string `protobuf:"bytes,8,opt,name=user_wx_id,json=userWxId,proto3" json:"user_wx_id,omitempty"` //好友微信id LastMsgId string `protobuf:"bytes,9,opt,name=last_msg_id,json=lastMsgId,proto3" json:"last_msg_id,omitempty"` //最后一条消息id LastFriendMsgId string `protobuf:"bytes,10,opt,name=last_friend_msg_id,json=lastFriendMsgId,proto3" json:"last_friend_msg_id,omitempty"` //接收的最后一条好友消息id } func (x *ModelTbPrivateMsgSession) Reset() { *x = ModelTbPrivateMsgSession{} if protoimpl.UnsafeEnabled { mi := &file_mdbc_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ModelTbPrivateMsgSession) String() string { return protoimpl.X.MessageStringOf(x) } func (*ModelTbPrivateMsgSession) ProtoMessage() {} func (x *ModelTbPrivateMsgSession) ProtoReflect() protoreflect.Message { mi := &file_mdbc_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 ModelTbPrivateMsgSession.ProtoReflect.Descriptor instead. func (*ModelTbPrivateMsgSession) Descriptor() ([]byte, []int) { return file_mdbc_proto_rawDescGZIP(), []int{3} } func (x *ModelTbPrivateMsgSession) GetId() string { if x != nil { return x.Id } return "" } func (x *ModelTbPrivateMsgSession) GetAll() int32 { if x != nil { return x.All } return 0 } func (x *ModelTbPrivateMsgSession) GetRead() int32 { if x != nil { return x.Read } return 0 } func (x *ModelTbPrivateMsgSession) GetUnread() int32 { if x != nil { return x.Unread } return 0 } func (x *ModelTbPrivateMsgSession) GetLastMsgAt() int64 { if x != nil { return x.LastMsgAt } return 0 } func (x *ModelTbPrivateMsgSession) GetLastFriendMsgAt() int64 { if x != nil { return x.LastFriendMsgAt } return 0 } func (x *ModelTbPrivateMsgSession) GetRobotWxId() string { if x != nil { return x.RobotWxId } return "" } func (x *ModelTbPrivateMsgSession) GetUserWxId() string { if x != nil { return x.UserWxId } return "" } func (x *ModelTbPrivateMsgSession) GetLastMsgId() string { if x != nil { return x.LastMsgId } return "" } func (x *ModelTbPrivateMsgSession) GetLastFriendMsgId() string { if x != nil { return x.LastFriendMsgId } return "" } // @table_name: tb_crm_group_msg_session type ModelTbGroupMsgSession struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` //会话ID (md5(机器人id+好友id)) All int32 `protobuf:"varint,2,opt,name=all,proto3" json:"all,omitempty"` //消息最大游标(消息总数:只算有效的消息) Read int32 `protobuf:"varint,3,opt,name=read,proto3" json:"read,omitempty"` //已读游标 Unread int32 `protobuf:"varint,4,opt,name=unread,proto3" json:"unread,omitempty"` //未读消息游标 LastMsgAt int64 `protobuf:"varint,5,opt,name=last_msg_at,json=lastMsgAt,proto3" json:"last_msg_at,omitempty"` //最后一条消息时间 LastFriendMsgAt int64 `protobuf:"varint,6,opt,name=last_friend_msg_at,json=lastFriendMsgAt,proto3" json:"last_friend_msg_at,omitempty"` //接受到最后一条好友消息时间 RobotWxId string `protobuf:"bytes,7,opt,name=robot_wx_id,json=robotWxId,proto3" json:"robot_wx_id,omitempty"` //机器人id UserWxId string `protobuf:"bytes,8,opt,name=user_wx_id,json=userWxId,proto3" json:"user_wx_id,omitempty"` //群微信id LastMsgId string `protobuf:"bytes,9,opt,name=last_msg_id,json=lastMsgId,proto3" json:"last_msg_id,omitempty"` //最后一条消息id LastFriendMsgId string `protobuf:"bytes,10,opt,name=last_friend_msg_id,json=lastFriendMsgId,proto3" json:"last_friend_msg_id,omitempty"` //接收的最后一条好友消息id LastMemberWxId string `protobuf:"bytes,11,opt,name=last_member_wx_id,json=lastMemberWxId,proto3" json:"last_member_wx_id,omitempty"` //最后发送消息的群成员id } func (x *ModelTbGroupMsgSession) Reset() { *x = ModelTbGroupMsgSession{} if protoimpl.UnsafeEnabled { mi := &file_mdbc_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ModelTbGroupMsgSession) String() string { return protoimpl.X.MessageStringOf(x) } func (*ModelTbGroupMsgSession) ProtoMessage() {} func (x *ModelTbGroupMsgSession) ProtoReflect() protoreflect.Message { mi := &file_mdbc_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 ModelTbGroupMsgSession.ProtoReflect.Descriptor instead. func (*ModelTbGroupMsgSession) Descriptor() ([]byte, []int) { return file_mdbc_proto_rawDescGZIP(), []int{4} } func (x *ModelTbGroupMsgSession) GetId() string { if x != nil { return x.Id } return "" } func (x *ModelTbGroupMsgSession) GetAll() int32 { if x != nil { return x.All } return 0 } func (x *ModelTbGroupMsgSession) GetRead() int32 { if x != nil { return x.Read } return 0 } func (x *ModelTbGroupMsgSession) GetUnread() int32 { if x != nil { return x.Unread } return 0 } func (x *ModelTbGroupMsgSession) GetLastMsgAt() int64 { if x != nil { return x.LastMsgAt } return 0 } func (x *ModelTbGroupMsgSession) GetLastFriendMsgAt() int64 { if x != nil { return x.LastFriendMsgAt } return 0 } func (x *ModelTbGroupMsgSession) GetRobotWxId() string { if x != nil { return x.RobotWxId } return "" } func (x *ModelTbGroupMsgSession) GetUserWxId() string { if x != nil { return x.UserWxId } return "" } func (x *ModelTbGroupMsgSession) GetLastMsgId() string { if x != nil { return x.LastMsgId } return "" } func (x *ModelTbGroupMsgSession) GetLastFriendMsgId() string { if x != nil { return x.LastFriendMsgId } return "" } func (x *ModelTbGroupMsgSession) GetLastMemberWxId() string { if x != nil { return x.LastMemberWxId } return "" } // @table_name: tb_crm_robot_private_msg type ModelTbRobotPrivateMsg struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // 主键ID BindId string `protobuf:"bytes,3,opt,name=bind_id,json=bindId,proto3" json:"bind_id,omitempty"` // 前端消息id RobotWxId string `protobuf:"bytes,4,opt,name=robot_wx_id,json=robotWxId,proto3" json:"robot_wx_id,omitempty"` // 机器人id UserWxId string `protobuf:"bytes,5,opt,name=user_wx_id,json=userWxId,proto3" json:"user_wx_id,omitempty"` // 好友id MsgId string `protobuf:"bytes,6,opt,name=msg_id,json=msgId,proto3" json:"msg_id,omitempty"` // 服务端自己生成一个消息id,来对应客户端的发送结果id MsgType int32 `protobuf:"varint,7,opt,name=msg_type,json=msgType,proto3" json:"msg_type,omitempty"` // 消息类型 SendStatus int32 `protobuf:"varint,8,opt,name=send_status,json=sendStatus,proto3" json:"send_status,omitempty"` // 发送状态:0:发送中;1:发送请求成功;2:发送请求失败;3:发送成功;4:发送失败;仅机器人发送。接收到用户消息的默认3 Direct int32 `protobuf:"varint,9,opt,name=direct,proto3" json:"direct,omitempty"` // 用于区分机器人是接收方还是发送方。1:机器人接收;2:机器人发送 SendErrorCode int32 `protobuf:"varint,10,opt,name=send_error_code,json=sendErrorCode,proto3" json:"send_error_code,omitempty"` // 发送错误码:用户告诉对应的是什么错误:-1 通用错误码; -2 被拉黑; -3 // 被删除; -4 好友找不到; ContentRead bool `protobuf:"varint,12,opt,name=content_read,json=contentRead,proto3" json:"content_read,omitempty"` // 是否内容被浏览(像语音之类的,需要浏览) CreatedAt int64 `protobuf:"varint,13,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` // 创建时间 UpdatedAt int64 `protobuf:"varint,14,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"` // 更新时间 FailReason string `protobuf:"bytes,15,opt,name=fail_reason,json=failReason,proto3" json:"fail_reason,omitempty"` // 失败原因 CallBackAt int64 `protobuf:"varint,16,opt,name=call_back_at,json=callBackAt,proto3" json:"call_back_at,omitempty"` // 消息返回时间 Cursor int64 `protobuf:"varint,17,opt,name=cursor,proto3" json:"cursor,omitempty"` // 消息游标(对应session的all) SendAt int64 `protobuf:"varint,18,opt,name=send_at,json=sendAt,proto3" json:"send_at,omitempty"` // 发送时间(消息实际生效时间) ExpireAt int64 `protobuf:"varint,19,opt,name=expire_at,json=expireAt,proto3" json:"expire_at,omitempty"` // 失效时间(用于消息的失效) ContentData *ContentData `protobuf:"bytes,20,opt,name=content_data,json=contentData,proto3" json:"content_data,omitempty"` // 消息内容 } func (x *ModelTbRobotPrivateMsg) Reset() { *x = ModelTbRobotPrivateMsg{} if protoimpl.UnsafeEnabled { mi := &file_mdbc_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ModelTbRobotPrivateMsg) String() string { return protoimpl.X.MessageStringOf(x) } func (*ModelTbRobotPrivateMsg) ProtoMessage() {} func (x *ModelTbRobotPrivateMsg) ProtoReflect() protoreflect.Message { mi := &file_mdbc_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 ModelTbRobotPrivateMsg.ProtoReflect.Descriptor instead. func (*ModelTbRobotPrivateMsg) Descriptor() ([]byte, []int) { return file_mdbc_proto_rawDescGZIP(), []int{5} } func (x *ModelTbRobotPrivateMsg) GetId() string { if x != nil { return x.Id } return "" } func (x *ModelTbRobotPrivateMsg) GetBindId() string { if x != nil { return x.BindId } return "" } func (x *ModelTbRobotPrivateMsg) GetRobotWxId() string { if x != nil { return x.RobotWxId } return "" } func (x *ModelTbRobotPrivateMsg) GetUserWxId() string { if x != nil { return x.UserWxId } return "" } func (x *ModelTbRobotPrivateMsg) GetMsgId() string { if x != nil { return x.MsgId } return "" } func (x *ModelTbRobotPrivateMsg) GetMsgType() int32 { if x != nil { return x.MsgType } return 0 } func (x *ModelTbRobotPrivateMsg) GetSendStatus() int32 { if x != nil { return x.SendStatus } return 0 } func (x *ModelTbRobotPrivateMsg) GetDirect() int32 { if x != nil { return x.Direct } return 0 } func (x *ModelTbRobotPrivateMsg) GetSendErrorCode() int32 { if x != nil { return x.SendErrorCode } return 0 } func (x *ModelTbRobotPrivateMsg) GetContentRead() bool { if x != nil { return x.ContentRead } return false } func (x *ModelTbRobotPrivateMsg) GetCreatedAt() int64 { if x != nil { return x.CreatedAt } return 0 } func (x *ModelTbRobotPrivateMsg) GetUpdatedAt() int64 { if x != nil { return x.UpdatedAt } return 0 } func (x *ModelTbRobotPrivateMsg) GetFailReason() string { if x != nil { return x.FailReason } return "" } func (x *ModelTbRobotPrivateMsg) GetCallBackAt() int64 { if x != nil { return x.CallBackAt } return 0 } func (x *ModelTbRobotPrivateMsg) GetCursor() int64 { if x != nil { return x.Cursor } return 0 } func (x *ModelTbRobotPrivateMsg) GetSendAt() int64 { if x != nil { return x.SendAt } return 0 } func (x *ModelTbRobotPrivateMsg) GetExpireAt() int64 { if x != nil { return x.ExpireAt } return 0 } func (x *ModelTbRobotPrivateMsg) GetContentData() *ContentData { if x != nil { return x.ContentData } return nil } // @table_name: tb_crm_robot_group_msg type ModelTbRobotGroupMsg struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // 主键ID BindId string `protobuf:"bytes,3,opt,name=bind_id,json=bindId,proto3" json:"bind_id,omitempty"` // 前端消息id RobotWxId string `protobuf:"bytes,4,opt,name=robot_wx_id,json=robotWxId,proto3" json:"robot_wx_id,omitempty"` // 机器人id UserWxId string `protobuf:"bytes,5,opt,name=user_wx_id,json=userWxId,proto3" json:"user_wx_id,omitempty"` // 群聊id MsgId string `protobuf:"bytes,6,opt,name=msg_id,json=msgId,proto3" json:"msg_id,omitempty"` // 服务端自己生成一个消息id,来对应客户端的发送结果id MsgType int32 `protobuf:"varint,7,opt,name=msg_type,json=msgType,proto3" json:"msg_type,omitempty"` // 消息类型 SendStatus int32 `protobuf:"varint,8,opt,name=send_status,json=sendStatus,proto3" json:"send_status,omitempty"` // 发送状态:0:发送中;1:发送请求成功;2:发送请求失败;3:发送成功;4:发送失败;仅机器人发送。接收到用户消息的默认3 Direct int32 `protobuf:"varint,9,opt,name=direct,proto3" json:"direct,omitempty"` // 用于区分机器人是接收方还是发送方。1:机器人接收;2:机器人发送 SendErrorCode int32 `protobuf:"varint,10,opt,name=send_error_code,json=sendErrorCode,proto3" json:"send_error_code,omitempty"` // 发送错误码:用户告诉对应的是什么错误:-1 通用错误码; -2 被拉黑; -3 // 被删除; -4 好友找不到; ContentRead bool `protobuf:"varint,12,opt,name=content_read,json=contentRead,proto3" json:"content_read,omitempty"` // 是否内容被浏览(像语音之类的,需要浏览) CreatedAt int64 `protobuf:"varint,13,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` // 创建时间 UpdatedAt int64 `protobuf:"varint,14,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"` // 更新时间 FailReason string `protobuf:"bytes,15,opt,name=fail_reason,json=failReason,proto3" json:"fail_reason,omitempty"` // 失败原因 CallBackAt int64 `protobuf:"varint,16,opt,name=call_back_at,json=callBackAt,proto3" json:"call_back_at,omitempty"` // 消息返回时间 Cursor int64 `protobuf:"varint,17,opt,name=cursor,proto3" json:"cursor,omitempty"` // 消息游标(对应session的all) SendAt int64 `protobuf:"varint,18,opt,name=send_at,json=sendAt,proto3" json:"send_at,omitempty"` // 发送时间(消息实际生效时间) ExpireAt int64 `protobuf:"varint,19,opt,name=expire_at,json=expireAt,proto3" json:"expire_at,omitempty"` // 失效时间(用于消息的失效) ContentData *ContentData `protobuf:"bytes,20,opt,name=content_data,json=contentData,proto3" json:"content_data,omitempty"` // 消息内容 SenderWxId string `protobuf:"bytes,21,opt,name=sender_wx_id,json=senderWxId,proto3" json:"sender_wx_id,omitempty"` // 发送者id } func (x *ModelTbRobotGroupMsg) Reset() { *x = ModelTbRobotGroupMsg{} if protoimpl.UnsafeEnabled { mi := &file_mdbc_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ModelTbRobotGroupMsg) String() string { return protoimpl.X.MessageStringOf(x) } func (*ModelTbRobotGroupMsg) ProtoMessage() {} func (x *ModelTbRobotGroupMsg) ProtoReflect() protoreflect.Message { mi := &file_mdbc_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 ModelTbRobotGroupMsg.ProtoReflect.Descriptor instead. func (*ModelTbRobotGroupMsg) Descriptor() ([]byte, []int) { return file_mdbc_proto_rawDescGZIP(), []int{6} } func (x *ModelTbRobotGroupMsg) GetId() string { if x != nil { return x.Id } return "" } func (x *ModelTbRobotGroupMsg) GetBindId() string { if x != nil { return x.BindId } return "" } func (x *ModelTbRobotGroupMsg) GetRobotWxId() string { if x != nil { return x.RobotWxId } return "" } func (x *ModelTbRobotGroupMsg) GetUserWxId() string { if x != nil { return x.UserWxId } return "" } func (x *ModelTbRobotGroupMsg) GetMsgId() string { if x != nil { return x.MsgId } return "" } func (x *ModelTbRobotGroupMsg) GetMsgType() int32 { if x != nil { return x.MsgType } return 0 } func (x *ModelTbRobotGroupMsg) GetSendStatus() int32 { if x != nil { return x.SendStatus } return 0 } func (x *ModelTbRobotGroupMsg) GetDirect() int32 { if x != nil { return x.Direct } return 0 } func (x *ModelTbRobotGroupMsg) GetSendErrorCode() int32 { if x != nil { return x.SendErrorCode } return 0 } func (x *ModelTbRobotGroupMsg) GetContentRead() bool { if x != nil { return x.ContentRead } return false } func (x *ModelTbRobotGroupMsg) GetCreatedAt() int64 { if x != nil { return x.CreatedAt } return 0 } func (x *ModelTbRobotGroupMsg) GetUpdatedAt() int64 { if x != nil { return x.UpdatedAt } return 0 } func (x *ModelTbRobotGroupMsg) GetFailReason() string { if x != nil { return x.FailReason } return "" } func (x *ModelTbRobotGroupMsg) GetCallBackAt() int64 { if x != nil { return x.CallBackAt } return 0 } func (x *ModelTbRobotGroupMsg) GetCursor() int64 { if x != nil { return x.Cursor } return 0 } func (x *ModelTbRobotGroupMsg) GetSendAt() int64 { if x != nil { return x.SendAt } return 0 } func (x *ModelTbRobotGroupMsg) GetExpireAt() int64 { if x != nil { return x.ExpireAt } return 0 } func (x *ModelTbRobotGroupMsg) GetContentData() *ContentData { if x != nil { return x.ContentData } return nil } func (x *ModelTbRobotGroupMsg) GetSenderWxId() string { if x != nil { return x.SenderWxId } return "" } type ContentData struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields RawContent string `protobuf:"bytes,1,opt,name=raw_content,json=rawContent,proto3" json:"raw_content,omitempty"` // 元始的xml数据 做数据转发时用; Content string `protobuf:"bytes,2,opt,name=content,proto3" json:"content,omitempty"` // 1文本的内容;2 语音的url(amr格式);6小程序的xml; ShareTitle string `protobuf:"bytes,3,opt,name=share_title,json=shareTitle,proto3" json:"share_title,omitempty"` // 5链接的标题; ShareDesc string `protobuf:"bytes,4,opt,name=share_desc,json=shareDesc,proto3" json:"share_desc,omitempty"` // 5链接的描述; ShareUrl string `protobuf:"bytes,5,opt,name=share_url,json=shareUrl,proto3" json:"share_url,omitempty"` // 5链接的URL; FileUrl string `protobuf:"bytes,6,opt,name=file_url,json=fileUrl,proto3" json:"file_url,omitempty"` // 3图片的url;4视频的Url;5链接的分享图;8表情的url(gif);9文件的url; ShareUserName string `protobuf:"bytes,7,opt,name=share_user_name,json=shareUserName,proto3" json:"share_user_name,omitempty"` // 7名片的被分享(名片)好友id; ShareNickName string `protobuf:"bytes,8,opt,name=share_nick_name,json=shareNickName,proto3" json:"share_nick_name,omitempty"` // 7名片的被分享(名片)的昵称; AtMsgItem []*AtMsgItem `protobuf:"bytes,9,rep,name=at_msg_item,json=atMsgItem,proto3" json:"at_msg_item,omitempty"` // 发送群@部分人消息的数据 WxMsgType int32 `protobuf:"varint,10,opt,name=wx_msg_type,json=wxMsgType,proto3" json:"wx_msg_type,omitempty"` // 消息类型: 1 文本;2 语音;3 图片;4 视频;5 链接;6 小程序;7 // 名片;8 表情;9 文件;10 验证消息(如好友申请);11 视频号消息;12 // 视频号直播间;13 视频号名片; FileSize float64 `protobuf:"fixed64,11,opt,name=file_size,json=fileSize,proto3" json:"file_size,omitempty"` // 文件大小KB单位 ResourceDuration int32 `protobuf:"varint,12,opt,name=resource_duration,json=resourceDuration,proto3" json:"resource_duration,omitempty"` // 媒体时长 统一单位s AtUserName []string `protobuf:"bytes,13,rep,name=at_user_name,json=atUserName,proto3" json:"at_user_name,omitempty"` // 群聊at消息 IsAtMyself bool `protobuf:"varint,14,opt,name=is_at_myself,json=isAtMyself,proto3" json:"is_at_myself,omitempty"` // 是否有at我自己 单独一个字段 方便维护和查询 } func (x *ContentData) Reset() { *x = ContentData{} if protoimpl.UnsafeEnabled { mi := &file_mdbc_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ContentData) String() string { return protoimpl.X.MessageStringOf(x) } func (*ContentData) ProtoMessage() {} func (x *ContentData) ProtoReflect() protoreflect.Message { mi := &file_mdbc_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 ContentData.ProtoReflect.Descriptor instead. func (*ContentData) Descriptor() ([]byte, []int) { return file_mdbc_proto_rawDescGZIP(), []int{7} } func (x *ContentData) GetRawContent() string { if x != nil { return x.RawContent } return "" } func (x *ContentData) GetContent() string { if x != nil { return x.Content } return "" } func (x *ContentData) GetShareTitle() string { if x != nil { return x.ShareTitle } return "" } func (x *ContentData) GetShareDesc() string { if x != nil { return x.ShareDesc } return "" } func (x *ContentData) GetShareUrl() string { if x != nil { return x.ShareUrl } return "" } func (x *ContentData) GetFileUrl() string { if x != nil { return x.FileUrl } return "" } func (x *ContentData) GetShareUserName() string { if x != nil { return x.ShareUserName } return "" } func (x *ContentData) GetShareNickName() string { if x != nil { return x.ShareNickName } return "" } func (x *ContentData) GetAtMsgItem() []*AtMsgItem { if x != nil { return x.AtMsgItem } return nil } func (x *ContentData) GetWxMsgType() int32 { if x != nil { return x.WxMsgType } return 0 } func (x *ContentData) GetFileSize() float64 { if x != nil { return x.FileSize } return 0 } func (x *ContentData) GetResourceDuration() int32 { if x != nil { return x.ResourceDuration } return 0 } func (x *ContentData) GetAtUserName() []string { if x != nil { return x.AtUserName } return nil } func (x *ContentData) GetIsAtMyself() bool { if x != nil { return x.IsAtMyself } return false } type AtMsgItem struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields SubType int32 `protobuf:"varint,1,opt,name=SubType,proto3" json:"SubType,omitempty"` // 0:文本内容,1:@某人 Content string `protobuf:"bytes,2,opt,name=Content,proto3" json:"Content,omitempty"` // 文本内容 UserName string `protobuf:"bytes,3,opt,name=UserName,proto3" json:"UserName,omitempty"` // @的用户(wx_id) NickName string `protobuf:"bytes,4,opt,name=NickName,proto3" json:"NickName,omitempty"` // @的昵称 } func (x *AtMsgItem) Reset() { *x = AtMsgItem{} if protoimpl.UnsafeEnabled { mi := &file_mdbc_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *AtMsgItem) String() string { return protoimpl.X.MessageStringOf(x) } func (*AtMsgItem) ProtoMessage() {} func (x *AtMsgItem) ProtoReflect() protoreflect.Message { mi := &file_mdbc_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 AtMsgItem.ProtoReflect.Descriptor instead. func (*AtMsgItem) Descriptor() ([]byte, []int) { return file_mdbc_proto_rawDescGZIP(), []int{8} } func (x *AtMsgItem) GetSubType() int32 { if x != nil { return x.SubType } return 0 } func (x *AtMsgItem) GetContent() string { if x != nil { return x.Content } return "" } func (x *AtMsgItem) GetUserName() string { if x != nil { return x.UserName } return "" } func (x *AtMsgItem) GetNickName() string { if x != nil { return x.NickName } return "" } // 异步任务 // @table_name: tb_crm_sched_task type ModelSchedTask struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` //任务id CreatedAt int64 `protobuf:"varint,2,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` //创建时间 UpdatedAt int64 `protobuf:"varint,3,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"` //更新时间 TaskState uint32 `protobuf:"varint,4,opt,name=task_state,json=taskState,proto3" json:"task_state,omitempty"` //执行状态 TaskState TaskType string `protobuf:"bytes,5,opt,name=task_type,json=taskType,proto3" json:"task_type,omitempty"` //任务类型 自定义的名称 用来区别是哪个模块发起的任务 ReqId string `protobuf:"bytes,6,opt,name=req_id,json=reqId,proto3" json:"req_id,omitempty"` //便于查询该任务 指定的id[作用:有些情况 无法直接通过id来查询该记录] ReqJson string `protobuf:"bytes,7,opt,name=req_json,json=reqJson,proto3" json:"req_json,omitempty"` //请求内容 RspJson string `protobuf:"bytes,8,opt,name=rsp_json,json=rspJson,proto3" json:"rsp_json,omitempty"` //完成后的内容 [成功或者失败的返回] RobotWxId string `protobuf:"bytes,9,opt,name=robot_wx_id,json=robotWxId,proto3" json:"robot_wx_id,omitempty"` //机器人id ExpiredAt *timestamppb.Timestamp `protobuf:"bytes,10,opt,name=expired_at,json=expiredAt,proto3" json:"expired_at,omitempty"` //过期时间 } func (x *ModelSchedTask) Reset() { *x = ModelSchedTask{} if protoimpl.UnsafeEnabled { mi := &file_mdbc_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ModelSchedTask) String() string { return protoimpl.X.MessageStringOf(x) } func (*ModelSchedTask) ProtoMessage() {} func (x *ModelSchedTask) ProtoReflect() protoreflect.Message { mi := &file_mdbc_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 ModelSchedTask.ProtoReflect.Descriptor instead. func (*ModelSchedTask) Descriptor() ([]byte, []int) { return file_mdbc_proto_rawDescGZIP(), []int{9} } func (x *ModelSchedTask) GetId() string { if x != nil { return x.Id } return "" } func (x *ModelSchedTask) GetCreatedAt() int64 { if x != nil { return x.CreatedAt } return 0 } func (x *ModelSchedTask) GetUpdatedAt() int64 { if x != nil { return x.UpdatedAt } return 0 } func (x *ModelSchedTask) GetTaskState() uint32 { if x != nil { return x.TaskState } return 0 } func (x *ModelSchedTask) GetTaskType() string { if x != nil { return x.TaskType } return "" } func (x *ModelSchedTask) GetReqId() string { if x != nil { return x.ReqId } return "" } func (x *ModelSchedTask) GetReqJson() string { if x != nil { return x.ReqJson } return "" } func (x *ModelSchedTask) GetRspJson() string { if x != nil { return x.RspJson } return "" } func (x *ModelSchedTask) GetRobotWxId() string { if x != nil { return x.RobotWxId } return "" } func (x *ModelSchedTask) GetExpiredAt() *timestamppb.Timestamp { if x != nil { return x.ExpiredAt } return nil } // @table_name: tb_robot_friend type ModelRobotFriend struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // 主键ID 机器人id+朋友id md5 RobotWechatId string `protobuf:"bytes,2,opt,name=robot_wechat_id,json=robotWechatId,proto3" json:"robot_wechat_id,omitempty"` // 机器人编号:微信ID UserWechatId string `protobuf:"bytes,3,opt,name=user_wechat_id,json=userWechatId,proto3" json:"user_wechat_id,omitempty"` // 用户微信ID, Deleted int64 `protobuf:"varint,4,opt,name=deleted,proto3" json:"deleted,omitempty"` // 是否被删除 0双方未删除 1被好友删除 2删除了好友 3互相删除 OfflineAdd int64 `protobuf:"varint,5,opt,name=offline_add,json=offlineAdd,proto3" json:"offline_add,omitempty"` // 是否为离线添加 RemarkName string `protobuf:"bytes,6,opt,name=remark_name,json=remarkName,proto3" json:"remark_name,omitempty"` // 微信好友备注名称 Pinyin string `protobuf:"bytes,7,opt,name=pinyin,proto3" json:"pinyin,omitempty"` // 用户备注或者暱称的拼音 PinyinHead string `protobuf:"bytes,8,opt,name=pinyin_head,json=pinyinHead,proto3" json:"pinyin_head,omitempty"` // 拼音首字母 DeleteTime int64 `protobuf:"varint,9,opt,name=delete_time,json=deleteTime,proto3" json:"delete_time,omitempty"` // 删除好友的时间 CreateTime int64 `protobuf:"varint,10,opt,name=create_time,json=createTime,proto3" json:"create_time,omitempty"` // 创建时间:入库时间 UpdateTime int64 `protobuf:"varint,11,opt,name=update_time,json=updateTime,proto3" json:"update_time,omitempty"` // 更新时间 AddAt int64 `protobuf:"varint,12,opt,name=add_at,json=addAt,proto3" json:"add_at,omitempty"` // 添加好友时间只有主动添加好友才有 CrmPhone string `protobuf:"bytes,13,opt,name=crm_phone,json=crmPhone,proto3" json:"crm_phone,omitempty"` // CRM自己设置的好友手机号,不同于微信手机号 } func (x *ModelRobotFriend) Reset() { *x = ModelRobotFriend{} if protoimpl.UnsafeEnabled { mi := &file_mdbc_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ModelRobotFriend) String() string { return protoimpl.X.MessageStringOf(x) } func (*ModelRobotFriend) ProtoMessage() {} func (x *ModelRobotFriend) ProtoReflect() protoreflect.Message { mi := &file_mdbc_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 ModelRobotFriend.ProtoReflect.Descriptor instead. func (*ModelRobotFriend) Descriptor() ([]byte, []int) { return file_mdbc_proto_rawDescGZIP(), []int{10} } func (x *ModelRobotFriend) GetId() string { if x != nil { return x.Id } return "" } func (x *ModelRobotFriend) GetRobotWechatId() string { if x != nil { return x.RobotWechatId } return "" } func (x *ModelRobotFriend) GetUserWechatId() string { if x != nil { return x.UserWechatId } return "" } func (x *ModelRobotFriend) GetDeleted() int64 { if x != nil { return x.Deleted } return 0 } func (x *ModelRobotFriend) GetOfflineAdd() int64 { if x != nil { return x.OfflineAdd } return 0 } func (x *ModelRobotFriend) GetRemarkName() string { if x != nil { return x.RemarkName } return "" } func (x *ModelRobotFriend) GetPinyin() string { if x != nil { return x.Pinyin } return "" } func (x *ModelRobotFriend) GetPinyinHead() string { if x != nil { return x.PinyinHead } return "" } func (x *ModelRobotFriend) GetDeleteTime() int64 { if x != nil { return x.DeleteTime } return 0 } func (x *ModelRobotFriend) GetCreateTime() int64 { if x != nil { return x.CreateTime } return 0 } func (x *ModelRobotFriend) GetUpdateTime() int64 { if x != nil { return x.UpdateTime } return 0 } func (x *ModelRobotFriend) GetAddAt() int64 { if x != nil { return x.AddAt } return 0 } func (x *ModelRobotFriend) GetCrmPhone() string { if x != nil { return x.CrmPhone } return "" } // @table_name: tb_ws_connect_record type ModelWsConnectRecord struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // 主键ID wxid md5 UserId string `protobuf:"bytes,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` // 机器人所属用户id CreatedAt int64 `protobuf:"varint,3,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` // 记录创建时间 LoginAt int64 `protobuf:"varint,4,opt,name=login_at,json=loginAt,proto3" json:"login_at,omitempty"` // 登录时间 LogoutAt int64 `protobuf:"varint,5,opt,name=logout_at,json=logoutAt,proto3" json:"logout_at,omitempty"` // 登出时间 BindId string `protobuf:"bytes,6,opt,name=bind_id,json=bindId,proto3" json:"bind_id,omitempty"` // 该ws绑定的id ExpiredAt *timestamppb.Timestamp `protobuf:"bytes,10,opt,name=expired_at,json=expiredAt,proto3" json:"expired_at,omitempty"` // 过期时间 } func (x *ModelWsConnectRecord) Reset() { *x = ModelWsConnectRecord{} if protoimpl.UnsafeEnabled { mi := &file_mdbc_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ModelWsConnectRecord) String() string { return protoimpl.X.MessageStringOf(x) } func (*ModelWsConnectRecord) ProtoMessage() {} func (x *ModelWsConnectRecord) ProtoReflect() protoreflect.Message { mi := &file_mdbc_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 ModelWsConnectRecord.ProtoReflect.Descriptor instead. func (*ModelWsConnectRecord) Descriptor() ([]byte, []int) { return file_mdbc_proto_rawDescGZIP(), []int{11} } func (x *ModelWsConnectRecord) GetId() string { if x != nil { return x.Id } return "" } func (x *ModelWsConnectRecord) GetUserId() string { if x != nil { return x.UserId } return "" } func (x *ModelWsConnectRecord) GetCreatedAt() int64 { if x != nil { return x.CreatedAt } return 0 } func (x *ModelWsConnectRecord) GetLoginAt() int64 { if x != nil { return x.LoginAt } return 0 } func (x *ModelWsConnectRecord) GetLogoutAt() int64 { if x != nil { return x.LogoutAt } return 0 } func (x *ModelWsConnectRecord) GetBindId() string { if x != nil { return x.BindId } return "" } func (x *ModelWsConnectRecord) GetExpiredAt() *timestamppb.Timestamp { if x != nil { return x.ExpiredAt } return nil } // @table_name: tb_robot type ModelRobot struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // @json: _id Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // 主键ID wxid md5 UserId string `protobuf:"bytes,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` // 机器人所属用户id CrmShopId string `protobuf:"bytes,3,opt,name=crm_shop_id,json=crmShopId,proto3" json:"crm_shop_id,omitempty"` // 机器人所属商户id AliasName string `protobuf:"bytes,4,opt,name=alias_name,json=aliasName,proto3" json:"alias_name,omitempty"` // 微信号 NickName string `protobuf:"bytes,5,opt,name=nick_name,json=nickName,proto3" json:"nick_name,omitempty"` // 机器人暱称 WechatId string `protobuf:"bytes,6,opt,name=wechat_id,json=wechatId,proto3" json:"wechat_id,omitempty"` // 微信唯一ID (wxidxxxxxx) WechatAlias string `protobuf:"bytes,7,opt,name=wechat_alias,json=wechatAlias,proto3" json:"wechat_alias,omitempty"` // 微信ID (用户自己定义的微信号) AvatarUrl string `protobuf:"bytes,8,opt,name=avatar_url,json=avatarUrl,proto3" json:"avatar_url,omitempty"` // 机器人头像 Sex int32 `protobuf:"varint,9,opt,name=sex,proto3" json:"sex,omitempty"` // 性别 0 未知 1 男生 2 女生 Mobile string `protobuf:"bytes,10,opt,name=mobile,proto3" json:"mobile,omitempty"` // 手机号码 Qrcode string `protobuf:"bytes,11,opt,name=qrcode,proto3" json:"qrcode,omitempty"` // 机器人二维码 Status int64 `protobuf:"varint,12,opt,name=status,proto3" json:"status,omitempty"` // 机器人PC是否在线 10在线 11离线 (兼容之前的pc登录流程和其他接口,这个登录状态不变,补多一个字段代表安卓登录状态) Limited int64 `protobuf:"varint,13,opt,name=limited,proto3" json:"limited,omitempty"` // 机器人是否被封号 0未封号 1已封号 AbilityLimit int64 `protobuf:"varint,14,opt,name=ability_limit,json=abilityLimit,proto3" json:"ability_limit,omitempty"` // 机器人是否功能受限 InitFriend int64 `protobuf:"varint,15,opt,name=init_friend,json=initFriend,proto3" json:"init_friend,omitempty"` // 机器人初始好友人数 NowFriend int64 `protobuf:"varint,16,opt,name=now_friend,json=nowFriend,proto3" json:"now_friend,omitempty"` // 机器人当前好友数量 AutoAddFriend int64 `protobuf:"varint,17,opt,name=auto_add_friend,json=autoAddFriend,proto3" json:"auto_add_friend,omitempty"` // 机器人是否自动通过好友请求 0否 1是 LastLoginTime int64 `protobuf:"varint,18,opt,name=last_login_time,json=lastLoginTime,proto3" json:"last_login_time,omitempty"` // 最后登录时间 LastLogOutTime int64 `protobuf:"varint,19,opt,name=last_log_out_time,json=lastLogOutTime,proto3" json:"last_log_out_time,omitempty"` // 最后登出时间 LastRegionCode string `protobuf:"bytes,20,opt,name=last_region_code,json=lastRegionCode,proto3" json:"last_region_code,omitempty"` // 最后登录的扫码设备的地区编码 LastCity string `protobuf:"bytes,21,opt,name=last_city,json=lastCity,proto3" json:"last_city,omitempty"` // 最后登录的城市名称 TodayRequireTime int64 `protobuf:"varint,22,opt,name=today_require_time,json=todayRequireTime,proto3" json:"today_require_time,omitempty"` // 当天请求次数 LastRequireAddFriendTime int64 `protobuf:"varint,23,opt,name=last_require_add_friend_time,json=lastRequireAddFriendTime,proto3" json:"last_require_add_friend_time,omitempty"` // 上一次请求添加好友的时间 CrmAutoAddFriend int64 `protobuf:"varint,24,opt,name=crm_auto_add_friend,json=crmAutoAddFriend,proto3" json:"crm_auto_add_friend,omitempty"` // crm系统自动通过好友 1自动通过 0不自动通过 DeleteTime int64 `protobuf:"varint,25,opt,name=delete_time,json=deleteTime,proto3" json:"delete_time,omitempty"` // 删除时间 CreateTime int64 `protobuf:"varint,26,opt,name=create_time,json=createTime,proto3" json:"create_time,omitempty"` // 创建时间 UpdateTime int64 `protobuf:"varint,27,opt,name=update_time,json=updateTime,proto3" json:"update_time,omitempty"` // 更新时间 LogAndOutTime int64 `protobuf:"varint,28,opt,name=log_and_out_time,json=logAndOutTime,proto3" json:"log_and_out_time,omitempty"` // 登入或者登出都要记录一下 AndroidStatus int64 `protobuf:"varint,29,opt,name=android_status,json=androidStatus,proto3" json:"android_status,omitempty"` // 机器人Android是否在线 10在线 11离线 GreetId string `protobuf:"bytes,30,opt,name=greet_id,json=greetId,proto3" json:"greet_id,omitempty"` // 打招呼模板id AndroidWechatVersion string `protobuf:"bytes,31,opt,name=android_wechat_version,json=androidWechatVersion,proto3" json:"android_wechat_version,omitempty"` // 微信版本 RiskControlGroup uint32 `protobuf:"varint,33,opt,name=risk_control_group,json=riskControlGroup,proto3" json:"risk_control_group,omitempty"` // 风控分组 LastPcLoginAt int64 `protobuf:"varint,34,opt,name=last_pc_login_at,json=lastPcLoginAt,proto3" json:"last_pc_login_at,omitempty"` // 最近PC登录时间 LastPcLogoutAt int64 `protobuf:"varint,35,opt,name=last_pc_logout_at,json=lastPcLogoutAt,proto3" json:"last_pc_logout_at,omitempty"` // 最近PC登出时间 LastAndroidLoginAt int64 `protobuf:"varint,36,opt,name=last_android_login_at,json=lastAndroidLoginAt,proto3" json:"last_android_login_at,omitempty"` // 最近安卓登录时间 LastAndroidLogoutAt int64 `protobuf:"varint,37,opt,name=last_android_logout_at,json=lastAndroidLogoutAt,proto3" json:"last_android_logout_at,omitempty"` // 最近安卓登出时间 RiskControlTask string `protobuf:"bytes,38,opt,name=risk_control_task,json=riskControlTask,proto3" json:"risk_control_task,omitempty"` // 风控任务 0是全部,1是回复,2是发消息,3是看朋友圈,4是发朋友圈,5是点赞,6是评论 7是群聊 可组合,如:1,2,3 OpenForStranger bool `protobuf:"varint,39,opt,name=open_for_stranger,json=openForStranger,proto3" json:"open_for_stranger,omitempty"` // 是否允许陌生人查看十条朋友圈 MomentPrivacyType int32 `protobuf:"varint,40,opt,name=moment_privacy_type,json=momentPrivacyType,proto3" json:"moment_privacy_type,omitempty"` // 朋友圈隐私选项类型 CoverUrl string `protobuf:"bytes,41,opt,name=cover_url,json=coverUrl,proto3" json:"cover_url,omitempty"` // 朋友圈封面url Country string `protobuf:"bytes,42,opt,name=country,proto3" json:"country,omitempty"` // 国家 Province string `protobuf:"bytes,43,opt,name=province,proto3" json:"province,omitempty"` // 省份 City string `protobuf:"bytes,44,opt,name=city,proto3" json:"city,omitempty"` // 城市 Signature string `protobuf:"bytes,45,opt,name=signature,proto3" json:"signature,omitempty"` // 个性签名 } func (x *ModelRobot) Reset() { *x = ModelRobot{} if protoimpl.UnsafeEnabled { mi := &file_mdbc_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ModelRobot) String() string { return protoimpl.X.MessageStringOf(x) } func (*ModelRobot) ProtoMessage() {} func (x *ModelRobot) ProtoReflect() protoreflect.Message { mi := &file_mdbc_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 ModelRobot.ProtoReflect.Descriptor instead. func (*ModelRobot) Descriptor() ([]byte, []int) { return file_mdbc_proto_rawDescGZIP(), []int{12} } func (x *ModelRobot) GetId() string { if x != nil { return x.Id } return "" } func (x *ModelRobot) GetUserId() string { if x != nil { return x.UserId } return "" } func (x *ModelRobot) GetCrmShopId() string { if x != nil { return x.CrmShopId } return "" } func (x *ModelRobot) GetAliasName() string { if x != nil { return x.AliasName } return "" } func (x *ModelRobot) GetNickName() string { if x != nil { return x.NickName } return "" } func (x *ModelRobot) GetWechatId() string { if x != nil { return x.WechatId } return "" } func (x *ModelRobot) GetWechatAlias() string { if x != nil { return x.WechatAlias } return "" } func (x *ModelRobot) GetAvatarUrl() string { if x != nil { return x.AvatarUrl } return "" } func (x *ModelRobot) GetSex() int32 { if x != nil { return x.Sex } return 0 } func (x *ModelRobot) GetMobile() string { if x != nil { return x.Mobile } return "" } func (x *ModelRobot) GetQrcode() string { if x != nil { return x.Qrcode } return "" } func (x *ModelRobot) GetStatus() int64 { if x != nil { return x.Status } return 0 } func (x *ModelRobot) GetLimited() int64 { if x != nil { return x.Limited } return 0 } func (x *ModelRobot) GetAbilityLimit() int64 { if x != nil { return x.AbilityLimit } return 0 } func (x *ModelRobot) GetInitFriend() int64 { if x != nil { return x.InitFriend } return 0 } func (x *ModelRobot) GetNowFriend() int64 { if x != nil { return x.NowFriend } return 0 } func (x *ModelRobot) GetAutoAddFriend() int64 { if x != nil { return x.AutoAddFriend } return 0 } func (x *ModelRobot) GetLastLoginTime() int64 { if x != nil { return x.LastLoginTime } return 0 } func (x *ModelRobot) GetLastLogOutTime() int64 { if x != nil { return x.LastLogOutTime } return 0 } func (x *ModelRobot) GetLastRegionCode() string { if x != nil { return x.LastRegionCode } return "" } func (x *ModelRobot) GetLastCity() string { if x != nil { return x.LastCity } return "" } func (x *ModelRobot) GetTodayRequireTime() int64 { if x != nil { return x.TodayRequireTime } return 0 } func (x *ModelRobot) GetLastRequireAddFriendTime() int64 { if x != nil { return x.LastRequireAddFriendTime } return 0 } func (x *ModelRobot) GetCrmAutoAddFriend() int64 { if x != nil { return x.CrmAutoAddFriend } return 0 } func (x *ModelRobot) GetDeleteTime() int64 { if x != nil { return x.DeleteTime } return 0 } func (x *ModelRobot) GetCreateTime() int64 { if x != nil { return x.CreateTime } return 0 } func (x *ModelRobot) GetUpdateTime() int64 { if x != nil { return x.UpdateTime } return 0 } func (x *ModelRobot) GetLogAndOutTime() int64 { if x != nil { return x.LogAndOutTime } return 0 } func (x *ModelRobot) GetAndroidStatus() int64 { if x != nil { return x.AndroidStatus } return 0 } func (x *ModelRobot) GetGreetId() string { if x != nil { return x.GreetId } return "" } func (x *ModelRobot) GetAndroidWechatVersion() string { if x != nil { return x.AndroidWechatVersion } return "" } func (x *ModelRobot) GetRiskControlGroup() uint32 { if x != nil { return x.RiskControlGroup } return 0 } func (x *ModelRobot) GetLastPcLoginAt() int64 { if x != nil { return x.LastPcLoginAt } return 0 } func (x *ModelRobot) GetLastPcLogoutAt() int64 { if x != nil { return x.LastPcLogoutAt } return 0 } func (x *ModelRobot) GetLastAndroidLoginAt() int64 { if x != nil { return x.LastAndroidLoginAt } return 0 } func (x *ModelRobot) GetLastAndroidLogoutAt() int64 { if x != nil { return x.LastAndroidLogoutAt } return 0 } func (x *ModelRobot) GetRiskControlTask() string { if x != nil { return x.RiskControlTask } return "" } func (x *ModelRobot) GetOpenForStranger() bool { if x != nil { return x.OpenForStranger } return false } func (x *ModelRobot) GetMomentPrivacyType() int32 { if x != nil { return x.MomentPrivacyType } return 0 } func (x *ModelRobot) GetCoverUrl() string { if x != nil { return x.CoverUrl } return "" } func (x *ModelRobot) GetCountry() string { if x != nil { return x.Country } return "" } func (x *ModelRobot) GetProvince() string { if x != nil { return x.Province } return "" } func (x *ModelRobot) GetCity() string { if x != nil { return x.City } return "" } func (x *ModelRobot) GetSignature() string { if x != nil { return x.Signature } return "" } var File_mdbc_proto protoreflect.FileDescriptor var file_mdbc_proto_rawDesc = []byte{ 0x0a, 0x0a, 0x6d, 0x64, 0x62, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x04, 0x6d, 0x64, 0x62, 0x63, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xd0, 0x02, 0x0a, 0x0f, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x77, 0x65, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x77, 0x65, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x77, 0x65, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x77, 0x65, 0x63, 0x68, 0x61, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x55, 0x72, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x6e, 0x63, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x69, 0x74, 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x69, 0x74, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x65, 0x78, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x73, 0x65, 0x78, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x0c, 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, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x86, 0x06, 0x0a, 0x0e, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x68, 0x61, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1e, 0x0a, 0x0b, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x5f, 0x77, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x57, 0x78, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x77, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x57, 0x78, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0b, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x77, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x57, 0x78, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x76, 0x61, 0x74, 0x61, 0x72, 0x55, 0x72, 0x6c, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x77, 0x61, 0x74, 0x63, 0x68, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x57, 0x61, 0x74, 0x63, 0x68, 0x12, 0x24, 0x0a, 0x0e, 0x68, 0x61, 0x73, 0x5f, 0x62, 0x65, 0x65, 0x6e, 0x5f, 0x77, 0x61, 0x74, 0x63, 0x68, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x68, 0x61, 0x73, 0x42, 0x65, 0x65, 0x6e, 0x57, 0x61, 0x74, 0x63, 0x68, 0x12, 0x31, 0x0a, 0x15, 0x69, 0x73, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x69, 0x73, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x6e, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x18, 0x10, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x12, 0x20, 0x0a, 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x61, 0x74, 0x18, 0x14, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x79, 0x6e, 0x63, 0x41, 0x74, 0x12, 0x2d, 0x0a, 0x13, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x61, 0x74, 0x18, 0x15, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x79, 0x6e, 0x63, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x41, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x18, 0x16, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x71, 0x72, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x17, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x71, 0x72, 0x63, 0x6f, 0x64, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x71, 0x72, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x18, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x71, 0x72, 0x63, 0x6f, 0x64, 0x65, 0x55, 0x72, 0x6c, 0x12, 0x2e, 0x0a, 0x0a, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x6d, 0x64, 0x62, 0x63, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x09, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x22, 0xbe, 0x03, 0x0a, 0x14, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x22, 0x0a, 0x0d, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0c, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x77, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x57, 0x78, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x41, 0x76, 0x61, 0x74, 0x61, 0x72, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x78, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x53, 0x65, 0x78, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x12, 0x2e, 0x0a, 0x0a, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x6d, 0x64, 0x62, 0x63, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x09, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x20, 0x0a, 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x61, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x79, 0x6e, 0x63, 0x41, 0x74, 0x22, 0xc0, 0x02, 0x0a, 0x18, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x54, 0x62, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x4d, 0x73, 0x67, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x72, 0x65, 0x61, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x75, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x12, 0x1e, 0x0a, 0x0b, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x6d, 0x73, 0x67, 0x5f, 0x61, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x6c, 0x61, 0x73, 0x74, 0x4d, 0x73, 0x67, 0x41, 0x74, 0x12, 0x2b, 0x0a, 0x12, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x66, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x5f, 0x6d, 0x73, 0x67, 0x5f, 0x61, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x6c, 0x61, 0x73, 0x74, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x4d, 0x73, 0x67, 0x41, 0x74, 0x12, 0x1e, 0x0a, 0x0b, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x5f, 0x77, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x57, 0x78, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x77, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x57, 0x78, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0b, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x6d, 0x73, 0x67, 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6c, 0x61, 0x73, 0x74, 0x4d, 0x73, 0x67, 0x49, 0x64, 0x12, 0x2b, 0x0a, 0x12, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x66, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x5f, 0x6d, 0x73, 0x67, 0x5f, 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x6c, 0x61, 0x73, 0x74, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x4d, 0x73, 0x67, 0x49, 0x64, 0x22, 0xe9, 0x02, 0x0a, 0x16, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x54, 0x62, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x73, 0x67, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x72, 0x65, 0x61, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x75, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x12, 0x1e, 0x0a, 0x0b, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x6d, 0x73, 0x67, 0x5f, 0x61, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x6c, 0x61, 0x73, 0x74, 0x4d, 0x73, 0x67, 0x41, 0x74, 0x12, 0x2b, 0x0a, 0x12, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x66, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x5f, 0x6d, 0x73, 0x67, 0x5f, 0x61, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x6c, 0x61, 0x73, 0x74, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x4d, 0x73, 0x67, 0x41, 0x74, 0x12, 0x1e, 0x0a, 0x0b, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x5f, 0x77, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x57, 0x78, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x77, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x57, 0x78, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0b, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x6d, 0x73, 0x67, 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6c, 0x61, 0x73, 0x74, 0x4d, 0x73, 0x67, 0x49, 0x64, 0x12, 0x2b, 0x0a, 0x12, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x66, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x5f, 0x6d, 0x73, 0x67, 0x5f, 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x6c, 0x61, 0x73, 0x74, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x4d, 0x73, 0x67, 0x49, 0x64, 0x12, 0x29, 0x0a, 0x11, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x77, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6c, 0x61, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x57, 0x78, 0x49, 0x64, 0x22, 0xba, 0x04, 0x0a, 0x16, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x54, 0x62, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x4d, 0x73, 0x67, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x62, 0x69, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x69, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0b, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x5f, 0x77, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x57, 0x78, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x77, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x57, 0x78, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x6d, 0x73, 0x67, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6d, 0x73, 0x67, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x73, 0x67, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x6d, 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x65, 0x6e, 0x64, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x73, 0x65, 0x6e, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x12, 0x26, 0x0a, 0x0f, 0x73, 0x65, 0x6e, 0x64, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x73, 0x65, 0x6e, 0x64, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x61, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x66, 0x61, 0x69, 0x6c, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x66, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x0c, 0x63, 0x61, 0x6c, 0x6c, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x5f, 0x61, 0x74, 0x18, 0x10, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x63, 0x61, 0x6c, 0x6c, 0x42, 0x61, 0x63, 0x6b, 0x41, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x11, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x17, 0x0a, 0x07, 0x73, 0x65, 0x6e, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x12, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x41, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x5f, 0x61, 0x74, 0x18, 0x13, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x41, 0x74, 0x12, 0x34, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x6d, 0x64, 0x62, 0x63, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x44, 0x61, 0x74, 0x61, 0x22, 0xda, 0x04, 0x0a, 0x14, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x54, 0x62, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x73, 0x67, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x62, 0x69, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x69, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0b, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x5f, 0x77, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x57, 0x78, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x77, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x57, 0x78, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x6d, 0x73, 0x67, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6d, 0x73, 0x67, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x73, 0x67, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x6d, 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x65, 0x6e, 0x64, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x73, 0x65, 0x6e, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x12, 0x26, 0x0a, 0x0f, 0x73, 0x65, 0x6e, 0x64, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x73, 0x65, 0x6e, 0x64, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x61, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x66, 0x61, 0x69, 0x6c, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x66, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x0c, 0x63, 0x61, 0x6c, 0x6c, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x5f, 0x61, 0x74, 0x18, 0x10, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x63, 0x61, 0x6c, 0x6c, 0x42, 0x61, 0x63, 0x6b, 0x41, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x11, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x17, 0x0a, 0x07, 0x73, 0x65, 0x6e, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x12, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x41, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x5f, 0x61, 0x74, 0x18, 0x13, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x41, 0x74, 0x12, 0x34, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x6d, 0x64, 0x62, 0x63, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x44, 0x61, 0x74, 0x61, 0x12, 0x20, 0x0a, 0x0c, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x5f, 0x77, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x15, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x57, 0x78, 0x49, 0x64, 0x22, 0xef, 0x03, 0x0a, 0x0b, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x61, 0x77, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x72, 0x61, 0x77, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x68, 0x61, 0x72, 0x65, 0x5f, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x68, 0x61, 0x72, 0x65, 0x54, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x68, 0x61, 0x72, 0x65, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x68, 0x61, 0x72, 0x65, 0x44, 0x65, 0x73, 0x63, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x68, 0x61, 0x72, 0x65, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x68, 0x61, 0x72, 0x65, 0x55, 0x72, 0x6c, 0x12, 0x19, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x66, 0x69, 0x6c, 0x65, 0x55, 0x72, 0x6c, 0x12, 0x26, 0x0a, 0x0f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x68, 0x61, 0x72, 0x65, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x5f, 0x6e, 0x69, 0x63, 0x6b, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x68, 0x61, 0x72, 0x65, 0x4e, 0x69, 0x63, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2f, 0x0a, 0x0b, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x6d, 0x64, 0x62, 0x63, 0x2e, 0x41, 0x74, 0x4d, 0x73, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x09, 0x61, 0x74, 0x4d, 0x73, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x1e, 0x0a, 0x0b, 0x77, 0x78, 0x5f, 0x6d, 0x73, 0x67, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x77, 0x78, 0x4d, 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x01, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x2b, 0x0a, 0x11, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x0c, 0x61, 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x74, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0c, 0x69, 0x73, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x79, 0x73, 0x65, 0x6c, 0x66, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73, 0x41, 0x74, 0x4d, 0x79, 0x73, 0x65, 0x6c, 0x66, 0x22, 0x77, 0x0a, 0x09, 0x41, 0x74, 0x4d, 0x73, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x75, 0x62, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x75, 0x62, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x4e, 0x69, 0x63, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x4e, 0x69, 0x63, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xc2, 0x02, 0x0a, 0x0e, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x53, 0x63, 0x68, 0x65, 0x64, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x74, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x61, 0x73, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x12, 0x15, 0x0a, 0x06, 0x72, 0x65, 0x71, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x72, 0x65, 0x71, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x65, 0x71, 0x5f, 0x6a, 0x73, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x71, 0x4a, 0x73, 0x6f, 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x73, 0x70, 0x5f, 0x6a, 0x73, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x73, 0x70, 0x4a, 0x73, 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x0b, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x5f, 0x77, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x57, 0x78, 0x49, 0x64, 0x12, 0x39, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x64, 0x41, 0x74, 0x22, 0x9c, 0x03, 0x0a, 0x10, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x26, 0x0a, 0x0f, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x5f, 0x77, 0x65, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x57, 0x65, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x77, 0x65, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x75, 0x73, 0x65, 0x72, 0x57, 0x65, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x6f, 0x66, 0x66, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x61, 0x64, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x6f, 0x66, 0x66, 0x6c, 0x69, 0x6e, 0x65, 0x41, 0x64, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x72, 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x69, 0x6e, 0x79, 0x69, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x69, 0x6e, 0x79, 0x69, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x69, 0x6e, 0x79, 0x69, 0x6e, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x69, 0x6e, 0x79, 0x69, 0x6e, 0x48, 0x65, 0x61, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x0a, 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, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x64, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x61, 0x64, 0x64, 0x41, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x72, 0x6d, 0x5f, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x72, 0x6d, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x22, 0xea, 0x01, 0x0a, 0x14, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x57, 0x73, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x5f, 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x41, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x6c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x5f, 0x61, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x6c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x41, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x62, 0x69, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x69, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x39, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x64, 0x41, 0x74, 0x22, 0xa3, 0x0c, 0x0a, 0x0a, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0b, 0x63, 0x72, 0x6d, 0x5f, 0x73, 0x68, 0x6f, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x72, 0x6d, 0x53, 0x68, 0x6f, 0x70, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x69, 0x63, 0x6b, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x69, 0x63, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x77, 0x65, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x77, 0x65, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x77, 0x65, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x77, 0x65, 0x63, 0x68, 0x61, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x55, 0x72, 0x6c, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x65, 0x78, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x73, 0x65, 0x78, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x71, 0x72, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x71, 0x72, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x69, 0x74, 0x5f, 0x66, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x69, 0x6e, 0x69, 0x74, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x6f, 0x77, 0x5f, 0x66, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x18, 0x10, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x6e, 0x6f, 0x77, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x12, 0x26, 0x0a, 0x0f, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x61, 0x64, 0x64, 0x5f, 0x66, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x18, 0x11, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x61, 0x75, 0x74, 0x6f, 0x41, 0x64, 0x64, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x12, 0x26, 0x0a, 0x0f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x6c, 0x61, 0x73, 0x74, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x29, 0x0a, 0x11, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x6c, 0x6f, 0x67, 0x5f, 0x6f, 0x75, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x6c, 0x61, 0x73, 0x74, 0x4c, 0x6f, 0x67, 0x4f, 0x75, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6c, 0x61, 0x73, 0x74, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x63, 0x69, 0x74, 0x79, 0x18, 0x15, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x61, 0x73, 0x74, 0x43, 0x69, 0x74, 0x79, 0x12, 0x2c, 0x0a, 0x12, 0x74, 0x6f, 0x64, 0x61, 0x79, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x16, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x74, 0x6f, 0x64, 0x61, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x3e, 0x0a, 0x1c, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x5f, 0x61, 0x64, 0x64, 0x5f, 0x66, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x17, 0x20, 0x01, 0x28, 0x03, 0x52, 0x18, 0x6c, 0x61, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x41, 0x64, 0x64, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x2d, 0x0a, 0x13, 0x63, 0x72, 0x6d, 0x5f, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x61, 0x64, 0x64, 0x5f, 0x66, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x18, 0x18, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x63, 0x72, 0x6d, 0x41, 0x75, 0x74, 0x6f, 0x41, 0x64, 0x64, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x19, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x1a, 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, 0x1b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x27, 0x0a, 0x10, 0x6c, 0x6f, 0x67, 0x5f, 0x61, 0x6e, 0x64, 0x5f, 0x6f, 0x75, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x6c, 0x6f, 0x67, 0x41, 0x6e, 0x64, 0x4f, 0x75, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x65, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x67, 0x72, 0x65, 0x65, 0x74, 0x49, 0x64, 0x12, 0x34, 0x0a, 0x16, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x5f, 0x77, 0x65, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x57, 0x65, 0x63, 0x68, 0x61, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2c, 0x0a, 0x12, 0x72, 0x69, 0x73, 0x6b, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x21, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x10, 0x72, 0x69, 0x73, 0x6b, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x27, 0x0a, 0x10, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x70, 0x63, 0x5f, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x5f, 0x61, 0x74, 0x18, 0x22, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x6c, 0x61, 0x73, 0x74, 0x50, 0x63, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x41, 0x74, 0x12, 0x29, 0x0a, 0x11, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x70, 0x63, 0x5f, 0x6c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x5f, 0x61, 0x74, 0x18, 0x23, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x6c, 0x61, 0x73, 0x74, 0x50, 0x63, 0x4c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x41, 0x74, 0x12, 0x31, 0x0a, 0x15, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x5f, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x5f, 0x61, 0x74, 0x18, 0x24, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, 0x6c, 0x61, 0x73, 0x74, 0x41, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x41, 0x74, 0x12, 0x33, 0x0a, 0x16, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x5f, 0x6c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x5f, 0x61, 0x74, 0x18, 0x25, 0x20, 0x01, 0x28, 0x03, 0x52, 0x13, 0x6c, 0x61, 0x73, 0x74, 0x41, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x4c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x41, 0x74, 0x12, 0x2a, 0x0a, 0x11, 0x72, 0x69, 0x73, 0x6b, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x5f, 0x74, 0x61, 0x73, 0x6b, 0x18, 0x26, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x72, 0x69, 0x73, 0x6b, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x2a, 0x0a, 0x11, 0x6f, 0x70, 0x65, 0x6e, 0x5f, 0x66, 0x6f, 0x72, 0x5f, 0x73, 0x74, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x72, 0x18, 0x27, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x6f, 0x70, 0x65, 0x6e, 0x46, 0x6f, 0x72, 0x53, 0x74, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x72, 0x12, 0x2e, 0x0a, 0x13, 0x6d, 0x6f, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x63, 0x79, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x28, 0x20, 0x01, 0x28, 0x05, 0x52, 0x11, 0x6d, 0x6f, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x69, 0x76, 0x61, 0x63, 0x79, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x29, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x55, 0x72, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x2a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x6e, 0x63, 0x65, 0x18, 0x2b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x69, 0x74, 0x79, 0x18, 0x2c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x69, 0x74, 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x2d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2a, 0x45, 0x0a, 0x09, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x10, 0x0a, 0x0c, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x4e, 0x69, 0x6c, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x10, 0x02, 0x2a, 0x60, 0x0a, 0x09, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x10, 0x0a, 0x0c, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x65, 0x4e, 0x69, 0x6c, 0x10, 0x00, 0x12, 0x14, 0x0a, 0x10, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x65, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x10, 0x02, 0x12, 0x16, 0x0a, 0x12, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x10, 0x03, 0x42, 0x09, 0x5a, 0x07, 0x2e, 0x2f, 0x3b, 0x6d, 0x64, 0x62, 0x63, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( file_mdbc_proto_rawDescOnce sync.Once file_mdbc_proto_rawDescData = file_mdbc_proto_rawDesc ) func file_mdbc_proto_rawDescGZIP() []byte { file_mdbc_proto_rawDescOnce.Do(func() { file_mdbc_proto_rawDescData = protoimpl.X.CompressGZIP(file_mdbc_proto_rawDescData) }) return file_mdbc_proto_rawDescData } var file_mdbc_proto_enumTypes = make([]protoimpl.EnumInfo, 2) var file_mdbc_proto_msgTypes = make([]protoimpl.MessageInfo, 13) var file_mdbc_proto_goTypes = []interface{}{ (AdminType)(0), // 0: mdbc.AdminType (TaskState)(0), // 1: mdbc.TaskState (*ModelFriendInfo)(nil), // 2: mdbc.ModelFriendInfo (*ModelGroupChat)(nil), // 3: mdbc.ModelGroupChat (*ModelGroupChatMember)(nil), // 4: mdbc.ModelGroupChatMember (*ModelTbPrivateMsgSession)(nil), // 5: mdbc.ModelTbPrivateMsgSession (*ModelTbGroupMsgSession)(nil), // 6: mdbc.ModelTbGroupMsgSession (*ModelTbRobotPrivateMsg)(nil), // 7: mdbc.ModelTbRobotPrivateMsg (*ModelTbRobotGroupMsg)(nil), // 8: mdbc.ModelTbRobotGroupMsg (*ContentData)(nil), // 9: mdbc.ContentData (*AtMsgItem)(nil), // 10: mdbc.AtMsgItem (*ModelSchedTask)(nil), // 11: mdbc.ModelSchedTask (*ModelRobotFriend)(nil), // 12: mdbc.ModelRobotFriend (*ModelWsConnectRecord)(nil), // 13: mdbc.ModelWsConnectRecord (*ModelRobot)(nil), // 14: mdbc.ModelRobot (*timestamppb.Timestamp)(nil), // 15: google.protobuf.Timestamp } var file_mdbc_proto_depIdxs = []int32{ 0, // 0: mdbc.ModelGroupChat.admin_type:type_name -> mdbc.AdminType 0, // 1: mdbc.ModelGroupChatMember.admin_type:type_name -> mdbc.AdminType 9, // 2: mdbc.ModelTbRobotPrivateMsg.content_data:type_name -> mdbc.ContentData 9, // 3: mdbc.ModelTbRobotGroupMsg.content_data:type_name -> mdbc.ContentData 10, // 4: mdbc.ContentData.at_msg_item:type_name -> mdbc.AtMsgItem 15, // 5: mdbc.ModelSchedTask.expired_at:type_name -> google.protobuf.Timestamp 15, // 6: mdbc.ModelWsConnectRecord.expired_at:type_name -> google.protobuf.Timestamp 7, // [7:7] is the sub-list for method output_type 7, // [7:7] is the sub-list for method input_type 7, // [7:7] is the sub-list for extension type_name 7, // [7:7] is the sub-list for extension extendee 0, // [0:7] is the sub-list for field type_name } func init() { file_mdbc_proto_init() } func file_mdbc_proto_init() { if File_mdbc_proto != nil { return } if !protoimpl.UnsafeEnabled { file_mdbc_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ModelFriendInfo); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_mdbc_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ModelGroupChat); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_mdbc_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ModelGroupChatMember); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_mdbc_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ModelTbPrivateMsgSession); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_mdbc_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ModelTbGroupMsgSession); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_mdbc_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ModelTbRobotPrivateMsg); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_mdbc_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ModelTbRobotGroupMsg); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_mdbc_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ContentData); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_mdbc_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*AtMsgItem); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_mdbc_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ModelSchedTask); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_mdbc_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ModelRobotFriend); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_mdbc_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ModelWsConnectRecord); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_mdbc_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ModelRobot); 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_mdbc_proto_rawDesc, NumEnums: 2, NumMessages: 13, NumExtensions: 0, NumServices: 0, }, GoTypes: file_mdbc_proto_goTypes, DependencyIndexes: file_mdbc_proto_depIdxs, EnumInfos: file_mdbc_proto_enumTypes, MessageInfos: file_mdbc_proto_msgTypes, }.Build() File_mdbc_proto = out.File file_mdbc_proto_rawDesc = nil file_mdbc_proto_goTypes = nil file_mdbc_proto_depIdxs = nil }