// Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.33.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 // 进路 DeviceType_DeviceType_Route DeviceType = 23 DeviceType_DeviceType_Ckm DeviceType = 24 //车库门 DeviceType_DeviceType_Xcj DeviceType = 25 //洗车机 DeviceType_DeviceType_CkmPsl DeviceType = 26 //车库门PSL // 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_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 // ISCS 接地装置 DeviceType_DeviceType_EarthingDevice DeviceType = 386 // ISCS 风亭 DeviceType_DeviceType_AirPavilion DeviceType = 387 // ISCS 阀门 DeviceType_DeviceType_Valve DeviceType = 388 // ISCS 混合静压室 DeviceType_DeviceType_GasMixingChamber DeviceType = 389 // ISCS 组合式空调 DeviceType_DeviceType_CombinationAirConditioner DeviceType = 390 // ISCS 净化装置 DeviceType_DeviceType_AirPurificationDevice DeviceType = 391 // ISCS 环境(正常空气、有害烟雾、温度、湿度等) DeviceType_DeviceType_Environment DeviceType = 392 ) // 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", 23: "DeviceType_Route", 24: "DeviceType_Ckm", 25: "DeviceType_Xcj", 26: "DeviceType_CkmPsl", 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", 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", 386: "DeviceType_EarthingDevice", 387: "DeviceType_AirPavilion", 388: "DeviceType_Valve", 389: "DeviceType_GasMixingChamber", 390: "DeviceType_CombinationAirConditioner", 391: "DeviceType_AirPurificationDevice", 392: "DeviceType_Environment", } 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_Route": 23, "DeviceType_Ckm": 24, "DeviceType_Xcj": 25, "DeviceType_CkmPsl": 26, "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_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, "DeviceType_EarthingDevice": 386, "DeviceType_AirPavilion": 387, "DeviceType_Valve": 388, "DeviceType_GasMixingChamber": 389, "DeviceType_CombinationAirConditioner": 390, "DeviceType_AirPurificationDevice": 391, "DeviceType_Environment": 392, } ) 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 Platform_PlatformDirection int32 const ( Platform_Unknown Platform_PlatformDirection = 0 Platform_Up Platform_PlatformDirection = 1 // 上行 Platform_Down Platform_PlatformDirection = 2 // 下行 ) // Enum value maps for Platform_PlatformDirection. var ( Platform_PlatformDirection_name = map[int32]string{ 0: "Unknown", 1: "Up", 2: "Down", } Platform_PlatformDirection_value = map[string]int32{ "Unknown": 0, "Up": 1, "Down": 2, } ) func (x Platform_PlatformDirection) Enum() *Platform_PlatformDirection { p := new(Platform_PlatformDirection) *p = x return p } func (x Platform_PlatformDirection) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (Platform_PlatformDirection) Descriptor() protoreflect.EnumDescriptor { return file_model_proto_enumTypes[10].Descriptor() } func (Platform_PlatformDirection) Type() protoreflect.EnumType { return &file_model_proto_enumTypes[10] } func (x Platform_PlatformDirection) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use Platform_PlatformDirection.Descriptor instead. func (Platform_PlatformDirection) EnumDescriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{25, 0} } type Route_RouteType int32 const ( Route_RECEIVING Route_RouteType = 0 Route_DEPARTURE Route_RouteType = 1 Route_SHUNTING Route_RouteType = 2 Route_PASS Route_RouteType = 3 Route_LONG_SHUNTING Route_RouteType = 4 ) // Enum value maps for Route_RouteType. var ( Route_RouteType_name = map[int32]string{ 0: "RECEIVING", 1: "DEPARTURE", 2: "SHUNTING", 3: "PASS", 4: "LONG_SHUNTING", } Route_RouteType_value = map[string]int32{ "RECEIVING": 0, "DEPARTURE": 1, "SHUNTING": 2, "PASS": 3, "LONG_SHUNTING": 4, } ) func (x Route_RouteType) Enum() *Route_RouteType { p := new(Route_RouteType) *p = x return p } func (x Route_RouteType) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (Route_RouteType) Descriptor() protoreflect.EnumDescriptor { return file_model_proto_enumTypes[11].Descriptor() } func (Route_RouteType) Type() protoreflect.EnumType { return &file_model_proto_enumTypes[11] } func (x Route_RouteType) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use Route_RouteType.Descriptor instead. func (Route_RouteType) EnumDescriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{33, 0} } // 风亭子类型 type AirPavilion_Type int32 const ( AirPavilion_ExhaustPavilion AirPavilion_Type = 0 //排风亭 AirPavilion_AirSupplyPavilion AirPavilion_Type = 1 //送风亭 ) // Enum value maps for AirPavilion_Type. var ( AirPavilion_Type_name = map[int32]string{ 0: "ExhaustPavilion", 1: "AirSupplyPavilion", } AirPavilion_Type_value = map[string]int32{ "ExhaustPavilion": 0, "AirSupplyPavilion": 1, } ) func (x AirPavilion_Type) Enum() *AirPavilion_Type { p := new(AirPavilion_Type) *p = x return p } func (x AirPavilion_Type) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (AirPavilion_Type) Descriptor() protoreflect.EnumDescriptor { return file_model_proto_enumTypes[12].Descriptor() } func (AirPavilion_Type) Type() protoreflect.EnumType { return &file_model_proto_enumTypes[12] } func (x AirPavilion_Type) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use AirPavilion_Type.Descriptor instead. func (AirPavilion_Type) EnumDescriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{47, 0} } // 阀门子类型 type Valve_Type int32 const ( Valve_ElectricControlValve Valve_Type = 0 //电动调节阀 Valve_ElectricAirValve Valve_Type = 1 //电动风阀 Valve_CombinationAirValve Valve_Type = 2 //组合式风阀 Valve_ElectricButterflyValve Valve_Type = 3 //电动蝶阀 ) // Enum value maps for Valve_Type. var ( Valve_Type_name = map[int32]string{ 0: "ElectricControlValve", 1: "ElectricAirValve", 2: "CombinationAirValve", 3: "ElectricButterflyValve", } Valve_Type_value = map[string]int32{ "ElectricControlValve": 0, "ElectricAirValve": 1, "CombinationAirValve": 2, "ElectricButterflyValve": 3, } ) func (x Valve_Type) Enum() *Valve_Type { p := new(Valve_Type) *p = x return p } func (x Valve_Type) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (Valve_Type) Descriptor() protoreflect.EnumDescriptor { return file_model_proto_enumTypes[13].Descriptor() } func (Valve_Type) Type() protoreflect.EnumType { return &file_model_proto_enumTypes[13] } func (x Valve_Type) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use Valve_Type.Descriptor instead. func (Valve_Type) EnumDescriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{48, 0} } // 风机子类型 type Fan_Type int32 const ( Fan_CommonFan Fan_Type = 0 //一般风机(普通风机、硬线风机、射流风机、排烟风机、正压送风机) Fan_FcBypassFan Fan_Type = 1 //变频旁路风机(回排风机) Fan_SoftStartFan Fan_Type = 2 //软启风机(软启风机、隧道风机) Fan_HighLowSpeedFan Fan_Type = 3 //双速风机 ) // Enum value maps for Fan_Type. var ( Fan_Type_name = map[int32]string{ 0: "CommonFan", 1: "FcBypassFan", 2: "SoftStartFan", 3: "HighLowSpeedFan", } Fan_Type_value = map[string]int32{ "CommonFan": 0, "FcBypassFan": 1, "SoftStartFan": 2, "HighLowSpeedFan": 3, } ) func (x Fan_Type) Enum() *Fan_Type { p := new(Fan_Type) *p = x return p } func (x Fan_Type) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (Fan_Type) Descriptor() protoreflect.EnumDescriptor { return file_model_proto_enumTypes[14].Descriptor() } func (Fan_Type) Type() protoreflect.EnumType { return &file_model_proto_enumTypes[14] } func (x Fan_Type) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use Fan_Type.Descriptor instead. func (Fan_Type) EnumDescriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{53, 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"` Routes []*Route `protobuf:"bytes,23,rep,name=routes,proto3" json:"routes,omitempty"` Ckms []*Ckm `protobuf:"bytes,24,rep,name=ckms,proto3" json:"ckms,omitempty"` Xcjs []*Xcj `protobuf:"bytes,25,rep,name=xcjs,proto3" json:"xcjs,omitempty"` CkmPsls []*CkmPsl `protobuf:"bytes,26,rep,name=ckmPsls,proto3" json:"ckmPsls,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"` // ISCS接地装置 EarthingDevices []*EarthingDevice `protobuf:"bytes,310,rep,name=earthingDevices,proto3" json:"earthingDevices,omitempty"` // ISCS网络交换机 NetworkSwitches []*NetworkSwitch `protobuf:"bytes,311,rep,name=networkSwitches,proto3" json:"networkSwitches,omitempty"` // ISCS线柜 WireCabinets []*WireCabinet `protobuf:"bytes,312,rep,name=wireCabinets,proto3" json:"wireCabinets,omitempty"` // ISCS风亭 AirPavilions []*AirPavilion `protobuf:"bytes,313,rep,name=airPavilions,proto3" json:"airPavilions,omitempty"` // ISCS阀门 Valves []*Valve `protobuf:"bytes,314,rep,name=valves,proto3" json:"valves,omitempty"` // ISCS混合室静压箱 GasMixingChambers []*GasMixingChamber `protobuf:"bytes,315,rep,name=gasMixingChambers,proto3" json:"gasMixingChambers,omitempty"` // ISCS组合式空调 CombinationAirConditioners []*CombinationAirConditioner `protobuf:"bytes,316,rep,name=combinationAirConditioners,proto3" json:"combinationAirConditioners,omitempty"` // ISCS净化装置 AirPurificationDevices []*AirPurificationDevice `protobuf:"bytes,317,rep,name=airPurificationDevices,proto3" json:"airPurificationDevices,omitempty"` // ISCS空气幕 AirCurtains []*AirCurtain `protobuf:"bytes,318,rep,name=airCurtains,proto3" json:"airCurtains,omitempty"` // ISCS风机 Fans []*Fan `protobuf:"bytes,319,rep,name=fans,proto3" json:"fans,omitempty"` // ISCS气体环境 GasEnvironments []*GasEnvironment `protobuf:"bytes,320,rep,name=gasEnvironments,proto3" json:"gasEnvironments,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) GetRoutes() []*Route { if x != nil { return x.Routes } return nil } func (x *Repository) GetCkms() []*Ckm { if x != nil { return x.Ckms } return nil } func (x *Repository) GetXcjs() []*Xcj { if x != nil { return x.Xcjs } return nil } func (x *Repository) GetCkmPsls() []*CkmPsl { if x != nil { return x.CkmPsls } 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 } func (x *Repository) GetEarthingDevices() []*EarthingDevice { if x != nil { return x.EarthingDevices } return nil } func (x *Repository) GetNetworkSwitches() []*NetworkSwitch { if x != nil { return x.NetworkSwitches } return nil } func (x *Repository) GetWireCabinets() []*WireCabinet { if x != nil { return x.WireCabinets } return nil } func (x *Repository) GetAirPavilions() []*AirPavilion { if x != nil { return x.AirPavilions } return nil } func (x *Repository) GetValves() []*Valve { if x != nil { return x.Valves } return nil } func (x *Repository) GetGasMixingChambers() []*GasMixingChamber { if x != nil { return x.GasMixingChambers } return nil } func (x *Repository) GetCombinationAirConditioners() []*CombinationAirConditioner { if x != nil { return x.CombinationAirConditioners } return nil } func (x *Repository) GetAirPurificationDevices() []*AirPurificationDevice { if x != nil { return x.AirPurificationDevices } return nil } func (x *Repository) GetAirCurtains() []*AirCurtain { if x != nil { return x.AirCurtains } return nil } func (x *Repository) GetFans() []*Fan { if x != nil { return x.Fans } return nil } func (x *Repository) GetGasEnvironments() []*GasEnvironment { if x != nil { return x.GasEnvironments } 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"` //应答器类型 FixedUserTelegram []byte `protobuf:"bytes,7,opt,name=fixedUserTelegram,proto3" json:"fixedUserTelegram,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 } func (x *Transponder) GetFixedUserTelegram() []byte { if x != nil { return x.FixedUserTelegram } return nil } // 坡度 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"` PcbaId string `protobuf:"bytes,3,opt,name=pcbaId,proto3" json:"pcbaId,omitempty"` //屏蔽门关门按钮 PcbplaId string `protobuf:"bytes,4,opt,name=pcbplaId,proto3" json:"pcbplaId,omitempty"` //屏蔽门关门旁路按钮 PcbjId string `protobuf:"bytes,5,opt,name=pcbjId,proto3" json:"pcbjId,omitempty"` //屏蔽门关门继电器 PobaId string `protobuf:"bytes,6,opt,name=pobaId,proto3" json:"pobaId,omitempty"` //屏蔽门开门按钮 PobplaId string `protobuf:"bytes,7,opt,name=pobplaId,proto3" json:"pobplaId,omitempty"` //屏蔽门开门旁路按钮 PobjId string `protobuf:"bytes,8,opt,name=pobjId,proto3" json:"pobjId,omitempty"` //屏蔽门开门继电器 PabaId string `protobuf:"bytes,9,opt,name=pabaId,proto3" json:"pabaId,omitempty"` //站台发车按钮 PabplaId string `protobuf:"bytes,10,opt,name=pabplaId,proto3" json:"pabplaId,omitempty"` //站台发车旁路按钮 PabjId string `protobuf:"bytes,11,opt,name=pabjId,proto3" json:"pabjId,omitempty"` //站台发车继电器 WrzfaId string `protobuf:"bytes,12,opt,name=wrzfaId,proto3" json:"wrzfaId,omitempty"` //无人折返按钮 WrzfplaId string `protobuf:"bytes,13,opt,name=wrzfplaId,proto3" json:"wrzfplaId,omitempty"` //无人折返旁路按钮 WrzfjId string `protobuf:"bytes,14,opt,name=wrzfjId,proto3" json:"wrzfjId,omitempty"` //无人折返继电器 QkqraId string `protobuf:"bytes,15,opt,name=qkqraId,proto3" json:"qkqraId,omitempty"` //清客确认按钮 QkqrplaId string `protobuf:"bytes,16,opt,name=qkqrplaId,proto3" json:"qkqrplaId,omitempty"` //清客确认旁路按钮 QkqrjId string `protobuf:"bytes,17,opt,name=qkqrjId,proto3" json:"qkqrjId,omitempty"` //清客确认继电器 MplaId string `protobuf:"bytes,18,opt,name=mplaId,proto3" json:"mplaId,omitempty"` //互锁接触按钮 JxtcplaId string `protobuf:"bytes,19,opt,name=jxtcplaId,proto3" json:"jxtcplaId,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) GetPcbaId() string { if x != nil { return x.PcbaId } return "" } func (x *Mkx) GetPcbplaId() string { if x != nil { return x.PcbplaId } return "" } func (x *Mkx) GetPcbjId() string { if x != nil { return x.PcbjId } return "" } func (x *Mkx) GetPobaId() string { if x != nil { return x.PobaId } return "" } func (x *Mkx) GetPobplaId() string { if x != nil { return x.PobplaId } return "" } func (x *Mkx) GetPobjId() string { if x != nil { return x.PobjId } return "" } func (x *Mkx) GetPabaId() string { if x != nil { return x.PabaId } return "" } func (x *Mkx) GetPabplaId() string { if x != nil { return x.PabplaId } return "" } func (x *Mkx) GetPabjId() string { if x != nil { return x.PabjId } return "" } func (x *Mkx) GetWrzfaId() string { if x != nil { return x.WrzfaId } return "" } func (x *Mkx) GetWrzfplaId() string { if x != nil { return x.WrzfplaId } return "" } func (x *Mkx) GetWrzfjId() string { if x != nil { return x.WrzfjId } return "" } func (x *Mkx) GetQkqraId() string { if x != nil { return x.QkqraId } return "" } func (x *Mkx) GetQkqrplaId() string { if x != nil { return x.QkqrplaId } return "" } func (x *Mkx) GetQkqrjId() string { if x != nil { return x.QkqrjId } return "" } func (x *Mkx) GetMplaId() string { if x != nil { return x.MplaId } return "" } func (x *Mkx) GetJxtcplaId() string { if x != nil { return x.JxtcplaId } return "" } // 车库门PSL type CkmPsl struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` CkmId string `protobuf:"bytes,2,opt,name=ckmId,proto3" json:"ckmId,omitempty"` GmaId string `protobuf:"bytes,3,opt,name=gmaId,proto3" json:"gmaId,omitempty"` //关门按钮 KmaId string `protobuf:"bytes,4,opt,name=kmaId,proto3" json:"kmaId,omitempty"` //开门按钮 MplaId string `protobuf:"bytes,5,opt,name=mplaId,proto3" json:"mplaId,omitempty"` //门旁路按钮 MmsaId string `protobuf:"bytes,6,opt,name=mmsaId,proto3" json:"mmsaId,omitempty"` //门模式按钮 } func (x *CkmPsl) Reset() { *x = CkmPsl{} if protoimpl.UnsafeEnabled { mi := &file_model_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *CkmPsl) String() string { return protoimpl.X.MessageStringOf(x) } func (*CkmPsl) ProtoMessage() {} func (x *CkmPsl) 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 CkmPsl.ProtoReflect.Descriptor instead. func (*CkmPsl) Descriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{24} } func (x *CkmPsl) GetId() string { if x != nil { return x.Id } return "" } func (x *CkmPsl) GetCkmId() string { if x != nil { return x.CkmId } return "" } func (x *CkmPsl) GetGmaId() string { if x != nil { return x.GmaId } return "" } func (x *CkmPsl) GetKmaId() string { if x != nil { return x.KmaId } return "" } func (x *CkmPsl) GetMplaId() string { if x != nil { return x.MplaId } return "" } func (x *CkmPsl) GetMmsaId() string { if x != nil { return x.MmsaId } 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"` Direction Platform_PlatformDirection `protobuf:"varint,5,opt,name=direction,proto3,enum=model.Platform_PlatformDirection" json:"direction,omitempty"` } func (x *Platform) Reset() { *x = Platform{} if protoimpl.UnsafeEnabled { mi := &file_model_proto_msgTypes[25] 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[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 Platform.ProtoReflect.Descriptor instead. func (*Platform) Descriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{25} } 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 "" } func (x *Platform) GetDirection() Platform_PlatformDirection { if x != nil { return x.Direction } return Platform_Unknown } // 报警器 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[26] 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[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 Key.ProtoReflect.Descriptor instead. func (*Key) Descriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{26} } 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[27] 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[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 CentralizedStationRef.ProtoReflect.Descriptor instead. func (*CentralizedStationRef) Descriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{27} } 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[28] 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[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 CjData.ProtoReflect.Descriptor instead. func (*CjData) Descriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{28} } 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[29] 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[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 CjDataItem.ProtoReflect.Descriptor instead. func (*CjDataItem) Descriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{29} } 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[30] 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[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 QdData.ProtoReflect.Descriptor instead. func (*QdData) Descriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{30} } 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[31] 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[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 AsdGroup.ProtoReflect.Descriptor instead. func (*AsdGroup) Descriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{31} } 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[32] 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[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 CiSectionCodePoint.ProtoReflect.Descriptor instead. func (*CiSectionCodePoint) Descriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{32} } 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 "" } // 进路信息 type Route struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` // 开始信号机 StartId string `protobuf:"bytes,3,opt,name=startId,proto3" json:"startId,omitempty"` // 目的信号机 DestinationId string `protobuf:"bytes,4,opt,name=destinationId,proto3" json:"destinationId,omitempty"` // 关联区段ID DeviceIds []string `protobuf:"bytes,5,rep,name=deviceIds,proto3" json:"deviceIds,omitempty"` // 敌对进路ID ConflictingRouteIds []string `protobuf:"bytes,6,rep,name=conflictingRouteIds,proto3" json:"conflictingRouteIds,omitempty"` // 进路类型 RouteType Route_RouteType `protobuf:"varint,7,opt,name=routeType,proto3,enum=model.Route_RouteType" json:"routeType,omitempty"` // 对应的道岔位置 Turnouts []*Route_TurnoutPosition `protobuf:"bytes,8,rep,name=turnouts,proto3" json:"turnouts,omitempty"` } func (x *Route) Reset() { *x = Route{} if protoimpl.UnsafeEnabled { mi := &file_model_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Route) String() string { return protoimpl.X.MessageStringOf(x) } func (*Route) ProtoMessage() {} func (x *Route) 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 Route.ProtoReflect.Descriptor instead. func (*Route) Descriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{33} } func (x *Route) GetId() string { if x != nil { return x.Id } return "" } func (x *Route) GetName() string { if x != nil { return x.Name } return "" } func (x *Route) GetStartId() string { if x != nil { return x.StartId } return "" } func (x *Route) GetDestinationId() string { if x != nil { return x.DestinationId } return "" } func (x *Route) GetDeviceIds() []string { if x != nil { return x.DeviceIds } return nil } func (x *Route) GetConflictingRouteIds() []string { if x != nil { return x.ConflictingRouteIds } return nil } func (x *Route) GetRouteType() Route_RouteType { if x != nil { return x.RouteType } return Route_RECEIVING } func (x *Route) GetTurnouts() []*Route_TurnoutPosition { if x != nil { return x.Turnouts } return nil } // 管线 // 管线有两个端口,分别为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端连接的设备 } func (x *Pipe) Reset() { *x = Pipe{} if protoimpl.UnsafeEnabled { mi := &file_model_proto_msgTypes[34] 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[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 Pipe.ProtoReflect.Descriptor instead. func (*Pipe) Descriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{34} } 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 } // 管件 // 管件端口分别为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[35] 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[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 PipeFitting.ProtoReflect.Descriptor instead. func (*PipeFitting) Descriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{35} } 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[36] 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[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 CircuitBreaker.ProtoReflect.Descriptor instead. func (*CircuitBreaker) Descriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{36} } 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[37] 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[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 ThreePositionSwitch.ProtoReflect.Descriptor instead. func (*ThreePositionSwitch) Descriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{37} } 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[38] 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[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 HandcartSwitch.ProtoReflect.Descriptor instead. func (*HandcartSwitch) Descriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{38} } 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[39] 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[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 Rectifier.ProtoReflect.Descriptor instead. func (*Rectifier) Descriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{39} } 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[40] 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[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 Disconnector.ProtoReflect.Descriptor instead. func (*Disconnector) Descriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{40} } 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[41] 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[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 VoltageTransformer.ProtoReflect.Descriptor instead. func (*VoltageTransformer) Descriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{41} } 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-单相电 Sx bool `protobuf:"varint,3,opt,name=sx,proto3" json:"sx,omitempty"` // true-交流电源;false-直流电源 Ac bool `protobuf:"varint,4,opt,name=ac,proto3" json:"ac,omitempty"` // 电源电压 Voltage uint32 `protobuf:"varint,5,opt,name=voltage,proto3" json:"voltage,omitempty"` } func (x *PowerSource) Reset() { *x = PowerSource{} if protoimpl.UnsafeEnabled { mi := &file_model_proto_msgTypes[42] 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[42] 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{42} } 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) GetSx() bool { if x != nil { return x.Sx } return false } 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[43] 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[43] 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{43} } func (x *LightningArrester) GetId() string { if x != nil { return x.Id } return "" } func (x *LightningArrester) GetCode() string { if x != nil { return x.Code } return "" } // 接地装置 // 接地装置自身与大地一体,只有一个输入端口A,该端口用来接收意外电能然后导入大地 type EarthingDevice 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 *EarthingDevice) Reset() { *x = EarthingDevice{} if protoimpl.UnsafeEnabled { mi := &file_model_proto_msgTypes[44] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *EarthingDevice) String() string { return protoimpl.X.MessageStringOf(x) } func (*EarthingDevice) ProtoMessage() {} func (x *EarthingDevice) ProtoReflect() protoreflect.Message { mi := &file_model_proto_msgTypes[44] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use EarthingDevice.ProtoReflect.Descriptor instead. func (*EarthingDevice) Descriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{44} } func (x *EarthingDevice) GetId() string { if x != nil { return x.Id } return "" } func (x *EarthingDevice) GetCode() string { if x != nil { return x.Code } return "" } // 网络交换机 type NetworkSwitch 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 *NetworkSwitch) Reset() { *x = NetworkSwitch{} if protoimpl.UnsafeEnabled { mi := &file_model_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *NetworkSwitch) String() string { return protoimpl.X.MessageStringOf(x) } func (*NetworkSwitch) ProtoMessage() {} func (x *NetworkSwitch) ProtoReflect() protoreflect.Message { mi := &file_model_proto_msgTypes[45] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use NetworkSwitch.ProtoReflect.Descriptor instead. func (*NetworkSwitch) Descriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{45} } func (x *NetworkSwitch) GetId() string { if x != nil { return x.Id } return "" } func (x *NetworkSwitch) GetCode() string { if x != nil { return x.Code } return "" } // 线柜 type WireCabinet 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 *WireCabinet) Reset() { *x = WireCabinet{} if protoimpl.UnsafeEnabled { mi := &file_model_proto_msgTypes[46] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *WireCabinet) String() string { return protoimpl.X.MessageStringOf(x) } func (*WireCabinet) ProtoMessage() {} func (x *WireCabinet) ProtoReflect() protoreflect.Message { mi := &file_model_proto_msgTypes[46] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use WireCabinet.ProtoReflect.Descriptor instead. func (*WireCabinet) Descriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{46} } func (x *WireCabinet) GetId() string { if x != nil { return x.Id } return "" } func (x *WireCabinet) GetCode() string { if x != nil { return x.Code } return "" } // 风亭(排风亭、送风亭) type AirPavilion 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"` PavilionType AirPavilion_Type `protobuf:"varint,3,opt,name=pavilionType,proto3,enum=model.AirPavilion_Type" json:"pavilionType,omitempty"` //风亭子类型 } func (x *AirPavilion) Reset() { *x = AirPavilion{} if protoimpl.UnsafeEnabled { mi := &file_model_proto_msgTypes[47] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *AirPavilion) String() string { return protoimpl.X.MessageStringOf(x) } func (*AirPavilion) ProtoMessage() {} func (x *AirPavilion) ProtoReflect() protoreflect.Message { mi := &file_model_proto_msgTypes[47] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use AirPavilion.ProtoReflect.Descriptor instead. func (*AirPavilion) Descriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{47} } func (x *AirPavilion) GetId() string { if x != nil { return x.Id } return "" } func (x *AirPavilion) GetCode() string { if x != nil { return x.Code } return "" } func (x *AirPavilion) GetPavilionType() AirPavilion_Type { if x != nil { return x.PavilionType } return AirPavilion_ExhaustPavilion } // 阀门(电动调节阀、电动风阀) type Valve 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"` ValveType Valve_Type `protobuf:"varint,3,opt,name=valveType,proto3,enum=model.Valve_Type" json:"valveType,omitempty"` //阀门子类型 } func (x *Valve) Reset() { *x = Valve{} if protoimpl.UnsafeEnabled { mi := &file_model_proto_msgTypes[48] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Valve) String() string { return protoimpl.X.MessageStringOf(x) } func (*Valve) ProtoMessage() {} func (x *Valve) ProtoReflect() protoreflect.Message { mi := &file_model_proto_msgTypes[48] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use Valve.ProtoReflect.Descriptor instead. func (*Valve) Descriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{48} } func (x *Valve) GetId() string { if x != nil { return x.Id } return "" } func (x *Valve) GetCode() string { if x != nil { return x.Code } return "" } func (x *Valve) GetValveType() Valve_Type { if x != nil { return x.ValveType } return Valve_ElectricControlValve } // 混合室静压箱(气体) // 有四个端口,ABC三个端口为输入口,D端口为输出口 type GasMixingChamber 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 *GasMixingChamber) Reset() { *x = GasMixingChamber{} if protoimpl.UnsafeEnabled { mi := &file_model_proto_msgTypes[49] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *GasMixingChamber) String() string { return protoimpl.X.MessageStringOf(x) } func (*GasMixingChamber) ProtoMessage() {} func (x *GasMixingChamber) ProtoReflect() protoreflect.Message { mi := &file_model_proto_msgTypes[49] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use GasMixingChamber.ProtoReflect.Descriptor instead. func (*GasMixingChamber) Descriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{49} } func (x *GasMixingChamber) GetId() string { if x != nil { return x.Id } return "" } func (x *GasMixingChamber) GetCode() string { if x != nil { return x.Code } return "" } // 组合式空调 // 有四个端口,新风输入端口A,工作风输出端口B; // 端口C输出风再通过端口D输入,通过C->D实现对风再处理。 type CombinationAirConditioner 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 *CombinationAirConditioner) Reset() { *x = CombinationAirConditioner{} if protoimpl.UnsafeEnabled { mi := &file_model_proto_msgTypes[50] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *CombinationAirConditioner) String() string { return protoimpl.X.MessageStringOf(x) } func (*CombinationAirConditioner) ProtoMessage() {} func (x *CombinationAirConditioner) ProtoReflect() protoreflect.Message { mi := &file_model_proto_msgTypes[50] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use CombinationAirConditioner.ProtoReflect.Descriptor instead. func (*CombinationAirConditioner) Descriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{50} } func (x *CombinationAirConditioner) GetId() string { if x != nil { return x.Id } return "" } func (x *CombinationAirConditioner) GetCode() string { if x != nil { return x.Code } return "" } // 净化装置(对组合式空调B端口输出的工作风进行净化) // 有两个端口,端口A输入,端口B输出 type AirPurificationDevice 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 *AirPurificationDevice) Reset() { *x = AirPurificationDevice{} if protoimpl.UnsafeEnabled { mi := &file_model_proto_msgTypes[51] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *AirPurificationDevice) String() string { return protoimpl.X.MessageStringOf(x) } func (*AirPurificationDevice) ProtoMessage() {} func (x *AirPurificationDevice) ProtoReflect() protoreflect.Message { mi := &file_model_proto_msgTypes[51] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use AirPurificationDevice.ProtoReflect.Descriptor instead. func (*AirPurificationDevice) Descriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{51} } func (x *AirPurificationDevice) GetId() string { if x != nil { return x.Id } return "" } func (x *AirPurificationDevice) GetCode() string { if x != nil { return x.Code } return "" } // 空气幕 type AirCurtain 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 *AirCurtain) Reset() { *x = AirCurtain{} if protoimpl.UnsafeEnabled { mi := &file_model_proto_msgTypes[52] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *AirCurtain) String() string { return protoimpl.X.MessageStringOf(x) } func (*AirCurtain) ProtoMessage() {} func (x *AirCurtain) ProtoReflect() protoreflect.Message { mi := &file_model_proto_msgTypes[52] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use AirCurtain.ProtoReflect.Descriptor instead. func (*AirCurtain) Descriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{52} } func (x *AirCurtain) GetId() string { if x != nil { return x.Id } return "" } func (x *AirCurtain) GetCode() string { if x != nil { return x.Code } return "" } // 风机 type Fan 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"` FanType Fan_Type `protobuf:"varint,3,opt,name=fanType,proto3,enum=model.Fan_Type" json:"fanType,omitempty"` //风机子类型 } func (x *Fan) Reset() { *x = Fan{} if protoimpl.UnsafeEnabled { mi := &file_model_proto_msgTypes[53] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Fan) String() string { return protoimpl.X.MessageStringOf(x) } func (*Fan) ProtoMessage() {} func (x *Fan) ProtoReflect() protoreflect.Message { mi := &file_model_proto_msgTypes[53] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use Fan.ProtoReflect.Descriptor instead. func (*Fan) Descriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{53} } func (x *Fan) GetId() string { if x != nil { return x.Id } return "" } func (x *Fan) GetCode() string { if x != nil { return x.Code } return "" } func (x *Fan) GetFanType() Fan_Type { if x != nil { return x.FanType } return Fan_CommonFan } // 气体环境(正常空气+有害烟雾) // 有多个输入口,统一为端口A,用来为环境补充新鲜空气; // 有多个输出口,统一为端口B,用户将环境的混浊气体排除; // 排出气体动力源为该环境。 type GasEnvironment 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 *GasEnvironment) Reset() { *x = GasEnvironment{} if protoimpl.UnsafeEnabled { mi := &file_model_proto_msgTypes[54] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *GasEnvironment) String() string { return protoimpl.X.MessageStringOf(x) } func (*GasEnvironment) ProtoMessage() {} func (x *GasEnvironment) ProtoReflect() protoreflect.Message { mi := &file_model_proto_msgTypes[54] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use GasEnvironment.ProtoReflect.Descriptor instead. func (*GasEnvironment) Descriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{54} } func (x *GasEnvironment) GetId() string { if x != nil { return x.Id } return "" } func (x *GasEnvironment) GetCode() string { if x != nil { return x.Code } return "" } // 车库门 type Ckm struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` ElectronicComponentGroups []*ElectronicComponentGroup `protobuf:"bytes,2,rep,name=electronicComponentGroups,proto3" json:"electronicComponentGroups,omitempty"` } func (x *Ckm) Reset() { *x = Ckm{} if protoimpl.UnsafeEnabled { mi := &file_model_proto_msgTypes[55] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Ckm) String() string { return protoimpl.X.MessageStringOf(x) } func (*Ckm) ProtoMessage() {} func (x *Ckm) ProtoReflect() protoreflect.Message { mi := &file_model_proto_msgTypes[55] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use Ckm.ProtoReflect.Descriptor instead. func (*Ckm) Descriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{55} } func (x *Ckm) GetId() string { if x != nil { return x.Id } return "" } func (x *Ckm) GetElectronicComponentGroups() []*ElectronicComponentGroup { if x != nil { return x.ElectronicComponentGroups } return nil } // 洗车机 type Xcj struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` ElectronicComponentGroups []*ElectronicComponentGroup `protobuf:"bytes,2,rep,name=electronicComponentGroups,proto3" json:"electronicComponentGroups,omitempty"` NumSegments uint32 `protobuf:"varint,3,opt,name=numSegments,proto3" json:"numSegments,omitempty"` //洗车机段数 } func (x *Xcj) Reset() { *x = Xcj{} if protoimpl.UnsafeEnabled { mi := &file_model_proto_msgTypes[56] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Xcj) String() string { return protoimpl.X.MessageStringOf(x) } func (*Xcj) ProtoMessage() {} func (x *Xcj) ProtoReflect() protoreflect.Message { mi := &file_model_proto_msgTypes[56] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use Xcj.ProtoReflect.Descriptor instead. func (*Xcj) Descriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{56} } func (x *Xcj) GetId() string { if x != nil { return x.Id } return "" } func (x *Xcj) GetElectronicComponentGroups() []*ElectronicComponentGroup { if x != nil { return x.ElectronicComponentGroups } return nil } func (x *Xcj) GetNumSegments() uint32 { if x != nil { return x.NumSegments } return 0 } type Route_TurnoutPosition struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // 道岔ID Normal bool `protobuf:"varint,2,opt,name=normal,proto3" json:"normal,omitempty"` // 道岔定位 } func (x *Route_TurnoutPosition) Reset() { *x = Route_TurnoutPosition{} if protoimpl.UnsafeEnabled { mi := &file_model_proto_msgTypes[57] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Route_TurnoutPosition) String() string { return protoimpl.X.MessageStringOf(x) } func (*Route_TurnoutPosition) ProtoMessage() {} func (x *Route_TurnoutPosition) ProtoReflect() protoreflect.Message { mi := &file_model_proto_msgTypes[57] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use Route_TurnoutPosition.ProtoReflect.Descriptor instead. func (*Route_TurnoutPosition) Descriptor() ([]byte, []int) { return file_model_proto_rawDescGZIP(), []int{33, 0} } func (x *Route_TurnoutPosition) GetId() string { if x != nil { return x.Id } return "" } func (x *Route_TurnoutPosition) GetNormal() bool { if x != nil { return x.Normal } return false } 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, 0xe9, 0x13, 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, 0x24, 0x0a, 0x06, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x18, 0x17, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x06, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x04, 0x63, 0x6b, 0x6d, 0x73, 0x18, 0x18, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x43, 0x6b, 0x6d, 0x52, 0x04, 0x63, 0x6b, 0x6d, 0x73, 0x12, 0x1e, 0x0a, 0x04, 0x78, 0x63, 0x6a, 0x73, 0x18, 0x19, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x58, 0x63, 0x6a, 0x52, 0x04, 0x78, 0x63, 0x6a, 0x73, 0x12, 0x27, 0x0a, 0x07, 0x63, 0x6b, 0x6d, 0x50, 0x73, 0x6c, 0x73, 0x18, 0x1a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x43, 0x6b, 0x6d, 0x50, 0x73, 0x6c, 0x52, 0x07, 0x63, 0x6b, 0x6d, 0x50, 0x73, 0x6c, 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, 0x12, 0x40, 0x0a, 0x0f, 0x65, 0x61, 0x72, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0xb6, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x45, 0x61, 0x72, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x52, 0x0f, 0x65, 0x61, 0x72, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x3f, 0x0a, 0x0f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x65, 0x73, 0x18, 0xb7, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x52, 0x0f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x65, 0x73, 0x12, 0x37, 0x0a, 0x0c, 0x77, 0x69, 0x72, 0x65, 0x43, 0x61, 0x62, 0x69, 0x6e, 0x65, 0x74, 0x73, 0x18, 0xb8, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x57, 0x69, 0x72, 0x65, 0x43, 0x61, 0x62, 0x69, 0x6e, 0x65, 0x74, 0x52, 0x0c, 0x77, 0x69, 0x72, 0x65, 0x43, 0x61, 0x62, 0x69, 0x6e, 0x65, 0x74, 0x73, 0x12, 0x37, 0x0a, 0x0c, 0x61, 0x69, 0x72, 0x50, 0x61, 0x76, 0x69, 0x6c, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xb9, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x41, 0x69, 0x72, 0x50, 0x61, 0x76, 0x69, 0x6c, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x61, 0x69, 0x72, 0x50, 0x61, 0x76, 0x69, 0x6c, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x25, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x76, 0x65, 0x73, 0x18, 0xba, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x56, 0x61, 0x6c, 0x76, 0x65, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x76, 0x65, 0x73, 0x12, 0x46, 0x0a, 0x11, 0x67, 0x61, 0x73, 0x4d, 0x69, 0x78, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x61, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0xbb, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x47, 0x61, 0x73, 0x4d, 0x69, 0x78, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x61, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x11, 0x67, 0x61, 0x73, 0x4d, 0x69, 0x78, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x61, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x61, 0x0a, 0x1a, 0x63, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x69, 0x72, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x73, 0x18, 0xbc, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x69, 0x72, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x52, 0x1a, 0x63, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x69, 0x72, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x73, 0x12, 0x55, 0x0a, 0x16, 0x61, 0x69, 0x72, 0x50, 0x75, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0xbd, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x41, 0x69, 0x72, 0x50, 0x75, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x52, 0x16, 0x61, 0x69, 0x72, 0x50, 0x75, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x34, 0x0a, 0x0b, 0x61, 0x69, 0x72, 0x43, 0x75, 0x72, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x18, 0xbe, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x41, 0x69, 0x72, 0x43, 0x75, 0x72, 0x74, 0x61, 0x69, 0x6e, 0x52, 0x0b, 0x61, 0x69, 0x72, 0x43, 0x75, 0x72, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x12, 0x1f, 0x0a, 0x04, 0x66, 0x61, 0x6e, 0x73, 0x18, 0xbf, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x46, 0x61, 0x6e, 0x52, 0x04, 0x66, 0x61, 0x6e, 0x73, 0x12, 0x40, 0x0a, 0x0f, 0x67, 0x61, 0x73, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0xc0, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x47, 0x61, 0x73, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0f, 0x67, 0x61, 0x73, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 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, 0xc3, 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, 0x12, 0x2c, 0x0a, 0x11, 0x66, 0x69, 0x78, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x54, 0x65, 0x6c, 0x65, 0x67, 0x72, 0x61, 0x6d, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x11, 0x66, 0x69, 0x78, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x54, 0x65, 0x6c, 0x65, 0x67, 0x72, 0x61, 0x6d, 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, 0xe9, 0x03, 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, 0x16, 0x0a, 0x06, 0x70, 0x63, 0x62, 0x61, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x63, 0x62, 0x61, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x63, 0x62, 0x70, 0x6c, 0x61, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x63, 0x62, 0x70, 0x6c, 0x61, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x63, 0x62, 0x6a, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x63, 0x62, 0x6a, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x6f, 0x62, 0x61, 0x49, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x6f, 0x62, 0x61, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x62, 0x70, 0x6c, 0x61, 0x49, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6f, 0x62, 0x70, 0x6c, 0x61, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x6f, 0x62, 0x6a, 0x49, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x6f, 0x62, 0x6a, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x61, 0x62, 0x61, 0x49, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x61, 0x62, 0x61, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x62, 0x70, 0x6c, 0x61, 0x49, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x62, 0x70, 0x6c, 0x61, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x61, 0x62, 0x6a, 0x49, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x61, 0x62, 0x6a, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x77, 0x72, 0x7a, 0x66, 0x61, 0x49, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x77, 0x72, 0x7a, 0x66, 0x61, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x77, 0x72, 0x7a, 0x66, 0x70, 0x6c, 0x61, 0x49, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x77, 0x72, 0x7a, 0x66, 0x70, 0x6c, 0x61, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x77, 0x72, 0x7a, 0x66, 0x6a, 0x49, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x77, 0x72, 0x7a, 0x66, 0x6a, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x71, 0x6b, 0x71, 0x72, 0x61, 0x49, 0x64, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x71, 0x6b, 0x71, 0x72, 0x61, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x71, 0x6b, 0x71, 0x72, 0x70, 0x6c, 0x61, 0x49, 0x64, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x71, 0x6b, 0x71, 0x72, 0x70, 0x6c, 0x61, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x71, 0x6b, 0x71, 0x72, 0x6a, 0x49, 0x64, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x71, 0x6b, 0x71, 0x72, 0x6a, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x70, 0x6c, 0x61, 0x49, 0x64, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6d, 0x70, 0x6c, 0x61, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x6a, 0x78, 0x74, 0x63, 0x70, 0x6c, 0x61, 0x49, 0x64, 0x18, 0x13, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6a, 0x78, 0x74, 0x63, 0x70, 0x6c, 0x61, 0x49, 0x64, 0x22, 0x8a, 0x01, 0x0a, 0x06, 0x43, 0x6b, 0x6d, 0x50, 0x73, 0x6c, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6b, 0x6d, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x63, 0x6b, 0x6d, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x6d, 0x61, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x6d, 0x61, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x6b, 0x6d, 0x61, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6b, 0x6d, 0x61, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x70, 0x6c, 0x61, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6d, 0x70, 0x6c, 0x61, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x6d, 0x73, 0x61, 0x49, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6d, 0x6d, 0x73, 0x61, 0x49, 0x64, 0x22, 0xef, 0x01, 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, 0x12, 0x3f, 0x0a, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x32, 0x0a, 0x11, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x10, 0x00, 0x12, 0x06, 0x0a, 0x02, 0x55, 0x70, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x44, 0x6f, 0x77, 0x6e, 0x10, 0x02, 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, 0xbc, 0x03, 0x0a, 0x05, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x74, 0x61, 0x72, 0x74, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x74, 0x61, 0x72, 0x74, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x73, 0x12, 0x30, 0x0a, 0x13, 0x63, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x49, 0x64, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x13, 0x63, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x49, 0x64, 0x73, 0x12, 0x34, 0x0a, 0x09, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x09, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x38, 0x0a, 0x08, 0x74, 0x75, 0x72, 0x6e, 0x6f, 0x75, 0x74, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x54, 0x75, 0x72, 0x6e, 0x6f, 0x75, 0x74, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x74, 0x75, 0x72, 0x6e, 0x6f, 0x75, 0x74, 0x73, 0x1a, 0x39, 0x0a, 0x0f, 0x54, 0x75, 0x72, 0x6e, 0x6f, 0x75, 0x74, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x22, 0x54, 0x0a, 0x09, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0d, 0x0a, 0x09, 0x52, 0x45, 0x43, 0x45, 0x49, 0x56, 0x49, 0x4e, 0x47, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x45, 0x50, 0x41, 0x52, 0x54, 0x55, 0x52, 0x45, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x48, 0x55, 0x4e, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x50, 0x41, 0x53, 0x53, 0x10, 0x03, 0x12, 0x11, 0x0a, 0x0d, 0x4c, 0x4f, 0x4e, 0x47, 0x5f, 0x53, 0x48, 0x55, 0x4e, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x04, 0x22, 0x7c, 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, 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, 0x6b, 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, 0x73, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x02, 0x73, 0x78, 0x12, 0x0e, 0x0a, 0x02, 0x61, 0x63, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x02, 0x61, 0x63, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x6f, 0x6c, 0x74, 0x61, 0x67, 0x65, 0x18, 0x05, 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, 0x22, 0x34, 0x0a, 0x0e, 0x45, 0x61, 0x72, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x76, 0x69, 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, 0x22, 0x33, 0x0a, 0x0d, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 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, 0x31, 0x0a, 0x0b, 0x57, 0x69, 0x72, 0x65, 0x43, 0x61, 0x62, 0x69, 0x6e, 0x65, 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, 0x22, 0xa2, 0x01, 0x0a, 0x0b, 0x41, 0x69, 0x72, 0x50, 0x61, 0x76, 0x69, 0x6c, 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, 0x3b, 0x0a, 0x0c, 0x70, 0x61, 0x76, 0x69, 0x6c, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x41, 0x69, 0x72, 0x50, 0x61, 0x76, 0x69, 0x6c, 0x69, 0x6f, 0x6e, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0c, 0x70, 0x61, 0x76, 0x69, 0x6c, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x22, 0x32, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x13, 0x0a, 0x0f, 0x45, 0x78, 0x68, 0x61, 0x75, 0x73, 0x74, 0x50, 0x61, 0x76, 0x69, 0x6c, 0x69, 0x6f, 0x6e, 0x10, 0x00, 0x12, 0x15, 0x0a, 0x11, 0x41, 0x69, 0x72, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x50, 0x61, 0x76, 0x69, 0x6c, 0x69, 0x6f, 0x6e, 0x10, 0x01, 0x22, 0xc9, 0x01, 0x0a, 0x05, 0x56, 0x61, 0x6c, 0x76, 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, 0x2f, 0x0a, 0x09, 0x76, 0x61, 0x6c, 0x76, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x11, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x56, 0x61, 0x6c, 0x76, 0x65, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x09, 0x76, 0x61, 0x6c, 0x76, 0x65, 0x54, 0x79, 0x70, 0x65, 0x22, 0x6b, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x14, 0x45, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x76, 0x65, 0x10, 0x00, 0x12, 0x14, 0x0a, 0x10, 0x45, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x69, 0x63, 0x41, 0x69, 0x72, 0x56, 0x61, 0x6c, 0x76, 0x65, 0x10, 0x01, 0x12, 0x17, 0x0a, 0x13, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x69, 0x72, 0x56, 0x61, 0x6c, 0x76, 0x65, 0x10, 0x02, 0x12, 0x1a, 0x0a, 0x16, 0x45, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x69, 0x63, 0x42, 0x75, 0x74, 0x74, 0x65, 0x72, 0x66, 0x6c, 0x79, 0x56, 0x61, 0x6c, 0x76, 0x65, 0x10, 0x03, 0x22, 0x36, 0x0a, 0x10, 0x47, 0x61, 0x73, 0x4d, 0x69, 0x78, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x61, 0x6d, 0x62, 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, 0x3f, 0x0a, 0x19, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x69, 0x72, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 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, 0x3b, 0x0a, 0x15, 0x41, 0x69, 0x72, 0x50, 0x75, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x76, 0x69, 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, 0x22, 0x30, 0x0a, 0x0a, 0x41, 0x69, 0x72, 0x43, 0x75, 0x72, 0x74, 0x61, 0x69, 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, 0x22, 0xa3, 0x01, 0x0a, 0x03, 0x46, 0x61, 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, 0x29, 0x0a, 0x07, 0x66, 0x61, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x46, 0x61, 0x6e, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x07, 0x66, 0x61, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x22, 0x4d, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x46, 0x61, 0x6e, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x46, 0x63, 0x42, 0x79, 0x70, 0x61, 0x73, 0x73, 0x46, 0x61, 0x6e, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x53, 0x6f, 0x66, 0x74, 0x53, 0x74, 0x61, 0x72, 0x74, 0x46, 0x61, 0x6e, 0x10, 0x02, 0x12, 0x13, 0x0a, 0x0f, 0x48, 0x69, 0x67, 0x68, 0x4c, 0x6f, 0x77, 0x53, 0x70, 0x65, 0x65, 0x64, 0x46, 0x61, 0x6e, 0x10, 0x03, 0x22, 0x34, 0x0a, 0x0e, 0x47, 0x61, 0x73, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 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, 0x22, 0x74, 0x0a, 0x03, 0x43, 0x6b, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 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, 0x02, 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, 0x96, 0x01, 0x0a, 0x03, 0x58, 0x63, 0x6a, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 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, 0x02, 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, 0x20, 0x0a, 0x0b, 0x6e, 0x75, 0x6d, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x6e, 0x75, 0x6d, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2a, 0xc0, 0x16, 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, 0x14, 0x0a, 0x10, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x10, 0x17, 0x12, 0x12, 0x0a, 0x0e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x43, 0x6b, 0x6d, 0x10, 0x18, 0x12, 0x12, 0x0a, 0x0e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x58, 0x63, 0x6a, 0x10, 0x19, 0x12, 0x15, 0x0a, 0x11, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x43, 0x6b, 0x6d, 0x50, 0x73, 0x6c, 0x10, 0x1a, 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, 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, 0x12, 0x1e, 0x0a, 0x19, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x45, 0x61, 0x72, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x10, 0x82, 0x03, 0x12, 0x1b, 0x0a, 0x16, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x41, 0x69, 0x72, 0x50, 0x61, 0x76, 0x69, 0x6c, 0x69, 0x6f, 0x6e, 0x10, 0x83, 0x03, 0x12, 0x15, 0x0a, 0x10, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x56, 0x61, 0x6c, 0x76, 0x65, 0x10, 0x84, 0x03, 0x12, 0x20, 0x0a, 0x1b, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x47, 0x61, 0x73, 0x4d, 0x69, 0x78, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x61, 0x6d, 0x62, 0x65, 0x72, 0x10, 0x85, 0x03, 0x12, 0x29, 0x0a, 0x24, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x69, 0x72, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x10, 0x86, 0x03, 0x12, 0x25, 0x0a, 0x20, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x41, 0x69, 0x72, 0x50, 0x75, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x10, 0x87, 0x03, 0x12, 0x1b, 0x0a, 0x16, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x10, 0x88, 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, 15) var file_model_proto_msgTypes = make([]protoimpl.MessageInfo, 58) 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 (Platform_PlatformDirection)(0), // 10: model.Platform.PlatformDirection (Route_RouteType)(0), // 11: model.Route.RouteType (AirPavilion_Type)(0), // 12: model.AirPavilion.Type (Valve_Type)(0), // 13: model.Valve.Type (Fan_Type)(0), // 14: model.Fan.Type (*Repository)(nil), // 15: model.Repository (*SignalLayout)(nil), // 16: model.SignalLayout (*PhysicalSection)(nil), // 17: model.PhysicalSection (*CheckPoint)(nil), // 18: model.CheckPoint (*Turnout)(nil), // 19: model.Turnout (*Signal)(nil), // 20: model.Signal (*Psd)(nil), // 21: model.Psd (*Transponder)(nil), // 22: model.Transponder (*Slope)(nil), // 23: model.Slope (*SectionalCurvature)(nil), // 24: model.SectionalCurvature (*DevicePort)(nil), // 25: model.DevicePort (*Kilometer)(nil), // 26: model.Kilometer (*KilometerConvert)(nil), // 27: model.KilometerConvert (*Relay)(nil), // 28: model.Relay (*PhaseFailureProtector)(nil), // 29: model.PhaseFailureProtector (*ElectronicComponentGroup)(nil), // 30: model.ElectronicComponentGroup (*Button)(nil), // 31: model.Button (*Light)(nil), // 32: model.Light (*Alarm)(nil), // 33: model.Alarm (*Station)(nil), // 34: model.Station (*DeviceEcc)(nil), // 35: model.DeviceEcc (*ElectronicGroup)(nil), // 36: model.ElectronicGroup (*ElectronicComponent)(nil), // 37: model.ElectronicComponent (*Mkx)(nil), // 38: model.Mkx (*CkmPsl)(nil), // 39: model.CkmPsl (*Platform)(nil), // 40: model.Platform (*Key)(nil), // 41: model.Key (*CentralizedStationRef)(nil), // 42: model.CentralizedStationRef (*CjData)(nil), // 43: model.CjData (*CjDataItem)(nil), // 44: model.CjDataItem (*QdData)(nil), // 45: model.QdData (*AsdGroup)(nil), // 46: model.AsdGroup (*CiSectionCodePoint)(nil), // 47: model.CiSectionCodePoint (*Route)(nil), // 48: model.Route (*Pipe)(nil), // 49: model.Pipe (*PipeFitting)(nil), // 50: model.PipeFitting (*CircuitBreaker)(nil), // 51: model.CircuitBreaker (*ThreePositionSwitch)(nil), // 52: model.ThreePositionSwitch (*HandcartSwitch)(nil), // 53: model.HandcartSwitch (*Rectifier)(nil), // 54: model.Rectifier (*Disconnector)(nil), // 55: model.Disconnector (*VoltageTransformer)(nil), // 56: model.VoltageTransformer (*PowerSource)(nil), // 57: model.PowerSource (*LightningArrester)(nil), // 58: model.LightningArrester (*EarthingDevice)(nil), // 59: model.EarthingDevice (*NetworkSwitch)(nil), // 60: model.NetworkSwitch (*WireCabinet)(nil), // 61: model.WireCabinet (*AirPavilion)(nil), // 62: model.AirPavilion (*Valve)(nil), // 63: model.Valve (*GasMixingChamber)(nil), // 64: model.GasMixingChamber (*CombinationAirConditioner)(nil), // 65: model.CombinationAirConditioner (*AirPurificationDevice)(nil), // 66: model.AirPurificationDevice (*AirCurtain)(nil), // 67: model.AirCurtain (*Fan)(nil), // 68: model.Fan (*GasEnvironment)(nil), // 69: model.GasEnvironment (*Ckm)(nil), // 70: model.Ckm (*Xcj)(nil), // 71: model.Xcj (*Route_TurnoutPosition)(nil), // 72: model.Route.TurnoutPosition } var file_model_proto_depIdxs = []int32{ 17, // 0: model.Repository.physicalSections:type_name -> model.PhysicalSection 18, // 1: model.Repository.checkPoints:type_name -> model.CheckPoint 19, // 2: model.Repository.turnouts:type_name -> model.Turnout 20, // 3: model.Repository.signals:type_name -> model.Signal 22, // 4: model.Repository.transponders:type_name -> model.Transponder 23, // 5: model.Repository.slopes:type_name -> model.Slope 24, // 6: model.Repository.sectionalCurvatures:type_name -> model.SectionalCurvature 27, // 7: model.Repository.kilometerConverts:type_name -> model.KilometerConvert 28, // 8: model.Repository.relays:type_name -> model.Relay 29, // 9: model.Repository.phaseFailureProtectors:type_name -> model.PhaseFailureProtector 31, // 10: model.Repository.buttons:type_name -> model.Button 21, // 11: model.Repository.psds:type_name -> model.Psd 32, // 12: model.Repository.lights:type_name -> model.Light 33, // 13: model.Repository.alarms:type_name -> model.Alarm 34, // 14: model.Repository.stations:type_name -> model.Station 38, // 15: model.Repository.mkxs:type_name -> model.Mkx 40, // 16: model.Repository.platforms:type_name -> model.Platform 41, // 17: model.Repository.Keys:type_name -> model.Key 42, // 18: model.Repository.CentralizedStationRefs:type_name -> model.CentralizedStationRef 48, // 19: model.Repository.routes:type_name -> model.Route 70, // 20: model.Repository.ckms:type_name -> model.Ckm 71, // 21: model.Repository.xcjs:type_name -> model.Xcj 39, // 22: model.Repository.ckmPsls:type_name -> model.CkmPsl 49, // 23: model.Repository.pipes:type_name -> model.Pipe 50, // 24: model.Repository.pipeFittings:type_name -> model.PipeFitting 51, // 25: model.Repository.circuitBreakers:type_name -> model.CircuitBreaker 52, // 26: model.Repository.threePositionSwitches:type_name -> model.ThreePositionSwitch 53, // 27: model.Repository.handcartSwitches:type_name -> model.HandcartSwitch 54, // 28: model.Repository.rectifiers:type_name -> model.Rectifier 55, // 29: model.Repository.disconnectors:type_name -> model.Disconnector 56, // 30: model.Repository.voltageTransformers:type_name -> model.VoltageTransformer 57, // 31: model.Repository.powerSources:type_name -> model.PowerSource 58, // 32: model.Repository.lightningArresters:type_name -> model.LightningArrester 59, // 33: model.Repository.earthingDevices:type_name -> model.EarthingDevice 60, // 34: model.Repository.networkSwitches:type_name -> model.NetworkSwitch 61, // 35: model.Repository.wireCabinets:type_name -> model.WireCabinet 62, // 36: model.Repository.airPavilions:type_name -> model.AirPavilion 63, // 37: model.Repository.valves:type_name -> model.Valve 64, // 38: model.Repository.gasMixingChambers:type_name -> model.GasMixingChamber 65, // 39: model.Repository.combinationAirConditioners:type_name -> model.CombinationAirConditioner 66, // 40: model.Repository.airPurificationDevices:type_name -> model.AirPurificationDevice 67, // 41: model.Repository.airCurtains:type_name -> model.AirCurtain 68, // 42: model.Repository.fans:type_name -> model.Fan 69, // 43: model.Repository.gasEnvironments:type_name -> model.GasEnvironment 17, // 44: model.SignalLayout.physicalSections:type_name -> model.PhysicalSection 18, // 45: model.SignalLayout.checkPoints:type_name -> model.CheckPoint 19, // 46: model.SignalLayout.turnouts:type_name -> model.Turnout 20, // 47: model.SignalLayout.signals:type_name -> model.Signal 22, // 48: model.SignalLayout.transponders:type_name -> model.Transponder 23, // 49: model.SignalLayout.slopes:type_name -> model.Slope 24, // 50: model.SignalLayout.sectionalCurvatures:type_name -> model.SectionalCurvature 27, // 51: model.SignalLayout.kilometerConverts:type_name -> model.KilometerConvert 25, // 52: model.PhysicalSection.aDevicePort:type_name -> model.DevicePort 25, // 53: model.PhysicalSection.bDevicePort:type_name -> model.DevicePort 26, // 54: model.CheckPoint.km:type_name -> model.Kilometer 3, // 55: model.CheckPoint.type:type_name -> model.CheckPointType 25, // 56: model.CheckPoint.devicePorts:type_name -> model.DevicePort 26, // 57: model.Turnout.km:type_name -> model.Kilometer 25, // 58: model.Turnout.aDevicePort:type_name -> model.DevicePort 25, // 59: model.Turnout.bDevicePort:type_name -> model.DevicePort 25, // 60: model.Turnout.cDevicePort:type_name -> model.DevicePort 4, // 61: model.Turnout.switchMachineType:type_name -> model.Turnout.SwitchMachineType 30, // 62: model.Turnout.electronicComponentGroups:type_name -> model.ElectronicComponentGroup 26, // 63: model.Signal.km:type_name -> model.Kilometer 25, // 64: model.Signal.turnoutPort:type_name -> model.DevicePort 30, // 65: model.Signal.electronicComponentGroups:type_name -> model.ElectronicComponentGroup 5, // 66: model.Signal.model:type_name -> model.Signal.Model 46, // 67: model.Psd.asdGroups:type_name -> model.AsdGroup 30, // 68: model.Psd.electronicComponentGroups:type_name -> model.ElectronicComponentGroup 26, // 69: model.Transponder.km:type_name -> model.Kilometer 25, // 70: model.Transponder.turnoutPort:type_name -> model.DevicePort 6, // 71: model.Transponder.type:type_name -> model.Transponder.Type 26, // 72: model.Slope.kms:type_name -> model.Kilometer 26, // 73: model.SectionalCurvature.kms:type_name -> model.Kilometer 0, // 74: model.DevicePort.deviceType:type_name -> model.DeviceType 1, // 75: model.DevicePort.port:type_name -> model.Port 2, // 76: model.Kilometer.direction:type_name -> model.Direction 26, // 77: model.KilometerConvert.kmA:type_name -> model.Kilometer 26, // 78: model.KilometerConvert.kmB:type_name -> model.Kilometer 7, // 79: model.Relay.model:type_name -> model.Relay.Model 8, // 80: model.Button.buttonType:type_name -> model.Button.ButtonType 9, // 81: model.Light.aspect:type_name -> model.Light.LightAspect 36, // 82: model.Station.electronicGroup:type_name -> model.ElectronicGroup 35, // 83: model.Station.deccs:type_name -> model.DeviceEcc 0, // 84: model.DeviceEcc.deviceType:type_name -> model.DeviceType 30, // 85: model.DeviceEcc.egs:type_name -> model.ElectronicComponentGroup 37, // 86: model.ElectronicGroup.components:type_name -> model.ElectronicComponent 0, // 87: model.ElectronicComponent.deviceType:type_name -> model.DeviceType 10, // 88: model.Platform.direction:type_name -> model.Platform.PlatformDirection 43, // 89: model.CentralizedStationRef.cjList:type_name -> model.CjData 45, // 90: model.CentralizedStationRef.qdList:type_name -> model.QdData 47, // 91: model.CentralizedStationRef.sectionCodePoints:type_name -> model.CiSectionCodePoint 44, // 92: model.CjData.refRelays:type_name -> model.CjDataItem 11, // 93: model.Route.routeType:type_name -> model.Route.RouteType 72, // 94: model.Route.turnouts:type_name -> model.Route.TurnoutPosition 25, // 95: model.Pipe.portA:type_name -> model.DevicePort 25, // 96: model.Pipe.portB:type_name -> model.DevicePort 12, // 97: model.AirPavilion.pavilionType:type_name -> model.AirPavilion.Type 13, // 98: model.Valve.valveType:type_name -> model.Valve.Type 14, // 99: model.Fan.fanType:type_name -> model.Fan.Type 30, // 100: model.Ckm.electronicComponentGroups:type_name -> model.ElectronicComponentGroup 30, // 101: model.Xcj.electronicComponentGroups:type_name -> model.ElectronicComponentGroup 102, // [102:102] is the sub-list for method output_type 102, // [102:102] is the sub-list for method input_type 102, // [102:102] is the sub-list for extension type_name 102, // [102:102] is the sub-list for extension extendee 0, // [0:102] 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.(*CkmPsl); 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.(*Platform); 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.(*Key); 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.(*CentralizedStationRef); 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.(*CjData); 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.(*CjDataItem); 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.(*QdData); 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.(*AsdGroup); 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.(*CiSectionCodePoint); 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.(*Route); 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.(*Pipe); 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.(*PipeFitting); 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.(*CircuitBreaker); 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.(*ThreePositionSwitch); 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.(*HandcartSwitch); 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.(*Rectifier); 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.(*Disconnector); 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.(*VoltageTransformer); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_model_proto_msgTypes[42].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[43].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 } } file_model_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*EarthingDevice); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_model_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*NetworkSwitch); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_model_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*WireCabinet); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_model_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*AirPavilion); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_model_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Valve); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_model_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GasMixingChamber); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_model_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CombinationAirConditioner); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_model_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*AirPurificationDevice); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_model_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*AirCurtain); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_model_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Fan); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_model_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GasEnvironment); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_model_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Ckm); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_model_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Xcj); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_model_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Route_TurnoutPosition); 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: 15, NumMessages: 58, 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 }