diff --git a/data/DB_PassShow.dat b/data/DB_PassShow.dat
new file mode 100644
index 0000000..a76215f
--- /dev/null
+++ b/data/DB_PassShow.dat
@@ -0,0 +1,4 @@
+
+��z ��
+
+�N �N
\ No newline at end of file
diff --git a/data/DB_PassShow.json b/data/DB_PassShow.json
new file mode 100644
index 0000000..f8d8091
--- /dev/null
+++ b/data/DB_PassShow.json
@@ -0,0 +1,16 @@
+{
+	"Arr": [
+		{
+			"Id": 1,
+			"ShowType": 1,
+			"ShowVolume": 2000003,
+			"Location": 20003
+		},
+		{
+			"Id": 2,
+			"ShowType": 2,
+			"ShowVolume": 10001,
+			"Location": 10001
+		}
+	]
+}
\ No newline at end of file
diff --git a/data/DB_PropExchange.dat b/data/DB_PropExchange.dat
index 714d1c1..7a4fcb8 100644
Binary files a/data/DB_PropExchange.dat and b/data/DB_PropExchange.dat differ
diff --git a/data/DB_Task.dat b/data/DB_Task.dat
index 4077bc2..6de5afd 100644
Binary files a/data/DB_Task.dat and b/data/DB_Task.dat differ
diff --git a/protocol/rank/rank.pb.go b/protocol/rank/rank.pb.go
index 00a0c60..74f50d1 100644
--- a/protocol/rank/rank.pb.go
+++ b/protocol/rank/rank.pb.go
@@ -42,6 +42,9 @@ const (
 	//等级榜
 	Rank_PACKET_RANK_CSLevel Rank = 10010
 	Rank_PACKET_RANK_SCLevel Rank = 10011
+	//赛季通行证排行榜
+	Rank_PACKET_RANK_CSPermit Rank = 10012
+	Rank_PACKET_RANK_SCPermit Rank = 10013
 )
 
 // Enum value maps for Rank.
@@ -60,6 +63,8 @@ var (
 		10009: "PACKET_RANK_SCWinCoin",
 		10010: "PACKET_RANK_CSLevel",
 		10011: "PACKET_RANK_SCLevel",
+		10012: "PACKET_RANK_CSPermit",
+		10013: "PACKET_RANK_SCPermit",
 	}
 	Rank_value = map[string]int32{
 		"PACKET_RANK_ZERO":        0,
@@ -75,6 +80,8 @@ var (
 		"PACKET_RANK_SCWinCoin":   10009,
 		"PACKET_RANK_CSLevel":     10010,
 		"PACKET_RANK_SCLevel":     10011,
+		"PACKET_RANK_CSPermit":    10012,
+		"PACKET_RANK_SCPermit":    10013,
 	}
 )
 
@@ -1567,6 +1574,221 @@ func (x *SCPlayerLevelRank) GetLimit() int32 {
 	return 0
 }
 
+//PACKET_RANK_CSPermit
+type CSPermit struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Skip  int32 `protobuf:"varint,1,opt,name=Skip,proto3" json:"Skip,omitempty"`   // 偏移量
+	Limit int32 `protobuf:"varint,2,opt,name=Limit,proto3" json:"Limit,omitempty"` // 请求数量
+}
+
+func (x *CSPermit) Reset() {
+	*x = CSPermit{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_rank_proto_msgTypes[19]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *CSPermit) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*CSPermit) ProtoMessage() {}
+
+func (x *CSPermit) ProtoReflect() protoreflect.Message {
+	mi := &file_rank_proto_msgTypes[19]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use CSPermit.ProtoReflect.Descriptor instead.
+func (*CSPermit) Descriptor() ([]byte, []int) {
+	return file_rank_proto_rawDescGZIP(), []int{19}
+}
+
+func (x *CSPermit) GetSkip() int32 {
+	if x != nil {
+		return x.Skip
+	}
+	return 0
+}
+
+func (x *CSPermit) GetLimit() int32 {
+	if x != nil {
+		return x.Limit
+	}
+	return 0
+}
+
+type PermitRank struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Snid  int32  `protobuf:"varint,1,opt,name=Snid,proto3" json:"Snid,omitempty"`   // 玩家id
+	Name  string `protobuf:"bytes,2,opt,name=Name,proto3" json:"Name,omitempty"`    // 昵称
+	Rank  int32  `protobuf:"varint,3,opt,name=Rank,proto3" json:"Rank,omitempty"`   //段位排名
+	Score int64  `protobuf:"varint,4,opt,name=Score,proto3" json:"Score,omitempty"` // 积分
+	ModId int32  `protobuf:"varint,5,opt,name=ModId,proto3" json:"ModId,omitempty"` // 头像模型
+}
+
+func (x *PermitRank) Reset() {
+	*x = PermitRank{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_rank_proto_msgTypes[20]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *PermitRank) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*PermitRank) ProtoMessage() {}
+
+func (x *PermitRank) ProtoReflect() protoreflect.Message {
+	mi := &file_rank_proto_msgTypes[20]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use PermitRank.ProtoReflect.Descriptor instead.
+func (*PermitRank) Descriptor() ([]byte, []int) {
+	return file_rank_proto_rawDescGZIP(), []int{20}
+}
+
+func (x *PermitRank) GetSnid() int32 {
+	if x != nil {
+		return x.Snid
+	}
+	return 0
+}
+
+func (x *PermitRank) GetName() string {
+	if x != nil {
+		return x.Name
+	}
+	return ""
+}
+
+func (x *PermitRank) GetRank() int32 {
+	if x != nil {
+		return x.Rank
+	}
+	return 0
+}
+
+func (x *PermitRank) GetScore() int64 {
+	if x != nil {
+		return x.Score
+	}
+	return 0
+}
+
+func (x *PermitRank) GetModId() int32 {
+	if x != nil {
+		return x.ModId
+	}
+	return 0
+}
+
+// PACKET_RANK_SCPermit
+type SCPermit struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Ranks      []*PermitRank `protobuf:"bytes,1,rep,name=Ranks,proto3" json:"Ranks,omitempty"` // 排行榜
+	Me         *PermitRank   `protobuf:"bytes,2,opt,name=Me,proto3" json:"Me,omitempty"`       // 玩家自己的排行信息
+	Skip       int32         `protobuf:"varint,3,opt,name=Skip,proto3" json:"Skip,omitempty"`  // 偏移量
+	IsEndNum   bool          `protobuf:"varint,4,opt,name=IsEndNum,proto3" json:"IsEndNum,omitempty"`
+	RankMaxNum int32         `protobuf:"varint,5,opt,name=RankMaxNum,proto3" json:"RankMaxNum,omitempty"` // 排行榜最大上限
+}
+
+func (x *SCPermit) Reset() {
+	*x = SCPermit{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_rank_proto_msgTypes[21]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *SCPermit) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SCPermit) ProtoMessage() {}
+
+func (x *SCPermit) ProtoReflect() protoreflect.Message {
+	mi := &file_rank_proto_msgTypes[21]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use SCPermit.ProtoReflect.Descriptor instead.
+func (*SCPermit) Descriptor() ([]byte, []int) {
+	return file_rank_proto_rawDescGZIP(), []int{21}
+}
+
+func (x *SCPermit) GetRanks() []*PermitRank {
+	if x != nil {
+		return x.Ranks
+	}
+	return nil
+}
+
+func (x *SCPermit) GetMe() *PermitRank {
+	if x != nil {
+		return x.Me
+	}
+	return nil
+}
+
+func (x *SCPermit) GetSkip() int32 {
+	if x != nil {
+		return x.Skip
+	}
+	return 0
+}
+
+func (x *SCPermit) GetIsEndNum() bool {
+	if x != nil {
+		return x.IsEndNum
+	}
+	return false
+}
+
+func (x *SCPermit) GetRankMaxNum() int32 {
+	if x != nil {
+		return x.RankMaxNum
+	}
+	return 0
+}
+
 var File_rank_proto protoreflect.FileDescriptor
 
 var file_rank_proto_rawDesc = []byte{
@@ -1711,40 +1933,65 @@ var file_rank_proto_rawDesc = []byte{
 	0x66, 0x6f, 0x52, 0x02, 0x4d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6b, 0x69, 0x70, 0x18, 0x03,
 	0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6b, 0x69, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x4c, 0x69,
 	0x6d, 0x69, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x4c, 0x69, 0x6d, 0x69, 0x74,
-	0x2a, 0xde, 0x02, 0x0a, 0x04, 0x52, 0x61, 0x6e, 0x6b, 0x12, 0x14, 0x0a, 0x10, 0x50, 0x41, 0x43,
-	0x4b, 0x45, 0x54, 0x5f, 0x52, 0x41, 0x4e, 0x4b, 0x5f, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12,
-	0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x52, 0x41, 0x4e, 0x4b, 0x5f, 0x43,
-	0x53, 0x52, 0x61, 0x6e, 0x6b, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x10, 0x90, 0x4e, 0x12, 0x1c, 0x0a,
-	0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x52, 0x41, 0x4e, 0x4b, 0x5f, 0x53, 0x43, 0x52,
-	0x61, 0x6e, 0x6b, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x10, 0x91, 0x4e, 0x12, 0x17, 0x0a, 0x12, 0x50,
-	0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x52, 0x41, 0x4e, 0x4b, 0x5f, 0x43, 0x53, 0x43, 0x6f, 0x69,
-	0x6e, 0x10, 0x92, 0x4e, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x52,
-	0x41, 0x4e, 0x4b, 0x5f, 0x53, 0x43, 0x43, 0x6f, 0x69, 0x6e, 0x10, 0x93, 0x4e, 0x12, 0x19, 0x0a,
-	0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x52, 0x41, 0x4e, 0x4b, 0x5f, 0x43, 0x53, 0x49,
-	0x6e, 0x76, 0x69, 0x74, 0x65, 0x10, 0x94, 0x4e, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b,
-	0x45, 0x54, 0x5f, 0x52, 0x41, 0x4e, 0x4b, 0x5f, 0x53, 0x43, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65,
-	0x10, 0x95, 0x4e, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53,
-	0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x4c, 0x6f, 0x67, 0x10, 0x96, 0x4e, 0x12, 0x17, 0x0a, 0x12,
-	0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x4c,
-	0x6f, 0x67, 0x10, 0x97, 0x4e, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f,
-	0x52, 0x41, 0x4e, 0x4b, 0x5f, 0x43, 0x53, 0x57, 0x69, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x10, 0x98,
-	0x4e, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x52, 0x41, 0x4e, 0x4b,
-	0x5f, 0x53, 0x43, 0x57, 0x69, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x10, 0x99, 0x4e, 0x12, 0x18, 0x0a,
-	0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x52, 0x41, 0x4e, 0x4b, 0x5f, 0x43, 0x53, 0x4c,
-	0x65, 0x76, 0x65, 0x6c, 0x10, 0x9a, 0x4e, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45,
-	0x54, 0x5f, 0x52, 0x41, 0x4e, 0x4b, 0x5f, 0x53, 0x43, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x10, 0x9b,
-	0x4e, 0x2a, 0x8d, 0x01, 0x0a, 0x0a, 0x52, 0x61, 0x6e, 0x6b, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65,
-	0x12, 0x13, 0x0a, 0x0f, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x4e,
-	0x6f, 0x6e, 0x65, 0x10, 0x00, 0x12, 0x14, 0x0a, 0x10, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x54,
-	0x79, 0x70, 0x65, 0x5f, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x49,
-	0x6e, 0x76, 0x69, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x57, 0x65, 0x65, 0x6b, 0x10, 0x02,
-	0x12, 0x14, 0x0a, 0x10, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x4d,
-	0x6f, 0x6e, 0x74, 0x68, 0x10, 0x03, 0x12, 0x15, 0x0a, 0x11, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65,
-	0x54, 0x79, 0x70, 0x65, 0x5f, 0x55, 0x70, 0x57, 0x65, 0x65, 0x6b, 0x10, 0x04, 0x12, 0x12, 0x0a,
-	0x0e, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x4d, 0x61, 0x78, 0x10,
-	0x05, 0x42, 0x24, 0x5a, 0x22, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73,
-	0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63,
-	0x6f, 0x6c, 0x2f, 0x72, 0x61, 0x6e, 0x6b, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+	0x22, 0x34, 0x0a, 0x08, 0x43, 0x53, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x12, 0x12, 0x0a, 0x04,
+	0x53, 0x6b, 0x69, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6b, 0x69, 0x70,
+	0x12, 0x14, 0x0a, 0x05, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52,
+	0x05, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x22, 0x74, 0x0a, 0x0a, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74,
+	0x52, 0x61, 0x6e, 0x6b, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65,
+	0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04,
+	0x52, 0x61, 0x6e, 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x52, 0x61, 0x6e, 0x6b,
+	0x12, 0x14, 0x0a, 0x05, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52,
+	0x05, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x4d, 0x6f, 0x64, 0x49, 0x64, 0x18,
+	0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x4d, 0x6f, 0x64, 0x49, 0x64, 0x22, 0xa4, 0x01, 0x0a,
+	0x08, 0x53, 0x43, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x12, 0x26, 0x0a, 0x05, 0x52, 0x61, 0x6e,
+	0x6b, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x72, 0x61, 0x6e, 0x6b, 0x2e,
+	0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x52, 0x61, 0x6e, 0x6b, 0x52, 0x05, 0x52, 0x61, 0x6e, 0x6b,
+	0x73, 0x12, 0x20, 0x0a, 0x02, 0x4d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e,
+	0x72, 0x61, 0x6e, 0x6b, 0x2e, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x52, 0x61, 0x6e, 0x6b, 0x52,
+	0x02, 0x4d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6b, 0x69, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28,
+	0x05, 0x52, 0x04, 0x53, 0x6b, 0x69, 0x70, 0x12, 0x1a, 0x0a, 0x08, 0x49, 0x73, 0x45, 0x6e, 0x64,
+	0x4e, 0x75, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x49, 0x73, 0x45, 0x6e, 0x64,
+	0x4e, 0x75, 0x6d, 0x12, 0x1e, 0x0a, 0x0a, 0x52, 0x61, 0x6e, 0x6b, 0x4d, 0x61, 0x78, 0x4e, 0x75,
+	0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x52, 0x61, 0x6e, 0x6b, 0x4d, 0x61, 0x78,
+	0x4e, 0x75, 0x6d, 0x2a, 0x94, 0x03, 0x0a, 0x04, 0x52, 0x61, 0x6e, 0x6b, 0x12, 0x14, 0x0a, 0x10,
+	0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x52, 0x41, 0x4e, 0x4b, 0x5f, 0x5a, 0x45, 0x52, 0x4f,
+	0x10, 0x00, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x52, 0x41, 0x4e,
+	0x4b, 0x5f, 0x43, 0x53, 0x52, 0x61, 0x6e, 0x6b, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x10, 0x90, 0x4e,
+	0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x52, 0x41, 0x4e, 0x4b, 0x5f,
+	0x53, 0x43, 0x52, 0x61, 0x6e, 0x6b, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x10, 0x91, 0x4e, 0x12, 0x17,
+	0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x52, 0x41, 0x4e, 0x4b, 0x5f, 0x43, 0x53,
+	0x43, 0x6f, 0x69, 0x6e, 0x10, 0x92, 0x4e, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45,
+	0x54, 0x5f, 0x52, 0x41, 0x4e, 0x4b, 0x5f, 0x53, 0x43, 0x43, 0x6f, 0x69, 0x6e, 0x10, 0x93, 0x4e,
+	0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x52, 0x41, 0x4e, 0x4b, 0x5f,
+	0x43, 0x53, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x10, 0x94, 0x4e, 0x12, 0x19, 0x0a, 0x14, 0x50,
+	0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x52, 0x41, 0x4e, 0x4b, 0x5f, 0x53, 0x43, 0x49, 0x6e, 0x76,
+	0x69, 0x74, 0x65, 0x10, 0x95, 0x4e, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54,
+	0x5f, 0x43, 0x53, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x4c, 0x6f, 0x67, 0x10, 0x96, 0x4e, 0x12,
+	0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x49, 0x6e, 0x76, 0x69,
+	0x74, 0x65, 0x4c, 0x6f, 0x67, 0x10, 0x97, 0x4e, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b,
+	0x45, 0x54, 0x5f, 0x52, 0x41, 0x4e, 0x4b, 0x5f, 0x43, 0x53, 0x57, 0x69, 0x6e, 0x43, 0x6f, 0x69,
+	0x6e, 0x10, 0x98, 0x4e, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x52,
+	0x41, 0x4e, 0x4b, 0x5f, 0x53, 0x43, 0x57, 0x69, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x10, 0x99, 0x4e,
+	0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x52, 0x41, 0x4e, 0x4b, 0x5f,
+	0x43, 0x53, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x10, 0x9a, 0x4e, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41,
+	0x43, 0x4b, 0x45, 0x54, 0x5f, 0x52, 0x41, 0x4e, 0x4b, 0x5f, 0x53, 0x43, 0x4c, 0x65, 0x76, 0x65,
+	0x6c, 0x10, 0x9b, 0x4e, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x52,
+	0x41, 0x4e, 0x4b, 0x5f, 0x43, 0x53, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x10, 0x9c, 0x4e, 0x12,
+	0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x52, 0x41, 0x4e, 0x4b, 0x5f, 0x53,
+	0x43, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x10, 0x9d, 0x4e, 0x2a, 0x8d, 0x01, 0x0a, 0x0a, 0x52,
+	0x61, 0x6e, 0x6b, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x12, 0x13, 0x0a, 0x0f, 0x49, 0x6e, 0x76,
+	0x69, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x4e, 0x6f, 0x6e, 0x65, 0x10, 0x00, 0x12, 0x14,
+	0x0a, 0x10, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x54, 0x6f, 0x74,
+	0x61, 0x6c, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x54, 0x79,
+	0x70, 0x65, 0x5f, 0x57, 0x65, 0x65, 0x6b, 0x10, 0x02, 0x12, 0x14, 0x0a, 0x10, 0x49, 0x6e, 0x76,
+	0x69, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x4d, 0x6f, 0x6e, 0x74, 0x68, 0x10, 0x03, 0x12,
+	0x15, 0x0a, 0x11, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x55, 0x70,
+	0x57, 0x65, 0x65, 0x6b, 0x10, 0x04, 0x12, 0x12, 0x0a, 0x0e, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65,
+	0x54, 0x79, 0x70, 0x65, 0x5f, 0x4d, 0x61, 0x78, 0x10, 0x05, 0x42, 0x24, 0x5a, 0x22, 0x6d, 0x6f,
+	0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61,
+	0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x72, 0x61, 0x6e, 0x6b,
+	0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 }
 
 var (
@@ -1760,7 +2007,7 @@ func file_rank_proto_rawDescGZIP() []byte {
 }
 
 var file_rank_proto_enumTypes = make([]protoimpl.EnumInfo, 2)
-var file_rank_proto_msgTypes = make([]protoimpl.MessageInfo, 19)
+var file_rank_proto_msgTypes = make([]protoimpl.MessageInfo, 22)
 var file_rank_proto_goTypes = []interface{}{
 	(Rank)(0),                   // 0: rank.Rank
 	(RankInvite)(0),             // 1: rank.RankInvite
@@ -1783,6 +2030,9 @@ var file_rank_proto_goTypes = []interface{}{
 	(*CSPlayerLevelRank)(nil),   // 18: rank.CSPlayerLevelRank
 	(*PlayerLevelRankInfo)(nil), // 19: rank.PlayerLevelRankInfo
 	(*SCPlayerLevelRank)(nil),   // 20: rank.SCPlayerLevelRank
+	(*CSPermit)(nil),            // 21: rank.CSPermit
+	(*PermitRank)(nil),          // 22: rank.PermitRank
+	(*SCPermit)(nil),            // 23: rank.SCPermit
 }
 var file_rank_proto_depIdxs = []int32{
 	3,  // 0: rank.SCRankMatch.Ranks:type_name -> rank.SeasonRank
@@ -1796,11 +2046,13 @@ var file_rank_proto_depIdxs = []int32{
 	16, // 8: rank.SCWinCoin.Me:type_name -> rank.WinCoinInfo
 	19, // 9: rank.SCPlayerLevelRank.Ranks:type_name -> rank.PlayerLevelRankInfo
 	19, // 10: rank.SCPlayerLevelRank.Me:type_name -> rank.PlayerLevelRankInfo
-	11, // [11:11] is the sub-list for method output_type
-	11, // [11:11] is the sub-list for method input_type
-	11, // [11:11] is the sub-list for extension type_name
-	11, // [11:11] is the sub-list for extension extendee
-	0,  // [0:11] is the sub-list for field type_name
+	22, // 11: rank.SCPermit.Ranks:type_name -> rank.PermitRank
+	22, // 12: rank.SCPermit.Me:type_name -> rank.PermitRank
+	13, // [13:13] is the sub-list for method output_type
+	13, // [13:13] is the sub-list for method input_type
+	13, // [13:13] is the sub-list for extension type_name
+	13, // [13:13] is the sub-list for extension extendee
+	0,  // [0:13] is the sub-list for field type_name
 }
 
 func init() { file_rank_proto_init() }
@@ -2037,6 +2289,42 @@ func file_rank_proto_init() {
 				return nil
 			}
 		}
+		file_rank_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*CSPermit); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_rank_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*PermitRank); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_rank_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*SCPermit); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
 	}
 	type x struct{}
 	out := protoimpl.TypeBuilder{
@@ -2044,7 +2332,7 @@ func file_rank_proto_init() {
 			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
 			RawDescriptor: file_rank_proto_rawDesc,
 			NumEnums:      2,
-			NumMessages:   19,
+			NumMessages:   22,
 			NumExtensions: 0,
 			NumServices:   0,
 		},
diff --git a/protocol/rank/rank.proto b/protocol/rank/rank.proto
index f879d5d..2793184 100644
--- a/protocol/rank/rank.proto
+++ b/protocol/rank/rank.proto
@@ -22,6 +22,9 @@ enum Rank{
   //等级榜
   PACKET_RANK_CSLevel = 10010;
   PACKET_RANK_SCLevel = 10011;
+  //赛季通行证排行榜
+  PACKET_RANK_CSPermit = 10012;
+  PACKET_RANK_SCPermit = 10013;
 }
 
 // 排位榜
@@ -181,4 +184,27 @@ message SCPlayerLevelRank{
   PlayerLevelRankInfo Me = 2; // 玩家自己的排行信息
   int32 Skip = 3; // 页数
   int32 Limit = 4; // 每页数量
+}
+
+//PACKET_RANK_CSPermit
+message CSPermit{
+  int32 Skip = 1; // 偏移量
+  int32 Limit = 2; // 请求数量
+}
+
+message PermitRank {
+  int32 Snid = 1; // 玩家id
+  string Name = 2; // 昵称
+  int32 Rank = 3;//段位排名
+  int64 Score = 4; // 积分
+  int32 ModId = 5; // 头像模型
+}
+
+// PACKET_RANK_SCPermit
+message SCPermit{
+  repeated PermitRank Ranks = 1; // 排行榜
+  PermitRank Me = 2; // 玩家自己的排行信息
+  int32 Skip = 3; // 偏移量
+  bool  IsEndNum = 4;
+  int32 RankMaxNum = 5; // 排行榜最大上限
 }
\ No newline at end of file
diff --git a/protocol/server/pbdata.pb.go b/protocol/server/pbdata.pb.go
index c497de5..5e59ca3 100644
--- a/protocol/server/pbdata.pb.go
+++ b/protocol/server/pbdata.pb.go
@@ -7543,6 +7543,124 @@ func (x *DB_NewPlayerArray) GetArr() []*DB_NewPlayer {
 	return nil
 }
 
+type DB_PassShow struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Id         int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"`
+	ShowType   int32 `protobuf:"varint,2,opt,name=ShowType,proto3" json:"ShowType,omitempty"`
+	ShowVolume int32 `protobuf:"varint,3,opt,name=ShowVolume,proto3" json:"ShowVolume,omitempty"`
+	Location   int32 `protobuf:"varint,4,opt,name=Location,proto3" json:"Location,omitempty"`
+}
+
+func (x *DB_PassShow) Reset() {
+	*x = DB_PassShow{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pbdata_proto_msgTypes[96]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *DB_PassShow) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*DB_PassShow) ProtoMessage() {}
+
+func (x *DB_PassShow) ProtoReflect() protoreflect.Message {
+	mi := &file_pbdata_proto_msgTypes[96]
+	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 DB_PassShow.ProtoReflect.Descriptor instead.
+func (*DB_PassShow) Descriptor() ([]byte, []int) {
+	return file_pbdata_proto_rawDescGZIP(), []int{96}
+}
+
+func (x *DB_PassShow) GetId() int32 {
+	if x != nil {
+		return x.Id
+	}
+	return 0
+}
+
+func (x *DB_PassShow) GetShowType() int32 {
+	if x != nil {
+		return x.ShowType
+	}
+	return 0
+}
+
+func (x *DB_PassShow) GetShowVolume() int32 {
+	if x != nil {
+		return x.ShowVolume
+	}
+	return 0
+}
+
+func (x *DB_PassShow) GetLocation() int32 {
+	if x != nil {
+		return x.Location
+	}
+	return 0
+}
+
+type DB_PassShowArray struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Arr []*DB_PassShow `protobuf:"bytes,1,rep,name=Arr,proto3" json:"Arr,omitempty"`
+}
+
+func (x *DB_PassShowArray) Reset() {
+	*x = DB_PassShowArray{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pbdata_proto_msgTypes[97]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *DB_PassShowArray) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*DB_PassShowArray) ProtoMessage() {}
+
+func (x *DB_PassShowArray) ProtoReflect() protoreflect.Message {
+	mi := &file_pbdata_proto_msgTypes[97]
+	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 DB_PassShowArray.ProtoReflect.Descriptor instead.
+func (*DB_PassShowArray) Descriptor() ([]byte, []int) {
+	return file_pbdata_proto_rawDescGZIP(), []int{97}
+}
+
+func (x *DB_PassShowArray) GetArr() []*DB_PassShow {
+	if x != nil {
+		return x.Arr
+	}
+	return nil
+}
+
 type DB_PetSkill struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
@@ -7561,7 +7679,7 @@ type DB_PetSkill struct {
 func (x *DB_PetSkill) Reset() {
 	*x = DB_PetSkill{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_pbdata_proto_msgTypes[96]
+		mi := &file_pbdata_proto_msgTypes[98]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -7574,7 +7692,7 @@ func (x *DB_PetSkill) String() string {
 func (*DB_PetSkill) ProtoMessage() {}
 
 func (x *DB_PetSkill) ProtoReflect() protoreflect.Message {
-	mi := &file_pbdata_proto_msgTypes[96]
+	mi := &file_pbdata_proto_msgTypes[98]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -7587,7 +7705,7 @@ func (x *DB_PetSkill) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use DB_PetSkill.ProtoReflect.Descriptor instead.
 func (*DB_PetSkill) Descriptor() ([]byte, []int) {
-	return file_pbdata_proto_rawDescGZIP(), []int{96}
+	return file_pbdata_proto_rawDescGZIP(), []int{98}
 }
 
 func (x *DB_PetSkill) GetId() int32 {
@@ -7657,7 +7775,7 @@ type DB_PetSkillArray struct {
 func (x *DB_PetSkillArray) Reset() {
 	*x = DB_PetSkillArray{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_pbdata_proto_msgTypes[97]
+		mi := &file_pbdata_proto_msgTypes[99]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -7670,7 +7788,7 @@ func (x *DB_PetSkillArray) String() string {
 func (*DB_PetSkillArray) ProtoMessage() {}
 
 func (x *DB_PetSkillArray) ProtoReflect() protoreflect.Message {
-	mi := &file_pbdata_proto_msgTypes[97]
+	mi := &file_pbdata_proto_msgTypes[99]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -7683,7 +7801,7 @@ func (x *DB_PetSkillArray) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use DB_PetSkillArray.ProtoReflect.Descriptor instead.
 func (*DB_PetSkillArray) Descriptor() ([]byte, []int) {
-	return file_pbdata_proto_rawDescGZIP(), []int{97}
+	return file_pbdata_proto_rawDescGZIP(), []int{99}
 }
 
 func (x *DB_PetSkillArray) GetArr() []*DB_PetSkill {
@@ -7715,7 +7833,7 @@ type DB_PhoneLottery struct {
 func (x *DB_PhoneLottery) Reset() {
 	*x = DB_PhoneLottery{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_pbdata_proto_msgTypes[98]
+		mi := &file_pbdata_proto_msgTypes[100]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -7728,7 +7846,7 @@ func (x *DB_PhoneLottery) String() string {
 func (*DB_PhoneLottery) ProtoMessage() {}
 
 func (x *DB_PhoneLottery) ProtoReflect() protoreflect.Message {
-	mi := &file_pbdata_proto_msgTypes[98]
+	mi := &file_pbdata_proto_msgTypes[100]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -7741,7 +7859,7 @@ func (x *DB_PhoneLottery) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use DB_PhoneLottery.ProtoReflect.Descriptor instead.
 func (*DB_PhoneLottery) Descriptor() ([]byte, []int) {
-	return file_pbdata_proto_rawDescGZIP(), []int{98}
+	return file_pbdata_proto_rawDescGZIP(), []int{100}
 }
 
 func (x *DB_PhoneLottery) GetId() int32 {
@@ -7839,7 +7957,7 @@ type DB_PhoneLotteryArray struct {
 func (x *DB_PhoneLotteryArray) Reset() {
 	*x = DB_PhoneLotteryArray{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_pbdata_proto_msgTypes[99]
+		mi := &file_pbdata_proto_msgTypes[101]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -7852,7 +7970,7 @@ func (x *DB_PhoneLotteryArray) String() string {
 func (*DB_PhoneLotteryArray) ProtoMessage() {}
 
 func (x *DB_PhoneLotteryArray) ProtoReflect() protoreflect.Message {
-	mi := &file_pbdata_proto_msgTypes[99]
+	mi := &file_pbdata_proto_msgTypes[101]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -7865,7 +7983,7 @@ func (x *DB_PhoneLotteryArray) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use DB_PhoneLotteryArray.ProtoReflect.Descriptor instead.
 func (*DB_PhoneLotteryArray) Descriptor() ([]byte, []int) {
-	return file_pbdata_proto_rawDescGZIP(), []int{99}
+	return file_pbdata_proto_rawDescGZIP(), []int{101}
 }
 
 func (x *DB_PhoneLotteryArray) GetArr() []*DB_PhoneLottery {
@@ -7895,7 +8013,7 @@ type DB_PigBank_Diamond struct {
 func (x *DB_PigBank_Diamond) Reset() {
 	*x = DB_PigBank_Diamond{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_pbdata_proto_msgTypes[100]
+		mi := &file_pbdata_proto_msgTypes[102]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -7908,7 +8026,7 @@ func (x *DB_PigBank_Diamond) String() string {
 func (*DB_PigBank_Diamond) ProtoMessage() {}
 
 func (x *DB_PigBank_Diamond) ProtoReflect() protoreflect.Message {
-	mi := &file_pbdata_proto_msgTypes[100]
+	mi := &file_pbdata_proto_msgTypes[102]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -7921,7 +8039,7 @@ func (x *DB_PigBank_Diamond) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use DB_PigBank_Diamond.ProtoReflect.Descriptor instead.
 func (*DB_PigBank_Diamond) Descriptor() ([]byte, []int) {
-	return file_pbdata_proto_rawDescGZIP(), []int{100}
+	return file_pbdata_proto_rawDescGZIP(), []int{102}
 }
 
 func (x *DB_PigBank_Diamond) GetId() int32 {
@@ -8005,7 +8123,7 @@ type DB_PigBank_DiamondArray struct {
 func (x *DB_PigBank_DiamondArray) Reset() {
 	*x = DB_PigBank_DiamondArray{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_pbdata_proto_msgTypes[101]
+		mi := &file_pbdata_proto_msgTypes[103]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -8018,7 +8136,7 @@ func (x *DB_PigBank_DiamondArray) String() string {
 func (*DB_PigBank_DiamondArray) ProtoMessage() {}
 
 func (x *DB_PigBank_DiamondArray) ProtoReflect() protoreflect.Message {
-	mi := &file_pbdata_proto_msgTypes[101]
+	mi := &file_pbdata_proto_msgTypes[103]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -8031,7 +8149,7 @@ func (x *DB_PigBank_DiamondArray) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use DB_PigBank_DiamondArray.ProtoReflect.Descriptor instead.
 func (*DB_PigBank_DiamondArray) Descriptor() ([]byte, []int) {
-	return file_pbdata_proto_rawDescGZIP(), []int{101}
+	return file_pbdata_proto_rawDescGZIP(), []int{103}
 }
 
 func (x *DB_PigBank_DiamondArray) GetArr() []*DB_PigBank_Diamond {
@@ -8054,7 +8172,7 @@ type DB_Pigbank_Prop struct {
 func (x *DB_Pigbank_Prop) Reset() {
 	*x = DB_Pigbank_Prop{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_pbdata_proto_msgTypes[102]
+		mi := &file_pbdata_proto_msgTypes[104]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -8067,7 +8185,7 @@ func (x *DB_Pigbank_Prop) String() string {
 func (*DB_Pigbank_Prop) ProtoMessage() {}
 
 func (x *DB_Pigbank_Prop) ProtoReflect() protoreflect.Message {
-	mi := &file_pbdata_proto_msgTypes[102]
+	mi := &file_pbdata_proto_msgTypes[104]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -8080,7 +8198,7 @@ func (x *DB_Pigbank_Prop) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use DB_Pigbank_Prop.ProtoReflect.Descriptor instead.
 func (*DB_Pigbank_Prop) Descriptor() ([]byte, []int) {
-	return file_pbdata_proto_rawDescGZIP(), []int{102}
+	return file_pbdata_proto_rawDescGZIP(), []int{104}
 }
 
 func (x *DB_Pigbank_Prop) GetId() int32 {
@@ -8115,7 +8233,7 @@ type DB_Pigbank_PropArray struct {
 func (x *DB_Pigbank_PropArray) Reset() {
 	*x = DB_Pigbank_PropArray{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_pbdata_proto_msgTypes[103]
+		mi := &file_pbdata_proto_msgTypes[105]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -8128,7 +8246,7 @@ func (x *DB_Pigbank_PropArray) String() string {
 func (*DB_Pigbank_PropArray) ProtoMessage() {}
 
 func (x *DB_Pigbank_PropArray) ProtoReflect() protoreflect.Message {
-	mi := &file_pbdata_proto_msgTypes[103]
+	mi := &file_pbdata_proto_msgTypes[105]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -8141,7 +8259,7 @@ func (x *DB_Pigbank_PropArray) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use DB_Pigbank_PropArray.ProtoReflect.Descriptor instead.
 func (*DB_Pigbank_PropArray) Descriptor() ([]byte, []int) {
-	return file_pbdata_proto_rawDescGZIP(), []int{103}
+	return file_pbdata_proto_rawDescGZIP(), []int{105}
 }
 
 func (x *DB_Pigbank_PropArray) GetArr() []*DB_Pigbank_Prop {
@@ -8163,7 +8281,7 @@ type DB_PlayerExp struct {
 func (x *DB_PlayerExp) Reset() {
 	*x = DB_PlayerExp{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_pbdata_proto_msgTypes[104]
+		mi := &file_pbdata_proto_msgTypes[106]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -8176,7 +8294,7 @@ func (x *DB_PlayerExp) String() string {
 func (*DB_PlayerExp) ProtoMessage() {}
 
 func (x *DB_PlayerExp) ProtoReflect() protoreflect.Message {
-	mi := &file_pbdata_proto_msgTypes[104]
+	mi := &file_pbdata_proto_msgTypes[106]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -8189,7 +8307,7 @@ func (x *DB_PlayerExp) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use DB_PlayerExp.ProtoReflect.Descriptor instead.
 func (*DB_PlayerExp) Descriptor() ([]byte, []int) {
-	return file_pbdata_proto_rawDescGZIP(), []int{104}
+	return file_pbdata_proto_rawDescGZIP(), []int{106}
 }
 
 func (x *DB_PlayerExp) GetId() int32 {
@@ -8217,7 +8335,7 @@ type DB_PlayerExpArray struct {
 func (x *DB_PlayerExpArray) Reset() {
 	*x = DB_PlayerExpArray{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_pbdata_proto_msgTypes[105]
+		mi := &file_pbdata_proto_msgTypes[107]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -8230,7 +8348,7 @@ func (x *DB_PlayerExpArray) String() string {
 func (*DB_PlayerExpArray) ProtoMessage() {}
 
 func (x *DB_PlayerExpArray) ProtoReflect() protoreflect.Message {
-	mi := &file_pbdata_proto_msgTypes[105]
+	mi := &file_pbdata_proto_msgTypes[107]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -8243,7 +8361,7 @@ func (x *DB_PlayerExpArray) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use DB_PlayerExpArray.ProtoReflect.Descriptor instead.
 func (*DB_PlayerExpArray) Descriptor() ([]byte, []int) {
-	return file_pbdata_proto_rawDescGZIP(), []int{105}
+	return file_pbdata_proto_rawDescGZIP(), []int{107}
 }
 
 func (x *DB_PlayerExpArray) GetArr() []*DB_PlayerExp {
@@ -8268,7 +8386,7 @@ type DB_PlayerInfo struct {
 func (x *DB_PlayerInfo) Reset() {
 	*x = DB_PlayerInfo{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_pbdata_proto_msgTypes[106]
+		mi := &file_pbdata_proto_msgTypes[108]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -8281,7 +8399,7 @@ func (x *DB_PlayerInfo) String() string {
 func (*DB_PlayerInfo) ProtoMessage() {}
 
 func (x *DB_PlayerInfo) ProtoReflect() protoreflect.Message {
-	mi := &file_pbdata_proto_msgTypes[106]
+	mi := &file_pbdata_proto_msgTypes[108]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -8294,7 +8412,7 @@ func (x *DB_PlayerInfo) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use DB_PlayerInfo.ProtoReflect.Descriptor instead.
 func (*DB_PlayerInfo) Descriptor() ([]byte, []int) {
-	return file_pbdata_proto_rawDescGZIP(), []int{106}
+	return file_pbdata_proto_rawDescGZIP(), []int{108}
 }
 
 func (x *DB_PlayerInfo) GetCity() string {
@@ -8343,7 +8461,7 @@ type DB_PlayerInfoArray struct {
 func (x *DB_PlayerInfoArray) Reset() {
 	*x = DB_PlayerInfoArray{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_pbdata_proto_msgTypes[107]
+		mi := &file_pbdata_proto_msgTypes[109]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -8356,7 +8474,7 @@ func (x *DB_PlayerInfoArray) String() string {
 func (*DB_PlayerInfoArray) ProtoMessage() {}
 
 func (x *DB_PlayerInfoArray) ProtoReflect() protoreflect.Message {
-	mi := &file_pbdata_proto_msgTypes[107]
+	mi := &file_pbdata_proto_msgTypes[109]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -8369,7 +8487,7 @@ func (x *DB_PlayerInfoArray) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use DB_PlayerInfoArray.ProtoReflect.Descriptor instead.
 func (*DB_PlayerInfoArray) Descriptor() ([]byte, []int) {
-	return file_pbdata_proto_rawDescGZIP(), []int{107}
+	return file_pbdata_proto_rawDescGZIP(), []int{109}
 }
 
 func (x *DB_PlayerInfoArray) GetArr() []*DB_PlayerInfo {
@@ -8407,7 +8525,7 @@ type DB_PlayerType struct {
 func (x *DB_PlayerType) Reset() {
 	*x = DB_PlayerType{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_pbdata_proto_msgTypes[108]
+		mi := &file_pbdata_proto_msgTypes[110]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -8420,7 +8538,7 @@ func (x *DB_PlayerType) String() string {
 func (*DB_PlayerType) ProtoMessage() {}
 
 func (x *DB_PlayerType) ProtoReflect() protoreflect.Message {
-	mi := &file_pbdata_proto_msgTypes[108]
+	mi := &file_pbdata_proto_msgTypes[110]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -8433,7 +8551,7 @@ func (x *DB_PlayerType) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use DB_PlayerType.ProtoReflect.Descriptor instead.
 func (*DB_PlayerType) Descriptor() ([]byte, []int) {
-	return file_pbdata_proto_rawDescGZIP(), []int{108}
+	return file_pbdata_proto_rawDescGZIP(), []int{110}
 }
 
 func (x *DB_PlayerType) GetId() int32 {
@@ -8573,7 +8691,7 @@ type DB_PlayerTypeArray struct {
 func (x *DB_PlayerTypeArray) Reset() {
 	*x = DB_PlayerTypeArray{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_pbdata_proto_msgTypes[109]
+		mi := &file_pbdata_proto_msgTypes[111]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -8586,7 +8704,7 @@ func (x *DB_PlayerTypeArray) String() string {
 func (*DB_PlayerTypeArray) ProtoMessage() {}
 
 func (x *DB_PlayerTypeArray) ProtoReflect() protoreflect.Message {
-	mi := &file_pbdata_proto_msgTypes[109]
+	mi := &file_pbdata_proto_msgTypes[111]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -8599,7 +8717,7 @@ func (x *DB_PlayerTypeArray) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use DB_PlayerTypeArray.ProtoReflect.Descriptor instead.
 func (*DB_PlayerTypeArray) Descriptor() ([]byte, []int) {
-	return file_pbdata_proto_rawDescGZIP(), []int{109}
+	return file_pbdata_proto_rawDescGZIP(), []int{111}
 }
 
 func (x *DB_PlayerTypeArray) GetArr() []*DB_PlayerType {
@@ -8623,7 +8741,7 @@ type DB_PotOdd struct {
 func (x *DB_PotOdd) Reset() {
 	*x = DB_PotOdd{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_pbdata_proto_msgTypes[110]
+		mi := &file_pbdata_proto_msgTypes[112]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -8636,7 +8754,7 @@ func (x *DB_PotOdd) String() string {
 func (*DB_PotOdd) ProtoMessage() {}
 
 func (x *DB_PotOdd) ProtoReflect() protoreflect.Message {
-	mi := &file_pbdata_proto_msgTypes[110]
+	mi := &file_pbdata_proto_msgTypes[112]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -8649,7 +8767,7 @@ func (x *DB_PotOdd) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use DB_PotOdd.ProtoReflect.Descriptor instead.
 func (*DB_PotOdd) Descriptor() ([]byte, []int) {
-	return file_pbdata_proto_rawDescGZIP(), []int{110}
+	return file_pbdata_proto_rawDescGZIP(), []int{112}
 }
 
 func (x *DB_PotOdd) GetId() int32 {
@@ -8691,7 +8809,7 @@ type DB_PotOddArray struct {
 func (x *DB_PotOddArray) Reset() {
 	*x = DB_PotOddArray{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_pbdata_proto_msgTypes[111]
+		mi := &file_pbdata_proto_msgTypes[113]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -8704,7 +8822,7 @@ func (x *DB_PotOddArray) String() string {
 func (*DB_PotOddArray) ProtoMessage() {}
 
 func (x *DB_PotOddArray) ProtoReflect() protoreflect.Message {
-	mi := &file_pbdata_proto_msgTypes[111]
+	mi := &file_pbdata_proto_msgTypes[113]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -8717,7 +8835,7 @@ func (x *DB_PotOddArray) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use DB_PotOddArray.ProtoReflect.Descriptor instead.
 func (*DB_PotOddArray) Descriptor() ([]byte, []int) {
-	return file_pbdata_proto_rawDescGZIP(), []int{111}
+	return file_pbdata_proto_rawDescGZIP(), []int{113}
 }
 
 func (x *DB_PotOddArray) GetArr() []*DB_PotOdd {
@@ -8741,7 +8859,7 @@ type DB_PropExchange struct {
 func (x *DB_PropExchange) Reset() {
 	*x = DB_PropExchange{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_pbdata_proto_msgTypes[112]
+		mi := &file_pbdata_proto_msgTypes[114]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -8754,7 +8872,7 @@ func (x *DB_PropExchange) String() string {
 func (*DB_PropExchange) ProtoMessage() {}
 
 func (x *DB_PropExchange) ProtoReflect() protoreflect.Message {
-	mi := &file_pbdata_proto_msgTypes[112]
+	mi := &file_pbdata_proto_msgTypes[114]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -8767,7 +8885,7 @@ func (x *DB_PropExchange) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use DB_PropExchange.ProtoReflect.Descriptor instead.
 func (*DB_PropExchange) Descriptor() ([]byte, []int) {
-	return file_pbdata_proto_rawDescGZIP(), []int{112}
+	return file_pbdata_proto_rawDescGZIP(), []int{114}
 }
 
 func (x *DB_PropExchange) GetId() int32 {
@@ -8809,7 +8927,7 @@ type DB_PropExchangeArray struct {
 func (x *DB_PropExchangeArray) Reset() {
 	*x = DB_PropExchangeArray{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_pbdata_proto_msgTypes[113]
+		mi := &file_pbdata_proto_msgTypes[115]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -8822,7 +8940,7 @@ func (x *DB_PropExchangeArray) String() string {
 func (*DB_PropExchangeArray) ProtoMessage() {}
 
 func (x *DB_PropExchangeArray) ProtoReflect() protoreflect.Message {
-	mi := &file_pbdata_proto_msgTypes[113]
+	mi := &file_pbdata_proto_msgTypes[115]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -8835,7 +8953,7 @@ func (x *DB_PropExchangeArray) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use DB_PropExchangeArray.ProtoReflect.Descriptor instead.
 func (*DB_PropExchangeArray) Descriptor() ([]byte, []int) {
-	return file_pbdata_proto_rawDescGZIP(), []int{113}
+	return file_pbdata_proto_rawDescGZIP(), []int{115}
 }
 
 func (x *DB_PropExchangeArray) GetArr() []*DB_PropExchange {
@@ -8858,7 +8976,7 @@ type DB_RankCycle struct {
 func (x *DB_RankCycle) Reset() {
 	*x = DB_RankCycle{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_pbdata_proto_msgTypes[114]
+		mi := &file_pbdata_proto_msgTypes[116]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -8871,7 +8989,7 @@ func (x *DB_RankCycle) String() string {
 func (*DB_RankCycle) ProtoMessage() {}
 
 func (x *DB_RankCycle) ProtoReflect() protoreflect.Message {
-	mi := &file_pbdata_proto_msgTypes[114]
+	mi := &file_pbdata_proto_msgTypes[116]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -8884,7 +9002,7 @@ func (x *DB_RankCycle) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use DB_RankCycle.ProtoReflect.Descriptor instead.
 func (*DB_RankCycle) Descriptor() ([]byte, []int) {
-	return file_pbdata_proto_rawDescGZIP(), []int{114}
+	return file_pbdata_proto_rawDescGZIP(), []int{116}
 }
 
 func (x *DB_RankCycle) GetId() int32 {
@@ -8919,7 +9037,7 @@ type DB_RankCycleArray struct {
 func (x *DB_RankCycleArray) Reset() {
 	*x = DB_RankCycleArray{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_pbdata_proto_msgTypes[115]
+		mi := &file_pbdata_proto_msgTypes[117]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -8932,7 +9050,7 @@ func (x *DB_RankCycleArray) String() string {
 func (*DB_RankCycleArray) ProtoMessage() {}
 
 func (x *DB_RankCycleArray) ProtoReflect() protoreflect.Message {
-	mi := &file_pbdata_proto_msgTypes[115]
+	mi := &file_pbdata_proto_msgTypes[117]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -8945,7 +9063,7 @@ func (x *DB_RankCycleArray) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use DB_RankCycleArray.ProtoReflect.Descriptor instead.
 func (*DB_RankCycleArray) Descriptor() ([]byte, []int) {
-	return file_pbdata_proto_rawDescGZIP(), []int{115}
+	return file_pbdata_proto_rawDescGZIP(), []int{117}
 }
 
 func (x *DB_RankCycleArray) GetArr() []*DB_RankCycle {
@@ -8970,7 +9088,7 @@ type DB_RankLevel struct {
 func (x *DB_RankLevel) Reset() {
 	*x = DB_RankLevel{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_pbdata_proto_msgTypes[116]
+		mi := &file_pbdata_proto_msgTypes[118]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -8983,7 +9101,7 @@ func (x *DB_RankLevel) String() string {
 func (*DB_RankLevel) ProtoMessage() {}
 
 func (x *DB_RankLevel) ProtoReflect() protoreflect.Message {
-	mi := &file_pbdata_proto_msgTypes[116]
+	mi := &file_pbdata_proto_msgTypes[118]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -8996,7 +9114,7 @@ func (x *DB_RankLevel) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use DB_RankLevel.ProtoReflect.Descriptor instead.
 func (*DB_RankLevel) Descriptor() ([]byte, []int) {
-	return file_pbdata_proto_rawDescGZIP(), []int{116}
+	return file_pbdata_proto_rawDescGZIP(), []int{118}
 }
 
 func (x *DB_RankLevel) GetId() int32 {
@@ -9045,7 +9163,7 @@ type DB_RankLevelArray struct {
 func (x *DB_RankLevelArray) Reset() {
 	*x = DB_RankLevelArray{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_pbdata_proto_msgTypes[117]
+		mi := &file_pbdata_proto_msgTypes[119]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -9058,7 +9176,7 @@ func (x *DB_RankLevelArray) String() string {
 func (*DB_RankLevelArray) ProtoMessage() {}
 
 func (x *DB_RankLevelArray) ProtoReflect() protoreflect.Message {
-	mi := &file_pbdata_proto_msgTypes[117]
+	mi := &file_pbdata_proto_msgTypes[119]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -9071,7 +9189,7 @@ func (x *DB_RankLevelArray) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use DB_RankLevelArray.ProtoReflect.Descriptor instead.
 func (*DB_RankLevelArray) Descriptor() ([]byte, []int) {
-	return file_pbdata_proto_rawDescGZIP(), []int{117}
+	return file_pbdata_proto_rawDescGZIP(), []int{119}
 }
 
 func (x *DB_RankLevelArray) GetArr() []*DB_RankLevel {
@@ -9100,7 +9218,7 @@ type DB_RankReward struct {
 func (x *DB_RankReward) Reset() {
 	*x = DB_RankReward{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_pbdata_proto_msgTypes[118]
+		mi := &file_pbdata_proto_msgTypes[120]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -9113,7 +9231,7 @@ func (x *DB_RankReward) String() string {
 func (*DB_RankReward) ProtoMessage() {}
 
 func (x *DB_RankReward) ProtoReflect() protoreflect.Message {
-	mi := &file_pbdata_proto_msgTypes[118]
+	mi := &file_pbdata_proto_msgTypes[120]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -9126,7 +9244,7 @@ func (x *DB_RankReward) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use DB_RankReward.ProtoReflect.Descriptor instead.
 func (*DB_RankReward) Descriptor() ([]byte, []int) {
-	return file_pbdata_proto_rawDescGZIP(), []int{118}
+	return file_pbdata_proto_rawDescGZIP(), []int{120}
 }
 
 func (x *DB_RankReward) GetId() int32 {
@@ -9203,7 +9321,7 @@ type DB_RankRewardArray struct {
 func (x *DB_RankRewardArray) Reset() {
 	*x = DB_RankRewardArray{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_pbdata_proto_msgTypes[119]
+		mi := &file_pbdata_proto_msgTypes[121]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -9216,7 +9334,7 @@ func (x *DB_RankRewardArray) String() string {
 func (*DB_RankRewardArray) ProtoMessage() {}
 
 func (x *DB_RankRewardArray) ProtoReflect() protoreflect.Message {
-	mi := &file_pbdata_proto_msgTypes[119]
+	mi := &file_pbdata_proto_msgTypes[121]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -9229,7 +9347,7 @@ func (x *DB_RankRewardArray) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use DB_RankRewardArray.ProtoReflect.Descriptor instead.
 func (*DB_RankRewardArray) Descriptor() ([]byte, []int) {
-	return file_pbdata_proto_rawDescGZIP(), []int{119}
+	return file_pbdata_proto_rawDescGZIP(), []int{121}
 }
 
 func (x *DB_RankRewardArray) GetArr() []*DB_RankReward {
@@ -9251,7 +9369,7 @@ type DB_Sensitive_Words struct {
 func (x *DB_Sensitive_Words) Reset() {
 	*x = DB_Sensitive_Words{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_pbdata_proto_msgTypes[120]
+		mi := &file_pbdata_proto_msgTypes[122]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -9264,7 +9382,7 @@ func (x *DB_Sensitive_Words) String() string {
 func (*DB_Sensitive_Words) ProtoMessage() {}
 
 func (x *DB_Sensitive_Words) ProtoReflect() protoreflect.Message {
-	mi := &file_pbdata_proto_msgTypes[120]
+	mi := &file_pbdata_proto_msgTypes[122]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -9277,7 +9395,7 @@ func (x *DB_Sensitive_Words) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use DB_Sensitive_Words.ProtoReflect.Descriptor instead.
 func (*DB_Sensitive_Words) Descriptor() ([]byte, []int) {
-	return file_pbdata_proto_rawDescGZIP(), []int{120}
+	return file_pbdata_proto_rawDescGZIP(), []int{122}
 }
 
 func (x *DB_Sensitive_Words) GetId() int32 {
@@ -9305,7 +9423,7 @@ type DB_Sensitive_WordsArray struct {
 func (x *DB_Sensitive_WordsArray) Reset() {
 	*x = DB_Sensitive_WordsArray{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_pbdata_proto_msgTypes[121]
+		mi := &file_pbdata_proto_msgTypes[123]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -9318,7 +9436,7 @@ func (x *DB_Sensitive_WordsArray) String() string {
 func (*DB_Sensitive_WordsArray) ProtoMessage() {}
 
 func (x *DB_Sensitive_WordsArray) ProtoReflect() protoreflect.Message {
-	mi := &file_pbdata_proto_msgTypes[121]
+	mi := &file_pbdata_proto_msgTypes[123]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -9331,7 +9449,7 @@ func (x *DB_Sensitive_WordsArray) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use DB_Sensitive_WordsArray.ProtoReflect.Descriptor instead.
 func (*DB_Sensitive_WordsArray) Descriptor() ([]byte, []int) {
-	return file_pbdata_proto_rawDescGZIP(), []int{121}
+	return file_pbdata_proto_rawDescGZIP(), []int{123}
 }
 
 func (x *DB_Sensitive_WordsArray) GetArr() []*DB_Sensitive_Words {
@@ -9367,7 +9485,7 @@ type DB_SlotRateWeight struct {
 func (x *DB_SlotRateWeight) Reset() {
 	*x = DB_SlotRateWeight{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_pbdata_proto_msgTypes[122]
+		mi := &file_pbdata_proto_msgTypes[124]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -9380,7 +9498,7 @@ func (x *DB_SlotRateWeight) String() string {
 func (*DB_SlotRateWeight) ProtoMessage() {}
 
 func (x *DB_SlotRateWeight) ProtoReflect() protoreflect.Message {
-	mi := &file_pbdata_proto_msgTypes[122]
+	mi := &file_pbdata_proto_msgTypes[124]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -9393,7 +9511,7 @@ func (x *DB_SlotRateWeight) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use DB_SlotRateWeight.ProtoReflect.Descriptor instead.
 func (*DB_SlotRateWeight) Descriptor() ([]byte, []int) {
-	return file_pbdata_proto_rawDescGZIP(), []int{122}
+	return file_pbdata_proto_rawDescGZIP(), []int{124}
 }
 
 func (x *DB_SlotRateWeight) GetId() int32 {
@@ -9519,7 +9637,7 @@ type DB_SlotRateWeightArray struct {
 func (x *DB_SlotRateWeightArray) Reset() {
 	*x = DB_SlotRateWeightArray{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_pbdata_proto_msgTypes[123]
+		mi := &file_pbdata_proto_msgTypes[125]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -9532,7 +9650,7 @@ func (x *DB_SlotRateWeightArray) String() string {
 func (*DB_SlotRateWeightArray) ProtoMessage() {}
 
 func (x *DB_SlotRateWeightArray) ProtoReflect() protoreflect.Message {
-	mi := &file_pbdata_proto_msgTypes[123]
+	mi := &file_pbdata_proto_msgTypes[125]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -9545,7 +9663,7 @@ func (x *DB_SlotRateWeightArray) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use DB_SlotRateWeightArray.ProtoReflect.Descriptor instead.
 func (*DB_SlotRateWeightArray) Descriptor() ([]byte, []int) {
-	return file_pbdata_proto_rawDescGZIP(), []int{123}
+	return file_pbdata_proto_rawDescGZIP(), []int{125}
 }
 
 func (x *DB_SlotRateWeightArray) GetArr() []*DB_SlotRateWeight {
@@ -9570,7 +9688,7 @@ type DB_SystemChance struct {
 func (x *DB_SystemChance) Reset() {
 	*x = DB_SystemChance{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_pbdata_proto_msgTypes[124]
+		mi := &file_pbdata_proto_msgTypes[126]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -9583,7 +9701,7 @@ func (x *DB_SystemChance) String() string {
 func (*DB_SystemChance) ProtoMessage() {}
 
 func (x *DB_SystemChance) ProtoReflect() protoreflect.Message {
-	mi := &file_pbdata_proto_msgTypes[124]
+	mi := &file_pbdata_proto_msgTypes[126]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -9596,7 +9714,7 @@ func (x *DB_SystemChance) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use DB_SystemChance.ProtoReflect.Descriptor instead.
 func (*DB_SystemChance) Descriptor() ([]byte, []int) {
-	return file_pbdata_proto_rawDescGZIP(), []int{124}
+	return file_pbdata_proto_rawDescGZIP(), []int{126}
 }
 
 func (x *DB_SystemChance) GetId() int32 {
@@ -9645,7 +9763,7 @@ type DB_SystemChanceArray struct {
 func (x *DB_SystemChanceArray) Reset() {
 	*x = DB_SystemChanceArray{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_pbdata_proto_msgTypes[125]
+		mi := &file_pbdata_proto_msgTypes[127]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -9658,7 +9776,7 @@ func (x *DB_SystemChanceArray) String() string {
 func (*DB_SystemChanceArray) ProtoMessage() {}
 
 func (x *DB_SystemChanceArray) ProtoReflect() protoreflect.Message {
-	mi := &file_pbdata_proto_msgTypes[125]
+	mi := &file_pbdata_proto_msgTypes[127]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -9671,7 +9789,7 @@ func (x *DB_SystemChanceArray) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use DB_SystemChanceArray.ProtoReflect.Descriptor instead.
 func (*DB_SystemChanceArray) Descriptor() ([]byte, []int) {
-	return file_pbdata_proto_rawDescGZIP(), []int{125}
+	return file_pbdata_proto_rawDescGZIP(), []int{127}
 }
 
 func (x *DB_SystemChanceArray) GetArr() []*DB_SystemChance {
@@ -9700,7 +9818,7 @@ type DB_Task struct {
 func (x *DB_Task) Reset() {
 	*x = DB_Task{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_pbdata_proto_msgTypes[126]
+		mi := &file_pbdata_proto_msgTypes[128]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -9713,7 +9831,7 @@ func (x *DB_Task) String() string {
 func (*DB_Task) ProtoMessage() {}
 
 func (x *DB_Task) ProtoReflect() protoreflect.Message {
-	mi := &file_pbdata_proto_msgTypes[126]
+	mi := &file_pbdata_proto_msgTypes[128]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -9726,7 +9844,7 @@ func (x *DB_Task) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use DB_Task.ProtoReflect.Descriptor instead.
 func (*DB_Task) Descriptor() ([]byte, []int) {
-	return file_pbdata_proto_rawDescGZIP(), []int{126}
+	return file_pbdata_proto_rawDescGZIP(), []int{128}
 }
 
 func (x *DB_Task) GetId() int32 {
@@ -9803,7 +9921,7 @@ type DB_TaskArray struct {
 func (x *DB_TaskArray) Reset() {
 	*x = DB_TaskArray{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_pbdata_proto_msgTypes[127]
+		mi := &file_pbdata_proto_msgTypes[129]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -9816,7 +9934,7 @@ func (x *DB_TaskArray) String() string {
 func (*DB_TaskArray) ProtoMessage() {}
 
 func (x *DB_TaskArray) ProtoReflect() protoreflect.Message {
-	mi := &file_pbdata_proto_msgTypes[127]
+	mi := &file_pbdata_proto_msgTypes[129]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -9829,7 +9947,7 @@ func (x *DB_TaskArray) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use DB_TaskArray.ProtoReflect.Descriptor instead.
 func (*DB_TaskArray) Descriptor() ([]byte, []int) {
-	return file_pbdata_proto_rawDescGZIP(), []int{127}
+	return file_pbdata_proto_rawDescGZIP(), []int{129}
 }
 
 func (x *DB_TaskArray) GetArr() []*DB_Task {
@@ -9856,7 +9974,7 @@ type DB_ThirdPlatformGameMapping struct {
 func (x *DB_ThirdPlatformGameMapping) Reset() {
 	*x = DB_ThirdPlatformGameMapping{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_pbdata_proto_msgTypes[128]
+		mi := &file_pbdata_proto_msgTypes[130]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -9869,7 +9987,7 @@ func (x *DB_ThirdPlatformGameMapping) String() string {
 func (*DB_ThirdPlatformGameMapping) ProtoMessage() {}
 
 func (x *DB_ThirdPlatformGameMapping) ProtoReflect() protoreflect.Message {
-	mi := &file_pbdata_proto_msgTypes[128]
+	mi := &file_pbdata_proto_msgTypes[130]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -9882,7 +10000,7 @@ func (x *DB_ThirdPlatformGameMapping) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use DB_ThirdPlatformGameMapping.ProtoReflect.Descriptor instead.
 func (*DB_ThirdPlatformGameMapping) Descriptor() ([]byte, []int) {
-	return file_pbdata_proto_rawDescGZIP(), []int{128}
+	return file_pbdata_proto_rawDescGZIP(), []int{130}
 }
 
 func (x *DB_ThirdPlatformGameMapping) GetId() int32 {
@@ -9945,7 +10063,7 @@ type DB_ThirdPlatformGameMappingArray struct {
 func (x *DB_ThirdPlatformGameMappingArray) Reset() {
 	*x = DB_ThirdPlatformGameMappingArray{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_pbdata_proto_msgTypes[129]
+		mi := &file_pbdata_proto_msgTypes[131]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -9958,7 +10076,7 @@ func (x *DB_ThirdPlatformGameMappingArray) String() string {
 func (*DB_ThirdPlatformGameMappingArray) ProtoMessage() {}
 
 func (x *DB_ThirdPlatformGameMappingArray) ProtoReflect() protoreflect.Message {
-	mi := &file_pbdata_proto_msgTypes[129]
+	mi := &file_pbdata_proto_msgTypes[131]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -9971,7 +10089,7 @@ func (x *DB_ThirdPlatformGameMappingArray) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use DB_ThirdPlatformGameMappingArray.ProtoReflect.Descriptor instead.
 func (*DB_ThirdPlatformGameMappingArray) Descriptor() ([]byte, []int) {
-	return file_pbdata_proto_rawDescGZIP(), []int{129}
+	return file_pbdata_proto_rawDescGZIP(), []int{131}
 }
 
 func (x *DB_ThirdPlatformGameMappingArray) GetArr() []*DB_ThirdPlatformGameMapping {
@@ -9994,7 +10112,7 @@ type DB_Tips struct {
 func (x *DB_Tips) Reset() {
 	*x = DB_Tips{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_pbdata_proto_msgTypes[130]
+		mi := &file_pbdata_proto_msgTypes[132]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -10007,7 +10125,7 @@ func (x *DB_Tips) String() string {
 func (*DB_Tips) ProtoMessage() {}
 
 func (x *DB_Tips) ProtoReflect() protoreflect.Message {
-	mi := &file_pbdata_proto_msgTypes[130]
+	mi := &file_pbdata_proto_msgTypes[132]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -10020,7 +10138,7 @@ func (x *DB_Tips) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use DB_Tips.ProtoReflect.Descriptor instead.
 func (*DB_Tips) Descriptor() ([]byte, []int) {
-	return file_pbdata_proto_rawDescGZIP(), []int{130}
+	return file_pbdata_proto_rawDescGZIP(), []int{132}
 }
 
 func (x *DB_Tips) GetId() int32 {
@@ -10055,7 +10173,7 @@ type DB_TipsArray struct {
 func (x *DB_TipsArray) Reset() {
 	*x = DB_TipsArray{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_pbdata_proto_msgTypes[131]
+		mi := &file_pbdata_proto_msgTypes[133]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -10068,7 +10186,7 @@ func (x *DB_TipsArray) String() string {
 func (*DB_TipsArray) ProtoMessage() {}
 
 func (x *DB_TipsArray) ProtoReflect() protoreflect.Message {
-	mi := &file_pbdata_proto_msgTypes[131]
+	mi := &file_pbdata_proto_msgTypes[133]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -10081,7 +10199,7 @@ func (x *DB_TipsArray) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use DB_TipsArray.ProtoReflect.Descriptor instead.
 func (*DB_TipsArray) Descriptor() ([]byte, []int) {
-	return file_pbdata_proto_rawDescGZIP(), []int{131}
+	return file_pbdata_proto_rawDescGZIP(), []int{133}
 }
 
 func (x *DB_TipsArray) GetArr() []*DB_Tips {
@@ -10120,7 +10238,7 @@ type DB_VIP struct {
 func (x *DB_VIP) Reset() {
 	*x = DB_VIP{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_pbdata_proto_msgTypes[132]
+		mi := &file_pbdata_proto_msgTypes[134]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -10133,7 +10251,7 @@ func (x *DB_VIP) String() string {
 func (*DB_VIP) ProtoMessage() {}
 
 func (x *DB_VIP) ProtoReflect() protoreflect.Message {
-	mi := &file_pbdata_proto_msgTypes[132]
+	mi := &file_pbdata_proto_msgTypes[134]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -10146,7 +10264,7 @@ func (x *DB_VIP) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use DB_VIP.ProtoReflect.Descriptor instead.
 func (*DB_VIP) Descriptor() ([]byte, []int) {
-	return file_pbdata_proto_rawDescGZIP(), []int{132}
+	return file_pbdata_proto_rawDescGZIP(), []int{134}
 }
 
 func (x *DB_VIP) GetId() int32 {
@@ -10293,7 +10411,7 @@ type DB_VIPArray struct {
 func (x *DB_VIPArray) Reset() {
 	*x = DB_VIPArray{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_pbdata_proto_msgTypes[133]
+		mi := &file_pbdata_proto_msgTypes[135]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -10306,7 +10424,7 @@ func (x *DB_VIPArray) String() string {
 func (*DB_VIPArray) ProtoMessage() {}
 
 func (x *DB_VIPArray) ProtoReflect() protoreflect.Message {
-	mi := &file_pbdata_proto_msgTypes[133]
+	mi := &file_pbdata_proto_msgTypes[135]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -10319,7 +10437,7 @@ func (x *DB_VIPArray) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use DB_VIPArray.ProtoReflect.Descriptor instead.
 func (*DB_VIPArray) Descriptor() ([]byte, []int) {
-	return file_pbdata_proto_rawDescGZIP(), []int{133}
+	return file_pbdata_proto_rawDescGZIP(), []int{135}
 }
 
 func (x *DB_VIPArray) GetArr() []*DB_VIP {
@@ -11311,386 +11429,397 @@ var file_pbdata_proto_rawDesc = []byte{
 	0x5f, 0x4e, 0x65, 0x77, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x41, 0x72, 0x72, 0x61, 0x79, 0x12,
 	0x26, 0x0a, 0x03, 0x41, 0x72, 0x72, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x73,
 	0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x44, 0x42, 0x5f, 0x4e, 0x65, 0x77, 0x50, 0x6c, 0x61, 0x79,
-	0x65, 0x72, 0x52, 0x03, 0x41, 0x72, 0x72, 0x22, 0xcb, 0x02, 0x0a, 0x0b, 0x44, 0x42, 0x5f, 0x50,
-	0x65, 0x74, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20,
-	0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x6b, 0x69, 0x6c, 0x6c,
-	0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x49,
-	0x64, 0x12, 0x14, 0x0a, 0x05, 0x50, 0x65, 0x74, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05,
-	0x52, 0x05, 0x50, 0x65, 0x74, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x53, 0x6b, 0x69, 0x6c, 0x6c,
-	0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x53, 0x6b, 0x69,
-	0x6c, 0x6c, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x6b, 0x69, 0x6c, 0x6c,
-	0x4e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x53, 0x6b, 0x69, 0x6c,
-	0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x44, 0x65,
-	0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x44, 0x65,
-	0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x53, 0x4b, 0x69, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18,
-	0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x53, 0x4b, 0x69, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75,
-	0x65, 0x12, 0x43, 0x0a, 0x0a, 0x49, 0x74, 0x65, 0x6d, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x18,
-	0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x44,
-	0x42, 0x5f, 0x50, 0x65, 0x74, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x43,
-	0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x49, 0x74, 0x65, 0x6d,
-	0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x1a, 0x3d, 0x0a, 0x0f, 0x49, 0x74, 0x65, 0x6d, 0x43, 0x6f,
-	0x6e, 0x73, 0x75, 0x6d, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79,
-	0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76,
-	0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75,
-	0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x39, 0x0a, 0x10, 0x44, 0x42, 0x5f, 0x50, 0x65, 0x74, 0x53,
-	0x6b, 0x69, 0x6c, 0x6c, 0x41, 0x72, 0x72, 0x61, 0x79, 0x12, 0x25, 0x0a, 0x03, 0x41, 0x72, 0x72,
-	0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e,
-	0x44, 0x42, 0x5f, 0x50, 0x65, 0x74, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x52, 0x03, 0x41, 0x72, 0x72,
-	0x22, 0xa2, 0x02, 0x0a, 0x0f, 0x44, 0x42, 0x5f, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x4c, 0x6f, 0x74,
-	0x74, 0x65, 0x72, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05,
-	0x52, 0x02, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01,
-	0x28, 0x05, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65,
-	0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x17, 0x0a, 0x07,
-	0x49, 0x74, 0x65, 0x6d, 0x5f, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x49,
-	0x74, 0x65, 0x6d, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x47, 0x72, 0x61, 0x64, 0x65, 0x18, 0x05,
-	0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x47, 0x72, 0x61, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x4f,
-	0x64, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x4f, 0x64, 0x64, 0x12, 0x1a, 0x0a,
-	0x08, 0x4f, 0x64, 0x64, 0x72, 0x61, 0x74, 0x65, 0x31, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52,
-	0x08, 0x4f, 0x64, 0x64, 0x72, 0x61, 0x74, 0x65, 0x31, 0x12, 0x12, 0x0a, 0x04, 0x4f, 0x64, 0x64,
-	0x32, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x4f, 0x64, 0x64, 0x32, 0x12, 0x1a, 0x0a,
-	0x08, 0x4f, 0x64, 0x64, 0x72, 0x61, 0x74, 0x65, 0x32, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52,
-	0x08, 0x4f, 0x64, 0x64, 0x72, 0x61, 0x74, 0x65, 0x32, 0x12, 0x12, 0x0a, 0x04, 0x4f, 0x64, 0x64,
-	0x33, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x4f, 0x64, 0x64, 0x33, 0x12, 0x1a, 0x0a,
-	0x08, 0x4f, 0x64, 0x64, 0x72, 0x61, 0x74, 0x65, 0x33, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52,
-	0x08, 0x4f, 0x64, 0x64, 0x72, 0x61, 0x74, 0x65, 0x33, 0x12, 0x1a, 0x0a, 0x08, 0x4f, 0x64, 0x64,
-	0x72, 0x61, 0x74, 0x65, 0x34, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x4f, 0x64, 0x64,
-	0x72, 0x61, 0x74, 0x65, 0x34, 0x22, 0x41, 0x0a, 0x14, 0x44, 0x42, 0x5f, 0x50, 0x68, 0x6f, 0x6e,
-	0x65, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x41, 0x72, 0x72, 0x61, 0x79, 0x12, 0x29, 0x0a,
-	0x03, 0x41, 0x72, 0x72, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x73, 0x65, 0x72,
-	0x76, 0x65, 0x72, 0x2e, 0x44, 0x42, 0x5f, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x4c, 0x6f, 0x74, 0x74,
-	0x65, 0x72, 0x79, 0x52, 0x03, 0x41, 0x72, 0x72, 0x22, 0xce, 0x02, 0x0a, 0x12, 0x44, 0x42, 0x5f,
-	0x50, 0x69, 0x67, 0x42, 0x61, 0x6e, 0x6b, 0x5f, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x12,
-	0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12,
-	0x20, 0x0a, 0x0b, 0x42, 0x75, 0x79, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x4d, 0x69, 0x6e, 0x18, 0x02,
-	0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x42, 0x75, 0x79, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x4d, 0x69,
-	0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x42, 0x75, 0x79, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x4d, 0x61, 0x78,
-	0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x42, 0x75, 0x79, 0x43, 0x6f, 0x75, 0x6e, 0x74,
-	0x4d, 0x61, 0x78, 0x12, 0x20, 0x0a, 0x0b, 0x43, 0x6f, 0x73, 0x74, 0x44, 0x69, 0x61, 0x6d, 0x6f,
-	0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x43, 0x6f, 0x73, 0x74, 0x44, 0x69,
-	0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x61, 0x78, 0x47, 0x6f, 0x6c, 0x64,
-	0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4d, 0x61, 0x78, 0x47, 0x6f, 0x6c, 0x64, 0x12,
-	0x1e, 0x0a, 0x0a, 0x4d, 0x61, 0x78, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x18, 0x06, 0x20,
-	0x01, 0x28, 0x05, 0x52, 0x0a, 0x4d, 0x61, 0x78, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x12,
-	0x1c, 0x0a, 0x09, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x49, 0x64, 0x18, 0x07, 0x20, 0x01,
-	0x28, 0x05, 0x52, 0x09, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x1c, 0x0a,
-	0x09, 0x43, 0x6f, 0x69, 0x6e, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05,
-	0x52, 0x09, 0x43, 0x6f, 0x69, 0x6e, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x44,
-	0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28,
-	0x05, 0x52, 0x0c, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12,
-	0x28, 0x0a, 0x0f, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x4e, 0x6f, 0x77, 0x50, 0x72, 0x69,
-	0x63, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e,
-	0x64, 0x4e, 0x6f, 0x77, 0x50, 0x72, 0x69, 0x63, 0x65, 0x22, 0x47, 0x0a, 0x17, 0x44, 0x42, 0x5f,
-	0x50, 0x69, 0x67, 0x42, 0x61, 0x6e, 0x6b, 0x5f, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x41,
-	0x72, 0x72, 0x61, 0x79, 0x12, 0x2c, 0x0a, 0x03, 0x41, 0x72, 0x72, 0x18, 0x01, 0x20, 0x03, 0x28,
-	0x0b, 0x32, 0x1a, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x44, 0x42, 0x5f, 0x50, 0x69,
-	0x67, 0x42, 0x61, 0x6e, 0x6b, 0x5f, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x52, 0x03, 0x41,
-	0x72, 0x72, 0x22, 0x5b, 0x0a, 0x0f, 0x44, 0x42, 0x5f, 0x50, 0x69, 0x67, 0x62, 0x61, 0x6e, 0x6b,
-	0x5f, 0x50, 0x72, 0x6f, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
-	0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6f, 0x72, 0x70, 0x4e, 0x61, 0x6d,
-	0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6f, 0x72, 0x70, 0x4e, 0x61, 0x6d,
-	0x65, 0x12, 0x1c, 0x0a, 0x09, 0x50, 0x72, 0x6f, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03,
-	0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x50, 0x72, 0x6f, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22,
-	0x41, 0x0a, 0x14, 0x44, 0x42, 0x5f, 0x50, 0x69, 0x67, 0x62, 0x61, 0x6e, 0x6b, 0x5f, 0x50, 0x72,
-	0x6f, 0x70, 0x41, 0x72, 0x72, 0x61, 0x79, 0x12, 0x29, 0x0a, 0x03, 0x41, 0x72, 0x72, 0x18, 0x01,
-	0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x44, 0x42,
-	0x5f, 0x50, 0x69, 0x67, 0x62, 0x61, 0x6e, 0x6b, 0x5f, 0x50, 0x72, 0x6f, 0x70, 0x52, 0x03, 0x41,
-	0x72, 0x72, 0x22, 0x30, 0x0a, 0x0c, 0x44, 0x42, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x45,
-	0x78, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02,
-	0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x45, 0x78, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52,
-	0x03, 0x45, 0x78, 0x70, 0x22, 0x3b, 0x0a, 0x11, 0x44, 0x42, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65,
-	0x72, 0x45, 0x78, 0x70, 0x41, 0x72, 0x72, 0x61, 0x79, 0x12, 0x26, 0x0a, 0x03, 0x41, 0x72, 0x72,
-	0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e,
-	0x44, 0x42, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x45, 0x78, 0x70, 0x52, 0x03, 0x41, 0x72,
-	0x72, 0x22, 0x6d, 0x0a, 0x0d, 0x44, 0x42, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x6e,
-	0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
-	0x52, 0x04, 0x43, 0x69, 0x74, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x48, 0x65, 0x61, 0x64, 0x18, 0x02,
-	0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x48, 0x65, 0x61, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61,
-	0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x10,
-	0x0a, 0x03, 0x53, 0x65, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x53, 0x65, 0x78,
-	0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64,
-	0x22, 0x3d, 0x0a, 0x12, 0x44, 0x42, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x6e, 0x66,
-	0x6f, 0x41, 0x72, 0x72, 0x61, 0x79, 0x12, 0x27, 0x0a, 0x03, 0x41, 0x72, 0x72, 0x18, 0x01, 0x20,
-	0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x44, 0x42, 0x5f,
-	0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x03, 0x41, 0x72, 0x72, 0x22,
-	0xa5, 0x05, 0x0a, 0x0d, 0x44, 0x42, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x54, 0x79, 0x70,
-	0x65, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49,
-	0x64, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
-	0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65,
-	0x65, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46,
-	0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x50, 0x61, 0x79, 0x4c, 0x6f, 0x77, 0x65,
-	0x72, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x50, 0x61,
-	0x79, 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x24, 0x0a, 0x0d, 0x50,
-	0x61, 0x79, 0x55, 0x70, 0x70, 0x65, 0x72, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01,
-	0x28, 0x05, 0x52, 0x0d, 0x50, 0x61, 0x79, 0x55, 0x70, 0x70, 0x65, 0x72, 0x4c, 0x69, 0x6d, 0x69,
-	0x74, 0x12, 0x2e, 0x0a, 0x12, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x4c, 0x6f, 0x77,
-	0x65, 0x72, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x12, 0x47,
-	0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x4c, 0x69, 0x6d, 0x69,
-	0x74, 0x12, 0x2e, 0x0a, 0x12, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x55, 0x70, 0x70,
-	0x65, 0x72, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x12, 0x47,
-	0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x55, 0x70, 0x70, 0x65, 0x72, 0x4c, 0x69, 0x6d, 0x69,
-	0x74, 0x12, 0x2c, 0x0a, 0x11, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x49, 0x6e, 0x4c, 0x6f, 0x77, 0x65,
-	0x72, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x11, 0x54, 0x6f,
-	0x74, 0x61, 0x6c, 0x49, 0x6e, 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12,
-	0x2c, 0x0a, 0x11, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x49, 0x6e, 0x55, 0x70, 0x70, 0x65, 0x72, 0x4c,
-	0x69, 0x6d, 0x69, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x11, 0x54, 0x6f, 0x74, 0x61,
-	0x6c, 0x49, 0x6e, 0x55, 0x70, 0x70, 0x65, 0x72, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x26, 0x0a,
-	0x0e, 0x4f, 0x64, 0x64, 0x73, 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18,
-	0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x4f, 0x64, 0x64, 0x73, 0x4c, 0x6f, 0x77, 0x65, 0x72,
-	0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x4f, 0x64, 0x64, 0x73, 0x55, 0x70, 0x70,
-	0x65, 0x72, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x4f,
-	0x64, 0x64, 0x73, 0x55, 0x70, 0x70, 0x65, 0x72, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1c, 0x0a,
-	0x09, 0x4c, 0x75, 0x63, 0x6b, 0x79, 0x52, 0x61, 0x74, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05,
-	0x52, 0x09, 0x4c, 0x75, 0x63, 0x6b, 0x79, 0x52, 0x61, 0x74, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x43,
-	0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x61, 0x72, 0x64, 0x52, 0x61, 0x74, 0x65, 0x18, 0x0d, 0x20,
-	0x01, 0x28, 0x05, 0x52, 0x0e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x61, 0x72, 0x64, 0x52,
-	0x61, 0x74, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x43, 0x61, 0x72, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65,
-	0x52, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0e, 0x43, 0x61, 0x72,
-	0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x4d,
-	0x61, 0x74, 0x63, 0x68, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x0f, 0x20, 0x03,
-	0x28, 0x05, 0x52, 0x0d, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74,
-	0x79, 0x12, 0x22, 0x0a, 0x0c, 0x45, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x4d, 0x61, 0x74, 0x63,
-	0x68, 0x18, 0x10, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0c, 0x45, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65,
-	0x4d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x20, 0x0a, 0x0b, 0x43, 0x61, 0x72, 0x64, 0x4c, 0x69, 0x62,
-	0x52, 0x61, 0x74, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x43, 0x61, 0x72, 0x64,
-	0x4c, 0x69, 0x62, 0x52, 0x61, 0x74, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x43, 0x61, 0x72, 0x64, 0x4c,
-	0x69, 0x62, 0x41, 0x72, 0x72, 0x18, 0x12, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0a, 0x43, 0x61, 0x72,
-	0x64, 0x4c, 0x69, 0x62, 0x41, 0x72, 0x72, 0x22, 0x3d, 0x0a, 0x12, 0x44, 0x42, 0x5f, 0x50, 0x6c,
-	0x61, 0x79, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x41, 0x72, 0x72, 0x61, 0x79, 0x12, 0x27, 0x0a,
-	0x03, 0x41, 0x72, 0x72, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x73, 0x65, 0x72,
-	0x76, 0x65, 0x72, 0x2e, 0x44, 0x42, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x54, 0x79, 0x70,
-	0x65, 0x52, 0x03, 0x41, 0x72, 0x72, 0x22, 0x5d, 0x0a, 0x09, 0x44, 0x42, 0x5f, 0x50, 0x6f, 0x74,
-	0x4f, 0x64, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52,
+	0x65, 0x72, 0x52, 0x03, 0x41, 0x72, 0x72, 0x22, 0x75, 0x0a, 0x0b, 0x44, 0x42, 0x5f, 0x50, 0x61,
+	0x73, 0x73, 0x53, 0x68, 0x6f, 0x77, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x68, 0x6f, 0x77, 0x54, 0x79,
+	0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x53, 0x68, 0x6f, 0x77, 0x54, 0x79,
+	0x70, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x53, 0x68, 0x6f, 0x77, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65,
+	0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x53, 0x68, 0x6f, 0x77, 0x56, 0x6f, 0x6c, 0x75,
+	0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04,
+	0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x39,
+	0x0a, 0x10, 0x44, 0x42, 0x5f, 0x50, 0x61, 0x73, 0x73, 0x53, 0x68, 0x6f, 0x77, 0x41, 0x72, 0x72,
+	0x61, 0x79, 0x12, 0x25, 0x0a, 0x03, 0x41, 0x72, 0x72, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32,
+	0x13, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x44, 0x42, 0x5f, 0x50, 0x61, 0x73, 0x73,
+	0x53, 0x68, 0x6f, 0x77, 0x52, 0x03, 0x41, 0x72, 0x72, 0x22, 0xcb, 0x02, 0x0a, 0x0b, 0x44, 0x42,
+	0x5f, 0x50, 0x65, 0x74, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x6b, 0x69,
+	0x6c, 0x6c, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x6b, 0x69, 0x6c,
+	0x6c, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x50, 0x65, 0x74, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01,
+	0x28, 0x05, 0x52, 0x05, 0x50, 0x65, 0x74, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x53, 0x6b, 0x69,
+	0x6c, 0x6c, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x53,
+	0x6b, 0x69, 0x6c, 0x6c, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x6b, 0x69,
+	0x6c, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x53, 0x6b,
+	0x69, 0x6c, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x6b, 0x69, 0x6c, 0x6c,
+	0x44, 0x65, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x53, 0x6b, 0x69, 0x6c, 0x6c,
+	0x44, 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x53, 0x4b, 0x69, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75,
+	0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x53, 0x4b, 0x69, 0x6c, 0x6c, 0x56, 0x61,
+	0x6c, 0x75, 0x65, 0x12, 0x43, 0x0a, 0x0a, 0x49, 0x74, 0x65, 0x6d, 0x43, 0x6f, 0x6e, 0x73, 0x75,
+	0x6d, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72,
+	0x2e, 0x44, 0x42, 0x5f, 0x50, 0x65, 0x74, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x2e, 0x49, 0x74, 0x65,
+	0x6d, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x49, 0x74,
+	0x65, 0x6d, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x1a, 0x3d, 0x0a, 0x0f, 0x49, 0x74, 0x65, 0x6d,
+	0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b,
+	0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a,
+	0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61,
+	0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x39, 0x0a, 0x10, 0x44, 0x42, 0x5f, 0x50, 0x65,
+	0x74, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x41, 0x72, 0x72, 0x61, 0x79, 0x12, 0x25, 0x0a, 0x03, 0x41,
+	0x72, 0x72, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65,
+	0x72, 0x2e, 0x44, 0x42, 0x5f, 0x50, 0x65, 0x74, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x52, 0x03, 0x41,
+	0x72, 0x72, 0x22, 0xa2, 0x02, 0x0a, 0x0f, 0x44, 0x42, 0x5f, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x4c,
+	0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02,
+	0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61,
+	0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x17,
+	0x0a, 0x07, 0x49, 0x74, 0x65, 0x6d, 0x5f, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52,
+	0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x47, 0x72, 0x61, 0x64, 0x65,
+	0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x47, 0x72, 0x61, 0x64, 0x65, 0x12, 0x10, 0x0a,
+	0x03, 0x4f, 0x64, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x4f, 0x64, 0x64, 0x12,
+	0x1a, 0x0a, 0x08, 0x4f, 0x64, 0x64, 0x72, 0x61, 0x74, 0x65, 0x31, 0x18, 0x07, 0x20, 0x01, 0x28,
+	0x05, 0x52, 0x08, 0x4f, 0x64, 0x64, 0x72, 0x61, 0x74, 0x65, 0x31, 0x12, 0x12, 0x0a, 0x04, 0x4f,
+	0x64, 0x64, 0x32, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x4f, 0x64, 0x64, 0x32, 0x12,
+	0x1a, 0x0a, 0x08, 0x4f, 0x64, 0x64, 0x72, 0x61, 0x74, 0x65, 0x32, 0x18, 0x09, 0x20, 0x01, 0x28,
+	0x05, 0x52, 0x08, 0x4f, 0x64, 0x64, 0x72, 0x61, 0x74, 0x65, 0x32, 0x12, 0x12, 0x0a, 0x04, 0x4f,
+	0x64, 0x64, 0x33, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x4f, 0x64, 0x64, 0x33, 0x12,
+	0x1a, 0x0a, 0x08, 0x4f, 0x64, 0x64, 0x72, 0x61, 0x74, 0x65, 0x33, 0x18, 0x0b, 0x20, 0x01, 0x28,
+	0x05, 0x52, 0x08, 0x4f, 0x64, 0x64, 0x72, 0x61, 0x74, 0x65, 0x33, 0x12, 0x1a, 0x0a, 0x08, 0x4f,
+	0x64, 0x64, 0x72, 0x61, 0x74, 0x65, 0x34, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x4f,
+	0x64, 0x64, 0x72, 0x61, 0x74, 0x65, 0x34, 0x22, 0x41, 0x0a, 0x14, 0x44, 0x42, 0x5f, 0x50, 0x68,
+	0x6f, 0x6e, 0x65, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x41, 0x72, 0x72, 0x61, 0x79, 0x12,
+	0x29, 0x0a, 0x03, 0x41, 0x72, 0x72, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x73,
+	0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x44, 0x42, 0x5f, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x4c, 0x6f,
+	0x74, 0x74, 0x65, 0x72, 0x79, 0x52, 0x03, 0x41, 0x72, 0x72, 0x22, 0xce, 0x02, 0x0a, 0x12, 0x44,
+	0x42, 0x5f, 0x50, 0x69, 0x67, 0x42, 0x61, 0x6e, 0x6b, 0x5f, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e,
+	0x64, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49,
+	0x64, 0x12, 0x20, 0x0a, 0x0b, 0x42, 0x75, 0x79, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x4d, 0x69, 0x6e,
+	0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x42, 0x75, 0x79, 0x43, 0x6f, 0x75, 0x6e, 0x74,
+	0x4d, 0x69, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x42, 0x75, 0x79, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x4d,
+	0x61, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x42, 0x75, 0x79, 0x43, 0x6f, 0x75,
+	0x6e, 0x74, 0x4d, 0x61, 0x78, 0x12, 0x20, 0x0a, 0x0b, 0x43, 0x6f, 0x73, 0x74, 0x44, 0x69, 0x61,
+	0x6d, 0x6f, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x43, 0x6f, 0x73, 0x74,
+	0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x61, 0x78, 0x47, 0x6f,
+	0x6c, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4d, 0x61, 0x78, 0x47, 0x6f, 0x6c,
+	0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x4d, 0x61, 0x78, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x18,
+	0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x4d, 0x61, 0x78, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e,
+	0x64, 0x12, 0x1c, 0x0a, 0x09, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x49, 0x64, 0x18, 0x07,
+	0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x49, 0x64, 0x12,
+	0x1c, 0x0a, 0x09, 0x43, 0x6f, 0x69, 0x6e, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x08, 0x20, 0x01,
+	0x28, 0x05, 0x52, 0x09, 0x43, 0x6f, 0x69, 0x6e, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x22, 0x0a,
+	0x0c, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x09, 0x20,
+	0x01, 0x28, 0x05, 0x52, 0x0c, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x50, 0x72, 0x69, 0x63,
+	0x65, 0x12, 0x28, 0x0a, 0x0f, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x4e, 0x6f, 0x77, 0x50,
+	0x72, 0x69, 0x63, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x44, 0x69, 0x61, 0x6d,
+	0x6f, 0x6e, 0x64, 0x4e, 0x6f, 0x77, 0x50, 0x72, 0x69, 0x63, 0x65, 0x22, 0x47, 0x0a, 0x17, 0x44,
+	0x42, 0x5f, 0x50, 0x69, 0x67, 0x42, 0x61, 0x6e, 0x6b, 0x5f, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e,
+	0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x12, 0x2c, 0x0a, 0x03, 0x41, 0x72, 0x72, 0x18, 0x01, 0x20,
+	0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x44, 0x42, 0x5f,
+	0x50, 0x69, 0x67, 0x42, 0x61, 0x6e, 0x6b, 0x5f, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x52,
+	0x03, 0x41, 0x72, 0x72, 0x22, 0x5b, 0x0a, 0x0f, 0x44, 0x42, 0x5f, 0x50, 0x69, 0x67, 0x62, 0x61,
+	0x6e, 0x6b, 0x5f, 0x50, 0x72, 0x6f, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20,
+	0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6f, 0x72, 0x70, 0x4e,
+	0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6f, 0x72, 0x70, 0x4e,
+	0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x50, 0x72, 0x6f, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65,
+	0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x50, 0x72, 0x6f, 0x70, 0x56, 0x61, 0x6c, 0x75,
+	0x65, 0x22, 0x41, 0x0a, 0x14, 0x44, 0x42, 0x5f, 0x50, 0x69, 0x67, 0x62, 0x61, 0x6e, 0x6b, 0x5f,
+	0x50, 0x72, 0x6f, 0x70, 0x41, 0x72, 0x72, 0x61, 0x79, 0x12, 0x29, 0x0a, 0x03, 0x41, 0x72, 0x72,
+	0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e,
+	0x44, 0x42, 0x5f, 0x50, 0x69, 0x67, 0x62, 0x61, 0x6e, 0x6b, 0x5f, 0x50, 0x72, 0x6f, 0x70, 0x52,
+	0x03, 0x41, 0x72, 0x72, 0x22, 0x30, 0x0a, 0x0c, 0x44, 0x42, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65,
+	0x72, 0x45, 0x78, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05,
+	0x52, 0x02, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x45, 0x78, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28,
+	0x05, 0x52, 0x03, 0x45, 0x78, 0x70, 0x22, 0x3b, 0x0a, 0x11, 0x44, 0x42, 0x5f, 0x50, 0x6c, 0x61,
+	0x79, 0x65, 0x72, 0x45, 0x78, 0x70, 0x41, 0x72, 0x72, 0x61, 0x79, 0x12, 0x26, 0x0a, 0x03, 0x41,
+	0x72, 0x72, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65,
+	0x72, 0x2e, 0x44, 0x42, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x45, 0x78, 0x70, 0x52, 0x03,
+	0x41, 0x72, 0x72, 0x22, 0x6d, 0x0a, 0x0d, 0x44, 0x42, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72,
+	0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x04, 0x43, 0x69, 0x74, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x48, 0x65, 0x61, 0x64,
+	0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x48, 0x65, 0x61, 0x64, 0x12, 0x12, 0x0a, 0x04,
+	0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65,
+	0x12, 0x10, 0x0a, 0x03, 0x53, 0x65, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x53,
+	0x65, 0x78, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02,
+	0x49, 0x64, 0x22, 0x3d, 0x0a, 0x12, 0x44, 0x42, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49,
+	0x6e, 0x66, 0x6f, 0x41, 0x72, 0x72, 0x61, 0x79, 0x12, 0x27, 0x0a, 0x03, 0x41, 0x72, 0x72, 0x18,
+	0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x44,
+	0x42, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x03, 0x41, 0x72,
+	0x72, 0x22, 0xa5, 0x05, 0x0a, 0x0d, 0x44, 0x42, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x54,
+	0x79, 0x70, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52,
 	0x02, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
-	0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x69, 0x74, 0x6c, 0x65,
-	0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x54, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x16, 0x0a,
-	0x06, 0x56, 0x69, 0x70, 0x4f, 0x64, 0x64, 0x18, 0x04, 0x20, 0x03, 0x28, 0x05, 0x52, 0x06, 0x56,
-	0x69, 0x70, 0x4f, 0x64, 0x64, 0x22, 0x35, 0x0a, 0x0e, 0x44, 0x42, 0x5f, 0x50, 0x6f, 0x74, 0x4f,
-	0x64, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x12, 0x23, 0x0a, 0x03, 0x41, 0x72, 0x72, 0x18, 0x01,
-	0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x44, 0x42,
-	0x5f, 0x50, 0x6f, 0x74, 0x4f, 0x64, 0x64, 0x52, 0x03, 0x41, 0x72, 0x72, 0x22, 0x97, 0x02, 0x0a,
-	0x0f, 0x44, 0x42, 0x5f, 0x50, 0x72, 0x6f, 0x70, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65,
-	0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64,
-	0x12, 0x14, 0x0a, 0x05, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52,
-	0x05, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x35, 0x0a, 0x04, 0x43, 0x6f, 0x73, 0x74, 0x18, 0x03,
-	0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x44, 0x42,
-	0x5f, 0x50, 0x72, 0x6f, 0x70, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x43, 0x6f,
-	0x73, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x43, 0x6f, 0x73, 0x74, 0x12, 0x35, 0x0a,
-	0x04, 0x47, 0x61, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x73, 0x65,
-	0x72, 0x76, 0x65, 0x72, 0x2e, 0x44, 0x42, 0x5f, 0x50, 0x72, 0x6f, 0x70, 0x45, 0x78, 0x63, 0x68,
-	0x61, 0x6e, 0x67, 0x65, 0x2e, 0x47, 0x61, 0x69, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04,
-	0x47, 0x61, 0x69, 0x6e, 0x1a, 0x37, 0x0a, 0x09, 0x43, 0x6f, 0x73, 0x74, 0x45, 0x6e, 0x74, 0x72,
-	0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03,
-	0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01,
-	0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x37, 0x0a,
-	0x09, 0x47, 0x61, 0x69, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65,
-	0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05,
-	0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c,
-	0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x41, 0x0a, 0x14, 0x44, 0x42, 0x5f, 0x50, 0x72, 0x6f,
-	0x70, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x41, 0x72, 0x72, 0x61, 0x79, 0x12, 0x29,
-	0x0a, 0x03, 0x41, 0x72, 0x72, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x73, 0x65,
-	0x72, 0x76, 0x65, 0x72, 0x2e, 0x44, 0x42, 0x5f, 0x50, 0x72, 0x6f, 0x70, 0x45, 0x78, 0x63, 0x68,
-	0x61, 0x6e, 0x67, 0x65, 0x52, 0x03, 0x41, 0x72, 0x72, 0x22, 0x46, 0x0a, 0x0c, 0x44, 0x42, 0x5f,
-	0x52, 0x61, 0x6e, 0x6b, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18,
-	0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x74, 0x61,
-	0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12,
-	0x10, 0x0a, 0x03, 0x45, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x45, 0x6e,
-	0x64, 0x22, 0x3b, 0x0a, 0x11, 0x44, 0x42, 0x5f, 0x52, 0x61, 0x6e, 0x6b, 0x43, 0x79, 0x63, 0x6c,
-	0x65, 0x41, 0x72, 0x72, 0x61, 0x79, 0x12, 0x26, 0x0a, 0x03, 0x41, 0x72, 0x72, 0x18, 0x01, 0x20,
-	0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x44, 0x42, 0x5f,
-	0x52, 0x61, 0x6e, 0x6b, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x52, 0x03, 0x41, 0x72, 0x72, 0x22, 0x7a,
-	0x0a, 0x0c, 0x44, 0x42, 0x5f, 0x52, 0x61, 0x6e, 0x6b, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x0e,
-	0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x1a,
-	0x0a, 0x08, 0x52, 0x61, 0x6e, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05,
-	0x52, 0x08, 0x52, 0x61, 0x6e, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x4c, 0x65,
-	0x76, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x4c, 0x65, 0x76, 0x65, 0x6c,
-	0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,
-	0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x05, 0x20,
-	0x01, 0x28, 0x03, 0x52, 0x05, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x22, 0x3b, 0x0a, 0x11, 0x44, 0x42,
-	0x5f, 0x52, 0x61, 0x6e, 0x6b, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x41, 0x72, 0x72, 0x61, 0x79, 0x12,
-	0x26, 0x0a, 0x03, 0x41, 0x72, 0x72, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x73,
-	0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x44, 0x42, 0x5f, 0x52, 0x61, 0x6e, 0x6b, 0x4c, 0x65, 0x76,
-	0x65, 0x6c, 0x52, 0x03, 0x41, 0x72, 0x72, 0x22, 0xff, 0x01, 0x0a, 0x0d, 0x44, 0x42, 0x5f, 0x52,
-	0x61, 0x6e, 0x6b, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18,
-	0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x61, 0x6e,
-	0x6b, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x52, 0x61, 0x6e,
-	0x6b, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x03,
-	0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x41,
-	0x77, 0x61, 0x72, 0x64, 0x31, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x41,
-	0x77, 0x61, 0x72, 0x64, 0x31, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x41, 0x77, 0x61, 0x72, 0x64,
-	0x31, 0x4e, 0x75, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x41, 0x77, 0x61, 0x72,
-	0x64, 0x31, 0x4e, 0x75, 0x6d, 0x12, 0x1a, 0x0a, 0x08, 0x41, 0x77, 0x61, 0x72, 0x64, 0x32, 0x49,
-	0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x41, 0x77, 0x61, 0x72, 0x64, 0x32, 0x49,
-	0x64, 0x12, 0x1c, 0x0a, 0x09, 0x41, 0x77, 0x61, 0x72, 0x64, 0x32, 0x4e, 0x75, 0x6d, 0x18, 0x07,
-	0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x41, 0x77, 0x61, 0x72, 0x64, 0x32, 0x4e, 0x75, 0x6d, 0x12,
-	0x1a, 0x0a, 0x08, 0x41, 0x77, 0x61, 0x72, 0x64, 0x33, 0x49, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28,
-	0x05, 0x52, 0x08, 0x41, 0x77, 0x61, 0x72, 0x64, 0x33, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x41,
-	0x77, 0x61, 0x72, 0x64, 0x33, 0x4e, 0x75, 0x6d, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09,
-	0x41, 0x77, 0x61, 0x72, 0x64, 0x33, 0x4e, 0x75, 0x6d, 0x22, 0x3d, 0x0a, 0x12, 0x44, 0x42, 0x5f,
-	0x52, 0x61, 0x6e, 0x6b, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x12,
+	0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46,
+	0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d,
+	0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x50, 0x61, 0x79, 0x4c, 0x6f,
+	0x77, 0x65, 0x72, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d,
+	0x50, 0x61, 0x79, 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x24, 0x0a,
+	0x0d, 0x50, 0x61, 0x79, 0x55, 0x70, 0x70, 0x65, 0x72, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x05,
+	0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x50, 0x61, 0x79, 0x55, 0x70, 0x70, 0x65, 0x72, 0x4c, 0x69,
+	0x6d, 0x69, 0x74, 0x12, 0x2e, 0x0a, 0x12, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x4c,
+	0x6f, 0x77, 0x65, 0x72, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52,
+	0x12, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x4c, 0x69,
+	0x6d, 0x69, 0x74, 0x12, 0x2e, 0x0a, 0x12, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x55,
+	0x70, 0x70, 0x65, 0x72, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52,
+	0x12, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x55, 0x70, 0x70, 0x65, 0x72, 0x4c, 0x69,
+	0x6d, 0x69, 0x74, 0x12, 0x2c, 0x0a, 0x11, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x49, 0x6e, 0x4c, 0x6f,
+	0x77, 0x65, 0x72, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x11,
+	0x54, 0x6f, 0x74, 0x61, 0x6c, 0x49, 0x6e, 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x4c, 0x69, 0x6d, 0x69,
+	0x74, 0x12, 0x2c, 0x0a, 0x11, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x49, 0x6e, 0x55, 0x70, 0x70, 0x65,
+	0x72, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x11, 0x54, 0x6f,
+	0x74, 0x61, 0x6c, 0x49, 0x6e, 0x55, 0x70, 0x70, 0x65, 0x72, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12,
+	0x26, 0x0a, 0x0e, 0x4f, 0x64, 0x64, 0x73, 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x4c, 0x69, 0x6d, 0x69,
+	0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x4f, 0x64, 0x64, 0x73, 0x4c, 0x6f, 0x77,
+	0x65, 0x72, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x4f, 0x64, 0x64, 0x73, 0x55,
+	0x70, 0x70, 0x65, 0x72, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52,
+	0x0e, 0x4f, 0x64, 0x64, 0x73, 0x55, 0x70, 0x70, 0x65, 0x72, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12,
+	0x1c, 0x0a, 0x09, 0x4c, 0x75, 0x63, 0x6b, 0x79, 0x52, 0x61, 0x74, 0x65, 0x18, 0x0c, 0x20, 0x01,
+	0x28, 0x05, 0x52, 0x09, 0x4c, 0x75, 0x63, 0x6b, 0x79, 0x52, 0x61, 0x74, 0x65, 0x12, 0x26, 0x0a,
+	0x0e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x61, 0x72, 0x64, 0x52, 0x61, 0x74, 0x65, 0x18,
+	0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x61, 0x72,
+	0x64, 0x52, 0x61, 0x74, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x43, 0x61, 0x72, 0x64, 0x56, 0x61, 0x6c,
+	0x75, 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0e, 0x43,
+	0x61, 0x72, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x24, 0x0a,
+	0x0d, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x0f,
+	0x20, 0x03, 0x28, 0x05, 0x52, 0x0d, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x50, 0x72, 0x69, 0x6f, 0x72,
+	0x69, 0x74, 0x79, 0x12, 0x22, 0x0a, 0x0c, 0x45, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x4d, 0x61,
+	0x74, 0x63, 0x68, 0x18, 0x10, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0c, 0x45, 0x78, 0x63, 0x6c, 0x75,
+	0x64, 0x65, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x20, 0x0a, 0x0b, 0x43, 0x61, 0x72, 0x64, 0x4c,
+	0x69, 0x62, 0x52, 0x61, 0x74, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x43, 0x61,
+	0x72, 0x64, 0x4c, 0x69, 0x62, 0x52, 0x61, 0x74, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x43, 0x61, 0x72,
+	0x64, 0x4c, 0x69, 0x62, 0x41, 0x72, 0x72, 0x18, 0x12, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0a, 0x43,
+	0x61, 0x72, 0x64, 0x4c, 0x69, 0x62, 0x41, 0x72, 0x72, 0x22, 0x3d, 0x0a, 0x12, 0x44, 0x42, 0x5f,
+	0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x41, 0x72, 0x72, 0x61, 0x79, 0x12,
 	0x27, 0x0a, 0x03, 0x41, 0x72, 0x72, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x73,
-	0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x44, 0x42, 0x5f, 0x52, 0x61, 0x6e, 0x6b, 0x52, 0x65, 0x77,
-	0x61, 0x72, 0x64, 0x52, 0x03, 0x41, 0x72, 0x72, 0x22, 0x4d, 0x0a, 0x12, 0x44, 0x42, 0x5f, 0x53,
-	0x65, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x57, 0x6f, 0x72, 0x64, 0x73, 0x12, 0x0e,
-	0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x27,
-	0x0a, 0x0f, 0x53, 0x65, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x57, 0x6f, 0x72, 0x64,
-	0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x53, 0x65, 0x6e, 0x73, 0x69, 0x74, 0x69,
-	0x76, 0x65, 0x57, 0x6f, 0x72, 0x64, 0x73, 0x22, 0x47, 0x0a, 0x17, 0x44, 0x42, 0x5f, 0x53, 0x65,
-	0x6e, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x57, 0x6f, 0x72, 0x64, 0x73, 0x41, 0x72, 0x72,
-	0x61, 0x79, 0x12, 0x2c, 0x0a, 0x03, 0x41, 0x72, 0x72, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32,
-	0x1a, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x44, 0x42, 0x5f, 0x53, 0x65, 0x6e, 0x73,
-	0x69, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x57, 0x6f, 0x72, 0x64, 0x73, 0x52, 0x03, 0x41, 0x72, 0x72,
-	0x22, 0xbb, 0x03, 0x0a, 0x11, 0x44, 0x42, 0x5f, 0x53, 0x6c, 0x6f, 0x74, 0x52, 0x61, 0x74, 0x65,
-	0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01,
-	0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72,
-	0x65, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65,
-	0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x03, 0x20,
-	0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x4e, 0x6f, 0x72, 0x6d,
-	0x43, 0x6f, 0x6c, 0x31, 0x18, 0x04, 0x20, 0x03, 0x28, 0x05, 0x52, 0x08, 0x4e, 0x6f, 0x72, 0x6d,
-	0x43, 0x6f, 0x6c, 0x31, 0x12, 0x1a, 0x0a, 0x08, 0x4e, 0x6f, 0x72, 0x6d, 0x43, 0x6f, 0x6c, 0x32,
-	0x18, 0x05, 0x20, 0x03, 0x28, 0x05, 0x52, 0x08, 0x4e, 0x6f, 0x72, 0x6d, 0x43, 0x6f, 0x6c, 0x32,
-	0x12, 0x1a, 0x0a, 0x08, 0x4e, 0x6f, 0x72, 0x6d, 0x43, 0x6f, 0x6c, 0x33, 0x18, 0x06, 0x20, 0x03,
-	0x28, 0x05, 0x52, 0x08, 0x4e, 0x6f, 0x72, 0x6d, 0x43, 0x6f, 0x6c, 0x33, 0x12, 0x1a, 0x0a, 0x08,
-	0x4e, 0x6f, 0x72, 0x6d, 0x43, 0x6f, 0x6c, 0x34, 0x18, 0x07, 0x20, 0x03, 0x28, 0x05, 0x52, 0x08,
-	0x4e, 0x6f, 0x72, 0x6d, 0x43, 0x6f, 0x6c, 0x34, 0x12, 0x1a, 0x0a, 0x08, 0x4e, 0x6f, 0x72, 0x6d,
-	0x43, 0x6f, 0x6c, 0x35, 0x18, 0x08, 0x20, 0x03, 0x28, 0x05, 0x52, 0x08, 0x4e, 0x6f, 0x72, 0x6d,
-	0x43, 0x6f, 0x6c, 0x35, 0x12, 0x1a, 0x0a, 0x08, 0x46, 0x72, 0x65, 0x65, 0x43, 0x6f, 0x6c, 0x31,
-	0x18, 0x09, 0x20, 0x03, 0x28, 0x05, 0x52, 0x08, 0x46, 0x72, 0x65, 0x65, 0x43, 0x6f, 0x6c, 0x31,
-	0x12, 0x1a, 0x0a, 0x08, 0x46, 0x72, 0x65, 0x65, 0x43, 0x6f, 0x6c, 0x32, 0x18, 0x0a, 0x20, 0x03,
-	0x28, 0x05, 0x52, 0x08, 0x46, 0x72, 0x65, 0x65, 0x43, 0x6f, 0x6c, 0x32, 0x12, 0x1a, 0x0a, 0x08,
-	0x46, 0x72, 0x65, 0x65, 0x43, 0x6f, 0x6c, 0x33, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x05, 0x52, 0x08,
-	0x46, 0x72, 0x65, 0x65, 0x43, 0x6f, 0x6c, 0x33, 0x12, 0x1a, 0x0a, 0x08, 0x46, 0x72, 0x65, 0x65,
-	0x43, 0x6f, 0x6c, 0x34, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x05, 0x52, 0x08, 0x46, 0x72, 0x65, 0x65,
-	0x43, 0x6f, 0x6c, 0x34, 0x12, 0x1a, 0x0a, 0x08, 0x46, 0x72, 0x65, 0x65, 0x43, 0x6f, 0x6c, 0x35,
-	0x18, 0x0d, 0x20, 0x03, 0x28, 0x05, 0x52, 0x08, 0x46, 0x72, 0x65, 0x65, 0x43, 0x6f, 0x6c, 0x35,
-	0x12, 0x18, 0x0a, 0x07, 0x4d, 0x61, 0x72, 0x79, 0x4f, 0x75, 0x74, 0x18, 0x0e, 0x20, 0x03, 0x28,
-	0x05, 0x52, 0x07, 0x4d, 0x61, 0x72, 0x79, 0x4f, 0x75, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x61,
-	0x72, 0x79, 0x4d, 0x69, 0x64, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x05, 0x52, 0x07, 0x4d, 0x61, 0x72,
-	0x79, 0x4d, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x4a, 0x61, 0x63, 0x6b, 0x50, 0x6f, 0x74, 0x18,
-	0x10, 0x20, 0x03, 0x28, 0x05, 0x52, 0x07, 0x4a, 0x61, 0x63, 0x6b, 0x50, 0x6f, 0x74, 0x22, 0x45,
-	0x0a, 0x16, 0x44, 0x42, 0x5f, 0x53, 0x6c, 0x6f, 0x74, 0x52, 0x61, 0x74, 0x65, 0x57, 0x65, 0x69,
-	0x67, 0x68, 0x74, 0x41, 0x72, 0x72, 0x61, 0x79, 0x12, 0x2b, 0x0a, 0x03, 0x41, 0x72, 0x72, 0x18,
-	0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x44,
-	0x42, 0x5f, 0x53, 0x6c, 0x6f, 0x74, 0x52, 0x61, 0x74, 0x65, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74,
-	0x52, 0x03, 0x41, 0x72, 0x72, 0x22, 0x7d, 0x0a, 0x0f, 0x44, 0x42, 0x5f, 0x53, 0x79, 0x73, 0x74,
-	0x65, 0x6d, 0x43, 0x68, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01,
-	0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x44, 0x65, 0x73, 0x63,
-	0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x44, 0x65, 0x73, 0x63, 0x12, 0x1e, 0x0a, 0x0a,
-	0x43, 0x68, 0x61, 0x6e, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05,
-	0x52, 0x0a, 0x43, 0x68, 0x61, 0x6e, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04,
-	0x43, 0x6f, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e,
-	0x12, 0x12, 0x0a, 0x04, 0x52, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04,
-	0x52, 0x61, 0x74, 0x65, 0x22, 0x41, 0x0a, 0x14, 0x44, 0x42, 0x5f, 0x53, 0x79, 0x73, 0x74, 0x65,
-	0x6d, 0x43, 0x68, 0x61, 0x6e, 0x63, 0x65, 0x41, 0x72, 0x72, 0x61, 0x79, 0x12, 0x29, 0x0a, 0x03,
-	0x41, 0x72, 0x72, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x73, 0x65, 0x72, 0x76,
-	0x65, 0x72, 0x2e, 0x44, 0x42, 0x5f, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x43, 0x68, 0x61, 0x6e,
-	0x63, 0x65, 0x52, 0x03, 0x41, 0x72, 0x72, 0x22, 0xd7, 0x02, 0x0a, 0x07, 0x44, 0x42, 0x5f, 0x54,
-	0x61, 0x73, 0x6b, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52,
-	0x02, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01,
-	0x28, 0x05, 0x52, 0x05, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x22, 0x0a, 0x0c, 0x41, 0x63, 0x74,
-	0x69, 0x76, 0x69, 0x74, 0x79, 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52,
-	0x0c, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a,
-	0x08, 0x54, 0x61, 0x73, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52,
-	0x08, 0x54, 0x61, 0x73, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x54, 0x61, 0x72,
-	0x67, 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b,
-	0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x46,
-	0x69, 0x6e, 0x69, 0x73, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03,
-	0x52, 0x0b, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x30, 0x0a,
-	0x05, 0x41, 0x77, 0x61, 0x72, 0x64, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x73,
-	0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x44, 0x42, 0x5f, 0x54, 0x61, 0x73, 0x6b, 0x2e, 0x41, 0x77,
-	0x61, 0x72, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x41, 0x77, 0x61, 0x72, 0x64, 0x12,
-	0x1a, 0x0a, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28,
-	0x05, 0x52, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x50,
-	0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x09, 0x20, 0x03, 0x28, 0x05, 0x52, 0x08, 0x50,
-	0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x38, 0x0a, 0x0a, 0x41, 0x77, 0x61, 0x72, 0x64,
-	0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01,
-	0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
-	0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38,
-	0x01, 0x22, 0x31, 0x0a, 0x0c, 0x44, 0x42, 0x5f, 0x54, 0x61, 0x73, 0x6b, 0x41, 0x72, 0x72, 0x61,
-	0x79, 0x12, 0x21, 0x0a, 0x03, 0x41, 0x72, 0x72, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f,
-	0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x44, 0x42, 0x5f, 0x54, 0x61, 0x73, 0x6b, 0x52,
-	0x03, 0x41, 0x72, 0x72, 0x22, 0x85, 0x02, 0x0a, 0x1b, 0x44, 0x42, 0x5f, 0x54, 0x68, 0x69, 0x72,
+	0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x44, 0x42, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x54,
+	0x79, 0x70, 0x65, 0x52, 0x03, 0x41, 0x72, 0x72, 0x22, 0x5d, 0x0a, 0x09, 0x44, 0x42, 0x5f, 0x50,
+	0x6f, 0x74, 0x4f, 0x64, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
+	0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x69, 0x74,
+	0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x54, 0x69, 0x74, 0x6c, 0x65, 0x12,
+	0x16, 0x0a, 0x06, 0x56, 0x69, 0x70, 0x4f, 0x64, 0x64, 0x18, 0x04, 0x20, 0x03, 0x28, 0x05, 0x52,
+	0x06, 0x56, 0x69, 0x70, 0x4f, 0x64, 0x64, 0x22, 0x35, 0x0a, 0x0e, 0x44, 0x42, 0x5f, 0x50, 0x6f,
+	0x74, 0x4f, 0x64, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x12, 0x23, 0x0a, 0x03, 0x41, 0x72, 0x72,
+	0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e,
+	0x44, 0x42, 0x5f, 0x50, 0x6f, 0x74, 0x4f, 0x64, 0x64, 0x52, 0x03, 0x41, 0x72, 0x72, 0x22, 0x97,
+	0x02, 0x0a, 0x0f, 0x44, 0x42, 0x5f, 0x50, 0x72, 0x6f, 0x70, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e,
+	0x67, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02,
+	0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28,
+	0x05, 0x52, 0x05, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x35, 0x0a, 0x04, 0x43, 0x6f, 0x73, 0x74,
+	0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e,
+	0x44, 0x42, 0x5f, 0x50, 0x72, 0x6f, 0x70, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e,
+	0x43, 0x6f, 0x73, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x43, 0x6f, 0x73, 0x74, 0x12,
+	0x35, 0x0a, 0x04, 0x47, 0x61, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e,
+	0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x44, 0x42, 0x5f, 0x50, 0x72, 0x6f, 0x70, 0x45, 0x78,
+	0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x47, 0x61, 0x69, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79,
+	0x52, 0x04, 0x47, 0x61, 0x69, 0x6e, 0x1a, 0x37, 0x0a, 0x09, 0x43, 0x6f, 0x73, 0x74, 0x45, 0x6e,
+	0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03,
+	0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02,
+	0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a,
+	0x37, 0x0a, 0x09, 0x47, 0x61, 0x69, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03,
+	0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14,
+	0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76,
+	0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x41, 0x0a, 0x14, 0x44, 0x42, 0x5f, 0x50,
+	0x72, 0x6f, 0x70, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x41, 0x72, 0x72, 0x61, 0x79,
+	0x12, 0x29, 0x0a, 0x03, 0x41, 0x72, 0x72, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e,
+	0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x44, 0x42, 0x5f, 0x50, 0x72, 0x6f, 0x70, 0x45, 0x78,
+	0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x03, 0x41, 0x72, 0x72, 0x22, 0x46, 0x0a, 0x0c, 0x44,
+	0x42, 0x5f, 0x52, 0x61, 0x6e, 0x6b, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x49,
+	0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x53,
+	0x74, 0x61, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x53, 0x74, 0x61, 0x72,
+	0x74, 0x12, 0x10, 0x0a, 0x03, 0x45, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03,
+	0x45, 0x6e, 0x64, 0x22, 0x3b, 0x0a, 0x11, 0x44, 0x42, 0x5f, 0x52, 0x61, 0x6e, 0x6b, 0x43, 0x79,
+	0x63, 0x6c, 0x65, 0x41, 0x72, 0x72, 0x61, 0x79, 0x12, 0x26, 0x0a, 0x03, 0x41, 0x72, 0x72, 0x18,
+	0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x44,
+	0x42, 0x5f, 0x52, 0x61, 0x6e, 0x6b, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x52, 0x03, 0x41, 0x72, 0x72,
+	0x22, 0x7a, 0x0a, 0x0c, 0x44, 0x42, 0x5f, 0x52, 0x61, 0x6e, 0x6b, 0x4c, 0x65, 0x76, 0x65, 0x6c,
+	0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64,
+	0x12, 0x1a, 0x0a, 0x08, 0x52, 0x61, 0x6e, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01,
+	0x28, 0x05, 0x52, 0x08, 0x52, 0x61, 0x6e, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05,
+	0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x4c, 0x65, 0x76,
+	0x65, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18,
+	0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x22, 0x3b, 0x0a, 0x11,
+	0x44, 0x42, 0x5f, 0x52, 0x61, 0x6e, 0x6b, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x41, 0x72, 0x72, 0x61,
+	0x79, 0x12, 0x26, 0x0a, 0x03, 0x41, 0x72, 0x72, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14,
+	0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x44, 0x42, 0x5f, 0x52, 0x61, 0x6e, 0x6b, 0x4c,
+	0x65, 0x76, 0x65, 0x6c, 0x52, 0x03, 0x41, 0x72, 0x72, 0x22, 0xff, 0x01, 0x0a, 0x0d, 0x44, 0x42,
+	0x5f, 0x52, 0x61, 0x6e, 0x6b, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x49,
+	0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x52,
+	0x61, 0x6e, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x52,
+	0x61, 0x6e, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x4c, 0x65, 0x76, 0x65, 0x6c,
+	0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x1a, 0x0a,
+	0x08, 0x41, 0x77, 0x61, 0x72, 0x64, 0x31, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52,
+	0x08, 0x41, 0x77, 0x61, 0x72, 0x64, 0x31, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x41, 0x77, 0x61,
+	0x72, 0x64, 0x31, 0x4e, 0x75, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x41, 0x77,
+	0x61, 0x72, 0x64, 0x31, 0x4e, 0x75, 0x6d, 0x12, 0x1a, 0x0a, 0x08, 0x41, 0x77, 0x61, 0x72, 0x64,
+	0x32, 0x49, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x41, 0x77, 0x61, 0x72, 0x64,
+	0x32, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x41, 0x77, 0x61, 0x72, 0x64, 0x32, 0x4e, 0x75, 0x6d,
+	0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x41, 0x77, 0x61, 0x72, 0x64, 0x32, 0x4e, 0x75,
+	0x6d, 0x12, 0x1a, 0x0a, 0x08, 0x41, 0x77, 0x61, 0x72, 0x64, 0x33, 0x49, 0x64, 0x18, 0x08, 0x20,
+	0x01, 0x28, 0x05, 0x52, 0x08, 0x41, 0x77, 0x61, 0x72, 0x64, 0x33, 0x49, 0x64, 0x12, 0x1c, 0x0a,
+	0x09, 0x41, 0x77, 0x61, 0x72, 0x64, 0x33, 0x4e, 0x75, 0x6d, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05,
+	0x52, 0x09, 0x41, 0x77, 0x61, 0x72, 0x64, 0x33, 0x4e, 0x75, 0x6d, 0x22, 0x3d, 0x0a, 0x12, 0x44,
+	0x42, 0x5f, 0x52, 0x61, 0x6e, 0x6b, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x41, 0x72, 0x72, 0x61,
+	0x79, 0x12, 0x27, 0x0a, 0x03, 0x41, 0x72, 0x72, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15,
+	0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x44, 0x42, 0x5f, 0x52, 0x61, 0x6e, 0x6b, 0x52,
+	0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x03, 0x41, 0x72, 0x72, 0x22, 0x4d, 0x0a, 0x12, 0x44, 0x42,
+	0x5f, 0x53, 0x65, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x57, 0x6f, 0x72, 0x64, 0x73,
+	0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64,
+	0x12, 0x27, 0x0a, 0x0f, 0x53, 0x65, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x57, 0x6f,
+	0x72, 0x64, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x53, 0x65, 0x6e, 0x73, 0x69,
+	0x74, 0x69, 0x76, 0x65, 0x57, 0x6f, 0x72, 0x64, 0x73, 0x22, 0x47, 0x0a, 0x17, 0x44, 0x42, 0x5f,
+	0x53, 0x65, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x57, 0x6f, 0x72, 0x64, 0x73, 0x41,
+	0x72, 0x72, 0x61, 0x79, 0x12, 0x2c, 0x0a, 0x03, 0x41, 0x72, 0x72, 0x18, 0x01, 0x20, 0x03, 0x28,
+	0x0b, 0x32, 0x1a, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x44, 0x42, 0x5f, 0x53, 0x65,
+	0x6e, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x57, 0x6f, 0x72, 0x64, 0x73, 0x52, 0x03, 0x41,
+	0x72, 0x72, 0x22, 0xbb, 0x03, 0x0a, 0x11, 0x44, 0x42, 0x5f, 0x53, 0x6c, 0x6f, 0x74, 0x52, 0x61,
+	0x74, 0x65, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65,
+	0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61,
+	0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18,
+	0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x4e, 0x6f,
+	0x72, 0x6d, 0x43, 0x6f, 0x6c, 0x31, 0x18, 0x04, 0x20, 0x03, 0x28, 0x05, 0x52, 0x08, 0x4e, 0x6f,
+	0x72, 0x6d, 0x43, 0x6f, 0x6c, 0x31, 0x12, 0x1a, 0x0a, 0x08, 0x4e, 0x6f, 0x72, 0x6d, 0x43, 0x6f,
+	0x6c, 0x32, 0x18, 0x05, 0x20, 0x03, 0x28, 0x05, 0x52, 0x08, 0x4e, 0x6f, 0x72, 0x6d, 0x43, 0x6f,
+	0x6c, 0x32, 0x12, 0x1a, 0x0a, 0x08, 0x4e, 0x6f, 0x72, 0x6d, 0x43, 0x6f, 0x6c, 0x33, 0x18, 0x06,
+	0x20, 0x03, 0x28, 0x05, 0x52, 0x08, 0x4e, 0x6f, 0x72, 0x6d, 0x43, 0x6f, 0x6c, 0x33, 0x12, 0x1a,
+	0x0a, 0x08, 0x4e, 0x6f, 0x72, 0x6d, 0x43, 0x6f, 0x6c, 0x34, 0x18, 0x07, 0x20, 0x03, 0x28, 0x05,
+	0x52, 0x08, 0x4e, 0x6f, 0x72, 0x6d, 0x43, 0x6f, 0x6c, 0x34, 0x12, 0x1a, 0x0a, 0x08, 0x4e, 0x6f,
+	0x72, 0x6d, 0x43, 0x6f, 0x6c, 0x35, 0x18, 0x08, 0x20, 0x03, 0x28, 0x05, 0x52, 0x08, 0x4e, 0x6f,
+	0x72, 0x6d, 0x43, 0x6f, 0x6c, 0x35, 0x12, 0x1a, 0x0a, 0x08, 0x46, 0x72, 0x65, 0x65, 0x43, 0x6f,
+	0x6c, 0x31, 0x18, 0x09, 0x20, 0x03, 0x28, 0x05, 0x52, 0x08, 0x46, 0x72, 0x65, 0x65, 0x43, 0x6f,
+	0x6c, 0x31, 0x12, 0x1a, 0x0a, 0x08, 0x46, 0x72, 0x65, 0x65, 0x43, 0x6f, 0x6c, 0x32, 0x18, 0x0a,
+	0x20, 0x03, 0x28, 0x05, 0x52, 0x08, 0x46, 0x72, 0x65, 0x65, 0x43, 0x6f, 0x6c, 0x32, 0x12, 0x1a,
+	0x0a, 0x08, 0x46, 0x72, 0x65, 0x65, 0x43, 0x6f, 0x6c, 0x33, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x05,
+	0x52, 0x08, 0x46, 0x72, 0x65, 0x65, 0x43, 0x6f, 0x6c, 0x33, 0x12, 0x1a, 0x0a, 0x08, 0x46, 0x72,
+	0x65, 0x65, 0x43, 0x6f, 0x6c, 0x34, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x05, 0x52, 0x08, 0x46, 0x72,
+	0x65, 0x65, 0x43, 0x6f, 0x6c, 0x34, 0x12, 0x1a, 0x0a, 0x08, 0x46, 0x72, 0x65, 0x65, 0x43, 0x6f,
+	0x6c, 0x35, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x05, 0x52, 0x08, 0x46, 0x72, 0x65, 0x65, 0x43, 0x6f,
+	0x6c, 0x35, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x61, 0x72, 0x79, 0x4f, 0x75, 0x74, 0x18, 0x0e, 0x20,
+	0x03, 0x28, 0x05, 0x52, 0x07, 0x4d, 0x61, 0x72, 0x79, 0x4f, 0x75, 0x74, 0x12, 0x18, 0x0a, 0x07,
+	0x4d, 0x61, 0x72, 0x79, 0x4d, 0x69, 0x64, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x05, 0x52, 0x07, 0x4d,
+	0x61, 0x72, 0x79, 0x4d, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x4a, 0x61, 0x63, 0x6b, 0x50, 0x6f,
+	0x74, 0x18, 0x10, 0x20, 0x03, 0x28, 0x05, 0x52, 0x07, 0x4a, 0x61, 0x63, 0x6b, 0x50, 0x6f, 0x74,
+	0x22, 0x45, 0x0a, 0x16, 0x44, 0x42, 0x5f, 0x53, 0x6c, 0x6f, 0x74, 0x52, 0x61, 0x74, 0x65, 0x57,
+	0x65, 0x69, 0x67, 0x68, 0x74, 0x41, 0x72, 0x72, 0x61, 0x79, 0x12, 0x2b, 0x0a, 0x03, 0x41, 0x72,
+	0x72, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72,
+	0x2e, 0x44, 0x42, 0x5f, 0x53, 0x6c, 0x6f, 0x74, 0x52, 0x61, 0x74, 0x65, 0x57, 0x65, 0x69, 0x67,
+	0x68, 0x74, 0x52, 0x03, 0x41, 0x72, 0x72, 0x22, 0x7d, 0x0a, 0x0f, 0x44, 0x42, 0x5f, 0x53, 0x79,
+	0x73, 0x74, 0x65, 0x6d, 0x43, 0x68, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64,
+	0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x44, 0x65,
+	0x73, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x44, 0x65, 0x73, 0x63, 0x12, 0x1e,
+	0x0a, 0x0a, 0x43, 0x68, 0x61, 0x6e, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01,
+	0x28, 0x05, 0x52, 0x0a, 0x43, 0x68, 0x61, 0x6e, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12,
+	0x0a, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x43, 0x6f,
+	0x69, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x52, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05,
+	0x52, 0x04, 0x52, 0x61, 0x74, 0x65, 0x22, 0x41, 0x0a, 0x14, 0x44, 0x42, 0x5f, 0x53, 0x79, 0x73,
+	0x74, 0x65, 0x6d, 0x43, 0x68, 0x61, 0x6e, 0x63, 0x65, 0x41, 0x72, 0x72, 0x61, 0x79, 0x12, 0x29,
+	0x0a, 0x03, 0x41, 0x72, 0x72, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x73, 0x65,
+	0x72, 0x76, 0x65, 0x72, 0x2e, 0x44, 0x42, 0x5f, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x43, 0x68,
+	0x61, 0x6e, 0x63, 0x65, 0x52, 0x03, 0x41, 0x72, 0x72, 0x22, 0xd7, 0x02, 0x0a, 0x07, 0x44, 0x42,
+	0x5f, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
+	0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x02,
+	0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x22, 0x0a, 0x0c, 0x41,
+	0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28,
+	0x05, 0x52, 0x0c, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x54, 0x79, 0x70, 0x65, 0x12,
+	0x1a, 0x0a, 0x08, 0x54, 0x61, 0x73, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28,
+	0x05, 0x52, 0x08, 0x54, 0x61, 0x73, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x54,
+	0x61, 0x72, 0x67, 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03,
+	0x52, 0x0b, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x20, 0x0a,
+	0x0b, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x06, 0x20, 0x01,
+	0x28, 0x03, 0x52, 0x0b, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12,
+	0x30, 0x0a, 0x05, 0x41, 0x77, 0x61, 0x72, 0x64, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a,
+	0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x44, 0x42, 0x5f, 0x54, 0x61, 0x73, 0x6b, 0x2e,
+	0x41, 0x77, 0x61, 0x72, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x41, 0x77, 0x61, 0x72,
+	0x64, 0x12, 0x1a, 0x0a, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x08, 0x20,
+	0x01, 0x28, 0x05, 0x52, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a,
+	0x08, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x09, 0x20, 0x03, 0x28, 0x05, 0x52,
+	0x08, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x38, 0x0a, 0x0a, 0x41, 0x77, 0x61,
+	0x72, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c,
+	0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a,
+	0x02, 0x38, 0x01, 0x22, 0x31, 0x0a, 0x0c, 0x44, 0x42, 0x5f, 0x54, 0x61, 0x73, 0x6b, 0x41, 0x72,
+	0x72, 0x61, 0x79, 0x12, 0x21, 0x0a, 0x03, 0x41, 0x72, 0x72, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b,
+	0x32, 0x0f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x44, 0x42, 0x5f, 0x54, 0x61, 0x73,
+	0x6b, 0x52, 0x03, 0x41, 0x72, 0x72, 0x22, 0x85, 0x02, 0x0a, 0x1b, 0x44, 0x42, 0x5f, 0x54, 0x68,
+	0x69, 0x72, 0x64, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x47, 0x61, 0x6d, 0x65, 0x4d,
+	0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d,
+	0x47, 0x61, 0x6d, 0x65, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x53, 0x79,
+	0x73, 0x74, 0x65, 0x6d, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x44, 0x12, 0x2c, 0x0a, 0x11, 0x54, 0x68,
+	0x69, 0x72, 0x64, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x18,
+	0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x54, 0x68, 0x69, 0x72, 0x64, 0x50, 0x6c, 0x61, 0x74,
+	0x66, 0x6f, 0x72, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x54, 0x68, 0x69, 0x72,
+	0x64, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x44, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x54,
+	0x68, 0x69, 0x72, 0x64, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x44, 0x12, 0x12, 0x0a, 0x04, 0x44, 0x65,
+	0x73, 0x63, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x44, 0x65, 0x73, 0x63, 0x12, 0x34,
+	0x0a, 0x15, 0x53, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74,
+	0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x15, 0x53,
+	0x63, 0x72, 0x65, 0x65, 0x6e, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+	0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x54, 0x68, 0x69, 0x72, 0x64, 0x49, 0x44, 0x18,
+	0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x54, 0x68, 0x69, 0x72, 0x64, 0x49, 0x44, 0x22, 0x59,
+	0x0a, 0x20, 0x44, 0x42, 0x5f, 0x54, 0x68, 0x69, 0x72, 0x64, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f,
+	0x72, 0x6d, 0x47, 0x61, 0x6d, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x41, 0x72, 0x72,
+	0x61, 0x79, 0x12, 0x35, 0x0a, 0x03, 0x41, 0x72, 0x72, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32,
+	0x23, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x44, 0x42, 0x5f, 0x54, 0x68, 0x69, 0x72,
 	0x64, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x47, 0x61, 0x6d, 0x65, 0x4d, 0x61, 0x70,
-	0x70, 0x69, 0x6e, 0x67, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05,
-	0x52, 0x02, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x47, 0x61,
-	0x6d, 0x65, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x53, 0x79, 0x73, 0x74,
-	0x65, 0x6d, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x44, 0x12, 0x2c, 0x0a, 0x11, 0x54, 0x68, 0x69, 0x72,
-	0x64, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20,
-	0x01, 0x28, 0x09, 0x52, 0x11, 0x54, 0x68, 0x69, 0x72, 0x64, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f,
-	0x72, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x54, 0x68, 0x69, 0x72, 0x64, 0x47,
-	0x61, 0x6d, 0x65, 0x49, 0x44, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x54, 0x68, 0x69,
-	0x72, 0x64, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x44, 0x12, 0x12, 0x0a, 0x04, 0x44, 0x65, 0x73, 0x63,
-	0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x44, 0x65, 0x73, 0x63, 0x12, 0x34, 0x0a, 0x15,
-	0x53, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f,
-	0x6e, 0x54, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x15, 0x53, 0x63, 0x72,
-	0x65, 0x65, 0x6e, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79,
-	0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x54, 0x68, 0x69, 0x72, 0x64, 0x49, 0x44, 0x18, 0x07, 0x20,
-	0x01, 0x28, 0x05, 0x52, 0x07, 0x54, 0x68, 0x69, 0x72, 0x64, 0x49, 0x44, 0x22, 0x59, 0x0a, 0x20,
-	0x44, 0x42, 0x5f, 0x54, 0x68, 0x69, 0x72, 0x64, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d,
-	0x47, 0x61, 0x6d, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x41, 0x72, 0x72, 0x61, 0x79,
-	0x12, 0x35, 0x0a, 0x03, 0x41, 0x72, 0x72, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e,
-	0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x44, 0x42, 0x5f, 0x54, 0x68, 0x69, 0x72, 0x64, 0x50,
-	0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x47, 0x61, 0x6d, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69,
-	0x6e, 0x67, 0x52, 0x03, 0x41, 0x72, 0x72, 0x22, 0x43, 0x0a, 0x07, 0x44, 0x42, 0x5f, 0x54, 0x69,
-	0x70, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02,
-	0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x03,
-	0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x44, 0x65,
-	0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x44, 0x65, 0x73, 0x22, 0x31, 0x0a, 0x0c,
-	0x44, 0x42, 0x5f, 0x54, 0x69, 0x70, 0x73, 0x41, 0x72, 0x72, 0x61, 0x79, 0x12, 0x21, 0x0a, 0x03,
-	0x41, 0x72, 0x72, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x73, 0x65, 0x72, 0x76,
-	0x65, 0x72, 0x2e, 0x44, 0x42, 0x5f, 0x54, 0x69, 0x70, 0x73, 0x52, 0x03, 0x41, 0x72, 0x72, 0x22,
-	0xea, 0x05, 0x0a, 0x06, 0x44, 0x42, 0x5f, 0x56, 0x49, 0x50, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64,
-	0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61,
-	0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14,
-	0x0a, 0x05, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x43,
-	0x6f, 0x75, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x56, 0x69, 0x70, 0x45, 0x78, 0x70, 0x18, 0x04,
-	0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x56, 0x69, 0x70, 0x45, 0x78, 0x70, 0x12, 0x1e, 0x0a, 0x0a,
-	0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x31, 0x18, 0x05, 0x20, 0x03, 0x28, 0x05,
-	0x52, 0x0a, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x31, 0x12, 0x1e, 0x0a, 0x0a,
-	0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x32, 0x18, 0x06, 0x20, 0x03, 0x28, 0x05,
-	0x52, 0x0a, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x32, 0x12, 0x18, 0x0a, 0x07,
-	0x53, 0x68, 0x6f, 0x70, 0x49, 0x64, 0x32, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53,
-	0x68, 0x6f, 0x70, 0x49, 0x64, 0x32, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c,
-	0x65, 0x67, 0x65, 0x33, 0x18, 0x08, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0a, 0x50, 0x72, 0x69, 0x76,
-	0x69, 0x6c, 0x65, 0x67, 0x65, 0x33, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c,
-	0x65, 0x67, 0x65, 0x34, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x50, 0x72, 0x69, 0x76,
-	0x69, 0x6c, 0x65, 0x67, 0x65, 0x34, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c,
-	0x65, 0x67, 0x65, 0x35, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x50, 0x72, 0x69, 0x76,
-	0x69, 0x6c, 0x65, 0x67, 0x65, 0x35, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c,
-	0x65, 0x67, 0x65, 0x36, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x50, 0x72, 0x69, 0x76,
-	0x69, 0x6c, 0x65, 0x67, 0x65, 0x36, 0x12, 0x3e, 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c,
-	0x65, 0x67, 0x65, 0x37, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x73, 0x65, 0x72,
-	0x76, 0x65, 0x72, 0x2e, 0x44, 0x42, 0x5f, 0x56, 0x49, 0x50, 0x2e, 0x50, 0x72, 0x69, 0x76, 0x69,
-	0x6c, 0x65, 0x67, 0x65, 0x37, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x50, 0x72, 0x69, 0x76,
-	0x69, 0x6c, 0x65, 0x67, 0x65, 0x37, 0x12, 0x28, 0x0a, 0x0f, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c,
-	0x65, 0x67, 0x65, 0x37, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52,
-	0x0f, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x37, 0x50, 0x72, 0x69, 0x63, 0x65,
-	0x12, 0x18, 0x0a, 0x07, 0x53, 0x68, 0x6f, 0x70, 0x49, 0x64, 0x37, 0x18, 0x0e, 0x20, 0x01, 0x28,
-	0x05, 0x52, 0x07, 0x53, 0x68, 0x6f, 0x70, 0x49, 0x64, 0x37, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x72,
-	0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x38, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a,
-	0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x38, 0x12, 0x14, 0x0a, 0x05, 0x50, 0x61,
-	0x72, 0x61, 0x6d, 0x18, 0x10, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x50, 0x61, 0x72, 0x61, 0x6d,
-	0x12, 0x28, 0x0a, 0x0f, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x4f, 0x75, 0x74, 0x6c, 0x69, 0x6e,
-	0x65, 0x49, 0x44, 0x18, 0x11, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0f, 0x52, 0x65, 0x77, 0x61, 0x72,
-	0x64, 0x4f, 0x75, 0x74, 0x6c, 0x69, 0x6e, 0x65, 0x49, 0x44, 0x12, 0x2f, 0x0a, 0x05, 0x41, 0x77,
-	0x61, 0x72, 0x64, 0x18, 0x12, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x73, 0x65, 0x72, 0x76,
-	0x65, 0x72, 0x2e, 0x44, 0x42, 0x5f, 0x56, 0x49, 0x50, 0x2e, 0x41, 0x77, 0x61, 0x72, 0x64, 0x45,
-	0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x41, 0x77, 0x61, 0x72, 0x64, 0x12, 0x26, 0x0a, 0x0e, 0x4d,
-	0x61, 0x74, 0x63, 0x68, 0x46, 0x72, 0x65, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x13, 0x20,
-	0x01, 0x28, 0x05, 0x52, 0x0e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x46, 0x72, 0x65, 0x65, 0x54, 0x69,
-	0x6d, 0x65, 0x73, 0x1a, 0x3d, 0x0a, 0x0f, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65,
-	0x37, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20,
-	0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75,
-	0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02,
-	0x38, 0x01, 0x1a, 0x38, 0x0a, 0x0a, 0x41, 0x77, 0x61, 0x72, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79,
-	0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b,
-	0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
-	0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x2f, 0x0a, 0x0b,
-	0x44, 0x42, 0x5f, 0x56, 0x49, 0x50, 0x41, 0x72, 0x72, 0x61, 0x79, 0x12, 0x20, 0x0a, 0x03, 0x41,
-	0x72, 0x72, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65,
-	0x72, 0x2e, 0x44, 0x42, 0x5f, 0x56, 0x49, 0x50, 0x52, 0x03, 0x41, 0x72, 0x72, 0x42, 0x26, 0x5a,
-	0x24, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d,
-	0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x73,
-	0x65, 0x72, 0x76, 0x65, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+	0x70, 0x69, 0x6e, 0x67, 0x52, 0x03, 0x41, 0x72, 0x72, 0x22, 0x43, 0x0a, 0x07, 0x44, 0x42, 0x5f,
+	0x54, 0x69, 0x70, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05,
+	0x52, 0x02, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x02,
+	0x20, 0x03, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03,
+	0x44, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x44, 0x65, 0x73, 0x22, 0x31,
+	0x0a, 0x0c, 0x44, 0x42, 0x5f, 0x54, 0x69, 0x70, 0x73, 0x41, 0x72, 0x72, 0x61, 0x79, 0x12, 0x21,
+	0x0a, 0x03, 0x41, 0x72, 0x72, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x73, 0x65,
+	0x72, 0x76, 0x65, 0x72, 0x2e, 0x44, 0x42, 0x5f, 0x54, 0x69, 0x70, 0x73, 0x52, 0x03, 0x41, 0x72,
+	0x72, 0x22, 0xea, 0x05, 0x0a, 0x06, 0x44, 0x42, 0x5f, 0x56, 0x49, 0x50, 0x12, 0x0e, 0x0a, 0x02,
+	0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04,
+	0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65,
+	0x12, 0x14, 0x0a, 0x05, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52,
+	0x05, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x56, 0x69, 0x70, 0x45, 0x78, 0x70,
+	0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x56, 0x69, 0x70, 0x45, 0x78, 0x70, 0x12, 0x1e,
+	0x0a, 0x0a, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x31, 0x18, 0x05, 0x20, 0x03,
+	0x28, 0x05, 0x52, 0x0a, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x31, 0x12, 0x1e,
+	0x0a, 0x0a, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x32, 0x18, 0x06, 0x20, 0x03,
+	0x28, 0x05, 0x52, 0x0a, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x32, 0x12, 0x18,
+	0x0a, 0x07, 0x53, 0x68, 0x6f, 0x70, 0x49, 0x64, 0x32, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52,
+	0x07, 0x53, 0x68, 0x6f, 0x70, 0x49, 0x64, 0x32, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x76,
+	0x69, 0x6c, 0x65, 0x67, 0x65, 0x33, 0x18, 0x08, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0a, 0x50, 0x72,
+	0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x33, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x76,
+	0x69, 0x6c, 0x65, 0x67, 0x65, 0x34, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x50, 0x72,
+	0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x34, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x76,
+	0x69, 0x6c, 0x65, 0x67, 0x65, 0x35, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x50, 0x72,
+	0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x35, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x76,
+	0x69, 0x6c, 0x65, 0x67, 0x65, 0x36, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x50, 0x72,
+	0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x36, 0x12, 0x3e, 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x76,
+	0x69, 0x6c, 0x65, 0x67, 0x65, 0x37, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x73,
+	0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x44, 0x42, 0x5f, 0x56, 0x49, 0x50, 0x2e, 0x50, 0x72, 0x69,
+	0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x37, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x50, 0x72,
+	0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x37, 0x12, 0x28, 0x0a, 0x0f, 0x50, 0x72, 0x69, 0x76,
+	0x69, 0x6c, 0x65, 0x67, 0x65, 0x37, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28,
+	0x05, 0x52, 0x0f, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x37, 0x50, 0x72, 0x69,
+	0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x68, 0x6f, 0x70, 0x49, 0x64, 0x37, 0x18, 0x0e, 0x20,
+	0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x68, 0x6f, 0x70, 0x49, 0x64, 0x37, 0x12, 0x1e, 0x0a, 0x0a,
+	0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x38, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05,
+	0x52, 0x0a, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x38, 0x12, 0x14, 0x0a, 0x05,
+	0x50, 0x61, 0x72, 0x61, 0x6d, 0x18, 0x10, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x50, 0x61, 0x72,
+	0x61, 0x6d, 0x12, 0x28, 0x0a, 0x0f, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x4f, 0x75, 0x74, 0x6c,
+	0x69, 0x6e, 0x65, 0x49, 0x44, 0x18, 0x11, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0f, 0x52, 0x65, 0x77,
+	0x61, 0x72, 0x64, 0x4f, 0x75, 0x74, 0x6c, 0x69, 0x6e, 0x65, 0x49, 0x44, 0x12, 0x2f, 0x0a, 0x05,
+	0x41, 0x77, 0x61, 0x72, 0x64, 0x18, 0x12, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x73, 0x65,
+	0x72, 0x76, 0x65, 0x72, 0x2e, 0x44, 0x42, 0x5f, 0x56, 0x49, 0x50, 0x2e, 0x41, 0x77, 0x61, 0x72,
+	0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x41, 0x77, 0x61, 0x72, 0x64, 0x12, 0x26, 0x0a,
+	0x0e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x46, 0x72, 0x65, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18,
+	0x13, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x46, 0x72, 0x65, 0x65,
+	0x54, 0x69, 0x6d, 0x65, 0x73, 0x1a, 0x3d, 0x0a, 0x0f, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65,
+	0x67, 0x65, 0x37, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61,
+	0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
+	0x3a, 0x02, 0x38, 0x01, 0x1a, 0x38, 0x0a, 0x0a, 0x41, 0x77, 0x61, 0x72, 0x64, 0x45, 0x6e, 0x74,
+	0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52,
+	0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20,
+	0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x2f,
+	0x0a, 0x0b, 0x44, 0x42, 0x5f, 0x56, 0x49, 0x50, 0x41, 0x72, 0x72, 0x61, 0x79, 0x12, 0x20, 0x0a,
+	0x03, 0x41, 0x72, 0x72, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x73, 0x65, 0x72,
+	0x76, 0x65, 0x72, 0x2e, 0x44, 0x42, 0x5f, 0x56, 0x49, 0x50, 0x52, 0x03, 0x41, 0x72, 0x72, 0x42,
+	0x26, 0x5a, 0x24, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63,
+	0x6f, 0x6d, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c,
+	0x2f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 }
 
 var (
@@ -11705,7 +11834,7 @@ func file_pbdata_proto_rawDescGZIP() []byte {
 	return file_pbdata_proto_rawDescData
 }
 
-var file_pbdata_proto_msgTypes = make([]protoimpl.MessageInfo, 144)
+var file_pbdata_proto_msgTypes = make([]protoimpl.MessageInfo, 146)
 var file_pbdata_proto_goTypes = []interface{}{
 	(*DB_ActSign)(nil),                         // 0: server.DB_ActSign
 	(*DB_ActSignArray)(nil),                    // 1: server.DB_ActSignArray
@@ -11803,54 +11932,56 @@ var file_pbdata_proto_goTypes = []interface{}{
 	(*DB_NameGirlArray)(nil),                   // 93: server.DB_NameGirlArray
 	(*DB_NewPlayer)(nil),                       // 94: server.DB_NewPlayer
 	(*DB_NewPlayerArray)(nil),                  // 95: server.DB_NewPlayerArray
-	(*DB_PetSkill)(nil),                        // 96: server.DB_PetSkill
-	(*DB_PetSkillArray)(nil),                   // 97: server.DB_PetSkillArray
-	(*DB_PhoneLottery)(nil),                    // 98: server.DB_PhoneLottery
-	(*DB_PhoneLotteryArray)(nil),               // 99: server.DB_PhoneLotteryArray
-	(*DB_PigBank_Diamond)(nil),                 // 100: server.DB_PigBank_Diamond
-	(*DB_PigBank_DiamondArray)(nil),            // 101: server.DB_PigBank_DiamondArray
-	(*DB_Pigbank_Prop)(nil),                    // 102: server.DB_Pigbank_Prop
-	(*DB_Pigbank_PropArray)(nil),               // 103: server.DB_Pigbank_PropArray
-	(*DB_PlayerExp)(nil),                       // 104: server.DB_PlayerExp
-	(*DB_PlayerExpArray)(nil),                  // 105: server.DB_PlayerExpArray
-	(*DB_PlayerInfo)(nil),                      // 106: server.DB_PlayerInfo
-	(*DB_PlayerInfoArray)(nil),                 // 107: server.DB_PlayerInfoArray
-	(*DB_PlayerType)(nil),                      // 108: server.DB_PlayerType
-	(*DB_PlayerTypeArray)(nil),                 // 109: server.DB_PlayerTypeArray
-	(*DB_PotOdd)(nil),                          // 110: server.DB_PotOdd
-	(*DB_PotOddArray)(nil),                     // 111: server.DB_PotOddArray
-	(*DB_PropExchange)(nil),                    // 112: server.DB_PropExchange
-	(*DB_PropExchangeArray)(nil),               // 113: server.DB_PropExchangeArray
-	(*DB_RankCycle)(nil),                       // 114: server.DB_RankCycle
-	(*DB_RankCycleArray)(nil),                  // 115: server.DB_RankCycleArray
-	(*DB_RankLevel)(nil),                       // 116: server.DB_RankLevel
-	(*DB_RankLevelArray)(nil),                  // 117: server.DB_RankLevelArray
-	(*DB_RankReward)(nil),                      // 118: server.DB_RankReward
-	(*DB_RankRewardArray)(nil),                 // 119: server.DB_RankRewardArray
-	(*DB_Sensitive_Words)(nil),                 // 120: server.DB_Sensitive_Words
-	(*DB_Sensitive_WordsArray)(nil),            // 121: server.DB_Sensitive_WordsArray
-	(*DB_SlotRateWeight)(nil),                  // 122: server.DB_SlotRateWeight
-	(*DB_SlotRateWeightArray)(nil),             // 123: server.DB_SlotRateWeightArray
-	(*DB_SystemChance)(nil),                    // 124: server.DB_SystemChance
-	(*DB_SystemChanceArray)(nil),               // 125: server.DB_SystemChanceArray
-	(*DB_Task)(nil),                            // 126: server.DB_Task
-	(*DB_TaskArray)(nil),                       // 127: server.DB_TaskArray
-	(*DB_ThirdPlatformGameMapping)(nil),        // 128: server.DB_ThirdPlatformGameMapping
-	(*DB_ThirdPlatformGameMappingArray)(nil),   // 129: server.DB_ThirdPlatformGameMappingArray
-	(*DB_Tips)(nil),                            // 130: server.DB_Tips
-	(*DB_TipsArray)(nil),                       // 131: server.DB_TipsArray
-	(*DB_VIP)(nil),                             // 132: server.DB_VIP
-	(*DB_VIPArray)(nil),                        // 133: server.DB_VIPArray
-	nil,                                        // 134: server.DB_CollectBox.ItemIDEntry
-	nil,                                        // 135: server.DB_GiftBox.ItemIDEntry
-	nil,                                        // 136: server.DB_GiftCard.RewardsEntry
-	nil,                                        // 137: server.DB_GiftCard.DayRewardsEntry
-	nil,                                        // 138: server.DB_PetSkill.ItemConsumEntry
-	nil,                                        // 139: server.DB_PropExchange.CostEntry
-	nil,                                        // 140: server.DB_PropExchange.GainEntry
-	nil,                                        // 141: server.DB_Task.AwardEntry
-	nil,                                        // 142: server.DB_VIP.Privilege7Entry
-	nil,                                        // 143: server.DB_VIP.AwardEntry
+	(*DB_PassShow)(nil),                        // 96: server.DB_PassShow
+	(*DB_PassShowArray)(nil),                   // 97: server.DB_PassShowArray
+	(*DB_PetSkill)(nil),                        // 98: server.DB_PetSkill
+	(*DB_PetSkillArray)(nil),                   // 99: server.DB_PetSkillArray
+	(*DB_PhoneLottery)(nil),                    // 100: server.DB_PhoneLottery
+	(*DB_PhoneLotteryArray)(nil),               // 101: server.DB_PhoneLotteryArray
+	(*DB_PigBank_Diamond)(nil),                 // 102: server.DB_PigBank_Diamond
+	(*DB_PigBank_DiamondArray)(nil),            // 103: server.DB_PigBank_DiamondArray
+	(*DB_Pigbank_Prop)(nil),                    // 104: server.DB_Pigbank_Prop
+	(*DB_Pigbank_PropArray)(nil),               // 105: server.DB_Pigbank_PropArray
+	(*DB_PlayerExp)(nil),                       // 106: server.DB_PlayerExp
+	(*DB_PlayerExpArray)(nil),                  // 107: server.DB_PlayerExpArray
+	(*DB_PlayerInfo)(nil),                      // 108: server.DB_PlayerInfo
+	(*DB_PlayerInfoArray)(nil),                 // 109: server.DB_PlayerInfoArray
+	(*DB_PlayerType)(nil),                      // 110: server.DB_PlayerType
+	(*DB_PlayerTypeArray)(nil),                 // 111: server.DB_PlayerTypeArray
+	(*DB_PotOdd)(nil),                          // 112: server.DB_PotOdd
+	(*DB_PotOddArray)(nil),                     // 113: server.DB_PotOddArray
+	(*DB_PropExchange)(nil),                    // 114: server.DB_PropExchange
+	(*DB_PropExchangeArray)(nil),               // 115: server.DB_PropExchangeArray
+	(*DB_RankCycle)(nil),                       // 116: server.DB_RankCycle
+	(*DB_RankCycleArray)(nil),                  // 117: server.DB_RankCycleArray
+	(*DB_RankLevel)(nil),                       // 118: server.DB_RankLevel
+	(*DB_RankLevelArray)(nil),                  // 119: server.DB_RankLevelArray
+	(*DB_RankReward)(nil),                      // 120: server.DB_RankReward
+	(*DB_RankRewardArray)(nil),                 // 121: server.DB_RankRewardArray
+	(*DB_Sensitive_Words)(nil),                 // 122: server.DB_Sensitive_Words
+	(*DB_Sensitive_WordsArray)(nil),            // 123: server.DB_Sensitive_WordsArray
+	(*DB_SlotRateWeight)(nil),                  // 124: server.DB_SlotRateWeight
+	(*DB_SlotRateWeightArray)(nil),             // 125: server.DB_SlotRateWeightArray
+	(*DB_SystemChance)(nil),                    // 126: server.DB_SystemChance
+	(*DB_SystemChanceArray)(nil),               // 127: server.DB_SystemChanceArray
+	(*DB_Task)(nil),                            // 128: server.DB_Task
+	(*DB_TaskArray)(nil),                       // 129: server.DB_TaskArray
+	(*DB_ThirdPlatformGameMapping)(nil),        // 130: server.DB_ThirdPlatformGameMapping
+	(*DB_ThirdPlatformGameMappingArray)(nil),   // 131: server.DB_ThirdPlatformGameMappingArray
+	(*DB_Tips)(nil),                            // 132: server.DB_Tips
+	(*DB_TipsArray)(nil),                       // 133: server.DB_TipsArray
+	(*DB_VIP)(nil),                             // 134: server.DB_VIP
+	(*DB_VIPArray)(nil),                        // 135: server.DB_VIPArray
+	nil,                                        // 136: server.DB_CollectBox.ItemIDEntry
+	nil,                                        // 137: server.DB_GiftBox.ItemIDEntry
+	nil,                                        // 138: server.DB_GiftCard.RewardsEntry
+	nil,                                        // 139: server.DB_GiftCard.DayRewardsEntry
+	nil,                                        // 140: server.DB_PetSkill.ItemConsumEntry
+	nil,                                        // 141: server.DB_PropExchange.CostEntry
+	nil,                                        // 142: server.DB_PropExchange.GainEntry
+	nil,                                        // 143: server.DB_Task.AwardEntry
+	nil,                                        // 144: server.DB_VIP.Privilege7Entry
+	nil,                                        // 145: server.DB_VIP.AwardEntry
 }
 var file_pbdata_proto_depIdxs = []int32{
 	0,   // 0: server.DB_ActSignArray.Arr:type_name -> server.DB_ActSign
@@ -11865,7 +11996,7 @@ var file_pbdata_proto_depIdxs = []int32{
 	18,  // 9: server.DB_ChessMatchRulesArray.Arr:type_name -> server.DB_ChessMatchRules
 	20,  // 10: server.DB_ChessRankArray.Arr:type_name -> server.DB_ChessRank
 	22,  // 11: server.DB_ClientVerArray.Arr:type_name -> server.DB_ClientVer
-	134, // 12: server.DB_CollectBox.ItemID:type_name -> server.DB_CollectBox.ItemIDEntry
+	136, // 12: server.DB_CollectBox.ItemID:type_name -> server.DB_CollectBox.ItemIDEntry
 	24,  // 13: server.DB_CollectBoxArray.Arr:type_name -> server.DB_CollectBox
 	26,  // 14: server.DB_CollectBoxGainArray.Arr:type_name -> server.DB_CollectBoxGain
 	28,  // 15: server.DB_CrashSearchArray.Arr:type_name -> server.DB_CrashSearch
@@ -11890,10 +12021,10 @@ var file_pbdata_proto_depIdxs = []int32{
 	66,  // 34: server.DB_Game_IntroductionArray.Arr:type_name -> server.DB_Game_Introduction
 	68,  // 35: server.DB_Game_PetArray.Arr:type_name -> server.DB_Game_Pet
 	70,  // 36: server.DB_Game_RoleArray.Arr:type_name -> server.DB_Game_Role
-	135, // 37: server.DB_GiftBox.ItemID:type_name -> server.DB_GiftBox.ItemIDEntry
+	137, // 37: server.DB_GiftBox.ItemID:type_name -> server.DB_GiftBox.ItemIDEntry
 	72,  // 38: server.DB_GiftBoxArray.Arr:type_name -> server.DB_GiftBox
-	136, // 39: server.DB_GiftCard.Rewards:type_name -> server.DB_GiftCard.RewardsEntry
-	137, // 40: server.DB_GiftCard.DayRewards:type_name -> server.DB_GiftCard.DayRewardsEntry
+	138, // 39: server.DB_GiftCard.Rewards:type_name -> server.DB_GiftCard.RewardsEntry
+	139, // 40: server.DB_GiftCard.DayRewards:type_name -> server.DB_GiftCard.DayRewardsEntry
 	74,  // 41: server.DB_GiftCardArray.Arr:type_name -> server.DB_GiftCard
 	76,  // 42: server.DB_IceAgeElementRateArray.Arr:type_name -> server.DB_IceAgeElementRate
 	78,  // 43: server.DB_Legend_OddsArray.Arr:type_name -> server.DB_Legend_Odds
@@ -11905,36 +12036,37 @@ var file_pbdata_proto_depIdxs = []int32{
 	90,  // 49: server.DB_NameBoyArray.Arr:type_name -> server.DB_NameBoy
 	92,  // 50: server.DB_NameGirlArray.Arr:type_name -> server.DB_NameGirl
 	94,  // 51: server.DB_NewPlayerArray.Arr:type_name -> server.DB_NewPlayer
-	138, // 52: server.DB_PetSkill.ItemConsum:type_name -> server.DB_PetSkill.ItemConsumEntry
-	96,  // 53: server.DB_PetSkillArray.Arr:type_name -> server.DB_PetSkill
-	98,  // 54: server.DB_PhoneLotteryArray.Arr:type_name -> server.DB_PhoneLottery
-	100, // 55: server.DB_PigBank_DiamondArray.Arr:type_name -> server.DB_PigBank_Diamond
-	102, // 56: server.DB_Pigbank_PropArray.Arr:type_name -> server.DB_Pigbank_Prop
-	104, // 57: server.DB_PlayerExpArray.Arr:type_name -> server.DB_PlayerExp
-	106, // 58: server.DB_PlayerInfoArray.Arr:type_name -> server.DB_PlayerInfo
-	108, // 59: server.DB_PlayerTypeArray.Arr:type_name -> server.DB_PlayerType
-	110, // 60: server.DB_PotOddArray.Arr:type_name -> server.DB_PotOdd
-	139, // 61: server.DB_PropExchange.Cost:type_name -> server.DB_PropExchange.CostEntry
-	140, // 62: server.DB_PropExchange.Gain:type_name -> server.DB_PropExchange.GainEntry
-	112, // 63: server.DB_PropExchangeArray.Arr:type_name -> server.DB_PropExchange
-	114, // 64: server.DB_RankCycleArray.Arr:type_name -> server.DB_RankCycle
-	116, // 65: server.DB_RankLevelArray.Arr:type_name -> server.DB_RankLevel
-	118, // 66: server.DB_RankRewardArray.Arr:type_name -> server.DB_RankReward
-	120, // 67: server.DB_Sensitive_WordsArray.Arr:type_name -> server.DB_Sensitive_Words
-	122, // 68: server.DB_SlotRateWeightArray.Arr:type_name -> server.DB_SlotRateWeight
-	124, // 69: server.DB_SystemChanceArray.Arr:type_name -> server.DB_SystemChance
-	141, // 70: server.DB_Task.Award:type_name -> server.DB_Task.AwardEntry
-	126, // 71: server.DB_TaskArray.Arr:type_name -> server.DB_Task
-	128, // 72: server.DB_ThirdPlatformGameMappingArray.Arr:type_name -> server.DB_ThirdPlatformGameMapping
-	130, // 73: server.DB_TipsArray.Arr:type_name -> server.DB_Tips
-	142, // 74: server.DB_VIP.Privilege7:type_name -> server.DB_VIP.Privilege7Entry
-	143, // 75: server.DB_VIP.Award:type_name -> server.DB_VIP.AwardEntry
-	132, // 76: server.DB_VIPArray.Arr:type_name -> server.DB_VIP
-	77,  // [77:77] is the sub-list for method output_type
-	77,  // [77:77] is the sub-list for method input_type
-	77,  // [77:77] is the sub-list for extension type_name
-	77,  // [77:77] is the sub-list for extension extendee
-	0,   // [0:77] is the sub-list for field type_name
+	96,  // 52: server.DB_PassShowArray.Arr:type_name -> server.DB_PassShow
+	140, // 53: server.DB_PetSkill.ItemConsum:type_name -> server.DB_PetSkill.ItemConsumEntry
+	98,  // 54: server.DB_PetSkillArray.Arr:type_name -> server.DB_PetSkill
+	100, // 55: server.DB_PhoneLotteryArray.Arr:type_name -> server.DB_PhoneLottery
+	102, // 56: server.DB_PigBank_DiamondArray.Arr:type_name -> server.DB_PigBank_Diamond
+	104, // 57: server.DB_Pigbank_PropArray.Arr:type_name -> server.DB_Pigbank_Prop
+	106, // 58: server.DB_PlayerExpArray.Arr:type_name -> server.DB_PlayerExp
+	108, // 59: server.DB_PlayerInfoArray.Arr:type_name -> server.DB_PlayerInfo
+	110, // 60: server.DB_PlayerTypeArray.Arr:type_name -> server.DB_PlayerType
+	112, // 61: server.DB_PotOddArray.Arr:type_name -> server.DB_PotOdd
+	141, // 62: server.DB_PropExchange.Cost:type_name -> server.DB_PropExchange.CostEntry
+	142, // 63: server.DB_PropExchange.Gain:type_name -> server.DB_PropExchange.GainEntry
+	114, // 64: server.DB_PropExchangeArray.Arr:type_name -> server.DB_PropExchange
+	116, // 65: server.DB_RankCycleArray.Arr:type_name -> server.DB_RankCycle
+	118, // 66: server.DB_RankLevelArray.Arr:type_name -> server.DB_RankLevel
+	120, // 67: server.DB_RankRewardArray.Arr:type_name -> server.DB_RankReward
+	122, // 68: server.DB_Sensitive_WordsArray.Arr:type_name -> server.DB_Sensitive_Words
+	124, // 69: server.DB_SlotRateWeightArray.Arr:type_name -> server.DB_SlotRateWeight
+	126, // 70: server.DB_SystemChanceArray.Arr:type_name -> server.DB_SystemChance
+	143, // 71: server.DB_Task.Award:type_name -> server.DB_Task.AwardEntry
+	128, // 72: server.DB_TaskArray.Arr:type_name -> server.DB_Task
+	130, // 73: server.DB_ThirdPlatformGameMappingArray.Arr:type_name -> server.DB_ThirdPlatformGameMapping
+	132, // 74: server.DB_TipsArray.Arr:type_name -> server.DB_Tips
+	144, // 75: server.DB_VIP.Privilege7:type_name -> server.DB_VIP.Privilege7Entry
+	145, // 76: server.DB_VIP.Award:type_name -> server.DB_VIP.AwardEntry
+	134, // 77: server.DB_VIPArray.Arr:type_name -> server.DB_VIP
+	78,  // [78:78] is the sub-list for method output_type
+	78,  // [78:78] is the sub-list for method input_type
+	78,  // [78:78] is the sub-list for extension type_name
+	78,  // [78:78] is the sub-list for extension extendee
+	0,   // [0:78] is the sub-list for field type_name
 }
 
 func init() { file_pbdata_proto_init() }
@@ -13096,7 +13228,7 @@ func file_pbdata_proto_init() {
 			}
 		}
 		file_pbdata_proto_msgTypes[96].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*DB_PetSkill); i {
+			switch v := v.(*DB_PassShow); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -13108,7 +13240,7 @@ func file_pbdata_proto_init() {
 			}
 		}
 		file_pbdata_proto_msgTypes[97].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*DB_PetSkillArray); i {
+			switch v := v.(*DB_PassShowArray); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -13120,7 +13252,7 @@ func file_pbdata_proto_init() {
 			}
 		}
 		file_pbdata_proto_msgTypes[98].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*DB_PhoneLottery); i {
+			switch v := v.(*DB_PetSkill); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -13132,7 +13264,7 @@ func file_pbdata_proto_init() {
 			}
 		}
 		file_pbdata_proto_msgTypes[99].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*DB_PhoneLotteryArray); i {
+			switch v := v.(*DB_PetSkillArray); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -13144,7 +13276,7 @@ func file_pbdata_proto_init() {
 			}
 		}
 		file_pbdata_proto_msgTypes[100].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*DB_PigBank_Diamond); i {
+			switch v := v.(*DB_PhoneLottery); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -13156,7 +13288,7 @@ func file_pbdata_proto_init() {
 			}
 		}
 		file_pbdata_proto_msgTypes[101].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*DB_PigBank_DiamondArray); i {
+			switch v := v.(*DB_PhoneLotteryArray); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -13168,7 +13300,7 @@ func file_pbdata_proto_init() {
 			}
 		}
 		file_pbdata_proto_msgTypes[102].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*DB_Pigbank_Prop); i {
+			switch v := v.(*DB_PigBank_Diamond); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -13180,7 +13312,7 @@ func file_pbdata_proto_init() {
 			}
 		}
 		file_pbdata_proto_msgTypes[103].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*DB_Pigbank_PropArray); i {
+			switch v := v.(*DB_PigBank_DiamondArray); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -13192,7 +13324,7 @@ func file_pbdata_proto_init() {
 			}
 		}
 		file_pbdata_proto_msgTypes[104].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*DB_PlayerExp); i {
+			switch v := v.(*DB_Pigbank_Prop); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -13204,7 +13336,7 @@ func file_pbdata_proto_init() {
 			}
 		}
 		file_pbdata_proto_msgTypes[105].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*DB_PlayerExpArray); i {
+			switch v := v.(*DB_Pigbank_PropArray); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -13216,7 +13348,7 @@ func file_pbdata_proto_init() {
 			}
 		}
 		file_pbdata_proto_msgTypes[106].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*DB_PlayerInfo); i {
+			switch v := v.(*DB_PlayerExp); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -13228,7 +13360,7 @@ func file_pbdata_proto_init() {
 			}
 		}
 		file_pbdata_proto_msgTypes[107].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*DB_PlayerInfoArray); i {
+			switch v := v.(*DB_PlayerExpArray); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -13240,7 +13372,7 @@ func file_pbdata_proto_init() {
 			}
 		}
 		file_pbdata_proto_msgTypes[108].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*DB_PlayerType); i {
+			switch v := v.(*DB_PlayerInfo); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -13252,7 +13384,7 @@ func file_pbdata_proto_init() {
 			}
 		}
 		file_pbdata_proto_msgTypes[109].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*DB_PlayerTypeArray); i {
+			switch v := v.(*DB_PlayerInfoArray); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -13264,7 +13396,7 @@ func file_pbdata_proto_init() {
 			}
 		}
 		file_pbdata_proto_msgTypes[110].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*DB_PotOdd); i {
+			switch v := v.(*DB_PlayerType); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -13276,7 +13408,7 @@ func file_pbdata_proto_init() {
 			}
 		}
 		file_pbdata_proto_msgTypes[111].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*DB_PotOddArray); i {
+			switch v := v.(*DB_PlayerTypeArray); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -13288,7 +13420,7 @@ func file_pbdata_proto_init() {
 			}
 		}
 		file_pbdata_proto_msgTypes[112].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*DB_PropExchange); i {
+			switch v := v.(*DB_PotOdd); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -13300,7 +13432,7 @@ func file_pbdata_proto_init() {
 			}
 		}
 		file_pbdata_proto_msgTypes[113].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*DB_PropExchangeArray); i {
+			switch v := v.(*DB_PotOddArray); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -13312,7 +13444,7 @@ func file_pbdata_proto_init() {
 			}
 		}
 		file_pbdata_proto_msgTypes[114].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*DB_RankCycle); i {
+			switch v := v.(*DB_PropExchange); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -13324,7 +13456,7 @@ func file_pbdata_proto_init() {
 			}
 		}
 		file_pbdata_proto_msgTypes[115].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*DB_RankCycleArray); i {
+			switch v := v.(*DB_PropExchangeArray); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -13336,7 +13468,7 @@ func file_pbdata_proto_init() {
 			}
 		}
 		file_pbdata_proto_msgTypes[116].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*DB_RankLevel); i {
+			switch v := v.(*DB_RankCycle); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -13348,7 +13480,7 @@ func file_pbdata_proto_init() {
 			}
 		}
 		file_pbdata_proto_msgTypes[117].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*DB_RankLevelArray); i {
+			switch v := v.(*DB_RankCycleArray); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -13360,7 +13492,7 @@ func file_pbdata_proto_init() {
 			}
 		}
 		file_pbdata_proto_msgTypes[118].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*DB_RankReward); i {
+			switch v := v.(*DB_RankLevel); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -13372,7 +13504,7 @@ func file_pbdata_proto_init() {
 			}
 		}
 		file_pbdata_proto_msgTypes[119].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*DB_RankRewardArray); i {
+			switch v := v.(*DB_RankLevelArray); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -13384,7 +13516,7 @@ func file_pbdata_proto_init() {
 			}
 		}
 		file_pbdata_proto_msgTypes[120].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*DB_Sensitive_Words); i {
+			switch v := v.(*DB_RankReward); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -13396,7 +13528,7 @@ func file_pbdata_proto_init() {
 			}
 		}
 		file_pbdata_proto_msgTypes[121].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*DB_Sensitive_WordsArray); i {
+			switch v := v.(*DB_RankRewardArray); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -13408,7 +13540,7 @@ func file_pbdata_proto_init() {
 			}
 		}
 		file_pbdata_proto_msgTypes[122].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*DB_SlotRateWeight); i {
+			switch v := v.(*DB_Sensitive_Words); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -13420,7 +13552,7 @@ func file_pbdata_proto_init() {
 			}
 		}
 		file_pbdata_proto_msgTypes[123].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*DB_SlotRateWeightArray); i {
+			switch v := v.(*DB_Sensitive_WordsArray); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -13432,7 +13564,7 @@ func file_pbdata_proto_init() {
 			}
 		}
 		file_pbdata_proto_msgTypes[124].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*DB_SystemChance); i {
+			switch v := v.(*DB_SlotRateWeight); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -13444,7 +13576,7 @@ func file_pbdata_proto_init() {
 			}
 		}
 		file_pbdata_proto_msgTypes[125].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*DB_SystemChanceArray); i {
+			switch v := v.(*DB_SlotRateWeightArray); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -13456,7 +13588,7 @@ func file_pbdata_proto_init() {
 			}
 		}
 		file_pbdata_proto_msgTypes[126].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*DB_Task); i {
+			switch v := v.(*DB_SystemChance); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -13468,7 +13600,7 @@ func file_pbdata_proto_init() {
 			}
 		}
 		file_pbdata_proto_msgTypes[127].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*DB_TaskArray); i {
+			switch v := v.(*DB_SystemChanceArray); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -13480,7 +13612,7 @@ func file_pbdata_proto_init() {
 			}
 		}
 		file_pbdata_proto_msgTypes[128].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*DB_ThirdPlatformGameMapping); i {
+			switch v := v.(*DB_Task); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -13492,7 +13624,7 @@ func file_pbdata_proto_init() {
 			}
 		}
 		file_pbdata_proto_msgTypes[129].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*DB_ThirdPlatformGameMappingArray); i {
+			switch v := v.(*DB_TaskArray); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -13504,7 +13636,7 @@ func file_pbdata_proto_init() {
 			}
 		}
 		file_pbdata_proto_msgTypes[130].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*DB_Tips); i {
+			switch v := v.(*DB_ThirdPlatformGameMapping); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -13516,7 +13648,7 @@ func file_pbdata_proto_init() {
 			}
 		}
 		file_pbdata_proto_msgTypes[131].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*DB_TipsArray); i {
+			switch v := v.(*DB_ThirdPlatformGameMappingArray); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -13528,7 +13660,7 @@ func file_pbdata_proto_init() {
 			}
 		}
 		file_pbdata_proto_msgTypes[132].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*DB_VIP); i {
+			switch v := v.(*DB_Tips); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -13540,6 +13672,30 @@ func file_pbdata_proto_init() {
 			}
 		}
 		file_pbdata_proto_msgTypes[133].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*DB_TipsArray); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_pbdata_proto_msgTypes[134].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*DB_VIP); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_pbdata_proto_msgTypes[135].Exporter = func(v interface{}, i int) interface{} {
 			switch v := v.(*DB_VIPArray); i {
 			case 0:
 				return &v.state
@@ -13558,7 +13714,7 @@ func file_pbdata_proto_init() {
 			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
 			RawDescriptor: file_pbdata_proto_rawDesc,
 			NumEnums:      0,
-			NumMessages:   144,
+			NumMessages:   146,
 			NumExtensions: 0,
 			NumServices:   0,
 		},
diff --git a/protocol/server/pbdata.proto b/protocol/server/pbdata.proto
index ac4ed32..9a7caab 100644
--- a/protocol/server/pbdata.proto
+++ b/protocol/server/pbdata.proto
@@ -1237,6 +1237,22 @@ message DB_NewPlayerArray {
     repeated DB_NewPlayer Arr = 1;
 }
 
+message DB_PassShow {
+
+	int32 Id = 1;
+
+	int32 ShowType = 2;
+
+	int32 ShowVolume = 3;
+
+	int32 Location = 4;
+
+}
+
+message DB_PassShowArray {
+    repeated DB_PassShow Arr = 1;
+}
+
 message DB_PetSkill {
 
 	int32 Id = 1;
diff --git a/protocol/task/task.pb.go b/protocol/task/task.pb.go
index ccf4eb6..519d21e 100644
--- a/protocol/task/task.pb.go
+++ b/protocol/task/task.pb.go
@@ -332,8 +332,8 @@ type CSTaskReward struct {
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
-	Tp int32 `protobuf:"varint,1,opt,name=Tp,proto3" json:"Tp,omitempty"` // 任务类型 1:日常任务 2:周活跃任务 3:新手任务 4:邀请任务 5:成就系统
-	Id int32 `protobuf:"varint,2,opt,name=Id,proto3" json:"Id,omitempty"` // 任务id
+	Tp int32 `protobuf:"varint,1,opt,name=Tp,proto3" json:"Tp,omitempty"` // 任务类型 1:日常任务 2:周活跃任务 3:新手任务 4:邀请任务 5:成就系统 6:赛季通行证任务
+	Id int32 `protobuf:"varint,2,opt,name=Id,proto3" json:"Id,omitempty"` // 任务id; 0 表示一键领取
 }
 
 func (x *CSTaskReward) Reset() {
@@ -388,9 +388,10 @@ type SCTaskReward struct {
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
-	OpCode OpResultCode `protobuf:"varint,1,opt,name=OpCode,proto3,enum=task.OpResultCode" json:"OpCode,omitempty"` // 操作码
-	Tp     int32        `protobuf:"varint,2,opt,name=Tp,proto3" json:"Tp,omitempty"`                                // 任务类型
-	Id     int32        `protobuf:"varint,3,opt,name=Id,proto3" json:"Id,omitempty"`                                // 任务id
+	OpCode OpResultCode    `protobuf:"varint,1,opt,name=OpCode,proto3,enum=task.OpResultCode" json:"OpCode,omitempty"`                                                                   // 操作码
+	Tp     int32           `protobuf:"varint,2,opt,name=Tp,proto3" json:"Tp,omitempty"`                                                                                                  // 任务类型
+	Id     int32           `protobuf:"varint,3,opt,name=Id,proto3" json:"Id,omitempty"`                                                                                                  // 任务id
+	Reward map[int64]int64 `protobuf:"bytes,5,rep,name=Reward,proto3" json:"Reward,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` // 奖励
 }
 
 func (x *SCTaskReward) Reset() {
@@ -446,6 +447,13 @@ func (x *SCTaskReward) GetId() int32 {
 	return 0
 }
 
+func (x *SCTaskReward) GetReward() map[int64]int64 {
+	if x != nil {
+		return x.Reward
+	}
+	return nil
+}
+
 // 任务变更通知
 // PACKET_SCTaskChange
 type SCTaskChange struct {
@@ -640,45 +648,52 @@ var file_task_proto_rawDesc = []byte{
 	0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x2e, 0x0a, 0x0c, 0x43, 0x53,
 	0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x54, 0x70,
 	0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x54, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64,
-	0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x22, 0x5a, 0x0a, 0x0c, 0x53, 0x43,
-	0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, 0x2a, 0x0a, 0x06, 0x4f, 0x70,
+	0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x22, 0xcd, 0x01, 0x0a, 0x0c, 0x53,
+	0x43, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, 0x2a, 0x0a, 0x06, 0x4f,
+	0x70, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x74, 0x61,
+	0x73, 0x6b, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52,
+	0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x54, 0x70, 0x18, 0x02, 0x20,
+	0x01, 0x28, 0x05, 0x52, 0x02, 0x54, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x03, 0x20,
+	0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x36, 0x0a, 0x06, 0x52, 0x65, 0x77, 0x61, 0x72,
+	0x64, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x53,
+	0x43, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x52, 0x65, 0x77, 0x61,
+	0x72, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x1a,
+	0x39, 0x0a, 0x0b, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10,
+	0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79,
+	0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52,
+	0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x42, 0x0a, 0x0c, 0x53, 0x43,
+	0x54, 0x61, 0x73, 0x6b, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x54, 0x70,
+	0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x54, 0x70, 0x12, 0x22, 0x0a, 0x04, 0x4c, 0x69,
+	0x73, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e,
+	0x54, 0x61, 0x73, 0x6b, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x48,
+	0x0a, 0x0e, 0x43, 0x53, 0x54, 0x61, 0x73, 0x6b, 0x44, 0x65, 0x62, 0x75, 0x67, 0x49, 0x6e, 0x63,
+	0x12, 0x0e, 0x0a, 0x02, 0x54, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x54, 0x70,
+	0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64,
+	0x12, 0x16, 0x0a, 0x06, 0x41, 0x64, 0x64, 0x4e, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05,
+	0x52, 0x06, 0x41, 0x64, 0x64, 0x4e, 0x75, 0x6d, 0x22, 0x3c, 0x0a, 0x0e, 0x53, 0x43, 0x54, 0x61,
+	0x73, 0x6b, 0x44, 0x65, 0x62, 0x75, 0x67, 0x49, 0x6e, 0x63, 0x12, 0x2a, 0x0a, 0x06, 0x4f, 0x70,
 	0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x74, 0x61, 0x73,
 	0x6b, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x06,
-	0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x54, 0x70, 0x18, 0x02, 0x20, 0x01,
-	0x28, 0x05, 0x52, 0x02, 0x54, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01,
-	0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x22, 0x42, 0x0a, 0x0c, 0x53, 0x43, 0x54, 0x61, 0x73, 0x6b,
-	0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x54, 0x70, 0x18, 0x01, 0x20, 0x01,
-	0x28, 0x05, 0x52, 0x02, 0x54, 0x70, 0x12, 0x22, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x02,
-	0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x54, 0x61, 0x73, 0x6b,
-	0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x48, 0x0a, 0x0e, 0x43, 0x53,
-	0x54, 0x61, 0x73, 0x6b, 0x44, 0x65, 0x62, 0x75, 0x67, 0x49, 0x6e, 0x63, 0x12, 0x0e, 0x0a, 0x02,
-	0x54, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x54, 0x70, 0x12, 0x0e, 0x0a, 0x02,
-	0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06,
-	0x41, 0x64, 0x64, 0x4e, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x41, 0x64,
-	0x64, 0x4e, 0x75, 0x6d, 0x22, 0x3c, 0x0a, 0x0e, 0x53, 0x43, 0x54, 0x61, 0x73, 0x6b, 0x44, 0x65,
-	0x62, 0x75, 0x67, 0x49, 0x6e, 0x63, 0x12, 0x2a, 0x0a, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65,
-	0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x4f, 0x70,
-	0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x06, 0x4f, 0x70, 0x43, 0x6f,
-	0x64, 0x65, 0x2a, 0x30, 0x0a, 0x0c, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f,
-	0x64, 0x65, 0x12, 0x10, 0x0a, 0x0c, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x53, 0x75, 0x63, 0x63, 0x65,
-	0x73, 0x73, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x45, 0x72, 0x72,
-	0x6f, 0x72, 0x10, 0x01, 0x2a, 0xd2, 0x01, 0x0a, 0x0c, 0x54, 0x61, 0x73, 0x6b, 0x50, 0x61, 0x63,
-	0x6b, 0x65, 0x74, 0x49, 0x44, 0x12, 0x14, 0x0a, 0x10, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f,
-	0x54, 0x61, 0x73, 0x6b, 0x5f, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x16, 0x0a, 0x11, 0x50,
-	0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x54, 0x61, 0x73, 0x6b, 0x4c, 0x69, 0x73, 0x74,
-	0x10, 0xe0, 0x12, 0x12, 0x16, 0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43,
-	0x54, 0x61, 0x73, 0x6b, 0x4c, 0x69, 0x73, 0x74, 0x10, 0xe1, 0x12, 0x12, 0x18, 0x0a, 0x13, 0x50,
-	0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x77, 0x61,
-	0x72, 0x64, 0x10, 0xe2, 0x12, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f,
-	0x53, 0x43, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x10, 0xe3, 0x12, 0x12,
-	0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x61, 0x73, 0x6b,
-	0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x10, 0xe4, 0x12, 0x12, 0x16, 0x0a, 0x11, 0x50, 0x41, 0x43,
-	0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x44, 0x65, 0x62, 0x75, 0x67, 0x49, 0x6e, 0x63, 0x10, 0xe5,
-	0x12, 0x12, 0x16, 0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x44, 0x65,
-	0x62, 0x75, 0x67, 0x49, 0x6e, 0x63, 0x10, 0xe6, 0x12, 0x42, 0x24, 0x5a, 0x22, 0x6d, 0x6f, 0x6e,
-	0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, 0x6d,
-	0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x74, 0x61, 0x73, 0x6b, 0x62,
-	0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+	0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x2a, 0x30, 0x0a, 0x0c, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75,
+	0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x0c, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x53,
+	0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x4f, 0x50, 0x52, 0x43,
+	0x5f, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x10, 0x01, 0x2a, 0xd2, 0x01, 0x0a, 0x0c, 0x54, 0x61, 0x73,
+	0x6b, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x12, 0x14, 0x0a, 0x10, 0x50, 0x41, 0x43,
+	0x4b, 0x45, 0x54, 0x5f, 0x54, 0x61, 0x73, 0x6b, 0x5f, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12,
+	0x16, 0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x54, 0x61, 0x73, 0x6b,
+	0x4c, 0x69, 0x73, 0x74, 0x10, 0xe0, 0x12, 0x12, 0x16, 0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b, 0x45,
+	0x54, 0x5f, 0x53, 0x43, 0x54, 0x61, 0x73, 0x6b, 0x4c, 0x69, 0x73, 0x74, 0x10, 0xe1, 0x12, 0x12,
+	0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x54, 0x61, 0x73, 0x6b,
+	0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x10, 0xe2, 0x12, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43,
+	0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64,
+	0x10, 0xe3, 0x12, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43,
+	0x54, 0x61, 0x73, 0x6b, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x10, 0xe4, 0x12, 0x12, 0x16, 0x0a,
+	0x11, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x44, 0x65, 0x62, 0x75, 0x67, 0x49,
+	0x6e, 0x63, 0x10, 0xe5, 0x12, 0x12, 0x16, 0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f,
+	0x53, 0x43, 0x44, 0x65, 0x62, 0x75, 0x67, 0x49, 0x6e, 0x63, 0x10, 0xe6, 0x12, 0x42, 0x24, 0x5a,
+	0x22, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d,
+	0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x74,
+	0x61, 0x73, 0x6b, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 }
 
 var (
@@ -694,7 +709,7 @@ func file_task_proto_rawDescGZIP() []byte {
 }
 
 var file_task_proto_enumTypes = make([]protoimpl.EnumInfo, 2)
-var file_task_proto_msgTypes = make([]protoimpl.MessageInfo, 9)
+var file_task_proto_msgTypes = make([]protoimpl.MessageInfo, 10)
 var file_task_proto_goTypes = []interface{}{
 	(OpResultCode)(0),      // 0: task.OpResultCode
 	(TaskPacketID)(0),      // 1: task.TaskPacketID
@@ -707,18 +722,20 @@ var file_task_proto_goTypes = []interface{}{
 	(*CSTaskDebugInc)(nil), // 8: task.CSTaskDebugInc
 	(*SCTaskDebugInc)(nil), // 9: task.SCTaskDebugInc
 	nil,                    // 10: task.TaskData.RewardEntry
+	nil,                    // 11: task.SCTaskReward.RewardEntry
 }
 var file_task_proto_depIdxs = []int32{
 	10, // 0: task.TaskData.Reward:type_name -> task.TaskData.RewardEntry
 	2,  // 1: task.SCTaskList.List:type_name -> task.TaskData
 	0,  // 2: task.SCTaskReward.OpCode:type_name -> task.OpResultCode
-	2,  // 3: task.SCTaskChange.List:type_name -> task.TaskData
-	0,  // 4: task.SCTaskDebugInc.OpCode:type_name -> task.OpResultCode
-	5,  // [5:5] is the sub-list for method output_type
-	5,  // [5:5] is the sub-list for method input_type
-	5,  // [5:5] is the sub-list for extension type_name
-	5,  // [5:5] is the sub-list for extension extendee
-	0,  // [0:5] is the sub-list for field type_name
+	11, // 3: task.SCTaskReward.Reward:type_name -> task.SCTaskReward.RewardEntry
+	2,  // 4: task.SCTaskChange.List:type_name -> task.TaskData
+	0,  // 5: task.SCTaskDebugInc.OpCode:type_name -> task.OpResultCode
+	6,  // [6:6] is the sub-list for method output_type
+	6,  // [6:6] is the sub-list for method input_type
+	6,  // [6:6] is the sub-list for extension type_name
+	6,  // [6:6] is the sub-list for extension extendee
+	0,  // [0:6] is the sub-list for field type_name
 }
 
 func init() { file_task_proto_init() }
@@ -830,7 +847,7 @@ func file_task_proto_init() {
 			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
 			RawDescriptor: file_task_proto_rawDesc,
 			NumEnums:      2,
-			NumMessages:   9,
+			NumMessages:   10,
 			NumExtensions: 0,
 			NumServices:   0,
 		},
diff --git a/protocol/task/task.proto b/protocol/task/task.proto
index 4246c53..2f7f359 100644
--- a/protocol/task/task.proto
+++ b/protocol/task/task.proto
@@ -44,14 +44,15 @@ message SCTaskList{
 // 领取任务奖励
 // PACKET_CSTaskReward
 message CSTaskReward{
-		int32 Tp = 1; // 任务类型 1:日常任务 2:周活跃任务 3:新手任务 4:邀请任务 5:成就系统
-    int32 Id = 2; // 任务id
+		int32 Tp = 1; // 任务类型 1:日常任务 2:周活跃任务 3:新手任务 4:邀请任务 5:成就系统 6:赛季通行证任务
+    int32 Id = 2; // 任务id; 0 表示一键领取
 }
 // PACKET_SCTaskReward
 message SCTaskReward{
 	OpResultCode OpCode = 1; // 操作码
 	int32 Tp = 2; // 任务类型
 	int32 Id = 3; // 任务id
+	map<int64, int64> Reward = 5; // 奖励
 }
 
 // 任务变更通知
diff --git a/protocol/webapi/common.pb.go b/protocol/webapi/common.pb.go
index 1d31b42..091a902 100644
--- a/protocol/webapi/common.pb.go
+++ b/protocol/webapi/common.pb.go
@@ -6203,6 +6203,397 @@ func (x *ActInviteConfig) GetAwards3() []*RankAward {
 	return nil
 }
 
+// 等级奖励
+type PermitLevelConfig struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Rank   int32       `protobuf:"varint,1,opt,name=Rank,proto3" json:"Rank,omitempty"`    // 等级
+	Score  int64       `protobuf:"varint,2,opt,name=Score,proto3" json:"Score,omitempty"`  // 积分
+	Award1 []*ItemInfo `protobuf:"bytes,3,rep,name=Award1,proto3" json:"Award1,omitempty"` // 普通奖励
+	Award2 []*ItemInfo `protobuf:"bytes,4,rep,name=Award2,proto3" json:"Award2,omitempty"` // 典藏奖励
+}
+
+func (x *PermitLevelConfig) Reset() {
+	*x = PermitLevelConfig{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_common_proto_msgTypes[61]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *PermitLevelConfig) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*PermitLevelConfig) ProtoMessage() {}
+
+func (x *PermitLevelConfig) ProtoReflect() protoreflect.Message {
+	mi := &file_common_proto_msgTypes[61]
+	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 PermitLevelConfig.ProtoReflect.Descriptor instead.
+func (*PermitLevelConfig) Descriptor() ([]byte, []int) {
+	return file_common_proto_rawDescGZIP(), []int{61}
+}
+
+func (x *PermitLevelConfig) GetRank() int32 {
+	if x != nil {
+		return x.Rank
+	}
+	return 0
+}
+
+func (x *PermitLevelConfig) GetScore() int64 {
+	if x != nil {
+		return x.Score
+	}
+	return 0
+}
+
+func (x *PermitLevelConfig) GetAward1() []*ItemInfo {
+	if x != nil {
+		return x.Award1
+	}
+	return nil
+}
+
+func (x *PermitLevelConfig) GetAward2() []*ItemInfo {
+	if x != nil {
+		return x.Award2
+	}
+	return nil
+}
+
+// 兑换配置
+type PermitExchangeConfig struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Id       int32       `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"`             // 商品id
+	SortId   int32       `protobuf:"varint,2,opt,name=SortId,proto3" json:"SortId,omitempty"`     // 排序序号
+	Gain     []*ItemInfo `protobuf:"bytes,3,rep,name=Gain,proto3" json:"Gain,omitempty"`          // 获得商品
+	Cost     []*ItemInfo `protobuf:"bytes,4,rep,name=Cost,proto3" json:"Cost,omitempty"`          // 消耗
+	IsPermit bool        `protobuf:"varint,5,opt,name=IsPermit,proto3" json:"IsPermit,omitempty"` // 是否需要典藏通行证
+	Level    int64       `protobuf:"varint,6,opt,name=Level,proto3" json:"Level,omitempty"`       // 达到等级
+	Times    int64       `protobuf:"varint,7,opt,name=Times,proto3" json:"Times,omitempty"`       // 最大兑换次数
+	IsShow   bool        `protobuf:"varint,8,opt,name=IsShow,proto3" json:"IsShow,omitempty"`     // 开关，true 开启， false 关闭
+}
+
+func (x *PermitExchangeConfig) Reset() {
+	*x = PermitExchangeConfig{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_common_proto_msgTypes[62]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *PermitExchangeConfig) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*PermitExchangeConfig) ProtoMessage() {}
+
+func (x *PermitExchangeConfig) ProtoReflect() protoreflect.Message {
+	mi := &file_common_proto_msgTypes[62]
+	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 PermitExchangeConfig.ProtoReflect.Descriptor instead.
+func (*PermitExchangeConfig) Descriptor() ([]byte, []int) {
+	return file_common_proto_rawDescGZIP(), []int{62}
+}
+
+func (x *PermitExchangeConfig) GetId() int32 {
+	if x != nil {
+		return x.Id
+	}
+	return 0
+}
+
+func (x *PermitExchangeConfig) GetSortId() int32 {
+	if x != nil {
+		return x.SortId
+	}
+	return 0
+}
+
+func (x *PermitExchangeConfig) GetGain() []*ItemInfo {
+	if x != nil {
+		return x.Gain
+	}
+	return nil
+}
+
+func (x *PermitExchangeConfig) GetCost() []*ItemInfo {
+	if x != nil {
+		return x.Cost
+	}
+	return nil
+}
+
+func (x *PermitExchangeConfig) GetIsPermit() bool {
+	if x != nil {
+		return x.IsPermit
+	}
+	return false
+}
+
+func (x *PermitExchangeConfig) GetLevel() int64 {
+	if x != nil {
+		return x.Level
+	}
+	return 0
+}
+
+func (x *PermitExchangeConfig) GetTimes() int64 {
+	if x != nil {
+		return x.Times
+	}
+	return 0
+}
+
+func (x *PermitExchangeConfig) GetIsShow() bool {
+	if x != nil {
+		return x.IsShow
+	}
+	return false
+}
+
+// 排行配置
+type PermitRankConfig struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Start  int32       `protobuf:"varint,1,opt,name=Start,proto3" json:"Start,omitempty"`  // 开始排名；第一名为0
+	End    int32       `protobuf:"varint,2,opt,name=End,proto3" json:"End,omitempty"`      // 结束排名
+	ItemId []*ItemInfo `protobuf:"bytes,3,rep,name=ItemId,proto3" json:"ItemId,omitempty"` // 奖励
+}
+
+func (x *PermitRankConfig) Reset() {
+	*x = PermitRankConfig{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_common_proto_msgTypes[63]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *PermitRankConfig) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*PermitRankConfig) ProtoMessage() {}
+
+func (x *PermitRankConfig) ProtoReflect() protoreflect.Message {
+	mi := &file_common_proto_msgTypes[63]
+	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 PermitRankConfig.ProtoReflect.Descriptor instead.
+func (*PermitRankConfig) Descriptor() ([]byte, []int) {
+	return file_common_proto_rawDescGZIP(), []int{63}
+}
+
+func (x *PermitRankConfig) GetStart() int32 {
+	if x != nil {
+		return x.Start
+	}
+	return 0
+}
+
+func (x *PermitRankConfig) GetEnd() int32 {
+	if x != nil {
+		return x.End
+	}
+	return 0
+}
+
+func (x *PermitRankConfig) GetItemId() []*ItemInfo {
+	if x != nil {
+		return x.ItemId
+	}
+	return nil
+}
+
+type PermitChannelConfig struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Channel        string                  `protobuf:"bytes,1,opt,name=Channel,proto3" json:"Channel,omitempty"`               // 渠道
+	LevelConfig    []*PermitLevelConfig    `protobuf:"bytes,2,rep,name=LevelConfig,proto3" json:"LevelConfig,omitempty"`       // 等级奖励
+	ExchangeConfig []*PermitExchangeConfig `protobuf:"bytes,3,rep,name=ExchangeConfig,proto3" json:"ExchangeConfig,omitempty"` // 兑换配置
+	RankConfig     []*PermitRankConfig     `protobuf:"bytes,4,rep,name=RankConfig,proto3" json:"RankConfig,omitempty"`         // 排行配置
+}
+
+func (x *PermitChannelConfig) Reset() {
+	*x = PermitChannelConfig{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_common_proto_msgTypes[64]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *PermitChannelConfig) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*PermitChannelConfig) ProtoMessage() {}
+
+func (x *PermitChannelConfig) ProtoReflect() protoreflect.Message {
+	mi := &file_common_proto_msgTypes[64]
+	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 PermitChannelConfig.ProtoReflect.Descriptor instead.
+func (*PermitChannelConfig) Descriptor() ([]byte, []int) {
+	return file_common_proto_rawDescGZIP(), []int{64}
+}
+
+func (x *PermitChannelConfig) GetChannel() string {
+	if x != nil {
+		return x.Channel
+	}
+	return ""
+}
+
+func (x *PermitChannelConfig) GetLevelConfig() []*PermitLevelConfig {
+	if x != nil {
+		return x.LevelConfig
+	}
+	return nil
+}
+
+func (x *PermitChannelConfig) GetExchangeConfig() []*PermitExchangeConfig {
+	if x != nil {
+		return x.ExchangeConfig
+	}
+	return nil
+}
+
+func (x *PermitChannelConfig) GetRankConfig() []*PermitRankConfig {
+	if x != nil {
+		return x.RankConfig
+	}
+	return nil
+}
+
+// etcd /game/act_permit
+type ActPermitConfig struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Platform      string                 `protobuf:"bytes,1,opt,name=Platform,proto3" json:"Platform,omitempty"`           // 平台
+	StartTs       int64                  `protobuf:"varint,2,opt,name=StartTs,proto3" json:"StartTs,omitempty"`            // 开始日期
+	Days          int32                  `protobuf:"varint,3,opt,name=Days,proto3" json:"Days,omitempty"`                  // 持续天数
+	OnChannelName []string               `protobuf:"bytes,4,rep,name=OnChannelName,proto3" json:"OnChannelName,omitempty"` // 开启渠道
+	Configs       []*PermitChannelConfig `protobuf:"bytes,5,rep,name=Configs,proto3" json:"Configs,omitempty"`             // 渠道配置
+}
+
+func (x *ActPermitConfig) Reset() {
+	*x = ActPermitConfig{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_common_proto_msgTypes[65]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *ActPermitConfig) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ActPermitConfig) ProtoMessage() {}
+
+func (x *ActPermitConfig) ProtoReflect() protoreflect.Message {
+	mi := &file_common_proto_msgTypes[65]
+	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 ActPermitConfig.ProtoReflect.Descriptor instead.
+func (*ActPermitConfig) Descriptor() ([]byte, []int) {
+	return file_common_proto_rawDescGZIP(), []int{65}
+}
+
+func (x *ActPermitConfig) GetPlatform() string {
+	if x != nil {
+		return x.Platform
+	}
+	return ""
+}
+
+func (x *ActPermitConfig) GetStartTs() int64 {
+	if x != nil {
+		return x.StartTs
+	}
+	return 0
+}
+
+func (x *ActPermitConfig) GetDays() int32 {
+	if x != nil {
+		return x.Days
+	}
+	return 0
+}
+
+func (x *ActPermitConfig) GetOnChannelName() []string {
+	if x != nil {
+		return x.OnChannelName
+	}
+	return nil
+}
+
+func (x *ActPermitConfig) GetConfigs() []*PermitChannelConfig {
+	if x != nil {
+		return x.Configs
+	}
+	return nil
+}
+
 var File_common_proto protoreflect.FileDescriptor
 
 var file_common_proto_rawDesc = []byte{
@@ -7208,10 +7599,67 @@ var file_common_proto_rawDesc = []byte{
 	0x53, 0x63, 0x6f, 0x72, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65,
 	0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05,
 	0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c,
-	0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x26, 0x5a, 0x24, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e,
-	0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70,
-	0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x62, 0x06,
-	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+	0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x91, 0x01, 0x0a, 0x11, 0x50, 0x65, 0x72, 0x6d, 0x69,
+	0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x12, 0x0a, 0x04,
+	0x52, 0x61, 0x6e, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x52, 0x61, 0x6e, 0x6b,
+	0x12, 0x14, 0x0a, 0x05, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52,
+	0x05, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x28, 0x0a, 0x06, 0x41, 0x77, 0x61, 0x72, 0x64, 0x31,
+	0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e,
+	0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x41, 0x77, 0x61, 0x72, 0x64, 0x31,
+	0x12, 0x28, 0x0a, 0x06, 0x41, 0x77, 0x61, 0x72, 0x64, 0x32, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b,
+	0x32, 0x10, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e,
+	0x66, 0x6f, 0x52, 0x06, 0x41, 0x77, 0x61, 0x72, 0x64, 0x32, 0x22, 0xea, 0x01, 0x0a, 0x14, 0x50,
+	0x65, 0x72, 0x6d, 0x69, 0x74, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x6e,
+	0x66, 0x69, 0x67, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52,
+	0x02, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x18, 0x02, 0x20,
+	0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x04, 0x47,
+	0x61, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x77, 0x65, 0x62, 0x61,
+	0x70, 0x69, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x47, 0x61, 0x69,
+	0x6e, 0x12, 0x24, 0x0a, 0x04, 0x43, 0x6f, 0x73, 0x74, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32,
+	0x10, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66,
+	0x6f, 0x52, 0x04, 0x43, 0x6f, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x49, 0x73, 0x50, 0x65, 0x72,
+	0x6d, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x49, 0x73, 0x50, 0x65, 0x72,
+	0x6d, 0x69, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x06, 0x20, 0x01,
+	0x28, 0x03, 0x52, 0x05, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x69, 0x6d,
+	0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12,
+	0x16, 0x0a, 0x06, 0x49, 0x73, 0x53, 0x68, 0x6f, 0x77, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52,
+	0x06, 0x49, 0x73, 0x53, 0x68, 0x6f, 0x77, 0x22, 0x64, 0x0a, 0x10, 0x50, 0x65, 0x72, 0x6d, 0x69,
+	0x74, 0x52, 0x61, 0x6e, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x14, 0x0a, 0x05, 0x53,
+	0x74, 0x61, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x53, 0x74, 0x61, 0x72,
+	0x74, 0x12, 0x10, 0x0a, 0x03, 0x45, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03,
+	0x45, 0x6e, 0x64, 0x12, 0x28, 0x0a, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x18, 0x03, 0x20,
+	0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x74, 0x65,
+	0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x22, 0xec, 0x01,
+	0x0a, 0x13, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x43,
+	0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c,
+	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12,
+	0x3b, 0x0a, 0x0b, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02,
+	0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x65,
+	0x72, 0x6d, 0x69, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52,
+	0x0b, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x44, 0x0a, 0x0e,
+	0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x03,
+	0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x65,
+	0x72, 0x6d, 0x69, 0x74, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66,
+	0x69, 0x67, 0x52, 0x0e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66,
+	0x69, 0x67, 0x12, 0x38, 0x0a, 0x0a, 0x52, 0x61, 0x6e, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67,
+	0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e,
+	0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x52, 0x61, 0x6e, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67,
+	0x52, 0x0a, 0x52, 0x61, 0x6e, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0xb8, 0x01, 0x0a,
+	0x0f, 0x41, 0x63, 0x74, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67,
+	0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x18, 0x0a, 0x07,
+	0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x53,
+	0x74, 0x61, 0x72, 0x74, 0x54, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x44, 0x61, 0x79, 0x73, 0x18, 0x03,
+	0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x44, 0x61, 0x79, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x4f, 0x6e,
+	0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x03, 0x28,
+	0x09, 0x52, 0x0d, 0x4f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4e, 0x61, 0x6d, 0x65,
+	0x12, 0x35, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28,
+	0x0b, 0x32, 0x1b, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x65, 0x72, 0x6d, 0x69,
+	0x74, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x07,
+	0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x42, 0x26, 0x5a, 0x24, 0x6d, 0x6f, 0x6e, 0x67, 0x6f,
+	0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x62,
+	0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 }
 
 var (
@@ -7226,7 +7674,7 @@ func file_common_proto_rawDescGZIP() []byte {
 	return file_common_proto_rawDescData
 }
 
-var file_common_proto_msgTypes = make([]protoimpl.MessageInfo, 67)
+var file_common_proto_msgTypes = make([]protoimpl.MessageInfo, 72)
 var file_common_proto_goTypes = []interface{}{
 	(*MysqlDbSetting)(nil),               // 0: webapi.MysqlDbSetting
 	(*MongoDbSetting)(nil),               // 1: webapi.MongoDbSetting
@@ -7289,33 +7737,38 @@ var file_common_proto_goTypes = []interface{}{
 	(*ChannelSwitchConfig)(nil),          // 58: webapi.ChannelSwitchConfig
 	(*RankAward)(nil),                    // 59: webapi.RankAward
 	(*ActInviteConfig)(nil),              // 60: webapi.ActInviteConfig
-	nil,                                  // 61: webapi.Platform.BindTelRewardEntry
-	nil,                                  // 62: webapi.PlayerData.RankScoreEntry
-	nil,                                  // 63: webapi.ItemShop.AwardEntry
-	nil,                                  // 64: webapi.VIPcfg.AwardEntry
-	nil,                                  // 65: webapi.VIPcfg.Privilege7Entry
-	nil,                                  // 66: webapi.ActInviteConfig.PayScoreEntry
-	(*server.DB_GameFree)(nil),           // 67: server.DB_GameFree
+	(*PermitLevelConfig)(nil),            // 61: webapi.PermitLevelConfig
+	(*PermitExchangeConfig)(nil),         // 62: webapi.PermitExchangeConfig
+	(*PermitRankConfig)(nil),             // 63: webapi.PermitRankConfig
+	(*PermitChannelConfig)(nil),          // 64: webapi.PermitChannelConfig
+	(*ActPermitConfig)(nil),              // 65: webapi.ActPermitConfig
+	nil,                                  // 66: webapi.Platform.BindTelRewardEntry
+	nil,                                  // 67: webapi.PlayerData.RankScoreEntry
+	nil,                                  // 68: webapi.ItemShop.AwardEntry
+	nil,                                  // 69: webapi.VIPcfg.AwardEntry
+	nil,                                  // 70: webapi.VIPcfg.Privilege7Entry
+	nil,                                  // 71: webapi.ActInviteConfig.PayScoreEntry
+	(*server.DB_GameFree)(nil),           // 72: server.DB_GameFree
 }
 var file_common_proto_depIdxs = []int32{
 	2,  // 0: webapi.Platform.Leaderboard:type_name -> webapi.RankSwitch
 	3,  // 1: webapi.Platform.ClubConfig:type_name -> webapi.ClubConfig
 	4,  // 2: webapi.Platform.ThirdGameMerchant:type_name -> webapi.ThirdGame
-	61, // 3: webapi.Platform.BindTelReward:type_name -> webapi.Platform.BindTelRewardEntry
+	66, // 3: webapi.Platform.BindTelReward:type_name -> webapi.Platform.BindTelRewardEntry
 	6,  // 4: webapi.GameConfigGlobal.GameStatus:type_name -> webapi.GameStatus
-	67, // 5: webapi.GameFree.DbGameFree:type_name -> server.DB_GameFree
+	72, // 5: webapi.GameFree.DbGameFree:type_name -> server.DB_GameFree
 	8,  // 6: webapi.PlatformGameConfig.DbGameFrees:type_name -> webapi.GameFree
 	0,  // 7: webapi.PlatformDbConfig.Mysql:type_name -> webapi.MysqlDbSetting
 	1,  // 8: webapi.PlatformDbConfig.MongoDb:type_name -> webapi.MongoDbSetting
 	1,  // 9: webapi.PlatformDbConfig.MongoDbLog:type_name -> webapi.MongoDbSetting
-	67, // 10: webapi.GameConfigGroup.DbGameFree:type_name -> server.DB_GameFree
-	62, // 11: webapi.PlayerData.RankScore:type_name -> webapi.PlayerData.RankScoreEntry
+	72, // 10: webapi.GameConfigGroup.DbGameFree:type_name -> server.DB_GameFree
+	67, // 11: webapi.PlayerData.RankScore:type_name -> webapi.PlayerData.RankScoreEntry
 	29, // 12: webapi.PlayerData.Items:type_name -> webapi.ItemInfo
 	20, // 13: webapi.OnlineReport.GameCount:type_name -> webapi.OnlineGameCnt
 	22, // 14: webapi.CommonNoticeList.List:type_name -> webapi.CommonNotice
 	25, // 15: webapi.ExchangeShop.ExType:type_name -> webapi.ExchangeType
 	24, // 16: webapi.ExchangeShopList.List:type_name -> webapi.ExchangeShop
-	63, // 17: webapi.ItemShop.Award:type_name -> webapi.ItemShop.AwardEntry
+	68, // 17: webapi.ItemShop.Award:type_name -> webapi.ItemShop.AwardEntry
 	27, // 18: webapi.ItemShopList.List:type_name -> webapi.ItemShop
 	29, // 19: webapi.MatchInfoAward.ItemId:type_name -> webapi.ItemInfo
 	30, // 20: webapi.GameMatchDate.Award:type_name -> webapi.MatchInfoAward
@@ -7336,20 +7789,29 @@ var file_common_proto_depIdxs = []int32{
 	35, // 35: webapi.WelfareSpree.Item:type_name -> webapi.WelfareDate
 	45, // 36: webapi.WelfareFirstPayDataList.List:type_name -> webapi.WelfareSpree
 	45, // 37: webapi.WelfareContinuousPayDataList.List:type_name -> webapi.WelfareSpree
-	64, // 38: webapi.VIPcfg.Award:type_name -> webapi.VIPcfg.AwardEntry
-	65, // 39: webapi.VIPcfg.Privilege7:type_name -> webapi.VIPcfg.Privilege7Entry
+	69, // 38: webapi.VIPcfg.Award:type_name -> webapi.VIPcfg.AwardEntry
+	70, // 39: webapi.VIPcfg.Privilege7:type_name -> webapi.VIPcfg.Privilege7Entry
 	48, // 40: webapi.VIPcfgDataList.List:type_name -> webapi.VIPcfg
 	35, // 41: webapi.ChessRankConfig.Item:type_name -> webapi.WelfareDate
 	52, // 42: webapi.ChessRankcfgData.Datas:type_name -> webapi.ChessRankConfig
-	66, // 43: webapi.ActInviteConfig.PayScore:type_name -> webapi.ActInviteConfig.PayScoreEntry
+	71, // 43: webapi.ActInviteConfig.PayScore:type_name -> webapi.ActInviteConfig.PayScoreEntry
 	59, // 44: webapi.ActInviteConfig.Awards1:type_name -> webapi.RankAward
 	59, // 45: webapi.ActInviteConfig.Awards2:type_name -> webapi.RankAward
 	59, // 46: webapi.ActInviteConfig.Awards3:type_name -> webapi.RankAward
-	47, // [47:47] is the sub-list for method output_type
-	47, // [47:47] is the sub-list for method input_type
-	47, // [47:47] is the sub-list for extension type_name
-	47, // [47:47] is the sub-list for extension extendee
-	0,  // [0:47] is the sub-list for field type_name
+	29, // 47: webapi.PermitLevelConfig.Award1:type_name -> webapi.ItemInfo
+	29, // 48: webapi.PermitLevelConfig.Award2:type_name -> webapi.ItemInfo
+	29, // 49: webapi.PermitExchangeConfig.Gain:type_name -> webapi.ItemInfo
+	29, // 50: webapi.PermitExchangeConfig.Cost:type_name -> webapi.ItemInfo
+	29, // 51: webapi.PermitRankConfig.ItemId:type_name -> webapi.ItemInfo
+	61, // 52: webapi.PermitChannelConfig.LevelConfig:type_name -> webapi.PermitLevelConfig
+	62, // 53: webapi.PermitChannelConfig.ExchangeConfig:type_name -> webapi.PermitExchangeConfig
+	63, // 54: webapi.PermitChannelConfig.RankConfig:type_name -> webapi.PermitRankConfig
+	64, // 55: webapi.ActPermitConfig.Configs:type_name -> webapi.PermitChannelConfig
+	56, // [56:56] is the sub-list for method output_type
+	56, // [56:56] is the sub-list for method input_type
+	56, // [56:56] is the sub-list for extension type_name
+	56, // [56:56] is the sub-list for extension extendee
+	0,  // [0:56] is the sub-list for field type_name
 }
 
 func init() { file_common_proto_init() }
@@ -8090,6 +8552,66 @@ func file_common_proto_init() {
 				return nil
 			}
 		}
+		file_common_proto_msgTypes[61].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*PermitLevelConfig); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_common_proto_msgTypes[62].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*PermitExchangeConfig); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_common_proto_msgTypes[63].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*PermitRankConfig); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_common_proto_msgTypes[64].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*PermitChannelConfig); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_common_proto_msgTypes[65].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*ActPermitConfig); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
 	}
 	type x struct{}
 	out := protoimpl.TypeBuilder{
@@ -8097,7 +8619,7 @@ func file_common_proto_init() {
 			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
 			RawDescriptor: file_common_proto_rawDesc,
 			NumEnums:      0,
-			NumMessages:   67,
+			NumMessages:   72,
 			NumExtensions: 0,
 			NumServices:   0,
 		},
diff --git a/protocol/webapi/common.proto b/protocol/webapi/common.proto
index 75557ca..dff6a97 100644
--- a/protocol/webapi/common.proto
+++ b/protocol/webapi/common.proto
@@ -685,4 +685,47 @@ message ActInviteConfig {
   repeated RankAward Awards1 = 6; // 周榜奖励列表
   repeated RankAward Awards2 = 7; // 周榜奖励列表
   repeated RankAward Awards3 = 8; // 周榜奖励列表
+}
+
+// 等级奖励
+message PermitLevelConfig{
+  int32 Rank = 1; // 等级
+  int64 Score = 2; // 积分
+  repeated ItemInfo Award1 = 3; // 普通奖励
+  repeated ItemInfo Award2 = 4; // 典藏奖励
+}
+
+// 兑换配置
+message PermitExchangeConfig{
+  int32 Id = 1; // 商品id
+  int32 SortId = 2; // 排序序号
+  repeated ItemInfo Gain = 3; // 获得商品
+  repeated ItemInfo Cost = 4; // 消耗
+  bool IsPermit = 5; // 是否需要典藏通行证
+  int64 Level = 6; // 达到等级
+  int64 Times = 7; // 最大兑换次数
+  bool IsShow = 8; // 开关，true 开启， false 关闭
+}
+
+// 排行配置
+message PermitRankConfig{
+  int32 Start = 1; // 开始排名；第一名为0
+  int32 End = 2; // 结束排名
+  repeated ItemInfo ItemId = 3; // 奖励
+}
+
+message PermitChannelConfig{
+  string Channel = 1; // 渠道
+  repeated PermitLevelConfig LevelConfig = 2; // 等级奖励
+  repeated PermitExchangeConfig ExchangeConfig = 3; // 兑换配置
+  repeated PermitRankConfig RankConfig = 4; // 排行配置
+}
+
+// etcd /game/act_permit
+message ActPermitConfig{
+  string Platform = 1; // 平台
+  int64 StartTs = 2; // 开始日期
+  int32 Days = 3; // 持续天数
+  repeated string OnChannelName = 4;  // 开启渠道
+  repeated PermitChannelConfig Configs = 5; // 渠道配置
 }
\ No newline at end of file
diff --git a/protocol/welfare/welfare.pb.go b/protocol/welfare/welfare.pb.go
index 651f6f1..0e183f1 100644
--- a/protocol/welfare/welfare.pb.go
+++ b/protocol/welfare/welfare.pb.go
@@ -139,6 +139,14 @@ const (
 	SPacketID_PACKET_CSDiamondBankGetInfo     SPacketID = 2914 //钻石存钱罐信息获取
 	SPacketID_PACKET_SCDiamondBankGetInfo     SPacketID = 2915 //钻石存钱罐信息返回
 	SPacketID_PACKET_SCDiamondBankTakeDiamond SPacketID = 2916 //钻石存钱罐领取返回
+	SPacketID_PACKET_CSPermitInfo             SPacketID = 2917 // 通行证奖励
+	SPacketID_PACKET_SCPermitInfo             SPacketID = 2918 // 通行证奖励
+	SPacketID_PACKET_CSPermitExchangeList     SPacketID = 2919 // 通行证兑换列表
+	SPacketID_PACKET_SCPermitExchangeList     SPacketID = 2920 // 通行证兑换列表
+	SPacketID_PACKET_CSPermitAward            SPacketID = 2921 // 领取通行证奖励
+	SPacketID_PACKET_SCPermitAward            SPacketID = 2922 // 领取通行证奖励
+	SPacketID_PACKET_CSPermitExchange         SPacketID = 2923 // 通行证兑换
+	SPacketID_PACKET_SCPermitExchange         SPacketID = 2924 // 通行证兑换
 )
 
 // Enum value maps for SPacketID.
@@ -180,6 +188,14 @@ var (
 		2914: "PACKET_CSDiamondBankGetInfo",
 		2915: "PACKET_SCDiamondBankGetInfo",
 		2916: "PACKET_SCDiamondBankTakeDiamond",
+		2917: "PACKET_CSPermitInfo",
+		2918: "PACKET_SCPermitInfo",
+		2919: "PACKET_CSPermitExchangeList",
+		2920: "PACKET_SCPermitExchangeList",
+		2921: "PACKET_CSPermitAward",
+		2922: "PACKET_SCPermitAward",
+		2923: "PACKET_CSPermitExchange",
+		2924: "PACKET_SCPermitExchange",
 	}
 	SPacketID_value = map[string]int32{
 		"PACKET_SHOP_ZERO":                0,
@@ -218,6 +234,14 @@ var (
 		"PACKET_CSDiamondBankGetInfo":     2914,
 		"PACKET_SCDiamondBankGetInfo":     2915,
 		"PACKET_SCDiamondBankTakeDiamond": 2916,
+		"PACKET_CSPermitInfo":             2917,
+		"PACKET_SCPermitInfo":             2918,
+		"PACKET_CSPermitExchangeList":     2919,
+		"PACKET_SCPermitExchangeList":     2920,
+		"PACKET_CSPermitAward":            2921,
+		"PACKET_SCPermitAward":            2922,
+		"PACKET_CSPermitExchange":         2923,
+		"PACKET_SCPermitExchange":         2924,
 	}
 )
 
@@ -3062,6 +3086,882 @@ func (x *SCDiamondBankTakeDiamond) GetShopId() int32 {
 	return 0
 }
 
+// 赛季通行证信息
+//PACKET_CSPermitInfo
+type CSPermitInfo struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+}
+
+func (x *CSPermitInfo) Reset() {
+	*x = CSPermitInfo{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_welfare_proto_msgTypes[44]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *CSPermitInfo) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*CSPermitInfo) ProtoMessage() {}
+
+func (x *CSPermitInfo) ProtoReflect() protoreflect.Message {
+	mi := &file_welfare_proto_msgTypes[44]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use CSPermitInfo.ProtoReflect.Descriptor instead.
+func (*CSPermitInfo) Descriptor() ([]byte, []int) {
+	return file_welfare_proto_rawDescGZIP(), []int{44}
+}
+
+type PropInfo struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	ItemId  int32 `protobuf:"varint,1,opt,name=ItemId,proto3" json:"ItemId,omitempty"`   //物品ID
+	ItemNum int64 `protobuf:"varint,2,opt,name=ItemNum,proto3" json:"ItemNum,omitempty"` //物品数量
+}
+
+func (x *PropInfo) Reset() {
+	*x = PropInfo{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_welfare_proto_msgTypes[45]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *PropInfo) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*PropInfo) ProtoMessage() {}
+
+func (x *PropInfo) ProtoReflect() protoreflect.Message {
+	mi := &file_welfare_proto_msgTypes[45]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use PropInfo.ProtoReflect.Descriptor instead.
+func (*PropInfo) Descriptor() ([]byte, []int) {
+	return file_welfare_proto_rawDescGZIP(), []int{45}
+}
+
+func (x *PropInfo) GetItemId() int32 {
+	if x != nil {
+		return x.ItemId
+	}
+	return 0
+}
+
+func (x *PropInfo) GetItemNum() int64 {
+	if x != nil {
+		return x.ItemNum
+	}
+	return 0
+}
+
+type PropItem struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Award  []*PropInfo `protobuf:"bytes,1,rep,name=Award,proto3" json:"Award,omitempty"`    // 奖励
+	Status int64       `protobuf:"varint,2,opt,name=Status,proto3" json:"Status,omitempty"` // 奖励状态 0默认 1可领取 2已领取
+	Id     int32       `protobuf:"varint,3,opt,name=Id,proto3" json:"Id,omitempty"`         // 奖励id; 领奖时使用
+}
+
+func (x *PropItem) Reset() {
+	*x = PropItem{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_welfare_proto_msgTypes[46]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *PropItem) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*PropItem) ProtoMessage() {}
+
+func (x *PropItem) ProtoReflect() protoreflect.Message {
+	mi := &file_welfare_proto_msgTypes[46]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use PropItem.ProtoReflect.Descriptor instead.
+func (*PropItem) Descriptor() ([]byte, []int) {
+	return file_welfare_proto_rawDescGZIP(), []int{46}
+}
+
+func (x *PropItem) GetAward() []*PropInfo {
+	if x != nil {
+		return x.Award
+	}
+	return nil
+}
+
+func (x *PropItem) GetStatus() int64 {
+	if x != nil {
+		return x.Status
+	}
+	return 0
+}
+
+func (x *PropItem) GetId() int32 {
+	if x != nil {
+		return x.Id
+	}
+	return 0
+}
+
+type PermitAward struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Exp    int64     `protobuf:"varint,1,opt,name=Exp,proto3" json:"Exp,omitempty"`      // 赛季经验
+	Level  int64     `protobuf:"varint,2,opt,name=Level,proto3" json:"Level,omitempty"`  // 等级
+	Award1 *PropItem `protobuf:"bytes,3,opt,name=Award1,proto3" json:"Award1,omitempty"` // 普通奖励
+	Award2 *PropItem `protobuf:"bytes,4,opt,name=Award2,proto3" json:"Award2,omitempty"` // 典藏奖励
+}
+
+func (x *PermitAward) Reset() {
+	*x = PermitAward{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_welfare_proto_msgTypes[47]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *PermitAward) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*PermitAward) ProtoMessage() {}
+
+func (x *PermitAward) ProtoReflect() protoreflect.Message {
+	mi := &file_welfare_proto_msgTypes[47]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use PermitAward.ProtoReflect.Descriptor instead.
+func (*PermitAward) Descriptor() ([]byte, []int) {
+	return file_welfare_proto_rawDescGZIP(), []int{47}
+}
+
+func (x *PermitAward) GetExp() int64 {
+	if x != nil {
+		return x.Exp
+	}
+	return 0
+}
+
+func (x *PermitAward) GetLevel() int64 {
+	if x != nil {
+		return x.Level
+	}
+	return 0
+}
+
+func (x *PermitAward) GetAward1() *PropItem {
+	if x != nil {
+		return x.Award1
+	}
+	return nil
+}
+
+func (x *PermitAward) GetAward2() *PropItem {
+	if x != nil {
+		return x.Award2
+	}
+	return nil
+}
+
+type PermitShow struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	ShowType   int32 `protobuf:"varint,1,opt,name=ShowType,proto3" json:"ShowType,omitempty"`     // 类型
+	ShowVolume int32 `protobuf:"varint,2,opt,name=ShowVolume,proto3" json:"ShowVolume,omitempty"` // id
+	Location   int32 `protobuf:"varint,3,opt,name=Location,proto3" json:"Location,omitempty"`     // 跳转界面
+}
+
+func (x *PermitShow) Reset() {
+	*x = PermitShow{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_welfare_proto_msgTypes[48]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *PermitShow) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*PermitShow) ProtoMessage() {}
+
+func (x *PermitShow) ProtoReflect() protoreflect.Message {
+	mi := &file_welfare_proto_msgTypes[48]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use PermitShow.ProtoReflect.Descriptor instead.
+func (*PermitShow) Descriptor() ([]byte, []int) {
+	return file_welfare_proto_rawDescGZIP(), []int{48}
+}
+
+func (x *PermitShow) GetShowType() int32 {
+	if x != nil {
+		return x.ShowType
+	}
+	return 0
+}
+
+func (x *PermitShow) GetShowVolume() int32 {
+	if x != nil {
+		return x.ShowVolume
+	}
+	return 0
+}
+
+func (x *PermitShow) GetLocation() int32 {
+	if x != nil {
+		return x.Location
+	}
+	return 0
+}
+
+type PermitRankAward struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Start  int32       `protobuf:"varint,1,opt,name=Start,proto3" json:"Start,omitempty"`  // 开始排名；第一名为0
+	End    int32       `protobuf:"varint,2,opt,name=End,proto3" json:"End,omitempty"`      // 结束排名
+	ItemId []*PropInfo `protobuf:"bytes,3,rep,name=ItemId,proto3" json:"ItemId,omitempty"` // 奖励
+}
+
+func (x *PermitRankAward) Reset() {
+	*x = PermitRankAward{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_welfare_proto_msgTypes[49]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *PermitRankAward) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*PermitRankAward) ProtoMessage() {}
+
+func (x *PermitRankAward) ProtoReflect() protoreflect.Message {
+	mi := &file_welfare_proto_msgTypes[49]
+	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 PermitRankAward.ProtoReflect.Descriptor instead.
+func (*PermitRankAward) Descriptor() ([]byte, []int) {
+	return file_welfare_proto_rawDescGZIP(), []int{49}
+}
+
+func (x *PermitRankAward) GetStart() int32 {
+	if x != nil {
+		return x.Start
+	}
+	return 0
+}
+
+func (x *PermitRankAward) GetEnd() int32 {
+	if x != nil {
+		return x.End
+	}
+	return 0
+}
+
+func (x *PermitRankAward) GetItemId() []*PropInfo {
+	if x != nil {
+		return x.ItemId
+	}
+	return nil
+}
+
+//PACKET_SCPermitInfo
+type SCPermitInfo struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Exp       int64              `protobuf:"varint,1,opt,name=Exp,proto3" json:"Exp,omitempty"`                    // 玩家赛季经验
+	Level     int64              `protobuf:"varint,2,opt,name=Level,proto3" json:"Level,omitempty"`                // 玩家等级
+	Award     []*PermitAward     `protobuf:"bytes,3,rep,name=Award,proto3" json:"Award,omitempty"`                 // 奖励列表
+	Timestamp []int64            `protobuf:"varint,4,rep,packed,name=Timestamp,proto3" json:"Timestamp,omitempty"` // 赛季开始和结束时间戳 [开始时间戳，结束时间戳]
+	ShowList  []*PermitShow      `protobuf:"bytes,5,rep,name=ShowList,proto3" json:"ShowList,omitempty"`           // 展示列表
+	IsPermit  bool               `protobuf:"varint,6,opt,name=IsPermit,proto3" json:"IsPermit,omitempty"`          // 是否已购买典藏通行证
+	RankAward []*PermitRankAward `protobuf:"bytes,7,rep,name=RankAward,proto3" json:"RankAward,omitempty"`         // 排行榜奖励
+}
+
+func (x *SCPermitInfo) Reset() {
+	*x = SCPermitInfo{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_welfare_proto_msgTypes[50]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *SCPermitInfo) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SCPermitInfo) ProtoMessage() {}
+
+func (x *SCPermitInfo) ProtoReflect() protoreflect.Message {
+	mi := &file_welfare_proto_msgTypes[50]
+	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 SCPermitInfo.ProtoReflect.Descriptor instead.
+func (*SCPermitInfo) Descriptor() ([]byte, []int) {
+	return file_welfare_proto_rawDescGZIP(), []int{50}
+}
+
+func (x *SCPermitInfo) GetExp() int64 {
+	if x != nil {
+		return x.Exp
+	}
+	return 0
+}
+
+func (x *SCPermitInfo) GetLevel() int64 {
+	if x != nil {
+		return x.Level
+	}
+	return 0
+}
+
+func (x *SCPermitInfo) GetAward() []*PermitAward {
+	if x != nil {
+		return x.Award
+	}
+	return nil
+}
+
+func (x *SCPermitInfo) GetTimestamp() []int64 {
+	if x != nil {
+		return x.Timestamp
+	}
+	return nil
+}
+
+func (x *SCPermitInfo) GetShowList() []*PermitShow {
+	if x != nil {
+		return x.ShowList
+	}
+	return nil
+}
+
+func (x *SCPermitInfo) GetIsPermit() bool {
+	if x != nil {
+		return x.IsPermit
+	}
+	return false
+}
+
+func (x *SCPermitInfo) GetRankAward() []*PermitRankAward {
+	if x != nil {
+		return x.RankAward
+	}
+	return nil
+}
+
+// 领取赛季通行证奖励
+//PACKET_CSPermitAward
+type CSPermitAward struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Tp int32 `protobuf:"varint,1,opt,name=Tp,proto3" json:"Tp,omitempty"` // 0奖励 1普通奖励 2典藏奖励
+	Id int32 `protobuf:"varint,2,opt,name=Id,proto3" json:"Id,omitempty"` // 奖励id; 0：一键领取
+}
+
+func (x *CSPermitAward) Reset() {
+	*x = CSPermitAward{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_welfare_proto_msgTypes[51]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *CSPermitAward) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*CSPermitAward) ProtoMessage() {}
+
+func (x *CSPermitAward) ProtoReflect() protoreflect.Message {
+	mi := &file_welfare_proto_msgTypes[51]
+	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 CSPermitAward.ProtoReflect.Descriptor instead.
+func (*CSPermitAward) Descriptor() ([]byte, []int) {
+	return file_welfare_proto_rawDescGZIP(), []int{51}
+}
+
+func (x *CSPermitAward) GetTp() int32 {
+	if x != nil {
+		return x.Tp
+	}
+	return 0
+}
+
+func (x *CSPermitAward) GetId() int32 {
+	if x != nil {
+		return x.Id
+	}
+	return 0
+}
+
+//PACKET_SCPermitAward
+type SCPermitAward struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	OpRetCode OpResultCode `protobuf:"varint,1,opt,name=OpRetCode,proto3,enum=welfare.OpResultCode" json:"OpRetCode,omitempty"` // 错误码
+	Award1    []*PropInfo  `protobuf:"bytes,2,rep,name=Award1,proto3" json:"Award1,omitempty"`                                  // 普通奖励
+	Award2    []*PropInfo  `protobuf:"bytes,3,rep,name=Award2,proto3" json:"Award2,omitempty"`                                  // 典藏奖励
+	Id        int32        `protobuf:"varint,4,opt,name=Id,proto3" json:"Id,omitempty"`                                         // 奖励id; 0：一键领取
+	Tp        int32        `protobuf:"varint,5,opt,name=Tp,proto3" json:"Tp,omitempty"`                                         // 0奖励 1普通奖励 2典藏奖励
+}
+
+func (x *SCPermitAward) Reset() {
+	*x = SCPermitAward{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_welfare_proto_msgTypes[52]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *SCPermitAward) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SCPermitAward) ProtoMessage() {}
+
+func (x *SCPermitAward) ProtoReflect() protoreflect.Message {
+	mi := &file_welfare_proto_msgTypes[52]
+	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 SCPermitAward.ProtoReflect.Descriptor instead.
+func (*SCPermitAward) Descriptor() ([]byte, []int) {
+	return file_welfare_proto_rawDescGZIP(), []int{52}
+}
+
+func (x *SCPermitAward) GetOpRetCode() OpResultCode {
+	if x != nil {
+		return x.OpRetCode
+	}
+	return OpResultCode_OPRC_Sucess
+}
+
+func (x *SCPermitAward) GetAward1() []*PropInfo {
+	if x != nil {
+		return x.Award1
+	}
+	return nil
+}
+
+func (x *SCPermitAward) GetAward2() []*PropInfo {
+	if x != nil {
+		return x.Award2
+	}
+	return nil
+}
+
+func (x *SCPermitAward) GetId() int32 {
+	if x != nil {
+		return x.Id
+	}
+	return 0
+}
+
+func (x *SCPermitAward) GetTp() int32 {
+	if x != nil {
+		return x.Tp
+	}
+	return 0
+}
+
+// 赛季通行证兑换商城
+//PACKET_CSPermitExchangeList
+type CSPermitExchangeList struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+}
+
+func (x *CSPermitExchangeList) Reset() {
+	*x = CSPermitExchangeList{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_welfare_proto_msgTypes[53]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *CSPermitExchangeList) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*CSPermitExchangeList) ProtoMessage() {}
+
+func (x *CSPermitExchangeList) ProtoReflect() protoreflect.Message {
+	mi := &file_welfare_proto_msgTypes[53]
+	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 CSPermitExchangeList.ProtoReflect.Descriptor instead.
+func (*CSPermitExchangeList) Descriptor() ([]byte, []int) {
+	return file_welfare_proto_rawDescGZIP(), []int{53}
+}
+
+type ShopInfo struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Id            int32       `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"`                       // 商品id
+	Gain          []*PropInfo `protobuf:"bytes,2,rep,name=Gain,proto3" json:"Gain,omitempty"`                    // 获得商品
+	Cost          []*PropInfo `protobuf:"bytes,3,rep,name=Cost,proto3" json:"Cost,omitempty"`                    // 消耗商品
+	ExchangeTimes int32       `protobuf:"varint,4,opt,name=ExchangeTimes,proto3" json:"ExchangeTimes,omitempty"` // 最大兑换次数
+	RemainTimes   int32       `protobuf:"varint,5,opt,name=RemainTimes,proto3" json:"RemainTimes,omitempty"`     // 剩余兑换次数
+	Status        int64       `protobuf:"varint,6,opt,name=Status,proto3" json:"Status,omitempty"`               // 兑换状态 0默认 1可领取 2已领取
+	Level         int64       `protobuf:"varint,7,opt,name=Level,proto3" json:"Level,omitempty"`                 // 兑换所需等级
+	NeedPermit    bool        `protobuf:"varint,8,opt,name=NeedPermit,proto3" json:"NeedPermit,omitempty"`       // 需要典藏通行证
+}
+
+func (x *ShopInfo) Reset() {
+	*x = ShopInfo{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_welfare_proto_msgTypes[54]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *ShopInfo) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ShopInfo) ProtoMessage() {}
+
+func (x *ShopInfo) ProtoReflect() protoreflect.Message {
+	mi := &file_welfare_proto_msgTypes[54]
+	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 ShopInfo.ProtoReflect.Descriptor instead.
+func (*ShopInfo) Descriptor() ([]byte, []int) {
+	return file_welfare_proto_rawDescGZIP(), []int{54}
+}
+
+func (x *ShopInfo) GetId() int32 {
+	if x != nil {
+		return x.Id
+	}
+	return 0
+}
+
+func (x *ShopInfo) GetGain() []*PropInfo {
+	if x != nil {
+		return x.Gain
+	}
+	return nil
+}
+
+func (x *ShopInfo) GetCost() []*PropInfo {
+	if x != nil {
+		return x.Cost
+	}
+	return nil
+}
+
+func (x *ShopInfo) GetExchangeTimes() int32 {
+	if x != nil {
+		return x.ExchangeTimes
+	}
+	return 0
+}
+
+func (x *ShopInfo) GetRemainTimes() int32 {
+	if x != nil {
+		return x.RemainTimes
+	}
+	return 0
+}
+
+func (x *ShopInfo) GetStatus() int64 {
+	if x != nil {
+		return x.Status
+	}
+	return 0
+}
+
+func (x *ShopInfo) GetLevel() int64 {
+	if x != nil {
+		return x.Level
+	}
+	return 0
+}
+
+func (x *ShopInfo) GetNeedPermit() bool {
+	if x != nil {
+		return x.NeedPermit
+	}
+	return false
+}
+
+//PACKET_SCPermitExchangeList
+type SCPermitExchangeList struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	List []*ShopInfo `protobuf:"bytes,1,rep,name=List,proto3" json:"List,omitempty"` // 兑换列表
+}
+
+func (x *SCPermitExchangeList) Reset() {
+	*x = SCPermitExchangeList{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_welfare_proto_msgTypes[55]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *SCPermitExchangeList) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SCPermitExchangeList) ProtoMessage() {}
+
+func (x *SCPermitExchangeList) ProtoReflect() protoreflect.Message {
+	mi := &file_welfare_proto_msgTypes[55]
+	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 SCPermitExchangeList.ProtoReflect.Descriptor instead.
+func (*SCPermitExchangeList) Descriptor() ([]byte, []int) {
+	return file_welfare_proto_rawDescGZIP(), []int{55}
+}
+
+func (x *SCPermitExchangeList) GetList() []*ShopInfo {
+	if x != nil {
+		return x.List
+	}
+	return nil
+}
+
+// 赛季通行证商城兑换
+//PACKET_CSPermitExchange
+type CSPermitExchange struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 商品id
+}
+
+func (x *CSPermitExchange) Reset() {
+	*x = CSPermitExchange{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_welfare_proto_msgTypes[56]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *CSPermitExchange) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*CSPermitExchange) ProtoMessage() {}
+
+func (x *CSPermitExchange) ProtoReflect() protoreflect.Message {
+	mi := &file_welfare_proto_msgTypes[56]
+	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 CSPermitExchange.ProtoReflect.Descriptor instead.
+func (*CSPermitExchange) Descriptor() ([]byte, []int) {
+	return file_welfare_proto_rawDescGZIP(), []int{56}
+}
+
+func (x *CSPermitExchange) GetId() int32 {
+	if x != nil {
+		return x.Id
+	}
+	return 0
+}
+
+//PACKET_SCPermitExchange
+type SCPermitExchange struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	OpRetCode OpResultCode `protobuf:"varint,1,opt,name=OpRetCode,proto3,enum=welfare.OpResultCode" json:"OpRetCode,omitempty"` // 错误码
+}
+
+func (x *SCPermitExchange) Reset() {
+	*x = SCPermitExchange{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_welfare_proto_msgTypes[57]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *SCPermitExchange) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SCPermitExchange) ProtoMessage() {}
+
+func (x *SCPermitExchange) ProtoReflect() protoreflect.Message {
+	mi := &file_welfare_proto_msgTypes[57]
+	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 SCPermitExchange.ProtoReflect.Descriptor instead.
+func (*SCPermitExchange) Descriptor() ([]byte, []int) {
+	return file_welfare_proto_rawDescGZIP(), []int{57}
+}
+
+func (x *SCPermitExchange) GetOpRetCode() OpResultCode {
+	if x != nil {
+		return x.OpRetCode
+	}
+	return OpResultCode_OPRC_Sucess
+}
+
 var File_welfare_proto protoreflect.FileDescriptor
 
 var file_welfare_proto_rawDesc = []byte{
@@ -3385,7 +4285,99 @@ var file_welfare_proto_rawDesc = []byte{
 	0x0a, 0x08, 0x4e, 0x6f, 0x77, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03,
 	0x52, 0x08, 0x4e, 0x6f, 0x77, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x68,
 	0x6f, 0x70, 0x49, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x68, 0x6f, 0x70,
-	0x49, 0x64, 0x2a, 0x86, 0x02, 0x0a, 0x0c, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43,
+	0x49, 0x64, 0x22, 0x0e, 0x0a, 0x0c, 0x43, 0x53, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x49, 0x6e,
+	0x66, 0x6f, 0x22, 0x3c, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16,
+	0x0a, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06,
+	0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x49, 0x74, 0x65, 0x6d, 0x4e, 0x75,
+	0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x49, 0x74, 0x65, 0x6d, 0x4e, 0x75, 0x6d,
+	0x22, 0x5b, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x70, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x27, 0x0a, 0x05,
+	0x41, 0x77, 0x61, 0x72, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x77, 0x65,
+	0x6c, 0x66, 0x61, 0x72, 0x65, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05,
+	0x41, 0x77, 0x61, 0x72, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18,
+	0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x0e, 0x0a,
+	0x02, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x22, 0x8b, 0x01,
+	0x0a, 0x0b, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x41, 0x77, 0x61, 0x72, 0x64, 0x12, 0x10, 0x0a,
+	0x03, 0x45, 0x78, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x45, 0x78, 0x70, 0x12,
+	0x14, 0x0a, 0x05, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05,
+	0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x29, 0x0a, 0x06, 0x41, 0x77, 0x61, 0x72, 0x64, 0x31, 0x18,
+	0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x77, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x2e,
+	0x50, 0x72, 0x6f, 0x70, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x06, 0x41, 0x77, 0x61, 0x72, 0x64, 0x31,
+	0x12, 0x29, 0x0a, 0x06, 0x41, 0x77, 0x61, 0x72, 0x64, 0x32, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b,
+	0x32, 0x11, 0x2e, 0x77, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x49,
+	0x74, 0x65, 0x6d, 0x52, 0x06, 0x41, 0x77, 0x61, 0x72, 0x64, 0x32, 0x22, 0x64, 0x0a, 0x0a, 0x50,
+	0x65, 0x72, 0x6d, 0x69, 0x74, 0x53, 0x68, 0x6f, 0x77, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x68, 0x6f,
+	0x77, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x53, 0x68, 0x6f,
+	0x77, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x53, 0x68, 0x6f, 0x77, 0x56, 0x6f, 0x6c,
+	0x75, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x53, 0x68, 0x6f, 0x77, 0x56,
+	0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f,
+	0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f,
+	0x6e, 0x22, 0x64, 0x0a, 0x0f, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x52, 0x61, 0x6e, 0x6b, 0x41,
+	0x77, 0x61, 0x72, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x72, 0x74, 0x18, 0x01, 0x20,
+	0x01, 0x28, 0x05, 0x52, 0x05, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x45, 0x6e,
+	0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x45, 0x6e, 0x64, 0x12, 0x29, 0x0a, 0x06,
+	0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x77,
+	0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x52,
+	0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x22, 0x85, 0x02, 0x0a, 0x0c, 0x53, 0x43, 0x50, 0x65,
+	0x72, 0x6d, 0x69, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x10, 0x0a, 0x03, 0x45, 0x78, 0x70, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x45, 0x78, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x4c, 0x65,
+	0x76, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x4c, 0x65, 0x76, 0x65, 0x6c,
+	0x12, 0x2a, 0x0a, 0x05, 0x41, 0x77, 0x61, 0x72, 0x64, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32,
+	0x14, 0x2e, 0x77, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x2e, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74,
+	0x41, 0x77, 0x61, 0x72, 0x64, 0x52, 0x05, 0x41, 0x77, 0x61, 0x72, 0x64, 0x12, 0x1c, 0x0a, 0x09,
+	0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x04, 0x20, 0x03, 0x28, 0x03, 0x52,
+	0x09, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x2f, 0x0a, 0x08, 0x53, 0x68,
+	0x6f, 0x77, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x77,
+	0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x2e, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x53, 0x68, 0x6f,
+	0x77, 0x52, 0x08, 0x53, 0x68, 0x6f, 0x77, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x49,
+	0x73, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x49,
+	0x73, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x12, 0x36, 0x0a, 0x09, 0x52, 0x61, 0x6e, 0x6b, 0x41,
+	0x77, 0x61, 0x72, 0x64, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x77, 0x65, 0x6c,
+	0x66, 0x61, 0x72, 0x65, 0x2e, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x52, 0x61, 0x6e, 0x6b, 0x41,
+	0x77, 0x61, 0x72, 0x64, 0x52, 0x09, 0x52, 0x61, 0x6e, 0x6b, 0x41, 0x77, 0x61, 0x72, 0x64, 0x22,
+	0x2f, 0x0a, 0x0d, 0x43, 0x53, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x41, 0x77, 0x61, 0x72, 0x64,
+	0x12, 0x0e, 0x0a, 0x02, 0x54, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x54, 0x70,
+	0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64,
+	0x22, 0xba, 0x01, 0x0a, 0x0d, 0x53, 0x43, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x41, 0x77, 0x61,
+	0x72, 0x64, 0x12, 0x33, 0x0a, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x77, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x2e,
+	0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x09, 0x4f, 0x70,
+	0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x29, 0x0a, 0x06, 0x41, 0x77, 0x61, 0x72, 0x64,
+	0x31, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x77, 0x65, 0x6c, 0x66, 0x61, 0x72,
+	0x65, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x41, 0x77, 0x61, 0x72,
+	0x64, 0x31, 0x12, 0x29, 0x0a, 0x06, 0x41, 0x77, 0x61, 0x72, 0x64, 0x32, 0x18, 0x03, 0x20, 0x03,
+	0x28, 0x0b, 0x32, 0x11, 0x2e, 0x77, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x2e, 0x50, 0x72, 0x6f,
+	0x70, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x41, 0x77, 0x61, 0x72, 0x64, 0x32, 0x12, 0x0e, 0x0a,
+	0x02, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x0e, 0x0a,
+	0x02, 0x54, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x54, 0x70, 0x22, 0x16, 0x0a,
+	0x14, 0x43, 0x53, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67,
+	0x65, 0x4c, 0x69, 0x73, 0x74, 0x22, 0xfe, 0x01, 0x0a, 0x08, 0x53, 0x68, 0x6f, 0x70, 0x49, 0x6e,
+	0x66, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02,
+	0x49, 0x64, 0x12, 0x25, 0x0a, 0x04, 0x47, 0x61, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b,
+	0x32, 0x11, 0x2e, 0x77, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x49,
+	0x6e, 0x66, 0x6f, 0x52, 0x04, 0x47, 0x61, 0x69, 0x6e, 0x12, 0x25, 0x0a, 0x04, 0x43, 0x6f, 0x73,
+	0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x77, 0x65, 0x6c, 0x66, 0x61, 0x72,
+	0x65, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x43, 0x6f, 0x73, 0x74,
+	0x12, 0x24, 0x0a, 0x0d, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x69, 0x6d, 0x65,
+	0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67,
+	0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x52, 0x65, 0x6d, 0x61, 0x69, 0x6e,
+	0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x52, 0x65, 0x6d,
+	0x61, 0x69, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74,
+	0x75, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73,
+	0x12, 0x14, 0x0a, 0x05, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52,
+	0x05, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x1e, 0x0a, 0x0a, 0x4e, 0x65, 0x65, 0x64, 0x50, 0x65,
+	0x72, 0x6d, 0x69, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x4e, 0x65, 0x65, 0x64,
+	0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x22, 0x3d, 0x0a, 0x14, 0x53, 0x43, 0x50, 0x65, 0x72, 0x6d,
+	0x69, 0x74, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x25,
+	0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x77,
+	0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x2e, 0x53, 0x68, 0x6f, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x52,
+	0x04, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x22, 0x0a, 0x10, 0x43, 0x53, 0x50, 0x65, 0x72, 0x6d, 0x69,
+	0x74, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x22, 0x47, 0x0a, 0x10, 0x53, 0x43, 0x50,
+	0x65, 0x72, 0x6d, 0x69, 0x74, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x33, 0x0a,
+	0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e,
+	0x32, 0x15, 0x2e, 0x77, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73,
+	0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f,
+	0x64, 0x65, 0x2a, 0x86, 0x02, 0x0a, 0x0c, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43,
 	0x6f, 0x64, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x53, 0x75, 0x63, 0x65,
 	0x73, 0x73, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x45, 0x72, 0x72,
 	0x6f, 0x72, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x4e, 0x6f, 0x54,
@@ -3401,7 +4393,7 @@ var file_welfare_proto_rawDesc = []byte{
 	0x73, 0x10, 0x09, 0x12, 0x17, 0x0a, 0x13, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x50, 0x69, 0x67, 0x62,
 	0x61, 0x6e, 0x6b, 0x4e, 0x6f, 0x74, 0x46, 0x75, 0x6c, 0x6c, 0x10, 0x0a, 0x12, 0x1d, 0x0a, 0x19,
 	0x4f, 0x50, 0x52, 0x43, 0x5f, 0x50, 0x69, 0x67, 0x62, 0x61, 0x6e, 0x6b, 0x4f, 0x76, 0x65, 0x72,
-	0x54, 0x61, 0x6b, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x10, 0x0b, 0x2a, 0xff, 0x08, 0x0a, 0x09,
+	0x54, 0x61, 0x6b, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x10, 0x0b, 0x2a, 0xe9, 0x0a, 0x0a, 0x09,
 	0x53, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x12, 0x14, 0x0a, 0x10, 0x50, 0x41, 0x43,
 	0x4b, 0x45, 0x54, 0x5f, 0x53, 0x48, 0x4f, 0x50, 0x5f, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12,
 	0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x57, 0x45, 0x4c,
@@ -3473,10 +4465,25 @@ var file_welfare_proto_rawDesc = []byte{
 	0x53, 0x43, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x42, 0x61, 0x6e, 0x6b, 0x47, 0x65, 0x74,
 	0x49, 0x6e, 0x66, 0x6f, 0x10, 0xe3, 0x16, 0x12, 0x24, 0x0a, 0x1f, 0x50, 0x41, 0x43, 0x4b, 0x45,
 	0x54, 0x5f, 0x53, 0x43, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x42, 0x61, 0x6e, 0x6b, 0x54,
-	0x61, 0x6b, 0x65, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x10, 0xe4, 0x16, 0x42, 0x27, 0x5a,
-	0x25, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d,
-	0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x77,
-	0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+	0x61, 0x6b, 0x65, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x10, 0xe4, 0x16, 0x12, 0x18, 0x0a,
+	0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74,
+	0x49, 0x6e, 0x66, 0x6f, 0x10, 0xe5, 0x16, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45,
+	0x54, 0x5f, 0x53, 0x43, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x10, 0xe6,
+	0x16, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x50, 0x65,
+	0x72, 0x6d, 0x69, 0x74, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4c, 0x69, 0x73, 0x74,
+	0x10, 0xe7, 0x16, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43,
+	0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4c, 0x69,
+	0x73, 0x74, 0x10, 0xe8, 0x16, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f,
+	0x43, 0x53, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x41, 0x77, 0x61, 0x72, 0x64, 0x10, 0xe9, 0x16,
+	0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x50, 0x65, 0x72,
+	0x6d, 0x69, 0x74, 0x41, 0x77, 0x61, 0x72, 0x64, 0x10, 0xea, 0x16, 0x12, 0x1c, 0x0a, 0x17, 0x50,
+	0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x45, 0x78,
+	0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x10, 0xeb, 0x16, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43,
+	0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x45, 0x78, 0x63, 0x68,
+	0x61, 0x6e, 0x67, 0x65, 0x10, 0xec, 0x16, 0x42, 0x27, 0x5a, 0x25, 0x6d, 0x6f, 0x6e, 0x67, 0x6f,
+	0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x77, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65,
+	0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 }
 
 var (
@@ -3492,7 +4499,7 @@ func file_welfare_proto_rawDescGZIP() []byte {
 }
 
 var file_welfare_proto_enumTypes = make([]protoimpl.EnumInfo, 2)
-var file_welfare_proto_msgTypes = make([]protoimpl.MessageInfo, 45)
+var file_welfare_proto_msgTypes = make([]protoimpl.MessageInfo, 59)
 var file_welfare_proto_goTypes = []interface{}{
 	(OpResultCode)(0),                  // 0: welfare.OpResultCode
 	(SPacketID)(0),                     // 1: welfare.SPacketID
@@ -3540,7 +4547,21 @@ var file_welfare_proto_goTypes = []interface{}{
 	(*CSDiamondBankGetInfo)(nil),       // 43: welfare.CSDiamondBankGetInfo
 	(*SCDiamondBankGetInfo)(nil),       // 44: welfare.SCDiamondBankGetInfo
 	(*SCDiamondBankTakeDiamond)(nil),   // 45: welfare.SCDiamondBankTakeDiamond
-	nil,                                // 46: welfare.SCInviteInfo.PayScoreEntry
+	(*CSPermitInfo)(nil),               // 46: welfare.CSPermitInfo
+	(*PropInfo)(nil),                   // 47: welfare.PropInfo
+	(*PropItem)(nil),                   // 48: welfare.PropItem
+	(*PermitAward)(nil),                // 49: welfare.PermitAward
+	(*PermitShow)(nil),                 // 50: welfare.PermitShow
+	(*PermitRankAward)(nil),            // 51: welfare.PermitRankAward
+	(*SCPermitInfo)(nil),               // 52: welfare.SCPermitInfo
+	(*CSPermitAward)(nil),              // 53: welfare.CSPermitAward
+	(*SCPermitAward)(nil),              // 54: welfare.SCPermitAward
+	(*CSPermitExchangeList)(nil),       // 55: welfare.CSPermitExchangeList
+	(*ShopInfo)(nil),                   // 56: welfare.ShopInfo
+	(*SCPermitExchangeList)(nil),       // 57: welfare.SCPermitExchangeList
+	(*CSPermitExchange)(nil),           // 58: welfare.CSPermitExchange
+	(*SCPermitExchange)(nil),           // 59: welfare.SCPermitExchange
+	nil,                                // 60: welfare.SCInviteInfo.PayScoreEntry
 }
 var file_welfare_proto_depIdxs = []int32{
 	0,  // 0: welfare.SCGetReliefFund.OpRetCode:type_name -> welfare.OpResultCode
@@ -3567,7 +4588,7 @@ var file_welfare_proto_depIdxs = []int32{
 	0,  // 21: welfare.SCWelfareContinuousPayData.OpRetCode:type_name -> welfare.OpResultCode
 	23, // 22: welfare.SCWelfareContinuousPayData.List:type_name -> welfare.WelfareSpree
 	0,  // 23: welfare.SCWelfareContinuousPay.OpRetCode:type_name -> welfare.OpResultCode
-	46, // 24: welfare.SCInviteInfo.PayScore:type_name -> welfare.SCInviteInfo.PayScoreEntry
+	60, // 24: welfare.SCInviteInfo.PayScore:type_name -> welfare.SCInviteInfo.PayScoreEntry
 	35, // 25: welfare.SCInviteInfo.Awards1:type_name -> welfare.RankAward
 	35, // 26: welfare.SCInviteInfo.Awards2:type_name -> welfare.RankAward
 	35, // 27: welfare.SCInviteInfo.Awards3:type_name -> welfare.RankAward
@@ -3576,11 +4597,25 @@ var file_welfare_proto_depIdxs = []int32{
 	0,  // 30: welfare.SCPigbankTakeCoin.OpRetCode:type_name -> welfare.OpResultCode
 	0,  // 31: welfare.SCDiamondBankGetInfo.OpRetCode:type_name -> welfare.OpResultCode
 	0,  // 32: welfare.SCDiamondBankTakeDiamond.OpRetCode:type_name -> welfare.OpResultCode
-	33, // [33:33] is the sub-list for method output_type
-	33, // [33:33] is the sub-list for method input_type
-	33, // [33:33] is the sub-list for extension type_name
-	33, // [33:33] is the sub-list for extension extendee
-	0,  // [0:33] is the sub-list for field type_name
+	47, // 33: welfare.PropItem.Award:type_name -> welfare.PropInfo
+	48, // 34: welfare.PermitAward.Award1:type_name -> welfare.PropItem
+	48, // 35: welfare.PermitAward.Award2:type_name -> welfare.PropItem
+	47, // 36: welfare.PermitRankAward.ItemId:type_name -> welfare.PropInfo
+	49, // 37: welfare.SCPermitInfo.Award:type_name -> welfare.PermitAward
+	50, // 38: welfare.SCPermitInfo.ShowList:type_name -> welfare.PermitShow
+	51, // 39: welfare.SCPermitInfo.RankAward:type_name -> welfare.PermitRankAward
+	0,  // 40: welfare.SCPermitAward.OpRetCode:type_name -> welfare.OpResultCode
+	47, // 41: welfare.SCPermitAward.Award1:type_name -> welfare.PropInfo
+	47, // 42: welfare.SCPermitAward.Award2:type_name -> welfare.PropInfo
+	47, // 43: welfare.ShopInfo.Gain:type_name -> welfare.PropInfo
+	47, // 44: welfare.ShopInfo.Cost:type_name -> welfare.PropInfo
+	56, // 45: welfare.SCPermitExchangeList.List:type_name -> welfare.ShopInfo
+	0,  // 46: welfare.SCPermitExchange.OpRetCode:type_name -> welfare.OpResultCode
+	47, // [47:47] is the sub-list for method output_type
+	47, // [47:47] is the sub-list for method input_type
+	47, // [47:47] is the sub-list for extension type_name
+	47, // [47:47] is the sub-list for extension extendee
+	0,  // [0:47] is the sub-list for field type_name
 }
 
 func init() { file_welfare_proto_init() }
@@ -4117,6 +5152,174 @@ func file_welfare_proto_init() {
 				return nil
 			}
 		}
+		file_welfare_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*CSPermitInfo); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_welfare_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*PropInfo); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_welfare_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*PropItem); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_welfare_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*PermitAward); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_welfare_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*PermitShow); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_welfare_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*PermitRankAward); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_welfare_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*SCPermitInfo); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_welfare_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*CSPermitAward); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_welfare_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*SCPermitAward); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_welfare_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*CSPermitExchangeList); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_welfare_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*ShopInfo); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_welfare_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*SCPermitExchangeList); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_welfare_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*CSPermitExchange); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_welfare_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*SCPermitExchange); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
 	}
 	type x struct{}
 	out := protoimpl.TypeBuilder{
@@ -4124,7 +5327,7 @@ func file_welfare_proto_init() {
 			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
 			RawDescriptor: file_welfare_proto_rawDesc,
 			NumEnums:      2,
-			NumMessages:   45,
+			NumMessages:   59,
 			NumExtensions: 0,
 			NumServices:   0,
 		},
diff --git a/protocol/welfare/welfare.proto b/protocol/welfare/welfare.proto
index 6388dac..cf33814 100644
--- a/protocol/welfare/welfare.proto
+++ b/protocol/welfare/welfare.proto
@@ -60,8 +60,18 @@ enum SPacketID {
   PACKET_CSDiamondBankGetInfo = 2914;	//钻石存钱罐信息获取
   PACKET_SCDiamondBankGetInfo = 2915;	//钻石存钱罐信息返回
   PACKET_SCDiamondBankTakeDiamond = 2916;	//钻石存钱罐领取返回
-  
-  
+
+  PACKET_CSPermitInfo = 2917;// 通行证奖励
+  PACKET_SCPermitInfo = 2918;// 通行证奖励
+
+  PACKET_CSPermitExchangeList = 2919; // 通行证兑换列表
+  PACKET_SCPermitExchangeList = 2920; // 通行证兑换列表
+
+  PACKET_CSPermitAward = 2921; // 领取通行证奖励
+  PACKET_SCPermitAward = 2922; // 领取通行证奖励
+
+  PACKET_CSPermitExchange = 2923; // 通行证兑换
+  PACKET_SCPermitExchange = 2924; // 通行证兑换
 }
 
 //救济金领取
@@ -376,4 +386,96 @@ message SCDiamondBankTakeDiamond{
   int64 Price = 6;	//原价
   int64 NowPrice = 7;	//现价
   int32 ShopId = 8;	//商城ID
+}
+
+// 赛季通行证信息
+//PACKET_CSPermitInfo
+message CSPermitInfo{
+}
+
+message PropInfo{
+  int32 ItemId = 1;//物品ID
+  int64 ItemNum = 2;//物品数量
+}
+
+message PropItem{
+  repeated PropInfo Award = 1; // 奖励
+  int64 Status = 2; // 奖励状态 0默认 1可领取 2已领取
+  int32 Id = 3; // 奖励id; 领奖时使用
+}
+
+message PermitAward{
+  int64 Exp = 1; // 赛季经验
+  int64 Level = 2; // 等级
+  PropItem Award1 = 3; // 普通奖励
+  PropItem Award2 = 4; // 典藏奖励
+}
+
+message PermitShow{
+  int32 ShowType = 1; // 类型
+  int32 ShowVolume = 2; // id
+  int32 Location = 3; // 跳转界面
+}
+
+message PermitRankAward{
+  int32 Start = 1; // 开始排名；第一名为0
+  int32 End = 2; // 结束排名
+  repeated PropInfo ItemId = 3; // 奖励
+}
+
+//PACKET_SCPermitInfo
+message SCPermitInfo{
+  int64 Exp = 1; // 玩家赛季经验
+  int64 Level = 2; // 玩家等级
+  repeated PermitAward Award = 3; // 奖励列表
+  repeated int64 Timestamp = 4; // 赛季开始和结束时间戳 [开始时间戳，结束时间戳]
+  repeated PermitShow ShowList = 5; // 展示列表
+  bool IsPermit = 6; // 是否已购买典藏通行证
+  repeated PermitRankAward RankAward = 7; // 排行榜奖励
+}
+
+// 领取赛季通行证奖励
+//PACKET_CSPermitAward
+message CSPermitAward{
+  int32 Tp = 1; // 0奖励 1普通奖励 2典藏奖励
+  int32 Id = 2; // 奖励id; 0：一键领取
+}
+//PACKET_SCPermitAward
+message SCPermitAward{
+  OpResultCode OpRetCode = 1;  // 错误码
+  repeated PropInfo Award1 = 2; // 普通奖励
+  repeated PropInfo Award2 = 3; // 典藏奖励
+  int32 Id = 4; // 奖励id; 0：一键领取
+  int32 Tp = 5; // 0奖励 1普通奖励 2典藏奖励
+}
+
+// 赛季通行证兑换商城
+//PACKET_CSPermitExchangeList
+message CSPermitExchangeList{
+}
+
+message ShopInfo{
+  int32 Id = 1; // 商品id
+  repeated PropInfo Gain = 2; // 获得商品
+  repeated PropInfo Cost = 3; // 消耗商品
+  int32 ExchangeTimes = 4; // 最大兑换次数
+  int32 RemainTimes = 5; // 剩余兑换次数
+  int64 Status = 6; // 兑换状态 0默认 1可领取 2已领取
+  int64 Level = 7; // 兑换所需等级
+  bool NeedPermit = 8; // 需要典藏通行证
+}
+
+//PACKET_SCPermitExchangeList
+message SCPermitExchangeList{
+  repeated ShopInfo List = 1; // 兑换列表
+}
+
+// 赛季通行证商城兑换
+//PACKET_CSPermitExchange
+message CSPermitExchange{
+  int32 Id = 1; // 商品id
+}
+//PACKET_SCPermitExchange
+message SCPermitExchange{
+  OpResultCode OpRetCode = 1;  // 错误码
 }
\ No newline at end of file
diff --git a/xlsx/DB_PassShow.xlsx b/xlsx/DB_PassShow.xlsx
new file mode 100644
index 0000000..3641ac2
Binary files /dev/null and b/xlsx/DB_PassShow.xlsx differ
