From d600042110f2dafa480b25f6fd078aa88eb2a5cc Mon Sep 17 00:00:00 2001
From: wangchuxiao <wangchuxiao97@outlook.com>
Date: Thu, 31 Mar 2022 14:50:02 +0800
Subject: [PATCH] tag and set private tips

---
 cmd/open_im_api/main.go                       |    1 +
 config/config.yaml                            |   12 +
 internal/api/conversation/conversation.go     |    4 +-
 internal/api/office/tag.go                    |   36 +
 internal/rpc/msg/conversation_notification.go |   42 +-
 internal/rpc/msg/del_msg.go                   |    2 +-
 internal/rpc/office/office.go                 |   27 +
 internal/rpc/user/user.go                     |   73 +-
 pkg/base_info/conversation_api_struct.go      |   23 +-
 pkg/base_info/office_struct.go                |   12 +
 pkg/common/config/config.go                   |    5 +
 pkg/common/constant/constant.go               |   11 +-
 pkg/common/db/mongoModel.go                   |    8 +
 pkg/proto/office/office.pb.go                 |  274 +-
 pkg/proto/office/office.proto                 |   12 +
 pkg/proto/sdk_ws/ws.pb.go                     |  525 +-
 pkg/proto/sdk_ws/ws.proto                     |    5 +
 pkg/proto/user/user.pb.go                     | 6830 +++++++----------
 pkg/proto/user/user.proto                     |    9 +-
 19 files changed, 3345 insertions(+), 4566 deletions(-)

diff --git a/cmd/open_im_api/main.go b/cmd/open_im_api/main.go
index 2f93c97e8..14d129807 100644
--- a/cmd/open_im_api/main.go
+++ b/cmd/open_im_api/main.go
@@ -118,6 +118,7 @@ func main() {
 	officeGroup := r.Group("/office")
 	{
 		officeGroup.POST("/get_user_tags", office.GetUserTags)
+		officeGroup.POST("/get_user_tag_by_id", office.GetUserTagByID)
 		officeGroup.POST("/create_tag", office.CreateTag)
 		officeGroup.POST("/delete_tag", office.DeleteTag)
 		officeGroup.POST("/set_tag", office.SetTag)
diff --git a/config/config.yaml b/config/config.yaml
index a801d7c57..a78e23f01 100644
--- a/config/config.yaml
+++ b/config/config.yaml
@@ -551,6 +551,18 @@ notification:
       defaultTips:
         tips: "conversation opt update"
 
+  conversationSetPrivate:
+    conversation:
+      reliabilityLevel: 2
+      unreadCount: true
+      offlinePush:
+        switch: true
+        title: "conversation was set to private "
+        desc: "conversation was set to private "
+        ext: "conversation was set to private "
+      defaultTips:
+        tips: "conversation was set to private "
+
 
 
 #---------------demo configuration---------------------#
diff --git a/internal/api/conversation/conversation.go b/internal/api/conversation/conversation.go
index 5c06ecaf5..3d580864f 100644
--- a/internal/api/conversation/conversation.go
+++ b/internal/api/conversation/conversation.go
@@ -128,7 +128,7 @@ func GetConversation(c *gin.Context) {
 	client := pbUser.NewUserClient(etcdConn)
 	respPb, err := client.GetConversation(context.Background(), &reqPb)
 	if err != nil {
-		log.NewError(req.OperationID, utils.GetSelfFuncName(), "SetConversation rpc failed, ", reqPb.String(), err.Error())
+		log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetConversation rpc failed, ", reqPb.String(), err.Error())
 		c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": "GetAllConversationMsgOpt rpc failed, " + err.Error()})
 		return
 	}
@@ -192,7 +192,7 @@ func SetRecvMsgOpt(c *gin.Context) {
 	client := pbUser.NewUserClient(etcdConn)
 	respPb, err := client.SetRecvMsgOpt(context.Background(), &reqPb)
 	if err != nil {
-		log.NewError(req.OperationID, utils.GetSelfFuncName(), "SetConversation rpc failed, ", reqPb.String(), err.Error())
+		log.NewError(req.OperationID, utils.GetSelfFuncName(), "SetRecvMsgOpt rpc failed, ", reqPb.String(), err.Error())
 		c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": "GetAllConversationMsgOpt rpc failed, " + err.Error()})
 		return
 	}
diff --git a/internal/api/office/tag.go b/internal/api/office/tag.go
index 1f14a0116..a1229ed83 100644
--- a/internal/api/office/tag.go
+++ b/internal/api/office/tag.go
@@ -234,3 +234,39 @@ func GetTagSendLogs(c *gin.Context) {
 	resp.Data.CurrentPage = respPb.Pagination.CurrentPage
 	c.JSON(http.StatusOK, resp)
 }
+
+func GetUserTagByID(c *gin.Context) {
+	var (
+		req    apistruct.GetUserTagByIDReq
+		resp   apistruct.GetUserTagByIDResp
+		reqPb  pbOffice.GetUserTagByIDReq
+		respPb *pbOffice.GetUserTagByIDResp
+	)
+	if err := c.BindJSON(&req); err != nil {
+		log.NewError(req.OperationID, utils.GetSelfFuncName(), "bind json failed", err.Error())
+		c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "bind json failed " + err.Error()})
+		return
+	}
+	ok, userID := token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID)
+	if !ok {
+		log.NewError(req.OperationID, "GetUserIDFromToken false ", c.Request.Header.Get("token"))
+		c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "GetUserIDFromToken failed"})
+		return
+	}
+	reqPb.UserID = userID
+	reqPb.OperationID = req.OperationID
+	reqPb.TagID = req.TagID
+	etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfficeName)
+	client := pbOffice.NewOfficeServiceClient(etcdConn)
+	respPb, err := client.GetUserTagByID(context.Background(), &reqPb)
+	if err != nil {
+		log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetUserTagByID failed", err.Error())
+		c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "CreateTag rpc server failed" + err.Error()})
+		return
+	}
+	if err := utils.CopyStructFields(&resp.CommResp, respPb.CommonResp); err != nil {
+		log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error())
+	}
+	resp.Data.Tag = respPb.Tag
+	c.JSON(http.StatusOK, resp)
+}
diff --git a/internal/rpc/msg/conversation_notification.go b/internal/rpc/msg/conversation_notification.go
index 598ba1cc7..ccb5e3674 100644
--- a/internal/rpc/msg/conversation_notification.go
+++ b/internal/rpc/msg/conversation_notification.go
@@ -10,12 +10,12 @@ import (
 	"github.com/golang/protobuf/proto"
 )
 
-func conversationNotification(contentType int32, m proto.Message, operationID, userID string) {
+func SetConversationNotification(operationID, sendID, recvID string, contentType int, m proto.Message, tips open_im_sdk.TipsComm) {
+	log.NewInfo(operationID, "args: ", sendID, recvID, contentType, m.String(), tips.String())
 	var err error
-	var tips open_im_sdk.TipsComm
 	tips.Detail, err = proto.Marshal(m)
 	if err != nil {
-		log.Error(operationID, utils.GetSelfFuncName(), "Marshal failed ", err.Error(), m.String())
+		log.NewError(operationID, "Marshal failed ", err.Error(), m.String())
 		return
 	}
 	marshaler := jsonpb.Marshaler{
@@ -24,15 +24,10 @@ func conversationNotification(contentType int32, m proto.Message, operationID, u
 		EmitDefaults: false,
 	}
 	tips.JsonDetail, _ = marshaler.MarshalToString(m)
-	cn := config.Config.Notification
-	switch contentType {
-	case constant.ConversationOptChangeNotification:
-		tips.DefaultTips = cn.ConversationOptUpdate.DefaultTips.Tips
-	}
 	var n NotificationMsg
-	n.SendID = userID
-	n.RecvID = userID
-	n.ContentType = contentType
+	n.SendID = sendID
+	n.RecvID = recvID
+	n.ContentType = int32(contentType)
 	n.SessionType = constant.SingleChatType
 	n.MsgFrom = constant.SysMsgType
 	n.OperationID = operationID
@@ -44,10 +39,27 @@ func conversationNotification(contentType int32, m proto.Message, operationID, u
 	Notification(&n)
 }
 
-func SetConversationNotification(operationID, userID string) {
-	log.NewInfo(operationID, utils.GetSelfFuncName(), "userID: ", userID)
-	conversationUpdateTips := open_im_sdk.ConversationUpdateTips{
+// SetPrivate调用
+func ConversationSetPrivateNotification(operationID, sendID, recvID string, isPrivateChat bool) {
+	log.NewInfo(operationID, utils.GetSelfFuncName())
+	conversationSetPrivateTips := &open_im_sdk.ConversationSetPrivateTips{
+		RecvID:    recvID,
+		SendID:    sendID,
+		IsPrivate: isPrivateChat,
+	}
+	var tips open_im_sdk.TipsComm
+	strMap := map[bool]string{true: "true", false: "false"}
+	tips.DefaultTips = config.Config.Notification.ConversationSetPrivate.DefaultTips.Tips + strMap[isPrivateChat] + " by " + sendID
+	SetConversationNotification(operationID, sendID, recvID, constant.ConversationPrivateChatNotification, conversationSetPrivateTips, tips)
+}
+
+// 会话改变
+func ConversationChangeNotification(operationID, userID string) {
+	log.NewInfo(operationID, utils.GetSelfFuncName())
+	ConversationChangedTips := &open_im_sdk.ConversationUpdateTips{
 		UserID: userID,
 	}
-	conversationNotification(constant.ConversationOptChangeNotification, &conversationUpdateTips, operationID, userID)
+	var tips open_im_sdk.TipsComm
+	tips.DefaultTips = config.Config.Notification.ConversationOptUpdate.DefaultTips.Tips
+	SetConversationNotification(operationID, userID, userID, constant.ConversationOptChangeNotification, ConversationChangedTips, tips)
 }
diff --git a/internal/rpc/msg/del_msg.go b/internal/rpc/msg/del_msg.go
index 838312d40..daacb8533 100644
--- a/internal/rpc/msg/del_msg.go
+++ b/internal/rpc/msg/del_msg.go
@@ -16,7 +16,7 @@ func (rpc *rpcChat) DelMsgList(_ context.Context, req *commonPb.DelMsgListReq) (
 		log.NewError(req.OperationID, utils.GetSelfFuncName(), "DelMsg failed", err.Error())
 		resp.ErrMsg = constant.ErrDB.ErrMsg
 		resp.ErrCode = constant.ErrDB.ErrCode
-		return resp, err
+		return resp, nil
 	}
 	log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp.String())
 	return resp, nil
diff --git a/internal/rpc/office/office.go b/internal/rpc/office/office.go
index e96475773..29f5eded3 100644
--- a/internal/rpc/office/office.go
+++ b/internal/rpc/office/office.go
@@ -215,3 +215,30 @@ func (s *officeServer) GetTagSendLogs(_ context.Context, req *pbOffice.GetTagSen
 	log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp.String())
 	return resp, nil
 }
+
+func (s *officeServer) GetUserTagByID(_ context.Context, req *pbOffice.GetUserTagByIDReq) (resp *pbOffice.GetUserTagByIDResp, err error) {
+	log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req.String())
+	resp = &pbOffice.GetUserTagByIDResp{CommonResp: &pbOffice.CommonResp{}}
+	tag, err := db.DB.GetTagByID(req.UserID, req.TagID)
+	if err != nil {
+		log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetTagByID failed", err.Error())
+		resp.CommonResp.ErrCode = constant.ErrDB.ErrCode
+		resp.CommonResp.ErrMsg = constant.ErrDB.ErrMsg
+		return resp, nil
+	}
+	for _, userID := range tag.UserList {
+		userName, err := im_mysql_model.GetUserNameByUserID(userID)
+		if err != nil {
+			log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetUserNameByUserID failed", err.Error())
+			continue
+		}
+		resp.Tag.UserList = append(resp.Tag.UserList, &pbOffice.TagUser{
+			UserID:   userID,
+			UserName: userName,
+		})
+	}
+	resp.Tag.TagID = tag.TagID
+	resp.Tag.TagName = tag.TagName
+	log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp.String())
+	return resp, nil
+}
diff --git a/internal/rpc/user/user.go b/internal/rpc/user/user.go
index cbeb9240b..b8d8d24f1 100644
--- a/internal/rpc/user/user.go
+++ b/internal/rpc/user/user.go
@@ -73,28 +73,26 @@ func (s *userServer) Run() {
 }
 
 func syncPeerUserConversation(conversation *pbUser.Conversation, operationID string) error {
-	if conversation.ConversationType == constant.SingleChatType {
-		peerUserConversation := db.Conversation{
-			OwnerUserID:      conversation.UserID,
-			ConversationID:   "single_" + conversation.OwnerUserID,
-			ConversationType: constant.SingleChatType,
-			UserID:           conversation.OwnerUserID,
-			GroupID:          "",
-			RecvMsgOpt:       0,
-			UnreadCount:      0,
-			DraftTextTime:    0,
-			IsPinned:         false,
-			IsPrivateChat:    conversation.IsPrivateChat,
-			AttachedInfo:     "",
-			Ex:               "",
-		}
-		err := imdb.PeerUserSetConversation(peerUserConversation)
-		if err != nil {
-			log.NewError(operationID, utils.GetSelfFuncName(), "SetConversation error", err.Error())
-			return err
-		}
-		chat.SetConversationNotification(operationID, conversation.UserID)
+	peerUserConversation := db.Conversation{
+		OwnerUserID:      conversation.UserID,
+		ConversationID:   "single_" + conversation.OwnerUserID,
+		ConversationType: constant.SingleChatType,
+		UserID:           conversation.OwnerUserID,
+		GroupID:          "",
+		RecvMsgOpt:       0,
+		UnreadCount:      0,
+		DraftTextTime:    0,
+		IsPinned:         false,
+		IsPrivateChat:    conversation.IsPrivateChat,
+		AttachedInfo:     "",
+		Ex:               "",
 	}
+	err := imdb.PeerUserSetConversation(peerUserConversation)
+	if err != nil {
+		log.NewError(operationID, utils.GetSelfFuncName(), "SetConversation error", err.Error())
+		return err
+	}
+	chat.ConversationSetPrivateNotification(operationID, conversation.OwnerUserID, conversation.UserID, conversation.IsPrivateChat)
 	return nil
 }
 
@@ -122,6 +120,9 @@ func (s *userServer) GetUserInfo(ctx context.Context, req *pbUser.GetUserInfoReq
 
 func (s *userServer) BatchSetConversations(ctx context.Context, req *pbUser.BatchSetConversationsReq) (*pbUser.BatchSetConversationsResp, error) {
 	log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req.String())
+	if req.NotificationType == 0 {
+		req.NotificationType = constant.ConversationOptChangeNotification
+	}
 	resp := &pbUser.BatchSetConversationsResp{}
 	for _, v := range req.Conversations {
 		conversation := db.Conversation{}
@@ -139,11 +140,14 @@ func (s *userServer) BatchSetConversations(ctx context.Context, req *pbUser.Batc
 			continue
 		}
 		resp.Success = append(resp.Success, v.ConversationID)
-		if err := syncPeerUserConversation(v, req.OperationID); err != nil {
-			log.NewError(req.OperationID, utils.GetSelfFuncName(), "syncPeerUserConversation", err.Error())
+		// if is set private chat operation,then peer user need to sync and set tips\
+		if v.ConversationType == constant.SingleChatType && req.NotificationType == constant.ConversationPrivateChatNotification {
+			if err := syncPeerUserConversation(v, req.OperationID); err != nil {
+				log.NewError(req.OperationID, utils.GetSelfFuncName(), "syncPeerUserConversation", err.Error())
+			}
 		}
 	}
-	chat.SetConversationNotification(req.OperationID, req.OwnerUserID)
+	chat.ConversationChangeNotification(req.OperationID, req.OwnerUserID)
 	log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "rpc return", resp.String())
 	resp.CommonResp = &pbUser.CommonResp{}
 	return resp, nil
@@ -202,6 +206,9 @@ func (s *userServer) GetConversations(ctx context.Context, req *pbUser.GetConver
 
 func (s *userServer) SetConversation(ctx context.Context, req *pbUser.SetConversationReq) (*pbUser.SetConversationResp, error) {
 	log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req.String())
+	if req.NotificationType == 0 {
+		req.NotificationType = constant.ConversationOptChangeNotification
+	}
 	resp := &pbUser.SetConversationResp{}
 	var conversation db.Conversation
 	if err := utils.CopyStructFields(&conversation, req.Conversation); err != nil {
@@ -218,13 +225,17 @@ func (s *userServer) SetConversation(ctx context.Context, req *pbUser.SetConvers
 		resp.CommonResp = &pbUser.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}
 		return resp, nil
 	}
-	//sync peer user conversation if conversation is singleChatType
-	if err := syncPeerUserConversation(req.Conversation, req.OperationID); err != nil {
-		log.NewError(req.OperationID, utils.GetSelfFuncName(), "syncPeerUserConversation", err.Error())
-		resp.CommonResp = &pbUser.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}
-		return resp, nil
+	// notification
+	if req.Conversation.ConversationType == constant.SingleChatType && req.NotificationType == constant.ConversationPrivateChatNotification {
+		//sync peer user conversation if conversation is singleChatType
+		if err := syncPeerUserConversation(req.Conversation, req.OperationID); err != nil {
+			log.NewError(req.OperationID, utils.GetSelfFuncName(), "syncPeerUserConversation", err.Error())
+			resp.CommonResp = &pbUser.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}
+			return resp, nil
+		}
+	} else {
+		chat.ConversationChangeNotification(req.OperationID, req.Conversation.OwnerUserID)
 	}
-	chat.SetConversationNotification(req.OperationID, req.Conversation.OwnerUserID)
 	log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "rpc return", resp.String())
 	resp.CommonResp = &pbUser.CommonResp{}
 	return resp, nil
@@ -259,7 +270,7 @@ func (s *userServer) SetRecvMsgOpt(ctx context.Context, req *pbUser.SetRecvMsgOp
 		resp.CommonResp = &pbUser.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}
 		return resp, nil
 	}
-	chat.SetConversationNotification(req.OperationID, req.OwnerUserID)
+	chat.ConversationChangeNotification(req.OperationID, req.OwnerUserID)
 	log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp.String())
 	resp.CommonResp = &pbUser.CommonResp{}
 	return resp, nil
diff --git a/pkg/base_info/conversation_api_struct.go b/pkg/base_info/conversation_api_struct.go
index ed706c4ad..10b46f547 100644
--- a/pkg/base_info/conversation_api_struct.go
+++ b/pkg/base_info/conversation_api_struct.go
@@ -34,8 +34,8 @@ type SetReceiveMessageOptResp struct {
 
 type Conversation struct {
 	OwnerUserID      string `json:"ownerUserID" binding:"required"`
-	ConversationID   string `json:"conversationID"`
-	ConversationType int32  `json:"conversationType"`
+	ConversationID   string `json:"conversationID" binding:"required"`
+	ConversationType int32  `json:"conversationType" binding:"required"`
 	UserID           string `json:"userID"`
 	GroupID          string `json:"groupID"`
 	RecvMsgOpt       int32  `json:"recvMsgOpt"  binding:"omitempty,oneof=0 1 2"`
@@ -49,7 +49,8 @@ type Conversation struct {
 
 type SetConversationReq struct {
 	Conversation
-	OperationID string `json:"operationID" binding:"required"`
+	NotificationType int32  `json:"notificationType"`
+	OperationID      string `json:"operationID" binding:"required"`
 }
 
 type SetConversationResp struct {
@@ -57,9 +58,10 @@ type SetConversationResp struct {
 }
 
 type BatchSetConversationsReq struct {
-	Conversations []Conversation `json:"conversations" binding:"required"`
-	OwnerUserID   string         `json:"ownerUserID" binding:"required"`
-	OperationID   string         `json:"operationID" binding:"required"`
+	Conversations    []Conversation `json:"conversations" binding:"required"`
+	NotificationType int32          `json:"notificationType"`
+	OwnerUserID      string         `json:"ownerUserID" binding:"required"`
+	OperationID      string         `json:"operationID" binding:"required"`
 }
 
 type BatchSetConversationsResp struct {
@@ -103,10 +105,11 @@ type GetConversationsResp struct {
 }
 
 type SetRecvMsgOptReq struct {
-	OwnerUserID    string `json:"ownerUserID" binding:"required"`
-	ConversationID string `json:"conversationID"`
-	RecvMsgOpt     int32  `json:"recvMsgOpt"  binding:"omitempty,oneof=0 1 2"`
-	OperationID    string `json:"operationID" binding:"required"`
+	OwnerUserID      string `json:"ownerUserID" binding:"required"`
+	ConversationID   string `json:"conversationID"`
+	RecvMsgOpt       int32  `json:"recvMsgOpt"  binding:"omitempty,oneof=0 1 2"`
+	OperationID      string `json:"operationID" binding:"required"`
+	NotificationType int32  `json:"notificationType"`
 }
 
 type SetRecvMsgOptResp struct {
diff --git a/pkg/base_info/office_struct.go b/pkg/base_info/office_struct.go
index ac22c2239..e4dca230d 100644
--- a/pkg/base_info/office_struct.go
+++ b/pkg/base_info/office_struct.go
@@ -74,3 +74,15 @@ type GetTagSendLogsResp struct {
 		ShowNumber  int32                  `json:"showNumber"`
 	} `json:"data"`
 }
+
+type GetUserTagByIDReq struct {
+	TagID       string `json:"tagID" binding:"required"`
+	OperationID string `json:"operationID" binding:"required"`
+}
+
+type GetUserTagByIDResp struct {
+	CommResp
+	Data struct {
+		Tag *pbOffice.Tag `json:"tag"`
+	} `json:"data"`
+}
diff --git a/pkg/common/config/config.go b/pkg/common/config/config.go
index 2a9759cc7..2242fb452 100644
--- a/pkg/common/config/config.go
+++ b/pkg/common/config/config.go
@@ -350,6 +350,11 @@ type config struct {
 			OfflinePush  POfflinePush  `yaml:"offlinePush"`
 			DefaultTips  PDefaultTips  `yaml:"defaultTips"`
 		} `yaml:"conversationOptUpdate"`
+		ConversationSetPrivate struct {
+			Conversation PConversation `yaml:"conversation"`
+			OfflinePush  POfflinePush  `yaml:"offlinePush"`
+			DefaultTips  PDefaultTips  `yaml:"defaultTips"`
+		} `yaml:"conversationSetPrivate"`
 	}
 	Demo struct {
 		Port         []int `yaml:"openImDemoPort"`
diff --git a/pkg/common/constant/constant.go b/pkg/common/constant/constant.go
index a38076e7b..15b7d60f8 100644
--- a/pkg/common/constant/constant.go
+++ b/pkg/common/constant/constant.go
@@ -56,13 +56,11 @@ const (
 	FriendRemarkSetNotification           = 1206 //set_friend_remark?
 	BlackAddedNotification                = 1207 //add_black
 	BlackDeletedNotification              = 1208 //remove_black
-	ConversationOptChangeNotification     = 1300 // change conversation opt
+
+	ConversationOptChangeNotification = 1300 // change conversation opt
 
 	UserNotificationBegin       = 1301
 	UserInfoUpdatedNotification = 1303 //SetSelfInfoTip             = 204
-	ConversationNotification    = 1307
-	ConversationNotNotification = 1308
-	ConversationDefault         = 0
 	UserNotificationEnd         = 1399
 	OANotification              = 1400
 
@@ -87,7 +85,10 @@ const (
 	SignalingNotificationBegin = 1600
 	SignalingNotification      = 1601
 	SignalingNotificationEnd   = 1699
-	NotificationEnd            = 2000
+
+	ConversationPrivateChatNotification = 1701
+
+	NotificationEnd = 2000
 
 	//status
 	MsgNormal  = 1
diff --git a/pkg/common/db/mongoModel.go b/pkg/common/db/mongoModel.go
index bcc05a295..fb866bbaa 100644
--- a/pkg/common/db/mongoModel.go
+++ b/pkg/common/db/mongoModel.go
@@ -470,6 +470,14 @@ func (d *DataBases) CreateTag(userID, tagName string, userList []string) error {
 	return err
 }
 
+func (d *DataBases) GetTagByID(userID, tagID string) (Tag, error) {
+	ctx, _ := context.WithTimeout(context.Background(), time.Duration(config.Config.Mongo.DBTimeout)*time.Second)
+	c := d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cTag)
+	var tag Tag
+	err := c.FindOne(ctx, bson.M{"user_id": userID, "tag_id": tagID}).Decode(&tag)
+	return tag, err
+}
+
 func (d *DataBases) DeleteTag(userID, tagID string) error {
 	ctx, _ := context.WithTimeout(context.Background(), time.Duration(config.Config.Mongo.DBTimeout)*time.Second)
 	c := d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cTag)
diff --git a/pkg/proto/office/office.pb.go b/pkg/proto/office/office.pb.go
index 34648cdb7..83c352e70 100644
--- a/pkg/proto/office/office.pb.go
+++ b/pkg/proto/office/office.pb.go
@@ -36,7 +36,7 @@ func (m *CommonResp) Reset()         { *m = CommonResp{} }
 func (m *CommonResp) String() string { return proto.CompactTextString(m) }
 func (*CommonResp) ProtoMessage()    {}
 func (*CommonResp) Descriptor() ([]byte, []int) {
-	return fileDescriptor_office_b53660f9aedbfa32, []int{0}
+	return fileDescriptor_office_0fe56c4f733d3593, []int{0}
 }
 func (m *CommonResp) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_CommonResp.Unmarshal(m, b)
@@ -82,7 +82,7 @@ func (m *TagUser) Reset()         { *m = TagUser{} }
 func (m *TagUser) String() string { return proto.CompactTextString(m) }
 func (*TagUser) ProtoMessage()    {}
 func (*TagUser) Descriptor() ([]byte, []int) {
-	return fileDescriptor_office_b53660f9aedbfa32, []int{1}
+	return fileDescriptor_office_0fe56c4f733d3593, []int{1}
 }
 func (m *TagUser) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_TagUser.Unmarshal(m, b)
@@ -129,7 +129,7 @@ func (m *Tag) Reset()         { *m = Tag{} }
 func (m *Tag) String() string { return proto.CompactTextString(m) }
 func (*Tag) ProtoMessage()    {}
 func (*Tag) Descriptor() ([]byte, []int) {
-	return fileDescriptor_office_b53660f9aedbfa32, []int{2}
+	return fileDescriptor_office_0fe56c4f733d3593, []int{2}
 }
 func (m *Tag) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_Tag.Unmarshal(m, b)
@@ -182,7 +182,7 @@ func (m *GetUserTagsReq) Reset()         { *m = GetUserTagsReq{} }
 func (m *GetUserTagsReq) String() string { return proto.CompactTextString(m) }
 func (*GetUserTagsReq) ProtoMessage()    {}
 func (*GetUserTagsReq) Descriptor() ([]byte, []int) {
-	return fileDescriptor_office_b53660f9aedbfa32, []int{3}
+	return fileDescriptor_office_0fe56c4f733d3593, []int{3}
 }
 func (m *GetUserTagsReq) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_GetUserTagsReq.Unmarshal(m, b)
@@ -228,7 +228,7 @@ func (m *GetUserTagsResp) Reset()         { *m = GetUserTagsResp{} }
 func (m *GetUserTagsResp) String() string { return proto.CompactTextString(m) }
 func (*GetUserTagsResp) ProtoMessage()    {}
 func (*GetUserTagsResp) Descriptor() ([]byte, []int) {
-	return fileDescriptor_office_b53660f9aedbfa32, []int{4}
+	return fileDescriptor_office_0fe56c4f733d3593, []int{4}
 }
 func (m *GetUserTagsResp) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_GetUserTagsResp.Unmarshal(m, b)
@@ -276,7 +276,7 @@ func (m *CreateTagReq) Reset()         { *m = CreateTagReq{} }
 func (m *CreateTagReq) String() string { return proto.CompactTextString(m) }
 func (*CreateTagReq) ProtoMessage()    {}
 func (*CreateTagReq) Descriptor() ([]byte, []int) {
-	return fileDescriptor_office_b53660f9aedbfa32, []int{5}
+	return fileDescriptor_office_0fe56c4f733d3593, []int{5}
 }
 func (m *CreateTagReq) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_CreateTagReq.Unmarshal(m, b)
@@ -335,7 +335,7 @@ func (m *CreateTagResp) Reset()         { *m = CreateTagResp{} }
 func (m *CreateTagResp) String() string { return proto.CompactTextString(m) }
 func (*CreateTagResp) ProtoMessage()    {}
 func (*CreateTagResp) Descriptor() ([]byte, []int) {
-	return fileDescriptor_office_b53660f9aedbfa32, []int{6}
+	return fileDescriptor_office_0fe56c4f733d3593, []int{6}
 }
 func (m *CreateTagResp) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_CreateTagResp.Unmarshal(m, b)
@@ -375,7 +375,7 @@ func (m *DeleteTagReq) Reset()         { *m = DeleteTagReq{} }
 func (m *DeleteTagReq) String() string { return proto.CompactTextString(m) }
 func (*DeleteTagReq) ProtoMessage()    {}
 func (*DeleteTagReq) Descriptor() ([]byte, []int) {
-	return fileDescriptor_office_b53660f9aedbfa32, []int{7}
+	return fileDescriptor_office_0fe56c4f733d3593, []int{7}
 }
 func (m *DeleteTagReq) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_DeleteTagReq.Unmarshal(m, b)
@@ -427,7 +427,7 @@ func (m *DeleteTagResp) Reset()         { *m = DeleteTagResp{} }
 func (m *DeleteTagResp) String() string { return proto.CompactTextString(m) }
 func (*DeleteTagResp) ProtoMessage()    {}
 func (*DeleteTagResp) Descriptor() ([]byte, []int) {
-	return fileDescriptor_office_b53660f9aedbfa32, []int{8}
+	return fileDescriptor_office_0fe56c4f733d3593, []int{8}
 }
 func (m *DeleteTagResp) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_DeleteTagResp.Unmarshal(m, b)
@@ -470,7 +470,7 @@ func (m *SetTagReq) Reset()         { *m = SetTagReq{} }
 func (m *SetTagReq) String() string { return proto.CompactTextString(m) }
 func (*SetTagReq) ProtoMessage()    {}
 func (*SetTagReq) Descriptor() ([]byte, []int) {
-	return fileDescriptor_office_b53660f9aedbfa32, []int{9}
+	return fileDescriptor_office_0fe56c4f733d3593, []int{9}
 }
 func (m *SetTagReq) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_SetTagReq.Unmarshal(m, b)
@@ -543,7 +543,7 @@ func (m *SetTagResp) Reset()         { *m = SetTagResp{} }
 func (m *SetTagResp) String() string { return proto.CompactTextString(m) }
 func (*SetTagResp) ProtoMessage()    {}
 func (*SetTagResp) Descriptor() ([]byte, []int) {
-	return fileDescriptor_office_b53660f9aedbfa32, []int{10}
+	return fileDescriptor_office_0fe56c4f733d3593, []int{10}
 }
 func (m *SetTagResp) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_SetTagResp.Unmarshal(m, b)
@@ -587,7 +587,7 @@ func (m *SendMsg2TagReq) Reset()         { *m = SendMsg2TagReq{} }
 func (m *SendMsg2TagReq) String() string { return proto.CompactTextString(m) }
 func (*SendMsg2TagReq) ProtoMessage()    {}
 func (*SendMsg2TagReq) Descriptor() ([]byte, []int) {
-	return fileDescriptor_office_b53660f9aedbfa32, []int{11}
+	return fileDescriptor_office_0fe56c4f733d3593, []int{11}
 }
 func (m *SendMsg2TagReq) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_SendMsg2TagReq.Unmarshal(m, b)
@@ -667,7 +667,7 @@ func (m *SendMsg2TagResp) Reset()         { *m = SendMsg2TagResp{} }
 func (m *SendMsg2TagResp) String() string { return proto.CompactTextString(m) }
 func (*SendMsg2TagResp) ProtoMessage()    {}
 func (*SendMsg2TagResp) Descriptor() ([]byte, []int) {
-	return fileDescriptor_office_b53660f9aedbfa32, []int{12}
+	return fileDescriptor_office_0fe56c4f733d3593, []int{12}
 }
 func (m *SendMsg2TagResp) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_SendMsg2TagResp.Unmarshal(m, b)
@@ -707,7 +707,7 @@ func (m *GetTagSendLogsReq) Reset()         { *m = GetTagSendLogsReq{} }
 func (m *GetTagSendLogsReq) String() string { return proto.CompactTextString(m) }
 func (*GetTagSendLogsReq) ProtoMessage()    {}
 func (*GetTagSendLogsReq) Descriptor() ([]byte, []int) {
-	return fileDescriptor_office_b53660f9aedbfa32, []int{13}
+	return fileDescriptor_office_0fe56c4f733d3593, []int{13}
 }
 func (m *GetTagSendLogsReq) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_GetTagSendLogsReq.Unmarshal(m, b)
@@ -763,7 +763,7 @@ func (m *TagSendLog) Reset()         { *m = TagSendLog{} }
 func (m *TagSendLog) String() string { return proto.CompactTextString(m) }
 func (*TagSendLog) ProtoMessage()    {}
 func (*TagSendLog) Descriptor() ([]byte, []int) {
-	return fileDescriptor_office_b53660f9aedbfa32, []int{14}
+	return fileDescriptor_office_0fe56c4f733d3593, []int{14}
 }
 func (m *TagSendLog) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_TagSendLog.Unmarshal(m, b)
@@ -831,7 +831,7 @@ func (m *GetTagSendLogsResp) Reset()         { *m = GetTagSendLogsResp{} }
 func (m *GetTagSendLogsResp) String() string { return proto.CompactTextString(m) }
 func (*GetTagSendLogsResp) ProtoMessage()    {}
 func (*GetTagSendLogsResp) Descriptor() ([]byte, []int) {
-	return fileDescriptor_office_b53660f9aedbfa32, []int{15}
+	return fileDescriptor_office_0fe56c4f733d3593, []int{15}
 }
 func (m *GetTagSendLogsResp) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_GetTagSendLogsResp.Unmarshal(m, b)
@@ -872,6 +872,106 @@ func (m *GetTagSendLogsResp) GetTagSendLogs() []*TagSendLog {
 	return nil
 }
 
+type GetUserTagByIDReq struct {
+	UserID               string   `protobuf:"bytes,1,opt,name=userID" json:"userID,omitempty"`
+	TagID                string   `protobuf:"bytes,2,opt,name=tagID" json:"tagID,omitempty"`
+	OperationID          string   `protobuf:"bytes,3,opt,name=operationID" json:"operationID,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetUserTagByIDReq) Reset()         { *m = GetUserTagByIDReq{} }
+func (m *GetUserTagByIDReq) String() string { return proto.CompactTextString(m) }
+func (*GetUserTagByIDReq) ProtoMessage()    {}
+func (*GetUserTagByIDReq) Descriptor() ([]byte, []int) {
+	return fileDescriptor_office_0fe56c4f733d3593, []int{16}
+}
+func (m *GetUserTagByIDReq) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetUserTagByIDReq.Unmarshal(m, b)
+}
+func (m *GetUserTagByIDReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetUserTagByIDReq.Marshal(b, m, deterministic)
+}
+func (dst *GetUserTagByIDReq) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetUserTagByIDReq.Merge(dst, src)
+}
+func (m *GetUserTagByIDReq) XXX_Size() int {
+	return xxx_messageInfo_GetUserTagByIDReq.Size(m)
+}
+func (m *GetUserTagByIDReq) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetUserTagByIDReq.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetUserTagByIDReq proto.InternalMessageInfo
+
+func (m *GetUserTagByIDReq) GetUserID() string {
+	if m != nil {
+		return m.UserID
+	}
+	return ""
+}
+
+func (m *GetUserTagByIDReq) GetTagID() string {
+	if m != nil {
+		return m.TagID
+	}
+	return ""
+}
+
+func (m *GetUserTagByIDReq) GetOperationID() string {
+	if m != nil {
+		return m.OperationID
+	}
+	return ""
+}
+
+type GetUserTagByIDResp struct {
+	CommonResp           *CommonResp `protobuf:"bytes,1,opt,name=commonResp" json:"commonResp,omitempty"`
+	Tag                  *Tag        `protobuf:"bytes,2,opt,name=tag" json:"tag,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}    `json:"-"`
+	XXX_unrecognized     []byte      `json:"-"`
+	XXX_sizecache        int32       `json:"-"`
+}
+
+func (m *GetUserTagByIDResp) Reset()         { *m = GetUserTagByIDResp{} }
+func (m *GetUserTagByIDResp) String() string { return proto.CompactTextString(m) }
+func (*GetUserTagByIDResp) ProtoMessage()    {}
+func (*GetUserTagByIDResp) Descriptor() ([]byte, []int) {
+	return fileDescriptor_office_0fe56c4f733d3593, []int{17}
+}
+func (m *GetUserTagByIDResp) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetUserTagByIDResp.Unmarshal(m, b)
+}
+func (m *GetUserTagByIDResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetUserTagByIDResp.Marshal(b, m, deterministic)
+}
+func (dst *GetUserTagByIDResp) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetUserTagByIDResp.Merge(dst, src)
+}
+func (m *GetUserTagByIDResp) XXX_Size() int {
+	return xxx_messageInfo_GetUserTagByIDResp.Size(m)
+}
+func (m *GetUserTagByIDResp) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetUserTagByIDResp.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetUserTagByIDResp proto.InternalMessageInfo
+
+func (m *GetUserTagByIDResp) GetCommonResp() *CommonResp {
+	if m != nil {
+		return m.CommonResp
+	}
+	return nil
+}
+
+func (m *GetUserTagByIDResp) GetTag() *Tag {
+	if m != nil {
+		return m.Tag
+	}
+	return nil
+}
+
 func init() {
 	proto.RegisterType((*CommonResp)(nil), "office.CommonResp")
 	proto.RegisterType((*TagUser)(nil), "office.TagUser")
@@ -889,6 +989,8 @@ func init() {
 	proto.RegisterType((*GetTagSendLogsReq)(nil), "office.GetTagSendLogsReq")
 	proto.RegisterType((*TagSendLog)(nil), "office.TagSendLog")
 	proto.RegisterType((*GetTagSendLogsResp)(nil), "office.GetTagSendLogsResp")
+	proto.RegisterType((*GetUserTagByIDReq)(nil), "office.GetUserTagByIDReq")
+	proto.RegisterType((*GetUserTagByIDResp)(nil), "office.GetUserTagByIDResp")
 }
 
 // Reference imports to suppress errors if they are not otherwise used.
@@ -908,6 +1010,7 @@ type OfficeServiceClient interface {
 	SetTag(ctx context.Context, in *SetTagReq, opts ...grpc.CallOption) (*SetTagResp, error)
 	SendMsg2Tag(ctx context.Context, in *SendMsg2TagReq, opts ...grpc.CallOption) (*SendMsg2TagResp, error)
 	GetTagSendLogs(ctx context.Context, in *GetTagSendLogsReq, opts ...grpc.CallOption) (*GetTagSendLogsResp, error)
+	GetUserTagByID(ctx context.Context, in *GetUserTagByIDReq, opts ...grpc.CallOption) (*GetUserTagByIDResp, error)
 }
 
 type officeServiceClient struct {
@@ -972,6 +1075,15 @@ func (c *officeServiceClient) GetTagSendLogs(ctx context.Context, in *GetTagSend
 	return out, nil
 }
 
+func (c *officeServiceClient) GetUserTagByID(ctx context.Context, in *GetUserTagByIDReq, opts ...grpc.CallOption) (*GetUserTagByIDResp, error) {
+	out := new(GetUserTagByIDResp)
+	err := grpc.Invoke(ctx, "/office.OfficeService/GetUserTagByID", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
 // Server API for OfficeService service
 
 type OfficeServiceServer interface {
@@ -981,6 +1093,7 @@ type OfficeServiceServer interface {
 	SetTag(context.Context, *SetTagReq) (*SetTagResp, error)
 	SendMsg2Tag(context.Context, *SendMsg2TagReq) (*SendMsg2TagResp, error)
 	GetTagSendLogs(context.Context, *GetTagSendLogsReq) (*GetTagSendLogsResp, error)
+	GetUserTagByID(context.Context, *GetUserTagByIDReq) (*GetUserTagByIDResp, error)
 }
 
 func RegisterOfficeServiceServer(s *grpc.Server, srv OfficeServiceServer) {
@@ -1095,6 +1208,24 @@ func _OfficeService_GetTagSendLogs_Handler(srv interface{}, ctx context.Context,
 	return interceptor(ctx, in, info, handler)
 }
 
+func _OfficeService_GetUserTagByID_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetUserTagByIDReq)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(OfficeServiceServer).GetUserTagByID(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/office.OfficeService/GetUserTagByID",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(OfficeServiceServer).GetUserTagByID(ctx, req.(*GetUserTagByIDReq))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
 var _OfficeService_serviceDesc = grpc.ServiceDesc{
 	ServiceName: "office.OfficeService",
 	HandlerType: (*OfficeServiceServer)(nil),
@@ -1123,62 +1254,69 @@ var _OfficeService_serviceDesc = grpc.ServiceDesc{
 			MethodName: "GetTagSendLogs",
 			Handler:    _OfficeService_GetTagSendLogs_Handler,
 		},
+		{
+			MethodName: "GetUserTagByID",
+			Handler:    _OfficeService_GetUserTagByID_Handler,
+		},
 	},
 	Streams:  []grpc.StreamDesc{},
 	Metadata: "office/office.proto",
 }
 
-func init() { proto.RegisterFile("office/office.proto", fileDescriptor_office_b53660f9aedbfa32) }
+func init() { proto.RegisterFile("office/office.proto", fileDescriptor_office_0fe56c4f733d3593) }
 
-var fileDescriptor_office_b53660f9aedbfa32 = []byte{
-	// 781 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x56, 0xdd, 0x6a, 0xdb, 0x4a,
-	0x10, 0x46, 0xf2, 0x5f, 0x3c, 0x4e, 0xe2, 0x93, 0x3d, 0x39, 0x39, 0xaa, 0x08, 0xad, 0x2b, 0x5a,
-	0x08, 0x2d, 0xd8, 0xe0, 0xf6, 0xa2, 0x50, 0x1a, 0x4a, 0xed, 0x60, 0x5c, 0x92, 0x26, 0x28, 0xce,
-	0x4d, 0x2f, 0x6a, 0x36, 0xf6, 0x58, 0x88, 0xc4, 0x92, 0xb2, 0x2b, 0x27, 0xf7, 0x7d, 0x85, 0x42,
-	0xdf, 0xa8, 0x0f, 0xd0, 0x77, 0xe8, 0x6b, 0x14, 0x8a, 0x56, 0xd2, 0x6a, 0x25, 0xdb, 0x14, 0x7c,
-	0x25, 0x7d, 0xb3, 0x33, 0xab, 0x6f, 0xbe, 0xd9, 0x99, 0x15, 0xfc, 0xeb, 0xcf, 0x66, 0xee, 0x04,
-	0x3b, 0xf1, 0xa3, 0x1d, 0x30, 0x3f, 0xf4, 0x49, 0x35, 0x46, 0xe6, 0xd3, 0xf3, 0x00, 0xbd, 0xf1,
-	0xf0, 0xac, 0x13, 0xdc, 0x38, 0x1d, 0xb1, 0xd4, 0xe1, 0xd3, 0x9b, 0xf1, 0x03, 0xef, 0x3c, 0xf0,
-	0xd8, 0xd5, 0x3a, 0x06, 0xe8, 0xf9, 0xf3, 0xb9, 0xef, 0xd9, 0xc8, 0x03, 0x62, 0x40, 0x0d, 0x19,
-	0xeb, 0xf9, 0x53, 0x34, 0xb4, 0x96, 0x76, 0x54, 0xb1, 0x53, 0x48, 0x0e, 0xa0, 0x8a, 0x8c, 0x9d,
-	0x71, 0xc7, 0xd0, 0x5b, 0xda, 0x51, 0xdd, 0x4e, 0x90, 0xf5, 0x0e, 0x6a, 0x23, 0xea, 0x5c, 0x71,
-	0x64, 0x91, 0xcb, 0x82, 0x23, 0x1b, 0xf6, 0x45, 0x6c, 0xdd, 0x4e, 0x10, 0x31, 0x61, 0x2b, 0x7a,
-	0xfb, 0x44, 0xe7, 0x98, 0x04, 0x4b, 0x6c, 0x5d, 0x43, 0x69, 0x44, 0x1d, 0xb2, 0x0f, 0x95, 0x90,
-	0x3a, 0x32, 0x32, 0x06, 0x11, 0x9b, 0x90, 0x3a, 0x4a, 0x5c, 0x0a, 0xc9, 0xcb, 0x78, 0xcb, 0x53,
-	0x97, 0x87, 0x46, 0xa9, 0x55, 0x3a, 0x6a, 0x74, 0x9b, 0xed, 0x44, 0x81, 0x84, 0x8d, 0x2d, 0x1d,
-	0xac, 0x8f, 0xb0, 0x3b, 0xc0, 0x30, 0x32, 0x8e, 0xa8, 0xc3, 0x6d, 0xbc, 0x5b, 0xcb, 0xb4, 0x05,
-	0x0d, 0x3f, 0x40, 0x46, 0x43, 0xd7, 0xf7, 0x86, 0xfd, 0xe4, 0xa3, 0xaa, 0xc9, 0x9a, 0x41, 0x33,
-	0xb7, 0x17, 0x0f, 0x48, 0x17, 0x60, 0x22, 0x15, 0x14, 0x1b, 0x36, 0xba, 0x24, 0x65, 0x93, 0x69,
-	0x6b, 0x2b, 0x5e, 0xe4, 0x09, 0x94, 0x43, 0xea, 0x70, 0x43, 0x17, 0xdc, 0x1b, 0x0a, 0x77, 0x5b,
-	0x2c, 0x58, 0x5f, 0x35, 0xd8, 0xee, 0x31, 0xa4, 0x21, 0x46, 0x36, 0xbc, 0x53, 0xb5, 0xd0, 0xf2,
-	0x5a, 0x64, 0xc9, 0xe8, 0xb9, 0x64, 0x1e, 0x03, 0xc4, 0x6f, 0x52, 0xa5, 0xba, 0xad, 0x58, 0x8a,
-	0xc9, 0x96, 0x97, 0x93, 0xed, 0xc1, 0x8e, 0xc2, 0x61, 0xb3, 0x54, 0xad, 0x2f, 0xb0, 0xdd, 0xc7,
-	0x5b, 0x94, 0x89, 0xac, 0xd3, 0x5e, 0x1e, 0x01, 0x5d, 0x3d, 0x02, 0x05, 0x92, 0xa5, 0x95, 0x24,
-	0x95, 0xfd, 0x37, 0x24, 0xf9, 0x53, 0x83, 0xfa, 0x25, 0x86, 0x1b, 0x51, 0x34, 0xa0, 0xe6, 0xe1,
-	0x83, 0xa8, 0x4c, 0x4c, 0x2f, 0x85, 0xa4, 0x0d, 0xc4, 0xf5, 0x26, 0x0c, 0x29, 0xc7, 0xab, 0xac,
-	0x12, 0x65, 0x51, 0x89, 0x15, 0x2b, 0xe4, 0x05, 0xfc, 0xc3, 0x70, 0xba, 0x98, 0xa8, 0xde, 0x15,
-	0xe1, 0xbd, 0x64, 0x2f, 0x0a, 0x53, 0x5d, 0x16, 0xe6, 0x3d, 0x40, 0x9a, 0xd2, 0x86, 0xaa, 0xfc,
-	0xd2, 0x60, 0xf7, 0x12, 0xbd, 0xe9, 0x19, 0x77, 0xba, 0xb9, 0x63, 0x28, 0x98, 0x69, 0x82, 0x59,
-	0x0a, 0xa3, 0x2e, 0xbf, 0x4a, 0x5b, 0x52, 0x17, 0x4b, 0x12, 0x93, 0x43, 0xa8, 0x0f, 0x98, 0xbf,
-	0x08, 0x94, 0x93, 0x98, 0x19, 0x22, 0xb9, 0x39, 0x7a, 0x53, 0x79, 0x06, 0x13, 0x14, 0xc9, 0x11,
-	0xbd, 0x21, 0xbb, 0xb8, 0xa5, 0xe1, 0xcc, 0x67, 0xf3, 0x61, 0xdf, 0xa8, 0x88, 0xa9, 0xb4, 0x64,
-	0x8f, 0x78, 0x4d, 0x7c, 0x2f, 0x44, 0x2f, 0x4c, 0xa4, 0x48, 0x61, 0x51, 0xa8, 0xda, 0xb2, 0x50,
-	0x27, 0xd0, 0xcc, 0x65, 0xb9, 0xa1, 0x5a, 0xdf, 0x34, 0xd8, 0x1b, 0x08, 0xc1, 0xa3, 0xdd, 0x4e,
-	0xfd, 0x78, 0xd4, 0xf4, 0x01, 0x2e, 0xa8, 0xe3, 0x7a, 0xe2, 0x63, 0xc9, 0x4e, 0xcf, 0xda, 0x1c,
-	0xd9, 0x3d, 0xb2, 0x31, 0x0d, 0xdc, 0x71, 0x40, 0x19, 0x9d, 0xf3, 0xb6, 0x8d, 0x77, 0x0b, 0xe4,
-	0x61, 0xe6, 0x6b, 0x2b, 0x71, 0x6b, 0x7b, 0xfc, 0xef, 0xed, 0xf1, 0x5d, 0x03, 0xc8, 0x28, 0xa5,
-	0xb3, 0x58, 0x29, 0xa0, 0xc4, 0x6a, 0x6d, 0xf5, 0x7c, 0x6d, 0x0f, 0xa1, 0xee, 0x14, 0xeb, 0x27,
-	0x0d, 0xaa, 0xf6, 0xe5, 0xbc, 0xf6, 0x26, 0x6c, 0x45, 0x95, 0x1a, 0xb9, 0x73, 0x14, 0x95, 0x2b,
-	0xd9, 0x12, 0x5b, 0x3f, 0x34, 0x20, 0x45, 0xb9, 0x36, 0x9c, 0xa6, 0x27, 0x39, 0x8d, 0x75, 0x11,
-	0xf3, 0x7c, 0xa5, 0xc6, 0x3c, 0xf0, 0x3d, 0x8e, 0x6b, 0x44, 0x7e, 0x0d, 0x8d, 0x30, 0x63, 0x93,
-	0xdc, 0x2b, 0x44, 0x99, 0xcd, 0xc9, 0x92, 0xad, 0xba, 0x75, 0x7f, 0xeb, 0xb0, 0x73, 0x2e, 0x5c,
-	0x2e, 0x91, 0xdd, 0xbb, 0x13, 0x24, 0xc7, 0xd0, 0x50, 0xee, 0x08, 0x72, 0x90, 0xee, 0x90, 0xbf,
-	0x84, 0xcc, 0xff, 0x57, 0xda, 0x79, 0x40, 0xde, 0x40, 0x5d, 0x8e, 0x5d, 0xb2, 0x2f, 0x73, 0x57,
-	0x6e, 0x03, 0xf3, 0xbf, 0x15, 0xd6, 0x38, 0x52, 0xce, 0xc2, 0x2c, 0x52, 0x1d, 0xbf, 0x59, 0x64,
-	0x7e, 0x68, 0x76, 0xa0, 0x1a, 0x0f, 0x0b, 0xb2, 0x97, 0x3a, 0xc8, 0x79, 0x68, 0x92, 0xa2, 0x89,
-	0x07, 0x51, 0x92, 0x4a, 0xd3, 0x64, 0x49, 0xe6, 0xe7, 0x45, 0x96, 0x64, 0xb1, 0xc3, 0x06, 0xe2,
-	0x52, 0x56, 0xaa, 0x4f, 0x1e, 0x29, 0x7a, 0xe4, 0x9b, 0xc8, 0x34, 0xd7, 0x2d, 0xf1, 0xe0, 0xc3,
-	0xde, 0xe7, 0x66, 0x3b, 0xf9, 0xfb, 0x79, 0x1b, 0x3f, 0xae, 0xab, 0xe2, 0xd7, 0xe6, 0xd5, 0x9f,
-	0x00, 0x00, 0x00, 0xff, 0xff, 0xbf, 0x36, 0xc4, 0xe9, 0x1c, 0x09, 0x00, 0x00,
+var fileDescriptor_office_0fe56c4f733d3593 = []byte{
+	// 826 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x56, 0x5f, 0x6b, 0xdb, 0x48,
+	0x10, 0x47, 0xfe, 0x1b, 0x8f, 0x93, 0xf8, 0xb2, 0x97, 0xcb, 0xf9, 0x44, 0xee, 0xce, 0x27, 0xee,
+	0x20, 0x5c, 0xc1, 0x06, 0xb7, 0x0f, 0x85, 0xd2, 0x50, 0x62, 0x07, 0xe3, 0x92, 0x34, 0x41, 0x71,
+	0x5e, 0xfa, 0x50, 0xb3, 0xb1, 0xc7, 0x42, 0x24, 0x96, 0x94, 0x5d, 0x39, 0xa1, 0xaf, 0xfd, 0x0a,
+	0x85, 0x7e, 0xa3, 0xf6, 0xbd, 0xdf, 0xa1, 0x1f, 0xa4, 0x68, 0x25, 0xad, 0x76, 0x65, 0x9b, 0x82,
+	0xa1, 0x4f, 0xd2, 0xcc, 0xce, 0x8c, 0x7e, 0xf3, 0x9b, 0xd9, 0x19, 0xc1, 0xaf, 0xfe, 0x6c, 0xe6,
+	0x4e, 0xb0, 0x13, 0x3f, 0xda, 0x01, 0xf3, 0x43, 0x9f, 0x54, 0x62, 0xc9, 0xfc, 0xe7, 0x22, 0x40,
+	0x6f, 0x3c, 0x3c, 0xef, 0x04, 0xb7, 0x4e, 0x47, 0x1c, 0x75, 0xf8, 0xf4, 0x76, 0xfc, 0xc8, 0x3b,
+	0x8f, 0x3c, 0x36, 0xb5, 0x8e, 0x01, 0x7a, 0xfe, 0x7c, 0xee, 0x7b, 0x36, 0xf2, 0x80, 0x34, 0xa1,
+	0x8a, 0x8c, 0xf5, 0xfc, 0x29, 0x36, 0x8d, 0x96, 0x71, 0x54, 0xb6, 0x53, 0x91, 0x1c, 0x40, 0x05,
+	0x19, 0x3b, 0xe7, 0x4e, 0xb3, 0xd0, 0x32, 0x8e, 0x6a, 0x76, 0x22, 0x59, 0x2f, 0xa1, 0x3a, 0xa2,
+	0xce, 0x35, 0x47, 0x16, 0x99, 0x2c, 0x38, 0xb2, 0x61, 0x5f, 0xf8, 0xd6, 0xec, 0x44, 0x22, 0x26,
+	0x6c, 0x45, 0x6f, 0x6f, 0xe8, 0x1c, 0x13, 0x67, 0x29, 0x5b, 0x37, 0x50, 0x1c, 0x51, 0x87, 0xec,
+	0x43, 0x39, 0xa4, 0x8e, 0xf4, 0x8c, 0x85, 0x08, 0x4d, 0x48, 0x1d, 0xc5, 0x2f, 0x15, 0xc9, 0x93,
+	0x38, 0xe4, 0x99, 0xcb, 0xc3, 0x66, 0xb1, 0x55, 0x3c, 0xaa, 0x77, 0x1b, 0xed, 0x84, 0x81, 0x04,
+	0x8d, 0x2d, 0x0d, 0xac, 0xd7, 0xb0, 0x3b, 0xc0, 0x30, 0x52, 0x8e, 0xa8, 0xc3, 0x6d, 0xbc, 0x5f,
+	0x8b, 0xb4, 0x05, 0x75, 0x3f, 0x40, 0x46, 0x43, 0xd7, 0xf7, 0x86, 0xfd, 0xe4, 0xa3, 0xaa, 0xca,
+	0x9a, 0x41, 0x43, 0x8b, 0xc5, 0x03, 0xd2, 0x05, 0x98, 0x48, 0x06, 0x45, 0xc0, 0x7a, 0x97, 0xa4,
+	0x68, 0x32, 0x6e, 0x6d, 0xc5, 0x8a, 0xfc, 0x0d, 0xa5, 0x90, 0x3a, 0xbc, 0x59, 0x10, 0xd8, 0xeb,
+	0x0a, 0x76, 0x5b, 0x1c, 0x58, 0x1f, 0x0c, 0xd8, 0xee, 0x31, 0xa4, 0x21, 0x46, 0x3a, 0xbc, 0x57,
+	0xb9, 0x30, 0x74, 0x2e, 0xb2, 0x64, 0x0a, 0x5a, 0x32, 0x7f, 0x01, 0xc4, 0x6f, 0x92, 0xa5, 0x9a,
+	0xad, 0x68, 0xf2, 0xc9, 0x96, 0x96, 0x93, 0xed, 0xc1, 0x8e, 0x82, 0x61, 0xb3, 0x54, 0xad, 0x77,
+	0xb0, 0xdd, 0xc7, 0x3b, 0x94, 0x89, 0xac, 0xe3, 0x5e, 0xb6, 0x40, 0x41, 0x6d, 0x81, 0x1c, 0xc8,
+	0xe2, 0x4a, 0x90, 0x4a, 0xfc, 0x0d, 0x41, 0x7e, 0x35, 0xa0, 0x76, 0x85, 0xe1, 0x46, 0x10, 0x9b,
+	0x50, 0xf5, 0xf0, 0x51, 0x54, 0x26, 0x86, 0x97, 0x8a, 0xa4, 0x0d, 0xc4, 0xf5, 0x26, 0x0c, 0x29,
+	0xc7, 0xeb, 0xac, 0x12, 0x25, 0x51, 0x89, 0x15, 0x27, 0xe4, 0x7f, 0xf8, 0x85, 0xe1, 0x74, 0x31,
+	0x51, 0xad, 0xcb, 0xc2, 0x7a, 0x49, 0x9f, 0x27, 0xa6, 0xb2, 0x4c, 0xcc, 0x2b, 0x80, 0x34, 0xa5,
+	0x0d, 0x59, 0xf9, 0x66, 0xc0, 0xee, 0x15, 0x7a, 0xd3, 0x73, 0xee, 0x74, 0xb5, 0x36, 0x14, 0xc8,
+	0x0c, 0x81, 0x2c, 0x15, 0xa3, 0x5b, 0x7e, 0x9d, 0x5e, 0xc9, 0x82, 0x38, 0x92, 0x32, 0x39, 0x84,
+	0xda, 0x80, 0xf9, 0x8b, 0x40, 0xe9, 0xc4, 0x4c, 0x11, 0xd1, 0xcd, 0xd1, 0x9b, 0xca, 0x1e, 0x4c,
+	0xa4, 0x88, 0x8e, 0xe8, 0x0d, 0xd9, 0xe5, 0x1d, 0x0d, 0x67, 0x3e, 0x9b, 0x0f, 0xfb, 0xcd, 0xb2,
+	0x98, 0x4a, 0x4b, 0xfa, 0x08, 0xd7, 0xc4, 0xf7, 0x42, 0xf4, 0xc2, 0x84, 0x8a, 0x54, 0xcc, 0x13,
+	0x55, 0x5d, 0x26, 0xea, 0x14, 0x1a, 0x5a, 0x96, 0x1b, 0xb2, 0xf5, 0xd1, 0x80, 0xbd, 0x81, 0x20,
+	0x3c, 0x8a, 0x76, 0xe6, 0xc7, 0xa3, 0xa6, 0x0f, 0x70, 0x49, 0x1d, 0xd7, 0x13, 0x1f, 0x4b, 0x22,
+	0xfd, 0xdb, 0xe6, 0xc8, 0x1e, 0x90, 0x8d, 0x69, 0xe0, 0x8e, 0x03, 0xca, 0xe8, 0x9c, 0xb7, 0x6d,
+	0xbc, 0x5f, 0x20, 0x0f, 0x33, 0x5b, 0x5b, 0xf1, 0x5b, 0x7b, 0xc7, 0x7f, 0x7c, 0x3d, 0x3e, 0x19,
+	0x00, 0x19, 0xa4, 0x74, 0x16, 0x2b, 0x05, 0x94, 0xb2, 0x5a, 0xdb, 0x82, 0x5e, 0xdb, 0x43, 0xa8,
+	0x39, 0xf9, 0xfa, 0x49, 0x85, 0xca, 0x7d, 0x49, 0xe7, 0xde, 0x84, 0xad, 0xa8, 0x52, 0x23, 0x77,
+	0x8e, 0xa2, 0x72, 0x45, 0x5b, 0xca, 0xd6, 0x67, 0x03, 0x48, 0x9e, 0xae, 0x0d, 0xa7, 0xe9, 0xa9,
+	0xc6, 0x71, 0x41, 0xf8, 0xfc, 0xb7, 0x92, 0x63, 0x1e, 0xf8, 0x1e, 0xc7, 0x35, 0x24, 0x3f, 0x83,
+	0x7a, 0x98, 0xa1, 0x49, 0xf6, 0x0a, 0x51, 0x66, 0x73, 0x72, 0x64, 0xab, 0x66, 0xd6, 0x44, 0x54,
+	0x3d, 0xd9, 0x08, 0x27, 0xef, 0x87, 0xfd, 0x9f, 0x31, 0xe4, 0x1c, 0xc1, 0x95, 0xf6, 0x91, 0x0d,
+	0xb9, 0xfa, 0x13, 0x8a, 0x21, 0x75, 0x12, 0x92, 0xb4, 0xc5, 0x13, 0xe9, 0xbb, 0x5f, 0x8a, 0xb0,
+	0x73, 0x21, 0x74, 0x57, 0xc8, 0x1e, 0xdc, 0x09, 0x92, 0x63, 0xa8, 0x2b, 0x1b, 0x8f, 0x1c, 0xa4,
+	0x2e, 0xfa, 0x4a, 0x35, 0x7f, 0x5f, 0xa9, 0xe7, 0x01, 0x79, 0x0e, 0x35, 0xb9, 0x44, 0xc8, 0xbe,
+	0x44, 0xa7, 0xec, 0x36, 0xf3, 0xb7, 0x15, 0xda, 0xd8, 0x53, 0x4e, 0xf6, 0xcc, 0x53, 0x5d, 0x26,
+	0x99, 0xa7, 0xbe, 0x02, 0x3a, 0x50, 0x89, 0x47, 0x1f, 0xd9, 0x4b, 0x0d, 0xe4, 0x74, 0x37, 0x49,
+	0x5e, 0xc5, 0x83, 0x28, 0x49, 0x65, 0x04, 0x64, 0x49, 0xea, 0xd3, 0x2f, 0x4b, 0x32, 0x3f, 0x2f,
+	0x06, 0xe2, 0x17, 0x43, 0xe9, 0x65, 0xf2, 0x87, 0xc2, 0x87, 0x3e, 0x12, 0x4c, 0x73, 0xdd, 0x91,
+	0x0c, 0xa4, 0x14, 0x5a, 0x0b, 0xa4, 0x77, 0x99, 0x16, 0x28, 0xd7, 0x1b, 0x27, 0x7b, 0x6f, 0x1b,
+	0xed, 0xe4, 0xa7, 0xf0, 0x45, 0xfc, 0xb8, 0xa9, 0x88, 0x3f, 0xbe, 0xa7, 0xdf, 0x03, 0x00, 0x00,
+	0xff, 0xff, 0x1f, 0x69, 0x88, 0xf6, 0x33, 0x0a, 0x00, 0x00,
 }
diff --git a/pkg/proto/office/office.proto b/pkg/proto/office/office.proto
index 99c749dbb..b4a7f83d7 100644
--- a/pkg/proto/office/office.proto
+++ b/pkg/proto/office/office.proto
@@ -97,6 +97,17 @@ message GetTagSendLogsResp {
   repeated TagSendLog tagSendLogs = 3;
 }
 
+message GetUserTagByIDReq {
+  string userID = 1;
+  string tagID = 2;
+  string operationID = 3;
+}
+
+message GetUserTagByIDResp {
+  CommonResp commonResp = 1;
+  Tag tag = 2;
+}
+
 service OfficeService {
   rpc GetUserTags(GetUserTagsReq) returns(GetUserTagsResp);
   rpc CreateTag(CreateTagReq) returns(CreateTagResp);
@@ -104,5 +115,6 @@ service OfficeService {
   rpc SetTag(SetTagReq) returns(SetTagResp);
   rpc SendMsg2Tag(SendMsg2TagReq) returns(SendMsg2TagResp);
   rpc GetTagSendLogs(GetTagSendLogsReq) returns(GetTagSendLogsResp);
+  rpc GetUserTagByID(GetUserTagByIDReq) returns(GetUserTagByIDResp);
 }
 
diff --git a/pkg/proto/sdk_ws/ws.pb.go b/pkg/proto/sdk_ws/ws.pb.go
index 43fd488b8..d0566cd04 100644
--- a/pkg/proto/sdk_ws/ws.pb.go
+++ b/pkg/proto/sdk_ws/ws.pb.go
@@ -40,7 +40,7 @@ func (m *GroupInfo) Reset()         { *m = GroupInfo{} }
 func (m *GroupInfo) String() string { return proto.CompactTextString(m) }
 func (*GroupInfo) ProtoMessage()    {}
 func (*GroupInfo) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_f1fa7995a968e7fe, []int{0}
+	return fileDescriptor_ws_331bd590ecfeca43, []int{0}
 }
 func (m *GroupInfo) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_GroupInfo.Unmarshal(m, b)
@@ -165,7 +165,7 @@ func (m *GroupMemberFullInfo) Reset()         { *m = GroupMemberFullInfo{} }
 func (m *GroupMemberFullInfo) String() string { return proto.CompactTextString(m) }
 func (*GroupMemberFullInfo) ProtoMessage()    {}
 func (*GroupMemberFullInfo) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_f1fa7995a968e7fe, []int{1}
+	return fileDescriptor_ws_331bd590ecfeca43, []int{1}
 }
 func (m *GroupMemberFullInfo) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_GroupMemberFullInfo.Unmarshal(m, b)
@@ -277,7 +277,7 @@ func (m *PublicUserInfo) Reset()         { *m = PublicUserInfo{} }
 func (m *PublicUserInfo) String() string { return proto.CompactTextString(m) }
 func (*PublicUserInfo) ProtoMessage()    {}
 func (*PublicUserInfo) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_f1fa7995a968e7fe, []int{2}
+	return fileDescriptor_ws_331bd590ecfeca43, []int{2}
 }
 func (m *PublicUserInfo) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_PublicUserInfo.Unmarshal(m, b)
@@ -352,7 +352,7 @@ func (m *UserInfo) Reset()         { *m = UserInfo{} }
 func (m *UserInfo) String() string { return proto.CompactTextString(m) }
 func (*UserInfo) ProtoMessage()    {}
 func (*UserInfo) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_f1fa7995a968e7fe, []int{3}
+	return fileDescriptor_ws_331bd590ecfeca43, []int{3}
 }
 func (m *UserInfo) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_UserInfo.Unmarshal(m, b)
@@ -459,7 +459,7 @@ func (m *FriendInfo) Reset()         { *m = FriendInfo{} }
 func (m *FriendInfo) String() string { return proto.CompactTextString(m) }
 func (*FriendInfo) ProtoMessage()    {}
 func (*FriendInfo) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_f1fa7995a968e7fe, []int{4}
+	return fileDescriptor_ws_331bd590ecfeca43, []int{4}
 }
 func (m *FriendInfo) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_FriendInfo.Unmarshal(m, b)
@@ -544,7 +544,7 @@ func (m *BlackInfo) Reset()         { *m = BlackInfo{} }
 func (m *BlackInfo) String() string { return proto.CompactTextString(m) }
 func (*BlackInfo) ProtoMessage()    {}
 func (*BlackInfo) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_f1fa7995a968e7fe, []int{5}
+	return fileDescriptor_ws_331bd590ecfeca43, []int{5}
 }
 func (m *BlackInfo) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_BlackInfo.Unmarshal(m, b)
@@ -625,7 +625,7 @@ func (m *GroupRequest) Reset()         { *m = GroupRequest{} }
 func (m *GroupRequest) String() string { return proto.CompactTextString(m) }
 func (*GroupRequest) ProtoMessage()    {}
 func (*GroupRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_f1fa7995a968e7fe, []int{6}
+	return fileDescriptor_ws_331bd590ecfeca43, []int{6}
 }
 func (m *GroupRequest) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_GroupRequest.Unmarshal(m, b)
@@ -733,7 +733,7 @@ func (m *FriendRequest) Reset()         { *m = FriendRequest{} }
 func (m *FriendRequest) String() string { return proto.CompactTextString(m) }
 func (*FriendRequest) ProtoMessage()    {}
 func (*FriendRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_f1fa7995a968e7fe, []int{7}
+	return fileDescriptor_ws_331bd590ecfeca43, []int{7}
 }
 func (m *FriendRequest) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_FriendRequest.Unmarshal(m, b)
@@ -871,7 +871,7 @@ func (m *PullMessageBySeqListResp) Reset()         { *m = PullMessageBySeqListRe
 func (m *PullMessageBySeqListResp) String() string { return proto.CompactTextString(m) }
 func (*PullMessageBySeqListResp) ProtoMessage()    {}
 func (*PullMessageBySeqListResp) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_f1fa7995a968e7fe, []int{8}
+	return fileDescriptor_ws_331bd590ecfeca43, []int{8}
 }
 func (m *PullMessageBySeqListResp) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_PullMessageBySeqListResp.Unmarshal(m, b)
@@ -925,7 +925,7 @@ func (m *PullMessageBySeqListReq) Reset()         { *m = PullMessageBySeqListReq
 func (m *PullMessageBySeqListReq) String() string { return proto.CompactTextString(m) }
 func (*PullMessageBySeqListReq) ProtoMessage()    {}
 func (*PullMessageBySeqListReq) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_f1fa7995a968e7fe, []int{9}
+	return fileDescriptor_ws_331bd590ecfeca43, []int{9}
 }
 func (m *PullMessageBySeqListReq) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_PullMessageBySeqListReq.Unmarshal(m, b)
@@ -976,7 +976,7 @@ func (m *GetMaxAndMinSeqReq) Reset()         { *m = GetMaxAndMinSeqReq{} }
 func (m *GetMaxAndMinSeqReq) String() string { return proto.CompactTextString(m) }
 func (*GetMaxAndMinSeqReq) ProtoMessage()    {}
 func (*GetMaxAndMinSeqReq) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_f1fa7995a968e7fe, []int{10}
+	return fileDescriptor_ws_331bd590ecfeca43, []int{10}
 }
 func (m *GetMaxAndMinSeqReq) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_GetMaxAndMinSeqReq.Unmarshal(m, b)
@@ -1008,7 +1008,7 @@ func (m *GetMaxAndMinSeqResp) Reset()         { *m = GetMaxAndMinSeqResp{} }
 func (m *GetMaxAndMinSeqResp) String() string { return proto.CompactTextString(m) }
 func (*GetMaxAndMinSeqResp) ProtoMessage()    {}
 func (*GetMaxAndMinSeqResp) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_f1fa7995a968e7fe, []int{11}
+	return fileDescriptor_ws_331bd590ecfeca43, []int{11}
 }
 func (m *GetMaxAndMinSeqResp) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_GetMaxAndMinSeqResp.Unmarshal(m, b)
@@ -1055,7 +1055,7 @@ func (m *UserSendMsgResp) Reset()         { *m = UserSendMsgResp{} }
 func (m *UserSendMsgResp) String() string { return proto.CompactTextString(m) }
 func (*UserSendMsgResp) ProtoMessage()    {}
 func (*UserSendMsgResp) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_f1fa7995a968e7fe, []int{12}
+	return fileDescriptor_ws_331bd590ecfeca43, []int{12}
 }
 func (m *UserSendMsgResp) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_UserSendMsgResp.Unmarshal(m, b)
@@ -1124,7 +1124,7 @@ func (m *MsgData) Reset()         { *m = MsgData{} }
 func (m *MsgData) String() string { return proto.CompactTextString(m) }
 func (*MsgData) ProtoMessage()    {}
 func (*MsgData) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_f1fa7995a968e7fe, []int{13}
+	return fileDescriptor_ws_331bd590ecfeca43, []int{13}
 }
 func (m *MsgData) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_MsgData.Unmarshal(m, b)
@@ -1285,7 +1285,7 @@ func (m *OfflinePushInfo) Reset()         { *m = OfflinePushInfo{} }
 func (m *OfflinePushInfo) String() string { return proto.CompactTextString(m) }
 func (*OfflinePushInfo) ProtoMessage()    {}
 func (*OfflinePushInfo) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_f1fa7995a968e7fe, []int{14}
+	return fileDescriptor_ws_331bd590ecfeca43, []int{14}
 }
 func (m *OfflinePushInfo) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_OfflinePushInfo.Unmarshal(m, b)
@@ -1353,7 +1353,7 @@ func (m *TipsComm) Reset()         { *m = TipsComm{} }
 func (m *TipsComm) String() string { return proto.CompactTextString(m) }
 func (*TipsComm) ProtoMessage()    {}
 func (*TipsComm) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_f1fa7995a968e7fe, []int{15}
+	return fileDescriptor_ws_331bd590ecfeca43, []int{15}
 }
 func (m *TipsComm) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_TipsComm.Unmarshal(m, b)
@@ -1410,7 +1410,7 @@ func (m *GroupCreatedTips) Reset()         { *m = GroupCreatedTips{} }
 func (m *GroupCreatedTips) String() string { return proto.CompactTextString(m) }
 func (*GroupCreatedTips) ProtoMessage()    {}
 func (*GroupCreatedTips) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_f1fa7995a968e7fe, []int{16}
+	return fileDescriptor_ws_331bd590ecfeca43, []int{16}
 }
 func (m *GroupCreatedTips) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_GroupCreatedTips.Unmarshal(m, b)
@@ -1479,7 +1479,7 @@ func (m *GroupInfoSetTips) Reset()         { *m = GroupInfoSetTips{} }
 func (m *GroupInfoSetTips) String() string { return proto.CompactTextString(m) }
 func (*GroupInfoSetTips) ProtoMessage()    {}
 func (*GroupInfoSetTips) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_f1fa7995a968e7fe, []int{17}
+	return fileDescriptor_ws_331bd590ecfeca43, []int{17}
 }
 func (m *GroupInfoSetTips) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_GroupInfoSetTips.Unmarshal(m, b)
@@ -1534,7 +1534,7 @@ func (m *JoinGroupApplicationTips) Reset()         { *m = JoinGroupApplicationTi
 func (m *JoinGroupApplicationTips) String() string { return proto.CompactTextString(m) }
 func (*JoinGroupApplicationTips) ProtoMessage()    {}
 func (*JoinGroupApplicationTips) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_f1fa7995a968e7fe, []int{18}
+	return fileDescriptor_ws_331bd590ecfeca43, []int{18}
 }
 func (m *JoinGroupApplicationTips) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_JoinGroupApplicationTips.Unmarshal(m, b)
@@ -1590,7 +1590,7 @@ func (m *MemberQuitTips) Reset()         { *m = MemberQuitTips{} }
 func (m *MemberQuitTips) String() string { return proto.CompactTextString(m) }
 func (*MemberQuitTips) ProtoMessage()    {}
 func (*MemberQuitTips) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_f1fa7995a968e7fe, []int{19}
+	return fileDescriptor_ws_331bd590ecfeca43, []int{19}
 }
 func (m *MemberQuitTips) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_MemberQuitTips.Unmarshal(m, b)
@@ -1645,7 +1645,7 @@ func (m *GroupApplicationAcceptedTips) Reset()         { *m = GroupApplicationAc
 func (m *GroupApplicationAcceptedTips) String() string { return proto.CompactTextString(m) }
 func (*GroupApplicationAcceptedTips) ProtoMessage()    {}
 func (*GroupApplicationAcceptedTips) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_f1fa7995a968e7fe, []int{20}
+	return fileDescriptor_ws_331bd590ecfeca43, []int{20}
 }
 func (m *GroupApplicationAcceptedTips) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_GroupApplicationAcceptedTips.Unmarshal(m, b)
@@ -1700,7 +1700,7 @@ func (m *GroupApplicationRejectedTips) Reset()         { *m = GroupApplicationRe
 func (m *GroupApplicationRejectedTips) String() string { return proto.CompactTextString(m) }
 func (*GroupApplicationRejectedTips) ProtoMessage()    {}
 func (*GroupApplicationRejectedTips) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_f1fa7995a968e7fe, []int{21}
+	return fileDescriptor_ws_331bd590ecfeca43, []int{21}
 }
 func (m *GroupApplicationRejectedTips) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_GroupApplicationRejectedTips.Unmarshal(m, b)
@@ -1756,7 +1756,7 @@ func (m *GroupOwnerTransferredTips) Reset()         { *m = GroupOwnerTransferred
 func (m *GroupOwnerTransferredTips) String() string { return proto.CompactTextString(m) }
 func (*GroupOwnerTransferredTips) ProtoMessage()    {}
 func (*GroupOwnerTransferredTips) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_f1fa7995a968e7fe, []int{22}
+	return fileDescriptor_ws_331bd590ecfeca43, []int{22}
 }
 func (m *GroupOwnerTransferredTips) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_GroupOwnerTransferredTips.Unmarshal(m, b)
@@ -1819,7 +1819,7 @@ func (m *MemberKickedTips) Reset()         { *m = MemberKickedTips{} }
 func (m *MemberKickedTips) String() string { return proto.CompactTextString(m) }
 func (*MemberKickedTips) ProtoMessage()    {}
 func (*MemberKickedTips) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_f1fa7995a968e7fe, []int{23}
+	return fileDescriptor_ws_331bd590ecfeca43, []int{23}
 }
 func (m *MemberKickedTips) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_MemberKickedTips.Unmarshal(m, b)
@@ -1882,7 +1882,7 @@ func (m *MemberInvitedTips) Reset()         { *m = MemberInvitedTips{} }
 func (m *MemberInvitedTips) String() string { return proto.CompactTextString(m) }
 func (*MemberInvitedTips) ProtoMessage()    {}
 func (*MemberInvitedTips) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_f1fa7995a968e7fe, []int{24}
+	return fileDescriptor_ws_331bd590ecfeca43, []int{24}
 }
 func (m *MemberInvitedTips) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_MemberInvitedTips.Unmarshal(m, b)
@@ -1944,7 +1944,7 @@ func (m *MemberEnterTips) Reset()         { *m = MemberEnterTips{} }
 func (m *MemberEnterTips) String() string { return proto.CompactTextString(m) }
 func (*MemberEnterTips) ProtoMessage()    {}
 func (*MemberEnterTips) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_f1fa7995a968e7fe, []int{25}
+	return fileDescriptor_ws_331bd590ecfeca43, []int{25}
 }
 func (m *MemberEnterTips) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_MemberEnterTips.Unmarshal(m, b)
@@ -1998,7 +1998,7 @@ func (m *GroupDismissedTips) Reset()         { *m = GroupDismissedTips{} }
 func (m *GroupDismissedTips) String() string { return proto.CompactTextString(m) }
 func (*GroupDismissedTips) ProtoMessage()    {}
 func (*GroupDismissedTips) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_f1fa7995a968e7fe, []int{26}
+	return fileDescriptor_ws_331bd590ecfeca43, []int{26}
 }
 func (m *GroupDismissedTips) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_GroupDismissedTips.Unmarshal(m, b)
@@ -2054,7 +2054,7 @@ func (m *GroupMemberMutedTips) Reset()         { *m = GroupMemberMutedTips{} }
 func (m *GroupMemberMutedTips) String() string { return proto.CompactTextString(m) }
 func (*GroupMemberMutedTips) ProtoMessage()    {}
 func (*GroupMemberMutedTips) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_f1fa7995a968e7fe, []int{27}
+	return fileDescriptor_ws_331bd590ecfeca43, []int{27}
 }
 func (m *GroupMemberMutedTips) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_GroupMemberMutedTips.Unmarshal(m, b)
@@ -2123,7 +2123,7 @@ func (m *GroupMemberCancelMutedTips) Reset()         { *m = GroupMemberCancelMut
 func (m *GroupMemberCancelMutedTips) String() string { return proto.CompactTextString(m) }
 func (*GroupMemberCancelMutedTips) ProtoMessage()    {}
 func (*GroupMemberCancelMutedTips) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_f1fa7995a968e7fe, []int{28}
+	return fileDescriptor_ws_331bd590ecfeca43, []int{28}
 }
 func (m *GroupMemberCancelMutedTips) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_GroupMemberCancelMutedTips.Unmarshal(m, b)
@@ -2184,7 +2184,7 @@ func (m *GroupMutedTips) Reset()         { *m = GroupMutedTips{} }
 func (m *GroupMutedTips) String() string { return proto.CompactTextString(m) }
 func (*GroupMutedTips) ProtoMessage()    {}
 func (*GroupMutedTips) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_f1fa7995a968e7fe, []int{29}
+	return fileDescriptor_ws_331bd590ecfeca43, []int{29}
 }
 func (m *GroupMutedTips) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_GroupMutedTips.Unmarshal(m, b)
@@ -2238,7 +2238,7 @@ func (m *GroupCancelMutedTips) Reset()         { *m = GroupCancelMutedTips{} }
 func (m *GroupCancelMutedTips) String() string { return proto.CompactTextString(m) }
 func (*GroupCancelMutedTips) ProtoMessage()    {}
 func (*GroupCancelMutedTips) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_f1fa7995a968e7fe, []int{30}
+	return fileDescriptor_ws_331bd590ecfeca43, []int{30}
 }
 func (m *GroupCancelMutedTips) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_GroupCancelMutedTips.Unmarshal(m, b)
@@ -2292,7 +2292,7 @@ func (m *FriendApplication) Reset()         { *m = FriendApplication{} }
 func (m *FriendApplication) String() string { return proto.CompactTextString(m) }
 func (*FriendApplication) ProtoMessage()    {}
 func (*FriendApplication) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_f1fa7995a968e7fe, []int{31}
+	return fileDescriptor_ws_331bd590ecfeca43, []int{31}
 }
 func (m *FriendApplication) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_FriendApplication.Unmarshal(m, b)
@@ -2345,7 +2345,7 @@ func (m *FromToUserID) Reset()         { *m = FromToUserID{} }
 func (m *FromToUserID) String() string { return proto.CompactTextString(m) }
 func (*FromToUserID) ProtoMessage()    {}
 func (*FromToUserID) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_f1fa7995a968e7fe, []int{32}
+	return fileDescriptor_ws_331bd590ecfeca43, []int{32}
 }
 func (m *FromToUserID) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_FromToUserID.Unmarshal(m, b)
@@ -2391,7 +2391,7 @@ func (m *FriendApplicationTips) Reset()         { *m = FriendApplicationTips{} }
 func (m *FriendApplicationTips) String() string { return proto.CompactTextString(m) }
 func (*FriendApplicationTips) ProtoMessage()    {}
 func (*FriendApplicationTips) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_f1fa7995a968e7fe, []int{33}
+	return fileDescriptor_ws_331bd590ecfeca43, []int{33}
 }
 func (m *FriendApplicationTips) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_FriendApplicationTips.Unmarshal(m, b)
@@ -2431,7 +2431,7 @@ func (m *FriendApplicationApprovedTips) Reset()         { *m = FriendApplication
 func (m *FriendApplicationApprovedTips) String() string { return proto.CompactTextString(m) }
 func (*FriendApplicationApprovedTips) ProtoMessage()    {}
 func (*FriendApplicationApprovedTips) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_f1fa7995a968e7fe, []int{34}
+	return fileDescriptor_ws_331bd590ecfeca43, []int{34}
 }
 func (m *FriendApplicationApprovedTips) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_FriendApplicationApprovedTips.Unmarshal(m, b)
@@ -2478,7 +2478,7 @@ func (m *FriendApplicationRejectedTips) Reset()         { *m = FriendApplication
 func (m *FriendApplicationRejectedTips) String() string { return proto.CompactTextString(m) }
 func (*FriendApplicationRejectedTips) ProtoMessage()    {}
 func (*FriendApplicationRejectedTips) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_f1fa7995a968e7fe, []int{35}
+	return fileDescriptor_ws_331bd590ecfeca43, []int{35}
 }
 func (m *FriendApplicationRejectedTips) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_FriendApplicationRejectedTips.Unmarshal(m, b)
@@ -2526,7 +2526,7 @@ func (m *FriendAddedTips) Reset()         { *m = FriendAddedTips{} }
 func (m *FriendAddedTips) String() string { return proto.CompactTextString(m) }
 func (*FriendAddedTips) ProtoMessage()    {}
 func (*FriendAddedTips) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_f1fa7995a968e7fe, []int{36}
+	return fileDescriptor_ws_331bd590ecfeca43, []int{36}
 }
 func (m *FriendAddedTips) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_FriendAddedTips.Unmarshal(m, b)
@@ -2579,7 +2579,7 @@ func (m *FriendDeletedTips) Reset()         { *m = FriendDeletedTips{} }
 func (m *FriendDeletedTips) String() string { return proto.CompactTextString(m) }
 func (*FriendDeletedTips) ProtoMessage()    {}
 func (*FriendDeletedTips) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_f1fa7995a968e7fe, []int{37}
+	return fileDescriptor_ws_331bd590ecfeca43, []int{37}
 }
 func (m *FriendDeletedTips) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_FriendDeletedTips.Unmarshal(m, b)
@@ -2617,7 +2617,7 @@ func (m *BlackAddedTips) Reset()         { *m = BlackAddedTips{} }
 func (m *BlackAddedTips) String() string { return proto.CompactTextString(m) }
 func (*BlackAddedTips) ProtoMessage()    {}
 func (*BlackAddedTips) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_f1fa7995a968e7fe, []int{38}
+	return fileDescriptor_ws_331bd590ecfeca43, []int{38}
 }
 func (m *BlackAddedTips) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_BlackAddedTips.Unmarshal(m, b)
@@ -2655,7 +2655,7 @@ func (m *BlackDeletedTips) Reset()         { *m = BlackDeletedTips{} }
 func (m *BlackDeletedTips) String() string { return proto.CompactTextString(m) }
 func (*BlackDeletedTips) ProtoMessage()    {}
 func (*BlackDeletedTips) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_f1fa7995a968e7fe, []int{39}
+	return fileDescriptor_ws_331bd590ecfeca43, []int{39}
 }
 func (m *BlackDeletedTips) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_BlackDeletedTips.Unmarshal(m, b)
@@ -2693,7 +2693,7 @@ func (m *FriendInfoChangedTips) Reset()         { *m = FriendInfoChangedTips{} }
 func (m *FriendInfoChangedTips) String() string { return proto.CompactTextString(m) }
 func (*FriendInfoChangedTips) ProtoMessage()    {}
 func (*FriendInfoChangedTips) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_f1fa7995a968e7fe, []int{40}
+	return fileDescriptor_ws_331bd590ecfeca43, []int{40}
 }
 func (m *FriendInfoChangedTips) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_FriendInfoChangedTips.Unmarshal(m, b)
@@ -2732,7 +2732,7 @@ func (m *UserInfoUpdatedTips) Reset()         { *m = UserInfoUpdatedTips{} }
 func (m *UserInfoUpdatedTips) String() string { return proto.CompactTextString(m) }
 func (*UserInfoUpdatedTips) ProtoMessage()    {}
 func (*UserInfoUpdatedTips) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_f1fa7995a968e7fe, []int{41}
+	return fileDescriptor_ws_331bd590ecfeca43, []int{41}
 }
 func (m *UserInfoUpdatedTips) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_UserInfoUpdatedTips.Unmarshal(m, b)
@@ -2771,7 +2771,7 @@ func (m *ConversationUpdateTips) Reset()         { *m = ConversationUpdateTips{}
 func (m *ConversationUpdateTips) String() string { return proto.CompactTextString(m) }
 func (*ConversationUpdateTips) ProtoMessage()    {}
 func (*ConversationUpdateTips) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_f1fa7995a968e7fe, []int{42}
+	return fileDescriptor_ws_331bd590ecfeca43, []int{42}
 }
 func (m *ConversationUpdateTips) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_ConversationUpdateTips.Unmarshal(m, b)
@@ -2798,6 +2798,60 @@ func (m *ConversationUpdateTips) GetUserID() string {
 	return ""
 }
 
+type ConversationSetPrivateTips struct {
+	RecvID               string   `protobuf:"bytes,1,opt,name=recvID" json:"recvID,omitempty"`
+	SendID               string   `protobuf:"bytes,2,opt,name=sendID" json:"sendID,omitempty"`
+	IsPrivate            bool     `protobuf:"varint,3,opt,name=isPrivate" json:"isPrivate,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ConversationSetPrivateTips) Reset()         { *m = ConversationSetPrivateTips{} }
+func (m *ConversationSetPrivateTips) String() string { return proto.CompactTextString(m) }
+func (*ConversationSetPrivateTips) ProtoMessage()    {}
+func (*ConversationSetPrivateTips) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ws_331bd590ecfeca43, []int{43}
+}
+func (m *ConversationSetPrivateTips) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ConversationSetPrivateTips.Unmarshal(m, b)
+}
+func (m *ConversationSetPrivateTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ConversationSetPrivateTips.Marshal(b, m, deterministic)
+}
+func (dst *ConversationSetPrivateTips) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ConversationSetPrivateTips.Merge(dst, src)
+}
+func (m *ConversationSetPrivateTips) XXX_Size() int {
+	return xxx_messageInfo_ConversationSetPrivateTips.Size(m)
+}
+func (m *ConversationSetPrivateTips) XXX_DiscardUnknown() {
+	xxx_messageInfo_ConversationSetPrivateTips.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ConversationSetPrivateTips proto.InternalMessageInfo
+
+func (m *ConversationSetPrivateTips) GetRecvID() string {
+	if m != nil {
+		return m.RecvID
+	}
+	return ""
+}
+
+func (m *ConversationSetPrivateTips) GetSendID() string {
+	if m != nil {
+		return m.SendID
+	}
+	return ""
+}
+
+func (m *ConversationSetPrivateTips) GetIsPrivate() bool {
+	if m != nil {
+		return m.IsPrivate
+	}
+	return false
+}
+
 // /cms
 type RequestPagination struct {
 	PageNumber           int32    `protobuf:"varint,1,opt,name=pageNumber" json:"pageNumber,omitempty"`
@@ -2811,7 +2865,7 @@ func (m *RequestPagination) Reset()         { *m = RequestPagination{} }
 func (m *RequestPagination) String() string { return proto.CompactTextString(m) }
 func (*RequestPagination) ProtoMessage()    {}
 func (*RequestPagination) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_f1fa7995a968e7fe, []int{43}
+	return fileDescriptor_ws_331bd590ecfeca43, []int{44}
 }
 func (m *RequestPagination) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_RequestPagination.Unmarshal(m, b)
@@ -2857,7 +2911,7 @@ func (m *ResponsePagination) Reset()         { *m = ResponsePagination{} }
 func (m *ResponsePagination) String() string { return proto.CompactTextString(m) }
 func (*ResponsePagination) ProtoMessage()    {}
 func (*ResponsePagination) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_f1fa7995a968e7fe, []int{44}
+	return fileDescriptor_ws_331bd590ecfeca43, []int{45}
 }
 func (m *ResponsePagination) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_ResponsePagination.Unmarshal(m, b)
@@ -2910,7 +2964,7 @@ func (m *SignalReq) Reset()         { *m = SignalReq{} }
 func (m *SignalReq) String() string { return proto.CompactTextString(m) }
 func (*SignalReq) ProtoMessage()    {}
 func (*SignalReq) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_f1fa7995a968e7fe, []int{45}
+	return fileDescriptor_ws_331bd590ecfeca43, []int{46}
 }
 func (m *SignalReq) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_SignalReq.Unmarshal(m, b)
@@ -3177,7 +3231,7 @@ func (m *SignalResp) Reset()         { *m = SignalResp{} }
 func (m *SignalResp) String() string { return proto.CompactTextString(m) }
 func (*SignalResp) ProtoMessage()    {}
 func (*SignalResp) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_f1fa7995a968e7fe, []int{46}
+	return fileDescriptor_ws_331bd590ecfeca43, []int{47}
 }
 func (m *SignalResp) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_SignalResp.Unmarshal(m, b)
@@ -3445,7 +3499,7 @@ func (m *InvitationInfo) Reset()         { *m = InvitationInfo{} }
 func (m *InvitationInfo) String() string { return proto.CompactTextString(m) }
 func (*InvitationInfo) ProtoMessage()    {}
 func (*InvitationInfo) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_f1fa7995a968e7fe, []int{47}
+	return fileDescriptor_ws_331bd590ecfeca43, []int{48}
 }
 func (m *InvitationInfo) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_InvitationInfo.Unmarshal(m, b)
@@ -3541,7 +3595,7 @@ func (m *ParticipantMetaData) Reset()         { *m = ParticipantMetaData{} }
 func (m *ParticipantMetaData) String() string { return proto.CompactTextString(m) }
 func (*ParticipantMetaData) ProtoMessage()    {}
 func (*ParticipantMetaData) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_f1fa7995a968e7fe, []int{48}
+	return fileDescriptor_ws_331bd590ecfeca43, []int{49}
 }
 func (m *ParticipantMetaData) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_ParticipantMetaData.Unmarshal(m, b)
@@ -3596,7 +3650,7 @@ func (m *SignalInviteReq) Reset()         { *m = SignalInviteReq{} }
 func (m *SignalInviteReq) String() string { return proto.CompactTextString(m) }
 func (*SignalInviteReq) ProtoMessage()    {}
 func (*SignalInviteReq) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_f1fa7995a968e7fe, []int{49}
+	return fileDescriptor_ws_331bd590ecfeca43, []int{50}
 }
 func (m *SignalInviteReq) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_SignalInviteReq.Unmarshal(m, b)
@@ -3657,7 +3711,7 @@ func (m *SignalInviteReply) Reset()         { *m = SignalInviteReply{} }
 func (m *SignalInviteReply) String() string { return proto.CompactTextString(m) }
 func (*SignalInviteReply) ProtoMessage()    {}
 func (*SignalInviteReply) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_f1fa7995a968e7fe, []int{50}
+	return fileDescriptor_ws_331bd590ecfeca43, []int{51}
 }
 func (m *SignalInviteReply) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_SignalInviteReply.Unmarshal(m, b)
@@ -3712,7 +3766,7 @@ func (m *SignalInviteInGroupReq) Reset()         { *m = SignalInviteInGroupReq{}
 func (m *SignalInviteInGroupReq) String() string { return proto.CompactTextString(m) }
 func (*SignalInviteInGroupReq) ProtoMessage()    {}
 func (*SignalInviteInGroupReq) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_f1fa7995a968e7fe, []int{51}
+	return fileDescriptor_ws_331bd590ecfeca43, []int{52}
 }
 func (m *SignalInviteInGroupReq) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_SignalInviteInGroupReq.Unmarshal(m, b)
@@ -3773,7 +3827,7 @@ func (m *SignalInviteInGroupReply) Reset()         { *m = SignalInviteInGroupRep
 func (m *SignalInviteInGroupReply) String() string { return proto.CompactTextString(m) }
 func (*SignalInviteInGroupReply) ProtoMessage()    {}
 func (*SignalInviteInGroupReply) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_f1fa7995a968e7fe, []int{52}
+	return fileDescriptor_ws_331bd590ecfeca43, []int{53}
 }
 func (m *SignalInviteInGroupReply) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_SignalInviteInGroupReply.Unmarshal(m, b)
@@ -3828,7 +3882,7 @@ func (m *SignalCancelReq) Reset()         { *m = SignalCancelReq{} }
 func (m *SignalCancelReq) String() string { return proto.CompactTextString(m) }
 func (*SignalCancelReq) ProtoMessage()    {}
 func (*SignalCancelReq) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_f1fa7995a968e7fe, []int{53}
+	return fileDescriptor_ws_331bd590ecfeca43, []int{54}
 }
 func (m *SignalCancelReq) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_SignalCancelReq.Unmarshal(m, b)
@@ -3886,7 +3940,7 @@ func (m *SignalCancelReply) Reset()         { *m = SignalCancelReply{} }
 func (m *SignalCancelReply) String() string { return proto.CompactTextString(m) }
 func (*SignalCancelReply) ProtoMessage()    {}
 func (*SignalCancelReply) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_f1fa7995a968e7fe, []int{54}
+	return fileDescriptor_ws_331bd590ecfeca43, []int{55}
 }
 func (m *SignalCancelReply) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_SignalCancelReply.Unmarshal(m, b)
@@ -3921,7 +3975,7 @@ func (m *SignalAcceptReq) Reset()         { *m = SignalAcceptReq{} }
 func (m *SignalAcceptReq) String() string { return proto.CompactTextString(m) }
 func (*SignalAcceptReq) ProtoMessage()    {}
 func (*SignalAcceptReq) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_f1fa7995a968e7fe, []int{55}
+	return fileDescriptor_ws_331bd590ecfeca43, []int{56}
 }
 func (m *SignalAcceptReq) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_SignalAcceptReq.Unmarshal(m, b)
@@ -3989,7 +4043,7 @@ func (m *SignalAcceptReply) Reset()         { *m = SignalAcceptReply{} }
 func (m *SignalAcceptReply) String() string { return proto.CompactTextString(m) }
 func (*SignalAcceptReply) ProtoMessage()    {}
 func (*SignalAcceptReply) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_f1fa7995a968e7fe, []int{56}
+	return fileDescriptor_ws_331bd590ecfeca43, []int{57}
 }
 func (m *SignalAcceptReply) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_SignalAcceptReply.Unmarshal(m, b)
@@ -4043,7 +4097,7 @@ func (m *SignalHungUpReq) Reset()         { *m = SignalHungUpReq{} }
 func (m *SignalHungUpReq) String() string { return proto.CompactTextString(m) }
 func (*SignalHungUpReq) ProtoMessage()    {}
 func (*SignalHungUpReq) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_f1fa7995a968e7fe, []int{57}
+	return fileDescriptor_ws_331bd590ecfeca43, []int{58}
 }
 func (m *SignalHungUpReq) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_SignalHungUpReq.Unmarshal(m, b)
@@ -4094,7 +4148,7 @@ func (m *SignalHungUpReply) Reset()         { *m = SignalHungUpReply{} }
 func (m *SignalHungUpReply) String() string { return proto.CompactTextString(m) }
 func (*SignalHungUpReply) ProtoMessage()    {}
 func (*SignalHungUpReply) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_f1fa7995a968e7fe, []int{58}
+	return fileDescriptor_ws_331bd590ecfeca43, []int{59}
 }
 func (m *SignalHungUpReply) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_SignalHungUpReply.Unmarshal(m, b)
@@ -4129,7 +4183,7 @@ func (m *SignalRejectReq) Reset()         { *m = SignalRejectReq{} }
 func (m *SignalRejectReq) String() string { return proto.CompactTextString(m) }
 func (*SignalRejectReq) ProtoMessage()    {}
 func (*SignalRejectReq) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_f1fa7995a968e7fe, []int{59}
+	return fileDescriptor_ws_331bd590ecfeca43, []int{60}
 }
 func (m *SignalRejectReq) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_SignalRejectReq.Unmarshal(m, b)
@@ -4194,7 +4248,7 @@ func (m *SignalRejectReply) Reset()         { *m = SignalRejectReply{} }
 func (m *SignalRejectReply) String() string { return proto.CompactTextString(m) }
 func (*SignalRejectReply) ProtoMessage()    {}
 func (*SignalRejectReply) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_f1fa7995a968e7fe, []int{60}
+	return fileDescriptor_ws_331bd590ecfeca43, []int{61}
 }
 func (m *SignalRejectReply) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_SignalRejectReply.Unmarshal(m, b)
@@ -4228,7 +4282,7 @@ func (m *DelMsgListReq) Reset()         { *m = DelMsgListReq{} }
 func (m *DelMsgListReq) String() string { return proto.CompactTextString(m) }
 func (*DelMsgListReq) ProtoMessage()    {}
 func (*DelMsgListReq) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_f1fa7995a968e7fe, []int{61}
+	return fileDescriptor_ws_331bd590ecfeca43, []int{62}
 }
 func (m *DelMsgListReq) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_DelMsgListReq.Unmarshal(m, b)
@@ -4288,7 +4342,7 @@ func (m *DelMsgListResp) Reset()         { *m = DelMsgListResp{} }
 func (m *DelMsgListResp) String() string { return proto.CompactTextString(m) }
 func (*DelMsgListResp) ProtoMessage()    {}
 func (*DelMsgListResp) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_f1fa7995a968e7fe, []int{62}
+	return fileDescriptor_ws_331bd590ecfeca43, []int{63}
 }
 func (m *DelMsgListResp) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_DelMsgListResp.Unmarshal(m, b)
@@ -4367,6 +4421,7 @@ func init() {
 	proto.RegisterType((*FriendInfoChangedTips)(nil), "server_api_params.FriendInfoChangedTips")
 	proto.RegisterType((*UserInfoUpdatedTips)(nil), "server_api_params.UserInfoUpdatedTips")
 	proto.RegisterType((*ConversationUpdateTips)(nil), "server_api_params.ConversationUpdateTips")
+	proto.RegisterType((*ConversationSetPrivateTips)(nil), "server_api_params.ConversationSetPrivateTips")
 	proto.RegisterType((*RequestPagination)(nil), "server_api_params.RequestPagination")
 	proto.RegisterType((*ResponsePagination)(nil), "server_api_params.ResponsePagination")
 	proto.RegisterType((*SignalReq)(nil), "server_api_params.SignalReq")
@@ -4389,176 +4444,178 @@ func init() {
 	proto.RegisterType((*DelMsgListResp)(nil), "server_api_params.DelMsgListResp")
 }
 
-func init() { proto.RegisterFile("sdk_ws/ws.proto", fileDescriptor_ws_f1fa7995a968e7fe) }
+func init() { proto.RegisterFile("sdk_ws/ws.proto", fileDescriptor_ws_331bd590ecfeca43) }
 
-var fileDescriptor_ws_f1fa7995a968e7fe = []byte{
-	// 2676 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5a, 0xcd, 0x6f, 0x23, 0x49,
-	0x15, 0xa7, 0xdb, 0xb1, 0x13, 0x3f, 0xc7, 0x71, 0xd2, 0x59, 0x82, 0x09, 0xb3, 0x43, 0x68, 0x45,
-	0xcb, 0xb0, 0x40, 0x16, 0x0d, 0x42, 0x82, 0x5d, 0x18, 0x94, 0x8f, 0xf9, 0x5a, 0xe2, 0x99, 0x6c,
-	0x7b, 0x86, 0x45, 0x80, 0xb4, 0xea, 0xb8, 0x2b, 0x4e, 0x6f, 0xda, 0x55, 0xed, 0xfe, 0xc8, 0x4c,
-	0x24, 0x24, 0x24, 0x90, 0x10, 0x37, 0x4e, 0x70, 0xe0, 0x82, 0xc4, 0x05, 0x81, 0xd0, 0x6a, 0x0f,
-	0x70, 0x43, 0x9c, 0xf8, 0x07, 0x38, 0x22, 0x6e, 0x9c, 0xb9, 0x72, 0x40, 0x42, 0x02, 0x55, 0xbd,
-	0xea, 0xee, 0xaa, 0x6e, 0x3b, 0xf1, 0x46, 0xd1, 0xce, 0xac, 0x86, 0x9b, 0xdf, 0xeb, 0x7a, 0xaf,
-	0x5e, 0xbd, 0xdf, 0x7b, 0xaf, 0x5e, 0x55, 0x19, 0x3a, 0xb1, 0x77, 0xf2, 0xce, 0x93, 0xf8, 0xb5,
-	0x27, 0xf1, 0x56, 0x18, 0xb1, 0x84, 0x59, 0x2b, 0x31, 0x89, 0x4e, 0x49, 0xf4, 0x8e, 0x1b, 0xfa,
-	0xef, 0x84, 0x6e, 0xe4, 0x8e, 0x62, 0xfb, 0x5f, 0x26, 0x34, 0xef, 0x46, 0x2c, 0x0d, 0xef, 0xd3,
-	0x23, 0x66, 0x75, 0x61, 0x7e, 0x28, 0x88, 0xbd, 0xae, 0xb1, 0x61, 0xdc, 0x68, 0x3a, 0x19, 0x69,
-	0x5d, 0x83, 0xa6, 0xf8, 0xf9, 0xc0, 0x1d, 0x91, 0xae, 0x29, 0xbe, 0x15, 0x0c, 0xcb, 0x86, 0x45,
-	0xca, 0x12, 0xff, 0xc8, 0x1f, 0xb8, 0x89, 0xcf, 0x68, 0xb7, 0x26, 0x06, 0x68, 0x3c, 0x3e, 0xc6,
-	0xa7, 0x49, 0xc4, 0xbc, 0x74, 0x20, 0xc6, 0xcc, 0xe1, 0x18, 0x95, 0xc7, 0xe7, 0x3f, 0x72, 0x07,
-	0xe4, 0xb1, 0xb3, 0xdf, 0xad, 0xe3, 0xfc, 0x92, 0xb4, 0x36, 0xa0, 0xc5, 0x9e, 0x50, 0x12, 0x3d,
-	0x8e, 0x49, 0x74, 0x7f, 0xaf, 0xdb, 0x10, 0x5f, 0x55, 0x96, 0x75, 0x1d, 0x60, 0x10, 0x11, 0x37,
-	0x21, 0x8f, 0xfc, 0x11, 0xe9, 0xce, 0x6f, 0x18, 0x37, 0xda, 0x8e, 0xc2, 0xe1, 0x1a, 0x46, 0x64,
-	0x74, 0x48, 0xa2, 0x5d, 0x96, 0xd2, 0xa4, 0xbb, 0x20, 0x06, 0xa8, 0x2c, 0x6b, 0x09, 0x4c, 0xf2,
-	0xb4, 0xdb, 0x14, 0xaa, 0x4d, 0xf2, 0xd4, 0x5a, 0x83, 0x46, 0x9c, 0xb8, 0x49, 0x1a, 0x77, 0x61,
-	0xc3, 0xb8, 0x51, 0x77, 0x24, 0x65, 0x6d, 0x42, 0x5b, 0xe8, 0x65, 0x99, 0x35, 0x2d, 0x21, 0xa2,
-	0x33, 0x73, 0x8f, 0x3d, 0x3a, 0x0b, 0x49, 0x77, 0x51, 0x28, 0x28, 0x18, 0xf6, 0xdf, 0x4c, 0x58,
-	0x15, 0x7e, 0xef, 0x09, 0x03, 0xee, 0xa4, 0x41, 0x70, 0x01, 0x02, 0x6b, 0xd0, 0x48, 0x71, 0x3a,
-	0x74, 0xbf, 0xa4, 0xf8, 0x3c, 0x11, 0x0b, 0xc8, 0x3e, 0x39, 0x25, 0x81, 0x70, 0x7c, 0xdd, 0x29,
-	0x18, 0xd6, 0x3a, 0x2c, 0xbc, 0xcb, 0x7c, 0x2a, 0x7c, 0x32, 0x27, 0x3e, 0xe6, 0x34, 0xff, 0x46,
-	0xfd, 0xc1, 0x09, 0xe5, 0x90, 0xa2, 0xbb, 0x73, 0x5a, 0x45, 0xa2, 0xa1, 0x23, 0xf1, 0x0a, 0x2c,
-	0xb9, 0x61, 0xd8, 0x73, 0xe9, 0x90, 0x44, 0x38, 0xe9, 0xbc, 0xd0, 0x5b, 0xe2, 0x72, 0x3c, 0xf8,
-	0x4c, 0x7d, 0x96, 0x46, 0x03, 0x22, 0xdc, 0x5d, 0x77, 0x14, 0x0e, 0xd7, 0xc3, 0x42, 0x12, 0x29,
-	0x6e, 0x44, 0xcf, 0x97, 0xb8, 0x12, 0x15, 0xc8, 0x51, 0xe1, 0x38, 0xa6, 0x09, 0xb9, 0x4d, 0x3d,
-	0xb1, 0xa8, 0x96, 0xc4, 0xb1, 0x60, 0xd9, 0x3f, 0x31, 0x60, 0xe9, 0x20, 0x3d, 0x0c, 0xfc, 0x81,
-	0x50, 0xc1, 0xdd, 0x5a, 0x38, 0xcf, 0xd0, 0x9c, 0xa7, 0xba, 0xc0, 0x9c, 0xee, 0x82, 0x9a, 0xee,
-	0x82, 0x35, 0x68, 0x0c, 0x09, 0xf5, 0x48, 0x24, 0x5d, 0x2a, 0x29, 0x69, 0x6a, 0x3d, 0x33, 0xd5,
-	0xfe, 0x85, 0x09, 0x0b, 0x1f, 0xb2, 0x09, 0x1b, 0xd0, 0x0a, 0x8f, 0x19, 0x25, 0x0f, 0x52, 0x1e,
-	0x56, 0xd2, 0x16, 0x95, 0x65, 0xbd, 0x04, 0xf5, 0x43, 0x3f, 0x4a, 0x8e, 0x05, 0xae, 0x6d, 0x07,
-	0x09, 0xce, 0x25, 0x23, 0xd7, 0x47, 0x30, 0x9b, 0x0e, 0x12, 0x72, 0x41, 0x0b, 0xb9, 0xef, 0xf5,
-	0x1c, 0x6b, 0x56, 0x72, 0xac, 0x1a, 0x1b, 0x30, 0x29, 0x36, 0xec, 0x7f, 0x1b, 0x00, 0x77, 0x22,
-	0x9f, 0x50, 0x4f, 0xb8, 0xa6, 0x94, 0xdc, 0x46, 0x35, 0xb9, 0xd7, 0xa0, 0x11, 0x91, 0x91, 0x1b,
-	0x9d, 0x64, 0xc1, 0x8f, 0x54, 0xc9, 0xa0, 0x5a, 0xc5, 0xa0, 0x37, 0x00, 0x8e, 0xc4, 0x3c, 0x5c,
-	0x8f, 0x70, 0x55, 0xeb, 0xe6, 0xa7, 0xb6, 0x2a, 0x65, 0x70, 0x2b, 0x43, 0xc9, 0x51, 0x86, 0xf3,
-	0xcc, 0x72, 0x3d, 0x4f, 0x06, 0x70, 0x1d, 0x33, 0x2b, 0x67, 0x4c, 0x88, 0xdf, 0xc6, 0x39, 0xf1,
-	0x3b, 0x9f, 0x07, 0xc5, 0x3f, 0x0d, 0x68, 0xee, 0x04, 0xee, 0xe0, 0x64, 0xc6, 0xa5, 0xeb, 0x4b,
-	0x34, 0x2b, 0x4b, 0xbc, 0x0b, 0xed, 0x43, 0xae, 0x2e, 0x5b, 0x82, 0xf0, 0x42, 0xeb, 0xe6, 0x67,
-	0x26, 0xac, 0x52, 0x4f, 0x0a, 0x47, 0x97, 0xd3, 0x97, 0x3b, 0x77, 0xf1, 0x72, 0xeb, 0xe7, 0x2c,
-	0xb7, 0x91, 0x2f, 0xf7, 0xaf, 0x26, 0x2c, 0x8a, 0x42, 0xe7, 0x90, 0x71, 0x4a, 0xe2, 0xc4, 0xfa,
-	0x06, 0x2c, 0xa4, 0x99, 0xa9, 0xc6, 0xac, 0xa6, 0xe6, 0x22, 0xd6, 0xeb, 0xb2, 0xac, 0x0a, 0x79,
-	0x53, 0xc8, 0x5f, 0x9b, 0x20, 0x9f, 0xef, 0x69, 0x4e, 0x31, 0x9c, 0x6f, 0x41, 0xc7, 0x2e, 0xf5,
-	0x02, 0xe2, 0x90, 0x38, 0x0d, 0x12, 0x59, 0x2d, 0x35, 0x1e, 0x46, 0xda, 0xb8, 0x17, 0x0f, 0xe5,
-	0x06, 0x25, 0x29, 0xee, 0x1d, 0x1c, 0xc7, 0x3f, 0xe1, 0xd2, 0x0b, 0x06, 0x4f, 0xd4, 0x88, 0x8c,
-	0x05, 0x42, 0x98, 0x56, 0x19, 0x59, 0xcc, 0x29, 0xbd, 0x86, 0x81, 0xa0, 0xf1, 0x38, 0xc4, 0x48,
-	0x0b, 0x05, 0xb8, 0x33, 0x29, 0x9c, 0xf2, 0xc6, 0x64, 0xff, 0xbd, 0x06, 0x6d, 0x4c, 0x9f, 0xcc,
-	0xa9, 0xd7, 0x79, 0x9c, 0xb3, 0x91, 0x16, 0x45, 0x0a, 0x87, 0x5b, 0xc1, 0xa9, 0x07, 0x7a, 0xa1,
-	0xd1, 0x78, 0x3c, 0x14, 0x39, 0x7d, 0x47, 0x2b, 0x38, 0x2a, 0x2b, 0x9b, 0xe5, 0xae, 0x5a, 0x78,
-	0x14, 0x0e, 0x2f, 0x65, 0x09, 0xd3, 0xa2, 0x23, 0xa7, 0xb9, 0x6c, 0xc2, 0xf2, 0xf9, 0x31, 0x3e,
-	0x14, 0x0e, 0xf7, 0x6f, 0xc2, 0xb2, 0xb9, 0xd1, 0x49, 0x05, 0x03, 0x35, 0xcb, 0x79, 0x71, 0x2b,
-	0xc9, 0xe9, 0x0a, 0xaa, 0xcd, 0x73, 0x51, 0x05, 0x0d, 0x55, 0x3d, 0xb9, 0x5a, 0x95, 0xe4, 0xda,
-	0x84, 0x36, 0xea, 0xc9, 0x82, 0x7e, 0x11, 0xb7, 0x7a, 0x8d, 0xa9, 0xc7, 0x46, 0xbb, 0x1c, 0x1b,
-	0x3a, 0xba, 0x4b, 0x53, 0xd0, 0xed, 0xe4, 0xe8, 0xfe, 0x00, 0xba, 0x07, 0x69, 0x10, 0xf4, 0x48,
-	0x1c, 0xbb, 0x43, 0xb2, 0x73, 0xd6, 0x27, 0xe3, 0x7d, 0x3f, 0x4e, 0x1c, 0x12, 0x87, 0x3c, 0xce,
-	0x48, 0x14, 0xed, 0x32, 0x8f, 0x08, 0x90, 0xeb, 0x4e, 0x46, 0xf2, 0x15, 0x92, 0x28, 0xe2, 0x06,
-	0xc8, 0x0a, 0x89, 0x94, 0xb5, 0x05, 0x73, 0x81, 0x1f, 0xf3, 0x58, 0xaf, 0xdd, 0x68, 0xdd, 0x5c,
-	0x9f, 0x90, 0x2a, 0xbd, 0x78, 0xb8, 0xe7, 0x26, 0xae, 0x23, 0xc6, 0xd9, 0x23, 0xf8, 0xc4, 0xe4,
-	0xd9, 0xc7, 0x53, 0x77, 0x30, 0x5e, 0xc3, 0x44, 0x11, 0xf0, 0x19, 0xcd, 0xdb, 0x13, 0x95, 0xc5,
-	0xcd, 0x8e, 0x51, 0x8f, 0xb0, 0xa3, 0xed, 0x64, 0xa4, 0xfd, 0x12, 0x58, 0x77, 0x49, 0xd2, 0x73,
-	0x9f, 0x6e, 0x53, 0xaf, 0xe7, 0xd3, 0x3e, 0x19, 0x3b, 0x64, 0x6c, 0xdf, 0x86, 0xd5, 0x0a, 0x37,
-	0x0e, 0xb9, 0x01, 0x23, 0xf7, 0x69, 0x9f, 0x8c, 0x85, 0x01, 0x6d, 0x47, 0x52, 0x82, 0x2f, 0x46,
-	0xc9, 0xf2, 0x28, 0x29, 0x7b, 0x0c, 0x1d, 0x8e, 0x50, 0x9f, 0x50, 0xaf, 0x17, 0x0f, 0x85, 0x8a,
-	0x0d, 0x68, 0xa1, 0x07, 0x7a, 0xf1, 0xb0, 0xa8, 0xb7, 0x0a, 0x8b, 0x8f, 0x18, 0x04, 0x3e, 0xa1,
-	0x09, 0x8e, 0x90, 0xab, 0x51, 0x58, 0x3c, 0x18, 0x63, 0x22, 0xdb, 0x0f, 0x9e, 0x25, 0x35, 0x27,
-	0xa7, 0xed, 0x3f, 0xd5, 0x61, 0x5e, 0x3a, 0x54, 0xf4, 0x8f, 0x7c, 0x8b, 0xcb, 0xfd, 0x85, 0x14,
-	0x06, 0xe3, 0xe0, 0xb4, 0xe8, 0xe4, 0x90, 0x52, 0x7b, 0xbf, 0x9a, 0xde, 0xfb, 0x95, 0x6c, 0x9a,
-	0xab, 0xda, 0x54, 0x5a, 0x57, 0xbd, 0xba, 0xae, 0x57, 0x61, 0x39, 0x16, 0x09, 0x73, 0x10, 0xb8,
-	0xc9, 0x11, 0x8b, 0x46, 0x72, 0xc7, 0xaa, 0x3b, 0x15, 0x3e, 0x2f, 0xf6, 0xc8, 0xcb, 0x13, 0x16,
-	0x33, 0xb2, 0xc4, 0xe5, 0xe9, 0x81, 0x9c, 0x2c, 0x71, 0xb1, 0x55, 0xd0, 0x99, 0x68, 0x5b, 0x1c,
-	0xfb, 0x8c, 0x8a, 0x5e, 0x18, 0xf3, 0x53, 0x65, 0xf1, 0x95, 0x8f, 0xe2, 0xe1, 0x9d, 0x88, 0x8d,
-	0x64, 0xc3, 0x90, 0x91, 0x62, 0xe5, 0x8c, 0x26, 0x84, 0x26, 0x42, 0xb6, 0x85, 0xb2, 0x0a, 0x8b,
-	0xcb, 0x4a, 0x52, 0x24, 0xe7, 0xa2, 0x93, 0x91, 0xd6, 0x32, 0xd4, 0x62, 0x32, 0x96, 0x19, 0xc7,
-	0x7f, 0x6a, 0xc8, 0x75, 0x74, 0xe4, 0x4a, 0xa5, 0x60, 0x59, 0x7c, 0x55, 0x4b, 0x41, 0x71, 0x1a,
-	0x58, 0xd1, 0x4e, 0x03, 0xdb, 0x30, 0xcf, 0x42, 0x1e, 0xe7, 0x71, 0xd7, 0x12, 0x39, 0xf6, 0xd9,
-	0xe9, 0x39, 0xb6, 0xf5, 0x10, 0x47, 0xde, 0xa6, 0x49, 0x74, 0xe6, 0x64, 0x72, 0xd6, 0x3e, 0x74,
-	0xd8, 0xd1, 0x51, 0xe0, 0x53, 0x72, 0x90, 0xc6, 0xc7, 0x62, 0x67, 0x5b, 0x15, 0x3b, 0x9b, 0x3d,
-	0x41, 0xd5, 0x43, 0x7d, 0xa4, 0x53, 0x16, 0x5d, 0x7f, 0x1d, 0x16, 0xd5, 0x69, 0xb8, 0x1b, 0x4e,
-	0xc8, 0x99, 0x8c, 0x41, 0xfe, 0x93, 0x37, 0x7b, 0xa7, 0x6e, 0x90, 0xe2, 0x36, 0xb0, 0xe0, 0x20,
-	0xf1, 0xba, 0xf9, 0x55, 0xc3, 0xfe, 0xb9, 0x01, 0x9d, 0xd2, 0x04, 0x7c, 0x74, 0xe2, 0x27, 0x01,
-	0x91, 0x1a, 0x90, 0xb0, 0x2c, 0x98, 0xf3, 0x48, 0x3c, 0x90, 0x21, 0x2c, 0x7e, 0xcb, 0x4a, 0x56,
-	0xcb, 0xdb, 0x45, 0x7e, 0xe4, 0x7b, 0xd8, 0xe7, 0x8a, 0xfa, 0x2c, 0xa5, 0x5e, 0x7e, 0xe4, 0x53,
-	0x78, 0x3c, 0x84, 0xfc, 0x87, 0xfd, 0x1d, 0xd7, 0x1b, 0x12, 0x3c, 0x98, 0xd5, 0x85, 0x4d, 0x3a,
-	0xd3, 0xf6, 0x60, 0xe1, 0x91, 0x1f, 0xc6, 0xbb, 0x6c, 0x34, 0xe2, 0x40, 0x78, 0x24, 0xe1, 0xbd,
-	0xaa, 0x21, 0xf0, 0x96, 0x14, 0x0f, 0x15, 0x8f, 0x1c, 0xb9, 0x69, 0x90, 0xf0, 0xa1, 0x59, 0xe2,
-	0x2a, 0x2c, 0x71, 0x24, 0x89, 0x19, 0xdd, 0x43, 0x69, 0xb4, 0x53, 0xe1, 0xd8, 0x7f, 0x31, 0x61,
-	0x59, 0x34, 0x0e, 0xbb, 0x02, 0x76, 0x4f, 0x08, 0xdd, 0x84, 0xba, 0x48, 0x43, 0xd9, 0xac, 0x9c,
-	0xdf, 0x6c, 0xe0, 0x50, 0xeb, 0x16, 0x34, 0x58, 0x28, 0x5a, 0x4e, 0xec, 0x50, 0x5e, 0x99, 0x26,
-	0xa4, 0x9f, 0xfe, 0x1c, 0x29, 0x65, 0xdd, 0x01, 0xc0, 0x83, 0xe9, 0x7e, 0x51, 0xba, 0x67, 0xd5,
-	0xa1, 0x48, 0x72, 0xe7, 0xe6, 0x65, 0x38, 0x3f, 0x02, 0xd6, 0x1c, 0x9d, 0x69, 0x3d, 0x80, 0x25,
-	0x61, 0xf6, 0xc3, 0xac, 0xeb, 0x14, 0x18, 0xcc, 0x3e, 0x63, 0x49, 0xda, 0xfe, 0xb5, 0x21, 0xdd,
-	0xc8, 0xbf, 0xf6, 0x09, 0xfa, 0xbe, 0x70, 0x89, 0x71, 0x29, 0x97, 0xac, 0xc3, 0x02, 0x3f, 0xe3,
-	0xe5, 0x4d, 0x70, 0xcd, 0xc9, 0xe9, 0x02, 0xa2, 0xda, 0xcc, 0x10, 0xd9, 0xbf, 0x31, 0xa0, 0xfb,
-	0x26, 0xf3, 0xa9, 0xf8, 0xb0, 0x1d, 0x86, 0x81, 0xbc, 0xa7, 0xb8, 0x34, 0xe6, 0xdf, 0x84, 0xa6,
-	0x8b, 0x6a, 0x68, 0x22, 0x61, 0x9f, 0xa1, 0xb1, 0x2d, 0x64, 0x94, 0x1e, 0xa5, 0xa6, 0xf6, 0x28,
-	0xf6, 0x7b, 0x06, 0x2c, 0xa1, 0x53, 0xde, 0x4a, 0xfd, 0xe4, 0xd2, 0xf6, 0xed, 0xc0, 0xc2, 0x38,
-	0xf5, 0x93, 0x4b, 0x44, 0x65, 0x2e, 0x57, 0x8d, 0xa7, 0xda, 0x84, 0x78, 0xb2, 0xdf, 0x37, 0xe0,
-	0x5a, 0xd9, 0xad, 0xdb, 0x83, 0x01, 0x09, 0x9f, 0x65, 0x4a, 0x69, 0x3d, 0xda, 0x5c, 0xa9, 0x47,
-	0x9b, 0x68, 0xb2, 0x43, 0xde, 0x25, 0x83, 0xe7, 0xd7, 0xe4, 0x1f, 0x9b, 0xf0, 0xc9, 0xbb, 0x79,
-	0xe2, 0x3d, 0x8a, 0x5c, 0x1a, 0x1f, 0x91, 0x28, 0x7a, 0x86, 0xf6, 0xee, 0x43, 0x9b, 0x92, 0x27,
-	0x85, 0x4d, 0x32, 0x1d, 0x67, 0x55, 0xa3, 0x0b, 0xcf, 0x56, 0xbb, 0xec, 0xff, 0x18, 0xb0, 0x8c,
-	0x7a, 0xbe, 0xe5, 0x0f, 0x4e, 0x9e, 0xe1, 0xe2, 0x1f, 0xc0, 0xd2, 0x89, 0xb0, 0x80, 0x53, 0x97,
-	0x28, 0xdb, 0x25, 0xe9, 0x19, 0x97, 0xff, 0x5f, 0x03, 0x56, 0x50, 0xd1, 0x7d, 0x7a, 0xea, 0x3f,
-	0xcb, 0x60, 0x3d, 0x80, 0x8e, 0x8f, 0x26, 0x5c, 0xd2, 0x01, 0x65, 0xf1, 0x19, 0x3d, 0xf0, 0x47,
-	0x03, 0x3a, 0xa8, 0xe9, 0x36, 0x4d, 0x48, 0x74, 0xe9, 0xf5, 0xdf, 0x83, 0x16, 0xa1, 0x49, 0xe4,
-	0xd2, 0xcb, 0x54, 0x48, 0x55, 0x74, 0xc6, 0x22, 0xf9, 0x9e, 0x01, 0x96, 0x50, 0xb5, 0xe7, 0xc7,
-	0x23, 0x3f, 0x8e, 0x9f, 0x21, 0x74, 0xb3, 0x19, 0xfc, 0x4b, 0x13, 0x5e, 0x52, 0xb4, 0xf4, 0xd2,
-	0xe4, 0x79, 0x37, 0xd9, 0xda, 0x83, 0x26, 0xef, 0x11, 0xd4, 0xcb, 0xbf, 0x59, 0x27, 0x2a, 0x04,
-	0x79, 0x17, 0x2b, 0x88, 0x3e, 0x19, 0x30, 0xea, 0xc5, 0xa2, 0x39, 0x6a, 0x3b, 0x1a, 0x8f, 0x97,
-	0xa1, 0x75, 0x45, 0xcd, 0xae, 0x4b, 0x07, 0x24, 0x78, 0x61, 0x5c, 0x64, 0xff, 0xce, 0x80, 0x25,
-	0x1c, 0xf2, 0xfc, 0x2f, 0x99, 0xef, 0xf5, 0x18, 0xc8, 0x1f, 0x19, 0x94, 0xec, 0x13, 0x58, 0xc1,
-	0xfb, 0x3e, 0xa5, 0x3d, 0xe1, 0x07, 0x5f, 0xd7, 0xc3, 0xb3, 0xac, 0x21, 0x84, 0x32, 0x52, 0xbf,
-	0xc9, 0x95, 0x8f, 0x75, 0xc5, 0x4d, 0xee, 0x75, 0x00, 0xd7, 0xf3, 0xde, 0x66, 0x91, 0xe7, 0xd3,
-	0xac, 0xd7, 0x54, 0x38, 0xf6, 0x9b, 0xb0, 0xc8, 0x8f, 0xde, 0x8f, 0x94, 0x9b, 0xbb, 0x73, 0xef,
-	0x16, 0xd5, 0x5b, 0x3f, 0x53, 0xbf, 0xf5, 0xb3, 0xbf, 0x0f, 0x1f, 0xaf, 0x18, 0x2e, 0x7c, 0xbd,
-	0x8b, 0x17, 0x92, 0xd9, 0x24, 0xd2, 0xe5, 0x9f, 0x9e, 0xe0, 0x3d, 0xd5, 0x16, 0x47, 0x13, 0xb2,
-	0x7f, 0x64, 0xc0, 0xcb, 0x15, 0xf5, 0xdb, 0x61, 0x18, 0xb1, 0x53, 0x09, 0xe9, 0x55, 0x4c, 0xa3,
-	0xf7, 0x61, 0x66, 0xb9, 0x0f, 0x9b, 0x68, 0x84, 0xd6, 0x3b, 0x7e, 0x08, 0x46, 0xfc, 0xd6, 0x80,
-	0x8e, 0x34, 0xc2, 0xf3, 0xe4, 0xb4, 0x5f, 0x81, 0x06, 0x3e, 0x66, 0xc8, 0x09, 0x5f, 0x9e, 0x38,
-	0x61, 0xf6, 0x08, 0xe3, 0xc8, 0xc1, 0xd5, 0x88, 0x34, 0x27, 0xd5, 0x8d, 0xaf, 0xe5, 0x71, 0x3f,
-	0xf3, 0x73, 0x83, 0x14, 0xb0, 0xbf, 0x93, 0x05, 0xf3, 0x1e, 0x09, 0xc8, 0x55, 0xfa, 0xc8, 0x7e,
-	0x0c, 0x4b, 0xe2, 0x65, 0xa5, 0xf0, 0xc1, 0x95, 0xa8, 0x7d, 0x1b, 0x96, 0x85, 0xda, 0x2b, 0xb7,
-	0x37, 0xcf, 0x0e, 0xee, 0x9f, 0xdd, 0x63, 0x97, 0x0e, 0xaf, 0x52, 0xfb, 0x17, 0x61, 0x35, 0xf3,
-	0xfd, 0xe3, 0xd0, 0xcb, 0xef, 0x33, 0xa6, 0xdc, 0xe2, 0xda, 0x5f, 0x82, 0xb5, 0x5d, 0x46, 0x4f,
-	0x49, 0x14, 0x0b, 0x94, 0x51, 0x24, 0x93, 0xd0, 0x92, 0x5f, 0x52, 0x76, 0x1f, 0x56, 0xe4, 0xfb,
-	0xc3, 0x81, 0x3b, 0xf4, 0x29, 0x56, 0xa5, 0xeb, 0x00, 0xa1, 0x3b, 0xcc, 0xde, 0x1f, 0xf1, 0x92,
-	0x5a, 0xe1, 0xf0, 0xef, 0xf1, 0x31, 0x7b, 0x22, 0xbf, 0x9b, 0xf8, 0xbd, 0xe0, 0xd8, 0xdf, 0x06,
-	0xcb, 0x21, 0x71, 0xc8, 0x68, 0x4c, 0x14, 0xad, 0x1b, 0xd0, 0xda, 0x4d, 0xa3, 0x88, 0x50, 0x3e,
-	0x55, 0xf6, 0x18, 0xa7, 0xb2, 0xb8, 0xde, 0x7e, 0xa1, 0x17, 0x2f, 0x36, 0x15, 0x8e, 0xfd, 0xab,
-	0x1a, 0x34, 0xfb, 0xfe, 0x90, 0xba, 0x81, 0x43, 0xc6, 0xd6, 0xd7, 0xa1, 0x81, 0xed, 0xa6, 0x74,
-	0xed, 0xa4, 0x8b, 0x36, 0x1c, 0x8d, 0x7d, 0xb5, 0x43, 0xc6, 0xf7, 0x3e, 0xe6, 0x48, 0x19, 0xeb,
-	0x2d, 0x68, 0xe3, 0xaf, 0xfb, 0x78, 0x7d, 0x20, 0x6b, 0xff, 0xe7, 0x2e, 0x50, 0x22, 0x47, 0xa3,
-	0x2e, 0x5d, 0x03, 0x37, 0x68, 0x20, 0xb6, 0x23, 0x99, 0x4f, 0xd3, 0x0d, 0xc2, 0x5d, 0x4b, 0x1a,
-	0x84, 0x32, 0x5c, 0xda, 0x15, 0x07, 0x6c, 0xb9, 0x85, 0x4f, 0x97, 0xc6, 0x73, 0xb8, 0x94, 0x46,
-	0x19, 0x2e, 0x7d, 0x9c, 0xd2, 0xe1, 0xe3, 0x50, 0xde, 0xfb, 0x4c, 0x97, 0xbe, 0x27, 0x86, 0x49,
-	0x69, 0x94, 0xe1, 0xd2, 0x91, 0xa8, 0x76, 0xc2, 0xe9, 0xe7, 0x49, 0x63, 0x51, 0x94, 0xd2, 0x28,
-	0xb3, 0xd3, 0x84, 0xf9, 0xd0, 0x3d, 0x0b, 0x98, 0xeb, 0xd9, 0xbf, 0xaf, 0x01, 0x64, 0x03, 0x63,
-	0xb1, 0xb3, 0x6a, 0x10, 0x6d, 0x5e, 0x08, 0x51, 0x18, 0x9c, 0x29, 0x20, 0xf5, 0x27, 0x83, 0xf4,
-	0xf9, 0x59, 0x41, 0x42, 0x6d, 0x25, 0x98, 0x6e, 0x95, 0x60, 0xda, 0xbc, 0x10, 0x26, 0x69, 0x94,
-	0x04, 0xea, 0x56, 0x09, 0xa8, 0xcd, 0x0b, 0x81, 0x92, 0xf2, 0x12, 0xaa, 0x5b, 0x25, 0xa8, 0x36,
-	0x2f, 0x84, 0x4a, 0xca, 0x4b, 0xb0, 0x6e, 0x95, 0xc0, 0xda, 0xbc, 0x10, 0x2c, 0x29, 0x5f, 0x85,
-	0xeb, 0x7d, 0x13, 0x96, 0x84, 0xcb, 0xf0, 0x91, 0x87, 0x1e, 0x31, 0x71, 0x97, 0x2b, 0xdc, 0xa5,
-	0x3f, 0x67, 0xeb, 0x4c, 0xeb, 0x0b, 0xb0, 0x82, 0x0c, 0xf9, 0xfc, 0x29, 0xce, 0x8a, 0xe6, 0x46,
-	0xed, 0x46, 0xd3, 0xa9, 0x7e, 0x10, 0xd7, 0xf2, 0x69, 0x9c, 0xb0, 0xd1, 0x9e, 0x9b, 0xb8, 0x59,
-	0xb7, 0x52, 0x70, 0xd4, 0x47, 0x93, 0xb9, 0xca, 0x1f, 0x66, 0x22, 0xc6, 0x46, 0xf9, 0x6b, 0x88,
-	0xa4, 0xb8, 0x44, 0xe2, 0x8f, 0x08, 0x4b, 0x13, 0x59, 0x26, 0x32, 0x92, 0xef, 0xb1, 0x23, 0xe2,
-	0xf9, 0xae, 0x78, 0x6a, 0x90, 0x6f, 0x90, 0x39, 0x43, 0x54, 0xb6, 0xe2, 0xe9, 0x44, 0xfe, 0xa1,
-	0xa5, 0xe0, 0x5c, 0xfc, 0xcc, 0x61, 0xff, 0xc3, 0x80, 0xd5, 0x03, 0x37, 0x4a, 0xfc, 0x81, 0x1f,
-	0xba, 0x34, 0xe9, 0x91, 0xc4, 0x15, 0x6b, 0xd0, 0xde, 0xb4, 0x8d, 0x0f, 0xf6, 0xa6, 0x7d, 0x00,
-	0x9d, 0x61, 0xd1, 0x5f, 0x2a, 0xaf, 0xe2, 0x33, 0x9f, 0xbb, 0x4b, 0xe2, 0xda, 0x03, 0x7d, 0xed,
-	0x03, 0x3f, 0xd0, 0xdb, 0x3f, 0x35, 0xa1, 0x53, 0x2a, 0x9d, 0xbc, 0x45, 0xc4, 0xcd, 0x3f, 0x8f,
-	0x89, 0x9c, 0xb6, 0xb6, 0x01, 0xfc, 0x3c, 0x8c, 0xce, 0xb9, 0x38, 0xd5, 0x63, 0xcd, 0x51, 0x84,
-	0x26, 0xbd, 0x9f, 0xd4, 0x2e, 0xfd, 0x7e, 0x62, 0xdd, 0x83, 0x56, 0x58, 0x80, 0x74, 0xce, 0xa1,
-	0x68, 0x02, 0x94, 0x8e, 0x2a, 0x6a, 0x7f, 0x0f, 0x56, 0x2a, 0x15, 0x4a, 0x3c, 0xa7, 0xb0, 0x13,
-	0x42, 0xf3, 0xe7, 0x14, 0x4e, 0x28, 0xc1, 0x6a, 0x96, 0x83, 0x35, 0xf0, 0x4f, 0xd5, 0x7f, 0x00,
-	0x49, 0xd2, 0xfe, 0x99, 0x09, 0x6b, 0x93, 0x77, 0x97, 0x17, 0xd5, 0xdd, 0x87, 0xd0, 0x9d, 0x56,
-	0xc9, 0xaf, 0xcc, 0xeb, 0x45, 0x74, 0xe7, 0xfb, 0xf0, 0x8b, 0xea, 0xee, 0xd5, 0x2c, 0xba, 0x95,
-	0xad, 0xce, 0xfe, 0x43, 0xee, 0x9f, 0xbc, 0xd3, 0x78, 0x41, 0xfd, 0x63, 0xbd, 0x0a, 0xcb, 0xb8,
-	0x4c, 0xe5, 0xc1, 0x1d, 0x1b, 0xd7, 0x0a, 0xbf, 0xa8, 0x14, 0xca, 0xb6, 0x7f, 0x65, 0x31, 0xfb,
-	0x67, 0x23, 0xc3, 0x24, 0xef, 0xdf, 0x3e, 0x52, 0x98, 0x14, 0x91, 0xa6, 0x34, 0x35, 0x4a, 0xa4,
-	0xe5, 0x7d, 0xe5, 0xff, 0x23, 0xed, 0xe2, 0x48, 0xcb, 0x7d, 0xa9, 0x34, 0x78, 0xf6, 0x0f, 0xa1,
-	0xbd, 0x47, 0x82, 0x5e, 0x3c, 0xcc, 0xfe, 0xea, 0x73, 0x9e, 0x23, 0xa7, 0xfd, 0x11, 0x79, 0xea,
-	0x9f, 0x7c, 0xca, 0x7f, 0x10, 0x9a, 0xab, 0xfc, 0x41, 0xc8, 0xde, 0x81, 0x25, 0xd5, 0x80, 0xcb,
-	0xfc, 0xd3, 0x69, 0xe7, 0xda, 0x77, 0xd7, 0xb7, 0x5e, 0xc3, 0xbf, 0xbc, 0xbf, 0x51, 0x71, 0xe2,
-	0x61, 0x43, 0xfc, 0x05, 0xfe, 0xcb, 0xff, 0x0b, 0x00, 0x00, 0xff, 0xff, 0x93, 0x6d, 0x96, 0x68,
-	0x15, 0x2f, 0x00, 0x00,
+var fileDescriptor_ws_331bd590ecfeca43 = []byte{
+	// 2713 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5a, 0xcd, 0x6f, 0xe4, 0x48,
+	0x15, 0xc7, 0xee, 0x74, 0x27, 0xfd, 0x3a, 0x9d, 0x0f, 0x67, 0x08, 0x4d, 0x98, 0x1d, 0x82, 0x15,
+	0x2d, 0xc3, 0x02, 0x59, 0x34, 0x08, 0x09, 0x66, 0x61, 0x50, 0x3e, 0xe6, 0x6b, 0x49, 0xcf, 0x64,
+	0xdd, 0x33, 0x2c, 0x02, 0xa4, 0x91, 0xd3, 0xae, 0x74, 0x3c, 0x71, 0x97, 0xdd, 0x2e, 0x3b, 0x33,
+	0x91, 0x90, 0x90, 0x40, 0x42, 0xdc, 0x38, 0xc1, 0x81, 0x0b, 0x12, 0x17, 0x04, 0x42, 0xab, 0x3d,
+	0xc0, 0x0d, 0x71, 0xe2, 0x1f, 0xe0, 0x88, 0xb8, 0x71, 0xe6, 0xca, 0x01, 0x09, 0x09, 0x54, 0xf5,
+	0xca, 0x76, 0x95, 0xdd, 0x9d, 0xf4, 0x46, 0xd1, 0xce, 0xac, 0x86, 0x5b, 0xbf, 0xd7, 0xf5, 0x5e,
+	0xbd, 0x7a, 0xbf, 0xf7, 0x5e, 0xbd, 0xaa, 0x32, 0x2c, 0x32, 0xef, 0xf8, 0xc9, 0x33, 0xf6, 0xe6,
+	0x33, 0xb6, 0x19, 0xc5, 0x61, 0x12, 0x5a, 0xcb, 0x8c, 0xc4, 0x27, 0x24, 0x7e, 0xe2, 0x46, 0xfe,
+	0x93, 0xc8, 0x8d, 0xdd, 0x21, 0xb3, 0xff, 0x65, 0x42, 0xf3, 0x6e, 0x1c, 0xa6, 0xd1, 0x7d, 0x7a,
+	0x18, 0x5a, 0x1d, 0x98, 0x1d, 0x08, 0x62, 0xb7, 0x63, 0xac, 0x1b, 0xd7, 0x9b, 0x4e, 0x46, 0x5a,
+	0x57, 0xa1, 0x29, 0x7e, 0x3e, 0x70, 0x87, 0xa4, 0x63, 0x8a, 0xff, 0x0a, 0x86, 0x65, 0xc3, 0x3c,
+	0x0d, 0x13, 0xff, 0xd0, 0xef, 0xbb, 0x89, 0x1f, 0xd2, 0x4e, 0x4d, 0x0c, 0xd0, 0x78, 0x7c, 0x8c,
+	0x4f, 0x93, 0x38, 0xf4, 0xd2, 0xbe, 0x18, 0x33, 0x83, 0x63, 0x54, 0x1e, 0x9f, 0xff, 0xd0, 0xed,
+	0x93, 0xc7, 0xce, 0x5e, 0xa7, 0x8e, 0xf3, 0x4b, 0xd2, 0x5a, 0x87, 0x56, 0xf8, 0x8c, 0x92, 0xf8,
+	0x31, 0x23, 0xf1, 0xfd, 0xdd, 0x4e, 0x43, 0xfc, 0xab, 0xb2, 0xac, 0x6b, 0x00, 0xfd, 0x98, 0xb8,
+	0x09, 0x79, 0xe4, 0x0f, 0x49, 0x67, 0x76, 0xdd, 0xb8, 0xde, 0x76, 0x14, 0x0e, 0xd7, 0x30, 0x24,
+	0xc3, 0x03, 0x12, 0xef, 0x84, 0x29, 0x4d, 0x3a, 0x73, 0x62, 0x80, 0xca, 0xb2, 0x16, 0xc0, 0x24,
+	0xcf, 0x3b, 0x4d, 0xa1, 0xda, 0x24, 0xcf, 0xad, 0x55, 0x68, 0xb0, 0xc4, 0x4d, 0x52, 0xd6, 0x81,
+	0x75, 0xe3, 0x7a, 0xdd, 0x91, 0x94, 0xb5, 0x01, 0x6d, 0xa1, 0x37, 0xcc, 0xac, 0x69, 0x09, 0x11,
+	0x9d, 0x99, 0x7b, 0xec, 0xd1, 0x69, 0x44, 0x3a, 0xf3, 0x42, 0x41, 0xc1, 0xb0, 0xff, 0x66, 0xc2,
+	0x8a, 0xf0, 0x7b, 0x57, 0x18, 0x70, 0x27, 0x0d, 0x82, 0x73, 0x10, 0x58, 0x85, 0x46, 0x8a, 0xd3,
+	0xa1, 0xfb, 0x25, 0xc5, 0xe7, 0x89, 0xc3, 0x80, 0xec, 0x91, 0x13, 0x12, 0x08, 0xc7, 0xd7, 0x9d,
+	0x82, 0x61, 0xad, 0xc1, 0xdc, 0xd3, 0xd0, 0xa7, 0xc2, 0x27, 0x33, 0xe2, 0xcf, 0x9c, 0xe6, 0xff,
+	0x51, 0xbf, 0x7f, 0x4c, 0x39, 0xa4, 0xe8, 0xee, 0x9c, 0x56, 0x91, 0x68, 0xe8, 0x48, 0xbc, 0x0e,
+	0x0b, 0x6e, 0x14, 0x75, 0x5d, 0x3a, 0x20, 0x31, 0x4e, 0x3a, 0x2b, 0xf4, 0x96, 0xb8, 0x1c, 0x0f,
+	0x3e, 0x53, 0x2f, 0x4c, 0xe3, 0x3e, 0x11, 0xee, 0xae, 0x3b, 0x0a, 0x87, 0xeb, 0x09, 0x23, 0x12,
+	0x2b, 0x6e, 0x44, 0xcf, 0x97, 0xb8, 0x12, 0x15, 0xc8, 0x51, 0xe1, 0x38, 0xa6, 0x09, 0xb9, 0x4d,
+	0x3d, 0xb1, 0xa8, 0x96, 0xc4, 0xb1, 0x60, 0xd9, 0x3f, 0x31, 0x60, 0x61, 0x3f, 0x3d, 0x08, 0xfc,
+	0xbe, 0x50, 0xc1, 0xdd, 0x5a, 0x38, 0xcf, 0xd0, 0x9c, 0xa7, 0xba, 0xc0, 0x9c, 0xec, 0x82, 0x9a,
+	0xee, 0x82, 0x55, 0x68, 0x0c, 0x08, 0xf5, 0x48, 0x2c, 0x5d, 0x2a, 0x29, 0x69, 0x6a, 0x3d, 0x33,
+	0xd5, 0xfe, 0x85, 0x09, 0x73, 0x1f, 0xb2, 0x09, 0xeb, 0xd0, 0x8a, 0x8e, 0x42, 0x4a, 0x1e, 0xa4,
+	0x3c, 0xac, 0xa4, 0x2d, 0x2a, 0xcb, 0xba, 0x02, 0xf5, 0x03, 0x3f, 0x4e, 0x8e, 0x04, 0xae, 0x6d,
+	0x07, 0x09, 0xce, 0x25, 0x43, 0xd7, 0x47, 0x30, 0x9b, 0x0e, 0x12, 0x72, 0x41, 0x73, 0xb9, 0xef,
+	0xf5, 0x1c, 0x6b, 0x56, 0x72, 0xac, 0x1a, 0x1b, 0x30, 0x2e, 0x36, 0xec, 0x7f, 0x1b, 0x00, 0x77,
+	0x62, 0x9f, 0x50, 0x4f, 0xb8, 0xa6, 0x94, 0xdc, 0x46, 0x35, 0xb9, 0x57, 0xa1, 0x11, 0x93, 0xa1,
+	0x1b, 0x1f, 0x67, 0xc1, 0x8f, 0x54, 0xc9, 0xa0, 0x5a, 0xc5, 0xa0, 0xb7, 0x00, 0x0e, 0xc5, 0x3c,
+	0x5c, 0x8f, 0x70, 0x55, 0xeb, 0xc6, 0xa7, 0x36, 0x2b, 0x65, 0x70, 0x33, 0x43, 0xc9, 0x51, 0x86,
+	0xf3, 0xcc, 0x72, 0x3d, 0x4f, 0x06, 0x70, 0x1d, 0x33, 0x2b, 0x67, 0x8c, 0x89, 0xdf, 0xc6, 0x19,
+	0xf1, 0x3b, 0x9b, 0x07, 0xc5, 0x3f, 0x0d, 0x68, 0x6e, 0x07, 0x6e, 0xff, 0x78, 0xca, 0xa5, 0xeb,
+	0x4b, 0x34, 0x2b, 0x4b, 0xbc, 0x0b, 0xed, 0x03, 0xae, 0x2e, 0x5b, 0x82, 0xf0, 0x42, 0xeb, 0xc6,
+	0x67, 0xc6, 0xac, 0x52, 0x4f, 0x0a, 0x47, 0x97, 0xd3, 0x97, 0x3b, 0x73, 0xfe, 0x72, 0xeb, 0x67,
+	0x2c, 0xb7, 0x91, 0x2f, 0xf7, 0xaf, 0x26, 0xcc, 0x8b, 0x42, 0xe7, 0x90, 0x51, 0x4a, 0x58, 0x62,
+	0x7d, 0x03, 0xe6, 0xd2, 0xcc, 0x54, 0x63, 0x5a, 0x53, 0x73, 0x11, 0xeb, 0xa6, 0x2c, 0xab, 0x42,
+	0xde, 0x14, 0xf2, 0x57, 0xc7, 0xc8, 0xe7, 0x7b, 0x9a, 0x53, 0x0c, 0xe7, 0x5b, 0xd0, 0x91, 0x4b,
+	0xbd, 0x80, 0x38, 0x84, 0xa5, 0x41, 0x22, 0xab, 0xa5, 0xc6, 0xc3, 0x48, 0x1b, 0x75, 0xd9, 0x40,
+	0x6e, 0x50, 0x92, 0xe2, 0xde, 0xc1, 0x71, 0xfc, 0x2f, 0x5c, 0x7a, 0xc1, 0xe0, 0x89, 0x1a, 0x93,
+	0x91, 0x40, 0x08, 0xd3, 0x2a, 0x23, 0x8b, 0x39, 0xa5, 0xd7, 0x30, 0x10, 0x34, 0x1e, 0x87, 0x18,
+	0x69, 0xa1, 0x00, 0x77, 0x26, 0x85, 0x53, 0xde, 0x98, 0xec, 0xbf, 0xd7, 0xa0, 0x8d, 0xe9, 0x93,
+	0x39, 0xf5, 0x1a, 0x8f, 0xf3, 0x70, 0xa8, 0x45, 0x91, 0xc2, 0xe1, 0x56, 0x70, 0xea, 0x81, 0x5e,
+	0x68, 0x34, 0x1e, 0x0f, 0x45, 0x4e, 0xdf, 0xd1, 0x0a, 0x8e, 0xca, 0xca, 0x66, 0xb9, 0xab, 0x16,
+	0x1e, 0x85, 0xc3, 0x4b, 0x59, 0x12, 0x6a, 0xd1, 0x91, 0xd3, 0x5c, 0x36, 0x09, 0xf3, 0xf9, 0x31,
+	0x3e, 0x14, 0x0e, 0xf7, 0x6f, 0x12, 0x66, 0x73, 0xa3, 0x93, 0x0a, 0x06, 0x6a, 0x96, 0xf3, 0xe2,
+	0x56, 0x92, 0xd3, 0x15, 0x54, 0x9b, 0x67, 0xa2, 0x0a, 0x1a, 0xaa, 0x7a, 0x72, 0xb5, 0x2a, 0xc9,
+	0xb5, 0x01, 0x6d, 0xd4, 0x93, 0x05, 0xfd, 0x3c, 0x6e, 0xf5, 0x1a, 0x53, 0x8f, 0x8d, 0x76, 0x39,
+	0x36, 0x74, 0x74, 0x17, 0x26, 0xa0, 0xbb, 0x98, 0xa3, 0xfb, 0x03, 0xe8, 0xec, 0xa7, 0x41, 0xd0,
+	0x25, 0x8c, 0xb9, 0x03, 0xb2, 0x7d, 0xda, 0x23, 0xa3, 0x3d, 0x9f, 0x25, 0x0e, 0x61, 0x11, 0x8f,
+	0x33, 0x12, 0xc7, 0x3b, 0xa1, 0x47, 0x04, 0xc8, 0x75, 0x27, 0x23, 0xf9, 0x0a, 0x49, 0x1c, 0x73,
+	0x03, 0x64, 0x85, 0x44, 0xca, 0xda, 0x84, 0x99, 0xc0, 0x67, 0x3c, 0xd6, 0x6b, 0xd7, 0x5b, 0x37,
+	0xd6, 0xc6, 0xa4, 0x4a, 0x97, 0x0d, 0x76, 0xdd, 0xc4, 0x75, 0xc4, 0x38, 0x7b, 0x08, 0x9f, 0x18,
+	0x3f, 0xfb, 0x68, 0xe2, 0x0e, 0xc6, 0x6b, 0x98, 0x28, 0x02, 0x7e, 0x48, 0xf3, 0xf6, 0x44, 0x65,
+	0x71, 0xb3, 0x19, 0xea, 0x11, 0x76, 0xb4, 0x9d, 0x8c, 0xb4, 0xaf, 0x80, 0x75, 0x97, 0x24, 0x5d,
+	0xf7, 0xf9, 0x16, 0xf5, 0xba, 0x3e, 0xed, 0x91, 0x91, 0x43, 0x46, 0xf6, 0x6d, 0x58, 0xa9, 0x70,
+	0x59, 0xc4, 0x0d, 0x18, 0xba, 0xcf, 0x7b, 0x64, 0x24, 0x0c, 0x68, 0x3b, 0x92, 0x12, 0x7c, 0x31,
+	0x4a, 0x96, 0x47, 0x49, 0xd9, 0x23, 0x58, 0xe4, 0x08, 0xf5, 0x08, 0xf5, 0xba, 0x6c, 0x20, 0x54,
+	0xac, 0x43, 0x0b, 0x3d, 0xd0, 0x65, 0x83, 0xa2, 0xde, 0x2a, 0x2c, 0x3e, 0xa2, 0x1f, 0xf8, 0x84,
+	0x26, 0x38, 0x42, 0xae, 0x46, 0x61, 0xf1, 0x60, 0x64, 0x44, 0xb6, 0x1f, 0x3c, 0x4b, 0x6a, 0x4e,
+	0x4e, 0xdb, 0x7f, 0xaa, 0xc3, 0xac, 0x74, 0xa8, 0xe8, 0x1f, 0xf9, 0x16, 0x97, 0xfb, 0x0b, 0x29,
+	0x0c, 0xc6, 0xfe, 0x49, 0xd1, 0xc9, 0x21, 0xa5, 0xf6, 0x7e, 0x35, 0xbd, 0xf7, 0x2b, 0xd9, 0x34,
+	0x53, 0xb5, 0xa9, 0xb4, 0xae, 0x7a, 0x75, 0x5d, 0x6f, 0xc0, 0x12, 0x13, 0x09, 0xb3, 0x1f, 0xb8,
+	0xc9, 0x61, 0x18, 0x0f, 0xe5, 0x8e, 0x55, 0x77, 0x2a, 0x7c, 0x5e, 0xec, 0x91, 0x97, 0x27, 0x2c,
+	0x66, 0x64, 0x89, 0xcb, 0xd3, 0x03, 0x39, 0x59, 0xe2, 0x62, 0xab, 0xa0, 0x33, 0xd1, 0x36, 0xc6,
+	0xfc, 0x90, 0x8a, 0x5e, 0x18, 0xf3, 0x53, 0x65, 0xf1, 0x95, 0x0f, 0xd9, 0xe0, 0x4e, 0x1c, 0x0e,
+	0x65, 0xc3, 0x90, 0x91, 0x62, 0xe5, 0x21, 0x4d, 0x08, 0x4d, 0x84, 0x6c, 0x0b, 0x65, 0x15, 0x16,
+	0x97, 0x95, 0xa4, 0x48, 0xce, 0x79, 0x27, 0x23, 0xad, 0x25, 0xa8, 0x31, 0x32, 0x92, 0x19, 0xc7,
+	0x7f, 0x6a, 0xc8, 0x2d, 0xea, 0xc8, 0x95, 0x4a, 0xc1, 0x92, 0xf8, 0x57, 0x2d, 0x05, 0xc5, 0x69,
+	0x60, 0x59, 0x3b, 0x0d, 0x6c, 0xc1, 0x6c, 0x18, 0xf1, 0x38, 0x67, 0x1d, 0x4b, 0xe4, 0xd8, 0x67,
+	0x27, 0xe7, 0xd8, 0xe6, 0x43, 0x1c, 0x79, 0x9b, 0x26, 0xf1, 0xa9, 0x93, 0xc9, 0x59, 0x7b, 0xb0,
+	0x18, 0x1e, 0x1e, 0x06, 0x3e, 0x25, 0xfb, 0x29, 0x3b, 0x12, 0x3b, 0xdb, 0x8a, 0xd8, 0xd9, 0xec,
+	0x31, 0xaa, 0x1e, 0xea, 0x23, 0x9d, 0xb2, 0xe8, 0xda, 0x4d, 0x98, 0x57, 0xa7, 0xe1, 0x6e, 0x38,
+	0x26, 0xa7, 0x32, 0x06, 0xf9, 0x4f, 0xde, 0xec, 0x9d, 0xb8, 0x41, 0x8a, 0xdb, 0xc0, 0x9c, 0x83,
+	0xc4, 0x4d, 0xf3, 0xab, 0x86, 0xfd, 0x73, 0x03, 0x16, 0x4b, 0x13, 0xf0, 0xd1, 0x89, 0x9f, 0x04,
+	0x44, 0x6a, 0x40, 0xc2, 0xb2, 0x60, 0xc6, 0x23, 0xac, 0x2f, 0x43, 0x58, 0xfc, 0x96, 0x95, 0xac,
+	0x96, 0xb7, 0x8b, 0xfc, 0xc8, 0xf7, 0xb0, 0xc7, 0x15, 0xf5, 0xc2, 0x94, 0x7a, 0xf9, 0x91, 0x4f,
+	0xe1, 0xf1, 0x10, 0xf2, 0x1f, 0xf6, 0xb6, 0x5d, 0x6f, 0x40, 0xf0, 0x60, 0x56, 0x17, 0x36, 0xe9,
+	0x4c, 0xdb, 0x83, 0xb9, 0x47, 0x7e, 0xc4, 0x76, 0xc2, 0xe1, 0x90, 0x03, 0xe1, 0x91, 0x84, 0xf7,
+	0xaa, 0x86, 0xc0, 0x5b, 0x52, 0x3c, 0x54, 0x3c, 0x72, 0xe8, 0xa6, 0x41, 0xc2, 0x87, 0x66, 0x89,
+	0xab, 0xb0, 0xc4, 0x91, 0x84, 0x85, 0x74, 0x17, 0xa5, 0xd1, 0x4e, 0x85, 0x63, 0xff, 0xc5, 0x84,
+	0x25, 0xd1, 0x38, 0xec, 0x08, 0xd8, 0x3d, 0x21, 0x74, 0x03, 0xea, 0x22, 0x0d, 0x65, 0xb3, 0x72,
+	0x76, 0xb3, 0x81, 0x43, 0xad, 0x5b, 0xd0, 0x08, 0x23, 0xd1, 0x72, 0x62, 0x87, 0xf2, 0xfa, 0x24,
+	0x21, 0xfd, 0xf4, 0xe7, 0x48, 0x29, 0xeb, 0x0e, 0x00, 0x1e, 0x4c, 0xf7, 0x8a, 0xd2, 0x3d, 0xad,
+	0x0e, 0x45, 0x92, 0x3b, 0x37, 0x2f, 0xc3, 0xf9, 0x11, 0xb0, 0xe6, 0xe8, 0x4c, 0xeb, 0x01, 0x2c,
+	0x08, 0xb3, 0x1f, 0x66, 0x5d, 0xa7, 0xc0, 0x60, 0xfa, 0x19, 0x4b, 0xd2, 0xf6, 0xaf, 0x0d, 0xe9,
+	0x46, 0xfe, 0x6f, 0x8f, 0xa0, 0xef, 0x0b, 0x97, 0x18, 0x17, 0x72, 0xc9, 0x1a, 0xcc, 0xf1, 0x33,
+	0x5e, 0xde, 0x04, 0xd7, 0x9c, 0x9c, 0x2e, 0x20, 0xaa, 0x4d, 0x0d, 0x91, 0xfd, 0x1b, 0x03, 0x3a,
+	0x6f, 0x87, 0x3e, 0x15, 0x7f, 0x6c, 0x45, 0x51, 0x20, 0xef, 0x29, 0x2e, 0x8c, 0xf9, 0x37, 0xa1,
+	0xe9, 0xa2, 0x1a, 0x9a, 0x48, 0xd8, 0xa7, 0x68, 0x6c, 0x0b, 0x19, 0xa5, 0x47, 0xa9, 0xa9, 0x3d,
+	0x8a, 0xfd, 0x9e, 0x01, 0x0b, 0xe8, 0x94, 0x77, 0x52, 0x3f, 0xb9, 0xb0, 0x7d, 0xdb, 0x30, 0x37,
+	0x4a, 0xfd, 0xe4, 0x02, 0x51, 0x99, 0xcb, 0x55, 0xe3, 0xa9, 0x36, 0x26, 0x9e, 0xec, 0xf7, 0x0d,
+	0xb8, 0x5a, 0x76, 0xeb, 0x56, 0xbf, 0x4f, 0xa2, 0x17, 0x99, 0x52, 0x5a, 0x8f, 0x36, 0x53, 0xea,
+	0xd1, 0xc6, 0x9a, 0xec, 0x90, 0xa7, 0xa4, 0xff, 0xf2, 0x9a, 0xfc, 0x63, 0x13, 0x3e, 0x79, 0x37,
+	0x4f, 0xbc, 0x47, 0xb1, 0x4b, 0xd9, 0x21, 0x89, 0xe3, 0x17, 0x68, 0xef, 0x1e, 0xb4, 0x29, 0x79,
+	0x56, 0xd8, 0x24, 0xd3, 0x71, 0x5a, 0x35, 0xba, 0xf0, 0x74, 0xb5, 0xcb, 0xfe, 0x8f, 0x01, 0x4b,
+	0xa8, 0xe7, 0x5b, 0x7e, 0xff, 0xf8, 0x05, 0x2e, 0xfe, 0x01, 0x2c, 0x1c, 0x0b, 0x0b, 0x38, 0x75,
+	0x81, 0xb2, 0x5d, 0x92, 0x9e, 0x72, 0xf9, 0xff, 0x35, 0x60, 0x19, 0x15, 0xdd, 0xa7, 0x27, 0xfe,
+	0x8b, 0x0c, 0xd6, 0x7d, 0x58, 0xf4, 0xd1, 0x84, 0x0b, 0x3a, 0xa0, 0x2c, 0x3e, 0xa5, 0x07, 0xfe,
+	0x68, 0xc0, 0x22, 0x6a, 0xba, 0x4d, 0x13, 0x12, 0x5f, 0x78, 0xfd, 0xf7, 0xa0, 0x45, 0x68, 0x12,
+	0xbb, 0xf4, 0x22, 0x15, 0x52, 0x15, 0x9d, 0xb2, 0x48, 0xbe, 0x67, 0x80, 0x25, 0x54, 0xed, 0xfa,
+	0x6c, 0xe8, 0x33, 0xf6, 0x02, 0xa1, 0x9b, 0xce, 0xe0, 0x5f, 0x9a, 0x70, 0x45, 0xd1, 0xd2, 0x4d,
+	0x93, 0x97, 0xdd, 0x64, 0x6b, 0x17, 0x9a, 0xbc, 0x47, 0x50, 0x2f, 0xff, 0xa6, 0x9d, 0xa8, 0x10,
+	0xe4, 0x5d, 0xac, 0x20, 0x7a, 0xa4, 0x1f, 0x52, 0x8f, 0x89, 0xe6, 0xa8, 0xed, 0x68, 0x3c, 0x5e,
+	0x86, 0xd6, 0x14, 0x35, 0x3b, 0x2e, 0xed, 0x93, 0xe0, 0x95, 0x71, 0x91, 0xfd, 0x3b, 0x03, 0x16,
+	0x70, 0xc8, 0xcb, 0xbf, 0x64, 0xbe, 0xd7, 0x63, 0x20, 0x7f, 0x64, 0x50, 0xb2, 0x8f, 0x61, 0x19,
+	0xef, 0xfb, 0x94, 0xf6, 0x84, 0x1f, 0x7c, 0x5d, 0x0f, 0xcf, 0xb2, 0x86, 0x10, 0xca, 0x48, 0xfd,
+	0x26, 0x57, 0x3e, 0xd6, 0x15, 0x37, 0xb9, 0xd7, 0x00, 0x5c, 0xcf, 0x7b, 0x37, 0x8c, 0x3d, 0x9f,
+	0x66, 0xbd, 0xa6, 0xc2, 0xb1, 0xdf, 0x86, 0x79, 0x7e, 0xf4, 0x7e, 0xa4, 0xdc, 0xdc, 0x9d, 0x79,
+	0xb7, 0xa8, 0xde, 0xfa, 0x99, 0xfa, 0xad, 0x9f, 0xfd, 0x7d, 0xf8, 0x78, 0xc5, 0x70, 0xe1, 0xeb,
+	0x1d, 0xbc, 0x90, 0xcc, 0x26, 0x91, 0x2e, 0xff, 0xf4, 0x18, 0xef, 0xa9, 0xb6, 0x38, 0x9a, 0x90,
+	0xfd, 0x23, 0x03, 0x5e, 0xab, 0xa8, 0xdf, 0x8a, 0xa2, 0x38, 0x3c, 0x91, 0x90, 0x5e, 0xc6, 0x34,
+	0x7a, 0x1f, 0x66, 0x96, 0xfb, 0xb0, 0xb1, 0x46, 0x68, 0xbd, 0xe3, 0x87, 0x60, 0xc4, 0x6f, 0x0d,
+	0x58, 0x94, 0x46, 0x78, 0x9e, 0x9c, 0xf6, 0x2b, 0xd0, 0xc0, 0xc7, 0x0c, 0x39, 0xe1, 0x6b, 0x63,
+	0x27, 0xcc, 0x1e, 0x61, 0x1c, 0x39, 0xb8, 0x1a, 0x91, 0xe6, 0xb8, 0xba, 0xf1, 0xb5, 0x3c, 0xee,
+	0xa7, 0x7e, 0x6e, 0x90, 0x02, 0xf6, 0x77, 0xb2, 0x60, 0xde, 0x25, 0x01, 0xb9, 0x4c, 0x1f, 0xd9,
+	0x8f, 0x61, 0x41, 0xbc, 0xac, 0x14, 0x3e, 0xb8, 0x14, 0xb5, 0xef, 0xc2, 0x92, 0x50, 0x7b, 0xe9,
+	0xf6, 0xe6, 0xd9, 0xc1, 0xfd, 0xb3, 0x73, 0xe4, 0xd2, 0xc1, 0x65, 0x6a, 0xff, 0x22, 0xac, 0x64,
+	0xbe, 0x7f, 0x1c, 0x79, 0xf9, 0x7d, 0xc6, 0x84, 0x5b, 0x5c, 0xfb, 0x4b, 0xb0, 0xba, 0x13, 0xd2,
+	0x13, 0x12, 0x33, 0x81, 0x32, 0x8a, 0x64, 0x12, 0x5a, 0xf2, 0x4b, 0xca, 0x7e, 0x0a, 0x6b, 0xaa,
+	0x44, 0x8f, 0x24, 0xfb, 0xb1, 0x7f, 0xa2, 0x48, 0xc9, 0x5b, 0x4e, 0x43, 0xbb, 0xe5, 0x2c, 0x6e,
+	0x45, 0x4d, 0xed, 0x56, 0xf4, 0x2a, 0x34, 0x7d, 0x26, 0x15, 0x88, 0xa0, 0x9a, 0x73, 0x0a, 0x86,
+	0xdd, 0x83, 0x65, 0xf9, 0xd6, 0xb1, 0xef, 0x0e, 0x7c, 0x8a, 0x15, 0xf0, 0x1a, 0x40, 0xe4, 0x0e,
+	0xb2, 0xb7, 0x4e, 0xbc, 0x10, 0x57, 0x38, 0xfc, 0x7f, 0x76, 0x14, 0x3e, 0x93, 0xff, 0x9b, 0xf8,
+	0x7f, 0xc1, 0xb1, 0xbf, 0x0d, 0x96, 0x43, 0x58, 0x14, 0x52, 0x46, 0x14, 0xad, 0xeb, 0xd0, 0xda,
+	0x49, 0xe3, 0x98, 0x50, 0x3e, 0x55, 0xf6, 0xf0, 0xa7, 0xb2, 0xb8, 0xde, 0x5e, 0xa1, 0x17, 0x2f,
+	0x51, 0x15, 0x8e, 0xfd, 0xab, 0x1a, 0x34, 0x7b, 0xfe, 0x80, 0xba, 0x81, 0x43, 0x46, 0xd6, 0xd7,
+	0xa1, 0x81, 0xad, 0xad, 0x84, 0x71, 0xdc, 0xa5, 0x1e, 0x8e, 0xc6, 0x1e, 0xde, 0x21, 0xa3, 0x7b,
+	0x1f, 0x73, 0xa4, 0x8c, 0xf5, 0x0e, 0xb4, 0xf1, 0xd7, 0x7d, 0xbc, 0xaa, 0x90, 0xfb, 0xcc, 0xe7,
+	0xce, 0x51, 0x22, 0x47, 0xa3, 0x2e, 0x5d, 0x03, 0x37, 0xa8, 0x2f, 0xb6, 0x3e, 0x99, 0xbb, 0x93,
+	0x0d, 0xc2, 0x1d, 0x52, 0x1a, 0x84, 0x32, 0x5c, 0xda, 0x15, 0x87, 0x79, 0xd9, 0x2e, 0x4c, 0x96,
+	0xc6, 0x33, 0xbf, 0x94, 0x46, 0x19, 0x2e, 0x7d, 0x94, 0xd2, 0xc1, 0xe3, 0x48, 0xde, 0x31, 0x4d,
+	0x96, 0xbe, 0x27, 0x86, 0x49, 0x69, 0x94, 0xe1, 0xd2, 0xb1, 0xa8, 0xac, 0xc2, 0xe9, 0x67, 0x49,
+	0x63, 0x01, 0x96, 0xd2, 0x28, 0xb3, 0xdd, 0x84, 0xd9, 0xc8, 0x3d, 0x0d, 0x42, 0xd7, 0xb3, 0x7f,
+	0x5f, 0x03, 0xc8, 0x06, 0x32, 0xb1, 0x8b, 0x6b, 0x10, 0x6d, 0x9c, 0x0b, 0x51, 0x14, 0x9c, 0x2a,
+	0x20, 0xf5, 0xc6, 0x83, 0xf4, 0xf9, 0x69, 0x41, 0x42, 0x6d, 0x25, 0x98, 0x6e, 0x95, 0x60, 0xda,
+	0x38, 0x17, 0x26, 0x69, 0x94, 0x04, 0xea, 0x56, 0x09, 0xa8, 0x8d, 0x73, 0x81, 0x92, 0xf2, 0x12,
+	0xaa, 0x5b, 0x25, 0xa8, 0x36, 0xce, 0x85, 0x4a, 0xca, 0x4b, 0xb0, 0x6e, 0x95, 0xc0, 0xda, 0x38,
+	0x17, 0x2c, 0x29, 0x5f, 0x85, 0xeb, 0x7d, 0x13, 0x16, 0x84, 0xcb, 0xf0, 0x41, 0x89, 0x1e, 0x86,
+	0xe2, 0xde, 0x58, 0xb8, 0x4b, 0x7f, 0x3a, 0xd7, 0x99, 0xd6, 0x17, 0x60, 0x19, 0x19, 0xf2, 0xa9,
+	0x55, 0x9c, 0x4b, 0xcd, 0xf5, 0xda, 0xf5, 0xa6, 0x53, 0xfd, 0x43, 0x3c, 0x01, 0xa4, 0x2c, 0x09,
+	0x87, 0xbb, 0x6e, 0xe2, 0x66, 0x9d, 0x51, 0xc1, 0x51, 0x1f, 0x68, 0x66, 0x2a, 0x1f, 0xe7, 0xc4,
+	0x61, 0x38, 0xcc, 0x5f, 0x5e, 0x24, 0xc5, 0x25, 0x12, 0x7f, 0x48, 0xc2, 0x34, 0x91, 0x65, 0x22,
+	0x23, 0x79, 0xb9, 0x1b, 0x12, 0xcf, 0x77, 0xc5, 0xb3, 0x86, 0x7c, 0xef, 0xcc, 0x19, 0xa2, 0xb2,
+	0x15, 0xcf, 0x34, 0xf2, 0xe3, 0x99, 0x82, 0x73, 0xfe, 0x93, 0x8a, 0xfd, 0x0f, 0x03, 0x56, 0xf6,
+	0xdd, 0x38, 0xf1, 0xfb, 0x7e, 0xe4, 0xd2, 0xa4, 0x4b, 0x12, 0x57, 0xac, 0x41, 0x7b, 0x3f, 0x37,
+	0x3e, 0xd8, 0xfb, 0xf9, 0x3e, 0x2c, 0x0e, 0x8a, 0x5e, 0x56, 0x79, 0x81, 0x9f, 0xfa, 0x8c, 0x5f,
+	0x12, 0xd7, 0x3e, 0x06, 0xa8, 0x7d, 0xe0, 0x8f, 0x01, 0xec, 0x9f, 0x9a, 0xb0, 0x58, 0x2a, 0x9d,
+	0xbc, 0x1d, 0xc5, 0x46, 0x23, 0x8f, 0x89, 0x9c, 0xb6, 0xb6, 0x00, 0xfc, 0x3c, 0x8c, 0xce, 0xb8,
+	0xa4, 0xd5, 0x63, 0xcd, 0x51, 0x84, 0xc6, 0xbd, 0xd5, 0xd4, 0x2e, 0xfc, 0x56, 0x63, 0xdd, 0x83,
+	0x56, 0x54, 0x80, 0x74, 0xc6, 0x01, 0x6c, 0x0c, 0x94, 0x8e, 0x2a, 0x6a, 0x7f, 0x0f, 0x96, 0x2b,
+	0x15, 0x4a, 0x3c, 0xdd, 0x84, 0xc7, 0x84, 0xe6, 0x4f, 0x37, 0x9c, 0x50, 0x82, 0xd5, 0x2c, 0x07,
+	0x6b, 0xe0, 0x9f, 0xa8, 0x5f, 0x1b, 0x49, 0xd2, 0xfe, 0x99, 0x09, 0xab, 0xe3, 0x77, 0x97, 0x57,
+	0xd5, 0xdd, 0x07, 0xd0, 0x99, 0x54, 0xc9, 0x2f, 0xcd, 0xeb, 0x45, 0x74, 0xe7, 0xfb, 0xf0, 0xab,
+	0xea, 0xee, 0x95, 0x2c, 0xba, 0x95, 0xad, 0xce, 0xfe, 0x43, 0xee, 0x9f, 0xbc, 0xd3, 0x78, 0x45,
+	0xfd, 0x63, 0xbd, 0x01, 0x4b, 0xb8, 0x4c, 0xe5, 0x71, 0x1f, 0x1b, 0xd7, 0x0a, 0xbf, 0xa8, 0x14,
+	0xca, 0xb6, 0x7f, 0x69, 0x31, 0xfb, 0x67, 0x23, 0xc3, 0x24, 0xef, 0xdf, 0x3e, 0x52, 0x98, 0x14,
+	0x91, 0xa6, 0x34, 0x35, 0x4a, 0xa4, 0xe5, 0x7d, 0xe5, 0xff, 0x23, 0xed, 0xfc, 0x48, 0xcb, 0x7d,
+	0xa9, 0x34, 0x78, 0xf6, 0x0f, 0xa1, 0xbd, 0x4b, 0x82, 0x2e, 0x1b, 0x64, 0x9f, 0x15, 0x9d, 0xe5,
+	0xc8, 0x49, 0x1f, 0x3d, 0x4f, 0xfc, 0xa0, 0xa8, 0xfc, 0x31, 0xd2, 0x4c, 0xe5, 0x63, 0x24, 0x7b,
+	0x1b, 0x16, 0x54, 0x03, 0x2e, 0xf2, 0x55, 0xd5, 0xf6, 0xd5, 0xef, 0xae, 0x6d, 0xbe, 0x89, 0x9f,
+	0xd7, 0xbf, 0x55, 0x71, 0xe2, 0x41, 0x43, 0x7c, 0x6e, 0xff, 0xe5, 0xff, 0x05, 0x00, 0x00, 0xff,
+	0xff, 0x59, 0xb0, 0xc2, 0xf4, 0x81, 0x2f, 0x00, 0x00,
 }
diff --git a/pkg/proto/sdk_ws/ws.proto b/pkg/proto/sdk_ws/ws.proto
index a1cc2ce63..1f9cb5bb1 100644
--- a/pkg/proto/sdk_ws/ws.proto
+++ b/pkg/proto/sdk_ws/ws.proto
@@ -360,7 +360,12 @@ message UserInfoUpdatedTips{
 //////////////////////conversation/////////////////////
 message ConversationUpdateTips{
  string UserID = 1;
+}
 
+message ConversationSetPrivateTips{
+ string recvID = 1;
+ string sendID = 2;
+ bool isPrivate = 3;
 }
 
 
diff --git a/pkg/proto/user/user.pb.go b/pkg/proto/user/user.pb.go
index 603434dbc..1c8b88653 100644
--- a/pkg/proto/user/user.pb.go
+++ b/pkg/proto/user/user.pb.go
@@ -1,4248 +1,2633 @@
 // Code generated by protoc-gen-go. DO NOT EDIT.
-// versions:
-// 	protoc-gen-go v1.27.1
-// 	protoc        v3.15.5
 // source: user/user.proto
 
-package user
+package user // import "./user"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import sdk_ws "Open_IM/pkg/proto/sdk_ws"
 
 import (
-	sdk_ws "Open_IM/pkg/proto/sdk_ws"
-	context "context"
+	context "golang.org/x/net/context"
 	grpc "google.golang.org/grpc"
-	codes "google.golang.org/grpc/codes"
-	status "google.golang.org/grpc/status"
-	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)
-)
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package
 
 type CommonResp struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	ErrCode int32  `protobuf:"varint,1,opt,name=errCode,proto3" json:"errCode,omitempty"`
-	ErrMsg  string `protobuf:"bytes,2,opt,name=errMsg,proto3" json:"errMsg,omitempty"`
+	ErrCode              int32    `protobuf:"varint,1,opt,name=errCode" json:"errCode,omitempty"`
+	ErrMsg               string   `protobuf:"bytes,2,opt,name=errMsg" json:"errMsg,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
-func (x *CommonResp) Reset() {
-	*x = CommonResp{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_user_user_proto_msgTypes[0]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *CommonResp) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*CommonResp) ProtoMessage() {}
-
-func (x *CommonResp) ProtoReflect() protoreflect.Message {
-	mi := &file_user_user_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 CommonResp.ProtoReflect.Descriptor instead.
+func (m *CommonResp) Reset()         { *m = CommonResp{} }
+func (m *CommonResp) String() string { return proto.CompactTextString(m) }
+func (*CommonResp) ProtoMessage()    {}
 func (*CommonResp) Descriptor() ([]byte, []int) {
-	return file_user_user_proto_rawDescGZIP(), []int{0}
+	return fileDescriptor_user_6133bd34462fbb1a, []int{0}
+}
+func (m *CommonResp) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CommonResp.Unmarshal(m, b)
+}
+func (m *CommonResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CommonResp.Marshal(b, m, deterministic)
+}
+func (dst *CommonResp) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CommonResp.Merge(dst, src)
+}
+func (m *CommonResp) XXX_Size() int {
+	return xxx_messageInfo_CommonResp.Size(m)
+}
+func (m *CommonResp) XXX_DiscardUnknown() {
+	xxx_messageInfo_CommonResp.DiscardUnknown(m)
 }
 
-func (x *CommonResp) GetErrCode() int32 {
-	if x != nil {
-		return x.ErrCode
+var xxx_messageInfo_CommonResp proto.InternalMessageInfo
+
+func (m *CommonResp) GetErrCode() int32 {
+	if m != nil {
+		return m.ErrCode
 	}
 	return 0
 }
 
-func (x *CommonResp) GetErrMsg() string {
-	if x != nil {
-		return x.ErrMsg
+func (m *CommonResp) GetErrMsg() string {
+	if m != nil {
+		return m.ErrMsg
 	}
 	return ""
 }
 
 type DeleteUsersReq struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	DeleteUserIDList []string `protobuf:"bytes,2,rep,name=DeleteUserIDList,proto3" json:"DeleteUserIDList,omitempty"`
-	OpUserID         string   `protobuf:"bytes,3,opt,name=OpUserID,proto3" json:"OpUserID,omitempty"`
-	OperationID      string   `protobuf:"bytes,4,opt,name=OperationID,proto3" json:"OperationID,omitempty"`
+	DeleteUserIDList     []string `protobuf:"bytes,2,rep,name=DeleteUserIDList" json:"DeleteUserIDList,omitempty"`
+	OpUserID             string   `protobuf:"bytes,3,opt,name=OpUserID" json:"OpUserID,omitempty"`
+	OperationID          string   `protobuf:"bytes,4,opt,name=OperationID" json:"OperationID,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
-func (x *DeleteUsersReq) Reset() {
-	*x = DeleteUsersReq{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_user_user_proto_msgTypes[1]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *DeleteUsersReq) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*DeleteUsersReq) ProtoMessage() {}
-
-func (x *DeleteUsersReq) ProtoReflect() protoreflect.Message {
-	mi := &file_user_user_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 DeleteUsersReq.ProtoReflect.Descriptor instead.
+func (m *DeleteUsersReq) Reset()         { *m = DeleteUsersReq{} }
+func (m *DeleteUsersReq) String() string { return proto.CompactTextString(m) }
+func (*DeleteUsersReq) ProtoMessage()    {}
 func (*DeleteUsersReq) Descriptor() ([]byte, []int) {
-	return file_user_user_proto_rawDescGZIP(), []int{1}
+	return fileDescriptor_user_6133bd34462fbb1a, []int{1}
+}
+func (m *DeleteUsersReq) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DeleteUsersReq.Unmarshal(m, b)
+}
+func (m *DeleteUsersReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DeleteUsersReq.Marshal(b, m, deterministic)
+}
+func (dst *DeleteUsersReq) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DeleteUsersReq.Merge(dst, src)
+}
+func (m *DeleteUsersReq) XXX_Size() int {
+	return xxx_messageInfo_DeleteUsersReq.Size(m)
+}
+func (m *DeleteUsersReq) XXX_DiscardUnknown() {
+	xxx_messageInfo_DeleteUsersReq.DiscardUnknown(m)
 }
 
-func (x *DeleteUsersReq) GetDeleteUserIDList() []string {
-	if x != nil {
-		return x.DeleteUserIDList
+var xxx_messageInfo_DeleteUsersReq proto.InternalMessageInfo
+
+func (m *DeleteUsersReq) GetDeleteUserIDList() []string {
+	if m != nil {
+		return m.DeleteUserIDList
 	}
 	return nil
 }
 
-func (x *DeleteUsersReq) GetOpUserID() string {
-	if x != nil {
-		return x.OpUserID
+func (m *DeleteUsersReq) GetOpUserID() string {
+	if m != nil {
+		return m.OpUserID
 	}
 	return ""
 }
 
-func (x *DeleteUsersReq) GetOperationID() string {
-	if x != nil {
-		return x.OperationID
+func (m *DeleteUsersReq) GetOperationID() string {
+	if m != nil {
+		return m.OperationID
 	}
 	return ""
 }
 
 type DeleteUsersResp struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	CommonResp       *CommonResp `protobuf:"bytes,1,opt,name=CommonResp,proto3" json:"CommonResp,omitempty"`
-	FailedUserIDList []string    `protobuf:"bytes,2,rep,name=FailedUserIDList,proto3" json:"FailedUserIDList,omitempty"`
+	CommonResp           *CommonResp `protobuf:"bytes,1,opt,name=CommonResp" json:"CommonResp,omitempty"`
+	FailedUserIDList     []string    `protobuf:"bytes,2,rep,name=FailedUserIDList" json:"FailedUserIDList,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}    `json:"-"`
+	XXX_unrecognized     []byte      `json:"-"`
+	XXX_sizecache        int32       `json:"-"`
 }
 
-func (x *DeleteUsersResp) Reset() {
-	*x = DeleteUsersResp{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_user_user_proto_msgTypes[2]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *DeleteUsersResp) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*DeleteUsersResp) ProtoMessage() {}
-
-func (x *DeleteUsersResp) ProtoReflect() protoreflect.Message {
-	mi := &file_user_user_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 DeleteUsersResp.ProtoReflect.Descriptor instead.
+func (m *DeleteUsersResp) Reset()         { *m = DeleteUsersResp{} }
+func (m *DeleteUsersResp) String() string { return proto.CompactTextString(m) }
+func (*DeleteUsersResp) ProtoMessage()    {}
 func (*DeleteUsersResp) Descriptor() ([]byte, []int) {
-	return file_user_user_proto_rawDescGZIP(), []int{2}
+	return fileDescriptor_user_6133bd34462fbb1a, []int{2}
+}
+func (m *DeleteUsersResp) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DeleteUsersResp.Unmarshal(m, b)
+}
+func (m *DeleteUsersResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DeleteUsersResp.Marshal(b, m, deterministic)
+}
+func (dst *DeleteUsersResp) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DeleteUsersResp.Merge(dst, src)
+}
+func (m *DeleteUsersResp) XXX_Size() int {
+	return xxx_messageInfo_DeleteUsersResp.Size(m)
+}
+func (m *DeleteUsersResp) XXX_DiscardUnknown() {
+	xxx_messageInfo_DeleteUsersResp.DiscardUnknown(m)
 }
 
-func (x *DeleteUsersResp) GetCommonResp() *CommonResp {
-	if x != nil {
-		return x.CommonResp
+var xxx_messageInfo_DeleteUsersResp proto.InternalMessageInfo
+
+func (m *DeleteUsersResp) GetCommonResp() *CommonResp {
+	if m != nil {
+		return m.CommonResp
 	}
 	return nil
 }
 
-func (x *DeleteUsersResp) GetFailedUserIDList() []string {
-	if x != nil {
-		return x.FailedUserIDList
+func (m *DeleteUsersResp) GetFailedUserIDList() []string {
+	if m != nil {
+		return m.FailedUserIDList
 	}
 	return nil
 }
 
 type GetAllUserIDReq struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	OpUserID    string `protobuf:"bytes,1,opt,name=opUserID,proto3" json:"opUserID,omitempty"`
-	OperationID string `protobuf:"bytes,2,opt,name=operationID,proto3" json:"operationID,omitempty"`
+	OpUserID             string   `protobuf:"bytes,1,opt,name=opUserID" json:"opUserID,omitempty"`
+	OperationID          string   `protobuf:"bytes,2,opt,name=operationID" json:"operationID,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
-func (x *GetAllUserIDReq) Reset() {
-	*x = GetAllUserIDReq{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_user_user_proto_msgTypes[3]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *GetAllUserIDReq) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*GetAllUserIDReq) ProtoMessage() {}
-
-func (x *GetAllUserIDReq) ProtoReflect() protoreflect.Message {
-	mi := &file_user_user_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 GetAllUserIDReq.ProtoReflect.Descriptor instead.
+func (m *GetAllUserIDReq) Reset()         { *m = GetAllUserIDReq{} }
+func (m *GetAllUserIDReq) String() string { return proto.CompactTextString(m) }
+func (*GetAllUserIDReq) ProtoMessage()    {}
 func (*GetAllUserIDReq) Descriptor() ([]byte, []int) {
-	return file_user_user_proto_rawDescGZIP(), []int{3}
+	return fileDescriptor_user_6133bd34462fbb1a, []int{3}
+}
+func (m *GetAllUserIDReq) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetAllUserIDReq.Unmarshal(m, b)
+}
+func (m *GetAllUserIDReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetAllUserIDReq.Marshal(b, m, deterministic)
+}
+func (dst *GetAllUserIDReq) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetAllUserIDReq.Merge(dst, src)
+}
+func (m *GetAllUserIDReq) XXX_Size() int {
+	return xxx_messageInfo_GetAllUserIDReq.Size(m)
+}
+func (m *GetAllUserIDReq) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetAllUserIDReq.DiscardUnknown(m)
 }
 
-func (x *GetAllUserIDReq) GetOpUserID() string {
-	if x != nil {
-		return x.OpUserID
+var xxx_messageInfo_GetAllUserIDReq proto.InternalMessageInfo
+
+func (m *GetAllUserIDReq) GetOpUserID() string {
+	if m != nil {
+		return m.OpUserID
 	}
 	return ""
 }
 
-func (x *GetAllUserIDReq) GetOperationID() string {
-	if x != nil {
-		return x.OperationID
+func (m *GetAllUserIDReq) GetOperationID() string {
+	if m != nil {
+		return m.OperationID
 	}
 	return ""
 }
 
 type GetAllUserIDResp struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	CommonResp *CommonResp `protobuf:"bytes,1,opt,name=CommonResp,proto3" json:"CommonResp,omitempty"`
-	UserIDList []string    `protobuf:"bytes,2,rep,name=UserIDList,proto3" json:"UserIDList,omitempty"`
+	CommonResp           *CommonResp `protobuf:"bytes,1,opt,name=CommonResp" json:"CommonResp,omitempty"`
+	UserIDList           []string    `protobuf:"bytes,2,rep,name=UserIDList" json:"UserIDList,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}    `json:"-"`
+	XXX_unrecognized     []byte      `json:"-"`
+	XXX_sizecache        int32       `json:"-"`
 }
 
-func (x *GetAllUserIDResp) Reset() {
-	*x = GetAllUserIDResp{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_user_user_proto_msgTypes[4]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *GetAllUserIDResp) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*GetAllUserIDResp) ProtoMessage() {}
-
-func (x *GetAllUserIDResp) ProtoReflect() protoreflect.Message {
-	mi := &file_user_user_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 GetAllUserIDResp.ProtoReflect.Descriptor instead.
+func (m *GetAllUserIDResp) Reset()         { *m = GetAllUserIDResp{} }
+func (m *GetAllUserIDResp) String() string { return proto.CompactTextString(m) }
+func (*GetAllUserIDResp) ProtoMessage()    {}
 func (*GetAllUserIDResp) Descriptor() ([]byte, []int) {
-	return file_user_user_proto_rawDescGZIP(), []int{4}
+	return fileDescriptor_user_6133bd34462fbb1a, []int{4}
+}
+func (m *GetAllUserIDResp) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetAllUserIDResp.Unmarshal(m, b)
+}
+func (m *GetAllUserIDResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetAllUserIDResp.Marshal(b, m, deterministic)
+}
+func (dst *GetAllUserIDResp) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetAllUserIDResp.Merge(dst, src)
+}
+func (m *GetAllUserIDResp) XXX_Size() int {
+	return xxx_messageInfo_GetAllUserIDResp.Size(m)
+}
+func (m *GetAllUserIDResp) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetAllUserIDResp.DiscardUnknown(m)
 }
 
-func (x *GetAllUserIDResp) GetCommonResp() *CommonResp {
-	if x != nil {
-		return x.CommonResp
+var xxx_messageInfo_GetAllUserIDResp proto.InternalMessageInfo
+
+func (m *GetAllUserIDResp) GetCommonResp() *CommonResp {
+	if m != nil {
+		return m.CommonResp
 	}
 	return nil
 }
 
-func (x *GetAllUserIDResp) GetUserIDList() []string {
-	if x != nil {
-		return x.UserIDList
+func (m *GetAllUserIDResp) GetUserIDList() []string {
+	if m != nil {
+		return m.UserIDList
 	}
 	return nil
 }
 
 type AccountCheckReq struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	CheckUserIDList []string `protobuf:"bytes,1,rep,name=CheckUserIDList,proto3" json:"CheckUserIDList,omitempty"`
-	OpUserID        string   `protobuf:"bytes,2,opt,name=OpUserID,proto3" json:"OpUserID,omitempty"`
-	OperationID     string   `protobuf:"bytes,3,opt,name=OperationID,proto3" json:"OperationID,omitempty"`
+	CheckUserIDList      []string `protobuf:"bytes,1,rep,name=CheckUserIDList" json:"CheckUserIDList,omitempty"`
+	OpUserID             string   `protobuf:"bytes,2,opt,name=OpUserID" json:"OpUserID,omitempty"`
+	OperationID          string   `protobuf:"bytes,3,opt,name=OperationID" json:"OperationID,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
-func (x *AccountCheckReq) Reset() {
-	*x = AccountCheckReq{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_user_user_proto_msgTypes[5]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *AccountCheckReq) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*AccountCheckReq) ProtoMessage() {}
-
-func (x *AccountCheckReq) ProtoReflect() protoreflect.Message {
-	mi := &file_user_user_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 AccountCheckReq.ProtoReflect.Descriptor instead.
+func (m *AccountCheckReq) Reset()         { *m = AccountCheckReq{} }
+func (m *AccountCheckReq) String() string { return proto.CompactTextString(m) }
+func (*AccountCheckReq) ProtoMessage()    {}
 func (*AccountCheckReq) Descriptor() ([]byte, []int) {
-	return file_user_user_proto_rawDescGZIP(), []int{5}
+	return fileDescriptor_user_6133bd34462fbb1a, []int{5}
+}
+func (m *AccountCheckReq) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AccountCheckReq.Unmarshal(m, b)
+}
+func (m *AccountCheckReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AccountCheckReq.Marshal(b, m, deterministic)
+}
+func (dst *AccountCheckReq) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AccountCheckReq.Merge(dst, src)
+}
+func (m *AccountCheckReq) XXX_Size() int {
+	return xxx_messageInfo_AccountCheckReq.Size(m)
+}
+func (m *AccountCheckReq) XXX_DiscardUnknown() {
+	xxx_messageInfo_AccountCheckReq.DiscardUnknown(m)
 }
 
-func (x *AccountCheckReq) GetCheckUserIDList() []string {
-	if x != nil {
-		return x.CheckUserIDList
+var xxx_messageInfo_AccountCheckReq proto.InternalMessageInfo
+
+func (m *AccountCheckReq) GetCheckUserIDList() []string {
+	if m != nil {
+		return m.CheckUserIDList
 	}
 	return nil
 }
 
-func (x *AccountCheckReq) GetOpUserID() string {
-	if x != nil {
-		return x.OpUserID
+func (m *AccountCheckReq) GetOpUserID() string {
+	if m != nil {
+		return m.OpUserID
 	}
 	return ""
 }
 
-func (x *AccountCheckReq) GetOperationID() string {
-	if x != nil {
-		return x.OperationID
+func (m *AccountCheckReq) GetOperationID() string {
+	if m != nil {
+		return m.OperationID
 	}
 	return ""
 }
 
 type AccountCheckResp struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	CommonResp *CommonResp                          `protobuf:"bytes,1,opt,name=commonResp,proto3" json:"commonResp,omitempty"`
-	ResultList []*AccountCheckResp_SingleUserStatus `protobuf:"bytes,2,rep,name=ResultList,proto3" json:"ResultList,omitempty"`
+	CommonResp           *CommonResp                          `protobuf:"bytes,1,opt,name=commonResp" json:"commonResp,omitempty"`
+	ResultList           []*AccountCheckResp_SingleUserStatus `protobuf:"bytes,2,rep,name=ResultList" json:"ResultList,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                             `json:"-"`
+	XXX_unrecognized     []byte                               `json:"-"`
+	XXX_sizecache        int32                                `json:"-"`
 }
 
-func (x *AccountCheckResp) Reset() {
-	*x = AccountCheckResp{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_user_user_proto_msgTypes[6]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *AccountCheckResp) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*AccountCheckResp) ProtoMessage() {}
-
-func (x *AccountCheckResp) ProtoReflect() protoreflect.Message {
-	mi := &file_user_user_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 AccountCheckResp.ProtoReflect.Descriptor instead.
+func (m *AccountCheckResp) Reset()         { *m = AccountCheckResp{} }
+func (m *AccountCheckResp) String() string { return proto.CompactTextString(m) }
+func (*AccountCheckResp) ProtoMessage()    {}
 func (*AccountCheckResp) Descriptor() ([]byte, []int) {
-	return file_user_user_proto_rawDescGZIP(), []int{6}
+	return fileDescriptor_user_6133bd34462fbb1a, []int{6}
+}
+func (m *AccountCheckResp) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AccountCheckResp.Unmarshal(m, b)
+}
+func (m *AccountCheckResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AccountCheckResp.Marshal(b, m, deterministic)
+}
+func (dst *AccountCheckResp) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AccountCheckResp.Merge(dst, src)
+}
+func (m *AccountCheckResp) XXX_Size() int {
+	return xxx_messageInfo_AccountCheckResp.Size(m)
+}
+func (m *AccountCheckResp) XXX_DiscardUnknown() {
+	xxx_messageInfo_AccountCheckResp.DiscardUnknown(m)
 }
 
-func (x *AccountCheckResp) GetCommonResp() *CommonResp {
-	if x != nil {
-		return x.CommonResp
+var xxx_messageInfo_AccountCheckResp proto.InternalMessageInfo
+
+func (m *AccountCheckResp) GetCommonResp() *CommonResp {
+	if m != nil {
+		return m.CommonResp
 	}
 	return nil
 }
 
-func (x *AccountCheckResp) GetResultList() []*AccountCheckResp_SingleUserStatus {
-	if x != nil {
-		return x.ResultList
-	}
-	return nil
-}
-
-type GetUserInfoReq struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	UserIDList  []string `protobuf:"bytes,1,rep,name=userIDList,proto3" json:"userIDList,omitempty"`
-	OpUserID    string   `protobuf:"bytes,2,opt,name=OpUserID,proto3" json:"OpUserID,omitempty"`
-	OperationID string   `protobuf:"bytes,3,opt,name=OperationID,proto3" json:"OperationID,omitempty"`
-}
-
-func (x *GetUserInfoReq) Reset() {
-	*x = GetUserInfoReq{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_user_user_proto_msgTypes[7]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *GetUserInfoReq) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*GetUserInfoReq) ProtoMessage() {}
-
-func (x *GetUserInfoReq) ProtoReflect() protoreflect.Message {
-	mi := &file_user_user_proto_msgTypes[7]
-	if protoimpl.UnsafeEnabled && x != nil {
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		if ms.LoadMessageInfo() == nil {
-			ms.StoreMessageInfo(mi)
-		}
-		return ms
-	}
-	return mi.MessageOf(x)
-}
-
-// Deprecated: Use GetUserInfoReq.ProtoReflect.Descriptor instead.
-func (*GetUserInfoReq) Descriptor() ([]byte, []int) {
-	return file_user_user_proto_rawDescGZIP(), []int{7}
-}
-
-func (x *GetUserInfoReq) GetUserIDList() []string {
-	if x != nil {
-		return x.UserIDList
-	}
-	return nil
-}
-
-func (x *GetUserInfoReq) GetOpUserID() string {
-	if x != nil {
-		return x.OpUserID
-	}
-	return ""
-}
-
-func (x *GetUserInfoReq) GetOperationID() string {
-	if x != nil {
-		return x.OperationID
-	}
-	return ""
-}
-
-type GetUserInfoResp struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	CommonResp   *CommonResp        `protobuf:"bytes,1,opt,name=commonResp,proto3" json:"commonResp,omitempty"`
-	UserInfoList []*sdk_ws.UserInfo `protobuf:"bytes,3,rep,name=UserInfoList,proto3" json:"UserInfoList,omitempty"`
-}
-
-func (x *GetUserInfoResp) Reset() {
-	*x = GetUserInfoResp{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_user_user_proto_msgTypes[8]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *GetUserInfoResp) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*GetUserInfoResp) ProtoMessage() {}
-
-func (x *GetUserInfoResp) ProtoReflect() protoreflect.Message {
-	mi := &file_user_user_proto_msgTypes[8]
-	if protoimpl.UnsafeEnabled && x != nil {
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		if ms.LoadMessageInfo() == nil {
-			ms.StoreMessageInfo(mi)
-		}
-		return ms
-	}
-	return mi.MessageOf(x)
-}
-
-// Deprecated: Use GetUserInfoResp.ProtoReflect.Descriptor instead.
-func (*GetUserInfoResp) Descriptor() ([]byte, []int) {
-	return file_user_user_proto_rawDescGZIP(), []int{8}
-}
-
-func (x *GetUserInfoResp) GetCommonResp() *CommonResp {
-	if x != nil {
-		return x.CommonResp
-	}
-	return nil
-}
-
-func (x *GetUserInfoResp) GetUserInfoList() []*sdk_ws.UserInfo {
-	if x != nil {
-		return x.UserInfoList
-	}
-	return nil
-}
-
-type UpdateUserInfoReq struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	UserInfo    *sdk_ws.UserInfo `protobuf:"bytes,1,opt,name=UserInfo,proto3" json:"UserInfo,omitempty"`
-	OpUserID    string           `protobuf:"bytes,2,opt,name=OpUserID,proto3" json:"OpUserID,omitempty"`
-	OperationID string           `protobuf:"bytes,3,opt,name=operationID,proto3" json:"operationID,omitempty"`
-}
-
-func (x *UpdateUserInfoReq) Reset() {
-	*x = UpdateUserInfoReq{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_user_user_proto_msgTypes[9]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *UpdateUserInfoReq) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*UpdateUserInfoReq) ProtoMessage() {}
-
-func (x *UpdateUserInfoReq) ProtoReflect() protoreflect.Message {
-	mi := &file_user_user_proto_msgTypes[9]
-	if protoimpl.UnsafeEnabled && x != nil {
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		if ms.LoadMessageInfo() == nil {
-			ms.StoreMessageInfo(mi)
-		}
-		return ms
-	}
-	return mi.MessageOf(x)
-}
-
-// Deprecated: Use UpdateUserInfoReq.ProtoReflect.Descriptor instead.
-func (*UpdateUserInfoReq) Descriptor() ([]byte, []int) {
-	return file_user_user_proto_rawDescGZIP(), []int{9}
-}
-
-func (x *UpdateUserInfoReq) GetUserInfo() *sdk_ws.UserInfo {
-	if x != nil {
-		return x.UserInfo
-	}
-	return nil
-}
-
-func (x *UpdateUserInfoReq) GetOpUserID() string {
-	if x != nil {
-		return x.OpUserID
-	}
-	return ""
-}
-
-func (x *UpdateUserInfoReq) GetOperationID() string {
-	if x != nil {
-		return x.OperationID
-	}
-	return ""
-}
-
-type UpdateUserInfoResp struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	CommonResp *CommonResp `protobuf:"bytes,1,opt,name=commonResp,proto3" json:"commonResp,omitempty"`
-}
-
-func (x *UpdateUserInfoResp) Reset() {
-	*x = UpdateUserInfoResp{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_user_user_proto_msgTypes[10]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *UpdateUserInfoResp) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*UpdateUserInfoResp) ProtoMessage() {}
-
-func (x *UpdateUserInfoResp) ProtoReflect() protoreflect.Message {
-	mi := &file_user_user_proto_msgTypes[10]
-	if protoimpl.UnsafeEnabled && x != nil {
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		if ms.LoadMessageInfo() == nil {
-			ms.StoreMessageInfo(mi)
-		}
-		return ms
-	}
-	return mi.MessageOf(x)
-}
-
-// Deprecated: Use UpdateUserInfoResp.ProtoReflect.Descriptor instead.
-func (*UpdateUserInfoResp) Descriptor() ([]byte, []int) {
-	return file_user_user_proto_rawDescGZIP(), []int{10}
-}
-
-func (x *UpdateUserInfoResp) GetCommonResp() *CommonResp {
-	if x != nil {
-		return x.CommonResp
-	}
-	return nil
-}
-
-type Conversation struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	OwnerUserID      string `protobuf:"bytes,1,opt,name=OwnerUserID,proto3" json:"OwnerUserID,omitempty"`
-	ConversationID   string `protobuf:"bytes,2,opt,name=ConversationID,proto3" json:"ConversationID,omitempty"`
-	RecvMsgOpt       int32  `protobuf:"varint,3,opt,name=RecvMsgOpt,proto3" json:"RecvMsgOpt,omitempty"`
-	ConversationType int32  `protobuf:"varint,4,opt,name=ConversationType,proto3" json:"ConversationType,omitempty"`
-	UserID           string `protobuf:"bytes,5,opt,name=UserID,proto3" json:"UserID,omitempty"`
-	GroupID          string `protobuf:"bytes,6,opt,name=GroupID,proto3" json:"GroupID,omitempty"`
-	UnreadCount      int32  `protobuf:"varint,7,opt,name=UnreadCount,proto3" json:"UnreadCount,omitempty"`
-	DraftTextTime    int64  `protobuf:"varint,8,opt,name=DraftTextTime,proto3" json:"DraftTextTime,omitempty"`
-	IsPinned         bool   `protobuf:"varint,9,opt,name=IsPinned,proto3" json:"IsPinned,omitempty"`
-	AttachedInfo     string `protobuf:"bytes,10,opt,name=AttachedInfo,proto3" json:"AttachedInfo,omitempty"`
-	IsPrivateChat    bool   `protobuf:"varint,11,opt,name=IsPrivateChat,proto3" json:"IsPrivateChat,omitempty"`
-	Ex               string `protobuf:"bytes,12,opt,name=Ex,proto3" json:"Ex,omitempty"`
-}
-
-func (x *Conversation) Reset() {
-	*x = Conversation{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_user_user_proto_msgTypes[11]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *Conversation) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*Conversation) ProtoMessage() {}
-
-func (x *Conversation) ProtoReflect() protoreflect.Message {
-	mi := &file_user_user_proto_msgTypes[11]
-	if protoimpl.UnsafeEnabled && x != nil {
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		if ms.LoadMessageInfo() == nil {
-			ms.StoreMessageInfo(mi)
-		}
-		return ms
-	}
-	return mi.MessageOf(x)
-}
-
-// Deprecated: Use Conversation.ProtoReflect.Descriptor instead.
-func (*Conversation) Descriptor() ([]byte, []int) {
-	return file_user_user_proto_rawDescGZIP(), []int{11}
-}
-
-func (x *Conversation) GetOwnerUserID() string {
-	if x != nil {
-		return x.OwnerUserID
-	}
-	return ""
-}
-
-func (x *Conversation) GetConversationID() string {
-	if x != nil {
-		return x.ConversationID
-	}
-	return ""
-}
-
-func (x *Conversation) GetRecvMsgOpt() int32 {
-	if x != nil {
-		return x.RecvMsgOpt
-	}
-	return 0
-}
-
-func (x *Conversation) GetConversationType() int32 {
-	if x != nil {
-		return x.ConversationType
-	}
-	return 0
-}
-
-func (x *Conversation) GetUserID() string {
-	if x != nil {
-		return x.UserID
-	}
-	return ""
-}
-
-func (x *Conversation) GetGroupID() string {
-	if x != nil {
-		return x.GroupID
-	}
-	return ""
-}
-
-func (x *Conversation) GetUnreadCount() int32 {
-	if x != nil {
-		return x.UnreadCount
-	}
-	return 0
-}
-
-func (x *Conversation) GetDraftTextTime() int64 {
-	if x != nil {
-		return x.DraftTextTime
-	}
-	return 0
-}
-
-func (x *Conversation) GetIsPinned() bool {
-	if x != nil {
-		return x.IsPinned
-	}
-	return false
-}
-
-func (x *Conversation) GetAttachedInfo() string {
-	if x != nil {
-		return x.AttachedInfo
-	}
-	return ""
-}
-
-func (x *Conversation) GetIsPrivateChat() bool {
-	if x != nil {
-		return x.IsPrivateChat
-	}
-	return false
-}
-
-func (x *Conversation) GetEx() string {
-	if x != nil {
-		return x.Ex
-	}
-	return ""
-}
-
-type SetConversationReq struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	Conversation *Conversation `protobuf:"bytes,1,opt,name=Conversation,proto3" json:"Conversation,omitempty"`
-	OperationID  string        `protobuf:"bytes,2,opt,name=OperationID,proto3" json:"OperationID,omitempty"`
-}
-
-func (x *SetConversationReq) Reset() {
-	*x = SetConversationReq{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_user_user_proto_msgTypes[12]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *SetConversationReq) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*SetConversationReq) ProtoMessage() {}
-
-func (x *SetConversationReq) ProtoReflect() protoreflect.Message {
-	mi := &file_user_user_proto_msgTypes[12]
-	if protoimpl.UnsafeEnabled && x != nil {
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		if ms.LoadMessageInfo() == nil {
-			ms.StoreMessageInfo(mi)
-		}
-		return ms
-	}
-	return mi.MessageOf(x)
-}
-
-// Deprecated: Use SetConversationReq.ProtoReflect.Descriptor instead.
-func (*SetConversationReq) Descriptor() ([]byte, []int) {
-	return file_user_user_proto_rawDescGZIP(), []int{12}
-}
-
-func (x *SetConversationReq) GetConversation() *Conversation {
-	if x != nil {
-		return x.Conversation
-	}
-	return nil
-}
-
-func (x *SetConversationReq) GetOperationID() string {
-	if x != nil {
-		return x.OperationID
-	}
-	return ""
-}
-
-type SetConversationResp struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	CommonResp *CommonResp `protobuf:"bytes,1,opt,name=commonResp,proto3" json:"commonResp,omitempty"`
-}
-
-func (x *SetConversationResp) Reset() {
-	*x = SetConversationResp{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_user_user_proto_msgTypes[13]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *SetConversationResp) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*SetConversationResp) ProtoMessage() {}
-
-func (x *SetConversationResp) ProtoReflect() protoreflect.Message {
-	mi := &file_user_user_proto_msgTypes[13]
-	if protoimpl.UnsafeEnabled && x != nil {
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		if ms.LoadMessageInfo() == nil {
-			ms.StoreMessageInfo(mi)
-		}
-		return ms
-	}
-	return mi.MessageOf(x)
-}
-
-// Deprecated: Use SetConversationResp.ProtoReflect.Descriptor instead.
-func (*SetConversationResp) Descriptor() ([]byte, []int) {
-	return file_user_user_proto_rawDescGZIP(), []int{13}
-}
-
-func (x *SetConversationResp) GetCommonResp() *CommonResp {
-	if x != nil {
-		return x.CommonResp
-	}
-	return nil
-}
-
-type SetRecvMsgOptReq struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	OwnerUserID    string `protobuf:"bytes,1,opt,name=OwnerUserID,proto3" json:"OwnerUserID,omitempty"`
-	ConversationID string `protobuf:"bytes,2,opt,name=ConversationID,proto3" json:"ConversationID,omitempty"`
-	RecvMsgOpt     int32  `protobuf:"varint,3,opt,name=RecvMsgOpt,proto3" json:"RecvMsgOpt,omitempty"`
-	OperationID    string `protobuf:"bytes,4,opt,name=OperationID,proto3" json:"OperationID,omitempty"`
-}
-
-func (x *SetRecvMsgOptReq) Reset() {
-	*x = SetRecvMsgOptReq{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_user_user_proto_msgTypes[14]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *SetRecvMsgOptReq) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*SetRecvMsgOptReq) ProtoMessage() {}
-
-func (x *SetRecvMsgOptReq) ProtoReflect() protoreflect.Message {
-	mi := &file_user_user_proto_msgTypes[14]
-	if protoimpl.UnsafeEnabled && x != nil {
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		if ms.LoadMessageInfo() == nil {
-			ms.StoreMessageInfo(mi)
-		}
-		return ms
-	}
-	return mi.MessageOf(x)
-}
-
-// Deprecated: Use SetRecvMsgOptReq.ProtoReflect.Descriptor instead.
-func (*SetRecvMsgOptReq) Descriptor() ([]byte, []int) {
-	return file_user_user_proto_rawDescGZIP(), []int{14}
-}
-
-func (x *SetRecvMsgOptReq) GetOwnerUserID() string {
-	if x != nil {
-		return x.OwnerUserID
-	}
-	return ""
-}
-
-func (x *SetRecvMsgOptReq) GetConversationID() string {
-	if x != nil {
-		return x.ConversationID
-	}
-	return ""
-}
-
-func (x *SetRecvMsgOptReq) GetRecvMsgOpt() int32 {
-	if x != nil {
-		return x.RecvMsgOpt
-	}
-	return 0
-}
-
-func (x *SetRecvMsgOptReq) GetOperationID() string {
-	if x != nil {
-		return x.OperationID
-	}
-	return ""
-}
-
-type SetRecvMsgOptResp struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	CommonResp *CommonResp `protobuf:"bytes,1,opt,name=commonResp,proto3" json:"commonResp,omitempty"`
-}
-
-func (x *SetRecvMsgOptResp) Reset() {
-	*x = SetRecvMsgOptResp{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_user_user_proto_msgTypes[15]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *SetRecvMsgOptResp) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*SetRecvMsgOptResp) ProtoMessage() {}
-
-func (x *SetRecvMsgOptResp) ProtoReflect() protoreflect.Message {
-	mi := &file_user_user_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 SetRecvMsgOptResp.ProtoReflect.Descriptor instead.
-func (*SetRecvMsgOptResp) Descriptor() ([]byte, []int) {
-	return file_user_user_proto_rawDescGZIP(), []int{15}
-}
-
-func (x *SetRecvMsgOptResp) GetCommonResp() *CommonResp {
-	if x != nil {
-		return x.CommonResp
-	}
-	return nil
-}
-
-type GetConversationReq struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	ConversationID string `protobuf:"bytes,1,opt,name=ConversationID,proto3" json:"ConversationID,omitempty"`
-	OwnerUserID    string `protobuf:"bytes,2,opt,name=OwnerUserID,proto3" json:"OwnerUserID,omitempty"`
-	OperationID    string `protobuf:"bytes,3,opt,name=OperationID,proto3" json:"OperationID,omitempty"`
-}
-
-func (x *GetConversationReq) Reset() {
-	*x = GetConversationReq{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_user_user_proto_msgTypes[16]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *GetConversationReq) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*GetConversationReq) ProtoMessage() {}
-
-func (x *GetConversationReq) ProtoReflect() protoreflect.Message {
-	mi := &file_user_user_proto_msgTypes[16]
-	if protoimpl.UnsafeEnabled && x != nil {
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		if ms.LoadMessageInfo() == nil {
-			ms.StoreMessageInfo(mi)
-		}
-		return ms
-	}
-	return mi.MessageOf(x)
-}
-
-// Deprecated: Use GetConversationReq.ProtoReflect.Descriptor instead.
-func (*GetConversationReq) Descriptor() ([]byte, []int) {
-	return file_user_user_proto_rawDescGZIP(), []int{16}
-}
-
-func (x *GetConversationReq) GetConversationID() string {
-	if x != nil {
-		return x.ConversationID
-	}
-	return ""
-}
-
-func (x *GetConversationReq) GetOwnerUserID() string {
-	if x != nil {
-		return x.OwnerUserID
-	}
-	return ""
-}
-
-func (x *GetConversationReq) GetOperationID() string {
-	if x != nil {
-		return x.OperationID
-	}
-	return ""
-}
-
-type GetConversationResp struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	CommonResp   *CommonResp   `protobuf:"bytes,1,opt,name=commonResp,proto3" json:"commonResp,omitempty"`
-	Conversation *Conversation `protobuf:"bytes,2,opt,name=Conversation,proto3" json:"Conversation,omitempty"`
-}
-
-func (x *GetConversationResp) Reset() {
-	*x = GetConversationResp{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_user_user_proto_msgTypes[17]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *GetConversationResp) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*GetConversationResp) ProtoMessage() {}
-
-func (x *GetConversationResp) ProtoReflect() protoreflect.Message {
-	mi := &file_user_user_proto_msgTypes[17]
-	if protoimpl.UnsafeEnabled && x != nil {
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		if ms.LoadMessageInfo() == nil {
-			ms.StoreMessageInfo(mi)
-		}
-		return ms
-	}
-	return mi.MessageOf(x)
-}
-
-// Deprecated: Use GetConversationResp.ProtoReflect.Descriptor instead.
-func (*GetConversationResp) Descriptor() ([]byte, []int) {
-	return file_user_user_proto_rawDescGZIP(), []int{17}
-}
-
-func (x *GetConversationResp) GetCommonResp() *CommonResp {
-	if x != nil {
-		return x.CommonResp
-	}
-	return nil
-}
-
-func (x *GetConversationResp) GetConversation() *Conversation {
-	if x != nil {
-		return x.Conversation
-	}
-	return nil
-}
-
-type GetConversationsReq struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	OwnerUserID     string   `protobuf:"bytes,1,opt,name=OwnerUserID,proto3" json:"OwnerUserID,omitempty"`
-	ConversationIDs []string `protobuf:"bytes,2,rep,name=ConversationIDs,proto3" json:"ConversationIDs,omitempty"`
-	OperationID     string   `protobuf:"bytes,3,opt,name=OperationID,proto3" json:"OperationID,omitempty"`
-}
-
-func (x *GetConversationsReq) Reset() {
-	*x = GetConversationsReq{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_user_user_proto_msgTypes[18]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *GetConversationsReq) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*GetConversationsReq) ProtoMessage() {}
-
-func (x *GetConversationsReq) ProtoReflect() protoreflect.Message {
-	mi := &file_user_user_proto_msgTypes[18]
-	if protoimpl.UnsafeEnabled && x != nil {
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		if ms.LoadMessageInfo() == nil {
-			ms.StoreMessageInfo(mi)
-		}
-		return ms
-	}
-	return mi.MessageOf(x)
-}
-
-// Deprecated: Use GetConversationsReq.ProtoReflect.Descriptor instead.
-func (*GetConversationsReq) Descriptor() ([]byte, []int) {
-	return file_user_user_proto_rawDescGZIP(), []int{18}
-}
-
-func (x *GetConversationsReq) GetOwnerUserID() string {
-	if x != nil {
-		return x.OwnerUserID
-	}
-	return ""
-}
-
-func (x *GetConversationsReq) GetConversationIDs() []string {
-	if x != nil {
-		return x.ConversationIDs
-	}
-	return nil
-}
-
-func (x *GetConversationsReq) GetOperationID() string {
-	if x != nil {
-		return x.OperationID
-	}
-	return ""
-}
-
-type GetConversationsResp struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	CommonResp    *CommonResp     `protobuf:"bytes,1,opt,name=commonResp,proto3" json:"commonResp,omitempty"`
-	Conversations []*Conversation `protobuf:"bytes,2,rep,name=Conversations,proto3" json:"Conversations,omitempty"`
-}
-
-func (x *GetConversationsResp) Reset() {
-	*x = GetConversationsResp{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_user_user_proto_msgTypes[19]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *GetConversationsResp) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*GetConversationsResp) ProtoMessage() {}
-
-func (x *GetConversationsResp) ProtoReflect() protoreflect.Message {
-	mi := &file_user_user_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 GetConversationsResp.ProtoReflect.Descriptor instead.
-func (*GetConversationsResp) Descriptor() ([]byte, []int) {
-	return file_user_user_proto_rawDescGZIP(), []int{19}
-}
-
-func (x *GetConversationsResp) GetCommonResp() *CommonResp {
-	if x != nil {
-		return x.CommonResp
-	}
-	return nil
-}
-
-func (x *GetConversationsResp) GetConversations() []*Conversation {
-	if x != nil {
-		return x.Conversations
-	}
-	return nil
-}
-
-type GetAllConversationsReq struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	OwnerUserID string `protobuf:"bytes,1,opt,name=OwnerUserID,proto3" json:"OwnerUserID,omitempty"`
-	OperationID string `protobuf:"bytes,2,opt,name=OperationID,proto3" json:"OperationID,omitempty"`
-}
-
-func (x *GetAllConversationsReq) Reset() {
-	*x = GetAllConversationsReq{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_user_user_proto_msgTypes[20]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *GetAllConversationsReq) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*GetAllConversationsReq) ProtoMessage() {}
-
-func (x *GetAllConversationsReq) ProtoReflect() protoreflect.Message {
-	mi := &file_user_user_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 GetAllConversationsReq.ProtoReflect.Descriptor instead.
-func (*GetAllConversationsReq) Descriptor() ([]byte, []int) {
-	return file_user_user_proto_rawDescGZIP(), []int{20}
-}
-
-func (x *GetAllConversationsReq) GetOwnerUserID() string {
-	if x != nil {
-		return x.OwnerUserID
-	}
-	return ""
-}
-
-func (x *GetAllConversationsReq) GetOperationID() string {
-	if x != nil {
-		return x.OperationID
-	}
-	return ""
-}
-
-type GetAllConversationsResp struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	CommonResp    *CommonResp     `protobuf:"bytes,1,opt,name=commonResp,proto3" json:"commonResp,omitempty"`
-	Conversations []*Conversation `protobuf:"bytes,2,rep,name=Conversations,proto3" json:"Conversations,omitempty"`
-}
-
-func (x *GetAllConversationsResp) Reset() {
-	*x = GetAllConversationsResp{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_user_user_proto_msgTypes[21]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *GetAllConversationsResp) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*GetAllConversationsResp) ProtoMessage() {}
-
-func (x *GetAllConversationsResp) ProtoReflect() protoreflect.Message {
-	mi := &file_user_user_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 GetAllConversationsResp.ProtoReflect.Descriptor instead.
-func (*GetAllConversationsResp) Descriptor() ([]byte, []int) {
-	return file_user_user_proto_rawDescGZIP(), []int{21}
-}
-
-func (x *GetAllConversationsResp) GetCommonResp() *CommonResp {
-	if x != nil {
-		return x.CommonResp
-	}
-	return nil
-}
-
-func (x *GetAllConversationsResp) GetConversations() []*Conversation {
-	if x != nil {
-		return x.Conversations
-	}
-	return nil
-}
-
-type BatchSetConversationsReq struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	Conversations []*Conversation `protobuf:"bytes,1,rep,name=Conversations,proto3" json:"Conversations,omitempty"`
-	OwnerUserID   string          `protobuf:"bytes,2,opt,name=OwnerUserID,proto3" json:"OwnerUserID,omitempty"`
-	OperationID   string          `protobuf:"bytes,3,opt,name=OperationID,proto3" json:"OperationID,omitempty"`
-}
-
-func (x *BatchSetConversationsReq) Reset() {
-	*x = BatchSetConversationsReq{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_user_user_proto_msgTypes[22]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *BatchSetConversationsReq) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*BatchSetConversationsReq) ProtoMessage() {}
-
-func (x *BatchSetConversationsReq) ProtoReflect() protoreflect.Message {
-	mi := &file_user_user_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 BatchSetConversationsReq.ProtoReflect.Descriptor instead.
-func (*BatchSetConversationsReq) Descriptor() ([]byte, []int) {
-	return file_user_user_proto_rawDescGZIP(), []int{22}
-}
-
-func (x *BatchSetConversationsReq) GetConversations() []*Conversation {
-	if x != nil {
-		return x.Conversations
-	}
-	return nil
-}
-
-func (x *BatchSetConversationsReq) GetOwnerUserID() string {
-	if x != nil {
-		return x.OwnerUserID
-	}
-	return ""
-}
-
-func (x *BatchSetConversationsReq) GetOperationID() string {
-	if x != nil {
-		return x.OperationID
-	}
-	return ""
-}
-
-type BatchSetConversationsResp struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	CommonResp *CommonResp `protobuf:"bytes,1,opt,name=commonResp,proto3" json:"commonResp,omitempty"`
-	Success    []string    `protobuf:"bytes,2,rep,name=Success,proto3" json:"Success,omitempty"`
-	Failed     []string    `protobuf:"bytes,3,rep,name=Failed,proto3" json:"Failed,omitempty"`
-}
-
-func (x *BatchSetConversationsResp) Reset() {
-	*x = BatchSetConversationsResp{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_user_user_proto_msgTypes[23]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *BatchSetConversationsResp) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*BatchSetConversationsResp) ProtoMessage() {}
-
-func (x *BatchSetConversationsResp) ProtoReflect() protoreflect.Message {
-	mi := &file_user_user_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 BatchSetConversationsResp.ProtoReflect.Descriptor instead.
-func (*BatchSetConversationsResp) Descriptor() ([]byte, []int) {
-	return file_user_user_proto_rawDescGZIP(), []int{23}
-}
-
-func (x *BatchSetConversationsResp) GetCommonResp() *CommonResp {
-	if x != nil {
-		return x.CommonResp
-	}
-	return nil
-}
-
-func (x *BatchSetConversationsResp) GetSuccess() []string {
-	if x != nil {
-		return x.Success
-	}
-	return nil
-}
-
-func (x *BatchSetConversationsResp) GetFailed() []string {
-	if x != nil {
-		return x.Failed
-	}
-	return nil
-}
-
-type ResignUserReq struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	UserId      string `protobuf:"bytes,1,opt,name=UserId,proto3" json:"UserId,omitempty"`
-	OperationID string `protobuf:"bytes,2,opt,name=OperationID,proto3" json:"OperationID,omitempty"`
-}
-
-func (x *ResignUserReq) Reset() {
-	*x = ResignUserReq{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_user_user_proto_msgTypes[24]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *ResignUserReq) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*ResignUserReq) ProtoMessage() {}
-
-func (x *ResignUserReq) ProtoReflect() protoreflect.Message {
-	mi := &file_user_user_proto_msgTypes[24]
-	if protoimpl.UnsafeEnabled && x != nil {
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		if ms.LoadMessageInfo() == nil {
-			ms.StoreMessageInfo(mi)
-		}
-		return ms
-	}
-	return mi.MessageOf(x)
-}
-
-// Deprecated: Use ResignUserReq.ProtoReflect.Descriptor instead.
-func (*ResignUserReq) Descriptor() ([]byte, []int) {
-	return file_user_user_proto_rawDescGZIP(), []int{24}
-}
-
-func (x *ResignUserReq) GetUserId() string {
-	if x != nil {
-		return x.UserId
-	}
-	return ""
-}
-
-func (x *ResignUserReq) GetOperationID() string {
-	if x != nil {
-		return x.OperationID
-	}
-	return ""
-}
-
-type ResignUserResp struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	CommonResp *CommonResp `protobuf:"bytes,1,opt,name=commonResp,proto3" json:"commonResp,omitempty"`
-}
-
-func (x *ResignUserResp) Reset() {
-	*x = ResignUserResp{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_user_user_proto_msgTypes[25]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *ResignUserResp) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*ResignUserResp) ProtoMessage() {}
-
-func (x *ResignUserResp) ProtoReflect() protoreflect.Message {
-	mi := &file_user_user_proto_msgTypes[25]
-	if protoimpl.UnsafeEnabled && x != nil {
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		if ms.LoadMessageInfo() == nil {
-			ms.StoreMessageInfo(mi)
-		}
-		return ms
-	}
-	return mi.MessageOf(x)
-}
-
-// Deprecated: Use ResignUserResp.ProtoReflect.Descriptor instead.
-func (*ResignUserResp) Descriptor() ([]byte, []int) {
-	return file_user_user_proto_rawDescGZIP(), []int{25}
-}
-
-func (x *ResignUserResp) GetCommonResp() *CommonResp {
-	if x != nil {
-		return x.CommonResp
-	}
-	return nil
-}
-
-type GetUserByIdReq struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	UserId      string `protobuf:"bytes,1,opt,name=UserId,proto3" json:"UserId,omitempty"`
-	OperationID string `protobuf:"bytes,2,opt,name=OperationID,proto3" json:"OperationID,omitempty"`
-}
-
-func (x *GetUserByIdReq) Reset() {
-	*x = GetUserByIdReq{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_user_user_proto_msgTypes[26]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *GetUserByIdReq) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*GetUserByIdReq) ProtoMessage() {}
-
-func (x *GetUserByIdReq) ProtoReflect() protoreflect.Message {
-	mi := &file_user_user_proto_msgTypes[26]
-	if protoimpl.UnsafeEnabled && x != nil {
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		if ms.LoadMessageInfo() == nil {
-			ms.StoreMessageInfo(mi)
-		}
-		return ms
-	}
-	return mi.MessageOf(x)
-}
-
-// Deprecated: Use GetUserByIdReq.ProtoReflect.Descriptor instead.
-func (*GetUserByIdReq) Descriptor() ([]byte, []int) {
-	return file_user_user_proto_rawDescGZIP(), []int{26}
-}
-
-func (x *GetUserByIdReq) GetUserId() string {
-	if x != nil {
-		return x.UserId
-	}
-	return ""
-}
-
-func (x *GetUserByIdReq) GetOperationID() string {
-	if x != nil {
-		return x.OperationID
-	}
-	return ""
-}
-
-type User struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	ProfilePhoto string `protobuf:"bytes,1,opt,name=ProfilePhoto,proto3" json:"ProfilePhoto,omitempty"`
-	Nickname     string `protobuf:"bytes,2,opt,name=Nickname,proto3" json:"Nickname,omitempty"`
-	UserId       string `protobuf:"bytes,3,opt,name=UserId,proto3" json:"UserId,omitempty"`
-	CreateTime   string `protobuf:"bytes,4,opt,name=CreateTime,proto3" json:"CreateTime,omitempty"`
-	IsBlock      bool   `protobuf:"varint,5,opt,name=IsBlock,proto3" json:"IsBlock,omitempty"`
-}
-
-func (x *User) Reset() {
-	*x = User{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_user_user_proto_msgTypes[27]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *User) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*User) ProtoMessage() {}
-
-func (x *User) ProtoReflect() protoreflect.Message {
-	mi := &file_user_user_proto_msgTypes[27]
-	if protoimpl.UnsafeEnabled && x != nil {
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		if ms.LoadMessageInfo() == nil {
-			ms.StoreMessageInfo(mi)
-		}
-		return ms
-	}
-	return mi.MessageOf(x)
-}
-
-// Deprecated: Use User.ProtoReflect.Descriptor instead.
-func (*User) Descriptor() ([]byte, []int) {
-	return file_user_user_proto_rawDescGZIP(), []int{27}
-}
-
-func (x *User) GetProfilePhoto() string {
-	if x != nil {
-		return x.ProfilePhoto
-	}
-	return ""
-}
-
-func (x *User) GetNickname() string {
-	if x != nil {
-		return x.Nickname
-	}
-	return ""
-}
-
-func (x *User) GetUserId() string {
-	if x != nil {
-		return x.UserId
-	}
-	return ""
-}
-
-func (x *User) GetCreateTime() string {
-	if x != nil {
-		return x.CreateTime
-	}
-	return ""
-}
-
-func (x *User) GetIsBlock() bool {
-	if x != nil {
-		return x.IsBlock
-	}
-	return false
-}
-
-type GetUserByIdResp struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	CommonResp *CommonResp `protobuf:"bytes,1,opt,name=CommonResp,proto3" json:"CommonResp,omitempty"`
-	User       *User       `protobuf:"bytes,2,opt,name=user,proto3" json:"user,omitempty"`
-}
-
-func (x *GetUserByIdResp) Reset() {
-	*x = GetUserByIdResp{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_user_user_proto_msgTypes[28]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *GetUserByIdResp) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*GetUserByIdResp) ProtoMessage() {}
-
-func (x *GetUserByIdResp) ProtoReflect() protoreflect.Message {
-	mi := &file_user_user_proto_msgTypes[28]
-	if protoimpl.UnsafeEnabled && x != nil {
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		if ms.LoadMessageInfo() == nil {
-			ms.StoreMessageInfo(mi)
-		}
-		return ms
-	}
-	return mi.MessageOf(x)
-}
-
-// Deprecated: Use GetUserByIdResp.ProtoReflect.Descriptor instead.
-func (*GetUserByIdResp) Descriptor() ([]byte, []int) {
-	return file_user_user_proto_rawDescGZIP(), []int{28}
-}
-
-func (x *GetUserByIdResp) GetCommonResp() *CommonResp {
-	if x != nil {
-		return x.CommonResp
-	}
-	return nil
-}
-
-func (x *GetUserByIdResp) GetUser() *User {
-	if x != nil {
-		return x.User
-	}
-	return nil
-}
-
-type GetUsersByNameReq struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	UserName    string                    `protobuf:"bytes,1,opt,name=UserName,proto3" json:"UserName,omitempty"`
-	Pagination  *sdk_ws.RequestPagination `protobuf:"bytes,2,opt,name=Pagination,proto3" json:"Pagination,omitempty"`
-	OperationID string                    `protobuf:"bytes,3,opt,name=OperationID,proto3" json:"OperationID,omitempty"`
-}
-
-func (x *GetUsersByNameReq) Reset() {
-	*x = GetUsersByNameReq{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_user_user_proto_msgTypes[29]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *GetUsersByNameReq) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*GetUsersByNameReq) ProtoMessage() {}
-
-func (x *GetUsersByNameReq) ProtoReflect() protoreflect.Message {
-	mi := &file_user_user_proto_msgTypes[29]
-	if protoimpl.UnsafeEnabled && x != nil {
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		if ms.LoadMessageInfo() == nil {
-			ms.StoreMessageInfo(mi)
-		}
-		return ms
-	}
-	return mi.MessageOf(x)
-}
-
-// Deprecated: Use GetUsersByNameReq.ProtoReflect.Descriptor instead.
-func (*GetUsersByNameReq) Descriptor() ([]byte, []int) {
-	return file_user_user_proto_rawDescGZIP(), []int{29}
-}
-
-func (x *GetUsersByNameReq) GetUserName() string {
-	if x != nil {
-		return x.UserName
-	}
-	return ""
-}
-
-func (x *GetUsersByNameReq) GetPagination() *sdk_ws.RequestPagination {
-	if x != nil {
-		return x.Pagination
-	}
-	return nil
-}
-
-func (x *GetUsersByNameReq) GetOperationID() string {
-	if x != nil {
-		return x.OperationID
-	}
-	return ""
-}
-
-type GetUsersByNameResp struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	Users      []*User                    `protobuf:"bytes,1,rep,name=users,proto3" json:"users,omitempty"`
-	Pagination *sdk_ws.ResponsePagination `protobuf:"bytes,2,opt,name=Pagination,proto3" json:"Pagination,omitempty"`
-	UserNums   int32                      `protobuf:"varint,3,opt,name=UserNums,proto3" json:"UserNums,omitempty"`
-}
-
-func (x *GetUsersByNameResp) Reset() {
-	*x = GetUsersByNameResp{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_user_user_proto_msgTypes[30]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *GetUsersByNameResp) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*GetUsersByNameResp) ProtoMessage() {}
-
-func (x *GetUsersByNameResp) ProtoReflect() protoreflect.Message {
-	mi := &file_user_user_proto_msgTypes[30]
-	if protoimpl.UnsafeEnabled && x != nil {
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		if ms.LoadMessageInfo() == nil {
-			ms.StoreMessageInfo(mi)
-		}
-		return ms
-	}
-	return mi.MessageOf(x)
-}
-
-// Deprecated: Use GetUsersByNameResp.ProtoReflect.Descriptor instead.
-func (*GetUsersByNameResp) Descriptor() ([]byte, []int) {
-	return file_user_user_proto_rawDescGZIP(), []int{30}
-}
-
-func (x *GetUsersByNameResp) GetUsers() []*User {
-	if x != nil {
-		return x.Users
-	}
-	return nil
-}
-
-func (x *GetUsersByNameResp) GetPagination() *sdk_ws.ResponsePagination {
-	if x != nil {
-		return x.Pagination
-	}
-	return nil
-}
-
-func (x *GetUsersByNameResp) GetUserNums() int32 {
-	if x != nil {
-		return x.UserNums
-	}
-	return 0
-}
-
-type AlterUserReq struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	UserId      string `protobuf:"bytes,1,opt,name=UserId,proto3" json:"UserId,omitempty"`
-	OperationID string `protobuf:"bytes,2,opt,name=OperationID,proto3" json:"OperationID,omitempty"`
-	PhoneNumber int64  `protobuf:"varint,3,opt,name=PhoneNumber,proto3" json:"PhoneNumber,omitempty"`
-	Nickname    string `protobuf:"bytes,4,opt,name=Nickname,proto3" json:"Nickname,omitempty"`
-	Email       string `protobuf:"bytes,5,opt,name=Email,proto3" json:"Email,omitempty"`
-	OpUserId    string `protobuf:"bytes,6,opt,name=OpUserId,proto3" json:"OpUserId,omitempty"`
-}
-
-func (x *AlterUserReq) Reset() {
-	*x = AlterUserReq{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_user_user_proto_msgTypes[31]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *AlterUserReq) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*AlterUserReq) ProtoMessage() {}
-
-func (x *AlterUserReq) ProtoReflect() protoreflect.Message {
-	mi := &file_user_user_proto_msgTypes[31]
-	if protoimpl.UnsafeEnabled && x != nil {
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		if ms.LoadMessageInfo() == nil {
-			ms.StoreMessageInfo(mi)
-		}
-		return ms
-	}
-	return mi.MessageOf(x)
-}
-
-// Deprecated: Use AlterUserReq.ProtoReflect.Descriptor instead.
-func (*AlterUserReq) Descriptor() ([]byte, []int) {
-	return file_user_user_proto_rawDescGZIP(), []int{31}
-}
-
-func (x *AlterUserReq) GetUserId() string {
-	if x != nil {
-		return x.UserId
-	}
-	return ""
-}
-
-func (x *AlterUserReq) GetOperationID() string {
-	if x != nil {
-		return x.OperationID
-	}
-	return ""
-}
-
-func (x *AlterUserReq) GetPhoneNumber() int64 {
-	if x != nil {
-		return x.PhoneNumber
-	}
-	return 0
-}
-
-func (x *AlterUserReq) GetNickname() string {
-	if x != nil {
-		return x.Nickname
-	}
-	return ""
-}
-
-func (x *AlterUserReq) GetEmail() string {
-	if x != nil {
-		return x.Email
-	}
-	return ""
-}
-
-func (x *AlterUserReq) GetOpUserId() string {
-	if x != nil {
-		return x.OpUserId
-	}
-	return ""
-}
-
-type AlterUserResp struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	CommonResp *CommonResp `protobuf:"bytes,1,opt,name=CommonResp,proto3" json:"CommonResp,omitempty"`
-}
-
-func (x *AlterUserResp) Reset() {
-	*x = AlterUserResp{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_user_user_proto_msgTypes[32]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *AlterUserResp) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*AlterUserResp) ProtoMessage() {}
-
-func (x *AlterUserResp) ProtoReflect() protoreflect.Message {
-	mi := &file_user_user_proto_msgTypes[32]
-	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 AlterUserResp.ProtoReflect.Descriptor instead.
-func (*AlterUserResp) Descriptor() ([]byte, []int) {
-	return file_user_user_proto_rawDescGZIP(), []int{32}
-}
-
-func (x *AlterUserResp) GetCommonResp() *CommonResp {
-	if x != nil {
-		return x.CommonResp
-	}
-	return nil
-}
-
-type GetUsersReq struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	OperationID string                    `protobuf:"bytes,1,opt,name=OperationID,proto3" json:"OperationID,omitempty"`
-	Pagination  *sdk_ws.RequestPagination `protobuf:"bytes,2,opt,name=Pagination,proto3" json:"Pagination,omitempty"`
-	UserName    string                    `protobuf:"bytes,3,opt,name=UserName,proto3" json:"UserName,omitempty"`
-}
-
-func (x *GetUsersReq) Reset() {
-	*x = GetUsersReq{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_user_user_proto_msgTypes[33]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *GetUsersReq) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*GetUsersReq) ProtoMessage() {}
-
-func (x *GetUsersReq) ProtoReflect() protoreflect.Message {
-	mi := &file_user_user_proto_msgTypes[33]
-	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 GetUsersReq.ProtoReflect.Descriptor instead.
-func (*GetUsersReq) Descriptor() ([]byte, []int) {
-	return file_user_user_proto_rawDescGZIP(), []int{33}
-}
-
-func (x *GetUsersReq) GetOperationID() string {
-	if x != nil {
-		return x.OperationID
-	}
-	return ""
-}
-
-func (x *GetUsersReq) GetPagination() *sdk_ws.RequestPagination {
-	if x != nil {
-		return x.Pagination
-	}
-	return nil
-}
-
-func (x *GetUsersReq) GetUserName() string {
-	if x != nil {
-		return x.UserName
-	}
-	return ""
-}
-
-type GetUsersResp struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	CommonResp *CommonResp                `protobuf:"bytes,1,opt,name=CommonResp,proto3" json:"CommonResp,omitempty"`
-	User       []*User                    `protobuf:"bytes,2,rep,name=user,proto3" json:"user,omitempty"`
-	Pagination *sdk_ws.ResponsePagination `protobuf:"bytes,3,opt,name=Pagination,proto3" json:"Pagination,omitempty"`
-	UserNums   int32                      `protobuf:"varint,4,opt,name=UserNums,proto3" json:"UserNums,omitempty"`
-}
-
-func (x *GetUsersResp) Reset() {
-	*x = GetUsersResp{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_user_user_proto_msgTypes[34]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *GetUsersResp) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*GetUsersResp) ProtoMessage() {}
-
-func (x *GetUsersResp) ProtoReflect() protoreflect.Message {
-	mi := &file_user_user_proto_msgTypes[34]
-	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 GetUsersResp.ProtoReflect.Descriptor instead.
-func (*GetUsersResp) Descriptor() ([]byte, []int) {
-	return file_user_user_proto_rawDescGZIP(), []int{34}
-}
-
-func (x *GetUsersResp) GetCommonResp() *CommonResp {
-	if x != nil {
-		return x.CommonResp
-	}
-	return nil
-}
-
-func (x *GetUsersResp) GetUser() []*User {
-	if x != nil {
-		return x.User
-	}
-	return nil
-}
-
-func (x *GetUsersResp) GetPagination() *sdk_ws.ResponsePagination {
-	if x != nil {
-		return x.Pagination
-	}
-	return nil
-}
-
-func (x *GetUsersResp) GetUserNums() int32 {
-	if x != nil {
-		return x.UserNums
-	}
-	return 0
-}
-
-type AddUserReq struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	OperationID string `protobuf:"bytes,1,opt,name=OperationID,proto3" json:"OperationID,omitempty"`
-	PhoneNumber string `protobuf:"bytes,2,opt,name=PhoneNumber,proto3" json:"PhoneNumber,omitempty"`
-	UserId      string `protobuf:"bytes,3,opt,name=UserId,proto3" json:"UserId,omitempty"`
-	Name        string `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"`
-	OpUserId    string `protobuf:"bytes,5,opt,name=OpUserId,proto3" json:"OpUserId,omitempty"`
-}
-
-func (x *AddUserReq) Reset() {
-	*x = AddUserReq{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_user_user_proto_msgTypes[35]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *AddUserReq) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*AddUserReq) ProtoMessage() {}
-
-func (x *AddUserReq) ProtoReflect() protoreflect.Message {
-	mi := &file_user_user_proto_msgTypes[35]
-	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 AddUserReq.ProtoReflect.Descriptor instead.
-func (*AddUserReq) Descriptor() ([]byte, []int) {
-	return file_user_user_proto_rawDescGZIP(), []int{35}
-}
-
-func (x *AddUserReq) GetOperationID() string {
-	if x != nil {
-		return x.OperationID
-	}
-	return ""
-}
-
-func (x *AddUserReq) GetPhoneNumber() string {
-	if x != nil {
-		return x.PhoneNumber
-	}
-	return ""
-}
-
-func (x *AddUserReq) GetUserId() string {
-	if x != nil {
-		return x.UserId
-	}
-	return ""
-}
-
-func (x *AddUserReq) GetName() string {
-	if x != nil {
-		return x.Name
-	}
-	return ""
-}
-
-func (x *AddUserReq) GetOpUserId() string {
-	if x != nil {
-		return x.OpUserId
-	}
-	return ""
-}
-
-type AddUserResp struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	CommonResp *CommonResp `protobuf:"bytes,1,opt,name=CommonResp,proto3" json:"CommonResp,omitempty"`
-}
-
-func (x *AddUserResp) Reset() {
-	*x = AddUserResp{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_user_user_proto_msgTypes[36]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *AddUserResp) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*AddUserResp) ProtoMessage() {}
-
-func (x *AddUserResp) ProtoReflect() protoreflect.Message {
-	mi := &file_user_user_proto_msgTypes[36]
-	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 AddUserResp.ProtoReflect.Descriptor instead.
-func (*AddUserResp) Descriptor() ([]byte, []int) {
-	return file_user_user_proto_rawDescGZIP(), []int{36}
-}
-
-func (x *AddUserResp) GetCommonResp() *CommonResp {
-	if x != nil {
-		return x.CommonResp
-	}
-	return nil
-}
-
-type BlockUserReq struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	UserId         string `protobuf:"bytes,1,opt,name=UserId,proto3" json:"UserId,omitempty"`
-	EndDisableTime string `protobuf:"bytes,2,opt,name=EndDisableTime,proto3" json:"EndDisableTime,omitempty"`
-	OperationID    string `protobuf:"bytes,3,opt,name=OperationID,proto3" json:"OperationID,omitempty"`
-	OpUserId       string `protobuf:"bytes,4,opt,name=OpUserId,proto3" json:"OpUserId,omitempty"`
-}
-
-func (x *BlockUserReq) Reset() {
-	*x = BlockUserReq{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_user_user_proto_msgTypes[37]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *BlockUserReq) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*BlockUserReq) ProtoMessage() {}
-
-func (x *BlockUserReq) ProtoReflect() protoreflect.Message {
-	mi := &file_user_user_proto_msgTypes[37]
-	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 BlockUserReq.ProtoReflect.Descriptor instead.
-func (*BlockUserReq) Descriptor() ([]byte, []int) {
-	return file_user_user_proto_rawDescGZIP(), []int{37}
-}
-
-func (x *BlockUserReq) GetUserId() string {
-	if x != nil {
-		return x.UserId
-	}
-	return ""
-}
-
-func (x *BlockUserReq) GetEndDisableTime() string {
-	if x != nil {
-		return x.EndDisableTime
-	}
-	return ""
-}
-
-func (x *BlockUserReq) GetOperationID() string {
-	if x != nil {
-		return x.OperationID
-	}
-	return ""
-}
-
-func (x *BlockUserReq) GetOpUserId() string {
-	if x != nil {
-		return x.OpUserId
-	}
-	return ""
-}
-
-type BlockUserResp struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	CommonResp *CommonResp `protobuf:"bytes,1,opt,name=CommonResp,proto3" json:"CommonResp,omitempty"`
-}
-
-func (x *BlockUserResp) Reset() {
-	*x = BlockUserResp{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_user_user_proto_msgTypes[38]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *BlockUserResp) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*BlockUserResp) ProtoMessage() {}
-
-func (x *BlockUserResp) ProtoReflect() protoreflect.Message {
-	mi := &file_user_user_proto_msgTypes[38]
-	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 BlockUserResp.ProtoReflect.Descriptor instead.
-func (*BlockUserResp) Descriptor() ([]byte, []int) {
-	return file_user_user_proto_rawDescGZIP(), []int{38}
-}
-
-func (x *BlockUserResp) GetCommonResp() *CommonResp {
-	if x != nil {
-		return x.CommonResp
-	}
-	return nil
-}
-
-type UnBlockUserReq struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	UserId      string `protobuf:"bytes,1,opt,name=UserId,proto3" json:"UserId,omitempty"`
-	OperationID string `protobuf:"bytes,2,opt,name=OperationID,proto3" json:"OperationID,omitempty"`
-	OpUserId    string `protobuf:"bytes,3,opt,name=OpUserId,proto3" json:"OpUserId,omitempty"`
-}
-
-func (x *UnBlockUserReq) Reset() {
-	*x = UnBlockUserReq{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_user_user_proto_msgTypes[39]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *UnBlockUserReq) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*UnBlockUserReq) ProtoMessage() {}
-
-func (x *UnBlockUserReq) ProtoReflect() protoreflect.Message {
-	mi := &file_user_user_proto_msgTypes[39]
-	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 UnBlockUserReq.ProtoReflect.Descriptor instead.
-func (*UnBlockUserReq) Descriptor() ([]byte, []int) {
-	return file_user_user_proto_rawDescGZIP(), []int{39}
-}
-
-func (x *UnBlockUserReq) GetUserId() string {
-	if x != nil {
-		return x.UserId
-	}
-	return ""
-}
-
-func (x *UnBlockUserReq) GetOperationID() string {
-	if x != nil {
-		return x.OperationID
-	}
-	return ""
-}
-
-func (x *UnBlockUserReq) GetOpUserId() string {
-	if x != nil {
-		return x.OpUserId
-	}
-	return ""
-}
-
-type UnBlockUserResp struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	CommonResp *CommonResp `protobuf:"bytes,1,opt,name=CommonResp,proto3" json:"CommonResp,omitempty"`
-}
-
-func (x *UnBlockUserResp) Reset() {
-	*x = UnBlockUserResp{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_user_user_proto_msgTypes[40]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *UnBlockUserResp) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*UnBlockUserResp) ProtoMessage() {}
-
-func (x *UnBlockUserResp) ProtoReflect() protoreflect.Message {
-	mi := &file_user_user_proto_msgTypes[40]
-	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 UnBlockUserResp.ProtoReflect.Descriptor instead.
-func (*UnBlockUserResp) Descriptor() ([]byte, []int) {
-	return file_user_user_proto_rawDescGZIP(), []int{40}
-}
-
-func (x *UnBlockUserResp) GetCommonResp() *CommonResp {
-	if x != nil {
-		return x.CommonResp
-	}
-	return nil
-}
-
-type GetBlockUsersReq struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	Pagination   *sdk_ws.RequestPagination `protobuf:"bytes,1,opt,name=Pagination,proto3" json:"Pagination,omitempty"`
-	OperationID  string                    `protobuf:"bytes,2,opt,name=OperationID,proto3" json:"OperationID,omitempty"`
-	BlockUserNum int32                     `protobuf:"varint,3,opt,name=BlockUserNum,proto3" json:"BlockUserNum,omitempty"`
-}
-
-func (x *GetBlockUsersReq) Reset() {
-	*x = GetBlockUsersReq{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_user_user_proto_msgTypes[41]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *GetBlockUsersReq) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*GetBlockUsersReq) ProtoMessage() {}
-
-func (x *GetBlockUsersReq) ProtoReflect() protoreflect.Message {
-	mi := &file_user_user_proto_msgTypes[41]
-	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 GetBlockUsersReq.ProtoReflect.Descriptor instead.
-func (*GetBlockUsersReq) Descriptor() ([]byte, []int) {
-	return file_user_user_proto_rawDescGZIP(), []int{41}
-}
-
-func (x *GetBlockUsersReq) GetPagination() *sdk_ws.RequestPagination {
-	if x != nil {
-		return x.Pagination
-	}
-	return nil
-}
-
-func (x *GetBlockUsersReq) GetOperationID() string {
-	if x != nil {
-		return x.OperationID
-	}
-	return ""
-}
-
-func (x *GetBlockUsersReq) GetBlockUserNum() int32 {
-	if x != nil {
-		return x.BlockUserNum
-	}
-	return 0
-}
-
-type BlockUser struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	User             *User  `protobuf:"bytes,1,opt,name=User,proto3" json:"User,omitempty"`
-	BeginDisableTime string `protobuf:"bytes,2,opt,name=BeginDisableTime,proto3" json:"BeginDisableTime,omitempty"`
-	EndDisableTime   string `protobuf:"bytes,3,opt,name=EndDisableTime,proto3" json:"EndDisableTime,omitempty"`
-}
-
-func (x *BlockUser) Reset() {
-	*x = BlockUser{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_user_user_proto_msgTypes[42]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *BlockUser) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*BlockUser) ProtoMessage() {}
-
-func (x *BlockUser) ProtoReflect() protoreflect.Message {
-	mi := &file_user_user_proto_msgTypes[42]
-	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 BlockUser.ProtoReflect.Descriptor instead.
-func (*BlockUser) Descriptor() ([]byte, []int) {
-	return file_user_user_proto_rawDescGZIP(), []int{42}
-}
-
-func (x *BlockUser) GetUser() *User {
-	if x != nil {
-		return x.User
-	}
-	return nil
-}
-
-func (x *BlockUser) GetBeginDisableTime() string {
-	if x != nil {
-		return x.BeginDisableTime
-	}
-	return ""
-}
-
-func (x *BlockUser) GetEndDisableTime() string {
-	if x != nil {
-		return x.EndDisableTime
-	}
-	return ""
-}
-
-type GetBlockUsersResp struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	CommonResp *CommonResp                `protobuf:"bytes,1,opt,name=CommonResp,proto3" json:"CommonResp,omitempty"`
-	BlockUsers []*BlockUser               `protobuf:"bytes,2,rep,name=BlockUsers,proto3" json:"BlockUsers,omitempty"`
-	Pagination *sdk_ws.ResponsePagination `protobuf:"bytes,3,opt,name=Pagination,proto3" json:"Pagination,omitempty"`
-	UserNums   int32                      `protobuf:"varint,4,opt,name=UserNums,proto3" json:"UserNums,omitempty"`
-}
-
-func (x *GetBlockUsersResp) Reset() {
-	*x = GetBlockUsersResp{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_user_user_proto_msgTypes[43]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *GetBlockUsersResp) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*GetBlockUsersResp) ProtoMessage() {}
-
-func (x *GetBlockUsersResp) ProtoReflect() protoreflect.Message {
-	mi := &file_user_user_proto_msgTypes[43]
-	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 GetBlockUsersResp.ProtoReflect.Descriptor instead.
-func (*GetBlockUsersResp) Descriptor() ([]byte, []int) {
-	return file_user_user_proto_rawDescGZIP(), []int{43}
-}
-
-func (x *GetBlockUsersResp) GetCommonResp() *CommonResp {
-	if x != nil {
-		return x.CommonResp
-	}
-	return nil
-}
-
-func (x *GetBlockUsersResp) GetBlockUsers() []*BlockUser {
-	if x != nil {
-		return x.BlockUsers
-	}
-	return nil
-}
-
-func (x *GetBlockUsersResp) GetPagination() *sdk_ws.ResponsePagination {
-	if x != nil {
-		return x.Pagination
-	}
-	return nil
-}
-
-func (x *GetBlockUsersResp) GetUserNums() int32 {
-	if x != nil {
-		return x.UserNums
-	}
-	return 0
-}
-
-type GetBlockUserByIdReq struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	UserId      string `protobuf:"bytes,1,opt,name=User_id,json=UserId,proto3" json:"User_id,omitempty"`
-	OperationID string `protobuf:"bytes,2,opt,name=OperationID,proto3" json:"OperationID,omitempty"`
-}
-
-func (x *GetBlockUserByIdReq) Reset() {
-	*x = GetBlockUserByIdReq{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_user_user_proto_msgTypes[44]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *GetBlockUserByIdReq) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*GetBlockUserByIdReq) ProtoMessage() {}
-
-func (x *GetBlockUserByIdReq) ProtoReflect() protoreflect.Message {
-	mi := &file_user_user_proto_msgTypes[44]
-	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 GetBlockUserByIdReq.ProtoReflect.Descriptor instead.
-func (*GetBlockUserByIdReq) Descriptor() ([]byte, []int) {
-	return file_user_user_proto_rawDescGZIP(), []int{44}
-}
-
-func (x *GetBlockUserByIdReq) GetUserId() string {
-	if x != nil {
-		return x.UserId
-	}
-	return ""
-}
-
-func (x *GetBlockUserByIdReq) GetOperationID() string {
-	if x != nil {
-		return x.OperationID
-	}
-	return ""
-}
-
-type GetBlockUserByIdResp struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	BlockUser *BlockUser `protobuf:"bytes,2,opt,name=BlockUser,proto3" json:"BlockUser,omitempty"`
-}
-
-func (x *GetBlockUserByIdResp) Reset() {
-	*x = GetBlockUserByIdResp{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_user_user_proto_msgTypes[45]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *GetBlockUserByIdResp) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*GetBlockUserByIdResp) ProtoMessage() {}
-
-func (x *GetBlockUserByIdResp) ProtoReflect() protoreflect.Message {
-	mi := &file_user_user_proto_msgTypes[45]
-	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 GetBlockUserByIdResp.ProtoReflect.Descriptor instead.
-func (*GetBlockUserByIdResp) Descriptor() ([]byte, []int) {
-	return file_user_user_proto_rawDescGZIP(), []int{45}
-}
-
-func (x *GetBlockUserByIdResp) GetBlockUser() *BlockUser {
-	if x != nil {
-		return x.BlockUser
-	}
-	return nil
-}
-
-type DeleteUserReq struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	UserId      string `protobuf:"bytes,1,opt,name=User_id,json=UserId,proto3" json:"User_id,omitempty"`
-	OperationID string `protobuf:"bytes,2,opt,name=OperationID,proto3" json:"OperationID,omitempty"`
-	OpUserId    string `protobuf:"bytes,3,opt,name=OpUserId,proto3" json:"OpUserId,omitempty"`
-}
-
-func (x *DeleteUserReq) Reset() {
-	*x = DeleteUserReq{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_user_user_proto_msgTypes[46]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *DeleteUserReq) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*DeleteUserReq) ProtoMessage() {}
-
-func (x *DeleteUserReq) ProtoReflect() protoreflect.Message {
-	mi := &file_user_user_proto_msgTypes[46]
-	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 DeleteUserReq.ProtoReflect.Descriptor instead.
-func (*DeleteUserReq) Descriptor() ([]byte, []int) {
-	return file_user_user_proto_rawDescGZIP(), []int{46}
-}
-
-func (x *DeleteUserReq) GetUserId() string {
-	if x != nil {
-		return x.UserId
-	}
-	return ""
-}
-
-func (x *DeleteUserReq) GetOperationID() string {
-	if x != nil {
-		return x.OperationID
-	}
-	return ""
-}
-
-func (x *DeleteUserReq) GetOpUserId() string {
-	if x != nil {
-		return x.OpUserId
-	}
-	return ""
-}
-
-type DeleteUserResp struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	CommonResp *CommonResp `protobuf:"bytes,1,opt,name=CommonResp,proto3" json:"CommonResp,omitempty"`
-}
-
-func (x *DeleteUserResp) Reset() {
-	*x = DeleteUserResp{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_user_user_proto_msgTypes[47]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *DeleteUserResp) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*DeleteUserResp) ProtoMessage() {}
-
-func (x *DeleteUserResp) ProtoReflect() protoreflect.Message {
-	mi := &file_user_user_proto_msgTypes[47]
-	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 DeleteUserResp.ProtoReflect.Descriptor instead.
-func (*DeleteUserResp) Descriptor() ([]byte, []int) {
-	return file_user_user_proto_rawDescGZIP(), []int{47}
-}
-
-func (x *DeleteUserResp) GetCommonResp() *CommonResp {
-	if x != nil {
-		return x.CommonResp
+func (m *AccountCheckResp) GetResultList() []*AccountCheckResp_SingleUserStatus {
+	if m != nil {
+		return m.ResultList
 	}
 	return nil
 }
 
 type AccountCheckResp_SingleUserStatus struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	UserID        string `protobuf:"bytes,1,opt,name=userID,proto3" json:"userID,omitempty"`
-	AccountStatus string `protobuf:"bytes,2,opt,name=accountStatus,proto3" json:"accountStatus,omitempty"`
+	UserID               string   `protobuf:"bytes,1,opt,name=userID" json:"userID,omitempty"`
+	AccountStatus        string   `protobuf:"bytes,2,opt,name=accountStatus" json:"accountStatus,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
-func (x *AccountCheckResp_SingleUserStatus) Reset() {
-	*x = AccountCheckResp_SingleUserStatus{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_user_user_proto_msgTypes[48]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *AccountCheckResp_SingleUserStatus) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*AccountCheckResp_SingleUserStatus) ProtoMessage() {}
-
-func (x *AccountCheckResp_SingleUserStatus) ProtoReflect() protoreflect.Message {
-	mi := &file_user_user_proto_msgTypes[48]
-	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 AccountCheckResp_SingleUserStatus.ProtoReflect.Descriptor instead.
+func (m *AccountCheckResp_SingleUserStatus) Reset()         { *m = AccountCheckResp_SingleUserStatus{} }
+func (m *AccountCheckResp_SingleUserStatus) String() string { return proto.CompactTextString(m) }
+func (*AccountCheckResp_SingleUserStatus) ProtoMessage()    {}
 func (*AccountCheckResp_SingleUserStatus) Descriptor() ([]byte, []int) {
-	return file_user_user_proto_rawDescGZIP(), []int{6, 0}
+	return fileDescriptor_user_6133bd34462fbb1a, []int{6, 0}
+}
+func (m *AccountCheckResp_SingleUserStatus) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AccountCheckResp_SingleUserStatus.Unmarshal(m, b)
+}
+func (m *AccountCheckResp_SingleUserStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AccountCheckResp_SingleUserStatus.Marshal(b, m, deterministic)
+}
+func (dst *AccountCheckResp_SingleUserStatus) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AccountCheckResp_SingleUserStatus.Merge(dst, src)
+}
+func (m *AccountCheckResp_SingleUserStatus) XXX_Size() int {
+	return xxx_messageInfo_AccountCheckResp_SingleUserStatus.Size(m)
+}
+func (m *AccountCheckResp_SingleUserStatus) XXX_DiscardUnknown() {
+	xxx_messageInfo_AccountCheckResp_SingleUserStatus.DiscardUnknown(m)
 }
 
-func (x *AccountCheckResp_SingleUserStatus) GetUserID() string {
-	if x != nil {
-		return x.UserID
+var xxx_messageInfo_AccountCheckResp_SingleUserStatus proto.InternalMessageInfo
+
+func (m *AccountCheckResp_SingleUserStatus) GetUserID() string {
+	if m != nil {
+		return m.UserID
 	}
 	return ""
 }
 
-func (x *AccountCheckResp_SingleUserStatus) GetAccountStatus() string {
-	if x != nil {
-		return x.AccountStatus
+func (m *AccountCheckResp_SingleUserStatus) GetAccountStatus() string {
+	if m != nil {
+		return m.AccountStatus
 	}
 	return ""
 }
 
-var File_user_user_proto protoreflect.FileDescriptor
-
-var file_user_user_proto_rawDesc = []byte{
-	0x0a, 0x0f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74,
-	0x6f, 0x12, 0x04, 0x75, 0x73, 0x65, 0x72, 0x1a, 0x21, 0x4f, 0x70, 0x65, 0x6e, 0x5f, 0x49, 0x4d,
-	0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x73, 0x64, 0x6b, 0x5f, 0x77,
-	0x73, 0x2f, 0x77, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x3e, 0x0a, 0x0a, 0x43, 0x6f,
-	0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x72, 0x72, 0x43,
-	0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x65, 0x72, 0x72, 0x43, 0x6f,
-	0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x72, 0x72, 0x4d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01,
-	0x28, 0x09, 0x52, 0x06, 0x65, 0x72, 0x72, 0x4d, 0x73, 0x67, 0x22, 0x7a, 0x0a, 0x0e, 0x44, 0x65,
-	0x6c, 0x65, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x12, 0x2a, 0x0a, 0x10,
-	0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x4c, 0x69, 0x73, 0x74,
-	0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x55, 0x73,
-	0x65, 0x72, 0x49, 0x44, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x4f, 0x70, 0x55, 0x73,
-	0x65, 0x72, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x4f, 0x70, 0x55, 0x73,
-	0x65, 0x72, 0x49, 0x44, 0x12, 0x20, 0x0a, 0x0b, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f,
-	0x6e, 0x49, 0x44, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x4f, 0x70, 0x65, 0x72, 0x61,
-	0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x22, 0x6f, 0x0a, 0x0f, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65,
-	0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x30, 0x0a, 0x0a, 0x43, 0x6f, 0x6d,
-	0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e,
-	0x75, 0x73, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x52,
-	0x0a, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x2a, 0x0a, 0x10, 0x46,
-	0x61, 0x69, 0x6c, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x4c, 0x69, 0x73, 0x74, 0x18,
-	0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x55, 0x73, 0x65,
-	0x72, 0x49, 0x44, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x4f, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x41, 0x6c,
-	0x6c, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x52, 0x65, 0x71, 0x12, 0x1a, 0x0a, 0x08, 0x6f, 0x70,
-	0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6f, 0x70,
-	0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x12, 0x20, 0x0a, 0x0b, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74,
-	0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6f, 0x70, 0x65,
-	0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x22, 0x64, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x41,
-	0x6c, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x12, 0x30, 0x0a, 0x0a,
-	0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
-	0x32, 0x10, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65,
-	0x73, 0x70, 0x52, 0x0a, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x1e,
-	0x0a, 0x0a, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x02, 0x20, 0x03,
-	0x28, 0x09, 0x52, 0x0a, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x79,
-	0x0a, 0x0f, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65,
-	0x71, 0x12, 0x28, 0x0a, 0x0f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44,
-	0x4c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x43, 0x68, 0x65, 0x63,
-	0x6b, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x4f,
-	0x70, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x4f,
-	0x70, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x12, 0x20, 0x0a, 0x0b, 0x4f, 0x70, 0x65, 0x72, 0x61,
-	0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x4f, 0x70,
-	0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x22, 0xdf, 0x01, 0x0a, 0x10, 0x41, 0x63,
-	0x63, 0x6f, 0x75, 0x6e, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x12, 0x30,
-	0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x18, 0x01, 0x20, 0x01,
-	0x28, 0x0b, 0x32, 0x10, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e,
-	0x52, 0x65, 0x73, 0x70, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70,
-	0x12, 0x47, 0x0a, 0x0a, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x02,
-	0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x41, 0x63, 0x63, 0x6f,
-	0x75, 0x6e, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x2e, 0x53, 0x69, 0x6e,
-	0x67, 0x6c, 0x65, 0x55, 0x73, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x0a, 0x52,
-	0x65, 0x73, 0x75, 0x6c, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x1a, 0x50, 0x0a, 0x10, 0x53, 0x69, 0x6e,
-	0x67, 0x6c, 0x65, 0x55, 0x73, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x0a,
-	0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75,
-	0x73, 0x65, 0x72, 0x49, 0x44, 0x12, 0x24, 0x0a, 0x0d, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74,
-	0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x63,
-	0x63, 0x6f, 0x75, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x6e, 0x0a, 0x0e, 0x47,
-	0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x12, 0x1e, 0x0a,
-	0x0a, 0x75, 0x73, 0x65, 0x72, 0x49, 0x44, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28,
-	0x09, 0x52, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x49, 0x44, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1a, 0x0a,
-	0x08, 0x4f, 0x70, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
-	0x08, 0x4f, 0x70, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x12, 0x20, 0x0a, 0x0b, 0x4f, 0x70, 0x65,
-	0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b,
-	0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x22, 0x84, 0x01, 0x0a, 0x0f,
-	0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x12,
-	0x30, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x18, 0x01, 0x20,
-	0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f,
-	0x6e, 0x52, 0x65, 0x73, 0x70, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73,
-	0x70, 0x12, 0x3f, 0x0a, 0x0c, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x4c, 0x69, 0x73,
-	0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72,
-	0x5f, 0x61, 0x70, 0x69, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x55, 0x73, 0x65, 0x72,
-	0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0c, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x4c, 0x69,
-	0x73, 0x74, 0x22, 0x8a, 0x01, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65,
-	0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x12, 0x37, 0x0a, 0x08, 0x55, 0x73, 0x65, 0x72,
-	0x49, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x73, 0x65, 0x72,
-	0x76, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x55,
-	0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66,
-	0x6f, 0x12, 0x1a, 0x0a, 0x08, 0x4f, 0x70, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x02, 0x20,
-	0x01, 0x28, 0x09, 0x52, 0x08, 0x4f, 0x70, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x12, 0x20, 0x0a,
-	0x0b, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01,
-	0x28, 0x09, 0x52, 0x0b, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x22,
-	0x46, 0x0a, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66,
-	0x6f, 0x52, 0x65, 0x73, 0x70, 0x12, 0x30, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52,
-	0x65, 0x73, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x75, 0x73, 0x65, 0x72,
-	0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x52, 0x0a, 0x63, 0x6f, 0x6d,
-	0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x94, 0x03, 0x0a, 0x0c, 0x43, 0x6f, 0x6e, 0x76,
-	0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x4f, 0x77, 0x6e, 0x65,
-	0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x4f,
-	0x77, 0x6e, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x12, 0x26, 0x0a, 0x0e, 0x43, 0x6f,
-	0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01,
-	0x28, 0x09, 0x52, 0x0e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e,
-	0x49, 0x44, 0x12, 0x1e, 0x0a, 0x0a, 0x52, 0x65, 0x63, 0x76, 0x4d, 0x73, 0x67, 0x4f, 0x70, 0x74,
-	0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x52, 0x65, 0x63, 0x76, 0x4d, 0x73, 0x67, 0x4f,
-	0x70, 0x74, 0x12, 0x2a, 0x0a, 0x10, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69,
-	0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x43, 0x6f,
-	0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16,
-	0x0a, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06,
-	0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49,
-	0x44, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x44,
-	0x12, 0x20, 0x0a, 0x0b, 0x55, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18,
-	0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x55, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x43, 0x6f, 0x75,
-	0x6e, 0x74, 0x12, 0x24, 0x0a, 0x0d, 0x44, 0x72, 0x61, 0x66, 0x74, 0x54, 0x65, 0x78, 0x74, 0x54,
-	0x69, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x44, 0x72, 0x61, 0x66, 0x74,
-	0x54, 0x65, 0x78, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x49, 0x73, 0x50, 0x69,
-	0x6e, 0x6e, 0x65, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x49, 0x73, 0x50, 0x69,
-	0x6e, 0x6e, 0x65, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x65, 0x64,
-	0x49, 0x6e, 0x66, 0x6f, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x41, 0x74, 0x74, 0x61,
-	0x63, 0x68, 0x65, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x24, 0x0a, 0x0d, 0x49, 0x73, 0x50, 0x72,
-	0x69, 0x76, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52,
-	0x0d, 0x49, 0x73, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x74, 0x12, 0x0e,
-	0x0a, 0x02, 0x45, 0x78, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x45, 0x78, 0x22, 0x6e,
-	0x0a, 0x12, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f,
-	0x6e, 0x52, 0x65, 0x71, 0x12, 0x36, 0x0a, 0x0c, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61,
-	0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x75, 0x73, 0x65,
-	0x72, 0x2e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c,
-	0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x0b,
-	0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28,
-	0x09, 0x52, 0x0b, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x22, 0x47,
-	0x0a, 0x13, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f,
-	0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x30, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52,
-	0x65, 0x73, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x75, 0x73, 0x65, 0x72,
-	0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x52, 0x0a, 0x63, 0x6f, 0x6d,
-	0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x9e, 0x01, 0x0a, 0x10, 0x53, 0x65, 0x74, 0x52,
-	0x65, 0x63, 0x76, 0x4d, 0x73, 0x67, 0x4f, 0x70, 0x74, 0x52, 0x65, 0x71, 0x12, 0x20, 0x0a, 0x0b,
-	0x4f, 0x77, 0x6e, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28,
-	0x09, 0x52, 0x0b, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x12, 0x26,
-	0x0a, 0x0e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44,
-	0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61,
-	0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x1e, 0x0a, 0x0a, 0x52, 0x65, 0x63, 0x76, 0x4d, 0x73,
-	0x67, 0x4f, 0x70, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x52, 0x65, 0x63, 0x76,
-	0x4d, 0x73, 0x67, 0x4f, 0x70, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74,
-	0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x4f, 0x70, 0x65,
-	0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x22, 0x45, 0x0a, 0x11, 0x53, 0x65, 0x74, 0x52,
-	0x65, 0x63, 0x76, 0x4d, 0x73, 0x67, 0x4f, 0x70, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x30, 0x0a,
-	0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28,
-	0x0b, 0x32, 0x10, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52,
-	0x65, 0x73, 0x70, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22,
-	0x80, 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74,
-	0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x12, 0x26, 0x0a, 0x0e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72,
-	0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e,
-	0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x20,
-	0x0a, 0x0b, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x02, 0x20,
-	0x01, 0x28, 0x09, 0x52, 0x0b, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44,
-	0x12, 0x20, 0x0a, 0x0b, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18,
-	0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
-	0x49, 0x44, 0x22, 0x7f, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73,
-	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x30, 0x0a, 0x0a, 0x63, 0x6f, 0x6d,
-	0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e,
-	0x75, 0x73, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x52,
-	0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x36, 0x0a, 0x0c, 0x43,
-	0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28,
-	0x0b, 0x32, 0x12, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73,
-	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74,
-	0x69, 0x6f, 0x6e, 0x22, 0x83, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65,
-	0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x12, 0x20, 0x0a, 0x0b, 0x4f,
-	0x77, 0x6e, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
-	0x52, 0x0b, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x12, 0x28, 0x0a,
-	0x0f, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x73,
-	0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61,
-	0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x4f, 0x70, 0x65, 0x72, 0x61,
-	0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x4f, 0x70,
-	0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x22, 0x82, 0x01, 0x0a, 0x14, 0x47, 0x65,
-	0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65,
-	0x73, 0x70, 0x12, 0x30, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70,
-	0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x43, 0x6f,
-	0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e,
-	0x52, 0x65, 0x73, 0x70, 0x12, 0x38, 0x0a, 0x0d, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61,
-	0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x75, 0x73,
-	0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52,
-	0x0d, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x5c,
-	0x0a, 0x16, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61,
-	0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x12, 0x20, 0x0a, 0x0b, 0x4f, 0x77, 0x6e, 0x65,
-	0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x4f,
-	0x77, 0x6e, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x12, 0x20, 0x0a, 0x0b, 0x4f, 0x70,
-	0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
-	0x0b, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x22, 0x85, 0x01, 0x0a,
-	0x17, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74,
-	0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x30, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d,
-	0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x75,
-	0x73, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x52, 0x0a,
-	0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x38, 0x0a, 0x0d, 0x43, 0x6f,
-	0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28,
-	0x0b, 0x32, 0x12, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73,
-	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74,
-	0x69, 0x6f, 0x6e, 0x73, 0x22, 0x98, 0x01, 0x0a, 0x18, 0x42, 0x61, 0x74, 0x63, 0x68, 0x53, 0x65,
-	0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65,
-	0x71, 0x12, 0x38, 0x0a, 0x0d, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f,
-	0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e,
-	0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x43, 0x6f,
-	0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x4f,
-	0x77, 0x6e, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
-	0x52, 0x0b, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x12, 0x20, 0x0a,
-	0x0b, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01,
-	0x28, 0x09, 0x52, 0x0b, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x22,
-	0x7f, 0x0a, 0x19, 0x42, 0x61, 0x74, 0x63, 0x68, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65,
-	0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x30, 0x0a, 0x0a,
-	0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
-	0x32, 0x10, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65,
-	0x73, 0x70, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x18,
-	0x0a, 0x07, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52,
-	0x07, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x46, 0x61, 0x69, 0x6c,
-	0x65, 0x64, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64,
-	0x22, 0x49, 0x0a, 0x0d, 0x52, 0x65, 0x73, 0x69, 0x67, 0x6e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65,
-	0x71, 0x12, 0x16, 0x0a, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
-	0x09, 0x52, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x4f, 0x70, 0x65,
-	0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b,
-	0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x22, 0x42, 0x0a, 0x0e, 0x52,
-	0x65, 0x73, 0x69, 0x67, 0x6e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x12, 0x30, 0x0a,
-	0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28,
-	0x0b, 0x32, 0x10, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52,
-	0x65, 0x73, 0x70, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22,
-	0x4a, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x42, 0x79, 0x49, 0x64, 0x52, 0x65,
-	0x71, 0x12, 0x16, 0x0a, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
-	0x09, 0x52, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x4f, 0x70, 0x65,
-	0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b,
-	0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x22, 0x98, 0x01, 0x0a, 0x04,
-	0x55, 0x73, 0x65, 0x72, 0x12, 0x22, 0x0a, 0x0c, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x50,
-	0x68, 0x6f, 0x74, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x50, 0x72, 0x6f, 0x66,
-	0x69, 0x6c, 0x65, 0x50, 0x68, 0x6f, 0x74, 0x6f, 0x12, 0x1a, 0x0a, 0x08, 0x4e, 0x69, 0x63, 0x6b,
-	0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x4e, 0x69, 0x63, 0x6b,
-	0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x03,
-	0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a,
-	0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09,
-	0x52, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07,
-	0x49, 0x73, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x49,
-	0x73, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x22, 0x63, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65,
-	0x72, 0x42, 0x79, 0x49, 0x64, 0x52, 0x65, 0x73, 0x70, 0x12, 0x30, 0x0a, 0x0a, 0x43, 0x6f, 0x6d,
-	0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e,
-	0x75, 0x73, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x52,
-	0x0a, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x1e, 0x0a, 0x04, 0x75,
-	0x73, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x75, 0x73, 0x65, 0x72,
-	0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x22, 0x97, 0x01, 0x0a, 0x11,
-	0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65,
-	0x71, 0x12, 0x1a, 0x0a, 0x08, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20,
-	0x01, 0x28, 0x09, 0x52, 0x08, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x44, 0x0a,
-	0x0a, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28,
-	0x0b, 0x32, 0x24, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x5f, 0x70,
-	0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x67,
-	0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74,
-	0x69, 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
-	0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74,
-	0x69, 0x6f, 0x6e, 0x49, 0x44, 0x22, 0x99, 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65,
-	0x72, 0x73, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x20, 0x0a, 0x05,
-	0x75, 0x73, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x75, 0x73,
-	0x65, 0x72, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x05, 0x75, 0x73, 0x65, 0x72, 0x73, 0x12, 0x45,
-	0x0a, 0x0a, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01,
-	0x28, 0x0b, 0x32, 0x25, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x5f,
-	0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x50,
-	0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x50, 0x61, 0x67, 0x69, 0x6e,
-	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x75, 0x6d,
-	0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x75, 0x6d,
-	0x73, 0x22, 0xb8, 0x01, 0x0a, 0x0c, 0x41, 0x6c, 0x74, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x52,
-	0x65, 0x71, 0x12, 0x16, 0x0a, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01,
-	0x28, 0x09, 0x52, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x4f, 0x70,
-	0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
-	0x0b, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x20, 0x0a, 0x0b,
-	0x50, 0x68, 0x6f, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28,
-	0x03, 0x52, 0x0b, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1a,
-	0x0a, 0x08, 0x4e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09,
-	0x52, 0x08, 0x4e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x45, 0x6d,
-	0x61, 0x69, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x45, 0x6d, 0x61, 0x69, 0x6c,
-	0x12, 0x1a, 0x0a, 0x08, 0x4f, 0x70, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x06, 0x20, 0x01,
-	0x28, 0x09, 0x52, 0x08, 0x4f, 0x70, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0x41, 0x0a, 0x0d,
-	0x41, 0x6c, 0x74, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x12, 0x30, 0x0a,
-	0x0a, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28,
-	0x0b, 0x32, 0x10, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52,
-	0x65, 0x73, 0x70, 0x52, 0x0a, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22,
-	0x91, 0x01, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x12,
-	0x20, 0x0a, 0x0b, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x01,
-	0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49,
-	0x44, 0x12, 0x44, 0x0a, 0x0a, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18,
-	0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x61,
-	0x70, 0x69, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
-	0x74, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x50, 0x61, 0x67,
-	0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x55, 0x73, 0x65, 0x72, 0x4e,
-	0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x55, 0x73, 0x65, 0x72, 0x4e,
-	0x61, 0x6d, 0x65, 0x22, 0xc3, 0x01, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73,
-	0x52, 0x65, 0x73, 0x70, 0x12, 0x30, 0x0a, 0x0a, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65,
-	0x73, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e,
-	0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x52, 0x0a, 0x43, 0x6f, 0x6d, 0x6d,
-	0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x1e, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x02,
-	0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x55, 0x73, 0x65, 0x72,
-	0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x45, 0x0a, 0x0a, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61,
-	0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x73, 0x65, 0x72,
-	0x76, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x52,
-	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f,
-	0x6e, 0x52, 0x0a, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a,
-	0x08, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52,
-	0x08, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x73, 0x22, 0x98, 0x01, 0x0a, 0x0a, 0x41, 0x64,
-	0x64, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x12, 0x20, 0x0a, 0x0b, 0x4f, 0x70, 0x65, 0x72,
-	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x4f,
-	0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x20, 0x0a, 0x0b, 0x50, 0x68,
-	0x6f, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
-	0x0b, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06,
-	0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x55, 0x73,
-	0x65, 0x72, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01,
-	0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x4f, 0x70, 0x55, 0x73,
-	0x65, 0x72, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x4f, 0x70, 0x55, 0x73,
-	0x65, 0x72, 0x49, 0x64, 0x22, 0x3f, 0x0a, 0x0b, 0x41, 0x64, 0x64, 0x55, 0x73, 0x65, 0x72, 0x52,
-	0x65, 0x73, 0x70, 0x12, 0x30, 0x0a, 0x0a, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73,
-	0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x43,
-	0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x52, 0x0a, 0x43, 0x6f, 0x6d, 0x6d, 0x6f,
-	0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x8c, 0x01, 0x0a, 0x0c, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x55,
-	0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x12, 0x16, 0x0a, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64,
-	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x26,
-	0x0a, 0x0e, 0x45, 0x6e, 0x64, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x69, 0x6d, 0x65,
-	0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x45, 0x6e, 0x64, 0x44, 0x69, 0x73, 0x61, 0x62,
-	0x6c, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74,
-	0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x4f, 0x70, 0x65,
-	0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x1a, 0x0a, 0x08, 0x4f, 0x70, 0x55, 0x73,
-	0x65, 0x72, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x4f, 0x70, 0x55, 0x73,
-	0x65, 0x72, 0x49, 0x64, 0x22, 0x41, 0x0a, 0x0d, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x73, 0x65,
-	0x72, 0x52, 0x65, 0x73, 0x70, 0x12, 0x30, 0x0a, 0x0a, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52,
-	0x65, 0x73, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x75, 0x73, 0x65, 0x72,
-	0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x52, 0x0a, 0x43, 0x6f, 0x6d,
-	0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x66, 0x0a, 0x0e, 0x55, 0x6e, 0x42, 0x6c, 0x6f,
-	0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x12, 0x16, 0x0a, 0x06, 0x55, 0x73, 0x65,
-	0x72, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49,
-	0x64, 0x12, 0x20, 0x0a, 0x0b, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44,
-	0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f,
-	0x6e, 0x49, 0x44, 0x12, 0x1a, 0x0a, 0x08, 0x4f, 0x70, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18,
-	0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x4f, 0x70, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22,
-	0x43, 0x0a, 0x0f, 0x55, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65,
-	0x73, 0x70, 0x12, 0x30, 0x0a, 0x0a, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70,
-	0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x43, 0x6f,
-	0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x52, 0x0a, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e,
-	0x52, 0x65, 0x73, 0x70, 0x22, 0x9e, 0x01, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63,
-	0x6b, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x12, 0x44, 0x0a, 0x0a, 0x50, 0x61, 0x67,
-	0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e,
-	0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d,
-	0x73, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74,
-	0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12,
-	0x20, 0x0a, 0x0b, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x02,
-	0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49,
-	0x44, 0x12, 0x22, 0x0a, 0x0c, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x75,
-	0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x73,
-	0x65, 0x72, 0x4e, 0x75, 0x6d, 0x22, 0x7f, 0x0a, 0x09, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x73,
-	0x65, 0x72, 0x12, 0x1e, 0x0a, 0x04, 0x55, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
-	0x32, 0x0a, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x04, 0x55, 0x73,
-	0x65, 0x72, 0x12, 0x2a, 0x0a, 0x10, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x44, 0x69, 0x73, 0x61, 0x62,
-	0x6c, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x42, 0x65,
-	0x67, 0x69, 0x6e, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x26,
-	0x0a, 0x0e, 0x45, 0x6e, 0x64, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x69, 0x6d, 0x65,
-	0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x45, 0x6e, 0x64, 0x44, 0x69, 0x73, 0x61, 0x62,
-	0x6c, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, 0xd9, 0x01, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x42, 0x6c,
-	0x6f, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x30, 0x0a, 0x0a,
-	0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
-	0x32, 0x10, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65,
-	0x73, 0x70, 0x52, 0x0a, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x2f,
-	0x0a, 0x0a, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03,
-	0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x55,
-	0x73, 0x65, 0x72, 0x52, 0x0a, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x73, 0x12,
-	0x45, 0x0a, 0x0a, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20,
-	0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69,
-	0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
-	0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x50, 0x61, 0x67, 0x69,
-	0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x75,
-	0x6d, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x75,
-	0x6d, 0x73, 0x22, 0x50, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x73,
-	0x65, 0x72, 0x42, 0x79, 0x49, 0x64, 0x52, 0x65, 0x71, 0x12, 0x17, 0x0a, 0x07, 0x55, 0x73, 0x65,
-	0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x55, 0x73, 0x65, 0x72,
-	0x49, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49,
-	0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69,
-	0x6f, 0x6e, 0x49, 0x44, 0x22, 0x45, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b,
-	0x55, 0x73, 0x65, 0x72, 0x42, 0x79, 0x49, 0x64, 0x52, 0x65, 0x73, 0x70, 0x12, 0x2d, 0x0a, 0x09,
-	0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32,
-	0x0f, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72,
-	0x52, 0x09, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x22, 0x66, 0x0a, 0x0d, 0x44,
-	0x65, 0x6c, 0x65, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x12, 0x17, 0x0a, 0x07,
-	0x55, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x55,
-	0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69,
-	0x6f, 0x6e, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x4f, 0x70, 0x65, 0x72,
-	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x1a, 0x0a, 0x08, 0x4f, 0x70, 0x55, 0x73, 0x65,
-	0x72, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x4f, 0x70, 0x55, 0x73, 0x65,
-	0x72, 0x49, 0x64, 0x22, 0x42, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x55, 0x73, 0x65,
-	0x72, 0x52, 0x65, 0x73, 0x70, 0x12, 0x30, 0x0a, 0x0a, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52,
-	0x65, 0x73, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x75, 0x73, 0x65, 0x72,
-	0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x52, 0x0a, 0x43, 0x6f, 0x6d,
-	0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x32, 0x97, 0x0b, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72,
-	0x12, 0x3a, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12,
-	0x14, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e,
-	0x66, 0x6f, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74,
-	0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x12, 0x43, 0x0a, 0x0e,
-	0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x17,
-	0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72,
-	0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x1a, 0x18, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x55,
-	0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73,
-	0x70, 0x12, 0x3a, 0x0a, 0x0b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x73,
-	0x12, 0x14, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x55, 0x73,
-	0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x44, 0x65,
-	0x6c, 0x65, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x3d, 0x0a,
-	0x0c, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x12, 0x15, 0x2e,
-	0x75, 0x73, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x49,
-	0x44, 0x52, 0x65, 0x71, 0x1a, 0x16, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x41,
-	0x6c, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x12, 0x3d, 0x0a, 0x0c,
-	0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x15, 0x2e, 0x75,
-	0x73, 0x65, 0x72, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b,
-	0x52, 0x65, 0x71, 0x1a, 0x16, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75,
-	0x6e, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x12, 0x46, 0x0a, 0x0f, 0x47,
-	0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18,
-	0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73,
-	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x19, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e,
-	0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52,
-	0x65, 0x73, 0x70, 0x12, 0x52, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x43, 0x6f, 0x6e,
-	0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1c, 0x2e, 0x75, 0x73, 0x65,
-	0x72, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61,
-	0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1d, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e,
-	0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69,
-	0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x49, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x43, 0x6f,
-	0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x19, 0x2e, 0x75, 0x73,
-	0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69,
-	0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1a, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x47, 0x65,
-	0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65,
-	0x73, 0x70, 0x12, 0x58, 0x0a, 0x15, 0x42, 0x61, 0x74, 0x63, 0x68, 0x53, 0x65, 0x74, 0x43, 0x6f,
-	0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1e, 0x2e, 0x75, 0x73,
-	0x65, 0x72, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65,
-	0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1f, 0x2e, 0x75, 0x73,
-	0x65, 0x72, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65,
-	0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x46, 0x0a, 0x0f,
-	0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12,
-	0x18, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72,
-	0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x19, 0x2e, 0x75, 0x73, 0x65, 0x72,
-	0x2e, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e,
-	0x52, 0x65, 0x73, 0x70, 0x12, 0x40, 0x0a, 0x0d, 0x53, 0x65, 0x74, 0x52, 0x65, 0x63, 0x76, 0x4d,
-	0x73, 0x67, 0x4f, 0x70, 0x74, 0x12, 0x16, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x74,
-	0x52, 0x65, 0x63, 0x76, 0x4d, 0x73, 0x67, 0x4f, 0x70, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e,
-	0x75, 0x73, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x74, 0x52, 0x65, 0x63, 0x76, 0x4d, 0x73, 0x67, 0x4f,
-	0x70, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x3a, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65,
-	0x72, 0x42, 0x79, 0x49, 0x64, 0x12, 0x14, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74,
-	0x55, 0x73, 0x65, 0x72, 0x42, 0x79, 0x49, 0x64, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x75, 0x73,
-	0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x42, 0x79, 0x49, 0x64, 0x52, 0x65,
-	0x73, 0x70, 0x12, 0x43, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x42, 0x79,
-	0x4e, 0x61, 0x6d, 0x65, 0x12, 0x17, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x55,
-	0x73, 0x65, 0x72, 0x73, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x18, 0x2e,
-	0x75, 0x73, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x42, 0x79, 0x4e,
-	0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x37, 0x0a, 0x0a, 0x52, 0x65, 0x73, 0x69, 0x67,
-	0x6e, 0x55, 0x73, 0x65, 0x72, 0x12, 0x13, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x73,
-	0x69, 0x67, 0x6e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x1a, 0x14, 0x2e, 0x75, 0x73, 0x65,
-	0x72, 0x2e, 0x52, 0x65, 0x73, 0x69, 0x67, 0x6e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70,
-	0x12, 0x34, 0x0a, 0x09, 0x41, 0x6c, 0x74, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x12, 0x12, 0x2e,
-	0x75, 0x73, 0x65, 0x72, 0x2e, 0x41, 0x6c, 0x74, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65,
-	0x71, 0x1a, 0x13, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x41, 0x6c, 0x74, 0x65, 0x72, 0x55, 0x73,
-	0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x12, 0x31, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65,
-	0x72, 0x73, 0x12, 0x11, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65,
-	0x72, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x12, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74,
-	0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x2e, 0x0a, 0x07, 0x41, 0x64, 0x64,
-	0x55, 0x73, 0x65, 0x72, 0x12, 0x10, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x41, 0x64, 0x64, 0x55,
-	0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x41, 0x64,
-	0x64, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x12, 0x34, 0x0a, 0x09, 0x42, 0x6c, 0x6f,
-	0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x12, 0x12, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x42, 0x6c,
-	0x6f, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x1a, 0x13, 0x2e, 0x75, 0x73, 0x65,
-	0x72, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x12,
-	0x3a, 0x0a, 0x0b, 0x55, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x12, 0x14,
-	0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x55, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x73, 0x65,
-	0x72, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x55, 0x6e, 0x42, 0x6c,
-	0x6f, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x12, 0x40, 0x0a, 0x0d, 0x47,
-	0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x73, 0x12, 0x16, 0x2e, 0x75,
-	0x73, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72,
-	0x73, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x42,
-	0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x49, 0x0a,
-	0x10, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x42, 0x79, 0x49,
-	0x64, 0x12, 0x19, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63,
-	0x6b, 0x55, 0x73, 0x65, 0x72, 0x42, 0x79, 0x49, 0x64, 0x52, 0x65, 0x71, 0x1a, 0x1a, 0x2e, 0x75,
-	0x73, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72,
-	0x42, 0x79, 0x49, 0x64, 0x52, 0x65, 0x73, 0x70, 0x12, 0x37, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65,
-	0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x12, 0x13, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x44, 0x65,
-	0x6c, 0x65, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x1a, 0x14, 0x2e, 0x75, 0x73,
-	0x65, 0x72, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73,
-	0x70, 0x42, 0x0d, 0x5a, 0x0b, 0x2e, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x3b, 0x75, 0x73, 0x65, 0x72,
-	0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+type GetUserInfoReq struct {
+	UserIDList           []string `protobuf:"bytes,1,rep,name=userIDList" json:"userIDList,omitempty"`
+	OpUserID             string   `protobuf:"bytes,2,opt,name=OpUserID" json:"OpUserID,omitempty"`
+	OperationID          string   `protobuf:"bytes,3,opt,name=OperationID" json:"OperationID,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
-var (
-	file_user_user_proto_rawDescOnce sync.Once
-	file_user_user_proto_rawDescData = file_user_user_proto_rawDesc
-)
-
-func file_user_user_proto_rawDescGZIP() []byte {
-	file_user_user_proto_rawDescOnce.Do(func() {
-		file_user_user_proto_rawDescData = protoimpl.X.CompressGZIP(file_user_user_proto_rawDescData)
-	})
-	return file_user_user_proto_rawDescData
+func (m *GetUserInfoReq) Reset()         { *m = GetUserInfoReq{} }
+func (m *GetUserInfoReq) String() string { return proto.CompactTextString(m) }
+func (*GetUserInfoReq) ProtoMessage()    {}
+func (*GetUserInfoReq) Descriptor() ([]byte, []int) {
+	return fileDescriptor_user_6133bd34462fbb1a, []int{7}
+}
+func (m *GetUserInfoReq) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetUserInfoReq.Unmarshal(m, b)
+}
+func (m *GetUserInfoReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetUserInfoReq.Marshal(b, m, deterministic)
+}
+func (dst *GetUserInfoReq) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetUserInfoReq.Merge(dst, src)
+}
+func (m *GetUserInfoReq) XXX_Size() int {
+	return xxx_messageInfo_GetUserInfoReq.Size(m)
+}
+func (m *GetUserInfoReq) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetUserInfoReq.DiscardUnknown(m)
 }
 
-var file_user_user_proto_msgTypes = make([]protoimpl.MessageInfo, 49)
-var file_user_user_proto_goTypes = []interface{}{
-	(*CommonResp)(nil),                        // 0: user.CommonResp
-	(*DeleteUsersReq)(nil),                    // 1: user.DeleteUsersReq
-	(*DeleteUsersResp)(nil),                   // 2: user.DeleteUsersResp
-	(*GetAllUserIDReq)(nil),                   // 3: user.GetAllUserIDReq
-	(*GetAllUserIDResp)(nil),                  // 4: user.GetAllUserIDResp
-	(*AccountCheckReq)(nil),                   // 5: user.AccountCheckReq
-	(*AccountCheckResp)(nil),                  // 6: user.AccountCheckResp
-	(*GetUserInfoReq)(nil),                    // 7: user.GetUserInfoReq
-	(*GetUserInfoResp)(nil),                   // 8: user.GetUserInfoResp
-	(*UpdateUserInfoReq)(nil),                 // 9: user.UpdateUserInfoReq
-	(*UpdateUserInfoResp)(nil),                // 10: user.UpdateUserInfoResp
-	(*Conversation)(nil),                      // 11: user.Conversation
-	(*SetConversationReq)(nil),                // 12: user.SetConversationReq
-	(*SetConversationResp)(nil),               // 13: user.SetConversationResp
-	(*SetRecvMsgOptReq)(nil),                  // 14: user.SetRecvMsgOptReq
-	(*SetRecvMsgOptResp)(nil),                 // 15: user.SetRecvMsgOptResp
-	(*GetConversationReq)(nil),                // 16: user.GetConversationReq
-	(*GetConversationResp)(nil),               // 17: user.GetConversationResp
-	(*GetConversationsReq)(nil),               // 18: user.GetConversationsReq
-	(*GetConversationsResp)(nil),              // 19: user.GetConversationsResp
-	(*GetAllConversationsReq)(nil),            // 20: user.GetAllConversationsReq
-	(*GetAllConversationsResp)(nil),           // 21: user.GetAllConversationsResp
-	(*BatchSetConversationsReq)(nil),          // 22: user.BatchSetConversationsReq
-	(*BatchSetConversationsResp)(nil),         // 23: user.BatchSetConversationsResp
-	(*ResignUserReq)(nil),                     // 24: user.ResignUserReq
-	(*ResignUserResp)(nil),                    // 25: user.ResignUserResp
-	(*GetUserByIdReq)(nil),                    // 26: user.GetUserByIdReq
-	(*User)(nil),                              // 27: user.User
-	(*GetUserByIdResp)(nil),                   // 28: user.GetUserByIdResp
-	(*GetUsersByNameReq)(nil),                 // 29: user.GetUsersByNameReq
-	(*GetUsersByNameResp)(nil),                // 30: user.GetUsersByNameResp
-	(*AlterUserReq)(nil),                      // 31: user.AlterUserReq
-	(*AlterUserResp)(nil),                     // 32: user.AlterUserResp
-	(*GetUsersReq)(nil),                       // 33: user.GetUsersReq
-	(*GetUsersResp)(nil),                      // 34: user.GetUsersResp
-	(*AddUserReq)(nil),                        // 35: user.AddUserReq
-	(*AddUserResp)(nil),                       // 36: user.AddUserResp
-	(*BlockUserReq)(nil),                      // 37: user.BlockUserReq
-	(*BlockUserResp)(nil),                     // 38: user.BlockUserResp
-	(*UnBlockUserReq)(nil),                    // 39: user.UnBlockUserReq
-	(*UnBlockUserResp)(nil),                   // 40: user.UnBlockUserResp
-	(*GetBlockUsersReq)(nil),                  // 41: user.GetBlockUsersReq
-	(*BlockUser)(nil),                         // 42: user.BlockUser
-	(*GetBlockUsersResp)(nil),                 // 43: user.GetBlockUsersResp
-	(*GetBlockUserByIdReq)(nil),               // 44: user.GetBlockUserByIdReq
-	(*GetBlockUserByIdResp)(nil),              // 45: user.GetBlockUserByIdResp
-	(*DeleteUserReq)(nil),                     // 46: user.DeleteUserReq
-	(*DeleteUserResp)(nil),                    // 47: user.DeleteUserResp
-	(*AccountCheckResp_SingleUserStatus)(nil), // 48: user.AccountCheckResp.SingleUserStatus
-	(*sdk_ws.UserInfo)(nil),                   // 49: server_api_params.UserInfo
-	(*sdk_ws.RequestPagination)(nil),          // 50: server_api_params.RequestPagination
-	(*sdk_ws.ResponsePagination)(nil),         // 51: server_api_params.ResponsePagination
-}
-var file_user_user_proto_depIdxs = []int32{
-	0,  // 0: user.DeleteUsersResp.CommonResp:type_name -> user.CommonResp
-	0,  // 1: user.GetAllUserIDResp.CommonResp:type_name -> user.CommonResp
-	0,  // 2: user.AccountCheckResp.commonResp:type_name -> user.CommonResp
-	48, // 3: user.AccountCheckResp.ResultList:type_name -> user.AccountCheckResp.SingleUserStatus
-	0,  // 4: user.GetUserInfoResp.commonResp:type_name -> user.CommonResp
-	49, // 5: user.GetUserInfoResp.UserInfoList:type_name -> server_api_params.UserInfo
-	49, // 6: user.UpdateUserInfoReq.UserInfo:type_name -> server_api_params.UserInfo
-	0,  // 7: user.UpdateUserInfoResp.commonResp:type_name -> user.CommonResp
-	11, // 8: user.SetConversationReq.Conversation:type_name -> user.Conversation
-	0,  // 9: user.SetConversationResp.commonResp:type_name -> user.CommonResp
-	0,  // 10: user.SetRecvMsgOptResp.commonResp:type_name -> user.CommonResp
-	0,  // 11: user.GetConversationResp.commonResp:type_name -> user.CommonResp
-	11, // 12: user.GetConversationResp.Conversation:type_name -> user.Conversation
-	0,  // 13: user.GetConversationsResp.commonResp:type_name -> user.CommonResp
-	11, // 14: user.GetConversationsResp.Conversations:type_name -> user.Conversation
-	0,  // 15: user.GetAllConversationsResp.commonResp:type_name -> user.CommonResp
-	11, // 16: user.GetAllConversationsResp.Conversations:type_name -> user.Conversation
-	11, // 17: user.BatchSetConversationsReq.Conversations:type_name -> user.Conversation
-	0,  // 18: user.BatchSetConversationsResp.commonResp:type_name -> user.CommonResp
-	0,  // 19: user.ResignUserResp.commonResp:type_name -> user.CommonResp
-	0,  // 20: user.GetUserByIdResp.CommonResp:type_name -> user.CommonResp
-	27, // 21: user.GetUserByIdResp.user:type_name -> user.User
-	50, // 22: user.GetUsersByNameReq.Pagination:type_name -> server_api_params.RequestPagination
-	27, // 23: user.GetUsersByNameResp.users:type_name -> user.User
-	51, // 24: user.GetUsersByNameResp.Pagination:type_name -> server_api_params.ResponsePagination
-	0,  // 25: user.AlterUserResp.CommonResp:type_name -> user.CommonResp
-	50, // 26: user.GetUsersReq.Pagination:type_name -> server_api_params.RequestPagination
-	0,  // 27: user.GetUsersResp.CommonResp:type_name -> user.CommonResp
-	27, // 28: user.GetUsersResp.user:type_name -> user.User
-	51, // 29: user.GetUsersResp.Pagination:type_name -> server_api_params.ResponsePagination
-	0,  // 30: user.AddUserResp.CommonResp:type_name -> user.CommonResp
-	0,  // 31: user.BlockUserResp.CommonResp:type_name -> user.CommonResp
-	0,  // 32: user.UnBlockUserResp.CommonResp:type_name -> user.CommonResp
-	50, // 33: user.GetBlockUsersReq.Pagination:type_name -> server_api_params.RequestPagination
-	27, // 34: user.BlockUser.User:type_name -> user.User
-	0,  // 35: user.GetBlockUsersResp.CommonResp:type_name -> user.CommonResp
-	42, // 36: user.GetBlockUsersResp.BlockUsers:type_name -> user.BlockUser
-	51, // 37: user.GetBlockUsersResp.Pagination:type_name -> server_api_params.ResponsePagination
-	42, // 38: user.GetBlockUserByIdResp.BlockUser:type_name -> user.BlockUser
-	0,  // 39: user.DeleteUserResp.CommonResp:type_name -> user.CommonResp
-	7,  // 40: user.user.GetUserInfo:input_type -> user.GetUserInfoReq
-	9,  // 41: user.user.UpdateUserInfo:input_type -> user.UpdateUserInfoReq
-	1,  // 42: user.user.DeleteUsers:input_type -> user.DeleteUsersReq
-	3,  // 43: user.user.GetAllUserID:input_type -> user.GetAllUserIDReq
-	5,  // 44: user.user.AccountCheck:input_type -> user.AccountCheckReq
-	16, // 45: user.user.GetConversation:input_type -> user.GetConversationReq
-	20, // 46: user.user.GetAllConversations:input_type -> user.GetAllConversationsReq
-	18, // 47: user.user.GetConversations:input_type -> user.GetConversationsReq
-	22, // 48: user.user.BatchSetConversations:input_type -> user.BatchSetConversationsReq
-	12, // 49: user.user.SetConversation:input_type -> user.SetConversationReq
-	14, // 50: user.user.SetRecvMsgOpt:input_type -> user.SetRecvMsgOptReq
-	26, // 51: user.user.GetUserById:input_type -> user.GetUserByIdReq
-	29, // 52: user.user.GetUsersByName:input_type -> user.GetUsersByNameReq
-	24, // 53: user.user.ResignUser:input_type -> user.ResignUserReq
-	31, // 54: user.user.AlterUser:input_type -> user.AlterUserReq
-	33, // 55: user.user.GetUsers:input_type -> user.GetUsersReq
-	35, // 56: user.user.AddUser:input_type -> user.AddUserReq
-	37, // 57: user.user.BlockUser:input_type -> user.BlockUserReq
-	39, // 58: user.user.UnBlockUser:input_type -> user.UnBlockUserReq
-	41, // 59: user.user.GetBlockUsers:input_type -> user.GetBlockUsersReq
-	44, // 60: user.user.GetBlockUserById:input_type -> user.GetBlockUserByIdReq
-	46, // 61: user.user.DeleteUser:input_type -> user.DeleteUserReq
-	8,  // 62: user.user.GetUserInfo:output_type -> user.GetUserInfoResp
-	10, // 63: user.user.UpdateUserInfo:output_type -> user.UpdateUserInfoResp
-	2,  // 64: user.user.DeleteUsers:output_type -> user.DeleteUsersResp
-	4,  // 65: user.user.GetAllUserID:output_type -> user.GetAllUserIDResp
-	6,  // 66: user.user.AccountCheck:output_type -> user.AccountCheckResp
-	17, // 67: user.user.GetConversation:output_type -> user.GetConversationResp
-	21, // 68: user.user.GetAllConversations:output_type -> user.GetAllConversationsResp
-	19, // 69: user.user.GetConversations:output_type -> user.GetConversationsResp
-	23, // 70: user.user.BatchSetConversations:output_type -> user.BatchSetConversationsResp
-	13, // 71: user.user.SetConversation:output_type -> user.SetConversationResp
-	15, // 72: user.user.SetRecvMsgOpt:output_type -> user.SetRecvMsgOptResp
-	28, // 73: user.user.GetUserById:output_type -> user.GetUserByIdResp
-	30, // 74: user.user.GetUsersByName:output_type -> user.GetUsersByNameResp
-	25, // 75: user.user.ResignUser:output_type -> user.ResignUserResp
-	32, // 76: user.user.AlterUser:output_type -> user.AlterUserResp
-	34, // 77: user.user.GetUsers:output_type -> user.GetUsersResp
-	36, // 78: user.user.AddUser:output_type -> user.AddUserResp
-	38, // 79: user.user.BlockUser:output_type -> user.BlockUserResp
-	40, // 80: user.user.UnBlockUser:output_type -> user.UnBlockUserResp
-	43, // 81: user.user.GetBlockUsers:output_type -> user.GetBlockUsersResp
-	45, // 82: user.user.GetBlockUserById:output_type -> user.GetBlockUserByIdResp
-	47, // 83: user.user.DeleteUser:output_type -> user.DeleteUserResp
-	62, // [62:84] is the sub-list for method output_type
-	40, // [40:62] is the sub-list for method input_type
-	40, // [40:40] is the sub-list for extension type_name
-	40, // [40:40] is the sub-list for extension extendee
-	0,  // [0:40] is the sub-list for field type_name
-}
+var xxx_messageInfo_GetUserInfoReq proto.InternalMessageInfo
 
-func init() { file_user_user_proto_init() }
-func file_user_user_proto_init() {
-	if File_user_user_proto != nil {
-		return
+func (m *GetUserInfoReq) GetUserIDList() []string {
+	if m != nil {
+		return m.UserIDList
 	}
-	if !protoimpl.UnsafeEnabled {
-		file_user_user_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*CommonResp); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_user_user_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*DeleteUsersReq); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_user_user_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*DeleteUsersResp); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_user_user_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GetAllUserIDReq); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_user_user_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GetAllUserIDResp); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_user_user_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*AccountCheckReq); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_user_user_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*AccountCheckResp); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_user_user_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GetUserInfoReq); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_user_user_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GetUserInfoResp); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_user_user_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*UpdateUserInfoReq); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_user_user_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*UpdateUserInfoResp); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_user_user_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*Conversation); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_user_user_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*SetConversationReq); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_user_user_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*SetConversationResp); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_user_user_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*SetRecvMsgOptReq); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_user_user_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*SetRecvMsgOptResp); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_user_user_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GetConversationReq); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_user_user_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GetConversationResp); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_user_user_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GetConversationsReq); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_user_user_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GetConversationsResp); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_user_user_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GetAllConversationsReq); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_user_user_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GetAllConversationsResp); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_user_user_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*BatchSetConversationsReq); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_user_user_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*BatchSetConversationsResp); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_user_user_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*ResignUserReq); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_user_user_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*ResignUserResp); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_user_user_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GetUserByIdReq); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_user_user_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*User); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_user_user_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GetUserByIdResp); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_user_user_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GetUsersByNameReq); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_user_user_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GetUsersByNameResp); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_user_user_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*AlterUserReq); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_user_user_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*AlterUserResp); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_user_user_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GetUsersReq); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_user_user_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GetUsersResp); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_user_user_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*AddUserReq); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_user_user_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*AddUserResp); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_user_user_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*BlockUserReq); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_user_user_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*BlockUserResp); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_user_user_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*UnBlockUserReq); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_user_user_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*UnBlockUserResp); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_user_user_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GetBlockUsersReq); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_user_user_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*BlockUser); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_user_user_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GetBlockUsersResp); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_user_user_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GetBlockUserByIdReq); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_user_user_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GetBlockUserByIdResp); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_user_user_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*DeleteUserReq); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_user_user_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*DeleteUserResp); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_user_user_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*AccountCheckResp_SingleUserStatus); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
+	return nil
+}
+
+func (m *GetUserInfoReq) GetOpUserID() string {
+	if m != nil {
+		return m.OpUserID
 	}
-	type x struct{}
-	out := protoimpl.TypeBuilder{
-		File: protoimpl.DescBuilder{
-			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
-			RawDescriptor: file_user_user_proto_rawDesc,
-			NumEnums:      0,
-			NumMessages:   49,
-			NumExtensions: 0,
-			NumServices:   1,
-		},
-		GoTypes:           file_user_user_proto_goTypes,
-		DependencyIndexes: file_user_user_proto_depIdxs,
-		MessageInfos:      file_user_user_proto_msgTypes,
-	}.Build()
-	File_user_user_proto = out.File
-	file_user_user_proto_rawDesc = nil
-	file_user_user_proto_goTypes = nil
-	file_user_user_proto_depIdxs = nil
+	return ""
+}
+
+func (m *GetUserInfoReq) GetOperationID() string {
+	if m != nil {
+		return m.OperationID
+	}
+	return ""
+}
+
+type GetUserInfoResp struct {
+	CommonResp           *CommonResp        `protobuf:"bytes,1,opt,name=commonResp" json:"commonResp,omitempty"`
+	UserInfoList         []*sdk_ws.UserInfo `protobuf:"bytes,3,rep,name=UserInfoList" json:"UserInfoList,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}           `json:"-"`
+	XXX_unrecognized     []byte             `json:"-"`
+	XXX_sizecache        int32              `json:"-"`
+}
+
+func (m *GetUserInfoResp) Reset()         { *m = GetUserInfoResp{} }
+func (m *GetUserInfoResp) String() string { return proto.CompactTextString(m) }
+func (*GetUserInfoResp) ProtoMessage()    {}
+func (*GetUserInfoResp) Descriptor() ([]byte, []int) {
+	return fileDescriptor_user_6133bd34462fbb1a, []int{8}
+}
+func (m *GetUserInfoResp) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetUserInfoResp.Unmarshal(m, b)
+}
+func (m *GetUserInfoResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetUserInfoResp.Marshal(b, m, deterministic)
+}
+func (dst *GetUserInfoResp) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetUserInfoResp.Merge(dst, src)
+}
+func (m *GetUserInfoResp) XXX_Size() int {
+	return xxx_messageInfo_GetUserInfoResp.Size(m)
+}
+func (m *GetUserInfoResp) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetUserInfoResp.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetUserInfoResp proto.InternalMessageInfo
+
+func (m *GetUserInfoResp) GetCommonResp() *CommonResp {
+	if m != nil {
+		return m.CommonResp
+	}
+	return nil
+}
+
+func (m *GetUserInfoResp) GetUserInfoList() []*sdk_ws.UserInfo {
+	if m != nil {
+		return m.UserInfoList
+	}
+	return nil
+}
+
+type UpdateUserInfoReq struct {
+	UserInfo             *sdk_ws.UserInfo `protobuf:"bytes,1,opt,name=UserInfo" json:"UserInfo,omitempty"`
+	OpUserID             string           `protobuf:"bytes,2,opt,name=OpUserID" json:"OpUserID,omitempty"`
+	OperationID          string           `protobuf:"bytes,3,opt,name=operationID" json:"operationID,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}         `json:"-"`
+	XXX_unrecognized     []byte           `json:"-"`
+	XXX_sizecache        int32            `json:"-"`
+}
+
+func (m *UpdateUserInfoReq) Reset()         { *m = UpdateUserInfoReq{} }
+func (m *UpdateUserInfoReq) String() string { return proto.CompactTextString(m) }
+func (*UpdateUserInfoReq) ProtoMessage()    {}
+func (*UpdateUserInfoReq) Descriptor() ([]byte, []int) {
+	return fileDescriptor_user_6133bd34462fbb1a, []int{9}
+}
+func (m *UpdateUserInfoReq) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UpdateUserInfoReq.Unmarshal(m, b)
+}
+func (m *UpdateUserInfoReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UpdateUserInfoReq.Marshal(b, m, deterministic)
+}
+func (dst *UpdateUserInfoReq) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UpdateUserInfoReq.Merge(dst, src)
+}
+func (m *UpdateUserInfoReq) XXX_Size() int {
+	return xxx_messageInfo_UpdateUserInfoReq.Size(m)
+}
+func (m *UpdateUserInfoReq) XXX_DiscardUnknown() {
+	xxx_messageInfo_UpdateUserInfoReq.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UpdateUserInfoReq proto.InternalMessageInfo
+
+func (m *UpdateUserInfoReq) GetUserInfo() *sdk_ws.UserInfo {
+	if m != nil {
+		return m.UserInfo
+	}
+	return nil
+}
+
+func (m *UpdateUserInfoReq) GetOpUserID() string {
+	if m != nil {
+		return m.OpUserID
+	}
+	return ""
+}
+
+func (m *UpdateUserInfoReq) GetOperationID() string {
+	if m != nil {
+		return m.OperationID
+	}
+	return ""
+}
+
+type UpdateUserInfoResp struct {
+	CommonResp           *CommonResp `protobuf:"bytes,1,opt,name=commonResp" json:"commonResp,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}    `json:"-"`
+	XXX_unrecognized     []byte      `json:"-"`
+	XXX_sizecache        int32       `json:"-"`
+}
+
+func (m *UpdateUserInfoResp) Reset()         { *m = UpdateUserInfoResp{} }
+func (m *UpdateUserInfoResp) String() string { return proto.CompactTextString(m) }
+func (*UpdateUserInfoResp) ProtoMessage()    {}
+func (*UpdateUserInfoResp) Descriptor() ([]byte, []int) {
+	return fileDescriptor_user_6133bd34462fbb1a, []int{10}
+}
+func (m *UpdateUserInfoResp) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UpdateUserInfoResp.Unmarshal(m, b)
+}
+func (m *UpdateUserInfoResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UpdateUserInfoResp.Marshal(b, m, deterministic)
+}
+func (dst *UpdateUserInfoResp) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UpdateUserInfoResp.Merge(dst, src)
+}
+func (m *UpdateUserInfoResp) XXX_Size() int {
+	return xxx_messageInfo_UpdateUserInfoResp.Size(m)
+}
+func (m *UpdateUserInfoResp) XXX_DiscardUnknown() {
+	xxx_messageInfo_UpdateUserInfoResp.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UpdateUserInfoResp proto.InternalMessageInfo
+
+func (m *UpdateUserInfoResp) GetCommonResp() *CommonResp {
+	if m != nil {
+		return m.CommonResp
+	}
+	return nil
+}
+
+type Conversation struct {
+	OwnerUserID          string   `protobuf:"bytes,1,opt,name=OwnerUserID" json:"OwnerUserID,omitempty"`
+	ConversationID       string   `protobuf:"bytes,2,opt,name=ConversationID" json:"ConversationID,omitempty"`
+	RecvMsgOpt           int32    `protobuf:"varint,3,opt,name=RecvMsgOpt" json:"RecvMsgOpt,omitempty"`
+	ConversationType     int32    `protobuf:"varint,4,opt,name=ConversationType" json:"ConversationType,omitempty"`
+	UserID               string   `protobuf:"bytes,5,opt,name=UserID" json:"UserID,omitempty"`
+	GroupID              string   `protobuf:"bytes,6,opt,name=GroupID" json:"GroupID,omitempty"`
+	UnreadCount          int32    `protobuf:"varint,7,opt,name=UnreadCount" json:"UnreadCount,omitempty"`
+	DraftTextTime        int64    `protobuf:"varint,8,opt,name=DraftTextTime" json:"DraftTextTime,omitempty"`
+	IsPinned             bool     `protobuf:"varint,9,opt,name=IsPinned" json:"IsPinned,omitempty"`
+	AttachedInfo         string   `protobuf:"bytes,10,opt,name=AttachedInfo" json:"AttachedInfo,omitempty"`
+	IsPrivateChat        bool     `protobuf:"varint,11,opt,name=IsPrivateChat" json:"IsPrivateChat,omitempty"`
+	Ex                   string   `protobuf:"bytes,12,opt,name=Ex" json:"Ex,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *Conversation) Reset()         { *m = Conversation{} }
+func (m *Conversation) String() string { return proto.CompactTextString(m) }
+func (*Conversation) ProtoMessage()    {}
+func (*Conversation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_user_6133bd34462fbb1a, []int{11}
+}
+func (m *Conversation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Conversation.Unmarshal(m, b)
+}
+func (m *Conversation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Conversation.Marshal(b, m, deterministic)
+}
+func (dst *Conversation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Conversation.Merge(dst, src)
+}
+func (m *Conversation) XXX_Size() int {
+	return xxx_messageInfo_Conversation.Size(m)
+}
+func (m *Conversation) XXX_DiscardUnknown() {
+	xxx_messageInfo_Conversation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Conversation proto.InternalMessageInfo
+
+func (m *Conversation) GetOwnerUserID() string {
+	if m != nil {
+		return m.OwnerUserID
+	}
+	return ""
+}
+
+func (m *Conversation) GetConversationID() string {
+	if m != nil {
+		return m.ConversationID
+	}
+	return ""
+}
+
+func (m *Conversation) GetRecvMsgOpt() int32 {
+	if m != nil {
+		return m.RecvMsgOpt
+	}
+	return 0
+}
+
+func (m *Conversation) GetConversationType() int32 {
+	if m != nil {
+		return m.ConversationType
+	}
+	return 0
+}
+
+func (m *Conversation) GetUserID() string {
+	if m != nil {
+		return m.UserID
+	}
+	return ""
+}
+
+func (m *Conversation) GetGroupID() string {
+	if m != nil {
+		return m.GroupID
+	}
+	return ""
+}
+
+func (m *Conversation) GetUnreadCount() int32 {
+	if m != nil {
+		return m.UnreadCount
+	}
+	return 0
+}
+
+func (m *Conversation) GetDraftTextTime() int64 {
+	if m != nil {
+		return m.DraftTextTime
+	}
+	return 0
+}
+
+func (m *Conversation) GetIsPinned() bool {
+	if m != nil {
+		return m.IsPinned
+	}
+	return false
+}
+
+func (m *Conversation) GetAttachedInfo() string {
+	if m != nil {
+		return m.AttachedInfo
+	}
+	return ""
+}
+
+func (m *Conversation) GetIsPrivateChat() bool {
+	if m != nil {
+		return m.IsPrivateChat
+	}
+	return false
+}
+
+func (m *Conversation) GetEx() string {
+	if m != nil {
+		return m.Ex
+	}
+	return ""
+}
+
+type SetConversationReq struct {
+	Conversation         *Conversation `protobuf:"bytes,1,opt,name=Conversation" json:"Conversation,omitempty"`
+	NotificationType     int32         `protobuf:"varint,2,opt,name=notificationType" json:"notificationType,omitempty"`
+	OperationID          string        `protobuf:"bytes,3,opt,name=OperationID" json:"OperationID,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}      `json:"-"`
+	XXX_unrecognized     []byte        `json:"-"`
+	XXX_sizecache        int32         `json:"-"`
+}
+
+func (m *SetConversationReq) Reset()         { *m = SetConversationReq{} }
+func (m *SetConversationReq) String() string { return proto.CompactTextString(m) }
+func (*SetConversationReq) ProtoMessage()    {}
+func (*SetConversationReq) Descriptor() ([]byte, []int) {
+	return fileDescriptor_user_6133bd34462fbb1a, []int{12}
+}
+func (m *SetConversationReq) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SetConversationReq.Unmarshal(m, b)
+}
+func (m *SetConversationReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SetConversationReq.Marshal(b, m, deterministic)
+}
+func (dst *SetConversationReq) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SetConversationReq.Merge(dst, src)
+}
+func (m *SetConversationReq) XXX_Size() int {
+	return xxx_messageInfo_SetConversationReq.Size(m)
+}
+func (m *SetConversationReq) XXX_DiscardUnknown() {
+	xxx_messageInfo_SetConversationReq.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SetConversationReq proto.InternalMessageInfo
+
+func (m *SetConversationReq) GetConversation() *Conversation {
+	if m != nil {
+		return m.Conversation
+	}
+	return nil
+}
+
+func (m *SetConversationReq) GetNotificationType() int32 {
+	if m != nil {
+		return m.NotificationType
+	}
+	return 0
+}
+
+func (m *SetConversationReq) GetOperationID() string {
+	if m != nil {
+		return m.OperationID
+	}
+	return ""
+}
+
+type SetConversationResp struct {
+	CommonResp           *CommonResp `protobuf:"bytes,1,opt,name=commonResp" json:"commonResp,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}    `json:"-"`
+	XXX_unrecognized     []byte      `json:"-"`
+	XXX_sizecache        int32       `json:"-"`
+}
+
+func (m *SetConversationResp) Reset()         { *m = SetConversationResp{} }
+func (m *SetConversationResp) String() string { return proto.CompactTextString(m) }
+func (*SetConversationResp) ProtoMessage()    {}
+func (*SetConversationResp) Descriptor() ([]byte, []int) {
+	return fileDescriptor_user_6133bd34462fbb1a, []int{13}
+}
+func (m *SetConversationResp) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SetConversationResp.Unmarshal(m, b)
+}
+func (m *SetConversationResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SetConversationResp.Marshal(b, m, deterministic)
+}
+func (dst *SetConversationResp) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SetConversationResp.Merge(dst, src)
+}
+func (m *SetConversationResp) XXX_Size() int {
+	return xxx_messageInfo_SetConversationResp.Size(m)
+}
+func (m *SetConversationResp) XXX_DiscardUnknown() {
+	xxx_messageInfo_SetConversationResp.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SetConversationResp proto.InternalMessageInfo
+
+func (m *SetConversationResp) GetCommonResp() *CommonResp {
+	if m != nil {
+		return m.CommonResp
+	}
+	return nil
+}
+
+type SetRecvMsgOptReq struct {
+	OwnerUserID          string   `protobuf:"bytes,1,opt,name=OwnerUserID" json:"OwnerUserID,omitempty"`
+	ConversationID       string   `protobuf:"bytes,2,opt,name=ConversationID" json:"ConversationID,omitempty"`
+	RecvMsgOpt           int32    `protobuf:"varint,3,opt,name=RecvMsgOpt" json:"RecvMsgOpt,omitempty"`
+	NotificationType     int32    `protobuf:"varint,4,opt,name=notificationType" json:"notificationType,omitempty"`
+	OperationID          string   `protobuf:"bytes,5,opt,name=OperationID" json:"OperationID,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *SetRecvMsgOptReq) Reset()         { *m = SetRecvMsgOptReq{} }
+func (m *SetRecvMsgOptReq) String() string { return proto.CompactTextString(m) }
+func (*SetRecvMsgOptReq) ProtoMessage()    {}
+func (*SetRecvMsgOptReq) Descriptor() ([]byte, []int) {
+	return fileDescriptor_user_6133bd34462fbb1a, []int{14}
+}
+func (m *SetRecvMsgOptReq) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SetRecvMsgOptReq.Unmarshal(m, b)
+}
+func (m *SetRecvMsgOptReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SetRecvMsgOptReq.Marshal(b, m, deterministic)
+}
+func (dst *SetRecvMsgOptReq) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SetRecvMsgOptReq.Merge(dst, src)
+}
+func (m *SetRecvMsgOptReq) XXX_Size() int {
+	return xxx_messageInfo_SetRecvMsgOptReq.Size(m)
+}
+func (m *SetRecvMsgOptReq) XXX_DiscardUnknown() {
+	xxx_messageInfo_SetRecvMsgOptReq.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SetRecvMsgOptReq proto.InternalMessageInfo
+
+func (m *SetRecvMsgOptReq) GetOwnerUserID() string {
+	if m != nil {
+		return m.OwnerUserID
+	}
+	return ""
+}
+
+func (m *SetRecvMsgOptReq) GetConversationID() string {
+	if m != nil {
+		return m.ConversationID
+	}
+	return ""
+}
+
+func (m *SetRecvMsgOptReq) GetRecvMsgOpt() int32 {
+	if m != nil {
+		return m.RecvMsgOpt
+	}
+	return 0
+}
+
+func (m *SetRecvMsgOptReq) GetNotificationType() int32 {
+	if m != nil {
+		return m.NotificationType
+	}
+	return 0
+}
+
+func (m *SetRecvMsgOptReq) GetOperationID() string {
+	if m != nil {
+		return m.OperationID
+	}
+	return ""
+}
+
+type SetRecvMsgOptResp struct {
+	CommonResp           *CommonResp `protobuf:"bytes,1,opt,name=commonResp" json:"commonResp,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}    `json:"-"`
+	XXX_unrecognized     []byte      `json:"-"`
+	XXX_sizecache        int32       `json:"-"`
+}
+
+func (m *SetRecvMsgOptResp) Reset()         { *m = SetRecvMsgOptResp{} }
+func (m *SetRecvMsgOptResp) String() string { return proto.CompactTextString(m) }
+func (*SetRecvMsgOptResp) ProtoMessage()    {}
+func (*SetRecvMsgOptResp) Descriptor() ([]byte, []int) {
+	return fileDescriptor_user_6133bd34462fbb1a, []int{15}
+}
+func (m *SetRecvMsgOptResp) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SetRecvMsgOptResp.Unmarshal(m, b)
+}
+func (m *SetRecvMsgOptResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SetRecvMsgOptResp.Marshal(b, m, deterministic)
+}
+func (dst *SetRecvMsgOptResp) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SetRecvMsgOptResp.Merge(dst, src)
+}
+func (m *SetRecvMsgOptResp) XXX_Size() int {
+	return xxx_messageInfo_SetRecvMsgOptResp.Size(m)
+}
+func (m *SetRecvMsgOptResp) XXX_DiscardUnknown() {
+	xxx_messageInfo_SetRecvMsgOptResp.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SetRecvMsgOptResp proto.InternalMessageInfo
+
+func (m *SetRecvMsgOptResp) GetCommonResp() *CommonResp {
+	if m != nil {
+		return m.CommonResp
+	}
+	return nil
+}
+
+type GetConversationReq struct {
+	ConversationID       string   `protobuf:"bytes,1,opt,name=ConversationID" json:"ConversationID,omitempty"`
+	OwnerUserID          string   `protobuf:"bytes,2,opt,name=OwnerUserID" json:"OwnerUserID,omitempty"`
+	OperationID          string   `protobuf:"bytes,3,opt,name=OperationID" json:"OperationID,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetConversationReq) Reset()         { *m = GetConversationReq{} }
+func (m *GetConversationReq) String() string { return proto.CompactTextString(m) }
+func (*GetConversationReq) ProtoMessage()    {}
+func (*GetConversationReq) Descriptor() ([]byte, []int) {
+	return fileDescriptor_user_6133bd34462fbb1a, []int{16}
+}
+func (m *GetConversationReq) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetConversationReq.Unmarshal(m, b)
+}
+func (m *GetConversationReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetConversationReq.Marshal(b, m, deterministic)
+}
+func (dst *GetConversationReq) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetConversationReq.Merge(dst, src)
+}
+func (m *GetConversationReq) XXX_Size() int {
+	return xxx_messageInfo_GetConversationReq.Size(m)
+}
+func (m *GetConversationReq) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetConversationReq.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetConversationReq proto.InternalMessageInfo
+
+func (m *GetConversationReq) GetConversationID() string {
+	if m != nil {
+		return m.ConversationID
+	}
+	return ""
+}
+
+func (m *GetConversationReq) GetOwnerUserID() string {
+	if m != nil {
+		return m.OwnerUserID
+	}
+	return ""
+}
+
+func (m *GetConversationReq) GetOperationID() string {
+	if m != nil {
+		return m.OperationID
+	}
+	return ""
+}
+
+type GetConversationResp struct {
+	CommonResp           *CommonResp   `protobuf:"bytes,1,opt,name=commonResp" json:"commonResp,omitempty"`
+	Conversation         *Conversation `protobuf:"bytes,2,opt,name=Conversation" json:"Conversation,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}      `json:"-"`
+	XXX_unrecognized     []byte        `json:"-"`
+	XXX_sizecache        int32         `json:"-"`
+}
+
+func (m *GetConversationResp) Reset()         { *m = GetConversationResp{} }
+func (m *GetConversationResp) String() string { return proto.CompactTextString(m) }
+func (*GetConversationResp) ProtoMessage()    {}
+func (*GetConversationResp) Descriptor() ([]byte, []int) {
+	return fileDescriptor_user_6133bd34462fbb1a, []int{17}
+}
+func (m *GetConversationResp) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetConversationResp.Unmarshal(m, b)
+}
+func (m *GetConversationResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetConversationResp.Marshal(b, m, deterministic)
+}
+func (dst *GetConversationResp) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetConversationResp.Merge(dst, src)
+}
+func (m *GetConversationResp) XXX_Size() int {
+	return xxx_messageInfo_GetConversationResp.Size(m)
+}
+func (m *GetConversationResp) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetConversationResp.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetConversationResp proto.InternalMessageInfo
+
+func (m *GetConversationResp) GetCommonResp() *CommonResp {
+	if m != nil {
+		return m.CommonResp
+	}
+	return nil
+}
+
+func (m *GetConversationResp) GetConversation() *Conversation {
+	if m != nil {
+		return m.Conversation
+	}
+	return nil
+}
+
+type GetConversationsReq struct {
+	OwnerUserID          string   `protobuf:"bytes,1,opt,name=OwnerUserID" json:"OwnerUserID,omitempty"`
+	ConversationIDs      []string `protobuf:"bytes,2,rep,name=ConversationIDs" json:"ConversationIDs,omitempty"`
+	OperationID          string   `protobuf:"bytes,3,opt,name=OperationID" json:"OperationID,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetConversationsReq) Reset()         { *m = GetConversationsReq{} }
+func (m *GetConversationsReq) String() string { return proto.CompactTextString(m) }
+func (*GetConversationsReq) ProtoMessage()    {}
+func (*GetConversationsReq) Descriptor() ([]byte, []int) {
+	return fileDescriptor_user_6133bd34462fbb1a, []int{18}
+}
+func (m *GetConversationsReq) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetConversationsReq.Unmarshal(m, b)
+}
+func (m *GetConversationsReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetConversationsReq.Marshal(b, m, deterministic)
+}
+func (dst *GetConversationsReq) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetConversationsReq.Merge(dst, src)
+}
+func (m *GetConversationsReq) XXX_Size() int {
+	return xxx_messageInfo_GetConversationsReq.Size(m)
+}
+func (m *GetConversationsReq) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetConversationsReq.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetConversationsReq proto.InternalMessageInfo
+
+func (m *GetConversationsReq) GetOwnerUserID() string {
+	if m != nil {
+		return m.OwnerUserID
+	}
+	return ""
+}
+
+func (m *GetConversationsReq) GetConversationIDs() []string {
+	if m != nil {
+		return m.ConversationIDs
+	}
+	return nil
+}
+
+func (m *GetConversationsReq) GetOperationID() string {
+	if m != nil {
+		return m.OperationID
+	}
+	return ""
+}
+
+type GetConversationsResp struct {
+	CommonResp           *CommonResp     `protobuf:"bytes,1,opt,name=commonResp" json:"commonResp,omitempty"`
+	Conversations        []*Conversation `protobuf:"bytes,2,rep,name=Conversations" json:"Conversations,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}        `json:"-"`
+	XXX_unrecognized     []byte          `json:"-"`
+	XXX_sizecache        int32           `json:"-"`
+}
+
+func (m *GetConversationsResp) Reset()         { *m = GetConversationsResp{} }
+func (m *GetConversationsResp) String() string { return proto.CompactTextString(m) }
+func (*GetConversationsResp) ProtoMessage()    {}
+func (*GetConversationsResp) Descriptor() ([]byte, []int) {
+	return fileDescriptor_user_6133bd34462fbb1a, []int{19}
+}
+func (m *GetConversationsResp) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetConversationsResp.Unmarshal(m, b)
+}
+func (m *GetConversationsResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetConversationsResp.Marshal(b, m, deterministic)
+}
+func (dst *GetConversationsResp) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetConversationsResp.Merge(dst, src)
+}
+func (m *GetConversationsResp) XXX_Size() int {
+	return xxx_messageInfo_GetConversationsResp.Size(m)
+}
+func (m *GetConversationsResp) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetConversationsResp.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetConversationsResp proto.InternalMessageInfo
+
+func (m *GetConversationsResp) GetCommonResp() *CommonResp {
+	if m != nil {
+		return m.CommonResp
+	}
+	return nil
+}
+
+func (m *GetConversationsResp) GetConversations() []*Conversation {
+	if m != nil {
+		return m.Conversations
+	}
+	return nil
+}
+
+type GetAllConversationsReq struct {
+	OwnerUserID          string   `protobuf:"bytes,1,opt,name=OwnerUserID" json:"OwnerUserID,omitempty"`
+	OperationID          string   `protobuf:"bytes,2,opt,name=OperationID" json:"OperationID,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetAllConversationsReq) Reset()         { *m = GetAllConversationsReq{} }
+func (m *GetAllConversationsReq) String() string { return proto.CompactTextString(m) }
+func (*GetAllConversationsReq) ProtoMessage()    {}
+func (*GetAllConversationsReq) Descriptor() ([]byte, []int) {
+	return fileDescriptor_user_6133bd34462fbb1a, []int{20}
+}
+func (m *GetAllConversationsReq) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetAllConversationsReq.Unmarshal(m, b)
+}
+func (m *GetAllConversationsReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetAllConversationsReq.Marshal(b, m, deterministic)
+}
+func (dst *GetAllConversationsReq) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetAllConversationsReq.Merge(dst, src)
+}
+func (m *GetAllConversationsReq) XXX_Size() int {
+	return xxx_messageInfo_GetAllConversationsReq.Size(m)
+}
+func (m *GetAllConversationsReq) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetAllConversationsReq.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetAllConversationsReq proto.InternalMessageInfo
+
+func (m *GetAllConversationsReq) GetOwnerUserID() string {
+	if m != nil {
+		return m.OwnerUserID
+	}
+	return ""
+}
+
+func (m *GetAllConversationsReq) GetOperationID() string {
+	if m != nil {
+		return m.OperationID
+	}
+	return ""
+}
+
+type GetAllConversationsResp struct {
+	CommonResp           *CommonResp     `protobuf:"bytes,1,opt,name=commonResp" json:"commonResp,omitempty"`
+	Conversations        []*Conversation `protobuf:"bytes,2,rep,name=Conversations" json:"Conversations,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}        `json:"-"`
+	XXX_unrecognized     []byte          `json:"-"`
+	XXX_sizecache        int32           `json:"-"`
+}
+
+func (m *GetAllConversationsResp) Reset()         { *m = GetAllConversationsResp{} }
+func (m *GetAllConversationsResp) String() string { return proto.CompactTextString(m) }
+func (*GetAllConversationsResp) ProtoMessage()    {}
+func (*GetAllConversationsResp) Descriptor() ([]byte, []int) {
+	return fileDescriptor_user_6133bd34462fbb1a, []int{21}
+}
+func (m *GetAllConversationsResp) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetAllConversationsResp.Unmarshal(m, b)
+}
+func (m *GetAllConversationsResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetAllConversationsResp.Marshal(b, m, deterministic)
+}
+func (dst *GetAllConversationsResp) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetAllConversationsResp.Merge(dst, src)
+}
+func (m *GetAllConversationsResp) XXX_Size() int {
+	return xxx_messageInfo_GetAllConversationsResp.Size(m)
+}
+func (m *GetAllConversationsResp) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetAllConversationsResp.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetAllConversationsResp proto.InternalMessageInfo
+
+func (m *GetAllConversationsResp) GetCommonResp() *CommonResp {
+	if m != nil {
+		return m.CommonResp
+	}
+	return nil
+}
+
+func (m *GetAllConversationsResp) GetConversations() []*Conversation {
+	if m != nil {
+		return m.Conversations
+	}
+	return nil
+}
+
+type BatchSetConversationsReq struct {
+	Conversations        []*Conversation `protobuf:"bytes,1,rep,name=Conversations" json:"Conversations,omitempty"`
+	OwnerUserID          string          `protobuf:"bytes,2,opt,name=OwnerUserID" json:"OwnerUserID,omitempty"`
+	NotificationType     int32           `protobuf:"varint,3,opt,name=notificationType" json:"notificationType,omitempty"`
+	OperationID          string          `protobuf:"bytes,4,opt,name=OperationID" json:"OperationID,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}        `json:"-"`
+	XXX_unrecognized     []byte          `json:"-"`
+	XXX_sizecache        int32           `json:"-"`
+}
+
+func (m *BatchSetConversationsReq) Reset()         { *m = BatchSetConversationsReq{} }
+func (m *BatchSetConversationsReq) String() string { return proto.CompactTextString(m) }
+func (*BatchSetConversationsReq) ProtoMessage()    {}
+func (*BatchSetConversationsReq) Descriptor() ([]byte, []int) {
+	return fileDescriptor_user_6133bd34462fbb1a, []int{22}
+}
+func (m *BatchSetConversationsReq) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_BatchSetConversationsReq.Unmarshal(m, b)
+}
+func (m *BatchSetConversationsReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_BatchSetConversationsReq.Marshal(b, m, deterministic)
+}
+func (dst *BatchSetConversationsReq) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_BatchSetConversationsReq.Merge(dst, src)
+}
+func (m *BatchSetConversationsReq) XXX_Size() int {
+	return xxx_messageInfo_BatchSetConversationsReq.Size(m)
+}
+func (m *BatchSetConversationsReq) XXX_DiscardUnknown() {
+	xxx_messageInfo_BatchSetConversationsReq.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_BatchSetConversationsReq proto.InternalMessageInfo
+
+func (m *BatchSetConversationsReq) GetConversations() []*Conversation {
+	if m != nil {
+		return m.Conversations
+	}
+	return nil
+}
+
+func (m *BatchSetConversationsReq) GetOwnerUserID() string {
+	if m != nil {
+		return m.OwnerUserID
+	}
+	return ""
+}
+
+func (m *BatchSetConversationsReq) GetNotificationType() int32 {
+	if m != nil {
+		return m.NotificationType
+	}
+	return 0
+}
+
+func (m *BatchSetConversationsReq) GetOperationID() string {
+	if m != nil {
+		return m.OperationID
+	}
+	return ""
+}
+
+type BatchSetConversationsResp struct {
+	CommonResp           *CommonResp `protobuf:"bytes,1,opt,name=commonResp" json:"commonResp,omitempty"`
+	Success              []string    `protobuf:"bytes,2,rep,name=Success" json:"Success,omitempty"`
+	Failed               []string    `protobuf:"bytes,3,rep,name=Failed" json:"Failed,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}    `json:"-"`
+	XXX_unrecognized     []byte      `json:"-"`
+	XXX_sizecache        int32       `json:"-"`
+}
+
+func (m *BatchSetConversationsResp) Reset()         { *m = BatchSetConversationsResp{} }
+func (m *BatchSetConversationsResp) String() string { return proto.CompactTextString(m) }
+func (*BatchSetConversationsResp) ProtoMessage()    {}
+func (*BatchSetConversationsResp) Descriptor() ([]byte, []int) {
+	return fileDescriptor_user_6133bd34462fbb1a, []int{23}
+}
+func (m *BatchSetConversationsResp) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_BatchSetConversationsResp.Unmarshal(m, b)
+}
+func (m *BatchSetConversationsResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_BatchSetConversationsResp.Marshal(b, m, deterministic)
+}
+func (dst *BatchSetConversationsResp) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_BatchSetConversationsResp.Merge(dst, src)
+}
+func (m *BatchSetConversationsResp) XXX_Size() int {
+	return xxx_messageInfo_BatchSetConversationsResp.Size(m)
+}
+func (m *BatchSetConversationsResp) XXX_DiscardUnknown() {
+	xxx_messageInfo_BatchSetConversationsResp.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_BatchSetConversationsResp proto.InternalMessageInfo
+
+func (m *BatchSetConversationsResp) GetCommonResp() *CommonResp {
+	if m != nil {
+		return m.CommonResp
+	}
+	return nil
+}
+
+func (m *BatchSetConversationsResp) GetSuccess() []string {
+	if m != nil {
+		return m.Success
+	}
+	return nil
+}
+
+func (m *BatchSetConversationsResp) GetFailed() []string {
+	if m != nil {
+		return m.Failed
+	}
+	return nil
+}
+
+type ResignUserReq struct {
+	UserId               string   `protobuf:"bytes,1,opt,name=UserId" json:"UserId,omitempty"`
+	OperationID          string   `protobuf:"bytes,2,opt,name=OperationID" json:"OperationID,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ResignUserReq) Reset()         { *m = ResignUserReq{} }
+func (m *ResignUserReq) String() string { return proto.CompactTextString(m) }
+func (*ResignUserReq) ProtoMessage()    {}
+func (*ResignUserReq) Descriptor() ([]byte, []int) {
+	return fileDescriptor_user_6133bd34462fbb1a, []int{24}
+}
+func (m *ResignUserReq) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ResignUserReq.Unmarshal(m, b)
+}
+func (m *ResignUserReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ResignUserReq.Marshal(b, m, deterministic)
+}
+func (dst *ResignUserReq) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ResignUserReq.Merge(dst, src)
+}
+func (m *ResignUserReq) XXX_Size() int {
+	return xxx_messageInfo_ResignUserReq.Size(m)
+}
+func (m *ResignUserReq) XXX_DiscardUnknown() {
+	xxx_messageInfo_ResignUserReq.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ResignUserReq proto.InternalMessageInfo
+
+func (m *ResignUserReq) GetUserId() string {
+	if m != nil {
+		return m.UserId
+	}
+	return ""
+}
+
+func (m *ResignUserReq) GetOperationID() string {
+	if m != nil {
+		return m.OperationID
+	}
+	return ""
+}
+
+type ResignUserResp struct {
+	CommonResp           *CommonResp `protobuf:"bytes,1,opt,name=commonResp" json:"commonResp,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}    `json:"-"`
+	XXX_unrecognized     []byte      `json:"-"`
+	XXX_sizecache        int32       `json:"-"`
+}
+
+func (m *ResignUserResp) Reset()         { *m = ResignUserResp{} }
+func (m *ResignUserResp) String() string { return proto.CompactTextString(m) }
+func (*ResignUserResp) ProtoMessage()    {}
+func (*ResignUserResp) Descriptor() ([]byte, []int) {
+	return fileDescriptor_user_6133bd34462fbb1a, []int{25}
+}
+func (m *ResignUserResp) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ResignUserResp.Unmarshal(m, b)
+}
+func (m *ResignUserResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ResignUserResp.Marshal(b, m, deterministic)
+}
+func (dst *ResignUserResp) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ResignUserResp.Merge(dst, src)
+}
+func (m *ResignUserResp) XXX_Size() int {
+	return xxx_messageInfo_ResignUserResp.Size(m)
+}
+func (m *ResignUserResp) XXX_DiscardUnknown() {
+	xxx_messageInfo_ResignUserResp.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ResignUserResp proto.InternalMessageInfo
+
+func (m *ResignUserResp) GetCommonResp() *CommonResp {
+	if m != nil {
+		return m.CommonResp
+	}
+	return nil
+}
+
+type GetUserByIdReq struct {
+	UserId               string   `protobuf:"bytes,1,opt,name=UserId" json:"UserId,omitempty"`
+	OperationID          string   `protobuf:"bytes,2,opt,name=OperationID" json:"OperationID,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetUserByIdReq) Reset()         { *m = GetUserByIdReq{} }
+func (m *GetUserByIdReq) String() string { return proto.CompactTextString(m) }
+func (*GetUserByIdReq) ProtoMessage()    {}
+func (*GetUserByIdReq) Descriptor() ([]byte, []int) {
+	return fileDescriptor_user_6133bd34462fbb1a, []int{26}
+}
+func (m *GetUserByIdReq) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetUserByIdReq.Unmarshal(m, b)
+}
+func (m *GetUserByIdReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetUserByIdReq.Marshal(b, m, deterministic)
+}
+func (dst *GetUserByIdReq) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetUserByIdReq.Merge(dst, src)
+}
+func (m *GetUserByIdReq) XXX_Size() int {
+	return xxx_messageInfo_GetUserByIdReq.Size(m)
+}
+func (m *GetUserByIdReq) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetUserByIdReq.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetUserByIdReq proto.InternalMessageInfo
+
+func (m *GetUserByIdReq) GetUserId() string {
+	if m != nil {
+		return m.UserId
+	}
+	return ""
+}
+
+func (m *GetUserByIdReq) GetOperationID() string {
+	if m != nil {
+		return m.OperationID
+	}
+	return ""
+}
+
+type User struct {
+	ProfilePhoto         string   `protobuf:"bytes,1,opt,name=ProfilePhoto" json:"ProfilePhoto,omitempty"`
+	Nickname             string   `protobuf:"bytes,2,opt,name=Nickname" json:"Nickname,omitempty"`
+	UserId               string   `protobuf:"bytes,3,opt,name=UserId" json:"UserId,omitempty"`
+	CreateTime           string   `protobuf:"bytes,4,opt,name=CreateTime" json:"CreateTime,omitempty"`
+	IsBlock              bool     `protobuf:"varint,5,opt,name=IsBlock" json:"IsBlock,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *User) Reset()         { *m = User{} }
+func (m *User) String() string { return proto.CompactTextString(m) }
+func (*User) ProtoMessage()    {}
+func (*User) Descriptor() ([]byte, []int) {
+	return fileDescriptor_user_6133bd34462fbb1a, []int{27}
+}
+func (m *User) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_User.Unmarshal(m, b)
+}
+func (m *User) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_User.Marshal(b, m, deterministic)
+}
+func (dst *User) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_User.Merge(dst, src)
+}
+func (m *User) XXX_Size() int {
+	return xxx_messageInfo_User.Size(m)
+}
+func (m *User) XXX_DiscardUnknown() {
+	xxx_messageInfo_User.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_User proto.InternalMessageInfo
+
+func (m *User) GetProfilePhoto() string {
+	if m != nil {
+		return m.ProfilePhoto
+	}
+	return ""
+}
+
+func (m *User) GetNickname() string {
+	if m != nil {
+		return m.Nickname
+	}
+	return ""
+}
+
+func (m *User) GetUserId() string {
+	if m != nil {
+		return m.UserId
+	}
+	return ""
+}
+
+func (m *User) GetCreateTime() string {
+	if m != nil {
+		return m.CreateTime
+	}
+	return ""
+}
+
+func (m *User) GetIsBlock() bool {
+	if m != nil {
+		return m.IsBlock
+	}
+	return false
+}
+
+type GetUserByIdResp struct {
+	CommonResp           *CommonResp `protobuf:"bytes,1,opt,name=CommonResp" json:"CommonResp,omitempty"`
+	User                 *User       `protobuf:"bytes,2,opt,name=user" json:"user,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}    `json:"-"`
+	XXX_unrecognized     []byte      `json:"-"`
+	XXX_sizecache        int32       `json:"-"`
+}
+
+func (m *GetUserByIdResp) Reset()         { *m = GetUserByIdResp{} }
+func (m *GetUserByIdResp) String() string { return proto.CompactTextString(m) }
+func (*GetUserByIdResp) ProtoMessage()    {}
+func (*GetUserByIdResp) Descriptor() ([]byte, []int) {
+	return fileDescriptor_user_6133bd34462fbb1a, []int{28}
+}
+func (m *GetUserByIdResp) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetUserByIdResp.Unmarshal(m, b)
+}
+func (m *GetUserByIdResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetUserByIdResp.Marshal(b, m, deterministic)
+}
+func (dst *GetUserByIdResp) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetUserByIdResp.Merge(dst, src)
+}
+func (m *GetUserByIdResp) XXX_Size() int {
+	return xxx_messageInfo_GetUserByIdResp.Size(m)
+}
+func (m *GetUserByIdResp) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetUserByIdResp.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetUserByIdResp proto.InternalMessageInfo
+
+func (m *GetUserByIdResp) GetCommonResp() *CommonResp {
+	if m != nil {
+		return m.CommonResp
+	}
+	return nil
+}
+
+func (m *GetUserByIdResp) GetUser() *User {
+	if m != nil {
+		return m.User
+	}
+	return nil
+}
+
+type GetUsersByNameReq struct {
+	UserName             string                    `protobuf:"bytes,1,opt,name=UserName" json:"UserName,omitempty"`
+	Pagination           *sdk_ws.RequestPagination `protobuf:"bytes,2,opt,name=Pagination" json:"Pagination,omitempty"`
+	OperationID          string                    `protobuf:"bytes,3,opt,name=OperationID" json:"OperationID,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                  `json:"-"`
+	XXX_unrecognized     []byte                    `json:"-"`
+	XXX_sizecache        int32                     `json:"-"`
+}
+
+func (m *GetUsersByNameReq) Reset()         { *m = GetUsersByNameReq{} }
+func (m *GetUsersByNameReq) String() string { return proto.CompactTextString(m) }
+func (*GetUsersByNameReq) ProtoMessage()    {}
+func (*GetUsersByNameReq) Descriptor() ([]byte, []int) {
+	return fileDescriptor_user_6133bd34462fbb1a, []int{29}
+}
+func (m *GetUsersByNameReq) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetUsersByNameReq.Unmarshal(m, b)
+}
+func (m *GetUsersByNameReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetUsersByNameReq.Marshal(b, m, deterministic)
+}
+func (dst *GetUsersByNameReq) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetUsersByNameReq.Merge(dst, src)
+}
+func (m *GetUsersByNameReq) XXX_Size() int {
+	return xxx_messageInfo_GetUsersByNameReq.Size(m)
+}
+func (m *GetUsersByNameReq) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetUsersByNameReq.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetUsersByNameReq proto.InternalMessageInfo
+
+func (m *GetUsersByNameReq) GetUserName() string {
+	if m != nil {
+		return m.UserName
+	}
+	return ""
+}
+
+func (m *GetUsersByNameReq) GetPagination() *sdk_ws.RequestPagination {
+	if m != nil {
+		return m.Pagination
+	}
+	return nil
+}
+
+func (m *GetUsersByNameReq) GetOperationID() string {
+	if m != nil {
+		return m.OperationID
+	}
+	return ""
+}
+
+type GetUsersByNameResp struct {
+	Users                []*User                    `protobuf:"bytes,1,rep,name=users" json:"users,omitempty"`
+	Pagination           *sdk_ws.ResponsePagination `protobuf:"bytes,2,opt,name=Pagination" json:"Pagination,omitempty"`
+	UserNums             int32                      `protobuf:"varint,3,opt,name=UserNums" json:"UserNums,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                   `json:"-"`
+	XXX_unrecognized     []byte                     `json:"-"`
+	XXX_sizecache        int32                      `json:"-"`
+}
+
+func (m *GetUsersByNameResp) Reset()         { *m = GetUsersByNameResp{} }
+func (m *GetUsersByNameResp) String() string { return proto.CompactTextString(m) }
+func (*GetUsersByNameResp) ProtoMessage()    {}
+func (*GetUsersByNameResp) Descriptor() ([]byte, []int) {
+	return fileDescriptor_user_6133bd34462fbb1a, []int{30}
+}
+func (m *GetUsersByNameResp) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetUsersByNameResp.Unmarshal(m, b)
+}
+func (m *GetUsersByNameResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetUsersByNameResp.Marshal(b, m, deterministic)
+}
+func (dst *GetUsersByNameResp) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetUsersByNameResp.Merge(dst, src)
+}
+func (m *GetUsersByNameResp) XXX_Size() int {
+	return xxx_messageInfo_GetUsersByNameResp.Size(m)
+}
+func (m *GetUsersByNameResp) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetUsersByNameResp.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetUsersByNameResp proto.InternalMessageInfo
+
+func (m *GetUsersByNameResp) GetUsers() []*User {
+	if m != nil {
+		return m.Users
+	}
+	return nil
+}
+
+func (m *GetUsersByNameResp) GetPagination() *sdk_ws.ResponsePagination {
+	if m != nil {
+		return m.Pagination
+	}
+	return nil
+}
+
+func (m *GetUsersByNameResp) GetUserNums() int32 {
+	if m != nil {
+		return m.UserNums
+	}
+	return 0
+}
+
+type AlterUserReq struct {
+	UserId               string   `protobuf:"bytes,1,opt,name=UserId" json:"UserId,omitempty"`
+	OperationID          string   `protobuf:"bytes,2,opt,name=OperationID" json:"OperationID,omitempty"`
+	PhoneNumber          int64    `protobuf:"varint,3,opt,name=PhoneNumber" json:"PhoneNumber,omitempty"`
+	Nickname             string   `protobuf:"bytes,4,opt,name=Nickname" json:"Nickname,omitempty"`
+	Email                string   `protobuf:"bytes,5,opt,name=Email" json:"Email,omitempty"`
+	OpUserId             string   `protobuf:"bytes,6,opt,name=OpUserId" json:"OpUserId,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AlterUserReq) Reset()         { *m = AlterUserReq{} }
+func (m *AlterUserReq) String() string { return proto.CompactTextString(m) }
+func (*AlterUserReq) ProtoMessage()    {}
+func (*AlterUserReq) Descriptor() ([]byte, []int) {
+	return fileDescriptor_user_6133bd34462fbb1a, []int{31}
+}
+func (m *AlterUserReq) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AlterUserReq.Unmarshal(m, b)
+}
+func (m *AlterUserReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AlterUserReq.Marshal(b, m, deterministic)
+}
+func (dst *AlterUserReq) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AlterUserReq.Merge(dst, src)
+}
+func (m *AlterUserReq) XXX_Size() int {
+	return xxx_messageInfo_AlterUserReq.Size(m)
+}
+func (m *AlterUserReq) XXX_DiscardUnknown() {
+	xxx_messageInfo_AlterUserReq.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AlterUserReq proto.InternalMessageInfo
+
+func (m *AlterUserReq) GetUserId() string {
+	if m != nil {
+		return m.UserId
+	}
+	return ""
+}
+
+func (m *AlterUserReq) GetOperationID() string {
+	if m != nil {
+		return m.OperationID
+	}
+	return ""
+}
+
+func (m *AlterUserReq) GetPhoneNumber() int64 {
+	if m != nil {
+		return m.PhoneNumber
+	}
+	return 0
+}
+
+func (m *AlterUserReq) GetNickname() string {
+	if m != nil {
+		return m.Nickname
+	}
+	return ""
+}
+
+func (m *AlterUserReq) GetEmail() string {
+	if m != nil {
+		return m.Email
+	}
+	return ""
+}
+
+func (m *AlterUserReq) GetOpUserId() string {
+	if m != nil {
+		return m.OpUserId
+	}
+	return ""
+}
+
+type AlterUserResp struct {
+	CommonResp           *CommonResp `protobuf:"bytes,1,opt,name=CommonResp" json:"CommonResp,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}    `json:"-"`
+	XXX_unrecognized     []byte      `json:"-"`
+	XXX_sizecache        int32       `json:"-"`
+}
+
+func (m *AlterUserResp) Reset()         { *m = AlterUserResp{} }
+func (m *AlterUserResp) String() string { return proto.CompactTextString(m) }
+func (*AlterUserResp) ProtoMessage()    {}
+func (*AlterUserResp) Descriptor() ([]byte, []int) {
+	return fileDescriptor_user_6133bd34462fbb1a, []int{32}
+}
+func (m *AlterUserResp) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AlterUserResp.Unmarshal(m, b)
+}
+func (m *AlterUserResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AlterUserResp.Marshal(b, m, deterministic)
+}
+func (dst *AlterUserResp) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AlterUserResp.Merge(dst, src)
+}
+func (m *AlterUserResp) XXX_Size() int {
+	return xxx_messageInfo_AlterUserResp.Size(m)
+}
+func (m *AlterUserResp) XXX_DiscardUnknown() {
+	xxx_messageInfo_AlterUserResp.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AlterUserResp proto.InternalMessageInfo
+
+func (m *AlterUserResp) GetCommonResp() *CommonResp {
+	if m != nil {
+		return m.CommonResp
+	}
+	return nil
+}
+
+type GetUsersReq struct {
+	OperationID          string                    `protobuf:"bytes,1,opt,name=OperationID" json:"OperationID,omitempty"`
+	Pagination           *sdk_ws.RequestPagination `protobuf:"bytes,2,opt,name=Pagination" json:"Pagination,omitempty"`
+	UserName             string                    `protobuf:"bytes,3,opt,name=UserName" json:"UserName,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                  `json:"-"`
+	XXX_unrecognized     []byte                    `json:"-"`
+	XXX_sizecache        int32                     `json:"-"`
+}
+
+func (m *GetUsersReq) Reset()         { *m = GetUsersReq{} }
+func (m *GetUsersReq) String() string { return proto.CompactTextString(m) }
+func (*GetUsersReq) ProtoMessage()    {}
+func (*GetUsersReq) Descriptor() ([]byte, []int) {
+	return fileDescriptor_user_6133bd34462fbb1a, []int{33}
+}
+func (m *GetUsersReq) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetUsersReq.Unmarshal(m, b)
+}
+func (m *GetUsersReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetUsersReq.Marshal(b, m, deterministic)
+}
+func (dst *GetUsersReq) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetUsersReq.Merge(dst, src)
+}
+func (m *GetUsersReq) XXX_Size() int {
+	return xxx_messageInfo_GetUsersReq.Size(m)
+}
+func (m *GetUsersReq) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetUsersReq.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetUsersReq proto.InternalMessageInfo
+
+func (m *GetUsersReq) GetOperationID() string {
+	if m != nil {
+		return m.OperationID
+	}
+	return ""
+}
+
+func (m *GetUsersReq) GetPagination() *sdk_ws.RequestPagination {
+	if m != nil {
+		return m.Pagination
+	}
+	return nil
+}
+
+func (m *GetUsersReq) GetUserName() string {
+	if m != nil {
+		return m.UserName
+	}
+	return ""
+}
+
+type GetUsersResp struct {
+	CommonResp           *CommonResp                `protobuf:"bytes,1,opt,name=CommonResp" json:"CommonResp,omitempty"`
+	User                 []*User                    `protobuf:"bytes,2,rep,name=user" json:"user,omitempty"`
+	Pagination           *sdk_ws.ResponsePagination `protobuf:"bytes,3,opt,name=Pagination" json:"Pagination,omitempty"`
+	UserNums             int32                      `protobuf:"varint,4,opt,name=UserNums" json:"UserNums,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                   `json:"-"`
+	XXX_unrecognized     []byte                     `json:"-"`
+	XXX_sizecache        int32                      `json:"-"`
+}
+
+func (m *GetUsersResp) Reset()         { *m = GetUsersResp{} }
+func (m *GetUsersResp) String() string { return proto.CompactTextString(m) }
+func (*GetUsersResp) ProtoMessage()    {}
+func (*GetUsersResp) Descriptor() ([]byte, []int) {
+	return fileDescriptor_user_6133bd34462fbb1a, []int{34}
+}
+func (m *GetUsersResp) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetUsersResp.Unmarshal(m, b)
+}
+func (m *GetUsersResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetUsersResp.Marshal(b, m, deterministic)
+}
+func (dst *GetUsersResp) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetUsersResp.Merge(dst, src)
+}
+func (m *GetUsersResp) XXX_Size() int {
+	return xxx_messageInfo_GetUsersResp.Size(m)
+}
+func (m *GetUsersResp) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetUsersResp.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetUsersResp proto.InternalMessageInfo
+
+func (m *GetUsersResp) GetCommonResp() *CommonResp {
+	if m != nil {
+		return m.CommonResp
+	}
+	return nil
+}
+
+func (m *GetUsersResp) GetUser() []*User {
+	if m != nil {
+		return m.User
+	}
+	return nil
+}
+
+func (m *GetUsersResp) GetPagination() *sdk_ws.ResponsePagination {
+	if m != nil {
+		return m.Pagination
+	}
+	return nil
+}
+
+func (m *GetUsersResp) GetUserNums() int32 {
+	if m != nil {
+		return m.UserNums
+	}
+	return 0
+}
+
+type AddUserReq struct {
+	OperationID          string   `protobuf:"bytes,1,opt,name=OperationID" json:"OperationID,omitempty"`
+	PhoneNumber          string   `protobuf:"bytes,2,opt,name=PhoneNumber" json:"PhoneNumber,omitempty"`
+	UserId               string   `protobuf:"bytes,3,opt,name=UserId" json:"UserId,omitempty"`
+	Name                 string   `protobuf:"bytes,4,opt,name=name" json:"name,omitempty"`
+	OpUserId             string   `protobuf:"bytes,5,opt,name=OpUserId" json:"OpUserId,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AddUserReq) Reset()         { *m = AddUserReq{} }
+func (m *AddUserReq) String() string { return proto.CompactTextString(m) }
+func (*AddUserReq) ProtoMessage()    {}
+func (*AddUserReq) Descriptor() ([]byte, []int) {
+	return fileDescriptor_user_6133bd34462fbb1a, []int{35}
+}
+func (m *AddUserReq) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AddUserReq.Unmarshal(m, b)
+}
+func (m *AddUserReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AddUserReq.Marshal(b, m, deterministic)
+}
+func (dst *AddUserReq) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AddUserReq.Merge(dst, src)
+}
+func (m *AddUserReq) XXX_Size() int {
+	return xxx_messageInfo_AddUserReq.Size(m)
+}
+func (m *AddUserReq) XXX_DiscardUnknown() {
+	xxx_messageInfo_AddUserReq.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AddUserReq proto.InternalMessageInfo
+
+func (m *AddUserReq) GetOperationID() string {
+	if m != nil {
+		return m.OperationID
+	}
+	return ""
+}
+
+func (m *AddUserReq) GetPhoneNumber() string {
+	if m != nil {
+		return m.PhoneNumber
+	}
+	return ""
+}
+
+func (m *AddUserReq) GetUserId() string {
+	if m != nil {
+		return m.UserId
+	}
+	return ""
+}
+
+func (m *AddUserReq) GetName() string {
+	if m != nil {
+		return m.Name
+	}
+	return ""
+}
+
+func (m *AddUserReq) GetOpUserId() string {
+	if m != nil {
+		return m.OpUserId
+	}
+	return ""
+}
+
+type AddUserResp struct {
+	CommonResp           *CommonResp `protobuf:"bytes,1,opt,name=CommonResp" json:"CommonResp,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}    `json:"-"`
+	XXX_unrecognized     []byte      `json:"-"`
+	XXX_sizecache        int32       `json:"-"`
+}
+
+func (m *AddUserResp) Reset()         { *m = AddUserResp{} }
+func (m *AddUserResp) String() string { return proto.CompactTextString(m) }
+func (*AddUserResp) ProtoMessage()    {}
+func (*AddUserResp) Descriptor() ([]byte, []int) {
+	return fileDescriptor_user_6133bd34462fbb1a, []int{36}
+}
+func (m *AddUserResp) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AddUserResp.Unmarshal(m, b)
+}
+func (m *AddUserResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AddUserResp.Marshal(b, m, deterministic)
+}
+func (dst *AddUserResp) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AddUserResp.Merge(dst, src)
+}
+func (m *AddUserResp) XXX_Size() int {
+	return xxx_messageInfo_AddUserResp.Size(m)
+}
+func (m *AddUserResp) XXX_DiscardUnknown() {
+	xxx_messageInfo_AddUserResp.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AddUserResp proto.InternalMessageInfo
+
+func (m *AddUserResp) GetCommonResp() *CommonResp {
+	if m != nil {
+		return m.CommonResp
+	}
+	return nil
+}
+
+type BlockUserReq struct {
+	UserId               string   `protobuf:"bytes,1,opt,name=UserId" json:"UserId,omitempty"`
+	EndDisableTime       string   `protobuf:"bytes,2,opt,name=EndDisableTime" json:"EndDisableTime,omitempty"`
+	OperationID          string   `protobuf:"bytes,3,opt,name=OperationID" json:"OperationID,omitempty"`
+	OpUserId             string   `protobuf:"bytes,4,opt,name=OpUserId" json:"OpUserId,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *BlockUserReq) Reset()         { *m = BlockUserReq{} }
+func (m *BlockUserReq) String() string { return proto.CompactTextString(m) }
+func (*BlockUserReq) ProtoMessage()    {}
+func (*BlockUserReq) Descriptor() ([]byte, []int) {
+	return fileDescriptor_user_6133bd34462fbb1a, []int{37}
+}
+func (m *BlockUserReq) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_BlockUserReq.Unmarshal(m, b)
+}
+func (m *BlockUserReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_BlockUserReq.Marshal(b, m, deterministic)
+}
+func (dst *BlockUserReq) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_BlockUserReq.Merge(dst, src)
+}
+func (m *BlockUserReq) XXX_Size() int {
+	return xxx_messageInfo_BlockUserReq.Size(m)
+}
+func (m *BlockUserReq) XXX_DiscardUnknown() {
+	xxx_messageInfo_BlockUserReq.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_BlockUserReq proto.InternalMessageInfo
+
+func (m *BlockUserReq) GetUserId() string {
+	if m != nil {
+		return m.UserId
+	}
+	return ""
+}
+
+func (m *BlockUserReq) GetEndDisableTime() string {
+	if m != nil {
+		return m.EndDisableTime
+	}
+	return ""
+}
+
+func (m *BlockUserReq) GetOperationID() string {
+	if m != nil {
+		return m.OperationID
+	}
+	return ""
+}
+
+func (m *BlockUserReq) GetOpUserId() string {
+	if m != nil {
+		return m.OpUserId
+	}
+	return ""
+}
+
+type BlockUserResp struct {
+	CommonResp           *CommonResp `protobuf:"bytes,1,opt,name=CommonResp" json:"CommonResp,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}    `json:"-"`
+	XXX_unrecognized     []byte      `json:"-"`
+	XXX_sizecache        int32       `json:"-"`
+}
+
+func (m *BlockUserResp) Reset()         { *m = BlockUserResp{} }
+func (m *BlockUserResp) String() string { return proto.CompactTextString(m) }
+func (*BlockUserResp) ProtoMessage()    {}
+func (*BlockUserResp) Descriptor() ([]byte, []int) {
+	return fileDescriptor_user_6133bd34462fbb1a, []int{38}
+}
+func (m *BlockUserResp) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_BlockUserResp.Unmarshal(m, b)
+}
+func (m *BlockUserResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_BlockUserResp.Marshal(b, m, deterministic)
+}
+func (dst *BlockUserResp) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_BlockUserResp.Merge(dst, src)
+}
+func (m *BlockUserResp) XXX_Size() int {
+	return xxx_messageInfo_BlockUserResp.Size(m)
+}
+func (m *BlockUserResp) XXX_DiscardUnknown() {
+	xxx_messageInfo_BlockUserResp.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_BlockUserResp proto.InternalMessageInfo
+
+func (m *BlockUserResp) GetCommonResp() *CommonResp {
+	if m != nil {
+		return m.CommonResp
+	}
+	return nil
+}
+
+type UnBlockUserReq struct {
+	UserId               string   `protobuf:"bytes,1,opt,name=UserId" json:"UserId,omitempty"`
+	OperationID          string   `protobuf:"bytes,2,opt,name=OperationID" json:"OperationID,omitempty"`
+	OpUserId             string   `protobuf:"bytes,3,opt,name=OpUserId" json:"OpUserId,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *UnBlockUserReq) Reset()         { *m = UnBlockUserReq{} }
+func (m *UnBlockUserReq) String() string { return proto.CompactTextString(m) }
+func (*UnBlockUserReq) ProtoMessage()    {}
+func (*UnBlockUserReq) Descriptor() ([]byte, []int) {
+	return fileDescriptor_user_6133bd34462fbb1a, []int{39}
+}
+func (m *UnBlockUserReq) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UnBlockUserReq.Unmarshal(m, b)
+}
+func (m *UnBlockUserReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UnBlockUserReq.Marshal(b, m, deterministic)
+}
+func (dst *UnBlockUserReq) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UnBlockUserReq.Merge(dst, src)
+}
+func (m *UnBlockUserReq) XXX_Size() int {
+	return xxx_messageInfo_UnBlockUserReq.Size(m)
+}
+func (m *UnBlockUserReq) XXX_DiscardUnknown() {
+	xxx_messageInfo_UnBlockUserReq.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UnBlockUserReq proto.InternalMessageInfo
+
+func (m *UnBlockUserReq) GetUserId() string {
+	if m != nil {
+		return m.UserId
+	}
+	return ""
+}
+
+func (m *UnBlockUserReq) GetOperationID() string {
+	if m != nil {
+		return m.OperationID
+	}
+	return ""
+}
+
+func (m *UnBlockUserReq) GetOpUserId() string {
+	if m != nil {
+		return m.OpUserId
+	}
+	return ""
+}
+
+type UnBlockUserResp struct {
+	CommonResp           *CommonResp `protobuf:"bytes,1,opt,name=CommonResp" json:"CommonResp,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}    `json:"-"`
+	XXX_unrecognized     []byte      `json:"-"`
+	XXX_sizecache        int32       `json:"-"`
+}
+
+func (m *UnBlockUserResp) Reset()         { *m = UnBlockUserResp{} }
+func (m *UnBlockUserResp) String() string { return proto.CompactTextString(m) }
+func (*UnBlockUserResp) ProtoMessage()    {}
+func (*UnBlockUserResp) Descriptor() ([]byte, []int) {
+	return fileDescriptor_user_6133bd34462fbb1a, []int{40}
+}
+func (m *UnBlockUserResp) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UnBlockUserResp.Unmarshal(m, b)
+}
+func (m *UnBlockUserResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UnBlockUserResp.Marshal(b, m, deterministic)
+}
+func (dst *UnBlockUserResp) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UnBlockUserResp.Merge(dst, src)
+}
+func (m *UnBlockUserResp) XXX_Size() int {
+	return xxx_messageInfo_UnBlockUserResp.Size(m)
+}
+func (m *UnBlockUserResp) XXX_DiscardUnknown() {
+	xxx_messageInfo_UnBlockUserResp.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UnBlockUserResp proto.InternalMessageInfo
+
+func (m *UnBlockUserResp) GetCommonResp() *CommonResp {
+	if m != nil {
+		return m.CommonResp
+	}
+	return nil
+}
+
+type GetBlockUsersReq struct {
+	Pagination           *sdk_ws.RequestPagination `protobuf:"bytes,1,opt,name=Pagination" json:"Pagination,omitempty"`
+	OperationID          string                    `protobuf:"bytes,2,opt,name=OperationID" json:"OperationID,omitempty"`
+	BlockUserNum         int32                     `protobuf:"varint,3,opt,name=BlockUserNum" json:"BlockUserNum,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                  `json:"-"`
+	XXX_unrecognized     []byte                    `json:"-"`
+	XXX_sizecache        int32                     `json:"-"`
+}
+
+func (m *GetBlockUsersReq) Reset()         { *m = GetBlockUsersReq{} }
+func (m *GetBlockUsersReq) String() string { return proto.CompactTextString(m) }
+func (*GetBlockUsersReq) ProtoMessage()    {}
+func (*GetBlockUsersReq) Descriptor() ([]byte, []int) {
+	return fileDescriptor_user_6133bd34462fbb1a, []int{41}
+}
+func (m *GetBlockUsersReq) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetBlockUsersReq.Unmarshal(m, b)
+}
+func (m *GetBlockUsersReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetBlockUsersReq.Marshal(b, m, deterministic)
+}
+func (dst *GetBlockUsersReq) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetBlockUsersReq.Merge(dst, src)
+}
+func (m *GetBlockUsersReq) XXX_Size() int {
+	return xxx_messageInfo_GetBlockUsersReq.Size(m)
+}
+func (m *GetBlockUsersReq) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetBlockUsersReq.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetBlockUsersReq proto.InternalMessageInfo
+
+func (m *GetBlockUsersReq) GetPagination() *sdk_ws.RequestPagination {
+	if m != nil {
+		return m.Pagination
+	}
+	return nil
+}
+
+func (m *GetBlockUsersReq) GetOperationID() string {
+	if m != nil {
+		return m.OperationID
+	}
+	return ""
+}
+
+func (m *GetBlockUsersReq) GetBlockUserNum() int32 {
+	if m != nil {
+		return m.BlockUserNum
+	}
+	return 0
+}
+
+type BlockUser struct {
+	User                 *User    `protobuf:"bytes,1,opt,name=User" json:"User,omitempty"`
+	BeginDisableTime     string   `protobuf:"bytes,2,opt,name=BeginDisableTime" json:"BeginDisableTime,omitempty"`
+	EndDisableTime       string   `protobuf:"bytes,3,opt,name=EndDisableTime" json:"EndDisableTime,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *BlockUser) Reset()         { *m = BlockUser{} }
+func (m *BlockUser) String() string { return proto.CompactTextString(m) }
+func (*BlockUser) ProtoMessage()    {}
+func (*BlockUser) Descriptor() ([]byte, []int) {
+	return fileDescriptor_user_6133bd34462fbb1a, []int{42}
+}
+func (m *BlockUser) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_BlockUser.Unmarshal(m, b)
+}
+func (m *BlockUser) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_BlockUser.Marshal(b, m, deterministic)
+}
+func (dst *BlockUser) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_BlockUser.Merge(dst, src)
+}
+func (m *BlockUser) XXX_Size() int {
+	return xxx_messageInfo_BlockUser.Size(m)
+}
+func (m *BlockUser) XXX_DiscardUnknown() {
+	xxx_messageInfo_BlockUser.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_BlockUser proto.InternalMessageInfo
+
+func (m *BlockUser) GetUser() *User {
+	if m != nil {
+		return m.User
+	}
+	return nil
+}
+
+func (m *BlockUser) GetBeginDisableTime() string {
+	if m != nil {
+		return m.BeginDisableTime
+	}
+	return ""
+}
+
+func (m *BlockUser) GetEndDisableTime() string {
+	if m != nil {
+		return m.EndDisableTime
+	}
+	return ""
+}
+
+type GetBlockUsersResp struct {
+	CommonResp           *CommonResp                `protobuf:"bytes,1,opt,name=CommonResp" json:"CommonResp,omitempty"`
+	BlockUsers           []*BlockUser               `protobuf:"bytes,2,rep,name=BlockUsers" json:"BlockUsers,omitempty"`
+	Pagination           *sdk_ws.ResponsePagination `protobuf:"bytes,3,opt,name=Pagination" json:"Pagination,omitempty"`
+	UserNums             int32                      `protobuf:"varint,4,opt,name=UserNums" json:"UserNums,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                   `json:"-"`
+	XXX_unrecognized     []byte                     `json:"-"`
+	XXX_sizecache        int32                      `json:"-"`
+}
+
+func (m *GetBlockUsersResp) Reset()         { *m = GetBlockUsersResp{} }
+func (m *GetBlockUsersResp) String() string { return proto.CompactTextString(m) }
+func (*GetBlockUsersResp) ProtoMessage()    {}
+func (*GetBlockUsersResp) Descriptor() ([]byte, []int) {
+	return fileDescriptor_user_6133bd34462fbb1a, []int{43}
+}
+func (m *GetBlockUsersResp) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetBlockUsersResp.Unmarshal(m, b)
+}
+func (m *GetBlockUsersResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetBlockUsersResp.Marshal(b, m, deterministic)
+}
+func (dst *GetBlockUsersResp) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetBlockUsersResp.Merge(dst, src)
+}
+func (m *GetBlockUsersResp) XXX_Size() int {
+	return xxx_messageInfo_GetBlockUsersResp.Size(m)
+}
+func (m *GetBlockUsersResp) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetBlockUsersResp.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetBlockUsersResp proto.InternalMessageInfo
+
+func (m *GetBlockUsersResp) GetCommonResp() *CommonResp {
+	if m != nil {
+		return m.CommonResp
+	}
+	return nil
+}
+
+func (m *GetBlockUsersResp) GetBlockUsers() []*BlockUser {
+	if m != nil {
+		return m.BlockUsers
+	}
+	return nil
+}
+
+func (m *GetBlockUsersResp) GetPagination() *sdk_ws.ResponsePagination {
+	if m != nil {
+		return m.Pagination
+	}
+	return nil
+}
+
+func (m *GetBlockUsersResp) GetUserNums() int32 {
+	if m != nil {
+		return m.UserNums
+	}
+	return 0
+}
+
+type GetBlockUserByIdReq struct {
+	UserId               string   `protobuf:"bytes,1,opt,name=User_id,json=UserId" json:"User_id,omitempty"`
+	OperationID          string   `protobuf:"bytes,2,opt,name=OperationID" json:"OperationID,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetBlockUserByIdReq) Reset()         { *m = GetBlockUserByIdReq{} }
+func (m *GetBlockUserByIdReq) String() string { return proto.CompactTextString(m) }
+func (*GetBlockUserByIdReq) ProtoMessage()    {}
+func (*GetBlockUserByIdReq) Descriptor() ([]byte, []int) {
+	return fileDescriptor_user_6133bd34462fbb1a, []int{44}
+}
+func (m *GetBlockUserByIdReq) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetBlockUserByIdReq.Unmarshal(m, b)
+}
+func (m *GetBlockUserByIdReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetBlockUserByIdReq.Marshal(b, m, deterministic)
+}
+func (dst *GetBlockUserByIdReq) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetBlockUserByIdReq.Merge(dst, src)
+}
+func (m *GetBlockUserByIdReq) XXX_Size() int {
+	return xxx_messageInfo_GetBlockUserByIdReq.Size(m)
+}
+func (m *GetBlockUserByIdReq) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetBlockUserByIdReq.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetBlockUserByIdReq proto.InternalMessageInfo
+
+func (m *GetBlockUserByIdReq) GetUserId() string {
+	if m != nil {
+		return m.UserId
+	}
+	return ""
+}
+
+func (m *GetBlockUserByIdReq) GetOperationID() string {
+	if m != nil {
+		return m.OperationID
+	}
+	return ""
+}
+
+type GetBlockUserByIdResp struct {
+	BlockUser            *BlockUser `protobuf:"bytes,2,opt,name=BlockUser" json:"BlockUser,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}   `json:"-"`
+	XXX_unrecognized     []byte     `json:"-"`
+	XXX_sizecache        int32      `json:"-"`
+}
+
+func (m *GetBlockUserByIdResp) Reset()         { *m = GetBlockUserByIdResp{} }
+func (m *GetBlockUserByIdResp) String() string { return proto.CompactTextString(m) }
+func (*GetBlockUserByIdResp) ProtoMessage()    {}
+func (*GetBlockUserByIdResp) Descriptor() ([]byte, []int) {
+	return fileDescriptor_user_6133bd34462fbb1a, []int{45}
+}
+func (m *GetBlockUserByIdResp) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetBlockUserByIdResp.Unmarshal(m, b)
+}
+func (m *GetBlockUserByIdResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetBlockUserByIdResp.Marshal(b, m, deterministic)
+}
+func (dst *GetBlockUserByIdResp) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetBlockUserByIdResp.Merge(dst, src)
+}
+func (m *GetBlockUserByIdResp) XXX_Size() int {
+	return xxx_messageInfo_GetBlockUserByIdResp.Size(m)
+}
+func (m *GetBlockUserByIdResp) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetBlockUserByIdResp.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetBlockUserByIdResp proto.InternalMessageInfo
+
+func (m *GetBlockUserByIdResp) GetBlockUser() *BlockUser {
+	if m != nil {
+		return m.BlockUser
+	}
+	return nil
+}
+
+type DeleteUserReq struct {
+	UserId               string   `protobuf:"bytes,1,opt,name=User_id,json=UserId" json:"User_id,omitempty"`
+	OperationID          string   `protobuf:"bytes,2,opt,name=OperationID" json:"OperationID,omitempty"`
+	OpUserId             string   `protobuf:"bytes,3,opt,name=OpUserId" json:"OpUserId,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *DeleteUserReq) Reset()         { *m = DeleteUserReq{} }
+func (m *DeleteUserReq) String() string { return proto.CompactTextString(m) }
+func (*DeleteUserReq) ProtoMessage()    {}
+func (*DeleteUserReq) Descriptor() ([]byte, []int) {
+	return fileDescriptor_user_6133bd34462fbb1a, []int{46}
+}
+func (m *DeleteUserReq) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DeleteUserReq.Unmarshal(m, b)
+}
+func (m *DeleteUserReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DeleteUserReq.Marshal(b, m, deterministic)
+}
+func (dst *DeleteUserReq) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DeleteUserReq.Merge(dst, src)
+}
+func (m *DeleteUserReq) XXX_Size() int {
+	return xxx_messageInfo_DeleteUserReq.Size(m)
+}
+func (m *DeleteUserReq) XXX_DiscardUnknown() {
+	xxx_messageInfo_DeleteUserReq.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DeleteUserReq proto.InternalMessageInfo
+
+func (m *DeleteUserReq) GetUserId() string {
+	if m != nil {
+		return m.UserId
+	}
+	return ""
+}
+
+func (m *DeleteUserReq) GetOperationID() string {
+	if m != nil {
+		return m.OperationID
+	}
+	return ""
+}
+
+func (m *DeleteUserReq) GetOpUserId() string {
+	if m != nil {
+		return m.OpUserId
+	}
+	return ""
+}
+
+type DeleteUserResp struct {
+	CommonResp           *CommonResp `protobuf:"bytes,1,opt,name=CommonResp" json:"CommonResp,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}    `json:"-"`
+	XXX_unrecognized     []byte      `json:"-"`
+	XXX_sizecache        int32       `json:"-"`
+}
+
+func (m *DeleteUserResp) Reset()         { *m = DeleteUserResp{} }
+func (m *DeleteUserResp) String() string { return proto.CompactTextString(m) }
+func (*DeleteUserResp) ProtoMessage()    {}
+func (*DeleteUserResp) Descriptor() ([]byte, []int) {
+	return fileDescriptor_user_6133bd34462fbb1a, []int{47}
+}
+func (m *DeleteUserResp) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DeleteUserResp.Unmarshal(m, b)
+}
+func (m *DeleteUserResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DeleteUserResp.Marshal(b, m, deterministic)
+}
+func (dst *DeleteUserResp) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DeleteUserResp.Merge(dst, src)
+}
+func (m *DeleteUserResp) XXX_Size() int {
+	return xxx_messageInfo_DeleteUserResp.Size(m)
+}
+func (m *DeleteUserResp) XXX_DiscardUnknown() {
+	xxx_messageInfo_DeleteUserResp.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DeleteUserResp proto.InternalMessageInfo
+
+func (m *DeleteUserResp) GetCommonResp() *CommonResp {
+	if m != nil {
+		return m.CommonResp
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*CommonResp)(nil), "user.CommonResp")
+	proto.RegisterType((*DeleteUsersReq)(nil), "user.DeleteUsersReq")
+	proto.RegisterType((*DeleteUsersResp)(nil), "user.DeleteUsersResp")
+	proto.RegisterType((*GetAllUserIDReq)(nil), "user.GetAllUserIDReq")
+	proto.RegisterType((*GetAllUserIDResp)(nil), "user.GetAllUserIDResp")
+	proto.RegisterType((*AccountCheckReq)(nil), "user.AccountCheckReq")
+	proto.RegisterType((*AccountCheckResp)(nil), "user.AccountCheckResp")
+	proto.RegisterType((*AccountCheckResp_SingleUserStatus)(nil), "user.AccountCheckResp.SingleUserStatus")
+	proto.RegisterType((*GetUserInfoReq)(nil), "user.GetUserInfoReq")
+	proto.RegisterType((*GetUserInfoResp)(nil), "user.GetUserInfoResp")
+	proto.RegisterType((*UpdateUserInfoReq)(nil), "user.UpdateUserInfoReq")
+	proto.RegisterType((*UpdateUserInfoResp)(nil), "user.UpdateUserInfoResp")
+	proto.RegisterType((*Conversation)(nil), "user.Conversation")
+	proto.RegisterType((*SetConversationReq)(nil), "user.SetConversationReq")
+	proto.RegisterType((*SetConversationResp)(nil), "user.SetConversationResp")
+	proto.RegisterType((*SetRecvMsgOptReq)(nil), "user.SetRecvMsgOptReq")
+	proto.RegisterType((*SetRecvMsgOptResp)(nil), "user.SetRecvMsgOptResp")
+	proto.RegisterType((*GetConversationReq)(nil), "user.GetConversationReq")
+	proto.RegisterType((*GetConversationResp)(nil), "user.GetConversationResp")
+	proto.RegisterType((*GetConversationsReq)(nil), "user.GetConversationsReq")
+	proto.RegisterType((*GetConversationsResp)(nil), "user.GetConversationsResp")
+	proto.RegisterType((*GetAllConversationsReq)(nil), "user.GetAllConversationsReq")
+	proto.RegisterType((*GetAllConversationsResp)(nil), "user.GetAllConversationsResp")
+	proto.RegisterType((*BatchSetConversationsReq)(nil), "user.BatchSetConversationsReq")
+	proto.RegisterType((*BatchSetConversationsResp)(nil), "user.BatchSetConversationsResp")
+	proto.RegisterType((*ResignUserReq)(nil), "user.ResignUserReq")
+	proto.RegisterType((*ResignUserResp)(nil), "user.ResignUserResp")
+	proto.RegisterType((*GetUserByIdReq)(nil), "user.GetUserByIdReq")
+	proto.RegisterType((*User)(nil), "user.User")
+	proto.RegisterType((*GetUserByIdResp)(nil), "user.GetUserByIdResp")
+	proto.RegisterType((*GetUsersByNameReq)(nil), "user.GetUsersByNameReq")
+	proto.RegisterType((*GetUsersByNameResp)(nil), "user.GetUsersByNameResp")
+	proto.RegisterType((*AlterUserReq)(nil), "user.AlterUserReq")
+	proto.RegisterType((*AlterUserResp)(nil), "user.AlterUserResp")
+	proto.RegisterType((*GetUsersReq)(nil), "user.GetUsersReq")
+	proto.RegisterType((*GetUsersResp)(nil), "user.GetUsersResp")
+	proto.RegisterType((*AddUserReq)(nil), "user.AddUserReq")
+	proto.RegisterType((*AddUserResp)(nil), "user.AddUserResp")
+	proto.RegisterType((*BlockUserReq)(nil), "user.BlockUserReq")
+	proto.RegisterType((*BlockUserResp)(nil), "user.BlockUserResp")
+	proto.RegisterType((*UnBlockUserReq)(nil), "user.UnBlockUserReq")
+	proto.RegisterType((*UnBlockUserResp)(nil), "user.UnBlockUserResp")
+	proto.RegisterType((*GetBlockUsersReq)(nil), "user.GetBlockUsersReq")
+	proto.RegisterType((*BlockUser)(nil), "user.BlockUser")
+	proto.RegisterType((*GetBlockUsersResp)(nil), "user.GetBlockUsersResp")
+	proto.RegisterType((*GetBlockUserByIdReq)(nil), "user.GetBlockUserByIdReq")
+	proto.RegisterType((*GetBlockUserByIdResp)(nil), "user.GetBlockUserByIdResp")
+	proto.RegisterType((*DeleteUserReq)(nil), "user.DeleteUserReq")
+	proto.RegisterType((*DeleteUserResp)(nil), "user.DeleteUserResp")
 }
 
 // Reference imports to suppress errors if they are not otherwise used.
 var _ context.Context
-var _ grpc.ClientConnInterface
+var _ grpc.ClientConn
 
 // This is a compile-time assertion to ensure that this generated file
 // is compatible with the grpc package it is being compiled against.
-const _ = grpc.SupportPackageIsVersion6
+const _ = grpc.SupportPackageIsVersion4
+
+// Client API for User service
 
-// UserClient is the client API for User service.
-//
-// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
 type UserClient interface {
 	GetUserInfo(ctx context.Context, in *GetUserInfoReq, opts ...grpc.CallOption) (*GetUserInfoResp, error)
 	UpdateUserInfo(ctx context.Context, in *UpdateUserInfoReq, opts ...grpc.CallOption) (*UpdateUserInfoResp, error)
@@ -4269,16 +2654,16 @@ type UserClient interface {
 }
 
 type userClient struct {
-	cc grpc.ClientConnInterface
+	cc *grpc.ClientConn
 }
 
-func NewUserClient(cc grpc.ClientConnInterface) UserClient {
+func NewUserClient(cc *grpc.ClientConn) UserClient {
 	return &userClient{cc}
 }
 
 func (c *userClient) GetUserInfo(ctx context.Context, in *GetUserInfoReq, opts ...grpc.CallOption) (*GetUserInfoResp, error) {
 	out := new(GetUserInfoResp)
-	err := c.cc.Invoke(ctx, "/user.user/GetUserInfo", in, out, opts...)
+	err := grpc.Invoke(ctx, "/user.user/GetUserInfo", in, out, c.cc, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -4287,7 +2672,7 @@ func (c *userClient) GetUserInfo(ctx context.Context, in *GetUserInfoReq, opts .
 
 func (c *userClient) UpdateUserInfo(ctx context.Context, in *UpdateUserInfoReq, opts ...grpc.CallOption) (*UpdateUserInfoResp, error) {
 	out := new(UpdateUserInfoResp)
-	err := c.cc.Invoke(ctx, "/user.user/UpdateUserInfo", in, out, opts...)
+	err := grpc.Invoke(ctx, "/user.user/UpdateUserInfo", in, out, c.cc, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -4296,7 +2681,7 @@ func (c *userClient) UpdateUserInfo(ctx context.Context, in *UpdateUserInfoReq,
 
 func (c *userClient) DeleteUsers(ctx context.Context, in *DeleteUsersReq, opts ...grpc.CallOption) (*DeleteUsersResp, error) {
 	out := new(DeleteUsersResp)
-	err := c.cc.Invoke(ctx, "/user.user/DeleteUsers", in, out, opts...)
+	err := grpc.Invoke(ctx, "/user.user/DeleteUsers", in, out, c.cc, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -4305,7 +2690,7 @@ func (c *userClient) DeleteUsers(ctx context.Context, in *DeleteUsersReq, opts .
 
 func (c *userClient) GetAllUserID(ctx context.Context, in *GetAllUserIDReq, opts ...grpc.CallOption) (*GetAllUserIDResp, error) {
 	out := new(GetAllUserIDResp)
-	err := c.cc.Invoke(ctx, "/user.user/GetAllUserID", in, out, opts...)
+	err := grpc.Invoke(ctx, "/user.user/GetAllUserID", in, out, c.cc, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -4314,7 +2699,7 @@ func (c *userClient) GetAllUserID(ctx context.Context, in *GetAllUserIDReq, opts
 
 func (c *userClient) AccountCheck(ctx context.Context, in *AccountCheckReq, opts ...grpc.CallOption) (*AccountCheckResp, error) {
 	out := new(AccountCheckResp)
-	err := c.cc.Invoke(ctx, "/user.user/AccountCheck", in, out, opts...)
+	err := grpc.Invoke(ctx, "/user.user/AccountCheck", in, out, c.cc, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -4323,7 +2708,7 @@ func (c *userClient) AccountCheck(ctx context.Context, in *AccountCheckReq, opts
 
 func (c *userClient) GetConversation(ctx context.Context, in *GetConversationReq, opts ...grpc.CallOption) (*GetConversationResp, error) {
 	out := new(GetConversationResp)
-	err := c.cc.Invoke(ctx, "/user.user/GetConversation", in, out, opts...)
+	err := grpc.Invoke(ctx, "/user.user/GetConversation", in, out, c.cc, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -4332,7 +2717,7 @@ func (c *userClient) GetConversation(ctx context.Context, in *GetConversationReq
 
 func (c *userClient) GetAllConversations(ctx context.Context, in *GetAllConversationsReq, opts ...grpc.CallOption) (*GetAllConversationsResp, error) {
 	out := new(GetAllConversationsResp)
-	err := c.cc.Invoke(ctx, "/user.user/GetAllConversations", in, out, opts...)
+	err := grpc.Invoke(ctx, "/user.user/GetAllConversations", in, out, c.cc, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -4341,7 +2726,7 @@ func (c *userClient) GetAllConversations(ctx context.Context, in *GetAllConversa
 
 func (c *userClient) GetConversations(ctx context.Context, in *GetConversationsReq, opts ...grpc.CallOption) (*GetConversationsResp, error) {
 	out := new(GetConversationsResp)
-	err := c.cc.Invoke(ctx, "/user.user/GetConversations", in, out, opts...)
+	err := grpc.Invoke(ctx, "/user.user/GetConversations", in, out, c.cc, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -4350,7 +2735,7 @@ func (c *userClient) GetConversations(ctx context.Context, in *GetConversationsR
 
 func (c *userClient) BatchSetConversations(ctx context.Context, in *BatchSetConversationsReq, opts ...grpc.CallOption) (*BatchSetConversationsResp, error) {
 	out := new(BatchSetConversationsResp)
-	err := c.cc.Invoke(ctx, "/user.user/BatchSetConversations", in, out, opts...)
+	err := grpc.Invoke(ctx, "/user.user/BatchSetConversations", in, out, c.cc, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -4359,7 +2744,7 @@ func (c *userClient) BatchSetConversations(ctx context.Context, in *BatchSetConv
 
 func (c *userClient) SetConversation(ctx context.Context, in *SetConversationReq, opts ...grpc.CallOption) (*SetConversationResp, error) {
 	out := new(SetConversationResp)
-	err := c.cc.Invoke(ctx, "/user.user/SetConversation", in, out, opts...)
+	err := grpc.Invoke(ctx, "/user.user/SetConversation", in, out, c.cc, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -4368,7 +2753,7 @@ func (c *userClient) SetConversation(ctx context.Context, in *SetConversationReq
 
 func (c *userClient) SetRecvMsgOpt(ctx context.Context, in *SetRecvMsgOptReq, opts ...grpc.CallOption) (*SetRecvMsgOptResp, error) {
 	out := new(SetRecvMsgOptResp)
-	err := c.cc.Invoke(ctx, "/user.user/SetRecvMsgOpt", in, out, opts...)
+	err := grpc.Invoke(ctx, "/user.user/SetRecvMsgOpt", in, out, c.cc, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -4377,7 +2762,7 @@ func (c *userClient) SetRecvMsgOpt(ctx context.Context, in *SetRecvMsgOptReq, op
 
 func (c *userClient) GetUserById(ctx context.Context, in *GetUserByIdReq, opts ...grpc.CallOption) (*GetUserByIdResp, error) {
 	out := new(GetUserByIdResp)
-	err := c.cc.Invoke(ctx, "/user.user/GetUserById", in, out, opts...)
+	err := grpc.Invoke(ctx, "/user.user/GetUserById", in, out, c.cc, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -4386,7 +2771,7 @@ func (c *userClient) GetUserById(ctx context.Context, in *GetUserByIdReq, opts .
 
 func (c *userClient) GetUsersByName(ctx context.Context, in *GetUsersByNameReq, opts ...grpc.CallOption) (*GetUsersByNameResp, error) {
 	out := new(GetUsersByNameResp)
-	err := c.cc.Invoke(ctx, "/user.user/GetUsersByName", in, out, opts...)
+	err := grpc.Invoke(ctx, "/user.user/GetUsersByName", in, out, c.cc, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -4395,7 +2780,7 @@ func (c *userClient) GetUsersByName(ctx context.Context, in *GetUsersByNameReq,
 
 func (c *userClient) ResignUser(ctx context.Context, in *ResignUserReq, opts ...grpc.CallOption) (*ResignUserResp, error) {
 	out := new(ResignUserResp)
-	err := c.cc.Invoke(ctx, "/user.user/ResignUser", in, out, opts...)
+	err := grpc.Invoke(ctx, "/user.user/ResignUser", in, out, c.cc, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -4404,7 +2789,7 @@ func (c *userClient) ResignUser(ctx context.Context, in *ResignUserReq, opts ...
 
 func (c *userClient) AlterUser(ctx context.Context, in *AlterUserReq, opts ...grpc.CallOption) (*AlterUserResp, error) {
 	out := new(AlterUserResp)
-	err := c.cc.Invoke(ctx, "/user.user/AlterUser", in, out, opts...)
+	err := grpc.Invoke(ctx, "/user.user/AlterUser", in, out, c.cc, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -4413,7 +2798,7 @@ func (c *userClient) AlterUser(ctx context.Context, in *AlterUserReq, opts ...gr
 
 func (c *userClient) GetUsers(ctx context.Context, in *GetUsersReq, opts ...grpc.CallOption) (*GetUsersResp, error) {
 	out := new(GetUsersResp)
-	err := c.cc.Invoke(ctx, "/user.user/GetUsers", in, out, opts...)
+	err := grpc.Invoke(ctx, "/user.user/GetUsers", in, out, c.cc, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -4422,7 +2807,7 @@ func (c *userClient) GetUsers(ctx context.Context, in *GetUsersReq, opts ...grpc
 
 func (c *userClient) AddUser(ctx context.Context, in *AddUserReq, opts ...grpc.CallOption) (*AddUserResp, error) {
 	out := new(AddUserResp)
-	err := c.cc.Invoke(ctx, "/user.user/AddUser", in, out, opts...)
+	err := grpc.Invoke(ctx, "/user.user/AddUser", in, out, c.cc, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -4431,7 +2816,7 @@ func (c *userClient) AddUser(ctx context.Context, in *AddUserReq, opts ...grpc.C
 
 func (c *userClient) BlockUser(ctx context.Context, in *BlockUserReq, opts ...grpc.CallOption) (*BlockUserResp, error) {
 	out := new(BlockUserResp)
-	err := c.cc.Invoke(ctx, "/user.user/BlockUser", in, out, opts...)
+	err := grpc.Invoke(ctx, "/user.user/BlockUser", in, out, c.cc, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -4440,7 +2825,7 @@ func (c *userClient) BlockUser(ctx context.Context, in *BlockUserReq, opts ...gr
 
 func (c *userClient) UnBlockUser(ctx context.Context, in *UnBlockUserReq, opts ...grpc.CallOption) (*UnBlockUserResp, error) {
 	out := new(UnBlockUserResp)
-	err := c.cc.Invoke(ctx, "/user.user/UnBlockUser", in, out, opts...)
+	err := grpc.Invoke(ctx, "/user.user/UnBlockUser", in, out, c.cc, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -4449,7 +2834,7 @@ func (c *userClient) UnBlockUser(ctx context.Context, in *UnBlockUserReq, opts .
 
 func (c *userClient) GetBlockUsers(ctx context.Context, in *GetBlockUsersReq, opts ...grpc.CallOption) (*GetBlockUsersResp, error) {
 	out := new(GetBlockUsersResp)
-	err := c.cc.Invoke(ctx, "/user.user/GetBlockUsers", in, out, opts...)
+	err := grpc.Invoke(ctx, "/user.user/GetBlockUsers", in, out, c.cc, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -4458,7 +2843,7 @@ func (c *userClient) GetBlockUsers(ctx context.Context, in *GetBlockUsersReq, op
 
 func (c *userClient) GetBlockUserById(ctx context.Context, in *GetBlockUserByIdReq, opts ...grpc.CallOption) (*GetBlockUserByIdResp, error) {
 	out := new(GetBlockUserByIdResp)
-	err := c.cc.Invoke(ctx, "/user.user/GetBlockUserById", in, out, opts...)
+	err := grpc.Invoke(ctx, "/user.user/GetBlockUserById", in, out, c.cc, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -4467,14 +2852,15 @@ func (c *userClient) GetBlockUserById(ctx context.Context, in *GetBlockUserByIdR
 
 func (c *userClient) DeleteUser(ctx context.Context, in *DeleteUserReq, opts ...grpc.CallOption) (*DeleteUserResp, error) {
 	out := new(DeleteUserResp)
-	err := c.cc.Invoke(ctx, "/user.user/DeleteUser", in, out, opts...)
+	err := grpc.Invoke(ctx, "/user.user/DeleteUser", in, out, c.cc, opts...)
 	if err != nil {
 		return nil, err
 	}
 	return out, nil
 }
 
-// UserServer is the server API for User service.
+// Server API for User service
+
 type UserServer interface {
 	GetUserInfo(context.Context, *GetUserInfoReq) (*GetUserInfoResp, error)
 	UpdateUserInfo(context.Context, *UpdateUserInfoReq) (*UpdateUserInfoResp, error)
@@ -4500,77 +2886,6 @@ type UserServer interface {
 	DeleteUser(context.Context, *DeleteUserReq) (*DeleteUserResp, error)
 }
 
-// UnimplementedUserServer can be embedded to have forward compatible implementations.
-type UnimplementedUserServer struct {
-}
-
-func (*UnimplementedUserServer) GetUserInfo(context.Context, *GetUserInfoReq) (*GetUserInfoResp, error) {
-	return nil, status.Errorf(codes.Unimplemented, "method GetUserInfo not implemented")
-}
-func (*UnimplementedUserServer) UpdateUserInfo(context.Context, *UpdateUserInfoReq) (*UpdateUserInfoResp, error) {
-	return nil, status.Errorf(codes.Unimplemented, "method UpdateUserInfo not implemented")
-}
-func (*UnimplementedUserServer) DeleteUsers(context.Context, *DeleteUsersReq) (*DeleteUsersResp, error) {
-	return nil, status.Errorf(codes.Unimplemented, "method DeleteUsers not implemented")
-}
-func (*UnimplementedUserServer) GetAllUserID(context.Context, *GetAllUserIDReq) (*GetAllUserIDResp, error) {
-	return nil, status.Errorf(codes.Unimplemented, "method GetAllUserID not implemented")
-}
-func (*UnimplementedUserServer) AccountCheck(context.Context, *AccountCheckReq) (*AccountCheckResp, error) {
-	return nil, status.Errorf(codes.Unimplemented, "method AccountCheck not implemented")
-}
-func (*UnimplementedUserServer) GetConversation(context.Context, *GetConversationReq) (*GetConversationResp, error) {
-	return nil, status.Errorf(codes.Unimplemented, "method GetConversation not implemented")
-}
-func (*UnimplementedUserServer) GetAllConversations(context.Context, *GetAllConversationsReq) (*GetAllConversationsResp, error) {
-	return nil, status.Errorf(codes.Unimplemented, "method GetAllConversations not implemented")
-}
-func (*UnimplementedUserServer) GetConversations(context.Context, *GetConversationsReq) (*GetConversationsResp, error) {
-	return nil, status.Errorf(codes.Unimplemented, "method GetConversations not implemented")
-}
-func (*UnimplementedUserServer) BatchSetConversations(context.Context, *BatchSetConversationsReq) (*BatchSetConversationsResp, error) {
-	return nil, status.Errorf(codes.Unimplemented, "method BatchSetConversations not implemented")
-}
-func (*UnimplementedUserServer) SetConversation(context.Context, *SetConversationReq) (*SetConversationResp, error) {
-	return nil, status.Errorf(codes.Unimplemented, "method SetConversation not implemented")
-}
-func (*UnimplementedUserServer) SetRecvMsgOpt(context.Context, *SetRecvMsgOptReq) (*SetRecvMsgOptResp, error) {
-	return nil, status.Errorf(codes.Unimplemented, "method SetRecvMsgOpt not implemented")
-}
-func (*UnimplementedUserServer) GetUserById(context.Context, *GetUserByIdReq) (*GetUserByIdResp, error) {
-	return nil, status.Errorf(codes.Unimplemented, "method GetUserById not implemented")
-}
-func (*UnimplementedUserServer) GetUsersByName(context.Context, *GetUsersByNameReq) (*GetUsersByNameResp, error) {
-	return nil, status.Errorf(codes.Unimplemented, "method GetUsersByName not implemented")
-}
-func (*UnimplementedUserServer) ResignUser(context.Context, *ResignUserReq) (*ResignUserResp, error) {
-	return nil, status.Errorf(codes.Unimplemented, "method ResignUser not implemented")
-}
-func (*UnimplementedUserServer) AlterUser(context.Context, *AlterUserReq) (*AlterUserResp, error) {
-	return nil, status.Errorf(codes.Unimplemented, "method AlterUser not implemented")
-}
-func (*UnimplementedUserServer) GetUsers(context.Context, *GetUsersReq) (*GetUsersResp, error) {
-	return nil, status.Errorf(codes.Unimplemented, "method GetUsers not implemented")
-}
-func (*UnimplementedUserServer) AddUser(context.Context, *AddUserReq) (*AddUserResp, error) {
-	return nil, status.Errorf(codes.Unimplemented, "method AddUser not implemented")
-}
-func (*UnimplementedUserServer) BlockUser(context.Context, *BlockUserReq) (*BlockUserResp, error) {
-	return nil, status.Errorf(codes.Unimplemented, "method BlockUser not implemented")
-}
-func (*UnimplementedUserServer) UnBlockUser(context.Context, *UnBlockUserReq) (*UnBlockUserResp, error) {
-	return nil, status.Errorf(codes.Unimplemented, "method UnBlockUser not implemented")
-}
-func (*UnimplementedUserServer) GetBlockUsers(context.Context, *GetBlockUsersReq) (*GetBlockUsersResp, error) {
-	return nil, status.Errorf(codes.Unimplemented, "method GetBlockUsers not implemented")
-}
-func (*UnimplementedUserServer) GetBlockUserById(context.Context, *GetBlockUserByIdReq) (*GetBlockUserByIdResp, error) {
-	return nil, status.Errorf(codes.Unimplemented, "method GetBlockUserById not implemented")
-}
-func (*UnimplementedUserServer) DeleteUser(context.Context, *DeleteUserReq) (*DeleteUserResp, error) {
-	return nil, status.Errorf(codes.Unimplemented, "method DeleteUser not implemented")
-}
-
 func RegisterUserServer(s *grpc.Server, srv UserServer) {
 	s.RegisterService(&_User_serviceDesc, srv)
 }
@@ -5067,3 +3382,124 @@ var _User_serviceDesc = grpc.ServiceDesc{
 	Streams:  []grpc.StreamDesc{},
 	Metadata: "user/user.proto",
 }
+
+func init() { proto.RegisterFile("user/user.proto", fileDescriptor_user_6133bd34462fbb1a) }
+
+var fileDescriptor_user_6133bd34462fbb1a = []byte{
+	// 1835 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x59, 0x5f, 0x6f, 0xdc, 0xc6,
+	0x11, 0x07, 0xef, 0x8f, 0x25, 0xcd, 0xe9, 0x4e, 0xa7, 0x95, 0x2c, 0xd1, 0x6c, 0xab, 0xaa, 0x84,
+	0xeb, 0x0a, 0x02, 0x2a, 0xb5, 0x6e, 0x51, 0x17, 0x2e, 0x5a, 0x5b, 0x77, 0x92, 0x85, 0x2b, 0x62,
+	0xe9, 0xc0, 0xb3, 0x80, 0x20, 0x08, 0x20, 0xd0, 0x77, 0x2b, 0x89, 0xd0, 0x1d, 0x49, 0x73, 0x79,
+	0xb2, 0x95, 0x17, 0x07, 0xf9, 0xf3, 0x12, 0xe4, 0x25, 0x40, 0x00, 0x3b, 0x79, 0xc8, 0xe7, 0xc8,
+	0x7b, 0xf2, 0x94, 0x6f, 0x90, 0xa7, 0x7c, 0x95, 0x60, 0x97, 0x4b, 0x72, 0x77, 0x49, 0x49, 0x17,
+	0x4a, 0xf0, 0x8b, 0xad, 0x9d, 0xdd, 0x1d, 0xfe, 0x66, 0xe6, 0x37, 0xb3, 0xb3, 0x7b, 0x30, 0x37,
+	0x26, 0x38, 0xd8, 0xa4, 0xff, 0x6c, 0xf8, 0x81, 0x17, 0x7a, 0xa8, 0x42, 0xff, 0x36, 0xfe, 0xb4,
+	0xef, 0x63, 0xf7, 0xb0, 0xf3, 0x74, 0xd3, 0x3f, 0x3d, 0xde, 0x64, 0x13, 0x9b, 0x64, 0x70, 0x7a,
+	0xf8, 0x92, 0x6c, 0xbe, 0x24, 0xd1, 0x42, 0xf3, 0x7f, 0x00, 0x6d, 0x6f, 0x34, 0xf2, 0x5c, 0x0b,
+	0x13, 0x1f, 0xe9, 0x30, 0x85, 0x83, 0xa0, 0xed, 0x0d, 0xb0, 0xae, 0xad, 0x6a, 0x6b, 0x55, 0x2b,
+	0x1e, 0xa2, 0x25, 0xb8, 0x85, 0x83, 0xe0, 0x29, 0x39, 0xd6, 0x4b, 0xab, 0xda, 0xda, 0x8c, 0xc5,
+	0x47, 0xe6, 0x47, 0xd0, 0xd8, 0xc6, 0x43, 0x1c, 0xe2, 0x03, 0x82, 0x03, 0x62, 0xe1, 0x17, 0x68,
+	0x1d, 0x9a, 0xa9, 0xa4, 0xb3, 0xfd, 0x9e, 0x43, 0x42, 0xbd, 0xb4, 0x5a, 0x5e, 0x9b, 0xb1, 0x32,
+	0x72, 0x64, 0xc0, 0xf4, 0xbe, 0x1f, 0x8d, 0xf5, 0x32, 0xd3, 0x9b, 0x8c, 0xd1, 0x2a, 0xd4, 0xf6,
+	0x7d, 0x1c, 0xd8, 0xa1, 0xe3, 0xb9, 0x9d, 0x6d, 0xbd, 0xc2, 0xa6, 0x45, 0x91, 0xe9, 0xc1, 0x9c,
+	0xf4, 0x6d, 0xe2, 0xa3, 0xbf, 0x89, 0xe6, 0x30, 0x1b, 0x6a, 0xf7, 0x9b, 0x1b, 0xcc, 0x31, 0xa9,
+	0xdc, 0x12, 0x4d, 0x5e, 0x87, 0xe6, 0x13, 0xdb, 0x19, 0xe2, 0x41, 0x16, 0xae, 0x2a, 0x37, 0xf7,
+	0x61, 0x6e, 0x17, 0x87, 0x5b, 0xc3, 0x61, 0x24, 0xa3, 0xd6, 0x1a, 0x30, 0xed, 0xc5, 0x16, 0x68,
+	0x91, 0x05, 0x9e, 0x60, 0x81, 0x27, 0x58, 0x10, 0x39, 0x4e, 0x14, 0x99, 0x03, 0x68, 0xca, 0x0a,
+	0x0b, 0x99, 0xb0, 0x02, 0x90, 0x01, 0x2f, 0x48, 0xcc, 0x73, 0x98, 0xdb, 0xea, 0xf7, 0xbd, 0xb1,
+	0x1b, 0xb6, 0x4f, 0x70, 0xff, 0x94, 0xc2, 0x5e, 0x83, 0x39, 0xf6, 0xb7, 0xb0, 0x4f, 0x63, 0xfb,
+	0x54, 0xb1, 0x14, 0xa2, 0xd2, 0xe5, 0x21, 0x2a, 0x67, 0x43, 0xf4, 0x8b, 0x06, 0x4d, 0xf9, 0xdb,
+	0x91, 0x85, 0xfd, 0x09, 0x2c, 0x4c, 0xd7, 0xa0, 0x5d, 0x00, 0x0b, 0x93, 0xf1, 0x30, 0x4c, 0x2c,
+	0xac, 0xdd, 0xff, 0x4b, 0xb4, 0x43, 0xd5, 0xbe, 0xd1, 0x73, 0xdc, 0xe3, 0x21, 0xa3, 0x44, 0x2f,
+	0xb4, 0xc3, 0x31, 0xb1, 0x84, 0xad, 0x46, 0x17, 0x9a, 0xea, 0x3c, 0xa5, 0xf6, 0x58, 0x0c, 0x20,
+	0x1f, 0xa1, 0xbb, 0x50, 0xb7, 0x23, 0xe5, 0xd1, 0x42, 0x6e, 0xbe, 0x2c, 0x34, 0x5d, 0x68, 0xec,
+	0xe2, 0x90, 0x39, 0xc4, 0x3d, 0xf2, 0xa8, 0x6f, 0x57, 0x00, 0xc6, 0xaa, 0x5b, 0x05, 0xc9, 0x35,
+	0x3d, 0xfa, 0x99, 0xc6, 0x48, 0x98, 0x7e, 0xb0, 0x90, 0x43, 0x1f, 0xc1, 0x6c, 0xac, 0x81, 0xa1,
+	0x2c, 0x33, 0x97, 0xfe, 0x6e, 0x83, 0xe0, 0xe0, 0x0c, 0x07, 0x87, 0xb6, 0xef, 0x1c, 0xfa, 0x76,
+	0x60, 0x8f, 0xc8, 0x46, 0xf2, 0x21, 0x69, 0x83, 0xf9, 0x85, 0x06, 0xf3, 0x07, 0xfe, 0xc0, 0xe6,
+	0xe9, 0xcc, 0x4d, 0x7f, 0x00, 0xd3, 0xf1, 0x90, 0xc3, 0xb8, 0x54, 0x65, 0xb2, 0xf8, 0x2a, 0x9f,
+	0x78, 0x59, 0x9f, 0x88, 0x69, 0xf4, 0x04, 0x90, 0x8a, 0xa5, 0x88, 0x57, 0xcc, 0xaf, 0xcb, 0x30,
+	0xdb, 0xf6, 0xdc, 0x33, 0x1c, 0x10, 0xa6, 0x9a, 0x85, 0xe3, 0xa5, 0x8b, 0x03, 0x29, 0xc1, 0x45,
+	0x11, 0xba, 0x07, 0x0d, 0x71, 0x47, 0x02, 0x5f, 0x91, 0x52, 0x52, 0x58, 0xb8, 0x7f, 0xf6, 0x94,
+	0x1c, 0xef, 0xfb, 0x21, 0xb3, 0xa1, 0x6a, 0x09, 0x12, 0x5a, 0x86, 0xc4, 0x1d, 0xcf, 0xce, 0x7d,
+	0xcc, 0x4a, 0x5e, 0xd5, 0xca, 0xc8, 0x29, 0x61, 0x39, 0xa0, 0x6a, 0x44, 0x58, 0x8e, 0x45, 0x87,
+	0xa9, 0xdd, 0xc0, 0x1b, 0xfb, 0x9d, 0x6d, 0xfd, 0x16, 0x9b, 0x88, 0x87, 0xd4, 0x8e, 0x03, 0x37,
+	0xc0, 0xf6, 0xa0, 0x4d, 0x99, 0xab, 0x4f, 0x31, 0xc5, 0xa2, 0x88, 0x92, 0x7d, 0x3b, 0xb0, 0x8f,
+	0xc2, 0x67, 0xf8, 0x55, 0xf8, 0xcc, 0x19, 0x61, 0x7d, 0x7a, 0x55, 0x5b, 0x2b, 0x5b, 0xb2, 0x90,
+	0x86, 0xa9, 0x43, 0xba, 0x8e, 0xeb, 0xe2, 0x81, 0x3e, 0xb3, 0xaa, 0xad, 0x4d, 0x5b, 0xc9, 0x18,
+	0x99, 0x30, 0xbb, 0x15, 0x86, 0x76, 0xff, 0x04, 0x0f, 0x58, 0xfc, 0x81, 0x41, 0x90, 0x64, 0xf4,
+	0x2b, 0x1d, 0xd2, 0x0d, 0x9c, 0x33, 0x3b, 0xc4, 0xed, 0x13, 0x3b, 0xd4, 0x6b, 0x4c, 0x89, 0x2c,
+	0x44, 0x0d, 0x28, 0xed, 0xbc, 0xd2, 0x67, 0xd9, 0xfe, 0xd2, 0xce, 0x2b, 0xf3, 0x5b, 0x0d, 0x50,
+	0x0f, 0x87, 0xa2, 0x1f, 0x28, 0xd9, 0xfe, 0x25, 0x07, 0x8b, 0x47, 0x18, 0xc5, 0x11, 0x16, 0x16,
+	0xcb, 0x41, 0x5d, 0x87, 0xa6, 0xeb, 0x85, 0xce, 0x91, 0xd3, 0x4f, 0x5d, 0x5d, 0x8a, 0x5c, 0xad,
+	0xca, 0x27, 0xc8, 0xc7, 0x5d, 0x58, 0xc8, 0x60, 0x2b, 0x44, 0xbe, 0x9f, 0x34, 0x68, 0xf6, 0x70,
+	0x98, 0x72, 0x82, 0xda, 0xf8, 0x4e, 0x09, 0x98, 0xf1, 0x4a, 0x65, 0x32, 0xaf, 0x54, 0xb3, 0x5e,
+	0xd9, 0x81, 0x79, 0xc5, 0x96, 0x42, 0x3e, 0xf9, 0x58, 0x03, 0xb4, 0x9b, 0x8d, 0x7c, 0xd6, 0x66,
+	0x2d, 0xd7, 0x66, 0xc5, 0x7b, 0xa5, 0xac, 0xf7, 0xae, 0x8e, 0xef, 0x6b, 0x58, 0xd8, 0xbd, 0x89,
+	0xf8, 0x66, 0xe8, 0x5a, 0x9a, 0x8c, 0xae, 0xe6, 0xa7, 0x5a, 0x06, 0x01, 0x99, 0x8c, 0x1a, 0xf4,
+	0x90, 0x97, 0x1c, 0x42, 0x78, 0x73, 0xa0, 0x8a, 0x27, 0x70, 0xc3, 0x27, 0x1a, 0x2c, 0x66, 0x51,
+	0x14, 0x72, 0xc4, 0xbf, 0xa1, 0x2e, 0xa9, 0xe1, 0xe7, 0x79, 0x9e, 0x27, 0xe4, 0x85, 0xe6, 0x87,
+	0xb0, 0x14, 0xb5, 0x4b, 0x05, 0x9c, 0xa1, 0x98, 0x58, 0xca, 0x9a, 0xf8, 0xb9, 0x06, 0xcb, 0xb9,
+	0xea, 0xdf, 0xb1, 0x95, 0x3f, 0x6a, 0xa0, 0xb7, 0xec, 0xb0, 0x7f, 0xd2, 0xcb, 0x89, 0x7a, 0x46,
+	0xad, 0x36, 0xa1, 0xda, 0x09, 0x92, 0x21, 0xaf, 0x04, 0x94, 0x27, 0x2b, 0x01, 0x95, 0xbc, 0xc4,
+	0xb9, 0x73, 0x81, 0x15, 0x85, 0xfc, 0xa9, 0xc3, 0x54, 0x6f, 0xdc, 0xef, 0x63, 0x12, 0x93, 0x38,
+	0x1e, 0xd2, 0xe3, 0x30, 0xea, 0xd4, 0x59, 0x17, 0x33, 0x63, 0xf1, 0x91, 0xd9, 0x81, 0xba, 0x85,
+	0x89, 0x73, 0xec, 0x52, 0xf3, 0xa8, 0xef, 0xe2, 0x73, 0x73, 0x10, 0x37, 0x7a, 0xd1, 0x68, 0x02,
+	0x6a, 0xb4, 0xa0, 0x21, 0xaa, 0x2a, 0x54, 0xcb, 0xfe, 0x9f, 0x34, 0x8a, 0xad, 0xf3, 0xce, 0xe0,
+	0x7a, 0x78, 0xde, 0x6a, 0x50, 0xa1, 0x8b, 0xe9, 0xa1, 0xdb, 0x0d, 0xbc, 0x23, 0x67, 0x88, 0xbb,
+	0x27, 0x5e, 0xe8, 0x71, 0x45, 0x92, 0x8c, 0x1e, 0xda, 0x7b, 0x4e, 0xff, 0xd4, 0xb5, 0x47, 0x38,
+	0xee, 0xad, 0xe2, 0xb1, 0x00, 0xa1, 0x2c, 0x41, 0x58, 0x01, 0x68, 0x07, 0xd8, 0x0e, 0x31, 0xeb,
+	0x05, 0xa2, 0xe8, 0x0a, 0x12, 0x1a, 0x8d, 0x0e, 0x69, 0x0d, 0xbd, 0xfe, 0x29, 0xab, 0xfe, 0xd3,
+	0x56, 0x3c, 0x34, 0xfb, 0x49, 0x7b, 0x1a, 0x99, 0x59, 0xf0, 0x46, 0xc3, 0x2e, 0xb0, 0xbc, 0x46,
+	0x42, 0xb4, 0x96, 0xf9, 0x9e, 0xc9, 0xcd, 0x37, 0x1a, 0xcc, 0xf3, 0xaf, 0x90, 0xd6, 0xf9, 0x9e,
+	0x3d, 0xc2, 0xfc, 0x2e, 0x46, 0x25, 0x74, 0x18, 0xdf, 0xc5, 0xe2, 0x31, 0xda, 0x06, 0xe8, 0xda,
+	0xc7, 0x8e, 0x2b, 0xd6, 0xde, 0xbb, 0x39, 0xbd, 0xa9, 0x85, 0x5f, 0x8c, 0x31, 0x09, 0xd3, 0xb5,
+	0x96, 0xb0, 0x6f, 0x82, 0x3a, 0xf9, 0x4d, 0x74, 0x62, 0x49, 0xc8, 0x88, 0x8f, 0x56, 0xa1, 0x4a,
+	0x81, 0xc7, 0xe9, 0x2a, 0x5a, 0x14, 0x4d, 0xa0, 0x9d, 0x1c, 0x80, 0x7f, 0xce, 0x05, 0x48, 0x7c,
+	0xcf, 0x25, 0xf8, 0x02, 0x84, 0xb1, 0x0f, 0xc6, 0x23, 0xc2, 0x73, 0x37, 0x19, 0x9b, 0xdf, 0x6b,
+	0x30, 0xbb, 0x35, 0x0c, 0xa3, 0x7c, 0xbf, 0x16, 0x01, 0xe9, 0x8a, 0xee, 0x89, 0xe7, 0xe2, 0xbd,
+	0xf1, 0xe8, 0x39, 0x0e, 0xd8, 0x97, 0xca, 0x96, 0x28, 0x92, 0x58, 0x57, 0x51, 0x58, 0xb7, 0x08,
+	0xd5, 0x9d, 0x91, 0xed, 0x0c, 0x79, 0xe7, 0x10, 0x0d, 0x84, 0x3b, 0xc0, 0x80, 0xf7, 0xaf, 0xc9,
+	0xd8, 0xdc, 0x82, 0xba, 0x80, 0xbc, 0x08, 0xa7, 0xcc, 0xaf, 0x34, 0xa8, 0xc5, 0x91, 0x89, 0x8f,
+	0x0c, 0xc1, 0x48, 0x2d, 0x6b, 0xe4, 0xcd, 0x70, 0x46, 0x64, 0x65, 0x59, 0x66, 0xa5, 0xf9, 0x83,
+	0x06, 0xb3, 0x29, 0xa6, 0x6b, 0xa6, 0x4a, 0x39, 0x2f, 0x55, 0x14, 0x5e, 0x95, 0x6f, 0x82, 0x57,
+	0x15, 0x85, 0x57, 0x6f, 0x35, 0x80, 0xad, 0xc1, 0x20, 0x66, 0xd5, 0xd5, 0x8e, 0x55, 0xd8, 0xc3,
+	0xf9, 0x25, 0xb2, 0xe7, 0xa2, 0xba, 0x84, 0xa0, 0x22, 0x30, 0x8a, 0xfd, 0x2d, 0xf1, 0xa6, 0xaa,
+	0xf0, 0xe6, 0x11, 0xd4, 0x12, 0x64, 0x85, 0x58, 0xf3, 0xa5, 0x06, 0xb3, 0xac, 0xb0, 0x5d, 0x95,
+	0x33, 0xf7, 0xa0, 0xb1, 0xe3, 0x0e, 0xb6, 0x1d, 0x62, 0x3f, 0x1f, 0x46, 0x55, 0x93, 0xf7, 0xe1,
+	0xb2, 0xf4, 0xea, 0x12, 0x22, 0xd9, 0x53, 0xc9, 0xe6, 0x81, 0x80, 0xa6, 0x90, 0x45, 0x47, 0xd0,
+	0x38, 0x70, 0x27, 0x32, 0xe9, 0xea, 0x32, 0x20, 0x42, 0x2d, 0x2b, 0x50, 0xdb, 0x30, 0x27, 0x7d,
+	0xa7, 0x10, 0xd8, 0xef, 0x34, 0xf6, 0x42, 0x96, 0xa8, 0x61, 0x99, 0x2b, 0xe7, 0xa5, 0x76, 0x33,
+	0xb5, 0x3c, 0xc7, 0x3a, 0x53, 0x08, 0xfd, 0xde, 0x78, 0xc4, 0xeb, 0xa9, 0x24, 0x33, 0x5f, 0xc3,
+	0x4c, 0x32, 0xa6, 0xb9, 0x48, 0xff, 0xe7, 0x90, 0xa4, 0x5c, 0x64, 0xf3, 0xeb, 0xd0, 0x6c, 0xe1,
+	0x63, 0xc7, 0xcd, 0xb2, 0x24, 0x23, 0xcf, 0xe1, 0x53, 0x39, 0x8f, 0x4f, 0xe6, 0xcf, 0xd1, 0x51,
+	0x28, 0x7a, 0xa8, 0x50, 0x1d, 0xd9, 0x04, 0x48, 0x75, 0xf0, 0x6a, 0x32, 0x17, 0xed, 0x48, 0x83,
+	0x28, 0x2c, 0x79, 0x17, 0x85, 0xa5, 0xcb, 0x6e, 0x3e, 0xc9, 0x37, 0xe3, 0xbe, 0x69, 0x19, 0xa6,
+	0xe8, 0xf0, 0xd0, 0xf9, 0xed, 0x8d, 0xd3, 0x0e, 0xbb, 0xc5, 0x28, 0x1a, 0x89, 0x8f, 0xfe, 0x2a,
+	0x84, 0x91, 0x57, 0xfa, 0x8c, 0xf1, 0xe9, 0x0a, 0xf3, 0x08, 0xea, 0xe9, 0xcb, 0xf3, 0xf5, 0x20,
+	0x5d, 0x9a, 0x43, 0x2d, 0xf1, 0x75, 0xbd, 0x58, 0x60, 0xef, 0xbf, 0xa9, 0x45, 0x27, 0x04, 0x7a,
+	0x98, 0x9c, 0x7f, 0xec, 0x2d, 0x66, 0x31, 0xda, 0x25, 0x3f, 0x5e, 0x1a, 0xb7, 0x73, 0xa4, 0xc4,
+	0x47, 0x6d, 0x68, 0xc8, 0x2f, 0x6c, 0x68, 0x99, 0xb3, 0x5b, 0x7d, 0x03, 0x34, 0xf4, 0xfc, 0x09,
+	0xe2, 0x53, 0x00, 0xc2, 0x7b, 0x7d, 0x0c, 0x40, 0xfe, 0xf9, 0x20, 0x06, 0xa0, 0x3e, 0xec, 0xff,
+	0x97, 0x1d, 0x94, 0xc9, 0x4b, 0x39, 0x4a, 0x71, 0x8a, 0xcf, 0xf1, 0xc6, 0x52, 0x9e, 0x38, 0xda,
+	0x2e, 0x3e, 0x14, 0xc7, 0xdb, 0x95, 0x67, 0xf1, 0x78, 0x7b, 0xe6, 0xc5, 0xfa, 0x09, 0x6b, 0x6a,
+	0xa5, 0x57, 0x24, 0x3d, 0xf9, 0x92, 0xf2, 0x3a, 0x61, 0xdc, 0xb9, 0x60, 0x86, 0xf8, 0xc8, 0x62,
+	0x84, 0x56, 0x6f, 0x98, 0xe8, 0xf7, 0x22, 0x6a, 0xf5, 0xca, 0x67, 0xfc, 0xe1, 0x92, 0x59, 0xe2,
+	0xa3, 0x0e, 0xab, 0x90, 0xb2, 0xc2, 0x7c, 0x08, 0x4c, 0x9b, 0x71, 0xd1, 0x14, 0xf1, 0xd1, 0xfb,
+	0x70, 0x3b, 0xf7, 0xca, 0x86, 0x56, 0x78, 0x2e, 0x5c, 0x70, 0x2b, 0x35, 0xfe, 0x78, 0xe9, 0x7c,
+	0xe4, 0xc0, 0x5e, 0xbe, 0x03, 0x7b, 0x17, 0x3a, 0x30, 0xef, 0x59, 0xed, 0x31, 0xd4, 0xa5, 0x77,
+	0x25, 0xb4, 0x94, 0xac, 0x95, 0x1e, 0xce, 0x8c, 0xe5, 0x5c, 0x79, 0x44, 0x42, 0xe1, 0x7e, 0xa2,
+	0x64, 0x01, 0xaf, 0x30, 0x4a, 0x16, 0x24, 0x55, 0xa2, 0x9d, 0x5c, 0xe1, 0x78, 0x6f, 0x1f, 0x67,
+	0x41, 0xe6, 0x2e, 0x62, 0xe8, 0xf9, 0x13, 0xc4, 0x47, 0x0f, 0xd8, 0x6f, 0x19, 0xfc, 0x2e, 0x89,
+	0x16, 0xa2, 0x75, 0xd2, 0x45, 0xd5, 0x58, 0xcc, 0x0a, 0x89, 0x8f, 0xfe, 0x09, 0x33, 0x49, 0x0f,
+	0x8c, 0xf8, 0x85, 0x5f, 0x6c, 0xe7, 0x8d, 0x85, 0x8c, 0x8c, 0xf8, 0xe8, 0xef, 0x30, 0x1d, 0x83,
+	0x40, 0xf3, 0x32, 0x28, 0xba, 0x07, 0xa9, 0x22, 0xe2, 0xa3, 0x0d, 0x98, 0xe2, 0x4d, 0x13, 0xe2,
+	0xa5, 0x25, 0xed, 0xee, 0x8c, 0x79, 0x45, 0x12, 0x01, 0x4b, 0xcf, 0x40, 0xa4, 0x96, 0xcd, 0x14,
+	0x98, 0xdc, 0x0c, 0x3c, 0x84, 0x9a, 0xd0, 0x1f, 0xc4, 0x81, 0x90, 0x5b, 0x93, 0x38, 0x10, 0x6a,
+	0x23, 0xf1, 0x18, 0xea, 0xd2, 0x99, 0x87, 0xd2, 0xbc, 0x97, 0x5a, 0x05, 0x63, 0x39, 0x57, 0x9e,
+	0x64, 0x8d, 0x74, 0x10, 0x08, 0x59, 0xa3, 0x1e, 0x39, 0x42, 0xd6, 0x64, 0xcf, 0x8e, 0x07, 0x00,
+	0x69, 0xb5, 0x8a, 0x03, 0x2a, 0x1d, 0x0f, 0xc6, 0x62, 0x56, 0x48, 0xfc, 0x56, 0xfd, 0x83, 0xda,
+	0x06, 0xfb, 0xd1, 0xf6, 0x3f, 0xf4, 0x9f, 0xe7, 0xb7, 0xd8, 0x2f, 0xb2, 0xff, 0xf8, 0x35, 0x00,
+	0x00, 0xff, 0xff, 0x10, 0x04, 0x45, 0x5d, 0xcd, 0x1d, 0x00, 0x00,
+}
diff --git a/pkg/proto/user/user.proto b/pkg/proto/user/user.proto
index f23d82135..c6dad658c 100644
--- a/pkg/proto/user/user.proto
+++ b/pkg/proto/user/user.proto
@@ -84,7 +84,8 @@ message Conversation{
 
 message SetConversationReq{
   Conversation Conversation = 1;
-  string OperationID = 2;
+  int32 notificationType = 2;
+  string OperationID = 3;
 }
 
 message SetConversationResp{
@@ -95,7 +96,8 @@ message SetRecvMsgOptReq {
   string OwnerUserID = 1;
   string ConversationID = 2;
   int32 RecvMsgOpt = 3;
-  string OperationID = 4;
+  int32 notificationType = 4;
+  string OperationID = 5;
 }
 
 message SetRecvMsgOptResp {
@@ -137,7 +139,8 @@ message GetAllConversationsResp{
 message BatchSetConversationsReq{
   repeated Conversation Conversations = 1;
   string OwnerUserID = 2;
-  string OperationID = 3;
+  int32 notificationType = 3;
+  string OperationID = 4;
 }
 
 message BatchSetConversationsResp{