This commit is contained in:
wh_zcy 2023-04-21 17:34:27 +08:00
parent aa383233a6
commit 58ecd65e7d
10 changed files with 162 additions and 68 deletions

View File

@ -41,8 +41,8 @@ func (d *ReputationView) CreateView(t *model.TestCase) fyne.CanvasObject {
t.MainType,
"talenttest",
&pb.ReputationTalenttestReq{
RaceType: cast.ToInt32(zy),
FriendValue: cast.ToInt32(fv),
RaceType: cast.ToInt32(zy.Text),
FriendValue: cast.ToInt32(fv.Text),
},
); err != nil {
logrus.Error(err)

View File

@ -321,8 +321,8 @@ func (this *Agent) messageDistribution(msg *pb.UserMessage) (err error) {
}
stime := time.Now()
// this.gateway.Debugf("----------3 agent:%s uId:%s MainType:%s SubType:%s ", this.sessionId, this.uId, msg.MainType, msg.SubType)
ctx, _ := context.WithTimeout(context.Background(), time.Second*5)
// ctx := context.Background()
// ctx, _ := context.WithTimeout(context.Background(), time.Second*5)
ctx := context.Background()
if len(serviceTag) == 0 {
// this.gateway.Debugf("----------4 agent:%s uId:%s MainType:%s SubType:%s ", this.sessionId, this.uId, msg.MainType, msg.SubType)
if err = this.gateway.Service().RpcCall(ctx, servicePath, string(comm.Rpc_GatewayRoute), req, reply); err != nil {

View File

@ -13,7 +13,7 @@ func (this *apiComp) TalenttestCheck(session comm.IUserSession, req *pb.Reputati
func (this *apiComp) Talenttest(session comm.IUserSession, req *pb.ReputationTalenttestReq) (code pb.ErrorCode, data *pb.ErrorData) {
rsp := &pb.ReputationTalenttestResp{}
lv := this.module.Upgrade(session, req.RaceType, req.FriendValue)
this.module.Debug("声望等级", log.Field{Key: "lv", Value: lv})
this.module.Debug("声望", log.Field{Key: "阵营", Value: req.RaceType}, log.Field{Key: "等级", Value: lv})
session.SendMsg(string(this.module.GetType()), "talenttest", rsp)
return

View File

@ -11,25 +11,37 @@ func (this *apiComp) UpgradeCheck(session comm.IUserSession, req *pb.ReputationU
}
func (this *apiComp) Upgrade(session comm.IUserSession, req *pb.ReputationUpgradeReq) (code pb.ErrorCode, data *pb.ErrorData) {
//
uid := session.GetUserId()
rsp := &pb.ReputationUpgradeResp{}
talentCfg := this.module.configure.getTalentNodeCfg(req.NodeId)
if talentCfg == nil {
code = pb.ErrorCode_ConfigNoFound
return
}
reputation := this.module.modelReputation.getDBReputation(uid)
if reputation == nil {
code = pb.ErrorCode_DataNotFound
return
}
camp, ok := reputation.Camps[talentCfg.Type]
camp, ok := reputation.Camps[req.RaceType]
if !ok {
reputation.Camps[talentCfg.Type] = &pb.Camp{}
reputation.Camps[req.RaceType] = &pb.Camp{}
}
var nodeLv int32
if len(camp.Nodes) == 0 {
nodeLv = 1
} else {
for _, n := range camp.Nodes {
if n.Nid == req.NodeId {
nodeLv = n.Lv + 1
break
}
}
}
talentCfg := this.module.configure.getTalentNodeCfgBy(req.NodeId, nodeLv)
if talentCfg == nil {
code = pb.ErrorCode_ConfigNoFound
return
}
if code = this.module.CheckRes(session, talentCfg.IconCos); code != pb.ErrorCode_Success {
@ -38,9 +50,15 @@ func (this *apiComp) Upgrade(session comm.IUserSession, req *pb.ReputationUpgrad
if camp != nil {
if len(camp.Nodes) == 0 {
camp.Nodes = append(camp.Nodes, &pb.TalentNode{
Nid: req.NodeId,
})
//消耗
if c := this.module.ConsumeRes(session, talentCfg.IconCos, true); c == pb.ErrorCode_Success {
camp.Nodes = append(camp.Nodes, &pb.TalentNode{
Nid: req.NodeId,
Lv: 1,
Status: 1,
})
camp.CampAttr = this.module.modelReputation.computeAttr(camp.CampAttr, talentCfg.Attribute)
}
} else {
for _, v := range camp.Nodes {
//判断是否满级
@ -48,11 +66,20 @@ func (this *apiComp) Upgrade(session comm.IUserSession, req *pb.ReputationUpgrad
code = pb.ErrorCode_ReputationTalentFull
return
} else if req.NodeId == v.Nid {
if !this.module.modelReputation.isReachPreNode(reputation, req.RaceType, talentCfg.PreNode, talentCfg.PreNodeLv) {
code = pb.ErrorCode_ReputationNoPreNodeLv
return
}
//消耗
if c := this.module.ConsumeRes(session, talentCfg.IconCos, true); c == pb.ErrorCode_Success {
v.Status = 1
camp.CampAttr = this.module.modelReputation.computeAttr(camp.CampAttr, talentCfg.Attribute)
v.Lv++
camp.CampAttr = this.module.modelReputation.computeAttr(camp.CampAttr, talentCfg.Attribute)
if talentCfg.NodeLv == v.Lv {
v.Status = 2
} else {
v.Status = 1
}
}
break
}

View File

@ -42,17 +42,21 @@ func (this *configureComp) getTalentCfg() (data *cfg.GameTalent, err error) {
return
}
func (this *configureComp) getTalentNodeCfg(id int32) (data *cfg.GameTalentData) {
func (this *configureComp) getTalentNodeCfgBy(id, nodeLv int32) (data *cfg.GameTalentData) {
gt, err := this.getTalentCfg()
if err != nil {
return
}
data, _ = gt.GetDataMap()[id]
for _, v := range gt.GetDataList() {
if v.Node == id && v.NodeLv == nodeLv {
return v
}
}
return
}
func (this *configureComp) getCampLvCfg() (data *cfg.GameCampLv, err error) {
func (this *configureComp) getCampCfg() (data *cfg.GameCampLv, err error) {
var (
v interface{}
ok bool
@ -67,3 +71,17 @@ func (this *configureComp) getCampLvCfg() (data *cfg.GameCampLv, err error) {
}
return
}
func (this *configureComp) getCampBy(raceType, lv int32) (data *cfg.GameCampLvData) {
gcl, err := this.getCampCfg()
if err != nil {
return nil
}
for _, v := range gcl.GetDataList() {
if v.RaceType == raceType && v.ReputationLv == lv {
return v
}
}
return
}

View File

@ -25,10 +25,10 @@ func (this *ModelReputation) Init(service core.IService, module core.IModule, co
return
}
func(this *ModelReputation) initCamp(reputation *pb.DBReputation){
if reputation!=nil && reputation.Camps == nil{
func (this *ModelReputation) initCamp(reputation *pb.DBReputation) {
if reputation != nil && reputation.Camps == nil {
reputation.Camps = make(map[int32]*pb.Camp)
}
}
@ -51,12 +51,14 @@ func (this *ModelReputation) getDBReputation(uid string) *pb.DBReputation {
}
// 更新声望数据
func (this *ModelReputation) updateDBReputation(uid string, data map[string]interface{}) {
func (this *ModelReputation) updateDBReputation(uid string, data map[string]interface{}) error {
if err := this.Change(uid, data); err != nil {
this.moduleReputation.Error("updateDBReputation",
log.Field{Key: "uid", Value: uid},
log.Field{Key: "err", Value: err})
return err
}
return nil
}
// 阵营属性
@ -92,3 +94,15 @@ func (this *ModelReputation) mergeAttrs(camps map[int32]*pb.Camp) *pb.CampAttr {
}
return totalAttr
}
// 校验前置节点是否
func (this *ModelReputation) isReachPreNode(reputation *pb.DBReputation, raceType, preNodeId, preNodeLv int32) bool {
if camp, ok := reputation.Camps[raceType]; ok {
for _, n := range camp.Nodes {
if n.Nid == preNodeId && n.Lv == preNodeLv {
return true
}
}
}
return false
}

View File

@ -6,6 +6,7 @@ import (
"go_dreamfactory/lego/core"
"go_dreamfactory/lego/sys/log"
"go_dreamfactory/modules"
"go_dreamfactory/pb"
cfg "go_dreamfactory/sys/configure/structs"
)
@ -49,7 +50,7 @@ func (this *Reputation) Start() (err error) {
// 获取阵营最大等级
// raceType 阵营类型
func (this *Reputation) getCampLvMax(raceType int32) (maxLv int32) {
campLvConf, err := this.configure.getCampLvCfg()
campLvConf, err := this.configure.getCampCfg()
if err != nil {
return
}
@ -65,19 +66,17 @@ func (this *Reputation) getCampLvMax(raceType int32) (maxLv int32) {
// 声望升级
// raceType 阵营 fv 阵营好感度累计值
func (this *Reputation) Upgrade(session comm.IUserSession, raceType int32, fv int32) (lv int32) {
func (this *Reputation) Upgrade(session comm.IUserSession, raceType int32, fv int32) int32 {
uid := session.GetUserId()
reputation := this.modelReputation.getDBReputation(uid)
if reputation == nil {
return
return 0
}
c, ok := reputation.Camps[raceType]
if !ok {
this.Error("阵营不存在",
log.Field{Key: "uid", Value: uid},
log.Field{Key: "raceType", Value: raceType})
return
reputation.Camps[raceType] = &pb.Camp{}
c = reputation.Camps[raceType]
}
maxLv := this.getCampLvMax(raceType)
@ -89,25 +88,39 @@ func (this *Reputation) Upgrade(session comm.IUserSession, raceType int32, fv in
return c.ReputationLv
}
campLvConf, err := this.configure.getCampLvCfg()
campConf, err := this.configure.getCampCfg()
if err != nil {
return
return 0
}
for _, conf := range campLvConf.GetDataList() {
if conf.RaceType == raceType && conf.ReputationLv == c.ReputationLv {
if fv >= conf.ReputationExp {
//更新等级
c.ReputationLv = c.ReputationLv + 1
update := map[string]interface{}{
"camps": reputation.Camps,
var (
reward *cfg.Gameatn
flag bool
)
for _, cnf := range campConf.GetDataList() {
if cnf.RaceType == raceType {
nextCampConf := this.configure.getCampBy(raceType, c.ReputationLv+1)
if nextCampConf == nil {
return cnf.ReputationLv
} else {
if fv >= nextCampConf.ReputationExp {
c.ReputationLv = nextCampConf.ReputationLv
reward = cnf.Reward
flag = true
}
this.modelReputation.updateDBReputation(uid, update)
//发放天赋点奖励
this.DispenseRes(session, []*cfg.Gameatn{conf.Reward}, false)
break
}
}
}
return
if flag {
update := map[string]interface{}{
"camps": reputation.Camps,
}
if err := this.modelReputation.updateDBReputation(uid, update); err == nil {
this.DispenseRes(session, []*cfg.Gameatn{reward}, false)
}
}
return c.ReputationLv
}

View File

@ -405,6 +405,10 @@ func (this *User) change(session comm.IUserSession, attr string, add int32) (cha
Arenacoin: userEx.Arenacoin,
Ps: user.Ps,
Moongold: user.Moongold,
Talent1: user.Talent1,
Talent2: user.Talent2,
Talent3: user.Talent3,
Talent4: user.Talent4,
}
switch attr {
@ -543,6 +547,9 @@ func (this *User) change(session comm.IUserSession, attr string, add int32) (cha
comm.ResPs: change.Ps,
comm.Moongold: change.Moongold,
comm.Talent1: change.Talent1,
comm.Talent2: change.Talent2,
comm.Talent3: change.Talent3,
comm.Talent4: change.Talent4,
}
//user ex

View File

@ -374,7 +374,8 @@ const (
ErrorCode_ParkourInviteNoPermissions ErrorCode = 4403 //无权邀请
ErrorCode_ParkourTargetTeamed ErrorCode = 4404 //目标已组队
//reputation
ErrorCode_ReputationTalentFull ErrorCode = 4501 //天赋满级
ErrorCode_ReputationTalentFull ErrorCode = 4501 //天赋满级
ErrorCode_ReputationNoPreNodeLv ErrorCode = 4502 //前置节点等级不满足
)
// Enum value maps for ErrorCode.
@ -696,6 +697,7 @@ var (
4403: "ParkourInviteNoPermissions",
4404: "ParkourTargetTeamed",
4501: "ReputationTalentFull",
4502: "ReputationNoPreNodeLv",
}
ErrorCode_value = map[string]int32{
"Success": 0,
@ -1014,6 +1016,7 @@ var (
"ParkourInviteNoPermissions": 4403,
"ParkourTargetTeamed": 4404,
"ReputationTalentFull": 4501,
"ReputationNoPreNodeLv": 4502,
}
)
@ -1048,7 +1051,7 @@ var File_errorcode_proto protoreflect.FileDescriptor
var file_errorcode_proto_rawDesc = []byte{
0x0a, 0x0f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
0x6f, 0x2a, 0xe6, 0x39, 0x0a, 0x09, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12,
0x6f, 0x2a, 0x82, 0x3a, 0x0a, 0x09, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12,
0x0b, 0x0a, 0x07, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x10, 0x00, 0x12, 0x14, 0x0a, 0x10,
0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x45, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e,
0x10, 0x01, 0x12, 0x11, 0x0a, 0x0d, 0x4e, 0x6f, 0x46, 0x69, 0x6e, 0x64, 0x53, 0x65, 0x72, 0x76,
@ -1510,8 +1513,10 @@ var file_errorcode_proto_rawDesc = []byte{
0x6e, 0x73, 0x10, 0xb3, 0x22, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x61, 0x72, 0x6b, 0x6f, 0x75, 0x72,
0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x54, 0x65, 0x61, 0x6d, 0x65, 0x64, 0x10, 0xb4, 0x22, 0x12,
0x19, 0x0a, 0x14, 0x52, 0x65, 0x70, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x61, 0x6c,
0x65, 0x6e, 0x74, 0x46, 0x75, 0x6c, 0x6c, 0x10, 0x95, 0x23, 0x42, 0x06, 0x5a, 0x04, 0x2e, 0x3b,
0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
0x65, 0x6e, 0x74, 0x46, 0x75, 0x6c, 0x6c, 0x10, 0x95, 0x23, 0x12, 0x1a, 0x0a, 0x15, 0x52, 0x65,
0x70, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x50, 0x72, 0x65, 0x4e, 0x6f, 0x64,
0x65, 0x4c, 0x76, 0x10, 0x96, 0x23, 0x42, 0x06, 0x5a, 0x04, 0x2e, 0x3b, 0x70, 0x62, 0x62, 0x06,
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (

View File

@ -120,7 +120,8 @@ type ReputationUpgradeReq struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
NodeId int32 `protobuf:"varint,1,opt,name=nodeId,proto3" json:"nodeId"` //节点ID
NodeId int32 `protobuf:"varint,1,opt,name=nodeId,proto3" json:"nodeId"` //节点ID
RaceType int32 `protobuf:"varint,2,opt,name=raceType,proto3" json:"raceType"` //阵营ID
}
func (x *ReputationUpgradeReq) Reset() {
@ -162,6 +163,13 @@ func (x *ReputationUpgradeReq) GetNodeId() int32 {
return 0
}
func (x *ReputationUpgradeReq) GetRaceType() int32 {
if x != nil {
return x.RaceType
}
return 0
}
type ReputationUpgradeResp struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
@ -394,25 +402,27 @@ var file_reputation_reputation_msg_proto_rawDesc = []byte{
0x6e, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x66,
0x72, 0x69, 0x65, 0x6e, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x1a, 0x0a, 0x18, 0x72, 0x65,
0x70, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x61, 0x6c, 0x65, 0x6e, 0x74, 0x74, 0x65,
0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x22, 0x2e, 0x0a, 0x14, 0x72, 0x65, 0x70, 0x75, 0x74, 0x61,
0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x22, 0x4a, 0x0a, 0x14, 0x72, 0x65, 0x70, 0x75, 0x74, 0x61,
0x74, 0x69, 0x6f, 0x6e, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x52, 0x65, 0x71, 0x12, 0x16,
0x0a, 0x06, 0x6e, 0x6f, 0x64, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06,
0x6e, 0x6f, 0x64, 0x65, 0x49, 0x64, 0x22, 0x17, 0x0a, 0x15, 0x72, 0x65, 0x70, 0x75, 0x74, 0x61,
0x74, 0x69, 0x6f, 0x6e, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22,
0x15, 0x0a, 0x13, 0x72, 0x65, 0x70, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x61, 0x6c,
0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x22, 0x5c, 0x0a, 0x14, 0x72, 0x65, 0x70, 0x75, 0x74, 0x61,
0x74, 0x69, 0x6f, 0x6e, 0x54, 0x61, 0x6c, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x29,
0x0a, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01,
0x28, 0x0b, 0x32, 0x09, 0x2e, 0x43, 0x61, 0x6d, 0x70, 0x41, 0x74, 0x74, 0x72, 0x52, 0x0a, 0x61,
0x74, 0x74, 0x72, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x12, 0x19, 0x0a, 0x04, 0x63, 0x61, 0x6d,
0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x43, 0x61, 0x6d, 0x70, 0x52, 0x04,
0x63, 0x61, 0x6d, 0x70, 0x22, 0x36, 0x0a, 0x18, 0x72, 0x65, 0x70, 0x75, 0x74, 0x61, 0x74, 0x69,
0x6f, 0x6e, 0x54, 0x61, 0x6c, 0x65, 0x6e, 0x74, 0x72, 0x65, 0x73, 0x65, 0x74, 0x52, 0x65, 0x71,
0x12, 0x1a, 0x0a, 0x08, 0x72, 0x61, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01,
0x28, 0x05, 0x52, 0x08, 0x72, 0x61, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x22, 0x1b, 0x0a, 0x19,
0x72, 0x65, 0x70, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x61, 0x6c, 0x65, 0x6e, 0x74,
0x72, 0x65, 0x73, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x42, 0x06, 0x5a, 0x04, 0x2e, 0x3b, 0x70,
0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
0x6e, 0x6f, 0x64, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x61, 0x63, 0x65, 0x54, 0x79,
0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x72, 0x61, 0x63, 0x65, 0x54, 0x79,
0x70, 0x65, 0x22, 0x17, 0x0a, 0x15, 0x72, 0x65, 0x70, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e,
0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x15, 0x0a, 0x13, 0x72,
0x65, 0x70, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x61, 0x6c, 0x65, 0x6e, 0x74, 0x52,
0x65, 0x71, 0x22, 0x5c, 0x0a, 0x14, 0x72, 0x65, 0x70, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e,
0x54, 0x61, 0x6c, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x29, 0x0a, 0x0a, 0x61, 0x74,
0x74, 0x72, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x09,
0x2e, 0x43, 0x61, 0x6d, 0x70, 0x41, 0x74, 0x74, 0x72, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x47,
0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x12, 0x19, 0x0a, 0x04, 0x63, 0x61, 0x6d, 0x70, 0x18, 0x02, 0x20,
0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x43, 0x61, 0x6d, 0x70, 0x52, 0x04, 0x63, 0x61, 0x6d, 0x70,
0x22, 0x36, 0x0a, 0x18, 0x72, 0x65, 0x70, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x61,
0x6c, 0x65, 0x6e, 0x74, 0x72, 0x65, 0x73, 0x65, 0x74, 0x52, 0x65, 0x71, 0x12, 0x1a, 0x0a, 0x08,
0x72, 0x61, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08,
0x72, 0x61, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x22, 0x1b, 0x0a, 0x19, 0x72, 0x65, 0x70, 0x75,
0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x61, 0x6c, 0x65, 0x6e, 0x74, 0x72, 0x65, 0x73, 0x65,
0x74, 0x52, 0x65, 0x73, 0x70, 0x42, 0x06, 0x5a, 0x04, 0x2e, 0x3b, 0x70, 0x62, 0x62, 0x06, 0x70,
0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (