diff --git a/data/DB_NewYearActivity.dat b/data/DB_NewYearActivity.dat
index b28d448..bf7a14a 100644
--- a/data/DB_NewYearActivity.dat
+++ b/data/DB_NewYearActivity.dat
@@ -4,10 +4,10 @@ SignReward50014,10;100001,100000"签到奖励
 .
SignExcReward50015,1"签到额外奖励
 =SignExcRewardMax2"$签到额外奖励赠送次数上限
 9SignExcRewardProp30"签到额外奖励赠送概率
- BossExp6000000"
+ BossExp6800000"
 BOSS血量
-9
-BossReward100001,100000;100002,10"BOSS击杀奖励
+:
+BossReward100001,1000000;100002,10"BOSS击杀奖励
 /
LuckyRankNeed10000"幸运榜上榜条件
 /RankNeed7000000"总伤害榜上榜条件
 >	LittleHurtGold
@@ -26,4 +26,4 @@ GiftShopID991001,991002,991003"礼包ID
 @
GiftShopLimit3,0,0"&礼包每日限购次数,0为不限购
 4BossExcLimit30"年兽死亡额外掉落要求
 "	BuffCount1"Buff生效次数
-oExchangeDiamond30,5,1000000"L单次兑换爆竹所需要消耗的钻石,获得数量，获得金币数量
\ No newline at end of file
+oExchangeDiamond30,5,1500000"L单次兑换爆竹所需要消耗的钻石,获得数量，获得金币数量
\ No newline at end of file
diff --git a/data/DB_NewYearActivity.json b/data/DB_NewYearActivity.json
index f60e84e..5005b8a 100644
--- a/data/DB_NewYearActivity.json
+++ b/data/DB_NewYearActivity.json
@@ -27,13 +27,13 @@
 		{
 			"Id": 5,
 			"PorpName": "BossExp",
-			"PropValue": "6000000",
+			"PropValue": "6800000",
 			"PropDec": "BOSS血量"
 		},
 		{
 			"Id": 6,
 			"PorpName": "BossReward",
-			"PropValue": "100001,100000;100002,10",
+			"PropValue": "100001,1000000;100002,10",
 			"PropDec": "BOSS击杀奖励"
 		},
 		{
@@ -123,7 +123,7 @@
 		{
 			"Id": 21,
 			"PorpName": "ExchangeDiamond",
-			"PropValue": "30,5,1000000",
+			"PropValue": "30,5,1500000",
 			"PropDec": "单次兑换爆竹所需要消耗的钻石,获得数量，获得金币数量"
 		}
 	]
diff --git a/data/DB_PropExchange.dat b/data/DB_PropExchange.dat
index 2708399..020eca0 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 0bd5eec..bf04f72 100644
Binary files a/data/DB_Task.dat and b/data/DB_Task.dat differ
diff --git a/data/DB_Task.json b/data/DB_Task.json
index 8aef01a..d95a9a1 100644
--- a/data/DB_Task.json
+++ b/data/DB_Task.json
@@ -1245,7 +1245,8 @@
 			"TargetTimes": 1,
 			"FinishTimes": 1,
 			"Award": {
-				"50014": 10
+				"50001": 5,
+				"50014": 1
 			}
 		},
 		{
@@ -1258,6 +1259,7 @@
 			"TargetTimes": 3600,
 			"FinishTimes": 1,
 			"Award": {
+				"100001": 100000,
 				"50014": 10
 			}
 		},
@@ -1271,7 +1273,8 @@
 			"TargetTimes": 1,
 			"FinishTimes": 1,
 			"Award": {
-				"50014": 10
+				"50001": 5,
+				"50014": 5
 			}
 		},
 		{
@@ -1284,7 +1287,8 @@
 			"TargetTimes": 1,
 			"FinishTimes": 1,
 			"Award": {
-				"50014": 10
+				"100002": 5,
+				"50014": 5
 			},
 			"GameType": 1
 		},
@@ -1298,7 +1302,8 @@
 			"TargetTimes": 10,
 			"FinishTimes": 1,
 			"Award": {
-				"50014": 10
+				"100001": 30000,
+				"50014": 5
 			},
 			"GameType": 2
 		},
@@ -1312,7 +1317,7 @@
 			"TargetTimes": 1000000,
 			"FinishTimes": 1,
 			"Award": {
-				"50014": 10
+				"50014": 5
 			}
 		},
 		{
@@ -1325,7 +1330,7 @@
 			"TargetTimes": 100,
 			"FinishTimes": 1,
 			"Award": {
-				"50014": 10
+				"50014": 20
 			}
 		},
 		{
@@ -1351,7 +1356,7 @@
 			"TargetTimes": 10000000,
 			"FinishTimes": 1,
 			"Award": {
-				"50014": 10
+				"50014": 15
 			}
 		},
 		{
@@ -1364,7 +1369,7 @@
 			"TargetTimes": 20000000,
 			"FinishTimes": 1,
 			"Award": {
-				"50014": 10
+				"50014": 20
 			}
 		},
 		{
@@ -1390,7 +1395,7 @@
 			"TargetTimes": 500,
 			"FinishTimes": 1,
 			"Award": {
-				"50014": 10
+				"50015": 5
 			}
 		},
 		{
@@ -1403,7 +1408,7 @@
 			"TargetTimes": 199,
 			"FinishTimes": 1,
 			"Award": {
-				"50015": 10
+				"50015": 3
 			}
 		},
 		{
@@ -1416,7 +1421,7 @@
 			"TargetTimes": 1,
 			"FinishTimes": 1,
 			"Award": {
-				"50015": 10
+				"50014": 5
 			}
 		},
 		{
@@ -1429,7 +1434,7 @@
 			"TargetTimes": 1000000,
 			"FinishTimes": 1,
 			"Award": {
-				"50015": 10
+				"100001": 500000
 			}
 		},
 		{
@@ -1442,7 +1447,7 @@
 			"TargetTimes": 10000000,
 			"FinishTimes": 1,
 			"Award": {
-				"50015": 10
+				"100002": 5
 			}
 		},
 		{
@@ -1455,7 +1460,8 @@
 			"TargetTimes": 999,
 			"FinishTimes": 1,
 			"Award": {
-				"50015": 10
+				"100001": 1000000,
+				"50015": 5
 			}
 		},
 		{
@@ -1468,6 +1474,7 @@
 			"TargetTimes": 1999,
 			"FinishTimes": 1,
 			"Award": {
+				"100001": 10000000,
 				"50015": 10
 			}
 		},
@@ -1481,7 +1488,8 @@
 			"TargetTimes": 5999,
 			"FinishTimes": 1,
 			"Award": {
-				"50014": 10
+				"100001": 30000000,
+				"50015": 20
 			}
 		},
 		{
@@ -1494,7 +1502,8 @@
 			"TargetTimes": 9999,
 			"FinishTimes": 1,
 			"Award": {
-				"50014": 10
+				"100001": 50000000,
+				"50015": 45
 			}
 		},
 		{
@@ -1507,7 +1516,7 @@
 			"TargetTimes": 1,
 			"FinishTimes": 1,
 			"Award": {
-				"50014": 10
+				"50015": 2
 			}
 		},
 		{
@@ -1520,7 +1529,7 @@
 			"TargetTimes": 2,
 			"FinishTimes": 1,
 			"Award": {
-				"50014": 10
+				"50015": 5
 			}
 		},
 		{
@@ -1533,7 +1542,7 @@
 			"TargetTimes": 3,
 			"FinishTimes": 1,
 			"Award": {
-				"50014": 10
+				"50015": 10
 			}
 		},
 		{
@@ -1546,7 +1555,7 @@
 			"TargetTimes": 5,
 			"FinishTimes": 1,
 			"Award": {
-				"50014": 10
+				"50015": 15
 			}
 		},
 		{
@@ -1559,7 +1568,7 @@
 			"TargetTimes": 8,
 			"FinishTimes": 1,
 			"Award": {
-				"50014": 10
+				"50015": 20
 			}
 		},
 		{
@@ -1572,7 +1581,7 @@
 			"TargetTimes": 10,
 			"FinishTimes": 1,
 			"Award": {
-				"50014": 10
+				"50015": 45
 			}
 		},
 		{
@@ -1586,7 +1595,7 @@
 			"FinishTimes": 1,
 			"Award": {
 				"100001": 100000,
-				"100002": 1
+				"50014": 2
 			}
 		},
 		{
@@ -1600,7 +1609,7 @@
 			"FinishTimes": 1,
 			"Award": {
 				"100001": 200000,
-				"100002": 2
+				"50015": 2
 			}
 		},
 		{
@@ -1614,7 +1623,7 @@
 			"FinishTimes": 1,
 			"Award": {
 				"100001": 300000,
-				"100002": 3
+				"50015": 5
 			}
 		},
 		{
@@ -1628,7 +1637,7 @@
 			"FinishTimes": 1,
 			"Award": {
 				"100001": 500000,
-				"100002": 5
+				"50015": 10
 			}
 		},
 		{
@@ -1642,7 +1651,7 @@
 			"FinishTimes": 1,
 			"Award": {
 				"100001": 1000000,
-				"100002": 10
+				"50015": 15
 			}
 		},
 		{
@@ -1656,7 +1665,7 @@
 			"FinishTimes": 1,
 			"Award": {
 				"100001": 2000000,
-				"100002": 20
+				"50015": 25
 			}
 		}
 	]
diff --git a/model/player.go b/model/player.go
index 8d1af92..259802e 100644
--- a/model/player.go
+++ b/model/player.go
@@ -697,19 +697,21 @@ type WebPlayerDataParam struct {
 }
 
 type NianData struct {
-	ActivityStartTime int64           //活动开始时间
-	ActivityEndTime   int64           //活动结束时间
-	BossHp            int64           //Boss当前血量
-	BuffStatus        bool            //Buff领取状态
-	BuffCount         int64           //Buff剩余生效次数
-	SignAwardTime     int64           //签到奖励领取时间
-	BossDieCount      int32           //BOSS死亡次数
-	LittleHurt        int32           //小爆竹次数
-	BigHurt           int32           //大爆竹次数
-	OtherAwardNum     map[int32]int32 //奖励掉落数量
-	AttackMaxHp       int64           //单次攻击最大血量
-	AttackSumHp       int64           //攻击总伤害
-	GiftShop          map[int32]int32 //购买每日礼包记录
+	ActivityStartTime   int64           //活动开始时间
+	ActivityEndTime     int64           //活动结束时间
+	BossHp              int64           //Boss当前血量
+	BuffStatus          bool            //Buff领取状态
+	BuffCount           int64           //Buff剩余生效次数
+	SignAwardTime       int64           //签到奖励领取时间
+	SignOtherAwardCount int32           //签到额外奖励掉落数量
+	SignOtherAwardProp  int32           //签到额外奖励掉落概率
+	BossDieCount        int32           //BOSS死亡次数
+	LittleHurt          int32           //小爆竹次数
+	BigHurt             int32           //大爆竹次数
+	OtherAwardNum       map[int32]int32 //奖励掉落数量
+	AttackMaxHp         int64           //单次攻击最大血量
+	AttackSumHp         int64           //攻击总伤害
+	GiftShop            map[int32]int32 //购买每日礼包记录
 }
 
 func ConvertPlayerDataToWebData(param *WebPlayerDataParam) *webapi.PlayerData {
diff --git a/protocol/activity/nian.pb.go b/protocol/activity/nian.pb.go
index d810494..5525454 100644
--- a/protocol/activity/nian.pb.go
+++ b/protocol/activity/nian.pb.go
@@ -192,22 +192,26 @@ type SCNianData struct {
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
-	ActivityStartTime int64           `protobuf:"varint,1,opt,name=ActivityStartTime,proto3" json:"ActivityStartTime,omitempty"` //活动开始时间
-	ActivityEndTime   int64           `protobuf:"varint,2,opt,name=ActivityEndTime,proto3" json:"ActivityEndTime,omitempty"`     //活动结束时间
-	BossMaxHp         int64           `protobuf:"varint,3,opt,name=BossMaxHp,proto3" json:"BossMaxHp,omitempty"`                 //Boss最大血量
-	BossHp            int64           `protobuf:"varint,4,opt,name=BossHp,proto3" json:"BossHp,omitempty"`                       //Boss当前血量
-	RankData          []*NianRankData `protobuf:"bytes,5,rep,name=RankData,proto3" json:"RankData,omitempty"`                    //排行榜奖励配置
-	AwardTime         int64           `protobuf:"varint,6,opt,name=AwardTime,proto3" json:"AwardTime,omitempty"`                 //每日签到领取时间
-	BuffCount         int64           `protobuf:"varint,7,opt,name=BuffCount,proto3" json:"BuffCount,omitempty"`                 //Buff剩余次数
-	BuffStatus        bool            `protobuf:"varint,8,opt,name=BuffStatus,proto3" json:"BuffStatus,omitempty"`               //Buff领取状态
-	SignAwardTime     int64           `protobuf:"varint,9,opt,name=SignAwardTime,proto3" json:"SignAwardTime,omitempty"`         //签到领取时间 0-未领取
-	BuffStartTime     int64           `protobuf:"varint,10,opt,name=BuffStartTime,proto3" json:"BuffStartTime,omitempty"`        //Buff开始领取时间
-	BuffEndTime       int64           `protobuf:"varint,11,opt,name=BuffEndTime,proto3" json:"BuffEndTime,omitempty"`            //Buff结束领取时间
-	ShopData          []*ShopData     `protobuf:"bytes,12,rep,name=shopData,proto3" json:"shopData,omitempty"`                   //购买礼包数量
-	ChangeData        string          `protobuf:"bytes,13,opt,name=ChangeData,proto3" json:"ChangeData,omitempty"`               //兑换数据
-	LuckyRankNeed     string          `protobuf:"bytes,14,opt,name=LuckyRankNeed,proto3" json:"LuckyRankNeed,omitempty"`         //幸运榜上榜条件
-	RankNeed          string          `protobuf:"bytes,15,opt,name=RankNeed,proto3" json:"RankNeed,omitempty"`                   //总伤害榜上榜条件
-	Switch            int32           `protobuf:"varint,16,opt,name=Switch,proto3" json:"Switch,omitempty"`                      //活动开关 1.开启 2.关闭
+	ActivityStartTime   int64            `protobuf:"varint,1,opt,name=ActivityStartTime,proto3" json:"ActivityStartTime,omitempty"`      //活动开始时间
+	ActivityEndTime     int64            `protobuf:"varint,2,opt,name=ActivityEndTime,proto3" json:"ActivityEndTime,omitempty"`          //活动结束时间
+	BossMaxHp           int64            `protobuf:"varint,3,opt,name=BossMaxHp,proto3" json:"BossMaxHp,omitempty"`                      //Boss最大血量
+	BossHp              int64            `protobuf:"varint,4,opt,name=BossHp,proto3" json:"BossHp,omitempty"`                            //Boss当前血量
+	RankData            []*NianRankData  `protobuf:"bytes,5,rep,name=RankData,proto3" json:"RankData,omitempty"`                         //排行榜奖励配置
+	AwardTime           int64            `protobuf:"varint,6,opt,name=AwardTime,proto3" json:"AwardTime,omitempty"`                      //每日签到领取时间
+	BuffCount           int64            `protobuf:"varint,7,opt,name=BuffCount,proto3" json:"BuffCount,omitempty"`                      //Buff剩余次数
+	BuffStatus          bool             `protobuf:"varint,8,opt,name=BuffStatus,proto3" json:"BuffStatus,omitempty"`                    //Buff领取状态
+	SignAwardTime       int64            `protobuf:"varint,9,opt,name=SignAwardTime,proto3" json:"SignAwardTime,omitempty"`              //签到领取时间 0-未领取
+	BuffStartTime       int64            `protobuf:"varint,10,opt,name=BuffStartTime,proto3" json:"BuffStartTime,omitempty"`             //Buff开始领取时间
+	BuffEndTime         int64            `protobuf:"varint,11,opt,name=BuffEndTime,proto3" json:"BuffEndTime,omitempty"`                 //Buff结束领取时间
+	ShopData            []*ShopData      `protobuf:"bytes,12,rep,name=shopData,proto3" json:"shopData,omitempty"`                        //购买礼包数量
+	ChangeData          string           `protobuf:"bytes,13,opt,name=ChangeData,proto3" json:"ChangeData,omitempty"`                    //兑换数据
+	LuckyRankNeed       string           `protobuf:"bytes,14,opt,name=LuckyRankNeed,proto3" json:"LuckyRankNeed,omitempty"`              //幸运榜上榜条件
+	RankNeed            string           `protobuf:"bytes,15,opt,name=RankNeed,proto3" json:"RankNeed,omitempty"`                        //总伤害榜上榜条件
+	Switch              int32            `protobuf:"varint,16,opt,name=Switch,proto3" json:"Switch,omitempty"`                           //活动开关 1.开启 2.关闭
+	OtherSignAwardCount int32            `protobuf:"varint,17,opt,name=OtherSignAwardCount,proto3" json:"OtherSignAwardCount,omitempty"` //额外奖励领取次数
+	OtherSignAwardProp  int32            `protobuf:"varint,18,opt,name=OtherSignAwardProp,proto3" json:"OtherSignAwardProp,omitempty"`   //额外奖励概率
+	OtherSignAward      []*RankAwardData `protobuf:"bytes,19,rep,name=OtherSignAward,proto3" json:"OtherSignAward,omitempty"`            //签到额外奖励
+	OtherSignMaxCount   int32            `protobuf:"varint,20,opt,name=OtherSignMaxCount,proto3" json:"OtherSignMaxCount,omitempty"`     //额外奖励领取次数上限
 }
 
 func (x *SCNianData) Reset() {
@@ -354,6 +358,34 @@ func (x *SCNianData) GetSwitch() int32 {
 	return 0
 }
 
+func (x *SCNianData) GetOtherSignAwardCount() int32 {
+	if x != nil {
+		return x.OtherSignAwardCount
+	}
+	return 0
+}
+
+func (x *SCNianData) GetOtherSignAwardProp() int32 {
+	if x != nil {
+		return x.OtherSignAwardProp
+	}
+	return 0
+}
+
+func (x *SCNianData) GetOtherSignAward() []*RankAwardData {
+	if x != nil {
+		return x.OtherSignAward
+	}
+	return nil
+}
+
+func (x *SCNianData) GetOtherSignMaxCount() int32 {
+	if x != nil {
+		return x.OtherSignMaxCount
+	}
+	return 0
+}
+
 type ShopData struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
@@ -886,9 +918,12 @@ type SCNianSignAward struct {
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
-	SignAwardTime int64             `protobuf:"varint,1,opt,name=SignAwardTime,proto3" json:"SignAwardTime,omitempty"`
-	SignAward     []*RankAwardData  `protobuf:"bytes,2,rep,name=SignAward,proto3" json:"SignAward,omitempty"`                                  //签到奖励
-	OpRetCode     OpResultCode_Nian `protobuf:"varint,3,opt,name=OpRetCode,proto3,enum=activity.OpResultCode_Nian" json:"OpRetCode,omitempty"` // 返回错误码
+	SignAwardTime       int64             `protobuf:"varint,1,opt,name=SignAwardTime,proto3" json:"SignAwardTime,omitempty"`
+	SignAward           []*RankAwardData  `protobuf:"bytes,2,rep,name=SignAward,proto3" json:"SignAward,omitempty"`                                  //签到奖励
+	OtherSignAward      []*RankAwardData  `protobuf:"bytes,3,rep,name=OtherSignAward,proto3" json:"OtherSignAward,omitempty"`                        //签到额外奖励
+	OtherSignAwardCount int32             `protobuf:"varint,4,opt,name=OtherSignAwardCount,proto3" json:"OtherSignAwardCount,omitempty"`             //额外奖励领取次数
+	OtherSignAwardProp  int32             `protobuf:"varint,5,opt,name=OtherSignAwardProp,proto3" json:"OtherSignAwardProp,omitempty"`               //额外奖励概率
+	OpRetCode           OpResultCode_Nian `protobuf:"varint,6,opt,name=OpRetCode,proto3,enum=activity.OpResultCode_Nian" json:"OpRetCode,omitempty"` // 返回错误码
 }
 
 func (x *SCNianSignAward) Reset() {
@@ -937,6 +972,27 @@ func (x *SCNianSignAward) GetSignAward() []*RankAwardData {
 	return nil
 }
 
+func (x *SCNianSignAward) GetOtherSignAward() []*RankAwardData {
+	if x != nil {
+		return x.OtherSignAward
+	}
+	return nil
+}
+
+func (x *SCNianSignAward) GetOtherSignAwardCount() int32 {
+	if x != nil {
+		return x.OtherSignAwardCount
+	}
+	return 0
+}
+
+func (x *SCNianSignAward) GetOtherSignAwardProp() int32 {
+	if x != nil {
+		return x.OtherSignAwardProp
+	}
+	return 0
+}
+
 func (x *SCNianSignAward) GetOpRetCode() OpResultCode_Nian {
 	if x != nil {
 		return x.OpRetCode
@@ -1063,7 +1119,7 @@ var file_protocol_activity_nian_proto_rawDesc = []byte{
 	0x0a, 0x1c, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x61, 0x63, 0x74, 0x69, 0x76,
 	0x69, 0x74, 0x79, 0x2f, 0x6e, 0x69, 0x61, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x08,
 	0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x22, 0x0c, 0x0a, 0x0a, 0x43, 0x53, 0x4e, 0x69,
-	0x61, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x22, 0xc2, 0x04, 0x0a, 0x0a, 0x53, 0x43, 0x4e, 0x69, 0x61,
+	0x61, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x22, 0x93, 0x06, 0x0a, 0x0a, 0x53, 0x43, 0x4e, 0x69, 0x61,
 	0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2c, 0x0a, 0x11, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74,
 	0x79, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03,
 	0x52, 0x11, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54,
@@ -1099,113 +1155,136 @@ var file_protocol_activity_nian_proto_rawDesc = []byte{
 	0x61, 0x6e, 0x6b, 0x4e, 0x65, 0x65, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x61, 0x6e, 0x6b, 0x4e,
 	0x65, 0x65, 0x64, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x52, 0x61, 0x6e, 0x6b, 0x4e,
 	0x65, 0x65, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x18, 0x10, 0x20,
-	0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x22, 0x5c, 0x0a, 0x08, 0x53,
-	0x68, 0x6f, 0x70, 0x44, 0x61, 0x74, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x68, 0x6f, 0x70, 0x49,
-	0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x68, 0x6f, 0x70, 0x49, 0x64, 0x12,
-	0x18, 0x0a, 0x07, 0x53, 0x68, 0x6f, 0x70, 0x4e, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05,
-	0x52, 0x07, 0x53, 0x68, 0x6f, 0x70, 0x4e, 0x75, 0x6d, 0x12, 0x1e, 0x0a, 0x0a, 0x4d, 0x61, 0x78,
-	0x53, 0x68, 0x6f, 0x70, 0x4e, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x4d,
-	0x61, 0x78, 0x53, 0x68, 0x6f, 0x70, 0x4e, 0x75, 0x6d, 0x22, 0x0c, 0x0a, 0x0a, 0x43, 0x53, 0x4e,
-	0x69, 0x61, 0x6e, 0x42, 0x75, 0x66, 0x66, 0x22, 0x65, 0x0a, 0x0a, 0x53, 0x43, 0x4e, 0x69, 0x61,
-	0x6e, 0x42, 0x75, 0x66, 0x66, 0x12, 0x1c, 0x0a, 0x09, 0x42, 0x75, 0x66, 0x66, 0x43, 0x6f, 0x75,
-	0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x42, 0x75, 0x66, 0x66, 0x43, 0x6f,
-	0x75, 0x6e, 0x74, 0x12, 0x39, 0x0a, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65,
-	0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74,
-	0x79, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x4e,
-	0x69, 0x61, 0x6e, 0x52, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x22, 0x52,
-	0x0a, 0x0c, 0x4e, 0x69, 0x61, 0x6e, 0x52, 0x61, 0x6e, 0x6b, 0x44, 0x61, 0x74, 0x61, 0x12, 0x16,
-	0x0a, 0x06, 0x54, 0x79, 0x70, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06,
-	0x54, 0x79, 0x70, 0x65, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x18, 0x02,
-	0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e,
-	0x4e, 0x69, 0x61, 0x6e, 0x52, 0x61, 0x6e, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x44, 0x61,
-	0x74, 0x61, 0x22, 0x55, 0x0a, 0x0c, 0x4e, 0x69, 0x61, 0x6e, 0x52, 0x61, 0x6e, 0x6b, 0x49, 0x6e,
-	0x66, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x61, 0x6e, 0x6b, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01,
-	0x28, 0x05, 0x52, 0x06, 0x52, 0x61, 0x6e, 0x6b, 0x49, 0x64, 0x12, 0x2d, 0x0a, 0x05, 0x41, 0x77,
-	0x61, 0x72, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x63, 0x74, 0x69,
+	0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x12, 0x30, 0x0a, 0x13, 0x4f,
+	0x74, 0x68, 0x65, 0x72, 0x53, 0x69, 0x67, 0x6e, 0x41, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x75,
+	0x6e, 0x74, 0x18, 0x11, 0x20, 0x01, 0x28, 0x05, 0x52, 0x13, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x53,
+	0x69, 0x67, 0x6e, 0x41, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2e, 0x0a,
+	0x12, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x53, 0x69, 0x67, 0x6e, 0x41, 0x77, 0x61, 0x72, 0x64, 0x50,
+	0x72, 0x6f, 0x70, 0x18, 0x12, 0x20, 0x01, 0x28, 0x05, 0x52, 0x12, 0x4f, 0x74, 0x68, 0x65, 0x72,
+	0x53, 0x69, 0x67, 0x6e, 0x41, 0x77, 0x61, 0x72, 0x64, 0x50, 0x72, 0x6f, 0x70, 0x12, 0x3f, 0x0a,
+	0x0e, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x53, 0x69, 0x67, 0x6e, 0x41, 0x77, 0x61, 0x72, 0x64, 0x18,
+	0x13, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79,
+	0x2e, 0x52, 0x61, 0x6e, 0x6b, 0x41, 0x77, 0x61, 0x72, 0x64, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0e,
+	0x4f, 0x74, 0x68, 0x65, 0x72, 0x53, 0x69, 0x67, 0x6e, 0x41, 0x77, 0x61, 0x72, 0x64, 0x12, 0x2c,
+	0x0a, 0x11, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x53, 0x69, 0x67, 0x6e, 0x4d, 0x61, 0x78, 0x43, 0x6f,
+	0x75, 0x6e, 0x74, 0x18, 0x14, 0x20, 0x01, 0x28, 0x05, 0x52, 0x11, 0x4f, 0x74, 0x68, 0x65, 0x72,
+	0x53, 0x69, 0x67, 0x6e, 0x4d, 0x61, 0x78, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x5c, 0x0a, 0x08,
+	0x53, 0x68, 0x6f, 0x70, 0x44, 0x61, 0x74, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x68, 0x6f, 0x70,
+	0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x68, 0x6f, 0x70, 0x49, 0x64,
+	0x12, 0x18, 0x0a, 0x07, 0x53, 0x68, 0x6f, 0x70, 0x4e, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28,
+	0x05, 0x52, 0x07, 0x53, 0x68, 0x6f, 0x70, 0x4e, 0x75, 0x6d, 0x12, 0x1e, 0x0a, 0x0a, 0x4d, 0x61,
+	0x78, 0x53, 0x68, 0x6f, 0x70, 0x4e, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a,
+	0x4d, 0x61, 0x78, 0x53, 0x68, 0x6f, 0x70, 0x4e, 0x75, 0x6d, 0x22, 0x0c, 0x0a, 0x0a, 0x43, 0x53,
+	0x4e, 0x69, 0x61, 0x6e, 0x42, 0x75, 0x66, 0x66, 0x22, 0x65, 0x0a, 0x0a, 0x53, 0x43, 0x4e, 0x69,
+	0x61, 0x6e, 0x42, 0x75, 0x66, 0x66, 0x12, 0x1c, 0x0a, 0x09, 0x42, 0x75, 0x66, 0x66, 0x43, 0x6f,
+	0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x42, 0x75, 0x66, 0x66, 0x43,
+	0x6f, 0x75, 0x6e, 0x74, 0x12, 0x39, 0x0a, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64,
+	0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69,
+	0x74, 0x79, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x5f,
+	0x4e, 0x69, 0x61, 0x6e, 0x52, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x22,
+	0x52, 0x0a, 0x0c, 0x4e, 0x69, 0x61, 0x6e, 0x52, 0x61, 0x6e, 0x6b, 0x44, 0x61, 0x74, 0x61, 0x12,
+	0x16, 0x0a, 0x06, 0x54, 0x79, 0x70, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52,
+	0x06, 0x54, 0x79, 0x70, 0x65, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x18,
+	0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79,
+	0x2e, 0x4e, 0x69, 0x61, 0x6e, 0x52, 0x61, 0x6e, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x44,
+	0x61, 0x74, 0x61, 0x22, 0x55, 0x0a, 0x0c, 0x4e, 0x69, 0x61, 0x6e, 0x52, 0x61, 0x6e, 0x6b, 0x49,
+	0x6e, 0x66, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x61, 0x6e, 0x6b, 0x49, 0x64, 0x18, 0x01, 0x20,
+	0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x61, 0x6e, 0x6b, 0x49, 0x64, 0x12, 0x2d, 0x0a, 0x05, 0x41,
+	0x77, 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x63, 0x74,
+	0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x52, 0x61, 0x6e, 0x6b, 0x41, 0x77, 0x61, 0x72, 0x64, 0x44,
+	0x61, 0x74, 0x61, 0x52, 0x05, 0x41, 0x77, 0x61, 0x72, 0x64, 0x22, 0x41, 0x0a, 0x0d, 0x52, 0x61,
+	0x6e, 0x6b, 0x41, 0x77, 0x61, 0x72, 0x64, 0x44, 0x61, 0x74, 0x61, 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, 0x26, 0x0a,
+	0x0c, 0x43, 0x53, 0x4e, 0x69, 0x61, 0x6e, 0x41, 0x74, 0x74, 0x61, 0x63, 0x6b, 0x12, 0x16, 0x0a,
+	0x06, 0x54, 0x79, 0x70, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x54,
+	0x79, 0x70, 0x65, 0x49, 0x64, 0x22, 0xe8, 0x02, 0x0a, 0x10, 0x53, 0x43, 0x4e, 0x69, 0x61, 0x6e,
+	0x41, 0x74, 0x74, 0x61, 0x63, 0x6b, 0x44, 0x61, 0x74, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x54, 0x79,
+	0x70, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x54, 0x79, 0x70, 0x65,
+	0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x42, 0x6f, 0x73, 0x73, 0x48, 0x70, 0x18, 0x02, 0x20, 0x01,
+	0x28, 0x03, 0x52, 0x06, 0x42, 0x6f, 0x73, 0x73, 0x48, 0x70, 0x12, 0x2d, 0x0a, 0x05, 0x41, 0x77,
+	0x61, 0x72, 0x64, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x63, 0x74, 0x69,
 	0x76, 0x69, 0x74, 0x79, 0x2e, 0x52, 0x61, 0x6e, 0x6b, 0x41, 0x77, 0x61, 0x72, 0x64, 0x44, 0x61,
-	0x74, 0x61, 0x52, 0x05, 0x41, 0x77, 0x61, 0x72, 0x64, 0x22, 0x41, 0x0a, 0x0d, 0x52, 0x61, 0x6e,
-	0x6b, 0x41, 0x77, 0x61, 0x72, 0x64, 0x44, 0x61, 0x74, 0x61, 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, 0x26, 0x0a, 0x0c,
-	0x43, 0x53, 0x4e, 0x69, 0x61, 0x6e, 0x41, 0x74, 0x74, 0x61, 0x63, 0x6b, 0x12, 0x16, 0x0a, 0x06,
-	0x54, 0x79, 0x70, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x54, 0x79,
-	0x70, 0x65, 0x49, 0x64, 0x22, 0xe8, 0x02, 0x0a, 0x10, 0x53, 0x43, 0x4e, 0x69, 0x61, 0x6e, 0x41,
-	0x74, 0x74, 0x61, 0x63, 0x6b, 0x44, 0x61, 0x74, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x54, 0x79, 0x70,
-	0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x54, 0x79, 0x70, 0x65, 0x49,
-	0x64, 0x12, 0x16, 0x0a, 0x06, 0x42, 0x6f, 0x73, 0x73, 0x48, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28,
-	0x03, 0x52, 0x06, 0x42, 0x6f, 0x73, 0x73, 0x48, 0x70, 0x12, 0x2d, 0x0a, 0x05, 0x41, 0x77, 0x61,
-	0x72, 0x64, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76,
-	0x69, 0x74, 0x79, 0x2e, 0x52, 0x61, 0x6e, 0x6b, 0x41, 0x77, 0x61, 0x72, 0x64, 0x44, 0x61, 0x74,
-	0x61, 0x52, 0x05, 0x41, 0x77, 0x61, 0x72, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x41, 0x74, 0x74, 0x61,
-	0x63, 0x6b, 0x48, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x41, 0x74, 0x74, 0x61,
-	0x63, 0x6b, 0x48, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x49, 0x73, 0x44, 0x69, 0x65, 0x18, 0x05, 0x20,
-	0x01, 0x28, 0x08, 0x52, 0x05, 0x49, 0x73, 0x44, 0x69, 0x65, 0x12, 0x33, 0x0a, 0x08, 0x44, 0x69,
-	0x65, 0x41, 0x77, 0x61, 0x72, 0x64, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61,
-	0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x52, 0x61, 0x6e, 0x6b, 0x41, 0x77, 0x61, 0x72,
-	0x64, 0x44, 0x61, 0x74, 0x61, 0x52, 0x08, 0x44, 0x69, 0x65, 0x41, 0x77, 0x61, 0x72, 0x64, 0x12,
-	0x1c, 0x0a, 0x09, 0x42, 0x75, 0x66, 0x66, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01,
-	0x28, 0x03, 0x52, 0x09, 0x42, 0x75, 0x66, 0x66, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x35, 0x0a,
-	0x09, 0x45, 0x78, 0x74, 0x72, 0x61, 0x44, 0x72, 0x6f, 0x70, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b,
+	0x74, 0x61, 0x52, 0x05, 0x41, 0x77, 0x61, 0x72, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x41, 0x74, 0x74,
+	0x61, 0x63, 0x6b, 0x48, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x41, 0x74, 0x74,
+	0x61, 0x63, 0x6b, 0x48, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x49, 0x73, 0x44, 0x69, 0x65, 0x18, 0x05,
+	0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x49, 0x73, 0x44, 0x69, 0x65, 0x12, 0x33, 0x0a, 0x08, 0x44,
+	0x69, 0x65, 0x41, 0x77, 0x61, 0x72, 0x64, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e,
+	0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x52, 0x61, 0x6e, 0x6b, 0x41, 0x77, 0x61,
+	0x72, 0x64, 0x44, 0x61, 0x74, 0x61, 0x52, 0x08, 0x44, 0x69, 0x65, 0x41, 0x77, 0x61, 0x72, 0x64,
+	0x12, 0x1c, 0x0a, 0x09, 0x42, 0x75, 0x66, 0x66, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x07, 0x20,
+	0x01, 0x28, 0x03, 0x52, 0x09, 0x42, 0x75, 0x66, 0x66, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x35,
+	0x0a, 0x09, 0x45, 0x78, 0x74, 0x72, 0x61, 0x44, 0x72, 0x6f, 0x70, 0x18, 0x08, 0x20, 0x03, 0x28,
+	0x0b, 0x32, 0x17, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x52, 0x61, 0x6e,
+	0x6b, 0x41, 0x77, 0x61, 0x72, 0x64, 0x44, 0x61, 0x74, 0x61, 0x52, 0x09, 0x45, 0x78, 0x74, 0x72,
+	0x61, 0x44, 0x72, 0x6f, 0x70, 0x12, 0x39, 0x0a, 0x0b, 0x46, 0x6c, 0x6f, 0x6f, 0x72, 0x52, 0x65,
+	0x77, 0x61, 0x72, 0x64, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x63, 0x74,
+	0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x52, 0x61, 0x6e, 0x6b, 0x41, 0x77, 0x61, 0x72, 0x64, 0x44,
+	0x61, 0x74, 0x61, 0x52, 0x0b, 0x46, 0x6c, 0x6f, 0x6f, 0x72, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64,
+	0x22, 0x11, 0x0a, 0x0f, 0x43, 0x53, 0x4e, 0x69, 0x61, 0x6e, 0x53, 0x69, 0x67, 0x6e, 0x41, 0x77,
+	0x61, 0x72, 0x64, 0x22, 0xcc, 0x02, 0x0a, 0x0f, 0x53, 0x43, 0x4e, 0x69, 0x61, 0x6e, 0x53, 0x69,
+	0x67, 0x6e, 0x41, 0x77, 0x61, 0x72, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x53, 0x69, 0x67, 0x6e, 0x41,
+	0x77, 0x61, 0x72, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d,
+	0x53, 0x69, 0x67, 0x6e, 0x41, 0x77, 0x61, 0x72, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x35, 0x0a,
+	0x09, 0x53, 0x69, 0x67, 0x6e, 0x41, 0x77, 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b,
 	0x32, 0x17, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x52, 0x61, 0x6e, 0x6b,
-	0x41, 0x77, 0x61, 0x72, 0x64, 0x44, 0x61, 0x74, 0x61, 0x52, 0x09, 0x45, 0x78, 0x74, 0x72, 0x61,
-	0x44, 0x72, 0x6f, 0x70, 0x12, 0x39, 0x0a, 0x0b, 0x46, 0x6c, 0x6f, 0x6f, 0x72, 0x52, 0x65, 0x77,
-	0x61, 0x72, 0x64, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x63, 0x74, 0x69,
-	0x76, 0x69, 0x74, 0x79, 0x2e, 0x52, 0x61, 0x6e, 0x6b, 0x41, 0x77, 0x61, 0x72, 0x64, 0x44, 0x61,
-	0x74, 0x61, 0x52, 0x0b, 0x46, 0x6c, 0x6f, 0x6f, 0x72, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x22,
-	0x11, 0x0a, 0x0f, 0x43, 0x53, 0x4e, 0x69, 0x61, 0x6e, 0x53, 0x69, 0x67, 0x6e, 0x41, 0x77, 0x61,
-	0x72, 0x64, 0x22, 0xa9, 0x01, 0x0a, 0x0f, 0x53, 0x43, 0x4e, 0x69, 0x61, 0x6e, 0x53, 0x69, 0x67,
-	0x6e, 0x41, 0x77, 0x61, 0x72, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x53, 0x69, 0x67, 0x6e, 0x41, 0x77,
-	0x61, 0x72, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x53,
-	0x69, 0x67, 0x6e, 0x41, 0x77, 0x61, 0x72, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x35, 0x0a, 0x09,
-	0x53, 0x69, 0x67, 0x6e, 0x41, 0x77, 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32,
-	0x17, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x52, 0x61, 0x6e, 0x6b, 0x41,
-	0x77, 0x61, 0x72, 0x64, 0x44, 0x61, 0x74, 0x61, 0x52, 0x09, 0x53, 0x69, 0x67, 0x6e, 0x41, 0x77,
-	0x61, 0x72, 0x64, 0x12, 0x39, 0x0a, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65,
-	0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74,
-	0x79, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x4e,
-	0x69, 0x61, 0x6e, 0x52, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x22, 0x20,
-	0x0a, 0x0c, 0x43, 0x53, 0x4e, 0x69, 0x61, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x10,
-	0x0a, 0x03, 0x4e, 0x75, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x4e, 0x75, 0x6d,
-	0x22, 0x8a, 0x01, 0x0a, 0x0c, 0x53, 0x43, 0x4e, 0x69, 0x61, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67,
-	0x65, 0x12, 0x10, 0x0a, 0x03, 0x4e, 0x75, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03,
-	0x4e, 0x75, 0x6d, 0x12, 0x2d, 0x0a, 0x05, 0x41, 0x77, 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, 0x03,
-	0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x52, 0x61,
-	0x6e, 0x6b, 0x41, 0x77, 0x61, 0x72, 0x64, 0x44, 0x61, 0x74, 0x61, 0x52, 0x05, 0x41, 0x77, 0x61,
-	0x72, 0x64, 0x12, 0x39, 0x0a, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18,
-	0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79,
-	0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x4e, 0x69,
-	0x61, 0x6e, 0x52, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x2a, 0xe2, 0x02,
-	0x0a, 0x0c, 0x4e, 0x69, 0x61, 0x6e, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x12, 0x14,
-	0x0a, 0x10, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x4e, 0x69, 0x61, 0x6e, 0x5f, 0x5a, 0x45,
-	0x52, 0x4f, 0x10, 0x00, 0x12, 0x16, 0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43,
-	0x53, 0x4e, 0x69, 0x61, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x10, 0xe4, 0x14, 0x12, 0x16, 0x0a, 0x11,
-	0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x4e, 0x69, 0x61, 0x6e, 0x44, 0x61, 0x74,
-	0x61, 0x10, 0xe5, 0x14, 0x12, 0x16, 0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43,
-	0x53, 0x4e, 0x69, 0x61, 0x6e, 0x42, 0x75, 0x66, 0x66, 0x10, 0xe6, 0x14, 0x12, 0x16, 0x0a, 0x11,
-	0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x4e, 0x69, 0x61, 0x6e, 0x42, 0x75, 0x66,
-	0x66, 0x10, 0xe7, 0x14, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43,
-	0x53, 0x4e, 0x69, 0x61, 0x6e, 0x52, 0x61, 0x6e, 0x6b, 0x44, 0x61, 0x74, 0x61, 0x10, 0xe8, 0x14,
-	0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x4e, 0x69, 0x61,
-	0x6e, 0x52, 0x61, 0x6e, 0x6b, 0x44, 0x61, 0x74, 0x61, 0x10, 0xe9, 0x14, 0x12, 0x18, 0x0a, 0x13,
-	0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x4e, 0x69, 0x61, 0x6e, 0x41, 0x74, 0x74,
-	0x61, 0x63, 0x6b, 0x10, 0xea, 0x14, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54,
-	0x5f, 0x53, 0x43, 0x4e, 0x69, 0x61, 0x6e, 0x41, 0x74, 0x74, 0x61, 0x63, 0x6b, 0x44, 0x61, 0x74,
-	0x61, 0x10, 0xeb, 0x14, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43,
-	0x53, 0x4e, 0x69, 0x61, 0x6e, 0x53, 0x69, 0x67, 0x6e, 0x41, 0x77, 0x61, 0x72, 0x64, 0x10, 0xec,
-	0x14, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x4e, 0x69,
-	0x61, 0x6e, 0x53, 0x69, 0x67, 0x6e, 0x41, 0x77, 0x61, 0x72, 0x64, 0x10, 0xed, 0x14, 0x12, 0x18,
-	0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x4e, 0x69, 0x61, 0x6e, 0x43,
-	0x68, 0x61, 0x6e, 0x67, 0x65, 0x10, 0xee, 0x14, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b,
-	0x45, 0x54, 0x5f, 0x53, 0x43, 0x4e, 0x69, 0x61, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x10,
-	0xef, 0x14, 0x2a, 0x3e, 0x0a, 0x11, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f,
-	0x64, 0x65, 0x5f, 0x4e, 0x69, 0x61, 0x6e, 0x12, 0x14, 0x0a, 0x10, 0x4f, 0x50, 0x52, 0x43, 0x5f,
-	0x53, 0x75, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x4e, 0x69, 0x61, 0x6e, 0x10, 0x00, 0x12, 0x13, 0x0a,
-	0x0f, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x4e, 0x69, 0x61, 0x6e,
-	0x10, 0x01, 0x42, 0x28, 0x5a, 0x26, 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, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x62, 0x06, 0x70, 0x72,
-	0x6f, 0x74, 0x6f, 0x33,
+	0x41, 0x77, 0x61, 0x72, 0x64, 0x44, 0x61, 0x74, 0x61, 0x52, 0x09, 0x53, 0x69, 0x67, 0x6e, 0x41,
+	0x77, 0x61, 0x72, 0x64, 0x12, 0x3f, 0x0a, 0x0e, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x53, 0x69, 0x67,
+	0x6e, 0x41, 0x77, 0x61, 0x72, 0x64, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61,
+	0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x52, 0x61, 0x6e, 0x6b, 0x41, 0x77, 0x61, 0x72,
+	0x64, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0e, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x53, 0x69, 0x67, 0x6e,
+	0x41, 0x77, 0x61, 0x72, 0x64, 0x12, 0x30, 0x0a, 0x13, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x53, 0x69,
+	0x67, 0x6e, 0x41, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01,
+	0x28, 0x05, 0x52, 0x13, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x53, 0x69, 0x67, 0x6e, 0x41, 0x77, 0x61,
+	0x72, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2e, 0x0a, 0x12, 0x4f, 0x74, 0x68, 0x65, 0x72,
+	0x53, 0x69, 0x67, 0x6e, 0x41, 0x77, 0x61, 0x72, 0x64, 0x50, 0x72, 0x6f, 0x70, 0x18, 0x05, 0x20,
+	0x01, 0x28, 0x05, 0x52, 0x12, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x53, 0x69, 0x67, 0x6e, 0x41, 0x77,
+	0x61, 0x72, 0x64, 0x50, 0x72, 0x6f, 0x70, 0x12, 0x39, 0x0a, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74,
+	0x43, 0x6f, 0x64, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x61, 0x63, 0x74,
+	0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f,
+	0x64, 0x65, 0x5f, 0x4e, 0x69, 0x61, 0x6e, 0x52, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f,
+	0x64, 0x65, 0x22, 0x20, 0x0a, 0x0c, 0x43, 0x53, 0x4e, 0x69, 0x61, 0x6e, 0x43, 0x68, 0x61, 0x6e,
+	0x67, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x4e, 0x75, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52,
+	0x03, 0x4e, 0x75, 0x6d, 0x22, 0x8a, 0x01, 0x0a, 0x0c, 0x53, 0x43, 0x4e, 0x69, 0x61, 0x6e, 0x43,
+	0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x4e, 0x75, 0x6d, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x05, 0x52, 0x03, 0x4e, 0x75, 0x6d, 0x12, 0x2d, 0x0a, 0x05, 0x41, 0x77, 0x61, 0x72, 0x64,
+	0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74,
+	0x79, 0x2e, 0x52, 0x61, 0x6e, 0x6b, 0x41, 0x77, 0x61, 0x72, 0x64, 0x44, 0x61, 0x74, 0x61, 0x52,
+	0x05, 0x41, 0x77, 0x61, 0x72, 0x64, 0x12, 0x39, 0x0a, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43,
+	0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x61, 0x63, 0x74, 0x69,
+	0x76, 0x69, 0x74, 0x79, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64,
+	0x65, 0x5f, 0x4e, 0x69, 0x61, 0x6e, 0x52, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64,
+	0x65, 0x2a, 0xe2, 0x02, 0x0a, 0x0c, 0x4e, 0x69, 0x61, 0x6e, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74,
+	0x49, 0x44, 0x12, 0x14, 0x0a, 0x10, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x4e, 0x69, 0x61,
+	0x6e, 0x5f, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x16, 0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b,
+	0x45, 0x54, 0x5f, 0x43, 0x53, 0x4e, 0x69, 0x61, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x10, 0xe4, 0x14,
+	0x12, 0x16, 0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x4e, 0x69, 0x61,
+	0x6e, 0x44, 0x61, 0x74, 0x61, 0x10, 0xe5, 0x14, 0x12, 0x16, 0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b,
+	0x45, 0x54, 0x5f, 0x43, 0x53, 0x4e, 0x69, 0x61, 0x6e, 0x42, 0x75, 0x66, 0x66, 0x10, 0xe6, 0x14,
+	0x12, 0x16, 0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x4e, 0x69, 0x61,
+	0x6e, 0x42, 0x75, 0x66, 0x66, 0x10, 0xe7, 0x14, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b,
+	0x45, 0x54, 0x5f, 0x43, 0x53, 0x4e, 0x69, 0x61, 0x6e, 0x52, 0x61, 0x6e, 0x6b, 0x44, 0x61, 0x74,
+	0x61, 0x10, 0xe8, 0x14, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53,
+	0x43, 0x4e, 0x69, 0x61, 0x6e, 0x52, 0x61, 0x6e, 0x6b, 0x44, 0x61, 0x74, 0x61, 0x10, 0xe9, 0x14,
+	0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x4e, 0x69, 0x61,
+	0x6e, 0x41, 0x74, 0x74, 0x61, 0x63, 0x6b, 0x10, 0xea, 0x14, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41,
+	0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x4e, 0x69, 0x61, 0x6e, 0x41, 0x74, 0x74, 0x61, 0x63,
+	0x6b, 0x44, 0x61, 0x74, 0x61, 0x10, 0xeb, 0x14, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b,
+	0x45, 0x54, 0x5f, 0x43, 0x53, 0x4e, 0x69, 0x61, 0x6e, 0x53, 0x69, 0x67, 0x6e, 0x41, 0x77, 0x61,
+	0x72, 0x64, 0x10, 0xec, 0x14, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f,
+	0x53, 0x43, 0x4e, 0x69, 0x61, 0x6e, 0x53, 0x69, 0x67, 0x6e, 0x41, 0x77, 0x61, 0x72, 0x64, 0x10,
+	0xed, 0x14, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x4e,
+	0x69, 0x61, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x10, 0xee, 0x14, 0x12, 0x18, 0x0a, 0x13,
+	0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x4e, 0x69, 0x61, 0x6e, 0x43, 0x68, 0x61,
+	0x6e, 0x67, 0x65, 0x10, 0xef, 0x14, 0x2a, 0x3e, 0x0a, 0x11, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75,
+	0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x4e, 0x69, 0x61, 0x6e, 0x12, 0x14, 0x0a, 0x10, 0x4f,
+	0x50, 0x52, 0x43, 0x5f, 0x53, 0x75, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x4e, 0x69, 0x61, 0x6e, 0x10,
+	0x00, 0x12, 0x13, 0x0a, 0x0f, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x5f,
+	0x4e, 0x69, 0x61, 0x6e, 0x10, 0x01, 0x42, 0x28, 0x5a, 0x26, 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, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79,
+	0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 }
 
 var (
@@ -1243,22 +1322,24 @@ var file_protocol_activity_nian_proto_goTypes = []interface{}{
 var file_protocol_activity_nian_proto_depIdxs = []int32{
 	7,  // 0: activity.SCNianData.RankData:type_name -> activity.NianRankData
 	4,  // 1: activity.SCNianData.shopData:type_name -> activity.ShopData
-	1,  // 2: activity.SCNianBuff.OpRetCode:type_name -> activity.OpResultCode_Nian
-	8,  // 3: activity.NianRankData.Data:type_name -> activity.NianRankInfo
-	9,  // 4: activity.NianRankInfo.Award:type_name -> activity.RankAwardData
-	9,  // 5: activity.SCNianAttackData.Award:type_name -> activity.RankAwardData
-	9,  // 6: activity.SCNianAttackData.DieAward:type_name -> activity.RankAwardData
-	9,  // 7: activity.SCNianAttackData.ExtraDrop:type_name -> activity.RankAwardData
-	9,  // 8: activity.SCNianAttackData.FloorReward:type_name -> activity.RankAwardData
-	9,  // 9: activity.SCNianSignAward.SignAward:type_name -> activity.RankAwardData
-	1,  // 10: activity.SCNianSignAward.OpRetCode:type_name -> activity.OpResultCode_Nian
-	9,  // 11: activity.SCNianChange.Award:type_name -> activity.RankAwardData
-	1,  // 12: activity.SCNianChange.OpRetCode:type_name -> activity.OpResultCode_Nian
-	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
+	9,  // 2: activity.SCNianData.OtherSignAward:type_name -> activity.RankAwardData
+	1,  // 3: activity.SCNianBuff.OpRetCode:type_name -> activity.OpResultCode_Nian
+	8,  // 4: activity.NianRankData.Data:type_name -> activity.NianRankInfo
+	9,  // 5: activity.NianRankInfo.Award:type_name -> activity.RankAwardData
+	9,  // 6: activity.SCNianAttackData.Award:type_name -> activity.RankAwardData
+	9,  // 7: activity.SCNianAttackData.DieAward:type_name -> activity.RankAwardData
+	9,  // 8: activity.SCNianAttackData.ExtraDrop:type_name -> activity.RankAwardData
+	9,  // 9: activity.SCNianAttackData.FloorReward:type_name -> activity.RankAwardData
+	9,  // 10: activity.SCNianSignAward.SignAward:type_name -> activity.RankAwardData
+	9,  // 11: activity.SCNianSignAward.OtherSignAward:type_name -> activity.RankAwardData
+	1,  // 12: activity.SCNianSignAward.OpRetCode:type_name -> activity.OpResultCode_Nian
+	9,  // 13: activity.SCNianChange.Award:type_name -> activity.RankAwardData
+	1,  // 14: activity.SCNianChange.OpRetCode:type_name -> activity.OpResultCode_Nian
+	15, // [15:15] is the sub-list for method output_type
+	15, // [15:15] is the sub-list for method input_type
+	15, // [15:15] is the sub-list for extension type_name
+	15, // [15:15] is the sub-list for extension extendee
+	0,  // [0:15] is the sub-list for field type_name
 }
 
 func init() { file_protocol_activity_nian_proto_init() }
diff --git a/protocol/activity/nian.proto b/protocol/activity/nian.proto
index d819df8..9bd9eba 100644
--- a/protocol/activity/nian.proto
+++ b/protocol/activity/nian.proto
@@ -45,6 +45,11 @@ message SCNianData{
 	string LuckyRankNeed = 14; //幸运榜上榜条件
 	string RankNeed = 15; //总伤害榜上榜条件
 	int32 Switch = 16; //活动开关 1.开启 2.关闭
+	int32 OtherSignAwardCount = 17;//额外奖励领取次数
+	int32 OtherSignAwardProp = 18;//额外奖励概率
+	repeated RankAwardData OtherSignAward = 19;//签到额外奖励
+	int32 OtherSignMaxCount = 20;//额外奖励领取次数上限
+
 }
 
 message ShopData{
@@ -102,7 +107,10 @@ message CSNianSignAward{
 message SCNianSignAward{
 	int64 SignAwardTime = 1;
 	repeated RankAwardData SignAward = 2;//签到奖励
-	OpResultCode_Nian OpRetCode = 3; // 返回错误码
+	repeated RankAwardData OtherSignAward = 3;//签到额外奖励
+	int32 OtherSignAwardCount = 4;//额外奖励领取次数
+	int32 OtherSignAwardProp = 5;//额外奖励概率
+	OpResultCode_Nian OpRetCode = 6; // 返回错误码
 }
 //兑换
 //PACKET_CSNianChange
diff --git a/worldsrv/action_nian.go b/worldsrv/action_nian.go
index 8a6bf7d..fcb3f58 100644
--- a/worldsrv/action_nian.go
+++ b/worldsrv/action_nian.go
@@ -140,6 +140,29 @@ func CSNianData(s *netlib.Session, packetid int, data interface{}, sid int64) er
 				break
 			}
 		}
+		//签到额外奖励
+		for _, value := range sData {
+			if value.Id == 2 {
+				strSlice := strings.Split(value.PropValue, ",")
+				itemId, _ := strconv.Atoi(strSlice[0])
+				itemNum, _ := strconv.Atoi(strSlice[1])
+				pack.OtherSignAward = append(pack.OtherSignAward, &activity.RankAwardData{
+					ItemId:  int32(itemId),
+					ItemNum: int64(itemNum),
+				})
+				break
+			}
+		}
+		pack.OtherSignAwardCount = p.WelfData.NianData.SignOtherAwardCount
+		pack.OtherSignAwardProp = p.WelfData.NianData.SignOtherAwardProp
+		count := int64(0)
+		for _, value := range sData {
+			if value.Id == 3 {
+				count, _ = strconv.ParseInt(value.PropValue, 10, 64)
+				break
+			}
+		}
+		pack.OtherSignMaxCount = int32(count)
 		StartTs := common.IntToTime(int(pool.List[0].BuffStartTime)).Unix()
 		EndTs := common.IntToTime(int(pool.List[0].BuffEndTime)).Unix()
 		pack.BuffStartTime = StartTs
@@ -673,6 +696,53 @@ func CSNianSignAward(s *netlib.Session, packetid int, data interface{}, sid int6
 			award.ItemNum = info.ItemNum
 			pack.SignAward = append(pack.SignAward, award)
 		}
+		//签到额外奖励
+		sData := srvdata.PBDB_NewYearActivityMgr.Datas.GetArr()
+		count := int64(0)
+		for _, value := range sData {
+			if value.Id == 3 {
+				count, _ = strconv.ParseInt(value.PropValue, 10, 64)
+				break
+			}
+		}
+		var prop int64
+		if p.WelfData.NianData.SignOtherAwardProp == 0 {
+			for _, value := range sData {
+				if value.Id == 4 {
+					prop, _ = strconv.ParseInt(value.PropValue, 10, 64)
+					break
+				}
+			}
+			p.WelfData.NianData.SignOtherAwardProp = int32(prop)
+		}
+		if p.WelfData.NianData.SignOtherAwardCount < int32(count) {
+			//概率
+			if rand.Intn(100)+1 < int(p.WelfData.NianData.SignOtherAwardProp) {
+				for _, value := range sData {
+					if value.Id == 2 {
+						strSlice := strings.Split(value.PropValue, ",")
+						itemId, _ := strconv.Atoi(strSlice[0])
+						itemNum, _ := strconv.Atoi(strSlice[1])
+						items = append(items, &model.Item{
+							ItemId:  int32(itemId),
+							ItemNum: int64(itemNum),
+						})
+						award := &activity.RankAwardData{}
+						award.ItemId = int32(itemId)
+						award.ItemNum = int64(itemNum)
+						pack.OtherSignAward = append(pack.OtherSignAward, award)
+						break
+					}
+				}
+				p.WelfData.NianData.SignOtherAwardCount += 1
+				p.WelfData.NianData.SignOtherAwardProp = 60
+			} else {
+				p.WelfData.NianData.SignOtherAwardProp += int32(prop)
+				if p.WelfData.NianData.SignOtherAwardProp > 100 {
+					p.WelfData.NianData.SignOtherAwardProp = 100
+				}
+			}
+		}
 
 		BagMgrSingleton.AddItems(&model.AddItemParam{
 			Platform: p.Platform,
@@ -682,6 +752,8 @@ func CSNianSignAward(s *netlib.Session, packetid int, data interface{}, sid int6
 			Operator: "system",
 			Remark:   "年兽活动-领取签到奖励获得",
 		})
+		pack.OtherSignAwardCount = p.WelfData.NianData.SignOtherAwardCount
+		pack.OtherSignAwardProp = p.WelfData.NianData.SignOtherAwardProp
 		p.SendToClient(int(activity.NianPacketID_PACKET_SCNianSignAward), pack)
 		TaskSubjectSingleton.Touch(common.TaskTypeNianSign, &TaskData{SnId: p.SnId, Num: 1})
 	}
diff --git a/worldsrv/rankmatch.go b/worldsrv/rankmatch.go
index 7357426..e0633f8 100644
--- a/worldsrv/rankmatch.go
+++ b/worldsrv/rankmatch.go
@@ -1008,11 +1008,11 @@ func (r *RankMatchMgr) NianRankAward() {
 						}
 						// 发邮件
 						var newMsg *model.Message
+						title := i18n.Tr("languages", "NianLuckTitle")
+						content := i18n.Tr("languages", "NianLuckAward", []int{int(rankId), int(rankId), int(rankId), int(rankId)})
+						newMsg = model.NewMessage("", 0, "", player.SnId, model.MSGTYPE_RANK_REWARD,
+							title, content, 0, 0, model.MSGSTATE_UNREAD, time.Now().Unix(), 0, "", items, platform, model.HallTienlen, nil)
 						task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} {
-							title := i18n.Tr("languages", "NianLuckTitle")
-							content := i18n.Tr("languages", "NianLuckAward", []int{int(rankId), int(rankId), int(rankId), int(rankId)})
-							newMsg = model.NewMessage("", 0, "", player.SnId, model.MSGTYPE_RANK_REWARD,
-								title, content, 0, 0, model.MSGSTATE_UNREAD, time.Now().Unix(), 0, "", items, platform, model.HallTienlen, nil)
 							err := model.InsertMessage(platform, newMsg)
 							if err != nil {
 								logger.Logger.Errorf("发送邮件失败 snid:%v err:%v", player.SnId, err)
@@ -1033,8 +1033,10 @@ func (r *RankMatchMgr) NianRankAward() {
 						}
 						log.RankData = append(log.RankData, rankData)
 						rankId += 1
+						logger.Logger.Infof("年兽幸运榜发奖 snid:%v rankData:%v", player.SnId, rankData)
 					}
 					mq.Write(log)
+					logger.Logger.Infof("年兽幸运榜发奖 log:%v", log)
 					//清除幸运榜数值
 					err := model.ClearNianRank(&model.FindNianListArgs{
 						Platform: platform,
@@ -1092,11 +1094,11 @@ func (r *RankMatchMgr) NianRankAward() {
 						}
 						// 发邮件
 						var newMsg *model.Message
+						title := i18n.Tr("languages", "NianDamageTitle")
+						content := i18n.Tr("languages", "NianDamageAward", []int{int(rankId), int(rankId), int(rankId), int(rankId)})
+						newMsg = model.NewMessage("", 0, "", player.SnId, model.MSGTYPE_RANK_REWARD,
+							title, content, 0, 0, model.MSGSTATE_UNREAD, time.Now().Unix(), 0, "", items, platform, model.HallTienlen, nil)
 						task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} {
-							title := i18n.Tr("languages", "NianDamageTitle")
-							content := i18n.Tr("languages", "NianDamageAward", []int{int(rankId), int(rankId), int(rankId), int(rankId)})
-							newMsg = model.NewMessage("", 0, "", player.SnId, model.MSGTYPE_RANK_REWARD,
-								title, content, 0, 0, model.MSGSTATE_UNREAD, time.Now().Unix(), 0, "", items, platform, model.HallTienlen, nil)
 							err := model.InsertMessage(platform, newMsg)
 							if err != nil {
 								logger.Logger.Errorf("发送邮件失败 snid:%v err:%v", player.SnId, err)
@@ -1118,6 +1120,7 @@ func (r *RankMatchMgr) NianRankAward() {
 						rankId += 1
 					}
 					mq.Write(log)
+					logger.Logger.Infof("年兽伤害榜发奖 log:%v", log)
 					//删除数据库数据
 					err := model.DelNianRank(&model.FindNianListArgs{
 						Platform: platform,
diff --git a/worldsrv/welfmgr.go b/worldsrv/welfmgr.go
index c9eea81..ce183c9 100644
--- a/worldsrv/welfmgr.go
+++ b/worldsrv/welfmgr.go
@@ -5,6 +5,7 @@ import (
 	"math"
 	"math/rand"
 	"slices"
+	"sort"
 	"time"
 
 	"mongo.games.com/goserver/core/logger"
@@ -2313,6 +2314,10 @@ func (this *WelfareMgr) SendRedPacketInfo(p *Player) *welfare.SCRedPacketInfo {
 		}
 	}
 
+	sort.Slice(pack.Info, func(i, j int) bool {
+		return pack.Info[i].StartTs < pack.Info[j].StartTs
+	})
+
 	p.SendToClient(int(welfare.SPacketID_PACKET_SCRedPacketInfo), pack)
 	return pack
 }
diff --git a/xlsx/DB_NewYearActivity.xlsx b/xlsx/DB_NewYearActivity.xlsx
index 809217a..7325c5e 100644
Binary files a/xlsx/DB_NewYearActivity.xlsx and b/xlsx/DB_NewYearActivity.xlsx differ
diff --git a/xlsx/DB_Task.xlsx b/xlsx/DB_Task.xlsx
index 2fe8af9..1e3690a 100644
Binary files a/xlsx/DB_Task.xlsx and b/xlsx/DB_Task.xlsx differ
