Ver Fonte

精选管理

wfz há 3 anos atrás
pai
commit
2ab213df86

+ 315 - 78
api/common/common.pb.go

@@ -7779,7 +7779,7 @@ type ManagerFindCanHandpickUserListRequest struct {
 
 	NextId         string `protobuf:"bytes,1,opt,name=nextId,proto3" json:"nextId"`
 	Offset         int64  `protobuf:"varint,2,opt,name=offset,proto3" json:"offset"`
-	IsHandpickUser bool   `protobuf:"varint,3,opt,name=isHandpickUser,proto3" json:"isHandpickUser"`
+	IsHandpickUser bool   `protobuf:"varint,3,opt,name=isHandpickUser,proto3" json:"isHandpickUser"` // 是则筛选 已经是精选的用户 否则筛选还未检查过的优质用户
 }
 
 func (x *ManagerFindCanHandpickUserListRequest) Reset() {
@@ -7835,6 +7835,179 @@ func (x *ManagerFindCanHandpickUserListRequest) GetIsHandpickUser() bool {
 	return false
 }
 
+type ManagerSetHandpickUserRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	PassList   []*SetHandpickUserInfo `protobuf:"bytes,1,rep,name=passList,proto3" json:"passList"`
+	UnPassList []*SetHandpickUserInfo `protobuf:"bytes,2,rep,name=unPassList,proto3" json:"unPassList"`
+}
+
+func (x *ManagerSetHandpickUserRequest) Reset() {
+	*x = ManagerSetHandpickUserRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_common_proto_msgTypes[107]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *ManagerSetHandpickUserRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ManagerSetHandpickUserRequest) ProtoMessage() {}
+
+func (x *ManagerSetHandpickUserRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_common_proto_msgTypes[107]
+	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 ManagerSetHandpickUserRequest.ProtoReflect.Descriptor instead.
+func (*ManagerSetHandpickUserRequest) Descriptor() ([]byte, []int) {
+	return file_common_proto_rawDescGZIP(), []int{107}
+}
+
+func (x *ManagerSetHandpickUserRequest) GetPassList() []*SetHandpickUserInfo {
+	if x != nil {
+		return x.PassList
+	}
+	return make([]*SetHandpickUserInfo, 0)
+}
+
+func (x *ManagerSetHandpickUserRequest) GetUnPassList() []*SetHandpickUserInfo {
+	if x != nil {
+		return x.UnPassList
+	}
+	return make([]*SetHandpickUserInfo, 0)
+}
+
+type ManagerSetHandpickUserOneRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	UserId         string `protobuf:"bytes,1,opt,name=userId,proto3" json:"userId"`
+	Picture        string `protobuf:"bytes,2,opt,name=picture,proto3" json:"picture"`
+	IsHandpickUser bool   `protobuf:"varint,3,opt,name=isHandpickUser,proto3" json:"isHandpickUser"`
+}
+
+func (x *ManagerSetHandpickUserOneRequest) Reset() {
+	*x = ManagerSetHandpickUserOneRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_common_proto_msgTypes[108]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *ManagerSetHandpickUserOneRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ManagerSetHandpickUserOneRequest) ProtoMessage() {}
+
+func (x *ManagerSetHandpickUserOneRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_common_proto_msgTypes[108]
+	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 ManagerSetHandpickUserOneRequest.ProtoReflect.Descriptor instead.
+func (*ManagerSetHandpickUserOneRequest) Descriptor() ([]byte, []int) {
+	return file_common_proto_rawDescGZIP(), []int{108}
+}
+
+func (x *ManagerSetHandpickUserOneRequest) GetUserId() string {
+	if x != nil {
+		return x.UserId
+	}
+	return ""
+}
+
+func (x *ManagerSetHandpickUserOneRequest) GetPicture() string {
+	if x != nil {
+		return x.Picture
+	}
+	return ""
+}
+
+func (x *ManagerSetHandpickUserOneRequest) GetIsHandpickUser() bool {
+	if x != nil {
+		return x.IsHandpickUser
+	}
+	return false
+}
+
+type SetHandpickUserInfo struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	UserId  string `protobuf:"bytes,1,opt,name=userId,proto3" json:"userId"`
+	Picture string `protobuf:"bytes,2,opt,name=picture,proto3" json:"picture"`
+}
+
+func (x *SetHandpickUserInfo) Reset() {
+	*x = SetHandpickUserInfo{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_common_proto_msgTypes[109]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *SetHandpickUserInfo) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SetHandpickUserInfo) ProtoMessage() {}
+
+func (x *SetHandpickUserInfo) ProtoReflect() protoreflect.Message {
+	mi := &file_common_proto_msgTypes[109]
+	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 SetHandpickUserInfo.ProtoReflect.Descriptor instead.
+func (*SetHandpickUserInfo) Descriptor() ([]byte, []int) {
+	return file_common_proto_rawDescGZIP(), []int{109}
+}
+
+func (x *SetHandpickUserInfo) GetUserId() string {
+	if x != nil {
+		return x.UserId
+	}
+	return ""
+}
+
+func (x *SetHandpickUserInfo) GetPicture() string {
+	if x != nil {
+		return x.Picture
+	}
+	return ""
+}
+
 type ManagerFindCanHandpickUserListReply struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
@@ -7848,7 +8021,7 @@ type ManagerFindCanHandpickUserListReply struct {
 func (x *ManagerFindCanHandpickUserListReply) Reset() {
 	*x = ManagerFindCanHandpickUserListReply{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_common_proto_msgTypes[107]
+		mi := &file_common_proto_msgTypes[110]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -7861,7 +8034,7 @@ func (x *ManagerFindCanHandpickUserListReply) String() string {
 func (*ManagerFindCanHandpickUserListReply) ProtoMessage() {}
 
 func (x *ManagerFindCanHandpickUserListReply) ProtoReflect() protoreflect.Message {
-	mi := &file_common_proto_msgTypes[107]
+	mi := &file_common_proto_msgTypes[110]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -7874,7 +8047,7 @@ func (x *ManagerFindCanHandpickUserListReply) ProtoReflect() protoreflect.Messag
 
 // Deprecated: Use ManagerFindCanHandpickUserListReply.ProtoReflect.Descriptor instead.
 func (*ManagerFindCanHandpickUserListReply) Descriptor() ([]byte, []int) {
-	return file_common_proto_rawDescGZIP(), []int{107}
+	return file_common_proto_rawDescGZIP(), []int{110}
 }
 
 func (x *ManagerFindCanHandpickUserListReply) GetList() []*ManagerFindCanHandpickUserInfo {
@@ -7932,7 +8105,7 @@ type ManagerFindCanHandpickUserInfo struct {
 func (x *ManagerFindCanHandpickUserInfo) Reset() {
 	*x = ManagerFindCanHandpickUserInfo{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_common_proto_msgTypes[108]
+		mi := &file_common_proto_msgTypes[111]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -7945,7 +8118,7 @@ func (x *ManagerFindCanHandpickUserInfo) String() string {
 func (*ManagerFindCanHandpickUserInfo) ProtoMessage() {}
 
 func (x *ManagerFindCanHandpickUserInfo) ProtoReflect() protoreflect.Message {
-	mi := &file_common_proto_msgTypes[108]
+	mi := &file_common_proto_msgTypes[111]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -7958,7 +8131,7 @@ func (x *ManagerFindCanHandpickUserInfo) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use ManagerFindCanHandpickUserInfo.ProtoReflect.Descriptor instead.
 func (*ManagerFindCanHandpickUserInfo) Descriptor() ([]byte, []int) {
-	return file_common_proto_rawDescGZIP(), []int{108}
+	return file_common_proto_rawDescGZIP(), []int{111}
 }
 
 func (x *ManagerFindCanHandpickUserInfo) GetId() string {
@@ -9111,67 +9284,90 @@ var file_common_proto_rawDesc = []byte{
 	0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x26, 0x0a, 0x0e,
 	0x69, 0x73, 0x48, 0x61, 0x6e, 0x64, 0x70, 0x69, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x18, 0x03,
 	0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, 0x73, 0x48, 0x61, 0x6e, 0x64, 0x70, 0x69, 0x63, 0x6b,
-	0x55, 0x73, 0x65, 0x72, 0x22, 0x93, 0x01, 0x0a, 0x23, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72,
-	0x46, 0x69, 0x6e, 0x64, 0x43, 0x61, 0x6e, 0x48, 0x61, 0x6e, 0x64, 0x70, 0x69, 0x63, 0x6b, 0x55,
-	0x73, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x3e, 0x0a, 0x04,
-	0x6c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x61, 0x70, 0x69,
-	0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x46,
-	0x69, 0x6e, 0x64, 0x43, 0x61, 0x6e, 0x48, 0x61, 0x6e, 0x64, 0x70, 0x69, 0x63, 0x6b, 0x55, 0x73,
-	0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06,
-	0x6e, 0x65, 0x78, 0x74, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6e, 0x65,
-	0x78, 0x74, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x03, 0x20,
-	0x01, 0x28, 0x03, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x22, 0xe2, 0x05, 0x0a, 0x1e, 0x4d,
+	0x55, 0x73, 0x65, 0x72, 0x22, 0x9d, 0x01, 0x0a, 0x1d, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72,
+	0x53, 0x65, 0x74, 0x48, 0x61, 0x6e, 0x64, 0x70, 0x69, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x52,
+	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3b, 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, 0x4c, 0x69,
+	0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63,
+	0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x65, 0x74, 0x48, 0x61, 0x6e, 0x64, 0x70, 0x69, 0x63,
+	0x6b, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x4c,
+	0x69, 0x73, 0x74, 0x12, 0x3f, 0x0a, 0x0a, 0x75, 0x6e, 0x50, 0x61, 0x73, 0x73, 0x4c, 0x69, 0x73,
+	0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f,
+	0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x65, 0x74, 0x48, 0x61, 0x6e, 0x64, 0x70, 0x69, 0x63, 0x6b,
+	0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0a, 0x75, 0x6e, 0x50, 0x61, 0x73, 0x73,
+	0x4c, 0x69, 0x73, 0x74, 0x22, 0x7c, 0x0a, 0x20, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x53,
+	0x65, 0x74, 0x48, 0x61, 0x6e, 0x64, 0x70, 0x69, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x4f, 0x6e,
+	0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72,
+	0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64,
+	0x12, 0x18, 0x0a, 0x07, 0x70, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x07, 0x70, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x69, 0x73,
+	0x48, 0x61, 0x6e, 0x64, 0x70, 0x69, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01,
+	0x28, 0x08, 0x52, 0x0e, 0x69, 0x73, 0x48, 0x61, 0x6e, 0x64, 0x70, 0x69, 0x63, 0x6b, 0x55, 0x73,
+	0x65, 0x72, 0x22, 0x47, 0x0a, 0x13, 0x53, 0x65, 0x74, 0x48, 0x61, 0x6e, 0x64, 0x70, 0x69, 0x63,
+	0x6b, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65,
+	0x72, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49,
+	0x64, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x07, 0x70, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x22, 0x93, 0x01, 0x0a, 0x23,
+	0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x46, 0x69, 0x6e, 0x64, 0x43, 0x61, 0x6e, 0x48, 0x61,
+	0x6e, 0x64, 0x70, 0x69, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65,
+	0x70, 0x6c, 0x79, 0x12, 0x3e, 0x0a, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28,
+	0x0b, 0x32, 0x2a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d,
 	0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x46, 0x69, 0x6e, 0x64, 0x43, 0x61, 0x6e, 0x48, 0x61, 0x6e,
-	0x64, 0x70, 0x69, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0e, 0x0a,
-	0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1a, 0x0a,
-	0x08, 0x6e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
-	0x08, 0x6e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x76, 0x61,
-	0x74, 0x61, 0x72, 0x55, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x76,
-	0x61, 0x74, 0x61, 0x72, 0x55, 0x72, 0x6c, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x65, 0x78, 0x18, 0x04,
-	0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x73, 0x65, 0x78, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x69, 0x63,
-	0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x70, 0x69, 0x63,
-	0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x67, 0x65, 0x18, 0x06, 0x20, 0x01,
-	0x28, 0x03, 0x52, 0x03, 0x61, 0x67, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x73, 0x74,
-	0x65, 0x6c, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d,
-	0x63, 0x6f, 0x6e, 0x73, 0x74, 0x65, 0x6c, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a,
-	0x06, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x63,
-	0x72, 0x65, 0x64, 0x69, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75,
-	0x72, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74,
-	0x75, 0x72, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x69, 0x6e, 0x74, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65,
-	0x56, 0x6f, 0x69, 0x63, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x69, 0x6e, 0x74,
-	0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x56, 0x6f, 0x69, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70,
-	0x72, 0x6f, 0x76, 0x69, 0x6e, 0x63, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70,
-	0x72, 0x6f, 0x76, 0x69, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x69, 0x74, 0x79, 0x18,
-	0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x69, 0x74, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x70,
-	0x65, 0x72, 0x73, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x70,
-	0x65, 0x72, 0x73, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x69, 0x73, 0x48, 0x69, 0x67,
-	0x68, 0x51, 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d,
-	0x69, 0x73, 0x48, 0x69, 0x67, 0x68, 0x51, 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x18, 0x0a,
-	0x07, 0x69, 0x73, 0x42, 0x6c, 0x61, 0x63, 0x6b, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07,
-	0x69, 0x73, 0x42, 0x6c, 0x61, 0x63, 0x6b, 0x12, 0x16, 0x0a, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68,
-	0x74, 0x18, 0x10, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12,
-	0x24, 0x0a, 0x0d, 0x6c, 0x61, 0x73, 0x74, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x54, 0x69, 0x6d, 0x65,
-	0x18, 0x11, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x6c, 0x61, 0x73, 0x74, 0x4c, 0x6f, 0x67, 0x69,
-	0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x62, 0x6c, 0x61, 0x63, 0x6b, 0x44, 0x65,
-	0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x62, 0x6c, 0x61,
-	0x63, 0x6b, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x73, 0x56,
-	0x69, 0x70, 0x18, 0x13, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x69, 0x73, 0x56, 0x69, 0x70, 0x12,
-	0x1a, 0x0a, 0x08, 0x76, 0x69, 0x70, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x14, 0x20, 0x01, 0x28,
-	0x03, 0x52, 0x08, 0x76, 0x69, 0x70, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x1c, 0x0a, 0x09, 0x69,
-	0x73, 0x59, 0x65, 0x61, 0x72, 0x56, 0x69, 0x70, 0x18, 0x15, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09,
-	0x69, 0x73, 0x59, 0x65, 0x61, 0x72, 0x56, 0x69, 0x70, 0x12, 0x22, 0x0a, 0x0c, 0x76, 0x69, 0x70,
-	0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x16, 0x20, 0x03, 0x28, 0x09, 0x52,
-	0x0c, 0x76, 0x69, 0x70, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x26, 0x0a,
-	0x0e, 0x69, 0x73, 0x48, 0x61, 0x6e, 0x64, 0x70, 0x69, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x18,
-	0x17, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, 0x73, 0x48, 0x61, 0x6e, 0x64, 0x70, 0x69, 0x63,
-	0x6b, 0x55, 0x73, 0x65, 0x72, 0x12, 0x28, 0x0a, 0x0f, 0x68, 0x61, 0x6e, 0x64, 0x70, 0x69, 0x63,
-	0x6b, 0x50, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x18, 0x18, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f,
-	0x68, 0x61, 0x6e, 0x64, 0x70, 0x69, 0x63, 0x6b, 0x50, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x42,
-	0x43, 0x0a, 0x0a, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x50, 0x01, 0x5a,
-	0x33, 0x67, 0x69, 0x74, 0x2e, 0x69, 0x6b, 0x75, 0x62, 0x61, 0x6e, 0x2e, 0x63, 0x6f, 0x6d, 0x2f,
-	0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2f, 0x70, 0x77, 0x2d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
-	0x75, 0x66, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x3b, 0x63, 0x6f,
-	0x6d, 0x6d, 0x6f, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+	0x64, 0x70, 0x69, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x6c,
+	0x69, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x64, 0x18, 0x02, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x06, 0x6e, 0x65, 0x78, 0x74, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74,
+	0x6f, 0x74, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61,
+	0x6c, 0x22, 0xe2, 0x05, 0x0a, 0x1e, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x46, 0x69, 0x6e,
+	0x64, 0x43, 0x61, 0x6e, 0x48, 0x61, 0x6e, 0x64, 0x70, 0x69, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72,
+	0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x02, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65,
+	0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65,
+	0x12, 0x1c, 0x0a, 0x09, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x55, 0x72, 0x6c, 0x18, 0x03, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x55, 0x72, 0x6c, 0x12, 0x10,
+	0x0a, 0x03, 0x73, 0x65, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x73, 0x65, 0x78,
+	0x12, 0x1a, 0x0a, 0x08, 0x70, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03,
+	0x28, 0x09, 0x52, 0x08, 0x70, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x10, 0x0a, 0x03,
+	0x61, 0x67, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x61, 0x67, 0x65, 0x12, 0x24,
+	0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x65, 0x6c, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18,
+	0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x65, 0x6c, 0x6c, 0x61,
+	0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x18, 0x08,
+	0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x12, 0x1c, 0x0a, 0x09,
+	0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x69, 0x6e,
+	0x74, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x56, 0x6f, 0x69, 0x63, 0x65, 0x18, 0x0a, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x0e, 0x69, 0x6e, 0x74, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x56, 0x6f, 0x69,
+	0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x6e, 0x63, 0x65, 0x18, 0x0b,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x6e, 0x63, 0x65, 0x12, 0x12,
+	0x0a, 0x04, 0x63, 0x69, 0x74, 0x79, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x69,
+	0x74, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x0d,
+	0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x24,
+	0x0a, 0x0d, 0x69, 0x73, 0x48, 0x69, 0x67, 0x68, 0x51, 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x18,
+	0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x69, 0x73, 0x48, 0x69, 0x67, 0x68, 0x51, 0x75, 0x61,
+	0x6c, 0x69, 0x74, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x69, 0x73, 0x42, 0x6c, 0x61, 0x63, 0x6b, 0x18,
+	0x0f, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x42, 0x6c, 0x61, 0x63, 0x6b, 0x12, 0x16,
+	0x0a, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x10, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06,
+	0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x24, 0x0a, 0x0d, 0x6c, 0x61, 0x73, 0x74, 0x4c, 0x6f,
+	0x67, 0x69, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x6c,
+	0x61, 0x73, 0x74, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x0c,
+	0x62, 0x6c, 0x61, 0x63, 0x6b, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x12, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x0c, 0x62, 0x6c, 0x61, 0x63, 0x6b, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73,
+	0x12, 0x14, 0x0a, 0x05, 0x69, 0x73, 0x56, 0x69, 0x70, 0x18, 0x13, 0x20, 0x01, 0x28, 0x08, 0x52,
+	0x05, 0x69, 0x73, 0x56, 0x69, 0x70, 0x12, 0x1a, 0x0a, 0x08, 0x76, 0x69, 0x70, 0x4c, 0x65, 0x76,
+	0x65, 0x6c, 0x18, 0x14, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x76, 0x69, 0x70, 0x4c, 0x65, 0x76,
+	0x65, 0x6c, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x73, 0x59, 0x65, 0x61, 0x72, 0x56, 0x69, 0x70, 0x18,
+	0x15, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x73, 0x59, 0x65, 0x61, 0x72, 0x56, 0x69, 0x70,
+	0x12, 0x22, 0x0a, 0x0c, 0x76, 0x69, 0x70, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73,
+	0x18, 0x16, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x76, 0x69, 0x70, 0x46, 0x75, 0x6e, 0x63, 0x74,
+	0x69, 0x6f, 0x6e, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x69, 0x73, 0x48, 0x61, 0x6e, 0x64, 0x70, 0x69,
+	0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x18, 0x17, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, 0x73,
+	0x48, 0x61, 0x6e, 0x64, 0x70, 0x69, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x12, 0x28, 0x0a, 0x0f,
+	0x68, 0x61, 0x6e, 0x64, 0x70, 0x69, 0x63, 0x6b, 0x50, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x18,
+	0x18, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x68, 0x61, 0x6e, 0x64, 0x70, 0x69, 0x63, 0x6b, 0x50,
+	0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x42, 0x43, 0x0a, 0x0a, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f,
+	0x6d, 0x6d, 0x6f, 0x6e, 0x50, 0x01, 0x5a, 0x33, 0x67, 0x69, 0x74, 0x2e, 0x69, 0x6b, 0x75, 0x62,
+	0x61, 0x6e, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2f, 0x70, 0x77,
+	0x2d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x63, 0x6f,
+	0x6d, 0x6d, 0x6f, 0x6e, 0x3b, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x33,
 }
 
 var (
@@ -9186,7 +9382,7 @@ func file_common_proto_rawDescGZIP() []byte {
 	return file_common_proto_rawDescData
 }
 
-var file_common_proto_msgTypes = make([]protoimpl.MessageInfo, 109)
+var file_common_proto_msgTypes = make([]protoimpl.MessageInfo, 112)
 var file_common_proto_goTypes = []interface{}{
 	(*UserAndPartnerIdentifyIdParam)(nil),         // 0: api.common.UserAndPartnerIdentifyIdParam
 	(*UserAndPartnerParam)(nil),                   // 1: api.common.UserAndPartnerParam
@@ -9295,8 +9491,11 @@ var file_common_proto_goTypes = []interface{}{
 	(*GetLoginConfigReply)(nil),                   // 104: api.common.GetLoginConfigReply
 	(*SendMessageReply)(nil),                      // 105: api.common.SendMessageReply
 	(*ManagerFindCanHandpickUserListRequest)(nil), // 106: api.common.ManagerFindCanHandpickUserListRequest
-	(*ManagerFindCanHandpickUserListReply)(nil),   // 107: api.common.ManagerFindCanHandpickUserListReply
-	(*ManagerFindCanHandpickUserInfo)(nil),        // 108: api.common.ManagerFindCanHandpickUserInfo
+	(*ManagerSetHandpickUserRequest)(nil),         // 107: api.common.ManagerSetHandpickUserRequest
+	(*ManagerSetHandpickUserOneRequest)(nil),      // 108: api.common.ManagerSetHandpickUserOneRequest
+	(*SetHandpickUserInfo)(nil),                   // 109: api.common.SetHandpickUserInfo
+	(*ManagerFindCanHandpickUserListReply)(nil),   // 110: api.common.ManagerFindCanHandpickUserListReply
+	(*ManagerFindCanHandpickUserInfo)(nil),        // 111: api.common.ManagerFindCanHandpickUserInfo
 }
 var file_common_proto_depIdxs = []int32{
 	32,  // 0: api.common.HomeInfo.tagList:type_name -> api.common.TagList
@@ -9318,12 +9517,14 @@ var file_common_proto_depIdxs = []int32{
 	96,  // 16: api.common.ManagerScripReply.list:type_name -> api.common.ManagerScripInfo
 	99,  // 17: api.common.ManagerFindReportListReply.list:type_name -> api.common.ManagerFindReportInfo
 	102, // 18: api.common.ManagerFindReportDetailsListReply.list:type_name -> api.common.ManagerFindReportDetailsInfo
-	108, // 19: api.common.ManagerFindCanHandpickUserListReply.list:type_name -> api.common.ManagerFindCanHandpickUserInfo
-	20,  // [20:20] is the sub-list for method output_type
-	20,  // [20:20] is the sub-list for method input_type
-	20,  // [20:20] is the sub-list for extension type_name
-	20,  // [20:20] is the sub-list for extension extendee
-	0,   // [0:20] is the sub-list for field type_name
+	109, // 19: api.common.ManagerSetHandpickUserRequest.passList:type_name -> api.common.SetHandpickUserInfo
+	109, // 20: api.common.ManagerSetHandpickUserRequest.unPassList:type_name -> api.common.SetHandpickUserInfo
+	111, // 21: api.common.ManagerFindCanHandpickUserListReply.list:type_name -> api.common.ManagerFindCanHandpickUserInfo
+	22,  // [22:22] is the sub-list for method output_type
+	22,  // [22:22] is the sub-list for method input_type
+	22,  // [22:22] is the sub-list for extension type_name
+	22,  // [22:22] is the sub-list for extension extendee
+	0,   // [0:22] is the sub-list for field type_name
 }
 
 func init() { file_common_proto_init() }
@@ -10617,7 +10818,7 @@ func file_common_proto_init() {
 			}
 		}
 		file_common_proto_msgTypes[107].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*ManagerFindCanHandpickUserListReply); i {
+			switch v := v.(*ManagerSetHandpickUserRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -10629,6 +10830,42 @@ func file_common_proto_init() {
 			}
 		}
 		file_common_proto_msgTypes[108].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*ManagerSetHandpickUserOneRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_common_proto_msgTypes[109].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*SetHandpickUserInfo); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_common_proto_msgTypes[110].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*ManagerFindCanHandpickUserListReply); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_common_proto_msgTypes[111].Exporter = func(v interface{}, i int) interface{} {
 			switch v := v.(*ManagerFindCanHandpickUserInfo); i {
 			case 0:
 				return &v.state
@@ -10647,7 +10884,7 @@ func file_common_proto_init() {
 			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
 			RawDescriptor: file_common_proto_rawDesc,
 			NumEnums:      0,
-			NumMessages:   109,
+			NumMessages:   112,
 			NumExtensions: 0,
 			NumServices:   0,
 		},

+ 16 - 0
api/common/common.proto

@@ -786,9 +786,25 @@ message SendMessageReply{
 message ManagerFindCanHandpickUserListRequest{
   string nextId = 1;
   int64 offset = 2;
+  bool isHandpickUser = 3; // 是则筛选 已经是精选的用户 否则筛选还未检查过的优质用户
+}
+
+message ManagerSetHandpickUserRequest{
+   repeated SetHandpickUserInfo passList = 1;
+   repeated SetHandpickUserInfo unPassList = 2;
+}
+
+message ManagerSetHandpickUserOneRequest{
+  string userId = 1;
+  string picture = 2;
   bool isHandpickUser = 3;
 }
 
+message SetHandpickUserInfo{
+  string userId = 1;
+  string picture = 2;
+}
+
 message ManagerFindCanHandpickUserListReply{
   repeated ManagerFindCanHandpickUserInfo list = 1;
   string nextId = 2;

+ 436 - 413
api/user/user.pb.go

@@ -3268,7 +3268,7 @@ var file_user_proto_rawDesc = []byte{
 	0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x2a,
 	0x0a, 0x10, 0x50, 0x61, 0x79, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x52, 0x65, 0x70,
 	0x6c, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01,
-	0x28, 0x0c, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x32, 0x91, 0x5d, 0x0a, 0x04, 0x55,
+	0x28, 0x0c, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x32, 0xa9, 0x5f, 0x0a, 0x04, 0x55,
 	0x73, 0x65, 0x72, 0x12, 0x54, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e,
 	0x66, 0x6f, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
 	0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x12, 0x2e, 0x61, 0x70, 0x69,
@@ -3788,237 +3788,254 @@ var file_user_proto_rawDesc = []byte{
 	0x6b, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x2a,
 	0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x22, 0x1f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x61, 0x6e,
 	0x61, 0x67, 0x65, 0x72, 0x2f, 0x68, 0x61, 0x6e, 0x64, 0x70, 0x69, 0x63, 0x6b, 0x2f, 0x75, 0x73,
-	0x65, 0x72, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x3a, 0x01, 0x2a, 0x12, 0x8b, 0x01, 0x0a, 0x1a, 0x4d,
-	0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x4d, 0x61, 0x72, 0x6b, 0x48, 0x69, 0x67, 0x68, 0x51, 0x75,
-	0x61, 0x6c, 0x69, 0x74, 0x79, 0x55, 0x73, 0x65, 0x72, 0x12, 0x2b, 0x2e, 0x61, 0x70, 0x69, 0x2e,
-	0x75, 0x73, 0x65, 0x72, 0x2e, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x4d, 0x61, 0x72, 0x6b,
-	0x48, 0x69, 0x67, 0x68, 0x51, 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x55, 0x73, 0x65, 0x72, 0x52,
-	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
-	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x28,
-	0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x22, 0x1d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x61, 0x6e,
-	0x61, 0x67, 0x65, 0x72, 0x2f, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x2f, 0x75, 0x73, 0x65,
-	0x72, 0x2f, 0x73, 0x65, 0x74, 0x3a, 0x01, 0x2a, 0x12, 0x80, 0x01, 0x0a, 0x1d, 0x4d, 0x61, 0x6e,
+	0x65, 0x72, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x3a, 0x01, 0x2a, 0x12, 0x86, 0x01, 0x0a, 0x16, 0x4d,
+	0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x53, 0x65, 0x74, 0x48, 0x61, 0x6e, 0x64, 0x70, 0x69, 0x63,
+	0x6b, 0x55, 0x73, 0x65, 0x72, 0x12, 0x29, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d,
+	0x6f, 0x6e, 0x2e, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x53, 0x65, 0x74, 0x48, 0x61, 0x6e,
+	0x64, 0x70, 0x69, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+	0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
+	0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x29, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x23,
+	0x22, 0x1e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2f, 0x68,
+	0x61, 0x6e, 0x64, 0x70, 0x69, 0x63, 0x6b, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x73, 0x65, 0x74,
+	0x3a, 0x01, 0x2a, 0x12, 0x8c, 0x01, 0x0a, 0x19, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x53,
+	0x65, 0x74, 0x48, 0x61, 0x6e, 0x64, 0x70, 0x69, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x4f, 0x6e,
+	0x65, 0x12, 0x2c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d,
+	0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x53, 0x65, 0x74, 0x48, 0x61, 0x6e, 0x64, 0x70, 0x69, 0x63,
+	0x6b, 0x55, 0x73, 0x65, 0x72, 0x4f, 0x6e, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
+	0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
+	0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x29, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x22,
+	0x1e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2f, 0x68, 0x61,
+	0x6e, 0x64, 0x70, 0x69, 0x63, 0x6b, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x73, 0x65, 0x74, 0x3a,
+	0x01, 0x2a, 0x12, 0x8b, 0x01, 0x0a, 0x1a, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x4d, 0x61,
+	0x72, 0x6b, 0x48, 0x69, 0x67, 0x68, 0x51, 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x55, 0x73, 0x65,
+	0x72, 0x12, 0x2b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x4d, 0x61, 0x6e,
 	0x61, 0x67, 0x65, 0x72, 0x4d, 0x61, 0x72, 0x6b, 0x48, 0x69, 0x67, 0x68, 0x51, 0x75, 0x61, 0x6c,
-	0x69, 0x74, 0x79, 0x55, 0x73, 0x65, 0x72, 0x4f, 0x6e, 0x65, 0x12, 0x19, 0x2e, 0x61, 0x70, 0x69,
+	0x69, 0x74, 0x79, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16,
+	0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
+	0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x22, 0x1d,
+	0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2f, 0x71, 0x75, 0x61,
+	0x6c, 0x69, 0x74, 0x79, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x73, 0x65, 0x74, 0x3a, 0x01, 0x2a,
+	0x12, 0x80, 0x01, 0x0a, 0x1d, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x4d, 0x61, 0x72, 0x6b,
+	0x48, 0x69, 0x67, 0x68, 0x51, 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x55, 0x73, 0x65, 0x72, 0x4f,
+	0x6e, 0x65, 0x12, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e,
+	0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x49, 0x44, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x1a, 0x16, 0x2e,
+	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
+	0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x2c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x26, 0x22, 0x21, 0x2f,
+	0x61, 0x70, 0x69, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2f, 0x71, 0x75, 0x61, 0x6c,
+	0x69, 0x74, 0x79, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x73, 0x65, 0x74, 0x2f, 0x6f, 0x6e, 0x65,
+	0x3a, 0x01, 0x2a, 0x12, 0x70, 0x0a, 0x13, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x53, 0x65,
+	0x74, 0x55, 0x73, 0x65, 0x72, 0x42, 0x6c, 0x61, 0x63, 0x6b, 0x12, 0x18, 0x2e, 0x61, 0x70, 0x69,
 	0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x49, 0x44,
-	0x50, 0x61, 0x72, 0x61, 0x6d, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,
-	0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x2c, 0x82,
-	0xd3, 0xe4, 0x93, 0x02, 0x26, 0x22, 0x21, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x61, 0x6e, 0x61,
-	0x67, 0x65, 0x72, 0x2f, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x2f, 0x75, 0x73, 0x65, 0x72,
-	0x2f, 0x73, 0x65, 0x74, 0x2f, 0x6f, 0x6e, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x70, 0x0a, 0x13, 0x4d,
-	0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x53, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x42, 0x6c, 0x61,
-	0x63, 0x6b, 0x12, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e,
-	0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x49, 0x44, 0x4c, 0x69, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67,
-	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45,
-	0x6d, 0x70, 0x74, 0x79, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x22, 0x1c, 0x2f, 0x61,
-	0x70, 0x69, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2f, 0x62, 0x6c, 0x61, 0x63, 0x6b,
-	0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x6d, 0x6f, 0x72, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x7e, 0x0a,
-	0x1c, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x48, 0x69,
-	0x67, 0x68, 0x51, 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x55, 0x73, 0x65, 0x72, 0x12, 0x19, 0x2e,
-	0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x50, 0x65, 0x72, 0x73, 0x6f,
-	0x6e, 0x49, 0x44, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
-	0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79,
-	0x22, 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x22, 0x20, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d,
-	0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2f, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x2f, 0x75,
-	0x73, 0x65, 0x72, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x88, 0x01,
-	0x0a, 0x16, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55,
-	0x73, 0x65, 0x72, 0x56, 0x6f, 0x69, 0x63, 0x65, 0x12, 0x2b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63,
-	0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x55, 0x70, 0x64,
-	0x61, 0x74, 0x65, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x56, 0x6f, 0x69, 0x63, 0x65, 0x52, 0x65,
-	0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,
-	0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x29, 0x82,
-	0xd3, 0xe4, 0x93, 0x02, 0x23, 0x22, 0x1e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x61, 0x6e, 0x61,
-	0x67, 0x65, 0x72, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x56, 0x6f, 0x69, 0x63, 0x65, 0x2f, 0x75,
-	0x70, 0x64, 0x61, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x91, 0x01, 0x0a, 0x19, 0x4d, 0x61, 0x6e,
-	0x61, 0x67, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x50, 0x69,
-	0x63, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x2e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d,
-	0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74,
-	0x65, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x50, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52,
-	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
-	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x2c,
-	0x82, 0xd3, 0xe4, 0x93, 0x02, 0x26, 0x22, 0x21, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x61, 0x6e,
-	0x61, 0x67, 0x65, 0x72, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x70, 0x69, 0x63, 0x74, 0x75, 0x72,
-	0x65, 0x73, 0x2f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x94, 0x01, 0x0a,
-	0x1a, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73,
-	0x65, 0x72, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x2f, 0x2e, 0x61, 0x70,
-	0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72,
-	0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x53, 0x69, 0x67, 0x6e,
-	0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67,
-	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45,
-	0x6d, 0x70, 0x74, 0x79, 0x22, 0x2d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x22, 0x22, 0x2f, 0x61,
-	0x70, 0x69, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f,
-	0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65,
-	0x3a, 0x01, 0x2a, 0x12, 0x8b, 0x01, 0x0a, 0x17, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x55,
-	0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x41, 0x76, 0x61, 0x74, 0x61, 0x72, 0x12,
-	0x2c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x61, 0x6e,
-	0x61, 0x67, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e,
-	0x41, 0x76, 0x61, 0x74, 0x61, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e,
+	0x4c, 0x69, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x27, 0x82, 0xd3,
+	0xe4, 0x93, 0x02, 0x21, 0x22, 0x1c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67,
+	0x65, 0x72, 0x2f, 0x62, 0x6c, 0x61, 0x63, 0x6b, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x6d, 0x6f,
+	0x72, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x7e, 0x0a, 0x1c, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72,
+	0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x48, 0x69, 0x67, 0x68, 0x51, 0x75, 0x61, 0x6c, 0x69, 0x74,
+	0x79, 0x55, 0x73, 0x65, 0x72, 0x12, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d,
+	0x6f, 0x6e, 0x2e, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x49, 0x44, 0x50, 0x61, 0x72, 0x61, 0x6d,
+	0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
+	0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25,
+	0x22, 0x20, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2f, 0x71,
+	0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x64, 0x65, 0x6c, 0x65,
+	0x74, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x88, 0x01, 0x0a, 0x16, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65,
+	0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x56, 0x6f, 0x69, 0x63, 0x65,
+	0x12, 0x2b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x61,
+	0x6e, 0x61, 0x67, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x65, 0x72, 0x73, 0x6f,
+	0x6e, 0x56, 0x6f, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e,
 	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
-	0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x22, 0x1f, 0x2f,
+	0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x29, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x22, 0x1e, 0x2f,
 	0x61, 0x70, 0x69, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2f, 0x75, 0x73, 0x65, 0x72,
-	0x2f, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x2f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x3a, 0x01,
-	0x2a, 0x12, 0x85, 0x01, 0x0a, 0x15, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x55, 0x70, 0x64,
-	0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2a, 0x2e, 0x61, 0x70,
-	0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72,
-	0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65,
-	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
-	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22,
-	0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x22, 0x1d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x61,
-	0x6e, 0x61, 0x67, 0x65, 0x72, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x2f,
-	0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x8b, 0x01, 0x0a, 0x17, 0x4d, 0x61,
-	0x6e, 0x61, 0x67, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x57,
-	0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x2c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d,
-	0x6f, 0x6e, 0x2e, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
-	0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x65, 0x71, 0x75,
-	0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
-	0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x2a, 0x82, 0xd3, 0xe4,
-	0x93, 0x02, 0x24, 0x22, 0x1f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65,
-	0x72, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x2f, 0x75, 0x70,
-	0x64, 0x61, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x8c, 0x01, 0x0a, 0x18, 0x4d, 0x61, 0x6e, 0x61,
-	0x67, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x49, 0x73, 0x42,
-	0x6c, 0x61, 0x63, 0x6b, 0x12, 0x2d, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f,
-	0x6e, 0x2e, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50,
-	0x65, 0x72, 0x73, 0x6f, 0x6e, 0x49, 0x73, 0x42, 0x6c, 0x61, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75,
-	0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
-	0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x29, 0x82, 0xd3, 0xe4,
-	0x93, 0x02, 0x23, 0x22, 0x1e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65,
-	0x72, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x62, 0x6c, 0x61, 0x63, 0x6b, 0x2f, 0x75, 0x70, 0x64,
-	0x61, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x84, 0x01, 0x0a, 0x17, 0x4d, 0x61, 0x6e, 0x61, 0x67,
-	0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x43, 0x72, 0x65, 0x64,
-	0x69, 0x74, 0x12, 0x28, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x4d, 0x61,
-	0x6e, 0x61, 0x67, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x43,
-	0x72, 0x65, 0x64, 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67,
-	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45,
-	0x6d, 0x70, 0x74, 0x79, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x22, 0x1c, 0x2f, 0x61,
-	0x70, 0x69, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f,
-	0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x2f, 0x61, 0x64, 0x64, 0x3a, 0x01, 0x2a, 0x12, 0x40, 0x0a,
-	0x0c, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x44, 0x42, 0x4d, 0x73, 0x67, 0x12, 0x19, 0x2e,
-	0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x50, 0x65, 0x72, 0x73, 0x6f,
-	0x6e, 0x49, 0x44, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x1a, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63,
-	0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x4d, 0x73, 0x67, 0x12,
-	0x45, 0x0a, 0x0e, 0x46, 0x69, 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, 0x44, 0x42, 0x4c, 0x69, 0x73,
-	0x74, 0x12, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x50,
-	0x65, 0x72, 0x73, 0x6f, 0x6e, 0x49, 0x44, 0x4c, 0x69, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x61, 0x70,
-	0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x44,
-	0x42, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x57, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
-	0x4c, 0x61, 0x73, 0x74, 0x53, 0x63, 0x72, 0x69, 0x70, 0x49, 0x44, 0x44, 0x42, 0x12, 0x26, 0x2e,
-	0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74,
-	0x65, 0x4c, 0x61, 0x73, 0x74, 0x53, 0x63, 0x72, 0x69, 0x70, 0x49, 0x44, 0x44, 0x42, 0x52, 0x65,
+	0x2f, 0x56, 0x6f, 0x69, 0x63, 0x65, 0x2f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x3a, 0x01, 0x2a,
+	0x12, 0x91, 0x01, 0x0a, 0x19, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61,
+	0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x50, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x2e,
+	0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x61, 0x6e, 0x61,
+	0x67, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x50,
+	0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16,
+	0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
+	0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x2c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x26, 0x22, 0x21,
+	0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2f, 0x75, 0x73, 0x65,
+	0x72, 0x2f, 0x70, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x73, 0x2f, 0x75, 0x70, 0x64, 0x61, 0x74,
+	0x65, 0x3a, 0x01, 0x2a, 0x12, 0x94, 0x01, 0x0a, 0x1a, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72,
+	0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74,
+	0x75, 0x72, 0x65, 0x12, 0x2f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e,
+	0x2e, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x65,
+	0x72, 0x73, 0x6f, 0x6e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x65, 0x71,
+	0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x2d, 0x82, 0xd3,
+	0xe4, 0x93, 0x02, 0x27, 0x22, 0x22, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67,
+	0x65, 0x72, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72,
+	0x65, 0x2f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x8b, 0x01, 0x0a, 0x17,
+	0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65,
+	0x72, 0x41, 0x76, 0x61, 0x74, 0x61, 0x72, 0x12, 0x2c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f,
+	0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61,
+	0x74, 0x65, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x41, 0x76, 0x61, 0x74, 0x61, 0x72, 0x52, 0x65,
 	0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,
-	0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12,
-	0x58, 0x0a, 0x17, 0x46, 0x69, 0x6e, 0x64, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64,
-	0x55, 0x73, 0x65, 0x72, 0x44, 0x42, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x20, 0x2e, 0x61, 0x70, 0x69,
-	0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x52, 0x65, 0x63, 0x6f,
-	0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x61,
-	0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e,
-	0x44, 0x42, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x4e, 0x0a, 0x17, 0x55, 0x70, 0x64,
-	0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x61, 0x73, 0x74, 0x4c, 0x6f, 0x67, 0x69, 0x6e,
-	0x54, 0x69, 0x6d, 0x65, 0x12, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f,
-	0x6e, 0x2e, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x49, 0x44, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x1a,
+	0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x2a, 0x82,
+	0xd3, 0xe4, 0x93, 0x02, 0x24, 0x22, 0x1f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x61, 0x6e, 0x61,
+	0x67, 0x65, 0x72, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x2f,
+	0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x85, 0x01, 0x0a, 0x15, 0x4d, 0x61,
+	0x6e, 0x61, 0x67, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x4e,
+	0x61, 0x6d, 0x65, 0x12, 0x2a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e,
+	0x2e, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x65,
+	0x72, 0x73, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
 	0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
-	0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x45, 0x0a, 0x17, 0x47, 0x65, 0x74,
-	0x55, 0x73, 0x65, 0x72, 0x44, 0x42, 0x4d, 0x73, 0x67, 0x42, 0x79, 0x41, 0x63, 0x63, 0x6f, 0x75,
-	0x6e, 0x74, 0x49, 0x44, 0x12, 0x13, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f,
-	0x6e, 0x2e, 0x49, 0x44, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x1a, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x2e,
-	0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x4d, 0x73, 0x67,
-	0x12, 0x82, 0x01, 0x0a, 0x22, 0x46, 0x69, 0x6e, 0x64, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65,
-	0x6e, 0x64, 0x48, 0x69, 0x67, 0x68, 0x51, 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x55, 0x73, 0x65,
-	0x72, 0x44, 0x42, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2d, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73,
-	0x65, 0x72, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64,
-	0x48, 0x69, 0x67, 0x68, 0x51, 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x55, 0x73, 0x65, 0x72, 0x52,
-	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65,
-	0x72, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x48,
-	0x69, 0x67, 0x68, 0x51, 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65,
-	0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x60, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72,
-	0x44, 0x42, 0x4d, 0x73, 0x67, 0x46, 0x72, 0x6f, 0x6d, 0x57, 0x65, 0x62, 0x73, 0x6f, 0x63, 0x6b,
-	0x65, 0x74, 0x12, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e,
-	0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x49, 0x44, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x1a, 0x28, 0x2e,
-	0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72,
-	0x44, 0x42, 0x4d, 0x73, 0x67, 0x46, 0x72, 0x6f, 0x6d, 0x57, 0x65, 0x62, 0x73, 0x6f, 0x63, 0x6b,
-	0x65, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x53, 0x0a, 0x13, 0x53, 0x65, 0x6e, 0x64, 0x4d,
-	0x73, 0x67, 0x52, 0x65, 0x64, 0x75, 0x63, 0x65, 0x43, 0x72, 0x65, 0x64, 0x69, 0x74, 0x12, 0x24,
-	0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x73,
-	0x67, 0x52, 0x65, 0x64, 0x75, 0x63, 0x65, 0x43, 0x72, 0x65, 0x64, 0x69, 0x74, 0x52, 0x65, 0x71,
+	0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x22,
+	0x1d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2f, 0x75, 0x73,
+	0x65, 0x72, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x2f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x3a, 0x01,
+	0x2a, 0x12, 0x8b, 0x01, 0x0a, 0x17, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x55, 0x70, 0x64,
+	0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x2c, 0x2e,
+	0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x61, 0x6e, 0x61, 0x67,
+	0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x57, 0x65,
+	0x69, 0x67, 0x68, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f,
+	0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d,
+	0x70, 0x74, 0x79, 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x22, 0x1f, 0x2f, 0x61, 0x70,
+	0x69, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x77,
+	0x65, 0x69, 0x67, 0x68, 0x74, 0x2f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x12,
+	0x8c, 0x01, 0x0a, 0x18, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74,
+	0x65, 0x55, 0x73, 0x65, 0x72, 0x49, 0x73, 0x42, 0x6c, 0x61, 0x63, 0x6b, 0x12, 0x2d, 0x2e, 0x61,
+	0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65,
+	0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x49, 0x73, 0x42,
+	0x6c, 0x61, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f,
+	0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d,
+	0x70, 0x74, 0x79, 0x22, 0x29, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x22, 0x1e, 0x2f, 0x61, 0x70,
+	0x69, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x62,
+	0x6c, 0x61, 0x63, 0x6b, 0x2f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x84,
+	0x01, 0x0a, 0x17, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
+	0x55, 0x73, 0x65, 0x72, 0x43, 0x72, 0x65, 0x64, 0x69, 0x74, 0x12, 0x28, 0x2e, 0x61, 0x70, 0x69,
+	0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x55, 0x70, 0x64,
+	0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x43, 0x72, 0x65, 0x64, 0x69, 0x74, 0x52, 0x65, 0x71,
 	0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
-	0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x4c, 0x0a, 0x19,
-	0x4c, 0x6f, 0x6f, 0x6b, 0x42, 0x61, 0x63, 0x6b, 0x53, 0x63, 0x72, 0x69, 0x70, 0x52, 0x65, 0x64,
-	0x75, 0x63, 0x65, 0x43, 0x72, 0x65, 0x64, 0x69, 0x74, 0x12, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e,
-	0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x50, 0x61, 0x72,
-	0x61, 0x6d, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
-	0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x4a, 0x0a, 0x17, 0x43, 0x72,
-	0x65, 0x61, 0x74, 0x65, 0x53, 0x63, 0x72, 0x69, 0x70, 0x52, 0x65, 0x64, 0x75, 0x63, 0x65, 0x43,
-	0x72, 0x65, 0x64, 0x69, 0x74, 0x12, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d,
-	0x6f, 0x6e, 0x2e, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x1a, 0x16,
-	0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
-	0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x49, 0x0a, 0x16, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x53,
-	0x63, 0x72, 0x69, 0x70, 0x52, 0x65, 0x64, 0x75, 0x63, 0x65, 0x43, 0x72, 0x65, 0x64, 0x69, 0x74,
-	0x12, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x50, 0x65,
-	0x72, 0x73, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
-	0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74,
-	0x79, 0x12, 0x41, 0x0a, 0x0e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x43, 0x72, 0x65,
-	0x64, 0x69, 0x74, 0x12, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e,
-	0x2e, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x1a, 0x16, 0x2e, 0x67,
+	0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x27, 0x82, 0xd3,
+	0xe4, 0x93, 0x02, 0x21, 0x22, 0x1c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67,
+	0x65, 0x72, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x2f, 0x61,
+	0x64, 0x64, 0x3a, 0x01, 0x2a, 0x12, 0x40, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72,
+	0x44, 0x42, 0x4d, 0x73, 0x67, 0x12, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d,
+	0x6f, 0x6e, 0x2e, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x49, 0x44, 0x50, 0x61, 0x72, 0x61, 0x6d,
+	0x1a, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x50, 0x65,
+	0x72, 0x73, 0x6f, 0x6e, 0x4d, 0x73, 0x67, 0x12, 0x45, 0x0a, 0x0e, 0x46, 0x69, 0x6e, 0x64, 0x55,
+	0x73, 0x65, 0x72, 0x44, 0x42, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x2e,
+	0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x49, 0x44, 0x4c,
+	0x69, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e,
+	0x2e, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x44, 0x42, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x57,
+	0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4c, 0x61, 0x73, 0x74, 0x53, 0x63, 0x72, 0x69,
+	0x70, 0x49, 0x44, 0x44, 0x42, 0x12, 0x26, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d,
+	0x6f, 0x6e, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4c, 0x61, 0x73, 0x74, 0x53, 0x63, 0x72,
+	0x69, 0x70, 0x49, 0x44, 0x44, 0x42, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e,
+	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
+	0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x58, 0x0a, 0x17, 0x46, 0x69, 0x6e, 0x64, 0x52,
+	0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, 0x44, 0x42, 0x4c, 0x69,
+	0x73, 0x74, 0x12, 0x20, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e,
+	0x46, 0x69, 0x6e, 0x64, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x71,
+	0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f,
+	0x6e, 0x2e, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x44, 0x42, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22,
+	0x00, 0x12, 0x4e, 0x0a, 0x17, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x4c,
+	0x61, 0x73, 0x74, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x19, 0x2e, 0x61,
+	0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e,
+	0x49, 0x44, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
+	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22,
+	0x00, 0x12, 0x45, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x44, 0x42, 0x4d, 0x73,
+	0x67, 0x42, 0x79, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x44, 0x12, 0x13, 0x2e, 0x61,
+	0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x49, 0x44, 0x50, 0x61, 0x72, 0x61,
+	0x6d, 0x1a, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x50,
+	0x65, 0x72, 0x73, 0x6f, 0x6e, 0x4d, 0x73, 0x67, 0x12, 0x82, 0x01, 0x0a, 0x22, 0x46, 0x69, 0x6e,
+	0x64, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x48, 0x69, 0x67, 0x68, 0x51, 0x75,
+	0x61, 0x6c, 0x69, 0x74, 0x79, 0x55, 0x73, 0x65, 0x72, 0x44, 0x42, 0x4c, 0x69, 0x73, 0x74, 0x12,
+	0x2d, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x52,
+	0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x48, 0x69, 0x67, 0x68, 0x51, 0x75, 0x61, 0x6c,
+	0x69, 0x74, 0x79, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b,
+	0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x52, 0x65,
+	0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x48, 0x69, 0x67, 0x68, 0x51, 0x75, 0x61, 0x6c, 0x69,
+	0x74, 0x79, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x60, 0x0a,
+	0x19, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x44, 0x42, 0x4d, 0x73, 0x67, 0x46, 0x72, 0x6f,
+	0x6d, 0x57, 0x65, 0x62, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x19, 0x2e, 0x61, 0x70, 0x69,
+	0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x49, 0x44,
+	0x50, 0x61, 0x72, 0x61, 0x6d, 0x1a, 0x28, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72,
+	0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x44, 0x42, 0x4d, 0x73, 0x67, 0x46, 0x72, 0x6f,
+	0x6d, 0x57, 0x65, 0x62, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12,
+	0x53, 0x0a, 0x13, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x64, 0x75, 0x63, 0x65,
+	0x43, 0x72, 0x65, 0x64, 0x69, 0x74, 0x12, 0x24, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65,
+	0x72, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x64, 0x75, 0x63, 0x65, 0x43,
+	0x72, 0x65, 0x64, 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67,
 	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45,
-	0x6d, 0x70, 0x74, 0x79, 0x12, 0x67, 0x0a, 0x1c, 0x53, 0x65, 0x6e, 0x64, 0x4e, 0x65, 0x77, 0x4d,
-	0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x55, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x52, 0x65, 0x6d, 0x69,
-	0x6e, 0x64, 0x65, 0x72, 0x12, 0x2d, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e,
-	0x53, 0x65, 0x6e, 0x64, 0x4e, 0x65, 0x77, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x55, 0x6e,
-	0x72, 0x65, 0x61, 0x64, 0x52, 0x65, 0x6d, 0x69, 0x6e, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75,
-	0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
-	0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x55, 0x0a,
-	0x1e, 0x53, 0x65, 0x6e, 0x64, 0x4e, 0x65, 0x77, 0x56, 0x69, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x54,
-	0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x6d, 0x69, 0x6e, 0x64, 0x65, 0x72, 0x12,
-	0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x50, 0x65, 0x72,
-	0x73, 0x6f, 0x6e, 0x49, 0x44, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f,
+	0x6d, 0x70, 0x74, 0x79, 0x12, 0x4c, 0x0a, 0x19, 0x4c, 0x6f, 0x6f, 0x6b, 0x42, 0x61, 0x63, 0x6b,
+	0x53, 0x63, 0x72, 0x69, 0x70, 0x52, 0x65, 0x64, 0x75, 0x63, 0x65, 0x43, 0x72, 0x65, 0x64, 0x69,
+	0x74, 0x12, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x50,
+	0x65, 0x72, 0x73, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f,
 	0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70,
-	0x74, 0x79, 0x22, 0x00, 0x12, 0x84, 0x01, 0x0a, 0x24, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55,
-	0x73, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x64, 0x4e, 0x75, 0x6d, 0x41, 0x6e, 0x64,
-	0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x73, 0x67, 0x12, 0x25, 0x2e,
-	0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55,
-	0x73, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x64, 0x4e, 0x75, 0x6d, 0x52, 0x65, 0x71,
-	0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e,
-	0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x65,
-	0x64, 0x4e, 0x75, 0x6d, 0x41, 0x6e, 0x64, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x55, 0x73, 0x65,
-	0x72, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x51, 0x0a, 0x12, 0x47,
-	0x65, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, 0x44,
-	0x42, 0x12, 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74,
-	0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, 0x44, 0x42, 0x52,
-	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d,
-	0x6d, 0x6f, 0x6e, 0x2e, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x44, 0x42, 0x22, 0x00, 0x12, 0x4d,
-	0x0a, 0x0f, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x55, 0x73, 0x65, 0x72, 0x42, 0x6c, 0x61, 0x63,
-	0x6b, 0x12, 0x20, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x70,
-	0x6f, 0x72, 0x74, 0x55, 0x73, 0x65, 0x72, 0x42, 0x6c, 0x61, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75,
-	0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
-	0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x49, 0x0a,
-	0x0d, 0x41, 0x64, 0x64, 0x55, 0x73, 0x65, 0x72, 0x43, 0x72, 0x65, 0x64, 0x69, 0x74, 0x12, 0x1e,
-	0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x41, 0x64, 0x64, 0x55, 0x73, 0x65,
-	0x72, 0x43, 0x72, 0x65, 0x64, 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16,
-	0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
-	0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x53, 0x0a, 0x17, 0x55, 0x73, 0x65, 0x72,
-	0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75,
-	0x73, 0x44, 0x42, 0x12, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e,
-	0x2e, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x49, 0x44, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x1a, 0x1b,
-	0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d,
-	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x8b, 0x01,
-	0x0a, 0x21, 0x55, 0x73, 0x65, 0x72, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61,
-	0x74, 0x69, 0x6f, 0x6e, 0x41, 0x77, 0x61, 0x72, 0x64, 0x42, 0x79, 0x41, 0x63, 0x74, 0x69, 0x76,
-	0x69, 0x74, 0x79, 0x12, 0x32, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x55,
-	0x73, 0x65, 0x72, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f,
-	0x6e, 0x41, 0x77, 0x61, 0x72, 0x64, 0x42, 0x79, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79,
-	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73,
-	0x65, 0x72, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d,
-	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x77, 0x61, 0x72, 0x64, 0x42, 0x79, 0x41, 0x63, 0x74, 0x69,
-	0x76, 0x69, 0x74, 0x79, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x51, 0x0a, 0x11, 0x46,
-	0x69, 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, 0x56, 0x69, 0x70, 0x44, 0x42, 0x4c, 0x69, 0x73, 0x74,
-	0x12, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x50, 0x65,
-	0x72, 0x73, 0x6f, 0x6e, 0x49, 0x44, 0x4c, 0x69, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x61, 0x70, 0x69,
-	0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, 0x56, 0x69,
-	0x70, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x42, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x42, 0x3d,
-	0x0a, 0x08, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x50, 0x01, 0x5a, 0x2f, 0x67, 0x69,
-	0x74, 0x2e, 0x69, 0x6b, 0x75, 0x62, 0x61, 0x6e, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x73, 0x65, 0x72,
-	0x76, 0x65, 0x72, 0x2f, 0x70, 0x77, 0x2d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f,
-	0x61, 0x70, 0x69, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x3b, 0x75, 0x73, 0x65, 0x72, 0x62, 0x06, 0x70,
-	0x72, 0x6f, 0x74, 0x6f, 0x33,
+	0x74, 0x79, 0x12, 0x4a, 0x0a, 0x17, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x63, 0x72, 0x69,
+	0x70, 0x52, 0x65, 0x64, 0x75, 0x63, 0x65, 0x43, 0x72, 0x65, 0x64, 0x69, 0x74, 0x12, 0x17, 0x2e,
+	0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x50, 0x65, 0x72, 0x73, 0x6f,
+	0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x49,
+	0x0a, 0x16, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x53, 0x63, 0x72, 0x69, 0x70, 0x52, 0x65, 0x64, 0x75,
+	0x63, 0x65, 0x43, 0x72, 0x65, 0x64, 0x69, 0x74, 0x12, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63,
+	0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61,
+	0x6d, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x41, 0x0a, 0x0e, 0x4d, 0x61, 0x74,
+	0x63, 0x68, 0x69, 0x6e, 0x67, 0x43, 0x72, 0x65, 0x64, 0x69, 0x74, 0x12, 0x17, 0x2e, 0x61, 0x70,
+	0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x50,
+	0x61, 0x72, 0x61, 0x6d, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x67, 0x0a, 0x1c,
+	0x53, 0x65, 0x6e, 0x64, 0x4e, 0x65, 0x77, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x55, 0x6e,
+	0x72, 0x65, 0x61, 0x64, 0x52, 0x65, 0x6d, 0x69, 0x6e, 0x64, 0x65, 0x72, 0x12, 0x2d, 0x2e, 0x61,
+	0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4e, 0x65, 0x77, 0x4d,
+	0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x55, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x52, 0x65, 0x6d, 0x69,
+	0x6e, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f,
+	0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d,
+	0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x55, 0x0a, 0x1e, 0x53, 0x65, 0x6e, 0x64, 0x4e, 0x65, 0x77,
+	0x56, 0x69, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52,
+	0x65, 0x6d, 0x69, 0x6e, 0x64, 0x65, 0x72, 0x12, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f,
+	0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x49, 0x44, 0x50, 0x61, 0x72,
+	0x61, 0x6d, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x84, 0x01, 0x0a,
+	0x24, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68,
+	0x65, 0x64, 0x4e, 0x75, 0x6d, 0x41, 0x6e, 0x64, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x55, 0x73,
+	0x65, 0x72, 0x4d, 0x73, 0x67, 0x12, 0x25, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72,
+	0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68,
+	0x65, 0x64, 0x4e, 0x75, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x61,
+	0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73,
+	0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x64, 0x4e, 0x75, 0x6d, 0x41, 0x6e, 0x64, 0x52,
+	0x65, 0x74, 0x75, 0x72, 0x6e, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x70, 0x6c,
+	0x79, 0x22, 0x00, 0x12, 0x51, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d,
+	0x65, 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, 0x44, 0x42, 0x12, 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e,
+	0x75, 0x73, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e,
+	0x64, 0x55, 0x73, 0x65, 0x72, 0x44, 0x42, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14,
+	0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x50, 0x65, 0x72, 0x73,
+	0x6f, 0x6e, 0x44, 0x42, 0x22, 0x00, 0x12, 0x4d, 0x0a, 0x0f, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74,
+	0x55, 0x73, 0x65, 0x72, 0x42, 0x6c, 0x61, 0x63, 0x6b, 0x12, 0x20, 0x2e, 0x61, 0x70, 0x69, 0x2e,
+	0x75, 0x73, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x55, 0x73, 0x65, 0x72, 0x42,
+	0x6c, 0x61, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f,
+	0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d,
+	0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x49, 0x0a, 0x0d, 0x41, 0x64, 0x64, 0x55, 0x73, 0x65, 0x72,
+	0x43, 0x72, 0x65, 0x64, 0x69, 0x74, 0x12, 0x1e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65,
+	0x72, 0x2e, 0x41, 0x64, 0x64, 0x55, 0x73, 0x65, 0x72, 0x43, 0x72, 0x65, 0x64, 0x69, 0x74, 0x52,
+	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00,
+	0x12, 0x53, 0x0a, 0x17, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74,
+	0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x44, 0x42, 0x12, 0x19, 0x2e, 0x61, 0x70,
+	0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x49,
+	0x44, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x1a, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65,
+	0x72, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61,
+	0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x8b, 0x01, 0x0a, 0x21, 0x55, 0x73, 0x65, 0x72, 0x47, 0x65,
+	0x74, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x77, 0x61, 0x72,
+	0x64, 0x42, 0x79, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x12, 0x32, 0x2e, 0x61, 0x70,
+	0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x65, 0x74, 0x49, 0x6e,
+	0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x77, 0x61, 0x72, 0x64, 0x42, 0x79,
+	0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
+	0x30, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47,
+	0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x77, 0x61,
+	0x72, 0x64, 0x42, 0x79, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, 0x65, 0x70, 0x6c,
+	0x79, 0x22, 0x00, 0x12, 0x51, 0x0a, 0x11, 0x46, 0x69, 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, 0x56,
+	0x69, 0x70, 0x44, 0x42, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63,
+	0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x49, 0x44, 0x4c, 0x69,
+	0x73, 0x74, 0x1a, 0x20, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x46, 0x69,
+	0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, 0x56, 0x69, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x42, 0x52,
+	0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x42, 0x3d, 0x0a, 0x08, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73,
+	0x65, 0x72, 0x50, 0x01, 0x5a, 0x2f, 0x67, 0x69, 0x74, 0x2e, 0x69, 0x6b, 0x75, 0x62, 0x61, 0x6e,
+	0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2f, 0x70, 0x77, 0x2d, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x75, 0x73, 0x65, 0x72,
+	0x3b, 0x75, 0x73, 0x65, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 }
 
 var (
@@ -4104,53 +4121,55 @@ var file_user_proto_goTypes = []interface{}{
 	(*common.PartnerIDParam)(nil),                        // 66: api.common.PartnerIDParam
 	(*common.ManagerFindPersonListRequest)(nil),          // 67: api.common.ManagerFindPersonListRequest
 	(*common.ManagerFindCanHandpickUserListRequest)(nil), // 68: api.common.ManagerFindCanHandpickUserListRequest
-	(*common.PersonIDParam)(nil),                         // 69: api.common.PersonIDParam
-	(*common.PersonIDList)(nil),                          // 70: api.common.PersonIDList
-	(*common.ManagerUpdatePersonVoiceRequest)(nil),       // 71: api.common.ManagerUpdatePersonVoiceRequest
-	(*common.ManagerUpdatePersonPicturesRequest)(nil),    // 72: api.common.ManagerUpdatePersonPicturesRequest
-	(*common.ManagerUpdatePersonSignatureRequest)(nil),   // 73: api.common.ManagerUpdatePersonSignatureRequest
-	(*common.ManagerUpdatePersonAvatarRequest)(nil),      // 74: api.common.ManagerUpdatePersonAvatarRequest
-	(*common.ManagerUpdatePersonNameRequest)(nil),        // 75: api.common.ManagerUpdatePersonNameRequest
-	(*common.ManagerUpdatePersonWeightRequest)(nil),      // 76: api.common.ManagerUpdatePersonWeightRequest
-	(*common.ManagerUpdatePersonIsBlackRequest)(nil),     // 77: api.common.ManagerUpdatePersonIsBlackRequest
-	(*common.UpdateLastScripIDDBRequest)(nil),            // 78: api.common.UpdateLastScripIDDBRequest
-	(*common.FindRecommendRequest)(nil),                  // 79: api.common.FindRecommendRequest
-	(*common.IDParam)(nil),                               // 80: api.common.IDParam
-	(*chat.RoomReply)(nil),                               // 81: api.chat.RoomReply
-	(*common.HomeInfo)(nil),                              // 82: api.common.HomeInfo
-	(*common.LookedAndLikedNum)(nil),                     // 83: api.common.LookedAndLikedNum
-	(*statistics.LookAndLikeListReply)(nil),              // 84: api.statistics.LookAndLikeListReply
-	(*common.WxConfResponse)(nil),                        // 85: api.common.WxConfResponse
-	(*common.TagListReply)(nil),                          // 86: api.common.TagListReply
-	(*common.RecommendPersonListReply)(nil),              // 87: api.common.RecommendPersonListReply
-	(*common.ChatRecordListReply)(nil),                   // 88: api.common.ChatRecordListReply
-	(*common.ChatRoomMsg)(nil),                           // 89: api.common.ChatRoomMsg
-	(*common.IsLike)(nil),                                // 90: api.common.IsLike
-	(*common.MemeList)(nil),                              // 91: api.common.MemeList
-	(*common.ChatTopicList)(nil),                         // 92: api.common.ChatTopicList
-	(*common.CommonTextList)(nil),                        // 93: api.common.CommonTextList
-	(*common.MemeTitleList)(nil),                         // 94: api.common.MemeTitleList
-	(*common.ChatCardInfo)(nil),                          // 95: api.common.ChatCardInfo
-	(*common.FindOverSevenDayAvatarReply)(nil),           // 96: api.common.FindOverSevenDayAvatarReply
-	(*common.ScripID)(nil),                               // 97: api.common.ScripID
-	(*common.ScripReply)(nil),                            // 98: api.common.ScripReply
-	(*common.ScripInfo)(nil),                             // 99: api.common.ScripInfo
-	(*common.ChatRecordInfo)(nil),                        // 100: api.common.ChatRecordInfo
-	(*chat.UnreadNumReply)(nil),                          // 101: api.chat.UnreadNumReply
-	(*chat.UserRoomInfo)(nil),                            // 102: api.chat.UserRoomInfo
-	(*chat.CheckUserPartnerIsRelationshipReply)(nil),     // 103: api.chat.CheckUserPartnerIsRelationshipReply
-	(*common.AddFriendMessageInfo)(nil),                  // 104: api.common.AddFriendMessageInfo
-	(*statistics.LookAndLikeMessageReply)(nil),           // 105: api.statistics.LookAndLikeMessageReply
-	(*statistics.LookMessageReply)(nil),                  // 106: api.statistics.LookMessageReply
-	(*chat.WindowInfo)(nil),                              // 107: api.chat.WindowInfo
-	(*chat.GetRandomMatchingReply)(nil),                  // 108: api.chat.GetRandomMatchingReply
-	(*common.SendMessageReply)(nil),                      // 109: api.common.SendMessageReply
-	(*common.ManagerFindPersonListReply)(nil),            // 110: api.common.ManagerFindPersonListReply
-	(*common.ManagerFindPersonListReply2)(nil),           // 111: api.common.ManagerFindPersonListReply2
-	(*common.ManagerFindCanHandpickUserListReply)(nil),   // 112: api.common.ManagerFindCanHandpickUserListReply
-	(*common.PersonMsg)(nil),                             // 113: api.common.PersonMsg
-	(*common.PersonDBReply)(nil),                         // 114: api.common.PersonDBReply
-	(*common.PersonDB)(nil),                              // 115: api.common.PersonDB
+	(*common.ManagerSetHandpickUserRequest)(nil),         // 69: api.common.ManagerSetHandpickUserRequest
+	(*common.ManagerSetHandpickUserOneRequest)(nil),      // 70: api.common.ManagerSetHandpickUserOneRequest
+	(*common.PersonIDParam)(nil),                         // 71: api.common.PersonIDParam
+	(*common.PersonIDList)(nil),                          // 72: api.common.PersonIDList
+	(*common.ManagerUpdatePersonVoiceRequest)(nil),       // 73: api.common.ManagerUpdatePersonVoiceRequest
+	(*common.ManagerUpdatePersonPicturesRequest)(nil),    // 74: api.common.ManagerUpdatePersonPicturesRequest
+	(*common.ManagerUpdatePersonSignatureRequest)(nil),   // 75: api.common.ManagerUpdatePersonSignatureRequest
+	(*common.ManagerUpdatePersonAvatarRequest)(nil),      // 76: api.common.ManagerUpdatePersonAvatarRequest
+	(*common.ManagerUpdatePersonNameRequest)(nil),        // 77: api.common.ManagerUpdatePersonNameRequest
+	(*common.ManagerUpdatePersonWeightRequest)(nil),      // 78: api.common.ManagerUpdatePersonWeightRequest
+	(*common.ManagerUpdatePersonIsBlackRequest)(nil),     // 79: api.common.ManagerUpdatePersonIsBlackRequest
+	(*common.UpdateLastScripIDDBRequest)(nil),            // 80: api.common.UpdateLastScripIDDBRequest
+	(*common.FindRecommendRequest)(nil),                  // 81: api.common.FindRecommendRequest
+	(*common.IDParam)(nil),                               // 82: api.common.IDParam
+	(*chat.RoomReply)(nil),                               // 83: api.chat.RoomReply
+	(*common.HomeInfo)(nil),                              // 84: api.common.HomeInfo
+	(*common.LookedAndLikedNum)(nil),                     // 85: api.common.LookedAndLikedNum
+	(*statistics.LookAndLikeListReply)(nil),              // 86: api.statistics.LookAndLikeListReply
+	(*common.WxConfResponse)(nil),                        // 87: api.common.WxConfResponse
+	(*common.TagListReply)(nil),                          // 88: api.common.TagListReply
+	(*common.RecommendPersonListReply)(nil),              // 89: api.common.RecommendPersonListReply
+	(*common.ChatRecordListReply)(nil),                   // 90: api.common.ChatRecordListReply
+	(*common.ChatRoomMsg)(nil),                           // 91: api.common.ChatRoomMsg
+	(*common.IsLike)(nil),                                // 92: api.common.IsLike
+	(*common.MemeList)(nil),                              // 93: api.common.MemeList
+	(*common.ChatTopicList)(nil),                         // 94: api.common.ChatTopicList
+	(*common.CommonTextList)(nil),                        // 95: api.common.CommonTextList
+	(*common.MemeTitleList)(nil),                         // 96: api.common.MemeTitleList
+	(*common.ChatCardInfo)(nil),                          // 97: api.common.ChatCardInfo
+	(*common.FindOverSevenDayAvatarReply)(nil),           // 98: api.common.FindOverSevenDayAvatarReply
+	(*common.ScripID)(nil),                               // 99: api.common.ScripID
+	(*common.ScripReply)(nil),                            // 100: api.common.ScripReply
+	(*common.ScripInfo)(nil),                             // 101: api.common.ScripInfo
+	(*common.ChatRecordInfo)(nil),                        // 102: api.common.ChatRecordInfo
+	(*chat.UnreadNumReply)(nil),                          // 103: api.chat.UnreadNumReply
+	(*chat.UserRoomInfo)(nil),                            // 104: api.chat.UserRoomInfo
+	(*chat.CheckUserPartnerIsRelationshipReply)(nil),     // 105: api.chat.CheckUserPartnerIsRelationshipReply
+	(*common.AddFriendMessageInfo)(nil),                  // 106: api.common.AddFriendMessageInfo
+	(*statistics.LookAndLikeMessageReply)(nil),           // 107: api.statistics.LookAndLikeMessageReply
+	(*statistics.LookMessageReply)(nil),                  // 108: api.statistics.LookMessageReply
+	(*chat.WindowInfo)(nil),                              // 109: api.chat.WindowInfo
+	(*chat.GetRandomMatchingReply)(nil),                  // 110: api.chat.GetRandomMatchingReply
+	(*common.SendMessageReply)(nil),                      // 111: api.common.SendMessageReply
+	(*common.ManagerFindPersonListReply)(nil),            // 112: api.common.ManagerFindPersonListReply
+	(*common.ManagerFindPersonListReply2)(nil),           // 113: api.common.ManagerFindPersonListReply2
+	(*common.ManagerFindCanHandpickUserListReply)(nil),   // 114: api.common.ManagerFindCanHandpickUserListReply
+	(*common.PersonMsg)(nil),                             // 115: api.common.PersonMsg
+	(*common.PersonDBReply)(nil),                         // 116: api.common.PersonDBReply
+	(*common.PersonDB)(nil),                              // 117: api.common.PersonDB
 }
 var file_user_proto_depIdxs = []int32{
 	43,  // 0: api.user.FindUserVipListDBReply.vipMap:type_name -> api.user.FindUserVipListDBReply.VipMapEntry
@@ -4235,149 +4254,153 @@ var file_user_proto_depIdxs = []int32{
 	8,   // 79: api.user.User.ManagerFindIsCheckQualityUserList:input_type -> api.user.ManagerFindIsCheckQualityUserListRequest
 	67,  // 80: api.user.User.ManagerFindHighQualityUserList:input_type -> api.common.ManagerFindPersonListRequest
 	68,  // 81: api.user.User.ManagerFindCanHandpickUserList:input_type -> api.common.ManagerFindCanHandpickUserListRequest
-	10,  // 82: api.user.User.ManagerMarkHighQualityUser:input_type -> api.user.ManagerMarkHighQualityUserRequest
-	69,  // 83: api.user.User.ManagerMarkHighQualityUserOne:input_type -> api.common.PersonIDParam
-	70,  // 84: api.user.User.ManagerSetUserBlack:input_type -> api.common.PersonIDList
-	69,  // 85: api.user.User.ManagerDeleteHighQualityUser:input_type -> api.common.PersonIDParam
-	71,  // 86: api.user.User.ManagerUpdateUserVoice:input_type -> api.common.ManagerUpdatePersonVoiceRequest
-	72,  // 87: api.user.User.ManagerUpdateUserPictures:input_type -> api.common.ManagerUpdatePersonPicturesRequest
-	73,  // 88: api.user.User.ManagerUpdateUserSignature:input_type -> api.common.ManagerUpdatePersonSignatureRequest
-	74,  // 89: api.user.User.ManagerUpdateUserAvatar:input_type -> api.common.ManagerUpdatePersonAvatarRequest
-	75,  // 90: api.user.User.ManagerUpdateUserName:input_type -> api.common.ManagerUpdatePersonNameRequest
-	76,  // 91: api.user.User.ManagerUpdateUserWeight:input_type -> api.common.ManagerUpdatePersonWeightRequest
-	77,  // 92: api.user.User.ManagerUpdateUserIsBlack:input_type -> api.common.ManagerUpdatePersonIsBlackRequest
-	9,   // 93: api.user.User.ManagerUpdateUserCredit:input_type -> api.user.ManagerUpdateUserCreditRequest
-	69,  // 94: api.user.User.GetUserDBMsg:input_type -> api.common.PersonIDParam
-	70,  // 95: api.user.User.FindUserDBList:input_type -> api.common.PersonIDList
-	78,  // 96: api.user.User.UpdateLastScripIDDB:input_type -> api.common.UpdateLastScripIDDBRequest
-	79,  // 97: api.user.User.FindRecommendUserDBList:input_type -> api.common.FindRecommendRequest
-	69,  // 98: api.user.User.UpdateUserLastLoginTime:input_type -> api.common.PersonIDParam
-	80,  // 99: api.user.User.GetUserDBMsgByAccountID:input_type -> api.common.IDParam
-	12,  // 100: api.user.User.FindRecommendHighQualityUserDBList:input_type -> api.user.FindRecommendHighQualityUserRequest
-	69,  // 101: api.user.User.GetUserDBMsgFromWebsocket:input_type -> api.common.PersonIDParam
-	2,   // 102: api.user.User.SendMsgReduceCredit:input_type -> api.user.SendMsgReduceCreditRequest
-	51,  // 103: api.user.User.LookBackScripReduceCredit:input_type -> api.common.PersonParam
-	51,  // 104: api.user.User.CreateScripReduceCredit:input_type -> api.common.PersonParam
-	51,  // 105: api.user.User.ReplyScripReduceCredit:input_type -> api.common.PersonParam
-	51,  // 106: api.user.User.MatchingCredit:input_type -> api.common.PersonParam
-	17,  // 107: api.user.User.SendNewMessageUnreadReminder:input_type -> api.user.SendNewMessageUnreadReminderRequest
-	69,  // 108: api.user.User.SendNewVisitorTemplateReminder:input_type -> api.common.PersonIDParam
-	16,  // 109: api.user.User.UpdateUserMatchedNumAndReturnUserMsg:input_type -> api.user.UpdateUserMatchedNumRequest
-	11,  // 110: api.user.User.GetRecommendUserDB:input_type -> api.user.GetRecommendUserDBRequest
-	6,   // 111: api.user.User.ReportUserBlack:input_type -> api.user.ReportUserBlackRequest
-	5,   // 112: api.user.User.AddUserCredit:input_type -> api.user.AddUserCreditRequest
-	69,  // 113: api.user.User.UserInformationStatusDB:input_type -> api.common.PersonIDParam
-	3,   // 114: api.user.User.UserGetInformationAwardByActivity:input_type -> api.user.UserGetInformationAwardByActivityRequest
-	70,  // 115: api.user.User.FindUserVipDBList:input_type -> api.common.PersonIDList
-	35,  // 116: api.user.User.GetUserInfo:output_type -> api.user.UserInfo
-	46,  // 117: api.user.User.SendPhoneCode:output_type -> google.protobuf.Empty
-	46,  // 118: api.user.User.CheckPhoneCode:output_type -> google.protobuf.Empty
-	46,  // 119: api.user.User.UpdateUserInformation:output_type -> google.protobuf.Empty
-	81,  // 120: api.user.User.CreateUserPersonRoom:output_type -> api.chat.RoomReply
-	32,  // 121: api.user.User.GetUserBalance:output_type -> api.user.UserBalance
-	82,  // 122: api.user.User.UserGetHomeInfo:output_type -> api.common.HomeInfo
-	83,  // 123: api.user.User.UserGetPersonLikedAndLooked:output_type -> api.common.LookedAndLikedNum
-	84,  // 124: api.user.User.FindLookList:output_type -> api.statistics.LookAndLikeListReply
-	85,  // 125: api.user.User.WxConf:output_type -> api.common.WxConfResponse
-	86,  // 126: api.user.User.FindTagListBySex:output_type -> api.common.TagListReply
-	87,  // 127: api.user.User.FindOnlineList:output_type -> api.common.RecommendPersonListReply
-	33,  // 128: api.user.User.FindWithinSevenDayRoomList:output_type -> api.user.UserFindChatListReply
-	33,  // 129: api.user.User.FindOverSevenDayRoomList:output_type -> api.user.UserFindChatListReply
-	33,  // 130: api.user.User.FindCloseFriendRoomList:output_type -> api.user.UserFindChatListReply
-	88,  // 131: api.user.User.FindChatRecordList:output_type -> api.common.ChatRecordListReply
-	89,  // 132: api.user.User.FindChatRoomMsg:output_type -> api.common.ChatRoomMsg
-	90,  // 133: api.user.User.GetUserIsLike:output_type -> api.common.IsLike
-	91,  // 134: api.user.User.FindMemeByType:output_type -> api.common.MemeList
-	92,  // 135: api.user.User.FindChatTopic:output_type -> api.common.ChatTopicList
-	93,  // 136: api.user.User.RandomMeme:output_type -> api.common.CommonTextList
-	93,  // 137: api.user.User.RandomSwiftMessage:output_type -> api.common.CommonTextList
-	94,  // 138: api.user.User.FindMemeTitle:output_type -> api.common.MemeTitleList
-	95,  // 139: api.user.User.UserGetChatCard:output_type -> api.common.ChatCardInfo
-	94,  // 140: api.user.User.FindChatTopicTitle:output_type -> api.common.MemeTitleList
-	46,  // 141: api.user.User.UserLike:output_type -> google.protobuf.Empty
-	46,  // 142: api.user.User.UserUnLike:output_type -> google.protobuf.Empty
-	46,  // 143: api.user.User.Report:output_type -> google.protobuf.Empty
-	96,  // 144: api.user.User.FindOverSevenDayAvatar:output_type -> api.common.FindOverSevenDayAvatarReply
-	46,  // 145: api.user.User.UpdateLastScripID:output_type -> google.protobuf.Empty
-	97,  // 146: api.user.User.CreateScrip:output_type -> api.common.ScripID
-	46,  // 147: api.user.User.DeleteScrip:output_type -> google.protobuf.Empty
-	98,  // 148: api.user.User.FindMyScrip:output_type -> api.common.ScripReply
-	98,  // 149: api.user.User.FindOtherScrip:output_type -> api.common.ScripReply
-	98,  // 150: api.user.User.FindRecommendScrip:output_type -> api.common.ScripReply
-	46,  // 151: api.user.User.PersonLookScrip:output_type -> google.protobuf.Empty
-	99,  // 152: api.user.User.PersonClickLookBack:output_type -> api.common.ScripInfo
-	100, // 153: api.user.User.PersonReplyScrip:output_type -> api.common.ChatRecordInfo
-	46,  // 154: api.user.User.UserDeleteChat:output_type -> google.protobuf.Empty
-	101, // 155: api.user.User.GetUserAllUnreadNum:output_type -> api.chat.UnreadNumReply
-	102, // 156: api.user.User.GetUserRoomByPerson:output_type -> api.chat.UserRoomInfo
-	84,  // 157: api.user.User.FindLikeList:output_type -> api.statistics.LookAndLikeListReply
-	84,  // 158: api.user.User.FindLikedList:output_type -> api.statistics.LookAndLikeListReply
-	46,  // 159: api.user.User.UserSetBlackChat:output_type -> google.protobuf.Empty
-	103, // 160: api.user.User.CheckUserPartnerIsRelationship:output_type -> api.chat.CheckUserPartnerIsRelationshipReply
-	104, // 161: api.user.User.GetPartnerCircleInfo:output_type -> api.common.AddFriendMessageInfo
-	105, // 162: api.user.User.GetLookAndLikeStatisticsMessage:output_type -> api.statistics.LookAndLikeMessageReply
-	106, // 163: api.user.User.GetUserLookNum:output_type -> api.statistics.LookMessageReply
-	46,  // 164: api.user.User.UserFinishInformation:output_type -> google.protobuf.Empty
-	31,  // 165: api.user.User.UserInformationStatus:output_type -> api.user.InformationStatus
-	46,  // 166: api.user.User.UserGetInformationAward:output_type -> google.protobuf.Empty
-	46,  // 167: api.user.User.UnlockLookRecord:output_type -> google.protobuf.Empty
-	38,  // 168: api.user.User.UserRecharge:output_type -> api.user.PayInfo
-	38,  // 169: api.user.User.UserRechargeVip:output_type -> api.user.PayInfo
-	27,  // 170: api.user.User.FindRechargeList:output_type -> api.user.RechargeList
-	28,  // 171: api.user.User.FindVipRechargeList:output_type -> api.user.VipRechargeList
-	40,  // 172: api.user.User.FindPayList:output_type -> api.user.PayOrderList
-	87,  // 173: api.user.User.FindRecommendPersonList:output_type -> api.common.RecommendPersonListReply
-	25,  // 174: api.user.User.FindMatchingAvatarAndNum:output_type -> api.user.FindMatchingAvatarAndNumReply
-	107, // 175: api.user.User.GetWindowInfo:output_type -> api.chat.WindowInfo
-	19,  // 176: api.user.User.GetUserFreeNum:output_type -> api.user.UserFreeNum
-	108, // 177: api.user.User.GetRandomMatching:output_type -> api.chat.GetRandomMatchingReply
-	46,  // 178: api.user.User.UnlockVoice:output_type -> google.protobuf.Empty
-	46,  // 179: api.user.User.UnlockPicture:output_type -> google.protobuf.Empty
-	46,  // 180: api.user.User.UpdateUserIsRegister:output_type -> google.protobuf.Empty
-	81,  // 181: api.user.User.CreateUserPartnerRoom:output_type -> api.chat.RoomReply
-	109, // 182: api.user.User.SendMessage:output_type -> api.common.SendMessageReply
-	1,   // 183: api.user.User.GetVipInfo:output_type -> api.user.VipInfo
-	110, // 184: api.user.User.ManagerFindUserList:output_type -> api.common.ManagerFindPersonListReply
-	110, // 185: api.user.User.ManagerFindInformationUserList:output_type -> api.common.ManagerFindPersonListReply
-	111, // 186: api.user.User.ManagerFindIsCheckQualityUserList:output_type -> api.common.ManagerFindPersonListReply2
-	110, // 187: api.user.User.ManagerFindHighQualityUserList:output_type -> api.common.ManagerFindPersonListReply
-	112, // 188: api.user.User.ManagerFindCanHandpickUserList:output_type -> api.common.ManagerFindCanHandpickUserListReply
-	46,  // 189: api.user.User.ManagerMarkHighQualityUser:output_type -> google.protobuf.Empty
-	46,  // 190: api.user.User.ManagerMarkHighQualityUserOne:output_type -> google.protobuf.Empty
-	46,  // 191: api.user.User.ManagerSetUserBlack:output_type -> google.protobuf.Empty
-	46,  // 192: api.user.User.ManagerDeleteHighQualityUser:output_type -> google.protobuf.Empty
-	46,  // 193: api.user.User.ManagerUpdateUserVoice:output_type -> google.protobuf.Empty
-	46,  // 194: api.user.User.ManagerUpdateUserPictures:output_type -> google.protobuf.Empty
-	46,  // 195: api.user.User.ManagerUpdateUserSignature:output_type -> google.protobuf.Empty
-	46,  // 196: api.user.User.ManagerUpdateUserAvatar:output_type -> google.protobuf.Empty
-	46,  // 197: api.user.User.ManagerUpdateUserName:output_type -> google.protobuf.Empty
-	46,  // 198: api.user.User.ManagerUpdateUserWeight:output_type -> google.protobuf.Empty
-	46,  // 199: api.user.User.ManagerUpdateUserIsBlack:output_type -> google.protobuf.Empty
-	46,  // 200: api.user.User.ManagerUpdateUserCredit:output_type -> google.protobuf.Empty
-	113, // 201: api.user.User.GetUserDBMsg:output_type -> api.common.PersonMsg
-	114, // 202: api.user.User.FindUserDBList:output_type -> api.common.PersonDBReply
-	46,  // 203: api.user.User.UpdateLastScripIDDB:output_type -> google.protobuf.Empty
-	114, // 204: api.user.User.FindRecommendUserDBList:output_type -> api.common.PersonDBReply
-	46,  // 205: api.user.User.UpdateUserLastLoginTime:output_type -> google.protobuf.Empty
-	113, // 206: api.user.User.GetUserDBMsgByAccountID:output_type -> api.common.PersonMsg
-	13,  // 207: api.user.User.FindRecommendHighQualityUserDBList:output_type -> api.user.FindRecommendHighQualityUserReply
-	15,  // 208: api.user.User.GetUserDBMsgFromWebsocket:output_type -> api.user.GetUserDBMsgFromWebsocketReply
-	46,  // 209: api.user.User.SendMsgReduceCredit:output_type -> google.protobuf.Empty
-	46,  // 210: api.user.User.LookBackScripReduceCredit:output_type -> google.protobuf.Empty
-	46,  // 211: api.user.User.CreateScripReduceCredit:output_type -> google.protobuf.Empty
-	46,  // 212: api.user.User.ReplyScripReduceCredit:output_type -> google.protobuf.Empty
-	46,  // 213: api.user.User.MatchingCredit:output_type -> google.protobuf.Empty
-	46,  // 214: api.user.User.SendNewMessageUnreadReminder:output_type -> google.protobuf.Empty
-	46,  // 215: api.user.User.SendNewVisitorTemplateReminder:output_type -> google.protobuf.Empty
-	14,  // 216: api.user.User.UpdateUserMatchedNumAndReturnUserMsg:output_type -> api.user.UpdateUserMatchedNumAndReturnUserMsgReply
-	115, // 217: api.user.User.GetRecommendUserDB:output_type -> api.common.PersonDB
-	46,  // 218: api.user.User.ReportUserBlack:output_type -> google.protobuf.Empty
-	46,  // 219: api.user.User.AddUserCredit:output_type -> google.protobuf.Empty
-	31,  // 220: api.user.User.UserInformationStatusDB:output_type -> api.user.InformationStatus
-	4,   // 221: api.user.User.UserGetInformationAwardByActivity:output_type -> api.user.UserGetInformationAwardByActivityReply
-	0,   // 222: api.user.User.FindUserVipDBList:output_type -> api.user.FindUserVipListDBReply
-	116, // [116:223] is the sub-list for method output_type
-	9,   // [9:116] is the sub-list for method input_type
+	69,  // 82: api.user.User.ManagerSetHandpickUser:input_type -> api.common.ManagerSetHandpickUserRequest
+	70,  // 83: api.user.User.ManagerSetHandpickUserOne:input_type -> api.common.ManagerSetHandpickUserOneRequest
+	10,  // 84: api.user.User.ManagerMarkHighQualityUser:input_type -> api.user.ManagerMarkHighQualityUserRequest
+	71,  // 85: api.user.User.ManagerMarkHighQualityUserOne:input_type -> api.common.PersonIDParam
+	72,  // 86: api.user.User.ManagerSetUserBlack:input_type -> api.common.PersonIDList
+	71,  // 87: api.user.User.ManagerDeleteHighQualityUser:input_type -> api.common.PersonIDParam
+	73,  // 88: api.user.User.ManagerUpdateUserVoice:input_type -> api.common.ManagerUpdatePersonVoiceRequest
+	74,  // 89: api.user.User.ManagerUpdateUserPictures:input_type -> api.common.ManagerUpdatePersonPicturesRequest
+	75,  // 90: api.user.User.ManagerUpdateUserSignature:input_type -> api.common.ManagerUpdatePersonSignatureRequest
+	76,  // 91: api.user.User.ManagerUpdateUserAvatar:input_type -> api.common.ManagerUpdatePersonAvatarRequest
+	77,  // 92: api.user.User.ManagerUpdateUserName:input_type -> api.common.ManagerUpdatePersonNameRequest
+	78,  // 93: api.user.User.ManagerUpdateUserWeight:input_type -> api.common.ManagerUpdatePersonWeightRequest
+	79,  // 94: api.user.User.ManagerUpdateUserIsBlack:input_type -> api.common.ManagerUpdatePersonIsBlackRequest
+	9,   // 95: api.user.User.ManagerUpdateUserCredit:input_type -> api.user.ManagerUpdateUserCreditRequest
+	71,  // 96: api.user.User.GetUserDBMsg:input_type -> api.common.PersonIDParam
+	72,  // 97: api.user.User.FindUserDBList:input_type -> api.common.PersonIDList
+	80,  // 98: api.user.User.UpdateLastScripIDDB:input_type -> api.common.UpdateLastScripIDDBRequest
+	81,  // 99: api.user.User.FindRecommendUserDBList:input_type -> api.common.FindRecommendRequest
+	71,  // 100: api.user.User.UpdateUserLastLoginTime:input_type -> api.common.PersonIDParam
+	82,  // 101: api.user.User.GetUserDBMsgByAccountID:input_type -> api.common.IDParam
+	12,  // 102: api.user.User.FindRecommendHighQualityUserDBList:input_type -> api.user.FindRecommendHighQualityUserRequest
+	71,  // 103: api.user.User.GetUserDBMsgFromWebsocket:input_type -> api.common.PersonIDParam
+	2,   // 104: api.user.User.SendMsgReduceCredit:input_type -> api.user.SendMsgReduceCreditRequest
+	51,  // 105: api.user.User.LookBackScripReduceCredit:input_type -> api.common.PersonParam
+	51,  // 106: api.user.User.CreateScripReduceCredit:input_type -> api.common.PersonParam
+	51,  // 107: api.user.User.ReplyScripReduceCredit:input_type -> api.common.PersonParam
+	51,  // 108: api.user.User.MatchingCredit:input_type -> api.common.PersonParam
+	17,  // 109: api.user.User.SendNewMessageUnreadReminder:input_type -> api.user.SendNewMessageUnreadReminderRequest
+	71,  // 110: api.user.User.SendNewVisitorTemplateReminder:input_type -> api.common.PersonIDParam
+	16,  // 111: api.user.User.UpdateUserMatchedNumAndReturnUserMsg:input_type -> api.user.UpdateUserMatchedNumRequest
+	11,  // 112: api.user.User.GetRecommendUserDB:input_type -> api.user.GetRecommendUserDBRequest
+	6,   // 113: api.user.User.ReportUserBlack:input_type -> api.user.ReportUserBlackRequest
+	5,   // 114: api.user.User.AddUserCredit:input_type -> api.user.AddUserCreditRequest
+	71,  // 115: api.user.User.UserInformationStatusDB:input_type -> api.common.PersonIDParam
+	3,   // 116: api.user.User.UserGetInformationAwardByActivity:input_type -> api.user.UserGetInformationAwardByActivityRequest
+	72,  // 117: api.user.User.FindUserVipDBList:input_type -> api.common.PersonIDList
+	35,  // 118: api.user.User.GetUserInfo:output_type -> api.user.UserInfo
+	46,  // 119: api.user.User.SendPhoneCode:output_type -> google.protobuf.Empty
+	46,  // 120: api.user.User.CheckPhoneCode:output_type -> google.protobuf.Empty
+	46,  // 121: api.user.User.UpdateUserInformation:output_type -> google.protobuf.Empty
+	83,  // 122: api.user.User.CreateUserPersonRoom:output_type -> api.chat.RoomReply
+	32,  // 123: api.user.User.GetUserBalance:output_type -> api.user.UserBalance
+	84,  // 124: api.user.User.UserGetHomeInfo:output_type -> api.common.HomeInfo
+	85,  // 125: api.user.User.UserGetPersonLikedAndLooked:output_type -> api.common.LookedAndLikedNum
+	86,  // 126: api.user.User.FindLookList:output_type -> api.statistics.LookAndLikeListReply
+	87,  // 127: api.user.User.WxConf:output_type -> api.common.WxConfResponse
+	88,  // 128: api.user.User.FindTagListBySex:output_type -> api.common.TagListReply
+	89,  // 129: api.user.User.FindOnlineList:output_type -> api.common.RecommendPersonListReply
+	33,  // 130: api.user.User.FindWithinSevenDayRoomList:output_type -> api.user.UserFindChatListReply
+	33,  // 131: api.user.User.FindOverSevenDayRoomList:output_type -> api.user.UserFindChatListReply
+	33,  // 132: api.user.User.FindCloseFriendRoomList:output_type -> api.user.UserFindChatListReply
+	90,  // 133: api.user.User.FindChatRecordList:output_type -> api.common.ChatRecordListReply
+	91,  // 134: api.user.User.FindChatRoomMsg:output_type -> api.common.ChatRoomMsg
+	92,  // 135: api.user.User.GetUserIsLike:output_type -> api.common.IsLike
+	93,  // 136: api.user.User.FindMemeByType:output_type -> api.common.MemeList
+	94,  // 137: api.user.User.FindChatTopic:output_type -> api.common.ChatTopicList
+	95,  // 138: api.user.User.RandomMeme:output_type -> api.common.CommonTextList
+	95,  // 139: api.user.User.RandomSwiftMessage:output_type -> api.common.CommonTextList
+	96,  // 140: api.user.User.FindMemeTitle:output_type -> api.common.MemeTitleList
+	97,  // 141: api.user.User.UserGetChatCard:output_type -> api.common.ChatCardInfo
+	96,  // 142: api.user.User.FindChatTopicTitle:output_type -> api.common.MemeTitleList
+	46,  // 143: api.user.User.UserLike:output_type -> google.protobuf.Empty
+	46,  // 144: api.user.User.UserUnLike:output_type -> google.protobuf.Empty
+	46,  // 145: api.user.User.Report:output_type -> google.protobuf.Empty
+	98,  // 146: api.user.User.FindOverSevenDayAvatar:output_type -> api.common.FindOverSevenDayAvatarReply
+	46,  // 147: api.user.User.UpdateLastScripID:output_type -> google.protobuf.Empty
+	99,  // 148: api.user.User.CreateScrip:output_type -> api.common.ScripID
+	46,  // 149: api.user.User.DeleteScrip:output_type -> google.protobuf.Empty
+	100, // 150: api.user.User.FindMyScrip:output_type -> api.common.ScripReply
+	100, // 151: api.user.User.FindOtherScrip:output_type -> api.common.ScripReply
+	100, // 152: api.user.User.FindRecommendScrip:output_type -> api.common.ScripReply
+	46,  // 153: api.user.User.PersonLookScrip:output_type -> google.protobuf.Empty
+	101, // 154: api.user.User.PersonClickLookBack:output_type -> api.common.ScripInfo
+	102, // 155: api.user.User.PersonReplyScrip:output_type -> api.common.ChatRecordInfo
+	46,  // 156: api.user.User.UserDeleteChat:output_type -> google.protobuf.Empty
+	103, // 157: api.user.User.GetUserAllUnreadNum:output_type -> api.chat.UnreadNumReply
+	104, // 158: api.user.User.GetUserRoomByPerson:output_type -> api.chat.UserRoomInfo
+	86,  // 159: api.user.User.FindLikeList:output_type -> api.statistics.LookAndLikeListReply
+	86,  // 160: api.user.User.FindLikedList:output_type -> api.statistics.LookAndLikeListReply
+	46,  // 161: api.user.User.UserSetBlackChat:output_type -> google.protobuf.Empty
+	105, // 162: api.user.User.CheckUserPartnerIsRelationship:output_type -> api.chat.CheckUserPartnerIsRelationshipReply
+	106, // 163: api.user.User.GetPartnerCircleInfo:output_type -> api.common.AddFriendMessageInfo
+	107, // 164: api.user.User.GetLookAndLikeStatisticsMessage:output_type -> api.statistics.LookAndLikeMessageReply
+	108, // 165: api.user.User.GetUserLookNum:output_type -> api.statistics.LookMessageReply
+	46,  // 166: api.user.User.UserFinishInformation:output_type -> google.protobuf.Empty
+	31,  // 167: api.user.User.UserInformationStatus:output_type -> api.user.InformationStatus
+	46,  // 168: api.user.User.UserGetInformationAward:output_type -> google.protobuf.Empty
+	46,  // 169: api.user.User.UnlockLookRecord:output_type -> google.protobuf.Empty
+	38,  // 170: api.user.User.UserRecharge:output_type -> api.user.PayInfo
+	38,  // 171: api.user.User.UserRechargeVip:output_type -> api.user.PayInfo
+	27,  // 172: api.user.User.FindRechargeList:output_type -> api.user.RechargeList
+	28,  // 173: api.user.User.FindVipRechargeList:output_type -> api.user.VipRechargeList
+	40,  // 174: api.user.User.FindPayList:output_type -> api.user.PayOrderList
+	89,  // 175: api.user.User.FindRecommendPersonList:output_type -> api.common.RecommendPersonListReply
+	25,  // 176: api.user.User.FindMatchingAvatarAndNum:output_type -> api.user.FindMatchingAvatarAndNumReply
+	109, // 177: api.user.User.GetWindowInfo:output_type -> api.chat.WindowInfo
+	19,  // 178: api.user.User.GetUserFreeNum:output_type -> api.user.UserFreeNum
+	110, // 179: api.user.User.GetRandomMatching:output_type -> api.chat.GetRandomMatchingReply
+	46,  // 180: api.user.User.UnlockVoice:output_type -> google.protobuf.Empty
+	46,  // 181: api.user.User.UnlockPicture:output_type -> google.protobuf.Empty
+	46,  // 182: api.user.User.UpdateUserIsRegister:output_type -> google.protobuf.Empty
+	83,  // 183: api.user.User.CreateUserPartnerRoom:output_type -> api.chat.RoomReply
+	111, // 184: api.user.User.SendMessage:output_type -> api.common.SendMessageReply
+	1,   // 185: api.user.User.GetVipInfo:output_type -> api.user.VipInfo
+	112, // 186: api.user.User.ManagerFindUserList:output_type -> api.common.ManagerFindPersonListReply
+	112, // 187: api.user.User.ManagerFindInformationUserList:output_type -> api.common.ManagerFindPersonListReply
+	113, // 188: api.user.User.ManagerFindIsCheckQualityUserList:output_type -> api.common.ManagerFindPersonListReply2
+	112, // 189: api.user.User.ManagerFindHighQualityUserList:output_type -> api.common.ManagerFindPersonListReply
+	114, // 190: api.user.User.ManagerFindCanHandpickUserList:output_type -> api.common.ManagerFindCanHandpickUserListReply
+	46,  // 191: api.user.User.ManagerSetHandpickUser:output_type -> google.protobuf.Empty
+	46,  // 192: api.user.User.ManagerSetHandpickUserOne:output_type -> google.protobuf.Empty
+	46,  // 193: api.user.User.ManagerMarkHighQualityUser:output_type -> google.protobuf.Empty
+	46,  // 194: api.user.User.ManagerMarkHighQualityUserOne:output_type -> google.protobuf.Empty
+	46,  // 195: api.user.User.ManagerSetUserBlack:output_type -> google.protobuf.Empty
+	46,  // 196: api.user.User.ManagerDeleteHighQualityUser:output_type -> google.protobuf.Empty
+	46,  // 197: api.user.User.ManagerUpdateUserVoice:output_type -> google.protobuf.Empty
+	46,  // 198: api.user.User.ManagerUpdateUserPictures:output_type -> google.protobuf.Empty
+	46,  // 199: api.user.User.ManagerUpdateUserSignature:output_type -> google.protobuf.Empty
+	46,  // 200: api.user.User.ManagerUpdateUserAvatar:output_type -> google.protobuf.Empty
+	46,  // 201: api.user.User.ManagerUpdateUserName:output_type -> google.protobuf.Empty
+	46,  // 202: api.user.User.ManagerUpdateUserWeight:output_type -> google.protobuf.Empty
+	46,  // 203: api.user.User.ManagerUpdateUserIsBlack:output_type -> google.protobuf.Empty
+	46,  // 204: api.user.User.ManagerUpdateUserCredit:output_type -> google.protobuf.Empty
+	115, // 205: api.user.User.GetUserDBMsg:output_type -> api.common.PersonMsg
+	116, // 206: api.user.User.FindUserDBList:output_type -> api.common.PersonDBReply
+	46,  // 207: api.user.User.UpdateLastScripIDDB:output_type -> google.protobuf.Empty
+	116, // 208: api.user.User.FindRecommendUserDBList:output_type -> api.common.PersonDBReply
+	46,  // 209: api.user.User.UpdateUserLastLoginTime:output_type -> google.protobuf.Empty
+	115, // 210: api.user.User.GetUserDBMsgByAccountID:output_type -> api.common.PersonMsg
+	13,  // 211: api.user.User.FindRecommendHighQualityUserDBList:output_type -> api.user.FindRecommendHighQualityUserReply
+	15,  // 212: api.user.User.GetUserDBMsgFromWebsocket:output_type -> api.user.GetUserDBMsgFromWebsocketReply
+	46,  // 213: api.user.User.SendMsgReduceCredit:output_type -> google.protobuf.Empty
+	46,  // 214: api.user.User.LookBackScripReduceCredit:output_type -> google.protobuf.Empty
+	46,  // 215: api.user.User.CreateScripReduceCredit:output_type -> google.protobuf.Empty
+	46,  // 216: api.user.User.ReplyScripReduceCredit:output_type -> google.protobuf.Empty
+	46,  // 217: api.user.User.MatchingCredit:output_type -> google.protobuf.Empty
+	46,  // 218: api.user.User.SendNewMessageUnreadReminder:output_type -> google.protobuf.Empty
+	46,  // 219: api.user.User.SendNewVisitorTemplateReminder:output_type -> google.protobuf.Empty
+	14,  // 220: api.user.User.UpdateUserMatchedNumAndReturnUserMsg:output_type -> api.user.UpdateUserMatchedNumAndReturnUserMsgReply
+	117, // 221: api.user.User.GetRecommendUserDB:output_type -> api.common.PersonDB
+	46,  // 222: api.user.User.ReportUserBlack:output_type -> google.protobuf.Empty
+	46,  // 223: api.user.User.AddUserCredit:output_type -> google.protobuf.Empty
+	31,  // 224: api.user.User.UserInformationStatusDB:output_type -> api.user.InformationStatus
+	4,   // 225: api.user.User.UserGetInformationAwardByActivity:output_type -> api.user.UserGetInformationAwardByActivityReply
+	0,   // 226: api.user.User.FindUserVipDBList:output_type -> api.user.FindUserVipListDBReply
+	118, // [118:227] is the sub-list for method output_type
+	9,   // [9:118] is the sub-list for method input_type
 	9,   // [9:9] is the sub-list for extension type_name
 	9,   // [9:9] is the sub-list for extension extendee
 	0,   // [0:9] is the sub-list for field type_name

+ 14 - 1
api/user/user.proto

@@ -533,7 +533,20 @@ service User {
       body:"*"
     };
   };
-
+  // 管理员批量更新精选用户
+  rpc ManagerSetHandpickUser (common.ManagerSetHandpickUserRequest) returns (google.protobuf.Empty){
+    option (google.api.http) = {
+      post: "/api/manager/handpick/user/set",
+      body:"*"
+    };
+  };
+  // 管理员更新单个精选用户
+  rpc ManagerSetHandpickUserOne (common.ManagerSetHandpickUserOneRequest) returns (google.protobuf.Empty){
+    option (google.api.http) = {
+      post: "/api/manager/handpick/user/set",
+      body:"*"
+    };
+  };
   // 管理员标记优质用户
   rpc ManagerMarkHighQualityUser (ManagerMarkHighQualityUserRequest) returns (google.protobuf.Empty){
     option (google.api.http) = {

+ 76 - 0
api/user/user_grpc.pb.go

@@ -171,6 +171,10 @@ type UserClient interface {
 	ManagerFindHighQualityUserList(ctx context.Context, in *common.ManagerFindPersonListRequest, opts ...grpc.CallOption) (*common.ManagerFindPersonListReply, error)
 	// 管理员查询精选用户
 	ManagerFindCanHandpickUserList(ctx context.Context, in *common.ManagerFindCanHandpickUserListRequest, opts ...grpc.CallOption) (*common.ManagerFindCanHandpickUserListReply, error)
+	// 管理员批量更新精选用户
+	ManagerSetHandpickUser(ctx context.Context, in *common.ManagerSetHandpickUserRequest, opts ...grpc.CallOption) (*emptypb.Empty, error)
+	// 管理员更新单个精选用户
+	ManagerSetHandpickUserOne(ctx context.Context, in *common.ManagerSetHandpickUserOneRequest, opts ...grpc.CallOption) (*emptypb.Empty, error)
 	// 管理员标记优质用户
 	ManagerMarkHighQualityUser(ctx context.Context, in *ManagerMarkHighQualityUserRequest, opts ...grpc.CallOption) (*emptypb.Empty, error)
 	// 管理员标记单个优质用户
@@ -907,6 +911,24 @@ func (c *userClient) ManagerFindCanHandpickUserList(ctx context.Context, in *com
 	return out, nil
 }
 
+func (c *userClient) ManagerSetHandpickUser(ctx context.Context, in *common.ManagerSetHandpickUserRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) {
+	out := new(emptypb.Empty)
+	err := c.cc.Invoke(ctx, "/api.user.User/ManagerSetHandpickUser", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *userClient) ManagerSetHandpickUserOne(ctx context.Context, in *common.ManagerSetHandpickUserOneRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) {
+	out := new(emptypb.Empty)
+	err := c.cc.Invoke(ctx, "/api.user.User/ManagerSetHandpickUserOne", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
 func (c *userClient) ManagerMarkHighQualityUser(ctx context.Context, in *ManagerMarkHighQualityUserRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) {
 	out := new(emptypb.Empty)
 	err := c.cc.Invoke(ctx, "/api.user.User/ManagerMarkHighQualityUser", in, out, opts...)
@@ -1366,6 +1388,10 @@ type UserServer interface {
 	ManagerFindHighQualityUserList(context.Context, *common.ManagerFindPersonListRequest) (*common.ManagerFindPersonListReply, error)
 	// 管理员查询精选用户
 	ManagerFindCanHandpickUserList(context.Context, *common.ManagerFindCanHandpickUserListRequest) (*common.ManagerFindCanHandpickUserListReply, error)
+	// 管理员批量更新精选用户
+	ManagerSetHandpickUser(context.Context, *common.ManagerSetHandpickUserRequest) (*emptypb.Empty, error)
+	// 管理员更新单个精选用户
+	ManagerSetHandpickUserOne(context.Context, *common.ManagerSetHandpickUserOneRequest) (*emptypb.Empty, error)
 	// 管理员标记优质用户
 	ManagerMarkHighQualityUser(context.Context, *ManagerMarkHighQualityUserRequest) (*emptypb.Empty, error)
 	// 管理员标记单个优质用户
@@ -1661,6 +1687,12 @@ func (UnimplementedUserServer) ManagerFindHighQualityUserList(context.Context, *
 func (UnimplementedUserServer) ManagerFindCanHandpickUserList(context.Context, *common.ManagerFindCanHandpickUserListRequest) (*common.ManagerFindCanHandpickUserListReply, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method ManagerFindCanHandpickUserList not implemented")
 }
+func (UnimplementedUserServer) ManagerSetHandpickUser(context.Context, *common.ManagerSetHandpickUserRequest) (*emptypb.Empty, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method ManagerSetHandpickUser not implemented")
+}
+func (UnimplementedUserServer) ManagerSetHandpickUserOne(context.Context, *common.ManagerSetHandpickUserOneRequest) (*emptypb.Empty, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method ManagerSetHandpickUserOne not implemented")
+}
 func (UnimplementedUserServer) ManagerMarkHighQualityUser(context.Context, *ManagerMarkHighQualityUserRequest) (*emptypb.Empty, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method ManagerMarkHighQualityUser not implemented")
 }
@@ -3090,6 +3122,42 @@ func _User_ManagerFindCanHandpickUserList_Handler(srv interface{}, ctx context.C
 	return interceptor(ctx, in, info, handler)
 }
 
+func _User_ManagerSetHandpickUser_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(common.ManagerSetHandpickUserRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(UserServer).ManagerSetHandpickUser(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/api.user.User/ManagerSetHandpickUser",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(UserServer).ManagerSetHandpickUser(ctx, req.(*common.ManagerSetHandpickUserRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _User_ManagerSetHandpickUserOne_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(common.ManagerSetHandpickUserOneRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(UserServer).ManagerSetHandpickUserOne(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/api.user.User/ManagerSetHandpickUserOne",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(UserServer).ManagerSetHandpickUserOne(ctx, req.(*common.ManagerSetHandpickUserOneRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
 func _User_ManagerMarkHighQualityUser_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
 	in := new(ManagerMarkHighQualityUserRequest)
 	if err := dec(in); err != nil {
@@ -4001,6 +4069,14 @@ var User_ServiceDesc = grpc.ServiceDesc{
 			MethodName: "ManagerFindCanHandpickUserList",
 			Handler:    _User_ManagerFindCanHandpickUserList_Handler,
 		},
+		{
+			MethodName: "ManagerSetHandpickUser",
+			Handler:    _User_ManagerSetHandpickUser_Handler,
+		},
+		{
+			MethodName: "ManagerSetHandpickUserOne",
+			Handler:    _User_ManagerSetHandpickUserOne_Handler,
+		},
 		{
 			MethodName: "ManagerMarkHighQualityUser",
 			Handler:    _User_ManagerMarkHighQualityUser_Handler,

+ 86 - 0
api/user/user_http.pb.go

@@ -79,6 +79,8 @@ type UserHTTPServer interface {
 	ManagerFindUserList(context.Context, *common.ManagerFindPersonListRequest) (*common.ManagerFindPersonListReply, error)
 	ManagerMarkHighQualityUser(context.Context, *ManagerMarkHighQualityUserRequest) (*emptypb.Empty, error)
 	ManagerMarkHighQualityUserOne(context.Context, *common.PersonIDParam) (*emptypb.Empty, error)
+	ManagerSetHandpickUser(context.Context, *common.ManagerSetHandpickUserRequest) (*emptypb.Empty, error)
+	ManagerSetHandpickUserOne(context.Context, *common.ManagerSetHandpickUserOneRequest) (*emptypb.Empty, error)
 	ManagerSetUserBlack(context.Context, *common.PersonIDList) (*emptypb.Empty, error)
 	ManagerUpdateUserAvatar(context.Context, *common.ManagerUpdatePersonAvatarRequest) (*emptypb.Empty, error)
 	ManagerUpdateUserCredit(context.Context, *ManagerUpdateUserCreditRequest) (*emptypb.Empty, error)
@@ -192,6 +194,8 @@ func RegisterUserHTTPServer(s *http.Server, srv UserHTTPServer) {
 	r.POST("/api/manager/user/list/ischeckquality", _User_ManagerFindIsCheckQualityUserList0_HTTP_Handler(srv))
 	r.POST("/api/manager/quality/user/list", _User_ManagerFindHighQualityUserList0_HTTP_Handler(srv))
 	r.POST("/api/manager/handpick/user/list", _User_ManagerFindCanHandpickUserList0_HTTP_Handler(srv))
+	r.POST("/api/manager/handpick/user/set", _User_ManagerSetHandpickUser0_HTTP_Handler(srv))
+	r.POST("/api/manager/handpick/user/set", _User_ManagerSetHandpickUserOne0_HTTP_Handler(srv))
 	r.POST("/api/manager/quality/user/set", _User_ManagerMarkHighQualityUser0_HTTP_Handler(srv))
 	r.POST("/api/manager/quality/user/set/one", _User_ManagerMarkHighQualityUserOne0_HTTP_Handler(srv))
 	r.POST("/api/manager/black/user/more", _User_ManagerSetUserBlack0_HTTP_Handler(srv))
@@ -2177,6 +2181,60 @@ func _User_ManagerFindCanHandpickUserList0_HTTP_Handler(srv UserHTTPServer) func
 	}
 }
 
+func _User_ManagerSetHandpickUser0_HTTP_Handler(srv UserHTTPServer) func(ctx http.Context) error {
+	return func(ctx http.Context) error {
+		var in common.ManagerSetHandpickUserRequest
+		if err := ctx.Bind(&in); err != nil {
+			return err
+		}
+		if err := ctx.BindQuery(&in); err != nil {
+			return err
+		}
+		http.SetOperation(ctx, "/api.user.User/ManagerSetHandpickUser")
+		h := ctx.Middleware(func(ctx context.Context, req interface{}) (interface{}, error) {
+			return srv.ManagerSetHandpickUser(ctx, req.(*common.ManagerSetHandpickUserRequest))
+		})
+		out, err := h(ctx, &in)
+		if err != nil {
+			return err
+		}
+		success := &reply.SuccessReply{
+			Code: 0,
+		}
+		if out != nil {
+			success.Data = out
+		}
+		return ctx.Result(200, success)
+	}
+}
+
+func _User_ManagerSetHandpickUserOne0_HTTP_Handler(srv UserHTTPServer) func(ctx http.Context) error {
+	return func(ctx http.Context) error {
+		var in common.ManagerSetHandpickUserOneRequest
+		if err := ctx.Bind(&in); err != nil {
+			return err
+		}
+		if err := ctx.BindQuery(&in); err != nil {
+			return err
+		}
+		http.SetOperation(ctx, "/api.user.User/ManagerSetHandpickUserOne")
+		h := ctx.Middleware(func(ctx context.Context, req interface{}) (interface{}, error) {
+			return srv.ManagerSetHandpickUserOne(ctx, req.(*common.ManagerSetHandpickUserOneRequest))
+		})
+		out, err := h(ctx, &in)
+		if err != nil {
+			return err
+		}
+		success := &reply.SuccessReply{
+			Code: 0,
+		}
+		if out != nil {
+			success.Data = out
+		}
+		return ctx.Result(200, success)
+	}
+}
+
 func _User_ManagerMarkHighQualityUser0_HTTP_Handler(srv UserHTTPServer) func(ctx http.Context) error {
 	return func(ctx http.Context) error {
 		var in ManagerMarkHighQualityUserRequest
@@ -2551,6 +2609,8 @@ type UserHTTPClient interface {
 	ManagerFindUserList(ctx context.Context, req *common.ManagerFindPersonListRequest, opts ...http.CallOption) (rsp *common.ManagerFindPersonListReply, err error)
 	ManagerMarkHighQualityUser(ctx context.Context, req *ManagerMarkHighQualityUserRequest, opts ...http.CallOption) (rsp *emptypb.Empty, err error)
 	ManagerMarkHighQualityUserOne(ctx context.Context, req *common.PersonIDParam, opts ...http.CallOption) (rsp *emptypb.Empty, err error)
+	ManagerSetHandpickUser(ctx context.Context, req *common.ManagerSetHandpickUserRequest, opts ...http.CallOption) (rsp *emptypb.Empty, err error)
+	ManagerSetHandpickUserOne(ctx context.Context, req *common.ManagerSetHandpickUserOneRequest, opts ...http.CallOption) (rsp *emptypb.Empty, err error)
 	ManagerSetUserBlack(ctx context.Context, req *common.PersonIDList, opts ...http.CallOption) (rsp *emptypb.Empty, err error)
 	ManagerUpdateUserAvatar(ctx context.Context, req *common.ManagerUpdatePersonAvatarRequest, opts ...http.CallOption) (rsp *emptypb.Empty, err error)
 	ManagerUpdateUserCredit(ctx context.Context, req *ManagerUpdateUserCreditRequest, opts ...http.CallOption) (rsp *emptypb.Empty, err error)
@@ -3234,6 +3294,32 @@ func (c *UserHTTPClientImpl) ManagerMarkHighQualityUserOne(ctx context.Context,
 	return &out, err
 }
 
+func (c *UserHTTPClientImpl) ManagerSetHandpickUser(ctx context.Context, in *common.ManagerSetHandpickUserRequest, opts ...http.CallOption) (*emptypb.Empty, error) {
+	var out emptypb.Empty
+	pattern := "/api/manager/handpick/user/set"
+	path := binding.EncodeURL(pattern, in, false)
+	opts = append(opts, http.Operation("/api.user.User/ManagerSetHandpickUser"))
+	opts = append(opts, http.PathTemplate(pattern))
+	err := c.cc.Invoke(ctx, "POST", path, in, &out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return &out, err
+}
+
+func (c *UserHTTPClientImpl) ManagerSetHandpickUserOne(ctx context.Context, in *common.ManagerSetHandpickUserOneRequest, opts ...http.CallOption) (*emptypb.Empty, error) {
+	var out emptypb.Empty
+	pattern := "/api/manager/handpick/user/set"
+	path := binding.EncodeURL(pattern, in, false)
+	opts = append(opts, http.Operation("/api.user.User/ManagerSetHandpickUserOne"))
+	opts = append(opts, http.PathTemplate(pattern))
+	err := c.cc.Invoke(ctx, "POST", path, in, &out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return &out, err
+}
+
 func (c *UserHTTPClientImpl) ManagerSetUserBlack(ctx context.Context, in *common.PersonIDList, opts ...http.CallOption) (*emptypb.Empty, error) {
 	var out emptypb.Empty
 	pattern := "/api/manager/black/user/more"

+ 14 - 0
js/api/common/common_pb.ts

@@ -1020,8 +1020,22 @@ export interface SendMessageReply{
 export interface ManagerFindCanHandpickUserListRequest{
     nextId?:string;
     offset?:number;
+    /**  是则筛选 已经是精选的用户 否则筛选还未检查过的优质用户 */
     isHandpickUser?:boolean;
 }
+export interface ManagerSetHandpickUserRequest{
+    passList?:Array<SetHandpickUserInfo>;
+    unPassList?:Array<SetHandpickUserInfo>;
+}
+export interface ManagerSetHandpickUserOneRequest{
+    userId?:string;
+    picture?:string;
+    isHandpickUser?:boolean;
+}
+export interface SetHandpickUserInfo{
+    userId?:string;
+    picture?:string;
+}
 export interface ManagerFindCanHandpickUserListReply{
     list?:Array<ManagerFindCanHandpickUserInfo>;
     nextId?:string;

+ 11 - 1
js/api/user/user_http_pb.ts

@@ -1,7 +1,7 @@
 // @ts-ignore
 import request from '@/libs/request';
 import {UserInfo,UserBalance,UserFindChatListReply,CreateScripRequest,DeleteScripRequest,UserFindScripRequest,PersonLookScripRequest,ReplyScripRequest,KeyRequest,InformationStatus,UserRechargeRequest,PayInfo,RechargeList,VipRechargeList,FindPayOrderListRequest,PayOrderList,FindMatchingAvatarAndNumReply,UserFreeNum,SendMessageRequest,VipInfo,ManagerFindIsCheckQualityUserListRequest,ManagerMarkHighQualityUserRequest,ManagerUpdateUserCreditRequest,FindRecommendHighQualityUserRequest,FindRecommendHighQualityUserReply,GetUserDBMsgFromWebsocketReply,SendMsgReduceCreditRequest,SendNewMessageUnreadReminderRequest,UpdateUserMatchedNumRequest,UpdateUserMatchedNumAndReturnUserMsgReply,GetRecommendUserDBRequest,ReportUserBlackRequest,AddUserCreditRequest,UserGetInformationAwardByActivityRequest,UserGetInformationAwardByActivityReply,FindUserVipListDBReply} from "./user_pb";
-import {SendPhoneCodeRequest,CheckPhoneCodeRequest,UpdateInformationRequest,CreateChatRoomParam,PersonParam,HomeInfo,LookedAndLikedNum,ListPageRequest,WxConfReq,WxConfResponse,SexReq,TagListReply,ListPage2Request,RecommendPersonListReply,FindChatRecordListRequest,ChatRecordListReply,FindChatRoomMsgRequest,ChatRoomMsg,IsLike,MemeRequest,MemeList,FindChatTopicRequest,ChatTopicList,RandomNum,CommonTextList,RandomNumAndSex,MemeTitleList,ChatCardInfo,ReportChatRequest,FindOverSevenDayAvatarReply,UpdateLastScripIDRequest,ScripID,ScripReply,FindScripRequest,ScripInfo,ChatRecordInfo,RoomIDRequest,PartnerIDParam,AddFriendMessageInfo,SendMessageReply,ManagerFindPersonListRequest,ManagerFindPersonListReply,ManagerFindPersonListReply2,ManagerFindCanHandpickUserListRequest,ManagerFindCanHandpickUserListReply,PersonIDParam,PersonIDList,ManagerUpdatePersonVoiceRequest,ManagerUpdatePersonPicturesRequest,ManagerUpdatePersonSignatureRequest,ManagerUpdatePersonAvatarRequest,ManagerUpdatePersonNameRequest,ManagerUpdatePersonWeightRequest,ManagerUpdatePersonIsBlackRequest,PersonMsg,PersonDBReply,UpdateLastScripIDDBRequest,FindRecommendRequest,IDParam,PersonDB} from "../common/common_pb";
+import {SendPhoneCodeRequest,CheckPhoneCodeRequest,UpdateInformationRequest,CreateChatRoomParam,PersonParam,HomeInfo,LookedAndLikedNum,ListPageRequest,WxConfReq,WxConfResponse,SexReq,TagListReply,ListPage2Request,RecommendPersonListReply,FindChatRecordListRequest,ChatRecordListReply,FindChatRoomMsgRequest,ChatRoomMsg,IsLike,MemeRequest,MemeList,FindChatTopicRequest,ChatTopicList,RandomNum,CommonTextList,RandomNumAndSex,MemeTitleList,ChatCardInfo,ReportChatRequest,FindOverSevenDayAvatarReply,UpdateLastScripIDRequest,ScripID,ScripReply,FindScripRequest,ScripInfo,ChatRecordInfo,RoomIDRequest,PartnerIDParam,AddFriendMessageInfo,SendMessageReply,ManagerFindPersonListRequest,ManagerFindPersonListReply,ManagerFindPersonListReply2,ManagerFindCanHandpickUserListRequest,ManagerFindCanHandpickUserListReply,ManagerSetHandpickUserRequest,ManagerSetHandpickUserOneRequest,PersonIDParam,PersonIDList,ManagerUpdatePersonVoiceRequest,ManagerUpdatePersonPicturesRequest,ManagerUpdatePersonSignatureRequest,ManagerUpdatePersonAvatarRequest,ManagerUpdatePersonNameRequest,ManagerUpdatePersonWeightRequest,ManagerUpdatePersonIsBlackRequest,PersonMsg,PersonDBReply,UpdateLastScripIDDBRequest,FindRecommendRequest,IDParam,PersonDB} from "../common/common_pb";
 import {RoomReply,UnreadNumReply,UserRoomInfo,CheckUserPartnerIsRelationshipReply,WindowInfo,GetRandomMatchingReply} from "../chat/chat_pb";
 import {LookAndLikeListReply,LookAndLikeMessageReply,LookMessageReply} from "../statistics/statistics_pb";
 
@@ -374,6 +374,16 @@ const UserService = {
 	const res = await request.post<{ data: ManagerFindCanHandpickUserListReply, code: string, message: string }>('/api/manager/handpick/user/list', req);
     return res.data.data;
   },
+  /**  管理员批量更新精选用户 */
+  ManagerSetHandpickUser: async (req?: ManagerSetHandpickUserRequest) => {
+	const res = await request.post('/api/manager/handpick/user/set', req);
+    return res.data.data;
+  },
+  /**  管理员更新单个精选用户 */
+  ManagerSetHandpickUserOne: async (req?: ManagerSetHandpickUserOneRequest) => {
+	const res = await request.post('/api/manager/handpick/user/set', req);
+    return res.data.data;
+  },
   /**  管理员标记优质用户 */
   ManagerMarkHighQualityUser: async (req?: ManagerMarkHighQualityUserRequest) => {
 	const res = await request.post('/api/manager/quality/user/set', req);