diff --git a/README.md b/README.md index 823d30b1..2378e220 100644 --- a/README.md +++ b/README.md @@ -42,6 +42,7 @@ qq-android协议的golang实现 移植于mirai - [x] 新好友 - [x] 新好友请求 - [x] 客户端离线 +- [x] 群提示 (戳一戳/运气王等) #### 主动操作 > 为防止滥用,将不支持主动邀请新成员进群 @@ -57,7 +58,7 @@ qq-android协议的golang实现 移植于mirai - [x] 处理被邀请加群请求 - [x] 处理好友请求 - [x] 撤回群消息 -- [ ] 群公告设置 +- [x] 群公告设置 - [x] 获取群文件下载链接 - [x] 群设置 (全体禁言/群名) - [x] 修改群成员Card @@ -65,3 +66,4 @@ qq-android协议的golang实现 移植于mirai - [ ] ~~群成员邀请~~ - [x] 群成员禁言/解除禁言 - [x] T出群成员 +- [x] 戳一戳群友 diff --git a/binary/jce/structs.go b/binary/jce/structs.go index b7877ad1..280dc9f5 100644 --- a/binary/jce/structs.go +++ b/binary/jce/structs.go @@ -27,6 +27,12 @@ type ( Map map[string]map[string][]byte `jceId:"0"` } + SsoServerInfo struct { + Server string `jceId:"1"` + Port int32 `jceId:"2"` + Location string `jceId:"8"` + } + SvcReqRegister struct { IJceStruct Uin int64 `jceId:"0"` @@ -358,6 +364,12 @@ func (pkt *RequestDataVersion2) ReadFrom(r *JceReader) { }) } +func (pkt *SsoServerInfo) ReadFrom(r *JceReader) { + pkt.Server = r.ReadString(1) + pkt.Port = r.ReadInt32(2) + pkt.Location = r.ReadString(8) +} + func (pkt *SvcReqRegister) ToBytes() []byte { w := NewJceWriter() w.WriteJceStructRaw(pkt) diff --git a/client/builders.go b/client/builders.go index 8d837fab..c736d8f5 100644 --- a/client/builders.go +++ b/client/builders.go @@ -37,9 +37,9 @@ func (c *QQClient) buildLoginPacket() (uint16, []byte) { w.Write(tlv.T18(16, uint32(c.Uin))) w.Write(tlv.T1(uint32(c.Uin), SystemDeviceInfo.IpAddress)) - w.Write(tlv.T106(uint32(c.Uin), 0, c.PasswordMd5, true, SystemDeviceInfo.Guid, SystemDeviceInfo.TgtgtKey)) + w.Write(tlv.T106(uint32(c.Uin), 0, uint32(SystemDeviceInfo.Protocol), c.PasswordMd5, true, SystemDeviceInfo.Guid, SystemDeviceInfo.TgtgtKey)) w.Write(tlv.T116(184024956, 0x10400)) - w.Write(tlv.T100()) + w.Write(tlv.T100(uint32(SystemDeviceInfo.Protocol))) w.Write(tlv.T107(0)) w.Write(tlv.T142("com.tencent.mobileqq")) w.Write(tlv.T144( @@ -86,7 +86,7 @@ func (c *QQClient) buildLoginPacket() (uint16, []byte) { w.Write(tlv.T521()) w.Write(tlv.T525(tlv.T536([]byte{0x01, 0x00}))) }) - sso := packets.BuildSsoPacket(seq, "wtlogin.login", SystemDeviceInfo.IMEI, []byte{}, c.OutGoingPacketSessionId, req, c.ksid) + sso := packets.BuildSsoPacket(seq, uint32(SystemDeviceInfo.Protocol), "wtlogin.login", SystemDeviceInfo.IMEI, []byte{}, c.OutGoingPacketSessionId, req, c.ksid) packet := packets.BuildLoginPacket(c.Uin, 2, make([]byte, 16), sso, []byte{}) return seq, packet } @@ -103,7 +103,7 @@ func (c *QQClient) buildDeviceLockLoginPacket(t402 []byte) (uint16, []byte) { h := md5.Sum(append(append(SystemDeviceInfo.Guid, []byte("stMNokHgxZUGhsYp")...), t402...)) w.Write(tlv.T401(h[:])) }) - sso := packets.BuildSsoPacket(seq, "wtlogin.login", SystemDeviceInfo.IMEI, []byte{}, c.OutGoingPacketSessionId, req, c.ksid) + sso := packets.BuildSsoPacket(seq, uint32(SystemDeviceInfo.Protocol), "wtlogin.login", SystemDeviceInfo.IMEI, []byte{}, c.OutGoingPacketSessionId, req, c.ksid) packet := packets.BuildLoginPacket(c.Uin, 2, make([]byte, 16), sso, []byte{}) return seq, packet } @@ -118,7 +118,7 @@ func (c *QQClient) buildCaptchaPacket(result string, sign []byte) (uint16, []byt w.Write(tlv.T104(c.t104)) w.Write(tlv.T116(150470524, 66560)) }) - sso := packets.BuildSsoPacket(seq, "wtlogin.login", SystemDeviceInfo.IMEI, []byte{}, c.OutGoingPacketSessionId, req, c.ksid) + sso := packets.BuildSsoPacket(seq, uint32(SystemDeviceInfo.Protocol), "wtlogin.login", SystemDeviceInfo.IMEI, []byte{}, c.OutGoingPacketSessionId, req, c.ksid) packet := packets.BuildLoginPacket(c.Uin, 2, make([]byte, 16), sso, []byte{}) return seq, packet } @@ -166,7 +166,7 @@ func (c *QQClient) buildClientRegisterPacket() (uint16, []byte) { Context: make(map[string]string), Status: make(map[string]string), } - sso := packets.BuildSsoPacket(seq, "StatSvc.register", SystemDeviceInfo.IMEI, c.sigInfo.tgt, c.OutGoingPacketSessionId, pkt.ToBytes(), c.ksid) + sso := packets.BuildSsoPacket(seq, uint32(SystemDeviceInfo.Protocol), "StatSvc.register", SystemDeviceInfo.IMEI, c.sigInfo.tgt, c.OutGoingPacketSessionId, pkt.ToBytes(), c.ksid) packet := packets.BuildLoginPacket(c.Uin, 1, c.sigInfo.d2Key, sso, c.sigInfo.d2) return seq, packet } @@ -252,12 +252,12 @@ func (c *QQClient) buildFriendGroupListRequestPacket(friendStartIndex, friendLis } // friendlist.GetTroopListReqV2 -func (c *QQClient) buildGroupListRequestPacket() (uint16, []byte) { +func (c *QQClient) buildGroupListRequestPacket(vecCookie []byte) (uint16, []byte) { seq := c.nextSeq() req := &jce.TroopListRequest{ Uin: c.Uin, GetMSFMsgFlag: 1, - Cookies: []byte{}, + Cookies: vecCookie, GroupInfo: []int64{}, GroupFlagExt: 1, Version: 7, @@ -569,7 +569,7 @@ func (c *QQClient) buildImageUploadPacket(data, updKey []byte, commandId int32, } return c.nextGroupDataTransSeq() }(), - Appid: 537062409, + Appid: int32(SystemDeviceInfo.Protocol), Dataflag: 4096, CommandId: commandId, LocaleId: 2052, @@ -915,6 +915,46 @@ func (c *QQClient) buildGroupMutePacket(groupCode, memberUin int64, time uint32) return seq, packet } +// OidbSvc.0xed3 +func (c *QQClient) buildGroupPokePacket(groupCode, target int64) (uint16, []byte) { + seq := c.nextSeq() + body := &oidb.DED3ReqBody{ + ToUin: target, + GroupCode: groupCode, + } + b, _ := proto.Marshal(body) + req := &oidb.OIDBSSOPkg{ + Command: 3795, + ServiceType: 1, + Bodybuffer: b, + } + payload, _ := proto.Marshal(req) + packet := packets.BuildUniPacket(c.Uin, seq, "OidbSvc.0xed3", 1, c.OutGoingPacketSessionId, EmptyBytes, c.sigInfo.d2Key, payload) + return seq, packet +} + +// OidbSvc.0x55c_1 +func (c *QQClient) buildGroupAdminSetPacket(groupCode, member int64, flag bool) (uint16, []byte) { + seq := c.nextSeq() + req := &oidb.OIDBSSOPkg{ + Command: 1372, + ServiceType: 1, + Bodybuffer: binary.NewWriterF(func(w *binary.Writer) { + w.WriteUInt32(uint32(groupCode)) + w.WriteUInt32(uint32(member)) + w.WriteByte(func() byte { + if flag { + return 1 + } + return 0 + }()) + }), + } + payload, _ := proto.Marshal(req) + packet := packets.BuildUniPacket(c.Uin, seq, "OidbSvc.0x55c_1", 1, c.OutGoingPacketSessionId, EmptyBytes, c.sigInfo.d2Key, payload) + return seq, packet +} + // MultiMsg.ApplyUp func (c *QQClient) buildMultiApplyUpPacket(data, hash []byte, buType int32, groupUin int64) (uint16, []byte) { seq := c.nextSeq() diff --git a/client/client.go b/client/client.go index 054fff25..29740438 100644 --- a/client/client.go +++ b/client/client.go @@ -13,10 +13,10 @@ import ( "math/rand" "net" "strconv" + "strings" "sync" "sync/atomic" "time" - "strings" "github.com/golang/protobuf/proto" @@ -30,8 +30,9 @@ import ( ) type QQClient struct { - Uin int64 - PasswordMd5 [16]byte + Uin int64 + PasswordMd5 [16]byte + CustomServer *net.TCPAddr Nickname string Age uint16 @@ -44,6 +45,7 @@ type QQClient struct { OutGoingPacketSessionId []byte RandomKey []byte Conn net.Conn + ConnectTime time.Time decoders map[string]func(*QQClient, uint16, []byte) (interface{}, error) handlers sync.Map @@ -180,13 +182,13 @@ func (c *QQClient) Login() (*LoginResponse, error) { } func (c *QQClient) GetVipInfo(target int64) (*VipInfo, error) { - b, err := utils.HttpGetBytes(fmt.Sprintf("https://h5.vip.qq.com/p/mc/cardv2/other?platform=1&qq=%d&adtag=geren&aid=mvip.pingtai.mobileqq.androidziliaoka.fromqita",target),c.getCookiesWithDomain("h5.vip.qq.com")) + b, err := utils.HttpGetBytes(fmt.Sprintf("https://h5.vip.qq.com/p/mc/cardv2/other?platform=1&qq=%d&adtag=geren&aid=mvip.pingtai.mobileqq.androidziliaoka.fromqita", target), c.getCookiesWithDomain("h5.vip.qq.com")) if err != nil { return nil, err } - ret := VipInfo{Uin: target}; + ret := VipInfo{Uin: target} b = b[bytes.Index(b, []byte(``))+24:] - t := b[:bytes.Index(b,[]byte(``))] + t := b[:bytes.Index(b, []byte(``))] ret.Name = string(t) b = b[bytes.Index(b, []byte(`LV`))+17:] t = b[:bytes.Index(b, []byte(`

`))] @@ -194,7 +196,7 @@ func (c *QQClient) GetVipInfo(target int64) (*VipInfo, error) { b = b[bytes.Index(b, []byte(`
`))+35:] b = b[bytes.Index(b, []byte(`

`))+3:] t = b[:bytes.Index(b, []byte(`倍`))] - ret.LevelSpeed, _ = strconv.ParseFloat(string(t),64) + ret.LevelSpeed, _ = strconv.ParseFloat(string(t), 64) b = b[bytes.Index(b, []byte(`

`))+35:] b = b[bytes.Index(b, []byte(`

`))+3:] st := string(b[:bytes.Index(b, []byte(`

`))]) @@ -209,7 +211,7 @@ func (c *QQClient) GetVipInfo(target int64) (*VipInfo, error) { b = b[bytes.Index(b, []byte(`

`))+3:] t = b[:bytes.Index(b, []byte(`

`))] ret.VipGrowthTotal, _ = strconv.Atoi(string(t)) - return &ret,nil + return &ret, nil } func (c *QQClient) GetGroupHonorInfo(groupCode int64, honorType HonorType) (*GroupHonorInfo, error) { @@ -296,6 +298,11 @@ func (c *QQClient) SendGroupMessage(groupCode int64, m *message.SendingMessage, useFram = f[0] } imgCount := m.Count(func(e message.IMessageElement) bool { return e.Type() == message.Image }) + if useFram { + if m.Any(func(e message.IMessageElement) bool { return e.Type() == message.Reply }) { + useFram = false + } + } msgLen := message.EstimateLength(m.Elements, 703) if msgLen > 5000 || imgCount > 50 { return nil @@ -445,7 +452,7 @@ func (c *QQClient) GetForwardMessage(resId string) *message.ForwardMessage { ret.Nodes = append(ret.Nodes, &message.ForwardNode{ SenderId: m.Head.FromUin, SenderName: func() string { - if m.Head.MsgType == 82 { + if m.Head.MsgType == 82 && m.Head.GroupInfo != nil { return m.Head.GroupInfo.GroupCard } return m.Head.FromNick @@ -519,6 +526,10 @@ func (c *QQClient) sendGroupLongOrForwardMessage(groupCode int64, isLong bool, m return nil } +func (c *QQClient) sendGroupPoke(groupCode, target int64) { + _, _ = c.sendAndWait(c.buildGroupPokePacket(groupCode, target)) +} + func (c *QQClient) RecallGroupMessage(groupCode int64, msgId, msgInternalId int32) { _, pkt := c.buildGroupRecallPacket(groupCode, msgId, msgInternalId) _ = c.send(pkt) @@ -653,7 +664,7 @@ func (c *QQClient) ReloadGroupList() error { } func (c *QQClient) GetGroupList() ([]*GroupInfo, error) { - rsp, err := c.sendAndWait(c.buildGroupListRequestPacket()) + rsp, err := c.sendAndWait(c.buildGroupListRequestPacket(EmptyBytes)) if err != nil { return nil, err } @@ -803,6 +814,10 @@ func (c *QQClient) editMemberSpecialTitle(groupCode, memberUin int64, title stri _, _ = c.sendAndWait(c.buildEditSpecialTitlePacket(groupCode, memberUin, title)) } +func (c *QQClient) setGroupAdmin(groupCode, memberUin int64, flag bool) { + _, _ = c.sendAndWait(c.buildGroupAdminSetPacket(groupCode, memberUin, flag)) +} + func (c *QQClient) updateGroupName(groupCode int64, newName string) { _, _ = c.sendAndWait(c.buildGroupNameUpdatePacket(groupCode, newName)) } @@ -853,21 +868,30 @@ var servers = []*net.TCPAddr{ func (c *QQClient) connect() error { if c.server == nil { - addrs, err := net.LookupIP("msfwifi.3g.qq.com") - if err == nil && len(addrs) > 0 { - c.server = &net.TCPAddr{ - IP: addrs[rand.Intn(len(addrs))], - Port: 8080, - } + if c.CustomServer != nil { + c.server = c.CustomServer } else { - c.server = servers[rand.Intn(len(servers))] + addrs, err := net.LookupIP("msfwifi.3g.qq.com") + if err == nil && len(addrs) > 0 { + c.server = &net.TCPAddr{ + IP: addrs[rand.Intn(len(addrs))], + Port: 8080, + } + } else { + c.server = servers[rand.Intn(len(servers))] + } } } c.Info("connect to server: %v", c.server.String()) conn, err := net.DialTCP("tcp", nil, c.server) if err != nil { + if c.CustomServer != nil { + c.CustomServer = nil + return c.connect() + } return err } + c.ConnectTime = time.Now() c.Conn = conn c.onlinePushCache = []int16{} return nil @@ -932,6 +956,7 @@ func (c *QQClient) sendAndWait(seq uint16, pkt []byte) (interface{}, error) { case <-time.After(time.Second * 30): retry++ if retry < 2 { + c.Error("packet %v timed out. retry.", seq) _ = c.send(pkt) continue } @@ -950,6 +975,12 @@ func (c *QQClient) netLoop() { for c.Online { l, err := reader.ReadInt32() if err == io.EOF || err == io.ErrClosedPipe { + c.Error("connection dropped by server: %v", err) + if c.ConnectTime.Sub(time.Now()) < time.Minute && c.CustomServer != nil { + c.Error("custom server error.") + c.CustomServer = nil + c.server = nil + } err = c.connect() if err != nil { break @@ -1021,9 +1052,11 @@ func (c *QQClient) startHeartbeat() { func (c *QQClient) doHeartbeat() { if c.Online { seq := c.nextSeq() - sso := packets.BuildSsoPacket(seq, "Heartbeat.Alive", SystemDeviceInfo.IMEI, []byte{}, c.OutGoingPacketSessionId, []byte{}, c.ksid) + sso := packets.BuildSsoPacket(seq, uint32(SystemDeviceInfo.Protocol), "Heartbeat.Alive", SystemDeviceInfo.IMEI, []byte{}, c.OutGoingPacketSessionId, []byte{}, c.ksid) packet := packets.BuildLoginPacket(c.Uin, 0, []byte{}, sso, []byte{}) _, _ = c.sendAndWait(seq, packet) + _, pkt := c.buildGetMessageRequestPacket(msg.SyncFlag_START, time.Now().Unix()) + c.send(pkt) time.AfterFunc(30*time.Second, c.doHeartbeat) } } diff --git a/client/decoders.go b/client/decoders.go index b1a0103a..2fca3b11 100644 --- a/client/decoders.go +++ b/client/decoders.go @@ -4,8 +4,10 @@ import ( "encoding/hex" "errors" "fmt" + "github.com/Mrs4s/MiraiGo/client/pb/notify" "github.com/Mrs4s/MiraiGo/client/pb/pttcenter" "log" + "net" "strconv" "sync" "sync/atomic" @@ -130,6 +132,24 @@ func decodePushReqPacket(c *QQClient, _ uint16, payload []byte) (interface{}, er jceBuf := []byte{} t := r.ReadInt32(1) r.ReadSlice(&jceBuf, 2) + if t == 1 && len(jceBuf) > 0 { + ssoPkt := jce.NewJceReader(jceBuf) + servers := []jce.SsoServerInfo{} + ssoPkt.ReadSlice(&servers, 1) + if len(servers) > 0 { + c.server = &net.TCPAddr{ + IP: net.ParseIP(servers[0].Server), + Port: int(servers[0].Port), + } + c.Debug("got new server addr: %v location: %v", c.server.String(), servers[0].Location) + for _, e := range c.eventHandlers.serverUpdatedHandlers { + cover(func() { + e(c, &ServerUpdatedEvent{Servers: servers}) + }) + } + return nil, nil + } + } seq := r.ReadInt64(3) _, pkt := c.buildConfPushRespPacket(t, seq, jceBuf) return nil, c.send(pkt) @@ -243,6 +263,7 @@ func decodeMessageSvcPacket(c *QQClient, _ uint16, payload []byte) (interface{}, } _, _ = c.sendAndWait(c.buildDeleteMessageRequestPacket(delItems)) if rsp.SyncFlag != msg.SyncFlag_STOP { + c.Debug("continue sync with flag: %v", rsp.SyncFlag.String()) _, _ = c.sendAndWait(c.buildGetMessageRequestPacket(rsp.SyncFlag, time.Now().Unix())) } return nil, err @@ -333,7 +354,9 @@ func decodeGroupListResponse(c *QQClient, _ uint16, payload []byte) (interface{} data := &jce.RequestDataVersion3{} data.ReadFrom(jce.NewJceReader(request.SBuffer)) r := jce.NewJceReader(data.Map["GetTroopListRespV2"][1:]) + vecCookie := []byte{} groups := []jce.TroopNumber{} + r.ReadSlice(&vecCookie, 4) r.ReadSlice(&groups, 5) var l []*GroupInfo for _, g := range groups { @@ -348,6 +371,13 @@ func decodeGroupListResponse(c *QQClient, _ uint16, payload []byte) (interface{} client: c, }) } + if len(vecCookie) > 0 { + rsp, err := c.sendAndWait(c.buildGroupListRequestPacket(vecCookie)) + if err != nil { + return nil, err + } + l = append(l, rsp.([]*GroupInfo)...) + } return l, nil } @@ -513,21 +543,49 @@ func decodeOnlinePushReqPacket(c *QQClient, seq uint16, payload []byte) (interfa TargetUin: target, Time: t, }) - case 0x11: // 撤回消息 + case 0x10, 0x11, 0x14: // group notify msg r.ReadByte() - b := pb.NotifyMsgBody{} + b := notify.NotifyMsgBody{} _ = proto.Unmarshal(r.ReadAvailable(), &b) - if b.OptMsgRecall == nil { - continue + if b.OptMsgRecall != nil { + for _, rm := range b.OptMsgRecall.RecalledMsgList { + c.dispatchGroupMessageRecalledEvent(&GroupMessageRecalledEvent{ + GroupCode: groupId, + OperatorUin: b.OptMsgRecall.Uin, + AuthorUin: rm.AuthorUin, + MessageId: rm.Seq, + Time: rm.Time, + }) + } } - for _, rm := range b.OptMsgRecall.RecalledMsgList { - c.dispatchGroupMessageRecalledEvent(&GroupMessageRecalledEvent{ - GroupCode: groupId, - OperatorUin: b.OptMsgRecall.Uin, - AuthorUin: rm.AuthorUin, - MessageId: rm.Seq, - Time: rm.Time, - }) + if b.OptGeneralGrayTip != nil { + switch b.OptGeneralGrayTip.TemplId { + case 10043, 1136: // 戳一戳 + var sender int64 = 0 + receiver := c.Uin + for _, templ := range b.OptGeneralGrayTip.MsgTemplParam { + if templ.Name == "uin_str1" { + sender, _ = strconv.ParseInt(templ.Value, 10, 64) + } + if templ.Name == "uin_str2" { + receiver, _ = strconv.ParseInt(templ.Value, 10, 64) + } + } + c.dispatchGroupNotifyEvent(&GroupPokeNotifyEvent{ + GroupCode: groupId, + Sender: sender, + Receiver: receiver, + }) + } + } + if b.OptMsgRedTips != nil { + if b.OptMsgRedTips.LuckyFlag == 1 { // 运气王提示 + c.dispatchGroupNotifyEvent(&GroupRedBagLuckyKingNotifyEvent{ + GroupCode: groupId, + Sender: int64(b.OptMsgRedTips.SenderUin), + LuckyKing: int64(b.OptMsgRedTips.ReceiverUin), + }) + } } } } diff --git a/client/entities.go b/client/entities.go index 90126ff7..7f4a64e1 100644 --- a/client/entities.go +++ b/client/entities.go @@ -2,6 +2,7 @@ package client import ( "errors" + "github.com/Mrs4s/MiraiGo/binary/jce" "strings" "sync" ) @@ -15,6 +16,8 @@ type ( MemberPermission int + ClientProtocol int + LoginResponse struct { Success bool Error LoginError @@ -102,6 +105,12 @@ type ( Member *GroupMemberInfo } + IGroupNotifyEvent interface { + From() int64 + Name() string + Content() string + } + MemberLeaveGroupEvent struct { Group *GroupInfo Member *GroupMemberInfo @@ -154,6 +163,10 @@ type ( Message string } + ServerUpdatedEvent struct { + Servers []jce.SsoServerInfo + } + NewFriendEvent struct { Friend *FriendInfo } @@ -204,6 +217,10 @@ const ( Owner MemberPermission = iota Administrator Member + + AndroidPhone ClientProtocol = 537062845 + AndroidPad ClientProtocol = 537062409 + AndroidWatch ClientProtocol = 537061176 ) func (g *GroupInfo) UpdateName(newName string) { @@ -246,6 +263,16 @@ func (m *GroupMemberInfo) EditCard(card string) { } } +func (m *GroupMemberInfo) Poke() { + m.Group.client.sendGroupPoke(m.Group.Code, m.Uin) +} + +func (m *GroupMemberInfo) SetAdmin(flag bool) { + if m.Group.OwnerUin == m.Group.client.Uin { + m.Group.client.setGroupAdmin(m.Group.Code, m.Uin, flag) + } +} + func (m *GroupMemberInfo) EditSpecialTitle(title string) { if m.Group.SelfPermission() == Owner && len(title) <= 18 { m.Group.client.editMemberSpecialTitle(m.Group.Code, m.Uin, title) diff --git a/client/events.go b/client/events.go index f4e3d97c..38ad020c 100644 --- a/client/events.go +++ b/client/events.go @@ -24,6 +24,8 @@ type eventHandlers struct { newFriendHandlers []func(*QQClient, *NewFriendEvent) disconnectHandlers []func(*QQClient, *ClientDisconnectedEvent) logHandlers []func(*QQClient, *LogEvent) + serverUpdatedHandlers []func(*QQClient, *ServerUpdatedEvent) + notifyHandlers []func(*QQClient, IGroupNotifyEvent) groupMessageReceiptHandlers sync.Map } @@ -99,10 +101,18 @@ func (c *QQClient) OnDisconnected(f func(*QQClient, *ClientDisconnectedEvent)) { c.eventHandlers.disconnectHandlers = append(c.eventHandlers.disconnectHandlers, f) } +func (c *QQClient) OnServerUpdated(f func(*QQClient, *ServerUpdatedEvent)) { + c.eventHandlers.serverUpdatedHandlers = append(c.eventHandlers.serverUpdatedHandlers, f) +} + func (c *QQClient) OnLog(f func(*QQClient, *LogEvent)) { c.eventHandlers.logHandlers = append(c.eventHandlers.logHandlers, f) } +func (c *QQClient) OnGroupNotify(f func(*QQClient, IGroupNotifyEvent)) { + c.eventHandlers.notifyHandlers = append(c.eventHandlers.notifyHandlers, f) +} + func NewUinFilterPrivate(uin int64) func(*message.PrivateMessage) bool { return func(msg *message.PrivateMessage) bool { return msg.Sender.Uin == uin @@ -289,6 +299,17 @@ func (c *QQClient) dispatchNewFriendEvent(e *NewFriendEvent) { } } +func (c *QQClient) dispatchGroupNotifyEvent(e IGroupNotifyEvent) { + if e == nil { + return + } + for _, f := range c.eventHandlers.notifyHandlers { + cover(func() { + f(c, e) + }) + } +} + func (c *QQClient) dispatchDisconnectEvent(e *ClientDisconnectedEvent) { if e == nil { return diff --git a/client/global.go b/client/global.go index 80901b29..1da005dd 100644 --- a/client/global.go +++ b/client/global.go @@ -38,6 +38,7 @@ type DeviceInfo struct { APN []byte Guid []byte TgtgtKey []byte + Protocol ClientProtocol Version *Version } @@ -57,6 +58,7 @@ type DeviceInfoFile struct { FingerPrint string `json:"finger_print"` BootId string `json:"boot_id"` ProcVersion string `json:"proc_version"` + Protocol int `json:"protocol"` // 0: Pad 1: Phone 2: Watch IMEI string `json:"imei"` } @@ -88,6 +90,7 @@ var SystemDeviceInfo = &DeviceInfo{ IMEI: "468356291846738", AndroidId: []byte("MIRAI.123456.001"), APN: []byte("wifi"), + Protocol: AndroidPad, Version: &Version{ Incremental: []byte("5891938"), Release: []byte("10"), @@ -135,6 +138,17 @@ func (info *DeviceInfo) ToJson() []byte { BootId: string(info.BootId), ProcVersion: string(info.ProcVersion), IMEI: info.IMEI, + Protocol: func() int { + switch info.Protocol { + case AndroidPad: + return 0 + case AndroidPhone: + return 1 + case AndroidWatch: + return 2 + } + return 0 + }(), } d, _ := json.Marshal(f) return d @@ -157,6 +171,14 @@ func (info *DeviceInfo) ReadJson(d []byte) error { info.ProcVersion = []byte(f.ProcVersion) info.IMEI = f.IMEI info.AndroidId = SystemDeviceInfo.Display + switch f.Protocol { + case 1: + info.Protocol = AndroidPhone + case 2: + info.Protocol = AndroidWatch + default: + info.Protocol = AndroidPad + } SystemDeviceInfo.GenNewGuid() SystemDeviceInfo.GenNewTgtgtKey() return nil @@ -274,15 +296,19 @@ func (c *QQClient) parseGroupMessage(m *msg.Message) *message.GroupMessage { } var g *message.GroupMessage g = &message.GroupMessage{ - Id: m.Head.MsgSeq, - GroupCode: group.Code, - GroupName: string(m.Head.GroupInfo.GroupName), - Sender: sender, - Time: m.Head.MsgTime, - Elements: message.ParseMessageElems(m.Body.RichText.Elems), - } + Id: m.Head.MsgSeq, + GroupCode: group.Code, + GroupName: string(m.Head.GroupInfo.GroupName), + Sender: sender, + Time: m.Head.MsgTime, + Elements: message.ParseMessageElems(m.Body.RichText.Elems), + } // pre parse for _, elem := range m.Body.RichText.Elems { + // 为什么小程序会同时通过RichText和long text发送 + if elem.LightApp != nil { + break + } // is rich long msg if elem.GeneralFlags != nil && elem.GeneralFlags.LongTextResid != "" { if f := c.GetForwardMessage(elem.GeneralFlags.LongTextResid); f != nil && len(f.Nodes) == 1 { diff --git a/client/notify.go b/client/notify.go new file mode 100644 index 00000000..1b50118e --- /dev/null +++ b/client/notify.go @@ -0,0 +1,43 @@ +package client + +import "fmt" + +type ( + // GroupPokeNotifyEvent 群内戳一戳提示事件 + GroupPokeNotifyEvent struct { + GroupCode int64 + Sender int64 + Receiver int64 + } + + // GroupRedBagLuckyKingNotifyEvent 群内抢红包运气王提示事件 + GroupRedBagLuckyKingNotifyEvent struct { + GroupCode int64 + Sender int64 + LuckyKing int64 + } +) + +func (e *GroupPokeNotifyEvent) From() int64 { + return e.GroupCode +} + +func (e *GroupPokeNotifyEvent) Name() string { + return "戳一戳" +} + +func (e *GroupPokeNotifyEvent) Content() string { + return fmt.Sprintf("%d戳了戳%d", e.Sender, e.Receiver) +} + +func (e *GroupRedBagLuckyKingNotifyEvent) From() int64 { + return e.GroupCode +} + +func (e *GroupRedBagLuckyKingNotifyEvent) Name() string { + return "运气王" +} + +func (e *GroupRedBagLuckyKingNotifyEvent) Content() string { + return fmt.Sprintf("%d发的红包被领完, %d是运气王", e.Sender, e.LuckyKing) +} diff --git a/client/pb/data.pb.go b/client/pb/data.pb.go index 83c7f6b1..1a70390c 100644 --- a/client/pb/data.pb.go +++ b/client/pb/data.pb.go @@ -2098,243 +2098,6 @@ func (x *MessageItem) GetSig() []byte { return nil } -type NotifyMsgBody struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - OptMsgRecall *MessageRecallReminder `protobuf:"bytes,11,opt,name=optMsgRecall,proto3" json:"optMsgRecall,omitempty"` - ServiceType int32 `protobuf:"varint,13,opt,name=serviceType,proto3" json:"serviceType,omitempty"` -} - -func (x *NotifyMsgBody) Reset() { - *x = NotifyMsgBody{} - if protoimpl.UnsafeEnabled { - mi := &file_data_proto_msgTypes[19] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *NotifyMsgBody) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*NotifyMsgBody) ProtoMessage() {} - -func (x *NotifyMsgBody) ProtoReflect() protoreflect.Message { - mi := &file_data_proto_msgTypes[19] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use NotifyMsgBody.ProtoReflect.Descriptor instead. -func (*NotifyMsgBody) Descriptor() ([]byte, []int) { - return file_data_proto_rawDescGZIP(), []int{19} -} - -func (x *NotifyMsgBody) GetOptMsgRecall() *MessageRecallReminder { - if x != nil { - return x.OptMsgRecall - } - return nil -} - -func (x *NotifyMsgBody) GetServiceType() int32 { - if x != nil { - return x.ServiceType - } - return 0 -} - -type MessageRecallReminder struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Uin int64 `protobuf:"varint,1,opt,name=uin,proto3" json:"uin,omitempty"` - Nickname []byte `protobuf:"bytes,2,opt,name=nickname,proto3" json:"nickname,omitempty"` - RecalledMsgList []*RecalledMessageMeta `protobuf:"bytes,3,rep,name=recalledMsgList,proto3" json:"recalledMsgList,omitempty"` - ReminderContent []byte `protobuf:"bytes,4,opt,name=reminderContent,proto3" json:"reminderContent,omitempty"` - Userdef []byte `protobuf:"bytes,5,opt,name=userdef,proto3" json:"userdef,omitempty"` - GroupType int32 `protobuf:"varint,6,opt,name=groupType,proto3" json:"groupType,omitempty"` - OpType int32 `protobuf:"varint,7,opt,name=opType,proto3" json:"opType,omitempty"` -} - -func (x *MessageRecallReminder) Reset() { - *x = MessageRecallReminder{} - if protoimpl.UnsafeEnabled { - mi := &file_data_proto_msgTypes[20] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *MessageRecallReminder) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*MessageRecallReminder) ProtoMessage() {} - -func (x *MessageRecallReminder) ProtoReflect() protoreflect.Message { - mi := &file_data_proto_msgTypes[20] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use MessageRecallReminder.ProtoReflect.Descriptor instead. -func (*MessageRecallReminder) Descriptor() ([]byte, []int) { - return file_data_proto_rawDescGZIP(), []int{20} -} - -func (x *MessageRecallReminder) GetUin() int64 { - if x != nil { - return x.Uin - } - return 0 -} - -func (x *MessageRecallReminder) GetNickname() []byte { - if x != nil { - return x.Nickname - } - return nil -} - -func (x *MessageRecallReminder) GetRecalledMsgList() []*RecalledMessageMeta { - if x != nil { - return x.RecalledMsgList - } - return nil -} - -func (x *MessageRecallReminder) GetReminderContent() []byte { - if x != nil { - return x.ReminderContent - } - return nil -} - -func (x *MessageRecallReminder) GetUserdef() []byte { - if x != nil { - return x.Userdef - } - return nil -} - -func (x *MessageRecallReminder) GetGroupType() int32 { - if x != nil { - return x.GroupType - } - return 0 -} - -func (x *MessageRecallReminder) GetOpType() int32 { - if x != nil { - return x.OpType - } - return 0 -} - -type RecalledMessageMeta struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Seq int32 `protobuf:"varint,1,opt,name=seq,proto3" json:"seq,omitempty"` - Time int32 `protobuf:"varint,2,opt,name=time,proto3" json:"time,omitempty"` - MsgRandom int32 `protobuf:"varint,3,opt,name=msgRandom,proto3" json:"msgRandom,omitempty"` - MsgType int32 `protobuf:"varint,4,opt,name=msgType,proto3" json:"msgType,omitempty"` - MsgFlag int32 `protobuf:"varint,5,opt,name=msgFlag,proto3" json:"msgFlag,omitempty"` - AuthorUin int64 `protobuf:"varint,6,opt,name=authorUin,proto3" json:"authorUin,omitempty"` -} - -func (x *RecalledMessageMeta) Reset() { - *x = RecalledMessageMeta{} - if protoimpl.UnsafeEnabled { - mi := &file_data_proto_msgTypes[21] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *RecalledMessageMeta) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*RecalledMessageMeta) ProtoMessage() {} - -func (x *RecalledMessageMeta) ProtoReflect() protoreflect.Message { - mi := &file_data_proto_msgTypes[21] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use RecalledMessageMeta.ProtoReflect.Descriptor instead. -func (*RecalledMessageMeta) Descriptor() ([]byte, []int) { - return file_data_proto_rawDescGZIP(), []int{21} -} - -func (x *RecalledMessageMeta) GetSeq() int32 { - if x != nil { - return x.Seq - } - return 0 -} - -func (x *RecalledMessageMeta) GetTime() int32 { - if x != nil { - return x.Time - } - return 0 -} - -func (x *RecalledMessageMeta) GetMsgRandom() int32 { - if x != nil { - return x.MsgRandom - } - return 0 -} - -func (x *RecalledMessageMeta) GetMsgType() int32 { - if x != nil { - return x.MsgType - } - return 0 -} - -func (x *RecalledMessageMeta) GetMsgFlag() int32 { - if x != nil { - return x.MsgFlag - } - return 0 -} - -func (x *RecalledMessageMeta) GetAuthorUin() int64 { - if x != nil { - return x.AuthorUin - } - return 0 -} - type SubD4 struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -2346,7 +2109,7 @@ type SubD4 struct { func (x *SubD4) Reset() { *x = SubD4{} if protoimpl.UnsafeEnabled { - mi := &file_data_proto_msgTypes[22] + mi := &file_data_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2359,7 +2122,7 @@ func (x *SubD4) String() string { func (*SubD4) ProtoMessage() {} func (x *SubD4) ProtoReflect() protoreflect.Message { - mi := &file_data_proto_msgTypes[22] + mi := &file_data_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2372,7 +2135,7 @@ func (x *SubD4) ProtoReflect() protoreflect.Message { // Deprecated: Use SubD4.ProtoReflect.Descriptor instead. func (*SubD4) Descriptor() ([]byte, []int) { - return file_data_proto_rawDescGZIP(), []int{22} + return file_data_proto_rawDescGZIP(), []int{19} } func (x *SubD4) GetUin() int64 { @@ -2397,7 +2160,7 @@ type Sub8A struct { func (x *Sub8A) Reset() { *x = Sub8A{} if protoimpl.UnsafeEnabled { - mi := &file_data_proto_msgTypes[23] + mi := &file_data_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2410,7 +2173,7 @@ func (x *Sub8A) String() string { func (*Sub8A) ProtoMessage() {} func (x *Sub8A) ProtoReflect() protoreflect.Message { - mi := &file_data_proto_msgTypes[23] + mi := &file_data_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2423,7 +2186,7 @@ func (x *Sub8A) ProtoReflect() protoreflect.Message { // Deprecated: Use Sub8A.ProtoReflect.Descriptor instead. func (*Sub8A) Descriptor() ([]byte, []int) { - return file_data_proto_rawDescGZIP(), []int{23} + return file_data_proto_rawDescGZIP(), []int{20} } func (x *Sub8A) GetMsgInfo() []*Sub8AMsgInfo { @@ -2480,7 +2243,7 @@ type Sub8AMsgInfo struct { func (x *Sub8AMsgInfo) Reset() { *x = Sub8AMsgInfo{} if protoimpl.UnsafeEnabled { - mi := &file_data_proto_msgTypes[24] + mi := &file_data_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2493,7 +2256,7 @@ func (x *Sub8AMsgInfo) String() string { func (*Sub8AMsgInfo) ProtoMessage() {} func (x *Sub8AMsgInfo) ProtoReflect() protoreflect.Message { - mi := &file_data_proto_msgTypes[24] + mi := &file_data_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2506,7 +2269,7 @@ func (x *Sub8AMsgInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use Sub8AMsgInfo.ProtoReflect.Descriptor instead. func (*Sub8AMsgInfo) Descriptor() ([]byte, []int) { - return file_data_proto_rawDescGZIP(), []int{24} + return file_data_proto_rawDescGZIP(), []int{21} } func (x *Sub8AMsgInfo) GetFromUin() int64 { @@ -2584,7 +2347,7 @@ type SubB3 struct { func (x *SubB3) Reset() { *x = SubB3{} if protoimpl.UnsafeEnabled { - mi := &file_data_proto_msgTypes[25] + mi := &file_data_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2597,7 +2360,7 @@ func (x *SubB3) String() string { func (*SubB3) ProtoMessage() {} func (x *SubB3) ProtoReflect() protoreflect.Message { - mi := &file_data_proto_msgTypes[25] + mi := &file_data_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2610,7 +2373,7 @@ func (x *SubB3) ProtoReflect() protoreflect.Message { // Deprecated: Use SubB3.ProtoReflect.Descriptor instead. func (*SubB3) Descriptor() ([]byte, []int) { - return file_data_proto_rawDescGZIP(), []int{25} + return file_data_proto_rawDescGZIP(), []int{22} } func (x *SubB3) GetType() int32 { @@ -2639,7 +2402,7 @@ type SubB3AddFrdNotify struct { func (x *SubB3AddFrdNotify) Reset() { *x = SubB3AddFrdNotify{} if protoimpl.UnsafeEnabled { - mi := &file_data_proto_msgTypes[26] + mi := &file_data_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2652,7 +2415,7 @@ func (x *SubB3AddFrdNotify) String() string { func (*SubB3AddFrdNotify) ProtoMessage() {} func (x *SubB3AddFrdNotify) ProtoReflect() protoreflect.Message { - mi := &file_data_proto_msgTypes[26] + mi := &file_data_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2665,7 +2428,7 @@ func (x *SubB3AddFrdNotify) ProtoReflect() protoreflect.Message { // Deprecated: Use SubB3AddFrdNotify.ProtoReflect.Descriptor instead. func (*SubB3AddFrdNotify) Descriptor() ([]byte, []int) { - return file_data_proto_rawDescGZIP(), []int{26} + return file_data_proto_rawDescGZIP(), []int{23} } func (x *SubB3AddFrdNotify) GetUin() int64 { @@ -2694,7 +2457,7 @@ type Sub44 struct { func (x *Sub44) Reset() { *x = Sub44{} if protoimpl.UnsafeEnabled { - mi := &file_data_proto_msgTypes[27] + mi := &file_data_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2707,7 +2470,7 @@ func (x *Sub44) String() string { func (*Sub44) ProtoMessage() {} func (x *Sub44) ProtoReflect() protoreflect.Message { - mi := &file_data_proto_msgTypes[27] + mi := &file_data_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2720,7 +2483,7 @@ func (x *Sub44) ProtoReflect() protoreflect.Message { // Deprecated: Use Sub44.ProtoReflect.Descriptor instead. func (*Sub44) Descriptor() ([]byte, []int) { - return file_data_proto_rawDescGZIP(), []int{27} + return file_data_proto_rawDescGZIP(), []int{24} } func (x *Sub44) GetFriendSyncMsg() *Sub44FriendSyncMsg { @@ -2755,7 +2518,7 @@ type Sub44FriendSyncMsg struct { func (x *Sub44FriendSyncMsg) Reset() { *x = Sub44FriendSyncMsg{} if protoimpl.UnsafeEnabled { - mi := &file_data_proto_msgTypes[28] + mi := &file_data_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2768,7 +2531,7 @@ func (x *Sub44FriendSyncMsg) String() string { func (*Sub44FriendSyncMsg) ProtoMessage() {} func (x *Sub44FriendSyncMsg) ProtoReflect() protoreflect.Message { - mi := &file_data_proto_msgTypes[28] + mi := &file_data_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2781,7 +2544,7 @@ func (x *Sub44FriendSyncMsg) ProtoReflect() protoreflect.Message { // Deprecated: Use Sub44FriendSyncMsg.ProtoReflect.Descriptor instead. func (*Sub44FriendSyncMsg) Descriptor() ([]byte, []int) { - return file_data_proto_rawDescGZIP(), []int{28} + return file_data_proto_rawDescGZIP(), []int{25} } func (x *Sub44FriendSyncMsg) GetUin() int64 { @@ -2869,7 +2632,7 @@ type Sub44GroupSyncMsg struct { func (x *Sub44GroupSyncMsg) Reset() { *x = Sub44GroupSyncMsg{} if protoimpl.UnsafeEnabled { - mi := &file_data_proto_msgTypes[29] + mi := &file_data_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2882,7 +2645,7 @@ func (x *Sub44GroupSyncMsg) String() string { func (*Sub44GroupSyncMsg) ProtoMessage() {} func (x *Sub44GroupSyncMsg) ProtoReflect() protoreflect.Message { - mi := &file_data_proto_msgTypes[29] + mi := &file_data_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2895,7 +2658,7 @@ func (x *Sub44GroupSyncMsg) ProtoReflect() protoreflect.Message { // Deprecated: Use Sub44GroupSyncMsg.ProtoReflect.Descriptor instead. func (*Sub44GroupSyncMsg) Descriptor() ([]byte, []int) { - return file_data_proto_rawDescGZIP(), []int{29} + return file_data_proto_rawDescGZIP(), []int{26} } func (x *Sub44GroupSyncMsg) GetMsgType() int32 { @@ -3371,139 +3134,105 @@ var file_data_proto_rawDesc = []byte{ 0x6d, 0x73, 0x67, 0x53, 0x65, 0x71, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6d, 0x73, 0x67, 0x53, 0x65, 0x71, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x73, 0x67, 0x55, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x6d, 0x73, 0x67, 0x55, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, - 0x73, 0x69, 0x67, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x73, 0x69, 0x67, 0x22, 0x6d, - 0x0a, 0x0d, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x4d, 0x73, 0x67, 0x42, 0x6f, 0x64, 0x79, 0x12, - 0x3a, 0x0a, 0x0c, 0x6f, 0x70, 0x74, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x63, 0x61, 0x6c, 0x6c, 0x18, - 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, - 0x65, 0x63, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x6d, 0x69, 0x6e, 0x64, 0x65, 0x72, 0x52, 0x0c, 0x6f, - 0x70, 0x74, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x63, 0x61, 0x6c, 0x6c, 0x12, 0x20, 0x0a, 0x0b, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x22, 0xff, 0x01, - 0x0a, 0x15, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x63, 0x61, 0x6c, 0x6c, 0x52, - 0x65, 0x6d, 0x69, 0x6e, 0x64, 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x6e, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x75, 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x6e, 0x69, 0x63, - 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x6e, 0x69, 0x63, - 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3e, 0x0a, 0x0f, 0x72, 0x65, 0x63, 0x61, 0x6c, 0x6c, 0x65, - 0x64, 0x4d, 0x73, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, - 0x2e, 0x52, 0x65, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x4d, 0x65, 0x74, 0x61, 0x52, 0x0f, 0x72, 0x65, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x4d, 0x73, - 0x67, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x72, 0x65, 0x6d, 0x69, 0x6e, 0x64, 0x65, - 0x72, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, - 0x72, 0x65, 0x6d, 0x69, 0x6e, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, - 0x18, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x64, 0x65, 0x66, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, - 0x52, 0x07, 0x75, 0x73, 0x65, 0x72, 0x64, 0x65, 0x66, 0x12, 0x1c, 0x0a, 0x09, 0x67, 0x72, 0x6f, - 0x75, 0x70, 0x54, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x67, 0x72, - 0x6f, 0x75, 0x70, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x70, 0x54, 0x79, 0x70, - 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6f, 0x70, 0x54, 0x79, 0x70, 0x65, 0x22, - 0xab, 0x01, 0x0a, 0x13, 0x52, 0x65, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x65, 0x71, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x73, 0x65, 0x71, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x69, 0x6d, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x1c, 0x0a, - 0x09, 0x6d, 0x73, 0x67, 0x52, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x09, 0x6d, 0x73, 0x67, 0x52, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x6d, - 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x6d, 0x73, - 0x67, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x73, 0x67, 0x46, 0x6c, 0x61, 0x67, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x6d, 0x73, 0x67, 0x46, 0x6c, 0x61, 0x67, 0x12, - 0x1c, 0x0a, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x55, 0x69, 0x6e, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x55, 0x69, 0x6e, 0x22, 0x19, 0x0a, - 0x05, 0x53, 0x75, 0x62, 0x44, 0x34, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x6e, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x03, 0x75, 0x69, 0x6e, 0x22, 0xa5, 0x01, 0x0a, 0x05, 0x53, 0x75, 0x62, - 0x38, 0x41, 0x12, 0x28, 0x0a, 0x08, 0x6d, 0x73, 0x67, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x53, 0x75, 0x62, 0x38, 0x41, 0x4d, 0x73, 0x67, 0x49, - 0x6e, 0x66, 0x6f, 0x52, 0x07, 0x6d, 0x73, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x14, 0x0a, 0x05, - 0x61, 0x70, 0x70, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x61, 0x70, 0x70, - 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x6e, 0x73, 0x74, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x06, 0x69, 0x6e, 0x73, 0x74, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x0f, 0x6c, 0x6f, - 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x0f, 0x6c, 0x6f, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x46, 0x6c, 0x61, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, - 0x22, 0xf2, 0x01, 0x0a, 0x0c, 0x53, 0x75, 0x62, 0x38, 0x41, 0x4d, 0x73, 0x67, 0x49, 0x6e, 0x66, - 0x6f, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x72, 0x6f, 0x6d, 0x55, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x07, 0x66, 0x72, 0x6f, 0x6d, 0x55, 0x69, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x74, - 0x6f, 0x55, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x74, 0x6f, 0x55, 0x69, - 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x73, 0x67, 0x53, 0x65, 0x71, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x06, 0x6d, 0x73, 0x67, 0x53, 0x65, 0x71, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x73, 0x67, - 0x55, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x6d, 0x73, 0x67, 0x55, 0x69, - 0x64, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x73, 0x67, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x07, 0x6d, 0x73, 0x67, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6d, - 0x73, 0x67, 0x52, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, - 0x6d, 0x73, 0x67, 0x52, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x6b, 0x67, - 0x4e, 0x75, 0x6d, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x70, 0x6b, 0x67, 0x4e, 0x75, - 0x6d, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6b, 0x67, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x6b, 0x67, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x16, 0x0a, - 0x06, 0x64, 0x65, 0x76, 0x53, 0x65, 0x71, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x64, - 0x65, 0x76, 0x53, 0x65, 0x71, 0x22, 0x59, 0x0a, 0x05, 0x53, 0x75, 0x62, 0x42, 0x33, 0x12, 0x12, - 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x74, 0x79, - 0x70, 0x65, 0x12, 0x3c, 0x0a, 0x0f, 0x6d, 0x73, 0x67, 0x41, 0x64, 0x64, 0x46, 0x72, 0x64, 0x4e, - 0x6f, 0x74, 0x69, 0x66, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x53, 0x75, - 0x62, 0x42, 0x33, 0x41, 0x64, 0x64, 0x46, 0x72, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x52, - 0x0f, 0x6d, 0x73, 0x67, 0x41, 0x64, 0x64, 0x46, 0x72, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, - 0x22, 0x39, 0x0a, 0x11, 0x53, 0x75, 0x62, 0x42, 0x33, 0x41, 0x64, 0x64, 0x46, 0x72, 0x64, 0x4e, - 0x6f, 0x74, 0x69, 0x66, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x03, 0x75, 0x69, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x69, 0x63, 0x6b, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x69, 0x63, 0x6b, 0x22, 0x7a, 0x0a, 0x05, 0x53, - 0x75, 0x62, 0x34, 0x34, 0x12, 0x39, 0x0a, 0x0d, 0x66, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x53, 0x79, - 0x6e, 0x63, 0x4d, 0x73, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x53, 0x75, - 0x62, 0x34, 0x34, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x53, 0x79, 0x6e, 0x63, 0x4d, 0x73, 0x67, - 0x52, 0x0d, 0x66, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x53, 0x79, 0x6e, 0x63, 0x4d, 0x73, 0x67, 0x12, - 0x36, 0x0a, 0x0c, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x79, 0x6e, 0x63, 0x4d, 0x73, 0x67, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x53, 0x75, 0x62, 0x34, 0x34, 0x47, 0x72, 0x6f, - 0x75, 0x70, 0x53, 0x79, 0x6e, 0x63, 0x4d, 0x73, 0x67, 0x52, 0x0c, 0x67, 0x72, 0x6f, 0x75, 0x70, - 0x53, 0x79, 0x6e, 0x63, 0x4d, 0x73, 0x67, 0x22, 0xf0, 0x01, 0x0a, 0x12, 0x53, 0x75, 0x62, 0x34, - 0x34, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x53, 0x79, 0x6e, 0x63, 0x4d, 0x73, 0x67, 0x12, 0x10, - 0x0a, 0x03, 0x75, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x75, 0x69, 0x6e, - 0x12, 0x12, 0x0a, 0x04, 0x66, 0x55, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, - 0x66, 0x55, 0x69, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x54, - 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x63, 0x65, - 0x73, 0x73, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x72, - 0x6f, 0x63, 0x65, 0x73, 0x73, 0x46, 0x6c, 0x61, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x0b, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x1a, 0x0a, 0x08, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x53, 0x75, 0x62, 0x49, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x75, 0x62, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x74, - 0x72, 0x57, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, - 0x73, 0x74, 0x72, 0x57, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x22, 0xd1, 0x04, 0x0a, 0x11, 0x53, - 0x75, 0x62, 0x34, 0x34, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x79, 0x6e, 0x63, 0x4d, 0x73, 0x67, - 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x07, 0x6d, 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x73, - 0x67, 0x53, 0x65, 0x71, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x6d, 0x73, 0x67, 0x53, - 0x65, 0x71, 0x12, 0x18, 0x0a, 0x07, 0x67, 0x72, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x07, 0x67, 0x72, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, - 0x67, 0x61, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x67, 0x61, - 0x43, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x55, 0x69, 0x6e, 0x31, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x55, 0x69, 0x6e, 0x31, 0x12, 0x18, - 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x55, 0x69, 0x6e, 0x32, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x07, 0x6f, 0x70, 0x74, 0x55, 0x69, 0x6e, 0x32, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x73, 0x67, 0x42, - 0x75, 0x66, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x6d, 0x73, 0x67, 0x42, 0x75, 0x66, - 0x12, 0x18, 0x0a, 0x07, 0x61, 0x75, 0x74, 0x68, 0x4b, 0x65, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x0c, 0x52, 0x07, 0x61, 0x75, 0x74, 0x68, 0x4b, 0x65, 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x6d, 0x73, - 0x67, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x6d, - 0x73, 0x67, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x55, 0x69, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x55, 0x69, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x75, 0x72, 0x4d, 0x61, 0x78, - 0x4d, 0x65, 0x6d, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, - 0x63, 0x75, 0x72, 0x4d, 0x61, 0x78, 0x4d, 0x65, 0x6d, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x28, - 0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x4d, 0x61, 0x78, 0x4d, 0x65, 0x6d, 0x43, 0x6f, 0x75, 0x6e, - 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x4d, 0x61, 0x78, - 0x4d, 0x65, 0x6d, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x75, 0x72, 0x4d, - 0x65, 0x6d, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x63, - 0x75, 0x72, 0x4d, 0x65, 0x6d, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, - 0x71, 0x53, 0x72, 0x63, 0x49, 0x64, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x72, 0x65, - 0x71, 0x53, 0x72, 0x63, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, 0x71, 0x53, 0x72, 0x63, - 0x53, 0x75, 0x62, 0x49, 0x64, 0x18, 0x10, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x72, 0x65, 0x71, - 0x53, 0x72, 0x63, 0x53, 0x75, 0x62, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x69, 0x6e, 0x76, 0x69, - 0x74, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x69, - 0x6e, 0x76, 0x69, 0x74, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x65, 0x78, - 0x74, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x4e, 0x75, 0x6d, 0x18, 0x12, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x0b, 0x65, 0x78, 0x74, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x4e, 0x75, 0x6d, 0x12, 0x20, 0x0a, 0x0b, - 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x46, 0x6c, 0x61, 0x67, 0x18, 0x13, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x46, 0x6c, 0x61, 0x67, 0x42, 0x06, - 0x5a, 0x04, 0x2e, 0x3b, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x73, 0x69, 0x67, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x73, 0x69, 0x67, 0x22, 0x19, + 0x0a, 0x05, 0x53, 0x75, 0x62, 0x44, 0x34, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x6e, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x75, 0x69, 0x6e, 0x22, 0xa5, 0x01, 0x0a, 0x05, 0x53, 0x75, + 0x62, 0x38, 0x41, 0x12, 0x28, 0x0a, 0x08, 0x6d, 0x73, 0x67, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x53, 0x75, 0x62, 0x38, 0x41, 0x4d, 0x73, 0x67, + 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x07, 0x6d, 0x73, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x14, 0x0a, + 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x61, 0x70, + 0x70, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x6e, 0x73, 0x74, 0x49, 0x64, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x06, 0x69, 0x6e, 0x73, 0x74, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x0f, 0x6c, + 0x6f, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x6c, 0x6f, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x64, 0x22, 0xf2, 0x01, 0x0a, 0x0c, 0x53, 0x75, 0x62, 0x38, 0x41, 0x4d, 0x73, 0x67, 0x49, 0x6e, + 0x66, 0x6f, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x72, 0x6f, 0x6d, 0x55, 0x69, 0x6e, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x07, 0x66, 0x72, 0x6f, 0x6d, 0x55, 0x69, 0x6e, 0x12, 0x14, 0x0a, 0x05, + 0x74, 0x6f, 0x55, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x74, 0x6f, 0x55, + 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x73, 0x67, 0x53, 0x65, 0x71, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x06, 0x6d, 0x73, 0x67, 0x53, 0x65, 0x71, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x73, + 0x67, 0x55, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x6d, 0x73, 0x67, 0x55, + 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x73, 0x67, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x07, 0x6d, 0x73, 0x67, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, + 0x6d, 0x73, 0x67, 0x52, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x09, 0x6d, 0x73, 0x67, 0x52, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x6b, + 0x67, 0x4e, 0x75, 0x6d, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x70, 0x6b, 0x67, 0x4e, + 0x75, 0x6d, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6b, 0x67, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x6b, 0x67, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x16, + 0x0a, 0x06, 0x64, 0x65, 0x76, 0x53, 0x65, 0x71, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, + 0x64, 0x65, 0x76, 0x53, 0x65, 0x71, 0x22, 0x59, 0x0a, 0x05, 0x53, 0x75, 0x62, 0x42, 0x33, 0x12, + 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x74, + 0x79, 0x70, 0x65, 0x12, 0x3c, 0x0a, 0x0f, 0x6d, 0x73, 0x67, 0x41, 0x64, 0x64, 0x46, 0x72, 0x64, + 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x53, + 0x75, 0x62, 0x42, 0x33, 0x41, 0x64, 0x64, 0x46, 0x72, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, + 0x52, 0x0f, 0x6d, 0x73, 0x67, 0x41, 0x64, 0x64, 0x46, 0x72, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, + 0x79, 0x22, 0x39, 0x0a, 0x11, 0x53, 0x75, 0x62, 0x42, 0x33, 0x41, 0x64, 0x64, 0x46, 0x72, 0x64, + 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x6e, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x03, 0x75, 0x69, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x69, 0x63, 0x6b, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x69, 0x63, 0x6b, 0x22, 0x7a, 0x0a, 0x05, + 0x53, 0x75, 0x62, 0x34, 0x34, 0x12, 0x39, 0x0a, 0x0d, 0x66, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x53, + 0x79, 0x6e, 0x63, 0x4d, 0x73, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x53, + 0x75, 0x62, 0x34, 0x34, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x53, 0x79, 0x6e, 0x63, 0x4d, 0x73, + 0x67, 0x52, 0x0d, 0x66, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x53, 0x79, 0x6e, 0x63, 0x4d, 0x73, 0x67, + 0x12, 0x36, 0x0a, 0x0c, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x79, 0x6e, 0x63, 0x4d, 0x73, 0x67, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x53, 0x75, 0x62, 0x34, 0x34, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x53, 0x79, 0x6e, 0x63, 0x4d, 0x73, 0x67, 0x52, 0x0c, 0x67, 0x72, 0x6f, 0x75, + 0x70, 0x53, 0x79, 0x6e, 0x63, 0x4d, 0x73, 0x67, 0x22, 0xf0, 0x01, 0x0a, 0x12, 0x53, 0x75, 0x62, + 0x34, 0x34, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x53, 0x79, 0x6e, 0x63, 0x4d, 0x73, 0x67, 0x12, + 0x10, 0x0a, 0x03, 0x75, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x75, 0x69, + 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x55, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x04, 0x66, 0x55, 0x69, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, + 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x63, + 0x65, 0x73, 0x73, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x70, + 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x46, 0x6c, 0x61, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x1a, 0x0a, + 0x08, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x08, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x53, 0x75, 0x62, 0x49, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x75, 0x62, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x73, + 0x74, 0x72, 0x57, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x0a, 0x73, 0x74, 0x72, 0x57, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x22, 0xd1, 0x04, 0x0a, 0x11, + 0x53, 0x75, 0x62, 0x34, 0x34, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x79, 0x6e, 0x63, 0x4d, 0x73, + 0x67, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x07, 0x6d, 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6d, + 0x73, 0x67, 0x53, 0x65, 0x71, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x6d, 0x73, 0x67, + 0x53, 0x65, 0x71, 0x12, 0x18, 0x0a, 0x07, 0x67, 0x72, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x67, 0x72, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, + 0x06, 0x67, 0x61, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x67, + 0x61, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x55, 0x69, 0x6e, 0x31, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x55, 0x69, 0x6e, 0x31, 0x12, + 0x18, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x55, 0x69, 0x6e, 0x32, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x07, 0x6f, 0x70, 0x74, 0x55, 0x69, 0x6e, 0x32, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x73, 0x67, + 0x42, 0x75, 0x66, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x6d, 0x73, 0x67, 0x42, 0x75, + 0x66, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x75, 0x74, 0x68, 0x4b, 0x65, 0x79, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x07, 0x61, 0x75, 0x74, 0x68, 0x4b, 0x65, 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x6d, + 0x73, 0x67, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, + 0x6d, 0x73, 0x67, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x55, 0x69, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x69, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x75, 0x72, 0x4d, 0x61, + 0x78, 0x4d, 0x65, 0x6d, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x0e, 0x63, 0x75, 0x72, 0x4d, 0x61, 0x78, 0x4d, 0x65, 0x6d, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, + 0x28, 0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x4d, 0x61, 0x78, 0x4d, 0x65, 0x6d, 0x43, 0x6f, 0x75, + 0x6e, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x4d, 0x61, + 0x78, 0x4d, 0x65, 0x6d, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x75, 0x72, + 0x4d, 0x65, 0x6d, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, + 0x63, 0x75, 0x72, 0x4d, 0x65, 0x6d, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x72, + 0x65, 0x71, 0x53, 0x72, 0x63, 0x49, 0x64, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x72, + 0x65, 0x71, 0x53, 0x72, 0x63, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, 0x71, 0x53, 0x72, + 0x63, 0x53, 0x75, 0x62, 0x49, 0x64, 0x18, 0x10, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x72, 0x65, + 0x71, 0x53, 0x72, 0x63, 0x53, 0x75, 0x62, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x69, 0x6e, 0x76, + 0x69, 0x74, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, + 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x65, + 0x78, 0x74, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x4e, 0x75, 0x6d, 0x18, 0x12, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x0b, 0x65, 0x78, 0x74, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x4e, 0x75, 0x6d, 0x12, 0x20, 0x0a, + 0x0b, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x46, 0x6c, 0x61, 0x67, 0x18, 0x13, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x46, 0x6c, 0x61, 0x67, 0x42, + 0x06, 0x5a, 0x04, 0x2e, 0x3b, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -3518,38 +3247,35 @@ func file_data_proto_rawDescGZIP() []byte { return file_data_proto_rawDescData } -var file_data_proto_msgTypes = make([]protoimpl.MessageInfo, 30) +var file_data_proto_msgTypes = make([]protoimpl.MessageInfo, 27) var file_data_proto_goTypes = []interface{}{ - (*DeviceInfo)(nil), // 0: DeviceInfo - (*RequestBody)(nil), // 1: RequestBody - (*ConfigSeq)(nil), // 2: ConfigSeq - (*D50ReqBody)(nil), // 3: D50ReqBody - (*D388ReqBody)(nil), // 4: D388ReqBody - (*D388RespBody)(nil), // 5: D388RespBody - (*GetPttUrlReq)(nil), // 6: GetPttUrlReq - (*GetPttUrlRsp)(nil), // 7: GetPttUrlRsp - (*ReqDataHighwayHead)(nil), // 8: ReqDataHighwayHead - (*RspDataHighwayHead)(nil), // 9: RspDataHighwayHead - (*DataHighwayHead)(nil), // 10: DataHighwayHead - (*SegHead)(nil), // 11: SegHead - (*TryUpImgReq)(nil), // 12: TryUpImgReq - (*TryUpImgResp)(nil), // 13: TryUpImgResp - (*TryUpPttReq)(nil), // 14: TryUpPttReq - (*TryUpPttResp)(nil), // 15: TryUpPttResp - (*ImgInfo)(nil), // 16: ImgInfo - (*DeleteMessageRequest)(nil), // 17: DeleteMessageRequest - (*MessageItem)(nil), // 18: MessageItem - (*NotifyMsgBody)(nil), // 19: NotifyMsgBody - (*MessageRecallReminder)(nil), // 20: MessageRecallReminder - (*RecalledMessageMeta)(nil), // 21: RecalledMessageMeta - (*SubD4)(nil), // 22: SubD4 - (*Sub8A)(nil), // 23: Sub8A - (*Sub8AMsgInfo)(nil), // 24: Sub8AMsgInfo - (*SubB3)(nil), // 25: SubB3 - (*SubB3AddFrdNotify)(nil), // 26: SubB3AddFrdNotify - (*Sub44)(nil), // 27: Sub44 - (*Sub44FriendSyncMsg)(nil), // 28: Sub44FriendSyncMsg - (*Sub44GroupSyncMsg)(nil), // 29: Sub44GroupSyncMsg + (*DeviceInfo)(nil), // 0: DeviceInfo + (*RequestBody)(nil), // 1: RequestBody + (*ConfigSeq)(nil), // 2: ConfigSeq + (*D50ReqBody)(nil), // 3: D50ReqBody + (*D388ReqBody)(nil), // 4: D388ReqBody + (*D388RespBody)(nil), // 5: D388RespBody + (*GetPttUrlReq)(nil), // 6: GetPttUrlReq + (*GetPttUrlRsp)(nil), // 7: GetPttUrlRsp + (*ReqDataHighwayHead)(nil), // 8: ReqDataHighwayHead + (*RspDataHighwayHead)(nil), // 9: RspDataHighwayHead + (*DataHighwayHead)(nil), // 10: DataHighwayHead + (*SegHead)(nil), // 11: SegHead + (*TryUpImgReq)(nil), // 12: TryUpImgReq + (*TryUpImgResp)(nil), // 13: TryUpImgResp + (*TryUpPttReq)(nil), // 14: TryUpPttReq + (*TryUpPttResp)(nil), // 15: TryUpPttResp + (*ImgInfo)(nil), // 16: ImgInfo + (*DeleteMessageRequest)(nil), // 17: DeleteMessageRequest + (*MessageItem)(nil), // 18: MessageItem + (*SubD4)(nil), // 19: SubD4 + (*Sub8A)(nil), // 20: Sub8A + (*Sub8AMsgInfo)(nil), // 21: Sub8AMsgInfo + (*SubB3)(nil), // 22: SubB3 + (*SubB3AddFrdNotify)(nil), // 23: SubB3AddFrdNotify + (*Sub44)(nil), // 24: Sub44 + (*Sub44FriendSyncMsg)(nil), // 25: Sub44FriendSyncMsg + (*Sub44GroupSyncMsg)(nil), // 26: Sub44GroupSyncMsg } var file_data_proto_depIdxs = []int32{ 2, // 0: RequestBody.rpt_config_list:type_name -> ConfigSeq @@ -3565,17 +3291,15 @@ var file_data_proto_depIdxs = []int32{ 11, // 10: RspDataHighwayHead.msgSeghead:type_name -> SegHead 16, // 11: TryUpImgResp.msgImgInfo:type_name -> ImgInfo 18, // 12: DeleteMessageRequest.items:type_name -> MessageItem - 20, // 13: NotifyMsgBody.optMsgRecall:type_name -> MessageRecallReminder - 21, // 14: MessageRecallReminder.recalledMsgList:type_name -> RecalledMessageMeta - 24, // 15: Sub8A.msg_info:type_name -> Sub8AMsgInfo - 26, // 16: SubB3.msgAddFrdNotify:type_name -> SubB3AddFrdNotify - 28, // 17: Sub44.friendSyncMsg:type_name -> Sub44FriendSyncMsg - 29, // 18: Sub44.groupSyncMsg:type_name -> Sub44GroupSyncMsg - 19, // [19:19] is the sub-list for method output_type - 19, // [19:19] is the sub-list for method input_type - 19, // [19:19] is the sub-list for extension type_name - 19, // [19:19] is the sub-list for extension extendee - 0, // [0:19] is the sub-list for field type_name + 21, // 13: Sub8A.msg_info:type_name -> Sub8AMsgInfo + 23, // 14: SubB3.msgAddFrdNotify:type_name -> SubB3AddFrdNotify + 25, // 15: Sub44.friendSyncMsg:type_name -> Sub44FriendSyncMsg + 26, // 16: Sub44.groupSyncMsg:type_name -> Sub44GroupSyncMsg + 17, // [17:17] is the sub-list for method output_type + 17, // [17:17] is the sub-list for method input_type + 17, // [17:17] is the sub-list for extension type_name + 17, // [17:17] is the sub-list for extension extendee + 0, // [0:17] is the sub-list for field type_name } func init() { file_data_proto_init() } @@ -3813,42 +3537,6 @@ func file_data_proto_init() { } } file_data_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NotifyMsgBody); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_data_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MessageRecallReminder); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_data_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RecalledMessageMeta); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_data_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SubD4); i { case 0: return &v.state @@ -3860,7 +3548,7 @@ func file_data_proto_init() { return nil } } - file_data_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + file_data_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Sub8A); i { case 0: return &v.state @@ -3872,7 +3560,7 @@ func file_data_proto_init() { return nil } } - file_data_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + file_data_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Sub8AMsgInfo); i { case 0: return &v.state @@ -3884,7 +3572,7 @@ func file_data_proto_init() { return nil } } - file_data_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + file_data_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SubB3); i { case 0: return &v.state @@ -3896,7 +3584,7 @@ func file_data_proto_init() { return nil } } - file_data_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + file_data_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SubB3AddFrdNotify); i { case 0: return &v.state @@ -3908,7 +3596,7 @@ func file_data_proto_init() { return nil } } - file_data_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { + file_data_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Sub44); i { case 0: return &v.state @@ -3920,7 +3608,7 @@ func file_data_proto_init() { return nil } } - file_data_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { + file_data_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Sub44FriendSyncMsg); i { case 0: return &v.state @@ -3932,7 +3620,7 @@ func file_data_proto_init() { return nil } } - file_data_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { + file_data_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Sub44GroupSyncMsg); i { case 0: return &v.state @@ -3951,7 +3639,7 @@ func file_data_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_data_proto_rawDesc, NumEnums: 0, - NumMessages: 30, + NumMessages: 27, NumExtensions: 0, NumServices: 0, }, diff --git a/client/pb/data.proto b/client/pb/data.proto index 37c77d81..ac62c085 100644 --- a/client/pb/data.proto +++ b/client/pb/data.proto @@ -235,31 +235,6 @@ message MessageItem { bytes sig = 7; } -message NotifyMsgBody { - MessageRecallReminder optMsgRecall = 11; - int32 serviceType = 13; -} - -message MessageRecallReminder { - int64 uin = 1; - bytes nickname = 2; - repeated RecalledMessageMeta recalledMsgList = 3; - bytes reminderContent = 4; - bytes userdef = 5; - int32 groupType = 6; - int32 opType = 7; - -} - -message RecalledMessageMeta { - int32 seq = 1; - int32 time = 2; - int32 msgRandom = 3; - int32 msgType = 4; - int32 msgFlag = 5; - int64 authorUin = 6; -} - message SubD4 { int64 uin = 1; } diff --git a/client/pb/msg/msg.pb.go b/client/pb/msg/msg.pb.go index 22f8b718..6e68441d 100644 --- a/client/pb/msg/msg.pb.go +++ b/client/pb/msg/msg.pb.go @@ -1535,7 +1535,7 @@ type Elem struct { AnonGroupMsg *AnonymousGroupMessage `protobuf:"bytes,21,opt,name=anonGroupMsg,proto3" json:"anonGroupMsg,omitempty"` //QQLiveOld? qqLiveOld = 22; //LifeOnlineAccount? lifeOnline = 23; - //QQWalletMsg? qqwalletMsg = 24; + QQWalletMsg *QQWalletMsg `protobuf:"bytes,24,opt,name=QQWalletMsg,proto3" json:"QQWalletMsg,omitempty"` //CrmElem? crmElem = 25; //ConferenceTipsInfo? conferenceTipsInfo = 26; //RedBagInfo? redbagInfo = 27; @@ -1676,6 +1676,13 @@ func (x *Elem) GetAnonGroupMsg() *AnonymousGroupMessage { return nil } +func (x *Elem) GetQQWalletMsg() *QQWalletMsg { + if x != nil { + return x.QQWalletMsg + } + return nil +} + func (x *Elem) GetCustomElem() *CustomElem { if x != nil { return x.CustomElem @@ -1774,6 +1781,467 @@ func (x *CommonElem) GetBusinessType() int32 { return 0 } +type QQWalletMsg struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + AioBody *QQWalletAioBody `protobuf:"bytes,1,opt,name=aioBody,proto3" json:"aioBody,omitempty"` +} + +func (x *QQWalletMsg) Reset() { + *x = QQWalletMsg{} + if protoimpl.UnsafeEnabled { + mi := &file_msg_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QQWalletMsg) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QQWalletMsg) ProtoMessage() {} + +func (x *QQWalletMsg) ProtoReflect() protoreflect.Message { + mi := &file_msg_proto_msgTypes[21] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use QQWalletMsg.ProtoReflect.Descriptor instead. +func (*QQWalletMsg) Descriptor() ([]byte, []int) { + return file_msg_proto_rawDescGZIP(), []int{21} +} + +func (x *QQWalletMsg) GetAioBody() *QQWalletAioBody { + if x != nil { + return x.AioBody + } + return nil +} + +type QQWalletAioBody struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + SendUin uint64 `protobuf:"varint,1,opt,name=sendUin,proto3" json:"sendUin,omitempty"` + Sender *QQWalletAioElem `protobuf:"bytes,2,opt,name=sender,proto3" json:"sender,omitempty"` + Receiver *QQWalletAioElem `protobuf:"bytes,3,opt,name=receiver,proto3" json:"receiver,omitempty"` + ChannelId int32 `protobuf:"zigzag32,4,opt,name=ChannelId,proto3" json:"ChannelId,omitempty"` + TemplateId int32 `protobuf:"zigzag32,5,opt,name=templateId,proto3" json:"templateId,omitempty"` + Resend uint32 `protobuf:"varint,6,opt,name=resend,proto3" json:"resend,omitempty"` + MsgPriority uint32 `protobuf:"varint,7,opt,name=msgPriority,proto3" json:"msgPriority,omitempty"` + RedType int32 `protobuf:"zigzag32,8,opt,name=redType,proto3" json:"redType,omitempty"` + BillNo []byte `protobuf:"bytes,9,opt,name=billNo,proto3" json:"billNo,omitempty"` + AuthKey []byte `protobuf:"bytes,10,opt,name=authKey,proto3" json:"authKey,omitempty"` + SessionType int32 `protobuf:"zigzag32,11,opt,name=sessionType,proto3" json:"sessionType,omitempty"` + MsgType int32 `protobuf:"zigzag32,12,opt,name=msgType,proto3" json:"msgType,omitempty"` + EnvelOpeId int32 `protobuf:"zigzag32,13,opt,name=envelOpeId,proto3" json:"envelOpeId,omitempty"` + Name []byte `protobuf:"bytes,14,opt,name=name,proto3" json:"name,omitempty"` + ConfType int32 `protobuf:"zigzag32,15,opt,name=confType,proto3" json:"confType,omitempty"` + MsgFrom int32 `protobuf:"zigzag32,16,opt,name=msgFrom,proto3" json:"msgFrom,omitempty"` + PcBody []byte `protobuf:"bytes,17,opt,name=pcBody,proto3" json:"pcBody,omitempty"` + Index []byte `protobuf:"bytes,18,opt,name=index,proto3" json:"index,omitempty"` + RedChannel uint32 `protobuf:"varint,19,opt,name=redChannel,proto3" json:"redChannel,omitempty"` + GrapUin []uint64 `protobuf:"varint,20,rep,packed,name=grapUin,proto3" json:"grapUin,omitempty"` + PbReserve []byte `protobuf:"bytes,21,opt,name=pbReserve,proto3" json:"pbReserve,omitempty"` +} + +func (x *QQWalletAioBody) Reset() { + *x = QQWalletAioBody{} + if protoimpl.UnsafeEnabled { + mi := &file_msg_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QQWalletAioBody) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QQWalletAioBody) ProtoMessage() {} + +func (x *QQWalletAioBody) ProtoReflect() protoreflect.Message { + mi := &file_msg_proto_msgTypes[22] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use QQWalletAioBody.ProtoReflect.Descriptor instead. +func (*QQWalletAioBody) Descriptor() ([]byte, []int) { + return file_msg_proto_rawDescGZIP(), []int{22} +} + +func (x *QQWalletAioBody) GetSendUin() uint64 { + if x != nil { + return x.SendUin + } + return 0 +} + +func (x *QQWalletAioBody) GetSender() *QQWalletAioElem { + if x != nil { + return x.Sender + } + return nil +} + +func (x *QQWalletAioBody) GetReceiver() *QQWalletAioElem { + if x != nil { + return x.Receiver + } + return nil +} + +func (x *QQWalletAioBody) GetChannelId() int32 { + if x != nil { + return x.ChannelId + } + return 0 +} + +func (x *QQWalletAioBody) GetTemplateId() int32 { + if x != nil { + return x.TemplateId + } + return 0 +} + +func (x *QQWalletAioBody) GetResend() uint32 { + if x != nil { + return x.Resend + } + return 0 +} + +func (x *QQWalletAioBody) GetMsgPriority() uint32 { + if x != nil { + return x.MsgPriority + } + return 0 +} + +func (x *QQWalletAioBody) GetRedType() int32 { + if x != nil { + return x.RedType + } + return 0 +} + +func (x *QQWalletAioBody) GetBillNo() []byte { + if x != nil { + return x.BillNo + } + return nil +} + +func (x *QQWalletAioBody) GetAuthKey() []byte { + if x != nil { + return x.AuthKey + } + return nil +} + +func (x *QQWalletAioBody) GetSessionType() int32 { + if x != nil { + return x.SessionType + } + return 0 +} + +func (x *QQWalletAioBody) GetMsgType() int32 { + if x != nil { + return x.MsgType + } + return 0 +} + +func (x *QQWalletAioBody) GetEnvelOpeId() int32 { + if x != nil { + return x.EnvelOpeId + } + return 0 +} + +func (x *QQWalletAioBody) GetName() []byte { + if x != nil { + return x.Name + } + return nil +} + +func (x *QQWalletAioBody) GetConfType() int32 { + if x != nil { + return x.ConfType + } + return 0 +} + +func (x *QQWalletAioBody) GetMsgFrom() int32 { + if x != nil { + return x.MsgFrom + } + return 0 +} + +func (x *QQWalletAioBody) GetPcBody() []byte { + if x != nil { + return x.PcBody + } + return nil +} + +func (x *QQWalletAioBody) GetIndex() []byte { + if x != nil { + return x.Index + } + return nil +} + +func (x *QQWalletAioBody) GetRedChannel() uint32 { + if x != nil { + return x.RedChannel + } + return 0 +} + +func (x *QQWalletAioBody) GetGrapUin() []uint64 { + if x != nil { + return x.GrapUin + } + return nil +} + +func (x *QQWalletAioBody) GetPbReserve() []byte { + if x != nil { + return x.PbReserve + } + return nil +} + +type QQWalletAioElem struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Background uint32 `protobuf:"varint,1,opt,name=background,proto3" json:"background,omitempty"` + Icon uint32 `protobuf:"varint,2,opt,name=icon,proto3" json:"icon,omitempty"` + Title string `protobuf:"bytes,3,opt,name=title,proto3" json:"title,omitempty"` + Subtitle string `protobuf:"bytes,4,opt,name=subtitle,proto3" json:"subtitle,omitempty"` + Content string `protobuf:"bytes,5,opt,name=content,proto3" json:"content,omitempty"` + LinkUrl []byte `protobuf:"bytes,6,opt,name=linkUrl,proto3" json:"linkUrl,omitempty"` + BlackStripe []byte `protobuf:"bytes,7,opt,name=blackStripe,proto3" json:"blackStripe,omitempty"` + Notice []byte `protobuf:"bytes,8,opt,name=notice,proto3" json:"notice,omitempty"` + TitleColor uint32 `protobuf:"varint,9,opt,name=titleColor,proto3" json:"titleColor,omitempty"` + SubtitleColor uint32 `protobuf:"varint,10,opt,name=subtitleColor,proto3" json:"subtitleColor,omitempty"` + ActionsPriority []byte `protobuf:"bytes,11,opt,name=actionsPriority,proto3" json:"actionsPriority,omitempty"` + JumpUrl []byte `protobuf:"bytes,12,opt,name=jumpUrl,proto3" json:"jumpUrl,omitempty"` + NativeIos []byte `protobuf:"bytes,13,opt,name=nativeIos,proto3" json:"nativeIos,omitempty"` + NativeAndroid []byte `protobuf:"bytes,14,opt,name=nativeAndroid,proto3" json:"nativeAndroid,omitempty"` + IconUrl []byte `protobuf:"bytes,15,opt,name=iconUrl,proto3" json:"iconUrl,omitempty"` + ContentColor uint32 `protobuf:"varint,16,opt,name=contentColor,proto3" json:"contentColor,omitempty"` + ContentBgColor uint32 `protobuf:"varint,17,opt,name=contentBgColor,proto3" json:"contentBgColor,omitempty"` + AioImageLeft []byte `protobuf:"bytes,18,opt,name=aioImageLeft,proto3" json:"aioImageLeft,omitempty"` + AioImageRight []byte `protobuf:"bytes,19,opt,name=aioImageRight,proto3" json:"aioImageRight,omitempty"` + CftImage []byte `protobuf:"bytes,20,opt,name=cftImage,proto3" json:"cftImage,omitempty"` + PbReserve []byte `protobuf:"bytes,21,opt,name=pbReserve,proto3" json:"pbReserve,omitempty"` +} + +func (x *QQWalletAioElem) Reset() { + *x = QQWalletAioElem{} + if protoimpl.UnsafeEnabled { + mi := &file_msg_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QQWalletAioElem) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QQWalletAioElem) ProtoMessage() {} + +func (x *QQWalletAioElem) ProtoReflect() protoreflect.Message { + mi := &file_msg_proto_msgTypes[23] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use QQWalletAioElem.ProtoReflect.Descriptor instead. +func (*QQWalletAioElem) Descriptor() ([]byte, []int) { + return file_msg_proto_rawDescGZIP(), []int{23} +} + +func (x *QQWalletAioElem) GetBackground() uint32 { + if x != nil { + return x.Background + } + return 0 +} + +func (x *QQWalletAioElem) GetIcon() uint32 { + if x != nil { + return x.Icon + } + return 0 +} + +func (x *QQWalletAioElem) GetTitle() string { + if x != nil { + return x.Title + } + return "" +} + +func (x *QQWalletAioElem) GetSubtitle() string { + if x != nil { + return x.Subtitle + } + return "" +} + +func (x *QQWalletAioElem) GetContent() string { + if x != nil { + return x.Content + } + return "" +} + +func (x *QQWalletAioElem) GetLinkUrl() []byte { + if x != nil { + return x.LinkUrl + } + return nil +} + +func (x *QQWalletAioElem) GetBlackStripe() []byte { + if x != nil { + return x.BlackStripe + } + return nil +} + +func (x *QQWalletAioElem) GetNotice() []byte { + if x != nil { + return x.Notice + } + return nil +} + +func (x *QQWalletAioElem) GetTitleColor() uint32 { + if x != nil { + return x.TitleColor + } + return 0 +} + +func (x *QQWalletAioElem) GetSubtitleColor() uint32 { + if x != nil { + return x.SubtitleColor + } + return 0 +} + +func (x *QQWalletAioElem) GetActionsPriority() []byte { + if x != nil { + return x.ActionsPriority + } + return nil +} + +func (x *QQWalletAioElem) GetJumpUrl() []byte { + if x != nil { + return x.JumpUrl + } + return nil +} + +func (x *QQWalletAioElem) GetNativeIos() []byte { + if x != nil { + return x.NativeIos + } + return nil +} + +func (x *QQWalletAioElem) GetNativeAndroid() []byte { + if x != nil { + return x.NativeAndroid + } + return nil +} + +func (x *QQWalletAioElem) GetIconUrl() []byte { + if x != nil { + return x.IconUrl + } + return nil +} + +func (x *QQWalletAioElem) GetContentColor() uint32 { + if x != nil { + return x.ContentColor + } + return 0 +} + +func (x *QQWalletAioElem) GetContentBgColor() uint32 { + if x != nil { + return x.ContentBgColor + } + return 0 +} + +func (x *QQWalletAioElem) GetAioImageLeft() []byte { + if x != nil { + return x.AioImageLeft + } + return nil +} + +func (x *QQWalletAioElem) GetAioImageRight() []byte { + if x != nil { + return x.AioImageRight + } + return nil +} + +func (x *QQWalletAioElem) GetCftImage() []byte { + if x != nil { + return x.CftImage + } + return nil +} + +func (x *QQWalletAioElem) GetPbReserve() []byte { + if x != nil { + return x.PbReserve + } + return nil +} + type RichMsg struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1789,7 +2257,7 @@ type RichMsg struct { func (x *RichMsg) Reset() { *x = RichMsg{} if protoimpl.UnsafeEnabled { - mi := &file_msg_proto_msgTypes[21] + mi := &file_msg_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1802,7 +2270,7 @@ func (x *RichMsg) String() string { func (*RichMsg) ProtoMessage() {} func (x *RichMsg) ProtoReflect() protoreflect.Message { - mi := &file_msg_proto_msgTypes[21] + mi := &file_msg_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1815,7 +2283,7 @@ func (x *RichMsg) ProtoReflect() protoreflect.Message { // Deprecated: Use RichMsg.ProtoReflect.Descriptor instead. func (*RichMsg) Descriptor() ([]byte, []int) { - return file_msg_proto_rawDescGZIP(), []int{21} + return file_msg_proto_rawDescGZIP(), []int{24} } func (x *RichMsg) GetTemplate1() []byte { @@ -1868,7 +2336,7 @@ type CustomElem struct { func (x *CustomElem) Reset() { *x = CustomElem{} if protoimpl.UnsafeEnabled { - mi := &file_msg_proto_msgTypes[22] + mi := &file_msg_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1881,7 +2349,7 @@ func (x *CustomElem) String() string { func (*CustomElem) ProtoMessage() {} func (x *CustomElem) ProtoReflect() protoreflect.Message { - mi := &file_msg_proto_msgTypes[22] + mi := &file_msg_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1894,7 +2362,7 @@ func (x *CustomElem) ProtoReflect() protoreflect.Message { // Deprecated: Use CustomElem.ProtoReflect.Descriptor instead. func (*CustomElem) Descriptor() ([]byte, []int) { - return file_msg_proto_rawDescGZIP(), []int{22} + return file_msg_proto_rawDescGZIP(), []int{25} } func (x *CustomElem) GetDesc() []byte { @@ -1948,7 +2416,7 @@ type Text struct { func (x *Text) Reset() { *x = Text{} if protoimpl.UnsafeEnabled { - mi := &file_msg_proto_msgTypes[23] + mi := &file_msg_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1961,7 +2429,7 @@ func (x *Text) String() string { func (*Text) ProtoMessage() {} func (x *Text) ProtoReflect() protoreflect.Message { - mi := &file_msg_proto_msgTypes[23] + mi := &file_msg_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1974,7 +2442,7 @@ func (x *Text) ProtoReflect() protoreflect.Message { // Deprecated: Use Text.ProtoReflect.Descriptor instead. func (*Text) Descriptor() ([]byte, []int) { - return file_msg_proto_rawDescGZIP(), []int{23} + return file_msg_proto_rawDescGZIP(), []int{26} } func (x *Text) GetStr() string { @@ -2039,7 +2507,7 @@ type Attr struct { func (x *Attr) Reset() { *x = Attr{} if protoimpl.UnsafeEnabled { - mi := &file_msg_proto_msgTypes[24] + mi := &file_msg_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2052,7 +2520,7 @@ func (x *Attr) String() string { func (*Attr) ProtoMessage() {} func (x *Attr) ProtoReflect() protoreflect.Message { - mi := &file_msg_proto_msgTypes[24] + mi := &file_msg_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2065,7 +2533,7 @@ func (x *Attr) ProtoReflect() protoreflect.Message { // Deprecated: Use Attr.ProtoReflect.Descriptor instead. func (*Attr) Descriptor() ([]byte, []int) { - return file_msg_proto_rawDescGZIP(), []int{24} + return file_msg_proto_rawDescGZIP(), []int{27} } func (x *Attr) GetCodePage() int32 { @@ -2172,7 +2640,7 @@ type Ptt struct { func (x *Ptt) Reset() { *x = Ptt{} if protoimpl.UnsafeEnabled { - mi := &file_msg_proto_msgTypes[25] + mi := &file_msg_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2185,7 +2653,7 @@ func (x *Ptt) String() string { func (*Ptt) ProtoMessage() {} func (x *Ptt) ProtoReflect() protoreflect.Message { - mi := &file_msg_proto_msgTypes[25] + mi := &file_msg_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2198,7 +2666,7 @@ func (x *Ptt) ProtoReflect() protoreflect.Message { // Deprecated: Use Ptt.ProtoReflect.Descriptor instead. func (*Ptt) Descriptor() ([]byte, []int) { - return file_msg_proto_rawDescGZIP(), []int{25} + return file_msg_proto_rawDescGZIP(), []int{28} } func (x *Ptt) GetFileType() int32 { @@ -2382,7 +2850,7 @@ type OnlineImage struct { func (x *OnlineImage) Reset() { *x = OnlineImage{} if protoimpl.UnsafeEnabled { - mi := &file_msg_proto_msgTypes[26] + mi := &file_msg_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2395,7 +2863,7 @@ func (x *OnlineImage) String() string { func (*OnlineImage) ProtoMessage() {} func (x *OnlineImage) ProtoReflect() protoreflect.Message { - mi := &file_msg_proto_msgTypes[26] + mi := &file_msg_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2408,7 +2876,7 @@ func (x *OnlineImage) ProtoReflect() protoreflect.Message { // Deprecated: Use OnlineImage.ProtoReflect.Descriptor instead. func (*OnlineImage) Descriptor() ([]byte, []int) { - return file_msg_proto_rawDescGZIP(), []int{26} + return file_msg_proto_rawDescGZIP(), []int{29} } func (x *OnlineImage) GetGuid() []byte { @@ -2468,7 +2936,7 @@ type NotOnlineImage struct { func (x *NotOnlineImage) Reset() { *x = NotOnlineImage{} if protoimpl.UnsafeEnabled { - mi := &file_msg_proto_msgTypes[27] + mi := &file_msg_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2481,7 +2949,7 @@ func (x *NotOnlineImage) String() string { func (*NotOnlineImage) ProtoMessage() {} func (x *NotOnlineImage) ProtoReflect() protoreflect.Message { - mi := &file_msg_proto_msgTypes[27] + mi := &file_msg_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2494,7 +2962,7 @@ func (x *NotOnlineImage) ProtoReflect() protoreflect.Message { // Deprecated: Use NotOnlineImage.ProtoReflect.Descriptor instead. func (*NotOnlineImage) Descriptor() ([]byte, []int) { - return file_msg_proto_rawDescGZIP(), []int{27} + return file_msg_proto_rawDescGZIP(), []int{30} } func (x *NotOnlineImage) GetFilePath() string { @@ -2708,7 +3176,7 @@ type NotOnlineFile struct { func (x *NotOnlineFile) Reset() { *x = NotOnlineFile{} if protoimpl.UnsafeEnabled { - mi := &file_msg_proto_msgTypes[28] + mi := &file_msg_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2721,7 +3189,7 @@ func (x *NotOnlineFile) String() string { func (*NotOnlineFile) ProtoMessage() {} func (x *NotOnlineFile) ProtoReflect() protoreflect.Message { - mi := &file_msg_proto_msgTypes[28] + mi := &file_msg_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2734,7 +3202,7 @@ func (x *NotOnlineFile) ProtoReflect() protoreflect.Message { // Deprecated: Use NotOnlineFile.ProtoReflect.Descriptor instead. func (*NotOnlineFile) Descriptor() ([]byte, []int) { - return file_msg_proto_rawDescGZIP(), []int{28} + return file_msg_proto_rawDescGZIP(), []int{31} } func (x *NotOnlineFile) GetFileType() int32 { @@ -2882,7 +3350,7 @@ type TransElem struct { func (x *TransElem) Reset() { *x = TransElem{} if protoimpl.UnsafeEnabled { - mi := &file_msg_proto_msgTypes[29] + mi := &file_msg_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2895,7 +3363,7 @@ func (x *TransElem) String() string { func (*TransElem) ProtoMessage() {} func (x *TransElem) ProtoReflect() protoreflect.Message { - mi := &file_msg_proto_msgTypes[29] + mi := &file_msg_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2908,7 +3376,7 @@ func (x *TransElem) ProtoReflect() protoreflect.Message { // Deprecated: Use TransElem.ProtoReflect.Descriptor instead. func (*TransElem) Descriptor() ([]byte, []int) { - return file_msg_proto_rawDescGZIP(), []int{29} + return file_msg_proto_rawDescGZIP(), []int{32} } func (x *TransElem) GetElemType() int32 { @@ -2947,7 +3415,7 @@ type ExtraInfo struct { func (x *ExtraInfo) Reset() { *x = ExtraInfo{} if protoimpl.UnsafeEnabled { - mi := &file_msg_proto_msgTypes[30] + mi := &file_msg_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2960,7 +3428,7 @@ func (x *ExtraInfo) String() string { func (*ExtraInfo) ProtoMessage() {} func (x *ExtraInfo) ProtoReflect() protoreflect.Message { - mi := &file_msg_proto_msgTypes[30] + mi := &file_msg_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2973,7 +3441,7 @@ func (x *ExtraInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use ExtraInfo.ProtoReflect.Descriptor instead. func (*ExtraInfo) Descriptor() ([]byte, []int) { - return file_msg_proto_rawDescGZIP(), []int{30} + return file_msg_proto_rawDescGZIP(), []int{33} } func (x *ExtraInfo) GetNick() []byte { @@ -3080,7 +3548,7 @@ type GroupFile struct { func (x *GroupFile) Reset() { *x = GroupFile{} if protoimpl.UnsafeEnabled { - mi := &file_msg_proto_msgTypes[31] + mi := &file_msg_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3093,7 +3561,7 @@ func (x *GroupFile) String() string { func (*GroupFile) ProtoMessage() {} func (x *GroupFile) ProtoReflect() protoreflect.Message { - mi := &file_msg_proto_msgTypes[31] + mi := &file_msg_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3106,7 +3574,7 @@ func (x *GroupFile) ProtoReflect() protoreflect.Message { // Deprecated: Use GroupFile.ProtoReflect.Descriptor instead. func (*GroupFile) Descriptor() ([]byte, []int) { - return file_msg_proto_rawDescGZIP(), []int{31} + return file_msg_proto_rawDescGZIP(), []int{34} } func (x *GroupFile) GetFilename() []byte { @@ -3196,7 +3664,7 @@ type AnonymousGroupMessage struct { func (x *AnonymousGroupMessage) Reset() { *x = AnonymousGroupMessage{} if protoimpl.UnsafeEnabled { - mi := &file_msg_proto_msgTypes[32] + mi := &file_msg_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3209,7 +3677,7 @@ func (x *AnonymousGroupMessage) String() string { func (*AnonymousGroupMessage) ProtoMessage() {} func (x *AnonymousGroupMessage) ProtoReflect() protoreflect.Message { - mi := &file_msg_proto_msgTypes[32] + mi := &file_msg_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3222,7 +3690,7 @@ func (x *AnonymousGroupMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use AnonymousGroupMessage.ProtoReflect.Descriptor instead. func (*AnonymousGroupMessage) Descriptor() ([]byte, []int) { - return file_msg_proto_rawDescGZIP(), []int{32} + return file_msg_proto_rawDescGZIP(), []int{35} } func (x *AnonymousGroupMessage) GetFlags() int32 { @@ -3308,7 +3776,7 @@ type VideoFile struct { func (x *VideoFile) Reset() { *x = VideoFile{} if protoimpl.UnsafeEnabled { - mi := &file_msg_proto_msgTypes[33] + mi := &file_msg_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3321,7 +3789,7 @@ func (x *VideoFile) String() string { func (*VideoFile) ProtoMessage() {} func (x *VideoFile) ProtoReflect() protoreflect.Message { - mi := &file_msg_proto_msgTypes[33] + mi := &file_msg_proto_msgTypes[36] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3334,7 +3802,7 @@ func (x *VideoFile) ProtoReflect() protoreflect.Message { // Deprecated: Use VideoFile.ProtoReflect.Descriptor instead. func (*VideoFile) Descriptor() ([]byte, []int) { - return file_msg_proto_rawDescGZIP(), []int{33} + return file_msg_proto_rawDescGZIP(), []int{36} } func (x *VideoFile) GetFileUuid() []byte { @@ -3526,7 +3994,7 @@ type SourceMsg struct { func (x *SourceMsg) Reset() { *x = SourceMsg{} if protoimpl.UnsafeEnabled { - mi := &file_msg_proto_msgTypes[34] + mi := &file_msg_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3539,7 +4007,7 @@ func (x *SourceMsg) String() string { func (*SourceMsg) ProtoMessage() {} func (x *SourceMsg) ProtoReflect() protoreflect.Message { - mi := &file_msg_proto_msgTypes[34] + mi := &file_msg_proto_msgTypes[37] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3552,7 +4020,7 @@ func (x *SourceMsg) ProtoReflect() protoreflect.Message { // Deprecated: Use SourceMsg.ProtoReflect.Descriptor instead. func (*SourceMsg) Descriptor() ([]byte, []int) { - return file_msg_proto_rawDescGZIP(), []int{34} + return file_msg_proto_rawDescGZIP(), []int{37} } func (x *SourceMsg) GetOrigSeqs() []int32 { @@ -3645,7 +4113,7 @@ type Face struct { func (x *Face) Reset() { *x = Face{} if protoimpl.UnsafeEnabled { - mi := &file_msg_proto_msgTypes[35] + mi := &file_msg_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3658,7 +4126,7 @@ func (x *Face) String() string { func (*Face) ProtoMessage() {} func (x *Face) ProtoReflect() protoreflect.Message { - mi := &file_msg_proto_msgTypes[35] + mi := &file_msg_proto_msgTypes[38] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3671,7 +4139,7 @@ func (x *Face) ProtoReflect() protoreflect.Message { // Deprecated: Use Face.ProtoReflect.Descriptor instead. func (*Face) Descriptor() ([]byte, []int) { - return file_msg_proto_rawDescGZIP(), []int{35} + return file_msg_proto_rawDescGZIP(), []int{38} } func (x *Face) GetIndex() int32 { @@ -3707,7 +4175,7 @@ type LightAppElem struct { func (x *LightAppElem) Reset() { *x = LightAppElem{} if protoimpl.UnsafeEnabled { - mi := &file_msg_proto_msgTypes[36] + mi := &file_msg_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3720,7 +4188,7 @@ func (x *LightAppElem) String() string { func (*LightAppElem) ProtoMessage() {} func (x *LightAppElem) ProtoReflect() protoreflect.Message { - mi := &file_msg_proto_msgTypes[36] + mi := &file_msg_proto_msgTypes[39] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3733,7 +4201,7 @@ func (x *LightAppElem) ProtoReflect() protoreflect.Message { // Deprecated: Use LightAppElem.ProtoReflect.Descriptor instead. func (*LightAppElem) Descriptor() ([]byte, []int) { - return file_msg_proto_rawDescGZIP(), []int{36} + return file_msg_proto_rawDescGZIP(), []int{39} } func (x *LightAppElem) GetData() []byte { @@ -3794,7 +4262,7 @@ type CustomFace struct { func (x *CustomFace) Reset() { *x = CustomFace{} if protoimpl.UnsafeEnabled { - mi := &file_msg_proto_msgTypes[37] + mi := &file_msg_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3807,7 +4275,7 @@ func (x *CustomFace) String() string { func (*CustomFace) ProtoMessage() {} func (x *CustomFace) ProtoReflect() protoreflect.Message { - mi := &file_msg_proto_msgTypes[37] + mi := &file_msg_proto_msgTypes[40] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3820,7 +4288,7 @@ func (x *CustomFace) ProtoReflect() protoreflect.Message { // Deprecated: Use CustomFace.ProtoReflect.Descriptor instead. func (*CustomFace) Descriptor() ([]byte, []int) { - return file_msg_proto_rawDescGZIP(), []int{37} + return file_msg_proto_rawDescGZIP(), []int{40} } func (x *CustomFace) GetGuid() []byte { @@ -4075,7 +4543,7 @@ type ContentHead struct { func (x *ContentHead) Reset() { *x = ContentHead{} if protoimpl.UnsafeEnabled { - mi := &file_msg_proto_msgTypes[38] + mi := &file_msg_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4088,7 +4556,7 @@ func (x *ContentHead) String() string { func (*ContentHead) ProtoMessage() {} func (x *ContentHead) ProtoReflect() protoreflect.Message { - mi := &file_msg_proto_msgTypes[38] + mi := &file_msg_proto_msgTypes[41] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4101,7 +4569,7 @@ func (x *ContentHead) ProtoReflect() protoreflect.Message { // Deprecated: Use ContentHead.ProtoReflect.Descriptor instead. func (*ContentHead) Descriptor() ([]byte, []int) { - return file_msg_proto_rawDescGZIP(), []int{38} + return file_msg_proto_rawDescGZIP(), []int{41} } func (x *ContentHead) GetPkgNum() int32 { @@ -4170,7 +4638,7 @@ type MessageHead struct { func (x *MessageHead) Reset() { *x = MessageHead{} if protoimpl.UnsafeEnabled { - mi := &file_msg_proto_msgTypes[39] + mi := &file_msg_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4183,7 +4651,7 @@ func (x *MessageHead) String() string { func (*MessageHead) ProtoMessage() {} func (x *MessageHead) ProtoReflect() protoreflect.Message { - mi := &file_msg_proto_msgTypes[39] + mi := &file_msg_proto_msgTypes[42] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4196,7 +4664,7 @@ func (x *MessageHead) ProtoReflect() protoreflect.Message { // Deprecated: Use MessageHead.ProtoReflect.Descriptor instead. func (*MessageHead) Descriptor() ([]byte, []int) { - return file_msg_proto_rawDescGZIP(), []int{39} + return file_msg_proto_rawDescGZIP(), []int{42} } func (x *MessageHead) GetFromUin() int64 { @@ -4413,7 +4881,7 @@ type GroupInfo struct { func (x *GroupInfo) Reset() { *x = GroupInfo{} if protoimpl.UnsafeEnabled { - mi := &file_msg_proto_msgTypes[40] + mi := &file_msg_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4426,7 +4894,7 @@ func (x *GroupInfo) String() string { func (*GroupInfo) ProtoMessage() {} func (x *GroupInfo) ProtoReflect() protoreflect.Message { - mi := &file_msg_proto_msgTypes[40] + mi := &file_msg_proto_msgTypes[43] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4439,7 +4907,7 @@ func (x *GroupInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use GroupInfo.ProtoReflect.Descriptor instead. func (*GroupInfo) Descriptor() ([]byte, []int) { - return file_msg_proto_rawDescGZIP(), []int{40} + return file_msg_proto_rawDescGZIP(), []int{43} } func (x *GroupInfo) GetGroupCode() int64 { @@ -4513,7 +4981,7 @@ type DiscussInfo struct { func (x *DiscussInfo) Reset() { *x = DiscussInfo{} if protoimpl.UnsafeEnabled { - mi := &file_msg_proto_msgTypes[41] + mi := &file_msg_proto_msgTypes[44] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4526,7 +4994,7 @@ func (x *DiscussInfo) String() string { func (*DiscussInfo) ProtoMessage() {} func (x *DiscussInfo) ProtoReflect() protoreflect.Message { - mi := &file_msg_proto_msgTypes[41] + mi := &file_msg_proto_msgTypes[44] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4539,7 +5007,7 @@ func (x *DiscussInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use DiscussInfo.ProtoReflect.Descriptor instead. func (*DiscussInfo) Descriptor() ([]byte, []int) { - return file_msg_proto_rawDescGZIP(), []int{41} + return file_msg_proto_rawDescGZIP(), []int{44} } func (x *DiscussInfo) GetDiscussUin() int64 { @@ -4589,7 +5057,7 @@ type MutilTransHead struct { func (x *MutilTransHead) Reset() { *x = MutilTransHead{} if protoimpl.UnsafeEnabled { - mi := &file_msg_proto_msgTypes[42] + mi := &file_msg_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4602,7 +5070,7 @@ func (x *MutilTransHead) String() string { func (*MutilTransHead) ProtoMessage() {} func (x *MutilTransHead) ProtoReflect() protoreflect.Message { - mi := &file_msg_proto_msgTypes[42] + mi := &file_msg_proto_msgTypes[45] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4615,7 +5083,7 @@ func (x *MutilTransHead) ProtoReflect() protoreflect.Message { // Deprecated: Use MutilTransHead.ProtoReflect.Descriptor instead. func (*MutilTransHead) Descriptor() ([]byte, []int) { - return file_msg_proto_rawDescGZIP(), []int{42} + return file_msg_proto_rawDescGZIP(), []int{45} } func (x *MutilTransHead) GetStatus() int32 { @@ -4653,7 +5121,7 @@ type C2CTempMessageHead struct { func (x *C2CTempMessageHead) Reset() { *x = C2CTempMessageHead{} if protoimpl.UnsafeEnabled { - mi := &file_msg_proto_msgTypes[43] + mi := &file_msg_proto_msgTypes[46] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4666,7 +5134,7 @@ func (x *C2CTempMessageHead) String() string { func (*C2CTempMessageHead) ProtoMessage() {} func (x *C2CTempMessageHead) ProtoReflect() protoreflect.Message { - mi := &file_msg_proto_msgTypes[43] + mi := &file_msg_proto_msgTypes[46] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4679,7 +5147,7 @@ func (x *C2CTempMessageHead) ProtoReflect() protoreflect.Message { // Deprecated: Use C2CTempMessageHead.ProtoReflect.Descriptor instead. func (*C2CTempMessageHead) Descriptor() ([]byte, []int) { - return file_msg_proto_rawDescGZIP(), []int{43} + return file_msg_proto_rawDescGZIP(), []int{46} } func (x *C2CTempMessageHead) GetC2CType() int32 { @@ -4772,7 +5240,7 @@ type InstCtrl struct { func (x *InstCtrl) Reset() { *x = InstCtrl{} if protoimpl.UnsafeEnabled { - mi := &file_msg_proto_msgTypes[44] + mi := &file_msg_proto_msgTypes[47] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4785,7 +5253,7 @@ func (x *InstCtrl) String() string { func (*InstCtrl) ProtoMessage() {} func (x *InstCtrl) ProtoReflect() protoreflect.Message { - mi := &file_msg_proto_msgTypes[44] + mi := &file_msg_proto_msgTypes[47] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4798,7 +5266,7 @@ func (x *InstCtrl) ProtoReflect() protoreflect.Message { // Deprecated: Use InstCtrl.ProtoReflect.Descriptor instead. func (*InstCtrl) Descriptor() ([]byte, []int) { - return file_msg_proto_rawDescGZIP(), []int{44} + return file_msg_proto_rawDescGZIP(), []int{47} } func (x *InstCtrl) GetMsgSendToInst() []*InstInfo { @@ -4836,7 +5304,7 @@ type InstInfo struct { func (x *InstInfo) Reset() { *x = InstInfo{} if protoimpl.UnsafeEnabled { - mi := &file_msg_proto_msgTypes[45] + mi := &file_msg_proto_msgTypes[48] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4849,7 +5317,7 @@ func (x *InstInfo) String() string { func (*InstInfo) ProtoMessage() {} func (x *InstInfo) ProtoReflect() protoreflect.Message { - mi := &file_msg_proto_msgTypes[45] + mi := &file_msg_proto_msgTypes[48] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4862,7 +5330,7 @@ func (x *InstInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use InstInfo.ProtoReflect.Descriptor instead. func (*InstInfo) Descriptor() ([]byte, []int) { - return file_msg_proto_rawDescGZIP(), []int{45} + return file_msg_proto_rawDescGZIP(), []int{48} } func (x *InstInfo) GetApppid() int32 { @@ -4905,7 +5373,7 @@ type ExtGroupKeyInfo struct { func (x *ExtGroupKeyInfo) Reset() { *x = ExtGroupKeyInfo{} if protoimpl.UnsafeEnabled { - mi := &file_msg_proto_msgTypes[46] + mi := &file_msg_proto_msgTypes[49] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4918,7 +5386,7 @@ func (x *ExtGroupKeyInfo) String() string { func (*ExtGroupKeyInfo) ProtoMessage() {} func (x *ExtGroupKeyInfo) ProtoReflect() protoreflect.Message { - mi := &file_msg_proto_msgTypes[46] + mi := &file_msg_proto_msgTypes[49] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4931,7 +5399,7 @@ func (x *ExtGroupKeyInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use ExtGroupKeyInfo.ProtoReflect.Descriptor instead. func (*ExtGroupKeyInfo) Descriptor() ([]byte, []int) { - return file_msg_proto_rawDescGZIP(), []int{46} + return file_msg_proto_rawDescGZIP(), []int{49} } func (x *ExtGroupKeyInfo) GetCurMaxSeq() int32 { @@ -4967,7 +5435,7 @@ type SyncCookie struct { func (x *SyncCookie) Reset() { *x = SyncCookie{} if protoimpl.UnsafeEnabled { - mi := &file_msg_proto_msgTypes[47] + mi := &file_msg_proto_msgTypes[50] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4980,7 +5448,7 @@ func (x *SyncCookie) String() string { func (*SyncCookie) ProtoMessage() {} func (x *SyncCookie) ProtoReflect() protoreflect.Message { - mi := &file_msg_proto_msgTypes[47] + mi := &file_msg_proto_msgTypes[50] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4993,7 +5461,7 @@ func (x *SyncCookie) ProtoReflect() protoreflect.Message { // Deprecated: Use SyncCookie.ProtoReflect.Descriptor instead. func (*SyncCookie) Descriptor() ([]byte, []int) { - return file_msg_proto_rawDescGZIP(), []int{47} + return file_msg_proto_rawDescGZIP(), []int{50} } func (x *SyncCookie) GetTime1() int64 { @@ -5082,7 +5550,7 @@ type TransMsgInfo struct { func (x *TransMsgInfo) Reset() { *x = TransMsgInfo{} if protoimpl.UnsafeEnabled { - mi := &file_msg_proto_msgTypes[48] + mi := &file_msg_proto_msgTypes[51] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5095,7 +5563,7 @@ func (x *TransMsgInfo) String() string { func (*TransMsgInfo) ProtoMessage() {} func (x *TransMsgInfo) ProtoReflect() protoreflect.Message { - mi := &file_msg_proto_msgTypes[48] + mi := &file_msg_proto_msgTypes[51] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5108,7 +5576,7 @@ func (x *TransMsgInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use TransMsgInfo.ProtoReflect.Descriptor instead. func (*TransMsgInfo) Descriptor() ([]byte, []int) { - return file_msg_proto_rawDescGZIP(), []int{48} + return file_msg_proto_rawDescGZIP(), []int{51} } func (x *TransMsgInfo) GetFromUin() int64 { @@ -5231,7 +5699,7 @@ type GeneralFlags struct { func (x *GeneralFlags) Reset() { *x = GeneralFlags{} if protoimpl.UnsafeEnabled { - mi := &file_msg_proto_msgTypes[49] + mi := &file_msg_proto_msgTypes[52] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5244,7 +5712,7 @@ func (x *GeneralFlags) String() string { func (*GeneralFlags) ProtoMessage() {} func (x *GeneralFlags) ProtoReflect() protoreflect.Message { - mi := &file_msg_proto_msgTypes[49] + mi := &file_msg_proto_msgTypes[52] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5257,7 +5725,7 @@ func (x *GeneralFlags) ProtoReflect() protoreflect.Message { // Deprecated: Use GeneralFlags.ProtoReflect.Descriptor instead. func (*GeneralFlags) Descriptor() ([]byte, []int) { - return file_msg_proto_rawDescGZIP(), []int{49} + return file_msg_proto_rawDescGZIP(), []int{52} } func (x *GeneralFlags) GetBubbleDiyTextId() int32 { @@ -5405,7 +5873,7 @@ type PbMultiMsgItem struct { func (x *PbMultiMsgItem) Reset() { *x = PbMultiMsgItem{} if protoimpl.UnsafeEnabled { - mi := &file_msg_proto_msgTypes[50] + mi := &file_msg_proto_msgTypes[53] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5418,7 +5886,7 @@ func (x *PbMultiMsgItem) String() string { func (*PbMultiMsgItem) ProtoMessage() {} func (x *PbMultiMsgItem) ProtoReflect() protoreflect.Message { - mi := &file_msg_proto_msgTypes[50] + mi := &file_msg_proto_msgTypes[53] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5431,7 +5899,7 @@ func (x *PbMultiMsgItem) ProtoReflect() protoreflect.Message { // Deprecated: Use PbMultiMsgItem.ProtoReflect.Descriptor instead. func (*PbMultiMsgItem) Descriptor() ([]byte, []int) { - return file_msg_proto_rawDescGZIP(), []int{50} + return file_msg_proto_rawDescGZIP(), []int{53} } func (x *PbMultiMsgItem) GetFileName() string { @@ -5459,7 +5927,7 @@ type PbMultiMsgNew struct { func (x *PbMultiMsgNew) Reset() { *x = PbMultiMsgNew{} if protoimpl.UnsafeEnabled { - mi := &file_msg_proto_msgTypes[51] + mi := &file_msg_proto_msgTypes[54] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5472,7 +5940,7 @@ func (x *PbMultiMsgNew) String() string { func (*PbMultiMsgNew) ProtoMessage() {} func (x *PbMultiMsgNew) ProtoReflect() protoreflect.Message { - mi := &file_msg_proto_msgTypes[51] + mi := &file_msg_proto_msgTypes[54] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5485,7 +5953,7 @@ func (x *PbMultiMsgNew) ProtoReflect() protoreflect.Message { // Deprecated: Use PbMultiMsgNew.ProtoReflect.Descriptor instead. func (*PbMultiMsgNew) Descriptor() ([]byte, []int) { - return file_msg_proto_rawDescGZIP(), []int{51} + return file_msg_proto_rawDescGZIP(), []int{54} } func (x *PbMultiMsgNew) GetMsg() []*Message { @@ -5507,7 +5975,7 @@ type PbMultiMsgTransmit struct { func (x *PbMultiMsgTransmit) Reset() { *x = PbMultiMsgTransmit{} if protoimpl.UnsafeEnabled { - mi := &file_msg_proto_msgTypes[52] + mi := &file_msg_proto_msgTypes[55] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5520,7 +5988,7 @@ func (x *PbMultiMsgTransmit) String() string { func (*PbMultiMsgTransmit) ProtoMessage() {} func (x *PbMultiMsgTransmit) ProtoReflect() protoreflect.Message { - mi := &file_msg_proto_msgTypes[52] + mi := &file_msg_proto_msgTypes[55] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5533,7 +6001,7 @@ func (x *PbMultiMsgTransmit) ProtoReflect() protoreflect.Message { // Deprecated: Use PbMultiMsgTransmit.ProtoReflect.Descriptor instead. func (*PbMultiMsgTransmit) Descriptor() ([]byte, []int) { - return file_msg_proto_rawDescGZIP(), []int{52} + return file_msg_proto_rawDescGZIP(), []int{55} } func (x *PbMultiMsgTransmit) GetMsg() []*Message { @@ -5750,7 +6218,7 @@ var file_msg_proto_rawDesc = []byte{ 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x4e, 0x6f, 0x74, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x0d, 0x6e, 0x6f, 0x74, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x16, 0x0a, 0x03, 0x70, 0x74, 0x74, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x04, 0x2e, 0x50, 0x74, 0x74, 0x52, 0x03, 0x70, 0x74, 0x74, 0x22, 0xbe, + 0x01, 0x28, 0x0b, 0x32, 0x04, 0x2e, 0x50, 0x74, 0x74, 0x52, 0x03, 0x70, 0x74, 0x74, 0x22, 0xee, 0x05, 0x0a, 0x04, 0x45, 0x6c, 0x65, 0x6d, 0x12, 0x19, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x54, 0x65, 0x78, 0x74, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x12, 0x19, 0x0a, 0x04, 0x66, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, @@ -5781,6 +6249,9 @@ var file_msg_proto_rawDesc = []byte{ 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x73, 0x67, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x41, 0x6e, 0x6f, 0x6e, 0x79, 0x6d, 0x6f, 0x75, 0x73, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x0c, 0x61, 0x6e, 0x6f, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, + 0x4d, 0x73, 0x67, 0x12, 0x2e, 0x0a, 0x0b, 0x51, 0x51, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x4d, + 0x73, 0x67, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x51, 0x51, 0x57, 0x61, 0x6c, + 0x6c, 0x65, 0x74, 0x4d, 0x73, 0x67, 0x52, 0x0b, 0x51, 0x51, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x4d, 0x73, 0x67, 0x12, 0x2b, 0x0a, 0x0a, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x45, 0x6c, 0x65, 0x6d, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x45, 0x6c, 0x65, 0x6d, 0x52, 0x0a, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x45, 0x6c, 0x65, 0x6d, @@ -5801,623 +6272,708 @@ var file_msg_proto_rawDesc = []byte{ 0x16, 0x0a, 0x06, 0x70, 0x62, 0x45, 0x6c, 0x65, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x70, 0x62, 0x45, 0x6c, 0x65, 0x6d, 0x12, 0x22, 0x0a, 0x0c, 0x62, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x62, - 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x54, 0x79, 0x70, 0x65, 0x22, 0x87, 0x01, 0x0a, 0x07, - 0x52, 0x69, 0x63, 0x68, 0x4d, 0x73, 0x67, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x31, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x74, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x31, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x73, 0x67, 0x52, 0x65, 0x73, 0x49, 0x64, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x6d, 0x73, 0x67, 0x52, 0x65, 0x73, 0x49, 0x64, 0x12, - 0x12, 0x0a, 0x04, 0x72, 0x61, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x72, - 0x61, 0x6e, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x65, 0x71, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x03, 0x73, 0x65, 0x71, 0x22, 0x78, 0x0a, 0x0a, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x45, - 0x6c, 0x65, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x65, 0x73, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0c, 0x52, 0x04, 0x64, 0x65, 0x73, 0x63, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1a, 0x0a, 0x08, 0x65, - 0x6e, 0x75, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x65, - 0x6e, 0x75, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x65, 0x78, 0x74, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x65, 0x78, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x6f, 0x75, - 0x6e, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x73, 0x6f, 0x75, 0x6e, 0x64, 0x22, - 0x94, 0x01, 0x0a, 0x04, 0x54, 0x65, 0x78, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x74, 0x72, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x73, 0x74, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6c, 0x69, - 0x6e, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6c, 0x69, 0x6e, 0x6b, 0x12, 0x1a, - 0x0a, 0x08, 0x61, 0x74, 0x74, 0x72, 0x36, 0x42, 0x75, 0x66, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, - 0x52, 0x08, 0x61, 0x74, 0x74, 0x72, 0x36, 0x42, 0x75, 0x66, 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x74, - 0x74, 0x72, 0x37, 0x42, 0x75, 0x66, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x61, 0x74, - 0x74, 0x72, 0x37, 0x42, 0x75, 0x66, 0x12, 0x10, 0x0a, 0x03, 0x62, 0x75, 0x66, 0x18, 0x0b, 0x20, - 0x01, 0x28, 0x0c, 0x52, 0x03, 0x62, 0x75, 0x66, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x62, 0x52, 0x65, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x70, 0x62, 0x52, - 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x22, 0x90, 0x02, 0x0a, 0x04, 0x41, 0x74, 0x74, 0x72, 0x12, - 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x64, 0x65, 0x50, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x08, 0x63, 0x6f, 0x64, 0x65, 0x50, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, - 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x12, - 0x16, 0x0a, 0x06, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x06, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x6c, 0x6f, 0x72, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x12, 0x12, 0x0a, - 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x73, 0x69, 0x7a, - 0x65, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x06, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x68, 0x61, - 0x72, 0x53, 0x65, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x63, 0x68, 0x61, 0x72, - 0x53, 0x65, 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x70, 0x69, 0x74, 0x63, 0x68, 0x41, 0x6e, 0x64, 0x46, - 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x70, 0x69, 0x74, - 0x63, 0x68, 0x41, 0x6e, 0x64, 0x46, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x66, - 0x6f, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, - 0x6f, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x44, 0x61, 0x74, 0x61, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x72, 0x65, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x44, 0x61, 0x74, 0x61, 0x22, 0xb9, 0x05, 0x0a, 0x03, 0x50, 0x74, - 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, - 0x06, 0x73, 0x72, 0x63, 0x55, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x73, - 0x72, 0x63, 0x55, 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x55, 0x75, 0x69, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x55, 0x75, 0x69, - 0x64, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x69, 0x6c, 0x65, 0x4d, 0x64, 0x35, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x07, 0x66, 0x69, 0x6c, 0x65, 0x4d, 0x64, 0x35, 0x12, 0x1a, 0x0a, 0x08, 0x66, - 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, - 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x53, - 0x69, 0x7a, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x53, - 0x69, 0x7a, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x12, 0x16, 0x0a, - 0x06, 0x66, 0x69, 0x6c, 0x65, 0x49, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x66, - 0x69, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, - 0x70, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, - 0x70, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x50, 0x6f, 0x72, 0x74, 0x18, - 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x50, 0x6f, 0x72, - 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x62, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x18, 0x0b, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x62, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x12, - 0x1c, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x0c, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x1a, 0x0a, - 0x08, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x08, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x69, 0x6c, - 0x65, 0x4b, 0x65, 0x79, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x66, 0x69, 0x6c, 0x65, - 0x4b, 0x65, 0x79, 0x12, 0x24, 0x0a, 0x0d, 0x6d, 0x61, 0x67, 0x69, 0x63, 0x50, 0x74, 0x74, 0x49, - 0x6e, 0x64, 0x65, 0x78, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x6d, 0x61, 0x67, 0x69, - 0x63, 0x50, 0x74, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x20, 0x0a, 0x0b, 0x76, 0x6f, 0x69, - 0x63, 0x65, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x18, 0x10, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, - 0x76, 0x6f, 0x69, 0x63, 0x65, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x70, - 0x74, 0x74, 0x55, 0x72, 0x6c, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x70, 0x74, 0x74, - 0x55, 0x72, 0x6c, 0x12, 0x22, 0x0a, 0x0c, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x46, 0x69, 0x6c, 0x65, - 0x4b, 0x65, 0x79, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x67, 0x72, 0x6f, 0x75, 0x70, - 0x46, 0x69, 0x6c, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, - 0x13, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x64, - 0x6f, 0x77, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x64, - 0x6f, 0x77, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, - 0x74, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, - 0x1c, 0x0a, 0x09, 0x70, 0x62, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x18, 0x1e, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x09, 0x70, 0x62, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x12, 0x22, 0x0a, - 0x0c, 0x62, 0x79, 0x74, 0x65, 0x73, 0x50, 0x74, 0x74, 0x55, 0x72, 0x6c, 0x73, 0x18, 0x1f, 0x20, - 0x03, 0x28, 0x0c, 0x52, 0x0c, 0x62, 0x79, 0x74, 0x65, 0x73, 0x50, 0x74, 0x74, 0x55, 0x72, 0x6c, - 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x46, 0x6c, 0x61, - 0x67, 0x18, 0x20, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, - 0x64, 0x46, 0x6c, 0x61, 0x67, 0x22, 0x65, 0x0a, 0x0b, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x49, - 0x6d, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x67, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x04, 0x67, 0x75, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, - 0x50, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, - 0x50, 0x61, 0x74, 0x68, 0x12, 0x26, 0x0a, 0x0e, 0x6f, 0x6c, 0x64, 0x56, 0x65, 0x72, 0x53, 0x65, - 0x6e, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x6f, 0x6c, - 0x64, 0x56, 0x65, 0x72, 0x53, 0x65, 0x6e, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x22, 0xf0, 0x05, 0x0a, - 0x0e, 0x4e, 0x6f, 0x74, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, - 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x50, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x50, 0x61, 0x74, 0x68, 0x12, 0x18, 0x0a, 0x07, 0x66, - 0x69, 0x6c, 0x65, 0x4c, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x66, 0x69, - 0x6c, 0x65, 0x4c, 0x65, 0x6e, 0x12, 0x22, 0x0a, 0x0c, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, - 0x64, 0x50, 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x64, 0x6f, 0x77, - 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x61, 0x74, 0x68, 0x12, 0x26, 0x0a, 0x0e, 0x6f, 0x6c, 0x64, - 0x56, 0x65, 0x72, 0x53, 0x65, 0x6e, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x0c, 0x52, 0x0e, 0x6f, 0x6c, 0x64, 0x56, 0x65, 0x72, 0x53, 0x65, 0x6e, 0x64, 0x46, 0x69, 0x6c, - 0x65, 0x12, 0x18, 0x0a, 0x07, 0x69, 0x6d, 0x67, 0x54, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x07, 0x69, 0x6d, 0x67, 0x54, 0x79, 0x70, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x70, - 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x73, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x0d, 0x70, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x73, 0x49, 0x6d, 0x61, 0x67, - 0x65, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x69, 0x63, 0x4d, 0x64, 0x35, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x0c, 0x52, 0x06, 0x70, 0x69, 0x63, 0x4d, 0x64, 0x35, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x69, 0x63, - 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x70, 0x69, - 0x63, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x69, 0x63, 0x57, 0x69, - 0x64, 0x74, 0x68, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x69, 0x63, 0x57, 0x69, - 0x64, 0x74, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x65, 0x73, 0x49, 0x64, 0x18, 0x0a, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x05, 0x72, 0x65, 0x73, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x6c, 0x61, - 0x67, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x12, 0x1a, 0x0a, - 0x08, 0x74, 0x68, 0x75, 0x6d, 0x62, 0x55, 0x72, 0x6c, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x74, 0x68, 0x75, 0x6d, 0x62, 0x55, 0x72, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x6f, 0x72, 0x69, - 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x6f, 0x72, 0x69, - 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x69, 0x67, 0x55, 0x72, 0x6c, 0x18, - 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x69, 0x67, 0x55, 0x72, 0x6c, 0x12, 0x18, 0x0a, - 0x07, 0x6f, 0x72, 0x69, 0x67, 0x55, 0x72, 0x6c, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x6f, 0x72, 0x69, 0x67, 0x55, 0x72, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x62, 0x69, 0x7a, 0x54, 0x79, - 0x70, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x62, 0x69, 0x7a, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x11, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, - 0x65, 0x78, 0x18, 0x12, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, - 0x1c, 0x0a, 0x09, 0x6f, 0x70, 0x46, 0x61, 0x63, 0x65, 0x42, 0x75, 0x66, 0x18, 0x13, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x09, 0x6f, 0x70, 0x46, 0x61, 0x63, 0x65, 0x42, 0x75, 0x66, 0x12, 0x1c, 0x0a, - 0x09, 0x6f, 0x6c, 0x64, 0x50, 0x69, 0x63, 0x4d, 0x64, 0x35, 0x18, 0x14, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x09, 0x6f, 0x6c, 0x64, 0x50, 0x69, 0x63, 0x4d, 0x64, 0x35, 0x12, 0x1e, 0x0a, 0x0a, 0x74, - 0x68, 0x75, 0x6d, 0x62, 0x57, 0x69, 0x64, 0x74, 0x68, 0x18, 0x15, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x0a, 0x74, 0x68, 0x75, 0x6d, 0x62, 0x57, 0x69, 0x64, 0x74, 0x68, 0x12, 0x20, 0x0a, 0x0b, 0x74, - 0x68, 0x75, 0x6d, 0x62, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x16, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x0b, 0x74, 0x68, 0x75, 0x6d, 0x62, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x16, 0x0a, - 0x06, 0x66, 0x69, 0x6c, 0x65, 0x49, 0x64, 0x18, 0x17, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x66, - 0x69, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x68, 0x6f, 0x77, 0x4c, 0x65, 0x6e, - 0x18, 0x18, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x73, 0x68, 0x6f, 0x77, 0x4c, 0x65, 0x6e, 0x12, - 0x20, 0x0a, 0x0b, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x4c, 0x65, 0x6e, 0x18, 0x19, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x4c, 0x65, - 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x62, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x18, 0x1d, - 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x70, 0x62, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x22, - 0xb9, 0x04, 0x0a, 0x0d, 0x4e, 0x6f, 0x74, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x46, 0x69, 0x6c, - 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x10, 0x0a, - 0x03, 0x73, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x73, 0x69, 0x67, 0x12, - 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x55, 0x75, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0c, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x55, 0x75, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x66, - 0x69, 0x6c, 0x65, 0x4d, 0x64, 0x35, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x66, 0x69, - 0x6c, 0x65, 0x4d, 0x64, 0x35, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, - 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, - 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x12, 0x0a, - 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x6e, 0x6f, 0x74, - 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x08, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x12, 0x16, 0x0a, - 0x06, 0x73, 0x75, 0x62, 0x63, 0x6d, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x73, - 0x75, 0x62, 0x63, 0x6d, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x43, 0x6c, - 0x6f, 0x75, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x6d, 0x69, 0x63, 0x72, 0x6f, - 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x62, 0x79, 0x74, 0x65, 0x73, 0x46, 0x69, - 0x6c, 0x65, 0x55, 0x72, 0x6c, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x0d, 0x62, 0x79, - 0x74, 0x65, 0x73, 0x46, 0x69, 0x6c, 0x65, 0x55, 0x72, 0x6c, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x64, - 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x46, 0x6c, 0x61, 0x67, 0x18, 0x0c, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x0c, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x46, 0x6c, 0x61, 0x67, 0x12, - 0x1e, 0x0a, 0x0a, 0x64, 0x61, 0x6e, 0x67, 0x65, 0x72, 0x45, 0x76, 0x65, 0x6c, 0x18, 0x32, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x0a, 0x64, 0x61, 0x6e, 0x67, 0x65, 0x72, 0x45, 0x76, 0x65, 0x6c, 0x12, - 0x1a, 0x0a, 0x08, 0x6c, 0x69, 0x66, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x33, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x08, 0x6c, 0x69, 0x66, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x75, - 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x34, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x0a, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x61, - 0x62, 0x73, 0x46, 0x69, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x35, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x0b, 0x61, 0x62, 0x73, 0x46, 0x69, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1e, 0x0a, - 0x0a, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x18, 0x36, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x0a, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1e, 0x0a, - 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x37, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1c, 0x0a, - 0x09, 0x70, 0x62, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x18, 0x38, 0x20, 0x01, 0x28, 0x0c, - 0x52, 0x09, 0x70, 0x62, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x22, 0x45, 0x0a, 0x09, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x45, 0x6c, 0x65, 0x6d, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x6c, 0x65, 0x6d, - 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x65, 0x6c, 0x65, 0x6d, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x65, 0x6c, 0x65, 0x6d, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x65, 0x6c, 0x65, 0x6d, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x22, 0xe3, 0x02, 0x0a, 0x09, 0x45, 0x78, 0x74, 0x72, 0x61, 0x49, 0x6e, 0x66, 0x6f, - 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x69, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, - 0x6e, 0x69, 0x63, 0x6b, 0x12, 0x1c, 0x0a, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x61, 0x72, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x61, - 0x72, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6c, 0x61, 0x67, - 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x1c, - 0x0a, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x61, 0x73, 0x6b, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x61, 0x73, 0x6b, 0x12, 0x1c, 0x0a, 0x09, - 0x6d, 0x73, 0x67, 0x54, 0x61, 0x69, 0x6c, 0x49, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x09, 0x6d, 0x73, 0x67, 0x54, 0x61, 0x69, 0x6c, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x65, - 0x6e, 0x64, 0x65, 0x72, 0x54, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x0b, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x54, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x1a, 0x0a, 0x08, - 0x61, 0x70, 0x6e, 0x73, 0x54, 0x69, 0x70, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, - 0x61, 0x70, 0x6e, 0x73, 0x54, 0x69, 0x70, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x6e, 0x18, - 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x75, 0x69, 0x6e, 0x12, 0x22, 0x0a, 0x0c, 0x6d, 0x73, - 0x67, 0x53, 0x74, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x0c, 0x6d, 0x73, 0x67, 0x53, 0x74, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x24, - 0x0a, 0x0d, 0x61, 0x70, 0x6e, 0x73, 0x53, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x79, 0x70, 0x65, 0x18, - 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x61, 0x70, 0x6e, 0x73, 0x53, 0x6f, 0x75, 0x6e, 0x64, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x6e, 0x65, 0x77, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x46, 0x6c, 0x61, 0x67, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x6e, 0x65, 0x77, 0x47, - 0x72, 0x6f, 0x75, 0x70, 0x46, 0x6c, 0x61, 0x67, 0x22, 0xa1, 0x02, 0x0a, 0x09, 0x47, 0x72, 0x6f, - 0x75, 0x70, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x6e, 0x61, - 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x16, - 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x65, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, - 0x66, 0x69, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x62, 0x61, 0x74, 0x63, 0x68, 0x49, - 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x62, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, - 0x12, 0x18, 0x0a, 0x07, 0x66, 0x69, 0x6c, 0x65, 0x4b, 0x65, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x0c, 0x52, 0x07, 0x66, 0x69, 0x6c, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x61, - 0x72, 0x6b, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x6d, 0x61, 0x72, 0x6b, 0x12, 0x1a, - 0x0a, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x62, 0x61, - 0x74, 0x63, 0x68, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x0b, 0x62, 0x61, 0x74, 0x63, 0x68, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0b, - 0x66, 0x65, 0x65, 0x64, 0x4d, 0x73, 0x67, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x0b, 0x66, 0x65, 0x65, 0x64, 0x4d, 0x73, 0x67, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1c, - 0x0a, 0x09, 0x70, 0x62, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, - 0x0c, 0x52, 0x09, 0x70, 0x62, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x22, 0xdf, 0x01, 0x0a, - 0x15, 0x41, 0x6e, 0x6f, 0x6e, 0x79, 0x6d, 0x6f, 0x75, 0x73, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x16, 0x0a, 0x06, - 0x61, 0x6e, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x61, 0x6e, - 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x6e, 0x6f, 0x6e, 0x4e, 0x69, 0x63, 0x6b, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x61, 0x6e, 0x6f, 0x6e, 0x4e, 0x69, 0x63, 0x6b, - 0x12, 0x22, 0x0a, 0x0c, 0x68, 0x65, 0x61, 0x64, 0x50, 0x6f, 0x72, 0x74, 0x72, 0x61, 0x69, 0x74, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x68, 0x65, 0x61, 0x64, 0x50, 0x6f, 0x72, 0x74, - 0x72, 0x61, 0x69, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x54, 0x69, - 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, - 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x62, 0x75, 0x62, 0x62, 0x6c, 0x65, 0x49, 0x64, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x62, 0x75, 0x62, 0x62, 0x6c, 0x65, 0x49, 0x64, - 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x61, 0x6e, 0x6b, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x0c, 0x52, 0x09, 0x72, 0x61, 0x6e, 0x6b, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0xc9, - 0x06, 0x0a, 0x09, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x1a, 0x0a, 0x08, - 0x66, 0x69, 0x6c, 0x65, 0x55, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, - 0x66, 0x69, 0x6c, 0x65, 0x55, 0x75, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x69, 0x6c, 0x65, - 0x4d, 0x64, 0x35, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x66, 0x69, 0x6c, 0x65, 0x4d, - 0x64, 0x35, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1e, - 0x0a, 0x0a, 0x66, 0x69, 0x6c, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x0a, 0x66, 0x69, 0x6c, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x1a, - 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, - 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x66, 0x69, - 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x74, 0x68, 0x75, 0x6d, 0x62, 0x57, - 0x69, 0x64, 0x74, 0x68, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x74, 0x68, 0x75, 0x6d, - 0x62, 0x57, 0x69, 0x64, 0x74, 0x68, 0x12, 0x20, 0x0a, 0x0b, 0x74, 0x68, 0x75, 0x6d, 0x62, 0x48, - 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x74, 0x68, 0x75, - 0x6d, 0x62, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x74, 0x68, 0x75, 0x6d, - 0x62, 0x46, 0x69, 0x6c, 0x65, 0x4d, 0x64, 0x35, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, - 0x74, 0x68, 0x75, 0x6d, 0x62, 0x46, 0x69, 0x6c, 0x65, 0x4d, 0x64, 0x35, 0x12, 0x16, 0x0a, 0x06, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x74, 0x68, 0x75, 0x6d, 0x62, 0x46, 0x69, 0x6c, - 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x74, 0x68, 0x75, - 0x6d, 0x62, 0x46, 0x69, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x62, 0x75, - 0x73, 0x69, 0x54, 0x79, 0x70, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x62, 0x75, - 0x73, 0x69, 0x54, 0x79, 0x70, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x66, 0x72, 0x6f, 0x6d, 0x43, 0x68, - 0x61, 0x74, 0x54, 0x79, 0x70, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x66, 0x72, - 0x6f, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x74, 0x6f, - 0x43, 0x68, 0x61, 0x74, 0x54, 0x79, 0x70, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, - 0x74, 0x6f, 0x43, 0x68, 0x61, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x36, 0x0a, 0x16, 0x62, 0x6f, - 0x6f, 0x6c, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, - 0x73, 0x69, 0x76, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x08, 0x52, 0x16, 0x62, 0x6f, 0x6f, 0x6c, - 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, - 0x76, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x57, 0x69, 0x64, 0x74, 0x68, 0x18, - 0x10, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x57, 0x69, 0x64, 0x74, 0x68, - 0x12, 0x1e, 0x0a, 0x0a, 0x66, 0x69, 0x6c, 0x65, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x11, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x66, 0x69, 0x6c, 0x65, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, - 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x75, 0x62, 0x42, 0x75, 0x73, 0x69, 0x54, 0x79, 0x70, 0x65, 0x18, - 0x12, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x73, 0x75, 0x62, 0x42, 0x75, 0x73, 0x69, 0x54, 0x79, - 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x76, 0x69, 0x64, 0x65, 0x6f, 0x41, 0x74, 0x74, 0x72, 0x18, - 0x13, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x76, 0x69, 0x64, 0x65, 0x6f, 0x41, 0x74, 0x74, 0x72, - 0x12, 0x2e, 0x0a, 0x12, 0x62, 0x79, 0x74, 0x65, 0x73, 0x54, 0x68, 0x75, 0x6d, 0x62, 0x46, 0x69, - 0x6c, 0x65, 0x55, 0x72, 0x6c, 0x73, 0x18, 0x14, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x12, 0x62, 0x79, - 0x74, 0x65, 0x73, 0x54, 0x68, 0x75, 0x6d, 0x62, 0x46, 0x69, 0x6c, 0x65, 0x55, 0x72, 0x6c, 0x73, - 0x12, 0x2e, 0x0a, 0x12, 0x62, 0x79, 0x74, 0x65, 0x73, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x46, 0x69, - 0x6c, 0x65, 0x55, 0x72, 0x6c, 0x73, 0x18, 0x15, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x12, 0x62, 0x79, - 0x74, 0x65, 0x73, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x46, 0x69, 0x6c, 0x65, 0x55, 0x72, 0x6c, 0x73, - 0x12, 0x2c, 0x0a, 0x11, 0x74, 0x68, 0x75, 0x6d, 0x62, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, - 0x64, 0x46, 0x6c, 0x61, 0x67, 0x18, 0x16, 0x20, 0x01, 0x28, 0x05, 0x52, 0x11, 0x74, 0x68, 0x75, - 0x6d, 0x62, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x2c, - 0x0a, 0x11, 0x76, 0x69, 0x64, 0x65, 0x6f, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x46, - 0x6c, 0x61, 0x67, 0x18, 0x17, 0x20, 0x01, 0x28, 0x05, 0x52, 0x11, 0x76, 0x69, 0x64, 0x65, 0x6f, - 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x1c, 0x0a, 0x09, - 0x70, 0x62, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x09, 0x70, 0x62, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x22, 0xa2, 0x02, 0x0a, 0x09, 0x53, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, 0x73, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x6f, 0x72, 0x69, 0x67, - 0x53, 0x65, 0x71, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x05, 0x52, 0x08, 0x6f, 0x72, 0x69, 0x67, - 0x53, 0x65, 0x71, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x55, 0x69, - 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x55, - 0x69, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x12, 0x1b, 0x0a, 0x05, 0x65, 0x6c, - 0x65, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x45, 0x6c, 0x65, 0x6d, - 0x52, 0x05, 0x65, 0x6c, 0x65, 0x6d, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x72, - 0x69, 0x63, 0x68, 0x4d, 0x73, 0x67, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x72, 0x69, - 0x63, 0x68, 0x4d, 0x73, 0x67, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x62, 0x52, 0x65, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x70, 0x62, 0x52, 0x65, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x72, 0x63, 0x4d, 0x73, 0x67, 0x18, 0x09, 0x20, - 0x01, 0x28, 0x0c, 0x52, 0x06, 0x73, 0x72, 0x63, 0x4d, 0x73, 0x67, 0x12, 0x14, 0x0a, 0x05, 0x74, - 0x6f, 0x55, 0x69, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x74, 0x6f, 0x55, 0x69, - 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x72, 0x6f, 0x6f, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x0b, - 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x74, 0x72, 0x6f, 0x6f, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x22, - 0x40, 0x0a, 0x04, 0x46, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x10, 0x0a, - 0x03, 0x6f, 0x6c, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x6f, 0x6c, 0x64, 0x12, - 0x10, 0x0a, 0x03, 0x62, 0x75, 0x66, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x62, 0x75, - 0x66, 0x22, 0x3e, 0x0a, 0x0c, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x41, 0x70, 0x70, 0x45, 0x6c, 0x65, - 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x73, 0x67, 0x52, 0x65, 0x73, 0x69, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x6d, 0x73, 0x67, 0x52, 0x65, 0x73, 0x69, - 0x64, 0x22, 0x99, 0x07, 0x0a, 0x0a, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x46, 0x61, 0x63, 0x65, - 0x12, 0x12, 0x0a, 0x04, 0x67, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, - 0x67, 0x75, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x50, 0x61, 0x74, 0x68, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x50, 0x61, 0x74, 0x68, - 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x12, 0x16, 0x0a, 0x06, - 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x62, 0x75, - 0x66, 0x66, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x6f, 0x6c, 0x64, 0x44, - 0x61, 0x74, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x6f, 0x6c, 0x64, 0x44, 0x61, - 0x74, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x65, 0x49, 0x64, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x06, 0x66, 0x69, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x49, 0x70, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x49, 0x70, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x50, 0x6f, 0x72, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x54, 0x79, - 0x70, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x54, 0x79, - 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, - 0x0b, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, - 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x66, 0x75, 0x6c, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x06, 0x75, 0x73, 0x65, 0x66, 0x75, 0x6c, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x64, 0x35, 0x18, - 0x0d, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x6d, 0x64, 0x35, 0x12, 0x1a, 0x0a, 0x08, 0x74, 0x68, - 0x75, 0x6d, 0x62, 0x55, 0x72, 0x6c, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x68, - 0x75, 0x6d, 0x62, 0x55, 0x72, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x69, 0x67, 0x55, 0x72, 0x6c, - 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x69, 0x67, 0x55, 0x72, 0x6c, 0x12, 0x18, - 0x0a, 0x07, 0x6f, 0x72, 0x69, 0x67, 0x55, 0x72, 0x6c, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x54, 0x79, 0x70, 0x65, 0x22, 0x39, 0x0a, 0x0b, 0x51, + 0x51, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x4d, 0x73, 0x67, 0x12, 0x2a, 0x0a, 0x07, 0x61, 0x69, + 0x6f, 0x42, 0x6f, 0x64, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x51, 0x51, + 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x41, 0x69, 0x6f, 0x42, 0x6f, 0x64, 0x79, 0x52, 0x07, 0x61, + 0x69, 0x6f, 0x42, 0x6f, 0x64, 0x79, 0x22, 0xf3, 0x04, 0x0a, 0x0f, 0x51, 0x51, 0x57, 0x61, 0x6c, + 0x6c, 0x65, 0x74, 0x41, 0x69, 0x6f, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x65, + 0x6e, 0x64, 0x55, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x73, 0x65, 0x6e, + 0x64, 0x55, 0x69, 0x6e, 0x12, 0x28, 0x0a, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x51, 0x51, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x41, + 0x69, 0x6f, 0x45, 0x6c, 0x65, 0x6d, 0x52, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x12, 0x2c, + 0x0a, 0x08, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x10, 0x2e, 0x51, 0x51, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x41, 0x69, 0x6f, 0x45, 0x6c, + 0x65, 0x6d, 0x52, 0x08, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x12, 0x1c, 0x0a, 0x09, + 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x11, 0x52, + 0x09, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x74, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x11, 0x52, 0x0a, + 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, + 0x73, 0x65, 0x6e, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x72, 0x65, 0x73, 0x65, + 0x6e, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x6d, 0x73, 0x67, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, + 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x6d, 0x73, 0x67, 0x50, 0x72, 0x69, 0x6f, + 0x72, 0x69, 0x74, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x18, + 0x08, 0x20, 0x01, 0x28, 0x11, 0x52, 0x07, 0x72, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, + 0x0a, 0x06, 0x62, 0x69, 0x6c, 0x6c, 0x4e, 0x6f, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, + 0x62, 0x69, 0x6c, 0x6c, 0x4e, 0x6f, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x75, 0x74, 0x68, 0x4b, 0x65, + 0x79, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x61, 0x75, 0x74, 0x68, 0x4b, 0x65, 0x79, + 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x18, + 0x0b, 0x20, 0x01, 0x28, 0x11, 0x52, 0x0b, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x79, + 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, 0x18, 0x0c, 0x20, + 0x01, 0x28, 0x11, 0x52, 0x07, 0x6d, 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1e, 0x0a, 0x0a, + 0x65, 0x6e, 0x76, 0x65, 0x6c, 0x4f, 0x70, 0x65, 0x49, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x11, + 0x52, 0x0a, 0x65, 0x6e, 0x76, 0x65, 0x6c, 0x4f, 0x70, 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6e, 0x66, 0x54, 0x79, 0x70, 0x65, 0x18, 0x0f, 0x20, 0x01, + 0x28, 0x11, 0x52, 0x08, 0x63, 0x6f, 0x6e, 0x66, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, + 0x6d, 0x73, 0x67, 0x46, 0x72, 0x6f, 0x6d, 0x18, 0x10, 0x20, 0x01, 0x28, 0x11, 0x52, 0x07, 0x6d, + 0x73, 0x67, 0x46, 0x72, 0x6f, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x63, 0x42, 0x6f, 0x64, 0x79, + 0x18, 0x11, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x70, 0x63, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x14, + 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x69, + 0x6e, 0x64, 0x65, 0x78, 0x12, 0x1e, 0x0a, 0x0a, 0x72, 0x65, 0x64, 0x43, 0x68, 0x61, 0x6e, 0x6e, + 0x65, 0x6c, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x72, 0x65, 0x64, 0x43, 0x68, 0x61, + 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x67, 0x72, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x18, + 0x14, 0x20, 0x03, 0x28, 0x04, 0x52, 0x07, 0x67, 0x72, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x12, 0x1c, + 0x0a, 0x09, 0x70, 0x62, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x09, 0x70, 0x62, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x22, 0x9d, 0x05, 0x0a, + 0x0f, 0x51, 0x51, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x41, 0x69, 0x6f, 0x45, 0x6c, 0x65, 0x6d, + 0x12, 0x1e, 0x0a, 0x0a, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, + 0x12, 0x12, 0x0a, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, + 0x69, 0x63, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x75, + 0x62, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x75, + 0x62, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x12, 0x18, 0x0a, 0x07, 0x6c, 0x69, 0x6e, 0x6b, 0x55, 0x72, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x07, 0x6c, 0x69, 0x6e, 0x6b, 0x55, 0x72, 0x6c, 0x12, 0x20, 0x0a, 0x0b, 0x62, 0x6c, + 0x61, 0x63, 0x6b, 0x53, 0x74, 0x72, 0x69, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x0b, 0x62, 0x6c, 0x61, 0x63, 0x6b, 0x53, 0x74, 0x72, 0x69, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, + 0x6e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x6e, 0x6f, + 0x74, 0x69, 0x63, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x43, 0x6f, 0x6c, + 0x6f, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x43, + 0x6f, 0x6c, 0x6f, 0x72, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x75, 0x62, 0x74, 0x69, 0x74, 0x6c, 0x65, + 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x73, 0x75, 0x62, + 0x74, 0x69, 0x74, 0x6c, 0x65, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x12, 0x28, 0x0a, 0x0f, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x0b, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x72, 0x69, 0x6f, + 0x72, 0x69, 0x74, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x6a, 0x75, 0x6d, 0x70, 0x55, 0x72, 0x6c, 0x18, + 0x0c, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x6a, 0x75, 0x6d, 0x70, 0x55, 0x72, 0x6c, 0x12, 0x1c, + 0x0a, 0x09, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x49, 0x6f, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x09, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x49, 0x6f, 0x73, 0x12, 0x24, 0x0a, 0x0d, + 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x41, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x18, 0x0e, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x41, 0x6e, 0x64, 0x72, 0x6f, + 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x69, 0x63, 0x6f, 0x6e, 0x55, 0x72, 0x6c, 0x18, 0x0f, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x07, 0x69, 0x63, 0x6f, 0x6e, 0x55, 0x72, 0x6c, 0x12, 0x22, 0x0a, 0x0c, + 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x18, 0x10, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6c, 0x6f, 0x72, + 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x42, 0x67, 0x43, 0x6f, 0x6c, + 0x6f, 0x72, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x42, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x12, 0x22, 0x0a, 0x0c, 0x61, 0x69, 0x6f, 0x49, + 0x6d, 0x61, 0x67, 0x65, 0x4c, 0x65, 0x66, 0x74, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, + 0x61, 0x69, 0x6f, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x4c, 0x65, 0x66, 0x74, 0x12, 0x24, 0x0a, 0x0d, + 0x61, 0x69, 0x6f, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x69, 0x67, 0x68, 0x74, 0x18, 0x13, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x61, 0x69, 0x6f, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x69, 0x67, + 0x68, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x66, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x14, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x63, 0x66, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x1c, + 0x0a, 0x09, 0x70, 0x62, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x09, 0x70, 0x62, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x22, 0x87, 0x01, 0x0a, + 0x07, 0x52, 0x69, 0x63, 0x68, 0x4d, 0x73, 0x67, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x31, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x74, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x31, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x73, 0x67, 0x52, 0x65, 0x73, 0x49, 0x64, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x6d, 0x73, 0x67, 0x52, 0x65, 0x73, 0x49, 0x64, + 0x12, 0x12, 0x0a, 0x04, 0x72, 0x61, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, + 0x72, 0x61, 0x6e, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x65, 0x71, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x03, 0x73, 0x65, 0x71, 0x22, 0x78, 0x0a, 0x0a, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, + 0x45, 0x6c, 0x65, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x65, 0x73, 0x63, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x04, 0x64, 0x65, 0x73, 0x63, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1a, 0x0a, 0x08, + 0x65, 0x6e, 0x75, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, + 0x65, 0x6e, 0x75, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x65, 0x78, 0x74, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x65, 0x78, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x6f, + 0x75, 0x6e, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x73, 0x6f, 0x75, 0x6e, 0x64, + 0x22, 0x94, 0x01, 0x0a, 0x04, 0x54, 0x65, 0x78, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x74, 0x72, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x73, 0x74, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6c, + 0x69, 0x6e, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6c, 0x69, 0x6e, 0x6b, 0x12, + 0x1a, 0x0a, 0x08, 0x61, 0x74, 0x74, 0x72, 0x36, 0x42, 0x75, 0x66, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x08, 0x61, 0x74, 0x74, 0x72, 0x36, 0x42, 0x75, 0x66, 0x12, 0x1a, 0x0a, 0x08, 0x61, + 0x74, 0x74, 0x72, 0x37, 0x42, 0x75, 0x66, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x61, + 0x74, 0x74, 0x72, 0x37, 0x42, 0x75, 0x66, 0x12, 0x10, 0x0a, 0x03, 0x62, 0x75, 0x66, 0x18, 0x0b, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x62, 0x75, 0x66, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x62, 0x52, + 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x70, 0x62, + 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x22, 0x90, 0x02, 0x0a, 0x04, 0x41, 0x74, 0x74, 0x72, + 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x64, 0x65, 0x50, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x08, 0x63, 0x6f, 0x64, 0x65, 0x50, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, + 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, + 0x12, 0x16, 0x0a, 0x06, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x06, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x6c, 0x6f, + 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x12, 0x12, + 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x73, 0x69, + 0x7a, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x06, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x68, + 0x61, 0x72, 0x53, 0x65, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x63, 0x68, 0x61, + 0x72, 0x53, 0x65, 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x70, 0x69, 0x74, 0x63, 0x68, 0x41, 0x6e, 0x64, + 0x46, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x70, 0x69, + 0x74, 0x63, 0x68, 0x41, 0x6e, 0x64, 0x46, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x12, 0x1a, 0x0a, 0x08, + 0x66, 0x6f, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x66, 0x6f, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x44, 0x61, 0x74, 0x61, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x72, + 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x44, 0x61, 0x74, 0x61, 0x22, 0xb9, 0x05, 0x0a, 0x03, 0x50, + 0x74, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, + 0x0a, 0x06, 0x73, 0x72, 0x63, 0x55, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, + 0x73, 0x72, 0x63, 0x55, 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x55, 0x75, + 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x55, 0x75, + 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x69, 0x6c, 0x65, 0x4d, 0x64, 0x35, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x07, 0x66, 0x69, 0x6c, 0x65, 0x4d, 0x64, 0x35, 0x12, 0x1a, 0x0a, 0x08, + 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, + 0x53, 0x69, 0x7a, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, + 0x53, 0x69, 0x7a, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x12, 0x16, + 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x65, 0x49, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, + 0x66, 0x69, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x49, 0x70, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x49, 0x70, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x50, 0x6f, 0x72, 0x74, + 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x50, 0x6f, + 0x72, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x62, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x18, + 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x62, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x69, 0x64, + 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x0c, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x1a, + 0x0a, 0x08, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x08, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x69, + 0x6c, 0x65, 0x4b, 0x65, 0x79, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x66, 0x69, 0x6c, + 0x65, 0x4b, 0x65, 0x79, 0x12, 0x24, 0x0a, 0x0d, 0x6d, 0x61, 0x67, 0x69, 0x63, 0x50, 0x74, 0x74, + 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x6d, 0x61, 0x67, + 0x69, 0x63, 0x50, 0x74, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x20, 0x0a, 0x0b, 0x76, 0x6f, + 0x69, 0x63, 0x65, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x18, 0x10, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x0b, 0x76, 0x6f, 0x69, 0x63, 0x65, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x12, 0x16, 0x0a, 0x06, + 0x70, 0x74, 0x74, 0x55, 0x72, 0x6c, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x70, 0x74, + 0x74, 0x55, 0x72, 0x6c, 0x12, 0x22, 0x0a, 0x0c, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x46, 0x69, 0x6c, + 0x65, 0x4b, 0x65, 0x79, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x67, 0x72, 0x6f, 0x75, + 0x70, 0x46, 0x69, 0x6c, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, + 0x18, 0x13, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, + 0x64, 0x6f, 0x77, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, + 0x64, 0x6f, 0x77, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x62, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x18, 0x1e, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x09, 0x70, 0x62, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x12, 0x22, + 0x0a, 0x0c, 0x62, 0x79, 0x74, 0x65, 0x73, 0x50, 0x74, 0x74, 0x55, 0x72, 0x6c, 0x73, 0x18, 0x1f, + 0x20, 0x03, 0x28, 0x0c, 0x52, 0x0c, 0x62, 0x79, 0x74, 0x65, 0x73, 0x50, 0x74, 0x74, 0x55, 0x72, + 0x6c, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x46, 0x6c, + 0x61, 0x67, 0x18, 0x20, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, + 0x61, 0x64, 0x46, 0x6c, 0x61, 0x67, 0x22, 0x65, 0x0a, 0x0b, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, + 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x67, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x04, 0x67, 0x75, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, + 0x65, 0x50, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x66, 0x69, 0x6c, + 0x65, 0x50, 0x61, 0x74, 0x68, 0x12, 0x26, 0x0a, 0x0e, 0x6f, 0x6c, 0x64, 0x56, 0x65, 0x72, 0x53, + 0x65, 0x6e, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x6f, + 0x6c, 0x64, 0x56, 0x65, 0x72, 0x53, 0x65, 0x6e, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x22, 0xf0, 0x05, + 0x0a, 0x0e, 0x4e, 0x6f, 0x74, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x49, 0x6d, 0x61, 0x67, 0x65, + 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x50, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x50, 0x61, 0x74, 0x68, 0x12, 0x18, 0x0a, 0x07, + 0x66, 0x69, 0x6c, 0x65, 0x4c, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x66, + 0x69, 0x6c, 0x65, 0x4c, 0x65, 0x6e, 0x12, 0x22, 0x0a, 0x0c, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, + 0x61, 0x64, 0x50, 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x64, 0x6f, + 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x61, 0x74, 0x68, 0x12, 0x26, 0x0a, 0x0e, 0x6f, 0x6c, + 0x64, 0x56, 0x65, 0x72, 0x53, 0x65, 0x6e, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x0e, 0x6f, 0x6c, 0x64, 0x56, 0x65, 0x72, 0x53, 0x65, 0x6e, 0x64, 0x46, 0x69, + 0x6c, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x69, 0x6d, 0x67, 0x54, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x07, 0x69, 0x6d, 0x67, 0x54, 0x79, 0x70, 0x65, 0x12, 0x24, 0x0a, 0x0d, + 0x70, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x73, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x70, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x73, 0x49, 0x6d, 0x61, + 0x67, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x69, 0x63, 0x4d, 0x64, 0x35, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x06, 0x70, 0x69, 0x63, 0x4d, 0x64, 0x35, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x69, + 0x63, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x70, + 0x69, 0x63, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x69, 0x63, 0x57, + 0x69, 0x64, 0x74, 0x68, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x69, 0x63, 0x57, + 0x69, 0x64, 0x74, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x65, 0x73, 0x49, 0x64, 0x18, 0x0a, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x72, 0x65, 0x73, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x6c, + 0x61, 0x67, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x12, 0x1a, + 0x0a, 0x08, 0x74, 0x68, 0x75, 0x6d, 0x62, 0x55, 0x72, 0x6c, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x74, 0x68, 0x75, 0x6d, 0x62, 0x55, 0x72, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x6f, 0x72, + 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x6f, 0x72, + 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x69, 0x67, 0x55, 0x72, 0x6c, + 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x69, 0x67, 0x55, 0x72, 0x6c, 0x12, 0x18, + 0x0a, 0x07, 0x6f, 0x72, 0x69, 0x67, 0x55, 0x72, 0x6c, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6f, 0x72, 0x69, 0x67, 0x55, 0x72, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x62, 0x69, 0x7a, 0x54, - 0x79, 0x70, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x62, 0x69, 0x7a, 0x54, 0x79, - 0x70, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x49, 0x6e, 0x64, 0x65, - 0x78, 0x18, 0x12, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x49, - 0x6e, 0x64, 0x65, 0x78, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x49, 0x6d, - 0x61, 0x67, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x72, 0x65, 0x70, 0x65, 0x61, - 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x54, - 0x79, 0x70, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x69, 0x6d, 0x61, 0x67, 0x65, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x15, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x14, 0x0a, 0x05, 0x77, 0x69, - 0x64, 0x74, 0x68, 0x18, 0x16, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x77, 0x69, 0x64, 0x74, 0x68, - 0x12, 0x16, 0x0a, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x17, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x18, 0x18, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x19, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, - 0x73, 0x69, 0x7a, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x18, 0x1a, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, - 0x74, 0x68, 0x75, 0x6d, 0x62, 0x57, 0x69, 0x64, 0x74, 0x68, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x05, + 0x79, 0x70, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x62, 0x69, 0x7a, 0x54, 0x79, + 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x11, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, + 0x64, 0x65, 0x78, 0x18, 0x12, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, + 0x12, 0x1c, 0x0a, 0x09, 0x6f, 0x70, 0x46, 0x61, 0x63, 0x65, 0x42, 0x75, 0x66, 0x18, 0x13, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x09, 0x6f, 0x70, 0x46, 0x61, 0x63, 0x65, 0x42, 0x75, 0x66, 0x12, 0x1c, + 0x0a, 0x09, 0x6f, 0x6c, 0x64, 0x50, 0x69, 0x63, 0x4d, 0x64, 0x35, 0x18, 0x14, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x09, 0x6f, 0x6c, 0x64, 0x50, 0x69, 0x63, 0x4d, 0x64, 0x35, 0x12, 0x1e, 0x0a, 0x0a, + 0x74, 0x68, 0x75, 0x6d, 0x62, 0x57, 0x69, 0x64, 0x74, 0x68, 0x18, 0x15, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x74, 0x68, 0x75, 0x6d, 0x62, 0x57, 0x69, 0x64, 0x74, 0x68, 0x12, 0x20, 0x0a, 0x0b, - 0x74, 0x68, 0x75, 0x6d, 0x62, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x1c, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x0b, 0x74, 0x68, 0x75, 0x6d, 0x62, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x18, - 0x0a, 0x07, 0x73, 0x68, 0x6f, 0x77, 0x4c, 0x65, 0x6e, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x07, 0x73, 0x68, 0x6f, 0x77, 0x4c, 0x65, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x6f, 0x77, 0x6e, - 0x6c, 0x6f, 0x61, 0x64, 0x4c, 0x65, 0x6e, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x64, - 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x4c, 0x65, 0x6e, 0x12, 0x17, 0x0a, 0x07, 0x5f, 0x34, - 0x30, 0x30, 0x55, 0x72, 0x6c, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x34, 0x30, 0x30, - 0x55, 0x72, 0x6c, 0x12, 0x1b, 0x0a, 0x09, 0x5f, 0x34, 0x30, 0x30, 0x57, 0x69, 0x64, 0x74, 0x68, - 0x18, 0x20, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x34, 0x30, 0x30, 0x57, 0x69, 0x64, 0x74, 0x68, - 0x12, 0x1d, 0x0a, 0x0a, 0x5f, 0x34, 0x30, 0x30, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x21, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x34, 0x30, 0x30, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, - 0x1c, 0x0a, 0x09, 0x70, 0x62, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x18, 0x22, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x09, 0x70, 0x62, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x22, 0x77, 0x0a, - 0x0b, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x65, 0x61, 0x64, 0x12, 0x16, 0x0a, 0x06, - 0x70, 0x6b, 0x67, 0x4e, 0x75, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x70, 0x6b, - 0x67, 0x4e, 0x75, 0x6d, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6b, 0x67, 0x49, 0x6e, 0x64, 0x65, 0x78, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x6b, 0x67, 0x49, 0x6e, 0x64, 0x65, 0x78, - 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x76, 0x53, 0x65, 0x71, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x06, 0x64, 0x69, 0x76, 0x53, 0x65, 0x71, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x75, 0x74, 0x6f, - 0x52, 0x65, 0x70, 0x6c, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x61, 0x75, 0x74, - 0x6f, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0xe0, 0x07, 0x0a, 0x0b, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x48, 0x65, 0x61, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x72, 0x6f, 0x6d, 0x55, 0x69, - 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x66, 0x72, 0x6f, 0x6d, 0x55, 0x69, 0x6e, - 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x55, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x05, 0x74, 0x6f, 0x55, 0x69, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x73, 0x67, 0x54, 0x79, 0x70, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x6d, 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x16, 0x0a, 0x06, 0x63, 0x32, 0x63, 0x43, 0x6d, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x06, 0x63, 0x32, 0x63, 0x43, 0x6d, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x73, 0x67, 0x53, + 0x74, 0x68, 0x75, 0x6d, 0x62, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x16, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x0b, 0x74, 0x68, 0x75, 0x6d, 0x62, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x16, + 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x65, 0x49, 0x64, 0x18, 0x17, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, + 0x66, 0x69, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x68, 0x6f, 0x77, 0x4c, 0x65, + 0x6e, 0x18, 0x18, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x73, 0x68, 0x6f, 0x77, 0x4c, 0x65, 0x6e, + 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x4c, 0x65, 0x6e, 0x18, + 0x19, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x4c, + 0x65, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x62, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x18, + 0x1d, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x70, 0x62, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x22, 0xb9, 0x04, 0x0a, 0x0d, 0x4e, 0x6f, 0x74, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x46, 0x69, + 0x6c, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x10, + 0x0a, 0x03, 0x73, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x73, 0x69, 0x67, + 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x55, 0x75, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x55, 0x75, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, + 0x66, 0x69, 0x6c, 0x65, 0x4d, 0x64, 0x35, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x66, + 0x69, 0x6c, 0x65, 0x4d, 0x64, 0x35, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, + 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, + 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x12, + 0x0a, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x6e, 0x6f, + 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x12, 0x16, + 0x0a, 0x06, 0x73, 0x75, 0x62, 0x63, 0x6d, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, + 0x73, 0x75, 0x62, 0x63, 0x6d, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x43, + 0x6c, 0x6f, 0x75, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x6d, 0x69, 0x63, 0x72, + 0x6f, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x62, 0x79, 0x74, 0x65, 0x73, 0x46, + 0x69, 0x6c, 0x65, 0x55, 0x72, 0x6c, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x0d, 0x62, + 0x79, 0x74, 0x65, 0x73, 0x46, 0x69, 0x6c, 0x65, 0x55, 0x72, 0x6c, 0x73, 0x12, 0x22, 0x0a, 0x0c, + 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x46, 0x6c, 0x61, 0x67, 0x18, 0x0c, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x0c, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x46, 0x6c, 0x61, 0x67, + 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x61, 0x6e, 0x67, 0x65, 0x72, 0x45, 0x76, 0x65, 0x6c, 0x18, 0x32, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x64, 0x61, 0x6e, 0x67, 0x65, 0x72, 0x45, 0x76, 0x65, 0x6c, + 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x69, 0x66, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x33, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x08, 0x6c, 0x69, 0x66, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, + 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x34, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x0a, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, + 0x61, 0x62, 0x73, 0x46, 0x69, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x35, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x0b, 0x61, 0x62, 0x73, 0x46, 0x69, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1e, + 0x0a, 0x0a, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x18, 0x36, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x0a, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1e, + 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x37, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1c, + 0x0a, 0x09, 0x70, 0x62, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x18, 0x38, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x09, 0x70, 0x62, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x22, 0x45, 0x0a, 0x09, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x45, 0x6c, 0x65, 0x6d, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x6c, 0x65, + 0x6d, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x65, 0x6c, 0x65, + 0x6d, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x65, 0x6c, 0x65, 0x6d, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x65, 0x6c, 0x65, 0x6d, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x22, 0xe3, 0x02, 0x0a, 0x09, 0x45, 0x78, 0x74, 0x72, 0x61, 0x49, 0x6e, 0x66, + 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x69, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x04, 0x6e, 0x69, 0x63, 0x6b, 0x12, 0x1c, 0x0a, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x61, + 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x43, + 0x61, 0x72, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6c, 0x61, + 0x67, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x12, + 0x1c, 0x0a, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x61, 0x73, 0x6b, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x61, 0x73, 0x6b, 0x12, 0x1c, 0x0a, + 0x09, 0x6d, 0x73, 0x67, 0x54, 0x61, 0x69, 0x6c, 0x49, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x09, 0x6d, 0x73, 0x67, 0x54, 0x61, 0x69, 0x6c, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x73, + 0x65, 0x6e, 0x64, 0x65, 0x72, 0x54, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x0b, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x54, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x1a, 0x0a, + 0x08, 0x61, 0x70, 0x6e, 0x73, 0x54, 0x69, 0x70, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x08, 0x61, 0x70, 0x6e, 0x73, 0x54, 0x69, 0x70, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x6e, + 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x75, 0x69, 0x6e, 0x12, 0x22, 0x0a, 0x0c, 0x6d, + 0x73, 0x67, 0x53, 0x74, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x18, 0x0a, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x0c, 0x6d, 0x73, 0x67, 0x53, 0x74, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x12, + 0x24, 0x0a, 0x0d, 0x61, 0x70, 0x6e, 0x73, 0x53, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x79, 0x70, 0x65, + 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x61, 0x70, 0x6e, 0x73, 0x53, 0x6f, 0x75, 0x6e, + 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x6e, 0x65, 0x77, 0x47, 0x72, 0x6f, 0x75, + 0x70, 0x46, 0x6c, 0x61, 0x67, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x6e, 0x65, 0x77, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x46, 0x6c, 0x61, 0x67, 0x22, 0xa1, 0x02, 0x0a, 0x09, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, + 0x16, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x65, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x06, 0x66, 0x69, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x62, 0x61, 0x74, 0x63, 0x68, + 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x62, 0x61, 0x74, 0x63, 0x68, 0x49, + 0x64, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x69, 0x6c, 0x65, 0x4b, 0x65, 0x79, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x07, 0x66, 0x69, 0x6c, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6d, + 0x61, 0x72, 0x6b, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x6d, 0x61, 0x72, 0x6b, 0x12, + 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x62, + 0x61, 0x74, 0x63, 0x68, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x0b, 0x62, 0x61, 0x74, 0x63, 0x68, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x12, 0x20, 0x0a, + 0x0b, 0x66, 0x65, 0x65, 0x64, 0x4d, 0x73, 0x67, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x0b, 0x66, 0x65, 0x65, 0x64, 0x4d, 0x73, 0x67, 0x54, 0x69, 0x6d, 0x65, 0x12, + 0x1c, 0x0a, 0x09, 0x70, 0x62, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x18, 0x0a, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x09, 0x70, 0x62, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x22, 0xdf, 0x01, + 0x0a, 0x15, 0x41, 0x6e, 0x6f, 0x6e, 0x79, 0x6d, 0x6f, 0x75, 0x73, 0x47, 0x72, 0x6f, 0x75, 0x70, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x16, 0x0a, + 0x06, 0x61, 0x6e, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x61, + 0x6e, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x6e, 0x6f, 0x6e, 0x4e, 0x69, 0x63, + 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x61, 0x6e, 0x6f, 0x6e, 0x4e, 0x69, 0x63, + 0x6b, 0x12, 0x22, 0x0a, 0x0c, 0x68, 0x65, 0x61, 0x64, 0x50, 0x6f, 0x72, 0x74, 0x72, 0x61, 0x69, + 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x68, 0x65, 0x61, 0x64, 0x50, 0x6f, 0x72, + 0x74, 0x72, 0x61, 0x69, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x54, + 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, + 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x62, 0x75, 0x62, 0x62, 0x6c, 0x65, 0x49, + 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x62, 0x75, 0x62, 0x62, 0x6c, 0x65, 0x49, + 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x61, 0x6e, 0x6b, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x72, 0x61, 0x6e, 0x6b, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, + 0xc9, 0x06, 0x0a, 0x09, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x1a, 0x0a, + 0x08, 0x66, 0x69, 0x6c, 0x65, 0x55, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x08, 0x66, 0x69, 0x6c, 0x65, 0x55, 0x75, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x69, 0x6c, + 0x65, 0x4d, 0x64, 0x35, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x66, 0x69, 0x6c, 0x65, + 0x4d, 0x64, 0x35, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, + 0x1e, 0x0a, 0x0a, 0x66, 0x69, 0x6c, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x0a, 0x66, 0x69, 0x6c, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, + 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x66, + 0x69, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x66, + 0x69, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x74, 0x68, 0x75, 0x6d, 0x62, + 0x57, 0x69, 0x64, 0x74, 0x68, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x74, 0x68, 0x75, + 0x6d, 0x62, 0x57, 0x69, 0x64, 0x74, 0x68, 0x12, 0x20, 0x0a, 0x0b, 0x74, 0x68, 0x75, 0x6d, 0x62, + 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x74, 0x68, + 0x75, 0x6d, 0x62, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x74, 0x68, 0x75, + 0x6d, 0x62, 0x46, 0x69, 0x6c, 0x65, 0x4d, 0x64, 0x35, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x0c, 0x74, 0x68, 0x75, 0x6d, 0x62, 0x46, 0x69, 0x6c, 0x65, 0x4d, 0x64, 0x35, 0x12, 0x16, 0x0a, + 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x74, 0x68, 0x75, 0x6d, 0x62, 0x46, 0x69, + 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x74, 0x68, + 0x75, 0x6d, 0x62, 0x46, 0x69, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x62, + 0x75, 0x73, 0x69, 0x54, 0x79, 0x70, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x62, + 0x75, 0x73, 0x69, 0x54, 0x79, 0x70, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x66, 0x72, 0x6f, 0x6d, 0x43, + 0x68, 0x61, 0x74, 0x54, 0x79, 0x70, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x66, + 0x72, 0x6f, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x74, + 0x6f, 0x43, 0x68, 0x61, 0x74, 0x54, 0x79, 0x70, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x0a, 0x74, 0x6f, 0x43, 0x68, 0x61, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x36, 0x0a, 0x16, 0x62, + 0x6f, 0x6f, 0x6c, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, + 0x73, 0x73, 0x69, 0x76, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x08, 0x52, 0x16, 0x62, 0x6f, 0x6f, + 0x6c, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, + 0x69, 0x76, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x57, 0x69, 0x64, 0x74, 0x68, + 0x18, 0x10, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x57, 0x69, 0x64, 0x74, + 0x68, 0x12, 0x1e, 0x0a, 0x0a, 0x66, 0x69, 0x6c, 0x65, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, + 0x11, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x66, 0x69, 0x6c, 0x65, 0x48, 0x65, 0x69, 0x67, 0x68, + 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x75, 0x62, 0x42, 0x75, 0x73, 0x69, 0x54, 0x79, 0x70, 0x65, + 0x18, 0x12, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x73, 0x75, 0x62, 0x42, 0x75, 0x73, 0x69, 0x54, + 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x76, 0x69, 0x64, 0x65, 0x6f, 0x41, 0x74, 0x74, 0x72, + 0x18, 0x13, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x76, 0x69, 0x64, 0x65, 0x6f, 0x41, 0x74, 0x74, + 0x72, 0x12, 0x2e, 0x0a, 0x12, 0x62, 0x79, 0x74, 0x65, 0x73, 0x54, 0x68, 0x75, 0x6d, 0x62, 0x46, + 0x69, 0x6c, 0x65, 0x55, 0x72, 0x6c, 0x73, 0x18, 0x14, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x12, 0x62, + 0x79, 0x74, 0x65, 0x73, 0x54, 0x68, 0x75, 0x6d, 0x62, 0x46, 0x69, 0x6c, 0x65, 0x55, 0x72, 0x6c, + 0x73, 0x12, 0x2e, 0x0a, 0x12, 0x62, 0x79, 0x74, 0x65, 0x73, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x46, + 0x69, 0x6c, 0x65, 0x55, 0x72, 0x6c, 0x73, 0x18, 0x15, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x12, 0x62, + 0x79, 0x74, 0x65, 0x73, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x46, 0x69, 0x6c, 0x65, 0x55, 0x72, 0x6c, + 0x73, 0x12, 0x2c, 0x0a, 0x11, 0x74, 0x68, 0x75, 0x6d, 0x62, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, + 0x61, 0x64, 0x46, 0x6c, 0x61, 0x67, 0x18, 0x16, 0x20, 0x01, 0x28, 0x05, 0x52, 0x11, 0x74, 0x68, + 0x75, 0x6d, 0x62, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x46, 0x6c, 0x61, 0x67, 0x12, + 0x2c, 0x0a, 0x11, 0x76, 0x69, 0x64, 0x65, 0x6f, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, + 0x46, 0x6c, 0x61, 0x67, 0x18, 0x17, 0x20, 0x01, 0x28, 0x05, 0x52, 0x11, 0x76, 0x69, 0x64, 0x65, + 0x6f, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x1c, 0x0a, + 0x09, 0x70, 0x62, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x09, 0x70, 0x62, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x22, 0xa2, 0x02, 0x0a, 0x09, + 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, 0x73, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x6f, 0x72, 0x69, + 0x67, 0x53, 0x65, 0x71, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x05, 0x52, 0x08, 0x6f, 0x72, 0x69, + 0x67, 0x53, 0x65, 0x71, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x55, + 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, + 0x55, 0x69, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x12, 0x1b, 0x0a, 0x05, 0x65, + 0x6c, 0x65, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x45, 0x6c, 0x65, + 0x6d, 0x52, 0x05, 0x65, 0x6c, 0x65, 0x6d, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, + 0x72, 0x69, 0x63, 0x68, 0x4d, 0x73, 0x67, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x72, + 0x69, 0x63, 0x68, 0x4d, 0x73, 0x67, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x62, 0x52, 0x65, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x70, 0x62, 0x52, 0x65, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x72, 0x63, 0x4d, 0x73, 0x67, 0x18, 0x09, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x73, 0x72, 0x63, 0x4d, 0x73, 0x67, 0x12, 0x14, 0x0a, 0x05, + 0x74, 0x6f, 0x55, 0x69, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x74, 0x6f, 0x55, + 0x69, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x72, 0x6f, 0x6f, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x18, + 0x0b, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x74, 0x72, 0x6f, 0x6f, 0x70, 0x4e, 0x61, 0x6d, 0x65, + 0x22, 0x40, 0x0a, 0x04, 0x46, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, + 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x10, + 0x0a, 0x03, 0x6f, 0x6c, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x6f, 0x6c, 0x64, + 0x12, 0x10, 0x0a, 0x03, 0x62, 0x75, 0x66, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x62, + 0x75, 0x66, 0x22, 0x3e, 0x0a, 0x0c, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x41, 0x70, 0x70, 0x45, 0x6c, + 0x65, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x73, 0x67, 0x52, 0x65, 0x73, + 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x6d, 0x73, 0x67, 0x52, 0x65, 0x73, + 0x69, 0x64, 0x22, 0x99, 0x07, 0x0a, 0x0a, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x46, 0x61, 0x63, + 0x65, 0x12, 0x12, 0x0a, 0x04, 0x67, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x04, 0x67, 0x75, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x50, 0x61, 0x74, + 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x50, 0x61, 0x74, + 0x68, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x12, 0x16, 0x0a, + 0x06, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x62, + 0x75, 0x66, 0x66, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x6f, 0x6c, 0x64, + 0x44, 0x61, 0x74, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x6f, 0x6c, 0x64, 0x44, + 0x61, 0x74, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x65, 0x49, 0x64, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x06, 0x66, 0x69, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x70, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x70, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x50, 0x6f, 0x72, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x54, + 0x79, 0x70, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x54, + 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x66, 0x75, 0x6c, 0x18, 0x0c, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x06, 0x75, 0x73, 0x65, 0x66, 0x75, 0x6c, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x64, 0x35, + 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x6d, 0x64, 0x35, 0x12, 0x1a, 0x0a, 0x08, 0x74, + 0x68, 0x75, 0x6d, 0x62, 0x55, 0x72, 0x6c, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, + 0x68, 0x75, 0x6d, 0x62, 0x55, 0x72, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x69, 0x67, 0x55, 0x72, + 0x6c, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x69, 0x67, 0x55, 0x72, 0x6c, 0x12, + 0x18, 0x0a, 0x07, 0x6f, 0x72, 0x69, 0x67, 0x55, 0x72, 0x6c, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x6f, 0x72, 0x69, 0x67, 0x55, 0x72, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x62, 0x69, 0x7a, + 0x54, 0x79, 0x70, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x62, 0x69, 0x7a, 0x54, + 0x79, 0x70, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x49, 0x6e, 0x64, + 0x65, 0x78, 0x18, 0x12, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, + 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x49, + 0x6d, 0x61, 0x67, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x72, 0x65, 0x70, 0x65, + 0x61, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6d, 0x61, 0x67, 0x65, + 0x54, 0x79, 0x70, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x69, 0x6d, 0x61, 0x67, + 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x15, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x14, 0x0a, 0x05, 0x77, + 0x69, 0x64, 0x74, 0x68, 0x18, 0x16, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x77, 0x69, 0x64, 0x74, + 0x68, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x17, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x18, 0x18, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x19, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x18, + 0x1a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x12, 0x1e, 0x0a, + 0x0a, 0x74, 0x68, 0x75, 0x6d, 0x62, 0x57, 0x69, 0x64, 0x74, 0x68, 0x18, 0x1b, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x0a, 0x74, 0x68, 0x75, 0x6d, 0x62, 0x57, 0x69, 0x64, 0x74, 0x68, 0x12, 0x20, 0x0a, + 0x0b, 0x74, 0x68, 0x75, 0x6d, 0x62, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x1c, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x0b, 0x74, 0x68, 0x75, 0x6d, 0x62, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, + 0x18, 0x0a, 0x07, 0x73, 0x68, 0x6f, 0x77, 0x4c, 0x65, 0x6e, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x07, 0x73, 0x68, 0x6f, 0x77, 0x4c, 0x65, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x6f, 0x77, + 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x4c, 0x65, 0x6e, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, + 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x4c, 0x65, 0x6e, 0x12, 0x17, 0x0a, 0x07, 0x5f, + 0x34, 0x30, 0x30, 0x55, 0x72, 0x6c, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x34, 0x30, + 0x30, 0x55, 0x72, 0x6c, 0x12, 0x1b, 0x0a, 0x09, 0x5f, 0x34, 0x30, 0x30, 0x57, 0x69, 0x64, 0x74, + 0x68, 0x18, 0x20, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x34, 0x30, 0x30, 0x57, 0x69, 0x64, 0x74, + 0x68, 0x12, 0x1d, 0x0a, 0x0a, 0x5f, 0x34, 0x30, 0x30, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, + 0x21, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x34, 0x30, 0x30, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, + 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x62, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x18, 0x22, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x09, 0x70, 0x62, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x22, 0x77, + 0x0a, 0x0b, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x65, 0x61, 0x64, 0x12, 0x16, 0x0a, + 0x06, 0x70, 0x6b, 0x67, 0x4e, 0x75, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x70, + 0x6b, 0x67, 0x4e, 0x75, 0x6d, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6b, 0x67, 0x49, 0x6e, 0x64, 0x65, + 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x6b, 0x67, 0x49, 0x6e, 0x64, 0x65, + 0x78, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x76, 0x53, 0x65, 0x71, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x06, 0x64, 0x69, 0x76, 0x53, 0x65, 0x71, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x75, 0x74, + 0x6f, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x61, 0x75, + 0x74, 0x6f, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0xe0, 0x07, 0x0a, 0x0b, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x48, 0x65, 0x61, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x72, 0x6f, 0x6d, 0x55, + 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x66, 0x72, 0x6f, 0x6d, 0x55, 0x69, + 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x55, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x05, 0x74, 0x6f, 0x55, 0x69, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x73, 0x67, 0x54, 0x79, + 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x6d, 0x73, 0x67, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x32, 0x63, 0x43, 0x6d, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x06, 0x63, 0x32, 0x63, 0x43, 0x6d, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x73, 0x67, + 0x53, 0x65, 0x71, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6d, 0x73, 0x67, 0x53, 0x65, + 0x71, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x73, 0x67, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x07, 0x6d, 0x73, 0x67, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6d, + 0x73, 0x67, 0x55, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x6d, 0x73, 0x67, + 0x55, 0x69, 0x64, 0x12, 0x39, 0x0a, 0x0d, 0x63, 0x32, 0x63, 0x54, 0x6d, 0x70, 0x4d, 0x73, 0x67, + 0x48, 0x65, 0x61, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x43, 0x32, 0x43, + 0x54, 0x65, 0x6d, 0x70, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x65, 0x61, 0x64, 0x52, + 0x0d, 0x63, 0x32, 0x63, 0x54, 0x6d, 0x70, 0x4d, 0x73, 0x67, 0x48, 0x65, 0x61, 0x64, 0x12, 0x28, + 0x0a, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x09, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x0a, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x09, 0x67, + 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1c, 0x0a, 0x09, 0x66, 0x72, 0x6f, 0x6d, + 0x41, 0x70, 0x70, 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x66, 0x72, 0x6f, + 0x6d, 0x41, 0x70, 0x70, 0x69, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x66, 0x72, 0x6f, 0x6d, 0x49, 0x6e, + 0x73, 0x74, 0x69, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x66, 0x72, 0x6f, 0x6d, + 0x49, 0x6e, 0x73, 0x74, 0x69, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x41, 0x63, + 0x74, 0x69, 0x76, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x75, 0x73, 0x65, 0x72, + 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x2e, 0x0a, 0x0b, 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, + 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x44, 0x69, + 0x73, 0x63, 0x75, 0x73, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x63, 0x75, + 0x73, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x72, 0x6f, 0x6d, 0x4e, 0x69, + 0x63, 0x6b, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x72, 0x6f, 0x6d, 0x4e, 0x69, + 0x63, 0x6b, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x75, 0x74, 0x68, 0x55, 0x69, 0x6e, 0x18, 0x0f, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x07, 0x61, 0x75, 0x74, 0x68, 0x55, 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, + 0x61, 0x75, 0x74, 0x68, 0x4e, 0x69, 0x63, 0x6b, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x61, 0x75, 0x74, 0x68, 0x4e, 0x69, 0x63, 0x6b, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x73, 0x67, 0x46, + 0x6c, 0x61, 0x67, 0x18, 0x11, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x6d, 0x73, 0x67, 0x46, 0x6c, + 0x61, 0x67, 0x12, 0x1e, 0x0a, 0x0a, 0x61, 0x75, 0x74, 0x68, 0x52, 0x65, 0x6d, 0x61, 0x72, 0x6b, + 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x75, 0x74, 0x68, 0x52, 0x65, 0x6d, 0x61, + 0x72, 0x6b, 0x12, 0x1c, 0x0a, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x18, + 0x13, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x4e, 0x61, 0x6d, 0x65, + 0x12, 0x37, 0x0a, 0x0e, 0x6d, 0x75, 0x74, 0x69, 0x6c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x48, 0x65, + 0x61, 0x64, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x4d, 0x75, 0x74, 0x69, 0x6c, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x48, 0x65, 0x61, 0x64, 0x52, 0x0e, 0x6d, 0x75, 0x74, 0x69, 0x6c, + 0x74, 0x72, 0x61, 0x6e, 0x73, 0x48, 0x65, 0x61, 0x64, 0x12, 0x2b, 0x0a, 0x0b, 0x6d, 0x73, 0x67, + 0x49, 0x6e, 0x73, 0x74, 0x43, 0x74, 0x72, 0x6c, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x09, + 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x43, 0x74, 0x72, 0x6c, 0x52, 0x0b, 0x6d, 0x73, 0x67, 0x49, 0x6e, + 0x73, 0x74, 0x43, 0x74, 0x72, 0x6c, 0x12, 0x3e, 0x0a, 0x1a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, + 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x65, 0x6e, 0x64, + 0x46, 0x6c, 0x61, 0x67, 0x18, 0x16, 0x20, 0x01, 0x28, 0x05, 0x52, 0x1a, 0x70, 0x75, 0x62, 0x6c, + 0x69, 0x63, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x65, + 0x6e, 0x64, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x2a, 0x0a, 0x10, 0x77, 0x73, 0x65, 0x71, 0x49, 0x6e, + 0x43, 0x32, 0x63, 0x4d, 0x73, 0x67, 0x68, 0x65, 0x61, 0x64, 0x18, 0x17, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x10, 0x77, 0x73, 0x65, 0x71, 0x49, 0x6e, 0x43, 0x32, 0x63, 0x4d, 0x73, 0x67, 0x68, 0x65, + 0x61, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x70, 0x69, 0x64, 0x18, 0x18, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x04, 0x63, 0x70, 0x69, 0x64, 0x12, 0x3a, 0x0a, 0x0f, 0x65, 0x78, 0x74, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x4b, 0x65, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x10, 0x2e, 0x45, 0x78, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4b, 0x65, 0x79, 0x49, 0x6e, 0x66, + 0x6f, 0x52, 0x0f, 0x65, 0x78, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4b, 0x65, 0x79, 0x49, 0x6e, + 0x66, 0x6f, 0x12, 0x30, 0x0a, 0x13, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x43, 0x6f, 0x6d, 0x70, 0x61, + 0x74, 0x69, 0x62, 0x6c, 0x65, 0x54, 0x65, 0x78, 0x74, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x13, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, 0x6c, 0x65, + 0x54, 0x65, 0x78, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x75, 0x74, 0x68, 0x53, 0x65, 0x78, 0x18, + 0x1b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x61, 0x75, 0x74, 0x68, 0x53, 0x65, 0x78, 0x12, 0x1a, + 0x0a, 0x08, 0x69, 0x73, 0x53, 0x72, 0x63, 0x4d, 0x73, 0x67, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x08, 0x69, 0x73, 0x53, 0x72, 0x63, 0x4d, 0x73, 0x67, 0x22, 0x8b, 0x02, 0x0a, 0x09, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1c, 0x0a, 0x09, 0x67, 0x72, 0x6f, 0x75, + 0x70, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x67, 0x72, 0x6f, + 0x75, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x54, + 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, + 0x54, 0x79, 0x70, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x66, + 0x6f, 0x53, 0x65, 0x71, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x67, 0x72, 0x6f, 0x75, + 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x53, 0x65, 0x71, 0x12, 0x1c, 0x0a, 0x09, 0x67, 0x72, 0x6f, 0x75, + 0x70, 0x43, 0x61, 0x72, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x72, 0x6f, + 0x75, 0x70, 0x43, 0x61, 0x72, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x52, + 0x61, 0x6e, 0x6b, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, + 0x52, 0x61, 0x6e, 0x6b, 0x12, 0x1e, 0x0a, 0x0a, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x4c, 0x65, 0x76, + 0x65, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x4c, + 0x65, 0x76, 0x65, 0x6c, 0x12, 0x24, 0x0a, 0x0d, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x61, 0x72, + 0x64, 0x54, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x67, 0x72, 0x6f, + 0x75, 0x70, 0x43, 0x61, 0x72, 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x67, 0x72, + 0x6f, 0x75, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x67, + 0x72, 0x6f, 0x75, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xbf, 0x01, 0x0a, 0x0b, 0x44, 0x69, 0x73, + 0x63, 0x75, 0x73, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x69, 0x73, 0x63, + 0x75, 0x73, 0x73, 0x55, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x64, 0x69, + 0x73, 0x63, 0x75, 0x73, 0x73, 0x55, 0x69, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x69, 0x73, 0x63, + 0x75, 0x73, 0x73, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x64, + 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x54, 0x79, 0x70, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x64, 0x69, + 0x73, 0x63, 0x75, 0x73, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x53, 0x65, 0x71, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x0e, 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x53, + 0x65, 0x71, 0x12, 0x24, 0x0a, 0x0d, 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x52, 0x65, 0x6d, + 0x61, 0x72, 0x6b, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x64, 0x69, 0x73, 0x63, 0x75, + 0x73, 0x73, 0x52, 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x69, 0x73, 0x63, + 0x75, 0x73, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x64, + 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x3e, 0x0a, 0x0e, 0x4d, 0x75, + 0x74, 0x69, 0x6c, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x48, 0x65, 0x61, 0x64, 0x12, 0x16, 0x0a, 0x06, + 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x73, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x73, 0x67, 0x49, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x05, 0x6d, 0x73, 0x67, 0x49, 0x64, 0x22, 0xd2, 0x02, 0x0a, 0x12, 0x43, + 0x32, 0x43, 0x54, 0x65, 0x6d, 0x70, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x65, 0x61, + 0x64, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x32, 0x63, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x07, 0x63, 0x32, 0x63, 0x54, 0x79, 0x70, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, + 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x55, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x55, 0x69, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x67, 0x72, 0x6f, + 0x75, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x67, 0x72, + 0x6f, 0x75, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x69, 0x67, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x73, 0x69, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x69, 0x67, + 0x54, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x73, 0x69, 0x67, 0x54, + 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x66, 0x72, 0x6f, 0x6d, 0x50, 0x68, 0x6f, 0x6e, 0x65, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x72, 0x6f, 0x6d, 0x50, 0x68, 0x6f, 0x6e, + 0x65, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x6f, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x74, 0x6f, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x6c, + 0x6f, 0x63, 0x6b, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x0b, 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x12, 0x24, 0x0a, + 0x0d, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x6c, 0x61, 0x67, 0x18, 0x0a, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x46, + 0x6c, 0x61, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x18, + 0x0b, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x22, + 0x9b, 0x01, 0x0a, 0x08, 0x49, 0x6e, 0x73, 0x74, 0x43, 0x74, 0x72, 0x6c, 0x12, 0x2f, 0x0a, 0x0d, + 0x6d, 0x73, 0x67, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x6f, 0x49, 0x6e, 0x73, 0x74, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x09, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0d, + 0x6d, 0x73, 0x67, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x6f, 0x49, 0x6e, 0x73, 0x74, 0x12, 0x31, 0x0a, + 0x0e, 0x6d, 0x73, 0x67, 0x45, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x09, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x49, 0x6e, 0x66, 0x6f, + 0x52, 0x0e, 0x6d, 0x73, 0x67, 0x45, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x49, 0x6e, 0x73, 0x74, + 0x12, 0x2b, 0x0a, 0x0b, 0x6d, 0x73, 0x67, 0x46, 0x72, 0x6f, 0x6d, 0x49, 0x6e, 0x73, 0x74, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x09, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x49, 0x6e, 0x66, 0x6f, + 0x52, 0x0b, 0x6d, 0x73, 0x67, 0x46, 0x72, 0x6f, 0x6d, 0x49, 0x6e, 0x73, 0x74, 0x22, 0x7e, 0x0a, + 0x08, 0x49, 0x6e, 0x73, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x70, 0x70, + 0x70, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x61, 0x70, 0x70, 0x70, 0x69, + 0x64, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x6e, 0x73, 0x74, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x06, 0x69, 0x6e, 0x73, 0x74, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x26, 0x0a, 0x0e, 0x65, 0x6e, 0x75, 0x6d, 0x44, 0x65, 0x76, + 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x65, + 0x6e, 0x75, 0x6d, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x22, 0x49, 0x0a, + 0x0f, 0x45, 0x78, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4b, 0x65, 0x79, 0x49, 0x6e, 0x66, 0x6f, + 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x75, 0x72, 0x4d, 0x61, 0x78, 0x53, 0x65, 0x71, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x09, 0x63, 0x75, 0x72, 0x4d, 0x61, 0x78, 0x53, 0x65, 0x71, 0x12, 0x18, + 0x0a, 0x07, 0x63, 0x75, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x07, 0x63, 0x75, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x22, 0xe2, 0x01, 0x0a, 0x0a, 0x53, 0x79, 0x6e, + 0x63, 0x43, 0x6f, 0x6f, 0x6b, 0x69, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x6d, 0x65, 0x31, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x74, 0x69, 0x6d, 0x65, 0x31, 0x12, 0x12, 0x0a, + 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x74, 0x69, 0x6d, + 0x65, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x61, 0x6e, 0x31, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x04, 0x72, 0x61, 0x6e, 0x31, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x61, 0x6e, 0x32, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x04, 0x72, 0x61, 0x6e, 0x32, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, 0x6e, + 0x73, 0x74, 0x31, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x73, 0x74, + 0x31, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x32, 0x18, 0x0b, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x32, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, 0x6e, + 0x73, 0x74, 0x33, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x73, 0x74, + 0x33, 0x12, 0x22, 0x0a, 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x79, 0x6e, 0x63, 0x54, 0x69, 0x6d, + 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x79, 0x6e, + 0x63, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x34, 0x18, + 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x34, 0x22, 0x8e, 0x03, + 0x0a, 0x0c, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x4d, 0x73, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x18, + 0x0a, 0x07, 0x66, 0x72, 0x6f, 0x6d, 0x55, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x07, 0x66, 0x72, 0x6f, 0x6d, 0x55, 0x69, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x55, 0x69, + 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x74, 0x6f, 0x55, 0x69, 0x6e, 0x12, 0x18, + 0x0a, 0x07, 0x6d, 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x07, 0x6d, 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x6d, 0x73, 0x67, 0x53, + 0x75, 0x62, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x6d, 0x73, + 0x67, 0x53, 0x75, 0x62, 0x74, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x73, 0x67, 0x53, 0x65, 0x71, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6d, 0x73, 0x67, 0x53, 0x65, 0x71, - 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x73, 0x67, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x07, 0x6d, 0x73, 0x67, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x73, - 0x67, 0x55, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x6d, 0x73, 0x67, 0x55, - 0x69, 0x64, 0x12, 0x39, 0x0a, 0x0d, 0x63, 0x32, 0x63, 0x54, 0x6d, 0x70, 0x4d, 0x73, 0x67, 0x48, - 0x65, 0x61, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x43, 0x32, 0x43, 0x54, - 0x65, 0x6d, 0x70, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x65, 0x61, 0x64, 0x52, 0x0d, - 0x63, 0x32, 0x63, 0x54, 0x6d, 0x70, 0x4d, 0x73, 0x67, 0x48, 0x65, 0x61, 0x64, 0x12, 0x28, 0x0a, - 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x0a, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x09, 0x67, 0x72, - 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1c, 0x0a, 0x09, 0x66, 0x72, 0x6f, 0x6d, 0x41, - 0x70, 0x70, 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x66, 0x72, 0x6f, 0x6d, - 0x41, 0x70, 0x70, 0x69, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x66, 0x72, 0x6f, 0x6d, 0x49, 0x6e, 0x73, - 0x74, 0x69, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x66, 0x72, 0x6f, 0x6d, 0x49, - 0x6e, 0x73, 0x74, 0x69, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x41, 0x63, 0x74, - 0x69, 0x76, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x41, - 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x2e, 0x0a, 0x0b, 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, - 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x44, 0x69, 0x73, - 0x63, 0x75, 0x73, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, - 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x72, 0x6f, 0x6d, 0x4e, 0x69, 0x63, - 0x6b, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x72, 0x6f, 0x6d, 0x4e, 0x69, 0x63, - 0x6b, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x75, 0x74, 0x68, 0x55, 0x69, 0x6e, 0x18, 0x0f, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x07, 0x61, 0x75, 0x74, 0x68, 0x55, 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x61, - 0x75, 0x74, 0x68, 0x4e, 0x69, 0x63, 0x6b, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x61, - 0x75, 0x74, 0x68, 0x4e, 0x69, 0x63, 0x6b, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x73, 0x67, 0x46, 0x6c, - 0x61, 0x67, 0x18, 0x11, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x6d, 0x73, 0x67, 0x46, 0x6c, 0x61, - 0x67, 0x12, 0x1e, 0x0a, 0x0a, 0x61, 0x75, 0x74, 0x68, 0x52, 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x18, - 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x75, 0x74, 0x68, 0x52, 0x65, 0x6d, 0x61, 0x72, - 0x6b, 0x12, 0x1c, 0x0a, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x13, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, - 0x37, 0x0a, 0x0e, 0x6d, 0x75, 0x74, 0x69, 0x6c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x48, 0x65, 0x61, - 0x64, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x4d, 0x75, 0x74, 0x69, 0x6c, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x48, 0x65, 0x61, 0x64, 0x52, 0x0e, 0x6d, 0x75, 0x74, 0x69, 0x6c, 0x74, - 0x72, 0x61, 0x6e, 0x73, 0x48, 0x65, 0x61, 0x64, 0x12, 0x2b, 0x0a, 0x0b, 0x6d, 0x73, 0x67, 0x49, - 0x6e, 0x73, 0x74, 0x43, 0x74, 0x72, 0x6c, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x09, 0x2e, - 0x49, 0x6e, 0x73, 0x74, 0x43, 0x74, 0x72, 0x6c, 0x52, 0x0b, 0x6d, 0x73, 0x67, 0x49, 0x6e, 0x73, - 0x74, 0x43, 0x74, 0x72, 0x6c, 0x12, 0x3e, 0x0a, 0x1a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x41, - 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x65, 0x6e, 0x64, 0x46, - 0x6c, 0x61, 0x67, 0x18, 0x16, 0x20, 0x01, 0x28, 0x05, 0x52, 0x1a, 0x70, 0x75, 0x62, 0x6c, 0x69, - 0x63, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x65, 0x6e, - 0x64, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x2a, 0x0a, 0x10, 0x77, 0x73, 0x65, 0x71, 0x49, 0x6e, 0x43, - 0x32, 0x63, 0x4d, 0x73, 0x67, 0x68, 0x65, 0x61, 0x64, 0x18, 0x17, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x10, 0x77, 0x73, 0x65, 0x71, 0x49, 0x6e, 0x43, 0x32, 0x63, 0x4d, 0x73, 0x67, 0x68, 0x65, 0x61, - 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x70, 0x69, 0x64, 0x18, 0x18, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x04, 0x63, 0x70, 0x69, 0x64, 0x12, 0x3a, 0x0a, 0x0f, 0x65, 0x78, 0x74, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x4b, 0x65, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, - 0x2e, 0x45, 0x78, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4b, 0x65, 0x79, 0x49, 0x6e, 0x66, 0x6f, - 0x52, 0x0f, 0x65, 0x78, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4b, 0x65, 0x79, 0x49, 0x6e, 0x66, - 0x6f, 0x12, 0x30, 0x0a, 0x13, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x74, - 0x69, 0x62, 0x6c, 0x65, 0x54, 0x65, 0x78, 0x74, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, - 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, 0x6c, 0x65, 0x54, - 0x65, 0x78, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x75, 0x74, 0x68, 0x53, 0x65, 0x78, 0x18, 0x1b, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x61, 0x75, 0x74, 0x68, 0x53, 0x65, 0x78, 0x12, 0x1a, 0x0a, - 0x08, 0x69, 0x73, 0x53, 0x72, 0x63, 0x4d, 0x73, 0x67, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x08, 0x69, 0x73, 0x53, 0x72, 0x63, 0x4d, 0x73, 0x67, 0x22, 0x8b, 0x02, 0x0a, 0x09, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1c, 0x0a, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, - 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x54, 0x79, - 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x54, - 0x79, 0x70, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x66, 0x6f, - 0x53, 0x65, 0x71, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x67, 0x72, 0x6f, 0x75, 0x70, - 0x49, 0x6e, 0x66, 0x6f, 0x53, 0x65, 0x71, 0x12, 0x1c, 0x0a, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, - 0x43, 0x61, 0x72, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x43, 0x61, 0x72, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x61, - 0x6e, 0x6b, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x52, - 0x61, 0x6e, 0x6b, 0x12, 0x1e, 0x0a, 0x0a, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x4c, 0x65, 0x76, 0x65, - 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x4c, 0x65, - 0x76, 0x65, 0x6c, 0x12, 0x24, 0x0a, 0x0d, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x61, 0x72, 0x64, - 0x54, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x43, 0x61, 0x72, 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x67, 0x72, 0x6f, - 0x75, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x67, 0x72, - 0x6f, 0x75, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xbf, 0x01, 0x0a, 0x0b, 0x44, 0x69, 0x73, 0x63, - 0x75, 0x73, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x69, 0x73, 0x63, 0x75, - 0x73, 0x73, 0x55, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x64, 0x69, 0x73, - 0x63, 0x75, 0x73, 0x73, 0x55, 0x69, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x69, 0x73, 0x63, 0x75, - 0x73, 0x73, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x64, 0x69, - 0x73, 0x63, 0x75, 0x73, 0x73, 0x54, 0x79, 0x70, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x64, 0x69, 0x73, - 0x63, 0x75, 0x73, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x53, 0x65, 0x71, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0e, 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x53, 0x65, - 0x71, 0x12, 0x24, 0x0a, 0x0d, 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x52, 0x65, 0x6d, 0x61, - 0x72, 0x6b, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, - 0x73, 0x52, 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x69, 0x73, 0x63, 0x75, - 0x73, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x64, 0x69, - 0x73, 0x63, 0x75, 0x73, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x3e, 0x0a, 0x0e, 0x4d, 0x75, 0x74, - 0x69, 0x6c, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x48, 0x65, 0x61, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x73, 0x67, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x05, 0x6d, 0x73, 0x67, 0x49, 0x64, 0x22, 0xd2, 0x02, 0x0a, 0x12, 0x43, 0x32, - 0x43, 0x54, 0x65, 0x6d, 0x70, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x65, 0x61, 0x64, - 0x12, 0x18, 0x0a, 0x07, 0x63, 0x32, 0x63, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x07, 0x63, 0x32, 0x63, 0x54, 0x79, 0x70, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, - 0x67, 0x72, 0x6f, 0x75, 0x70, 0x55, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, - 0x67, 0x72, 0x6f, 0x75, 0x70, 0x55, 0x69, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x67, 0x72, 0x6f, - 0x75, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x69, 0x67, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x0c, 0x52, 0x03, 0x73, 0x69, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x69, 0x67, 0x54, - 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x73, 0x69, 0x67, 0x54, 0x79, - 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x66, 0x72, 0x6f, 0x6d, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x72, 0x6f, 0x6d, 0x50, 0x68, 0x6f, 0x6e, 0x65, - 0x12, 0x18, 0x0a, 0x07, 0x74, 0x6f, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x74, 0x6f, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x6c, 0x6f, - 0x63, 0x6b, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x0b, 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x12, 0x24, 0x0a, 0x0d, - 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x6c, 0x61, 0x67, 0x18, 0x0a, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x0d, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x6c, - 0x61, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x18, 0x0b, - 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x22, 0x9b, - 0x01, 0x0a, 0x08, 0x49, 0x6e, 0x73, 0x74, 0x43, 0x74, 0x72, 0x6c, 0x12, 0x2f, 0x0a, 0x0d, 0x6d, - 0x73, 0x67, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x6f, 0x49, 0x6e, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x09, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0d, 0x6d, - 0x73, 0x67, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x6f, 0x49, 0x6e, 0x73, 0x74, 0x12, 0x31, 0x0a, 0x0e, - 0x6d, 0x73, 0x67, 0x45, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x09, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, - 0x0e, 0x6d, 0x73, 0x67, 0x45, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x12, - 0x2b, 0x0a, 0x0b, 0x6d, 0x73, 0x67, 0x46, 0x72, 0x6f, 0x6d, 0x49, 0x6e, 0x73, 0x74, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x09, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, - 0x0b, 0x6d, 0x73, 0x67, 0x46, 0x72, 0x6f, 0x6d, 0x49, 0x6e, 0x73, 0x74, 0x22, 0x7e, 0x0a, 0x08, - 0x49, 0x6e, 0x73, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x70, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x61, 0x70, 0x70, 0x70, 0x69, 0x64, - 0x12, 0x16, 0x0a, 0x06, 0x69, 0x6e, 0x73, 0x74, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x06, 0x69, 0x6e, 0x73, 0x74, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x26, 0x0a, 0x0e, 0x65, 0x6e, 0x75, 0x6d, 0x44, 0x65, 0x76, 0x69, - 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x65, 0x6e, - 0x75, 0x6d, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x22, 0x49, 0x0a, 0x0f, - 0x45, 0x78, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4b, 0x65, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x12, - 0x1c, 0x0a, 0x09, 0x63, 0x75, 0x72, 0x4d, 0x61, 0x78, 0x53, 0x65, 0x71, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x09, 0x63, 0x75, 0x72, 0x4d, 0x61, 0x78, 0x53, 0x65, 0x71, 0x12, 0x18, 0x0a, - 0x07, 0x63, 0x75, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, - 0x63, 0x75, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x22, 0xe2, 0x01, 0x0a, 0x0a, 0x53, 0x79, 0x6e, 0x63, - 0x43, 0x6f, 0x6f, 0x6b, 0x69, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x6d, 0x65, 0x31, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x74, 0x69, 0x6d, 0x65, 0x31, 0x12, 0x12, 0x0a, 0x04, - 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, - 0x12, 0x12, 0x0a, 0x04, 0x72, 0x61, 0x6e, 0x31, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, - 0x72, 0x61, 0x6e, 0x31, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x61, 0x6e, 0x32, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x04, 0x72, 0x61, 0x6e, 0x32, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x73, - 0x74, 0x31, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x31, - 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x32, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x32, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x73, - 0x74, 0x33, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x33, - 0x12, 0x22, 0x0a, 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x79, 0x6e, 0x63, 0x54, 0x69, 0x6d, 0x65, - 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x79, 0x6e, 0x63, - 0x54, 0x69, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x34, 0x18, 0x0e, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x34, 0x22, 0x8e, 0x03, 0x0a, - 0x0c, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x4d, 0x73, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x18, 0x0a, - 0x07, 0x66, 0x72, 0x6f, 0x6d, 0x55, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, - 0x66, 0x72, 0x6f, 0x6d, 0x55, 0x69, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x55, 0x69, 0x6e, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x74, 0x6f, 0x55, 0x69, 0x6e, 0x12, 0x18, 0x0a, - 0x07, 0x6d, 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, - 0x6d, 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x6d, 0x73, 0x67, 0x53, 0x75, - 0x62, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x6d, 0x73, 0x67, - 0x53, 0x75, 0x62, 0x74, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x73, 0x67, 0x53, 0x65, - 0x71, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6d, 0x73, 0x67, 0x53, 0x65, 0x71, 0x12, - 0x16, 0x0a, 0x06, 0x6d, 0x73, 0x67, 0x55, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x06, 0x6d, 0x73, 0x67, 0x55, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x73, 0x67, 0x54, 0x69, - 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x6d, 0x73, 0x67, 0x54, 0x69, 0x6d, - 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, 0x61, 0x6c, 0x4d, 0x73, 0x67, 0x54, 0x69, 0x6d, 0x65, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x72, 0x65, 0x61, 0x6c, 0x4d, 0x73, 0x67, 0x54, - 0x69, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6e, 0x69, 0x63, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x18, - 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x69, 0x63, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x12, - 0x18, 0x0a, 0x07, 0x6d, 0x73, 0x67, 0x44, 0x61, 0x74, 0x61, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0c, - 0x52, 0x07, 0x6d, 0x73, 0x67, 0x44, 0x61, 0x74, 0x61, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x76, 0x72, - 0x49, 0x70, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x73, 0x76, 0x72, 0x49, 0x70, 0x12, - 0x3a, 0x0a, 0x0f, 0x65, 0x78, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4b, 0x65, 0x79, 0x49, 0x6e, - 0x66, 0x6f, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x45, 0x78, 0x74, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x4b, 0x65, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0f, 0x65, 0x78, 0x74, 0x47, - 0x72, 0x6f, 0x75, 0x70, 0x4b, 0x65, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x20, 0x0a, 0x0b, 0x67, - 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x46, 0x6c, 0x61, 0x67, 0x18, 0x11, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x0b, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x46, 0x6c, 0x61, 0x67, 0x22, 0x84, 0x05, - 0x0a, 0x0c, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x28, - 0x0a, 0x0f, 0x62, 0x75, 0x62, 0x62, 0x6c, 0x65, 0x44, 0x69, 0x79, 0x54, 0x65, 0x78, 0x74, 0x49, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x62, 0x75, 0x62, 0x62, 0x6c, 0x65, 0x44, - 0x69, 0x79, 0x54, 0x65, 0x78, 0x74, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x46, 0x6c, 0x61, 0x67, 0x4e, 0x65, 0x77, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, - 0x67, 0x72, 0x6f, 0x75, 0x70, 0x46, 0x6c, 0x61, 0x67, 0x4e, 0x65, 0x77, 0x12, 0x10, 0x0a, 0x03, - 0x75, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x75, 0x69, 0x6e, 0x12, 0x12, - 0x0a, 0x04, 0x72, 0x70, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x72, 0x70, - 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x70, 0x46, 0x6f, 0x6c, 0x64, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x07, 0x70, 0x72, 0x70, 0x46, 0x6f, 0x6c, 0x64, 0x12, 0x22, 0x0a, 0x0c, - 0x6c, 0x6f, 0x6e, 0x67, 0x54, 0x65, 0x78, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x0c, 0x6c, 0x6f, 0x6e, 0x67, 0x54, 0x65, 0x78, 0x74, 0x46, 0x6c, 0x61, 0x67, - 0x12, 0x24, 0x0a, 0x0d, 0x6c, 0x6f, 0x6e, 0x67, 0x54, 0x65, 0x78, 0x74, 0x52, 0x65, 0x73, 0x69, - 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6c, 0x6f, 0x6e, 0x67, 0x54, 0x65, 0x78, - 0x74, 0x52, 0x65, 0x73, 0x69, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x54, - 0x79, 0x70, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x6f, 0x55, 0x69, 0x6e, 0x46, 0x6c, 0x61, - 0x67, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x74, 0x6f, 0x55, 0x69, 0x6e, 0x46, 0x6c, - 0x61, 0x67, 0x12, 0x22, 0x0a, 0x0c, 0x67, 0x6c, 0x61, 0x6d, 0x6f, 0x75, 0x72, 0x4c, 0x65, 0x76, - 0x65, 0x6c, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x67, 0x6c, 0x61, 0x6d, 0x6f, 0x75, - 0x72, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x20, 0x0a, 0x0b, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, - 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x6d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x22, 0x0a, 0x0c, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x65, 0x71, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, - 0x67, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x65, 0x71, 0x12, 0x22, 0x0a, 0x0c, - 0x6f, 0x6c, 0x79, 0x6d, 0x70, 0x69, 0x63, 0x54, 0x6f, 0x72, 0x63, 0x68, 0x18, 0x0d, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x0c, 0x6f, 0x6c, 0x79, 0x6d, 0x70, 0x69, 0x63, 0x54, 0x6f, 0x72, 0x63, 0x68, - 0x12, 0x30, 0x0a, 0x13, 0x62, 0x61, 0x62, 0x79, 0x71, 0x47, 0x75, 0x69, 0x64, 0x65, 0x4d, 0x73, - 0x67, 0x43, 0x6f, 0x6f, 0x6b, 0x69, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x13, 0x62, - 0x61, 0x62, 0x79, 0x71, 0x47, 0x75, 0x69, 0x64, 0x65, 0x4d, 0x73, 0x67, 0x43, 0x6f, 0x6f, 0x6b, - 0x69, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x75, 0x69, 0x6e, 0x33, 0x32, 0x45, 0x78, 0x70, 0x65, 0x72, - 0x74, 0x46, 0x6c, 0x61, 0x67, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x75, 0x69, 0x6e, - 0x33, 0x32, 0x45, 0x78, 0x70, 0x65, 0x72, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x20, 0x0a, 0x0b, - 0x62, 0x75, 0x62, 0x62, 0x6c, 0x65, 0x53, 0x75, 0x62, 0x49, 0x64, 0x18, 0x10, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x0b, 0x62, 0x75, 0x62, 0x62, 0x6c, 0x65, 0x53, 0x75, 0x62, 0x49, 0x64, 0x12, 0x1c, - 0x0a, 0x09, 0x70, 0x65, 0x6e, 0x64, 0x61, 0x6e, 0x74, 0x49, 0x64, 0x18, 0x11, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x09, 0x70, 0x65, 0x6e, 0x64, 0x61, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, - 0x72, 0x70, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x72, - 0x70, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x62, 0x52, 0x65, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x70, 0x62, 0x52, 0x65, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x22, 0x44, 0x0a, 0x0e, 0x50, 0x62, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x4d, - 0x73, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, - 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x06, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x2b, 0x0a, 0x0d, 0x50, 0x62, - 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x4d, 0x73, 0x67, 0x4e, 0x65, 0x77, 0x12, 0x1a, 0x0a, 0x03, 0x6d, - 0x73, 0x67, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x22, 0x61, 0x0a, 0x12, 0x50, 0x62, 0x4d, 0x75, 0x6c, - 0x74, 0x69, 0x4d, 0x73, 0x67, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x12, 0x1a, 0x0a, - 0x03, 0x6d, 0x73, 0x67, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x2f, 0x0a, 0x0a, 0x70, 0x62, 0x49, - 0x74, 0x65, 0x6d, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, - 0x50, 0x62, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x4d, 0x73, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x0a, - 0x70, 0x62, 0x49, 0x74, 0x65, 0x6d, 0x4c, 0x69, 0x73, 0x74, 0x2a, 0x2e, 0x0a, 0x08, 0x53, 0x79, - 0x6e, 0x63, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x54, 0x41, 0x52, 0x54, 0x10, - 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x4f, 0x4e, 0x54, 0x49, 0x4e, 0x55, 0x4d, 0x45, 0x10, 0x01, - 0x12, 0x08, 0x0a, 0x04, 0x53, 0x54, 0x4f, 0x50, 0x10, 0x02, 0x42, 0x07, 0x5a, 0x05, 0x2e, 0x3b, - 0x6d, 0x73, 0x67, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x73, 0x67, 0x55, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x06, 0x6d, 0x73, 0x67, 0x55, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x73, 0x67, 0x54, + 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x6d, 0x73, 0x67, 0x54, 0x69, + 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, 0x61, 0x6c, 0x4d, 0x73, 0x67, 0x54, 0x69, 0x6d, + 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x72, 0x65, 0x61, 0x6c, 0x4d, 0x73, 0x67, + 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6e, 0x69, 0x63, 0x6b, 0x4e, 0x61, 0x6d, 0x65, + 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x69, 0x63, 0x6b, 0x4e, 0x61, 0x6d, 0x65, + 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x73, 0x67, 0x44, 0x61, 0x74, 0x61, 0x18, 0x0a, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x07, 0x6d, 0x73, 0x67, 0x44, 0x61, 0x74, 0x61, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x76, + 0x72, 0x49, 0x70, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x73, 0x76, 0x72, 0x49, 0x70, + 0x12, 0x3a, 0x0a, 0x0f, 0x65, 0x78, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4b, 0x65, 0x79, 0x49, + 0x6e, 0x66, 0x6f, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x45, 0x78, 0x74, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x4b, 0x65, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0f, 0x65, 0x78, 0x74, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4b, 0x65, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x20, 0x0a, 0x0b, + 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x46, 0x6c, 0x61, 0x67, 0x18, 0x11, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x0b, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x46, 0x6c, 0x61, 0x67, 0x22, 0x84, + 0x05, 0x0a, 0x0c, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x12, + 0x28, 0x0a, 0x0f, 0x62, 0x75, 0x62, 0x62, 0x6c, 0x65, 0x44, 0x69, 0x79, 0x54, 0x65, 0x78, 0x74, + 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x62, 0x75, 0x62, 0x62, 0x6c, 0x65, + 0x44, 0x69, 0x79, 0x54, 0x65, 0x78, 0x74, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x67, 0x72, 0x6f, + 0x75, 0x70, 0x46, 0x6c, 0x61, 0x67, 0x4e, 0x65, 0x77, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x0c, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x46, 0x6c, 0x61, 0x67, 0x4e, 0x65, 0x77, 0x12, 0x10, 0x0a, + 0x03, 0x75, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x75, 0x69, 0x6e, 0x12, + 0x12, 0x0a, 0x04, 0x72, 0x70, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x72, + 0x70, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x70, 0x46, 0x6f, 0x6c, 0x64, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x70, 0x72, 0x70, 0x46, 0x6f, 0x6c, 0x64, 0x12, 0x22, 0x0a, + 0x0c, 0x6c, 0x6f, 0x6e, 0x67, 0x54, 0x65, 0x78, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x0c, 0x6c, 0x6f, 0x6e, 0x67, 0x54, 0x65, 0x78, 0x74, 0x46, 0x6c, 0x61, + 0x67, 0x12, 0x24, 0x0a, 0x0d, 0x6c, 0x6f, 0x6e, 0x67, 0x54, 0x65, 0x78, 0x74, 0x52, 0x65, 0x73, + 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6c, 0x6f, 0x6e, 0x67, 0x54, 0x65, + 0x78, 0x74, 0x52, 0x65, 0x73, 0x69, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, + 0x54, 0x79, 0x70, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x67, 0x72, 0x6f, 0x75, + 0x70, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x6f, 0x55, 0x69, 0x6e, 0x46, 0x6c, + 0x61, 0x67, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x74, 0x6f, 0x55, 0x69, 0x6e, 0x46, + 0x6c, 0x61, 0x67, 0x12, 0x22, 0x0a, 0x0c, 0x67, 0x6c, 0x61, 0x6d, 0x6f, 0x75, 0x72, 0x4c, 0x65, + 0x76, 0x65, 0x6c, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x67, 0x6c, 0x61, 0x6d, 0x6f, + 0x75, 0x72, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x20, 0x0a, 0x0b, 0x6d, 0x65, 0x6d, 0x62, 0x65, + 0x72, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x6d, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x22, 0x0a, 0x0c, 0x67, 0x72, 0x6f, + 0x75, 0x70, 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x65, 0x71, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x0c, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x65, 0x71, 0x12, 0x22, 0x0a, + 0x0c, 0x6f, 0x6c, 0x79, 0x6d, 0x70, 0x69, 0x63, 0x54, 0x6f, 0x72, 0x63, 0x68, 0x18, 0x0d, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x0c, 0x6f, 0x6c, 0x79, 0x6d, 0x70, 0x69, 0x63, 0x54, 0x6f, 0x72, 0x63, + 0x68, 0x12, 0x30, 0x0a, 0x13, 0x62, 0x61, 0x62, 0x79, 0x71, 0x47, 0x75, 0x69, 0x64, 0x65, 0x4d, + 0x73, 0x67, 0x43, 0x6f, 0x6f, 0x6b, 0x69, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x13, + 0x62, 0x61, 0x62, 0x79, 0x71, 0x47, 0x75, 0x69, 0x64, 0x65, 0x4d, 0x73, 0x67, 0x43, 0x6f, 0x6f, + 0x6b, 0x69, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x75, 0x69, 0x6e, 0x33, 0x32, 0x45, 0x78, 0x70, 0x65, + 0x72, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x75, 0x69, + 0x6e, 0x33, 0x32, 0x45, 0x78, 0x70, 0x65, 0x72, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x20, 0x0a, + 0x0b, 0x62, 0x75, 0x62, 0x62, 0x6c, 0x65, 0x53, 0x75, 0x62, 0x49, 0x64, 0x18, 0x10, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x0b, 0x62, 0x75, 0x62, 0x62, 0x6c, 0x65, 0x53, 0x75, 0x62, 0x49, 0x64, 0x12, + 0x1c, 0x0a, 0x09, 0x70, 0x65, 0x6e, 0x64, 0x61, 0x6e, 0x74, 0x49, 0x64, 0x18, 0x11, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x09, 0x70, 0x65, 0x6e, 0x64, 0x61, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x18, 0x0a, + 0x07, 0x72, 0x70, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, + 0x72, 0x70, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x62, 0x52, 0x65, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x70, 0x62, 0x52, 0x65, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x22, 0x44, 0x0a, 0x0e, 0x50, 0x62, 0x4d, 0x75, 0x6c, 0x74, 0x69, + 0x4d, 0x73, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x4e, + 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x06, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x2b, 0x0a, 0x0d, 0x50, + 0x62, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x4d, 0x73, 0x67, 0x4e, 0x65, 0x77, 0x12, 0x1a, 0x0a, 0x03, + 0x6d, 0x73, 0x67, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x22, 0x61, 0x0a, 0x12, 0x50, 0x62, 0x4d, 0x75, + 0x6c, 0x74, 0x69, 0x4d, 0x73, 0x67, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x12, 0x1a, + 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x2f, 0x0a, 0x0a, 0x70, 0x62, + 0x49, 0x74, 0x65, 0x6d, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, + 0x2e, 0x50, 0x62, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x4d, 0x73, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, + 0x0a, 0x70, 0x62, 0x49, 0x74, 0x65, 0x6d, 0x4c, 0x69, 0x73, 0x74, 0x2a, 0x2e, 0x0a, 0x08, 0x53, + 0x79, 0x6e, 0x63, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x54, 0x41, 0x52, 0x54, + 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x4f, 0x4e, 0x54, 0x49, 0x4e, 0x55, 0x4d, 0x45, 0x10, + 0x01, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x54, 0x4f, 0x50, 0x10, 0x02, 0x42, 0x07, 0x5a, 0x05, 0x2e, + 0x3b, 0x6d, 0x73, 0x67, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -6433,7 +6989,7 @@ func file_msg_proto_rawDescGZIP() []byte { } var file_msg_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_msg_proto_msgTypes = make([]protoimpl.MessageInfo, 53) +var file_msg_proto_msgTypes = make([]protoimpl.MessageInfo, 56) var file_msg_proto_goTypes = []interface{}{ (SyncFlag)(0), // 0: SyncFlag (*GetMessageRequest)(nil), // 1: GetMessageRequest @@ -6457,43 +7013,46 @@ var file_msg_proto_goTypes = []interface{}{ (*RichText)(nil), // 19: RichText (*Elem)(nil), // 20: Elem (*CommonElem)(nil), // 21: CommonElem - (*RichMsg)(nil), // 22: RichMsg - (*CustomElem)(nil), // 23: CustomElem - (*Text)(nil), // 24: Text - (*Attr)(nil), // 25: Attr - (*Ptt)(nil), // 26: Ptt - (*OnlineImage)(nil), // 27: OnlineImage - (*NotOnlineImage)(nil), // 28: NotOnlineImage - (*NotOnlineFile)(nil), // 29: NotOnlineFile - (*TransElem)(nil), // 30: TransElem - (*ExtraInfo)(nil), // 31: ExtraInfo - (*GroupFile)(nil), // 32: GroupFile - (*AnonymousGroupMessage)(nil), // 33: AnonymousGroupMessage - (*VideoFile)(nil), // 34: VideoFile - (*SourceMsg)(nil), // 35: SourceMsg - (*Face)(nil), // 36: Face - (*LightAppElem)(nil), // 37: LightAppElem - (*CustomFace)(nil), // 38: CustomFace - (*ContentHead)(nil), // 39: ContentHead - (*MessageHead)(nil), // 40: MessageHead - (*GroupInfo)(nil), // 41: GroupInfo - (*DiscussInfo)(nil), // 42: DiscussInfo - (*MutilTransHead)(nil), // 43: MutilTransHead - (*C2CTempMessageHead)(nil), // 44: C2CTempMessageHead - (*InstCtrl)(nil), // 45: InstCtrl - (*InstInfo)(nil), // 46: InstInfo - (*ExtGroupKeyInfo)(nil), // 47: ExtGroupKeyInfo - (*SyncCookie)(nil), // 48: SyncCookie - (*TransMsgInfo)(nil), // 49: TransMsgInfo - (*GeneralFlags)(nil), // 50: GeneralFlags - (*PbMultiMsgItem)(nil), // 51: PbMultiMsgItem - (*PbMultiMsgNew)(nil), // 52: PbMultiMsgNew - (*PbMultiMsgTransmit)(nil), // 53: PbMultiMsgTransmit + (*QQWalletMsg)(nil), // 22: QQWalletMsg + (*QQWalletAioBody)(nil), // 23: QQWalletAioBody + (*QQWalletAioElem)(nil), // 24: QQWalletAioElem + (*RichMsg)(nil), // 25: RichMsg + (*CustomElem)(nil), // 26: CustomElem + (*Text)(nil), // 27: Text + (*Attr)(nil), // 28: Attr + (*Ptt)(nil), // 29: Ptt + (*OnlineImage)(nil), // 30: OnlineImage + (*NotOnlineImage)(nil), // 31: NotOnlineImage + (*NotOnlineFile)(nil), // 32: NotOnlineFile + (*TransElem)(nil), // 33: TransElem + (*ExtraInfo)(nil), // 34: ExtraInfo + (*GroupFile)(nil), // 35: GroupFile + (*AnonymousGroupMessage)(nil), // 36: AnonymousGroupMessage + (*VideoFile)(nil), // 37: VideoFile + (*SourceMsg)(nil), // 38: SourceMsg + (*Face)(nil), // 39: Face + (*LightAppElem)(nil), // 40: LightAppElem + (*CustomFace)(nil), // 41: CustomFace + (*ContentHead)(nil), // 42: ContentHead + (*MessageHead)(nil), // 43: MessageHead + (*GroupInfo)(nil), // 44: GroupInfo + (*DiscussInfo)(nil), // 45: DiscussInfo + (*MutilTransHead)(nil), // 46: MutilTransHead + (*C2CTempMessageHead)(nil), // 47: C2CTempMessageHead + (*InstCtrl)(nil), // 48: InstCtrl + (*InstInfo)(nil), // 49: InstInfo + (*ExtGroupKeyInfo)(nil), // 50: ExtGroupKeyInfo + (*SyncCookie)(nil), // 51: SyncCookie + (*TransMsgInfo)(nil), // 52: TransMsgInfo + (*GeneralFlags)(nil), // 53: GeneralFlags + (*PbMultiMsgItem)(nil), // 54: PbMultiMsgItem + (*PbMultiMsgNew)(nil), // 55: PbMultiMsgNew + (*PbMultiMsgTransmit)(nil), // 56: PbMultiMsgTransmit } var file_msg_proto_depIdxs = []int32{ 0, // 0: GetMessageRequest.syncFlag:type_name -> SyncFlag 9, // 1: SendMessageRequest.routingHead:type_name -> RoutingHead - 39, // 2: SendMessageRequest.contentHead:type_name -> ContentHead + 42, // 2: SendMessageRequest.contentHead:type_name -> ContentHead 18, // 3: SendMessageRequest.msgBody:type_name -> MessageBody 13, // 4: SendMessageRequest.msgCtrl:type_name -> MsgCtrl 5, // 5: MsgWithDrawReq.c2cWithDraw:type_name -> C2CMsgWithDrawReq @@ -6508,49 +7067,53 @@ var file_msg_proto_depIdxs = []int32{ 16, // 14: GetMessageResponse.uinPairMsgs:type_name -> UinPairMessage 17, // 15: PushMessagePacket.message:type_name -> Message 17, // 16: UinPairMessage.messages:type_name -> Message - 40, // 17: Message.head:type_name -> MessageHead - 39, // 18: Message.content:type_name -> ContentHead + 43, // 17: Message.head:type_name -> MessageHead + 42, // 18: Message.content:type_name -> ContentHead 18, // 19: Message.body:type_name -> MessageBody 19, // 20: MessageBody.richText:type_name -> RichText - 25, // 21: RichText.attr:type_name -> Attr + 28, // 21: RichText.attr:type_name -> Attr 20, // 22: RichText.elems:type_name -> Elem - 29, // 23: RichText.notOnlineFile:type_name -> NotOnlineFile - 26, // 24: RichText.ptt:type_name -> Ptt - 24, // 25: Elem.text:type_name -> Text - 36, // 26: Elem.face:type_name -> Face - 27, // 27: Elem.onlineImage:type_name -> OnlineImage - 28, // 28: Elem.notOnlineImage:type_name -> NotOnlineImage - 30, // 29: Elem.transElemInfo:type_name -> TransElem - 38, // 30: Elem.customFace:type_name -> CustomFace - 22, // 31: Elem.richMsg:type_name -> RichMsg - 32, // 32: Elem.groupFile:type_name -> GroupFile - 31, // 33: Elem.extraInfo:type_name -> ExtraInfo - 34, // 34: Elem.videoFile:type_name -> VideoFile - 33, // 35: Elem.anonGroupMsg:type_name -> AnonymousGroupMessage - 23, // 36: Elem.customElem:type_name -> CustomElem - 50, // 37: Elem.generalFlags:type_name -> GeneralFlags - 35, // 38: Elem.srcMsg:type_name -> SourceMsg - 37, // 39: Elem.lightApp:type_name -> LightAppElem - 21, // 40: Elem.commonElem:type_name -> CommonElem - 20, // 41: SourceMsg.elems:type_name -> Elem - 44, // 42: MessageHead.c2cTmpMsgHead:type_name -> C2CTempMessageHead - 41, // 43: MessageHead.groupInfo:type_name -> GroupInfo - 42, // 44: MessageHead.discussInfo:type_name -> DiscussInfo - 43, // 45: MessageHead.mutiltransHead:type_name -> MutilTransHead - 45, // 46: MessageHead.msgInstCtrl:type_name -> InstCtrl - 47, // 47: MessageHead.extGroupKeyInfo:type_name -> ExtGroupKeyInfo - 46, // 48: InstCtrl.msgSendToInst:type_name -> InstInfo - 46, // 49: InstCtrl.msgExcludeInst:type_name -> InstInfo - 46, // 50: InstCtrl.msgFromInst:type_name -> InstInfo - 47, // 51: TransMsgInfo.extGroupKeyInfo:type_name -> ExtGroupKeyInfo - 17, // 52: PbMultiMsgNew.msg:type_name -> Message - 17, // 53: PbMultiMsgTransmit.msg:type_name -> Message - 51, // 54: PbMultiMsgTransmit.pbItemList:type_name -> PbMultiMsgItem - 55, // [55:55] is the sub-list for method output_type - 55, // [55:55] is the sub-list for method input_type - 55, // [55:55] is the sub-list for extension type_name - 55, // [55:55] is the sub-list for extension extendee - 0, // [0:55] is the sub-list for field type_name + 32, // 23: RichText.notOnlineFile:type_name -> NotOnlineFile + 29, // 24: RichText.ptt:type_name -> Ptt + 27, // 25: Elem.text:type_name -> Text + 39, // 26: Elem.face:type_name -> Face + 30, // 27: Elem.onlineImage:type_name -> OnlineImage + 31, // 28: Elem.notOnlineImage:type_name -> NotOnlineImage + 33, // 29: Elem.transElemInfo:type_name -> TransElem + 41, // 30: Elem.customFace:type_name -> CustomFace + 25, // 31: Elem.richMsg:type_name -> RichMsg + 35, // 32: Elem.groupFile:type_name -> GroupFile + 34, // 33: Elem.extraInfo:type_name -> ExtraInfo + 37, // 34: Elem.videoFile:type_name -> VideoFile + 36, // 35: Elem.anonGroupMsg:type_name -> AnonymousGroupMessage + 22, // 36: Elem.QQWalletMsg:type_name -> QQWalletMsg + 26, // 37: Elem.customElem:type_name -> CustomElem + 53, // 38: Elem.generalFlags:type_name -> GeneralFlags + 38, // 39: Elem.srcMsg:type_name -> SourceMsg + 40, // 40: Elem.lightApp:type_name -> LightAppElem + 21, // 41: Elem.commonElem:type_name -> CommonElem + 23, // 42: QQWalletMsg.aioBody:type_name -> QQWalletAioBody + 24, // 43: QQWalletAioBody.sender:type_name -> QQWalletAioElem + 24, // 44: QQWalletAioBody.receiver:type_name -> QQWalletAioElem + 20, // 45: SourceMsg.elems:type_name -> Elem + 47, // 46: MessageHead.c2cTmpMsgHead:type_name -> C2CTempMessageHead + 44, // 47: MessageHead.groupInfo:type_name -> GroupInfo + 45, // 48: MessageHead.discussInfo:type_name -> DiscussInfo + 46, // 49: MessageHead.mutiltransHead:type_name -> MutilTransHead + 48, // 50: MessageHead.msgInstCtrl:type_name -> InstCtrl + 50, // 51: MessageHead.extGroupKeyInfo:type_name -> ExtGroupKeyInfo + 49, // 52: InstCtrl.msgSendToInst:type_name -> InstInfo + 49, // 53: InstCtrl.msgExcludeInst:type_name -> InstInfo + 49, // 54: InstCtrl.msgFromInst:type_name -> InstInfo + 50, // 55: TransMsgInfo.extGroupKeyInfo:type_name -> ExtGroupKeyInfo + 17, // 56: PbMultiMsgNew.msg:type_name -> Message + 17, // 57: PbMultiMsgTransmit.msg:type_name -> Message + 54, // 58: PbMultiMsgTransmit.pbItemList:type_name -> PbMultiMsgItem + 59, // [59:59] is the sub-list for method output_type + 59, // [59:59] is the sub-list for method input_type + 59, // [59:59] is the sub-list for extension type_name + 59, // [59:59] is the sub-list for extension extendee + 0, // [0:59] is the sub-list for field type_name } func init() { file_msg_proto_init() } @@ -6812,7 +7375,7 @@ func file_msg_proto_init() { } } file_msg_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RichMsg); i { + switch v := v.(*QQWalletMsg); i { case 0: return &v.state case 1: @@ -6824,7 +7387,7 @@ func file_msg_proto_init() { } } file_msg_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CustomElem); i { + switch v := v.(*QQWalletAioBody); i { case 0: return &v.state case 1: @@ -6836,7 +7399,7 @@ func file_msg_proto_init() { } } file_msg_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Text); i { + switch v := v.(*QQWalletAioElem); i { case 0: return &v.state case 1: @@ -6848,7 +7411,7 @@ func file_msg_proto_init() { } } file_msg_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Attr); i { + switch v := v.(*RichMsg); i { case 0: return &v.state case 1: @@ -6860,7 +7423,7 @@ func file_msg_proto_init() { } } file_msg_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Ptt); i { + switch v := v.(*CustomElem); i { case 0: return &v.state case 1: @@ -6872,7 +7435,7 @@ func file_msg_proto_init() { } } file_msg_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*OnlineImage); i { + switch v := v.(*Text); i { case 0: return &v.state case 1: @@ -6884,7 +7447,7 @@ func file_msg_proto_init() { } } file_msg_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NotOnlineImage); i { + switch v := v.(*Attr); i { case 0: return &v.state case 1: @@ -6896,7 +7459,7 @@ func file_msg_proto_init() { } } file_msg_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NotOnlineFile); i { + switch v := v.(*Ptt); i { case 0: return &v.state case 1: @@ -6908,7 +7471,7 @@ func file_msg_proto_init() { } } file_msg_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TransElem); i { + switch v := v.(*OnlineImage); i { case 0: return &v.state case 1: @@ -6920,7 +7483,7 @@ func file_msg_proto_init() { } } file_msg_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExtraInfo); i { + switch v := v.(*NotOnlineImage); i { case 0: return &v.state case 1: @@ -6932,7 +7495,7 @@ func file_msg_proto_init() { } } file_msg_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GroupFile); i { + switch v := v.(*NotOnlineFile); i { case 0: return &v.state case 1: @@ -6944,7 +7507,7 @@ func file_msg_proto_init() { } } file_msg_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AnonymousGroupMessage); i { + switch v := v.(*TransElem); i { case 0: return &v.state case 1: @@ -6956,7 +7519,7 @@ func file_msg_proto_init() { } } file_msg_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*VideoFile); i { + switch v := v.(*ExtraInfo); i { case 0: return &v.state case 1: @@ -6968,7 +7531,7 @@ func file_msg_proto_init() { } } file_msg_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SourceMsg); i { + switch v := v.(*GroupFile); i { case 0: return &v.state case 1: @@ -6980,7 +7543,7 @@ func file_msg_proto_init() { } } file_msg_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Face); i { + switch v := v.(*AnonymousGroupMessage); i { case 0: return &v.state case 1: @@ -6992,7 +7555,7 @@ func file_msg_proto_init() { } } file_msg_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LightAppElem); i { + switch v := v.(*VideoFile); i { case 0: return &v.state case 1: @@ -7004,7 +7567,7 @@ func file_msg_proto_init() { } } file_msg_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CustomFace); i { + switch v := v.(*SourceMsg); i { case 0: return &v.state case 1: @@ -7016,7 +7579,7 @@ func file_msg_proto_init() { } } file_msg_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ContentHead); i { + switch v := v.(*Face); i { case 0: return &v.state case 1: @@ -7028,7 +7591,7 @@ func file_msg_proto_init() { } } file_msg_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MessageHead); i { + switch v := v.(*LightAppElem); i { case 0: return &v.state case 1: @@ -7040,7 +7603,7 @@ func file_msg_proto_init() { } } file_msg_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GroupInfo); i { + switch v := v.(*CustomFace); i { case 0: return &v.state case 1: @@ -7052,7 +7615,7 @@ func file_msg_proto_init() { } } file_msg_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DiscussInfo); i { + switch v := v.(*ContentHead); i { case 0: return &v.state case 1: @@ -7064,7 +7627,7 @@ func file_msg_proto_init() { } } file_msg_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MutilTransHead); i { + switch v := v.(*MessageHead); i { case 0: return &v.state case 1: @@ -7076,7 +7639,7 @@ func file_msg_proto_init() { } } file_msg_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*C2CTempMessageHead); i { + switch v := v.(*GroupInfo); i { case 0: return &v.state case 1: @@ -7088,7 +7651,7 @@ func file_msg_proto_init() { } } file_msg_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*InstCtrl); i { + switch v := v.(*DiscussInfo); i { case 0: return &v.state case 1: @@ -7100,7 +7663,7 @@ func file_msg_proto_init() { } } file_msg_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*InstInfo); i { + switch v := v.(*MutilTransHead); i { case 0: return &v.state case 1: @@ -7112,7 +7675,7 @@ func file_msg_proto_init() { } } file_msg_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExtGroupKeyInfo); i { + switch v := v.(*C2CTempMessageHead); i { case 0: return &v.state case 1: @@ -7124,7 +7687,7 @@ func file_msg_proto_init() { } } file_msg_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SyncCookie); i { + switch v := v.(*InstCtrl); i { case 0: return &v.state case 1: @@ -7136,7 +7699,7 @@ func file_msg_proto_init() { } } file_msg_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TransMsgInfo); i { + switch v := v.(*InstInfo); i { case 0: return &v.state case 1: @@ -7148,7 +7711,7 @@ func file_msg_proto_init() { } } file_msg_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GeneralFlags); i { + switch v := v.(*ExtGroupKeyInfo); i { case 0: return &v.state case 1: @@ -7160,7 +7723,7 @@ func file_msg_proto_init() { } } file_msg_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PbMultiMsgItem); i { + switch v := v.(*SyncCookie); i { case 0: return &v.state case 1: @@ -7172,7 +7735,7 @@ func file_msg_proto_init() { } } file_msg_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PbMultiMsgNew); i { + switch v := v.(*TransMsgInfo); i { case 0: return &v.state case 1: @@ -7184,6 +7747,42 @@ func file_msg_proto_init() { } } file_msg_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GeneralFlags); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_msg_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PbMultiMsgItem); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_msg_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PbMultiMsgNew); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_msg_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PbMultiMsgTransmit); i { case 0: return &v.state @@ -7202,7 +7801,7 @@ func file_msg_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_msg_proto_rawDesc, NumEnums: 1, - NumMessages: 53, + NumMessages: 56, NumExtensions: 0, NumServices: 0, }, diff --git a/client/pb/msg/msg.proto b/client/pb/msg/msg.proto index 96d26ec3..a7aec253 100644 --- a/client/pb/msg/msg.proto +++ b/client/pb/msg/msg.proto @@ -194,7 +194,7 @@ message Elem { AnonymousGroupMessage anonGroupMsg = 21; //QQLiveOld? qqLiveOld = 22; //LifeOnlineAccount? lifeOnline = 23; - //QQWalletMsg? qqwalletMsg = 24; + QQWalletMsg QQWalletMsg = 24; //CrmElem? crmElem = 25; //ConferenceTipsInfo? conferenceTipsInfo = 26; //RedBagInfo? redbagInfo = 27; @@ -232,6 +232,58 @@ message CommonElem { int32 businessType = 3; } +message QQWalletMsg { + QQWalletAioBody aioBody = 1; +} + +message QQWalletAioBody { + uint64 sendUin = 1; + QQWalletAioElem sender = 2; + QQWalletAioElem receiver = 3; + sint32 ChannelId = 4; + sint32 templateId = 5; + uint32 resend = 6; + uint32 msgPriority = 7; + sint32 redType = 8; + bytes billNo = 9; + bytes authKey = 10; + sint32 sessionType = 11; + sint32 msgType = 12; + sint32 envelOpeId = 13; + bytes name = 14; + sint32 confType = 15; + sint32 msgFrom = 16; + bytes pcBody = 17; + bytes index = 18; + uint32 redChannel = 19; + repeated uint64 grapUin = 20; + bytes pbReserve = 21; +} + +message QQWalletAioElem{ + uint32 background = 1; + uint32 icon = 2; + string title = 3; + string subtitle = 4; + string content = 5; + bytes linkUrl = 6; + bytes blackStripe = 7; + bytes notice = 8; + uint32 titleColor = 9; + uint32 subtitleColor = 10; + bytes actionsPriority = 11; + bytes jumpUrl = 12; + bytes nativeIos = 13; + bytes nativeAndroid = 14; + bytes iconUrl = 15; + uint32 contentColor = 16; + uint32 contentBgColor = 17; + bytes aioImageLeft = 18; + bytes aioImageRight = 19; + bytes cftImage = 20; + bytes pbReserve = 21; +} + message RichMsg { bytes template1 = 1; int32 serviceId = 2; diff --git a/client/pb/notify/group0x857.pb.go b/client/pb/notify/group0x857.pb.go new file mode 100644 index 00000000..048f7c05 --- /dev/null +++ b/client/pb/notify/group0x857.pb.go @@ -0,0 +1,896 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.25.0 +// protoc v3.11.4 +// source: group0x857.proto + +package notify + +import ( + proto "github.com/golang/protobuf/proto" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + 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) +) + +// This is a compile-time assertion that a sufficiently up-to-date version +// of the legacy proto package is being used. +const _ = proto.ProtoPackageIsVersion4 + +type NotifyMsgBody struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + OptMsgGrayTips *AIOGrayTipsInfo `protobuf:"bytes,5,opt,name=optMsgGrayTips,proto3" json:"optMsgGrayTips,omitempty"` + OptMsgRedTips *RedGrayTipsInfo `protobuf:"bytes,9,opt,name=optMsgRedTips,proto3" json:"optMsgRedTips,omitempty"` + OptMsgRecall *MessageRecallReminder `protobuf:"bytes,11,opt,name=optMsgRecall,proto3" json:"optMsgRecall,omitempty"` + OptGeneralGrayTip *GeneralGrayTipInfo `protobuf:"bytes,26,opt,name=optGeneralGrayTip,proto3" json:"optGeneralGrayTip,omitempty"` + ServiceType int32 `protobuf:"varint,13,opt,name=serviceType,proto3" json:"serviceType,omitempty"` +} + +func (x *NotifyMsgBody) Reset() { + *x = NotifyMsgBody{} + if protoimpl.UnsafeEnabled { + mi := &file_group0x857_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *NotifyMsgBody) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NotifyMsgBody) ProtoMessage() {} + +func (x *NotifyMsgBody) ProtoReflect() protoreflect.Message { + mi := &file_group0x857_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 NotifyMsgBody.ProtoReflect.Descriptor instead. +func (*NotifyMsgBody) Descriptor() ([]byte, []int) { + return file_group0x857_proto_rawDescGZIP(), []int{0} +} + +func (x *NotifyMsgBody) GetOptMsgGrayTips() *AIOGrayTipsInfo { + if x != nil { + return x.OptMsgGrayTips + } + return nil +} + +func (x *NotifyMsgBody) GetOptMsgRedTips() *RedGrayTipsInfo { + if x != nil { + return x.OptMsgRedTips + } + return nil +} + +func (x *NotifyMsgBody) GetOptMsgRecall() *MessageRecallReminder { + if x != nil { + return x.OptMsgRecall + } + return nil +} + +func (x *NotifyMsgBody) GetOptGeneralGrayTip() *GeneralGrayTipInfo { + if x != nil { + return x.OptGeneralGrayTip + } + return nil +} + +func (x *NotifyMsgBody) GetServiceType() int32 { + if x != nil { + return x.ServiceType + } + return 0 +} + +type AIOGrayTipsInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ShowLatest uint32 `protobuf:"varint,1,opt,name=showLatest,proto3" json:"showLatest,omitempty"` + Content []byte `protobuf:"bytes,2,opt,name=content,proto3" json:"content,omitempty"` + Remind uint32 `protobuf:"varint,3,opt,name=remind,proto3" json:"remind,omitempty"` + Brief []byte `protobuf:"bytes,4,opt,name=brief,proto3" json:"brief,omitempty"` + ReceiverUin uint64 `protobuf:"varint,5,opt,name=receiverUin,proto3" json:"receiverUin,omitempty"` + ReliaoAdminOpt uint32 `protobuf:"varint,6,opt,name=reliaoAdminOpt,proto3" json:"reliaoAdminOpt,omitempty"` +} + +func (x *AIOGrayTipsInfo) Reset() { + *x = AIOGrayTipsInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_group0x857_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AIOGrayTipsInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AIOGrayTipsInfo) ProtoMessage() {} + +func (x *AIOGrayTipsInfo) ProtoReflect() protoreflect.Message { + mi := &file_group0x857_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 AIOGrayTipsInfo.ProtoReflect.Descriptor instead. +func (*AIOGrayTipsInfo) Descriptor() ([]byte, []int) { + return file_group0x857_proto_rawDescGZIP(), []int{1} +} + +func (x *AIOGrayTipsInfo) GetShowLatest() uint32 { + if x != nil { + return x.ShowLatest + } + return 0 +} + +func (x *AIOGrayTipsInfo) GetContent() []byte { + if x != nil { + return x.Content + } + return nil +} + +func (x *AIOGrayTipsInfo) GetRemind() uint32 { + if x != nil { + return x.Remind + } + return 0 +} + +func (x *AIOGrayTipsInfo) GetBrief() []byte { + if x != nil { + return x.Brief + } + return nil +} + +func (x *AIOGrayTipsInfo) GetReceiverUin() uint64 { + if x != nil { + return x.ReceiverUin + } + return 0 +} + +func (x *AIOGrayTipsInfo) GetReliaoAdminOpt() uint32 { + if x != nil { + return x.ReliaoAdminOpt + } + return 0 +} + +type GeneralGrayTipInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + BusiType uint64 `protobuf:"varint,1,opt,name=busiType,proto3" json:"busiType,omitempty"` + BusiId uint64 `protobuf:"varint,2,opt,name=busiId,proto3" json:"busiId,omitempty"` + CtrlFlag uint32 `protobuf:"varint,3,opt,name=ctrlFlag,proto3" json:"ctrlFlag,omitempty"` + C2CType uint32 `protobuf:"varint,4,opt,name=c2cType,proto3" json:"c2cType,omitempty"` + ServiceType uint32 `protobuf:"varint,5,opt,name=serviceType,proto3" json:"serviceType,omitempty"` + TemplId uint64 `protobuf:"varint,6,opt,name=templId,proto3" json:"templId,omitempty"` + MsgTemplParam []*TemplParam `protobuf:"bytes,7,rep,name=msgTemplParam,proto3" json:"msgTemplParam,omitempty"` + Content string `protobuf:"bytes,8,opt,name=content,proto3" json:"content,omitempty"` +} + +func (x *GeneralGrayTipInfo) Reset() { + *x = GeneralGrayTipInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_group0x857_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GeneralGrayTipInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GeneralGrayTipInfo) ProtoMessage() {} + +func (x *GeneralGrayTipInfo) ProtoReflect() protoreflect.Message { + mi := &file_group0x857_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 GeneralGrayTipInfo.ProtoReflect.Descriptor instead. +func (*GeneralGrayTipInfo) Descriptor() ([]byte, []int) { + return file_group0x857_proto_rawDescGZIP(), []int{2} +} + +func (x *GeneralGrayTipInfo) GetBusiType() uint64 { + if x != nil { + return x.BusiType + } + return 0 +} + +func (x *GeneralGrayTipInfo) GetBusiId() uint64 { + if x != nil { + return x.BusiId + } + return 0 +} + +func (x *GeneralGrayTipInfo) GetCtrlFlag() uint32 { + if x != nil { + return x.CtrlFlag + } + return 0 +} + +func (x *GeneralGrayTipInfo) GetC2CType() uint32 { + if x != nil { + return x.C2CType + } + return 0 +} + +func (x *GeneralGrayTipInfo) GetServiceType() uint32 { + if x != nil { + return x.ServiceType + } + return 0 +} + +func (x *GeneralGrayTipInfo) GetTemplId() uint64 { + if x != nil { + return x.TemplId + } + return 0 +} + +func (x *GeneralGrayTipInfo) GetMsgTemplParam() []*TemplParam { + if x != nil { + return x.MsgTemplParam + } + return nil +} + +func (x *GeneralGrayTipInfo) GetContent() string { + if x != nil { + return x.Content + } + return "" +} + +type TemplParam struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` +} + +func (x *TemplParam) Reset() { + *x = TemplParam{} + if protoimpl.UnsafeEnabled { + mi := &file_group0x857_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TemplParam) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TemplParam) ProtoMessage() {} + +func (x *TemplParam) ProtoReflect() protoreflect.Message { + mi := &file_group0x857_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 TemplParam.ProtoReflect.Descriptor instead. +func (*TemplParam) Descriptor() ([]byte, []int) { + return file_group0x857_proto_rawDescGZIP(), []int{3} +} + +func (x *TemplParam) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *TemplParam) GetValue() string { + if x != nil { + return x.Value + } + return "" +} + +type MessageRecallReminder struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Uin int64 `protobuf:"varint,1,opt,name=uin,proto3" json:"uin,omitempty"` + Nickname []byte `protobuf:"bytes,2,opt,name=nickname,proto3" json:"nickname,omitempty"` + RecalledMsgList []*RecalledMessageMeta `protobuf:"bytes,3,rep,name=recalledMsgList,proto3" json:"recalledMsgList,omitempty"` + ReminderContent []byte `protobuf:"bytes,4,opt,name=reminderContent,proto3" json:"reminderContent,omitempty"` + Userdef []byte `protobuf:"bytes,5,opt,name=userdef,proto3" json:"userdef,omitempty"` + GroupType int32 `protobuf:"varint,6,opt,name=groupType,proto3" json:"groupType,omitempty"` + OpType int32 `protobuf:"varint,7,opt,name=opType,proto3" json:"opType,omitempty"` +} + +func (x *MessageRecallReminder) Reset() { + *x = MessageRecallReminder{} + if protoimpl.UnsafeEnabled { + mi := &file_group0x857_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MessageRecallReminder) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MessageRecallReminder) ProtoMessage() {} + +func (x *MessageRecallReminder) ProtoReflect() protoreflect.Message { + mi := &file_group0x857_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 MessageRecallReminder.ProtoReflect.Descriptor instead. +func (*MessageRecallReminder) Descriptor() ([]byte, []int) { + return file_group0x857_proto_rawDescGZIP(), []int{4} +} + +func (x *MessageRecallReminder) GetUin() int64 { + if x != nil { + return x.Uin + } + return 0 +} + +func (x *MessageRecallReminder) GetNickname() []byte { + if x != nil { + return x.Nickname + } + return nil +} + +func (x *MessageRecallReminder) GetRecalledMsgList() []*RecalledMessageMeta { + if x != nil { + return x.RecalledMsgList + } + return nil +} + +func (x *MessageRecallReminder) GetReminderContent() []byte { + if x != nil { + return x.ReminderContent + } + return nil +} + +func (x *MessageRecallReminder) GetUserdef() []byte { + if x != nil { + return x.Userdef + } + return nil +} + +func (x *MessageRecallReminder) GetGroupType() int32 { + if x != nil { + return x.GroupType + } + return 0 +} + +func (x *MessageRecallReminder) GetOpType() int32 { + if x != nil { + return x.OpType + } + return 0 +} + +type RecalledMessageMeta struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Seq int32 `protobuf:"varint,1,opt,name=seq,proto3" json:"seq,omitempty"` + Time int32 `protobuf:"varint,2,opt,name=time,proto3" json:"time,omitempty"` + MsgRandom int32 `protobuf:"varint,3,opt,name=msgRandom,proto3" json:"msgRandom,omitempty"` + MsgType int32 `protobuf:"varint,4,opt,name=msgType,proto3" json:"msgType,omitempty"` + MsgFlag int32 `protobuf:"varint,5,opt,name=msgFlag,proto3" json:"msgFlag,omitempty"` + AuthorUin int64 `protobuf:"varint,6,opt,name=authorUin,proto3" json:"authorUin,omitempty"` +} + +func (x *RecalledMessageMeta) Reset() { + *x = RecalledMessageMeta{} + if protoimpl.UnsafeEnabled { + mi := &file_group0x857_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RecalledMessageMeta) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RecalledMessageMeta) ProtoMessage() {} + +func (x *RecalledMessageMeta) ProtoReflect() protoreflect.Message { + mi := &file_group0x857_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 RecalledMessageMeta.ProtoReflect.Descriptor instead. +func (*RecalledMessageMeta) Descriptor() ([]byte, []int) { + return file_group0x857_proto_rawDescGZIP(), []int{5} +} + +func (x *RecalledMessageMeta) GetSeq() int32 { + if x != nil { + return x.Seq + } + return 0 +} + +func (x *RecalledMessageMeta) GetTime() int32 { + if x != nil { + return x.Time + } + return 0 +} + +func (x *RecalledMessageMeta) GetMsgRandom() int32 { + if x != nil { + return x.MsgRandom + } + return 0 +} + +func (x *RecalledMessageMeta) GetMsgType() int32 { + if x != nil { + return x.MsgType + } + return 0 +} + +func (x *RecalledMessageMeta) GetMsgFlag() int32 { + if x != nil { + return x.MsgFlag + } + return 0 +} + +func (x *RecalledMessageMeta) GetAuthorUin() int64 { + if x != nil { + return x.AuthorUin + } + return 0 +} + +type RedGrayTipsInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ShowLatest uint32 `protobuf:"varint,1,opt,name=showLatest,proto3" json:"showLatest,omitempty"` + SenderUin uint64 `protobuf:"varint,2,opt,name=senderUin,proto3" json:"senderUin,omitempty"` + ReceiverUin uint64 `protobuf:"varint,3,opt,name=receiverUin,proto3" json:"receiverUin,omitempty"` + SenderRichContent string `protobuf:"bytes,4,opt,name=senderRichContent,proto3" json:"senderRichContent,omitempty"` + ReceiverRichContent string `protobuf:"bytes,5,opt,name=receiverRichContent,proto3" json:"receiverRichContent,omitempty"` + AuthKey []byte `protobuf:"bytes,6,opt,name=authKey,proto3" json:"authKey,omitempty"` + MsgType int32 `protobuf:"zigzag32,7,opt,name=msgType,proto3" json:"msgType,omitempty"` + LuckyFlag uint32 `protobuf:"varint,8,opt,name=luckyFlag,proto3" json:"luckyFlag,omitempty"` + HideFlag uint32 `protobuf:"varint,9,opt,name=hideFlag,proto3" json:"hideFlag,omitempty"` +} + +func (x *RedGrayTipsInfo) Reset() { + *x = RedGrayTipsInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_group0x857_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RedGrayTipsInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RedGrayTipsInfo) ProtoMessage() {} + +func (x *RedGrayTipsInfo) ProtoReflect() protoreflect.Message { + mi := &file_group0x857_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 RedGrayTipsInfo.ProtoReflect.Descriptor instead. +func (*RedGrayTipsInfo) Descriptor() ([]byte, []int) { + return file_group0x857_proto_rawDescGZIP(), []int{6} +} + +func (x *RedGrayTipsInfo) GetShowLatest() uint32 { + if x != nil { + return x.ShowLatest + } + return 0 +} + +func (x *RedGrayTipsInfo) GetSenderUin() uint64 { + if x != nil { + return x.SenderUin + } + return 0 +} + +func (x *RedGrayTipsInfo) GetReceiverUin() uint64 { + if x != nil { + return x.ReceiverUin + } + return 0 +} + +func (x *RedGrayTipsInfo) GetSenderRichContent() string { + if x != nil { + return x.SenderRichContent + } + return "" +} + +func (x *RedGrayTipsInfo) GetReceiverRichContent() string { + if x != nil { + return x.ReceiverRichContent + } + return "" +} + +func (x *RedGrayTipsInfo) GetAuthKey() []byte { + if x != nil { + return x.AuthKey + } + return nil +} + +func (x *RedGrayTipsInfo) GetMsgType() int32 { + if x != nil { + return x.MsgType + } + return 0 +} + +func (x *RedGrayTipsInfo) GetLuckyFlag() uint32 { + if x != nil { + return x.LuckyFlag + } + return 0 +} + +func (x *RedGrayTipsInfo) GetHideFlag() uint32 { + if x != nil { + return x.HideFlag + } + return 0 +} + +var File_group0x857_proto protoreflect.FileDescriptor + +var file_group0x857_proto_rawDesc = []byte{ + 0x0a, 0x10, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x30, 0x78, 0x38, 0x35, 0x37, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x22, 0xa2, 0x02, 0x0a, 0x0d, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x4d, 0x73, 0x67, + 0x42, 0x6f, 0x64, 0x79, 0x12, 0x38, 0x0a, 0x0e, 0x6f, 0x70, 0x74, 0x4d, 0x73, 0x67, 0x47, 0x72, + 0x61, 0x79, 0x54, 0x69, 0x70, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x41, + 0x49, 0x4f, 0x47, 0x72, 0x61, 0x79, 0x54, 0x69, 0x70, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0e, + 0x6f, 0x70, 0x74, 0x4d, 0x73, 0x67, 0x47, 0x72, 0x61, 0x79, 0x54, 0x69, 0x70, 0x73, 0x12, 0x36, + 0x0a, 0x0d, 0x6f, 0x70, 0x74, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x64, 0x54, 0x69, 0x70, 0x73, 0x18, + 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x52, 0x65, 0x64, 0x47, 0x72, 0x61, 0x79, 0x54, + 0x69, 0x70, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0d, 0x6f, 0x70, 0x74, 0x4d, 0x73, 0x67, 0x52, + 0x65, 0x64, 0x54, 0x69, 0x70, 0x73, 0x12, 0x3a, 0x0a, 0x0c, 0x6f, 0x70, 0x74, 0x4d, 0x73, 0x67, + 0x52, 0x65, 0x63, 0x61, 0x6c, 0x6c, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x63, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x6d, 0x69, + 0x6e, 0x64, 0x65, 0x72, 0x52, 0x0c, 0x6f, 0x70, 0x74, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x63, 0x61, + 0x6c, 0x6c, 0x12, 0x41, 0x0a, 0x11, 0x6f, 0x70, 0x74, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, + 0x47, 0x72, 0x61, 0x79, 0x54, 0x69, 0x70, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, + 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x47, 0x72, 0x61, 0x79, 0x54, 0x69, 0x70, 0x49, 0x6e, + 0x66, 0x6f, 0x52, 0x11, 0x6f, 0x70, 0x74, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x47, 0x72, + 0x61, 0x79, 0x54, 0x69, 0x70, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x54, 0x79, 0x70, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x22, 0xc3, 0x01, 0x0a, 0x0f, 0x41, 0x49, 0x4f, 0x47, + 0x72, 0x61, 0x79, 0x54, 0x69, 0x70, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1e, 0x0a, 0x0a, 0x73, + 0x68, 0x6f, 0x77, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x0a, 0x73, 0x68, 0x6f, 0x77, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x63, + 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x63, 0x6f, + 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x6d, 0x69, 0x6e, 0x64, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x72, 0x65, 0x6d, 0x69, 0x6e, 0x64, 0x12, 0x14, 0x0a, + 0x05, 0x62, 0x72, 0x69, 0x65, 0x66, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x62, 0x72, + 0x69, 0x65, 0x66, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x55, + 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, + 0x65, 0x72, 0x55, 0x69, 0x6e, 0x12, 0x26, 0x0a, 0x0e, 0x72, 0x65, 0x6c, 0x69, 0x61, 0x6f, 0x41, + 0x64, 0x6d, 0x69, 0x6e, 0x4f, 0x70, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x72, + 0x65, 0x6c, 0x69, 0x61, 0x6f, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x4f, 0x70, 0x74, 0x22, 0x87, 0x02, + 0x0a, 0x12, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x47, 0x72, 0x61, 0x79, 0x54, 0x69, 0x70, + 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1a, 0x0a, 0x08, 0x62, 0x75, 0x73, 0x69, 0x54, 0x79, 0x70, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x62, 0x75, 0x73, 0x69, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75, 0x73, 0x69, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x06, 0x62, 0x75, 0x73, 0x69, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x74, 0x72, 0x6c, + 0x46, 0x6c, 0x61, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x63, 0x74, 0x72, 0x6c, + 0x46, 0x6c, 0x61, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x32, 0x63, 0x54, 0x79, 0x70, 0x65, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x63, 0x32, 0x63, 0x54, 0x79, 0x70, 0x65, 0x12, 0x20, + 0x0a, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x18, 0x0a, 0x07, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x49, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x07, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x0d, 0x6d, 0x73, + 0x67, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x18, 0x07, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x0b, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x52, 0x0d, + 0x6d, 0x73, 0x67, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, 0x18, 0x0a, + 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x36, 0x0a, 0x0a, 0x54, 0x65, 0x6d, 0x70, 0x6c, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, + 0xff, 0x01, 0x0a, 0x15, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x63, 0x61, 0x6c, + 0x6c, 0x52, 0x65, 0x6d, 0x69, 0x6e, 0x64, 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x6e, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x75, 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x6e, + 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x6e, + 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3e, 0x0a, 0x0f, 0x72, 0x65, 0x63, 0x61, 0x6c, + 0x6c, 0x65, 0x64, 0x4d, 0x73, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x14, 0x2e, 0x52, 0x65, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x0f, 0x72, 0x65, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x64, + 0x4d, 0x73, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x72, 0x65, 0x6d, 0x69, 0x6e, + 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x0f, 0x72, 0x65, 0x6d, 0x69, 0x6e, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x12, 0x18, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x64, 0x65, 0x66, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x07, 0x75, 0x73, 0x65, 0x72, 0x64, 0x65, 0x66, 0x12, 0x1c, 0x0a, 0x09, 0x67, + 0x72, 0x6f, 0x75, 0x70, 0x54, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, + 0x67, 0x72, 0x6f, 0x75, 0x70, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x70, 0x54, + 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6f, 0x70, 0x54, 0x79, 0x70, + 0x65, 0x22, 0xab, 0x01, 0x0a, 0x13, 0x52, 0x65, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x65, 0x71, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x73, 0x65, 0x71, 0x12, 0x12, 0x0a, 0x04, 0x74, + 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x12, + 0x1c, 0x0a, 0x09, 0x6d, 0x73, 0x67, 0x52, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x09, 0x6d, 0x73, 0x67, 0x52, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x12, 0x18, 0x0a, + 0x07, 0x6d, 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, + 0x6d, 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x73, 0x67, 0x46, 0x6c, + 0x61, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x6d, 0x73, 0x67, 0x46, 0x6c, 0x61, + 0x67, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x55, 0x69, 0x6e, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x55, 0x69, 0x6e, 0x22, + 0xbf, 0x02, 0x0a, 0x0f, 0x52, 0x65, 0x64, 0x47, 0x72, 0x61, 0x79, 0x54, 0x69, 0x70, 0x73, 0x49, + 0x6e, 0x66, 0x6f, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x68, 0x6f, 0x77, 0x4c, 0x61, 0x74, 0x65, 0x73, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x73, 0x68, 0x6f, 0x77, 0x4c, 0x61, 0x74, + 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x55, 0x69, 0x6e, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x55, 0x69, + 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x55, 0x69, 0x6e, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, + 0x55, 0x69, 0x6e, 0x12, 0x2c, 0x0a, 0x11, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x52, 0x69, 0x63, + 0x68, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, + 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x52, 0x69, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x12, 0x30, 0x0a, 0x13, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x52, 0x69, 0x63, + 0x68, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, + 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x52, 0x69, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x75, 0x74, 0x68, 0x4b, 0x65, 0x79, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x61, 0x75, 0x74, 0x68, 0x4b, 0x65, 0x79, 0x12, 0x18, 0x0a, + 0x07, 0x6d, 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x11, 0x52, 0x07, + 0x6d, 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6c, 0x75, 0x63, 0x6b, 0x79, + 0x46, 0x6c, 0x61, 0x67, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x6c, 0x75, 0x63, 0x6b, + 0x79, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x68, 0x69, 0x64, 0x65, 0x46, 0x6c, 0x61, + 0x67, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x68, 0x69, 0x64, 0x65, 0x46, 0x6c, 0x61, + 0x67, 0x42, 0x0a, 0x5a, 0x08, 0x2e, 0x3b, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x62, 0x06, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_group0x857_proto_rawDescOnce sync.Once + file_group0x857_proto_rawDescData = file_group0x857_proto_rawDesc +) + +func file_group0x857_proto_rawDescGZIP() []byte { + file_group0x857_proto_rawDescOnce.Do(func() { + file_group0x857_proto_rawDescData = protoimpl.X.CompressGZIP(file_group0x857_proto_rawDescData) + }) + return file_group0x857_proto_rawDescData +} + +var file_group0x857_proto_msgTypes = make([]protoimpl.MessageInfo, 7) +var file_group0x857_proto_goTypes = []interface{}{ + (*NotifyMsgBody)(nil), // 0: NotifyMsgBody + (*AIOGrayTipsInfo)(nil), // 1: AIOGrayTipsInfo + (*GeneralGrayTipInfo)(nil), // 2: GeneralGrayTipInfo + (*TemplParam)(nil), // 3: TemplParam + (*MessageRecallReminder)(nil), // 4: MessageRecallReminder + (*RecalledMessageMeta)(nil), // 5: RecalledMessageMeta + (*RedGrayTipsInfo)(nil), // 6: RedGrayTipsInfo +} +var file_group0x857_proto_depIdxs = []int32{ + 1, // 0: NotifyMsgBody.optMsgGrayTips:type_name -> AIOGrayTipsInfo + 6, // 1: NotifyMsgBody.optMsgRedTips:type_name -> RedGrayTipsInfo + 4, // 2: NotifyMsgBody.optMsgRecall:type_name -> MessageRecallReminder + 2, // 3: NotifyMsgBody.optGeneralGrayTip:type_name -> GeneralGrayTipInfo + 3, // 4: GeneralGrayTipInfo.msgTemplParam:type_name -> TemplParam + 5, // 5: MessageRecallReminder.recalledMsgList:type_name -> RecalledMessageMeta + 6, // [6:6] is the sub-list for method output_type + 6, // [6:6] is the sub-list for method input_type + 6, // [6:6] is the sub-list for extension type_name + 6, // [6:6] is the sub-list for extension extendee + 0, // [0:6] is the sub-list for field type_name +} + +func init() { file_group0x857_proto_init() } +func file_group0x857_proto_init() { + if File_group0x857_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_group0x857_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NotifyMsgBody); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_group0x857_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AIOGrayTipsInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_group0x857_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GeneralGrayTipInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_group0x857_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TemplParam); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_group0x857_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MessageRecallReminder); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_group0x857_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RecalledMessageMeta); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_group0x857_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RedGrayTipsInfo); 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_group0x857_proto_rawDesc, + NumEnums: 0, + NumMessages: 7, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_group0x857_proto_goTypes, + DependencyIndexes: file_group0x857_proto_depIdxs, + MessageInfos: file_group0x857_proto_msgTypes, + }.Build() + File_group0x857_proto = out.File + file_group0x857_proto_rawDesc = nil + file_group0x857_proto_goTypes = nil + file_group0x857_proto_depIdxs = nil +} diff --git a/client/pb/notify/group0x857.proto b/client/pb/notify/group0x857.proto new file mode 100644 index 00000000..9bc11702 --- /dev/null +++ b/client/pb/notify/group0x857.proto @@ -0,0 +1,67 @@ +syntax = "proto3"; + +option go_package = ".;notify"; + +message NotifyMsgBody { + AIOGrayTipsInfo optMsgGrayTips = 5; + RedGrayTipsInfo optMsgRedTips = 9; + MessageRecallReminder optMsgRecall = 11; + GeneralGrayTipInfo optGeneralGrayTip = 26; + int32 serviceType = 13; +} + +message AIOGrayTipsInfo{ + uint32 showLatest = 1; + bytes content = 2; + uint32 remind = 3; + bytes brief = 4; + uint64 receiverUin = 5; + uint32 reliaoAdminOpt = 6; +} + +message GeneralGrayTipInfo { + uint64 busiType = 1; + uint64 busiId = 2; + uint32 ctrlFlag = 3; + uint32 c2cType = 4; + uint32 serviceType = 5; + uint64 templId = 6; + repeated TemplParam msgTemplParam = 7; + string content = 8; +} + +message TemplParam { + string name = 1; + string value = 2; +} + +message MessageRecallReminder { + int64 uin = 1; + bytes nickname = 2; + repeated RecalledMessageMeta recalledMsgList = 3; + bytes reminderContent = 4; + bytes userdef = 5; + int32 groupType = 6; + int32 opType = 7; +} + +message RecalledMessageMeta { + int32 seq = 1; + int32 time = 2; + int32 msgRandom = 3; + int32 msgType = 4; + int32 msgFlag = 5; + int64 authorUin = 6; +} + +message RedGrayTipsInfo { + uint32 showLatest = 1; + uint64 senderUin = 2; + uint64 receiverUin = 3; + string senderRichContent = 4; + string receiverRichContent = 5; + bytes authKey = 6; + sint32 msgType = 7; + uint32 luckyFlag = 8; + uint32 hideFlag = 9; +} diff --git a/client/pb/oidb/oidb.pb.go b/client/pb/oidb/oidb.pb.go index 22cc489f..ed065a2b 100644 --- a/client/pb/oidb/oidb.pb.go +++ b/client/pb/oidb/oidb.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.25.0 -// protoc v3.12.3 +// protoc v3.11.4 // source: oidb.proto package oidb @@ -1445,6 +1445,85 @@ func (x *D8FCClientInfo) GetIngClientver() string { return "" } +type DED3ReqBody struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ToUin int64 `protobuf:"varint,1,opt,name=toUin,proto3" json:"toUin,omitempty"` + GroupCode int64 `protobuf:"varint,2,opt,name=groupCode,proto3" json:"groupCode,omitempty"` + MsgSeq int32 `protobuf:"varint,3,opt,name=msgSeq,proto3" json:"msgSeq,omitempty"` + MsgRand int32 `protobuf:"varint,4,opt,name=msgRand,proto3" json:"msgRand,omitempty"` + AioUin int64 `protobuf:"varint,5,opt,name=aioUin,proto3" json:"aioUin,omitempty"` +} + +func (x *DED3ReqBody) Reset() { + *x = DED3ReqBody{} + if protoimpl.UnsafeEnabled { + mi := &file_oidb_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DED3ReqBody) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DED3ReqBody) ProtoMessage() {} + +func (x *DED3ReqBody) ProtoReflect() protoreflect.Message { + mi := &file_oidb_proto_msgTypes[15] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DED3ReqBody.ProtoReflect.Descriptor instead. +func (*DED3ReqBody) Descriptor() ([]byte, []int) { + return file_oidb_proto_rawDescGZIP(), []int{15} +} + +func (x *DED3ReqBody) GetToUin() int64 { + if x != nil { + return x.ToUin + } + return 0 +} + +func (x *DED3ReqBody) GetGroupCode() int64 { + if x != nil { + return x.GroupCode + } + return 0 +} + +func (x *DED3ReqBody) GetMsgSeq() int32 { + if x != nil { + return x.MsgSeq + } + return 0 +} + +func (x *DED3ReqBody) GetMsgRand() int32 { + if x != nil { + return x.MsgRand + } + return 0 +} + +func (x *DED3ReqBody) GetAioUin() int64 { + if x != nil { + return x.AioUin + } + return 0 +} + var File_oidb_proto protoreflect.FileDescriptor var file_oidb_proto_rawDesc = []byte{ @@ -1707,8 +1786,17 @@ var file_oidb_proto_rawDesc = []byte{ 0x0a, 0x06, 0x69, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x69, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x69, 0x6e, 0x67, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x76, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x69, 0x6e, - 0x67, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x76, 0x65, 0x72, 0x42, 0x08, 0x5a, 0x06, 0x2e, 0x3b, - 0x6f, 0x69, 0x64, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x67, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x76, 0x65, 0x72, 0x22, 0x8b, 0x01, 0x0a, 0x0b, 0x44, + 0x45, 0x44, 0x33, 0x52, 0x65, 0x71, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, + 0x55, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x74, 0x6f, 0x55, 0x69, 0x6e, + 0x12, 0x1c, 0x0a, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x16, + 0x0a, 0x06, 0x6d, 0x73, 0x67, 0x53, 0x65, 0x71, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, + 0x6d, 0x73, 0x67, 0x53, 0x65, 0x71, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x73, 0x67, 0x52, 0x61, 0x6e, + 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x6d, 0x73, 0x67, 0x52, 0x61, 0x6e, 0x64, + 0x12, 0x16, 0x0a, 0x06, 0x61, 0x69, 0x6f, 0x55, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x06, 0x61, 0x69, 0x6f, 0x55, 0x69, 0x6e, 0x42, 0x08, 0x5a, 0x06, 0x2e, 0x3b, 0x6f, 0x69, + 0x64, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1723,7 +1811,7 @@ func file_oidb_proto_rawDescGZIP() []byte { return file_oidb_proto_rawDescData } -var file_oidb_proto_msgTypes = make([]protoimpl.MessageInfo, 15) +var file_oidb_proto_msgTypes = make([]protoimpl.MessageInfo, 16) var file_oidb_proto_goTypes = []interface{}{ (*OIDBSSOPkg)(nil), // 0: OIDBSSOPkg (*D8A0RspBody)(nil), // 1: D8A0RspBody @@ -1740,6 +1828,7 @@ var file_oidb_proto_goTypes = []interface{}{ (*D8FCCardNameElem)(nil), // 12: D8FCCardNameElem (*D8FCLevelName)(nil), // 13: D8FCLevelName (*D8FCClientInfo)(nil), // 14: D8FCClientInfo + (*DED3ReqBody)(nil), // 15: DED3ReqBody } var file_oidb_proto_depIdxs = []int32{ 2, // 0: D8A0RspBody.msgKickResult:type_name -> D8A0KickResult @@ -1945,6 +2034,18 @@ func file_oidb_proto_init() { return nil } } + file_oidb_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DED3ReqBody); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } file_oidb_proto_msgTypes[7].OneofWrappers = []interface{}{ (*D89AGroupinfo_Val)(nil), @@ -1955,7 +2056,7 @@ func file_oidb_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_oidb_proto_rawDesc, NumEnums: 0, - NumMessages: 15, + NumMessages: 16, NumExtensions: 0, NumServices: 0, }, diff --git a/client/pb/oidb/oidb.proto b/client/pb/oidb/oidb.proto index 53cd69da..d5089bdc 100644 --- a/client/pb/oidb/oidb.proto +++ b/client/pb/oidb/oidb.proto @@ -145,4 +145,12 @@ message D8FCLevelName { message D8FCClientInfo { int32 implat = 1; string ingClientver = 2; +} + +message DED3ReqBody { + int64 toUin = 1; + int64 groupCode = 2; + int32 msgSeq = 3; + int32 msgRand = 4; + int64 aioUin = 5; } \ No newline at end of file diff --git a/go.mod b/go.mod index 0bf68ec6..9887a232 100644 --- a/go.mod +++ b/go.mod @@ -4,5 +4,6 @@ go 1.14 require ( github.com/golang/protobuf v1.4.2 + github.com/tidwall/gjson v1.6.1 google.golang.org/protobuf v1.25.0 ) diff --git a/go.sum b/go.sum index fef7d0b8..31ae4621 100644 --- a/go.sum +++ b/go.sum @@ -24,6 +24,12 @@ github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w= github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/tidwall/gjson v1.6.1 h1:LRbvNuNuvAiISWg6gxLEFuCe72UKy5hDqhxW/8183ws= +github.com/tidwall/gjson v1.6.1/go.mod h1:BaHyNc5bjzYkPqgLq7mdVzeiRtULKULXLgZFKsxEHI0= +github.com/tidwall/match v1.0.1 h1:PnKP62LPNxHKTwvHHZZzdOAOCtsJTjo6dZLCwpKm5xc= +github.com/tidwall/match v1.0.1/go.mod h1:LujAq0jyVjBy028G1WhWfIzbpQfMO8bBZ6Tyb0+pL9E= +github.com/tidwall/pretty v1.0.2 h1:Z7S3cePv9Jwm1KwS0513MRaoUe3S01WPbLNV40pwWZU= +github.com/tidwall/pretty v1.0.2/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= diff --git a/message/elements.go b/message/elements.go index c369251d..f6f4f110 100644 --- a/message/elements.go +++ b/message/elements.go @@ -96,6 +96,19 @@ type LightAppElement struct { Content string } +type RedBagElement struct { + MsgType RedBagMessageType + Title string +} + +type RedBagMessageType int + +const ( + Simple RedBagMessageType = 2 + Lucky RedBagMessageType = 3 + World RedBagMessageType = 6 +) + func NewText(s string) *TextElement { return &TextElement{Content: s} } @@ -244,6 +257,10 @@ func (e *LightAppElement) Type() ElementType { return LightApp } +func (e *RedBagElement) Type() ElementType { + return RedBag +} + var faceMap = map[int]string{ 14: "微笑", 1: "撇嘴", diff --git a/message/message.go b/message/message.go index e120a9ab..702c274c 100644 --- a/message/message.go +++ b/message/message.go @@ -6,6 +6,7 @@ import ( "github.com/Mrs4s/MiraiGo/client/pb/msg" "github.com/Mrs4s/MiraiGo/utils" "github.com/golang/protobuf/proto" + "github.com/tidwall/gjson" "math" "reflect" "regexp" @@ -83,6 +84,7 @@ const ( Voice Video LightApp + RedBag ) func (s *Sender) IsAnonymous() bool { @@ -138,6 +140,8 @@ func (msg *GroupMessage) ToString() (res string) { res += "[Image: " + e.ImageId + "]" case *AtElement: res += e.Display + case *RedBagElement: + res += "[RedBag:" + e.Title + "]" case *ReplyElement: res += "[Reply:" + strconv.FormatInt(int64(e.ReplySeq), 10) + "]" } @@ -502,6 +506,15 @@ func ParseMessageElems(elems []*msg.Elem) []IMessageElement { if elem.RichMsg.ServiceId == 33 { continue // 前面一个 elem 已经解析到链接 } + if isOk := strings.Contains(content, "