diff --git a/dto/request_proto/request.pb.go b/dto/request_proto/request.pb.go index 01905b2..d70726b 100644 --- a/dto/request_proto/request.pb.go +++ b/dto/request_proto/request.pb.go @@ -381,7 +381,7 @@ type TurnoutOperationReq struct { SimulationId string `protobuf:"bytes,1,opt,name=simulationId,proto3" json:"simulationId,omitempty"` // 仿真id MapId int32 `protobuf:"varint,2,opt,name=mapId,proto3" json:"mapId,omitempty"` // 图id - DeviceId string `protobuf:"bytes,3,opt,name=deviceId,proto3" json:"deviceId,omitempty"` // 设备id + DeviceId uint32 `protobuf:"varint,3,opt,name=deviceId,proto3" json:"deviceId,omitempty"` // 设备id Operation Turnout_Operation `protobuf:"varint,4,opt,name=operation,proto3,enum=request.Turnout_Operation" json:"operation,omitempty"` // 道岔操作 } @@ -431,11 +431,11 @@ func (x *TurnoutOperationReq) GetMapId() int32 { return 0 } -func (x *TurnoutOperationReq) GetDeviceId() string { +func (x *TurnoutOperationReq) GetDeviceId() uint32 { if x != nil { return x.DeviceId } - return "" + return 0 } func (x *TurnoutOperationReq) GetOperation() Turnout_Operation { @@ -570,7 +570,7 @@ type PsdOperationReq struct { SimulationId string `protobuf:"bytes,1,opt,name=simulationId,proto3" json:"simulationId,omitempty"` // 仿真id MapId int32 `protobuf:"varint,2,opt,name=mapId,proto3" json:"mapId,omitempty"` // 图id - DeviceId string `protobuf:"bytes,3,opt,name=deviceId,proto3" json:"deviceId,omitempty"` // 设备id + DeviceId uint32 `protobuf:"varint,3,opt,name=deviceId,proto3" json:"deviceId,omitempty"` // 设备id Operation Psd_Operation `protobuf:"varint,4,opt,name=operation,proto3,enum=request.Psd_Operation" json:"operation,omitempty"` // 操作 AsdCodes []int32 `protobuf:"varint,5,rep,packed,name=asdCodes,proto3" json:"asdCodes,omitempty"` //无法关闭/无法开启故障涉及的滑动门的编号 Group int32 `protobuf:"varint,6,opt,name=group,proto3" json:"group,omitempty"` //开门操作的编组 @@ -622,11 +622,11 @@ func (x *PsdOperationReq) GetMapId() int32 { return 0 } -func (x *PsdOperationReq) GetDeviceId() string { +func (x *PsdOperationReq) GetDeviceId() uint32 { if x != nil { return x.DeviceId } - return "" + return 0 } func (x *PsdOperationReq) GetOperation() Psd_Operation { @@ -671,7 +671,7 @@ var file_request_proto_rawDesc = []byte{ 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x69, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x61, 0x70, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6d, 0x61, 0x70, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, - 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x38, 0x0a, 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x75, 0x72, 0x6e, 0x6f, 0x75, 0x74, 0x2e, 0x4f, 0x70, @@ -721,7 +721,7 @@ var file_request_proto_rawDesc = []byte{ 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x69, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x61, 0x70, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6d, 0x61, 0x70, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x64, - 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, + 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x34, 0x0a, 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x50, 0x73, 0x64, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, diff --git a/dto/simulation.go b/dto/simulation.go index 0e7dc84..d1f583e 100644 --- a/dto/simulation.go +++ b/dto/simulation.go @@ -42,7 +42,7 @@ type AddTrainReqDto struct { //车头所在link内的偏移量,单位为mm HeadLinkOffset int64 `json:"headLinkOffset" form:"headLinkOffset"` //物理区段、道岔ID - Id string `json:"id" form:"id"` + Id uint32 `json:"id" form:"id"` //道岔端口 DevicePort string `json:"devicePort" form:"devicePort"` //车头所在link内的偏移量,单位为mm @@ -94,7 +94,7 @@ type SwitchOperationReqDto struct { type SignalOperationReqDto struct { SimulationId string `form:"simulationId" json:"simulationId" binding:"required"` MapId int32 `json:"mapId" from:"mapId" binding:"required"` - DeviceId string `form:"id" json:"id" binding:"required"` + DeviceId uint32 `form:"id" json:"id" binding:"required"` Operation request_proto.Signal_Operation `form:"operation" json:"operation" binding:"required"` //信号机操作类型 Aspect state.Signal_Aspect `form:"aspect" json:"aspect" binding:"required"` // 当操作为Operation.Display时有效,表示显示的信号 } @@ -103,7 +103,7 @@ type SignalOperationReqDto struct { type AxleSectionOperationReqDto struct { SimulationId string `form:"simulationId" json:"simulationId" binding:"required"` MapId int32 `json:"mapId" from:"mapId" binding:"required"` - DeviceId string `form:"id" json:"id" binding:"required"` + DeviceId uint32 `form:"id" json:"id" binding:"required"` Operation request_proto.Section_Operation `form:"operation" json:"operation"` TrainIn bool `form:"trainIn" json:"trainIn"` TrainOut bool `form:"trainOut" json:"trainOut"` @@ -111,22 +111,22 @@ type AxleSectionOperationReqDto struct { type EsbButtonOperationReqDto struct { SimulationId string `form:"simulationId" json:"simulationId" binding:"required"` MapId int32 `json:"mapId" from:"mapId" binding:"required"` - Id string `form:"id" json:"id" binding:"required"` + Id uint32 `form:"id" json:"id" binding:"required"` Down bool `form:"down" json:"down"` } type IBPButtonOperationReqDto struct { SimulationId string `form:"simulationId" json:"simulationId" binding:"required"` MapId int32 `json:"mapId" from:"mapId" binding:"required"` - StationId string `form:"stationId" json:"stationId" binding:"required"` - ButtonId string `form:"buttonId" json:"buttonId" binding:"required"` + StationId uint32 `form:"stationId" json:"stationId" binding:"required"` + ButtonId uint32 `form:"buttonId" json:"buttonId" binding:"required"` Down bool `form:"down" json:"down"` } type PslOperationReqDto struct { SimulationId string `form:"simulationId" json:"simulationId" binding:"required"` MapId int32 `json:"mapId" from:"mapId" binding:"required"` - GateBoxId string `form:"gateBoxId" json:"gateBoxId"` + GateBoxId uint32 `form:"gateBoxId" json:"gateBoxId"` ButtonCode string `form:"buttonCode" json:"buttonCode" binding:"required"` Down bool `form:"down" json:"down"` } @@ -134,8 +134,8 @@ type PslOperationReqDto struct { type KeyOperationReqDto struct { SimulationId string `form:"simulationId" json:"simulationId" binding:"required"` MapId int32 `json:"mapId" from:"mapId" binding:"required"` - StationId string `form:"stationId" json:"stationId" binding:"required"` - KeyId string `form:"keyId" json:"keyId"` + StationId uint32 `form:"stationId" json:"stationId" binding:"required"` + KeyId uint32 `form:"keyId" json:"keyId"` Gear int32 `form:"gear" json:"gear"` } @@ -165,6 +165,6 @@ type SimulationInfoRspDtoArr []SimulationInfoRspDto type RelayOperationReqDto struct { SimulationId string `form:"simulationId" json:"simulationId" binding:"required"` MapId int32 `json:"mapId" from:"mapId" binding:"required"` - Id string `form:"id" json:"id" binding:"required"` + Id uint32 `form:"id" json:"id" binding:"required"` Td bool `form:"td" json:"td"` } diff --git a/dto/simulation_dto/turnout_test.go b/dto/simulation_dto/turnout_test.go index dd20b24..694b95f 100644 --- a/dto/simulation_dto/turnout_test.go +++ b/dto/simulation_dto/turnout_test.go @@ -12,7 +12,7 @@ func TestTurnoutOperationReqDto(t *testing.T) { b, err := json.Marshal(&request_proto.TurnoutOperationReq{ SimulationId: "1", MapId: 2, - DeviceId: "3", + DeviceId: 3, Operation: 2, }) if err != nil { diff --git a/message_server/ibp_ms.go b/message_server/ibp_ms.go index 85da31b..1501bfc 100644 --- a/message_server/ibp_ms.go +++ b/message_server/ibp_ms.go @@ -109,7 +109,7 @@ func (ms *IbpMs) collectIBPButtonState(stationUid string, uidsMap *memory.IBPUid } // 获取IBP盘按钮状态 -func getIBPButtonState(id string, entry *ecs.Entry) *state.ButtonState { +func getIBPButtonState(id uint32, entry *ecs.Entry) *state.ButtonState { status := &state.ButtonState{Id: id} bit := component.BitStateType.Get(entry) status.Down = bit.Val @@ -173,6 +173,6 @@ func (ms *IbpMs) collectIBPKeyState(stationUid string, uidsMap *memory.IBPUidStr } // 处理订阅通道名称 -func (ms *IbpMs) handlerIBPChannelName(stationId string) string { +func (ms *IbpMs) handlerIBPChannelName(stationId uint32) string { return fmt.Sprintf(SimulationIbpTopic, ms.vs.SimulationId, ms.mapId, stationId) } diff --git a/message_server/psl_ms.go b/message_server/psl_ms.go index 4c29b25..0eab9fb 100644 --- a/message_server/psl_ms.go +++ b/message_server/psl_ms.go @@ -56,7 +56,7 @@ func (p *PslMs) OnTick() ([]*ms_api.TopicMsg, error) { func (p *PslMs) OnError(err error) {} // 处理订阅通道名称 -func (p *PslMs) handlerPSLChannelName(gateBoxId string) string { +func (p *PslMs) handlerPSLChannelName(gateBoxId uint32) string { return fmt.Sprintf(SimulationPslTopic, p.vs.SimulationId, p.mapId, gateBoxId) } @@ -72,13 +72,19 @@ func (p *PslMs) collectGateBoxPSLState(box *graphicData.GatedBox) (*state.Pushed mkx := component.MkxType.Get(mkxEntry) var buttonStateArr []*state.ButtonState if ok { + pslMapId := memory.QueryGiId(box.RefGatedBoxMapCode) + pslStorage := memory.QueryGiData[*graphicData.PslGraphicStorage](pslMapId) + btnUidMap := make(map[string]uint32, len(pslStorage.PslButtons)) + for _, button := range pslStorage.PslButtons { + btnUidMap[boxUid+"_"+button.Code] = memory.GetMapElementId(button.Common) + } btnArr := []*ecs.Entry{mkx.PCB, mkx.POB, mkx.PAB} for _, btn := range btnArr { if btn == nil { continue } buttonStateArr = append(buttonStateArr, &state.ButtonState{ - Id: component.UidType.Get(btn).Id, + Id: btnUidMap[component.UidType.Get(btn).Id], Down: component.BitStateType.Get(btn).Val, Active: component.BitStateType.Get(btn).Val, }) diff --git a/message_server/sfp_ms.go b/message_server/sfp_ms.go index dc5bd0b..83938c8 100644 --- a/message_server/sfp_ms.go +++ b/message_server/sfp_ms.go @@ -333,12 +333,12 @@ func (ms *SfpMs) collectPlatformStates() ([]*state.PlatformState, error) { for _, platform := range mapData.Platforms { pid := memory.GetMapElementId(platform.Common) stationCommonId := platform.RefStationId - if stationCommonId == "" { + if stationCommonId == 0 { return nil, fmt.Errorf("站台没有绑定车站:id=%v", pid) } uidInfo := uidsMap.StationIds[stationCommonId] if uidInfo == nil { - return nil, fmt.Errorf("车站实体不存在uid映射:id=%s", stationCommonId) + return nil, fmt.Errorf("车站实体不存在uid映射:id=%v", stationCommonId) } entry, ok := entity.GetEntityByUid(ms.vs.World, uidInfo.Uid) if !ok { @@ -366,7 +366,7 @@ func (ms *SfpMs) collectPlatformStates() ([]*state.PlatformState, error) { } } psdId := platformScreenDoorMap[pid] - if psdId != "" { + if psdId != 0 { psdUid, ok := uidsMap.PsdIds[psdId] if !ok { continue @@ -397,8 +397,8 @@ func (ms *SfpMs) collectPlatformStates() ([]*state.PlatformState, error) { } // 将屏蔽门关联到站台 -func wrapScreenDoorToPlatform(mapData *graphicData.RtssGraphicStorage) map[string]string { - platformMap := make(map[string]string, len(mapData.Platforms)) +func wrapScreenDoorToPlatform(mapData *graphicData.RtssGraphicStorage) map[uint32]uint32 { + platformMap := make(map[uint32]uint32, len(mapData.Platforms)) for _, s := range mapData.ScreenDoors { platformMap[s.RefPlatformId] = memory.GetMapElementId(s.Common) } diff --git a/message_server/simulation.go b/message_server/simulation.go index 607b3c8..5f0c06e 100644 --- a/message_server/simulation.go +++ b/message_server/simulation.go @@ -20,9 +20,9 @@ const ( // 继电器组合柜布置图设备状态消息topic SimulationRccTopic = SimulationTopicPrefix + "rcc/%d" // PSL设备状态消息topic - SimulationPslTopic = SimulationTopicPrefix + "psl/%d/%s" + SimulationPslTopic = SimulationTopicPrefix + "psl/%d/%d" // IBP设备状态消息topic - SimulationIbpTopic = SimulationTopicPrefix + "ibp/%d/%s" + SimulationIbpTopic = SimulationTopicPrefix + "ibp/%d/%d" ) var smsMap sync.Map diff --git a/ts/protos/graphicData/relayCabinetLayoutGraphics.pb.go b/ts/protos/graphicData/relayCabinetLayoutGraphics.pb.go index b4a25eb..58cec6d 100644 --- a/ts/protos/graphicData/relayCabinetLayoutGraphics.pb.go +++ b/ts/protos/graphicData/relayCabinetLayoutGraphics.pb.go @@ -549,8 +549,9 @@ type Combinationtype struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Code string `protobuf:"bytes,1,opt,name=code,proto3" json:"code,omitempty"` - RefRelays []string `protobuf:"bytes,2,rep,name=refRelays,proto3" json:"refRelays,omitempty"` //设备关联的继电器 + Code string `protobuf:"bytes,1,opt,name=code,proto3" json:"code,omitempty"` + OldrefRelays []string `protobuf:"bytes,2,rep,name=oldrefRelays,proto3" json:"oldrefRelays,omitempty"` //设备关联的继电器 + RefRelays []uint32 `protobuf:"varint,3,rep,packed,name=refRelays,proto3" json:"refRelays,omitempty"` //设备关联的继电器 } func (x *Combinationtype) Reset() { @@ -592,7 +593,14 @@ func (x *Combinationtype) GetCode() string { return "" } -func (x *Combinationtype) GetRefRelays() []string { +func (x *Combinationtype) GetOldrefRelays() []string { + if x != nil { + return x.OldrefRelays + } + return nil +} + +func (x *Combinationtype) GetRefRelays() []uint32 { if x != nil { return x.RefRelays } @@ -825,8 +833,9 @@ type CjDataItem struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - RelayId string `protobuf:"bytes,1,opt,name=relayId,proto3" json:"relayId,omitempty"` //采集对应的继电器Id - Position CjDataItem_PostionType `protobuf:"varint,2,opt,name=position,proto3,enum=relayCabinetGraphicData.CjDataItem_PostionType" json:"position,omitempty"` //继电器的位置,QH对应着吸合 + OldrelayId string `protobuf:"bytes,1,opt,name=oldrelayId,proto3" json:"oldrelayId,omitempty"` //采集对应的继电器Id + Position CjDataItem_PostionType `protobuf:"varint,2,opt,name=position,proto3,enum=relayCabinetGraphicData.CjDataItem_PostionType" json:"position,omitempty"` //继电器的位置,QH对应着吸合 + RelayId uint32 `protobuf:"varint,3,opt,name=relayId,proto3" json:"relayId,omitempty"` //采集对应的继电器Id } func (x *CjDataItem) Reset() { @@ -861,9 +870,9 @@ func (*CjDataItem) Descriptor() ([]byte, []int) { return file_relayCabinetLayoutGraphics_proto_rawDescGZIP(), []int{11} } -func (x *CjDataItem) GetRelayId() string { +func (x *CjDataItem) GetOldrelayId() string { if x != nil { - return x.RelayId + return x.OldrelayId } return "" } @@ -875,6 +884,13 @@ func (x *CjDataItem) GetPosition() CjDataItem_PostionType { return CjDataItem_Q } +func (x *CjDataItem) GetRelayId() uint32 { + if x != nil { + return x.RelayId + } + return 0 +} + // 驱动 type CiQd struct { state protoimpl.MessageState @@ -991,7 +1007,8 @@ type QdData struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - RefRelays []string `protobuf:"bytes,1,rep,name=refRelays,proto3" json:"refRelays,omitempty"` //驱动的继电器Id + OldrefRelays []string `protobuf:"bytes,1,rep,name=oldrefRelays,proto3" json:"oldrefRelays,omitempty"` //驱动的继电器Id + RefRelays []uint32 `protobuf:"varint,2,rep,packed,name=refRelays,proto3" json:"refRelays,omitempty"` //驱动的继电器Id } func (x *QdData) Reset() { @@ -1026,7 +1043,14 @@ func (*QdData) Descriptor() ([]byte, []int) { return file_relayCabinetLayoutGraphics_proto_rawDescGZIP(), []int{14} } -func (x *QdData) GetRefRelays() []string { +func (x *QdData) GetOldrefRelays() []string { + if x != nil { + return x.OldrefRelays + } + return nil +} + +func (x *QdData) GetRefRelays() []uint32 { if x != nil { return x.RefRelays } @@ -1133,61 +1157,67 @@ var file_relayCabinetLayoutGraphics_proto_rawDesc = []byte{ 0x32, 0x22, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x66, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, - 0x22, 0x43, 0x0a, 0x0f, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x74, + 0x22, 0x67, 0x0a, 0x0f, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x74, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x52, 0x65, - 0x6c, 0x61, 0x79, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x66, 0x52, - 0x65, 0x6c, 0x61, 0x79, 0x73, 0x22, 0x7c, 0x0a, 0x0c, 0x55, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x49, - 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x69, 0x74, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x69, 0x6e, - 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6c, 0x69, 0x6e, 0x65, 0x49, - 0x64, 0x12, 0x40, 0x0a, 0x1b, 0x62, 0x65, 0x6c, 0x6f, 0x6e, 0x67, 0x73, 0x43, 0x6f, 0x6e, 0x63, - 0x65, 0x6e, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x1b, 0x62, 0x65, 0x6c, 0x6f, 0x6e, 0x67, 0x73, 0x43, - 0x6f, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x22, 0x5c, 0x0a, 0x04, 0x43, 0x69, 0x43, 0x6a, 0x12, 0x18, 0x0a, 0x07, 0x64, - 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x64, 0x73, - 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x3a, 0x0a, 0x06, 0x63, 0x6a, 0x4c, 0x69, 0x73, 0x74, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x43, 0x61, 0x62, - 0x69, 0x6e, 0x65, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, - 0x43, 0x6a, 0x44, 0x61, 0x74, 0x61, 0x53, 0x65, 0x74, 0x52, 0x06, 0x63, 0x6a, 0x4c, 0x69, 0x73, - 0x74, 0x22, 0x5a, 0x0a, 0x09, 0x43, 0x6a, 0x44, 0x61, 0x74, 0x61, 0x53, 0x65, 0x74, 0x12, 0x12, - 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x12, 0x39, 0x0a, 0x07, 0x62, 0x69, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x43, 0x61, 0x62, 0x69, 0x6e, - 0x65, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6a, - 0x44, 0x61, 0x74, 0x61, 0x52, 0x07, 0x62, 0x69, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x4b, 0x0a, - 0x06, 0x43, 0x6a, 0x44, 0x61, 0x74, 0x61, 0x12, 0x41, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x52, 0x65, - 0x6c, 0x61, 0x79, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x72, 0x65, 0x6c, - 0x61, 0x79, 0x43, 0x61, 0x62, 0x69, 0x6e, 0x65, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, - 0x44, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6a, 0x44, 0x61, 0x74, 0x61, 0x49, 0x74, 0x65, 0x6d, 0x52, - 0x09, 0x72, 0x65, 0x66, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x73, 0x22, 0x90, 0x01, 0x0a, 0x0a, 0x43, - 0x6a, 0x44, 0x61, 0x74, 0x61, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x6c, - 0x61, 0x79, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x6c, 0x61, - 0x79, 0x49, 0x64, 0x12, 0x4b, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2f, 0x2e, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x43, 0x61, 0x62, - 0x69, 0x6e, 0x65, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, - 0x43, 0x6a, 0x44, 0x61, 0x74, 0x61, 0x49, 0x74, 0x65, 0x6d, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x69, - 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x22, 0x1b, 0x0a, 0x0b, 0x50, 0x6f, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x05, 0x0a, 0x01, 0x51, 0x10, 0x00, 0x12, 0x05, 0x0a, 0x01, 0x48, 0x10, 0x01, 0x22, 0x5c, 0x0a, - 0x04, 0x43, 0x69, 0x51, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x64, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, - 0x3a, 0x0a, 0x06, 0x71, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x22, 0x2e, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x43, 0x61, 0x62, 0x69, 0x6e, 0x65, 0x74, 0x47, 0x72, - 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x51, 0x64, 0x44, 0x61, 0x74, 0x61, - 0x53, 0x65, 0x74, 0x52, 0x06, 0x71, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x5a, 0x0a, 0x09, 0x51, - 0x64, 0x44, 0x61, 0x74, 0x61, 0x53, 0x65, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x39, 0x0a, 0x07, - 0x62, 0x69, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, - 0x72, 0x65, 0x6c, 0x61, 0x79, 0x43, 0x61, 0x62, 0x69, 0x6e, 0x65, 0x74, 0x47, 0x72, 0x61, 0x70, - 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x51, 0x64, 0x44, 0x61, 0x74, 0x61, 0x52, 0x07, - 0x62, 0x69, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x26, 0x0a, 0x06, 0x51, 0x64, 0x44, 0x61, 0x74, - 0x61, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x66, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x73, 0x42, - 0x19, 0x5a, 0x17, 0x2e, 0x2f, 0x74, 0x73, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x2f, 0x67, - 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x33, + 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x6f, 0x6c, 0x64, 0x72, 0x65, + 0x66, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x6f, + 0x6c, 0x64, 0x72, 0x65, 0x66, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x72, + 0x65, 0x66, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x09, + 0x72, 0x65, 0x66, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x73, 0x22, 0x7c, 0x0a, 0x0c, 0x55, 0x6e, 0x69, + 0x71, 0x75, 0x65, 0x49, 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x69, 0x74, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x69, 0x74, 0x79, 0x12, 0x16, 0x0a, + 0x06, 0x6c, 0x69, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6c, + 0x69, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x40, 0x0a, 0x1b, 0x62, 0x65, 0x6c, 0x6f, 0x6e, 0x67, 0x73, + 0x43, 0x6f, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x1b, 0x62, 0x65, 0x6c, 0x6f, + 0x6e, 0x67, 0x73, 0x43, 0x6f, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x5c, 0x0a, 0x04, 0x43, 0x69, 0x43, 0x6a, 0x12, + 0x18, 0x0a, 0x07, 0x64, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x07, 0x64, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x3a, 0x0a, 0x06, 0x63, 0x6a, 0x4c, + 0x69, 0x73, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x72, 0x65, 0x6c, 0x61, + 0x79, 0x43, 0x61, 0x62, 0x69, 0x6e, 0x65, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, + 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6a, 0x44, 0x61, 0x74, 0x61, 0x53, 0x65, 0x74, 0x52, 0x06, 0x63, + 0x6a, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x5a, 0x0a, 0x09, 0x43, 0x6a, 0x44, 0x61, 0x74, 0x61, 0x53, + 0x65, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x39, 0x0a, 0x07, 0x62, 0x69, 0x74, 0x4c, 0x69, 0x73, + 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x43, + 0x61, 0x62, 0x69, 0x6e, 0x65, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, + 0x61, 0x2e, 0x43, 0x6a, 0x44, 0x61, 0x74, 0x61, 0x52, 0x07, 0x62, 0x69, 0x74, 0x4c, 0x69, 0x73, + 0x74, 0x22, 0x4b, 0x0a, 0x06, 0x43, 0x6a, 0x44, 0x61, 0x74, 0x61, 0x12, 0x41, 0x0a, 0x09, 0x72, + 0x65, 0x66, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, + 0x2e, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x43, 0x61, 0x62, 0x69, 0x6e, 0x65, 0x74, 0x47, 0x72, 0x61, + 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6a, 0x44, 0x61, 0x74, 0x61, 0x49, + 0x74, 0x65, 0x6d, 0x52, 0x09, 0x72, 0x65, 0x66, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x73, 0x22, 0xb0, + 0x01, 0x0a, 0x0a, 0x43, 0x6a, 0x44, 0x61, 0x74, 0x61, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x1e, 0x0a, + 0x0a, 0x6f, 0x6c, 0x64, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0a, 0x6f, 0x6c, 0x64, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x49, 0x64, 0x12, 0x4b, 0x0a, + 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x2f, 0x2e, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x43, 0x61, 0x62, 0x69, 0x6e, 0x65, 0x74, 0x47, 0x72, + 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6a, 0x44, 0x61, 0x74, 0x61, + 0x49, 0x74, 0x65, 0x6d, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, + 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, + 0x6c, 0x61, 0x79, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x72, 0x65, 0x6c, + 0x61, 0x79, 0x49, 0x64, 0x22, 0x1b, 0x0a, 0x0b, 0x50, 0x6f, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x54, + 0x79, 0x70, 0x65, 0x12, 0x05, 0x0a, 0x01, 0x51, 0x10, 0x00, 0x12, 0x05, 0x0a, 0x01, 0x48, 0x10, + 0x01, 0x22, 0x5c, 0x0a, 0x04, 0x43, 0x69, 0x51, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x73, 0x43, + 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x64, 0x73, 0x43, 0x6f, + 0x75, 0x6e, 0x74, 0x12, 0x3a, 0x0a, 0x06, 0x71, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x43, 0x61, 0x62, 0x69, 0x6e, + 0x65, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x51, 0x64, + 0x44, 0x61, 0x74, 0x61, 0x53, 0x65, 0x74, 0x52, 0x06, 0x71, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x22, + 0x5a, 0x0a, 0x09, 0x51, 0x64, 0x44, 0x61, 0x74, 0x61, 0x53, 0x65, 0x74, 0x12, 0x12, 0x0a, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x12, 0x39, 0x0a, 0x07, 0x62, 0x69, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x1f, 0x2e, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x43, 0x61, 0x62, 0x69, 0x6e, 0x65, 0x74, + 0x47, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x51, 0x64, 0x44, 0x61, + 0x74, 0x61, 0x52, 0x07, 0x62, 0x69, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x4a, 0x0a, 0x06, 0x51, + 0x64, 0x44, 0x61, 0x74, 0x61, 0x12, 0x22, 0x0a, 0x0c, 0x6f, 0x6c, 0x64, 0x72, 0x65, 0x66, 0x52, + 0x65, 0x6c, 0x61, 0x79, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x6f, 0x6c, 0x64, + 0x72, 0x65, 0x66, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x66, + 0x52, 0x65, 0x6c, 0x61, 0x79, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x09, 0x72, 0x65, + 0x66, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x73, 0x42, 0x19, 0x5a, 0x17, 0x2e, 0x2f, 0x74, 0x73, 0x2f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x2f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, + 0x74, 0x61, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/ts/protos/graphicData/stationLayoutGraphics.pb.go b/ts/protos/graphicData/stationLayoutGraphics.pb.go index 251188e..b8f1d68 100644 --- a/ts/protos/graphicData/stationLayoutGraphics.pb.go +++ b/ts/protos/graphicData/stationLayoutGraphics.pb.go @@ -878,7 +878,7 @@ func (x Train_TrainModel) Number() protoreflect.EnumNumber { // Deprecated: Use Train_TrainModel.Descriptor instead. func (Train_TrainModel) EnumDescriptor() ([]byte, []int) { - return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{48, 0} + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{47, 0} } type RtssGraphicStorage struct { @@ -905,16 +905,16 @@ type RtssGraphicStorage struct { LogicSections []*LogicSection `protobuf:"bytes,17,rep,name=logicSections,proto3" json:"logicSections,omitempty"` StopPositions []*StopPosition `protobuf:"bytes,18,rep,name=stopPositions,proto3" json:"stopPositions,omitempty"` SpksSwitchs []*SpksSwitch `protobuf:"bytes,19,rep,name=spksSwitchs,proto3" json:"spksSwitchs,omitempty"` - EsbButtons []*EsbButton `protobuf:"bytes,20,rep,name=esbButtons,proto3" json:"esbButtons,omitempty"` // 紧急关闭按钮 - GateBoxs []*GatedBox `protobuf:"bytes,21,rep,name=gateBoxs,proto3" json:"gateBoxs,omitempty"` // 站台开门/关门/发车按钮整合控制箱 - Transponders []*Transponder `protobuf:"bytes,22,rep,name=transponders,proto3" json:"transponders,omitempty"` // 应答器 - Slopes []*Slope `protobuf:"bytes,23,rep,name=slopes,proto3" json:"slopes,omitempty"` // 坡度 - CalculateLink []*CalculateLink `protobuf:"bytes,24,rep,name=CalculateLink,proto3" json:"CalculateLink,omitempty"` // 计算link信息 - SlopeKiloMarker []*SlopeKiloMarker `protobuf:"bytes,25,rep,name=slopeKiloMarker,proto3" json:"slopeKiloMarker,omitempty"` //坡度公里标 - CurvatureKiloMarker []*CurvatureKiloMarker `protobuf:"bytes,26,rep,name=curvatureKiloMarker,proto3" json:"curvatureKiloMarker,omitempty"` //曲度公里标 - Curvatures []*Curvature `protobuf:"bytes,27,rep,name=curvatures,proto3" json:"curvatures,omitempty"` // 曲度 - TrackSections []*TrackSection `protobuf:"bytes,28,rep,name=trackSections,proto3" json:"trackSections,omitempty"` //轨道区段 - TrackLogicSections []*TrackLogicSection `protobuf:"bytes,29,rep,name=trackLogicSections,proto3" json:"trackLogicSections,omitempty"` //轨道逻辑区段 + EsbButtons []*EsbButton `protobuf:"bytes,20,rep,name=esbButtons,proto3" json:"esbButtons,omitempty"` // 紧急关闭按钮 + GateBoxs []*GatedBox `protobuf:"bytes,21,rep,name=gateBoxs,proto3" json:"gateBoxs,omitempty"` // 站台开门/关门/发车按钮整合控制箱 + Transponders []*Transponder `protobuf:"bytes,22,rep,name=transponders,proto3" json:"transponders,omitempty"` // 应答器 + Slopes []*Slope `protobuf:"bytes,23,rep,name=slopes,proto3" json:"slopes,omitempty"` // 坡度 + // repeated CalculateLink CalculateLink = 24; // 计算link信息 + SlopeKiloMarker []*SlopeKiloMarker `protobuf:"bytes,25,rep,name=slopeKiloMarker,proto3" json:"slopeKiloMarker,omitempty"` //坡度公里标 + CurvatureKiloMarker []*CurvatureKiloMarker `protobuf:"bytes,26,rep,name=curvatureKiloMarker,proto3" json:"curvatureKiloMarker,omitempty"` //曲度公里标 + Curvatures []*Curvature `protobuf:"bytes,27,rep,name=curvatures,proto3" json:"curvatures,omitempty"` // 曲度 + TrackSections []*TrackSection `protobuf:"bytes,28,rep,name=trackSections,proto3" json:"trackSections,omitempty"` //轨道区段 + TrackLogicSections []*TrackLogicSection `protobuf:"bytes,29,rep,name=trackLogicSections,proto3" json:"trackLogicSections,omitempty"` //轨道逻辑区段 // UniqueIdType UniqueIdPrefix = 30;//设备唯一编码--前缀 UniqueIdPrefix *UniqueIdOfStationLayout `protobuf:"bytes,31,opt,name=UniqueIdPrefix,proto3" json:"UniqueIdPrefix,omitempty"` //设备唯一编码--前缀 KilometerConvertList []*KilometerConvert `protobuf:"bytes,32,rep,name=kilometerConvertList,proto3" json:"kilometerConvertList,omitempty"` //公里标转换列表 @@ -1102,13 +1102,6 @@ func (x *RtssGraphicStorage) GetSlopes() []*Slope { return nil } -func (x *RtssGraphicStorage) GetCalculateLink() []*CalculateLink { - if x != nil { - return x.CalculateLink - } - return nil -} - func (x *RtssGraphicStorage) GetSlopeKiloMarker() []*SlopeKiloMarker { if x != nil { return x.SlopeKiloMarker @@ -1500,11 +1493,11 @@ type CommonInfo struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Oldid string `protobuf:"bytes,1,opt,name=oldid,proto3" json:"oldid,omitempty"` GraphicType string `protobuf:"bytes,2,opt,name=graphicType,proto3" json:"graphicType,omitempty"` Transform *Transform `protobuf:"bytes,3,opt,name=transform,proto3" json:"transform,omitempty"` ChildTransforms []*ChildTransform `protobuf:"bytes,4,rep,name=childTransforms,proto3" json:"childTransforms,omitempty"` - NewId uint32 `protobuf:"varint,5,opt,name=newId,proto3" json:"newId,omitempty"` + Id uint32 `protobuf:"varint,5,opt,name=id,proto3" json:"id,omitempty"` } func (x *CommonInfo) Reset() { @@ -1539,9 +1532,9 @@ func (*CommonInfo) Descriptor() ([]byte, []int) { return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{5} } -func (x *CommonInfo) GetId() string { +func (x *CommonInfo) GetOldid() string { if x != nil { - return x.Id + return x.Oldid } return "" } @@ -1567,9 +1560,9 @@ func (x *CommonInfo) GetChildTransforms() []*ChildTransform { return nil } -func (x *CommonInfo) GetNewId() uint32 { +func (x *CommonInfo) GetId() uint32 { if x != nil { - return x.NewId + return x.Id } return 0 } @@ -1653,12 +1646,12 @@ type ConcentrationDividingLine struct { Common *CommonInfo `protobuf:"bytes,1,opt,name=common,proto3" json:"common,omitempty"` Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` // 编号 Points []*Point `protobuf:"bytes,3,rep,name=points,proto3" json:"points,omitempty"` // 点列表 - RefLeftStationId string `protobuf:"bytes,4,opt,name=refLeftStationId,proto3" json:"refLeftStationId,omitempty"` //左边关联的集中站id - RefRightStationId string `protobuf:"bytes,5,opt,name=refRightStationId,proto3" json:"refRightStationId,omitempty"` //右边关联的集中站id + OldrefLeftStationId string `protobuf:"bytes,4,opt,name=oldrefLeftStationId,proto3" json:"oldrefLeftStationId,omitempty"` //左边关联的集中站id + OldrefRightStationId string `protobuf:"bytes,5,opt,name=oldrefRightStationId,proto3" json:"oldrefRightStationId,omitempty"` //右边关联的集中站id NodeConWithSecs []*NodeConWithSec `protobuf:"bytes,6,rep,name=nodeConWithSecs,proto3" json:"nodeConWithSecs,omitempty"` // 集中区分割线与区段的交点 IsOtherLineConcentrationDividingLine bool `protobuf:"varint,7,opt,name=isOtherLineConcentrationDividingLine,proto3" json:"isOtherLineConcentrationDividingLine,omitempty"` //集中区分割线绘制在其它线的边界处 - NewrefLeftStationId uint32 `protobuf:"varint,8,opt,name=newrefLeftStationId,proto3" json:"newrefLeftStationId,omitempty"` //左边关联的集中站id - NewrefRightStationId uint32 `protobuf:"varint,9,opt,name=newrefRightStationId,proto3" json:"newrefRightStationId,omitempty"` //右边关联的集中站id + RefLeftStationId uint32 `protobuf:"varint,8,opt,name=refLeftStationId,proto3" json:"refLeftStationId,omitempty"` //左边关联的集中站id + RefRightStationId uint32 `protobuf:"varint,9,opt,name=refRightStationId,proto3" json:"refRightStationId,omitempty"` //右边关联的集中站id } func (x *ConcentrationDividingLine) Reset() { @@ -1714,16 +1707,16 @@ func (x *ConcentrationDividingLine) GetPoints() []*Point { return nil } -func (x *ConcentrationDividingLine) GetRefLeftStationId() string { +func (x *ConcentrationDividingLine) GetOldrefLeftStationId() string { if x != nil { - return x.RefLeftStationId + return x.OldrefLeftStationId } return "" } -func (x *ConcentrationDividingLine) GetRefRightStationId() string { +func (x *ConcentrationDividingLine) GetOldrefRightStationId() string { if x != nil { - return x.RefRightStationId + return x.OldrefRightStationId } return "" } @@ -1742,16 +1735,16 @@ func (x *ConcentrationDividingLine) GetIsOtherLineConcentrationDividingLine() bo return false } -func (x *ConcentrationDividingLine) GetNewrefLeftStationId() uint32 { +func (x *ConcentrationDividingLine) GetRefLeftStationId() uint32 { if x != nil { - return x.NewrefLeftStationId + return x.RefLeftStationId } return 0 } -func (x *ConcentrationDividingLine) GetNewrefRightStationId() uint32 { +func (x *ConcentrationDividingLine) GetRefRightStationId() uint32 { if x != nil { - return x.NewrefRightStationId + return x.RefRightStationId } return 0 } @@ -1824,12 +1817,12 @@ type Platform struct { // int32 refStationIndex = 6; //关联车站索引 // repeated string centralizedStations = 7; // 集中站列表 // repeated RelatedRef platformRef = 8; //站台关联的车站和物理区段 - RefStationId string `protobuf:"bytes,9,opt,name=refStationId,proto3" json:"refStationId,omitempty"` //关联的车站的id - RefSectionId string `protobuf:"bytes,10,opt,name=refSectionId,proto3" json:"refSectionId,omitempty"` //关联的物理区段id + OldrefStationId string `protobuf:"bytes,9,opt,name=oldrefStationId,proto3" json:"oldrefStationId,omitempty"` //关联的车站的id + OldrefSectionId string `protobuf:"bytes,10,opt,name=oldrefSectionId,proto3" json:"oldrefSectionId,omitempty"` //关联的物理区段id RefEsbRelayCode string `protobuf:"bytes,11,opt,name=refEsbRelayCode,proto3" json:"refEsbRelayCode,omitempty"` //关联的紧急停车继电器的编号 Type Platform_TypeOfPlatform `protobuf:"varint,12,opt,name=type,proto3,enum=graphicData.Platform_TypeOfPlatform" json:"type,omitempty"` //站台的上下行 - NewrefStationId uint32 `protobuf:"varint,13,opt,name=newrefStationId,proto3" json:"newrefStationId,omitempty"` //关联的车站的id - NewrefSectionId uint32 `protobuf:"varint,14,opt,name=newrefSectionId,proto3" json:"newrefSectionId,omitempty"` //关联的物理区段id + RefStationId uint32 `protobuf:"varint,13,opt,name=refStationId,proto3" json:"refStationId,omitempty"` //关联的车站的id + RefSectionId uint32 `protobuf:"varint,14,opt,name=refSectionId,proto3" json:"refSectionId,omitempty"` //关联的物理区段id } func (x *Platform) Reset() { @@ -1878,16 +1871,16 @@ func (x *Platform) GetCode() string { return "" } -func (x *Platform) GetRefStationId() string { +func (x *Platform) GetOldrefStationId() string { if x != nil { - return x.RefStationId + return x.OldrefStationId } return "" } -func (x *Platform) GetRefSectionId() string { +func (x *Platform) GetOldrefSectionId() string { if x != nil { - return x.RefSectionId + return x.OldrefSectionId } return "" } @@ -1906,16 +1899,16 @@ func (x *Platform) GetType() Platform_TypeOfPlatform { return Platform_Unknown } -func (x *Platform) GetNewrefStationId() uint32 { +func (x *Platform) GetRefStationId() uint32 { if x != nil { - return x.NewrefStationId + return x.RefStationId } return 0 } -func (x *Platform) GetNewrefSectionId() uint32 { +func (x *Platform) GetRefSectionId() uint32 { if x != nil { - return x.NewrefSectionId + return x.RefSectionId } return 0 } @@ -1928,9 +1921,9 @@ type ScreenDoor struct { Common *CommonInfo `protobuf:"bytes,1,opt,name=common,proto3" json:"common,omitempty"` Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` // int32 sonDoorAmount = 3; //子屏蔽门的数量 - RefPlatformId string `protobuf:"bytes,4,opt,name=refPlatformId,proto3" json:"refPlatformId,omitempty"` //关联的站台 + OldrefPlatformId string `protobuf:"bytes,4,opt,name=oldrefPlatformId,proto3" json:"oldrefPlatformId,omitempty"` //关联的站台 // repeated ScreenDoorGroup screenDoorGroupList = 5;//编组列表 - NewRefPlatformId uint32 `protobuf:"varint,6,opt,name=newRefPlatformId,proto3" json:"newRefPlatformId,omitempty"` //关联的站台 + RefPlatformId uint32 `protobuf:"varint,6,opt,name=refPlatformId,proto3" json:"refPlatformId,omitempty"` //关联的站台 } func (x *ScreenDoor) Reset() { @@ -1979,16 +1972,16 @@ func (x *ScreenDoor) GetCode() string { return "" } -func (x *ScreenDoor) GetRefPlatformId() string { +func (x *ScreenDoor) GetOldrefPlatformId() string { if x != nil { - return x.RefPlatformId + return x.OldrefPlatformId } return "" } -func (x *ScreenDoor) GetNewRefPlatformId() uint32 { +func (x *ScreenDoor) GetRefPlatformId() uint32 { if x != nil { - return x.NewRefPlatformId + return x.RefPlatformId } return 0 } @@ -2126,9 +2119,9 @@ type Station struct { RefIbpMapCode string `protobuf:"bytes,8,opt,name=refIbpMapCode,proto3" json:"refIbpMapCode,omitempty"` // 关联IBP地图Code StationName string `protobuf:"bytes,9,opt,name=stationName,proto3" json:"stationName,omitempty"` //车站名 // string stationNameAcronym = 10; // 车站名缩写 - Depots bool `protobuf:"varint,11,opt,name=depots,proto3" json:"depots,omitempty"` //是否车辆段 - ManageStations []string `protobuf:"bytes,12,rep,name=manageStations,proto3" json:"manageStations,omitempty"` // 如果是集中站——管理的车站-id - NewmanageStations []uint32 `protobuf:"varint,13,rep,packed,name=newmanageStations,proto3" json:"newmanageStations,omitempty"` // 如果是集中站——管理的车站-id + Depots bool `protobuf:"varint,11,opt,name=depots,proto3" json:"depots,omitempty"` //是否车辆段 + OldmanageStations []string `protobuf:"bytes,12,rep,name=oldmanageStations,proto3" json:"oldmanageStations,omitempty"` // 如果是集中站——管理的车站-id + ManageStations []uint32 `protobuf:"varint,13,rep,packed,name=manageStations,proto3" json:"manageStations,omitempty"` // 如果是集中站——管理的车站-id } func (x *Station) Reset() { @@ -2212,16 +2205,16 @@ func (x *Station) GetDepots() bool { return false } -func (x *Station) GetManageStations() []string { +func (x *Station) GetOldmanageStations() []string { if x != nil { - return x.ManageStations + return x.OldmanageStations } return nil } -func (x *Station) GetNewmanageStations() []uint32 { +func (x *Station) GetManageStations() []uint32 { if x != nil { - return x.NewmanageStations + return x.ManageStations } return nil } @@ -2301,8 +2294,8 @@ type AxleCounting struct { // int32 index = 5; //计轴的索引编号 // bool invent = 6; //是否虚拟计轴--一般是最末端 Type AxleCounting_TypeDetectionPoint `protobuf:"varint,7,opt,name=type,proto3,enum=graphicData.AxleCounting_TypeDetectionPoint" json:"type,omitempty"` //检测点的类型:计轴、区段边界 - CentralizedStations []string `protobuf:"bytes,8,rep,name=centralizedStations,proto3" json:"centralizedStations,omitempty"` // 集中站Id列表 - NewcentralizedStations []uint32 `protobuf:"varint,9,rep,packed,name=newcentralizedStations,proto3" json:"newcentralizedStations,omitempty"` // 集中站Id列表 + OldcentralizedStations []string `protobuf:"bytes,8,rep,name=oldcentralizedStations,proto3" json:"oldcentralizedStations,omitempty"` // 集中站Id列表 + CentralizedStations []uint32 `protobuf:"varint,9,rep,packed,name=centralizedStations,proto3" json:"centralizedStations,omitempty"` // 集中站Id列表 } func (x *AxleCounting) Reset() { @@ -2372,16 +2365,16 @@ func (x *AxleCounting) GetType() AxleCounting_TypeDetectionPoint { return AxleCounting_AxleCounting } -func (x *AxleCounting) GetCentralizedStations() []string { +func (x *AxleCounting) GetOldcentralizedStations() []string { if x != nil { - return x.CentralizedStations + return x.OldcentralizedStations } return nil } -func (x *AxleCounting) GetNewcentralizedStations() []uint32 { +func (x *AxleCounting) GetCentralizedStations() []uint32 { if x != nil { - return x.NewcentralizedStations + return x.CentralizedStations } return nil } @@ -2391,10 +2384,10 @@ type GenerateAxleCountingConfig struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - BbConnect []string `protobuf:"bytes,1,rep,name=bbConnect,proto3" json:"bbConnect,omitempty"` //需要在道岔bb连接处生成计轴的道岔id(填一个就行) - NoGenerateGroup []string `protobuf:"bytes,2,rep,name=noGenerateGroup,proto3" json:"noGenerateGroup,omitempty"` //指定的道岔组不生成计轴 - NewbbConnect []uint32 `protobuf:"varint,3,rep,packed,name=newbbConnect,proto3" json:"newbbConnect,omitempty"` //需要在道岔bb连接处生成计轴的道岔id(填一个就行) - NewnoGenerateGroup []uint32 `protobuf:"varint,4,rep,packed,name=newnoGenerateGroup,proto3" json:"newnoGenerateGroup,omitempty"` //指定的道岔组不生成计轴 + OldbbConnect []string `protobuf:"bytes,1,rep,name=oldbbConnect,proto3" json:"oldbbConnect,omitempty"` //需要在道岔bb连接处生成计轴的道岔id(填一个就行) + OldnoGenerateGroup []string `protobuf:"bytes,2,rep,name=oldnoGenerateGroup,proto3" json:"oldnoGenerateGroup,omitempty"` //指定的道岔组不生成计轴 + BbConnect []uint32 `protobuf:"varint,3,rep,packed,name=bbConnect,proto3" json:"bbConnect,omitempty"` //需要在道岔bb连接处生成计轴的道岔id(填一个就行) + NoGenerateGroup []uint32 `protobuf:"varint,4,rep,packed,name=noGenerateGroup,proto3" json:"noGenerateGroup,omitempty"` //指定的道岔组不生成计轴 } func (x *GenerateAxleCountingConfig) Reset() { @@ -2429,34 +2422,34 @@ func (*GenerateAxleCountingConfig) Descriptor() ([]byte, []int) { return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{16} } -func (x *GenerateAxleCountingConfig) GetBbConnect() []string { +func (x *GenerateAxleCountingConfig) GetOldbbConnect() []string { + if x != nil { + return x.OldbbConnect + } + return nil +} + +func (x *GenerateAxleCountingConfig) GetOldnoGenerateGroup() []string { + if x != nil { + return x.OldnoGenerateGroup + } + return nil +} + +func (x *GenerateAxleCountingConfig) GetBbConnect() []uint32 { if x != nil { return x.BbConnect } return nil } -func (x *GenerateAxleCountingConfig) GetNoGenerateGroup() []string { +func (x *GenerateAxleCountingConfig) GetNoGenerateGroup() []uint32 { if x != nil { return x.NoGenerateGroup } return nil } -func (x *GenerateAxleCountingConfig) GetNewbbConnect() []uint32 { - if x != nil { - return x.NewbbConnect - } - return nil -} - -func (x *GenerateAxleCountingConfig) GetNewnoGenerateGroup() []uint32 { - if x != nil { - return x.NewnoGenerateGroup - } - return nil -} - type Turnout struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -2473,15 +2466,15 @@ type Turnout struct { // KilometerSystem kilometerSystem = 12; // 道岔公里标 KilometerSystem []*KilometerSystem `protobuf:"bytes,13,rep,name=kilometerSystem,proto3" json:"kilometerSystem,omitempty"` // 道岔公里标 // int32 index = 14; //索引 - PaTrackSectionId string `protobuf:"bytes,15,opt,name=paTrackSectionId,proto3" json:"paTrackSectionId,omitempty"` // A端轨道区段id - PbTrackSectionId string `protobuf:"bytes,16,opt,name=pbTrackSectionId,proto3" json:"pbTrackSectionId,omitempty"` // B端轨道区段id - PcTrackSectionId string `protobuf:"bytes,17,opt,name=pcTrackSectionId,proto3" json:"pcTrackSectionId,omitempty"` // C端轨道区段id + OldpaTrackSectionId string `protobuf:"bytes,15,opt,name=oldpaTrackSectionId,proto3" json:"oldpaTrackSectionId,omitempty"` // A端轨道区段id + OldpbTrackSectionId string `protobuf:"bytes,16,opt,name=oldpbTrackSectionId,proto3" json:"oldpbTrackSectionId,omitempty"` // B端轨道区段id + OldpcTrackSectionId string `protobuf:"bytes,17,opt,name=oldpcTrackSectionId,proto3" json:"oldpcTrackSectionId,omitempty"` // C端轨道区段id SwitchMachineType Turnout_SwitchMachineType `protobuf:"varint,18,opt,name=switchMachineType,proto3,enum=graphicData.Turnout_SwitchMachineType" json:"switchMachineType,omitempty"` // 转辙机类型 - CentralizedStations []string `protobuf:"bytes,19,rep,name=centralizedStations,proto3" json:"centralizedStations,omitempty"` // 集中站Id列表 - NewcentralizedStations []uint32 `protobuf:"varint,20,rep,packed,name=newcentralizedStations,proto3" json:"newcentralizedStations,omitempty"` // 集中站Id列表 - NewpaTrackSectionId uint32 `protobuf:"varint,21,opt,name=newpaTrackSectionId,proto3" json:"newpaTrackSectionId,omitempty"` // A端轨道区段id - NewpbTrackSectionId uint32 `protobuf:"varint,22,opt,name=newpbTrackSectionId,proto3" json:"newpbTrackSectionId,omitempty"` // B端轨道区段id - NewpcTrackSectionId uint32 `protobuf:"varint,23,opt,name=newpcTrackSectionId,proto3" json:"newpcTrackSectionId,omitempty"` // C端轨道区段id + OldcentralizedStations []string `protobuf:"bytes,19,rep,name=oldcentralizedStations,proto3" json:"oldcentralizedStations,omitempty"` // 集中站Id列表 + CentralizedStations []uint32 `protobuf:"varint,20,rep,packed,name=centralizedStations,proto3" json:"centralizedStations,omitempty"` // 集中站Id列表 + PaTrackSectionId uint32 `protobuf:"varint,21,opt,name=paTrackSectionId,proto3" json:"paTrackSectionId,omitempty"` // A端轨道区段id + PbTrackSectionId uint32 `protobuf:"varint,22,opt,name=pbTrackSectionId,proto3" json:"pbTrackSectionId,omitempty"` // B端轨道区段id + PcTrackSectionId uint32 `protobuf:"varint,23,opt,name=pcTrackSectionId,proto3" json:"pcTrackSectionId,omitempty"` // C端轨道区段id } func (x *Turnout) Reset() { @@ -2579,23 +2572,23 @@ func (x *Turnout) GetKilometerSystem() []*KilometerSystem { return nil } -func (x *Turnout) GetPaTrackSectionId() string { +func (x *Turnout) GetOldpaTrackSectionId() string { if x != nil { - return x.PaTrackSectionId + return x.OldpaTrackSectionId } return "" } -func (x *Turnout) GetPbTrackSectionId() string { +func (x *Turnout) GetOldpbTrackSectionId() string { if x != nil { - return x.PbTrackSectionId + return x.OldpbTrackSectionId } return "" } -func (x *Turnout) GetPcTrackSectionId() string { +func (x *Turnout) GetOldpcTrackSectionId() string { if x != nil { - return x.PcTrackSectionId + return x.OldpcTrackSectionId } return "" } @@ -2607,37 +2600,37 @@ func (x *Turnout) GetSwitchMachineType() Turnout_SwitchMachineType { return Turnout_Unknown } -func (x *Turnout) GetCentralizedStations() []string { +func (x *Turnout) GetOldcentralizedStations() []string { + if x != nil { + return x.OldcentralizedStations + } + return nil +} + +func (x *Turnout) GetCentralizedStations() []uint32 { if x != nil { return x.CentralizedStations } return nil } -func (x *Turnout) GetNewcentralizedStations() []uint32 { +func (x *Turnout) GetPaTrackSectionId() uint32 { if x != nil { - return x.NewcentralizedStations - } - return nil -} - -func (x *Turnout) GetNewpaTrackSectionId() uint32 { - if x != nil { - return x.NewpaTrackSectionId + return x.PaTrackSectionId } return 0 } -func (x *Turnout) GetNewpbTrackSectionId() uint32 { +func (x *Turnout) GetPbTrackSectionId() uint32 { if x != nil { - return x.NewpbTrackSectionId + return x.PbTrackSectionId } return 0 } -func (x *Turnout) GetNewpcTrackSectionId() uint32 { +func (x *Turnout) GetPcTrackSectionId() uint32 { if x != nil { - return x.NewpcTrackSectionId + return x.PcTrackSectionId } return 0 } @@ -2717,13 +2710,13 @@ type Signal struct { // string coordinateSystem = 5; KilometerSystem *KilometerSystem `protobuf:"bytes,6,opt,name=kilometerSystem,proto3" json:"kilometerSystem,omitempty"` // int32 index = 7; //索引 - RefDev *RelatedRef `protobuf:"bytes,8,opt,name=refDev,proto3" json:"refDev,omitempty"` //关联设备(区段/道岔) - CentralizedStations []string `protobuf:"bytes,9,rep,name=centralizedStations,proto3" json:"centralizedStations,omitempty"` // 集中站Id列表 + RefDev *RelatedRef `protobuf:"bytes,8,opt,name=refDev,proto3" json:"refDev,omitempty"` //关联设备(区段/道岔) + OldcentralizedStations []string `protobuf:"bytes,9,rep,name=oldcentralizedStations,proto3" json:"oldcentralizedStations,omitempty"` // 集中站Id列表 // 信号机模型类型 Mt Signal_Model `protobuf:"varint,10,opt,name=mt,proto3,enum=graphicData.Signal_Model" json:"mt,omitempty"` // string belongStation = 11; // 所属车站(缩写) - Direction Direction `protobuf:"varint,12,opt,name=direction,proto3,enum=graphicData.Direction" json:"direction,omitempty"` // 上下行 - NewcentralizedStations []uint32 `protobuf:"varint,13,rep,packed,name=newcentralizedStations,proto3" json:"newcentralizedStations,omitempty"` // 集中站Id列表 + Direction Direction `protobuf:"varint,12,opt,name=direction,proto3,enum=graphicData.Direction" json:"direction,omitempty"` // 上下行 + CentralizedStations []uint32 `protobuf:"varint,13,rep,packed,name=centralizedStations,proto3" json:"centralizedStations,omitempty"` // 集中站Id列表 } func (x *Signal) Reset() { @@ -2793,9 +2786,9 @@ func (x *Signal) GetRefDev() *RelatedRef { return nil } -func (x *Signal) GetCentralizedStations() []string { +func (x *Signal) GetOldcentralizedStations() []string { if x != nil { - return x.CentralizedStations + return x.OldcentralizedStations } return nil } @@ -2814,9 +2807,9 @@ func (x *Signal) GetDirection() Direction { return Direction_UP } -func (x *Signal) GetNewcentralizedStations() []uint32 { +func (x *Signal) GetCentralizedStations() []uint32 { if x != nil { - return x.NewcentralizedStations + return x.CentralizedStations } return nil } @@ -2827,24 +2820,24 @@ type Section struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Common *CommonInfo `protobuf:"bytes,1,opt,name=common,proto3" json:"common,omitempty"` - Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` // 编号 - Points []*Point `protobuf:"bytes,3,rep,name=points,proto3" json:"points,omitempty"` // 点列表 - PaRef *RelatedRef `protobuf:"bytes,4,opt,name=paRef,proto3" json:"paRef,omitempty"` // 区段A端关联的设备(非岔区)(后端不关注) - PbRef *RelatedRef `protobuf:"bytes,5,opt,name=pbRef,proto3" json:"pbRef,omitempty"` // 区段B端关联的设备(非岔区)(后端不关注) - SectionType Section_SectionType `protobuf:"varint,6,opt,name=sectionType,proto3,enum=graphicData.Section_SectionType" json:"sectionType,omitempty"` // 区段类型 - AxleCountings []string `protobuf:"bytes,7,rep,name=axleCountings,proto3" json:"axleCountings,omitempty"` // 区段对应的计轴 + Common *CommonInfo `protobuf:"bytes,1,opt,name=common,proto3" json:"common,omitempty"` + Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` // 编号 + Points []*Point `protobuf:"bytes,3,rep,name=points,proto3" json:"points,omitempty"` // 点列表 + PaRef *RelatedRef `protobuf:"bytes,4,opt,name=paRef,proto3" json:"paRef,omitempty"` // 区段A端关联的设备(非岔区)(后端不关注) + PbRef *RelatedRef `protobuf:"bytes,5,opt,name=pbRef,proto3" json:"pbRef,omitempty"` // 区段B端关联的设备(非岔区)(后端不关注) + SectionType Section_SectionType `protobuf:"varint,6,opt,name=sectionType,proto3,enum=graphicData.Section_SectionType" json:"sectionType,omitempty"` // 区段类型 + OldaxleCountings []string `protobuf:"bytes,7,rep,name=oldaxleCountings,proto3" json:"oldaxleCountings,omitempty"` // 区段对应的计轴 // int32 index = 8; // 索引 - TrackSectionId string `protobuf:"bytes,9,opt,name=trackSectionId,proto3" json:"trackSectionId,omitempty"` // 下属轨道区段id + OldtrackSectionId string `protobuf:"bytes,9,opt,name=oldtrackSectionId,proto3" json:"oldtrackSectionId,omitempty"` // 下属轨道区段id IsCurve bool `protobuf:"varint,10,opt,name=isCurve,proto3" json:"isCurve,omitempty"` // 是否曲线 SegmentsCount int32 `protobuf:"varint,12,opt,name=segmentsCount,proto3" json:"segmentsCount,omitempty"` // 曲线分段数 - CentralizedStations []string `protobuf:"bytes,13,rep,name=centralizedStations,proto3" json:"centralizedStations,omitempty"` // 集中站Id列表 + OldcentralizedStations []string `protobuf:"bytes,13,rep,name=oldcentralizedStations,proto3" json:"oldcentralizedStations,omitempty"` // 集中站Id列表 NormalRunningDirection Section_RunningDirection `protobuf:"varint,14,opt,name=normalRunningDirection,proto3,enum=graphicData.Section_RunningDirection" json:"normalRunningDirection,omitempty"` //常规运行方向 IsTurnBackZone bool `protobuf:"varint,15,opt,name=isTurnBackZone,proto3" json:"isTurnBackZone,omitempty"` // 是否为折返区域 Direction Direction `protobuf:"varint,16,opt,name=direction,proto3,enum=graphicData.Direction" json:"direction,omitempty"` // 上下行 - NewaxleCountings []uint32 `protobuf:"varint,17,rep,packed,name=newaxleCountings,proto3" json:"newaxleCountings,omitempty"` // 区段对应的计轴 - NewtrackSectionId uint32 `protobuf:"varint,18,opt,name=newtrackSectionId,proto3" json:"newtrackSectionId,omitempty"` // 下属轨道区段id - NewcentralizedStations []uint32 `protobuf:"varint,19,rep,packed,name=newcentralizedStations,proto3" json:"newcentralizedStations,omitempty"` // 集中站Id列表 + AxleCountings []uint32 `protobuf:"varint,17,rep,packed,name=axleCountings,proto3" json:"axleCountings,omitempty"` // 区段对应的计轴 + TrackSectionId uint32 `protobuf:"varint,18,opt,name=trackSectionId,proto3" json:"trackSectionId,omitempty"` // 下属轨道区段id + CentralizedStations []uint32 `protobuf:"varint,19,rep,packed,name=centralizedStations,proto3" json:"centralizedStations,omitempty"` // 集中站Id列表 } func (x *Section) Reset() { @@ -2921,16 +2914,16 @@ func (x *Section) GetSectionType() Section_SectionType { return Section_Physical } -func (x *Section) GetAxleCountings() []string { +func (x *Section) GetOldaxleCountings() []string { if x != nil { - return x.AxleCountings + return x.OldaxleCountings } return nil } -func (x *Section) GetTrackSectionId() string { +func (x *Section) GetOldtrackSectionId() string { if x != nil { - return x.TrackSectionId + return x.OldtrackSectionId } return "" } @@ -2949,9 +2942,9 @@ func (x *Section) GetSegmentsCount() int32 { return 0 } -func (x *Section) GetCentralizedStations() []string { +func (x *Section) GetOldcentralizedStations() []string { if x != nil { - return x.CentralizedStations + return x.OldcentralizedStations } return nil } @@ -2977,23 +2970,23 @@ func (x *Section) GetDirection() Direction { return Direction_UP } -func (x *Section) GetNewaxleCountings() []uint32 { +func (x *Section) GetAxleCountings() []uint32 { if x != nil { - return x.NewaxleCountings + return x.AxleCountings } return nil } -func (x *Section) GetNewtrackSectionId() uint32 { +func (x *Section) GetTrackSectionId() uint32 { if x != nil { - return x.NewtrackSectionId + return x.TrackSectionId } return 0 } -func (x *Section) GetNewcentralizedStations() []uint32 { +func (x *Section) GetCentralizedStations() []uint32 { if x != nil { - return x.NewcentralizedStations + return x.CentralizedStations } return nil } @@ -3005,9 +2998,9 @@ type RelatedRef struct { unknownFields protoimpl.UnknownFields DeviceType RelatedRef_DeviceType `protobuf:"varint,1,opt,name=deviceType,proto3,enum=graphicData.RelatedRef_DeviceType" json:"deviceType,omitempty"` //关联的设备类型 - Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` //关联的设备ID + Oldid string `protobuf:"bytes,2,opt,name=oldid,proto3" json:"oldid,omitempty"` //关联的设备ID DevicePort RelatedRef_DevicePort `protobuf:"varint,3,opt,name=devicePort,proto3,enum=graphicData.RelatedRef_DevicePort" json:"devicePort,omitempty"` //关联的设备端口 - Newid uint32 `protobuf:"varint,4,opt,name=newid,proto3" json:"newid,omitempty"` + Id uint32 `protobuf:"varint,4,opt,name=id,proto3" json:"id,omitempty"` } func (x *RelatedRef) Reset() { @@ -3049,9 +3042,9 @@ func (x *RelatedRef) GetDeviceType() RelatedRef_DeviceType { return RelatedRef_Section } -func (x *RelatedRef) GetId() string { +func (x *RelatedRef) GetOldid() string { if x != nil { - return x.Id + return x.Oldid } return "" } @@ -3063,9 +3056,9 @@ func (x *RelatedRef) GetDevicePort() RelatedRef_DevicePort { return RelatedRef_A } -func (x *RelatedRef) GetNewid() uint32 { +func (x *RelatedRef) GetId() uint32 { if x != nil { - return x.Newid + return x.Id } return 0 } @@ -3076,8 +3069,9 @@ type TurnoutPosRef struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` //道岔的ID + Oldid string `protobuf:"bytes,1,opt,name=oldid,proto3" json:"oldid,omitempty"` //道岔的ID Position int32 `protobuf:"varint,2,opt,name=position,proto3" json:"position,omitempty"` //道岔的正反为,0是定位,1是反位 + Id uint32 `protobuf:"varint,3,opt,name=id,proto3" json:"id,omitempty"` } func (x *TurnoutPosRef) Reset() { @@ -3112,9 +3106,9 @@ func (*TurnoutPosRef) Descriptor() ([]byte, []int) { return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{22} } -func (x *TurnoutPosRef) GetId() string { +func (x *TurnoutPosRef) GetOldid() string { if x != nil { - return x.Id + return x.Oldid } return "" } @@ -3126,6 +3120,13 @@ func (x *TurnoutPosRef) GetPosition() int32 { return 0 } +func (x *TurnoutPosRef) GetId() uint32 { + if x != nil { + return x.Id + } + return 0 +} + type Separator struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -3200,10 +3201,10 @@ type Transponder struct { // int32 index = 4; // 索引编号 KilometerSystem *KilometerSystem `protobuf:"bytes,5,opt,name=kilometerSystem,proto3" json:"kilometerSystem,omitempty"` //公里标 TransponderRef *RelatedRef `protobuf:"bytes,6,opt,name=TransponderRef,proto3" json:"TransponderRef,omitempty"` //关联关系 - CentralizedStations []string `protobuf:"bytes,7,rep,name=centralizedStations,proto3" json:"centralizedStations,omitempty"` // 集中站Id列表 + OldcentralizedStations []string `protobuf:"bytes,7,rep,name=oldcentralizedStations,proto3" json:"oldcentralizedStations,omitempty"` // 集中站Id列表 FixedTelegram []byte `protobuf:"bytes,8,opt,name=fixedTelegram,proto3" json:"fixedTelegram,omitempty"` //无源应答器固定报文 Type Transponder_TransponderTypeEnum `protobuf:"varint,9,opt,name=type,proto3,enum=graphicData.Transponder_TransponderTypeEnum" json:"type,omitempty"` //应答器类型 - NewcentralizedStations []uint32 `protobuf:"varint,10,rep,packed,name=newcentralizedStations,proto3" json:"newcentralizedStations,omitempty"` // 集中站Id列表 + CentralizedStations []uint32 `protobuf:"varint,10,rep,packed,name=centralizedStations,proto3" json:"centralizedStations,omitempty"` // 集中站Id列表 } func (x *Transponder) Reset() { @@ -3266,9 +3267,9 @@ func (x *Transponder) GetTransponderRef() *RelatedRef { return nil } -func (x *Transponder) GetCentralizedStations() []string { +func (x *Transponder) GetOldcentralizedStations() []string { if x != nil { - return x.CentralizedStations + return x.OldcentralizedStations } return nil } @@ -3287,9 +3288,9 @@ func (x *Transponder) GetType() Transponder_TransponderTypeEnum { return Transponder_FB } -func (x *Transponder) GetNewcentralizedStations() []uint32 { +func (x *Transponder) GetCentralizedStations() []uint32 { if x != nil { - return x.NewcentralizedStations + return x.CentralizedStations } return nil } @@ -3300,8 +3301,8 @@ type SimpleRef struct { unknownFields protoimpl.UnknownFields DeviceType SimpleRef_DeviceType `protobuf:"varint,1,opt,name=deviceType,proto3,enum=graphicData.SimpleRef_DeviceType" json:"deviceType,omitempty"` - Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` - Newid uint32 `protobuf:"varint,3,opt,name=newid,proto3" json:"newid,omitempty"` + Oldid string `protobuf:"bytes,2,opt,name=oldid,proto3" json:"oldid,omitempty"` + Id uint32 `protobuf:"varint,3,opt,name=id,proto3" json:"id,omitempty"` } func (x *SimpleRef) Reset() { @@ -3343,16 +3344,16 @@ func (x *SimpleRef) GetDeviceType() SimpleRef_DeviceType { return SimpleRef_Turnout } -func (x *SimpleRef) GetId() string { +func (x *SimpleRef) GetOldid() string { if x != nil { - return x.Id + return x.Oldid } return "" } -func (x *SimpleRef) GetNewid() uint32 { +func (x *SimpleRef) GetId() uint32 { if x != nil { - return x.Newid + return x.Id } return 0 } @@ -3552,14 +3553,14 @@ type LogicSection struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Common *CommonInfo `protobuf:"bytes,1,opt,name=common,proto3" json:"common,omitempty"` - Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` // 名称 - Points []*Point `protobuf:"bytes,3,rep,name=points,proto3" json:"points,omitempty"` - AxleSectionId string `protobuf:"bytes,4,opt,name=axleSectionId,proto3" json:"axleSectionId,omitempty"` // 关联的计轴区段Id + Common *CommonInfo `protobuf:"bytes,1,opt,name=common,proto3" json:"common,omitempty"` + Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` // 名称 + Points []*Point `protobuf:"bytes,3,rep,name=points,proto3" json:"points,omitempty"` + OldaxleSectionId string `protobuf:"bytes,4,opt,name=oldaxleSectionId,proto3" json:"oldaxleSectionId,omitempty"` // 关联的计轴区段Id // int32 index = 5; // 索引编号 - TurnoutId string `protobuf:"bytes,6,opt,name=turnoutId,proto3" json:"turnoutId,omitempty"` // 关联的岔芯对应的道岔id,此时该逻辑区段为该道岔C端关联的轨道link - NewaxleSectionId uint32 `protobuf:"varint,7,opt,name=newaxleSectionId,proto3" json:"newaxleSectionId,omitempty"` // 关联的计轴区段Id - NewturnoutId uint32 `protobuf:"varint,8,opt,name=newturnoutId,proto3" json:"newturnoutId,omitempty"` // 关联的岔芯对应的道岔id,此时该逻辑区段为该道岔C端关联的轨道link + OldturnoutId string `protobuf:"bytes,6,opt,name=oldturnoutId,proto3" json:"oldturnoutId,omitempty"` // 关联的岔芯对应的道岔id,此时该逻辑区段为该道岔C端关联的轨道link + AxleSectionId uint32 `protobuf:"varint,7,opt,name=axleSectionId,proto3" json:"axleSectionId,omitempty"` // 关联的计轴区段Id + TurnoutId uint32 `protobuf:"varint,8,opt,name=turnoutId,proto3" json:"turnoutId,omitempty"` // 关联的岔芯对应的道岔id,此时该逻辑区段为该道岔C端关联的轨道link } func (x *LogicSection) Reset() { @@ -3615,30 +3616,30 @@ func (x *LogicSection) GetPoints() []*Point { return nil } -func (x *LogicSection) GetAxleSectionId() string { +func (x *LogicSection) GetOldaxleSectionId() string { + if x != nil { + return x.OldaxleSectionId + } + return "" +} + +func (x *LogicSection) GetOldturnoutId() string { + if x != nil { + return x.OldturnoutId + } + return "" +} + +func (x *LogicSection) GetAxleSectionId() uint32 { if x != nil { return x.AxleSectionId } - return "" -} - -func (x *LogicSection) GetTurnoutId() string { - if x != nil { - return x.TurnoutId - } - return "" -} - -func (x *LogicSection) GetNewaxleSectionId() uint32 { - if x != nil { - return x.NewaxleSectionId - } return 0 } -func (x *LogicSection) GetNewturnoutId() uint32 { +func (x *LogicSection) GetTurnoutId() uint32 { if x != nil { - return x.NewturnoutId + return x.TurnoutId } return 0 } @@ -3652,13 +3653,13 @@ type TrackSection struct { Points []*Point `protobuf:"bytes,2,rep,name=points,proto3" json:"points,omitempty"` Code string `protobuf:"bytes,3,opt,name=code,proto3" json:"code,omitempty"` //名称 // int32 index = 4; //索引 - Type TrackSection_TrackSectionType `protobuf:"varint,5,opt,name=type,proto3,enum=graphicData.TrackSection_TrackSectionType" json:"type,omitempty"` //类型 - DestinationCode string `protobuf:"bytes,6,opt,name=destinationCode,proto3" json:"destinationCode,omitempty"` //目的地码 - TrackLogicSection []string `protobuf:"bytes,7,rep,name=trackLogicSection,proto3" json:"trackLogicSection,omitempty"` //下属的逻辑区段id(非岔区) + Type TrackSection_TrackSectionType `protobuf:"varint,5,opt,name=type,proto3,enum=graphicData.TrackSection_TrackSectionType" json:"type,omitempty"` //类型 + DestinationCode string `protobuf:"bytes,6,opt,name=destinationCode,proto3" json:"destinationCode,omitempty"` //目的地码 + OldtrackLogicSection []string `protobuf:"bytes,7,rep,name=oldtrackLogicSection,proto3" json:"oldtrackLogicSection,omitempty"` //下属的逻辑区段id(非岔区) // //关联的物理设备id(物理区段/道岔)由另一端(物理区段/道岔处理) - IsCurve bool `protobuf:"varint,8,opt,name=isCurve,proto3" json:"isCurve,omitempty"` // 是否曲线 - SegmentsCount int32 `protobuf:"varint,9,opt,name=segmentsCount,proto3" json:"segmentsCount,omitempty"` // 曲线分段数 - NewtrackLogicSection []uint32 `protobuf:"varint,10,rep,packed,name=newtrackLogicSection,proto3" json:"newtrackLogicSection,omitempty"` //下属的逻辑区段id(非岔区) + IsCurve bool `protobuf:"varint,8,opt,name=isCurve,proto3" json:"isCurve,omitempty"` // 是否曲线 + SegmentsCount int32 `protobuf:"varint,9,opt,name=segmentsCount,proto3" json:"segmentsCount,omitempty"` // 曲线分段数 + TrackLogicSection []uint32 `protobuf:"varint,10,rep,packed,name=trackLogicSection,proto3" json:"trackLogicSection,omitempty"` //下属的逻辑区段id(非岔区) } func (x *TrackSection) Reset() { @@ -3728,9 +3729,9 @@ func (x *TrackSection) GetDestinationCode() string { return "" } -func (x *TrackSection) GetTrackLogicSection() []string { +func (x *TrackSection) GetOldtrackLogicSection() []string { if x != nil { - return x.TrackLogicSection + return x.OldtrackLogicSection } return nil } @@ -3749,9 +3750,9 @@ func (x *TrackSection) GetSegmentsCount() int32 { return 0 } -func (x *TrackSection) GetNewtrackLogicSection() []uint32 { +func (x *TrackSection) GetTrackLogicSection() []uint32 { if x != nil { - return x.NewtrackLogicSection + return x.TrackLogicSection } return nil } @@ -3925,10 +3926,10 @@ type SpksSwitch struct { Flip bool `protobuf:"varint,3,opt,name=flip,proto3" json:"flip,omitempty"` // 是否翻转(前端显示) // int32 index = 4; //索引 // int32 refStand = 5; //关联站台索引 - RefSections []string `protobuf:"bytes,6,rep,name=refSections,proto3" json:"refSections,omitempty"` // 关联物理区段id - RefStand string `protobuf:"bytes,7,opt,name=refStand,proto3" json:"refStand,omitempty"` // 关联站台 - NewrefSections []uint32 `protobuf:"varint,8,rep,packed,name=newrefSections,proto3" json:"newrefSections,omitempty"` // 关联物理区段id - NewrefStand uint32 `protobuf:"varint,9,opt,name=newrefStand,proto3" json:"newrefStand,omitempty"` // 关联站台 + OldrefSections []string `protobuf:"bytes,6,rep,name=oldrefSections,proto3" json:"oldrefSections,omitempty"` // 关联物理区段id + OldrefStand string `protobuf:"bytes,7,opt,name=oldrefStand,proto3" json:"oldrefStand,omitempty"` // 关联站台 + RefSections []uint32 `protobuf:"varint,8,rep,packed,name=refSections,proto3" json:"refSections,omitempty"` // 关联物理区段id + RefStand uint32 `protobuf:"varint,9,opt,name=refStand,proto3" json:"refStand,omitempty"` // 关联站台 } func (x *SpksSwitch) Reset() { @@ -3984,31 +3985,31 @@ func (x *SpksSwitch) GetFlip() bool { return false } -func (x *SpksSwitch) GetRefSections() []string { +func (x *SpksSwitch) GetOldrefSections() []string { + if x != nil { + return x.OldrefSections + } + return nil +} + +func (x *SpksSwitch) GetOldrefStand() string { + if x != nil { + return x.OldrefStand + } + return "" +} + +func (x *SpksSwitch) GetRefSections() []uint32 { if x != nil { return x.RefSections } return nil } -func (x *SpksSwitch) GetRefStand() string { +func (x *SpksSwitch) GetRefStand() uint32 { if x != nil { return x.RefStand } - return "" -} - -func (x *SpksSwitch) GetNewrefSections() []uint32 { - if x != nil { - return x.NewrefSections - } - return nil -} - -func (x *SpksSwitch) GetNewrefStand() uint32 { - if x != nil { - return x.NewrefStand - } return 0 } @@ -4022,8 +4023,8 @@ type EsbButton struct { Flip bool `protobuf:"varint,3,opt,name=flip,proto3" json:"flip,omitempty"` // 是否翻转(前端显示) // int32 index = 4; //索引 // int32 refStand = 5; // 关联站台索引 - RefStand string `protobuf:"bytes,6,opt,name=refStand,proto3" json:"refStand,omitempty"` // 关联站台 - NewrefStand uint32 `protobuf:"varint,7,opt,name=newrefStand,proto3" json:"newrefStand,omitempty"` // 关联站台 + OldrefStand string `protobuf:"bytes,6,opt,name=oldrefStand,proto3" json:"oldrefStand,omitempty"` // 关联站台 + RefStand uint32 `protobuf:"varint,7,opt,name=refStand,proto3" json:"refStand,omitempty"` // 关联站台 } func (x *EsbButton) Reset() { @@ -4079,16 +4080,16 @@ func (x *EsbButton) GetFlip() bool { return false } -func (x *EsbButton) GetRefStand() string { +func (x *EsbButton) GetOldrefStand() string { if x != nil { - return x.RefStand + return x.OldrefStand } return "" } -func (x *EsbButton) GetNewrefStand() uint32 { +func (x *EsbButton) GetRefStand() uint32 { if x != nil { - return x.NewrefStand + return x.RefStand } return 0 } @@ -4102,9 +4103,9 @@ type GatedBox struct { Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` Flip bool `protobuf:"varint,3,opt,name=flip,proto3" json:"flip,omitempty"` // 是否翻转(前端显示) // int32 index = 4; //索引 - RefScreenDoor string `protobuf:"bytes,5,opt,name=refScreenDoor,proto3" json:"refScreenDoor,omitempty"` // 关联屏蔽门 + OldrefScreenDoor string `protobuf:"bytes,5,opt,name=oldrefScreenDoor,proto3" json:"oldrefScreenDoor,omitempty"` // 关联屏蔽门 RefGatedBoxMapCode string `protobuf:"bytes,6,opt,name=refGatedBoxMapCode,proto3" json:"refGatedBoxMapCode,omitempty"` // 关联门控箱地图Code - NewrefScreenDoor uint32 `protobuf:"varint,7,opt,name=newrefScreenDoor,proto3" json:"newrefScreenDoor,omitempty"` // 关联屏蔽门 + RefScreenDoor uint32 `protobuf:"varint,7,opt,name=refScreenDoor,proto3" json:"refScreenDoor,omitempty"` // 关联屏蔽门 } func (x *GatedBox) Reset() { @@ -4160,9 +4161,9 @@ func (x *GatedBox) GetFlip() bool { return false } -func (x *GatedBox) GetRefScreenDoor() string { +func (x *GatedBox) GetOldrefScreenDoor() string { if x != nil { - return x.RefScreenDoor + return x.OldrefScreenDoor } return "" } @@ -4174,9 +4175,9 @@ func (x *GatedBox) GetRefGatedBoxMapCode() string { return "" } -func (x *GatedBox) GetNewrefScreenDoor() uint32 { +func (x *GatedBox) GetRefScreenDoor() uint32 { if x != nil { - return x.NewrefScreenDoor + return x.RefScreenDoor } return 0 } @@ -4388,9 +4389,9 @@ type Slope struct { Common *CommonInfo `protobuf:"bytes,1,opt,name=common,proto3" json:"common,omitempty"` Points []*Point `protobuf:"bytes,2,rep,name=points,proto3" json:"points,omitempty"` - SlopeNumber int32 `protobuf:"zigzag32,3,opt,name=slopeNumber,proto3" json:"slopeNumber,omitempty"` //坡度的值--正负代表上下坡 - RefDeviceId []string `protobuf:"bytes,4,rep,name=refDeviceId,proto3" json:"refDeviceId,omitempty"` // 坡度关联的(坡度公里标) - NewrefDeviceId []uint32 `protobuf:"varint,5,rep,packed,name=newrefDeviceId,proto3" json:"newrefDeviceId,omitempty"` // 坡度关联的(坡度公里标) + SlopeNumber int32 `protobuf:"zigzag32,3,opt,name=slopeNumber,proto3" json:"slopeNumber,omitempty"` //坡度的值--正负代表上下坡 + OldrefDeviceId []string `protobuf:"bytes,4,rep,name=oldrefDeviceId,proto3" json:"oldrefDeviceId,omitempty"` // 坡度关联的(坡度公里标) + RefDeviceId []uint32 `protobuf:"varint,5,rep,packed,name=refDeviceId,proto3" json:"refDeviceId,omitempty"` // 坡度关联的(坡度公里标) } func (x *Slope) Reset() { @@ -4446,16 +4447,16 @@ func (x *Slope) GetSlopeNumber() int32 { return 0 } -func (x *Slope) GetRefDeviceId() []string { +func (x *Slope) GetOldrefDeviceId() []string { if x != nil { - return x.RefDeviceId + return x.OldrefDeviceId } return nil } -func (x *Slope) GetNewrefDeviceId() []uint32 { +func (x *Slope) GetRefDeviceId() []uint32 { if x != nil { - return x.NewrefDeviceId + return x.RefDeviceId } return nil } @@ -4467,9 +4468,9 @@ type Curvature struct { Common *CommonInfo `protobuf:"bytes,1,opt,name=common,proto3" json:"common,omitempty"` Points []*Point `protobuf:"bytes,2,rep,name=points,proto3" json:"points,omitempty"` - CurvatureNumber int32 `protobuf:"zigzag32,3,opt,name=curvatureNumber,proto3" json:"curvatureNumber,omitempty"` //曲线的半径--正代表外侧;负代表内侧 - RefDeviceId []string `protobuf:"bytes,4,rep,name=refDeviceId,proto3" json:"refDeviceId,omitempty"` // 曲线关联的(曲度公里标) - NewrefDeviceId []uint32 `protobuf:"varint,5,rep,packed,name=newrefDeviceId,proto3" json:"newrefDeviceId,omitempty"` // 曲线关联的(曲度公里标) + CurvatureNumber int32 `protobuf:"zigzag32,3,opt,name=curvatureNumber,proto3" json:"curvatureNumber,omitempty"` //曲线的半径--正代表外侧;负代表内侧 + OldrefDeviceId []string `protobuf:"bytes,4,rep,name=oldrefDeviceId,proto3" json:"oldrefDeviceId,omitempty"` // 曲线关联的(曲度公里标) + RefDeviceId []uint32 `protobuf:"varint,5,rep,packed,name=refDeviceId,proto3" json:"refDeviceId,omitempty"` // 曲线关联的(曲度公里标) } func (x *Curvature) Reset() { @@ -4525,116 +4526,20 @@ func (x *Curvature) GetCurvatureNumber() int32 { return 0 } -func (x *Curvature) GetRefDeviceId() []string { +func (x *Curvature) GetOldrefDeviceId() []string { + if x != nil { + return x.OldrefDeviceId + } + return nil +} + +func (x *Curvature) GetRefDeviceId() []uint32 { if x != nil { return x.RefDeviceId } return nil } -func (x *Curvature) GetNewrefDeviceId() []uint32 { - if x != nil { - return x.NewrefDeviceId - } - return nil -} - -// 计算link结构 -type CalculateLink struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Common *CommonInfo `protobuf:"bytes,1,opt,name=common,proto3" json:"common,omitempty"` - Points []*Point `protobuf:"bytes,2,rep,name=points,proto3" json:"points,omitempty"` - Length int32 `protobuf:"varint,3,opt,name=length,proto3" json:"length,omitempty"` //长度,mm - ARelatedRef *RelatedRef `protobuf:"bytes,4,opt,name=aRelatedRef,proto3" json:"aRelatedRef,omitempty"` // A端(最小端)关联的端点 (道岔端点) - BRelatedRef *RelatedRef `protobuf:"bytes,5,opt,name=bRelatedRef,proto3" json:"bRelatedRef,omitempty"` // B端(最大端)关联的端点 (道岔端点) - DevicePositions []*CalculateLink_DevicePosition `protobuf:"bytes,6,rep,name=devicePositions,proto3" json:"devicePositions,omitempty"` //设备在link上的位置 - Index int32 `protobuf:"varint,7,opt,name=index,proto3" json:"index,omitempty"` // link唯一标识 -} - -func (x *CalculateLink) Reset() { - *x = CalculateLink{} - if protoimpl.UnsafeEnabled { - mi := &file_stationLayoutGraphics_proto_msgTypes[40] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CalculateLink) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CalculateLink) ProtoMessage() {} - -func (x *CalculateLink) ProtoReflect() protoreflect.Message { - mi := &file_stationLayoutGraphics_proto_msgTypes[40] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CalculateLink.ProtoReflect.Descriptor instead. -func (*CalculateLink) Descriptor() ([]byte, []int) { - return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{40} -} - -func (x *CalculateLink) GetCommon() *CommonInfo { - if x != nil { - return x.Common - } - return nil -} - -func (x *CalculateLink) GetPoints() []*Point { - if x != nil { - return x.Points - } - return nil -} - -func (x *CalculateLink) GetLength() int32 { - if x != nil { - return x.Length - } - return 0 -} - -func (x *CalculateLink) GetARelatedRef() *RelatedRef { - if x != nil { - return x.ARelatedRef - } - return nil -} - -func (x *CalculateLink) GetBRelatedRef() *RelatedRef { - if x != nil { - return x.BRelatedRef - } - return nil -} - -func (x *CalculateLink) GetDevicePositions() []*CalculateLink_DevicePosition { - if x != nil { - return x.DevicePositions - } - return nil -} - -func (x *CalculateLink) GetIndex() int32 { - if x != nil { - return x.Index - } - return 0 -} - // * 发车计时器 type DepartureTimer struct { state protoimpl.MessageState @@ -4643,15 +4548,15 @@ type DepartureTimer struct { Common *CommonInfo `protobuf:"bytes,1,opt,name=common,proto3" json:"common,omitempty"` Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` - RefStand string `protobuf:"bytes,3,opt,name=refStand,proto3" json:"refStand,omitempty"` // 关联站台 + OldrefStand string `protobuf:"bytes,3,opt,name=oldrefStand,proto3" json:"oldrefStand,omitempty"` // 关联站台 RunDirection string `protobuf:"bytes,4,opt,name=runDirection,proto3" json:"runDirection,omitempty"` //运行方向 - NewrefStand uint32 `protobuf:"varint,5,opt,name=newrefStand,proto3" json:"newrefStand,omitempty"` // 关联站台 + RefStand uint32 `protobuf:"varint,5,opt,name=refStand,proto3" json:"refStand,omitempty"` // 关联站台 } func (x *DepartureTimer) Reset() { *x = DepartureTimer{} if protoimpl.UnsafeEnabled { - mi := &file_stationLayoutGraphics_proto_msgTypes[41] + mi := &file_stationLayoutGraphics_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4664,7 +4569,7 @@ func (x *DepartureTimer) String() string { func (*DepartureTimer) ProtoMessage() {} func (x *DepartureTimer) ProtoReflect() protoreflect.Message { - mi := &file_stationLayoutGraphics_proto_msgTypes[41] + mi := &file_stationLayoutGraphics_proto_msgTypes[40] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4677,7 +4582,7 @@ func (x *DepartureTimer) ProtoReflect() protoreflect.Message { // Deprecated: Use DepartureTimer.ProtoReflect.Descriptor instead. func (*DepartureTimer) Descriptor() ([]byte, []int) { - return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{41} + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{40} } func (x *DepartureTimer) GetCommon() *CommonInfo { @@ -4694,9 +4599,9 @@ func (x *DepartureTimer) GetCode() string { return "" } -func (x *DepartureTimer) GetRefStand() string { +func (x *DepartureTimer) GetOldrefStand() string { if x != nil { - return x.RefStand + return x.OldrefStand } return "" } @@ -4708,9 +4613,9 @@ func (x *DepartureTimer) GetRunDirection() string { return "" } -func (x *DepartureTimer) GetNewrefStand() uint32 { +func (x *DepartureTimer) GetRefStand() uint32 { if x != nil { - return x.NewrefStand + return x.RefStand } return 0 } @@ -4722,16 +4627,16 @@ type AutoReturnBox struct { Common *CommonInfo `protobuf:"bytes,1,opt,name=common,proto3" json:"common,omitempty"` Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` - Flip bool `protobuf:"varint,3,opt,name=flip,proto3" json:"flip,omitempty"` // 是否翻转(前端显示) - Index int32 `protobuf:"varint,4,opt,name=index,proto3" json:"index,omitempty"` //索引 - RefStand string `protobuf:"bytes,5,opt,name=refStand,proto3" json:"refStand,omitempty"` // 关联站台 - NewrefStand uint32 `protobuf:"varint,6,opt,name=newrefStand,proto3" json:"newrefStand,omitempty"` // 关联站台 + Flip bool `protobuf:"varint,3,opt,name=flip,proto3" json:"flip,omitempty"` // 是否翻转(前端显示) + Index int32 `protobuf:"varint,4,opt,name=index,proto3" json:"index,omitempty"` //索引 + OldrefStand string `protobuf:"bytes,5,opt,name=oldrefStand,proto3" json:"oldrefStand,omitempty"` // 关联站台 + RefStand uint32 `protobuf:"varint,6,opt,name=refStand,proto3" json:"refStand,omitempty"` // 关联站台 } func (x *AutoReturnBox) Reset() { *x = AutoReturnBox{} if protoimpl.UnsafeEnabled { - mi := &file_stationLayoutGraphics_proto_msgTypes[42] + mi := &file_stationLayoutGraphics_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4744,7 +4649,7 @@ func (x *AutoReturnBox) String() string { func (*AutoReturnBox) ProtoMessage() {} func (x *AutoReturnBox) ProtoReflect() protoreflect.Message { - mi := &file_stationLayoutGraphics_proto_msgTypes[42] + mi := &file_stationLayoutGraphics_proto_msgTypes[41] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4757,7 +4662,7 @@ func (x *AutoReturnBox) ProtoReflect() protoreflect.Message { // Deprecated: Use AutoReturnBox.ProtoReflect.Descriptor instead. func (*AutoReturnBox) Descriptor() ([]byte, []int) { - return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{42} + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{41} } func (x *AutoReturnBox) GetCommon() *CommonInfo { @@ -4788,16 +4693,16 @@ func (x *AutoReturnBox) GetIndex() int32 { return 0 } -func (x *AutoReturnBox) GetRefStand() string { +func (x *AutoReturnBox) GetOldrefStand() string { if x != nil { - return x.RefStand + return x.OldrefStand } return "" } -func (x *AutoReturnBox) GetNewrefStand() uint32 { +func (x *AutoReturnBox) GetRefStand() uint32 { if x != nil { - return x.NewrefStand + return x.RefStand } return 0 } @@ -4815,7 +4720,7 @@ type UniqueIdOfStationLayout struct { func (x *UniqueIdOfStationLayout) Reset() { *x = UniqueIdOfStationLayout{} if protoimpl.UnsafeEnabled { - mi := &file_stationLayoutGraphics_proto_msgTypes[43] + mi := &file_stationLayoutGraphics_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4828,7 +4733,7 @@ func (x *UniqueIdOfStationLayout) String() string { func (*UniqueIdOfStationLayout) ProtoMessage() {} func (x *UniqueIdOfStationLayout) ProtoReflect() protoreflect.Message { - mi := &file_stationLayoutGraphics_proto_msgTypes[43] + mi := &file_stationLayoutGraphics_proto_msgTypes[42] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4841,7 +4746,7 @@ func (x *UniqueIdOfStationLayout) ProtoReflect() protoreflect.Message { // Deprecated: Use UniqueIdOfStationLayout.ProtoReflect.Descriptor instead. func (*UniqueIdOfStationLayout) Descriptor() ([]byte, []int) { - return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{43} + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{42} } func (x *UniqueIdOfStationLayout) GetCity() string { @@ -4879,7 +4784,7 @@ type KilometerConvert struct { func (x *KilometerConvert) Reset() { *x = KilometerConvert{} if protoimpl.UnsafeEnabled { - mi := &file_stationLayoutGraphics_proto_msgTypes[44] + mi := &file_stationLayoutGraphics_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4892,7 +4797,7 @@ func (x *KilometerConvert) String() string { func (*KilometerConvert) ProtoMessage() {} func (x *KilometerConvert) ProtoReflect() protoreflect.Message { - mi := &file_stationLayoutGraphics_proto_msgTypes[44] + mi := &file_stationLayoutGraphics_proto_msgTypes[43] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4905,7 +4810,7 @@ func (x *KilometerConvert) ProtoReflect() protoreflect.Message { // Deprecated: Use KilometerConvert.ProtoReflect.Descriptor instead. func (*KilometerConvert) Descriptor() ([]byte, []int) { - return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{44} + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{43} } func (x *KilometerConvert) GetKmA() *KilometerSystem { @@ -4943,7 +4848,7 @@ type StationRelateDevice struct { func (x *StationRelateDevice) Reset() { *x = StationRelateDevice{} if protoimpl.UnsafeEnabled { - mi := &file_stationLayoutGraphics_proto_msgTypes[45] + mi := &file_stationLayoutGraphics_proto_msgTypes[44] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4956,7 +4861,7 @@ func (x *StationRelateDevice) String() string { func (*StationRelateDevice) ProtoMessage() {} func (x *StationRelateDevice) ProtoReflect() protoreflect.Message { - mi := &file_stationLayoutGraphics_proto_msgTypes[45] + mi := &file_stationLayoutGraphics_proto_msgTypes[44] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4969,7 +4874,7 @@ func (x *StationRelateDevice) ProtoReflect() protoreflect.Message { // Deprecated: Use StationRelateDevice.ProtoReflect.Descriptor instead. func (*StationRelateDevice) Descriptor() ([]byte, []int) { - return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{45} + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{44} } func (x *StationRelateDevice) GetCode() string { @@ -4999,14 +4904,14 @@ type DeviceCombinationtype struct { unknownFields protoimpl.UnknownFields Code string `protobuf:"bytes,1,opt,name=code,proto3" json:"code,omitempty"` - RefDevices []string `protobuf:"bytes,2,rep,name=refDevices,proto3" json:"refDevices,omitempty"` //车站关联的设备 - NewrefDevices []int32 `protobuf:"varint,3,rep,packed,name=newrefDevices,proto3" json:"newrefDevices,omitempty"` //车站关联的设备 + OldrefDevices []string `protobuf:"bytes,2,rep,name=oldrefDevices,proto3" json:"oldrefDevices,omitempty"` //车站关联的设备 + RefDevices []uint32 `protobuf:"varint,3,rep,packed,name=refDevices,proto3" json:"refDevices,omitempty"` //车站关联的设备 } func (x *DeviceCombinationtype) Reset() { *x = DeviceCombinationtype{} if protoimpl.UnsafeEnabled { - mi := &file_stationLayoutGraphics_proto_msgTypes[46] + mi := &file_stationLayoutGraphics_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5019,7 +4924,7 @@ func (x *DeviceCombinationtype) String() string { func (*DeviceCombinationtype) ProtoMessage() {} func (x *DeviceCombinationtype) ProtoReflect() protoreflect.Message { - mi := &file_stationLayoutGraphics_proto_msgTypes[46] + mi := &file_stationLayoutGraphics_proto_msgTypes[45] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5032,7 +4937,7 @@ func (x *DeviceCombinationtype) ProtoReflect() protoreflect.Message { // Deprecated: Use DeviceCombinationtype.ProtoReflect.Descriptor instead. func (*DeviceCombinationtype) Descriptor() ([]byte, []int) { - return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{46} + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{45} } func (x *DeviceCombinationtype) GetCode() string { @@ -5042,16 +4947,16 @@ func (x *DeviceCombinationtype) GetCode() string { return "" } -func (x *DeviceCombinationtype) GetRefDevices() []string { +func (x *DeviceCombinationtype) GetOldrefDevices() []string { if x != nil { - return x.RefDevices + return x.OldrefDevices } return nil } -func (x *DeviceCombinationtype) GetNewrefDevices() []int32 { +func (x *DeviceCombinationtype) GetRefDevices() []uint32 { if x != nil { - return x.NewrefDevices + return x.RefDevices } return nil } @@ -5061,15 +4966,16 @@ type SectionCodePoint struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - CentralizedStation string `protobuf:"bytes,1,opt,name=centralizedStation,proto3" json:"centralizedStation,omitempty"` - SectionIds []string `protobuf:"bytes,2,rep,name=sectionIds,proto3" json:"sectionIds,omitempty"` //物理区段id列表 - NewsectionIds []uint32 `protobuf:"varint,3,rep,packed,name=newsectionIds,proto3" json:"newsectionIds,omitempty"` //物理区段id列表 + OldCentralizedStation string `protobuf:"bytes,1,opt,name=oldCentralizedStation,proto3" json:"oldCentralizedStation,omitempty"` // 集中站id + OldsectionIds []string `protobuf:"bytes,2,rep,name=oldsectionIds,proto3" json:"oldsectionIds,omitempty"` //物理区段id列表 + SectionIds []uint32 `protobuf:"varint,3,rep,packed,name=sectionIds,proto3" json:"sectionIds,omitempty"` //物理区段id列表 + CentralizedStation uint32 `protobuf:"varint,4,opt,name=centralizedStation,proto3" json:"centralizedStation,omitempty"` // 集中站id } func (x *SectionCodePoint) Reset() { *x = SectionCodePoint{} if protoimpl.UnsafeEnabled { - mi := &file_stationLayoutGraphics_proto_msgTypes[47] + mi := &file_stationLayoutGraphics_proto_msgTypes[46] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5082,7 +4988,7 @@ func (x *SectionCodePoint) String() string { func (*SectionCodePoint) ProtoMessage() {} func (x *SectionCodePoint) ProtoReflect() protoreflect.Message { - mi := &file_stationLayoutGraphics_proto_msgTypes[47] + mi := &file_stationLayoutGraphics_proto_msgTypes[46] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5095,28 +5001,35 @@ func (x *SectionCodePoint) ProtoReflect() protoreflect.Message { // Deprecated: Use SectionCodePoint.ProtoReflect.Descriptor instead. func (*SectionCodePoint) Descriptor() ([]byte, []int) { - return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{47} + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{46} } -func (x *SectionCodePoint) GetCentralizedStation() string { +func (x *SectionCodePoint) GetOldCentralizedStation() string { if x != nil { - return x.CentralizedStation + return x.OldCentralizedStation } return "" } -func (x *SectionCodePoint) GetSectionIds() []string { +func (x *SectionCodePoint) GetOldsectionIds() []string { + if x != nil { + return x.OldsectionIds + } + return nil +} + +func (x *SectionCodePoint) GetSectionIds() []uint32 { if x != nil { return x.SectionIds } return nil } -func (x *SectionCodePoint) GetNewsectionIds() []uint32 { +func (x *SectionCodePoint) GetCentralizedStation() uint32 { if x != nil { - return x.NewsectionIds + return x.CentralizedStation } - return nil + return 0 } // 列车信息 @@ -5136,7 +5049,7 @@ type Train struct { func (x *Train) Reset() { *x = Train{} if protoimpl.UnsafeEnabled { - mi := &file_stationLayoutGraphics_proto_msgTypes[48] + mi := &file_stationLayoutGraphics_proto_msgTypes[47] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5149,7 +5062,7 @@ func (x *Train) String() string { func (*Train) ProtoMessage() {} func (x *Train) ProtoReflect() protoreflect.Message { - mi := &file_stationLayoutGraphics_proto_msgTypes[48] + mi := &file_stationLayoutGraphics_proto_msgTypes[47] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5162,7 +5075,7 @@ func (x *Train) ProtoReflect() protoreflect.Message { // Deprecated: Use Train.ProtoReflect.Descriptor instead. func (*Train) Descriptor() ([]byte, []int) { - return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{48} + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{47} } func (x *Train) GetTrainModel() Train_TrainModel { @@ -5214,14 +5127,14 @@ type OtherLine struct { unknownFields protoimpl.UnknownFields Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Ids []string `protobuf:"bytes,2,rep,name=ids,proto3" json:"ids,omitempty"` // 设备id列表 - Newids []uint32 `protobuf:"varint,3,rep,packed,name=newids,proto3" json:"newids,omitempty"` // 设备id列表 + Oldids []string `protobuf:"bytes,2,rep,name=oldids,proto3" json:"oldids,omitempty"` // 设备id列表 + Ids []uint32 `protobuf:"varint,3,rep,packed,name=ids,proto3" json:"ids,omitempty"` // 设备id列表 } func (x *OtherLine) Reset() { *x = OtherLine{} if protoimpl.UnsafeEnabled { - mi := &file_stationLayoutGraphics_proto_msgTypes[49] + mi := &file_stationLayoutGraphics_proto_msgTypes[48] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5234,7 +5147,7 @@ func (x *OtherLine) String() string { func (*OtherLine) ProtoMessage() {} func (x *OtherLine) ProtoReflect() protoreflect.Message { - mi := &file_stationLayoutGraphics_proto_msgTypes[49] + mi := &file_stationLayoutGraphics_proto_msgTypes[48] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5247,7 +5160,7 @@ func (x *OtherLine) ProtoReflect() protoreflect.Message { // Deprecated: Use OtherLine.ProtoReflect.Descriptor instead. func (*OtherLine) Descriptor() ([]byte, []int) { - return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{49} + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{48} } func (x *OtherLine) GetName() string { @@ -5257,89 +5170,26 @@ func (x *OtherLine) GetName() string { return "" } -func (x *OtherLine) GetIds() []string { +func (x *OtherLine) GetOldids() []string { + if x != nil { + return x.Oldids + } + return nil +} + +func (x *OtherLine) GetIds() []uint32 { if x != nil { return x.Ids } return nil } -func (x *OtherLine) GetNewids() []uint32 { - if x != nil { - return x.Newids - } - return nil -} - -type CalculateLink_DevicePosition struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Offset int32 `protobuf:"varint,1,opt,name=offset,proto3" json:"offset,omitempty"` - DeviceId string `protobuf:"bytes,2,opt,name=deviceId,proto3" json:"deviceId,omitempty"` - DeviceType string `protobuf:"bytes,3,opt,name=deviceType,proto3" json:"deviceType,omitempty"` -} - -func (x *CalculateLink_DevicePosition) Reset() { - *x = CalculateLink_DevicePosition{} - if protoimpl.UnsafeEnabled { - mi := &file_stationLayoutGraphics_proto_msgTypes[50] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CalculateLink_DevicePosition) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CalculateLink_DevicePosition) ProtoMessage() {} - -func (x *CalculateLink_DevicePosition) ProtoReflect() protoreflect.Message { - mi := &file_stationLayoutGraphics_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 CalculateLink_DevicePosition.ProtoReflect.Descriptor instead. -func (*CalculateLink_DevicePosition) Descriptor() ([]byte, []int) { - return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{40, 0} -} - -func (x *CalculateLink_DevicePosition) GetOffset() int32 { - if x != nil { - return x.Offset - } - return 0 -} - -func (x *CalculateLink_DevicePosition) GetDeviceId() string { - if x != nil { - return x.DeviceId - } - return "" -} - -func (x *CalculateLink_DevicePosition) GetDeviceType() string { - if x != nil { - return x.DeviceType - } - return "" -} - var File_stationLayoutGraphics_proto protoreflect.FileDescriptor var file_stationLayoutGraphics_proto_rawDesc = []byte{ 0x0a, 0x1b, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0b, 0x67, - 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x22, 0xb8, 0x13, 0x0a, 0x12, 0x52, + 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x22, 0xf6, 0x12, 0x0a, 0x12, 0x52, 0x74, 0x73, 0x73, 0x47, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x12, 0x2b, 0x0a, 0x06, 0x63, 0x61, 0x6e, 0x76, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, @@ -5411,446 +5261,443 @@ var file_stationLayoutGraphics_proto_rawDesc = []byte{ 0x65, 0x72, 0x73, 0x12, 0x2a, 0x0a, 0x06, 0x73, 0x6c, 0x6f, 0x70, 0x65, 0x73, 0x18, 0x17, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x6c, 0x6f, 0x70, 0x65, 0x52, 0x06, 0x73, 0x6c, 0x6f, 0x70, 0x65, 0x73, 0x12, - 0x40, 0x0a, 0x0d, 0x43, 0x61, 0x6c, 0x63, 0x75, 0x6c, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x6e, 0x6b, - 0x18, 0x18, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, - 0x44, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x61, 0x6c, 0x63, 0x75, 0x6c, 0x61, 0x74, 0x65, 0x4c, 0x69, - 0x6e, 0x6b, 0x52, 0x0d, 0x43, 0x61, 0x6c, 0x63, 0x75, 0x6c, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x6e, - 0x6b, 0x12, 0x46, 0x0a, 0x0f, 0x73, 0x6c, 0x6f, 0x70, 0x65, 0x4b, 0x69, 0x6c, 0x6f, 0x4d, 0x61, - 0x72, 0x6b, 0x65, 0x72, 0x18, 0x19, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x72, 0x61, - 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x6c, 0x6f, 0x70, 0x65, 0x4b, 0x69, - 0x6c, 0x6f, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x52, 0x0f, 0x73, 0x6c, 0x6f, 0x70, 0x65, 0x4b, - 0x69, 0x6c, 0x6f, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x12, 0x52, 0x0a, 0x13, 0x63, 0x75, 0x72, - 0x76, 0x61, 0x74, 0x75, 0x72, 0x65, 0x4b, 0x69, 0x6c, 0x6f, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, - 0x18, 0x1a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, - 0x44, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x75, 0x72, 0x76, 0x61, 0x74, 0x75, 0x72, 0x65, 0x4b, 0x69, - 0x6c, 0x6f, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x52, 0x13, 0x63, 0x75, 0x72, 0x76, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x4b, 0x69, 0x6c, 0x6f, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x12, 0x36, 0x0a, - 0x0a, 0x63, 0x75, 0x72, 0x76, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x1b, 0x20, 0x03, 0x28, + 0x46, 0x0a, 0x0f, 0x73, 0x6c, 0x6f, 0x70, 0x65, 0x4b, 0x69, 0x6c, 0x6f, 0x4d, 0x61, 0x72, 0x6b, + 0x65, 0x72, 0x18, 0x19, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, + 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x6c, 0x6f, 0x70, 0x65, 0x4b, 0x69, 0x6c, 0x6f, + 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x52, 0x0f, 0x73, 0x6c, 0x6f, 0x70, 0x65, 0x4b, 0x69, 0x6c, + 0x6f, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x12, 0x52, 0x0a, 0x13, 0x63, 0x75, 0x72, 0x76, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x4b, 0x69, 0x6c, 0x6f, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x18, 0x1a, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, + 0x74, 0x61, 0x2e, 0x43, 0x75, 0x72, 0x76, 0x61, 0x74, 0x75, 0x72, 0x65, 0x4b, 0x69, 0x6c, 0x6f, + 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x52, 0x13, 0x63, 0x75, 0x72, 0x76, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x4b, 0x69, 0x6c, 0x6f, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x12, 0x36, 0x0a, 0x0a, 0x63, + 0x75, 0x72, 0x76, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x1b, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x16, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x75, + 0x72, 0x76, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x0a, 0x63, 0x75, 0x72, 0x76, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x73, 0x12, 0x3f, 0x0a, 0x0d, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x53, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x1c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x72, 0x61, + 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x53, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x53, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4e, 0x0a, 0x12, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x4c, 0x6f, 0x67, + 0x69, 0x63, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x1d, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x1e, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x54, + 0x72, 0x61, 0x63, 0x6b, 0x4c, 0x6f, 0x67, 0x69, 0x63, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x12, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x4c, 0x6f, 0x67, 0x69, 0x63, 0x53, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4c, 0x0a, 0x0e, 0x55, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x49, 0x64, + 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, + 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x55, 0x6e, 0x69, 0x71, 0x75, + 0x65, 0x49, 0x64, 0x4f, 0x66, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x61, 0x79, 0x6f, + 0x75, 0x74, 0x52, 0x0e, 0x55, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x49, 0x64, 0x50, 0x72, 0x65, 0x66, + 0x69, 0x78, 0x12, 0x51, 0x0a, 0x14, 0x6b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x43, + 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x20, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x1d, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x4b, + 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x52, + 0x14, 0x6b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, + 0x74, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x0b, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x44, + 0x6f, 0x6f, 0x72, 0x73, 0x18, 0x21, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, + 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x44, + 0x6f, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x44, 0x6f, 0x6f, 0x72, 0x73, + 0x12, 0x5a, 0x0a, 0x17, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x6c, 0x61, 0x74, + 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x22, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x20, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, + 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x44, 0x65, 0x76, + 0x69, 0x63, 0x65, 0x52, 0x17, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x6c, 0x61, + 0x74, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x51, 0x0a, 0x14, + 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, + 0x4c, 0x69, 0x73, 0x74, 0x18, 0x23, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x72, 0x61, + 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x43, 0x6f, 0x64, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x14, 0x73, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x12, + 0x49, 0x0a, 0x10, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x44, 0x6f, 0x6f, 0x72, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x18, 0x24, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x72, 0x61, 0x70, + 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x44, 0x6f, + 0x6f, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x10, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, + 0x44, 0x6f, 0x6f, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2d, 0x0a, 0x07, 0x62, 0x65, + 0x61, 0x63, 0x6f, 0x6e, 0x73, 0x18, 0x25, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x67, 0x72, + 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, + 0x52, 0x07, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x73, 0x12, 0x67, 0x0a, 0x1a, 0x67, 0x65, 0x6e, + 0x65, 0x72, 0x61, 0x74, 0x65, 0x41, 0x78, 0x6c, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x69, 0x6e, + 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x26, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, + 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x6e, 0x65, + 0x72, 0x61, 0x74, 0x65, 0x41, 0x78, 0x6c, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x69, 0x6e, 0x67, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x1a, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, + 0x41, 0x78, 0x6c, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x12, 0x45, 0x0a, 0x0f, 0x64, 0x65, 0x70, 0x61, 0x72, 0x74, 0x75, 0x72, 0x65, 0x54, + 0x69, 0x6d, 0x65, 0x72, 0x73, 0x18, 0x27, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x72, + 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x44, 0x65, 0x70, 0x61, 0x72, 0x74, + 0x75, 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x72, 0x52, 0x0f, 0x64, 0x65, 0x70, 0x61, 0x72, 0x74, + 0x75, 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x72, 0x73, 0x12, 0x42, 0x0a, 0x0e, 0x61, 0x75, 0x74, + 0x6f, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x42, 0x6f, 0x78, 0x73, 0x18, 0x28, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, + 0x41, 0x75, 0x74, 0x6f, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x42, 0x6f, 0x78, 0x52, 0x0e, 0x61, + 0x75, 0x74, 0x6f, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x42, 0x6f, 0x78, 0x73, 0x12, 0x66, 0x0a, + 0x1a, 0x63, 0x6f, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x69, + 0x76, 0x69, 0x64, 0x69, 0x6e, 0x67, 0x4c, 0x69, 0x6e, 0x65, 0x73, 0x18, 0x29, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, + 0x43, 0x6f, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x69, 0x76, + 0x69, 0x64, 0x69, 0x6e, 0x67, 0x4c, 0x69, 0x6e, 0x65, 0x52, 0x1a, 0x63, 0x6f, 0x6e, 0x63, 0x65, + 0x6e, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x69, 0x76, 0x69, 0x64, 0x69, 0x6e, 0x67, + 0x4c, 0x69, 0x6e, 0x65, 0x73, 0x12, 0x3c, 0x0a, 0x0d, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x4c, 0x69, + 0x6e, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x2a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, + 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x4f, 0x74, 0x68, 0x65, 0x72, + 0x4c, 0x69, 0x6e, 0x65, 0x52, 0x0d, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x4c, 0x69, 0x6e, 0x65, 0x4c, + 0x69, 0x73, 0x74, 0x22, 0xa6, 0x01, 0x0a, 0x06, 0x43, 0x61, 0x6e, 0x76, 0x61, 0x73, 0x12, 0x14, + 0x0a, 0x05, 0x77, 0x69, 0x64, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x77, + 0x69, 0x64, 0x74, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x28, 0x0a, 0x0f, + 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, + 0x64, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x12, 0x44, 0x0a, 0x11, 0x76, 0x69, 0x65, 0x77, 0x70, 0x6f, + 0x72, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, - 0x43, 0x75, 0x72, 0x76, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x0a, 0x63, 0x75, 0x72, 0x76, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x3f, 0x0a, 0x0d, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x53, 0x65, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x1c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, - 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x72, 0x61, 0x63, 0x6b, - 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x53, 0x65, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4e, 0x0a, 0x12, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x4c, - 0x6f, 0x67, 0x69, 0x63, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x1d, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, - 0x2e, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x4c, 0x6f, 0x67, 0x69, 0x63, 0x53, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x12, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x4c, 0x6f, 0x67, 0x69, 0x63, 0x53, 0x65, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4c, 0x0a, 0x0e, 0x55, 0x6e, 0x69, 0x71, 0x75, 0x65, - 0x49, 0x64, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, - 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x55, 0x6e, 0x69, - 0x71, 0x75, 0x65, 0x49, 0x64, 0x4f, 0x66, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x61, - 0x79, 0x6f, 0x75, 0x74, 0x52, 0x0e, 0x55, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x49, 0x64, 0x50, 0x72, - 0x65, 0x66, 0x69, 0x78, 0x12, 0x51, 0x0a, 0x14, 0x6b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, - 0x72, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x20, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, - 0x2e, 0x4b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, - 0x74, 0x52, 0x14, 0x6b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x76, - 0x65, 0x72, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x0b, 0x73, 0x63, 0x72, 0x65, 0x65, - 0x6e, 0x44, 0x6f, 0x6f, 0x72, 0x73, 0x18, 0x21, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, - 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x63, 0x72, 0x65, 0x65, - 0x6e, 0x44, 0x6f, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x44, 0x6f, 0x6f, - 0x72, 0x73, 0x12, 0x5a, 0x0a, 0x17, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x6c, - 0x61, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x22, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, - 0x61, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x44, - 0x65, 0x76, 0x69, 0x63, 0x65, 0x52, 0x17, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x6c, 0x61, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x51, - 0x0a, 0x14, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x50, 0x6f, 0x69, - 0x6e, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x23, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x67, - 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x14, 0x73, 0x65, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x4c, 0x69, 0x73, - 0x74, 0x12, 0x49, 0x0a, 0x10, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x44, 0x6f, 0x6f, 0x72, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x24, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x72, - 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x63, 0x72, 0x65, 0x65, 0x6e, - 0x44, 0x6f, 0x6f, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x10, 0x73, 0x63, 0x72, 0x65, - 0x65, 0x6e, 0x44, 0x6f, 0x6f, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2d, 0x0a, 0x07, - 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x73, 0x18, 0x25, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, - 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x42, 0x65, 0x61, 0x63, - 0x6f, 0x6e, 0x52, 0x07, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x73, 0x12, 0x67, 0x0a, 0x1a, 0x67, - 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x41, 0x78, 0x6c, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, - 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x26, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x27, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, - 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x41, 0x78, 0x6c, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x69, - 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x1a, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, - 0x74, 0x65, 0x41, 0x78, 0x6c, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x69, 0x6e, 0x67, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x12, 0x45, 0x0a, 0x0f, 0x64, 0x65, 0x70, 0x61, 0x72, 0x74, 0x75, 0x72, - 0x65, 0x54, 0x69, 0x6d, 0x65, 0x72, 0x73, 0x18, 0x27, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, - 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x44, 0x65, 0x70, 0x61, - 0x72, 0x74, 0x75, 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x72, 0x52, 0x0f, 0x64, 0x65, 0x70, 0x61, - 0x72, 0x74, 0x75, 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x72, 0x73, 0x12, 0x42, 0x0a, 0x0e, 0x61, - 0x75, 0x74, 0x6f, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x42, 0x6f, 0x78, 0x73, 0x18, 0x28, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, - 0x61, 0x2e, 0x41, 0x75, 0x74, 0x6f, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x42, 0x6f, 0x78, 0x52, - 0x0e, 0x61, 0x75, 0x74, 0x6f, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x42, 0x6f, 0x78, 0x73, 0x12, - 0x66, 0x0a, 0x1a, 0x63, 0x6f, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x44, 0x69, 0x76, 0x69, 0x64, 0x69, 0x6e, 0x67, 0x4c, 0x69, 0x6e, 0x65, 0x73, 0x18, 0x29, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, - 0x61, 0x2e, 0x43, 0x6f, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, - 0x69, 0x76, 0x69, 0x64, 0x69, 0x6e, 0x67, 0x4c, 0x69, 0x6e, 0x65, 0x52, 0x1a, 0x63, 0x6f, 0x6e, - 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x69, 0x76, 0x69, 0x64, 0x69, - 0x6e, 0x67, 0x4c, 0x69, 0x6e, 0x65, 0x73, 0x12, 0x3c, 0x0a, 0x0d, 0x6f, 0x74, 0x68, 0x65, 0x72, - 0x4c, 0x69, 0x6e, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x2a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, - 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x4f, 0x74, 0x68, - 0x65, 0x72, 0x4c, 0x69, 0x6e, 0x65, 0x52, 0x0d, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x4c, 0x69, 0x6e, - 0x65, 0x4c, 0x69, 0x73, 0x74, 0x22, 0xa6, 0x01, 0x0a, 0x06, 0x43, 0x61, 0x6e, 0x76, 0x61, 0x73, - 0x12, 0x14, 0x0a, 0x05, 0x77, 0x69, 0x64, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x05, 0x77, 0x69, 0x64, 0x74, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x28, - 0x0a, 0x0f, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x6f, 0x6c, 0x6f, - 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, - 0x75, 0x6e, 0x64, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x12, 0x44, 0x0a, 0x11, 0x76, 0x69, 0x65, 0x77, - 0x70, 0x6f, 0x72, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, - 0x61, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x11, 0x76, 0x69, 0x65, - 0x77, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x22, 0x23, - 0x0a, 0x05, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x0c, 0x0a, 0x01, 0x78, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x02, 0x52, 0x01, 0x78, 0x12, 0x0c, 0x0a, 0x01, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, - 0x52, 0x01, 0x79, 0x22, 0xa9, 0x01, 0x0a, 0x09, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, - 0x6d, 0x12, 0x2e, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, - 0x61, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x28, 0x0a, 0x05, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x12, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x50, - 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x05, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x72, - 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, 0x08, 0x72, - 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x0a, 0x04, 0x73, 0x6b, 0x65, 0x77, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, - 0x61, 0x74, 0x61, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x04, 0x73, 0x6b, 0x65, 0x77, 0x22, - 0x5a, 0x0a, 0x0e, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, - 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x34, 0x0a, 0x09, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, - 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, - 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, - 0x52, 0x09, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x22, 0xd1, 0x01, 0x0a, 0x0a, - 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x67, 0x72, - 0x61, 0x70, 0x68, 0x69, 0x63, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0b, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x54, 0x79, 0x70, 0x65, 0x12, 0x34, 0x0a, 0x09, - 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x16, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x09, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, - 0x72, 0x6d, 0x12, 0x45, 0x0a, 0x0f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, - 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x72, - 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x0f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x65, 0x77, - 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6e, 0x65, 0x77, 0x49, 0x64, 0x22, - 0xec, 0x01, 0x0a, 0x07, 0x50, 0x6f, 0x6c, 0x79, 0x67, 0x6f, 0x6e, 0x12, 0x2f, 0x0a, 0x06, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, - 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, - 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, - 0x12, 0x42, 0x0a, 0x0b, 0x70, 0x6f, 0x6c, 0x79, 0x67, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, - 0x61, 0x74, 0x61, 0x2e, 0x50, 0x6f, 0x6c, 0x79, 0x67, 0x6f, 0x6e, 0x2e, 0x50, 0x6f, 0x6c, 0x79, - 0x67, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, 0x70, 0x6f, 0x6c, 0x79, 0x67, 0x6f, 0x6e, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x04, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, - 0x74, 0x61, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x06, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, - 0x22, 0x2c, 0x0a, 0x0b, 0x50, 0x6f, 0x6c, 0x79, 0x67, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x1d, 0x0a, 0x19, 0x43, 0x6f, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x44, 0x69, 0x76, 0x69, 0x64, 0x69, 0x6e, 0x67, 0x4c, 0x69, 0x6e, 0x65, 0x10, 0x00, 0x22, 0xe7, - 0x03, 0x0a, 0x19, 0x43, 0x6f, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x44, 0x69, 0x76, 0x69, 0x64, 0x69, 0x6e, 0x67, 0x4c, 0x69, 0x6e, 0x65, 0x12, 0x2f, 0x0a, 0x06, - 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, - 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x12, 0x12, 0x0a, - 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, - 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x11, 0x76, 0x69, 0x65, 0x77, 0x70, + 0x6f, 0x72, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x22, 0x23, 0x0a, 0x05, + 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x0c, 0x0a, 0x01, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x02, + 0x52, 0x01, 0x78, 0x12, 0x0c, 0x0a, 0x01, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x01, + 0x79, 0x22, 0xa9, 0x01, 0x0a, 0x09, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x12, + 0x2e, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, - 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x06, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x2a, 0x0a, - 0x10, 0x72, 0x65, 0x66, 0x4c, 0x65, 0x66, 0x74, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, - 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x72, 0x65, 0x66, 0x4c, 0x65, 0x66, 0x74, - 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x11, 0x72, 0x65, 0x66, - 0x52, 0x69, 0x67, 0x68, 0x74, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x72, 0x65, 0x66, 0x52, 0x69, 0x67, 0x68, 0x74, 0x53, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x45, 0x0a, 0x0f, 0x6e, 0x6f, 0x64, 0x65, 0x43, - 0x6f, 0x6e, 0x57, 0x69, 0x74, 0x68, 0x53, 0x65, 0x63, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x1b, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x4e, - 0x6f, 0x64, 0x65, 0x43, 0x6f, 0x6e, 0x57, 0x69, 0x74, 0x68, 0x53, 0x65, 0x63, 0x52, 0x0f, 0x6e, - 0x6f, 0x64, 0x65, 0x43, 0x6f, 0x6e, 0x57, 0x69, 0x74, 0x68, 0x53, 0x65, 0x63, 0x73, 0x12, 0x52, - 0x0a, 0x24, 0x69, 0x73, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x4c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6e, - 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x69, 0x76, 0x69, 0x64, 0x69, - 0x6e, 0x67, 0x4c, 0x69, 0x6e, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x24, 0x69, 0x73, - 0x4f, 0x74, 0x68, 0x65, 0x72, 0x4c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x63, 0x65, 0x6e, 0x74, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x69, 0x76, 0x69, 0x64, 0x69, 0x6e, 0x67, 0x4c, 0x69, - 0x6e, 0x65, 0x12, 0x30, 0x0a, 0x13, 0x6e, 0x65, 0x77, 0x72, 0x65, 0x66, 0x4c, 0x65, 0x66, 0x74, - 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x13, 0x6e, 0x65, 0x77, 0x72, 0x65, 0x66, 0x4c, 0x65, 0x66, 0x74, 0x53, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x32, 0x0a, 0x14, 0x6e, 0x65, 0x77, 0x72, 0x65, 0x66, 0x52, 0x69, - 0x67, 0x68, 0x74, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x09, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x14, 0x6e, 0x65, 0x77, 0x72, 0x65, 0x66, 0x52, 0x69, 0x67, 0x68, 0x74, 0x53, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x88, 0x01, 0x0a, 0x0e, 0x4e, 0x6f, 0x64, - 0x65, 0x43, 0x6f, 0x6e, 0x57, 0x69, 0x74, 0x68, 0x53, 0x65, 0x63, 0x12, 0x39, 0x0a, 0x0b, 0x6c, - 0x65, 0x66, 0x74, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x52, - 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x66, 0x52, 0x0b, 0x6c, 0x65, 0x66, 0x74, 0x53, - 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3b, 0x0a, 0x0c, 0x72, 0x69, 0x67, 0x68, 0x74, 0x53, - 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, - 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x74, - 0x65, 0x64, 0x52, 0x65, 0x66, 0x52, 0x0c, 0x72, 0x69, 0x67, 0x68, 0x74, 0x53, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x22, 0x80, 0x03, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x43, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x72, 0x65, 0x66, 0x53, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x66, - 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x72, 0x65, 0x66, - 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0c, 0x72, 0x65, 0x66, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x28, 0x0a, - 0x0f, 0x72, 0x65, 0x66, 0x45, 0x73, 0x62, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x43, 0x6f, 0x64, 0x65, - 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x72, 0x65, 0x66, 0x45, 0x73, 0x62, 0x52, 0x65, - 0x6c, 0x61, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x38, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, - 0x0c, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, - 0x61, 0x74, 0x61, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x54, 0x79, 0x70, - 0x65, 0x4f, 0x66, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x04, 0x74, 0x79, 0x70, - 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x6e, 0x65, 0x77, 0x72, 0x65, 0x66, 0x53, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x6e, 0x65, 0x77, 0x72, - 0x65, 0x66, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x0f, 0x6e, - 0x65, 0x77, 0x72, 0x65, 0x66, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x0e, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x6e, 0x65, 0x77, 0x72, 0x65, 0x66, 0x53, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x2f, 0x0a, 0x0e, 0x54, 0x79, 0x70, 0x65, 0x4f, 0x66, 0x50, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, - 0x77, 0x6e, 0x10, 0x00, 0x12, 0x06, 0x0a, 0x02, 0x75, 0x70, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, - 0x64, 0x6f, 0x77, 0x6e, 0x10, 0x02, 0x22, 0xa3, 0x01, 0x0a, 0x0a, 0x53, 0x63, 0x72, 0x65, 0x65, - 0x6e, 0x44, 0x6f, 0x6f, 0x72, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, + 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x28, 0x0a, 0x05, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, + 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x50, 0x6f, 0x69, + 0x6e, 0x74, 0x52, 0x05, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x6f, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, 0x08, 0x72, 0x6f, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x0a, 0x04, 0x73, 0x6b, 0x65, 0x77, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, + 0x61, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x04, 0x73, 0x6b, 0x65, 0x77, 0x22, 0x5a, 0x0a, + 0x0e, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x12, + 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x34, 0x0a, 0x09, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, + 0x44, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x09, + 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x22, 0xd1, 0x01, 0x0a, 0x0a, 0x43, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x14, 0x0a, 0x05, 0x6f, 0x6c, 0x64, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6f, 0x6c, 0x64, 0x69, 0x64, 0x12, 0x20, + 0x0a, 0x0b, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0b, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x34, 0x0a, 0x09, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, + 0x61, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x09, 0x74, 0x72, 0x61, + 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x45, 0x0a, 0x0f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x1b, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x68, + 0x69, 0x6c, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x0f, 0x63, 0x68, + 0x69, 0x6c, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x22, 0xec, 0x01, + 0x0a, 0x07, 0x50, 0x6f, 0x6c, 0x79, 0x67, 0x6f, 0x6e, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, + 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x49, 0x6e, + 0x66, 0x6f, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, + 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x42, + 0x0a, 0x0b, 0x70, 0x6f, 0x6c, 0x79, 0x67, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, + 0x61, 0x2e, 0x50, 0x6f, 0x6c, 0x79, 0x67, 0x6f, 0x6e, 0x2e, 0x50, 0x6f, 0x6c, 0x79, 0x67, 0x6f, + 0x6e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, 0x70, 0x6f, 0x6c, 0x79, 0x67, 0x6f, 0x6e, 0x54, 0x79, + 0x70, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, + 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x06, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x22, 0x2c, + 0x0a, 0x0b, 0x50, 0x6f, 0x6c, 0x79, 0x67, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1d, 0x0a, + 0x19, 0x43, 0x6f, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x69, + 0x76, 0x69, 0x64, 0x69, 0x6e, 0x67, 0x4c, 0x69, 0x6e, 0x65, 0x10, 0x00, 0x22, 0xe7, 0x03, 0x0a, + 0x19, 0x43, 0x6f, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x69, + 0x76, 0x69, 0x64, 0x69, 0x6e, 0x67, 0x4c, 0x69, 0x6e, 0x65, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, + 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x49, + 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x63, + 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, + 0x2a, 0x0a, 0x06, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x12, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x50, 0x6f, + 0x69, 0x6e, 0x74, 0x52, 0x06, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x30, 0x0a, 0x13, 0x6f, + 0x6c, 0x64, 0x72, 0x65, 0x66, 0x4c, 0x65, 0x66, 0x74, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x6f, 0x6c, 0x64, 0x72, 0x65, 0x66, + 0x4c, 0x65, 0x66, 0x74, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x32, 0x0a, + 0x14, 0x6f, 0x6c, 0x64, 0x72, 0x65, 0x66, 0x52, 0x69, 0x67, 0x68, 0x74, 0x53, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x6f, 0x6c, 0x64, + 0x72, 0x65, 0x66, 0x52, 0x69, 0x67, 0x68, 0x74, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, + 0x64, 0x12, 0x45, 0x0a, 0x0f, 0x6e, 0x6f, 0x64, 0x65, 0x43, 0x6f, 0x6e, 0x57, 0x69, 0x74, 0x68, + 0x53, 0x65, 0x63, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x72, 0x61, + 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x43, 0x6f, 0x6e, + 0x57, 0x69, 0x74, 0x68, 0x53, 0x65, 0x63, 0x52, 0x0f, 0x6e, 0x6f, 0x64, 0x65, 0x43, 0x6f, 0x6e, + 0x57, 0x69, 0x74, 0x68, 0x53, 0x65, 0x63, 0x73, 0x12, 0x52, 0x0a, 0x24, 0x69, 0x73, 0x4f, 0x74, + 0x68, 0x65, 0x72, 0x4c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x69, 0x76, 0x69, 0x64, 0x69, 0x6e, 0x67, 0x4c, 0x69, 0x6e, 0x65, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x24, 0x69, 0x73, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x4c, + 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x44, 0x69, 0x76, 0x69, 0x64, 0x69, 0x6e, 0x67, 0x4c, 0x69, 0x6e, 0x65, 0x12, 0x2a, 0x0a, 0x10, + 0x72, 0x65, 0x66, 0x4c, 0x65, 0x66, 0x74, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, + 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x10, 0x72, 0x65, 0x66, 0x4c, 0x65, 0x66, 0x74, 0x53, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x11, 0x72, 0x65, 0x66, 0x52, + 0x69, 0x67, 0x68, 0x74, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x09, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x11, 0x72, 0x65, 0x66, 0x52, 0x69, 0x67, 0x68, 0x74, 0x53, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x88, 0x01, 0x0a, 0x0e, 0x4e, 0x6f, 0x64, 0x65, 0x43, + 0x6f, 0x6e, 0x57, 0x69, 0x74, 0x68, 0x53, 0x65, 0x63, 0x12, 0x39, 0x0a, 0x0b, 0x6c, 0x65, 0x66, + 0x74, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, + 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x6c, + 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x66, 0x52, 0x0b, 0x6c, 0x65, 0x66, 0x74, 0x53, 0x65, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3b, 0x0a, 0x0c, 0x72, 0x69, 0x67, 0x68, 0x74, 0x53, 0x65, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, + 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, + 0x52, 0x65, 0x66, 0x52, 0x0c, 0x72, 0x69, 0x67, 0x68, 0x74, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x22, 0x80, 0x03, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x2f, + 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, + 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x12, + 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, + 0x6f, 0x64, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x6f, 0x6c, 0x64, 0x72, 0x65, 0x66, 0x53, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x6f, 0x6c, + 0x64, 0x72, 0x65, 0x66, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x28, 0x0a, + 0x0f, 0x6f, 0x6c, 0x64, 0x72, 0x65, 0x66, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, + 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x6f, 0x6c, 0x64, 0x72, 0x65, 0x66, 0x53, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x0f, 0x72, 0x65, 0x66, 0x45, 0x73, + 0x62, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0f, 0x72, 0x65, 0x66, 0x45, 0x73, 0x62, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x43, 0x6f, 0x64, + 0x65, 0x12, 0x38, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x24, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x50, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x4f, 0x66, 0x50, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x72, + 0x65, 0x66, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x0c, 0x72, 0x65, 0x66, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, + 0x22, 0x0a, 0x0c, 0x72, 0x65, 0x66, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, + 0x0e, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x72, 0x65, 0x66, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x49, 0x64, 0x22, 0x2f, 0x0a, 0x0e, 0x54, 0x79, 0x70, 0x65, 0x4f, 0x66, 0x50, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, + 0x10, 0x00, 0x12, 0x06, 0x0a, 0x02, 0x75, 0x70, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x64, 0x6f, + 0x77, 0x6e, 0x10, 0x02, 0x22, 0xa3, 0x01, 0x0a, 0x0a, 0x53, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x44, + 0x6f, 0x6f, 0x72, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, + 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x63, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x2a, 0x0a, 0x10, 0x6f, 0x6c, 0x64, 0x72, + 0x65, 0x66, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x10, 0x6f, 0x6c, 0x64, 0x72, 0x65, 0x66, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x72, 0x65, 0x66, 0x50, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x49, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x72, 0x65, 0x66, + 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x64, 0x22, 0x88, 0x01, 0x0a, 0x10, 0x53, + 0x63, 0x72, 0x65, 0x65, 0x6e, 0x44, 0x6f, 0x6f, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, + 0x24, 0x0a, 0x0d, 0x73, 0x6f, 0x6e, 0x44, 0x6f, 0x6f, 0x72, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x73, 0x6f, 0x6e, 0x44, 0x6f, 0x6f, 0x72, 0x41, + 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x4e, 0x0a, 0x13, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x44, + 0x6f, 0x6f, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, + 0x2e, 0x53, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x44, 0x6f, 0x6f, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, + 0x52, 0x13, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x44, 0x6f, 0x6f, 0x72, 0x47, 0x72, 0x6f, 0x75, + 0x70, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x89, 0x01, 0x0a, 0x0f, 0x53, 0x63, 0x72, 0x65, 0x65, 0x6e, + 0x44, 0x6f, 0x6f, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x2a, 0x0a, 0x10, 0x74, 0x72, 0x61, + 0x69, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x10, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, + 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x53, 0x6d, + 0x61, 0x6c, 0x6c, 0x44, 0x6f, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x73, + 0x74, 0x61, 0x72, 0x74, 0x53, 0x6d, 0x61, 0x6c, 0x6c, 0x44, 0x6f, 0x6f, 0x72, 0x12, 0x22, 0x0a, + 0x0c, 0x65, 0x6e, 0x64, 0x53, 0x6d, 0x61, 0x6c, 0x6c, 0x44, 0x6f, 0x6f, 0x72, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x0c, 0x65, 0x6e, 0x64, 0x53, 0x6d, 0x61, 0x6c, 0x6c, 0x44, 0x6f, 0x6f, + 0x72, 0x22, 0x82, 0x03, 0x0a, 0x07, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2f, 0x0a, + 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, + 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x12, 0x12, + 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, + 0x64, 0x65, 0x12, 0x34, 0x0a, 0x15, 0x63, 0x6f, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x15, 0x63, 0x6f, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x46, 0x0a, 0x0f, 0x6b, 0x69, 0x6c, 0x6f, + 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, + 0x4b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x52, + 0x0f, 0x6b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, + 0x12, 0x24, 0x0a, 0x0d, 0x72, 0x65, 0x66, 0x49, 0x62, 0x70, 0x4d, 0x61, 0x70, 0x43, 0x6f, 0x64, + 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x72, 0x65, 0x66, 0x49, 0x62, 0x70, 0x4d, + 0x61, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x65, 0x70, 0x6f, + 0x74, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x64, 0x65, 0x70, 0x6f, 0x74, 0x73, + 0x12, 0x2c, 0x0a, 0x11, 0x6f, 0x6c, 0x64, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x53, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x09, 0x52, 0x11, 0x6f, 0x6c, 0x64, + 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x26, + 0x0a, 0x0e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x0e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x53, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x70, 0x0a, 0x0b, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x57, + 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x72, 0x65, - 0x66, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0d, 0x72, 0x65, 0x66, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x64, - 0x12, 0x2a, 0x0a, 0x10, 0x6e, 0x65, 0x77, 0x52, 0x65, 0x66, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x49, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x10, 0x6e, 0x65, 0x77, 0x52, - 0x65, 0x66, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x64, 0x22, 0x88, 0x01, 0x0a, - 0x10, 0x53, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x44, 0x6f, 0x6f, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x6f, 0x6e, 0x44, 0x6f, 0x6f, 0x72, 0x41, 0x6d, 0x6f, 0x75, - 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x73, 0x6f, 0x6e, 0x44, 0x6f, 0x6f, - 0x72, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x4e, 0x0a, 0x13, 0x73, 0x63, 0x72, 0x65, 0x65, - 0x6e, 0x44, 0x6f, 0x6f, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, - 0x74, 0x61, 0x2e, 0x53, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x44, 0x6f, 0x6f, 0x72, 0x47, 0x72, 0x6f, - 0x75, 0x70, 0x52, 0x13, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x44, 0x6f, 0x6f, 0x72, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x89, 0x01, 0x0a, 0x0f, 0x53, 0x63, 0x72, 0x65, - 0x65, 0x6e, 0x44, 0x6f, 0x6f, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x2a, 0x0a, 0x10, 0x74, - 0x72, 0x61, 0x69, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x73, 0x74, 0x61, 0x72, 0x74, - 0x53, 0x6d, 0x61, 0x6c, 0x6c, 0x44, 0x6f, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x0e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x53, 0x6d, 0x61, 0x6c, 0x6c, 0x44, 0x6f, 0x6f, 0x72, 0x12, - 0x22, 0x0a, 0x0c, 0x65, 0x6e, 0x64, 0x53, 0x6d, 0x61, 0x6c, 0x6c, 0x44, 0x6f, 0x6f, 0x72, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x65, 0x6e, 0x64, 0x53, 0x6d, 0x61, 0x6c, 0x6c, 0x44, - 0x6f, 0x6f, 0x72, 0x22, 0x82, 0x03, 0x0a, 0x07, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x63, 0x6f, 0x64, 0x65, 0x12, 0x34, 0x0a, 0x15, 0x63, 0x6f, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x15, 0x63, 0x6f, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x46, 0x0a, 0x0f, 0x6b, 0x69, - 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, - 0x61, 0x2e, 0x4b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x79, 0x73, 0x74, 0x65, - 0x6d, 0x52, 0x0f, 0x6b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x79, 0x73, 0x74, - 0x65, 0x6d, 0x12, 0x24, 0x0a, 0x0d, 0x72, 0x65, 0x66, 0x49, 0x62, 0x70, 0x4d, 0x61, 0x70, 0x43, - 0x6f, 0x64, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x72, 0x65, 0x66, 0x49, 0x62, - 0x70, 0x4d, 0x61, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x65, - 0x70, 0x6f, 0x74, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x64, 0x65, 0x70, 0x6f, - 0x74, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x53, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x6d, 0x61, 0x6e, 0x61, - 0x67, 0x65, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2c, 0x0a, 0x11, 0x6e, 0x65, - 0x77, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, - 0x0d, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x11, 0x6e, 0x65, 0x77, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, - 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x70, 0x0a, 0x0b, 0x54, 0x72, 0x61, 0x69, - 0x6e, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, - 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, - 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x1c, 0x0a, 0x09, - 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x09, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0xc7, 0x03, 0x0a, 0x0c, 0x41, - 0x78, 0x6c, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x2f, 0x0a, 0x06, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, - 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, - 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, - 0x12, 0x46, 0x0a, 0x0f, 0x6b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x79, 0x73, - 0x74, 0x65, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x72, 0x61, 0x70, - 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x4b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, - 0x72, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x52, 0x0f, 0x6b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, - 0x65, 0x72, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x12, 0x41, 0x0a, 0x0f, 0x61, 0x78, 0x6c, 0x65, - 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x66, 0x18, 0x04, 0x20, 0x03, 0x28, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x73, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0xc7, 0x03, 0x0a, 0x0c, 0x41, 0x78, 0x6c, + 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, + 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x49, 0x6e, + 0x66, 0x6f, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, + 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x46, + 0x0a, 0x0f, 0x6b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x79, 0x73, 0x74, 0x65, + 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, + 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x4b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, + 0x79, 0x73, 0x74, 0x65, 0x6d, 0x52, 0x0f, 0x6b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, + 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x12, 0x41, 0x0a, 0x0f, 0x61, 0x78, 0x6c, 0x65, 0x43, 0x6f, + 0x75, 0x6e, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x66, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, + 0x6c, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x66, 0x52, 0x0f, 0x61, 0x78, 0x6c, 0x65, 0x43, 0x6f, + 0x75, 0x6e, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x66, 0x12, 0x40, 0x0a, 0x04, 0x74, 0x79, 0x70, + 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, + 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x41, 0x78, 0x6c, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x69, + 0x6e, 0x67, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x36, 0x0a, 0x16, 0x6f, + 0x6c, 0x64, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x53, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x16, 0x6f, 0x6c, 0x64, + 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x12, 0x30, 0x0a, 0x13, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, 0x69, 0x7a, + 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0d, + 0x52, 0x13, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x53, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x3b, 0x0a, 0x12, 0x54, 0x79, 0x70, 0x65, 0x44, 0x65, 0x74, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x10, 0x0a, 0x0c, 0x41, + 0x78, 0x6c, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x69, 0x6e, 0x67, 0x10, 0x00, 0x12, 0x13, 0x0a, + 0x0f, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x72, 0x79, + 0x10, 0x01, 0x22, 0xb8, 0x01, 0x0a, 0x1a, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x41, + 0x78, 0x6c, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x12, 0x22, 0x0a, 0x0c, 0x6f, 0x6c, 0x64, 0x62, 0x62, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, + 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x6f, 0x6c, 0x64, 0x62, 0x62, 0x43, 0x6f, + 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x12, 0x2e, 0x0a, 0x12, 0x6f, 0x6c, 0x64, 0x6e, 0x6f, 0x47, 0x65, + 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x12, 0x6f, 0x6c, 0x64, 0x6e, 0x6f, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1c, 0x0a, 0x09, 0x62, 0x62, 0x43, 0x6f, 0x6e, 0x6e, 0x65, + 0x63, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x09, 0x62, 0x62, 0x43, 0x6f, 0x6e, 0x6e, + 0x65, 0x63, 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x6e, 0x6f, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, + 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x0f, 0x6e, 0x6f, + 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x22, 0xc5, 0x07, + 0x0a, 0x07, 0x54, 0x75, 0x72, 0x6e, 0x6f, 0x75, 0x74, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, + 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x49, 0x6e, + 0x66, 0x6f, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, + 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x2a, + 0x0a, 0x06, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, + 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x50, 0x6f, 0x69, + 0x6e, 0x74, 0x52, 0x06, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x12, 0x2a, 0x0a, 0x06, 0x70, 0x6f, + 0x69, 0x6e, 0x74, 0x42, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x72, 0x61, + 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x06, + 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x42, 0x12, 0x2a, 0x0a, 0x06, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x43, + 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, + 0x44, 0x61, 0x74, 0x61, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x06, 0x70, 0x6f, 0x69, 0x6e, + 0x74, 0x43, 0x12, 0x2d, 0x0a, 0x05, 0x70, 0x61, 0x52, 0x65, 0x66, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, - 0x52, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x66, 0x52, 0x0f, 0x61, 0x78, 0x6c, 0x65, - 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x66, 0x12, 0x40, 0x0a, 0x04, 0x74, - 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x67, 0x72, 0x61, 0x70, - 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x41, 0x78, 0x6c, 0x65, 0x43, 0x6f, 0x75, 0x6e, - 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x30, 0x0a, - 0x13, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x13, 0x63, 0x65, 0x6e, 0x74, - 0x72, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, - 0x36, 0x0a, 0x16, 0x6e, 0x65, 0x77, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, 0x69, 0x7a, 0x65, - 0x64, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0d, 0x52, - 0x16, 0x6e, 0x65, 0x77, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x53, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x3b, 0x0a, 0x12, 0x54, 0x79, 0x70, 0x65, 0x44, - 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x10, 0x0a, - 0x0c, 0x41, 0x78, 0x6c, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x69, 0x6e, 0x67, 0x10, 0x00, 0x12, - 0x13, 0x0a, 0x0f, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x61, - 0x72, 0x79, 0x10, 0x01, 0x22, 0xb8, 0x01, 0x0a, 0x1a, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, - 0x65, 0x41, 0x78, 0x6c, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x12, 0x1c, 0x0a, 0x09, 0x62, 0x62, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x62, 0x62, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, - 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x6e, 0x6f, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x47, - 0x72, 0x6f, 0x75, 0x70, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x6e, 0x6f, 0x47, 0x65, - 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x22, 0x0a, 0x0c, 0x6e, - 0x65, 0x77, 0x62, 0x62, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, - 0x0d, 0x52, 0x0c, 0x6e, 0x65, 0x77, 0x62, 0x62, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x12, - 0x2e, 0x0a, 0x12, 0x6e, 0x65, 0x77, 0x6e, 0x6f, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x12, 0x6e, 0x65, 0x77, - 0x6e, 0x6f, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x22, - 0xc5, 0x07, 0x0a, 0x07, 0x54, 0x75, 0x72, 0x6e, 0x6f, 0x75, 0x74, 0x12, 0x2f, 0x0a, 0x06, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, - 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, - 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, - 0x12, 0x2a, 0x0a, 0x06, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x12, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x50, - 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x06, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x12, 0x2a, 0x0a, 0x06, - 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x42, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, - 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, - 0x52, 0x06, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x42, 0x12, 0x2a, 0x0a, 0x06, 0x70, 0x6f, 0x69, 0x6e, - 0x74, 0x43, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, - 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x06, 0x70, 0x6f, - 0x69, 0x6e, 0x74, 0x43, 0x12, 0x2d, 0x0a, 0x05, 0x70, 0x61, 0x52, 0x65, 0x66, 0x18, 0x09, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, - 0x61, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x66, 0x52, 0x05, 0x70, 0x61, - 0x52, 0x65, 0x66, 0x12, 0x2d, 0x0a, 0x05, 0x70, 0x62, 0x52, 0x65, 0x66, 0x18, 0x0a, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, - 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x66, 0x52, 0x05, 0x70, 0x62, 0x52, - 0x65, 0x66, 0x12, 0x2d, 0x0a, 0x05, 0x70, 0x63, 0x52, 0x65, 0x66, 0x18, 0x0b, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, - 0x52, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x66, 0x52, 0x05, 0x70, 0x63, 0x52, 0x65, - 0x66, 0x12, 0x46, 0x0a, 0x0f, 0x6b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x79, - 0x73, 0x74, 0x65, 0x6d, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x72, 0x61, - 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x4b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, - 0x65, 0x72, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x52, 0x0f, 0x6b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, - 0x74, 0x65, 0x72, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x12, 0x2a, 0x0a, 0x10, 0x70, 0x61, 0x54, - 0x72, 0x61, 0x63, 0x6b, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x0f, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x10, 0x70, 0x61, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x53, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x10, 0x70, 0x62, 0x54, 0x72, 0x61, 0x63, 0x6b, - 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x10, 0x70, 0x62, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, - 0x64, 0x12, 0x2a, 0x0a, 0x10, 0x70, 0x63, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x53, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x70, 0x63, 0x54, + 0x52, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x66, 0x52, 0x05, 0x70, 0x61, 0x52, 0x65, + 0x66, 0x12, 0x2d, 0x0a, 0x05, 0x70, 0x62, 0x52, 0x65, 0x66, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x52, + 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x66, 0x52, 0x05, 0x70, 0x62, 0x52, 0x65, 0x66, + 0x12, 0x2d, 0x0a, 0x05, 0x70, 0x63, 0x52, 0x65, 0x66, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, + 0x6c, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x66, 0x52, 0x05, 0x70, 0x63, 0x52, 0x65, 0x66, 0x12, + 0x46, 0x0a, 0x0f, 0x6b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x79, 0x73, 0x74, + 0x65, 0x6d, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, + 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x4b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, + 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x52, 0x0f, 0x6b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, + 0x72, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x12, 0x30, 0x0a, 0x13, 0x6f, 0x6c, 0x64, 0x70, 0x61, + 0x54, 0x72, 0x61, 0x63, 0x6b, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x0f, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x6f, 0x6c, 0x64, 0x70, 0x61, 0x54, 0x72, 0x61, 0x63, 0x6b, + 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x13, 0x6f, 0x6c, 0x64, + 0x70, 0x62, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, + 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x6f, 0x6c, 0x64, 0x70, 0x62, 0x54, 0x72, 0x61, + 0x63, 0x6b, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x13, 0x6f, + 0x6c, 0x64, 0x70, 0x63, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x49, 0x64, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x6f, 0x6c, 0x64, 0x70, 0x63, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x54, 0x0a, 0x11, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x75, 0x72, 0x6e, 0x6f, 0x75, 0x74, 0x2e, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x11, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x54, - 0x79, 0x70, 0x65, 0x12, 0x30, 0x0a, 0x13, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, 0x69, 0x7a, - 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x13, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x13, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x53, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x36, 0x0a, 0x16, 0x6e, 0x65, 0x77, 0x63, 0x65, 0x6e, 0x74, - 0x72, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, - 0x14, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x16, 0x6e, 0x65, 0x77, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, - 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x30, 0x0a, - 0x13, 0x6e, 0x65, 0x77, 0x70, 0x61, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x53, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x13, 0x6e, 0x65, 0x77, 0x70, - 0x61, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, - 0x30, 0x0a, 0x13, 0x6e, 0x65, 0x77, 0x70, 0x62, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x53, 0x65, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x13, 0x6e, 0x65, - 0x77, 0x70, 0x62, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, - 0x64, 0x12, 0x30, 0x0a, 0x13, 0x6e, 0x65, 0x77, 0x70, 0x63, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x53, - 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x13, - 0x6e, 0x65, 0x77, 0x70, 0x63, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x49, 0x64, 0x22, 0x42, 0x0a, 0x11, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x4d, 0x61, 0x63, - 0x68, 0x69, 0x6e, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x6e, 0x6b, 0x6e, - 0x6f, 0x77, 0x6e, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x5a, 0x44, 0x4a, 0x39, 0x5f, 0x53, 0x69, - 0x6e, 0x67, 0x6c, 0x65, 0x10, 0x01, 0x12, 0x0f, 0x0a, 0x0b, 0x5a, 0x44, 0x4a, 0x39, 0x5f, 0x44, - 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x10, 0x02, 0x22, 0xc3, 0x01, 0x0a, 0x0f, 0x4b, 0x69, 0x6c, 0x6f, - 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x12, 0x1c, 0x0a, 0x09, 0x6b, - 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, - 0x6b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x12, 0x2a, 0x0a, 0x10, 0x63, 0x6f, 0x6f, - 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x10, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x53, - 0x79, 0x73, 0x74, 0x65, 0x6d, 0x12, 0x44, 0x0a, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, - 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x4b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, - 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x20, 0x0a, 0x09, 0x44, - 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x08, 0x0a, 0x04, 0x4c, 0x45, 0x46, 0x54, - 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x52, 0x49, 0x47, 0x48, 0x54, 0x10, 0x01, 0x22, 0x93, 0x04, - 0x0a, 0x06, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, - 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x49, 0x6e, 0x66, - 0x6f, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, - 0x06, 0x6d, 0x69, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x6d, - 0x69, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x46, 0x0a, 0x0f, 0x6b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, - 0x65, 0x72, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, - 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x4b, 0x69, 0x6c, - 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x52, 0x0f, 0x6b, 0x69, - 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x12, 0x2f, 0x0a, - 0x06, 0x72, 0x65, 0x66, 0x44, 0x65, 0x76, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, + 0x79, 0x70, 0x65, 0x12, 0x36, 0x0a, 0x16, 0x6f, 0x6c, 0x64, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, + 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x13, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x16, 0x6f, 0x6c, 0x64, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, 0x69, + 0x7a, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x30, 0x0a, 0x13, 0x63, + 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x18, 0x14, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x13, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, + 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2a, 0x0a, + 0x10, 0x70, 0x61, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, + 0x64, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x10, 0x70, 0x61, 0x54, 0x72, 0x61, 0x63, 0x6b, + 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x10, 0x70, 0x62, 0x54, + 0x72, 0x61, 0x63, 0x6b, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x16, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x10, 0x70, 0x62, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x53, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x10, 0x70, 0x63, 0x54, 0x72, 0x61, 0x63, 0x6b, + 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x10, 0x70, 0x63, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, + 0x64, 0x22, 0x42, 0x0a, 0x11, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x4d, 0x61, 0x63, 0x68, 0x69, + 0x6e, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, + 0x6e, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x5a, 0x44, 0x4a, 0x39, 0x5f, 0x53, 0x69, 0x6e, 0x67, + 0x6c, 0x65, 0x10, 0x01, 0x12, 0x0f, 0x0a, 0x0b, 0x5a, 0x44, 0x4a, 0x39, 0x5f, 0x44, 0x6f, 0x75, + 0x62, 0x6c, 0x65, 0x10, 0x02, 0x22, 0xc3, 0x01, 0x0a, 0x0f, 0x4b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, + 0x74, 0x65, 0x72, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x12, 0x1c, 0x0a, 0x09, 0x6b, 0x69, 0x6c, + 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x6b, 0x69, + 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x12, 0x2a, 0x0a, 0x10, 0x63, 0x6f, 0x6f, 0x72, 0x64, + 0x69, 0x6e, 0x61, 0x74, 0x65, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x10, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x53, 0x79, 0x73, + 0x74, 0x65, 0x6d, 0x12, 0x44, 0x0a, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, + 0x44, 0x61, 0x74, 0x61, 0x2e, 0x4b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x79, + 0x73, 0x74, 0x65, 0x6d, 0x2e, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, + 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x20, 0x0a, 0x09, 0x44, 0x69, 0x72, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x08, 0x0a, 0x04, 0x4c, 0x45, 0x46, 0x54, 0x10, 0x00, + 0x12, 0x09, 0x0a, 0x05, 0x52, 0x49, 0x47, 0x48, 0x54, 0x10, 0x01, 0x22, 0x93, 0x04, 0x0a, 0x06, + 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, + 0x44, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, + 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6d, + 0x69, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x6d, 0x69, 0x72, + 0x72, 0x6f, 0x72, 0x12, 0x46, 0x0a, 0x0f, 0x6b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, + 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, + 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x4b, 0x69, 0x6c, 0x6f, 0x6d, + 0x65, 0x74, 0x65, 0x72, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x52, 0x0f, 0x6b, 0x69, 0x6c, 0x6f, + 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x12, 0x2f, 0x0a, 0x06, 0x72, + 0x65, 0x66, 0x44, 0x65, 0x76, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, + 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x65, + 0x64, 0x52, 0x65, 0x66, 0x52, 0x06, 0x72, 0x65, 0x66, 0x44, 0x65, 0x76, 0x12, 0x36, 0x0a, 0x16, + 0x6f, 0x6c, 0x64, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x53, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, 0x16, 0x6f, 0x6c, + 0x64, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x29, 0x0a, 0x02, 0x6d, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x19, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x53, + 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x2e, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x52, 0x02, 0x6d, 0x74, 0x12, + 0x34, 0x0a, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0c, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, + 0x2e, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x30, 0x0a, 0x13, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, + 0x69, 0x7a, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0d, 0x20, 0x03, + 0x28, 0x0d, 0x52, 0x13, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x53, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x68, 0x0a, 0x05, 0x4d, 0x6f, 0x64, 0x65, 0x6c, + 0x12, 0x06, 0x0a, 0x02, 0x48, 0x4c, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x48, 0x4c, 0x55, 0x5f, + 0x46, 0x55, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x48, 0x4c, 0x55, 0x5f, 0x44, 0x55, 0x5f, 0x59, + 0x59, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x48, 0x4c, 0x55, 0x5f, 0x59, 0x59, 0x10, 0x03, 0x12, + 0x10, 0x0a, 0x0c, 0x48, 0x4c, 0x55, 0x5f, 0x46, 0x4c, 0x5f, 0x44, 0x55, 0x5f, 0x59, 0x59, 0x10, + 0x04, 0x12, 0x0a, 0x0a, 0x06, 0x48, 0x4c, 0x55, 0x5f, 0x44, 0x55, 0x10, 0x05, 0x12, 0x06, 0x0a, + 0x02, 0x41, 0x42, 0x10, 0x06, 0x12, 0x0a, 0x0a, 0x06, 0x48, 0x42, 0x55, 0x5f, 0x44, 0x55, 0x10, + 0x07, 0x22, 0x8f, 0x07, 0x0a, 0x07, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2f, 0x0a, + 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, + 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x12, 0x12, + 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, + 0x64, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, + 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x06, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x2d, + 0x0a, 0x05, 0x70, 0x61, 0x52, 0x65, 0x66, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x6c, 0x61, - 0x74, 0x65, 0x64, 0x52, 0x65, 0x66, 0x52, 0x06, 0x72, 0x65, 0x66, 0x44, 0x65, 0x76, 0x12, 0x30, - 0x0a, 0x13, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x53, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, 0x13, 0x63, 0x65, 0x6e, - 0x74, 0x72, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x12, 0x29, 0x0a, 0x02, 0x6d, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x67, - 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, - 0x6c, 0x2e, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x52, 0x02, 0x6d, 0x74, 0x12, 0x34, 0x0a, 0x09, 0x64, - 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, - 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x44, 0x69, 0x72, - 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x36, 0x0a, 0x16, 0x6e, 0x65, 0x77, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, 0x69, - 0x7a, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, - 0x0d, 0x52, 0x16, 0x6e, 0x65, 0x77, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, 0x69, 0x7a, 0x65, - 0x64, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x68, 0x0a, 0x05, 0x4d, 0x6f, 0x64, - 0x65, 0x6c, 0x12, 0x06, 0x0a, 0x02, 0x48, 0x4c, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x48, 0x4c, - 0x55, 0x5f, 0x46, 0x55, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x48, 0x4c, 0x55, 0x5f, 0x44, 0x55, - 0x5f, 0x59, 0x59, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x48, 0x4c, 0x55, 0x5f, 0x59, 0x59, 0x10, - 0x03, 0x12, 0x10, 0x0a, 0x0c, 0x48, 0x4c, 0x55, 0x5f, 0x46, 0x4c, 0x5f, 0x44, 0x55, 0x5f, 0x59, - 0x59, 0x10, 0x04, 0x12, 0x0a, 0x0a, 0x06, 0x48, 0x4c, 0x55, 0x5f, 0x44, 0x55, 0x10, 0x05, 0x12, - 0x06, 0x0a, 0x02, 0x41, 0x42, 0x10, 0x06, 0x12, 0x0a, 0x0a, 0x06, 0x48, 0x42, 0x55, 0x5f, 0x44, - 0x55, 0x10, 0x07, 0x22, 0x8f, 0x07, 0x0a, 0x07, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x63, 0x6f, 0x64, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x03, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, - 0x74, 0x61, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x06, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, - 0x12, 0x2d, 0x0a, 0x05, 0x70, 0x61, 0x52, 0x65, 0x66, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, - 0x6c, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x66, 0x52, 0x05, 0x70, 0x61, 0x52, 0x65, 0x66, 0x12, - 0x2d, 0x0a, 0x05, 0x70, 0x62, 0x52, 0x65, 0x66, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, - 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x6c, - 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x66, 0x52, 0x05, 0x70, 0x62, 0x52, 0x65, 0x66, 0x12, 0x42, - 0x0a, 0x0b, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, - 0x61, 0x2e, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, - 0x70, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x61, 0x78, 0x6c, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x69, - 0x6e, 0x67, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x78, 0x6c, 0x65, 0x43, - 0x6f, 0x75, 0x6e, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x63, - 0x6b, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0e, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, - 0x12, 0x18, 0x0a, 0x07, 0x69, 0x73, 0x43, 0x75, 0x72, 0x76, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x07, 0x69, 0x73, 0x43, 0x75, 0x72, 0x76, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x65, - 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x0d, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, - 0x12, 0x30, 0x0a, 0x13, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x53, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x09, 0x52, 0x13, 0x63, + 0x74, 0x65, 0x64, 0x52, 0x65, 0x66, 0x52, 0x05, 0x70, 0x61, 0x52, 0x65, 0x66, 0x12, 0x2d, 0x0a, + 0x05, 0x70, 0x62, 0x52, 0x65, 0x66, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, + 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x74, + 0x65, 0x64, 0x52, 0x65, 0x66, 0x52, 0x05, 0x70, 0x62, 0x52, 0x65, 0x66, 0x12, 0x42, 0x0a, 0x0b, + 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x20, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, + 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, + 0x79, 0x70, 0x65, 0x52, 0x0b, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x2a, 0x0a, 0x10, 0x6f, 0x6c, 0x64, 0x61, 0x78, 0x6c, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x69, 0x6e, 0x67, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x6f, 0x6c, 0x64, 0x61, + 0x78, 0x6c, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x2c, 0x0a, 0x11, + 0x6f, 0x6c, 0x64, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, + 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x6f, 0x6c, 0x64, 0x74, 0x72, 0x61, 0x63, + 0x6b, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x69, 0x73, + 0x43, 0x75, 0x72, 0x76, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x43, + 0x75, 0x72, 0x76, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, + 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x73, 0x65, 0x67, + 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x36, 0x0a, 0x16, 0x6f, 0x6c, + 0x64, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x09, 0x52, 0x16, 0x6f, 0x6c, 0x64, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x5d, 0x0a, 0x16, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x52, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0e, 0x20, 0x01, @@ -5864,122 +5711,140 @@ var file_stationLayoutGraphics_proto_rawDesc = []byte{ 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x2a, 0x0a, 0x10, 0x6e, 0x65, 0x77, 0x61, 0x78, 0x6c, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x69, - 0x6e, 0x67, 0x73, 0x18, 0x11, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x10, 0x6e, 0x65, 0x77, 0x61, 0x78, - 0x6c, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x2c, 0x0a, 0x11, 0x6e, - 0x65, 0x77, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, - 0x18, 0x12, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x11, 0x6e, 0x65, 0x77, 0x74, 0x72, 0x61, 0x63, 0x6b, - 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x36, 0x0a, 0x16, 0x6e, 0x65, 0x77, - 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x18, 0x13, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x16, 0x6e, 0x65, 0x77, 0x63, 0x65, + 0x24, 0x0a, 0x0d, 0x61, 0x78, 0x6c, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x69, 0x6e, 0x67, 0x73, + 0x18, 0x11, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x0d, 0x61, 0x78, 0x6c, 0x65, 0x43, 0x6f, 0x75, 0x6e, + 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x53, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x74, + 0x72, 0x61, 0x63, 0x6b, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x30, 0x0a, + 0x13, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x13, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x13, 0x63, 0x65, 0x6e, 0x74, + 0x72, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, + 0x30, 0x0a, 0x0b, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0c, + 0x0a, 0x08, 0x50, 0x68, 0x79, 0x73, 0x69, 0x63, 0x61, 0x6c, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, + 0x54, 0x75, 0x72, 0x6e, 0x6f, 0x75, 0x74, 0x50, 0x68, 0x79, 0x73, 0x69, 0x63, 0x61, 0x6c, 0x10, + 0x02, 0x22, 0x30, 0x0a, 0x10, 0x52, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x08, 0x0a, 0x04, 0x41, 0x74, 0x6f, 0x42, 0x10, 0x00, 0x12, + 0x08, 0x0a, 0x04, 0x42, 0x74, 0x6f, 0x41, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x42, 0x4f, 0x54, + 0x48, 0x10, 0x02, 0x22, 0x98, 0x03, 0x0a, 0x0a, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x52, + 0x65, 0x66, 0x12, 0x42, 0x0a, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x22, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, + 0x44, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x66, 0x2e, + 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x64, 0x65, 0x76, 0x69, + 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6f, 0x6c, 0x64, 0x69, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6f, 0x6c, 0x64, 0x69, 0x64, 0x12, 0x42, 0x0a, 0x0a, + 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x22, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x52, + 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x66, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, + 0x50, 0x6f, 0x72, 0x74, 0x52, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, + 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, + 0x22, 0xb8, 0x01, 0x0a, 0x0a, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, + 0x0b, 0x0a, 0x07, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, + 0x54, 0x75, 0x72, 0x6e, 0x6f, 0x75, 0x74, 0x10, 0x01, 0x12, 0x0f, 0x0a, 0x0b, 0x54, 0x72, 0x61, + 0x69, 0x6e, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x10, 0x02, 0x12, 0x10, 0x0a, 0x0c, 0x41, 0x78, + 0x6c, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x69, 0x6e, 0x67, 0x10, 0x03, 0x12, 0x0f, 0x0a, 0x0b, + 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x6e, 0x6b, 0x10, 0x04, 0x12, 0x0a, 0x0a, + 0x06, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x10, 0x05, 0x12, 0x0b, 0x0a, 0x07, 0x73, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x10, 0x06, 0x12, 0x0e, 0x0a, 0x0a, 0x53, 0x63, 0x72, 0x65, 0x65, 0x6e, + 0x44, 0x6f, 0x6f, 0x72, 0x10, 0x07, 0x12, 0x14, 0x0a, 0x10, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, + 0x46, 0x61, 0x75, 0x6c, 0x74, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x10, 0x08, 0x12, 0x0c, 0x0a, 0x08, + 0x42, 0x72, 0x65, 0x61, 0x6b, 0x65, 0x72, 0x73, 0x10, 0x09, 0x12, 0x0f, 0x0a, 0x0b, 0x50, 0x6f, + 0x77, 0x65, 0x72, 0x53, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x10, 0x0a, 0x22, 0x21, 0x0a, 0x0a, 0x44, + 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x05, 0x0a, 0x01, 0x41, 0x10, 0x00, + 0x12, 0x05, 0x0a, 0x01, 0x42, 0x10, 0x01, 0x12, 0x05, 0x0a, 0x01, 0x43, 0x10, 0x02, 0x22, 0x51, + 0x0a, 0x0d, 0x54, 0x75, 0x72, 0x6e, 0x6f, 0x75, 0x74, 0x50, 0x6f, 0x73, 0x52, 0x65, 0x66, 0x12, + 0x14, 0x0a, 0x05, 0x6f, 0x6c, 0x64, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x6f, 0x6c, 0x64, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, + 0x64, 0x22, 0x76, 0x0a, 0x09, 0x53, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x2f, + 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, + 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x12, + 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, + 0x6f, 0x64, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, + 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x65, 0x70, 0x61, + 0x72, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x79, 0x70, 0x65, 0x22, 0xec, 0x03, 0x0a, 0x0b, 0x54, 0x72, + 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x65, 0x72, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, + 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x49, 0x6e, + 0x66, 0x6f, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, + 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x46, + 0x0a, 0x0f, 0x6b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x79, 0x73, 0x74, 0x65, + 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, + 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x4b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, + 0x79, 0x73, 0x74, 0x65, 0x6d, 0x52, 0x0f, 0x6b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, + 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x12, 0x3f, 0x0a, 0x0e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x70, + 0x6f, 0x6e, 0x64, 0x65, 0x72, 0x52, 0x65, 0x66, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, + 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x6c, + 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x66, 0x52, 0x0e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, + 0x6e, 0x64, 0x65, 0x72, 0x52, 0x65, 0x66, 0x12, 0x36, 0x0a, 0x16, 0x6f, 0x6c, 0x64, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x22, 0x30, 0x0a, 0x0b, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x0c, 0x0a, 0x08, 0x50, 0x68, 0x79, 0x73, 0x69, 0x63, 0x61, 0x6c, 0x10, 0x00, 0x12, 0x13, - 0x0a, 0x0f, 0x54, 0x75, 0x72, 0x6e, 0x6f, 0x75, 0x74, 0x50, 0x68, 0x79, 0x73, 0x69, 0x63, 0x61, - 0x6c, 0x10, 0x02, 0x22, 0x30, 0x0a, 0x10, 0x52, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x44, 0x69, - 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x08, 0x0a, 0x04, 0x41, 0x74, 0x6f, 0x42, 0x10, - 0x00, 0x12, 0x08, 0x0a, 0x04, 0x42, 0x74, 0x6f, 0x41, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x42, - 0x4f, 0x54, 0x48, 0x10, 0x02, 0x22, 0x98, 0x03, 0x0a, 0x0a, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x65, - 0x64, 0x52, 0x65, 0x66, 0x12, 0x42, 0x0a, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, - 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x22, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, - 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, - 0x66, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x64, 0x65, - 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x42, 0x0a, 0x0a, 0x64, 0x65, 0x76, 0x69, - 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x22, 0x2e, 0x67, - 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x74, - 0x65, 0x64, 0x52, 0x65, 0x66, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, - 0x52, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, - 0x6e, 0x65, 0x77, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6e, 0x65, 0x77, - 0x69, 0x64, 0x22, 0xb8, 0x01, 0x0a, 0x0a, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x10, 0x00, 0x12, 0x0b, - 0x0a, 0x07, 0x54, 0x75, 0x72, 0x6e, 0x6f, 0x75, 0x74, 0x10, 0x01, 0x12, 0x0f, 0x0a, 0x0b, 0x54, - 0x72, 0x61, 0x69, 0x6e, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x10, 0x02, 0x12, 0x10, 0x0a, 0x0c, - 0x41, 0x78, 0x6c, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x69, 0x6e, 0x67, 0x10, 0x03, 0x12, 0x0f, - 0x0a, 0x0b, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x6e, 0x6b, 0x10, 0x04, 0x12, - 0x0a, 0x0a, 0x06, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x10, 0x05, 0x12, 0x0b, 0x0a, 0x07, 0x73, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x10, 0x06, 0x12, 0x0e, 0x0a, 0x0a, 0x53, 0x63, 0x72, 0x65, - 0x65, 0x6e, 0x44, 0x6f, 0x6f, 0x72, 0x10, 0x07, 0x12, 0x14, 0x0a, 0x10, 0x53, 0x69, 0x67, 0x6e, - 0x61, 0x6c, 0x46, 0x61, 0x75, 0x6c, 0x74, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x10, 0x08, 0x12, 0x0c, - 0x0a, 0x08, 0x42, 0x72, 0x65, 0x61, 0x6b, 0x65, 0x72, 0x73, 0x10, 0x09, 0x12, 0x0f, 0x0a, 0x0b, - 0x50, 0x6f, 0x77, 0x65, 0x72, 0x53, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x10, 0x0a, 0x22, 0x21, 0x0a, - 0x0a, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x05, 0x0a, 0x01, 0x41, - 0x10, 0x00, 0x12, 0x05, 0x0a, 0x01, 0x42, 0x10, 0x01, 0x12, 0x05, 0x0a, 0x01, 0x43, 0x10, 0x02, - 0x22, 0x3b, 0x0a, 0x0d, 0x54, 0x75, 0x72, 0x6e, 0x6f, 0x75, 0x74, 0x50, 0x6f, 0x73, 0x52, 0x65, - 0x66, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, - 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x76, 0x0a, - 0x09, 0x53, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, - 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x49, - 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x63, - 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, - 0x24, 0x0a, 0x0d, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x79, 0x70, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, - 0x72, 0x54, 0x79, 0x70, 0x65, 0x22, 0xec, 0x03, 0x0a, 0x0b, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x70, - 0x6f, 0x6e, 0x64, 0x65, 0x72, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, - 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, - 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x46, 0x0a, 0x0f, 0x6b, 0x69, - 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, - 0x61, 0x2e, 0x4b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x79, 0x73, 0x74, 0x65, - 0x6d, 0x52, 0x0f, 0x6b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x79, 0x73, 0x74, - 0x65, 0x6d, 0x12, 0x3f, 0x0a, 0x0e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x65, - 0x72, 0x52, 0x65, 0x66, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, - 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, - 0x52, 0x65, 0x66, 0x52, 0x0e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x65, 0x72, - 0x52, 0x65, 0x66, 0x12, 0x30, 0x0a, 0x13, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, 0x69, 0x7a, - 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x13, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x53, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x66, 0x69, 0x78, 0x65, 0x64, 0x54, 0x65, - 0x6c, 0x65, 0x67, 0x72, 0x61, 0x6d, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x66, 0x69, - 0x78, 0x65, 0x64, 0x54, 0x65, 0x6c, 0x65, 0x67, 0x72, 0x61, 0x6d, 0x12, 0x40, 0x0a, 0x04, 0x74, - 0x79, 0x70, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x67, 0x72, 0x61, 0x70, - 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x6e, - 0x64, 0x65, 0x72, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x65, 0x72, 0x54, - 0x79, 0x70, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x36, 0x0a, - 0x16, 0x6e, 0x65, 0x77, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x53, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x16, 0x6e, - 0x65, 0x77, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x53, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x3d, 0x0a, 0x13, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, - 0x6e, 0x64, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x06, 0x0a, 0x02, - 0x46, 0x42, 0x10, 0x00, 0x12, 0x06, 0x0a, 0x02, 0x57, 0x42, 0x10, 0x01, 0x12, 0x06, 0x0a, 0x02, - 0x44, 0x42, 0x10, 0x02, 0x12, 0x06, 0x0a, 0x02, 0x56, 0x42, 0x10, 0x03, 0x12, 0x06, 0x0a, 0x02, - 0x49, 0x42, 0x10, 0x04, 0x22, 0xa1, 0x01, 0x0a, 0x09, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x52, - 0x65, 0x66, 0x12, 0x41, 0x0a, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, - 0x44, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x2e, 0x44, - 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, - 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x65, 0x77, 0x69, 0x64, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6e, 0x65, 0x77, 0x69, 0x64, 0x22, 0x2b, 0x0a, 0x0a, 0x44, - 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x75, 0x72, - 0x6e, 0x6f, 0x75, 0x74, 0x10, 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x41, 0x78, 0x6c, 0x65, 0x43, 0x6f, - 0x75, 0x6e, 0x74, 0x69, 0x6e, 0x67, 0x10, 0x01, 0x22, 0xcc, 0x02, 0x0a, 0x0b, 0x53, 0x65, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x6e, 0x6b, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, - 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x49, 0x6e, 0x66, - 0x6f, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x2a, 0x0a, - 0x06, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, - 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x50, 0x6f, 0x69, 0x6e, - 0x74, 0x52, 0x06, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x75, 0x70, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x02, 0x75, 0x70, 0x12, 0x30, 0x0a, 0x07, 0x61, 0x53, 0x69, - 0x6d, 0x52, 0x65, 0x66, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x72, 0x61, + 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x16, 0x6f, 0x6c, 0x64, 0x63, 0x65, 0x6e, 0x74, + 0x72, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, + 0x24, 0x0a, 0x0d, 0x66, 0x69, 0x78, 0x65, 0x64, 0x54, 0x65, 0x6c, 0x65, 0x67, 0x72, 0x61, 0x6d, + 0x18, 0x08, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x66, 0x69, 0x78, 0x65, 0x64, 0x54, 0x65, 0x6c, + 0x65, 0x67, 0x72, 0x61, 0x6d, 0x12, 0x40, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x09, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, + 0x61, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x65, 0x72, 0x2e, 0x54, 0x72, + 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x45, 0x6e, 0x75, + 0x6d, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x30, 0x0a, 0x13, 0x63, 0x65, 0x6e, 0x74, 0x72, + 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0a, + 0x20, 0x03, 0x28, 0x0d, 0x52, 0x13, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, 0x69, 0x7a, 0x65, + 0x64, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x3d, 0x0a, 0x13, 0x54, 0x72, 0x61, + 0x6e, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x45, 0x6e, 0x75, 0x6d, + 0x12, 0x06, 0x0a, 0x02, 0x46, 0x42, 0x10, 0x00, 0x12, 0x06, 0x0a, 0x02, 0x57, 0x42, 0x10, 0x01, + 0x12, 0x06, 0x0a, 0x02, 0x44, 0x42, 0x10, 0x02, 0x12, 0x06, 0x0a, 0x02, 0x56, 0x42, 0x10, 0x03, + 0x12, 0x06, 0x0a, 0x02, 0x49, 0x42, 0x10, 0x04, 0x22, 0xa1, 0x01, 0x0a, 0x09, 0x53, 0x69, 0x6d, + 0x70, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x12, 0x41, 0x0a, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, + 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x52, - 0x65, 0x66, 0x52, 0x07, 0x61, 0x53, 0x69, 0x6d, 0x52, 0x65, 0x66, 0x12, 0x30, 0x0a, 0x07, 0x62, - 0x53, 0x69, 0x6d, 0x52, 0x65, 0x66, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, - 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, - 0x65, 0x52, 0x65, 0x66, 0x52, 0x07, 0x62, 0x53, 0x69, 0x6d, 0x52, 0x65, 0x66, 0x12, 0x2b, 0x0a, - 0x04, 0x61, 0x52, 0x65, 0x66, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, - 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x65, - 0x64, 0x52, 0x65, 0x66, 0x52, 0x04, 0x61, 0x52, 0x65, 0x66, 0x12, 0x2b, 0x0a, 0x04, 0x62, 0x52, - 0x65, 0x66, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, - 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, - 0x66, 0x52, 0x04, 0x62, 0x52, 0x65, 0x66, 0x22, 0xa0, 0x02, 0x0a, 0x13, 0x41, 0x78, 0x6c, 0x65, - 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x65, 0x66, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x64, + 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6f, 0x6c, 0x64, + 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6f, 0x6c, 0x64, 0x69, 0x64, 0x12, + 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x22, + 0x2b, 0x0a, 0x0a, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, + 0x07, 0x54, 0x75, 0x72, 0x6e, 0x6f, 0x75, 0x74, 0x10, 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x41, 0x78, + 0x6c, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x69, 0x6e, 0x67, 0x10, 0x01, 0x22, 0xcc, 0x02, 0x0a, + 0x0b, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x6e, 0x6b, 0x12, 0x2f, 0x0a, 0x06, + 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, + 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x12, 0x12, 0x0a, + 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, + 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, + 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x06, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x0e, 0x0a, + 0x02, 0x75, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x02, 0x75, 0x70, 0x12, 0x30, 0x0a, + 0x07, 0x61, 0x53, 0x69, 0x6d, 0x52, 0x65, 0x66, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, + 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x69, 0x6d, + 0x70, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x52, 0x07, 0x61, 0x53, 0x69, 0x6d, 0x52, 0x65, 0x66, 0x12, + 0x30, 0x0a, 0x07, 0x62, 0x53, 0x69, 0x6d, 0x52, 0x65, 0x66, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x16, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x53, + 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x52, 0x07, 0x62, 0x53, 0x69, 0x6d, 0x52, 0x65, + 0x66, 0x12, 0x2b, 0x0a, 0x04, 0x61, 0x52, 0x65, 0x66, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, + 0x6c, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x66, 0x52, 0x04, 0x61, 0x52, 0x65, 0x66, 0x12, 0x2b, + 0x0a, 0x04, 0x62, 0x52, 0x65, 0x66, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, + 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x74, + 0x65, 0x64, 0x52, 0x65, 0x66, 0x52, 0x04, 0x62, 0x52, 0x65, 0x66, 0x22, 0xa0, 0x02, 0x0a, 0x13, + 0x41, 0x78, 0x6c, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, + 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x63, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x70, 0x6f, 0x69, 0x6e, + 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, + 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x06, 0x70, 0x6f, + 0x69, 0x6e, 0x74, 0x73, 0x12, 0x2d, 0x0a, 0x05, 0x70, 0x61, 0x52, 0x65, 0x66, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, + 0x61, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x66, 0x52, 0x05, 0x70, 0x61, + 0x52, 0x65, 0x66, 0x12, 0x2d, 0x0a, 0x05, 0x70, 0x62, 0x52, 0x65, 0x66, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, + 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x66, 0x52, 0x05, 0x70, 0x62, 0x52, + 0x65, 0x66, 0x12, 0x3a, 0x0a, 0x0a, 0x74, 0x75, 0x72, 0x6e, 0x6f, 0x75, 0x74, 0x50, 0x6f, 0x73, + 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, + 0x44, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x75, 0x72, 0x6e, 0x6f, 0x75, 0x74, 0x50, 0x6f, 0x73, 0x52, + 0x65, 0x66, 0x52, 0x0a, 0x74, 0x75, 0x72, 0x6e, 0x6f, 0x75, 0x74, 0x50, 0x6f, 0x73, 0x22, 0x93, + 0x02, 0x0a, 0x0c, 0x4c, 0x6f, 0x67, 0x69, 0x63, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, @@ -5987,319 +5852,275 @@ var file_stationLayoutGraphics_proto_rawDesc = []byte{ 0x63, 0x6f, 0x64, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x06, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, - 0x12, 0x2d, 0x0a, 0x05, 0x70, 0x61, 0x52, 0x65, 0x66, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, - 0x6c, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x66, 0x52, 0x05, 0x70, 0x61, 0x52, 0x65, 0x66, 0x12, - 0x2d, 0x0a, 0x05, 0x70, 0x62, 0x52, 0x65, 0x66, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, - 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x6c, - 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x66, 0x52, 0x05, 0x70, 0x62, 0x52, 0x65, 0x66, 0x12, 0x3a, - 0x0a, 0x0a, 0x74, 0x75, 0x72, 0x6e, 0x6f, 0x75, 0x74, 0x50, 0x6f, 0x73, 0x18, 0x06, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, - 0x2e, 0x54, 0x75, 0x72, 0x6e, 0x6f, 0x75, 0x74, 0x50, 0x6f, 0x73, 0x52, 0x65, 0x66, 0x52, 0x0a, - 0x74, 0x75, 0x72, 0x6e, 0x6f, 0x75, 0x74, 0x50, 0x6f, 0x73, 0x22, 0x93, 0x02, 0x0a, 0x0c, 0x4c, - 0x6f, 0x67, 0x69, 0x63, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2f, 0x0a, 0x06, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, - 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, - 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, - 0x12, 0x2a, 0x0a, 0x06, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x12, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x50, - 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x06, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x24, 0x0a, 0x0d, - 0x61, 0x78, 0x6c, 0x65, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x78, 0x6c, 0x65, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x75, 0x72, 0x6e, 0x6f, 0x75, 0x74, 0x49, 0x64, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x74, 0x75, 0x72, 0x6e, 0x6f, 0x75, 0x74, 0x49, 0x64, - 0x12, 0x2a, 0x0a, 0x10, 0x6e, 0x65, 0x77, 0x61, 0x78, 0x6c, 0x65, 0x53, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x10, 0x6e, 0x65, 0x77, 0x61, + 0x12, 0x2a, 0x0a, 0x10, 0x6f, 0x6c, 0x64, 0x61, 0x78, 0x6c, 0x65, 0x53, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x6f, 0x6c, 0x64, 0x61, 0x78, 0x6c, 0x65, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0c, - 0x6e, 0x65, 0x77, 0x74, 0x75, 0x72, 0x6e, 0x6f, 0x75, 0x74, 0x49, 0x64, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x0c, 0x6e, 0x65, 0x77, 0x74, 0x75, 0x72, 0x6e, 0x6f, 0x75, 0x74, 0x49, 0x64, - 0x22, 0xb5, 0x03, 0x0a, 0x0c, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, - 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x06, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, - 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x06, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x12, - 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, - 0x64, 0x65, 0x12, 0x3e, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x2a, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x54, - 0x72, 0x61, 0x63, 0x6b, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x54, 0x72, 0x61, 0x63, - 0x6b, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, - 0x70, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x64, 0x65, 0x73, - 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x2c, 0x0a, 0x11, - 0x74, 0x72, 0x61, 0x63, 0x6b, 0x4c, 0x6f, 0x67, 0x69, 0x63, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x11, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x4c, 0x6f, - 0x67, 0x69, 0x63, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x69, 0x73, - 0x43, 0x75, 0x72, 0x76, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x43, - 0x75, 0x72, 0x76, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, - 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x73, 0x65, 0x67, - 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x32, 0x0a, 0x14, 0x6e, 0x65, - 0x77, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x4c, 0x6f, 0x67, 0x69, 0x63, 0x53, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x14, 0x6e, 0x65, 0x77, 0x74, 0x72, 0x61, - 0x63, 0x6b, 0x4c, 0x6f, 0x67, 0x69, 0x63, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x28, - 0x0a, 0x10, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, - 0x70, 0x65, 0x12, 0x0a, 0x0a, 0x06, 0x4e, 0x4f, 0x52, 0x4d, 0x41, 0x4c, 0x10, 0x00, 0x12, 0x08, - 0x0a, 0x04, 0x46, 0x4f, 0x52, 0x4b, 0x10, 0x01, 0x22, 0x9c, 0x01, 0x0a, 0x11, 0x54, 0x72, 0x61, - 0x63, 0x6b, 0x4c, 0x6f, 0x67, 0x69, 0x63, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2f, - 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, - 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x12, - 0x2a, 0x0a, 0x06, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x12, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x50, 0x6f, - 0x69, 0x6e, 0x74, 0x52, 0x06, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x63, - 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, - 0x16, 0x0a, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0xca, 0x02, 0x0a, 0x0c, 0x53, 0x74, 0x6f, 0x70, - 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, - 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x49, 0x6e, 0x66, - 0x6f, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, - 0x04, 0x66, 0x6c, 0x69, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x66, 0x6c, 0x69, - 0x70, 0x12, 0x3e, 0x0a, 0x08, 0x63, 0x6f, 0x61, 0x63, 0x68, 0x4e, 0x75, 0x6d, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x22, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, - 0x61, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x43, - 0x6f, 0x61, 0x63, 0x68, 0x4e, 0x75, 0x6d, 0x52, 0x08, 0x63, 0x6f, 0x61, 0x63, 0x68, 0x4e, 0x75, - 0x6d, 0x12, 0x46, 0x0a, 0x0f, 0x6b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x79, - 0x73, 0x74, 0x65, 0x6d, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x72, 0x61, - 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x4b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, - 0x65, 0x72, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x52, 0x0f, 0x6b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, - 0x74, 0x65, 0x72, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x12, 0x2f, 0x0a, 0x06, 0x72, 0x65, 0x66, - 0x44, 0x65, 0x76, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, - 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x52, - 0x65, 0x66, 0x52, 0x06, 0x72, 0x65, 0x66, 0x44, 0x65, 0x76, 0x22, 0x28, 0x0a, 0x08, 0x43, 0x6f, - 0x61, 0x63, 0x68, 0x4e, 0x75, 0x6d, 0x12, 0x08, 0x0a, 0x04, 0x46, 0x6f, 0x75, 0x72, 0x10, 0x00, - 0x12, 0x07, 0x0a, 0x03, 0x53, 0x69, 0x78, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x69, 0x67, - 0x68, 0x74, 0x10, 0x02, 0x22, 0xed, 0x01, 0x0a, 0x0a, 0x53, 0x70, 0x6b, 0x73, 0x53, 0x77, 0x69, - 0x74, 0x63, 0x68, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, - 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x63, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x6c, 0x69, 0x70, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x66, 0x6c, 0x69, 0x70, 0x12, 0x20, 0x0a, 0x0b, - 0x72, 0x65, 0x66, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x0b, 0x72, 0x65, 0x66, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1a, - 0x0a, 0x08, 0x72, 0x65, 0x66, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x72, 0x65, 0x66, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x12, 0x26, 0x0a, 0x0e, 0x6e, 0x65, - 0x77, 0x72, 0x65, 0x66, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x08, 0x20, 0x03, - 0x28, 0x0d, 0x52, 0x0e, 0x6e, 0x65, 0x77, 0x72, 0x65, 0x66, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x6e, 0x65, 0x77, 0x72, 0x65, 0x66, 0x53, 0x74, 0x61, 0x6e, - 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x6e, 0x65, 0x77, 0x72, 0x65, 0x66, 0x53, - 0x74, 0x61, 0x6e, 0x64, 0x22, 0xa2, 0x01, 0x0a, 0x09, 0x45, 0x73, 0x62, 0x42, 0x75, 0x74, 0x74, + 0x6f, 0x6c, 0x64, 0x74, 0x75, 0x72, 0x6e, 0x6f, 0x75, 0x74, 0x49, 0x64, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0c, 0x6f, 0x6c, 0x64, 0x74, 0x75, 0x72, 0x6e, 0x6f, 0x75, 0x74, 0x49, 0x64, + 0x12, 0x24, 0x0a, 0x0d, 0x61, 0x78, 0x6c, 0x65, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, + 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x61, 0x78, 0x6c, 0x65, 0x53, 0x65, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x75, 0x72, 0x6e, 0x6f, 0x75, + 0x74, 0x49, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x74, 0x75, 0x72, 0x6e, 0x6f, + 0x75, 0x74, 0x49, 0x64, 0x22, 0xb5, 0x03, 0x0a, 0x0c, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x53, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, + 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, + 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x06, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, + 0x44, 0x61, 0x74, 0x61, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x06, 0x70, 0x6f, 0x69, 0x6e, + 0x74, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x3e, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2a, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, + 0x74, 0x61, 0x2e, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x54, 0x72, 0x61, 0x63, 0x6b, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, + 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0f, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65, + 0x12, 0x32, 0x0a, 0x14, 0x6f, 0x6c, 0x64, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x4c, 0x6f, 0x67, 0x69, + 0x63, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x14, + 0x6f, 0x6c, 0x64, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x4c, 0x6f, 0x67, 0x69, 0x63, 0x53, 0x65, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x69, 0x73, 0x43, 0x75, 0x72, 0x76, 0x65, 0x18, + 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x43, 0x75, 0x72, 0x76, 0x65, 0x12, 0x24, + 0x0a, 0x0d, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, + 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x43, + 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x11, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x4c, 0x6f, 0x67, + 0x69, 0x63, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0d, 0x52, + 0x11, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x4c, 0x6f, 0x67, 0x69, 0x63, 0x53, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x22, 0x28, 0x0a, 0x10, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x53, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0a, 0x0a, 0x06, 0x4e, 0x4f, 0x52, 0x4d, 0x41, 0x4c, + 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x46, 0x4f, 0x52, 0x4b, 0x10, 0x01, 0x22, 0x9c, 0x01, 0x0a, + 0x11, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x4c, 0x6f, 0x67, 0x69, 0x63, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x6c, 0x69, 0x70, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x66, 0x6c, 0x69, 0x70, 0x12, 0x1a, 0x0a, 0x08, 0x72, - 0x65, 0x66, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, - 0x65, 0x66, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x6e, 0x65, 0x77, 0x72, 0x65, - 0x66, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x6e, 0x65, - 0x77, 0x72, 0x65, 0x66, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x22, 0xe5, 0x01, 0x0a, 0x08, 0x47, 0x61, - 0x74, 0x65, 0x64, 0x42, 0x6f, 0x78, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x6d, 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x06, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, + 0x61, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x06, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, + 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, + 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0xca, 0x02, 0x0a, 0x0c, + 0x53, 0x74, 0x6f, 0x70, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2f, 0x0a, 0x06, + 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, + 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x12, 0x12, 0x0a, + 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, + 0x65, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x6c, 0x69, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x04, 0x66, 0x6c, 0x69, 0x70, 0x12, 0x3e, 0x0a, 0x08, 0x63, 0x6f, 0x61, 0x63, 0x68, 0x4e, 0x75, + 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x22, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, + 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x43, 0x6f, 0x61, 0x63, 0x68, 0x4e, 0x75, 0x6d, 0x52, 0x08, 0x63, 0x6f, 0x61, + 0x63, 0x68, 0x4e, 0x75, 0x6d, 0x12, 0x46, 0x0a, 0x0f, 0x6b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, + 0x65, 0x72, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, + 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x4b, 0x69, 0x6c, + 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x52, 0x0f, 0x6b, 0x69, + 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x12, 0x2f, 0x0a, + 0x06, 0x72, 0x65, 0x66, 0x44, 0x65, 0x76, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, + 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x6c, 0x61, + 0x74, 0x65, 0x64, 0x52, 0x65, 0x66, 0x52, 0x06, 0x72, 0x65, 0x66, 0x44, 0x65, 0x76, 0x22, 0x28, + 0x0a, 0x08, 0x43, 0x6f, 0x61, 0x63, 0x68, 0x4e, 0x75, 0x6d, 0x12, 0x08, 0x0a, 0x04, 0x46, 0x6f, + 0x75, 0x72, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x53, 0x69, 0x78, 0x10, 0x01, 0x12, 0x09, 0x0a, + 0x05, 0x45, 0x69, 0x67, 0x68, 0x74, 0x10, 0x02, 0x22, 0xed, 0x01, 0x0a, 0x0a, 0x53, 0x70, 0x6b, + 0x73, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, + 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, + 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, + 0x66, 0x6c, 0x69, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x66, 0x6c, 0x69, 0x70, + 0x12, 0x26, 0x0a, 0x0e, 0x6f, 0x6c, 0x64, 0x72, 0x65, 0x66, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x6f, 0x6c, 0x64, 0x72, 0x65, 0x66, + 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x6f, 0x6c, 0x64, 0x72, + 0x65, 0x66, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6f, + 0x6c, 0x64, 0x72, 0x65, 0x66, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, + 0x66, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0d, 0x52, + 0x0b, 0x72, 0x65, 0x66, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1a, 0x0a, 0x08, + 0x72, 0x65, 0x66, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, + 0x72, 0x65, 0x66, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x22, 0xa2, 0x01, 0x0a, 0x09, 0x45, 0x73, 0x62, + 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x6c, 0x69, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x66, 0x6c, 0x69, 0x70, 0x12, - 0x24, 0x0a, 0x0d, 0x72, 0x65, 0x66, 0x53, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x44, 0x6f, 0x6f, 0x72, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x72, 0x65, 0x66, 0x53, 0x63, 0x72, 0x65, 0x65, - 0x6e, 0x44, 0x6f, 0x6f, 0x72, 0x12, 0x2e, 0x0a, 0x12, 0x72, 0x65, 0x66, 0x47, 0x61, 0x74, 0x65, - 0x64, 0x42, 0x6f, 0x78, 0x4d, 0x61, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x12, 0x72, 0x65, 0x66, 0x47, 0x61, 0x74, 0x65, 0x64, 0x42, 0x6f, 0x78, 0x4d, 0x61, - 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x2a, 0x0a, 0x10, 0x6e, 0x65, 0x77, 0x72, 0x65, 0x66, 0x53, - 0x63, 0x72, 0x65, 0x65, 0x6e, 0x44, 0x6f, 0x6f, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x10, 0x6e, 0x65, 0x77, 0x72, 0x65, 0x66, 0x53, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x44, 0x6f, 0x6f, - 0x72, 0x22, 0x9e, 0x01, 0x0a, 0x0f, 0x53, 0x6c, 0x6f, 0x70, 0x65, 0x4b, 0x69, 0x6c, 0x6f, 0x4d, - 0x61, 0x72, 0x6b, 0x65, 0x72, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, - 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, - 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x46, 0x0a, 0x0f, 0x6b, 0x69, - 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x18, 0x04, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, - 0x61, 0x2e, 0x4b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x79, 0x73, 0x74, 0x65, - 0x6d, 0x52, 0x0f, 0x6b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x79, 0x73, 0x74, - 0x65, 0x6d, 0x22, 0xa2, 0x01, 0x0a, 0x13, 0x43, 0x75, 0x72, 0x76, 0x61, 0x74, 0x75, 0x72, 0x65, - 0x4b, 0x69, 0x6c, 0x6f, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, + 0x20, 0x0a, 0x0b, 0x6f, 0x6c, 0x64, 0x72, 0x65, 0x66, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6f, 0x6c, 0x64, 0x72, 0x65, 0x66, 0x53, 0x74, 0x61, 0x6e, + 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x66, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x08, 0x72, 0x65, 0x66, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x22, 0xe5, 0x01, + 0x0a, 0x08, 0x47, 0x61, 0x74, 0x65, 0x64, 0x42, 0x6f, 0x78, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, - 0x46, 0x0a, 0x0f, 0x6b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x79, 0x73, 0x74, - 0x65, 0x6d, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, - 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x4b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, - 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x52, 0x0f, 0x6b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, - 0x72, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x22, 0xbc, 0x01, 0x0a, 0x06, 0x42, 0x65, 0x61, 0x63, - 0x6f, 0x6e, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, - 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x32, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1e, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, - 0x61, 0x74, 0x61, 0x2e, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x2e, 0x42, 0x65, 0x61, 0x63, 0x6f, - 0x6e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x66, - 0x6c, 0x69, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x66, 0x6c, 0x69, 0x70, 0x22, - 0x25, 0x0a, 0x0a, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0a, 0x0a, - 0x06, 0x53, 0x74, 0x61, 0x74, 0x69, 0x63, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x79, 0x6e, - 0x61, 0x6d, 0x69, 0x63, 0x10, 0x01, 0x22, 0xd0, 0x01, 0x0a, 0x05, 0x53, 0x6c, 0x6f, 0x70, 0x65, - 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x43, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x12, 0x2a, 0x0a, 0x06, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, - 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x06, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x20, 0x0a, - 0x0b, 0x73, 0x6c, 0x6f, 0x70, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x11, 0x52, 0x0b, 0x73, 0x6c, 0x6f, 0x70, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, - 0x20, 0x0a, 0x0b, 0x72, 0x65, 0x66, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x18, 0x04, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x66, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, - 0x64, 0x12, 0x26, 0x0a, 0x0e, 0x6e, 0x65, 0x77, 0x72, 0x65, 0x66, 0x44, 0x65, 0x76, 0x69, 0x63, - 0x65, 0x49, 0x64, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x0e, 0x6e, 0x65, 0x77, 0x72, 0x65, - 0x66, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x22, 0xdc, 0x01, 0x0a, 0x09, 0x43, 0x75, - 0x72, 0x76, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, - 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, - 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x06, 0x70, 0x6f, 0x69, 0x6e, - 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, - 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x06, 0x70, 0x6f, - 0x69, 0x6e, 0x74, 0x73, 0x12, 0x28, 0x0a, 0x0f, 0x63, 0x75, 0x72, 0x76, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x11, 0x52, 0x0f, 0x63, - 0x75, 0x72, 0x76, 0x61, 0x74, 0x75, 0x72, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x20, - 0x0a, 0x0b, 0x72, 0x65, 0x66, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x18, 0x04, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x66, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, - 0x12, 0x26, 0x0a, 0x0e, 0x6e, 0x65, 0x77, 0x72, 0x65, 0x66, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, - 0x49, 0x64, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x0e, 0x6e, 0x65, 0x77, 0x72, 0x65, 0x66, - 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x22, 0xcb, 0x03, 0x0a, 0x0d, 0x43, 0x61, 0x6c, - 0x63, 0x75, 0x6c, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x6e, 0x6b, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, - 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x49, - 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x06, 0x70, - 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x72, - 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, - 0x06, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, - 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, - 0x39, 0x0a, 0x0b, 0x61, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x66, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, - 0x74, 0x61, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x66, 0x52, 0x0b, 0x61, - 0x52, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x66, 0x12, 0x39, 0x0a, 0x0b, 0x62, 0x52, - 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x66, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, - 0x6c, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x66, 0x52, 0x0b, 0x62, 0x52, 0x65, 0x6c, 0x61, 0x74, - 0x65, 0x64, 0x52, 0x65, 0x66, 0x12, 0x53, 0x0a, 0x0f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, - 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, - 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x61, 0x6c, - 0x63, 0x75, 0x6c, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x6e, 0x6b, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, - 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0f, 0x64, 0x65, 0x76, 0x69, 0x63, - 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, - 0x64, 0x65, 0x78, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, - 0x1a, 0x64, 0x0a, 0x0e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x65, - 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x65, - 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, - 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x65, 0x76, 0x69, - 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x22, 0xb7, 0x01, 0x0a, 0x0e, 0x44, 0x65, 0x70, 0x61, 0x72, - 0x74, 0x75, 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x72, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6d, + 0x12, 0x0a, 0x04, 0x66, 0x6c, 0x69, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x66, + 0x6c, 0x69, 0x70, 0x12, 0x2a, 0x0a, 0x10, 0x6f, 0x6c, 0x64, 0x72, 0x65, 0x66, 0x53, 0x63, 0x72, + 0x65, 0x65, 0x6e, 0x44, 0x6f, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x6f, + 0x6c, 0x64, 0x72, 0x65, 0x66, 0x53, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x44, 0x6f, 0x6f, 0x72, 0x12, + 0x2e, 0x0a, 0x12, 0x72, 0x65, 0x66, 0x47, 0x61, 0x74, 0x65, 0x64, 0x42, 0x6f, 0x78, 0x4d, 0x61, + 0x70, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x72, 0x65, 0x66, + 0x47, 0x61, 0x74, 0x65, 0x64, 0x42, 0x6f, 0x78, 0x4d, 0x61, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, + 0x24, 0x0a, 0x0d, 0x72, 0x65, 0x66, 0x53, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x44, 0x6f, 0x6f, 0x72, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x72, 0x65, 0x66, 0x53, 0x63, 0x72, 0x65, 0x65, + 0x6e, 0x44, 0x6f, 0x6f, 0x72, 0x22, 0x9e, 0x01, 0x0a, 0x0f, 0x53, 0x6c, 0x6f, 0x70, 0x65, 0x4b, + 0x69, 0x6c, 0x6f, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, - 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x1a, - 0x0a, 0x08, 0x72, 0x65, 0x66, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x72, 0x65, 0x66, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x72, 0x75, - 0x6e, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0c, 0x72, 0x75, 0x6e, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x20, - 0x0a, 0x0b, 0x6e, 0x65, 0x77, 0x72, 0x65, 0x66, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x6e, 0x65, 0x77, 0x72, 0x65, 0x66, 0x53, 0x74, 0x61, 0x6e, 0x64, - 0x22, 0xbc, 0x01, 0x0a, 0x0d, 0x41, 0x75, 0x74, 0x6f, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x42, - 0x6f, 0x78, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, - 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x6c, 0x69, 0x70, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x66, 0x6c, 0x69, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x69, - 0x6e, 0x64, 0x65, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, - 0x78, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x66, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x66, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x12, 0x20, 0x0a, - 0x0b, 0x6e, 0x65, 0x77, 0x72, 0x65, 0x66, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x0b, 0x6e, 0x65, 0x77, 0x72, 0x65, 0x66, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x22, - 0x79, 0x0a, 0x17, 0x55, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x49, 0x64, 0x4f, 0x66, 0x53, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x69, - 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x69, 0x74, 0x79, 0x12, 0x16, - 0x0a, 0x06, 0x6c, 0x69, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x6c, 0x69, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x32, 0x0a, 0x14, 0x6d, 0x61, 0x69, 0x6e, 0x43, 0x6f, - 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x6d, 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x69, - 0x6e, 0x61, 0x74, 0x65, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x22, 0x90, 0x01, 0x0a, 0x10, 0x4b, - 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x12, - 0x2e, 0x0a, 0x03, 0x6b, 0x6d, 0x41, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, + 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x46, + 0x0a, 0x0f, 0x6b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x79, 0x73, 0x74, 0x65, + 0x6d, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, + 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x4b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, + 0x79, 0x73, 0x74, 0x65, 0x6d, 0x52, 0x0f, 0x6b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, + 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x22, 0xa2, 0x01, 0x0a, 0x13, 0x43, 0x75, 0x72, 0x76, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x4b, 0x69, 0x6c, 0x6f, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x12, 0x2f, + 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, + 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x12, + 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, + 0x6f, 0x64, 0x65, 0x12, 0x46, 0x0a, 0x0f, 0x6b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, + 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x4b, 0x69, 0x6c, 0x6f, 0x6d, - 0x65, 0x74, 0x65, 0x72, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x52, 0x03, 0x6b, 0x6d, 0x41, 0x12, - 0x2e, 0x0a, 0x03, 0x6b, 0x6d, 0x42, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, - 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x4b, 0x69, 0x6c, 0x6f, 0x6d, - 0x65, 0x74, 0x65, 0x72, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x52, 0x03, 0x6b, 0x6d, 0x42, 0x12, - 0x1c, 0x0a, 0x09, 0x73, 0x61, 0x6d, 0x65, 0x54, 0x72, 0x65, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x09, 0x73, 0x61, 0x6d, 0x65, 0x54, 0x72, 0x65, 0x6e, 0x64, 0x22, 0xbd, 0x01, - 0x0a, 0x13, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x44, - 0x65, 0x76, 0x69, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x4e, 0x0a, 0x10, 0x63, 0x6f, 0x6d, - 0x62, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, - 0x61, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x74, 0x79, 0x70, 0x65, 0x52, 0x10, 0x63, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x12, 0x42, 0x0a, 0x0a, 0x64, 0x65, 0x76, - 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x22, 0x2e, - 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x6c, 0x61, - 0x74, 0x65, 0x64, 0x52, 0x65, 0x66, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, - 0x65, 0x52, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x22, 0x71, 0x0a, - 0x15, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x74, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x72, 0x65, - 0x66, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, - 0x72, 0x65, 0x66, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x6e, 0x65, - 0x77, 0x72, 0x65, 0x66, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, - 0x05, 0x52, 0x0d, 0x6e, 0x65, 0x77, 0x72, 0x65, 0x66, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, - 0x22, 0x88, 0x01, 0x0a, 0x10, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65, - 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x2e, 0x0a, 0x12, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, - 0x69, 0x7a, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x12, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x53, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x49, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x6e, 0x65, 0x77, 0x73, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x0d, 0x6e, 0x65, - 0x77, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x22, 0x9c, 0x02, 0x0a, 0x05, - 0x54, 0x72, 0x61, 0x69, 0x6e, 0x12, 0x3d, 0x0a, 0x0a, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x4d, 0x6f, - 0x64, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x67, 0x72, 0x61, 0x70, - 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x2e, 0x54, 0x72, - 0x61, 0x69, 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x52, 0x0a, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x4d, - 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x61, 0x72, 0x72, 0x69, 0x61, 0x67, 0x65, - 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x63, 0x61, - 0x72, 0x72, 0x69, 0x61, 0x67, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x20, 0x0a, 0x0b, - 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x20, - 0x0a, 0x0b, 0x6d, 0x69, 0x6e, 0x44, 0x69, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x0b, 0x6d, 0x69, 0x6e, 0x44, 0x69, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, - 0x12, 0x20, 0x0a, 0x0b, 0x6d, 0x61, 0x78, 0x44, 0x69, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x6d, 0x61, 0x78, 0x44, 0x69, 0x61, 0x6d, 0x65, 0x74, - 0x65, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x53, 0x65, 0x74, 0x73, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x53, 0x65, 0x74, 0x73, - 0x22, 0x28, 0x0a, 0x0a, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x05, - 0x0a, 0x01, 0x41, 0x10, 0x00, 0x12, 0x05, 0x0a, 0x01, 0x42, 0x10, 0x01, 0x12, 0x05, 0x0a, 0x01, - 0x43, 0x10, 0x02, 0x12, 0x05, 0x0a, 0x01, 0x44, 0x10, 0x03, 0x22, 0x49, 0x0a, 0x09, 0x4f, 0x74, - 0x68, 0x65, 0x72, 0x4c, 0x69, 0x6e, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x69, - 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x69, 0x64, 0x73, 0x12, 0x16, 0x0a, - 0x06, 0x6e, 0x65, 0x77, 0x69, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x06, 0x6e, - 0x65, 0x77, 0x69, 0x64, 0x73, 0x2a, 0x1d, 0x0a, 0x09, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x06, 0x0a, 0x02, 0x55, 0x50, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x44, 0x4f, - 0x57, 0x4e, 0x10, 0x01, 0x42, 0x55, 0x0a, 0x25, 0x63, 0x6c, 0x75, 0x62, 0x2e, 0x6a, 0x6f, 0x79, - 0x6c, 0x69, 0x6e, 0x6b, 0x2e, 0x62, 0x6a, 0x72, 0x74, 0x73, 0x73, 0x2e, 0x61, 0x74, 0x73, 0x2e, - 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x42, 0x13, 0x4c, - 0x61, 0x79, 0x6f, 0x75, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x73, 0x50, 0x72, 0x6f, - 0x74, 0x6f, 0x5a, 0x17, 0x2e, 0x2f, 0x74, 0x73, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x2f, - 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x62, 0x06, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x33, + 0x65, 0x74, 0x65, 0x72, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x52, 0x0f, 0x6b, 0x69, 0x6c, 0x6f, + 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x22, 0xbc, 0x01, 0x0a, 0x06, + 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, + 0x44, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, + 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x32, 0x0a, 0x04, 0x74, + 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1e, 0x2e, 0x67, 0x72, 0x61, 0x70, + 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x2e, 0x42, + 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, + 0x12, 0x0a, 0x04, 0x66, 0x6c, 0x69, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x66, + 0x6c, 0x69, 0x70, 0x22, 0x25, 0x0a, 0x0a, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x69, 0x63, 0x10, 0x00, 0x12, 0x0b, 0x0a, + 0x07, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x10, 0x01, 0x22, 0xd0, 0x01, 0x0a, 0x05, 0x53, + 0x6c, 0x6f, 0x70, 0x65, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, + 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x63, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x06, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, + 0x61, 0x74, 0x61, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x06, 0x70, 0x6f, 0x69, 0x6e, 0x74, + 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x6c, 0x6f, 0x70, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x11, 0x52, 0x0b, 0x73, 0x6c, 0x6f, 0x70, 0x65, 0x4e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x12, 0x26, 0x0a, 0x0e, 0x6f, 0x6c, 0x64, 0x72, 0x65, 0x66, 0x44, 0x65, 0x76, + 0x69, 0x63, 0x65, 0x49, 0x64, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x6f, 0x6c, 0x64, + 0x72, 0x65, 0x66, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x72, + 0x65, 0x66, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0d, + 0x52, 0x0b, 0x72, 0x65, 0x66, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x22, 0xdc, 0x01, + 0x0a, 0x09, 0x43, 0x75, 0x72, 0x76, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x2f, 0x0a, 0x06, 0x63, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, + 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x06, + 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, + 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, + 0x52, 0x06, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x28, 0x0a, 0x0f, 0x63, 0x75, 0x72, 0x76, + 0x61, 0x74, 0x75, 0x72, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x11, 0x52, 0x0f, 0x63, 0x75, 0x72, 0x76, 0x61, 0x74, 0x75, 0x72, 0x65, 0x4e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x12, 0x26, 0x0a, 0x0e, 0x6f, 0x6c, 0x64, 0x72, 0x65, 0x66, 0x44, 0x65, 0x76, 0x69, + 0x63, 0x65, 0x49, 0x64, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x6f, 0x6c, 0x64, 0x72, + 0x65, 0x66, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, + 0x66, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0d, 0x52, + 0x0b, 0x72, 0x65, 0x66, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x22, 0xb7, 0x01, 0x0a, + 0x0e, 0x44, 0x65, 0x70, 0x61, 0x72, 0x74, 0x75, 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x72, 0x12, + 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x63, 0x6f, 0x64, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x6f, 0x6c, 0x64, 0x72, 0x65, 0x66, 0x53, 0x74, + 0x61, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6f, 0x6c, 0x64, 0x72, 0x65, + 0x66, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x72, 0x75, 0x6e, 0x44, 0x69, 0x72, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x75, + 0x6e, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, + 0x66, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x72, 0x65, + 0x66, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x22, 0xbc, 0x01, 0x0a, 0x0d, 0x41, 0x75, 0x74, 0x6f, 0x52, + 0x65, 0x74, 0x75, 0x72, 0x6e, 0x42, 0x6f, 0x78, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, + 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x49, 0x6e, 0x66, + 0x6f, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, + 0x04, 0x66, 0x6c, 0x69, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x66, 0x6c, 0x69, + 0x70, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x20, 0x0a, 0x0b, 0x6f, 0x6c, 0x64, 0x72, 0x65, + 0x66, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6f, 0x6c, + 0x64, 0x72, 0x65, 0x66, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x66, + 0x53, 0x74, 0x61, 0x6e, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x72, 0x65, 0x66, + 0x53, 0x74, 0x61, 0x6e, 0x64, 0x22, 0x79, 0x0a, 0x17, 0x55, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x49, + 0x64, 0x4f, 0x66, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x61, 0x79, 0x6f, 0x75, 0x74, + 0x12, 0x12, 0x0a, 0x04, 0x63, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x63, 0x69, 0x74, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x69, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6c, 0x69, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x32, 0x0a, 0x14, + 0x6d, 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x53, 0x79, + 0x73, 0x74, 0x65, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x6d, 0x61, 0x69, 0x6e, + 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, + 0x22, 0x90, 0x01, 0x0a, 0x10, 0x4b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x43, 0x6f, + 0x6e, 0x76, 0x65, 0x72, 0x74, 0x12, 0x2e, 0x0a, 0x03, 0x6b, 0x6d, 0x41, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, + 0x2e, 0x4b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, + 0x52, 0x03, 0x6b, 0x6d, 0x41, 0x12, 0x2e, 0x0a, 0x03, 0x6b, 0x6d, 0x42, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, + 0x2e, 0x4b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, + 0x52, 0x03, 0x6b, 0x6d, 0x42, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x61, 0x6d, 0x65, 0x54, 0x72, 0x65, + 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x73, 0x61, 0x6d, 0x65, 0x54, 0x72, + 0x65, 0x6e, 0x64, 0x22, 0xbd, 0x01, 0x0a, 0x13, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x6c, 0x61, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, + 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, + 0x4e, 0x0a, 0x10, 0x63, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x74, 0x79, + 0x70, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x72, 0x61, 0x70, + 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, + 0x6d, 0x62, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x74, 0x79, 0x70, 0x65, 0x52, 0x10, 0x63, + 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x12, + 0x42, 0x0a, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x22, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, + 0x61, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x66, 0x2e, 0x44, 0x65, 0x76, + 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, + 0x79, 0x70, 0x65, 0x22, 0x71, 0x0a, 0x15, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6d, + 0x62, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x74, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, + 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, + 0x12, 0x24, 0x0a, 0x0d, 0x6f, 0x6c, 0x64, 0x72, 0x65, 0x66, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, + 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x6f, 0x6c, 0x64, 0x72, 0x65, 0x66, 0x44, + 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x72, 0x65, 0x66, 0x44, 0x65, 0x76, + 0x69, 0x63, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x0a, 0x72, 0x65, 0x66, 0x44, + 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x22, 0xbe, 0x01, 0x0a, 0x10, 0x53, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x34, 0x0a, 0x15, 0x6f, + 0x6c, 0x64, 0x43, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x53, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, 0x6f, 0x6c, 0x64, 0x43, + 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x24, 0x0a, 0x0d, 0x6f, 0x6c, 0x64, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, + 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x6f, 0x6c, 0x64, 0x73, 0x65, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x0a, 0x73, 0x65, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x12, 0x2e, 0x0a, 0x12, 0x63, 0x65, 0x6e, 0x74, 0x72, + 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x12, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, + 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x9c, 0x02, 0x0a, 0x05, 0x54, 0x72, 0x61, 0x69, + 0x6e, 0x12, 0x3d, 0x0a, 0x0a, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, + 0x61, 0x74, 0x61, 0x2e, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x2e, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x4d, + 0x6f, 0x64, 0x65, 0x6c, 0x52, 0x0a, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x6c, + 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x61, 0x72, 0x72, 0x69, 0x61, 0x67, 0x65, 0x4c, 0x65, 0x6e, 0x67, + 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x63, 0x61, 0x72, 0x72, 0x69, 0x61, + 0x67, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x20, 0x0a, 0x0b, 0x74, 0x6f, 0x74, 0x61, + 0x6c, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x74, + 0x6f, 0x74, 0x61, 0x6c, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x20, 0x0a, 0x0b, 0x6d, 0x69, + 0x6e, 0x44, 0x69, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x0b, 0x6d, 0x69, 0x6e, 0x44, 0x69, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x12, 0x20, 0x0a, 0x0b, + 0x6d, 0x61, 0x78, 0x44, 0x69, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x0b, 0x6d, 0x61, 0x78, 0x44, 0x69, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x12, 0x1c, + 0x0a, 0x09, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x53, 0x65, 0x74, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x53, 0x65, 0x74, 0x73, 0x22, 0x28, 0x0a, 0x0a, + 0x54, 0x72, 0x61, 0x69, 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x05, 0x0a, 0x01, 0x41, 0x10, + 0x00, 0x12, 0x05, 0x0a, 0x01, 0x42, 0x10, 0x01, 0x12, 0x05, 0x0a, 0x01, 0x43, 0x10, 0x02, 0x12, + 0x05, 0x0a, 0x01, 0x44, 0x10, 0x03, 0x22, 0x49, 0x0a, 0x09, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x4c, + 0x69, 0x6e, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x6c, 0x64, 0x69, 0x64, + 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x6f, 0x6c, 0x64, 0x69, 0x64, 0x73, 0x12, + 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x03, 0x69, 0x64, + 0x73, 0x2a, 0x1d, 0x0a, 0x09, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x06, + 0x0a, 0x02, 0x55, 0x50, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x44, 0x4f, 0x57, 0x4e, 0x10, 0x01, + 0x42, 0x55, 0x0a, 0x25, 0x63, 0x6c, 0x75, 0x62, 0x2e, 0x6a, 0x6f, 0x79, 0x6c, 0x69, 0x6e, 0x6b, + 0x2e, 0x62, 0x6a, 0x72, 0x74, 0x73, 0x73, 0x2e, 0x61, 0x74, 0x73, 0x2e, 0x76, 0x65, 0x72, 0x69, + 0x66, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x42, 0x13, 0x4c, 0x61, 0x79, 0x6f, 0x75, + 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x5a, 0x17, + 0x2e, 0x2f, 0x74, 0x73, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x2f, 0x67, 0x72, 0x61, 0x70, + 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -6315,7 +6136,7 @@ func file_stationLayoutGraphics_proto_rawDescGZIP() []byte { } var file_stationLayoutGraphics_proto_enumTypes = make([]protoimpl.EnumInfo, 17) -var file_stationLayoutGraphics_proto_msgTypes = make([]protoimpl.MessageInfo, 51) +var file_stationLayoutGraphics_proto_msgTypes = make([]protoimpl.MessageInfo, 49) var file_stationLayoutGraphics_proto_goTypes = []interface{}{ (Direction)(0), // 0: graphicData.Direction (Polygon_PolygonType)(0), // 1: graphicData.Polygon.PolygonType @@ -6374,23 +6195,21 @@ var file_stationLayoutGraphics_proto_goTypes = []interface{}{ (*Beacon)(nil), // 54: graphicData.Beacon (*Slope)(nil), // 55: graphicData.Slope (*Curvature)(nil), // 56: graphicData.Curvature - (*CalculateLink)(nil), // 57: graphicData.CalculateLink - (*DepartureTimer)(nil), // 58: graphicData.DepartureTimer - (*AutoReturnBox)(nil), // 59: graphicData.AutoReturnBox - (*UniqueIdOfStationLayout)(nil), // 60: graphicData.UniqueIdOfStationLayout - (*KilometerConvert)(nil), // 61: graphicData.KilometerConvert - (*StationRelateDevice)(nil), // 62: graphicData.StationRelateDevice - (*DeviceCombinationtype)(nil), // 63: graphicData.DeviceCombinationtype - (*SectionCodePoint)(nil), // 64: graphicData.SectionCodePoint - (*Train)(nil), // 65: graphicData.Train - (*OtherLine)(nil), // 66: graphicData.OtherLine - (*CalculateLink_DevicePosition)(nil), // 67: graphicData.CalculateLink.DevicePosition + (*DepartureTimer)(nil), // 57: graphicData.DepartureTimer + (*AutoReturnBox)(nil), // 58: graphicData.AutoReturnBox + (*UniqueIdOfStationLayout)(nil), // 59: graphicData.UniqueIdOfStationLayout + (*KilometerConvert)(nil), // 60: graphicData.KilometerConvert + (*StationRelateDevice)(nil), // 61: graphicData.StationRelateDevice + (*DeviceCombinationtype)(nil), // 62: graphicData.DeviceCombinationtype + (*SectionCodePoint)(nil), // 63: graphicData.SectionCodePoint + (*Train)(nil), // 64: graphicData.Train + (*OtherLine)(nil), // 65: graphicData.OtherLine } var file_stationLayoutGraphics_proto_depIdxs = []int32{ 18, // 0: graphicData.RtssGraphicStorage.canvas:type_name -> graphicData.Canvas 26, // 1: graphicData.RtssGraphicStorage.Platforms:type_name -> graphicData.Platform 30, // 2: graphicData.RtssGraphicStorage.stations:type_name -> graphicData.Station - 65, // 3: graphicData.RtssGraphicStorage.train:type_name -> graphicData.Train + 64, // 3: graphicData.RtssGraphicStorage.train:type_name -> graphicData.Train 36, // 4: graphicData.RtssGraphicStorage.signals:type_name -> graphicData.Signal 34, // 5: graphicData.RtssGraphicStorage.turnouts:type_name -> graphicData.Turnout 37, // 6: graphicData.RtssGraphicStorage.section:type_name -> graphicData.Section @@ -6407,132 +6226,126 @@ var file_stationLayoutGraphics_proto_depIdxs = []int32{ 51, // 17: graphicData.RtssGraphicStorage.gateBoxs:type_name -> graphicData.GatedBox 41, // 18: graphicData.RtssGraphicStorage.transponders:type_name -> graphicData.Transponder 55, // 19: graphicData.RtssGraphicStorage.slopes:type_name -> graphicData.Slope - 57, // 20: graphicData.RtssGraphicStorage.CalculateLink:type_name -> graphicData.CalculateLink - 52, // 21: graphicData.RtssGraphicStorage.slopeKiloMarker:type_name -> graphicData.SlopeKiloMarker - 53, // 22: graphicData.RtssGraphicStorage.curvatureKiloMarker:type_name -> graphicData.CurvatureKiloMarker - 56, // 23: graphicData.RtssGraphicStorage.curvatures:type_name -> graphicData.Curvature - 46, // 24: graphicData.RtssGraphicStorage.trackSections:type_name -> graphicData.TrackSection - 47, // 25: graphicData.RtssGraphicStorage.trackLogicSections:type_name -> graphicData.TrackLogicSection - 60, // 26: graphicData.RtssGraphicStorage.UniqueIdPrefix:type_name -> graphicData.UniqueIdOfStationLayout - 61, // 27: graphicData.RtssGraphicStorage.kilometerConvertList:type_name -> graphicData.KilometerConvert - 27, // 28: graphicData.RtssGraphicStorage.screenDoors:type_name -> graphicData.ScreenDoor - 62, // 29: graphicData.RtssGraphicStorage.stationRelateDeviceList:type_name -> graphicData.StationRelateDevice - 64, // 30: graphicData.RtssGraphicStorage.sectionCodePointList:type_name -> graphicData.SectionCodePoint - 28, // 31: graphicData.RtssGraphicStorage.screenDoorConfig:type_name -> graphicData.ScreenDoorConfig - 54, // 32: graphicData.RtssGraphicStorage.beacons:type_name -> graphicData.Beacon - 33, // 33: graphicData.RtssGraphicStorage.generateAxleCountingConfig:type_name -> graphicData.GenerateAxleCountingConfig - 58, // 34: graphicData.RtssGraphicStorage.departureTimers:type_name -> graphicData.DepartureTimer - 59, // 35: graphicData.RtssGraphicStorage.autoReturnBoxs:type_name -> graphicData.AutoReturnBox - 24, // 36: graphicData.RtssGraphicStorage.concentrationDividingLines:type_name -> graphicData.ConcentrationDividingLine - 66, // 37: graphicData.RtssGraphicStorage.otherLineList:type_name -> graphicData.OtherLine - 20, // 38: graphicData.Canvas.viewportTransform:type_name -> graphicData.Transform - 19, // 39: graphicData.Transform.position:type_name -> graphicData.Point - 19, // 40: graphicData.Transform.scale:type_name -> graphicData.Point - 19, // 41: graphicData.Transform.skew:type_name -> graphicData.Point - 20, // 42: graphicData.ChildTransform.transform:type_name -> graphicData.Transform - 20, // 43: graphicData.CommonInfo.transform:type_name -> graphicData.Transform - 21, // 44: graphicData.CommonInfo.childTransforms:type_name -> graphicData.ChildTransform - 22, // 45: graphicData.Polygon.common:type_name -> graphicData.CommonInfo - 1, // 46: graphicData.Polygon.polygonType:type_name -> graphicData.Polygon.PolygonType - 19, // 47: graphicData.Polygon.points:type_name -> graphicData.Point - 22, // 48: graphicData.ConcentrationDividingLine.common:type_name -> graphicData.CommonInfo - 19, // 49: graphicData.ConcentrationDividingLine.points:type_name -> graphicData.Point - 25, // 50: graphicData.ConcentrationDividingLine.nodeConWithSecs:type_name -> graphicData.NodeConWithSec - 38, // 51: graphicData.NodeConWithSec.leftSection:type_name -> graphicData.RelatedRef - 38, // 52: graphicData.NodeConWithSec.rightSection:type_name -> graphicData.RelatedRef - 22, // 53: graphicData.Platform.common:type_name -> graphicData.CommonInfo - 2, // 54: graphicData.Platform.type:type_name -> graphicData.Platform.TypeOfPlatform - 22, // 55: graphicData.ScreenDoor.common:type_name -> graphicData.CommonInfo - 29, // 56: graphicData.ScreenDoorConfig.screenDoorGroupList:type_name -> graphicData.ScreenDoorGroup - 22, // 57: graphicData.Station.common:type_name -> graphicData.CommonInfo - 35, // 58: graphicData.Station.kilometerSystem:type_name -> graphicData.KilometerSystem - 22, // 59: graphicData.TrainWindow.common:type_name -> graphicData.CommonInfo - 22, // 60: graphicData.AxleCounting.common:type_name -> graphicData.CommonInfo - 35, // 61: graphicData.AxleCounting.kilometerSystem:type_name -> graphicData.KilometerSystem - 38, // 62: graphicData.AxleCounting.axleCountingRef:type_name -> graphicData.RelatedRef - 3, // 63: graphicData.AxleCounting.type:type_name -> graphicData.AxleCounting.TypeDetectionPoint - 22, // 64: graphicData.Turnout.common:type_name -> graphicData.CommonInfo - 19, // 65: graphicData.Turnout.pointA:type_name -> graphicData.Point - 19, // 66: graphicData.Turnout.pointB:type_name -> graphicData.Point - 19, // 67: graphicData.Turnout.pointC:type_name -> graphicData.Point - 38, // 68: graphicData.Turnout.paRef:type_name -> graphicData.RelatedRef - 38, // 69: graphicData.Turnout.pbRef:type_name -> graphicData.RelatedRef - 38, // 70: graphicData.Turnout.pcRef:type_name -> graphicData.RelatedRef - 35, // 71: graphicData.Turnout.kilometerSystem:type_name -> graphicData.KilometerSystem - 4, // 72: graphicData.Turnout.switchMachineType:type_name -> graphicData.Turnout.SwitchMachineType - 5, // 73: graphicData.KilometerSystem.direction:type_name -> graphicData.KilometerSystem.Direction - 22, // 74: graphicData.Signal.common:type_name -> graphicData.CommonInfo - 35, // 75: graphicData.Signal.kilometerSystem:type_name -> graphicData.KilometerSystem - 38, // 76: graphicData.Signal.refDev:type_name -> graphicData.RelatedRef - 6, // 77: graphicData.Signal.mt:type_name -> graphicData.Signal.Model - 0, // 78: graphicData.Signal.direction:type_name -> graphicData.Direction - 22, // 79: graphicData.Section.common:type_name -> graphicData.CommonInfo - 19, // 80: graphicData.Section.points:type_name -> graphicData.Point - 38, // 81: graphicData.Section.paRef:type_name -> graphicData.RelatedRef - 38, // 82: graphicData.Section.pbRef:type_name -> graphicData.RelatedRef - 7, // 83: graphicData.Section.sectionType:type_name -> graphicData.Section.SectionType - 8, // 84: graphicData.Section.normalRunningDirection:type_name -> graphicData.Section.RunningDirection - 0, // 85: graphicData.Section.direction:type_name -> graphicData.Direction - 9, // 86: graphicData.RelatedRef.deviceType:type_name -> graphicData.RelatedRef.DeviceType - 10, // 87: graphicData.RelatedRef.devicePort:type_name -> graphicData.RelatedRef.DevicePort - 22, // 88: graphicData.Separator.common:type_name -> graphicData.CommonInfo - 22, // 89: graphicData.Transponder.common:type_name -> graphicData.CommonInfo - 35, // 90: graphicData.Transponder.kilometerSystem:type_name -> graphicData.KilometerSystem - 38, // 91: graphicData.Transponder.TransponderRef:type_name -> graphicData.RelatedRef - 11, // 92: graphicData.Transponder.type:type_name -> graphicData.Transponder.TransponderTypeEnum - 12, // 93: graphicData.SimpleRef.deviceType:type_name -> graphicData.SimpleRef.DeviceType - 22, // 94: graphicData.SectionLink.common:type_name -> graphicData.CommonInfo - 19, // 95: graphicData.SectionLink.points:type_name -> graphicData.Point - 42, // 96: graphicData.SectionLink.aSimRef:type_name -> graphicData.SimpleRef - 42, // 97: graphicData.SectionLink.bSimRef:type_name -> graphicData.SimpleRef - 38, // 98: graphicData.SectionLink.aRef:type_name -> graphicData.RelatedRef - 38, // 99: graphicData.SectionLink.bRef:type_name -> graphicData.RelatedRef - 22, // 100: graphicData.AxleCountingSection.common:type_name -> graphicData.CommonInfo - 19, // 101: graphicData.AxleCountingSection.points:type_name -> graphicData.Point - 38, // 102: graphicData.AxleCountingSection.paRef:type_name -> graphicData.RelatedRef - 38, // 103: graphicData.AxleCountingSection.pbRef:type_name -> graphicData.RelatedRef - 39, // 104: graphicData.AxleCountingSection.turnoutPos:type_name -> graphicData.TurnoutPosRef - 22, // 105: graphicData.LogicSection.common:type_name -> graphicData.CommonInfo - 19, // 106: graphicData.LogicSection.points:type_name -> graphicData.Point - 22, // 107: graphicData.TrackSection.common:type_name -> graphicData.CommonInfo - 19, // 108: graphicData.TrackSection.points:type_name -> graphicData.Point - 13, // 109: graphicData.TrackSection.type:type_name -> graphicData.TrackSection.TrackSectionType - 22, // 110: graphicData.TrackLogicSection.common:type_name -> graphicData.CommonInfo - 19, // 111: graphicData.TrackLogicSection.points:type_name -> graphicData.Point - 22, // 112: graphicData.StopPosition.common:type_name -> graphicData.CommonInfo - 14, // 113: graphicData.StopPosition.coachNum:type_name -> graphicData.StopPosition.CoachNum - 35, // 114: graphicData.StopPosition.kilometerSystem:type_name -> graphicData.KilometerSystem - 38, // 115: graphicData.StopPosition.refDev:type_name -> graphicData.RelatedRef - 22, // 116: graphicData.SpksSwitch.common:type_name -> graphicData.CommonInfo - 22, // 117: graphicData.EsbButton.common:type_name -> graphicData.CommonInfo - 22, // 118: graphicData.GatedBox.common:type_name -> graphicData.CommonInfo - 22, // 119: graphicData.SlopeKiloMarker.common:type_name -> graphicData.CommonInfo - 35, // 120: graphicData.SlopeKiloMarker.kilometerSystem:type_name -> graphicData.KilometerSystem - 22, // 121: graphicData.CurvatureKiloMarker.common:type_name -> graphicData.CommonInfo - 35, // 122: graphicData.CurvatureKiloMarker.kilometerSystem:type_name -> graphicData.KilometerSystem - 22, // 123: graphicData.Beacon.common:type_name -> graphicData.CommonInfo - 15, // 124: graphicData.Beacon.type:type_name -> graphicData.Beacon.BeaconType - 22, // 125: graphicData.Slope.common:type_name -> graphicData.CommonInfo - 19, // 126: graphicData.Slope.points:type_name -> graphicData.Point - 22, // 127: graphicData.Curvature.common:type_name -> graphicData.CommonInfo - 19, // 128: graphicData.Curvature.points:type_name -> graphicData.Point - 22, // 129: graphicData.CalculateLink.common:type_name -> graphicData.CommonInfo - 19, // 130: graphicData.CalculateLink.points:type_name -> graphicData.Point - 38, // 131: graphicData.CalculateLink.aRelatedRef:type_name -> graphicData.RelatedRef - 38, // 132: graphicData.CalculateLink.bRelatedRef:type_name -> graphicData.RelatedRef - 67, // 133: graphicData.CalculateLink.devicePositions:type_name -> graphicData.CalculateLink.DevicePosition - 22, // 134: graphicData.DepartureTimer.common:type_name -> graphicData.CommonInfo - 22, // 135: graphicData.AutoReturnBox.common:type_name -> graphicData.CommonInfo - 35, // 136: graphicData.KilometerConvert.kmA:type_name -> graphicData.KilometerSystem - 35, // 137: graphicData.KilometerConvert.kmB:type_name -> graphicData.KilometerSystem - 63, // 138: graphicData.StationRelateDevice.combinationtypes:type_name -> graphicData.DeviceCombinationtype - 9, // 139: graphicData.StationRelateDevice.deviceType:type_name -> graphicData.RelatedRef.DeviceType - 16, // 140: graphicData.Train.trainModel:type_name -> graphicData.Train.TrainModel - 141, // [141:141] is the sub-list for method output_type - 141, // [141:141] is the sub-list for method input_type - 141, // [141:141] is the sub-list for extension type_name - 141, // [141:141] is the sub-list for extension extendee - 0, // [0:141] is the sub-list for field type_name + 52, // 20: graphicData.RtssGraphicStorage.slopeKiloMarker:type_name -> graphicData.SlopeKiloMarker + 53, // 21: graphicData.RtssGraphicStorage.curvatureKiloMarker:type_name -> graphicData.CurvatureKiloMarker + 56, // 22: graphicData.RtssGraphicStorage.curvatures:type_name -> graphicData.Curvature + 46, // 23: graphicData.RtssGraphicStorage.trackSections:type_name -> graphicData.TrackSection + 47, // 24: graphicData.RtssGraphicStorage.trackLogicSections:type_name -> graphicData.TrackLogicSection + 59, // 25: graphicData.RtssGraphicStorage.UniqueIdPrefix:type_name -> graphicData.UniqueIdOfStationLayout + 60, // 26: graphicData.RtssGraphicStorage.kilometerConvertList:type_name -> graphicData.KilometerConvert + 27, // 27: graphicData.RtssGraphicStorage.screenDoors:type_name -> graphicData.ScreenDoor + 61, // 28: graphicData.RtssGraphicStorage.stationRelateDeviceList:type_name -> graphicData.StationRelateDevice + 63, // 29: graphicData.RtssGraphicStorage.sectionCodePointList:type_name -> graphicData.SectionCodePoint + 28, // 30: graphicData.RtssGraphicStorage.screenDoorConfig:type_name -> graphicData.ScreenDoorConfig + 54, // 31: graphicData.RtssGraphicStorage.beacons:type_name -> graphicData.Beacon + 33, // 32: graphicData.RtssGraphicStorage.generateAxleCountingConfig:type_name -> graphicData.GenerateAxleCountingConfig + 57, // 33: graphicData.RtssGraphicStorage.departureTimers:type_name -> graphicData.DepartureTimer + 58, // 34: graphicData.RtssGraphicStorage.autoReturnBoxs:type_name -> graphicData.AutoReturnBox + 24, // 35: graphicData.RtssGraphicStorage.concentrationDividingLines:type_name -> graphicData.ConcentrationDividingLine + 65, // 36: graphicData.RtssGraphicStorage.otherLineList:type_name -> graphicData.OtherLine + 20, // 37: graphicData.Canvas.viewportTransform:type_name -> graphicData.Transform + 19, // 38: graphicData.Transform.position:type_name -> graphicData.Point + 19, // 39: graphicData.Transform.scale:type_name -> graphicData.Point + 19, // 40: graphicData.Transform.skew:type_name -> graphicData.Point + 20, // 41: graphicData.ChildTransform.transform:type_name -> graphicData.Transform + 20, // 42: graphicData.CommonInfo.transform:type_name -> graphicData.Transform + 21, // 43: graphicData.CommonInfo.childTransforms:type_name -> graphicData.ChildTransform + 22, // 44: graphicData.Polygon.common:type_name -> graphicData.CommonInfo + 1, // 45: graphicData.Polygon.polygonType:type_name -> graphicData.Polygon.PolygonType + 19, // 46: graphicData.Polygon.points:type_name -> graphicData.Point + 22, // 47: graphicData.ConcentrationDividingLine.common:type_name -> graphicData.CommonInfo + 19, // 48: graphicData.ConcentrationDividingLine.points:type_name -> graphicData.Point + 25, // 49: graphicData.ConcentrationDividingLine.nodeConWithSecs:type_name -> graphicData.NodeConWithSec + 38, // 50: graphicData.NodeConWithSec.leftSection:type_name -> graphicData.RelatedRef + 38, // 51: graphicData.NodeConWithSec.rightSection:type_name -> graphicData.RelatedRef + 22, // 52: graphicData.Platform.common:type_name -> graphicData.CommonInfo + 2, // 53: graphicData.Platform.type:type_name -> graphicData.Platform.TypeOfPlatform + 22, // 54: graphicData.ScreenDoor.common:type_name -> graphicData.CommonInfo + 29, // 55: graphicData.ScreenDoorConfig.screenDoorGroupList:type_name -> graphicData.ScreenDoorGroup + 22, // 56: graphicData.Station.common:type_name -> graphicData.CommonInfo + 35, // 57: graphicData.Station.kilometerSystem:type_name -> graphicData.KilometerSystem + 22, // 58: graphicData.TrainWindow.common:type_name -> graphicData.CommonInfo + 22, // 59: graphicData.AxleCounting.common:type_name -> graphicData.CommonInfo + 35, // 60: graphicData.AxleCounting.kilometerSystem:type_name -> graphicData.KilometerSystem + 38, // 61: graphicData.AxleCounting.axleCountingRef:type_name -> graphicData.RelatedRef + 3, // 62: graphicData.AxleCounting.type:type_name -> graphicData.AxleCounting.TypeDetectionPoint + 22, // 63: graphicData.Turnout.common:type_name -> graphicData.CommonInfo + 19, // 64: graphicData.Turnout.pointA:type_name -> graphicData.Point + 19, // 65: graphicData.Turnout.pointB:type_name -> graphicData.Point + 19, // 66: graphicData.Turnout.pointC:type_name -> graphicData.Point + 38, // 67: graphicData.Turnout.paRef:type_name -> graphicData.RelatedRef + 38, // 68: graphicData.Turnout.pbRef:type_name -> graphicData.RelatedRef + 38, // 69: graphicData.Turnout.pcRef:type_name -> graphicData.RelatedRef + 35, // 70: graphicData.Turnout.kilometerSystem:type_name -> graphicData.KilometerSystem + 4, // 71: graphicData.Turnout.switchMachineType:type_name -> graphicData.Turnout.SwitchMachineType + 5, // 72: graphicData.KilometerSystem.direction:type_name -> graphicData.KilometerSystem.Direction + 22, // 73: graphicData.Signal.common:type_name -> graphicData.CommonInfo + 35, // 74: graphicData.Signal.kilometerSystem:type_name -> graphicData.KilometerSystem + 38, // 75: graphicData.Signal.refDev:type_name -> graphicData.RelatedRef + 6, // 76: graphicData.Signal.mt:type_name -> graphicData.Signal.Model + 0, // 77: graphicData.Signal.direction:type_name -> graphicData.Direction + 22, // 78: graphicData.Section.common:type_name -> graphicData.CommonInfo + 19, // 79: graphicData.Section.points:type_name -> graphicData.Point + 38, // 80: graphicData.Section.paRef:type_name -> graphicData.RelatedRef + 38, // 81: graphicData.Section.pbRef:type_name -> graphicData.RelatedRef + 7, // 82: graphicData.Section.sectionType:type_name -> graphicData.Section.SectionType + 8, // 83: graphicData.Section.normalRunningDirection:type_name -> graphicData.Section.RunningDirection + 0, // 84: graphicData.Section.direction:type_name -> graphicData.Direction + 9, // 85: graphicData.RelatedRef.deviceType:type_name -> graphicData.RelatedRef.DeviceType + 10, // 86: graphicData.RelatedRef.devicePort:type_name -> graphicData.RelatedRef.DevicePort + 22, // 87: graphicData.Separator.common:type_name -> graphicData.CommonInfo + 22, // 88: graphicData.Transponder.common:type_name -> graphicData.CommonInfo + 35, // 89: graphicData.Transponder.kilometerSystem:type_name -> graphicData.KilometerSystem + 38, // 90: graphicData.Transponder.TransponderRef:type_name -> graphicData.RelatedRef + 11, // 91: graphicData.Transponder.type:type_name -> graphicData.Transponder.TransponderTypeEnum + 12, // 92: graphicData.SimpleRef.deviceType:type_name -> graphicData.SimpleRef.DeviceType + 22, // 93: graphicData.SectionLink.common:type_name -> graphicData.CommonInfo + 19, // 94: graphicData.SectionLink.points:type_name -> graphicData.Point + 42, // 95: graphicData.SectionLink.aSimRef:type_name -> graphicData.SimpleRef + 42, // 96: graphicData.SectionLink.bSimRef:type_name -> graphicData.SimpleRef + 38, // 97: graphicData.SectionLink.aRef:type_name -> graphicData.RelatedRef + 38, // 98: graphicData.SectionLink.bRef:type_name -> graphicData.RelatedRef + 22, // 99: graphicData.AxleCountingSection.common:type_name -> graphicData.CommonInfo + 19, // 100: graphicData.AxleCountingSection.points:type_name -> graphicData.Point + 38, // 101: graphicData.AxleCountingSection.paRef:type_name -> graphicData.RelatedRef + 38, // 102: graphicData.AxleCountingSection.pbRef:type_name -> graphicData.RelatedRef + 39, // 103: graphicData.AxleCountingSection.turnoutPos:type_name -> graphicData.TurnoutPosRef + 22, // 104: graphicData.LogicSection.common:type_name -> graphicData.CommonInfo + 19, // 105: graphicData.LogicSection.points:type_name -> graphicData.Point + 22, // 106: graphicData.TrackSection.common:type_name -> graphicData.CommonInfo + 19, // 107: graphicData.TrackSection.points:type_name -> graphicData.Point + 13, // 108: graphicData.TrackSection.type:type_name -> graphicData.TrackSection.TrackSectionType + 22, // 109: graphicData.TrackLogicSection.common:type_name -> graphicData.CommonInfo + 19, // 110: graphicData.TrackLogicSection.points:type_name -> graphicData.Point + 22, // 111: graphicData.StopPosition.common:type_name -> graphicData.CommonInfo + 14, // 112: graphicData.StopPosition.coachNum:type_name -> graphicData.StopPosition.CoachNum + 35, // 113: graphicData.StopPosition.kilometerSystem:type_name -> graphicData.KilometerSystem + 38, // 114: graphicData.StopPosition.refDev:type_name -> graphicData.RelatedRef + 22, // 115: graphicData.SpksSwitch.common:type_name -> graphicData.CommonInfo + 22, // 116: graphicData.EsbButton.common:type_name -> graphicData.CommonInfo + 22, // 117: graphicData.GatedBox.common:type_name -> graphicData.CommonInfo + 22, // 118: graphicData.SlopeKiloMarker.common:type_name -> graphicData.CommonInfo + 35, // 119: graphicData.SlopeKiloMarker.kilometerSystem:type_name -> graphicData.KilometerSystem + 22, // 120: graphicData.CurvatureKiloMarker.common:type_name -> graphicData.CommonInfo + 35, // 121: graphicData.CurvatureKiloMarker.kilometerSystem:type_name -> graphicData.KilometerSystem + 22, // 122: graphicData.Beacon.common:type_name -> graphicData.CommonInfo + 15, // 123: graphicData.Beacon.type:type_name -> graphicData.Beacon.BeaconType + 22, // 124: graphicData.Slope.common:type_name -> graphicData.CommonInfo + 19, // 125: graphicData.Slope.points:type_name -> graphicData.Point + 22, // 126: graphicData.Curvature.common:type_name -> graphicData.CommonInfo + 19, // 127: graphicData.Curvature.points:type_name -> graphicData.Point + 22, // 128: graphicData.DepartureTimer.common:type_name -> graphicData.CommonInfo + 22, // 129: graphicData.AutoReturnBox.common:type_name -> graphicData.CommonInfo + 35, // 130: graphicData.KilometerConvert.kmA:type_name -> graphicData.KilometerSystem + 35, // 131: graphicData.KilometerConvert.kmB:type_name -> graphicData.KilometerSystem + 62, // 132: graphicData.StationRelateDevice.combinationtypes:type_name -> graphicData.DeviceCombinationtype + 9, // 133: graphicData.StationRelateDevice.deviceType:type_name -> graphicData.RelatedRef.DeviceType + 16, // 134: graphicData.Train.trainModel:type_name -> graphicData.Train.TrainModel + 135, // [135:135] is the sub-list for method output_type + 135, // [135:135] is the sub-list for method input_type + 135, // [135:135] is the sub-list for extension type_name + 135, // [135:135] is the sub-list for extension extendee + 0, // [0:135] is the sub-list for field type_name } func init() { file_stationLayoutGraphics_proto_init() } @@ -7022,18 +6835,6 @@ func file_stationLayoutGraphics_proto_init() { } } file_stationLayoutGraphics_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CalculateLink); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_stationLayoutGraphics_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DepartureTimer); i { case 0: return &v.state @@ -7045,7 +6846,7 @@ func file_stationLayoutGraphics_proto_init() { return nil } } - file_stationLayoutGraphics_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { + file_stationLayoutGraphics_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*AutoReturnBox); i { case 0: return &v.state @@ -7057,7 +6858,7 @@ func file_stationLayoutGraphics_proto_init() { return nil } } - file_stationLayoutGraphics_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { + file_stationLayoutGraphics_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UniqueIdOfStationLayout); i { case 0: return &v.state @@ -7069,7 +6870,7 @@ func file_stationLayoutGraphics_proto_init() { return nil } } - file_stationLayoutGraphics_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { + file_stationLayoutGraphics_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*KilometerConvert); i { case 0: return &v.state @@ -7081,7 +6882,7 @@ func file_stationLayoutGraphics_proto_init() { return nil } } - file_stationLayoutGraphics_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { + file_stationLayoutGraphics_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StationRelateDevice); i { case 0: return &v.state @@ -7093,7 +6894,7 @@ func file_stationLayoutGraphics_proto_init() { return nil } } - file_stationLayoutGraphics_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { + file_stationLayoutGraphics_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DeviceCombinationtype); i { case 0: return &v.state @@ -7105,7 +6906,7 @@ func file_stationLayoutGraphics_proto_init() { return nil } } - file_stationLayoutGraphics_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { + file_stationLayoutGraphics_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SectionCodePoint); i { case 0: return &v.state @@ -7117,7 +6918,7 @@ func file_stationLayoutGraphics_proto_init() { return nil } } - file_stationLayoutGraphics_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { + file_stationLayoutGraphics_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Train); i { case 0: return &v.state @@ -7129,7 +6930,7 @@ func file_stationLayoutGraphics_proto_init() { return nil } } - file_stationLayoutGraphics_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { + file_stationLayoutGraphics_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*OtherLine); i { case 0: return &v.state @@ -7141,18 +6942,6 @@ func file_stationLayoutGraphics_proto_init() { return nil } } - file_stationLayoutGraphics_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CalculateLink_DevicePosition); 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{ @@ -7160,7 +6949,7 @@ func file_stationLayoutGraphics_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_stationLayoutGraphics_proto_rawDesc, NumEnums: 17, - NumMessages: 51, + NumMessages: 49, NumExtensions: 0, NumServices: 0, }, diff --git a/ts/protos/state/device_state.pb.go b/ts/protos/state/device_state.pb.go index b865689..a0953f6 100644 --- a/ts/protos/state/device_state.pb.go +++ b/ts/protos/state/device_state.pb.go @@ -208,7 +208,7 @@ type LinkState struct { unknownFields protoimpl.UnknownFields // link索引 - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Id uint32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` // link上的列车id列表 TrainId []string `protobuf:"bytes,2,rep,name=trainId,proto3" json:"trainId,omitempty"` } @@ -245,11 +245,11 @@ func (*LinkState) Descriptor() ([]byte, []int) { return file_device_state_proto_rawDescGZIP(), []int{0} } -func (x *LinkState) GetId() string { +func (x *LinkState) GetId() uint32 { if x != nil { return x.Id } - return "" + return 0 } func (x *LinkState) GetTrainId() []string { @@ -266,7 +266,7 @@ type SectionState struct { unknownFields protoimpl.UnknownFields // 区段索引 - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Id uint32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` // 区段占用 // true-占用;false-出清 Occupied bool `protobuf:"varint,3,opt,name=occupied,proto3" json:"occupied,omitempty"` @@ -306,11 +306,11 @@ func (*SectionState) Descriptor() ([]byte, []int) { return file_device_state_proto_rawDescGZIP(), []int{1} } -func (x *SectionState) GetId() string { +func (x *SectionState) GetId() uint32 { if x != nil { return x.Id } - return "" + return 0 } func (x *SectionState) GetOccupied() bool { @@ -334,7 +334,7 @@ type SwitchState struct { unknownFields protoimpl.UnknownFields // 道岔索引 - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Id uint32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` // 道岔处于定位(表示) Normal bool `protobuf:"varint,2,opt,name=normal,proto3" json:"normal,omitempty"` // 道岔处于反位(表示) @@ -401,11 +401,11 @@ func (*SwitchState) Descriptor() ([]byte, []int) { return file_device_state_proto_rawDescGZIP(), []int{2} } -func (x *SwitchState) GetId() string { +func (x *SwitchState) GetId() uint32 { if x != nil { return x.Id } - return "" + return 0 } func (x *SwitchState) GetNormal() bool { @@ -527,7 +527,7 @@ type SignalState struct { unknownFields protoimpl.UnknownFields // 信号机索引 - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Id uint32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` // 信号机的灯列表 Aspect Signal_Aspect `protobuf:"varint,2,opt,name=aspect,proto3,enum=state.Signal_Aspect" json:"aspect,omitempty"` } @@ -564,11 +564,11 @@ func (*SignalState) Descriptor() ([]byte, []int) { return file_device_state_proto_rawDescGZIP(), []int{3} } -func (x *SignalState) GetId() string { +func (x *SignalState) GetId() uint32 { if x != nil { return x.Id } - return "" + return 0 } func (x *SignalState) GetAspect() Signal_Aspect { @@ -624,7 +624,7 @@ type PlatformState struct { unknownFields protoimpl.UnknownFields // 站台索引 - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Id uint32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` // EMP继电器状态 Empj bool `protobuf:"varint,2,opt,name=empj,proto3" json:"empj,omitempty"` // SPKS继电器状态 @@ -665,11 +665,11 @@ func (*PlatformState) Descriptor() ([]byte, []int) { return file_device_state_proto_rawDescGZIP(), []int{5} } -func (x *PlatformState) GetId() string { +func (x *PlatformState) GetId() uint32 { if x != nil { return x.Id } - return "" + return 0 } func (x *PlatformState) GetEmpj() bool { @@ -700,7 +700,7 @@ type StationState struct { unknownFields protoimpl.UnknownFields // 车站索引 - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Id uint32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` } func (x *StationState) Reset() { @@ -735,11 +735,11 @@ func (*StationState) Descriptor() ([]byte, []int) { return file_device_state_proto_rawDescGZIP(), []int{6} } -func (x *StationState) GetId() string { +func (x *StationState) GetId() uint32 { if x != nil { return x.Id } - return "" + return 0 } // 列车状态 @@ -759,7 +759,7 @@ type TrainState struct { // 列车是否显示 Show bool `protobuf:"varint,5,opt,name=show,proto3" json:"show,omitempty"` // 列车车头所在设备ID - HeadDeviceId string `protobuf:"bytes,6,opt,name=headDeviceId,proto3" json:"headDeviceId,omitempty"` + HeadDeviceId uint32 `protobuf:"varint,6,opt,name=headDeviceId,proto3" json:"headDeviceId,omitempty"` // 列车车头所在设备偏移量 HeadOffset int64 `protobuf:"varint,7,opt,name=headOffset,proto3" json:"headOffset,omitempty"` // 设备端口 @@ -849,11 +849,11 @@ func (x *TrainState) GetShow() bool { return false } -func (x *TrainState) GetHeadDeviceId() string { +func (x *TrainState) GetHeadDeviceId() uint32 { if x != nil { return x.HeadDeviceId } - return "" + return 0 } func (x *TrainState) GetHeadOffset() int64 { @@ -1446,7 +1446,7 @@ type ReplyState struct { unknownFields protoimpl.UnknownFields // 继电器索引 - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Id uint32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` // 继电器吸合状态 Xh bool `protobuf:"varint,2,opt,name=xh,proto3" json:"xh,omitempty"` // 继电器编号 @@ -1485,11 +1485,11 @@ func (*ReplyState) Descriptor() ([]byte, []int) { return file_device_state_proto_rawDescGZIP(), []int{10} } -func (x *ReplyState) GetId() string { +func (x *ReplyState) GetId() uint32 { if x != nil { return x.Id } - return "" + return 0 } func (x *ReplyState) GetXh() bool { @@ -1512,7 +1512,7 @@ type ButtonState struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Id uint32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` Down bool `protobuf:"varint,2,opt,name=down,proto3" json:"down,omitempty"` Active bool `protobuf:"varint,3,opt,name=active,proto3" json:"active,omitempty"` // 带灯的按钮 } @@ -1549,11 +1549,11 @@ func (*ButtonState) Descriptor() ([]byte, []int) { return file_device_state_proto_rawDescGZIP(), []int{11} } -func (x *ButtonState) GetId() string { +func (x *ButtonState) GetId() uint32 { if x != nil { return x.Id } - return "" + return 0 } func (x *ButtonState) GetDown() bool { @@ -1576,7 +1576,7 @@ type AlarmState struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Id uint32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` Active bool `protobuf:"varint,2,opt,name=active,proto3" json:"active,omitempty"` } @@ -1612,11 +1612,11 @@ func (*AlarmState) Descriptor() ([]byte, []int) { return file_device_state_proto_rawDescGZIP(), []int{12} } -func (x *AlarmState) GetId() string { +func (x *AlarmState) GetId() uint32 { if x != nil { return x.Id } - return "" + return 0 } func (x *AlarmState) GetActive() bool { @@ -1632,7 +1632,7 @@ type LightState struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Id uint32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` Active bool `protobuf:"varint,2,opt,name=active,proto3" json:"active,omitempty"` } @@ -1668,11 +1668,11 @@ func (*LightState) Descriptor() ([]byte, []int) { return file_device_state_proto_rawDescGZIP(), []int{13} } -func (x *LightState) GetId() string { +func (x *LightState) GetId() uint32 { if x != nil { return x.Id } - return "" + return 0 } func (x *LightState) GetActive() bool { @@ -1688,7 +1688,7 @@ type PsdState struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` //屏蔽门的id + Id uint32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` //屏蔽门的id AsdStates []*AsdState `protobuf:"bytes,2,rep,name=asdStates,proto3" json:"asdStates,omitempty"` //滑动门状态 Mgj bool `protobuf:"varint,3,opt,name=mgj,proto3" json:"mgj,omitempty"` //屏蔽门整体的关闭(继电器)状态 } @@ -1725,11 +1725,11 @@ func (*PsdState) Descriptor() ([]byte, []int) { return file_device_state_proto_rawDescGZIP(), []int{14} } -func (x *PsdState) GetId() string { +func (x *PsdState) GetId() uint32 { if x != nil { return x.Id } - return "" + return 0 } func (x *PsdState) GetAsdStates() []*AsdState { @@ -1824,7 +1824,7 @@ type KeyState struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Id uint32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` Gear int32 `protobuf:"varint,2,opt,name=gear,proto3" json:"gear,omitempty"` } @@ -1860,11 +1860,11 @@ func (*KeyState) Descriptor() ([]byte, []int) { return file_device_state_proto_rawDescGZIP(), []int{16} } -func (x *KeyState) GetId() string { +func (x *KeyState) GetId() uint32 { if x != nil { return x.Id } - return "" + return 0 } func (x *KeyState) GetGear() int32 { @@ -2292,16 +2292,16 @@ var file_device_state_proto_rawDesc = []byte{ 0x0a, 0x12, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, 0x35, 0x0a, 0x09, 0x4c, 0x69, 0x6e, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x72, 0x61, 0x69, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x22, 0x58, 0x0a, 0x0c, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, + 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6f, 0x63, 0x63, 0x75, 0x70, 0x69, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x6f, 0x63, 0x63, 0x75, 0x70, 0x69, 0x65, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x78, 0x6c, 0x65, 0x46, 0x61, 0x75, 0x6c, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x61, 0x78, 0x6c, 0x65, 0x46, 0x61, 0x75, 0x6c, 0x74, 0x22, 0xcf, 0x02, 0x0a, 0x0b, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, 0x12, 0x0e, @@ -2322,7 +2322,7 @@ var file_device_state_proto_rawDesc = []byte{ 0x79, 0x63, 0x12, 0x1a, 0x0a, 0x08, 0x6f, 0x63, 0x63, 0x75, 0x70, 0x69, 0x65, 0x64, 0x18, 0x11, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x6f, 0x63, 0x63, 0x75, 0x70, 0x69, 0x65, 0x64, 0x22, 0x4b, 0x0a, 0x0b, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x2c, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x2c, 0x0a, 0x06, 0x61, 0x73, 0x70, 0x65, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x2e, 0x41, 0x73, 0x70, 0x65, 0x63, 0x74, 0x52, 0x06, 0x61, 0x73, 0x70, 0x65, 0x63, 0x74, 0x22, 0x4f, 0x0a, 0x06, 0x53, @@ -2332,7 +2332,7 @@ var file_device_state_proto_rawDesc = []byte{ 0x05, 0x0a, 0x01, 0x55, 0x10, 0x04, 0x12, 0x06, 0x0a, 0x02, 0x48, 0x55, 0x10, 0x05, 0x12, 0x05, 0x0a, 0x01, 0x42, 0x10, 0x06, 0x12, 0x05, 0x0a, 0x01, 0x41, 0x10, 0x07, 0x22, 0x94, 0x01, 0x0a, 0x0d, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, - 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x65, 0x6d, 0x70, 0x6a, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x65, 0x6d, 0x70, 0x6a, 0x12, 0x2f, 0x0a, 0x09, 0x73, 0x70, 0x6b, 0x73, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x52, 0x65, @@ -2341,7 +2341,7 @@ var file_device_state_proto_rawDesc = []byte{ 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x4d, 0x6b, 0x78, 0x4a, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x09, 0x6d, 0x6b, 0x78, 0x4a, 0x53, 0x74, 0x61, 0x74, 0x65, 0x22, 0x1e, 0x0a, 0x0c, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x22, 0xad, 0x04, 0x0a, 0x0a, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x75, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x02, @@ -2351,7 +2351,7 @@ var file_device_state_proto_rawDesc = []byte{ 0x72, 0x61, 0x69, 0x6e, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x68, 0x6f, 0x77, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x73, 0x68, 0x6f, 0x77, 0x12, 0x22, 0x0a, 0x0c, 0x68, 0x65, 0x61, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x68, 0x65, 0x61, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x68, 0x65, 0x61, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x68, 0x65, 0x61, 0x64, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x68, 0x65, 0x61, 0x64, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, @@ -2496,22 +2496,22 @@ var file_device_state_proto_rawDesc = []byte{ 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x40, 0x0a, 0x0a, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x78, 0x68, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x78, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x02, 0x78, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x49, 0x0a, 0x0b, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x64, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x6f, 0x77, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x64, 0x6f, 0x77, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x22, 0x34, 0x0a, 0x0a, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, + 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x22, 0x34, 0x0a, 0x0a, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x61, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x22, 0x5b, 0x0a, 0x08, 0x50, 0x73, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, - 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, + 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x2d, 0x0a, 0x09, 0x61, 0x73, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x41, 0x73, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x09, 0x61, 0x73, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, 0x12, 0x10, @@ -2523,7 +2523,7 @@ var file_device_state_proto_rawDesc = []byte{ 0x28, 0x08, 0x52, 0x04, 0x67, 0x6d, 0x64, 0x77, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x67, 0x6a, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x6d, 0x67, 0x6a, 0x22, 0x2e, 0x0a, 0x08, 0x4b, 0x65, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x67, 0x65, 0x61, 0x72, 0x18, 0x02, + 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x67, 0x65, 0x61, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x67, 0x65, 0x61, 0x72, 0x22, 0x52, 0x0a, 0x09, 0x4d, 0x6b, 0x78, 0x4a, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x31, 0x0a, 0x0a, 0x72, diff --git a/ts/simulation/wayside/memory/wayside_memory_ibp.go b/ts/simulation/wayside/memory/wayside_memory_ibp.go index 648f119..fc1678c 100644 --- a/ts/simulation/wayside/memory/wayside_memory_ibp.go +++ b/ts/simulation/wayside/memory/wayside_memory_ibp.go @@ -8,13 +8,13 @@ import ( ) // 操作IBP按钮 -func ChangeIBPButtonState(sim *VerifySimulation, mapId int32, stationId, btnId string, pressDown bool) error { +func ChangeIBPButtonState(sim *VerifySimulation, mapId int32, stationId, btnId uint32, pressDown bool) error { uidMap, err := getIbpUidByMapIdAndStationId(mapId, stationId) if err != nil { return err } if uidMap.IbpButtonIds[btnId] == nil { - return fmt.Errorf("车站【%s】按钮【%s】UID不存在", stationId, btnId) + return fmt.Errorf("车站【%d】按钮【%d】UID不存在", stationId, btnId) } stationUid := QueryUidByMidAndComId(mapId, stationId, &graphicData.Station{}) if pressDown { @@ -25,20 +25,20 @@ func ChangeIBPButtonState(sim *VerifySimulation, mapId int32, stationId, btnId s } // 操作IBP按钮 -func ChangeIBPKeyState(sim *VerifySimulation, mapId int32, stationId, keyId string, gear int32) error { +func ChangeIBPKeyState(sim *VerifySimulation, mapId int32, stationId, keyId uint32, gear int32) error { uidMap, err := getIbpUidByMapIdAndStationId(mapId, stationId) if err != nil { return err } if uidMap.IbpKeyIds[keyId] == nil { - return fmt.Errorf("车站【%s】钥匙【%s】UID不存在", stationId, keyId) + return fmt.Errorf("车站【%d】钥匙【%d】UID不存在", stationId, keyId) } stationUid := QueryUidByMidAndComId(mapId, stationId, &graphicData.Station{}) return fi.SwitchKeyGear(sim.World, stationUid+"_"+uidMap.IbpKeyIds[keyId].Uid, gear) } // 根据平面布置图ID、列车ID获取IbpUid信息 -func getIbpUidByMapIdAndStationId(mapId int32, stationId string) (*IBPUidStructure, error) { +func getIbpUidByMapIdAndStationId(mapId int32, stationId uint32) (*IBPUidStructure, error) { giData := QueryGiData[*graphicData.RtssGraphicStorage](mapId) var station *graphicData.Station for _, s := range giData.Stations { @@ -48,7 +48,7 @@ func getIbpUidByMapIdAndStationId(mapId int32, stationId string) (*IBPUidStructu } } if station == nil { - return nil, fmt.Errorf("地图【%d】车站【%s】不存在", mapId, stationId) + return nil, fmt.Errorf("地图【%d】车站【%d】不存在", mapId, stationId) } if station.RefIbpMapCode == "" { diff --git a/ts/simulation/wayside/memory/wayside_memory_map_init.go b/ts/simulation/wayside/memory/wayside_memory_map_init.go index 0304c89..feac9d7 100644 --- a/ts/simulation/wayside/memory/wayside_memory_map_init.go +++ b/ts/simulation/wayside/memory/wayside_memory_map_init.go @@ -3,6 +3,7 @@ package memory import ( "fmt" "log/slog" + "strconv" "strings" "sync" @@ -15,39 +16,37 @@ import ( var giUidMap sync.Map type elementIdStructure struct { - CommonId string - Id uint32 + CommonId uint32 Code string Uid string } // 数组为Index为 common.ButtonCode, index, uid type StationUidStructure struct { - AxlePointIds map[string]*elementIdStructure - TurnoutIds map[string]*elementIdStructure - PhysicalSectionIds map[string]*elementIdStructure - SignalIds map[string]*elementIdStructure - TransponderIds map[string]*elementIdStructure - SlopeIds map[string]*elementIdStructure - CurvatureIds map[string]*elementIdStructure - ButtonIds map[string]*elementIdStructure - StationIds map[string]*elementIdStructure - PlatformIds map[string]*elementIdStructure - PsdIds map[string]*elementIdStructure - GateBoxIds map[string]*elementIdStructure - SpksSwitchIds map[string]*elementIdStructure + AxlePointIds map[uint32]*elementIdStructure + TurnoutIds map[uint32]*elementIdStructure + PhysicalSectionIds map[uint32]*elementIdStructure + SignalIds map[uint32]*elementIdStructure + TransponderIds map[uint32]*elementIdStructure + SlopeIds map[uint32]*elementIdStructure + CurvatureIds map[uint32]*elementIdStructure + ButtonIds map[uint32]*elementIdStructure + StationIds map[uint32]*elementIdStructure + PlatformIds map[uint32]*elementIdStructure + PsdIds map[uint32]*elementIdStructure + GateBoxIds map[uint32]*elementIdStructure + SpksSwitchIds map[uint32]*elementIdStructure } type RelayUidStructure struct { - RelayCabinetIds map[string]*elementIdStructure - RelayIds map[string]*elementIdStructure + RelayIds map[uint32]*elementIdStructure } type IBPUidStructure struct { - IbpButtonIds map[string]*elementIdStructure - IbpAlarmIds map[string]*elementIdStructure - IbpKeyIds map[string]*elementIdStructure - IbpLightIds map[string]*elementIdStructure + IbpButtonIds map[uint32]*elementIdStructure + IbpAlarmIds map[uint32]*elementIdStructure + IbpKeyIds map[uint32]*elementIdStructure + IbpLightIds map[uint32]*elementIdStructure } // 获取继电器的关联关系 @@ -59,31 +58,37 @@ type deviceRelateUidPriex struct { } // 获取地图元素ID -func GetMapElementId(common *graphicData.CommonInfo) string { - return common.Id +func GetMapElementId(common *graphicData.CommonInfo) uint32 { + if common.Id != 0 { + return common.Id + } + if common.Oldid != "" { + id, _ := strconv.Atoi(common.Oldid) + return uint32(id) + } + panic(sys_error.New("元素缺少主键")) } -func getMapELementCode(code ...string) string { +func getMapELementCode(id uint32, code ...string) string { for _, c := range code { if c != "" { return c } } - panic(sys_error.New("传入Code至少一个不为空")) + return strconv.Itoa(int(id)) } // 获取关联的车站名 -func handleRefStationName(stationMap map[string]*graphicData.Station, sid []string) []string { +func handleRefStationName(stationMap map[uint32]*graphicData.Station, sid []uint32) []string { var stationNames []string for _, id := range sid { - if id == "" { + if id == 0 { continue } - stationName := id - if stationMap[id] != nil { - stationName = stationMap[id].StationName + if stationMap[id] == nil { + continue } - stationNames = append(stationNames, stationName) + stationNames = append(stationNames, stationMap[id].StationName) } return stationNames } @@ -108,7 +113,7 @@ func getUIdPrefix(prefix interface{}) (string, string, string) { // 过滤掉其他线路的设备 func filterOtherLineDevice(data *graphicData.RtssGraphicStorage) { - otherDeviceIdMap := make(map[string]bool) + otherDeviceIdMap := make(map[uint32]bool) for _, ods := range data.OtherLineList { for _, id := range ods.Ids { otherDeviceIdMap[id] = true @@ -137,7 +142,7 @@ func filterOtherLineDevice(data *graphicData.RtssGraphicStorage) { d.PbRef = nil slog.Warn("区段[id:%v][code:%s]设备B端是其他线路设备已置空", did, d.Code) } - var acs []string + var acs []uint32 for _, id := range d.AxleCountings { if otherDeviceIdMap[id] { continue @@ -146,7 +151,7 @@ func filterOtherLineDevice(data *graphicData.RtssGraphicStorage) { } d.AxleCountings = acs if otherDeviceIdMap[d.TrackSectionId] { - d.TrackSectionId = "" + d.TrackSectionId = 0 } sections = append(sections, d) } @@ -190,14 +195,14 @@ func filterOtherLineDevice(data *graphicData.RtssGraphicStorage) { d.PcRef = nil slog.Warn("道岔[id:%v][code:%s]设备C端是其他线路设备已置空", did, d.Code) } - if d.PaTrackSectionId != "" && otherDeviceIdMap[d.PaTrackSectionId] { - d.PaTrackSectionId = "" + if d.PaTrackSectionId != 0 && otherDeviceIdMap[d.PaTrackSectionId] { + d.PaTrackSectionId = 0 } - if d.PbTrackSectionId != "" && otherDeviceIdMap[d.PbTrackSectionId] { - d.PbTrackSectionId = "" + if d.PbTrackSectionId != 0 && otherDeviceIdMap[d.PbTrackSectionId] { + d.PbTrackSectionId = 0 } - if d.PcTrackSectionId != "" && otherDeviceIdMap[d.PcTrackSectionId] { - d.PcTrackSectionId = "" + if d.PcTrackSectionId != 0 && otherDeviceIdMap[d.PcTrackSectionId] { + d.PcTrackSectionId = 0 } turnouts = append(turnouts, d) } @@ -229,25 +234,26 @@ func filterOtherLineDevice(data *graphicData.RtssGraphicStorage) { // 初始化平面布置图 UID func initStationUid(data *graphicData.RtssGraphicStorage) *StationUidStructure { gus := &StationUidStructure{ - AxlePointIds: make(map[string]*elementIdStructure, len(data.AxleCountings)), - TurnoutIds: make(map[string]*elementIdStructure, len(data.Turnouts)), - PhysicalSectionIds: make(map[string]*elementIdStructure, len(data.Section)), - SignalIds: make(map[string]*elementIdStructure, len(data.Signals)), - TransponderIds: make(map[string]*elementIdStructure, len(data.Transponders)), - SlopeIds: make(map[string]*elementIdStructure, len(data.Slopes)), - CurvatureIds: make(map[string]*elementIdStructure, len(data.Curvatures)), - ButtonIds: make(map[string]*elementIdStructure, len(data.EsbButtons)), - StationIds: make(map[string]*elementIdStructure, len(data.Stations)), - PlatformIds: make(map[string]*elementIdStructure, len(data.Platforms)), - PsdIds: make(map[string]*elementIdStructure, len(data.ScreenDoors)), - GateBoxIds: make(map[string]*elementIdStructure, len(data.GateBoxs)), - SpksSwitchIds: make(map[string]*elementIdStructure, len(data.SpksSwitchs)), + AxlePointIds: make(map[uint32]*elementIdStructure, len(data.AxleCountings)), + TurnoutIds: make(map[uint32]*elementIdStructure, len(data.Turnouts)), + PhysicalSectionIds: make(map[uint32]*elementIdStructure, len(data.Section)), + SignalIds: make(map[uint32]*elementIdStructure, len(data.Signals)), + TransponderIds: make(map[uint32]*elementIdStructure, len(data.Transponders)), + SlopeIds: make(map[uint32]*elementIdStructure, len(data.Slopes)), + CurvatureIds: make(map[uint32]*elementIdStructure, len(data.Curvatures)), + ButtonIds: make(map[uint32]*elementIdStructure, len(data.EsbButtons)), + StationIds: make(map[uint32]*elementIdStructure, len(data.Stations)), + PlatformIds: make(map[uint32]*elementIdStructure, len(data.Platforms)), + PsdIds: make(map[uint32]*elementIdStructure, len(data.ScreenDoors)), + GateBoxIds: make(map[uint32]*elementIdStructure, len(data.GateBoxs)), + SpksSwitchIds: make(map[uint32]*elementIdStructure, len(data.SpksSwitchs)), } city, lineId, _ := getUIdPrefix(data.UniqueIdPrefix) // 处理车站信息 - stationMap := make(map[string]*graphicData.Station) + stationMap := make(map[uint32]*graphicData.Station) for _, s := range data.Stations { - eid, stationName := GetMapElementId(s.Common), getMapELementCode(s.StationName, s.Code) + eid := GetMapElementId(s.Common) + stationName := getMapELementCode(eid, s.StationName, s.Code) stationMap[eid] = s gus.StationIds[eid] = &elementIdStructure{ CommonId: eid, @@ -258,7 +264,7 @@ func initStationUid(data *graphicData.RtssGraphicStorage) *StationUidStructure { // 初始化计轴信息 for _, a := range data.AxleCountings { eid := GetMapElementId(a.Common) - code := getMapELementCode(a.Code, eid) + code := getMapELementCode(eid, a.Code) stationNames := handleRefStationName(stationMap, a.CentralizedStations) gus.AxlePointIds[eid] = &elementIdStructure{ CommonId: eid, @@ -269,7 +275,7 @@ func initStationUid(data *graphicData.RtssGraphicStorage) *StationUidStructure { // 初始化道岔信息 for _, t := range data.Turnouts { eid := GetMapElementId(t.Common) - code := getMapELementCode(t.Code, eid) + code := getMapELementCode(eid, t.Code) stationNames := handleRefStationName(stationMap, t.CentralizedStations) gus.TurnoutIds[eid] = &elementIdStructure{ CommonId: eid, @@ -280,7 +286,7 @@ func initStationUid(data *graphicData.RtssGraphicStorage) *StationUidStructure { // 初始化物理区段信息 for _, s := range data.Section { eid := GetMapElementId(s.Common) - code := getMapELementCode(s.Code, eid) + code := getMapELementCode(eid, s.Code) stationNames := handleRefStationName(stationMap, s.CentralizedStations) gus.PhysicalSectionIds[eid] = &elementIdStructure{ CommonId: eid, @@ -291,7 +297,7 @@ func initStationUid(data *graphicData.RtssGraphicStorage) *StationUidStructure { // 初始化信号机信息 for _, s := range data.Signals { eid := GetMapElementId(s.Common) - code := getMapELementCode(s.Code, eid) + code := getMapELementCode(eid, s.Code) stationNames := handleRefStationName(stationMap, s.CentralizedStations) gus.SignalIds[eid] = &elementIdStructure{ CommonId: eid, @@ -302,7 +308,7 @@ func initStationUid(data *graphicData.RtssGraphicStorage) *StationUidStructure { // 初始化应答器 for _, t := range data.Transponders { eid := GetMapElementId(t.Common) - code := getMapELementCode(t.Code, eid) + code := getMapELementCode(eid, t.Code) stationNames := handleRefStationName(stationMap, t.CentralizedStations) gus.TransponderIds[eid] = &elementIdStructure{ CommonId: eid, @@ -315,7 +321,7 @@ func initStationUid(data *graphicData.RtssGraphicStorage) *StationUidStructure { eid := GetMapElementId(s.Common) gus.SlopeIds[eid] = &elementIdStructure{ CommonId: eid, - Uid: GenerateElementUid(city, lineId, nil, eid), + Uid: GenerateElementUid(city, lineId, nil, strconv.Itoa(int(eid))), } } // 初始化曲线 @@ -323,11 +329,11 @@ func initStationUid(data *graphicData.RtssGraphicStorage) *StationUidStructure { eid := GetMapElementId(c.Common) gus.CurvatureIds[eid] = &elementIdStructure{ CommonId: eid, - Uid: GenerateElementUid(city, lineId, nil, eid), + Uid: GenerateElementUid(city, lineId, nil, strconv.Itoa(int(eid))), } } //处理车站关联的组合信息 - refMap := make(map[string]*deviceRelateUidPriex) + refMap := make(map[uint32]*deviceRelateUidPriex) for _, s := range data.StationRelateDeviceList { for _, c := range s.Combinationtypes { p := &deviceRelateUidPriex{deviceCode: s.Code, typeCode: c.Code} @@ -351,7 +357,7 @@ func initStationUid(data *graphicData.RtssGraphicStorage) *StationUidStructure { } } // 站台 - platformMap := make(map[string]*graphicData.Platform) + platformMap := make(map[uint32]*graphicData.Platform) for _, platform := range data.Platforms { eid := GetMapElementId(platform.Common) platformMap[eid] = platform @@ -362,7 +368,7 @@ func initStationUid(data *graphicData.RtssGraphicStorage) *StationUidStructure { } } // 屏蔽门 - psd_station_map := make(map[string]string) + psd_station_map := make(map[uint32]string) for _, door := range data.ScreenDoors { station := stationMap[platformMap[door.RefPlatformId].GetRefStationId()] if station == nil { //线路数据有问题 @@ -388,7 +394,7 @@ func initStationUid(data *graphicData.RtssGraphicStorage) *StationUidStructure { } // SPKS人员防护 for _, spk := range data.SpksSwitchs { - if spk.RefStand == "" { + if spk.RefStand == 0 { continue } platform := platformMap[spk.RefStand] @@ -412,11 +418,10 @@ func initStationUid(data *graphicData.RtssGraphicStorage) *StationUidStructure { // 初始化继电器柜 UID func initRelayCabinetUid(data *graphicData.RelayCabinetGraphicStorage) *RelayUidStructure { rus := &RelayUidStructure{ - RelayCabinetIds: make(map[string]*elementIdStructure, len(data.RelayCabinets)), - RelayIds: make(map[string]*elementIdStructure, len(data.Relays)), + RelayIds: make(map[uint32]*elementIdStructure, len(data.Relays)), } // 继电器所属设备 - refMap := make(map[string]*deviceRelateUidPriex, len(data.Relays)) + refMap := make(map[uint32]*deviceRelateUidPriex, len(data.Relays)) for _, r := range data.DeviceRelateRelayList { isStation := r.DeviceType == graphicData.RelatedRef_station isPsd := r.DeviceType == graphicData.RelatedRef_ScreenDoor @@ -429,14 +434,6 @@ func initRelayCabinetUid(data *graphicData.RelayCabinetGraphicStorage) *RelayUid } // 获取公共前缀 city, lineId, station := getUIdPrefix(data.UniqueIdPrefix) - for _, r := range data.RelayCabinets { - eid := GetMapElementId(r.Common) - rus.RelayCabinetIds[eid] = &elementIdStructure{ - CommonId: eid, - Code: r.Code, - Uid: GenerateElementUid(city, lineId, []string{station}, eid), - } - } // city+line+车站+设备code+继电器组合的code+继电器的code for _, r := range data.Relays { eid := GetMapElementId(r.Common) @@ -478,21 +475,21 @@ func initRelayCabinetUid(data *graphicData.RelayCabinetGraphicStorage) *RelayUid // 初始化IBP地图UID func initIBPUid(data *graphicData.IBPGraphicStorage) *IBPUidStructure { rus := &IBPUidStructure{ - IbpButtonIds: make(map[string]*elementIdStructure), - IbpAlarmIds: make(map[string]*elementIdStructure), - IbpKeyIds: make(map[string]*elementIdStructure), - IbpLightIds: make(map[string]*elementIdStructure), + IbpButtonIds: make(map[uint32]*elementIdStructure), + IbpAlarmIds: make(map[uint32]*elementIdStructure), + IbpKeyIds: make(map[uint32]*elementIdStructure), + IbpLightIds: make(map[uint32]*elementIdStructure), } //处理继电器关联信息 - refMap := make(map[string]string) + refMap := make(map[uint32]string) for _, s := range data.IbpRelatedDevices { for _, c := range s.Combinationtypes { for _, i := range c.RefDevices { - refMap[i] = c.Code + refMap[uint32(i)] = c.Code } } } - codeFun := func(id, code string) string { + codeFun := func(id uint32, code string) string { if refMap[id] != "" { return refMap[id] + "_" + code } else { @@ -544,7 +541,7 @@ func buildRepositoryAllUidsMap(mapIds []int32, repo *repository.Repository) map[ len(repo.TurnoutList()) + len(repo.ResponderList()) + len(repo.SlopeList()) + len(repo.SectionalCurvatureList()) allUidMap := make(map[string]*elementIdStructure, mapLen) - saveToAllUidMap := func(es map[string]*elementIdStructure) { + saveToAllUidMap := func(es map[uint32]*elementIdStructure) { for _, e := range es { allUidMap[e.Uid] = e } @@ -581,7 +578,7 @@ func QueryUidStructure[T *StationUidStructure | *RelayUidStructure | *IBPUidStru } // 获取设备类型获取对应字段 -func getUidMapByType(uidData any, m interface{}) map[string]*elementIdStructure { +func getUidMapByType(uidData any, m interface{}) map[uint32]*elementIdStructure { switch m.(type) { case *graphicData.AxleCounting: return (uidData.(*StationUidStructure)).AxlePointIds @@ -597,8 +594,6 @@ func getUidMapByType(uidData any, m interface{}) map[string]*elementIdStructure return (uidData.(*StationUidStructure)).SlopeIds case *graphicData.Curvature: return (uidData.(*StationUidStructure)).CurvatureIds - case *graphicData.RelayCabinet: - return (uidData.(*RelayUidStructure)).RelayCabinetIds case *graphicData.Relay: return (uidData.(*RelayUidStructure)).RelayIds case *graphicData.EsbButton: @@ -615,7 +610,7 @@ func getUidMapByType(uidData any, m interface{}) map[string]*elementIdStructure } // 根据地图ID跟设备类型获取UID集合 -func QueryMapUidMapByType(mapId int32, m interface{}) map[string]*elementIdStructure { +func QueryMapUidMapByType(mapId int32, m interface{}) map[uint32]*elementIdStructure { uidData, ok := giUidMap.Load(mapId) if !ok { panic(&dto.ErrorDto{Code: dto.DataNotExist, Message: fmt.Sprintf("地图【id:%d】不存在uid缓存", mapId)}) @@ -624,10 +619,10 @@ func QueryMapUidMapByType(mapId int32, m interface{}) map[string]*elementIdStruc } // 根据地图的comId获取UID -func QueryUidByMidAndComId(mapId int32, comId string, m interface{}) string { +func QueryUidByMidAndComId(mapId int32, comId uint32, m interface{}) string { uidMap := QueryMapUidMapByType(mapId, m) if uidMap[comId] != nil { return uidMap[comId].Uid } - panic(&dto.ErrorDto{Code: dto.DataNotExist, Message: fmt.Sprintf("地图【id:%d】不存在【comId:%s】缓存", mapId, comId)}) + panic(&dto.ErrorDto{Code: dto.DataNotExist, Message: fmt.Sprintf("地图【id:%d】不存在【comId:%d】缓存", mapId, comId)}) } diff --git a/ts/simulation/wayside/memory/wayside_memory_psl.go b/ts/simulation/wayside/memory/wayside_memory_psl.go index 2047e37..ba7b70f 100644 --- a/ts/simulation/wayside/memory/wayside_memory_psl.go +++ b/ts/simulation/wayside/memory/wayside_memory_psl.go @@ -5,7 +5,7 @@ import ( ) // 操作PSL按钮 -func ChangePSLButtonState(sim *VerifySimulation, mapId int32, gateBoxId, btnCode string, pressDown bool) { +func ChangePSLButtonState(sim *VerifySimulation, mapId int32, gateBoxId uint32, btnCode string, pressDown bool) { uid := QueryUidStructure[*StationUidStructure](mapId) gateBoxUid := uid.GateBoxIds[gateBoxId].Uid if pressDown { diff --git a/ts/simulation/wayside/memory/wayside_memory_relay.go b/ts/simulation/wayside/memory/wayside_memory_relay.go index 33b6984..af91e72 100644 --- a/ts/simulation/wayside/memory/wayside_memory_relay.go +++ b/ts/simulation/wayside/memory/wayside_memory_relay.go @@ -6,7 +6,7 @@ import ( ) // 继电器操作方法 -func ChangeRelayState(sim *VerifySimulation, mapId int32, id string, td bool) error { +func ChangeRelayState(sim *VerifySimulation, mapId int32, id uint32, td bool) error { uid := QueryUidByMidAndComId(mapId, id, &graphicData.Relay{}) if td { return fi.DriveRelayUp(sim.World, uid) diff --git a/ts/simulation/wayside/memory/wayside_memory_section.go b/ts/simulation/wayside/memory/wayside_memory_section.go index 115987f..a346434 100644 --- a/ts/simulation/wayside/memory/wayside_memory_section.go +++ b/ts/simulation/wayside/memory/wayside_memory_section.go @@ -1,15 +1,15 @@ package memory import ( + "log/slog" + "joylink.club/bj-rtsts-server/dto" "joylink.club/bj-rtsts-server/dto/request_proto" "joylink.club/bj-rtsts-server/ts/protos/graphicData" "joylink.club/rtsssimulation/fi" - "log/slog" ) func ChangeAxleSectionState(simulation *VerifySimulation, req *dto.AxleSectionOperationReqDto) error { - sectionUid := QueryUidByMidAndComId(req.MapId, req.DeviceId, &graphicData.Section{}) slog.Debug("操作计轴区段", "axleSectionUid", sectionUid) if req.TrainIn { @@ -18,7 +18,6 @@ func ChangeAxleSectionState(simulation *VerifySimulation, req *dto.AxleSectionOp if req.TrainOut { return fi.AxleSectionTrainDrive(simulation.World, sectionUid, false) } - // switch req.Operation { case request_proto.Section_CancelDrst: return fi.AxleSectionDrstDrive(simulation.World, sectionUid, false) diff --git a/ts/simulation/wayside/memory/wayside_memory_station.go b/ts/simulation/wayside/memory/wayside_memory_station.go index 8493f4c..4dac476 100644 --- a/ts/simulation/wayside/memory/wayside_memory_station.go +++ b/ts/simulation/wayside/memory/wayside_memory_station.go @@ -6,7 +6,7 @@ import ( ) // 操作esb按钮 -func ChangeEsbButtonState(sim *VerifySimulation, mapId int32, btnId string, pressDown bool) error { +func ChangeEsbButtonState(sim *VerifySimulation, mapId int32, btnId uint32, pressDown bool) error { uid := QueryUidByMidAndComId(mapId, btnId, &graphicData.EsbButton{}) if pressDown { return fi.PressDownButton(sim.World, uid) diff --git a/ts/simulation/wayside/memory/wayside_simulation.go b/ts/simulation/wayside/memory/wayside_simulation.go index 0d74d30..a402127 100644 --- a/ts/simulation/wayside/memory/wayside_simulation.go +++ b/ts/simulation/wayside/memory/wayside_simulation.go @@ -137,7 +137,7 @@ func (s *VerifySimulation) GetRunState() state.SimulationStatus_SimulationState } // 获取仿真世界信息 -func (s *VerifySimulation) GetComIdByUid(uid string) string { +func (s *VerifySimulation) GetComIdByUid(uid string) uint32 { es := s.uidMap if es == nil { panic(&dto.ErrorDto{Code: dto.DataNotExist, Message: "无映射信息"}) @@ -226,15 +226,11 @@ func (s *VerifySimulation) CollectDynamicsTurnoutInfo() []*message.DynamicsTurno if sta == nil { continue } - code64, err := strconv.ParseUint(sta.CommonId, 10, 16) - if err != nil { - slog.Error("id转uint16报错", err) - } s := handlerDynamicsTurnoutState(s.World, o.Id()) if s == nil { continue } - s.Code = uint16(code64) + s.Code = uint16(sta.CommonId) turnoutStates = append(turnoutStates, s) } return turnoutStates @@ -324,7 +320,7 @@ func (s *VerifySimulation) GetDynamicsRunRepository() *message.LineBaseInfo { } info.LinkList = append(info.LinkList, link) if model.ARelation() != nil { - turnoutId, _ := strconv.Atoi(s.GetComIdByUid(model.ARelation().Device().Id())) + turnoutId := s.GetComIdByUid(model.ARelation().Device().Id()) link.ARelTurnoutId = int32(turnoutId) switch model.ARelation().Port() { case proto.Port_A: @@ -336,7 +332,7 @@ func (s *VerifySimulation) GetDynamicsRunRepository() *message.LineBaseInfo { } } if model.BRelation() != nil { - turnoutId, _ := strconv.Atoi(s.GetComIdByUid(model.BRelation().Device().Id())) + turnoutId := s.GetComIdByUid(model.BRelation().Device().Id()) link.BRelTurnoutId = int32(turnoutId) switch model.BRelation().Port() { case proto.Port_A: @@ -349,7 +345,7 @@ func (s *VerifySimulation) GetDynamicsRunRepository() *message.LineBaseInfo { } } for _, model := range s.Repo.SlopeList() { - id, _ := strconv.Atoi(s.GetComIdByUid(model.Id())) + id := s.GetComIdByUid(model.Id()) slope := &message.Slope{ ID: int32(id), StartLinkOffset: int32(model.StartLinkPosition().Offset()), @@ -363,7 +359,7 @@ func (s *VerifySimulation) GetDynamicsRunRepository() *message.LineBaseInfo { slope.EndLinkId = int32(endLinkId) } for _, model := range s.Repo.SectionalCurvatureList() { - id, _ := strconv.Atoi(s.GetComIdByUid(model.Id())) + id := s.GetComIdByUid(model.Id()) curve := &message.Curve{ ID: int32(id), StartLinkOffset: int32(model.StartLinkPosition().Offset()), @@ -573,18 +569,17 @@ func buildProtoRepository(mapIds []int32) (*proto.Repository, error) { buildSectionCodePoint(repo, stationGi, mapId) } } - // return repo, nil } func buildSectionCodePoint(repo *proto.Repository, storage *graphicData.RtssGraphicStorage, mapId int32) { - city := storage.UniqueIdPrefix.City - lineId := storage.UniqueIdPrefix.LineId - + // city := storage.UniqueIdPrefix.City + // lineId := storage.UniqueIdPrefix.LineId + uidsMap := QueryUidStructure[*StationUidStructure](mapId) for _, sscp := range storage.SectionCodePointList { centralizedStation := sscp.CentralizedStation sectionGIds := sscp.SectionIds - centralizedStationId := GenerateElementUid(city, lineId, nil, centralizedStation) + centralizedStationId := uidsMap.StationIds[centralizedStation].Uid // GenerateElementUid(city, lineId, nil, centralizedStation) ref := queryCentralizedStationRef(centralizedStationId, repo) var ccs []*proto.CiSectionCodePoint for sectionPoint, sectionGId := range sectionGIds { @@ -881,7 +876,7 @@ func handlerRelayGiCj(uidsMap *RelayUidStructure, stationId string, ciCj *graphi for _, j := range row.RefRelays { u := uidsMap.RelayIds[j.RelayId] if u == nil { - panic(sys_error.New(fmt.Sprintf("集中站【id:%s】不存在继电器的【comId:%s】UID映射关系", stationId, j.RelayId))) + panic(sys_error.New(fmt.Sprintf("集中站【id:%s】不存在继电器的【comId:%d】UID映射关系", stationId, j.RelayId))) } d := &proto.CjDataItem{RelayId: u.Uid} if j.Position == graphicData.CjDataItem_H { @@ -918,7 +913,7 @@ func handlerRelayGiQd(uidsMap *RelayUidStructure, stationId string, ciQd *graphi for _, j := range row.RefRelays { u := uidsMap.RelayIds[j] if u == nil { - panic(sys_error.New(fmt.Sprintf("集中站【id:%s】不存在继电器的【comId:%s】UID映射关系", stationId, j))) + panic(sys_error.New(fmt.Sprintf("集中站【id:%s】不存在继电器的【comId:%d】UID映射关系", stationId, j))) } r.RefRelays = append(r.RefRelays, u.Uid) } @@ -957,7 +952,7 @@ func convertRelayModel(modelType graphicData.Relay_ModelType) proto.Relay_Model func fillProtoRepository(repo *proto.Repository, storage *graphicData.RtssGraphicStorage, mapId int32) { repo.MainCoordinateSystem = storage.UniqueIdPrefix.MainCoordinateSystem - axleCountingMap := make(map[string]*graphicData.AxleCounting) + axleCountingMap := make(map[uint32]*graphicData.AxleCounting) uidsMap := QueryUidStructure[*StationUidStructure](mapId) for _, data := range storage.AxleCountings { id := GetMapElementId(data.Common) @@ -967,35 +962,38 @@ func fillProtoRepository(repo *proto.Repository, storage *graphicData.RtssGraphi cpType = proto.CheckPointType_Boundary } cp := &proto.CheckPoint{ - Id: id, - Km: convertKm(data.KilometerSystem), - Type: cpType, - DevicePorts: convertDevicePorts(data.AxleCountingRef), + Id: uidsMap.AxlePointIds[id].Uid, + Km: convertKm(data.KilometerSystem), + Type: cpType, } - repo.CheckPoints = append(repo.CheckPoints, converCheckPointUid(cp, uidsMap)) + for _, ref := range data.AxleCountingRef { + cp.DevicePorts = append(cp.DevicePorts, convertDevicePort(ref, uidsMap)) + } + repo.CheckPoints = append(repo.CheckPoints, cp) } for _, data := range storage.Section { - var turnoutIds []string + var turnoutUids []string if data.SectionType == graphicData.Section_TurnoutPhysical { - turnoutIds = findTurnoutIds(axleCountingMap, data.AxleCountings) + turnoutIds := findTurnoutIds(axleCountingMap, data.AxleCountings) + for _, tid := range turnoutIds { + turnoutUids = append(turnoutUids, uidsMap.TurnoutIds[tid].Uid) + } } - centralizedStation := "" + var centralizedStation string if len(data.CentralizedStations) > 0 { s := uidsMap.StationIds[data.CentralizedStations[0]] if s != nil { centralizedStation = s.Code - } else { - centralizedStation = data.CentralizedStations[0] } } physicalSection := &proto.PhysicalSection{ - Id: GetMapElementId(data.Common), - ADevicePort: convertDevicePort(data.PaRef), - BDevicePort: convertDevicePort(data.PbRef), - TurnoutIds: turnoutIds, + Id: uidsMap.PhysicalSectionIds[GetMapElementId(data.Common)].Uid, + ADevicePort: convertDevicePort(data.PaRef, uidsMap), + BDevicePort: convertDevicePort(data.PbRef, uidsMap), + TurnoutIds: turnoutUids, CentralizedStation: centralizedStation, } - repo.PhysicalSections = append(repo.PhysicalSections, converSectionUid(physicalSection, uidsMap)) + repo.PhysicalSections = append(repo.PhysicalSections, physicalSection) } for _, data := range storage.Turnouts { var km *proto.Kilometer @@ -1005,94 +1003,77 @@ func fillProtoRepository(repo *proto.Repository, storage *graphicData.RtssGraphi break } } - var switchMachineType proto.Turnout_SwitchMachineType + turnout := &proto.Turnout{ + Id: uidsMap.TurnoutIds[GetMapElementId(data.Common)].Uid, + Km: km, + ADevicePort: convertDevicePort(data.PaRef, uidsMap), + BDevicePort: convertDevicePort(data.PbRef, uidsMap), + CDevicePort: convertDevicePort(data.PcRef, uidsMap), + } switch data.SwitchMachineType { case graphicData.Turnout_ZDJ9_Single: - switchMachineType = proto.Turnout_ZDJ9_Single + turnout.SwitchMachineType = proto.Turnout_ZDJ9_Single case graphicData.Turnout_ZDJ9_Double: - switchMachineType = proto.Turnout_ZDJ9_Double + turnout.SwitchMachineType = proto.Turnout_ZDJ9_Double } - turnout := &proto.Turnout{ - Id: GetMapElementId(data.Common), - Km: km, - ADevicePort: convertDevicePort(data.PaRef), - BDevicePort: convertDevicePort(data.PbRef), - CDevicePort: convertDevicePort(data.PcRef), - SwitchMachineType: switchMachineType, - } - repo.Turnouts = append(repo.Turnouts, converTurnoutUid(turnout, uidsMap)) + repo.Turnouts = append(repo.Turnouts, turnout) } for _, data := range storage.Signals { - var sectionId string - var turnoutPort *proto.DevicePort + signal := &proto.Signal{ + Id: uidsMap.SignalIds[GetMapElementId(data.Common)].Uid, + Km: convertKm(data.KilometerSystem), + Model: convertToProtoSignalModel(data.Mt), + } switch data.RefDev.DeviceType { case graphicData.RelatedRef_Section: - sectionId = data.RefDev.Id + signal.SectionId = uidsMap.PhysicalSectionIds[data.RefDev.Id].Uid case graphicData.RelatedRef_Turnout: - turnoutPort = convertDevicePort(data.RefDev) + signal.TurnoutPort = convertDevicePort(data.RefDev, uidsMap) } - signal := &proto.Signal{ - Id: GetMapElementId(data.Common), - Km: convertKm(data.KilometerSystem), - SectionId: sectionId, - TurnoutPort: turnoutPort, - Model: convertToProtoSignalModel(data.Mt), - } - repo.Signals = append(repo.Signals, converSignalUid(signal, uidsMap)) + repo.Signals = append(repo.Signals, signal) } stm := make(map[string][]string) for _, data := range storage.Transponders { - var sectionId string - var turnoutPort *proto.DevicePort - switch data.TransponderRef.DeviceType { - case graphicData.RelatedRef_Section: - sectionId = data.TransponderRef.Id - case graphicData.RelatedRef_Turnout: - turnoutPort = convertDevicePort(data.TransponderRef) - } responder := &proto.Transponder{ - Id: GetMapElementId(data.Common), + Id: uidsMap.TransponderIds[GetMapElementId(data.Common)].Uid, Km: convertKm(data.KilometerSystem), - SectionId: sectionId, - TurnoutPort: turnoutPort, FixedTelegram: data.FixedTelegram, Type: convertToProtoBaliseType(data.Type), } - repo.Transponders = append(repo.Transponders, converTransponderUid(responder, uidsMap)) + switch data.TransponderRef.DeviceType { + case graphicData.RelatedRef_Section: + responder.SectionId = uidsMap.PhysicalSectionIds[data.TransponderRef.Id].Uid + case graphicData.RelatedRef_Turnout: + responder.TurnoutPort = convertDevicePort(data.TransponderRef, uidsMap) + } for _, stationId := range data.CentralizedStations { var stationName string if uidsMap.StationIds[stationId] == nil { - stationName = stationId - } else { stationName = uidsMap.StationIds[stationId].Code } - - if stm[stationName] == nil { - stm[stationName] = []string{responder.Id} - } else { - stm[stationName] = append(stm[stationName], responder.Id) - } + stm[stationName] = append(stm[stationName], responder.Id) } + repo.Transponders = append(repo.Transponders, responder) } - slopeKsMap := make(map[string]*graphicData.SlopeKiloMarker) + slopeKsMap := make(map[uint32]*graphicData.SlopeKiloMarker) for _, data := range storage.SlopeKiloMarker { slopeKsMap[GetMapElementId(data.Common)] = data } - curveKsMap := make(map[string]*graphicData.CurvatureKiloMarker) - for _, data := range storage.CurvatureKiloMarker { - curveKsMap[GetMapElementId(data.Common)] = data - } for _, data := range storage.Slopes { var kms []*proto.Kilometer for _, id := range data.RefDeviceId { kms = append(kms, convertKm(slopeKsMap[id].KilometerSystem[0])) } slope := &proto.Slope{ - Id: GetMapElementId(data.Common), + Id: uidsMap.SlopeIds[GetMapElementId(data.Common)].Uid, Kms: kms, Degree: data.SlopeNumber, } - repo.Slopes = append(repo.Slopes, converSlopeUid(slope, uidsMap)) + repo.Slopes = append(repo.Slopes, slope) + } + curveKsMap := make(map[uint32]*graphicData.CurvatureKiloMarker) + for _, data := range storage.CurvatureKiloMarker { + curveKsMap[GetMapElementId(data.Common)] = data } for _, data := range storage.Curvatures { var kms []*proto.Kilometer @@ -1100,11 +1081,11 @@ func fillProtoRepository(repo *proto.Repository, storage *graphicData.RtssGraphi kms = append(kms, convertKm(curveKsMap[id].KilometerSystem[0])) } slope := &proto.SectionalCurvature{ - Id: GetMapElementId(data.Common), + Id: uidsMap.CurvatureIds[GetMapElementId(data.Common)].Uid, Kms: kms, Radius: data.CurvatureNumber, } - repo.SectionalCurvatures = append(repo.SectionalCurvatures, converCurvatureUid(slope, uidsMap)) + repo.SectionalCurvatures = append(repo.SectionalCurvatures, slope) } for _, data := range storage.KilometerConvertList { repo.KilometerConverts = append(repo.KilometerConverts, &proto.KilometerConvert{ @@ -1190,7 +1171,7 @@ func fillProtoRepository(repo *proto.Repository, storage *graphicData.RtssGraphi } } //站台 - platformMap := make(map[string]*graphicData.Platform) + platformMap := make(map[uint32]*graphicData.Platform) for _, data := range storage.Platforms { platformId := GetMapElementId(data.Common) platformMap[platformId] = data @@ -1229,7 +1210,7 @@ func handlerIBPDeviceToStation(station *proto.Station, repo *proto.Repository, i return } uidMap := QueryUidStructure[*IBPUidStructure](mapId) - deviceMap := make(map[string]*proto.ElectronicComponent) // 对应的设备类型 + deviceMap := make(map[uint32]*proto.ElectronicComponent) // 对应的设备类型 for _, data := range storage.IbpButtons { // 处理按钮 id := GetMapElementId(data.Common) b := &proto.Button{ @@ -1300,102 +1281,6 @@ func handlerIBPDeviceToStation(station *proto.Station, repo *proto.Repository, i } } -func converCheckPointUid(data *proto.CheckPoint, uidsMap *StationUidStructure) *proto.CheckPoint { - data.Id = uidsMap.AxlePointIds[data.Id].Uid - for _, c := range data.DevicePorts { - c.DeviceId = converRefUid(c.DeviceId, c.DeviceType, uidsMap) - } - return data -} - -func converSectionUid(data *proto.PhysicalSection, uidsMap *StationUidStructure) *proto.PhysicalSection { - data.Id = uidsMap.PhysicalSectionIds[data.Id].Uid - if data.ADevicePort != nil { - data.ADevicePort.DeviceId = converRefUid(data.ADevicePort.DeviceId, data.ADevicePort.DeviceType, uidsMap) - } - if data.BDevicePort != nil { - data.BDevicePort.DeviceId = converRefUid(data.BDevicePort.DeviceId, data.BDevicePort.DeviceType, uidsMap) - } - tids := make([]string, len(data.TurnoutIds)) - for i, tid := range data.TurnoutIds { - tids[i] = converRefUid(tid, proto.DeviceType_DeviceType_Turnout, uidsMap) - } - data.TurnoutIds = tids - return data -} - -func converTurnoutUid(data *proto.Turnout, uidsMap *StationUidStructure) *proto.Turnout { - data.Id = uidsMap.TurnoutIds[data.Id].Uid - if data.ADevicePort != nil { - data.ADevicePort.DeviceId = converRefUid(data.ADevicePort.DeviceId, data.ADevicePort.DeviceType, uidsMap) - } - if data.BDevicePort != nil { - data.BDevicePort.DeviceId = converRefUid(data.BDevicePort.DeviceId, data.BDevicePort.DeviceType, uidsMap) - } - if data.CDevicePort != nil { - data.CDevicePort.DeviceId = converRefUid(data.CDevicePort.DeviceId, data.CDevicePort.DeviceType, uidsMap) - } - return data -} - -func converSignalUid(data *proto.Signal, uidsMap *StationUidStructure) *proto.Signal { - data.Id = uidsMap.SignalIds[data.Id].Uid - if data.SectionId != "" { - data.SectionId = converRefUid(data.SectionId, proto.DeviceType_DeviceType_PhysicalSection, uidsMap) - } - if data.TurnoutPort != nil { - data.TurnoutPort.DeviceId = converRefUid(data.TurnoutPort.DeviceId, data.TurnoutPort.DeviceType, uidsMap) - } - return data -} - -func converTransponderUid(data *proto.Transponder, uidsMap *StationUidStructure) *proto.Transponder { - data.Id = uidsMap.TransponderIds[data.Id].Uid - if data.SectionId != "" { - data.SectionId = converRefUid(data.SectionId, proto.DeviceType_DeviceType_PhysicalSection, uidsMap) - } - if data.TurnoutPort != nil { - data.TurnoutPort.DeviceId = converRefUid(data.TurnoutPort.DeviceId, data.TurnoutPort.DeviceType, uidsMap) - } - return data -} - -func converSlopeUid(data *proto.Slope, uidsMap *StationUidStructure) *proto.Slope { - data.Id = uidsMap.SlopeIds[data.Id].Uid - return data -} - -func converCurvatureUid(data *proto.SectionalCurvature, uidsMap *StationUidStructure) *proto.SectionalCurvature { - data.Id = uidsMap.CurvatureIds[data.Id].Uid - return data -} - -func converRefUid(id string, d proto.DeviceType, uidsMap *StationUidStructure) string { - var elementId *elementIdStructure - switch d { - case proto.DeviceType_DeviceType_CheckPoint: - elementId = uidsMap.AxlePointIds[id] - case proto.DeviceType_DeviceType_PhysicalSection: - elementId = uidsMap.PhysicalSectionIds[id] - case proto.DeviceType_DeviceType_SectionalCurvature: - elementId = uidsMap.CurvatureIds[id] - case proto.DeviceType_DeviceType_Signal: - elementId = uidsMap.SignalIds[id] - case proto.DeviceType_DeviceType_Slope: - elementId = uidsMap.SlopeIds[id] - case proto.DeviceType_DeviceType_Transponder: - elementId = uidsMap.TransponderIds[id] - case proto.DeviceType_DeviceType_Turnout: - elementId = uidsMap.TurnoutIds[id] - default: - panic(&dto.ErrorDto{Code: dto.ArgumentParseError, Message: "异常的设备类型-" + d.String()}) - } - if elementId == nil { - return "" - } - return elementId.Uid -} - func convertKm(ks *graphicData.KilometerSystem) *proto.Kilometer { var dir proto.Direction switch ks.Direction { @@ -1411,11 +1296,10 @@ func convertKm(ks *graphicData.KilometerSystem) *proto.Kilometer { } } -func convertDevicePort(ref *graphicData.RelatedRef) *proto.DevicePort { +func convertDevicePort(ref *graphicData.RelatedRef, uidsMap *StationUidStructure) *proto.DevicePort { if ref == nil { return nil } - var deviceType proto.DeviceType var port proto.Port switch ref.DevicePort { case graphicData.RelatedRef_A: @@ -1425,34 +1309,30 @@ func convertDevicePort(ref *graphicData.RelatedRef) *proto.DevicePort { case graphicData.RelatedRef_C: port = proto.Port_C } + var elementId string + var deviceType proto.DeviceType switch ref.DeviceType { case graphicData.RelatedRef_Section: deviceType = proto.DeviceType_DeviceType_PhysicalSection + elementId = uidsMap.PhysicalSectionIds[ref.Id].Uid case graphicData.RelatedRef_Turnout: deviceType = proto.DeviceType_DeviceType_Turnout + elementId = uidsMap.TurnoutIds[ref.Id].Uid default: panic(fmt.Sprintf("异常的设备类型-%s", ref.DeviceType)) } return &proto.DevicePort{ - DeviceId: ref.Id, + DeviceId: elementId, DeviceType: deviceType, Port: port, } } -func convertDevicePorts(refList []*graphicData.RelatedRef) []*proto.DevicePort { - var dps []*proto.DevicePort - for _, ref := range refList { - dps = append(dps, convertDevicePort(ref)) - } - return dps -} - -func findTurnoutIds(axleCountingMap map[string]*graphicData.AxleCounting, axleIds []string) []string { +func findTurnoutIds(axleCountingMap map[uint32]*graphicData.AxleCounting, axleIds []uint32) []uint32 { if len(axleIds) <= 2 { return nil } - turnoutMap := make(map[string]int) + turnoutMap := make(map[uint32]int) for _, axleId := range axleIds { axle := axleCountingMap[axleId] for _, ref := range axle.AxleCountingRef { @@ -1461,7 +1341,7 @@ func findTurnoutIds(axleCountingMap map[string]*graphicData.AxleCounting, axleId } } } - var turnoutIds []string + var turnoutIds []uint32 for id, num := range turnoutMap { if num > 1 { turnoutIds = append(turnoutIds, id)