// Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.31.0 // protoc v4.23.1 // source: model.proto package proto import ( protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" sync "sync" ) const ( // Verify that this generated code is sufficiently up-to-date. _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) // Verify that runtime/protoimpl is sufficiently up-to-date. _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) type DeviceType int32 const ( DeviceType_DeviceType_Unknown DeviceType = 0 DeviceType_DeviceType_PhysicalSection DeviceType = 1 DeviceType_DeviceType_CheckPoint DeviceType = 2 DeviceType_DeviceType_Turnout DeviceType = 3 DeviceType_DeviceType_Signal DeviceType = 4 DeviceType_DeviceType_Transponder DeviceType = 5 DeviceType_DeviceType_Slope DeviceType = 6 DeviceType_DeviceType_SectionalCurvature DeviceType = 7 DeviceType_DeviceType_Link DeviceType = 8 DeviceType_DeviceType_LinkNode DeviceType = 9 DeviceType_DeviceType_Relay DeviceType = 10 DeviceType_DeviceType_PhaseFailureProtector DeviceType = 11 DeviceType_DeviceType_Button DeviceType = 12 DeviceType_DeviceType_Light DeviceType = 13 DeviceType_DeviceType_Alarm DeviceType = 14 DeviceType_DeviceType_Psd DeviceType = 15 DeviceType_DeviceType_Station DeviceType = 16 DeviceType_DeviceType_Mkx DeviceType = 17 DeviceType_DeviceType_Key DeviceType = 18 DeviceType_DeviceType_Platform DeviceType = 19 // 信号机故障报警仪 DeviceType_DeviceType_SignalFaultAlarm DeviceType = 20 // 断路器 DeviceType_DeviceType_Breakers DeviceType = 21 // 电源屏 DeviceType_DeviceType_PowerScreen DeviceType = 22 //--------ISCS 编号[300,500]------ // ISCS门磁 DeviceType_DeviceType_DoorSensor DeviceType = 323 // ISCS进闸机 DeviceType_DeviceType_EntranceGate DeviceType = 324 // ISCS出闸机 DeviceType_DeviceType_ExitGate DeviceType = 325 // ISCS双向闸机 DeviceType_DeviceType_TwoWayGate DeviceType = 326 // ISCS自动售票机 DeviceType_DeviceType_TicketVendingMachine DeviceType = 327 // ISCS半自动售票机 DeviceType_DeviceType_SemiAutoTicketMachine DeviceType = 328 // ISCS验票机 DeviceType_DeviceType_TicketCheckingMachine DeviceType = 329 // ISCS空气幕 DeviceType_DeviceType_AirCurtain DeviceType = 330 // ISCS冷水机组 DeviceType_DeviceType_ChillerUnit DeviceType = 331 // ISCS人防门 DeviceType_DeviceType_CivilDefenseDoor DeviceType = 332 // ISCS自动扶梯 DeviceType_DeviceType_Escalator DeviceType = 333 // ISCS垂直电梯 DeviceType_DeviceType_Elevator DeviceType = 334 // ISCS应急照明 DeviceType_DeviceType_EmergencyLighting DeviceType = 335 // ISCS风机设备(风机按用途作用又分很多子类型) DeviceType_DeviceType_Fan DeviceType = 336 // ISCS空调(包括 空调器、组合式空调等) DeviceType_DeviceType_AirConditioner DeviceType = 337 // ISCS流量开关 DeviceType_DeviceType_FlowSwitch DeviceType = 338 // ISCS照明导向 DeviceType_DeviceType_LightingGuidance DeviceType = 339 // ISCS电源开关导向 DeviceType_DeviceType_PowerSwitchGuidance DeviceType = 340 // ISCS扶梯导向 DeviceType_DeviceType_EscalatorGuidance DeviceType = 341 // ISCS闸机导向 DeviceType_DeviceType_TicketGateGuidance DeviceType = 342 // ISCS区间疏散导向指示 DeviceType_DeviceType_SectionEvacuationGuidance DeviceType = 343 // ISCS交换机 DeviceType_DeviceType_NetworkSwitch DeviceType = 344 // ISCS PLC控制器 DeviceType_DeviceType_PlcController DeviceType = 345 // ISCS 水泵(包括 冷冻水泵、冷却水循环泵、超声波型水泵、浮球型水泵、火警相关水泵等) DeviceType_DeviceType_WaterPump DeviceType = 346 // ISCS 水池水箱 DeviceType_DeviceType_WaterTank DeviceType = 347 // ISCS 净化装置 DeviceType_DeviceType_PurificationDevice DeviceType = 348 // ISCS 温湿度传感器 DeviceType_DeviceType_ThSensor DeviceType = 349 // ISCS CO2传感器 DeviceType_DeviceType_CO2Sensor DeviceType = 350 // ISCS 水温传感器 DeviceType_DeviceType_WaterTSensor DeviceType = 351 // ISCS 压力传感器 DeviceType_DeviceType_PressureSensor DeviceType = 352 // ISCS 流量传感器 DeviceType_DeviceType_FlowSensor DeviceType = 353 // ISCS 温度传感器 DeviceType_DeviceType_TemperatureSensor DeviceType = 354 // ISCS 调节阀(包括 电动风阀、电动调节阀、组合式风阀、电动两通调节阀、电动蝶阀、旁通阀开关 等) DeviceType_DeviceType_ControlValve DeviceType = 355 // ISCS 冷却塔 DeviceType_DeviceType_CoolingTower DeviceType = 356 // ISCS 水处理器 DeviceType_DeviceType_WaterProcessor DeviceType = 357 // ISCS 主机 DeviceType_DeviceType_NetworkHost DeviceType = 358 // ISCS 烟感 DeviceType_DeviceType_SmokeDetector DeviceType = 359 // ISCS 温感 DeviceType_DeviceType_TemperatureDetector DeviceType = 360 // ISCS 手动火灾报警按钮 DeviceType_DeviceType_ManualFireAlarmButton DeviceType = 361 // ISCS 气体灭火 DeviceType_DeviceType_GasFireExtinguisher DeviceType = 362 // ISCS 警铃 DeviceType_DeviceType_AlarmBell DeviceType = 363 // ISCS 防火卷帘(包括 隔断型防火卷帘、疏散型防火卷帘) DeviceType_DeviceType_FireRollerShutter DeviceType = 364 // ISCS 火警ACS联动 DeviceType_DeviceType_FasAcs DeviceType = 365 // ISCS 火警AFC联动 DeviceType_DeviceType_FasAfc DeviceType = 366 // ISCS 非消防电源 DeviceType_DeviceType_NonFirePowerSource DeviceType = 367 // ISCS 水流指示器 DeviceType_DeviceType_WaterFlowIndicator DeviceType = 368 // ISCS 启泵按钮 DeviceType_DeviceType_PumpStartButton DeviceType = 369 // ISCS 感温电缆 DeviceType_DeviceType_TemperatureSensingCable DeviceType = 370 // ISCS 防火阀 DeviceType_DeviceType_FireDamper DeviceType = 371 // ISCS 电动防烟防火 DeviceType_DeviceType_ElectricSmokeFireDamper DeviceType = 372 // ISCS 火灾互联互通信号 DeviceType_DeviceType_FireInterconnectionSignal DeviceType = 373 // ISCS 防淹门 DeviceType_DeviceType_FloodGate DeviceType = 374 // ISCS 电力线柜 DeviceType_DeviceType_WireCabinet DeviceType = 375 // ISCS 电力断路器 DeviceType_DeviceType_CircuitBreaker DeviceType = 376 // ISCS 电力整流器 DeviceType_DeviceType_Rectifier DeviceType = 377 // ISCS 电力手车 DeviceType_DeviceType_HandcartSwitch DeviceType = 378 // ISCS 变压器 DeviceType_DeviceType_VoltageTransformer DeviceType = 379 // ISCS 三工位隔离开关 DeviceType_DeviceType_ThreePositionSwitch DeviceType = 380 // ISCS 避雷器 DeviceType_DeviceType_LightningArrester DeviceType = 381 // ISCS 隔离开关 DeviceType_DeviceType_Disconnector DeviceType = 382 // ISCS 管线 DeviceType_DeviceType_Pipe DeviceType = 383 // ISCS 管件 DeviceType_DeviceType_PipeFitting DeviceType = 384 // ISCS 电源 DeviceType_DeviceType_PowerSource DeviceType = 385 ) // Enum value maps for DeviceType. var ( DeviceType_name = map[int32]string{ 0: "DeviceType_Unknown", 1: "DeviceType_PhysicalSection", 2: "DeviceType_CheckPoint", 3: "DeviceType_Turnout", 4: "DeviceType_Signal", 5: "DeviceType_Transponder", 6: "DeviceType_Slope", 7: "DeviceType_SectionalCurvature", 8: "DeviceType_Link", 9: "DeviceType_LinkNode", 10: "DeviceType_Relay", 11: "DeviceType_PhaseFailureProtector", 12: "DeviceType_Button", 13: "DeviceType_Light", 14: "DeviceType_Alarm", 15: "DeviceType_Psd", 16: "DeviceType_Station", 17: "DeviceType_Mkx", 18: "DeviceType_Key", 19: "DeviceType_Platform", 20: "DeviceType_SignalFaultAlarm", 21: "DeviceType_Breakers", 22: "DeviceType_PowerScreen", 323: "DeviceType_DoorSensor", 324: "DeviceType_EntranceGate", 325: "DeviceType_ExitGate", 326: "DeviceType_TwoWayGate", 327: "DeviceType_TicketVendingMachine", 328: "DeviceType_SemiAutoTicketMachine", 329: "DeviceType_TicketCheckingMachine", 330: "DeviceType_AirCurtain", 331: "DeviceType_ChillerUnit", 332: "DeviceType_CivilDefenseDoor", 333: "DeviceType_Escalator", 334: "DeviceType_Elevator", 335: "DeviceType_EmergencyLighting", 336: "DeviceType_Fan", 337: "DeviceType_AirConditioner", 338: "DeviceType_FlowSwitch", 339: "DeviceType_LightingGuidance", 340: "DeviceType_PowerSwitchGuidance", 341: "DeviceType_EscalatorGuidance", 342: "DeviceType_TicketGateGuidance", 343: "DeviceType_SectionEvacuationGuidance", 344: "DeviceType_NetworkSwitch", 345: "DeviceType_PlcController", 346: "DeviceType_WaterPump", 347: "DeviceType_WaterTank", 348: "DeviceType_PurificationDevice", 349: "DeviceType_ThSensor", 350: "DeviceType_CO2Sensor", 351: "DeviceType_WaterTSensor", 352: "DeviceType_PressureSensor", 353: "DeviceType_FlowSensor", 354: "DeviceType_TemperatureSensor", 355: "DeviceType_ControlValve", 356: "DeviceType_CoolingTower", 357: "DeviceType_WaterProcessor", 358: "DeviceType_NetworkHost", 359: "DeviceType_SmokeDetector", 360: "DeviceType_TemperatureDetector", 361: "DeviceType_ManualFireAlarmButton", 362: "DeviceType_GasFireExtinguisher", 363: "DeviceType_AlarmBell", 364: "DeviceType_FireRollerShutter", 365: "DeviceType_FasAcs", 366: "DeviceType_FasAfc", 367: "DeviceType_NonFirePowerSource", 368: "DeviceType_WaterFlowIndicator", 369: "DeviceType_PumpStartButton", 370: "DeviceType_TemperatureSensingCable", 371: "DeviceType_FireDamper", 372: "DeviceType_ElectricSmokeFireDamper", 373: "DeviceType_FireInterconnectionSignal", 374: "DeviceType_FloodGate", 375: "DeviceType_WireCabinet", 376: "DeviceType_CircuitBreaker", 377: "DeviceType_Rectifier", 378: "DeviceType_HandcartSwitch", 379: "DeviceType_VoltageTransformer", 380: "DeviceType_ThreePositionSwitch", 381: "DeviceType_LightningArrester", 382: "DeviceType_Disconnector", 383: "DeviceType_Pipe", 384: "DeviceType_PipeFitting", 385: "DeviceType_PowerSource", } DeviceType_value = map[string]int32{ "DeviceType_Unknown": 0, "DeviceType_PhysicalSection": 1, "DeviceType_CheckPoint": 2, "DeviceType_Turnout": 3, "DeviceType_Signal": 4, "DeviceType_Transponder": 5, "DeviceType_Slope": 6, "DeviceType_SectionalCurvature": 7, "DeviceType_Link": 8, "DeviceType_LinkNode": 9, "DeviceType_Relay": 10, "DeviceType_PhaseFailureProtector": 11, "DeviceType_Button": 12, "DeviceType_Light": 13, "DeviceType_Alarm": 14, "DeviceType_Psd": 15, "DeviceType_Station": 16, "DeviceType_Mkx": 17, "DeviceType_Key": 18, "DeviceType_Platform": 19, "DeviceType_SignalFaultAlarm": 20, "DeviceType_Breakers": 21, "DeviceType_PowerScreen": 22, "DeviceType_DoorSensor": 323, "DeviceType_EntranceGate": 324, "DeviceType_ExitGate": 325, "DeviceType_TwoWayGate": 326, "DeviceType_TicketVendingMachine": 327, "DeviceType_SemiAutoTicketMachine": 328, "DeviceType_TicketCheckingMachine": 329, "DeviceType_AirCurtain": 330, "DeviceType_ChillerUnit": 331, "DeviceType_CivilDefenseDoor": 332, "DeviceType_Escalator": 333, "DeviceType_Elevator": 334, "DeviceType_EmergencyLighting": 335, "DeviceType_Fan": 336, "DeviceType_AirConditioner": 337, "DeviceType_FlowSwitch": 338, "DeviceType_LightingGuidance": 339, "DeviceType_PowerSwitchGuidance": 340, "DeviceType_EscalatorGuidance": 341, "DeviceType_TicketGateGuidance": 342, "DeviceType_SectionEvacuationGuidance": 343, "DeviceType_NetworkSwitch": 344, "DeviceType_PlcController": 345, "DeviceType_WaterPump": 346, "DeviceType_WaterTank": 347, "DeviceType_PurificationDevice": 348, "DeviceType_ThSensor": 349, "DeviceType_CO2Sensor": 350, "DeviceType_WaterTSensor": 351, "DeviceType_PressureSensor": 352, "DeviceType_FlowSensor": 353, "DeviceType_TemperatureSensor": 354, "DeviceType_ControlValve": 355, "DeviceType_CoolingTower": 356, "DeviceType_WaterProcessor": 357, "DeviceType_NetworkHost": 358, "DeviceType_SmokeDetector": 359, "DeviceType_TemperatureDetector": 360, "DeviceType_ManualFireAlarmButton": 361, "DeviceType_GasFireExtinguisher": 362, "DeviceType_AlarmBell": 363, "DeviceType_FireRollerShutter": 364, "DeviceType_FasAcs": 365, "DeviceType_FasAfc": 366, "DeviceType_NonFirePowerSource": 367, "DeviceType_WaterFlowIndicator": 368, "DeviceType_PumpStartButton": 369, "DeviceType_TemperatureSensingCable": 370, "DeviceType_FireDamper": 371, "DeviceType_ElectricSmokeFireDamper": 372, "DeviceType_FireInterconnectionSignal": 373, "DeviceType_FloodGate": 374, "DeviceType_WireCabinet": 375, "DeviceType_CircuitBreaker": 376, "DeviceType_Rectifier": 377, "DeviceType_HandcartSwitch": 378, "DeviceType_VoltageTransformer": 379, "DeviceType_ThreePositionSwitch": 380, "DeviceType_LightningArrester": 381, "DeviceType_Disconnector": 382, "DeviceType_Pipe": 383, "DeviceType_PipeFitting": 384, "DeviceType_PowerSource": 385, } ) func (x DeviceType) Enum() *DeviceType { p := new(DeviceType) *p = x return p } func (x DeviceType) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (DeviceType) Descriptor() protoreflect.EnumDescriptor { return file_model_proto_enumTypes[0].Descriptor() } func (DeviceType) Type() protoreflect.EnumType { return &file_model_proto_enumTypes[0] } func (x DeviceType) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use DeviceType.Descriptor instead. func (DeviceType) EnumDescriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{0} } type Port int32 const ( Port_None Port = 0 //没有端口/未指定端口 Port_A Port = 1 Port_B Port = 2 Port_C Port = 3 Port_D Port = 4 ) // Enum value maps for Port. var ( Port_name = map[int32]string{ 0: "None", 1: "A", 2: "B", 3: "C", 4: "D", } Port_value = map[string]int32{ "None": 0, "A": 1, "B": 2, "C": 3, "D": 4, } ) func (x Port) Enum() *Port { p := new(Port) *p = x return p } func (x Port) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (Port) Descriptor() protoreflect.EnumDescriptor { return file_model_proto_enumTypes[1].Descriptor() } func (Port) Type() protoreflect.EnumType { return &file_model_proto_enumTypes[1] } func (x Port) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use Port.Descriptor instead. func (Port) EnumDescriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{1} } // 左右行 type Direction int32 const ( Direction_LEFT Direction = 0 Direction_RIGHT Direction = 1 ) // Enum value maps for Direction. var ( Direction_name = map[int32]string{ 0: "LEFT", 1: "RIGHT", } Direction_value = map[string]int32{ "LEFT": 0, "RIGHT": 1, } ) func (x Direction) Enum() *Direction { p := new(Direction) *p = x return p } func (x Direction) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (Direction) Descriptor() protoreflect.EnumDescriptor { return file_model_proto_enumTypes[2].Descriptor() } func (Direction) Type() protoreflect.EnumType { return &file_model_proto_enumTypes[2] } func (x Direction) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use Direction.Descriptor instead. func (Direction) EnumDescriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{2} } // 检测点类型 type CheckPointType int32 const ( CheckPointType_Boundary CheckPointType = 0 //区段边界 CheckPointType_AxleCounter CheckPointType = 1 //计轴器 CheckPointType_InsulatedJoint CheckPointType = 2 //绝缘节 ) // Enum value maps for CheckPointType. var ( CheckPointType_name = map[int32]string{ 0: "Boundary", 1: "AxleCounter", 2: "InsulatedJoint", } CheckPointType_value = map[string]int32{ "Boundary": 0, "AxleCounter": 1, "InsulatedJoint": 2, } ) func (x CheckPointType) Enum() *CheckPointType { p := new(CheckPointType) *p = x return p } func (x CheckPointType) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (CheckPointType) Descriptor() protoreflect.EnumDescriptor { return file_model_proto_enumTypes[3].Descriptor() } func (CheckPointType) Type() protoreflect.EnumType { return &file_model_proto_enumTypes[3] } func (x CheckPointType) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use CheckPointType.Descriptor instead. func (CheckPointType) EnumDescriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{3} } type Turnout_SwitchMachineType int32 const ( Turnout_Unknown Turnout_SwitchMachineType = 0 Turnout_ZDJ9_Single Turnout_SwitchMachineType = 1 Turnout_ZDJ9_Double Turnout_SwitchMachineType = 2 ) // Enum value maps for Turnout_SwitchMachineType. var ( Turnout_SwitchMachineType_name = map[int32]string{ 0: "Unknown", 1: "ZDJ9_Single", 2: "ZDJ9_Double", } Turnout_SwitchMachineType_value = map[string]int32{ "Unknown": 0, "ZDJ9_Single": 1, "ZDJ9_Double": 2, } ) func (x Turnout_SwitchMachineType) Enum() *Turnout_SwitchMachineType { p := new(Turnout_SwitchMachineType) *p = x return p } func (x Turnout_SwitchMachineType) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (Turnout_SwitchMachineType) Descriptor() protoreflect.EnumDescriptor { return file_model_proto_enumTypes[4].Descriptor() } func (Turnout_SwitchMachineType) Type() protoreflect.EnumType { return &file_model_proto_enumTypes[4] } func (x Turnout_SwitchMachineType) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use Turnout_SwitchMachineType.Descriptor instead. func (Turnout_SwitchMachineType) EnumDescriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{4, 0} } // 信号机模型类型枚举 // 从左向右,最左边为靠近灯座的灯 type Signal_Model int32 const ( Signal_HL Signal_Model = 0 //2XH-1 红绿 Signal_HLU_FU Signal_Model = 1 //2XH-1 红绿黄,封黄灯,无引导 Signal_HLU_DU_YY Signal_Model = 2 //3XH-1 红绿黄,不封灯,有单黄,带引导 Signal_HLU_YY Signal_Model = 3 //3XH-2或JDXH 红绿黄,不封灯,无单黄,带引导 Signal_HLU_FL_DU_YY Signal_Model = 4 //3XH-3 红绿黄,封绿灯,有单黄,带引导 Signal_HLU_DU Signal_Model = 5 //3XH-4 红绿黄,不封灯,有单黄,无引导 Signal_AB Signal_Model = 6 //DXCH 蓝白 Signal_HBU_DU Signal_Model = 7 //JCKXH 红白黄,不封灯,有单黄,无引导 ) // Enum value maps for Signal_Model. var ( Signal_Model_name = map[int32]string{ 0: "HL", 1: "HLU_FU", 2: "HLU_DU_YY", 3: "HLU_YY", 4: "HLU_FL_DU_YY", 5: "HLU_DU", 6: "AB", 7: "HBU_DU", } Signal_Model_value = map[string]int32{ "HL": 0, "HLU_FU": 1, "HLU_DU_YY": 2, "HLU_YY": 3, "HLU_FL_DU_YY": 4, "HLU_DU": 5, "AB": 6, "HBU_DU": 7, } ) func (x Signal_Model) Enum() *Signal_Model { p := new(Signal_Model) *p = x return p } func (x Signal_Model) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (Signal_Model) Descriptor() protoreflect.EnumDescriptor { return file_model_proto_enumTypes[5].Descriptor() } func (Signal_Model) Type() protoreflect.EnumType { return &file_model_proto_enumTypes[5] } func (x Signal_Model) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use Signal_Model.Descriptor instead. func (Signal_Model) EnumDescriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{5, 0} } type Transponder_Type int32 const ( Transponder_FB Transponder_Type = 0 // 固定应答器 Transponder_WB Transponder_Type = 1 // 轮径校正应答器 Transponder_DB Transponder_Type = 2 // 休眠唤醒应答器 Transponder_VB Transponder_Type = 3 // 主信号应答器 Transponder_IB Transponder_Type = 4 // 预告应答器 ) // Enum value maps for Transponder_Type. var ( Transponder_Type_name = map[int32]string{ 0: "FB", 1: "WB", 2: "DB", 3: "VB", 4: "IB", } Transponder_Type_value = map[string]int32{ "FB": 0, "WB": 1, "DB": 2, "VB": 3, "IB": 4, } ) func (x Transponder_Type) Enum() *Transponder_Type { p := new(Transponder_Type) *p = x return p } func (x Transponder_Type) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (Transponder_Type) Descriptor() protoreflect.EnumDescriptor { return file_model_proto_enumTypes[6].Descriptor() } func (Transponder_Type) Type() protoreflect.EnumType { return &file_model_proto_enumTypes[6] } func (x Transponder_Type) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use Transponder_Type.Descriptor instead. func (Transponder_Type) EnumDescriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{7, 0} } type Relay_Model int32 const ( Relay_Unknown Relay_Model = 0 Relay_JPXC_1000 Relay_Model = 1 Relay_JPXC_1700 Relay_Model = 2 Relay_JWJXC_480 Relay_Model = 3 Relay_JWJXC_H125_80 Relay_Model = 4 Relay_JWXC_1700 Relay_Model = 5 Relay_JWXC_H340 Relay_Model = 6 Relay_JYJXC_160_260 Relay_Model = 7 Relay_JZXC_H18 Relay_Model = 8 ) // Enum value maps for Relay_Model. var ( Relay_Model_name = map[int32]string{ 0: "Unknown", 1: "JPXC_1000", 2: "JPXC_1700", 3: "JWJXC_480", 4: "JWJXC_H125_80", 5: "JWXC_1700", 6: "JWXC_H340", 7: "JYJXC_160_260", 8: "JZXC_H18", } Relay_Model_value = map[string]int32{ "Unknown": 0, "JPXC_1000": 1, "JPXC_1700": 2, "JWJXC_480": 3, "JWJXC_H125_80": 4, "JWXC_1700": 5, "JWXC_H340": 6, "JYJXC_160_260": 7, "JZXC_H18": 8, } ) func (x Relay_Model) Enum() *Relay_Model { p := new(Relay_Model) *p = x return p } func (x Relay_Model) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (Relay_Model) Descriptor() protoreflect.EnumDescriptor { return file_model_proto_enumTypes[7].Descriptor() } func (Relay_Model) Type() protoreflect.EnumType { return &file_model_proto_enumTypes[7] } func (x Relay_Model) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use Relay_Model.Descriptor instead. func (Relay_Model) EnumDescriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{13, 0} } type Button_ButtonType int32 const ( Button_Unknown Button_ButtonType = 0 Button_NO_Reset_Press Button_ButtonType = 1 Button_NO_Reset_Up Button_ButtonType = 2 Button_Reset_Press Button_ButtonType = 3 Button_Reset_Up Button_ButtonType = 4 Button_Key_Knob Button_ButtonType = 5 ) // Enum value maps for Button_ButtonType. var ( Button_ButtonType_name = map[int32]string{ 0: "Unknown", 1: "NO_Reset_Press", 2: "NO_Reset_Up", 3: "Reset_Press", 4: "Reset_Up", 5: "Key_Knob", } Button_ButtonType_value = map[string]int32{ "Unknown": 0, "NO_Reset_Press": 1, "NO_Reset_Up": 2, "Reset_Press": 3, "Reset_Up": 4, "Key_Knob": 5, } ) func (x Button_ButtonType) Enum() *Button_ButtonType { p := new(Button_ButtonType) *p = x return p } func (x Button_ButtonType) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (Button_ButtonType) Descriptor() protoreflect.EnumDescriptor { return file_model_proto_enumTypes[8].Descriptor() } func (Button_ButtonType) Type() protoreflect.EnumType { return &file_model_proto_enumTypes[8] } func (x Button_ButtonType) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use Button_ButtonType.Descriptor instead. func (Button_ButtonType) EnumDescriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{16, 0} } type Light_LightAspect int32 const ( Light_L Light_LightAspect = 0 //绿灯 Light_H Light_LightAspect = 1 //红灯 Light_U Light_LightAspect = 2 //黄灯 Light_HU Light_LightAspect = 3 //红黄灯 Light_B Light_LightAspect = 4 //白灯 Light_A Light_LightAspect = 5 //蓝灯 ) // Enum value maps for Light_LightAspect. var ( Light_LightAspect_name = map[int32]string{ 0: "L", 1: "H", 2: "U", 3: "HU", 4: "B", 5: "A", } Light_LightAspect_value = map[string]int32{ "L": 0, "H": 1, "U": 2, "HU": 3, "B": 4, "A": 5, } ) func (x Light_LightAspect) Enum() *Light_LightAspect { p := new(Light_LightAspect) *p = x return p } func (x Light_LightAspect) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (Light_LightAspect) Descriptor() protoreflect.EnumDescriptor { return file_model_proto_enumTypes[9].Descriptor() } func (Light_LightAspect) Type() protoreflect.EnumType { return &file_model_proto_enumTypes[9] } func (x Light_LightAspect) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use Light_LightAspect.Descriptor instead. func (Light_LightAspect) EnumDescriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{17, 0} } type Pipe_Type int32 const ( Pipe_Water Pipe_Type = 0 //水管 Pipe_ElectricPower Pipe_Type = 1 //电力母线 ) // Enum value maps for Pipe_Type. var ( Pipe_Type_name = map[int32]string{ 0: "Water", 1: "ElectricPower", } Pipe_Type_value = map[string]int32{ "Water": 0, "ElectricPower": 1, } ) func (x Pipe_Type) Enum() *Pipe_Type { p := new(Pipe_Type) *p = x return p } func (x Pipe_Type) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (Pipe_Type) Descriptor() protoreflect.EnumDescriptor { return file_model_proto_enumTypes[10].Descriptor() } func (Pipe_Type) Type() protoreflect.EnumType { return &file_model_proto_enumTypes[10] } func (x Pipe_Type) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use Pipe_Type.Descriptor instead. func (Pipe_Type) EnumDescriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{32, 0} } type Repository struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` PhysicalSections []*PhysicalSection `protobuf:"bytes,3,rep,name=physicalSections,proto3" json:"physicalSections,omitempty"` CheckPoints []*CheckPoint `protobuf:"bytes,4,rep,name=checkPoints,proto3" json:"checkPoints,omitempty"` Turnouts []*Turnout `protobuf:"bytes,5,rep,name=turnouts,proto3" json:"turnouts,omitempty"` Signals []*Signal `protobuf:"bytes,6,rep,name=signals,proto3" json:"signals,omitempty"` Transponders []*Transponder `protobuf:"bytes,7,rep,name=transponders,proto3" json:"transponders,omitempty"` Slopes []*Slope `protobuf:"bytes,8,rep,name=slopes,proto3" json:"slopes,omitempty"` SectionalCurvatures []*SectionalCurvature `protobuf:"bytes,9,rep,name=sectionalCurvatures,proto3" json:"sectionalCurvatures,omitempty"` KilometerConverts []*KilometerConvert `protobuf:"bytes,10,rep,name=kilometerConverts,proto3" json:"kilometerConverts,omitempty"` Relays []*Relay `protobuf:"bytes,11,rep,name=relays,proto3" json:"relays,omitempty"` PhaseFailureProtectors []*PhaseFailureProtector `protobuf:"bytes,12,rep,name=phaseFailureProtectors,proto3" json:"phaseFailureProtectors,omitempty"` Buttons []*Button `protobuf:"bytes,13,rep,name=buttons,proto3" json:"buttons,omitempty"` Psds []*Psd `protobuf:"bytes,14,rep,name=psds,proto3" json:"psds,omitempty"` Lights []*Light `protobuf:"bytes,15,rep,name=lights,proto3" json:"lights,omitempty"` Alarms []*Alarm `protobuf:"bytes,16,rep,name=alarms,proto3" json:"alarms,omitempty"` Stations []*Station `protobuf:"bytes,17,rep,name=stations,proto3" json:"stations,omitempty"` Mkxs []*Mkx `protobuf:"bytes,18,rep,name=mkxs,proto3" json:"mkxs,omitempty"` Platforms []*Platform `protobuf:"bytes,19,rep,name=platforms,proto3" json:"platforms,omitempty"` MainCoordinateSystem string `protobuf:"bytes,20,opt,name=mainCoordinateSystem,proto3" json:"mainCoordinateSystem,omitempty"` Keys []*Key `protobuf:"bytes,21,rep,name=Keys,proto3" json:"Keys,omitempty"` CentralizedStationRefs []*CentralizedStationRef `protobuf:"bytes,22,rep,name=CentralizedStationRefs,proto3" json:"CentralizedStationRefs,omitempty"` // ISCS 编号[300,500] // ISCS管线 Pipes []*Pipe `protobuf:"bytes,300,rep,name=pipes,proto3" json:"pipes,omitempty"` // ISCS管件 PipeFittings []*PipeFitting `protobuf:"bytes,301,rep,name=pipeFittings,proto3" json:"pipeFittings,omitempty"` // ISCS断路器 CircuitBreakers []*CircuitBreaker `protobuf:"bytes,302,rep,name=circuitBreakers,proto3" json:"circuitBreakers,omitempty"` // ISCS三工位开关 ThreePositionSwitches []*ThreePositionSwitch `protobuf:"bytes,303,rep,name=threePositionSwitches,proto3" json:"threePositionSwitches,omitempty"` // ISCS手车 HandcartSwitches []*HandcartSwitch `protobuf:"bytes,304,rep,name=handcartSwitches,proto3" json:"handcartSwitches,omitempty"` // ISCS整流器 Rectifiers []*Rectifier `protobuf:"bytes,305,rep,name=rectifiers,proto3" json:"rectifiers,omitempty"` // ISCS隔离开关 Disconnectors []*Disconnector `protobuf:"bytes,306,rep,name=disconnectors,proto3" json:"disconnectors,omitempty"` // ISCS变压器 VoltageTransformers []*VoltageTransformer `protobuf:"bytes,307,rep,name=voltageTransformers,proto3" json:"voltageTransformers,omitempty"` // ISCS电源 PowerSources []*PowerSource `protobuf:"bytes,308,rep,name=powerSources,proto3" json:"powerSources,omitempty"` // ISCS避雷器 LightningArresters []*LightningArrester `protobuf:"bytes,309,rep,name=lightningArresters,proto3" json:"lightningArresters,omitempty"` } func (x *Repository) Reset() { *x = Repository{} if protoimpl.UnsafeEnabled { mi := &file_model_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Repository) String() string { return protoimpl.X.MessageStringOf(x) } func (*Repository) ProtoMessage() {} func (x *Repository) ProtoReflect() protoreflect.Message { mi := &file_model_proto_msgTypes[0] 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 Repository.ProtoReflect.Descriptor instead. func (*Repository) Descriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{0} } func (x *Repository) GetId() string { if x != nil { return x.Id } return "" } func (x *Repository) GetVersion() string { if x != nil { return x.Version } return "" } func (x *Repository) GetPhysicalSections() []*PhysicalSection { if x != nil { return x.PhysicalSections } return nil } func (x *Repository) GetCheckPoints() []*CheckPoint { if x != nil { return x.CheckPoints } return nil } func (x *Repository) GetTurnouts() []*Turnout { if x != nil { return x.Turnouts } return nil } func (x *Repository) GetSignals() []*Signal { if x != nil { return x.Signals } return nil } func (x *Repository) GetTransponders() []*Transponder { if x != nil { return x.Transponders } return nil } func (x *Repository) GetSlopes() []*Slope { if x != nil { return x.Slopes } return nil } func (x *Repository) GetSectionalCurvatures() []*SectionalCurvature { if x != nil { return x.SectionalCurvatures } return nil } func (x *Repository) GetKilometerConverts() []*KilometerConvert { if x != nil { return x.KilometerConverts } return nil } func (x *Repository) GetRelays() []*Relay { if x != nil { return x.Relays } return nil } func (x *Repository) GetPhaseFailureProtectors() []*PhaseFailureProtector { if x != nil { return x.PhaseFailureProtectors } return nil } func (x *Repository) GetButtons() []*Button { if x != nil { return x.Buttons } return nil } func (x *Repository) GetPsds() []*Psd { if x != nil { return x.Psds } return nil } func (x *Repository) GetLights() []*Light { if x != nil { return x.Lights } return nil } func (x *Repository) GetAlarms() []*Alarm { if x != nil { return x.Alarms } return nil } func (x *Repository) GetStations() []*Station { if x != nil { return x.Stations } return nil } func (x *Repository) GetMkxs() []*Mkx { if x != nil { return x.Mkxs } return nil } func (x *Repository) GetPlatforms() []*Platform { if x != nil { return x.Platforms } return nil } func (x *Repository) GetMainCoordinateSystem() string { if x != nil { return x.MainCoordinateSystem } return "" } func (x *Repository) GetKeys() []*Key { if x != nil { return x.Keys } return nil } func (x *Repository) GetCentralizedStationRefs() []*CentralizedStationRef { if x != nil { return x.CentralizedStationRefs } return nil } func (x *Repository) GetPipes() []*Pipe { if x != nil { return x.Pipes } return nil } func (x *Repository) GetPipeFittings() []*PipeFitting { if x != nil { return x.PipeFittings } return nil } func (x *Repository) GetCircuitBreakers() []*CircuitBreaker { if x != nil { return x.CircuitBreakers } return nil } func (x *Repository) GetThreePositionSwitches() []*ThreePositionSwitch { if x != nil { return x.ThreePositionSwitches } return nil } func (x *Repository) GetHandcartSwitches() []*HandcartSwitch { if x != nil { return x.HandcartSwitches } return nil } func (x *Repository) GetRectifiers() []*Rectifier { if x != nil { return x.Rectifiers } return nil } func (x *Repository) GetDisconnectors() []*Disconnector { if x != nil { return x.Disconnectors } return nil } func (x *Repository) GetVoltageTransformers() []*VoltageTransformer { if x != nil { return x.VoltageTransformers } return nil } func (x *Repository) GetPowerSources() []*PowerSource { if x != nil { return x.PowerSources } return nil } func (x *Repository) GetLightningArresters() []*LightningArrester { if x != nil { return x.LightningArresters } return nil } // 信号布置数据 type SignalLayout struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // 物理区段 PhysicalSections []*PhysicalSection `protobuf:"bytes,3,rep,name=physicalSections,proto3" json:"physicalSections,omitempty"` CheckPoints []*CheckPoint `protobuf:"bytes,4,rep,name=checkPoints,proto3" json:"checkPoints,omitempty"` Turnouts []*Turnout `protobuf:"bytes,5,rep,name=turnouts,proto3" json:"turnouts,omitempty"` Signals []*Signal `protobuf:"bytes,6,rep,name=signals,proto3" json:"signals,omitempty"` Transponders []*Transponder `protobuf:"bytes,7,rep,name=transponders,proto3" json:"transponders,omitempty"` Slopes []*Slope `protobuf:"bytes,8,rep,name=slopes,proto3" json:"slopes,omitempty"` SectionalCurvatures []*SectionalCurvature `protobuf:"bytes,9,rep,name=sectionalCurvatures,proto3" json:"sectionalCurvatures,omitempty"` KilometerConverts []*KilometerConvert `protobuf:"bytes,10,rep,name=kilometerConverts,proto3" json:"kilometerConverts,omitempty"` } func (x *SignalLayout) Reset() { *x = SignalLayout{} if protoimpl.UnsafeEnabled { mi := &file_model_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *SignalLayout) String() string { return protoimpl.X.MessageStringOf(x) } func (*SignalLayout) ProtoMessage() {} func (x *SignalLayout) ProtoReflect() protoreflect.Message { mi := &file_model_proto_msgTypes[1] 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 SignalLayout.ProtoReflect.Descriptor instead. func (*SignalLayout) Descriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{1} } func (x *SignalLayout) GetPhysicalSections() []*PhysicalSection { if x != nil { return x.PhysicalSections } return nil } func (x *SignalLayout) GetCheckPoints() []*CheckPoint { if x != nil { return x.CheckPoints } return nil } func (x *SignalLayout) GetTurnouts() []*Turnout { if x != nil { return x.Turnouts } return nil } func (x *SignalLayout) GetSignals() []*Signal { if x != nil { return x.Signals } return nil } func (x *SignalLayout) GetTransponders() []*Transponder { if x != nil { return x.Transponders } return nil } func (x *SignalLayout) GetSlopes() []*Slope { if x != nil { return x.Slopes } return nil } func (x *SignalLayout) GetSectionalCurvatures() []*SectionalCurvature { if x != nil { return x.SectionalCurvatures } return nil } func (x *SignalLayout) GetKilometerConverts() []*KilometerConvert { if x != nil { return x.KilometerConverts } return nil } // 物理区段 type PhysicalSection struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` TurnoutIds []string `protobuf:"bytes,2,rep,name=turnoutIds,proto3" json:"turnoutIds,omitempty"` //道岔物理区段关联的道岔 ADevicePort *DevicePort `protobuf:"bytes,3,opt,name=aDevicePort,proto3" json:"aDevicePort,omitempty"` //非道岔物理区段A端关联的设备端口 BDevicePort *DevicePort `protobuf:"bytes,4,opt,name=bDevicePort,proto3" json:"bDevicePort,omitempty"` // 物理区段所属集中站 CentralizedStation string `protobuf:"bytes,5,opt,name=centralizedStation,proto3" json:"centralizedStation,omitempty"` } func (x *PhysicalSection) Reset() { *x = PhysicalSection{} if protoimpl.UnsafeEnabled { mi := &file_model_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *PhysicalSection) String() string { return protoimpl.X.MessageStringOf(x) } func (*PhysicalSection) ProtoMessage() {} func (x *PhysicalSection) ProtoReflect() protoreflect.Message { mi := &file_model_proto_msgTypes[2] 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 PhysicalSection.ProtoReflect.Descriptor instead. func (*PhysicalSection) Descriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{2} } func (x *PhysicalSection) GetId() string { if x != nil { return x.Id } return "" } func (x *PhysicalSection) GetTurnoutIds() []string { if x != nil { return x.TurnoutIds } return nil } func (x *PhysicalSection) GetADevicePort() *DevicePort { if x != nil { return x.ADevicePort } return nil } func (x *PhysicalSection) GetBDevicePort() *DevicePort { if x != nil { return x.BDevicePort } return nil } func (x *PhysicalSection) GetCentralizedStation() string { if x != nil { return x.CentralizedStation } return "" } // 区段检测点 type CheckPoint struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` Km *Kilometer `protobuf:"bytes,2,opt,name=km,proto3" json:"km,omitempty"` Type CheckPointType `protobuf:"varint,3,opt,name=type,proto3,enum=model.CheckPointType" json:"type,omitempty"` DevicePorts []*DevicePort `protobuf:"bytes,4,rep,name=devicePorts,proto3" json:"devicePorts,omitempty"` } func (x *CheckPoint) Reset() { *x = CheckPoint{} if protoimpl.UnsafeEnabled { mi := &file_model_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *CheckPoint) String() string { return protoimpl.X.MessageStringOf(x) } func (*CheckPoint) ProtoMessage() {} func (x *CheckPoint) ProtoReflect() protoreflect.Message { mi := &file_model_proto_msgTypes[3] 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 CheckPoint.ProtoReflect.Descriptor instead. func (*CheckPoint) Descriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{3} } func (x *CheckPoint) GetId() string { if x != nil { return x.Id } return "" } func (x *CheckPoint) GetKm() *Kilometer { if x != nil { return x.Km } return nil } func (x *CheckPoint) GetType() CheckPointType { if x != nil { return x.Type } return CheckPointType_Boundary } func (x *CheckPoint) GetDevicePorts() []*DevicePort { if x != nil { return x.DevicePorts } return nil } // 道岔 type Turnout struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` Km *Kilometer `protobuf:"bytes,2,opt,name=km,proto3" json:"km,omitempty"` ADevicePort *DevicePort `protobuf:"bytes,3,opt,name=aDevicePort,proto3" json:"aDevicePort,omitempty"` BDevicePort *DevicePort `protobuf:"bytes,4,opt,name=bDevicePort,proto3" json:"bDevicePort,omitempty"` CDevicePort *DevicePort `protobuf:"bytes,5,opt,name=cDevicePort,proto3" json:"cDevicePort,omitempty"` SwitchMachineType Turnout_SwitchMachineType `protobuf:"varint,6,opt,name=switchMachineType,proto3,enum=model.Turnout_SwitchMachineType" json:"switchMachineType,omitempty"` ElectronicComponentGroups []*ElectronicComponentGroup `protobuf:"bytes,7,rep,name=electronicComponentGroups,proto3" json:"electronicComponentGroups,omitempty"` //关联的电子元件组合 } func (x *Turnout) Reset() { *x = Turnout{} if protoimpl.UnsafeEnabled { mi := &file_model_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Turnout) String() string { return protoimpl.X.MessageStringOf(x) } func (*Turnout) ProtoMessage() {} func (x *Turnout) ProtoReflect() protoreflect.Message { mi := &file_model_proto_msgTypes[4] 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 Turnout.ProtoReflect.Descriptor instead. func (*Turnout) Descriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{4} } func (x *Turnout) GetId() string { if x != nil { return x.Id } return "" } func (x *Turnout) GetKm() *Kilometer { if x != nil { return x.Km } return nil } func (x *Turnout) GetADevicePort() *DevicePort { if x != nil { return x.ADevicePort } return nil } func (x *Turnout) GetBDevicePort() *DevicePort { if x != nil { return x.BDevicePort } return nil } func (x *Turnout) GetCDevicePort() *DevicePort { if x != nil { return x.CDevicePort } return nil } func (x *Turnout) GetSwitchMachineType() Turnout_SwitchMachineType { if x != nil { return x.SwitchMachineType } return Turnout_Unknown } func (x *Turnout) GetElectronicComponentGroups() []*ElectronicComponentGroup { if x != nil { return x.ElectronicComponentGroups } return nil } // 信号机 type Signal struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` Km *Kilometer `protobuf:"bytes,2,opt,name=km,proto3" json:"km,omitempty"` SectionId string `protobuf:"bytes,3,opt,name=sectionId,proto3" json:"sectionId,omitempty"` //关联的区段 TurnoutPort *DevicePort `protobuf:"bytes,4,opt,name=turnoutPort,proto3" json:"turnoutPort,omitempty"` //关联的区段端口 ElectronicComponentGroups []*ElectronicComponentGroup `protobuf:"bytes,7,rep,name=electronicComponentGroups,proto3" json:"electronicComponentGroups,omitempty"` //关联的电子元件组合 Code string `protobuf:"bytes,8,opt,name=code,proto3" json:"code,omitempty"` //信号机组合类型 Model Signal_Model `protobuf:"varint,9,opt,name=model,proto3,enum=model.Signal_Model" json:"model,omitempty"` //信号机模型类型(stationLayoutGraphics.proto Signal.Model枚举值) } func (x *Signal) Reset() { *x = Signal{} if protoimpl.UnsafeEnabled { mi := &file_model_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Signal) String() string { return protoimpl.X.MessageStringOf(x) } func (*Signal) ProtoMessage() {} func (x *Signal) ProtoReflect() protoreflect.Message { mi := &file_model_proto_msgTypes[5] 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 Signal.ProtoReflect.Descriptor instead. func (*Signal) Descriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{5} } func (x *Signal) GetId() string { if x != nil { return x.Id } return "" } func (x *Signal) GetKm() *Kilometer { if x != nil { return x.Km } return nil } func (x *Signal) GetSectionId() string { if x != nil { return x.SectionId } return "" } func (x *Signal) GetTurnoutPort() *DevicePort { if x != nil { return x.TurnoutPort } return nil } func (x *Signal) GetElectronicComponentGroups() []*ElectronicComponentGroup { if x != nil { return x.ElectronicComponentGroups } return nil } func (x *Signal) GetCode() string { if x != nil { return x.Code } return "" } func (x *Signal) GetModel() Signal_Model { if x != nil { return x.Model } return Signal_HL } type Psd struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` PlatformId string `protobuf:"bytes,2,opt,name=platformId,proto3" json:"platformId,omitempty"` AsdAmount int32 `protobuf:"varint,3,opt,name=asdAmount,proto3" json:"asdAmount,omitempty"` AsdGroups []*AsdGroup `protobuf:"bytes,4,rep,name=asdGroups,proto3" json:"asdGroups,omitempty"` ElectronicComponentGroups []*ElectronicComponentGroup `protobuf:"bytes,5,rep,name=electronicComponentGroups,proto3" json:"electronicComponentGroups,omitempty"` //关联的电子元件组合 } func (x *Psd) Reset() { *x = Psd{} if protoimpl.UnsafeEnabled { mi := &file_model_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Psd) String() string { return protoimpl.X.MessageStringOf(x) } func (*Psd) ProtoMessage() {} func (x *Psd) ProtoReflect() protoreflect.Message { mi := &file_model_proto_msgTypes[6] 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 Psd.ProtoReflect.Descriptor instead. func (*Psd) Descriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{6} } func (x *Psd) GetId() string { if x != nil { return x.Id } return "" } func (x *Psd) GetPlatformId() string { if x != nil { return x.PlatformId } return "" } func (x *Psd) GetAsdAmount() int32 { if x != nil { return x.AsdAmount } return 0 } func (x *Psd) GetAsdGroups() []*AsdGroup { if x != nil { return x.AsdGroups } return nil } func (x *Psd) GetElectronicComponentGroups() []*ElectronicComponentGroup { if x != nil { return x.ElectronicComponentGroups } return nil } // 应答器 type Transponder struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` Km *Kilometer `protobuf:"bytes,2,opt,name=km,proto3" json:"km,omitempty"` SectionId string `protobuf:"bytes,3,opt,name=sectionId,proto3" json:"sectionId,omitempty"` //关联的区段 TurnoutPort *DevicePort `protobuf:"bytes,4,opt,name=turnoutPort,proto3" json:"turnoutPort,omitempty"` //关联的区段端口 FixedTelegram []byte `protobuf:"bytes,5,opt,name=fixedTelegram,proto3" json:"fixedTelegram,omitempty"` //无源应答器固定报文 Type Transponder_Type `protobuf:"varint,6,opt,name=type,proto3,enum=model.Transponder_Type" json:"type,omitempty"` //应答器类型 } func (x *Transponder) Reset() { *x = Transponder{} if protoimpl.UnsafeEnabled { mi := &file_model_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Transponder) String() string { return protoimpl.X.MessageStringOf(x) } func (*Transponder) ProtoMessage() {} func (x *Transponder) ProtoReflect() protoreflect.Message { mi := &file_model_proto_msgTypes[7] 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 Transponder.ProtoReflect.Descriptor instead. func (*Transponder) Descriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{7} } func (x *Transponder) GetId() string { if x != nil { return x.Id } return "" } func (x *Transponder) GetKm() *Kilometer { if x != nil { return x.Km } return nil } func (x *Transponder) GetSectionId() string { if x != nil { return x.SectionId } return "" } func (x *Transponder) GetTurnoutPort() *DevicePort { if x != nil { return x.TurnoutPort } return nil } func (x *Transponder) GetFixedTelegram() []byte { if x != nil { return x.FixedTelegram } return nil } func (x *Transponder) GetType() Transponder_Type { if x != nil { return x.Type } return Transponder_FB } // 坡度 type Slope struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` Kms []*Kilometer `protobuf:"bytes,2,rep,name=kms,proto3" json:"kms,omitempty"` Degree int32 `protobuf:"varint,3,opt,name=degree,proto3" json:"degree,omitempty"` //坡度角的sin * 1000 } func (x *Slope) Reset() { *x = Slope{} if protoimpl.UnsafeEnabled { mi := &file_model_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Slope) String() string { return protoimpl.X.MessageStringOf(x) } func (*Slope) ProtoMessage() {} func (x *Slope) ProtoReflect() protoreflect.Message { mi := &file_model_proto_msgTypes[8] 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 Slope.ProtoReflect.Descriptor instead. func (*Slope) Descriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{8} } func (x *Slope) GetId() string { if x != nil { return x.Id } return "" } func (x *Slope) GetKms() []*Kilometer { if x != nil { return x.Kms } return nil } func (x *Slope) GetDegree() int32 { if x != nil { return x.Degree } return 0 } // 分段曲率 type SectionalCurvature struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` Kms []*Kilometer `protobuf:"bytes,2,rep,name=kms,proto3" json:"kms,omitempty"` Radius int32 `protobuf:"varint,3,opt,name=radius,proto3" json:"radius,omitempty"` //半径 mm } func (x *SectionalCurvature) Reset() { *x = SectionalCurvature{} if protoimpl.UnsafeEnabled { mi := &file_model_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *SectionalCurvature) String() string { return protoimpl.X.MessageStringOf(x) } func (*SectionalCurvature) ProtoMessage() {} func (x *SectionalCurvature) ProtoReflect() protoreflect.Message { mi := &file_model_proto_msgTypes[9] 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 SectionalCurvature.ProtoReflect.Descriptor instead. func (*SectionalCurvature) Descriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{9} } func (x *SectionalCurvature) GetId() string { if x != nil { return x.Id } return "" } func (x *SectionalCurvature) GetKms() []*Kilometer { if x != nil { return x.Kms } return nil } func (x *SectionalCurvature) GetRadius() int32 { if x != nil { return x.Radius } return 0 } // 设备及端口 type DevicePort struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields DeviceId string `protobuf:"bytes,1,opt,name=deviceId,proto3" json:"deviceId,omitempty"` DeviceType DeviceType `protobuf:"varint,2,opt,name=deviceType,proto3,enum=model.DeviceType" json:"deviceType,omitempty"` Port Port `protobuf:"varint,3,opt,name=port,proto3,enum=model.Port" json:"port,omitempty"` } func (x *DevicePort) Reset() { *x = DevicePort{} if protoimpl.UnsafeEnabled { mi := &file_model_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *DevicePort) String() string { return protoimpl.X.MessageStringOf(x) } func (*DevicePort) ProtoMessage() {} func (x *DevicePort) ProtoReflect() protoreflect.Message { mi := &file_model_proto_msgTypes[10] 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 DevicePort.ProtoReflect.Descriptor instead. func (*DevicePort) Descriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{10} } func (x *DevicePort) GetDeviceId() string { if x != nil { return x.DeviceId } return "" } func (x *DevicePort) GetDeviceType() DeviceType { if x != nil { return x.DeviceType } return DeviceType_DeviceType_Unknown } func (x *DevicePort) GetPort() Port { if x != nil { return x.Port } return Port_None } // 公里标 type Kilometer struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Value int64 `protobuf:"varint,1,opt,name=value,proto3" json:"value,omitempty"` //公里标mm CoordinateSystem string `protobuf:"bytes,2,opt,name=coordinateSystem,proto3" json:"coordinateSystem,omitempty"` //坐标系 Direction Direction `protobuf:"varint,3,opt,name=direction,proto3,enum=model.Direction" json:"direction,omitempty"` //左右行 } func (x *Kilometer) Reset() { *x = Kilometer{} if protoimpl.UnsafeEnabled { mi := &file_model_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Kilometer) String() string { return protoimpl.X.MessageStringOf(x) } func (*Kilometer) ProtoMessage() {} func (x *Kilometer) ProtoReflect() protoreflect.Message { mi := &file_model_proto_msgTypes[11] 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 Kilometer.ProtoReflect.Descriptor instead. func (*Kilometer) Descriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{11} } func (x *Kilometer) GetValue() int64 { if x != nil { return x.Value } return 0 } func (x *Kilometer) GetCoordinateSystem() string { if x != nil { return x.CoordinateSystem } return "" } func (x *Kilometer) GetDirection() Direction { if x != nil { return x.Direction } return Direction_LEFT } // 公里标转换 type KilometerConvert struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields KmA *Kilometer `protobuf:"bytes,1,opt,name=kmA,proto3" json:"kmA,omitempty"` KmB *Kilometer `protobuf:"bytes,2,opt,name=kmB,proto3" json:"kmB,omitempty"` SameTrend bool `protobuf:"varint,3,opt,name=sameTrend,proto3" json:"sameTrend,omitempty"` //相同趋势(同增同减)? } func (x *KilometerConvert) Reset() { *x = KilometerConvert{} if protoimpl.UnsafeEnabled { mi := &file_model_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *KilometerConvert) String() string { return protoimpl.X.MessageStringOf(x) } func (*KilometerConvert) ProtoMessage() {} func (x *KilometerConvert) ProtoReflect() protoreflect.Message { mi := &file_model_proto_msgTypes[12] 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 KilometerConvert.ProtoReflect.Descriptor instead. func (*KilometerConvert) Descriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{12} } func (x *KilometerConvert) GetKmA() *Kilometer { if x != nil { return x.KmA } return nil } func (x *KilometerConvert) GetKmB() *Kilometer { if x != nil { return x.KmB } return nil } func (x *KilometerConvert) GetSameTrend() bool { if x != nil { return x.SameTrend } return false } // 继电器 type Relay struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` Model Relay_Model `protobuf:"varint,3,opt,name=model,proto3,enum=model.Relay_Model" json:"model,omitempty"` StationId string `protobuf:"bytes,4,opt,name=stationId,proto3" json:"stationId,omitempty"` // 所属车站id } func (x *Relay) Reset() { *x = Relay{} if protoimpl.UnsafeEnabled { mi := &file_model_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Relay) String() string { return protoimpl.X.MessageStringOf(x) } func (*Relay) ProtoMessage() {} func (x *Relay) ProtoReflect() protoreflect.Message { mi := &file_model_proto_msgTypes[13] 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 Relay.ProtoReflect.Descriptor instead. func (*Relay) Descriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{13} } func (x *Relay) GetId() string { if x != nil { return x.Id } return "" } func (x *Relay) GetCode() string { if x != nil { return x.Code } return "" } func (x *Relay) GetModel() Relay_Model { if x != nil { return x.Model } return Relay_Unknown } func (x *Relay) GetStationId() string { if x != nil { return x.StationId } return "" } // 断相保护器 type PhaseFailureProtector struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` } func (x *PhaseFailureProtector) Reset() { *x = PhaseFailureProtector{} if protoimpl.UnsafeEnabled { mi := &file_model_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *PhaseFailureProtector) String() string { return protoimpl.X.MessageStringOf(x) } func (*PhaseFailureProtector) ProtoMessage() {} func (x *PhaseFailureProtector) ProtoReflect() protoreflect.Message { mi := &file_model_proto_msgTypes[14] 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 PhaseFailureProtector.ProtoReflect.Descriptor instead. func (*PhaseFailureProtector) Descriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{14} } func (x *PhaseFailureProtector) GetId() string { if x != nil { return x.Id } return "" } func (x *PhaseFailureProtector) GetCode() string { if x != nil { return x.Code } return "" } // 电子元件组合 type ElectronicComponentGroup struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Code string `protobuf:"bytes,1,opt,name=code,proto3" json:"code,omitempty"` //组合的编号(名称) ComponentIds []string `protobuf:"bytes,2,rep,name=componentIds,proto3" json:"componentIds,omitempty"` //组合内电子元件的id } func (x *ElectronicComponentGroup) Reset() { *x = ElectronicComponentGroup{} if protoimpl.UnsafeEnabled { mi := &file_model_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ElectronicComponentGroup) String() string { return protoimpl.X.MessageStringOf(x) } func (*ElectronicComponentGroup) ProtoMessage() {} func (x *ElectronicComponentGroup) ProtoReflect() protoreflect.Message { mi := &file_model_proto_msgTypes[15] 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 ElectronicComponentGroup.ProtoReflect.Descriptor instead. func (*ElectronicComponentGroup) Descriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{15} } func (x *ElectronicComponentGroup) GetCode() string { if x != nil { return x.Code } return "" } func (x *ElectronicComponentGroup) GetComponentIds() []string { if x != nil { return x.ComponentIds } return nil } // 开关、按钮、旋钮 type Button struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` ButtonType Button_ButtonType `protobuf:"varint,3,opt,name=buttonType,proto3,enum=model.Button_ButtonType" json:"buttonType,omitempty"` HasLight bool `protobuf:"varint,4,opt,name=hasLight,proto3" json:"hasLight,omitempty"` } func (x *Button) Reset() { *x = Button{} if protoimpl.UnsafeEnabled { mi := &file_model_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Button) String() string { return protoimpl.X.MessageStringOf(x) } func (*Button) ProtoMessage() {} func (x *Button) ProtoReflect() protoreflect.Message { mi := &file_model_proto_msgTypes[16] 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 Button.ProtoReflect.Descriptor instead. func (*Button) Descriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{16} } func (x *Button) GetId() string { if x != nil { return x.Id } return "" } func (x *Button) GetCode() string { if x != nil { return x.Code } return "" } func (x *Button) GetButtonType() Button_ButtonType { if x != nil { return x.ButtonType } return Button_Unknown } func (x *Button) GetHasLight() bool { if x != nil { return x.HasLight } return false } // 灯 type Light struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` Aspect Light_LightAspect `protobuf:"varint,3,opt,name=aspect,proto3,enum=model.Light_LightAspect" json:"aspect,omitempty"` } func (x *Light) Reset() { *x = Light{} if protoimpl.UnsafeEnabled { mi := &file_model_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Light) String() string { return protoimpl.X.MessageStringOf(x) } func (*Light) ProtoMessage() {} func (x *Light) ProtoReflect() protoreflect.Message { mi := &file_model_proto_msgTypes[17] 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 Light.ProtoReflect.Descriptor instead. func (*Light) Descriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{17} } func (x *Light) GetId() string { if x != nil { return x.Id } return "" } func (x *Light) GetCode() string { if x != nil { return x.Code } return "" } func (x *Light) GetAspect() Light_LightAspect { if x != nil { return x.Aspect } return Light_L } // 报警器 type Alarm struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` } func (x *Alarm) Reset() { *x = Alarm{} if protoimpl.UnsafeEnabled { mi := &file_model_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Alarm) String() string { return protoimpl.X.MessageStringOf(x) } func (*Alarm) ProtoMessage() {} func (x *Alarm) ProtoReflect() protoreflect.Message { mi := &file_model_proto_msgTypes[18] 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 Alarm.ProtoReflect.Descriptor instead. func (*Alarm) Descriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{18} } func (x *Alarm) GetId() string { if x != nil { return x.Id } return "" } func (x *Alarm) GetCode() string { if x != nil { return x.Code } return "" } // 车站 type Station struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` ElectronicGroup []*ElectronicGroup `protobuf:"bytes,3,rep,name=electronicGroup,proto3" json:"electronicGroup,omitempty"` // 关联电子元件组合 // 设备电子元件组合 Deccs []*DeviceEcc `protobuf:"bytes,4,rep,name=deccs,proto3" json:"deccs,omitempty"` // 暂时方案,后需重构 } func (x *Station) Reset() { *x = Station{} if protoimpl.UnsafeEnabled { mi := &file_model_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Station) String() string { return protoimpl.X.MessageStringOf(x) } func (*Station) ProtoMessage() {} func (x *Station) ProtoReflect() protoreflect.Message { mi := &file_model_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use Station.ProtoReflect.Descriptor instead. func (*Station) Descriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{19} } func (x *Station) GetId() string { if x != nil { return x.Id } return "" } func (x *Station) GetCode() string { if x != nil { return x.Code } return "" } func (x *Station) GetElectronicGroup() []*ElectronicGroup { if x != nil { return x.ElectronicGroup } return nil } func (x *Station) GetDeccs() []*DeviceEcc { if x != nil { return x.Deccs } return nil } // 设备电子元件组合 type DeviceEcc struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields DeviceId string `protobuf:"bytes,1,opt,name=deviceId,proto3" json:"deviceId,omitempty"` DeviceType DeviceType `protobuf:"varint,2,opt,name=deviceType,proto3,enum=model.DeviceType" json:"deviceType,omitempty"` Egs []*ElectronicComponentGroup `protobuf:"bytes,3,rep,name=egs,proto3" json:"egs,omitempty"` } func (x *DeviceEcc) Reset() { *x = DeviceEcc{} if protoimpl.UnsafeEnabled { mi := &file_model_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *DeviceEcc) String() string { return protoimpl.X.MessageStringOf(x) } func (*DeviceEcc) ProtoMessage() {} func (x *DeviceEcc) ProtoReflect() protoreflect.Message { mi := &file_model_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use DeviceEcc.ProtoReflect.Descriptor instead. func (*DeviceEcc) Descriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{20} } func (x *DeviceEcc) GetDeviceId() string { if x != nil { return x.DeviceId } return "" } func (x *DeviceEcc) GetDeviceType() DeviceType { if x != nil { return x.DeviceType } return DeviceType_DeviceType_Unknown } func (x *DeviceEcc) GetEgs() []*ElectronicComponentGroup { if x != nil { return x.Egs } return nil } // 元器件组信息 type ElectronicGroup struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Code string `protobuf:"bytes,1,opt,name=code,proto3" json:"code,omitempty"` //组合的编号(名称) Components []*ElectronicComponent `protobuf:"bytes,2,rep,name=components,proto3" json:"components,omitempty"` //组合内电子元件 } func (x *ElectronicGroup) Reset() { *x = ElectronicGroup{} if protoimpl.UnsafeEnabled { mi := &file_model_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ElectronicGroup) String() string { return protoimpl.X.MessageStringOf(x) } func (*ElectronicGroup) ProtoMessage() {} func (x *ElectronicGroup) ProtoReflect() protoreflect.Message { mi := &file_model_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use ElectronicGroup.ProtoReflect.Descriptor instead. func (*ElectronicGroup) Descriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{21} } func (x *ElectronicGroup) GetCode() string { if x != nil { return x.Code } return "" } func (x *ElectronicGroup) GetComponents() []*ElectronicComponent { if x != nil { return x.Components } return nil } // 关联电子元件 type ElectronicComponent struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // 元器件ID DeviceType DeviceType `protobuf:"varint,3,opt,name=deviceType,proto3,enum=model.DeviceType" json:"deviceType,omitempty"` // 元器件类型 } func (x *ElectronicComponent) Reset() { *x = ElectronicComponent{} if protoimpl.UnsafeEnabled { mi := &file_model_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ElectronicComponent) String() string { return protoimpl.X.MessageStringOf(x) } func (*ElectronicComponent) ProtoMessage() {} func (x *ElectronicComponent) ProtoReflect() protoreflect.Message { mi := &file_model_proto_msgTypes[22] 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 ElectronicComponent.ProtoReflect.Descriptor instead. func (*ElectronicComponent) Descriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{22} } func (x *ElectronicComponent) GetId() string { if x != nil { return x.Id } return "" } func (x *ElectronicComponent) GetDeviceType() DeviceType { if x != nil { return x.DeviceType } return DeviceType_DeviceType_Unknown } // 门控箱 type Mkx struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` PsdId string `protobuf:"bytes,2,opt,name=psdId,proto3" json:"psdId,omitempty"` PcbButtonId string `protobuf:"bytes,3,opt,name=pcbButtonId,proto3" json:"pcbButtonId,omitempty"` PobButtonId string `protobuf:"bytes,4,opt,name=pobButtonId,proto3" json:"pobButtonId,omitempty"` PabButtonId string `protobuf:"bytes,5,opt,name=pabButtonId,proto3" json:"pabButtonId,omitempty"` PcbjId string `protobuf:"bytes,6,opt,name=pcbjId,proto3" json:"pcbjId,omitempty"` PobjId string `protobuf:"bytes,7,opt,name=pobjId,proto3" json:"pobjId,omitempty"` PabjId string `protobuf:"bytes,8,opt,name=pabjId,proto3" json:"pabjId,omitempty"` } func (x *Mkx) Reset() { *x = Mkx{} if protoimpl.UnsafeEnabled { mi := &file_model_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Mkx) String() string { return protoimpl.X.MessageStringOf(x) } func (*Mkx) ProtoMessage() {} func (x *Mkx) ProtoReflect() protoreflect.Message { mi := &file_model_proto_msgTypes[23] 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 Mkx.ProtoReflect.Descriptor instead. func (*Mkx) Descriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{23} } func (x *Mkx) GetId() string { if x != nil { return x.Id } return "" } func (x *Mkx) GetPsdId() string { if x != nil { return x.PsdId } return "" } func (x *Mkx) GetPcbButtonId() string { if x != nil { return x.PcbButtonId } return "" } func (x *Mkx) GetPobButtonId() string { if x != nil { return x.PobButtonId } return "" } func (x *Mkx) GetPabButtonId() string { if x != nil { return x.PabButtonId } return "" } func (x *Mkx) GetPcbjId() string { if x != nil { return x.PcbjId } return "" } func (x *Mkx) GetPobjId() string { if x != nil { return x.PobjId } return "" } func (x *Mkx) GetPabjId() string { if x != nil { return x.PabjId } return "" } // 站台 type Platform struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` StationId string `protobuf:"bytes,3,opt,name=stationId,proto3" json:"stationId,omitempty"` PhysicalSectionId string `protobuf:"bytes,4,opt,name=physicalSectionId,proto3" json:"physicalSectionId,omitempty"` } func (x *Platform) Reset() { *x = Platform{} if protoimpl.UnsafeEnabled { mi := &file_model_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Platform) String() string { return protoimpl.X.MessageStringOf(x) } func (*Platform) ProtoMessage() {} func (x *Platform) ProtoReflect() protoreflect.Message { mi := &file_model_proto_msgTypes[24] 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 Platform.ProtoReflect.Descriptor instead. func (*Platform) Descriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{24} } func (x *Platform) GetId() string { if x != nil { return x.Id } return "" } func (x *Platform) GetCode() string { if x != nil { return x.Code } return "" } func (x *Platform) GetStationId() string { if x != nil { return x.StationId } return "" } func (x *Platform) GetPhysicalSectionId() string { if x != nil { return x.PhysicalSectionId } return "" } // 报警器 type Key struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` Gear int32 `protobuf:"varint,3,opt,name=gear,proto3" json:"gear,omitempty"` // 挡位数量 } func (x *Key) Reset() { *x = Key{} if protoimpl.UnsafeEnabled { mi := &file_model_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Key) String() string { return protoimpl.X.MessageStringOf(x) } func (*Key) ProtoMessage() {} func (x *Key) ProtoReflect() protoreflect.Message { mi := &file_model_proto_msgTypes[25] 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 Key.ProtoReflect.Descriptor instead. func (*Key) Descriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{25} } func (x *Key) GetId() string { if x != nil { return x.Id } return "" } func (x *Key) GetCode() string { if x != nil { return x.Code } return "" } func (x *Key) GetGear() int32 { if x != nil { return x.Gear } return 0 } // 集中站关联信息 type CentralizedStationRef struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields StationId string `protobuf:"bytes,1,opt,name=stationId,proto3" json:"stationId,omitempty"` // 集中站ID TransponderId []string `protobuf:"bytes,2,rep,name=transponderId,proto3" json:"transponderId,omitempty"` // 应答器ID CjList []*CjData `protobuf:"bytes,3,rep,name=cjList,proto3" json:"cjList,omitempty"` // 采集继电器配置信息 QdList []*QdData `protobuf:"bytes,4,rep,name=qdList,proto3" json:"qdList,omitempty"` // 驱动继电器配置信息 SectionCodePoints []*CiSectionCodePoint `protobuf:"bytes,5,rep,name=sectionCodePoints,proto3" json:"sectionCodePoints,omitempty"` //物理区段码表 } func (x *CentralizedStationRef) Reset() { *x = CentralizedStationRef{} if protoimpl.UnsafeEnabled { mi := &file_model_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *CentralizedStationRef) String() string { return protoimpl.X.MessageStringOf(x) } func (*CentralizedStationRef) ProtoMessage() {} func (x *CentralizedStationRef) ProtoReflect() protoreflect.Message { mi := &file_model_proto_msgTypes[26] 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 CentralizedStationRef.ProtoReflect.Descriptor instead. func (*CentralizedStationRef) Descriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{26} } func (x *CentralizedStationRef) GetStationId() string { if x != nil { return x.StationId } return "" } func (x *CentralizedStationRef) GetTransponderId() []string { if x != nil { return x.TransponderId } return nil } func (x *CentralizedStationRef) GetCjList() []*CjData { if x != nil { return x.CjList } return nil } func (x *CentralizedStationRef) GetQdList() []*QdData { if x != nil { return x.QdList } return nil } func (x *CentralizedStationRef) GetSectionCodePoints() []*CiSectionCodePoint { if x != nil { return x.SectionCodePoints } return nil } type CjData struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Row int32 `protobuf:"varint,1,opt,name=row,proto3" json:"row,omitempty"` // 所在行 Col int32 `protobuf:"varint,2,opt,name=col,proto3" json:"col,omitempty"` // 所在列 RefRelays []*CjDataItem `protobuf:"bytes,3,rep,name=refRelays,proto3" json:"refRelays,omitempty"` //采集的继电器 } func (x *CjData) Reset() { *x = CjData{} if protoimpl.UnsafeEnabled { mi := &file_model_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *CjData) String() string { return protoimpl.X.MessageStringOf(x) } func (*CjData) ProtoMessage() {} func (x *CjData) ProtoReflect() protoreflect.Message { mi := &file_model_proto_msgTypes[27] 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 CjData.ProtoReflect.Descriptor instead. func (*CjData) Descriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{27} } func (x *CjData) GetRow() int32 { if x != nil { return x.Row } return 0 } func (x *CjData) GetCol() int32 { if x != nil { return x.Col } return 0 } func (x *CjData) GetRefRelays() []*CjDataItem { if x != nil { return x.RefRelays } return nil } type CjDataItem struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields RelayId string `protobuf:"bytes,1,opt,name=relayId,proto3" json:"relayId,omitempty"` //采集对应的继电器Id Q bool `protobuf:"varint,2,opt,name=q,proto3" json:"q,omitempty"` //继电器的位置,是否前接点(即吸起位/定位) } func (x *CjDataItem) Reset() { *x = CjDataItem{} if protoimpl.UnsafeEnabled { mi := &file_model_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *CjDataItem) String() string { return protoimpl.X.MessageStringOf(x) } func (*CjDataItem) ProtoMessage() {} func (x *CjDataItem) ProtoReflect() protoreflect.Message { mi := &file_model_proto_msgTypes[28] 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 CjDataItem.ProtoReflect.Descriptor instead. func (*CjDataItem) Descriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{28} } func (x *CjDataItem) GetRelayId() string { if x != nil { return x.RelayId } return "" } func (x *CjDataItem) GetQ() bool { if x != nil { return x.Q } return false } type QdData struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Row int32 `protobuf:"varint,1,opt,name=row,proto3" json:"row,omitempty"` // 所在行 Col int32 `protobuf:"varint,2,opt,name=col,proto3" json:"col,omitempty"` // 所在列 RefRelays []string `protobuf:"bytes,3,rep,name=refRelays,proto3" json:"refRelays,omitempty"` //驱动的继电器Id } func (x *QdData) Reset() { *x = QdData{} if protoimpl.UnsafeEnabled { mi := &file_model_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *QdData) String() string { return protoimpl.X.MessageStringOf(x) } func (*QdData) ProtoMessage() {} func (x *QdData) ProtoReflect() protoreflect.Message { mi := &file_model_proto_msgTypes[29] 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 QdData.ProtoReflect.Descriptor instead. func (*QdData) Descriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{29} } func (x *QdData) GetRow() int32 { if x != nil { return x.Row } return 0 } func (x *QdData) GetCol() int32 { if x != nil { return x.Col } return 0 } func (x *QdData) GetRefRelays() []string { if x != nil { return x.RefRelays } return nil } // 滑动门编组 type AsdGroup struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Group int32 `protobuf:"varint,1,opt,name=group,proto3" json:"group,omitempty"` //编组 Start int32 `protobuf:"varint,2,opt,name=start,proto3" json:"start,omitempty"` //起始子门索引 End int32 `protobuf:"varint,3,opt,name=end,proto3" json:"end,omitempty"` //终止子门索引 } func (x *AsdGroup) Reset() { *x = AsdGroup{} if protoimpl.UnsafeEnabled { mi := &file_model_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *AsdGroup) String() string { return protoimpl.X.MessageStringOf(x) } func (*AsdGroup) ProtoMessage() {} func (x *AsdGroup) ProtoReflect() protoreflect.Message { mi := &file_model_proto_msgTypes[30] 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 AsdGroup.ProtoReflect.Descriptor instead. func (*AsdGroup) Descriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{30} } func (x *AsdGroup) GetGroup() int32 { if x != nil { return x.Group } return 0 } func (x *AsdGroup) GetStart() int32 { if x != nil { return x.Start } return 0 } func (x *AsdGroup) GetEnd() int32 { if x != nil { return x.End } return 0 } // 联锁物理区段码位 type CiSectionCodePoint struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Row int32 `protobuf:"varint,1,opt,name=row,proto3" json:"row,omitempty"` //所在行 SectionId string `protobuf:"bytes,2,opt,name=sectionId,proto3" json:"sectionId,omitempty"` //物理区段id } func (x *CiSectionCodePoint) Reset() { *x = CiSectionCodePoint{} if protoimpl.UnsafeEnabled { mi := &file_model_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *CiSectionCodePoint) String() string { return protoimpl.X.MessageStringOf(x) } func (*CiSectionCodePoint) ProtoMessage() {} func (x *CiSectionCodePoint) ProtoReflect() protoreflect.Message { mi := &file_model_proto_msgTypes[31] 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 CiSectionCodePoint.ProtoReflect.Descriptor instead. func (*CiSectionCodePoint) Descriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{31} } func (x *CiSectionCodePoint) GetRow() int32 { if x != nil { return x.Row } return 0 } func (x *CiSectionCodePoint) GetSectionId() string { if x != nil { return x.SectionId } return "" } // 管线 // 管线有两个端口,分别为A端和B端 // 通过管线与其他设备的连接关系可以知道所有设备之间的连接关系 type Pipe struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` PortA *DevicePort `protobuf:"bytes,3,opt,name=portA,proto3" json:"portA,omitempty"` //管线的A端连接的设备 PortB *DevicePort `protobuf:"bytes,4,opt,name=portB,proto3" json:"portB,omitempty"` //管线的B端连接的设备 PipeType Pipe_Type `protobuf:"varint,5,opt,name=pipeType,proto3,enum=model.Pipe_Type" json:"pipeType,omitempty"` } func (x *Pipe) Reset() { *x = Pipe{} if protoimpl.UnsafeEnabled { mi := &file_model_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Pipe) String() string { return protoimpl.X.MessageStringOf(x) } func (*Pipe) ProtoMessage() {} func (x *Pipe) ProtoReflect() protoreflect.Message { mi := &file_model_proto_msgTypes[32] 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 Pipe.ProtoReflect.Descriptor instead. func (*Pipe) Descriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{32} } func (x *Pipe) GetId() string { if x != nil { return x.Id } return "" } func (x *Pipe) GetCode() string { if x != nil { return x.Code } return "" } func (x *Pipe) GetPortA() *DevicePort { if x != nil { return x.PortA } return nil } func (x *Pipe) GetPortB() *DevicePort { if x != nil { return x.PortB } return nil } func (x *Pipe) GetPipeType() Pipe_Type { if x != nil { return x.PipeType } return Pipe_Water } // 管件 // 管件端口分别为A B C D type PipeFitting struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` Sum int32 `protobuf:"varint,3,opt,name=sum,proto3" json:"sum,omitempty"` //管件端口总数,一般为3 4,三通、四通 } func (x *PipeFitting) Reset() { *x = PipeFitting{} if protoimpl.UnsafeEnabled { mi := &file_model_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *PipeFitting) String() string { return protoimpl.X.MessageStringOf(x) } func (*PipeFitting) ProtoMessage() {} func (x *PipeFitting) ProtoReflect() protoreflect.Message { mi := &file_model_proto_msgTypes[33] 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 PipeFitting.ProtoReflect.Descriptor instead. func (*PipeFitting) Descriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{33} } func (x *PipeFitting) GetId() string { if x != nil { return x.Id } return "" } func (x *PipeFitting) GetCode() string { if x != nil { return x.Code } return "" } func (x *PipeFitting) GetSum() int32 { if x != nil { return x.Sum } return 0 } // 断路器 // 有两个连接端口,分别为A和B type CircuitBreaker struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` } func (x *CircuitBreaker) Reset() { *x = CircuitBreaker{} if protoimpl.UnsafeEnabled { mi := &file_model_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *CircuitBreaker) String() string { return protoimpl.X.MessageStringOf(x) } func (*CircuitBreaker) ProtoMessage() {} func (x *CircuitBreaker) ProtoReflect() protoreflect.Message { mi := &file_model_proto_msgTypes[34] 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 CircuitBreaker.ProtoReflect.Descriptor instead. func (*CircuitBreaker) Descriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{34} } func (x *CircuitBreaker) GetId() string { if x != nil { return x.Id } return "" } func (x *CircuitBreaker) GetCode() string { if x != nil { return x.Code } return "" } // 三工位开关 // 有三个连接端口,公共连接点A,隔离开关连接点B,接地开关连接点C type ThreePositionSwitch struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` } func (x *ThreePositionSwitch) Reset() { *x = ThreePositionSwitch{} if protoimpl.UnsafeEnabled { mi := &file_model_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ThreePositionSwitch) String() string { return protoimpl.X.MessageStringOf(x) } func (*ThreePositionSwitch) ProtoMessage() {} func (x *ThreePositionSwitch) ProtoReflect() protoreflect.Message { mi := &file_model_proto_msgTypes[35] 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 ThreePositionSwitch.ProtoReflect.Descriptor instead. func (*ThreePositionSwitch) Descriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{35} } func (x *ThreePositionSwitch) GetId() string { if x != nil { return x.Id } return "" } func (x *ThreePositionSwitch) GetCode() string { if x != nil { return x.Code } return "" } // 手车 // 有两个连接端口,分别为A和B type HandcartSwitch struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` } func (x *HandcartSwitch) Reset() { *x = HandcartSwitch{} if protoimpl.UnsafeEnabled { mi := &file_model_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *HandcartSwitch) String() string { return protoimpl.X.MessageStringOf(x) } func (*HandcartSwitch) ProtoMessage() {} func (x *HandcartSwitch) ProtoReflect() protoreflect.Message { mi := &file_model_proto_msgTypes[36] 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 HandcartSwitch.ProtoReflect.Descriptor instead. func (*HandcartSwitch) Descriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{36} } func (x *HandcartSwitch) GetId() string { if x != nil { return x.Id } return "" } func (x *HandcartSwitch) GetCode() string { if x != nil { return x.Code } return "" } // 整流器 // PSCADA中整流器有两个交流输入端分别为A(火线L)和B(零线N);直流输出端口有两个分别为直流正极端口C(+正极)和直流负极端口D(-负极) type Rectifier struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` } func (x *Rectifier) Reset() { *x = Rectifier{} if protoimpl.UnsafeEnabled { mi := &file_model_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Rectifier) String() string { return protoimpl.X.MessageStringOf(x) } func (*Rectifier) ProtoMessage() {} func (x *Rectifier) ProtoReflect() protoreflect.Message { mi := &file_model_proto_msgTypes[37] 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 Rectifier.ProtoReflect.Descriptor instead. func (*Rectifier) Descriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{37} } func (x *Rectifier) GetId() string { if x != nil { return x.Id } return "" } func (x *Rectifier) GetCode() string { if x != nil { return x.Code } return "" } // 隔离开关 // 有两个连接端口,分别为A和B type Disconnector struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` } func (x *Disconnector) Reset() { *x = Disconnector{} if protoimpl.UnsafeEnabled { mi := &file_model_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Disconnector) String() string { return protoimpl.X.MessageStringOf(x) } func (*Disconnector) ProtoMessage() {} func (x *Disconnector) ProtoReflect() protoreflect.Message { mi := &file_model_proto_msgTypes[38] 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 Disconnector.ProtoReflect.Descriptor instead. func (*Disconnector) Descriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{38} } func (x *Disconnector) GetId() string { if x != nil { return x.Id } return "" } func (x *Disconnector) GetCode() string { if x != nil { return x.Code } return "" } // 变压器 // 一次侧端口A,二次侧端口B或C type VoltageTransformer struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` E1 uint32 `protobuf:"varint,3,opt,name=e1,proto3" json:"e1,omitempty"` //一次侧电动势 E2 uint32 `protobuf:"varint,4,opt,name=e2,proto3" json:"e2,omitempty"` //二次侧电动势 } func (x *VoltageTransformer) Reset() { *x = VoltageTransformer{} if protoimpl.UnsafeEnabled { mi := &file_model_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *VoltageTransformer) String() string { return protoimpl.X.MessageStringOf(x) } func (*VoltageTransformer) ProtoMessage() {} func (x *VoltageTransformer) ProtoReflect() protoreflect.Message { mi := &file_model_proto_msgTypes[39] 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 VoltageTransformer.ProtoReflect.Descriptor instead. func (*VoltageTransformer) Descriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{39} } func (x *VoltageTransformer) GetId() string { if x != nil { return x.Id } return "" } func (x *VoltageTransformer) GetCode() string { if x != nil { return x.Code } return "" } func (x *VoltageTransformer) GetE1() uint32 { if x != nil { return x.E1 } return 0 } func (x *VoltageTransformer) GetE2() uint32 { if x != nil { return x.E2 } return 0 } // 电源 // 只有一个输出端口A type PowerSource struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` // true-交流电源;false-直流电源 Ac bool `protobuf:"varint,3,opt,name=ac,proto3" json:"ac,omitempty"` // 电源电压 Voltage uint32 `protobuf:"varint,4,opt,name=voltage,proto3" json:"voltage,omitempty"` } func (x *PowerSource) Reset() { *x = PowerSource{} if protoimpl.UnsafeEnabled { mi := &file_model_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *PowerSource) String() string { return protoimpl.X.MessageStringOf(x) } func (*PowerSource) ProtoMessage() {} func (x *PowerSource) ProtoReflect() protoreflect.Message { mi := &file_model_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 PowerSource.ProtoReflect.Descriptor instead. func (*PowerSource) Descriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{40} } func (x *PowerSource) GetId() string { if x != nil { return x.Id } return "" } func (x *PowerSource) GetCode() string { if x != nil { return x.Code } return "" } func (x *PowerSource) GetAc() bool { if x != nil { return x.Ac } return false } func (x *PowerSource) GetVoltage() uint32 { if x != nil { return x.Voltage } return 0 } // 避雷器 type LightningArrester struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` } func (x *LightningArrester) Reset() { *x = LightningArrester{} if protoimpl.UnsafeEnabled { mi := &file_model_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *LightningArrester) String() string { return protoimpl.X.MessageStringOf(x) } func (*LightningArrester) ProtoMessage() {} func (x *LightningArrester) ProtoReflect() protoreflect.Message { mi := &file_model_proto_msgTypes[41] 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 LightningArrester.ProtoReflect.Descriptor instead. func (*LightningArrester) Descriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{41} } func (x *LightningArrester) GetId() string { if x != nil { return x.Id } return "" } func (x *LightningArrester) GetCode() string { if x != nil { return x.Code } return "" } var File_model_proto protoreflect.FileDescriptor var file_model_proto_rawDesc = []byte{ 0x0a, 0x0b, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x22, 0xa3, 0x0d, 0x0a, 0x0a, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x42, 0x0a, 0x10, 0x70, 0x68, 0x79, 0x73, 0x69, 0x63, 0x61, 0x6c, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x50, 0x68, 0x79, 0x73, 0x69, 0x63, 0x61, 0x6c, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x10, 0x70, 0x68, 0x79, 0x73, 0x69, 0x63, 0x61, 0x6c, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x33, 0x0a, 0x0b, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x0b, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x2a, 0x0a, 0x08, 0x74, 0x75, 0x72, 0x6e, 0x6f, 0x75, 0x74, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x54, 0x75, 0x72, 0x6e, 0x6f, 0x75, 0x74, 0x52, 0x08, 0x74, 0x75, 0x72, 0x6e, 0x6f, 0x75, 0x74, 0x73, 0x12, 0x27, 0x0a, 0x07, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x52, 0x07, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x73, 0x12, 0x36, 0x0a, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x65, 0x72, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x65, 0x72, 0x52, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x65, 0x72, 0x73, 0x12, 0x24, 0x0a, 0x06, 0x73, 0x6c, 0x6f, 0x70, 0x65, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x53, 0x6c, 0x6f, 0x70, 0x65, 0x52, 0x06, 0x73, 0x6c, 0x6f, 0x70, 0x65, 0x73, 0x12, 0x4b, 0x0a, 0x13, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x43, 0x75, 0x72, 0x76, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x43, 0x75, 0x72, 0x76, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x13, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x43, 0x75, 0x72, 0x76, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x45, 0x0a, 0x11, 0x6b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x4b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x52, 0x11, 0x6b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x73, 0x12, 0x24, 0x0a, 0x06, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x52, 0x06, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x73, 0x12, 0x54, 0x0a, 0x16, 0x70, 0x68, 0x61, 0x73, 0x65, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x50, 0x68, 0x61, 0x73, 0x65, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x16, 0x70, 0x68, 0x61, 0x73, 0x65, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x12, 0x27, 0x0a, 0x07, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x52, 0x07, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x73, 0x12, 0x1e, 0x0a, 0x04, 0x70, 0x73, 0x64, 0x73, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x50, 0x73, 0x64, 0x52, 0x04, 0x70, 0x73, 0x64, 0x73, 0x12, 0x24, 0x0a, 0x06, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x73, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x52, 0x06, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x73, 0x12, 0x24, 0x0a, 0x06, 0x61, 0x6c, 0x61, 0x72, 0x6d, 0x73, 0x18, 0x10, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x52, 0x06, 0x61, 0x6c, 0x61, 0x72, 0x6d, 0x73, 0x12, 0x2a, 0x0a, 0x08, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x11, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1e, 0x0a, 0x04, 0x6d, 0x6b, 0x78, 0x73, 0x18, 0x12, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x4d, 0x6b, 0x78, 0x52, 0x04, 0x6d, 0x6b, 0x78, 0x73, 0x12, 0x2d, 0x0a, 0x09, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x18, 0x13, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x09, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x73, 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, 0x14, 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, 0x12, 0x1e, 0x0a, 0x04, 0x4b, 0x65, 0x79, 0x73, 0x18, 0x15, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x4b, 0x65, 0x79, 0x52, 0x04, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x54, 0x0a, 0x16, 0x43, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x73, 0x18, 0x16, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x43, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x52, 0x16, 0x43, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x73, 0x12, 0x22, 0x0a, 0x05, 0x70, 0x69, 0x70, 0x65, 0x73, 0x18, 0xac, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x50, 0x69, 0x70, 0x65, 0x52, 0x05, 0x70, 0x69, 0x70, 0x65, 0x73, 0x12, 0x37, 0x0a, 0x0c, 0x70, 0x69, 0x70, 0x65, 0x46, 0x69, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0xad, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x50, 0x69, 0x70, 0x65, 0x46, 0x69, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x0c, 0x70, 0x69, 0x70, 0x65, 0x46, 0x69, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x40, 0x0a, 0x0f, 0x63, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x42, 0x72, 0x65, 0x61, 0x6b, 0x65, 0x72, 0x73, 0x18, 0xae, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x43, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x42, 0x72, 0x65, 0x61, 0x6b, 0x65, 0x72, 0x52, 0x0f, 0x63, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x42, 0x72, 0x65, 0x61, 0x6b, 0x65, 0x72, 0x73, 0x12, 0x51, 0x0a, 0x15, 0x74, 0x68, 0x72, 0x65, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x65, 0x73, 0x18, 0xaf, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x54, 0x68, 0x72, 0x65, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x52, 0x15, 0x74, 0x68, 0x72, 0x65, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x65, 0x73, 0x12, 0x42, 0x0a, 0x10, 0x68, 0x61, 0x6e, 0x64, 0x63, 0x61, 0x72, 0x74, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x65, 0x73, 0x18, 0xb0, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x48, 0x61, 0x6e, 0x64, 0x63, 0x61, 0x72, 0x74, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x52, 0x10, 0x68, 0x61, 0x6e, 0x64, 0x63, 0x61, 0x72, 0x74, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x65, 0x73, 0x12, 0x31, 0x0a, 0x0a, 0x72, 0x65, 0x63, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x18, 0xb1, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x52, 0x65, 0x63, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x0a, 0x72, 0x65, 0x63, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x12, 0x3a, 0x0a, 0x0d, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x18, 0xb2, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x0d, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x12, 0x4c, 0x0a, 0x13, 0x76, 0x6f, 0x6c, 0x74, 0x61, 0x67, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x72, 0x73, 0x18, 0xb3, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x56, 0x6f, 0x6c, 0x74, 0x61, 0x67, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x72, 0x52, 0x13, 0x76, 0x6f, 0x6c, 0x74, 0x61, 0x67, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x72, 0x73, 0x12, 0x37, 0x0a, 0x0c, 0x70, 0x6f, 0x77, 0x65, 0x72, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0xb4, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x0c, 0x70, 0x6f, 0x77, 0x65, 0x72, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x49, 0x0a, 0x12, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x6e, 0x69, 0x6e, 0x67, 0x41, 0x72, 0x72, 0x65, 0x73, 0x74, 0x65, 0x72, 0x73, 0x18, 0xb5, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x6e, 0x69, 0x6e, 0x67, 0x41, 0x72, 0x72, 0x65, 0x73, 0x74, 0x65, 0x72, 0x52, 0x12, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x6e, 0x69, 0x6e, 0x67, 0x41, 0x72, 0x72, 0x65, 0x73, 0x74, 0x65, 0x72, 0x73, 0x22, 0xce, 0x03, 0x0a, 0x0c, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x4c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x12, 0x42, 0x0a, 0x10, 0x70, 0x68, 0x79, 0x73, 0x69, 0x63, 0x61, 0x6c, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x50, 0x68, 0x79, 0x73, 0x69, 0x63, 0x61, 0x6c, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x10, 0x70, 0x68, 0x79, 0x73, 0x69, 0x63, 0x61, 0x6c, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x33, 0x0a, 0x0b, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x0b, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x2a, 0x0a, 0x08, 0x74, 0x75, 0x72, 0x6e, 0x6f, 0x75, 0x74, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x54, 0x75, 0x72, 0x6e, 0x6f, 0x75, 0x74, 0x52, 0x08, 0x74, 0x75, 0x72, 0x6e, 0x6f, 0x75, 0x74, 0x73, 0x12, 0x27, 0x0a, 0x07, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x52, 0x07, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x73, 0x12, 0x36, 0x0a, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x65, 0x72, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x65, 0x72, 0x52, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x65, 0x72, 0x73, 0x12, 0x24, 0x0a, 0x06, 0x73, 0x6c, 0x6f, 0x70, 0x65, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x53, 0x6c, 0x6f, 0x70, 0x65, 0x52, 0x06, 0x73, 0x6c, 0x6f, 0x70, 0x65, 0x73, 0x12, 0x4b, 0x0a, 0x13, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x43, 0x75, 0x72, 0x76, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x43, 0x75, 0x72, 0x76, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x13, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x43, 0x75, 0x72, 0x76, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x45, 0x0a, 0x11, 0x6b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x4b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x52, 0x11, 0x6b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x73, 0x22, 0xdb, 0x01, 0x0a, 0x0f, 0x50, 0x68, 0x79, 0x73, 0x69, 0x63, 0x61, 0x6c, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x74, 0x75, 0x72, 0x6e, 0x6f, 0x75, 0x74, 0x49, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x74, 0x75, 0x72, 0x6e, 0x6f, 0x75, 0x74, 0x49, 0x64, 0x73, 0x12, 0x33, 0x0a, 0x0b, 0x61, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x0b, 0x61, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x33, 0x0a, 0x0b, 0x62, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x0b, 0x62, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x2e, 0x0a, 0x12, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x9e, 0x01, 0x0a, 0x0a, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x20, 0x0a, 0x02, 0x6b, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x4b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x52, 0x02, 0x6b, 0x6d, 0x12, 0x29, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x33, 0x0a, 0x0b, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x0b, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x22, 0xcd, 0x03, 0x0a, 0x07, 0x54, 0x75, 0x72, 0x6e, 0x6f, 0x75, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x20, 0x0a, 0x02, 0x6b, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x4b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x52, 0x02, 0x6b, 0x6d, 0x12, 0x33, 0x0a, 0x0b, 0x61, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x0b, 0x61, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x33, 0x0a, 0x0b, 0x62, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x0b, 0x62, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x33, 0x0a, 0x0b, 0x63, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x0b, 0x63, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x4e, 0x0a, 0x11, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 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, 0x5d, 0x0a, 0x19, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x6f, 0x6e, 0x69, 0x63, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x45, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x6f, 0x6e, 0x69, 0x63, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x19, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x6f, 0x6e, 0x69, 0x63, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 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, 0x95, 0x03, 0x0a, 0x06, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x20, 0x0a, 0x02, 0x6b, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x4b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x52, 0x02, 0x6b, 0x6d, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x33, 0x0a, 0x0b, 0x74, 0x75, 0x72, 0x6e, 0x6f, 0x75, 0x74, 0x50, 0x6f, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x0b, 0x74, 0x75, 0x72, 0x6e, 0x6f, 0x75, 0x74, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x5d, 0x0a, 0x19, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x6f, 0x6e, 0x69, 0x63, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x45, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x6f, 0x6e, 0x69, 0x63, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x19, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x6f, 0x6e, 0x69, 0x63, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x29, 0x0a, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x2e, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x52, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 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, 0xe1, 0x01, 0x0a, 0x03, 0x50, 0x73, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x73, 0x64, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x61, 0x73, 0x64, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2d, 0x0a, 0x09, 0x61, 0x73, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x41, 0x73, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x09, 0x61, 0x73, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x5d, 0x0a, 0x19, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x6f, 0x6e, 0x69, 0x63, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x45, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x6f, 0x6e, 0x69, 0x63, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x19, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x6f, 0x6e, 0x69, 0x63, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x22, 0x95, 0x02, 0x0a, 0x0b, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x20, 0x0a, 0x02, 0x6b, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x4b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x52, 0x02, 0x6b, 0x6d, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x33, 0x0a, 0x0b, 0x74, 0x75, 0x72, 0x6e, 0x6f, 0x75, 0x74, 0x50, 0x6f, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x0b, 0x74, 0x75, 0x72, 0x6e, 0x6f, 0x75, 0x74, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x24, 0x0a, 0x0d, 0x66, 0x69, 0x78, 0x65, 0x64, 0x54, 0x65, 0x6c, 0x65, 0x67, 0x72, 0x61, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x66, 0x69, 0x78, 0x65, 0x64, 0x54, 0x65, 0x6c, 0x65, 0x67, 0x72, 0x61, 0x6d, 0x12, 0x2b, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x65, 0x72, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x2e, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 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, 0x53, 0x0a, 0x05, 0x53, 0x6c, 0x6f, 0x70, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x22, 0x0a, 0x03, 0x6b, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x4b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x52, 0x03, 0x6b, 0x6d, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x65, 0x67, 0x72, 0x65, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x64, 0x65, 0x67, 0x72, 0x65, 0x65, 0x22, 0x60, 0x0a, 0x12, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x43, 0x75, 0x72, 0x76, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x22, 0x0a, 0x03, 0x6b, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x4b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x52, 0x03, 0x6b, 0x6d, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x61, 0x64, 0x69, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x72, 0x61, 0x64, 0x69, 0x75, 0x73, 0x22, 0x7c, 0x0a, 0x0a, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x11, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1f, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0b, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x22, 0x7d, 0x0a, 0x09, 0x4b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 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, 0x2e, 0x0a, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x10, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x78, 0x0a, 0x10, 0x4b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x12, 0x22, 0x0a, 0x03, 0x6b, 0x6d, 0x41, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x4b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x52, 0x03, 0x6b, 0x6d, 0x41, 0x12, 0x22, 0x0a, 0x03, 0x6b, 0x6d, 0x42, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x4b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 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, 0x89, 0x02, 0x0a, 0x05, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x28, 0x0a, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x2e, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x52, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x93, 0x01, 0x0a, 0x05, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x4a, 0x50, 0x58, 0x43, 0x5f, 0x31, 0x30, 0x30, 0x30, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x4a, 0x50, 0x58, 0x43, 0x5f, 0x31, 0x37, 0x30, 0x30, 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x4a, 0x57, 0x4a, 0x58, 0x43, 0x5f, 0x34, 0x38, 0x30, 0x10, 0x03, 0x12, 0x11, 0x0a, 0x0d, 0x4a, 0x57, 0x4a, 0x58, 0x43, 0x5f, 0x48, 0x31, 0x32, 0x35, 0x5f, 0x38, 0x30, 0x10, 0x04, 0x12, 0x0d, 0x0a, 0x09, 0x4a, 0x57, 0x58, 0x43, 0x5f, 0x31, 0x37, 0x30, 0x30, 0x10, 0x05, 0x12, 0x0d, 0x0a, 0x09, 0x4a, 0x57, 0x58, 0x43, 0x5f, 0x48, 0x33, 0x34, 0x30, 0x10, 0x06, 0x12, 0x11, 0x0a, 0x0d, 0x4a, 0x59, 0x4a, 0x58, 0x43, 0x5f, 0x31, 0x36, 0x30, 0x5f, 0x32, 0x36, 0x30, 0x10, 0x07, 0x12, 0x0c, 0x0a, 0x08, 0x4a, 0x5a, 0x58, 0x43, 0x5f, 0x48, 0x31, 0x38, 0x10, 0x08, 0x22, 0x3b, 0x0a, 0x15, 0x50, 0x68, 0x61, 0x73, 0x65, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x52, 0x0a, 0x18, 0x45, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x6f, 0x6e, 0x69, 0x63, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x73, 0x22, 0xef, 0x01, 0x0a, 0x06, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x38, 0x0a, 0x0a, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x18, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x2e, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x68, 0x61, 0x73, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x68, 0x61, 0x73, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x22, 0x6b, 0x0a, 0x0a, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x4e, 0x4f, 0x5f, 0x52, 0x65, 0x73, 0x65, 0x74, 0x5f, 0x50, 0x72, 0x65, 0x73, 0x73, 0x10, 0x01, 0x12, 0x0f, 0x0a, 0x0b, 0x4e, 0x4f, 0x5f, 0x52, 0x65, 0x73, 0x65, 0x74, 0x5f, 0x55, 0x70, 0x10, 0x02, 0x12, 0x0f, 0x0a, 0x0b, 0x52, 0x65, 0x73, 0x65, 0x74, 0x5f, 0x50, 0x72, 0x65, 0x73, 0x73, 0x10, 0x03, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x65, 0x74, 0x5f, 0x55, 0x70, 0x10, 0x04, 0x12, 0x0c, 0x0a, 0x08, 0x4b, 0x65, 0x79, 0x5f, 0x4b, 0x6e, 0x6f, 0x62, 0x10, 0x05, 0x22, 0x97, 0x01, 0x0a, 0x05, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x30, 0x0a, 0x06, 0x61, 0x73, 0x70, 0x65, 0x63, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x18, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x41, 0x73, 0x70, 0x65, 0x63, 0x74, 0x52, 0x06, 0x61, 0x73, 0x70, 0x65, 0x63, 0x74, 0x22, 0x38, 0x0a, 0x0b, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x41, 0x73, 0x70, 0x65, 0x63, 0x74, 0x12, 0x05, 0x0a, 0x01, 0x4c, 0x10, 0x00, 0x12, 0x05, 0x0a, 0x01, 0x48, 0x10, 0x01, 0x12, 0x05, 0x0a, 0x01, 0x55, 0x10, 0x02, 0x12, 0x06, 0x0a, 0x02, 0x48, 0x55, 0x10, 0x03, 0x12, 0x05, 0x0a, 0x01, 0x42, 0x10, 0x04, 0x12, 0x05, 0x0a, 0x01, 0x41, 0x10, 0x05, 0x22, 0x2b, 0x0a, 0x05, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x97, 0x01, 0x0a, 0x07, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x40, 0x0a, 0x0f, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x6f, 0x6e, 0x69, 0x63, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x45, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x6f, 0x6e, 0x69, 0x63, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x0f, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x6f, 0x6e, 0x69, 0x63, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x26, 0x0a, 0x05, 0x64, 0x65, 0x63, 0x63, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x45, 0x63, 0x63, 0x52, 0x05, 0x64, 0x65, 0x63, 0x63, 0x73, 0x22, 0x8d, 0x01, 0x0a, 0x09, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x45, 0x63, 0x63, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x11, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x31, 0x0a, 0x03, 0x65, 0x67, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x45, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x6f, 0x6e, 0x69, 0x63, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x03, 0x65, 0x67, 0x73, 0x22, 0x61, 0x0a, 0x0f, 0x45, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x6f, 0x6e, 0x69, 0x63, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x3a, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x45, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x6f, 0x6e, 0x69, 0x63, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x58, 0x0a, 0x13, 0x45, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x6f, 0x6e, 0x69, 0x63, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x31, 0x0a, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x11, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x22, 0xd9, 0x01, 0x0a, 0x03, 0x4d, 0x6b, 0x78, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x73, 0x64, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x70, 0x73, 0x64, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x63, 0x62, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x63, 0x62, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x6f, 0x62, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x6f, 0x62, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x61, 0x62, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x61, 0x62, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x63, 0x62, 0x6a, 0x49, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x63, 0x62, 0x6a, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x6f, 0x62, 0x6a, 0x49, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x6f, 0x62, 0x6a, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x61, 0x62, 0x6a, 0x49, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x61, 0x62, 0x6a, 0x49, 0x64, 0x22, 0x7a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 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, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x11, 0x70, 0x68, 0x79, 0x73, 0x69, 0x63, 0x61, 0x6c, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x70, 0x68, 0x79, 0x73, 0x69, 0x63, 0x61, 0x6c, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x3d, 0x0a, 0x03, 0x4b, 0x65, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x67, 0x65, 0x61, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x67, 0x65, 0x61, 0x72, 0x22, 0xf2, 0x01, 0x0a, 0x15, 0x43, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x65, 0x72, 0x49, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x65, 0x72, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x06, 0x63, 0x6a, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x43, 0x6a, 0x44, 0x61, 0x74, 0x61, 0x52, 0x06, 0x63, 0x6a, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x06, 0x71, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x51, 0x64, 0x44, 0x61, 0x74, 0x61, 0x52, 0x06, 0x71, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x47, 0x0a, 0x11, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x43, 0x69, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x11, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x22, 0x5d, 0x0a, 0x06, 0x43, 0x6a, 0x44, 0x61, 0x74, 0x61, 0x12, 0x10, 0x0a, 0x03, 0x72, 0x6f, 0x77, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x72, 0x6f, 0x77, 0x12, 0x10, 0x0a, 0x03, 0x63, 0x6f, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x63, 0x6f, 0x6c, 0x12, 0x2f, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x43, 0x6a, 0x44, 0x61, 0x74, 0x61, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x09, 0x72, 0x65, 0x66, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x73, 0x22, 0x34, 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, 0x0c, 0x0a, 0x01, 0x71, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x01, 0x71, 0x22, 0x4a, 0x0a, 0x06, 0x51, 0x64, 0x44, 0x61, 0x74, 0x61, 0x12, 0x10, 0x0a, 0x03, 0x72, 0x6f, 0x77, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x72, 0x6f, 0x77, 0x12, 0x10, 0x0a, 0x03, 0x63, 0x6f, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x63, 0x6f, 0x6c, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x66, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x73, 0x22, 0x48, 0x0a, 0x08, 0x41, 0x73, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x65, 0x6e, 0x64, 0x22, 0x44, 0x0a, 0x12, 0x43, 0x69, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x72, 0x6f, 0x77, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x72, 0x6f, 0x77, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0xd0, 0x01, 0x0a, 0x04, 0x50, 0x69, 0x70, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x27, 0x0a, 0x05, 0x70, 0x6f, 0x72, 0x74, 0x41, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x05, 0x70, 0x6f, 0x72, 0x74, 0x41, 0x12, 0x27, 0x0a, 0x05, 0x70, 0x6f, 0x72, 0x74, 0x42, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x05, 0x70, 0x6f, 0x72, 0x74, 0x42, 0x12, 0x2c, 0x0a, 0x08, 0x70, 0x69, 0x70, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x10, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x50, 0x69, 0x70, 0x65, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x08, 0x70, 0x69, 0x70, 0x65, 0x54, 0x79, 0x70, 0x65, 0x22, 0x24, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x09, 0x0a, 0x05, 0x57, 0x61, 0x74, 0x65, 0x72, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x45, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x69, 0x63, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x10, 0x01, 0x22, 0x43, 0x0a, 0x0b, 0x50, 0x69, 0x70, 0x65, 0x46, 0x69, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x73, 0x75, 0x6d, 0x22, 0x34, 0x0a, 0x0e, 0x43, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x42, 0x72, 0x65, 0x61, 0x6b, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x39, 0x0a, 0x13, 0x54, 0x68, 0x72, 0x65, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x34, 0x0a, 0x0e, 0x48, 0x61, 0x6e, 0x64, 0x63, 0x61, 0x72, 0x74, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x2f, 0x0a, 0x09, 0x52, 0x65, 0x63, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x32, 0x0a, 0x0c, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x58, 0x0a, 0x12, 0x56, 0x6f, 0x6c, 0x74, 0x61, 0x67, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x65, 0x31, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x65, 0x31, 0x12, 0x0e, 0x0a, 0x02, 0x65, 0x32, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x65, 0x32, 0x22, 0x5b, 0x0a, 0x0b, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x61, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x02, 0x61, 0x63, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x6f, 0x6c, 0x74, 0x61, 0x67, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x76, 0x6f, 0x6c, 0x74, 0x61, 0x67, 0x65, 0x22, 0x37, 0x0a, 0x11, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x6e, 0x69, 0x6e, 0x67, 0x41, 0x72, 0x72, 0x65, 0x73, 0x74, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x2a, 0xa4, 0x14, 0x0a, 0x0a, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x12, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x10, 0x00, 0x12, 0x1e, 0x0a, 0x1a, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x50, 0x68, 0x79, 0x73, 0x69, 0x63, 0x61, 0x6c, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x10, 0x01, 0x12, 0x19, 0x0a, 0x15, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x10, 0x02, 0x12, 0x16, 0x0a, 0x12, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x54, 0x75, 0x72, 0x6e, 0x6f, 0x75, 0x74, 0x10, 0x03, 0x12, 0x15, 0x0a, 0x11, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x10, 0x04, 0x12, 0x1a, 0x0a, 0x16, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x65, 0x72, 0x10, 0x05, 0x12, 0x14, 0x0a, 0x10, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x53, 0x6c, 0x6f, 0x70, 0x65, 0x10, 0x06, 0x12, 0x21, 0x0a, 0x1d, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x43, 0x75, 0x72, 0x76, 0x61, 0x74, 0x75, 0x72, 0x65, 0x10, 0x07, 0x12, 0x13, 0x0a, 0x0f, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x4c, 0x69, 0x6e, 0x6b, 0x10, 0x08, 0x12, 0x17, 0x0a, 0x13, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x4c, 0x69, 0x6e, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x10, 0x09, 0x12, 0x14, 0x0a, 0x10, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x10, 0x0a, 0x12, 0x24, 0x0a, 0x20, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x50, 0x68, 0x61, 0x73, 0x65, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x10, 0x0b, 0x12, 0x15, 0x0a, 0x11, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x10, 0x0c, 0x12, 0x14, 0x0a, 0x10, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x10, 0x0d, 0x12, 0x14, 0x0a, 0x10, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x10, 0x0e, 0x12, 0x12, 0x0a, 0x0e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x50, 0x73, 0x64, 0x10, 0x0f, 0x12, 0x16, 0x0a, 0x12, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x10, 0x10, 0x12, 0x12, 0x0a, 0x0e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x4d, 0x6b, 0x78, 0x10, 0x11, 0x12, 0x12, 0x0a, 0x0e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x4b, 0x65, 0x79, 0x10, 0x12, 0x12, 0x17, 0x0a, 0x13, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x10, 0x13, 0x12, 0x1f, 0x0a, 0x1b, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x46, 0x61, 0x75, 0x6c, 0x74, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x10, 0x14, 0x12, 0x17, 0x0a, 0x13, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x42, 0x72, 0x65, 0x61, 0x6b, 0x65, 0x72, 0x73, 0x10, 0x15, 0x12, 0x1a, 0x0a, 0x16, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x53, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x10, 0x16, 0x12, 0x1a, 0x0a, 0x15, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x44, 0x6f, 0x6f, 0x72, 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x10, 0xc3, 0x02, 0x12, 0x1c, 0x0a, 0x17, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x45, 0x6e, 0x74, 0x72, 0x61, 0x6e, 0x63, 0x65, 0x47, 0x61, 0x74, 0x65, 0x10, 0xc4, 0x02, 0x12, 0x18, 0x0a, 0x13, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x45, 0x78, 0x69, 0x74, 0x47, 0x61, 0x74, 0x65, 0x10, 0xc5, 0x02, 0x12, 0x1a, 0x0a, 0x15, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x54, 0x77, 0x6f, 0x57, 0x61, 0x79, 0x47, 0x61, 0x74, 0x65, 0x10, 0xc6, 0x02, 0x12, 0x24, 0x0a, 0x1f, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x56, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x10, 0xc7, 0x02, 0x12, 0x25, 0x0a, 0x20, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x53, 0x65, 0x6d, 0x69, 0x41, 0x75, 0x74, 0x6f, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x10, 0xc8, 0x02, 0x12, 0x25, 0x0a, 0x20, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x10, 0xc9, 0x02, 0x12, 0x1a, 0x0a, 0x15, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x41, 0x69, 0x72, 0x43, 0x75, 0x72, 0x74, 0x61, 0x69, 0x6e, 0x10, 0xca, 0x02, 0x12, 0x1b, 0x0a, 0x16, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x43, 0x68, 0x69, 0x6c, 0x6c, 0x65, 0x72, 0x55, 0x6e, 0x69, 0x74, 0x10, 0xcb, 0x02, 0x12, 0x20, 0x0a, 0x1b, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x43, 0x69, 0x76, 0x69, 0x6c, 0x44, 0x65, 0x66, 0x65, 0x6e, 0x73, 0x65, 0x44, 0x6f, 0x6f, 0x72, 0x10, 0xcc, 0x02, 0x12, 0x19, 0x0a, 0x14, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x45, 0x73, 0x63, 0x61, 0x6c, 0x61, 0x74, 0x6f, 0x72, 0x10, 0xcd, 0x02, 0x12, 0x18, 0x0a, 0x13, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x45, 0x6c, 0x65, 0x76, 0x61, 0x74, 0x6f, 0x72, 0x10, 0xce, 0x02, 0x12, 0x21, 0x0a, 0x1c, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x45, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x69, 0x6e, 0x67, 0x10, 0xcf, 0x02, 0x12, 0x13, 0x0a, 0x0e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x46, 0x61, 0x6e, 0x10, 0xd0, 0x02, 0x12, 0x1e, 0x0a, 0x19, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x41, 0x69, 0x72, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x10, 0xd1, 0x02, 0x12, 0x1a, 0x0a, 0x15, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x46, 0x6c, 0x6f, 0x77, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x10, 0xd2, 0x02, 0x12, 0x20, 0x0a, 0x1b, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x69, 0x6e, 0x67, 0x47, 0x75, 0x69, 0x64, 0x61, 0x6e, 0x63, 0x65, 0x10, 0xd3, 0x02, 0x12, 0x23, 0x0a, 0x1e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x47, 0x75, 0x69, 0x64, 0x61, 0x6e, 0x63, 0x65, 0x10, 0xd4, 0x02, 0x12, 0x21, 0x0a, 0x1c, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x45, 0x73, 0x63, 0x61, 0x6c, 0x61, 0x74, 0x6f, 0x72, 0x47, 0x75, 0x69, 0x64, 0x61, 0x6e, 0x63, 0x65, 0x10, 0xd5, 0x02, 0x12, 0x22, 0x0a, 0x1d, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x47, 0x61, 0x74, 0x65, 0x47, 0x75, 0x69, 0x64, 0x61, 0x6e, 0x63, 0x65, 0x10, 0xd6, 0x02, 0x12, 0x29, 0x0a, 0x24, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x61, 0x63, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x47, 0x75, 0x69, 0x64, 0x61, 0x6e, 0x63, 0x65, 0x10, 0xd7, 0x02, 0x12, 0x1d, 0x0a, 0x18, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x10, 0xd8, 0x02, 0x12, 0x1d, 0x0a, 0x18, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x50, 0x6c, 0x63, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x10, 0xd9, 0x02, 0x12, 0x19, 0x0a, 0x14, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x57, 0x61, 0x74, 0x65, 0x72, 0x50, 0x75, 0x6d, 0x70, 0x10, 0xda, 0x02, 0x12, 0x19, 0x0a, 0x14, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x57, 0x61, 0x74, 0x65, 0x72, 0x54, 0x61, 0x6e, 0x6b, 0x10, 0xdb, 0x02, 0x12, 0x22, 0x0a, 0x1d, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x50, 0x75, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x10, 0xdc, 0x02, 0x12, 0x18, 0x0a, 0x13, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x54, 0x68, 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x10, 0xdd, 0x02, 0x12, 0x19, 0x0a, 0x14, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x43, 0x4f, 0x32, 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x10, 0xde, 0x02, 0x12, 0x1c, 0x0a, 0x17, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x57, 0x61, 0x74, 0x65, 0x72, 0x54, 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x10, 0xdf, 0x02, 0x12, 0x1e, 0x0a, 0x19, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x50, 0x72, 0x65, 0x73, 0x73, 0x75, 0x72, 0x65, 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x10, 0xe0, 0x02, 0x12, 0x1a, 0x0a, 0x15, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x46, 0x6c, 0x6f, 0x77, 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x10, 0xe1, 0x02, 0x12, 0x21, 0x0a, 0x1c, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x54, 0x65, 0x6d, 0x70, 0x65, 0x72, 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x10, 0xe2, 0x02, 0x12, 0x1c, 0x0a, 0x17, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x76, 0x65, 0x10, 0xe3, 0x02, 0x12, 0x1c, 0x0a, 0x17, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x43, 0x6f, 0x6f, 0x6c, 0x69, 0x6e, 0x67, 0x54, 0x6f, 0x77, 0x65, 0x72, 0x10, 0xe4, 0x02, 0x12, 0x1e, 0x0a, 0x19, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x57, 0x61, 0x74, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x10, 0xe5, 0x02, 0x12, 0x1b, 0x0a, 0x16, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x48, 0x6f, 0x73, 0x74, 0x10, 0xe6, 0x02, 0x12, 0x1d, 0x0a, 0x18, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x53, 0x6d, 0x6f, 0x6b, 0x65, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x10, 0xe7, 0x02, 0x12, 0x23, 0x0a, 0x1e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x54, 0x65, 0x6d, 0x70, 0x65, 0x72, 0x61, 0x74, 0x75, 0x72, 0x65, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x10, 0xe8, 0x02, 0x12, 0x25, 0x0a, 0x20, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x4d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x46, 0x69, 0x72, 0x65, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x10, 0xe9, 0x02, 0x12, 0x23, 0x0a, 0x1e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x47, 0x61, 0x73, 0x46, 0x69, 0x72, 0x65, 0x45, 0x78, 0x74, 0x69, 0x6e, 0x67, 0x75, 0x69, 0x73, 0x68, 0x65, 0x72, 0x10, 0xea, 0x02, 0x12, 0x19, 0x0a, 0x14, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x42, 0x65, 0x6c, 0x6c, 0x10, 0xeb, 0x02, 0x12, 0x21, 0x0a, 0x1c, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x46, 0x69, 0x72, 0x65, 0x52, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x53, 0x68, 0x75, 0x74, 0x74, 0x65, 0x72, 0x10, 0xec, 0x02, 0x12, 0x16, 0x0a, 0x11, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x46, 0x61, 0x73, 0x41, 0x63, 0x73, 0x10, 0xed, 0x02, 0x12, 0x16, 0x0a, 0x11, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x46, 0x61, 0x73, 0x41, 0x66, 0x63, 0x10, 0xee, 0x02, 0x12, 0x22, 0x0a, 0x1d, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x4e, 0x6f, 0x6e, 0x46, 0x69, 0x72, 0x65, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x10, 0xef, 0x02, 0x12, 0x22, 0x0a, 0x1d, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x57, 0x61, 0x74, 0x65, 0x72, 0x46, 0x6c, 0x6f, 0x77, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x10, 0xf0, 0x02, 0x12, 0x1f, 0x0a, 0x1a, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x50, 0x75, 0x6d, 0x70, 0x53, 0x74, 0x61, 0x72, 0x74, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x10, 0xf1, 0x02, 0x12, 0x27, 0x0a, 0x22, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x54, 0x65, 0x6d, 0x70, 0x65, 0x72, 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, 0x65, 0x6e, 0x73, 0x69, 0x6e, 0x67, 0x43, 0x61, 0x62, 0x6c, 0x65, 0x10, 0xf2, 0x02, 0x12, 0x1a, 0x0a, 0x15, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x46, 0x69, 0x72, 0x65, 0x44, 0x61, 0x6d, 0x70, 0x65, 0x72, 0x10, 0xf3, 0x02, 0x12, 0x27, 0x0a, 0x22, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x45, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x69, 0x63, 0x53, 0x6d, 0x6f, 0x6b, 0x65, 0x46, 0x69, 0x72, 0x65, 0x44, 0x61, 0x6d, 0x70, 0x65, 0x72, 0x10, 0xf4, 0x02, 0x12, 0x29, 0x0a, 0x24, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x46, 0x69, 0x72, 0x65, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x10, 0xf5, 0x02, 0x12, 0x19, 0x0a, 0x14, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x46, 0x6c, 0x6f, 0x6f, 0x64, 0x47, 0x61, 0x74, 0x65, 0x10, 0xf6, 0x02, 0x12, 0x1b, 0x0a, 0x16, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x57, 0x69, 0x72, 0x65, 0x43, 0x61, 0x62, 0x69, 0x6e, 0x65, 0x74, 0x10, 0xf7, 0x02, 0x12, 0x1e, 0x0a, 0x19, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x43, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x42, 0x72, 0x65, 0x61, 0x6b, 0x65, 0x72, 0x10, 0xf8, 0x02, 0x12, 0x19, 0x0a, 0x14, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x52, 0x65, 0x63, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x10, 0xf9, 0x02, 0x12, 0x1e, 0x0a, 0x19, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x48, 0x61, 0x6e, 0x64, 0x63, 0x61, 0x72, 0x74, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x10, 0xfa, 0x02, 0x12, 0x22, 0x0a, 0x1d, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x56, 0x6f, 0x6c, 0x74, 0x61, 0x67, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x72, 0x10, 0xfb, 0x02, 0x12, 0x23, 0x0a, 0x1e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x54, 0x68, 0x72, 0x65, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x10, 0xfc, 0x02, 0x12, 0x21, 0x0a, 0x1c, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x6e, 0x69, 0x6e, 0x67, 0x41, 0x72, 0x72, 0x65, 0x73, 0x74, 0x65, 0x72, 0x10, 0xfd, 0x02, 0x12, 0x1c, 0x0a, 0x17, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x10, 0xfe, 0x02, 0x12, 0x14, 0x0a, 0x0f, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x50, 0x69, 0x70, 0x65, 0x10, 0xff, 0x02, 0x12, 0x1b, 0x0a, 0x16, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x50, 0x69, 0x70, 0x65, 0x46, 0x69, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x10, 0x80, 0x03, 0x12, 0x1b, 0x0a, 0x16, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x10, 0x81, 0x03, 0x2a, 0x2c, 0x0a, 0x04, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x6f, 0x6e, 0x65, 0x10, 0x00, 0x12, 0x05, 0x0a, 0x01, 0x41, 0x10, 0x01, 0x12, 0x05, 0x0a, 0x01, 0x42, 0x10, 0x02, 0x12, 0x05, 0x0a, 0x01, 0x43, 0x10, 0x03, 0x12, 0x05, 0x0a, 0x01, 0x44, 0x10, 0x04, 0x2a, 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, 0x2a, 0x43, 0x0a, 0x0e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0c, 0x0a, 0x08, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x41, 0x78, 0x6c, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x49, 0x6e, 0x73, 0x75, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x4a, 0x6f, 0x69, 0x6e, 0x74, 0x10, 0x02, 0x42, 0x1a, 0x5a, 0x18, 0x2e, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x2f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( file_model_proto_rawDescOnce sync.Once file_model_proto_rawDescData = file_model_proto_rawDesc ) func file_model_proto_rawDescGZIP() []byte { file_model_proto_rawDescOnce.Do(func() { file_model_proto_rawDescData = protoimpl.X.CompressGZIP(file_model_proto_rawDescData) }) return file_model_proto_rawDescData } var file_model_proto_enumTypes = make([]protoimpl.EnumInfo, 11) var file_model_proto_msgTypes = make([]protoimpl.MessageInfo, 42) var file_model_proto_goTypes = []interface{}{ (DeviceType)(0), // 0: model.DeviceType (Port)(0), // 1: model.Port (Direction)(0), // 2: model.Direction (CheckPointType)(0), // 3: model.CheckPointType (Turnout_SwitchMachineType)(0), // 4: model.Turnout.SwitchMachineType (Signal_Model)(0), // 5: model.Signal.Model (Transponder_Type)(0), // 6: model.Transponder.Type (Relay_Model)(0), // 7: model.Relay.Model (Button_ButtonType)(0), // 8: model.Button.ButtonType (Light_LightAspect)(0), // 9: model.Light.LightAspect (Pipe_Type)(0), // 10: model.Pipe.Type (*Repository)(nil), // 11: model.Repository (*SignalLayout)(nil), // 12: model.SignalLayout (*PhysicalSection)(nil), // 13: model.PhysicalSection (*CheckPoint)(nil), // 14: model.CheckPoint (*Turnout)(nil), // 15: model.Turnout (*Signal)(nil), // 16: model.Signal (*Psd)(nil), // 17: model.Psd (*Transponder)(nil), // 18: model.Transponder (*Slope)(nil), // 19: model.Slope (*SectionalCurvature)(nil), // 20: model.SectionalCurvature (*DevicePort)(nil), // 21: model.DevicePort (*Kilometer)(nil), // 22: model.Kilometer (*KilometerConvert)(nil), // 23: model.KilometerConvert (*Relay)(nil), // 24: model.Relay (*PhaseFailureProtector)(nil), // 25: model.PhaseFailureProtector (*ElectronicComponentGroup)(nil), // 26: model.ElectronicComponentGroup (*Button)(nil), // 27: model.Button (*Light)(nil), // 28: model.Light (*Alarm)(nil), // 29: model.Alarm (*Station)(nil), // 30: model.Station (*DeviceEcc)(nil), // 31: model.DeviceEcc (*ElectronicGroup)(nil), // 32: model.ElectronicGroup (*ElectronicComponent)(nil), // 33: model.ElectronicComponent (*Mkx)(nil), // 34: model.Mkx (*Platform)(nil), // 35: model.Platform (*Key)(nil), // 36: model.Key (*CentralizedStationRef)(nil), // 37: model.CentralizedStationRef (*CjData)(nil), // 38: model.CjData (*CjDataItem)(nil), // 39: model.CjDataItem (*QdData)(nil), // 40: model.QdData (*AsdGroup)(nil), // 41: model.AsdGroup (*CiSectionCodePoint)(nil), // 42: model.CiSectionCodePoint (*Pipe)(nil), // 43: model.Pipe (*PipeFitting)(nil), // 44: model.PipeFitting (*CircuitBreaker)(nil), // 45: model.CircuitBreaker (*ThreePositionSwitch)(nil), // 46: model.ThreePositionSwitch (*HandcartSwitch)(nil), // 47: model.HandcartSwitch (*Rectifier)(nil), // 48: model.Rectifier (*Disconnector)(nil), // 49: model.Disconnector (*VoltageTransformer)(nil), // 50: model.VoltageTransformer (*PowerSource)(nil), // 51: model.PowerSource (*LightningArrester)(nil), // 52: model.LightningArrester } var file_model_proto_depIdxs = []int32{ 13, // 0: model.Repository.physicalSections:type_name -> model.PhysicalSection 14, // 1: model.Repository.checkPoints:type_name -> model.CheckPoint 15, // 2: model.Repository.turnouts:type_name -> model.Turnout 16, // 3: model.Repository.signals:type_name -> model.Signal 18, // 4: model.Repository.transponders:type_name -> model.Transponder 19, // 5: model.Repository.slopes:type_name -> model.Slope 20, // 6: model.Repository.sectionalCurvatures:type_name -> model.SectionalCurvature 23, // 7: model.Repository.kilometerConverts:type_name -> model.KilometerConvert 24, // 8: model.Repository.relays:type_name -> model.Relay 25, // 9: model.Repository.phaseFailureProtectors:type_name -> model.PhaseFailureProtector 27, // 10: model.Repository.buttons:type_name -> model.Button 17, // 11: model.Repository.psds:type_name -> model.Psd 28, // 12: model.Repository.lights:type_name -> model.Light 29, // 13: model.Repository.alarms:type_name -> model.Alarm 30, // 14: model.Repository.stations:type_name -> model.Station 34, // 15: model.Repository.mkxs:type_name -> model.Mkx 35, // 16: model.Repository.platforms:type_name -> model.Platform 36, // 17: model.Repository.Keys:type_name -> model.Key 37, // 18: model.Repository.CentralizedStationRefs:type_name -> model.CentralizedStationRef 43, // 19: model.Repository.pipes:type_name -> model.Pipe 44, // 20: model.Repository.pipeFittings:type_name -> model.PipeFitting 45, // 21: model.Repository.circuitBreakers:type_name -> model.CircuitBreaker 46, // 22: model.Repository.threePositionSwitches:type_name -> model.ThreePositionSwitch 47, // 23: model.Repository.handcartSwitches:type_name -> model.HandcartSwitch 48, // 24: model.Repository.rectifiers:type_name -> model.Rectifier 49, // 25: model.Repository.disconnectors:type_name -> model.Disconnector 50, // 26: model.Repository.voltageTransformers:type_name -> model.VoltageTransformer 51, // 27: model.Repository.powerSources:type_name -> model.PowerSource 52, // 28: model.Repository.lightningArresters:type_name -> model.LightningArrester 13, // 29: model.SignalLayout.physicalSections:type_name -> model.PhysicalSection 14, // 30: model.SignalLayout.checkPoints:type_name -> model.CheckPoint 15, // 31: model.SignalLayout.turnouts:type_name -> model.Turnout 16, // 32: model.SignalLayout.signals:type_name -> model.Signal 18, // 33: model.SignalLayout.transponders:type_name -> model.Transponder 19, // 34: model.SignalLayout.slopes:type_name -> model.Slope 20, // 35: model.SignalLayout.sectionalCurvatures:type_name -> model.SectionalCurvature 23, // 36: model.SignalLayout.kilometerConverts:type_name -> model.KilometerConvert 21, // 37: model.PhysicalSection.aDevicePort:type_name -> model.DevicePort 21, // 38: model.PhysicalSection.bDevicePort:type_name -> model.DevicePort 22, // 39: model.CheckPoint.km:type_name -> model.Kilometer 3, // 40: model.CheckPoint.type:type_name -> model.CheckPointType 21, // 41: model.CheckPoint.devicePorts:type_name -> model.DevicePort 22, // 42: model.Turnout.km:type_name -> model.Kilometer 21, // 43: model.Turnout.aDevicePort:type_name -> model.DevicePort 21, // 44: model.Turnout.bDevicePort:type_name -> model.DevicePort 21, // 45: model.Turnout.cDevicePort:type_name -> model.DevicePort 4, // 46: model.Turnout.switchMachineType:type_name -> model.Turnout.SwitchMachineType 26, // 47: model.Turnout.electronicComponentGroups:type_name -> model.ElectronicComponentGroup 22, // 48: model.Signal.km:type_name -> model.Kilometer 21, // 49: model.Signal.turnoutPort:type_name -> model.DevicePort 26, // 50: model.Signal.electronicComponentGroups:type_name -> model.ElectronicComponentGroup 5, // 51: model.Signal.model:type_name -> model.Signal.Model 41, // 52: model.Psd.asdGroups:type_name -> model.AsdGroup 26, // 53: model.Psd.electronicComponentGroups:type_name -> model.ElectronicComponentGroup 22, // 54: model.Transponder.km:type_name -> model.Kilometer 21, // 55: model.Transponder.turnoutPort:type_name -> model.DevicePort 6, // 56: model.Transponder.type:type_name -> model.Transponder.Type 22, // 57: model.Slope.kms:type_name -> model.Kilometer 22, // 58: model.SectionalCurvature.kms:type_name -> model.Kilometer 0, // 59: model.DevicePort.deviceType:type_name -> model.DeviceType 1, // 60: model.DevicePort.port:type_name -> model.Port 2, // 61: model.Kilometer.direction:type_name -> model.Direction 22, // 62: model.KilometerConvert.kmA:type_name -> model.Kilometer 22, // 63: model.KilometerConvert.kmB:type_name -> model.Kilometer 7, // 64: model.Relay.model:type_name -> model.Relay.Model 8, // 65: model.Button.buttonType:type_name -> model.Button.ButtonType 9, // 66: model.Light.aspect:type_name -> model.Light.LightAspect 32, // 67: model.Station.electronicGroup:type_name -> model.ElectronicGroup 31, // 68: model.Station.deccs:type_name -> model.DeviceEcc 0, // 69: model.DeviceEcc.deviceType:type_name -> model.DeviceType 26, // 70: model.DeviceEcc.egs:type_name -> model.ElectronicComponentGroup 33, // 71: model.ElectronicGroup.components:type_name -> model.ElectronicComponent 0, // 72: model.ElectronicComponent.deviceType:type_name -> model.DeviceType 38, // 73: model.CentralizedStationRef.cjList:type_name -> model.CjData 40, // 74: model.CentralizedStationRef.qdList:type_name -> model.QdData 42, // 75: model.CentralizedStationRef.sectionCodePoints:type_name -> model.CiSectionCodePoint 39, // 76: model.CjData.refRelays:type_name -> model.CjDataItem 21, // 77: model.Pipe.portA:type_name -> model.DevicePort 21, // 78: model.Pipe.portB:type_name -> model.DevicePort 10, // 79: model.Pipe.pipeType:type_name -> model.Pipe.Type 80, // [80:80] is the sub-list for method output_type 80, // [80:80] is the sub-list for method input_type 80, // [80:80] is the sub-list for extension type_name 80, // [80:80] is the sub-list for extension extendee 0, // [0:80] is the sub-list for field type_name } func init() { file_model_proto_init() } func file_model_proto_init() { if File_model_proto != nil { return } if !protoimpl.UnsafeEnabled { file_model_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Repository); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_model_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SignalLayout); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_model_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PhysicalSection); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_model_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CheckPoint); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_model_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Turnout); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_model_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Signal); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_model_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Psd); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_model_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Transponder); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_model_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Slope); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_model_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SectionalCurvature); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_model_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DevicePort); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_model_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Kilometer); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_model_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*KilometerConvert); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_model_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Relay); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_model_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PhaseFailureProtector); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_model_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ElectronicComponentGroup); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_model_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Button); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_model_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Light); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_model_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Alarm); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_model_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Station); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_model_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DeviceEcc); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_model_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ElectronicGroup); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_model_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ElectronicComponent); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_model_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Mkx); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_model_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Platform); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_model_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Key); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_model_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CentralizedStationRef); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_model_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CjData); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_model_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CjDataItem); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_model_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*QdData); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_model_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*AsdGroup); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_model_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CiSectionCodePoint); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_model_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Pipe); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_model_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PipeFitting); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_model_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CircuitBreaker); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_model_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ThreePositionSwitch); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_model_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*HandcartSwitch); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_model_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Rectifier); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_model_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Disconnector); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_model_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*VoltageTransformer); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_model_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PowerSource); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_model_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*LightningArrester); 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{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_model_proto_rawDesc, NumEnums: 11, NumMessages: 42, NumExtensions: 0, NumServices: 0, }, GoTypes: file_model_proto_goTypes, DependencyIndexes: file_model_proto_depIdxs, EnumInfos: file_model_proto_enumTypes, MessageInfos: file_model_proto_msgTypes, }.Build() File_model_proto = out.File file_model_proto_rawDesc = nil file_model_proto_goTypes = nil file_model_proto_depIdxs = nil }