# Generated by the protocol buffer compiler.  DO NOT EDIT!
# sources: deviceapis/device/v1/deviceapis_device_capability_v1.proto, deviceapis/device/v1/deviceapis_device_code_v1.proto, deviceapis/device/v1/deviceapis_device_common_v1.proto, deviceapis/device/v1/deviceapis_device_concierge_v1.proto, deviceapis/device/v1/deviceapis_device_dtmf_v1.proto, deviceapis/device/v1/deviceapis_device_encryption_profile_v1.proto, deviceapis/device/v1/deviceapis_device_fr_v1.proto, deviceapis/device/v1/deviceapis_device_ftp_v1.proto, deviceapis/device/v1/deviceapis_device_gate_v1.proto, deviceapis/device/v1/deviceapis_device_ntp_v1.proto, deviceapis/device/v1/deviceapis_device_reader_v1.proto, deviceapis/device/v1/deviceapis_device_relay_v1.proto, deviceapis/device/v1/deviceapis_device_rfid_v1.proto, deviceapis/device/v1/deviceapis_device_room_v1.proto, deviceapis/device/v1/deviceapis_device_rtsp_v1.proto, deviceapis/device/v1/deviceapis_device_sac_v1.proto, deviceapis/device/v1/deviceapis_device_safe_emergency_file_v1.proto, deviceapis/device/v1/deviceapis_device_safe_emergency_v1.proto, deviceapis/device/v1/deviceapis_device_safe_osd_v1.proto, deviceapis/device/v1/deviceapis_device_sip_v1.proto, deviceapis/device/v1/deviceapis_device_sos_v1.proto, deviceapis/device/v1/deviceapis_device_syslog_v1.proto, deviceapis/device/v1/deviceapis_device_system_v1.proto, deviceapis/device/v1/deviceapis_device_ticker_v1.proto, deviceapis/device/v1/deviceapis_device_update_v1.proto, deviceapis/device/v1/deviceapis_device_user_v1.proto, deviceapis/device/v1/deviceapis_device_video_v1.proto
# plugin: python-betterproto
from dataclasses import dataclass
from typing import (
    TYPE_CHECKING,
    Dict,
    List,
    Optional,
)

import betterproto
import betterproto.lib.google.protobuf as betterproto_lib_google_protobuf
import grpclib
from betterproto.grpc.grpclib_server import ServiceBase


if TYPE_CHECKING:
    import grpclib.server
    from betterproto.grpc.grpclib_client import MetadataLike
    from grpclib.metadata import Deadline


class SafeCityOsdPlacementType(betterproto.Enum):
    """Тип размещения текста"""

    PLACEMENT_TYPE_UNKNOWN = 0
    """Значение не указано"""

    TOP_LEFT = 1
    """Сверху слева"""

    TOP_RIGHT = 2
    """Сверху справа"""

    BOTTOM_LEFT = 3
    """Снизу слева"""

    BOTTOM_RIGHT = 4
    """Снизу справа"""


class SafeCityOsdShowDatetimeType(betterproto.Enum):
    """Тип добавления формата даты"""

    SHOW_DATETIME_TYPE_UNKNOWN = 0
    """Значение не указано"""

    ABSENT = 1
    """Формат отсутствует"""

    DAY_TIME = 2
    """День и время yyyy-mm-dd HH:MM:SS"""

    TIME = 3
    """Время HH:MM:SS"""


class GetSipAccountStatusListResponseSipStatusStateType(betterproto.Enum):
    """Тип состояния Sip-аккаунта"""

    STATE_TYPE_UNKNOWN = 0
    """Значение не указано"""

    REGISTERING = 1
    """
    Клиент отправил REGISTER запрос, но ответ от сервера ещё не получен. Идёт
    попытка регистрации
    """

    REGISTERED = 2
    """
    Успешная регистрация. SIP-сервер подтвердил регистрацию, клиент готов
    принимать звонки
    """

    UNREGISTERED = 3
    """
    Клиент отключился или не регистрировался. Возможные причины: Клиент
    отправил UNREGISTER; Истек срок регистрации (expires)
    """

    REGISTRATION_FAILED = 4
    """
    Ошибка при попытке регистрации. Возможные причины: Неверный логин/пароль;
    SIP-сервер недоступен; Ошибка в конфигурации (порт, протокол, IP)
    """

    TIMEOUT = 5
    """
    Нет ответа от сервера в течение времени ожидания. Возможные причины:
    Проблемы с сетью; SIP-сервер не отвечает; Нет ответа от сервера в течение
    времени ожидания
    """

    DISABLED = 6
    """
    SIP клиент остановлен вручную или отключён по конфигурации. Не выполняется
    даже попытка регистрации
    """


class EmergencyScenarioPlayOrderType(betterproto.Enum):
    """Тип проигрывания. # Тип: byte"""

    PLAY_ORDER_TYPE_UNKNOWN = 0
    """Значение не указано"""

    HANDSET_ONLY = 1
    """Только на аналоговые трубки"""

    SPEAKER_ONLY = 2
    """Tолько на динамик домофона"""

    HANDSET_FIRST = 3
    """
    Сначала на аналоговые трубки проигрываем заданное количество тактов, затем
    на динамик домофона
    """

    SPEAKER_FIRST = 4
    """
    Сначала на динамик домофона проигрываем заданное количество тактов, затем
    на аналоговые трубки
    """

    HANDSET_AND_SPEAKER = 5
    """
    Одновременно на аналоговые трубки проигрываем заданное количество тактов,
    затем на динамик домофона
    """


class SyslogSettingsLogLevelType(betterproto.Enum):
    """Уровень логирования"""

    LOG_LEVEL_TYPE_UNKNOWN = 0
    """Значение не указано"""

    EMERGENCY = 1
    """Система не пригодна для использования"""

    ALERT = 2
    """Требуются немедленные меры"""

    CRIT = 3
    """Сообщение о критическом состоянии"""

    ERROR = 4
    """Сообщение об ошибочном состоянии"""

    WARN = 5
    """Предупреждение"""

    NOTE = 6
    """Сообщение о значительном нормальном событии"""

    INFO = 7
    """Информационное сообщение"""

    DEBUG = 8
    """Сообщение отладочного уровня"""


class SyslogSettingsProtocolType(betterproto.Enum):
    """Тип протокола"""

    PROTOCOL_TYPE_UNKNOWN = 0
    """Значение не указано"""

    UDP = 1
    """Протокол UDP"""

    TCP = 2
    """Протокол TCP"""


class EncryptionProfileType(betterproto.Enum):
    """Тип"""

    TYPE_UNKNOWN = 0
    """Значение не указано"""

    SL3 = 1
    """Тип SL3"""

    SL1 = 2
    """Тип SL1"""


class NtpTimeZoneType(betterproto.Enum):
    """Справочник таймзон"""

    TIME_ZONE_TYPE_UNKNOWN = 0
    """Значение не указано"""

    GMTM1100_MIDWAY = 1
    """(GMT-11:00) Midway"""

    GMTM1100_NIUE = 2
    """(GMT-11:00) Niue"""

    GMTM1000_ADAK = 3
    """(GMT-10:00) Adak"""

    GMTM1000_HONOLULU = 4
    """(GMT-10:00) Honolulu"""

    GMTM1000_JOHNSTON = 5
    """(GMT-10:00) Johnston"""

    GMTM1000_RAROTONGA = 6
    """(GMT-10:00) Rarotonga"""

    GMTM1000_TAHITI = 7
    """(GMT-10:00) Tahiti"""

    GMTM930_MARQUESAS = 8
    """(GMT-9:30) Marquesas"""

    GMTM900_ANCHORAGE = 9
    """(GMT-9:00) Anchorage"""

    GMTM900_JUNEAU = 10
    """(GMT-9:00) Juneau"""

    GMTM900_METLAKATLA = 11
    """(GMT-9:00) Metlakatla"""

    GMTM900_NOME = 12
    """(GMT-9:00) Nome"""

    GMTM900_SITKA = 13
    """(GMT-9:00) Sitka"""

    GMTM900_YAKUTAT = 14
    """(GMT-9:00) Yakutat"""

    GMTM900_GAMBIER = 15
    """(GMT-9:00) Gambier"""

    GMTM800_LOS_ANGELES = 16
    """(GMT-8:00) Los_Angeles"""

    GMTM800_SANTA_ISABEL = 17
    """(GMT-8:00) Santa_Isabel"""

    GMTM800_TIJUANA = 18
    """(GMT-8:00) Tijuana"""

    GMTM800_VANCOUVER = 19
    """(GMT-8:00) Vancouver"""

    GMTM800_PITCAIRN = 20
    """(GMT-8:00) Pitcairn"""

    GMTM700_BOISE = 21
    """(GMT-7:00) Boise"""

    GMTM700_CAMBRIDGE_BAY = 22
    """(GMT-7:00) Cambridge_Bay"""

    GMTM700_CHIHUAHUA = 23
    """(GMT-7:00) Chihuahua"""

    GMTM700_CRESTON = 24
    """(GMT-7:00) Creston"""

    GMTM700_DAWSON = 25
    """(GMT-7:00) Dawson"""

    GMTM700_DAWSON_CREEK = 26
    """(GMT-7:00) Dawson_Creek"""

    GMTM700_DENVER = 27
    """(GMT-7:00) Denver"""

    GMTM700_EDMONTON = 28
    """(GMT-7:00) Edmonton"""

    GMTM700_FORT_NELSON = 29
    """(GMT-7:00) Fort_Nelson"""

    GMTM700_HERMOSILLO = 30
    """(GMT-7:00) Hermosillo"""

    GMTM700_INUVIK = 31
    """(GMT-7:00) Inuvik"""

    GMTM700_MAZATLAN = 32
    """(GMT-7:00) Mazatlan"""

    GMTM700_OJINAGA = 33
    """(GMT-7:00) Ojinaga"""

    GMTM700_PHOENIX = 34
    """(GMT-7:00) Phoenix"""

    GMTM700_SHIPROCK = 35
    """(GMT-7:00) Shiprock"""

    GMTM700_WHITEHORSE = 36
    """(GMT-7:00) Whitehorse"""

    GMTM700_YELLOWKNIFE = 37
    """(GMT-7:00) Yellowknife<"""

    GMTM600_BAHIA_BANDERAS = 38
    """(GMT-6:00) Bahia_Banderas"""

    GMTM600_BELIZE = 39
    """(GMT-6:00) Belize"""

    GMTM600_CHICAGO = 40
    """(GMT-6:00) Chicago"""

    GMTM600_COSTA_RICA = 41
    """(GMT-6:00) Costa_Rica"""

    GMTM600_EL_SALVADOR = 42
    """(GMT-6:00) El_Salvador"""

    GMTM600_GUATEMALA = 43
    """(GMT-6:00) Guatemala"""

    GMTM600_KNOX = 44
    """(GMT-6:00) Knox"""

    GMTM600_TELL_CITY = 45
    """(GMT-6:00) Tell_City"""

    GMTM600_MANAGUA = 46
    """(GMT-6:00) Managua"""

    GMTM600_MATAMOROS = 47
    """(GMT-6:00) Matamoros"""

    GMTM600_MENOMINEE = 48
    """(GMT-6:00) Menominee"""

    GMTM600_MERIDA = 49
    """(GMT-6:00) Merida"""

    GMTM600_MEXICO_CITY = 50
    """(GMT-6:00) Mexico_City"""

    GMTM600_MONTERREY = 51
    """(GMT-6:00) Monterrey"""

    GMTM600_NORTH_DAKOTA = 52
    """(GMT-6:00) North_Dakota"""

    GMTM600_NORTH_DAKOTA_CENTER = 53
    """(GMT-6:00) North_Dakota/Center"""

    GMTM600_NORTH_DAKOTA_NEW_SALEM = 54
    """(GMT-6:00) North_Dakota/New_Salem"""

    GMTM600_RAINY_RIVER = 55
    """(GMT-6:00) Rainy_River"""

    GMTM600_RANKIN_INLET = 56
    """(GMT-6:00) Rankin_Inlet"""

    GMTM600_REGINA = 57
    """(GMT-6:00) Regina"""

    GMTM600_RESOLUTE = 58
    """(GMT-6:00) Resolute"""

    GMTM600_SWIFT_CURRENT = 59
    """(GMT-6:00) Swift_Current"""

    GMTM600_TEGUCIGALPA = 60
    """(GMT-6:00) Tegucigalpa"""

    GMTM600_WINNIPEG = 61
    """(GMT-6:00) Winnipeg"""

    GMTM600_EASTER = 62
    """(GMT-6:00) Easter"""

    GMTM600_GALAPAGOS = 63
    """(GMT-6:00) Galapagos"""

    GMTM500_ATIKOKAN = 64
    """(GMT-5:00) Atikokan"""

    GMTM500_BOGOTA = 65
    """(GMT-5:00) Bogota"""

    GMTM500_CANCUN = 66
    """(GMT-5:00) Cancun"""

    GMTM500_CAYMAN = 67
    """(GMT-5:00) Cayman"""

    GMTM500_DETROIT = 68
    """(GMT-5:00) Detroit"""

    GMTM500_EIRUNEPE = 69
    """(GMT-5:00) Eirunepe"""

    GMTM500_GRAND_TURK = 70
    """(GMT-5:00) Grand_Turk"""

    GMTM500_GUAYAQUIL = 71
    """(GMT-5:00) Guayaquil"""

    GMTM500_HAVANA = 72
    """(GMT-5:00) Havana"""

    GMTM500_INDIANAPOLIS = 73
    """(GMT-5:00) Indianapolis"""

    GMTM500_MARENGO = 74
    """(GMT-5:00) Marengo"""

    GMTM500_PETERSBURG = 75
    """(GMT-5:00) Petersburg"""

    GMTM500_VEVAY = 76
    """(GMT-5:00) Vevay"""

    GMTM500_VINCENNES = 77
    """(GMT-5:00) Vincennes"""

    GMTM500_WINAMAC = 78
    """(GMT-5:00) Winamac"""

    GMTM500_IQALUIT = 79
    """(GMT-5:00) Iqaluit"""

    GMTM500_JAMAICA = 80
    """(GMT-5:00) Jamaica"""

    GMTM500_LOUISVILLE = 81
    """(GMT-5:00) Louisville"""

    GMTM500_MONTICELLO = 82
    """(GMT-5:00) Monticello"""

    GMTM500_LIMA = 83
    """(GMT-5:00) Lima"""

    GMTM500_MONTREAL = 84
    """(GMT-5:00) Montreal"""

    GMTM500_NASSAU = 85
    """(GMT-5:00) Nassau"""

    GMTM500_NEW_YORK = 86
    """(GMT-5:00) New_York"""

    GMTM500_NIPIGON = 87
    """(GMT-5:00) Nipigon"""

    GMTM500_PANAMA = 88
    """(GMT-5:00) Panama"""

    GMTM500_PANGNIRTUNG = 89
    """(GMT-5:00) Pangnirtung"""

    GMTM500_POR_AU_PRINCE = 90
    """(GMT-5:00) Port-au-Prince"""

    GMTM500_RIO_BRANCO = 91
    """(GMT-5:00) Rio_Branco"""

    GMTM500_THUNDER_BAY = 92
    """(GMT-5:00) Thunder_Bay"""

    GMTM500_TORONTO = 93
    """(GMT-5:00) Toronto"""

    GMTM400_ANGUILLA = 94
    """(GMT-4:00) Anguilla"""

    GMTM400_ANTIGUA = 95
    """(GMT-4:00) Antigua"""

    GMTM400_ARUBA = 96
    """(GMT-4:00) Aruba"""

    GMTM400_ASUNCION = 97
    """(GMT-4:00) Asuncion"""

    GMTM400_BARBADO = 98
    """(GMT-4:00) Barbado"""

    GMTM400_BLANC_SABLON = 99
    """(GMT-4:00) Blanc-Sablon"""

    GMTM400_BOA_VISTA = 100
    """(GMT-4:00) Boa_Vista"""

    GMTM400_CAMPO_GRANDE = 101
    """(GMT-4:00) Campo_Grande"""

    GMTM400_CARACA = 102
    """(GMT-4:00) Caraca"""

    GMTM400_CUIABA = 103
    """(GMT-4:00) Cuiaba"""

    GMTM400_CURACAO = 104
    """(GMT-4:00) Curacao"""

    GMTM400_DOMINICA = 105
    """(GMT-4:00) Dominica"""

    GMTM400_GLACE_BAY = 106
    """(GMT-4:00) Glace_Bay"""

    GMTM400_GOOSE_BAY = 107
    """(GMT-4:00) Goose_Bay"""

    GMTM400_GRENADA = 108
    """(GMT-4:00) Grenada"""

    GMTM400_GUADELOUPE = 109
    """(GMT-4:00) Guadeloupe"""

    GMTM400_GUYANA = 110
    """(GMT-4:00) Guyana"""

    GMTM400_HALIFAX = 111
    """(GMT-4:00) Halifax"""

    GMTM400_KRALENDIJK = 112
    """(GMT-4:00) Kralendijk"""

    GMTM400_LA_PAZ = 113
    """(GMT-4:00) La_Paz"""

    GMTM400_LOWER_PRINCE = 114
    """(GMT-4:00) Lower_Prince"""

    GMTM400_MANAU = 115
    """(GMT-4:00) Manau"""

    GMTM400_MARIGOT = 116
    """(GMT-4:00) Marigot"""

    GMTM400_MARTINIQUE = 117
    """(GMT-4:00) Martinique"""

    GMTM400_MONCTON = 118
    """(GMT-4:00) Moncton"""

    GMTM400_MONTSERRAT = 119
    """(GMT-4:00) Montserrat"""

    GMTM400_PORT_OF_SPAIN = 120
    """(GMT-4:00) Port_of_Spain"""

    GMTM400_PORTO_VELHO = 121
    """(GMT-4:00) Porto_Velho"""

    GMTM400_PUERTO_RICO = 122
    """(GMT-4:00) Puerto_Rico"""

    GMTM400_SANTIAGO = 123
    """(GMT-4:00) Santiago"""

    GMTM400_SANTO_DOMINGO = 124
    """(GMT-4:00) Santo_Domingo"""

    GMTM400_ST_BARTHELEMY = 125
    """(GMT-4:00) St_Barthelemy"""

    GMTM400_ST_KITT = 126
    """(GMT-4:00) St_Kitt"""

    GMTM400_ST_LUCIA = 127
    """(GMT-4:00) St_Lucia"""

    GMTM400_ST_THOMA = 128
    """(GMT-4:00) St_Thoma"""

    GMTM400_ST_VINCENT = 129
    """(GMT-4:00) St_Vincent"""

    GMTM400_THULE = 130
    """(GMT-4:00) Thule"""

    GMTM400_TORTOLA = 131
    """(GMT-4:00) Tortola"""

    GMTM400_BERMUDA = 132
    """(GMT-4:00) Bermuda"""

    GMTM330_ST_JOHN = 133
    """(GMT-3:30) St_John"""

    GMTM300_ARAGUAINA = 134
    """(GMT-3:00) Araguaina"""

    GMTM300_BUENOS_AIRE = 135
    """(GMT-3:00) Buenos_Aire"""

    GMTM300_CATAMARCA = 136
    """(GMT-3:00) Catamarca"""

    GMTM300_CORDOBA = 137
    """(GMT-3:00) Cordoba"""

    GMTM300_JUJUY = 138
    """(GMT-3:00) Jujuy"""

    GMTM300_LA_RIOJA = 139
    """(GMT-3:00) La_Rioja"""

    GMTM300_MENDOZA = 140
    """(GMT-3:00) Mendoza"""

    GMTM300_RIO_GALLEGO = 141
    """(GMT-3:00) Rio_Gallego"""

    GMTM300_SALTA = 142
    """(GMT-3:00) Salta"""

    GMTM300_SAN_JUAN = 143
    """(GMT-3:00) San_Juan"""

    GMTM300_SAN_LUI = 144
    """(GMT-3:00) San_Lui"""

    GMTM300_TUCUMAN = 145
    """(GMT-3:00) Tucuman"""

    GMTM300_USHUAIA = 146
    """(GMT-3:00) Ushuaia"""

    GMTM300_BAHIA = 147
    """(GMT-3:00) Bahia"""

    GMTM300_BELEM = 148
    """(GMT-3:00) Belem"""

    GMTM300_CAYENNE = 149
    """(GMT-3:00) Cayenne"""

    GMTM300_FORTALEZA = 150
    """(GMT-3:00) Fortaleza"""

    GMTM300_GODTHAB = 151
    """(GMT-3:00) Godthab"""

    GMTM300_MACEIO = 152
    """(GMT-3:00) Maceio"""

    GMTM300_MIQUELON = 153
    """(GMT-3:00) Miquelon"""

    GMTM300_MONTEVIDEO = 154
    """(GMT-3:00) Montevideo"""

    GMTM300_NUUK = 155
    """(GMT-3:00) Nuuk"""

    GMTM300_PARAMARIBO = 156
    """(GMT-3:00) Paramaribo"""

    GMTM300_PUNTA_ARENA = 157
    """(GMT-3:00) Punta_Arena"""

    GMTM300_RECIFE = 158
    """(GMT-3:00) Recife"""

    GMTM300_SANTAREM = 159
    """(GMT-3:00) Santarem"""

    GMTM300_SAO_PAULO = 160
    """(GMT-3:00) Sao_Paulo"""

    GMTM300_PALMER = 161
    """(GMT-3:00) Palmer"""

    GMTM300_ROTHERA = 162
    """(GMT-3:00) Rothera"""

    GMTM300_STANLEY = 163
    """(GMT-3:00) Stanley"""

    GMTM200_NORONHA = 164
    """(GMT-2:00) Noronha"""

    GMTM200_SOUTH_GEORGIA = 165
    """(GMT-2:00) South_Georgia"""

    GMTM100_SCORESBYSUND = 166
    """(GMT-1:00) Scoresbysund"""

    GMTM100_AZORE = 167
    """(GMT-1:00) Azore"""

    GMTM100_CAPE_VERDE = 168
    """(GMT-1:00) Cape_Verde"""

    GMTP000_ABIDJAN = 169
    """(GMT+0:00) Abidjan"""

    GMTP000_ACCRA = 170
    """(GMT+0:00) Accra"""

    GMTP000_BAMAKO = 171
    """(GMT+0:00) Bamako"""

    GMTP000_BANJUL = 172
    """(GMT+0:00) Banjul"""

    GMTP000_BISSAU = 173
    """(GMT+0:00) Bissau"""

    GMTP000_CONAKRY = 174
    """(GMT+0:00) Conakry"""

    GMTP000_DAKAR = 175
    """(GMT+0:00) Dakar"""

    GMTP000_FREETOWN = 176
    """(GMT+0:00) Freetown"""

    GMTP000_LOME = 177
    """(GMT+0:00) Lome"""

    GMTP000_MONROVIA = 178
    """(GMT+0:00) Monrovia"""

    GMTP000_NOUAKCHOTT = 179
    """(GMT+0:00) Nouakchott"""

    GMTP000_OUAGADOUGOU = 180
    """(GMT+0:00) Ouagadougou"""

    GMTP000_SAO_TOME = 181
    """(GMT+0:00) Sao_Tome"""

    GMTP000_DANMARKSHAVN = 182
    """(GMT+0:00) Danmarkshavn"""

    GMTP000_TROLL = 183
    """(GMT+0:00) Troll"""

    GMTP000_CANARY = 184
    """(GMT+0:00) Canary"""

    GMTP000_FAROE = 185
    """(GMT+0:00) Faroe"""

    GMTP000_MADEIRA = 186
    """(GMT+0:00) Madeira"""

    GMTP000_REYKJAVIK = 187
    """(GMT+0:00) Reykjavik"""

    GMTP000_ST_HELENA = 188
    """(GMT+0:00) St_Helena"""

    GMTP000_GUERNSEY = 189
    """(GMT+0:00) Guernsey"""

    GMTP000_ISLE_OF_MAN = 190
    """(GMT+0:00) Isle_of_Man"""

    GMTP000_JERSEY = 191
    """(GMT+0:00) Jersey"""

    GMTP000_LISBON = 192
    """(GMT+0:00) Lisbon"""

    GMTP000_LONDON = 193
    """(GMT+0:00) London"""

    GMTP000_GMT = 194
    """(GMT+0:00) GMT"""

    GMTP100_ALGIER = 195
    """(GMT+1:00) Algier"""

    GMTP100_BANGUI = 196
    """(GMT+1:00) Bangui"""

    GMTP100_BRAZZAVILLE = 197
    """(GMT+1:00) Brazzaville"""

    GMTP100_CASABLANCA = 198
    """(GMT+1:00) Casablanca"""

    GMTP100_CEUTA = 199
    """(GMT+1:00) Ceuta"""

    GMTP100_DOUALA = 200
    """(GMT+1:00) Douala"""

    GMTP100_EL_AAIUN = 201
    """(GMT+1:00) El_Aaiun"""

    GMTP100_KINSHASA = 202
    """(GMT+1:00) Kinshasa"""

    GMTP100_LAGO = 203
    """(GMT+1:00) Lago"""

    GMTP100_LIBREVILLE = 204
    """(GMT+1:00) Libreville"""

    GMTP100_LUANDA = 205
    """(GMT+1:00) Luanda"""

    GMTP100_MALABO = 206
    """(GMT+1:00) Malabo"""

    GMTP100_NDJAMENA = 207
    """(GMT+1:00) Ndjamena"""

    GMTP100_NIAMEY = 208
    """(GMT+1:00) Niamey"""

    GMTP100_PORTO_NOVO = 209
    """(GMT+1:00) Porto-Novo"""

    GMTP100_TUNI = 210
    """(GMT+1:00) Tuni"""

    GMTP100_LONGYEARBYEN = 211
    """(GMT+1:00) Longyearbyen"""

    GMTP100_AMSTERDAM = 212
    """(GMT+1:00) Amsterdam"""

    GMTP100_ANDORRA = 213
    """(GMT+1:00) Andorra"""

    GMTP100_BELGRADE = 214
    """(GMT+1:00) Belgrade"""

    GMTP100_BERLIN = 215
    """(GMT+1:00) Berlin"""

    GMTP100_BRATISLAVA = 216
    """(GMT+1:00) Bratislava"""

    GMTP100_BRUSSEL = 217
    """(GMT+1:00) Brussel"""

    GMTP100_BUDAPEST = 218
    """(GMT+1:00) Budapest"""

    GMTP100_BUSINGEN = 219
    """(GMT+1:00) Busingen"""

    GMTP100_COPENHAGEN = 220
    """(GMT+1:00) Copenhagen"""

    GMTP100_DUBLIN = 221
    """(GMT+1:00) Dublin"""

    GMTP100_GIBRALTAR = 222
    """(GMT+1:00) Gibraltar"""

    GMTP100_LJUBLJANA = 223
    """(GMT+1:00) Ljubljana"""

    GMTP100_LUXEMBOURG = 224
    """(GMT+1:00) Luxembourg"""

    GMTP100_MADRID = 225
    """(GMT+1:00) Madrid"""

    GMTP100_MALTA = 226
    """(GMT+1:00) Malta"""

    GMTP100_MONACO = 227
    """(GMT+1:00) Monaco"""

    GMTP100_OSLO = 228
    """(GMT+1:00) Oslo"""

    GMTP100_PARI = 229
    """(GMT+1:00) Pari"""

    GMTP100_PODGORICA = 230
    """(GMT+1:00) Podgorica"""

    GMTP100_PRAGUE = 231
    """(GMT+1:00) Prague"""

    GMTP100_ROME = 232
    """(GMT+1:00) Rome"""

    GMTP100_SAN_MARINO = 233
    """(GMT+1:00) San_Marino"""

    GMTP100_SARAJEVO = 234
    """(GMT+1:00) Sarajevo"""

    GMTP100_SKOPJE = 235
    """(GMT+1:00) Skopje"""

    GMTP100_STOCKHOLM = 236
    """(GMT+1:00) Stockholm"""

    GMTP100_TIRANE = 237
    """(GMT+1:00) Tirane"""

    GMTP100_VADUZ = 238
    """(GMT+1:00) Vaduz"""

    GMTP100_VATICAN = 239
    """(GMT+1:00) Vatican"""

    GMTP100_VIENNA = 240
    """(GMT+1:00) Vienna"""

    GMTP100_WARSAW = 241
    """(GMT+1:00) Warsaw"""

    GMTP100_ZAGREB = 242
    """(GMT+1:00) Zagreb"""

    GMTP100_ZURICH = 243
    """(GMT+1:00) Zurich"""

    GMTP200_BLANTYRE = 244
    """(GMT+2:00) Blantyre"""

    GMTP200_BUJUMBURA = 245
    """(GMT+2:00) Bujumbura"""

    GMTP200_CAIRO = 246
    """(GMT+2:00) Cairo"""

    GMTP200_GABORONE = 247
    """(GMT+2:00) Gaborone"""

    GMTP200_HARARE = 248
    """(GMT+2:00) Harare"""

    GMTP200_JOHANNESBURG = 249
    """(GMT+2:00) Johannesburg"""

    GMTP200_KHARTOUM = 250
    """(GMT+2:00) Khartoum"""

    GMTP200_KIGALI = 251
    """(GMT+2:00) Kigali"""

    GMTP200_LUBUMBASHI = 252
    """(GMT+2:00) Lubumbashi"""

    GMTP200_LUSAKA = 253
    """(GMT+2:00) Lusaka"""

    GMTP200_MAPUTO = 254
    """(GMT+2:00) Maputo"""

    GMTP200_MASERU = 255
    """(GMT+2:00) Maseru"""

    GMTP200_MBABANE = 256
    """(GMT+2:00) Mbabane"""

    GMTP200_TRIPOLI = 257
    """(GMT+2:00) Tripoli"""

    GMTP200_WINDHOEK = 258
    """(GMT+2:00) Windhoek"""

    GMTP200_AMMAN = 259
    """(GMT+2:00) Amman"""

    GMTP200_BEIRUT = 260
    """(GMT+2:00) Beirut"""

    GMTP200_DAMASCU = 261
    """(GMT+2:00) Damascu"""

    GMTP200_FAMAGUSTA = 262
    """(GMT+2:00) Famagusta"""

    GMTP200_GAZA = 263
    """(GMT+2:00) Gaza"""

    GMTP200_HEBRON = 264
    """(GMT+2:00) Hebron"""

    GMTP200_JERUSALEM = 265
    """(GMT+2:00) Jerusalem"""

    GMTP200_ATHEN = 266
    """(GMT+2:00) Athen"""

    GMTP200_BUCHAREST = 267
    """(GMT+2:00) Bucharest"""

    GMTP200_CHISINAU = 268
    """(GMT+2:00) Chisinau"""

    GMTP200_HELSINKI = 269
    """(GMT+2:00) Helsinki"""

    GMTP200_KALININGRAD = 270
    """(GMT+2:00) Kaliningrad"""

    GMTP200_KIEV = 271
    """(GMT+2:00) Kiev"""

    GMTP200_MARIEHAMN = 272
    """(GMT+2:00) Mariehamn"""

    GMTP200_NICOSIA = 273
    """(GMT+2:00) Nicosia"""

    GMTP200_RIGA = 274
    """(GMT+2:00) Riga"""

    GMTP200_SOFIA = 275
    """(GMT+2:00) Sofia"""

    GMTP200_TALLINN = 276
    """(GMT+2:00) Tallinn"""

    GMTP200_UZHGOROD = 277
    """(GMT+2:00) Uzhgorod"""

    GMTP200_VILNIU = 278
    """(GMT+2:00) Vilniu"""

    GMTP200_ZAPOROZHYE = 279
    """(GMT+2:00) Zaporozhye"""

    GMTP300_ADDIS_ABABA = 280
    """(GMT+3:00) Addis_Ababa"""

    GMTP300_ASMARA = 281
    """(GMT+3:00) Asmara"""

    GMTP300_DAR_ES_SALAAM = 282
    """(GMT+3:00) Dar_es_Salaam"""

    GMTP300_DJIBOUTI = 283
    """(GMT+3:00) Djibouti"""

    GMTP300_JUBA = 284
    """(GMT+3:00) Juba"""

    GMTP300_KAMPALA = 285
    """(GMT+3:00) Kampala"""

    GMTP300_MOGADISHU = 286
    """(GMT+3:00) Mogadishu"""

    GMTP300_NAIROBI = 287
    """(GMT+3:00) Nairobi"""

    GMTP300_SYOWA = 288
    """(GMT+3:00) Syowa"""

    GMTP300_ADEN = 289
    """(GMT+3:00) Aden"""

    GMTP300_BAGHDAD = 290
    """(GMT+3:00) Baghdad"""

    GMTP300_BAHRAIN = 291
    """(GMT+3:00) Bahrain"""

    GMTP300_KUWAIT = 292
    """(GMT+3:00) Kuwait"""

    GMTP300_QATAR = 293
    """(GMT+3:00) Qatar"""

    GMTP300_RIYADH = 294
    """(GMT+3:00) Riyadh"""

    GMTP300_ISTANBUL = 295
    """(GMT+3:00) Istanbul"""

    GMTP300_KIROV = 296
    """(GMT+3:00) Kirov"""

    GMTP300_MINSK = 297
    """(GMT+3:00) Minsk"""

    GMTP300_MOSCOW = 298
    """(GMT+3:00) Moscow"""

    GMTP300_SIMFEROPOL = 299
    """(GMT+3:00) Simferopol"""

    GMTP300_ANTANANARIVO = 300
    """(GMT+3:00) Antananarivo"""

    GMTP300_COMORO = 301
    """(GMT+3:00) Comoro"""

    GMTP300_MAYOTTE = 302
    """(GMT+3:00) Mayotte"""

    GMTP330_TEHRAN = 303
    """(GMT+3:30) Tehran"""

    GMTP400_BAKU = 304
    """(GMT+4:00) Baku"""

    GMTP400_DUBAI = 305
    """(GMT+4:00) Dubai"""

    GMTP400_MUSCAT = 306
    """(GMT+4:00) Muscat"""

    GMTP400_TBILISI = 307
    """(GMT+4:00) Tbilisi"""

    GMTP400_YEREVAN = 308
    """(GMT+4:00) Yerevan"""

    GMTP400_ASTRAKHAN = 309
    """(GMT+4:00) Astrakhan"""

    GMTP400_SAMARA = 310
    """(GMT+4:00) Samara"""

    GMTP400_SARATOV = 311
    """(GMT+4:00) Saratov"""

    GMTP400_ULYANOVSK = 312
    """(GMT+4:00) Ulyanovsk"""

    GMTP400_VOLGOGRAD = 313
    """(GMT+4:00) Volgograd"""

    GMTP400_MAHE = 314
    """(GMT+4:00) Mahe"""

    GMTP400_MAURITIU = 315
    """(GMT+4:00) Mauritiu"""

    GMTP400_REUNION = 316
    """(GMT+4:00) Reunion"""

    GMTP430_KABUL = 317
    """(GMT+4:30) Kabul"""

    GMTP500_MAWSON = 318
    """(GMT+5:00) Mawson"""

    GMTP500_AQTAU = 319
    """(GMT+5:00) Aqtau"""

    GMTP500_AQTOBE = 320
    """(GMT+5:00) Aqtobe"""

    GMTP500_ASHGABAT = 321
    """(GMT+5:00) Ashgabat"""

    GMTP500_ATYRAU = 322
    """(GMT+5:00) Atyrau"""

    GMTP500_DUSHANBE = 323
    """(GMT+5:00) Dushanbe"""

    GMTP500_KARACHI = 324
    """(GMT+5:00) Karachi"""

    GMTP500_ORAL = 325
    """(GMT+5:00) Oral"""

    GMTP500_QYZYLORDA = 326
    """(GMT+5:00) Qyzylorda"""

    GMTP500_SAMARKAND = 327
    """(GMT+5:00) Samarkand"""

    GMTP500_TASHKENT = 328
    """(GMT+5:00) Tashkent"""

    GMTP500_YEKATERINBURG = 329
    """(GMT+5:00) Yekaterinburg"""

    GMTP500_KERGUELEN = 330
    """(GMT+5:00) Kerguelen"""

    GMTP500_MALDIVE = 331
    """(GMT+5:00) Maldive"""

    GMTP530_CALCUTTA = 332
    """(GMT+5:30) Calcutta"""

    GMTP530_COLOMBO = 333
    """(GMT+5:30) Colombo"""

    GMTP530_KOLKATA = 334
    """(GMT+5:30) Kolkata"""

    GMTP545_KATHMANDU = 335
    """(GMT+5:45) Kathmandu"""

    GMTP545_KATMANDU = 336
    """(GMT+5:45) Katmandu"""

    GMTP600_VOSTOK = 337
    """(GMT+6:00) Vostok"""

    GMTP600_ALMATY = 338
    """(GMT+6:00) Almaty"""

    GMTP600_BISHKEK = 339
    """(GMT+6:00) Bishkek"""

    GMTP600_DHAKA = 340
    """(GMT+6:00) Dhaka"""

    GMTP600_KASHGAR = 341
    """(GMT+6:00) Kashgar"""

    GMTP600_OMSK = 342
    """(GMT+6:00) Omsk"""

    GMTP600_QOSTANAY = 343
    """(GMT+6:00) Qostanay"""

    GMTP600_THIMPHU = 344
    """(GMT+6:00) Thimphu"""

    GMTP600_URUMQI = 345
    """(GMT+6:00) Urumqi"""

    GMTP600_CHAGO = 346
    """(GMT+6:00) Chago"""

    GMTP630_RANGOON = 347
    """(GMT+6:30) Rangoon"""

    GMTP630_YANGON = 348
    """(GMT+6:30) Yangon"""

    GMTP630_COCO = 349
    """(GMT+6:30) Coco"""

    GMTP700_DAVI = 350
    """(GMT+7:00) Davi"""

    GMTP700_BANGKOK = 351
    """(GMT+7:00) Bangkok"""

    GMTP700_BARNAUL = 352
    """(GMT+7:00) Barnaul"""

    GMTP700_HO_CHI_MINH = 353
    """(GMT+7:00) Ho_Chi_Minh"""

    GMTP700_HOVD = 354
    """(GMT+7:00) Hovd"""

    GMTP700_JAKARTA = 355
    """(GMT+7:00) Jakarta"""

    GMTP700_KRASNOYARSK = 356
    """(GMT+7:00) Krasnoyarsk"""

    GMTP700_NOVOKUZNETSK = 357
    """(GMT+7:00) Novokuznetsk"""

    GMTP700_NOVOSIBIRSK = 358
    """(GMT+7:00) Novosibirsk"""

    GMTP700_PHNOM_PENH = 359
    """(GMT+7:00) Phnom_Penh"""

    GMTP700_PONTIANAK = 360
    """(GMT+7:00) Pontianak"""

    GMTP700_TOMSK = 361
    """(GMT+7:00) Tomsk"""

    GMTP700_VIENTIANE = 362
    """(GMT+7:00) Vientiane"""

    GMTP700_CHRISTMA = 363
    """(GMT+7:00) Christma"""

    GMTP800_CASEY = 364
    """(GMT+8:00) Casey"""

    GMTP800_BRUNEI = 365
    """(GMT+8:00) Brunei"""

    GMTP800_CHOIBALSAN = 366
    """(GMT+8:00) Choibalsan"""

    GMTP800_CHONGQING = 367
    """(GMT+8:00) Chongqing"""

    GMTP800_HARBIN = 368
    """(GMT+8:00) Harbin"""

    GMTP800_HONG_KONG = 369
    """(GMT+8:00) Hong_Kong"""

    GMTP800_IRKUTSK = 370
    """(GMT+8:00) Irkutsk"""

    GMTP800_KUALA_LUMPUR = 371
    """(GMT+8:00) Kuala_Lumpur"""

    GMTP800_KUCHING = 372
    """(GMT+8:00) Kuching"""

    GMTP800_MACAU = 373
    """(GMT+8:00) Macau"""

    GMTP800_MAKASSAR = 374
    """(GMT+8:00) Makassar"""

    GMTP800_MANILA = 375
    """(GMT+8:00) Manila"""

    GMTP800_SHANGHAI = 376
    """(GMT+8:00) Shanghai"""

    GMTP800_SINGAPORE = 377
    """(GMT+8:00) Singapore"""

    GMTP800_TAIPEI = 378
    """(GMT+8:00) Taipei"""

    GMTP800_ULAANBAATAR = 379
    """(GMT+8:00) Ulaanbaatar"""

    GMTP800_PERTH = 380
    """(GMT+8:00) Perth"""

    GMTP845_EUCLA = 381
    """(GMT+8:45) Eucla"""

    GMTP900_CHITA = 382
    """(GMT+9:00) Chita"""

    GMTP900_DILI = 383
    """(GMT+9:00) Dili"""

    GMTP900_JAYAPURA = 384
    """(GMT+9:00) Jayapura"""

    GMTP900_KHANDYGA = 385
    """(GMT+9:00) Khandyga"""

    GMTP900_PYONGYANG = 386
    """(GMT+9:00) Pyongyang"""

    GMTP900_SEOUL = 387
    """(GMT+9:00) Seoul"""

    GMTP900_TOKYO = 388
    """(GMT+9:00) Tokyo"""

    GMTP900_YAKUTSK = 389
    """(GMT+9:00) Yakutsk"""

    GMTP900_PALAU = 390
    """(GMT+9:00) Palau"""

    GMTP930_ADELAIDE = 391
    """(GMT+9:30) Adelaide"""

    GMTP930_BROKEN_HILL = 392
    """(GMT+9:30) Broken_Hill"""

    GMTP930_DARWIN = 393
    """(GMT+9:30) Darwin"""

    GMTP1000_DUMONTDURVILLE = 394
    """(GMT+10:00) DumontDUrville"""

    GMTP1000_UST_NERA = 395
    """(GMT+10:00) Ust-Nera"""

    GMTP1000_VLADIVOSTOK = 396
    """(GMT+10:00) Vladivostok"""

    GMTP1000_BRISBANE = 397
    """(GMT+10:00) Brisbane"""

    GMTP1000_CURRIE = 398
    """(GMT+10:00) Currie"""

    GMTP1000_HOBART = 399
    """(GMT+10:00) Hobart"""

    GMTP1000_LINDEMAN = 400
    """(GMT+10:00) Lindeman"""

    GMTP1000_MELBOURNE = 401
    """(GMT+10:00) Melbourne"""

    GMTP1000_SYDNEY = 402
    """(GMT+10:00) Sydney"""

    GMTP1000_CHUUK = 403
    """(GMT+10:00) Chuuk"""

    GMTP1000_GUAM = 404
    """(GMT+10:00) Guam"""

    GMTP1000_PORT_MORESBY = 405
    """(GMT+10:00) Port_Moresby"""

    GMTP1000_SAIPAN = 406
    """(GMT+10:00) Saipan"""

    GMTP1000_TRUK = 407
    """(GMT+10:00) Truk"""

    GMTP1030_LORD_HOWE = 408
    """(GMT+10:30) Lord_Howe"""

    GMTP1100_MACQUARIE = 409
    """(GMT+11:00) Macquarie"""

    GMTP1100_MAGADAN = 410
    """(GMT+11:00) Magadan"""

    GMTP1100_SAKHALIN = 411
    """(GMT+11:00) Sakhalin"""

    GMTP1100_SREDNEKOLYMSK = 412
    """(GMT+11:00) Srednekolymsk"""

    GMTP1100_BOUGAINVILLE = 413
    """(GMT+11:00) Bougainville"""

    GMTP1100_EFATE = 414
    """(GMT+11:00) Efate"""

    GMTP1100_GUADALCANAL = 415
    """(GMT+11:00) Guadalcanal"""

    GMTP1100_KOSRAE = 416
    """(GMT+11:00) Kosrae"""

    GMTP1100_NORFOLK = 417
    """(GMT+11:00) Norfolk"""

    GMTP1100_NOUMEA = 418
    """(GMT+11:00) Noumea"""

    GMTP1100_POHNPEI = 419
    """(GMT+11:00) Pohnpei"""

    GMTP1100_PONAPE = 420
    """(GMT+11:00) Ponape"""

    GMTP1200_MCMURDO = 421
    """(GMT+12:00) McMurdo"""

    GMTP1200_ANADYR = 422
    """(GMT+12:00) Anadyr"""

    GMTP1200_KAMCHATKA = 423
    """(GMT+12:00) Kamchatka"""

    GMTP1200_AUCKLAND = 424
    """(GMT+12:00) Auckland"""

    GMTP1200_FIJI = 425
    """(GMT+12:00) Fiji"""

    GMTP1200_FUNAFUTI = 426
    """(GMT+12:00) Funafuti"""

    GMTP1200_KWAJALEIN = 427
    """(GMT+12:00) Kwajalein"""

    GMTP1200_MAJURO = 428
    """(GMT+12:00) Majuro"""

    GMTP1200_NAURU = 429
    """(GMT+12:00) Nauru"""

    GMTP1200_TARAWA = 430
    """(GMT+12:00) Tarawa"""

    GMTP1200_WAKE = 431
    """(GMT+12:00) Wake"""

    GMTP1200_WALLI = 432
    """(GMT+12:00) Walli"""

    GMTP1245_CHATHAM = 433
    """(GMT+12:45) Chatham"""

    GMTP1300_APIA = 434
    """(GMT+13:00) Apia"""

    GMTP1300_ENDERBURY = 435
    """(GMT+13:00) Enderbury"""

    GMTP1300_FAKAOFO = 436
    """(GMT+13:00) Fakaofo"""

    GMTP1300_TONGATAPU = 437
    """(GMT+13:00) Tongatapu"""


class VideoChannelFlowControlModeType(betterproto.Enum):
    """Режим Flow control mode"""

    FLOW_CONTROL_MODE_TYPE_UNKNOWN = 0
    """Значение не указано"""

    VBR = 1
    """Режим VBR"""

    CBR = 2
    """Режим CBR"""

    CVBR = 3
    """Режим CVBR"""

    AVBR = 4
    """Режим AVBR"""

    FIXP = 5
    """Режим FIXP"""

    QVBR = 6
    """Режим QVBR"""


class VideoChannelFormatType(betterproto.Enum):
    """Формат видео"""

    FORMAT_TYPE_UNKNOWN = 0
    """Значение не указано"""

    MPEG = 1
    """Формат mjpeg"""

    H264 = 2
    """Формат h.264"""

    H264_PLUS = 3
    """Формат h.264+"""

    H265 = 4
    """Формат h.265"""


class VideoChannelProfileType(betterproto.Enum):
    """Профиль"""

    PROFILE_TYPE_UNKNOWN = 0
    """Значение не указано"""

    PROFILE_HIGH = 1
    """Высокий"""

    PROFILE_MAIN = 2
    """Основной"""

    PROFILE_BASE = 3
    """Базовый"""


class VideoChannelResolutionType(betterproto.Enum):
    """Тип разрешения видео"""

    RESOLUTION_TYPE_UNKNOWN = 0
    """Значение не указано"""

    R2K = 1
    """Тип разрешения 2K 2560*1440"""

    FULLHD = 2
    """Тип разрешения FULLHD 1920*1080"""

    HD = 3
    """Тип разрешения HD 1280*720"""

    SD = 4
    """Тип разрешения SD 720*576"""

    R4CIF = 5
    """Тип разрешения 4CIF 704*576"""

    VGA = 6
    """Тип разрешения VGA 640*480"""


class RelayStateStateType(betterproto.Enum):
    """Тип состояния"""

    STATE_TYPE_UNKNOWN = 0
    """Значение не указано"""

    OPEN_TEMPORARY = 1
    """Открыто временно"""

    CLOSED = 2
    """Закрыто"""

    OPEN_PERMANENT = 3
    """Открыто на всегда"""


class RelayOpenLockType(betterproto.Enum):
    """Тип замка"""

    LOCK_TYPE_UNKNOWN = 0
    """Значение не указано"""

    ELECTROMAGNETIC = 1
    """Электромагнитный (state_operation)"""

    ELECTROMECHANICAL = 2
    """Электромеханический (pulse_operation)"""


class TickerModeType(betterproto.Enum):
    """Режим строки"""

    MODE_TYPE_UNKNOWN = 0
    """Значение не указано"""

    OFF = 1
    """Выключен"""

    RUNNING_LINE = 2
    """Бегущая строка"""

    LINE_1_BY_1 = 3
    """Строка одна за другой"""


class ReaderDirectionType(betterproto.Enum):
    """Направление"""

    DIRECTION_TYPE_UNKNOWN = 0
    """Значение не указано"""

    IN = 1
    """Вход"""

    OUT = 2
    """Выход"""


class HouseInviteTemplateType(betterproto.Enum):
    """Варианты подстановки номера дома и квартиры в SIP Invite"""

    INVITE_TEMPLATE_TYPE_UNKNOWN = 0
    """Значение не указано"""

    H4LZ_F4LZ = 1
    """
    4 символа для номера дома с лидирующими нулями, 4 символа для номера
    квартиры с лидирующими нулями. Номера дома и квартиры при звонке
    подставляются в виде: 00120123@sip.acme.io
    """

    H4LZ_F4 = 2
    """
    4 символа для номера дома с лидирующими нулями, 4 или меньше символа для
    номера квартиры. Номера дома и квартиры при звонке подставляются в виде:
    0012123@sip.acme.io
    """

    H4_F4LZ = 3
    """
    4 или меньше символа для номера дома, 4 символа для номера квартиры с
    лидирующими нулями. Номера дома и квартиры при звонке подставляются в виде:
    120123@sip.acme.io
    """


@dataclass(eq=False, repr=False)
class Capability(betterproto.Message):
    """Возможность устройства"""

    encryption_profile: "CapabilityEncryptionProfile" = betterproto.message_field(
        1, group="kind"
    )
    """Профиль шифрования"""


@dataclass(eq=False, repr=False)
class CapabilityEncryptionProfile(betterproto.Message):
    """Профиль шифрования"""

    pass


@dataclass(eq=False, repr=False)
class CapabilityFilter(betterproto.Message):
    """Фильтр возможностей устройства"""

    pass


@dataclass(eq=False, repr=False)
class GetCapabilityListRequest(betterproto.Message):
    """Запрос получения возможностей устройства"""

    filter: "CapabilityFilter" = betterproto.message_field(1)
    """Фильтр возможностей устройства"""


@dataclass(eq=False, repr=False)
class GetCapabilityListResponse(betterproto.Message):
    """Ответ на запрос получения возможностей устройства"""

    data: List["Capability"] = betterproto.message_field(1)
    """Список Capability"""


@dataclass(eq=False, repr=False)
class PostSystemRebootRequest(betterproto.Message):
    """Запрос удаленной перезагрузки"""

    pass


@dataclass(eq=False, repr=False)
class PostSystemRebootResponse(betterproto.Message):
    """Ответ на запрос удаленной перезагрузки"""

    pass


@dataclass(eq=False, repr=False)
class DeviceInfo(betterproto.Message):
    """Общая информация об устройстве"""

    firmware_version: str = betterproto.string_field(1)
    """Версия программного обеспечения"""

    hardware_version: str = betterproto.string_field(2)
    """Версия аппаратного обеспечения"""

    model: str = betterproto.string_field(3)
    """Модель"""

    mac_address: str = betterproto.string_field(4)
    """
    MAC-адрес. Диапазон: 17..17. Паттерн:
    /^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$/
    """

    ip: str = betterproto.string_field(5)
    """
    IP адрес. Диапазон: 7..15. Паттерн: /^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-
    9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/
    """

    serial_number: str = betterproto.string_field(6)
    """Серийный номер"""

    uptime: int = betterproto.int32_field(7)
    """Время работы в секундах. Диапазон: 0..2147483647"""

    mc_firmware_version: str = betterproto.string_field(8)
    """Версия программного обеспечения микроконтроллера"""


@dataclass(eq=False, repr=False)
class GetSystemInfoRequest(betterproto.Message):
    """Запрос получения общей информации об устройстве"""

    pass


@dataclass(eq=False, repr=False)
class GetSystemInfoResponse(betterproto.Message):
    """Ответ на запрос получения общей информации об устройстве"""

    data: "DeviceInfo" = betterproto.message_field(1, group="type")
    """Общая информация об устройстве"""


@dataclass(eq=False, repr=False)
class ValidationError(betterproto.Message):
    """Ошибки валидации"""

    path: str = betterproto.string_field(1)
    """Путь к полю в формате наименования прото"""

    message: str = betterproto.string_field(2)
    """Валидационное сообщение"""


@dataclass(eq=False, repr=False)
class Code(betterproto.Message):
    """Код доступа"""

    code: str = betterproto.string_field(1)
    """Код доступа"""

    description: str = betterproto.string_field(2)
    """Описание"""

    relay_indexes: List[int] = betterproto.int32_field(3)
    """Идентификаторы реле. Диапазон: 1..64"""


@dataclass(eq=False, repr=False)
class CodeSavingError(betterproto.Message):
    """Ошибки сохранения"""

    relay_not_found: "CodeSavingErrorRelayNotFound" = betterproto.message_field(
        1, group="reason"
    )
    """Реле не найдено"""


@dataclass(eq=False, repr=False)
class CodeSavingErrorRelayNotFound(betterproto.Message):
    """Реле не найдено"""

    pass


@dataclass(eq=False, repr=False)
class CodePaging(betterproto.Message):
    """Постраничный вывод"""

    limit: int = betterproto.int32_field(1)
    """
    Количество записей на страницу. Если значение 0 (не передано), то будет
    взято значение по умолчанию. # Диапазон: 0..100. # По умолчанию: 20
    """

    offset: int = betterproto.int32_field(2)
    """Сдвиг. # Диапазон: 0..2147483647"""


@dataclass(eq=False, repr=False)
class DeleteCodeListRequest(betterproto.Message):
    """Запрос удаления списка кодов доступа"""

    pass


@dataclass(eq=False, repr=False)
class DeleteCodeListResponse(betterproto.Message):
    """Ответ на запрос удаления списка кодов доступа"""

    data: int = betterproto.int32_field(1, group="type")
    """Всего количество удаленных"""


@dataclass(eq=False, repr=False)
class DeleteCodeRequest(betterproto.Message):
    """Запрос удаления одного кода доступа"""

    code: str = betterproto.string_field(1)
    """Код доступа"""


@dataclass(eq=False, repr=False)
class DeleteCodeResponse(betterproto.Message):
    """Ответ на запрос удаления одного кода доступа"""

    error: "DeleteCodeResponseError" = betterproto.message_field(1, group="type")
    """Ошибка"""


@dataclass(eq=False, repr=False)
class DeleteCodeResponseError(betterproto.Message):
    """Ошибка запроса"""

    validation: "ValidationError" = betterproto.message_field(1, group="reason")
    """Ошибка валидации"""


@dataclass(eq=False, repr=False)
class GetCodeCountRequest(betterproto.Message):
    """Запрос получения количества кодов доступа"""

    pass


@dataclass(eq=False, repr=False)
class GetCodeCountResponse(betterproto.Message):
    """Ответ на запрос получения количества кодов доступа"""

    data: int = betterproto.int32_field(1, group="type")
    """Всего количество"""


@dataclass(eq=False, repr=False)
class GetCodeListRequest(betterproto.Message):
    """Запрос получения списка кодов доступа"""

    paging: "CodePaging" = betterproto.message_field(1, group="pagination")
    """Постраничный вывод"""


@dataclass(eq=False, repr=False)
class GetCodeListResponse(betterproto.Message):
    """Ответ на запрос получения списка кодов доступа"""

    data: List["Code"] = betterproto.message_field(1)
    """Список Code"""


@dataclass(eq=False, repr=False)
class GetCodeRequest(betterproto.Message):
    """Запрос получения получения кода доступа"""

    code: str = betterproto.string_field(1)
    """Код доступа"""


@dataclass(eq=False, repr=False)
class GetCodeResponse(betterproto.Message):
    """Ответ на запрос получения получения кода доступа"""

    data: "Code" = betterproto.message_field(1, group="type")
    """Код доступа"""


@dataclass(eq=False, repr=False)
class SaveCodeListRequest(betterproto.Message):
    """Запрос на создание списка кодов доступа"""

    data: List["Code"] = betterproto.message_field(1)
    """Список Code"""


@dataclass(eq=False, repr=False)
class SaveCodeListResponse(betterproto.Message):
    """Ответ на создание списка кодов доступа"""

    data: List["Code"] = betterproto.message_field(1)
    """Список Code"""

    errors: List["SaveCodeListResponseError"] = betterproto.message_field(2)
    """Список ошибок"""


@dataclass(eq=False, repr=False)
class SaveCodeListResponseError(betterproto.Message):
    """Ошибка запроса"""

    code: str = betterproto.string_field(1)
    """Код доступа"""

    validation: "ValidationError" = betterproto.message_field(2, group="reason")
    """Ошибка валидации"""

    saving: "CodeSavingError" = betterproto.message_field(3, group="reason")
    """Ошибка сохранения"""


@dataclass(eq=False, repr=False)
class SaveCodeRequest(betterproto.Message):
    """Запрос создания кода доступа"""

    data: "Code" = betterproto.message_field(1)
    """Код доступа"""


@dataclass(eq=False, repr=False)
class SaveCodeResponse(betterproto.Message):
    """Ответ на запрос создания кода доступа"""

    data: "Code" = betterproto.message_field(1, group="type")
    """Код доступа"""

    error: "SaveCodeResponseError" = betterproto.message_field(2, group="type")
    """Ошибка"""


@dataclass(eq=False, repr=False)
class SaveCodeResponseError(betterproto.Message):
    """Ошибка запроса"""

    validation: "ValidationError" = betterproto.message_field(1, group="reason")
    """Ошибка валидации"""

    saving: "CodeSavingError" = betterproto.message_field(2, group="reason")
    """Ошибка сохранения"""


@dataclass(eq=False, repr=False)
class EditSosRequest(betterproto.Message):
    """Запрос редактирования настроек SOS"""

    data: "Sos" = betterproto.message_field(1)
    """Настройки SOS"""

    update_mask: "betterproto_lib_google_protobuf.FieldMask" = (
        betterproto.message_field(2)
    )
    """Маска полей обновления"""


@dataclass(eq=False, repr=False)
class EditSosResponse(betterproto.Message):
    """Ответ на запрос редактирования настроек SOS"""

    data: "Sos" = betterproto.message_field(1, group="type")
    """Настройки SOS"""

    error: "EditSosResponseError" = betterproto.message_field(2, group="type")
    """Ошибка"""


@dataclass(eq=False, repr=False)
class EditSosResponseError(betterproto.Message):
    """Ошибка запроса"""

    validation: "ValidationError" = betterproto.message_field(1, group="reason")
    """Ошибка валидации"""


@dataclass(eq=False, repr=False)
class GetSosRequest(betterproto.Message):
    """Запрос получения настроек SOS"""

    pass


@dataclass(eq=False, repr=False)
class GetSosResponse(betterproto.Message):
    """Ответ на запрос получения настроек SOS"""

    data: "Sos" = betterproto.message_field(1, group="type")
    """Настройки SOS"""


@dataclass(eq=False, repr=False)
class Sos(betterproto.Message):
    """Настройки SOS"""

    is_sos_on: bool = betterproto.bool_field(1)
    """Флаг включения SOS вызова"""

    sip_invite: str = betterproto.string_field(2)
    """
    Параметр SIP Invite для SOS вызова. Произвольная строка которая передается
    в SIP сервер. Диапазон: 1..128
    """

    sip_server: str = betterproto.string_field(3)
    """
    Параметр SIP Server для SOS вызова. При пустом sip_server будет использован
    сервер SIP регистрации
    """


@dataclass(eq=False, repr=False)
class EditSafeCityOsdRequest(betterproto.Message):
    """Запрос редактирования настроек OSD"""

    data: "SafeCityOsd" = betterproto.message_field(1)
    """Настройки OSD"""

    update_mask: "betterproto_lib_google_protobuf.FieldMask" = (
        betterproto.message_field(2)
    )
    """Маска полей обновления"""


@dataclass(eq=False, repr=False)
class EditSafeCityOsdResponse(betterproto.Message):
    """Ответ на запрос редактирования настроек OSD"""

    data: "SafeCityOsd" = betterproto.message_field(1, group="type")
    """Настройки OSD"""

    error: "EditSafeCityOsdResponseError" = betterproto.message_field(2, group="type")
    """Ошибка"""


@dataclass(eq=False, repr=False)
class EditSafeCityOsdResponseError(betterproto.Message):
    """Ошибка запроса"""

    validation: "ValidationError" = betterproto.message_field(1, group="reason")
    """Ошибка валидации"""


@dataclass(eq=False, repr=False)
class GetSafeCityOsdRequest(betterproto.Message):
    """Запрос получения настроек OSD"""

    pass


@dataclass(eq=False, repr=False)
class GetSafeCityOsdResponse(betterproto.Message):
    """Ответ на запрос получения настроек OSD"""

    data: "SafeCityOsd" = betterproto.message_field(1, group="type")
    """Настройки OSD"""


@dataclass(eq=False, repr=False)
class SafeCityOsd(betterproto.Message):
    """Настройки OSD"""

    is_osd_enabled: bool = betterproto.bool_field(1)
    """Флаг включения OSD"""

    textline: str = betterproto.string_field(2)
    """Текст"""

    textsize: int = betterproto.int32_field(3)
    """Размер текста, пикселей"""

    placement_type: "SafeCityOsdPlacementType" = betterproto.enum_field(4)
    """Размещение текста"""

    show_datetime_type: "SafeCityOsdShowDatetimeType" = betterproto.enum_field(5)
    """Вариант добавления даты"""

    is_show_fps: bool = betterproto.bool_field(6)
    """Флаг отображения количества кадров в секунду"""

    is_show_bitrate: bool = betterproto.bool_field(7)
    """Флаг отображения битрейта"""

    is_show_count_of_streams: bool = betterproto.bool_field(8)
    """Флаг отображения количества потоков"""

    is_show_name_of_device: bool = betterproto.bool_field(9)
    """Флаг отображения имени устройства"""


@dataclass(eq=False, repr=False)
class GetSipAccountListRequest(betterproto.Message):
    """Запрос получения списка Sip-аккаунтов"""

    pass


@dataclass(eq=False, repr=False)
class GetSipAccountListResponse(betterproto.Message):
    """Ответ на запрос получения списка Sip-аккаунтов"""

    data: List["SipAccount"] = betterproto.message_field(1)
    """Массив Sip-аккаунтов"""


@dataclass(eq=False, repr=False)
class EditSipAccountRequest(betterproto.Message):
    """Запрос на редактирование Sip-аккаунта"""

    data: "SipAccount" = betterproto.message_field(1)
    """Sip-аккаунт"""

    update_mask: "betterproto_lib_google_protobuf.FieldMask" = (
        betterproto.message_field(2)
    )
    """Маска полей обновления"""


@dataclass(eq=False, repr=False)
class SipAccount(betterproto.Message):
    """Sip-аккаунт"""

    account_id: str = betterproto.string_field(1)
    """ID Sip-аккаунта"""

    name: Optional[str] = betterproto.message_field(2, wraps=betterproto.TYPE_STRING)
    """Имя"""

    number: Optional[str] = betterproto.message_field(3, wraps=betterproto.TYPE_STRING)
    """Номер"""

    user: Optional[str] = betterproto.message_field(4, wraps=betterproto.TYPE_STRING)
    """Имя пользователя"""

    password: Optional[str] = betterproto.message_field(
        5, wraps=betterproto.TYPE_STRING
    )
    """
    Пароль. Не возвращается с сервера. TODO: в генерации сваггера не показывать
    INPUT_ONLY поля в ответах
    """

    reg_server_address: Optional[str] = betterproto.message_field(
        6, wraps=betterproto.TYPE_STRING
    )
    """
    Адрес REG-сервера. Сетевой адрес и порт. Пример: 192.168.0.1:5060,
    reg.acme.io:5060
    """

    sip_server_address: Optional[str] = betterproto.message_field(
        7, wraps=betterproto.TYPE_STRING
    )
    """
    Адрес SIP-сервера. Сетевой адрес и порт. Пример: 192.168.0.1:5060,
    sip.acme.io:5060
    """

    sip_proxy_address: Optional[str] = betterproto.message_field(
        8, wraps=betterproto.TYPE_STRING
    )
    """
    Адрес SIP-прокси. Сетевой адрес и порт. Пример: 192.168.0.1:5060,
    proxy.acme.io:5060
    """


@dataclass(eq=False, repr=False)
class EditSipTimeoutSettingsRequest(betterproto.Message):
    """
    Запрос редактирования настроек максимального времени общения и дозвона
    """

    data: "SipTimeoutSettings" = betterproto.message_field(1)
    """Настройки максимального времени общения и дозвона"""

    update_mask: "betterproto_lib_google_protobuf.FieldMask" = (
        betterproto.message_field(2)
    )
    """Маска полей обновления"""


@dataclass(eq=False, repr=False)
class GetSipTimeoutSettingsRequest(betterproto.Message):
    """Запрос получения настроек максимального времени общения и дозвона"""

    pass


@dataclass(eq=False, repr=False)
class GetSipTimeoutSettingsResponse(betterproto.Message):
    """
    Ответ на запрос получения настроек максимального времени общения и дозвона
    """

    data: "SipTimeoutSettings" = betterproto.message_field(1, group="type")
    """Настройки максимального времени общения и дозвона"""


@dataclass(eq=False, repr=False)
class EditSipAccountResponse(betterproto.Message):
    """Ответ на запрос редактирования Sip-аккаунта"""

    error: "EditSipAccountResponseError" = betterproto.message_field(1, group="type")
    """Ошибка"""


@dataclass(eq=False, repr=False)
class EditSipAccountResponseError(betterproto.Message):
    """Ошибка запроса редактирования Sip-аккаунта"""

    validation: "ValidationError" = betterproto.message_field(1, group="reason")
    """Ошибка валидации"""


@dataclass(eq=False, repr=False)
class SipTimeoutSettings(betterproto.Message):
    """Настройки максимального времени общения и дозвона"""

    call_timeout: int = betterproto.int32_field(1)
    """Максимальное время дозвона в секундах"""

    talk_timeout: int = betterproto.int32_field(2)
    """Максимальное время общения в секундах"""


@dataclass(eq=False, repr=False)
class EditSipTimeoutSettingsResponse(betterproto.Message):
    """
    Ответ на запрос редактирования настроек максимального времени общения и
    дозвона
    """

    error: "EditSipTimeoutSettingsResponseError" = betterproto.message_field(
        1, group="type"
    )
    """Ошибка"""


@dataclass(eq=False, repr=False)
class EditSipTimeoutSettingsResponseError(betterproto.Message):
    """
    Ошибка запроса редактирования настроек максимального времени общения и
    дозвона
    """

    validation: "ValidationError" = betterproto.message_field(1, group="reason")
    """Ошибка валидации"""


@dataclass(eq=False, repr=False)
class GetSipAccountStatusListRequest(betterproto.Message):
    """Запрос получения статусов регистрации Sip-аккаунтов"""

    pass


@dataclass(eq=False, repr=False)
class GetSipAccountStatusListResponse(betterproto.Message):
    """Ответ на запрос получения статусов регистрации Sip-аккаунтов"""

    data: List["GetSipAccountStatusListResponseSipStatus"] = betterproto.message_field(
        1
    )
    """Статус аккаунтов Sip"""


@dataclass(eq=False, repr=False)
class GetSipAccountStatusListResponseSipStatus(betterproto.Message):
    """Статус аккаунтов Sip"""

    sip_account_id: str = betterproto.string_field(1)
    """ID Sip-аккаунта"""

    state_type: "GetSipAccountStatusListResponseSipStatusStateType" = (
        betterproto.enum_field(2)
    )
    """Статус регистрации Sip"""

    last_attempt_register_at: int = betterproto.int32_field(3)
    """Дата последней попытки регистрации UnixTime"""


@dataclass(eq=False, repr=False)
class PostSafeCityEmergencyStopRequest(betterproto.Message):
    """Запрос на прекращение оповещения через домофон"""

    pass


@dataclass(eq=False, repr=False)
class PostSafeCityEmergencyStopResponse(betterproto.Message):
    """Ответ на запрос на прекращение оповещения через домофон"""

    pass


@dataclass(eq=False, repr=False)
class GetSafeCityEmergencyStatusRequest(betterproto.Message):
    """Запрос на получение статуса оповещения"""

    pass


@dataclass(eq=False, repr=False)
class GetSafeCityEmergencyStatusResponse(betterproto.Message):
    """Ответ на запрос на получение статуса оповещения"""

    data: "GetSafeCityEmergencyStatusResponseCurrentStatus" = betterproto.message_field(
        1
    )
    """Статус оповещения"""


@dataclass(eq=False, repr=False)
class GetSafeCityEmergencyStatusResponseCurrentStatus(betterproto.Message):
    """Статус оповещения"""

    is_running: bool = betterproto.bool_field(1)
    """Признак работающего оповещения в текущий момент"""

    emergency_scenario_play_order_type: "EmergencyScenarioPlayOrderType" = (
        betterproto.enum_field(2)
    )
    """Тип проигрывания"""

    file_name: str = betterproto.string_field(3)
    """Имя файла"""


@dataclass(eq=False, repr=False)
class EmergencyScenario(betterproto.Message):
    """Сценарий оповещения"""

    file_name: str = betterproto.string_field(1)
    """Имя файла"""

    total_duration: int = betterproto.int32_field(2)
    """
    Максимальная общая длительность оповещения, в секундах. # Диапазон:
    0..65536
    """

    playback_per_tick: int = betterproto.int32_field(3)
    """
    Количество воспроизведений файла в каждом цикле оповещения на одном
    направлении (трубка или динамик). # Диапазон: 0..65536
    """

    tick_count: int = betterproto.int32_field(4)
    """Количество воспроизведений циклов оповещения. # Диапазон: 0..65536"""

    play_order_type: "EmergencyScenarioPlayOrderType" = betterproto.enum_field(5)
    """Тип проигрывания"""


@dataclass(eq=False, repr=False)
class PostSafeCityEmergencyStartRequest(betterproto.Message):
    """Запрос на старт оповещения"""

    data: "EmergencyScenario" = betterproto.message_field(1)
    """Сценарий оповещения"""


@dataclass(eq=False, repr=False)
class PostSafeCityEmergencyStartResponse(betterproto.Message):
    """Ответ на запрос на старт оповещения"""

    error: "PostSafeCityEmergencyStartResponseError" = betterproto.message_field(
        1, group="type"
    )
    """Ошибка"""


@dataclass(eq=False, repr=False)
class PostSafeCityEmergencyStartResponseError(betterproto.Message):
    """Ошибка запроса"""

    validation: "ValidationError" = betterproto.message_field(1, group="reason")
    """Ошибка валидации"""

    sound_file_not_found: "PostSafeCityEmergencyStartResponseErrorSoundFileNotFound" = (
        betterproto.message_field(2, group="reason")
    )
    """Звуковой файл не найден"""


@dataclass(eq=False, repr=False)
class PostSafeCityEmergencyStartResponseErrorSoundFileNotFound(betterproto.Message):
    """Звуковой файл не найден"""

    pass


@dataclass(eq=False, repr=False)
class DeleteUserRequest(betterproto.Message):
    """Запрос удаления единичной сущности User по ключу"""

    username: str = betterproto.string_field(1)
    """Имя пользователя"""


@dataclass(eq=False, repr=False)
class DeleteUserResponse(betterproto.Message):
    """Ответ на запрос удаления единичной сущности User по ключу"""

    pass


@dataclass(eq=False, repr=False)
class GetUserListRequest(betterproto.Message):
    """Запрос получения списка сущностей User по фильтру"""

    pass


@dataclass(eq=False, repr=False)
class GetUserListResponse(betterproto.Message):
    """Ответ на запрос получения списка сущностей User по фильтру"""

    data: List["User"] = betterproto.message_field(1)
    """Список User"""


@dataclass(eq=False, repr=False)
class PostUserNameReplaceRequest(betterproto.Message):
    """Запрос замены имени пользователя"""

    username: str = betterproto.string_field(1)
    """Имя пользователя"""

    data: "PostUserNameReplaceRequestReplaceTo" = betterproto.message_field(2)
    """Поле на замену"""


@dataclass(eq=False, repr=False)
class PostUserNameReplaceRequestReplaceTo(betterproto.Message):
    """Поле на замену"""

    target_username: str = betterproto.string_field(1)
    """Имя пользователя"""


@dataclass(eq=False, repr=False)
class PostUserNameReplaceResponse(betterproto.Message):
    """Ответ на запрос замены имени пользователя"""

    pass


@dataclass(eq=False, repr=False)
class PostUserPasswordReplaceRequest(betterproto.Message):
    """Запрос замены пароля пользователя"""

    username: str = betterproto.string_field(1)
    """Имя пользователя"""

    data: "PostUserPasswordReplaceRequestReplaceTo" = betterproto.message_field(2)
    """Поле на замену"""


@dataclass(eq=False, repr=False)
class PostUserPasswordReplaceRequestReplaceTo(betterproto.Message):
    """Поле на замену"""

    password: str = betterproto.string_field(1)
    """Пароль"""


@dataclass(eq=False, repr=False)
class PostUserPasswordReplaceResponse(betterproto.Message):
    """Ответ на запрос замены пароля пользователя"""

    pass


@dataclass(eq=False, repr=False)
class PostUserPermissionReplaceRequest(betterproto.Message):
    """Запрос замены разрешений пользователя"""

    username: str = betterproto.string_field(1)
    """Имя пользователя"""

    data: "PostUserPermissionReplaceRequestReplaceTo" = betterproto.message_field(2)
    """Поле на замену"""


@dataclass(eq=False, repr=False)
class PostUserPermissionReplaceRequestReplaceTo(betterproto.Message):
    """Поле на замену"""

    permission: List["UserPermission"] = betterproto.message_field(1)
    """Права доступа"""


@dataclass(eq=False, repr=False)
class PostUserPermissionReplaceResponse(betterproto.Message):
    """Ответ на запрос замены разрешений пользователя"""

    pass


@dataclass(eq=False, repr=False)
class SaveUserRequest(betterproto.Message):
    """Запрос на создания/редактирование сущности User"""

    data: "User" = betterproto.message_field(1)
    """Пользователь"""


@dataclass(eq=False, repr=False)
class SaveUserResponse(betterproto.Message):
    """Ответ на запрос на создания/редактирование сущности User"""

    data: "User" = betterproto.message_field(1, group="type")
    """Пользователь"""


@dataclass(eq=False, repr=False)
class User(betterproto.Message):
    """Пользователь"""

    username: str = betterproto.string_field(1)
    """Имя пользователя"""

    password: str = betterproto.string_field(2)
    """
    Пароль. Не возвращается с сервера. TODO: в генерации сваггера не показывать
    INPUT_ONLY поля в ответах
    """

    permission: List["UserPermission"] = betterproto.message_field(3)
    """Права доступа"""


@dataclass(eq=False, repr=False)
class UserPermission(betterproto.Message):
    """Права доступа"""

    permission_name: str = betterproto.string_field(1)
    """Имя разрешения"""

    is_enabled: bool = betterproto.bool_field(2)
    """Наличие разрешения"""


@dataclass(eq=False, repr=False)
class EditFacerecRequest(betterproto.Message):
    """Запрос редактирования настроек Face Recognition"""

    data: "Facerec" = betterproto.message_field(1)
    """Настройки Face Recognition"""

    update_mask: "betterproto_lib_google_protobuf.FieldMask" = (
        betterproto.message_field(2)
    )
    """Маска полей обновления"""


@dataclass(eq=False, repr=False)
class EditFacerecResponse(betterproto.Message):
    """Ответ на запрос редактирования настроек Face Recognition"""

    error: "EditFacerecResponseError" = betterproto.message_field(1, group="type")
    """Ошибка"""


@dataclass(eq=False, repr=False)
class EditFacerecResponseError(betterproto.Message):
    """Ошибка запроса"""

    validation: "ValidationError" = betterproto.message_field(1, group="reason")
    """Ошибка валидации"""


@dataclass(eq=False, repr=False)
class Facerec(betterproto.Message):
    """Настройки Face Recognition"""

    is_enabled: bool = betterproto.bool_field(1)
    """Флаг включения Face Recognition"""

    main_address: str = betterproto.string_field(2)
    """Адрес"""

    alt_address: str = betterproto.string_field(3)
    """Альтернативный адрес"""

    request: str = betterproto.string_field(4)
    """Путь запроса к серверу"""

    authorization: str = betterproto.string_field(5)
    """Токен"""

    groups: List[str] = betterproto.string_field(6)
    """Идентификаторы групп профилей в identix"""

    relay_index: int = betterproto.int32_field(7)
    """Индекс реле. Диапазон: 1..32767"""

    send_interval: int = betterproto.int32_field(8)
    """Интервал отправки, миллисекунд"""

    face_liveness: float = betterproto.float_field(9)
    """Доступность FR"""

    min_face_size: int = betterproto.int32_field(10)
    """Минимальный размер лица, пикселей"""

    max_face_size: int = betterproto.int32_field(11)
    """Максимальный размер лица, пикселей"""

    add_size: int = betterproto.int32_field(12)
    """Добавление размера, процентов"""


@dataclass(eq=False, repr=False)
class GetFacerecRequest(betterproto.Message):
    """Запрос получения настроек Face Recognition"""

    pass


@dataclass(eq=False, repr=False)
class GetFacerecResponse(betterproto.Message):
    """Ответ на запрос получения настроек Face Recognition"""

    data: "Facerec" = betterproto.message_field(1, group="type")
    """Настройки Face Recognition"""


@dataclass(eq=False, repr=False)
class EditSyslogSettingsRequest(betterproto.Message):
    """Запрос редактирования настроек Syslog-сервера"""

    data: "SyslogSettings" = betterproto.message_field(1)
    """Настройки Syslog-сервера"""

    update_mask: "betterproto_lib_google_protobuf.FieldMask" = (
        betterproto.message_field(2)
    )
    """Маска полей обновления"""


@dataclass(eq=False, repr=False)
class EditSyslogSettingsResponse(betterproto.Message):
    """Ответ на запрос редактирования настроек Syslog-сервера"""

    data: "SyslogSettings" = betterproto.message_field(1, group="type")
    """Настройки Syslog-сервера"""

    error: "EditSyslogSettingsResponseError" = betterproto.message_field(
        2, group="type"
    )
    """Ошибка"""


@dataclass(eq=False, repr=False)
class EditSyslogSettingsResponseError(betterproto.Message):
    """Ошибка запроса"""

    validation: "ValidationError" = betterproto.message_field(1, group="reason")
    """Ошибка валидации"""


@dataclass(eq=False, repr=False)
class GetSyslogSettingsRequest(betterproto.Message):
    """Запрос получения настроек Syslog-сервера"""

    pass


@dataclass(eq=False, repr=False)
class GetSyslogSettingsResponse(betterproto.Message):
    """Ответ на запрос получения настроек Syslog-сервера"""

    data: "SyslogSettings" = betterproto.message_field(1, group="type")
    """Настройки Syslog-сервера"""


@dataclass(eq=False, repr=False)
class SyslogSettings(betterproto.Message):
    """Настройки Syslog-сервера"""

    protocol_type: "SyslogSettingsProtocolType" = betterproto.enum_field(1)
    """Тип протокола"""

    address: str = betterproto.string_field(2)
    """
    Адрес Syslog-сервера. Сетевой адрес и порт. Пример: 192.168.0.1:514,
    syslog.acme.io:6514
    """

    log_level_type: "SyslogSettingsLogLevelType" = betterproto.enum_field(3)
    """Уровень логирования"""


@dataclass(eq=False, repr=False)
class DeleteRoomListRequest(betterproto.Message):
    """Запрос удаления списка настроек квартиры"""

    filter: "RoomFilter" = betterproto.message_field(1)
    """
    Фильтр квартир. При передаче массива в параметр фильтра элементы массива
    работают в выборке через ИЛИ
    """


@dataclass(eq=False, repr=False)
class DeleteRoomListResponse(betterproto.Message):
    """Ответ на запрос удаления списка настроек квартиры"""

    data: int = betterproto.int32_field(1, group="type")
    """Всего количество удаленных"""

    error: "DeleteRoomListResponseError" = betterproto.message_field(2, group="type")
    """Ошибка"""


@dataclass(eq=False, repr=False)
class DeleteRoomListResponseError(betterproto.Message):
    """Ошибка запроса"""

    validation: "ValidationError" = betterproto.message_field(1, group="reason")
    """Ошибка валидации"""


@dataclass(eq=False, repr=False)
class DeleteRoomRequest(betterproto.Message):
    """Запрос удаления настроек квартиры"""

    room_number: str = betterproto.string_field(1)
    """Номер квартиры"""


@dataclass(eq=False, repr=False)
class DeleteRoomResponse(betterproto.Message):
    """Ответ на запрос удаления настроек квартиры"""

    error: "DeleteRoomResponseError" = betterproto.message_field(1, group="type")
    """Ошибка"""


@dataclass(eq=False, repr=False)
class DeleteRoomResponseError(betterproto.Message):
    """Ошибка запроса"""

    validation: "ValidationError" = betterproto.message_field(1, group="reason")
    """Ошибка валидации"""


@dataclass(eq=False, repr=False)
class GetRoomCountRequest(betterproto.Message):
    """Запрос получения количества квартир"""

    pass


@dataclass(eq=False, repr=False)
class GetRoomCountResponse(betterproto.Message):
    """Ответ на запрос получения количества квартир"""

    data: int = betterproto.int32_field(1, group="type")
    """Всего количество"""


@dataclass(eq=False, repr=False)
class GetRoomListRequest(betterproto.Message):
    """Запрос получения списка настроек квартир"""

    paging: "RoomPaging" = betterproto.message_field(1, group="pagination")
    """Постраничный вывод"""


@dataclass(eq=False, repr=False)
class GetRoomListResponse(betterproto.Message):
    """Ответ на запрос получения списка настроек квартир"""

    data: List["Room"] = betterproto.message_field(1)
    """Список Room"""


@dataclass(eq=False, repr=False)
class GetRoomRequest(betterproto.Message):
    """Запрос получения настроек квартиры"""

    room_number: str = betterproto.string_field(1)
    """Номер квартиры"""


@dataclass(eq=False, repr=False)
class GetRoomResponse(betterproto.Message):
    """Ответ на запрос получения настроек квартиры"""

    data: "Room" = betterproto.message_field(1, group="type")
    """Квартира"""


@dataclass(eq=False, repr=False)
class Room(betterproto.Message):
    """Квартира"""

    room_number: str = betterproto.string_field(1)
    """Номер квартиры"""

    sip_forwarding_number: str = betterproto.string_field(2)
    """Номер Sip-переадресации вызова. Диапазон: 5..200"""

    analog_phone_cms_number: str = betterproto.string_field(3, group="type")
    """
    Номер координатно-матричной аналоговой трубки. Где пример значения K1E9D8 -
    это К1 = коммутатор 1; Е9 = единицы 9; Д8 = десятки 8. Паттерн:
    /^[A-Za-z]\d[A-Za-z]\d[A-Za-z]\d$/
    """

    analog_phone_digital_number: int = betterproto.int32_field(4, group="type")
    """Номер цифровой трубки. Диапазон: 1..255"""

    is_analog_phone_blocked: bool = betterproto.bool_field(5)
    """
    Признак блокировки аналоговой (CMS) или адресно-цифровой (digital headset)
    трубки
    """


@dataclass(eq=False, repr=False)
class RoomFilter(betterproto.Message):
    """
    Фильтр квартир. При передаче массива в параметр фильтра элементы массива
    работают в выборке через ИЛИ
    """

    room_numbers: List[str] = betterproto.string_field(1)
    """По номерам квартир. При пустом массиве удалятся все квартиры"""


@dataclass(eq=False, repr=False)
class RoomPaging(betterproto.Message):
    """Постраничный вывод"""

    limit: int = betterproto.int32_field(1)
    """
    Количество записей на страницу. Если значение 0 (не передано), то будет
    взято значение по умолчанию. # Диапазон: 0..100. # По умолчанию: 20
    """

    offset: int = betterproto.int32_field(2)
    """Сдвиг. # Диапазон: 0..2147483647"""


@dataclass(eq=False, repr=False)
class SaveRoomListRequest(betterproto.Message):
    """Запрос сохранения списка настроек квартиры"""

    data: List["Room"] = betterproto.message_field(1)
    """Список Room"""


@dataclass(eq=False, repr=False)
class SaveRoomListResponse(betterproto.Message):
    """Ответ на запрос сохранения списка настроек квартиры"""

    data: List["Room"] = betterproto.message_field(1)
    """Список Room"""

    errors: List["SaveRoomListResponseError"] = betterproto.message_field(2)
    """Список ошибок"""


@dataclass(eq=False, repr=False)
class SaveRoomListResponseError(betterproto.Message):
    """Ошибка запроса"""

    room_number: str = betterproto.string_field(1)
    """Номер квартиры"""

    validation: "ValidationError" = betterproto.message_field(2, group="reason")
    """Ошибка валидации"""


@dataclass(eq=False, repr=False)
class SaveRoomRequest(betterproto.Message):
    """Запрос сохранения настроек квартиры"""

    data: "Room" = betterproto.message_field(1)
    """Квартира"""


@dataclass(eq=False, repr=False)
class SaveRoomResponse(betterproto.Message):
    """Ответ на запрос сохранения настроек квартиры"""

    data: "Room" = betterproto.message_field(1, group="type")
    """Квартира"""

    error: "SaveRoomResponseError" = betterproto.message_field(2, group="type")
    """Ошибка"""


@dataclass(eq=False, repr=False)
class SaveRoomResponseError(betterproto.Message):
    """Ошибка запроса"""

    validation: "ValidationError" = betterproto.message_field(1, group="reason")
    """Ошибка валидации"""


@dataclass(eq=False, repr=False)
class DeleteEncryptionProfileListRequest(betterproto.Message):
    """Запрос удаления списка сущностей EncryptionProfile по фильтру"""

    pass


@dataclass(eq=False, repr=False)
class DeleteEncryptionProfileListResponse(betterproto.Message):
    """
    Ответ на запрос удаления списка сущностей EncryptionProfile по фильтру
    """

    data: int = betterproto.int32_field(1, group="type")
    """Всего количество удаленных"""

    error: "DeleteEncryptionProfileListResponseError" = betterproto.message_field(
        2, group="type"
    )
    """Ошибка"""


@dataclass(eq=False, repr=False)
class DeleteEncryptionProfileListResponseError(betterproto.Message):
    """Ошибка запроса"""

    validation: "ValidationError" = betterproto.message_field(1, group="reason")
    """Ошибка валидации"""

    deleting: "EncryptionProfileDeletingError" = betterproto.message_field(
        2, group="reason"
    )
    """Ошибка удаления"""


@dataclass(eq=False, repr=False)
class DeleteEncryptionProfileRequest(betterproto.Message):
    """Запрос удаления единичной сущности EncryptionProfile по ключу"""

    id: str = betterproto.string_field(1)
    """Идентификатор. Тип: Guid"""


@dataclass(eq=False, repr=False)
class DeleteEncryptionProfileResponse(betterproto.Message):
    """
    Ответ на запрос удаления единичной сущности EncryptionProfile по ключу
    """

    data: int = betterproto.int32_field(1, group="type")
    """Всего количество удаленных"""

    error: "DeleteEncryptionProfileResponseError" = betterproto.message_field(
        2, group="type"
    )
    """Ошибка"""


@dataclass(eq=False, repr=False)
class DeleteEncryptionProfileResponseError(betterproto.Message):
    """Ошибка запроса"""

    validation: "ValidationError" = betterproto.message_field(1, group="reason")
    """Ошибка валидации"""

    deleting: "EncryptionProfileDeletingError" = betterproto.message_field(
        2, group="reason"
    )
    """Ошибка удаления"""


@dataclass(eq=False, repr=False)
class EncryptionProfile(betterproto.Message):
    """Профиль шифрования"""

    id: str = betterproto.string_field(1)
    """Идентификатор. Тип: Guid"""

    title: str = betterproto.string_field(2)
    """Наименование"""

    type: "EncryptionProfileType" = betterproto.enum_field(3)
    """Тип"""

    sector_number: int = betterproto.int32_field(4)
    """Номер сектора"""

    block_number: int = betterproto.int32_field(5)
    """Номер блока"""

    start_index: int = betterproto.int32_field(6)
    """Первый байт в блоке"""

    end_index: int = betterproto.int32_field(7)
    """Последний байт в блоке"""

    password: str = betterproto.string_field(8)
    """
    Пароль. Не возвращается с сервера. TODO: в генерации сваггера не показывать
    INPUT_ONLY поля в ответах
    """


@dataclass(eq=False, repr=False)
class EncryptionProfileDeletingError(betterproto.Message):
    """Ошибка удаления"""

    id: str = betterproto.string_field(1)
    """
    Идентификатор профиля шифрования, к которому относится ошибка. Тип: Guid
    """

    encryption_profile_in_use: (
        "EncryptionProfileDeletingErrorEncryptionProfileInUse"
    ) = betterproto.message_field(2, group="reason")
    """Профиль используется на устройстве"""


@dataclass(eq=False, repr=False)
class EncryptionProfileDeletingErrorEncryptionProfileInUse(betterproto.Message):
    """Профиль шифрования используется на устройстве"""

    pass


@dataclass(eq=False, repr=False)
class EncryptionProfileSavingError(betterproto.Message):
    """
    Ошибка сохранения. Эти проверки выполняются при работе с базой данных и
    сторонними сервисами
    """

    duplicate_name: "EncryptionProfileSavingErrorDuplicateName" = (
        betterproto.message_field(1, group="reason")
    )
    """Профиль с таким наименованием уже существует"""

    too_much_encryption_profiles: (
        "EncryptionProfileSavingErrorTooMuchEncryptionProfiles"
    ) = betterproto.message_field(2, group="reason")
    """Превышено допустимое количество профилей шифрования"""


@dataclass(eq=False, repr=False)
class EncryptionProfileSavingErrorDuplicateName(betterproto.Message):
    """Профиль с таким наименованием уже существует"""

    pass


@dataclass(eq=False, repr=False)
class EncryptionProfileSavingErrorTooMuchEncryptionProfiles(betterproto.Message):
    """Превышено допустимое количество профилей шифрования"""

    pass


@dataclass(eq=False, repr=False)
class EncryptionProfileFilter(betterproto.Message):
    """Фильтр по профилям шифрования"""

    text: Optional[str] = betterproto.message_field(1, wraps=betterproto.TYPE_STRING)
    """
    Поиск по тексту. Если значение не передано то поиск по нему не
    производится. Поиск производится по полям: # - Наименование
    """


@dataclass(eq=False, repr=False)
class GetEncryptionProfileListRequest(betterproto.Message):
    """Запрос получения списка сущностей EncryptionProfile по фильтру"""

    filter: "EncryptionProfileFilter" = betterproto.message_field(1)
    """Фильтр по профилям шифрования"""


@dataclass(eq=False, repr=False)
class GetEncryptionProfileListResponse(betterproto.Message):
    """
    Ответ на запрос получения списка сущностей EncryptionProfile по фильтру
    """

    data: List["EncryptionProfile"] = betterproto.message_field(1)
    """Список EncryptionProfile"""


@dataclass(eq=False, repr=False)
class GetEncryptionProfileRequest(betterproto.Message):
    """Запрос получения единичной сущности EncryptionProfile по ключу"""

    id: str = betterproto.string_field(1)
    """Идентификатор. Тип: Guid"""


@dataclass(eq=False, repr=False)
class GetEncryptionProfileResponse(betterproto.Message):
    """
    Ответ на запрос получения единичной сущности EncryptionProfile по ключу
    """

    data: "EncryptionProfile" = betterproto.message_field(1, group="type")
    """Профиль шифрования"""


@dataclass(eq=False, repr=False)
class SaveEncryptionProfileRequest(betterproto.Message):
    """Запрос на создание сущности EncryptionProfile"""

    data: "EncryptionProfile" = betterproto.message_field(1)
    """Профиль шифрования"""


@dataclass(eq=False, repr=False)
class SaveEncryptionProfileResponse(betterproto.Message):
    """Ответ на запрос на создание сущности EncryptionProfile"""

    data: "EncryptionProfile" = betterproto.message_field(1, group="type")
    """Профиль шифрования"""

    error: "SaveEncryptionProfileResponseError" = betterproto.message_field(
        2, group="type"
    )
    """Ошибка"""


@dataclass(eq=False, repr=False)
class SaveEncryptionProfileResponseError(betterproto.Message):
    """Ошибка запроса"""

    validation: "ValidationError" = betterproto.message_field(1, group="reason")
    """Ошибка валидации"""

    saving: "EncryptionProfileSavingError" = betterproto.message_field(
        2, group="reason"
    )
    """Ошибка сохранения"""


@dataclass(eq=False, repr=False)
class DtmfSettings(betterproto.Message):
    """Настройки DTMF"""

    is_rfc_on: bool = betterproto.bool_field(1)
    """Флаг приема DTMF сигнала в варианте RFC"""

    is_inbound_on: bool = betterproto.bool_field(2)
    """Флаг приема DTMF сигнала в варианте inbound"""

    is_sipinfo_on: bool = betterproto.bool_field(3)
    """Флаг приема DTMF сигнала в варианте sipinfo"""


@dataclass(eq=False, repr=False)
class EditDtmfSettingsRequest(betterproto.Message):
    """Запрос редактирования настроек DTMF"""

    data: "DtmfSettings" = betterproto.message_field(1)
    """Настройки DTMF"""

    update_mask: "betterproto_lib_google_protobuf.FieldMask" = (
        betterproto.message_field(2)
    )
    """Маска полей обновления"""


@dataclass(eq=False, repr=False)
class EditDtmfSettingsResponse(betterproto.Message):
    """Ответ на запрос редактирования настроек DTMF"""

    error: "EditDtmfSettingsResponseError" = betterproto.message_field(1, group="type")
    """Ошибка"""


@dataclass(eq=False, repr=False)
class EditDtmfSettingsResponseError(betterproto.Message):
    """Ошибка запроса"""

    validation: "ValidationError" = betterproto.message_field(1, group="reason")
    """Ошибка валидации"""


@dataclass(eq=False, repr=False)
class GetDtmfSettingsRequest(betterproto.Message):
    """Запрос получения настроек DTMF"""

    pass


@dataclass(eq=False, repr=False)
class GetDtmfSettingsResponse(betterproto.Message):
    """Ответ на запрос получения настроек DTMF"""

    data: "DtmfSettings" = betterproto.message_field(1, group="type")
    """Настройки DTMF"""


@dataclass(eq=False, repr=False)
class ConciergeSettings(betterproto.Message):
    """Настройки Concierge"""

    is_concierge_on: bool = betterproto.bool_field(1)
    """Флаг включения Concierge вызова"""

    sip_invite: str = betterproto.string_field(2)
    """
    Параметр SIP Invite для Concierge вызова. Произвольная строка которая
    передается в SIP сервер. Диапазон: 1..128
    """

    sip_server: str = betterproto.string_field(3)
    """
    Параметр SIP Server для Concierge вызова. При пустом sip_server будет
    использован сервер SIP регистрации
    """


@dataclass(eq=False, repr=False)
class EditConciergeSettingsRequest(betterproto.Message):
    """Запрос редактирования настроек Concierge"""

    data: "ConciergeSettings" = betterproto.message_field(1)
    """Настройки Concierge"""

    update_mask: "betterproto_lib_google_protobuf.FieldMask" = (
        betterproto.message_field(2)
    )
    """Маска полей обновления"""


@dataclass(eq=False, repr=False)
class EditConciergeSettingsResponse(betterproto.Message):
    """Ответ на запрос редактирования настроек Concierge"""

    data: "ConciergeSettings" = betterproto.message_field(1, group="type")
    """Настройки Concierge"""

    error: "EditConciergeSettingsResponseError" = betterproto.message_field(
        2, group="type"
    )
    """Ошибка"""


@dataclass(eq=False, repr=False)
class EditConciergeSettingsResponseError(betterproto.Message):
    """Ошибка запроса"""

    validation: "ValidationError" = betterproto.message_field(1, group="reason")
    """Ошибка валидации"""


@dataclass(eq=False, repr=False)
class GetConciergeSettingsRequest(betterproto.Message):
    """Запрос получения настроек Concierge"""

    pass


@dataclass(eq=False, repr=False)
class GetConciergeSettingsResponse(betterproto.Message):
    """Ответ на запрос получения настроек Concierge"""

    data: "ConciergeSettings" = betterproto.message_field(1, group="type")
    """Настройки Concierge"""


@dataclass(eq=False, repr=False)
class GetRtspRequest(betterproto.Message):
    """Запрос получения настроек RTSP"""

    pass


@dataclass(eq=False, repr=False)
class GetRtspResponse(betterproto.Message):
    """Ответ на запрос получения настроек RTSP"""

    data: "Rtsp" = betterproto.message_field(1, group="type")
    """Настройки RTSP"""


@dataclass(eq=False, repr=False)
class Rtsp(betterproto.Message):
    """Настройки RTSP"""

    is_rtsp_server_on: bool = betterproto.bool_field(1)
    """Флаг включения RTSP сервера"""


@dataclass(eq=False, repr=False)
class SaveRtspRequest(betterproto.Message):
    """Запрос редактирования настроек RTSP"""

    data: "Rtsp" = betterproto.message_field(1)
    """Настройки RTSP"""


@dataclass(eq=False, repr=False)
class SaveRtspResponse(betterproto.Message):
    """Ответ на запрос редактирования настроек RTSP"""

    data: "Rtsp" = betterproto.message_field(1, group="type")
    """Настройки RTSP"""

    error: "SaveRtspResponseError" = betterproto.message_field(2, group="type")
    """Ошибка"""


@dataclass(eq=False, repr=False)
class SaveRtspResponseError(betterproto.Message):
    """Ошибка запроса"""

    validation: "ValidationError" = betterproto.message_field(1, group="reason")
    """Ошибка валидации"""


@dataclass(eq=False, repr=False)
class EditSacRequest(betterproto.Message):
    """Запрос редактирования настроек Smart Auto Collect"""

    data: "Sac" = betterproto.message_field(1)
    """Настройки Smart Auto Collect"""

    update_mask: "betterproto_lib_google_protobuf.FieldMask" = (
        betterproto.message_field(2)
    )
    """Маска полей обновления"""


@dataclass(eq=False, repr=False)
class EditSacResponse(betterproto.Message):
    """Ответ на запрос редактирования настроек Smart Auto Collect"""

    data: "Sac" = betterproto.message_field(1, group="type")
    """Настройки Smart Auto Collect"""

    error: "EditSacResponseError" = betterproto.message_field(2, group="type")
    """Ошибка"""


@dataclass(eq=False, repr=False)
class EditSacResponseError(betterproto.Message):
    """Ошибка запроса"""

    validation: "ValidationError" = betterproto.message_field(1, group="reason")
    """Ошибка валидации"""


@dataclass(eq=False, repr=False)
class GetSacRequest(betterproto.Message):
    """Запрос получения настроек Smart Auto Collect"""

    pass


@dataclass(eq=False, repr=False)
class GetSacResponse(betterproto.Message):
    """Ответ на запрос получения настроек Smart Auto Collect"""

    data: "Sac" = betterproto.message_field(1, group="type")
    """Настройки Smart Auto Collect"""


@dataclass(eq=False, repr=False)
class Sac(betterproto.Message):
    """Настройки Smart Auto Collect"""

    is_sac_on: bool = betterproto.bool_field(1)
    """Флаг включения Smart Auto Collect"""

    min_flat_number: int = betterproto.int32_field(2)
    """Минимальный номер квартиры"""

    max_flat_number: int = betterproto.int32_field(3)
    """Максимальный номер квартиры"""

    key_mask: str = betterproto.string_field(4)
    """
    Маска UID RFID ключа. Пример 04**********80 = что означает, что uid ключа
    должен начинаться с 04, иметь 14 знаков и заканчиваться на 80. Пример
    ******** = что означает что uid ключа должен н иметь 8 знаков
    """


@dataclass(eq=False, repr=False)
class DeleteRfidListRequest(betterproto.Message):
    """Запрос удаления списка сущностей Rfid по фильтру"""

    pass


@dataclass(eq=False, repr=False)
class DeleteRfidListResponse(betterproto.Message):
    """Ответ на запрос удаления списка сущностей Rfid по фильтру"""

    data: int = betterproto.int32_field(1, group="type")
    """Всего количество удаленных"""


@dataclass(eq=False, repr=False)
class DeleteRfidRequest(betterproto.Message):
    """Запрос удаления единичной сущности Rfid по ключу"""

    id: str = betterproto.string_field(1)
    """Идентификатор UID [hex 14]"""


@dataclass(eq=False, repr=False)
class DeleteRfidResponse(betterproto.Message):
    """Ответ на запрос удаления единичной сущности Rfid по ключу"""

    error: "DeleteRfidResponseError" = betterproto.message_field(1, group="type")
    """Ошибка"""


@dataclass(eq=False, repr=False)
class DeleteRfidResponseError(betterproto.Message):
    """Ошибка запроса"""

    validation: "ValidationError" = betterproto.message_field(1, group="reason")
    """Ошибка валидации"""


@dataclass(eq=False, repr=False)
class GetRfidCountRequest(betterproto.Message):
    """Запрос получения количества сущностей Rfid по фильтру"""

    pass


@dataclass(eq=False, repr=False)
class GetRfidCountResponse(betterproto.Message):
    """Ответ на запрос получения количества сущностей Rfid по фильтру"""

    data: int = betterproto.int32_field(1, group="type")
    """Всего количество"""


@dataclass(eq=False, repr=False)
class GetRfidListRequest(betterproto.Message):
    """Запрос получения списка сущностей Rfid по фильтру"""

    paging: "RfidPaging" = betterproto.message_field(1, group="pagination")
    """Постраничный вывод"""


@dataclass(eq=False, repr=False)
class GetRfidListResponse(betterproto.Message):
    """Ответ на запрос получения списка сущностей Rfid по фильтру"""

    data: List["Rfid"] = betterproto.message_field(1)
    """Список Rfid"""


@dataclass(eq=False, repr=False)
class GetRfidRequest(betterproto.Message):
    """Запрос получения единичной сущности Rfid по ключу"""

    id: str = betterproto.string_field(1)
    """Идентификатор UID [hex 14]"""


@dataclass(eq=False, repr=False)
class GetRfidResponse(betterproto.Message):
    """Ответ на запрос получения единичной сущности Rfid по ключу"""

    data: "Rfid" = betterproto.message_field(1, group="type")
    """Ключ"""


@dataclass(eq=False, repr=False)
class Rfid(betterproto.Message):
    """Ключ"""

    id: str = betterproto.string_field(1)
    """Идентификатор UID [hex 14]"""

    description: Optional[str] = betterproto.message_field(
        2, wraps=betterproto.TYPE_STRING
    )
    """Описание"""

    secret: Optional[str] = betterproto.message_field(3, wraps=betterproto.TYPE_STRING)
    """Секрет [hex 14]"""

    relay_indexes: List[int] = betterproto.int32_field(4)
    """Идентификаторы реле. Диапазон: 1..64"""


@dataclass(eq=False, repr=False)
class RfidSavingError(betterproto.Message):
    """Ошибка запроса создания ключа"""

    relay_not_found: "RfidSavingErrorRelayNotFound" = betterproto.message_field(
        1, group="reason"
    )
    """Реле не найдено"""


@dataclass(eq=False, repr=False)
class RfidSavingErrorRelayNotFound(betterproto.Message):
    """Реле не найдено"""

    pass


@dataclass(eq=False, repr=False)
class RfidPaging(betterproto.Message):
    """Постраничный вывод"""

    limit: int = betterproto.int32_field(1)
    """
    Количество записей на страницу. Если значение 0 (не передано), то будет
    взято значение по умолчанию. # Диапазон: 0..100. # По умолчанию: 20
    """

    offset: int = betterproto.int32_field(2)
    """Сдвиг. # Диапазон: 0..2147483647"""


@dataclass(eq=False, repr=False)
class SaveRfidListRequest(betterproto.Message):
    """Запрос на редактирование списка сущностей Rfid"""

    data: List["Rfid"] = betterproto.message_field(1)
    """Список Rfid"""


@dataclass(eq=False, repr=False)
class SaveRfidListResponse(betterproto.Message):
    """Ответ на запрос на редактирование списка сущностей Rfid"""

    data: List["Rfid"] = betterproto.message_field(1)
    """Список Rfid"""

    errors: List["SaveRfidListResponseError"] = betterproto.message_field(2)
    """Список ошибок"""


@dataclass(eq=False, repr=False)
class SaveRfidListResponseError(betterproto.Message):
    """Ошибка запроса"""

    id: str = betterproto.string_field(1)
    """Идентификатор UID [hex 14]"""

    validation: "ValidationError" = betterproto.message_field(2, group="reason")
    """Ошибка валидации"""

    saving: "RfidSavingError" = betterproto.message_field(3, group="reason")
    """Ошибка сохранения"""


@dataclass(eq=False, repr=False)
class SaveRfidRequest(betterproto.Message):
    """Запрос на создания/редактирование сущности Rfid"""

    data: "Rfid" = betterproto.message_field(1)
    """Ключ"""


@dataclass(eq=False, repr=False)
class SaveRfidResponse(betterproto.Message):
    """Ответ на запрос на создания/редактирование сущности Rfid"""

    data: "Rfid" = betterproto.message_field(1, group="type")
    """Ключ"""

    error: "SaveRfidResponseError" = betterproto.message_field(2, group="type")
    """Ошибка"""


@dataclass(eq=False, repr=False)
class SaveRfidResponseError(betterproto.Message):
    """Ошибка запроса"""

    validation: "ValidationError" = betterproto.message_field(1, group="reason")
    """Ошибка валидации"""

    saving: "RfidSavingError" = betterproto.message_field(2, group="reason")
    """Ошибка сохранения"""


@dataclass(eq=False, repr=False)
class EditFtpRequest(betterproto.Message):
    """Запрос редактирования настроек FTP"""

    data: "Ftp" = betterproto.message_field(1)
    """Настройки FTP"""

    update_mask: "betterproto_lib_google_protobuf.FieldMask" = (
        betterproto.message_field(2)
    )
    """Маска полей обновления"""


@dataclass(eq=False, repr=False)
class EditFtpResponse(betterproto.Message):
    """Ответ на запрос редактирования настроек FTP"""

    data: "Ftp" = betterproto.message_field(1, group="type")
    """Настройки FTP"""

    error: "EditFtpResponseError" = betterproto.message_field(2, group="type")
    """Ошибка"""


@dataclass(eq=False, repr=False)
class EditFtpResponseError(betterproto.Message):
    """Ошибка запроса"""

    validation: "ValidationError" = betterproto.message_field(1, group="reason")
    """Ошибка валидации"""


@dataclass(eq=False, repr=False)
class Ftp(betterproto.Message):
    """Настройки FTP"""

    reg_server_address: str = betterproto.string_field(1)
    """
    Адрес FTP сервера. Сетевой адрес и порт. Пример: 192.168.0.1:21,
    ftp.acme.io:21
    """

    login: str = betterproto.string_field(2)
    """Логин"""

    password: str = betterproto.string_field(3)
    """
    Пароль. Не возвращается с сервера. TODO: в генерации сваггера не показывать
    INPUT_ONLY поля в ответах
    """


@dataclass(eq=False, repr=False)
class GetFtpRequest(betterproto.Message):
    """Запрос получения настроек FTP"""

    pass


@dataclass(eq=False, repr=False)
class GetFtpResponse(betterproto.Message):
    """Ответ на запрос получения настроек FTP"""

    data: "Ftp" = betterproto.message_field(1, group="type")
    """Настройки FTP"""


@dataclass(eq=False, repr=False)
class PostFtpBackupApplyRequest(betterproto.Message):
    """Запрос применения бекапа"""

    ftp_path: str = betterproto.string_field(1)
    """Имя FTP папки"""

    file_name: str = betterproto.string_field(2)
    """Имя файла бекапа"""

    restore_options: str = betterproto.string_field(3)
    """Опции восстановления"""


@dataclass(eq=False, repr=False)
class PostFtpBackupApplyResponse(betterproto.Message):
    """Ответ на запрос применения бекапа"""

    error: "PostFtpBackupApplyResponseError" = betterproto.message_field(
        1, group="type"
    )
    """Ошибка"""


@dataclass(eq=False, repr=False)
class PostFtpBackupApplyResponseError(betterproto.Message):
    """Ошибка запроса создания бекапа"""

    validation: "ValidationError" = betterproto.message_field(1, group="reason")
    """Ошибка валидации"""


@dataclass(eq=False, repr=False)
class PostFtpBackupRequest(betterproto.Message):
    """Запрос создания бекапа"""

    ftp_path: str = betterproto.string_field(1)
    """Имя FTP папки"""

    file_name: str = betterproto.string_field(2)
    """Имя файла бекапа"""

    backup_type: str = betterproto.string_field(3)
    """Тип бекапа"""


@dataclass(eq=False, repr=False)
class PostFtpBackupResponse(betterproto.Message):
    """Ответ на запрос создания бекапа"""

    error: "PostFtpBackupResponseError" = betterproto.message_field(1, group="type")
    """Ошибка"""


@dataclass(eq=False, repr=False)
class PostFtpBackupResponseError(betterproto.Message):
    """Ошибка запроса создания бекапа"""

    validation: "ValidationError" = betterproto.message_field(1, group="reason")
    """Ошибка валидации"""


@dataclass(eq=False, repr=False)
class DeleteSafeCityEmergencyFileRequest(betterproto.Message):
    """Запрос удаления единичной сущности SafeCityEmergencyFile по ключу"""

    file_name: str = betterproto.string_field(1)
    """Имя файла"""


@dataclass(eq=False, repr=False)
class DeleteSafeCityEmergencyFileResponse(betterproto.Message):
    """
    Ответ на запрос удаления единичной сущности SafeCityEmergencyFile по ключу
    """

    error: "DeleteSafeCityEmergencyFileResponseError" = betterproto.message_field(
        1, group="type"
    )
    """Ошибка"""


@dataclass(eq=False, repr=False)
class DeleteSafeCityEmergencyFileResponseError(betterproto.Message):
    """Ошибка запроса"""

    validation: "ValidationError" = betterproto.message_field(1, group="reason")
    """Ошибка валидации"""


@dataclass(eq=False, repr=False)
class GetSafeCityEmergencyFileListRequest(betterproto.Message):
    """Запрос получения списка файлов оповещения"""

    pass


@dataclass(eq=False, repr=False)
class GetSafeCityEmergencyFileListResponse(betterproto.Message):
    """Ответ на запрос получения списка файлов оповещения"""

    data: List["SafeCityEmergencyFile"] = betterproto.message_field(1)
    """Список SafeCityEmergencyFile"""


@dataclass(eq=False, repr=False)
class SafeCityEmergencyFile(betterproto.Message):
    """Файл оповещения"""

    file_name: str = betterproto.string_field(1)
    """Имя файла"""

    content: bytes = betterproto.bytes_field(2)
    """
    Тело файла, строка в кодировке Base64. Не возвращается с сервера. TODO: в
    генерации сваггера не показывать INPUT_ONLY поля в ответах
    """


@dataclass(eq=False, repr=False)
class SaveSafeCityEmergencyFileRequest(betterproto.Message):
    """Запрос загрузки файла на устройство"""

    data: "SafeCityEmergencyFile" = betterproto.message_field(1)
    """Файл оповещения"""


@dataclass(eq=False, repr=False)
class SaveSafeCityEmergencyFileResponse(betterproto.Message):
    """Ответ на запрос загрузки файла на устройство"""

    pass


@dataclass(eq=False, repr=False)
class EditNtpRequest(betterproto.Message):
    """Запрос редактирования настроек NTP"""

    data: "Ntp" = betterproto.message_field(1)
    """Настройки Ntp-сервера"""

    update_mask: "betterproto_lib_google_protobuf.FieldMask" = (
        betterproto.message_field(2)
    )
    """Маска полей обновления"""


@dataclass(eq=False, repr=False)
class EditNtpResponse(betterproto.Message):
    """Ответ на запрос редактирования настроек NTP"""

    error: "EditNtpResponseError" = betterproto.message_field(1, group="type")
    """Ошибка"""


@dataclass(eq=False, repr=False)
class EditNtpResponseError(betterproto.Message):
    """Ошибка запроса"""

    validation: "ValidationError" = betterproto.message_field(1, group="reason")
    """Ошибка валидации"""


@dataclass(eq=False, repr=False)
class GetNtpRequest(betterproto.Message):
    """Запрос получения настроек NTP"""

    pass


@dataclass(eq=False, repr=False)
class GetNtpResponse(betterproto.Message):
    """Ответ на запрос получения настроек NTP"""

    data: "Ntp" = betterproto.message_field(1, group="type")
    """Настройки Ntp-сервера"""


@dataclass(eq=False, repr=False)
class Ntp(betterproto.Message):
    """Настройки Ntp-сервера"""

    address: str = betterproto.string_field(1)
    """
    Адрес Ntp-сервера. Сетевой адрес и порт. Пример: 192.168.0.1:123,
    ntp.acme.io:4460
    """

    time_zone_type: "NtpTimeZoneType" = betterproto.enum_field(2)
    """Таймзона"""


@dataclass(eq=False, repr=False)
class EditVideoChannelRequest(betterproto.Message):
    """Запрос редактирования единичной сущности VideoChannel по ключу"""

    data: "VideoChannel" = betterproto.message_field(1)
    """Настройки видеоконфига"""

    update_mask: "betterproto_lib_google_protobuf.FieldMask" = (
        betterproto.message_field(2)
    )
    """Маска полей обновления"""


@dataclass(eq=False, repr=False)
class EditVideoChannelResponse(betterproto.Message):
    """
    Ответ на запрос редактирования единичной сущности VideoChannel по ключу
    """

    data: "VideoChannel" = betterproto.message_field(1, group="type")
    """Настройки видеоконфига"""

    error: "EditVideoChannelResponseError" = betterproto.message_field(2, group="type")
    """Ошибка"""


@dataclass(eq=False, repr=False)
class EditVideoChannelResponseError(betterproto.Message):
    """Ошибка запроса"""

    validation: "ValidationError" = betterproto.message_field(1, group="reason")
    """Ошибка валидации"""


@dataclass(eq=False, repr=False)
class GetVideoChannelListRequest(betterproto.Message):
    """Запрос получения списка сущностей VideoChannel по фильтру"""

    pass


@dataclass(eq=False, repr=False)
class GetVideoChannelListResponse(betterproto.Message):
    """Ответ на запрос получения списка сущностей VideoChannel по фильтру"""

    data: List["VideoChannel"] = betterproto.message_field(1)
    """Список VideoChannel"""


@dataclass(eq=False, repr=False)
class VideoChannel(betterproto.Message):
    """Настройки видеоконфига"""

    chanel_number: int = betterproto.int32_field(1)
    """Порядковый номер видеоконфига"""

    is_enabled: bool = betterproto.bool_field(2)
    """Флаг активности"""

    resolution_type: "VideoChannelResolutionType" = betterproto.enum_field(3)
    """Тип разрешения видео"""

    format_type: "VideoChannelFormatType" = betterproto.enum_field(4)
    """Формат видео"""

    profile_type: "VideoChannelProfileType" = betterproto.enum_field(5)
    """Профиль"""

    fps: int = betterproto.int32_field(6)
    """Частота кадров"""

    gop: int = betterproto.int32_field(7)
    """Периодичность опорного кадра"""

    flow_control_mode_type: "VideoChannelFlowControlModeType" = betterproto.enum_field(
        8
    )
    """Режим FlowControlModeType"""

    biterate: int = betterproto.int32_field(9)
    """Целевая скорость потока, килобит"""

    is_rtsp_audio: bool = betterproto.bool_field(10)
    """Флаг rtsp_audio"""

    is_used_for_sip: bool = betterproto.bool_field(11)
    """Флаг use for sip"""


@dataclass(eq=False, repr=False)
class PostUpdateDownloadRequest(betterproto.Message):
    """Запрос скачивания обновления"""

    ftp_path: str = betterproto.string_field(1)
    """Имя FTP папки"""

    file_name: str = betterproto.string_field(2)
    """Имя файла обновления"""

    update_mode: str = betterproto.string_field(3)
    """Режим обновления"""


@dataclass(eq=False, repr=False)
class PostUpdateDownloadResponse(betterproto.Message):
    """Ответ на запрос скачивания обновления"""

    error: "PostUpdateDownloadResponseError" = betterproto.message_field(
        1, group="type"
    )
    """Ошибка"""


@dataclass(eq=False, repr=False)
class PostUpdateDownloadResponseError(betterproto.Message):
    """Ошибка запроса"""

    validation: "ValidationError" = betterproto.message_field(1, group="reason")
    """Ошибка валидации"""


@dataclass(eq=False, repr=False)
class PostUpdateApplyRequest(betterproto.Message):
    """Запрос применения обновления"""

    pass


@dataclass(eq=False, repr=False)
class PostUpdateApplyResponse(betterproto.Message):
    """Ответ на запрос применения обновления"""

    pass


@dataclass(eq=False, repr=False)
class PostRelayCloseRequest(betterproto.Message):
    """Запрос закрытия реле"""

    relay_index: int = betterproto.int32_field(1)
    """Индекс реле. Диапазон: 1..32767"""


@dataclass(eq=False, repr=False)
class PostRelayCloseResponse(betterproto.Message):
    """Ответ на запрос закрытия реле"""

    error: "PostRelayCloseResponseError" = betterproto.message_field(1, group="type")
    """Ошибка"""


@dataclass(eq=False, repr=False)
class PostRelayCloseResponseError(betterproto.Message):
    """Ошибка запроса закрытия реле"""

    validation: "ValidationError" = betterproto.message_field(1, group="reason")
    """Ошибка валидации"""


@dataclass(eq=False, repr=False)
class PostRelayOpenPermanentlyRequest(betterproto.Message):
    """Запрос открытия реле без дальнейшего закрытия"""

    relay_index: int = betterproto.int32_field(1)
    """Индекс реле. Диапазон: 1..32767"""


@dataclass(eq=False, repr=False)
class PostRelayOpenPermanentlyResponse(betterproto.Message):
    """Ответ на запрос открытия реле без дальнейшего закрытия"""

    error: "PostRelayOpenPermanentlyResponseError" = betterproto.message_field(
        1, group="type"
    )
    """Ошибка"""


@dataclass(eq=False, repr=False)
class PostRelayOpenPermanentlyResponseError(betterproto.Message):
    """Ошибка запроса открытия реле без дальнейшего закрытия"""

    validation: "ValidationError" = betterproto.message_field(1, group="reason")
    """Ошибка валидации"""


@dataclass(eq=False, repr=False)
class PostRelayOpenRequest(betterproto.Message):
    """Запрос открытия реле"""

    relay_index: int = betterproto.int32_field(1)
    """Индекс реле. Диапазон: 1..32767"""

    current_open_time: int = betterproto.int32_field(2)
    """
    Задержка в секундах. Если не передано, используется установленное значение
    времени открытия из настроек. Диапазон: 1..200
    """


@dataclass(eq=False, repr=False)
class PostRelayOpenResponse(betterproto.Message):
    """Ответ на запрос открытия реле"""

    error: "PostRelayOpenResponseError" = betterproto.message_field(1, group="type")
    """Ошибка"""


@dataclass(eq=False, repr=False)
class PostRelayOpenResponseError(betterproto.Message):
    """Ошибка запроса открытия реле"""

    validation: "ValidationError" = betterproto.message_field(1, group="reason")
    """Ошибка валидации"""


@dataclass(eq=False, repr=False)
class EditRelayPropsOpenRequest(betterproto.Message):
    """Запрос редактирования настроек открытия реле"""

    data: "RelayOpen" = betterproto.message_field(1)
    """Настройки реле"""

    update_mask: "betterproto_lib_google_protobuf.FieldMask" = (
        betterproto.message_field(2)
    )
    """Маска полей обновления"""


@dataclass(eq=False, repr=False)
class EditRelayPropsDtmfRequest(betterproto.Message):
    """Запрос на установку настроек DTMF реле"""

    data: "RelayDtmf" = betterproto.message_field(1)
    """Настройки DTMF реле"""

    update_mask: "betterproto_lib_google_protobuf.FieldMask" = (
        betterproto.message_field(2)
    )
    """Маска полей обновления"""


@dataclass(eq=False, repr=False)
class EditRelayPropsOpenResponse(betterproto.Message):
    """Ответ на запрос на установку настроек открытия реле"""

    error: "EditRelayPropsOpenResponseError" = betterproto.message_field(
        1, group="type"
    )
    """Ошибка"""


@dataclass(eq=False, repr=False)
class EditRelayPropsOpenResponseError(betterproto.Message):
    """Ошибка запроса на установку настроек открытия реле"""

    validation: "ValidationError" = betterproto.message_field(1, group="reason")
    """Ошибка валидации"""


@dataclass(eq=False, repr=False)
class EditRelayPropsDtmfResponse(betterproto.Message):
    """Ответ на запрос на установку настроек DTMF"""

    error: "EditRelayPropsDtmfResponseError" = betterproto.message_field(
        1, group="type"
    )
    """Ошибка"""


@dataclass(eq=False, repr=False)
class EditRelayPropsDtmfResponseError(betterproto.Message):
    """Ошибка запроса на установку настроек DTMF"""

    validation: "ValidationError" = betterproto.message_field(1, group="reason")
    """Ошибка валидации"""


@dataclass(eq=False, repr=False)
class GetRelayStatusListRequest(betterproto.Message):
    """Запрос получения статусов реле устройства"""

    pass


@dataclass(eq=False, repr=False)
class RelayState(betterproto.Message):
    """Состояние реле"""

    relay_index: int = betterproto.int32_field(1)
    """Индекс реле. Диапазон: 1..32767"""

    state_type: "RelayStateStateType" = betterproto.enum_field(2)
    """Состояние"""


@dataclass(eq=False, repr=False)
class GetRelayStatusListResponse(betterproto.Message):
    """Ответ на запрос получения статусов реле устройства"""

    data: List["RelayState"] = betterproto.message_field(1)
    """Список состояний реле"""


@dataclass(eq=False, repr=False)
class GetRelayOpenListRequest(betterproto.Message):
    """Запрос получения настроек открытия реле"""

    pass


@dataclass(eq=False, repr=False)
class GetRelayDtmfListRequest(betterproto.Message):
    """Запрос получения настроек DTMF реле"""

    pass


@dataclass(eq=False, repr=False)
class RelayOpen(betterproto.Message):
    """Настройки открытия реле"""

    relay_index: int = betterproto.int32_field(1)
    """Индекс реле. Диапазон: 1..32767"""

    lock_type: "RelayOpenLockType" = betterproto.enum_field(2)
    """Тип замка"""

    open_time_general: int = betterproto.int32_field(3)
    """Общее время открытия. Диапазон: 1..200"""

    open_time_emergency: int = betterproto.int32_field(4)
    """
    Время открытия в секундах при экстренном оповещении. При 0 - до конца
    экстренного оповещения. Диапазон: 0..3600
    """


@dataclass(eq=False, repr=False)
class GetRelayOpenListResponse(betterproto.Message):
    """Ответ на запрос получения настроек открытия реле"""

    data: List["RelayOpen"] = betterproto.message_field(1)
    """Настройки открытия реле"""


@dataclass(eq=False, repr=False)
class RelayDtmf(betterproto.Message):
    """Настройки DTMF реле"""

    relay_index: int = betterproto.int32_field(1)
    """Индекс реле. Диапазон: 1..32767"""

    dtmf_code: str = betterproto.string_field(2)
    """
    DTMF код. Для разных реле допускается одинаковый DTMF код. Один символ из
    0,1,2,3,4,5,6,7,8,9,*,#
    """


@dataclass(eq=False, repr=False)
class GetRelayDtmfListResponse(betterproto.Message):
    """Ответ на запрос получения настроек DTMF реле"""

    data: List["RelayDtmf"] = betterproto.message_field(1)
    """Настройки DTMF реле"""


@dataclass(eq=False, repr=False)
class EditTickerRequest(betterproto.Message):
    """Запрос настройки Ticker"""

    data: "Ticker" = betterproto.message_field(1)
    """Настройки Ticker"""

    update_mask: "betterproto_lib_google_protobuf.FieldMask" = (
        betterproto.message_field(2)
    )
    """Маска полей обновления"""


@dataclass(eq=False, repr=False)
class EditTickerResponse(betterproto.Message):
    """Ответ на запрос настройки Ticker"""

    error: "EditTickerResponseError" = betterproto.message_field(1, group="type")
    """Ошибка"""


@dataclass(eq=False, repr=False)
class EditTickerResponseError(betterproto.Message):
    """Ошибка запроса"""

    validation: "ValidationError" = betterproto.message_field(1, group="reason")
    """Ошибка валидации"""


@dataclass(eq=False, repr=False)
class GetTickerRequest(betterproto.Message):
    """Запрос получения настроек Ticker"""

    pass


@dataclass(eq=False, repr=False)
class GetTickerResponse(betterproto.Message):
    """Ответ на апрос получения настроек Ticker"""

    data: "Ticker" = betterproto.message_field(1, group="type")
    """Настройки Ticker"""


@dataclass(eq=False, repr=False)
class Ticker(betterproto.Message):
    """Настройки Ticker"""

    mode_type: "TickerModeType" = betterproto.enum_field(1)
    """Режим строки"""

    speed: int = betterproto.int32_field(2)
    """Скорость, символов в минуту"""

    delay: int = betterproto.int32_field(3)
    """Задержка смены строки, секунд"""

    lines: List[str] = betterproto.string_field(4)
    """Строки"""


@dataclass(eq=False, repr=False)
class EditReaderRequest(betterproto.Message):
    """Запрос редактирования считывателя"""

    data: "Reader" = betterproto.message_field(1)
    """Считыватель"""

    update_mask: "betterproto_lib_google_protobuf.FieldMask" = (
        betterproto.message_field(2)
    )
    """Маска полей обновления"""


@dataclass(eq=False, repr=False)
class EditReaderResponse(betterproto.Message):
    """Ответ на запрос редактирования считывателя"""

    error: "EditReaderResponseError" = betterproto.message_field(1, group="type")
    """Ошибка"""


@dataclass(eq=False, repr=False)
class EditReaderResponseError(betterproto.Message):
    """Ошибка запроса"""

    validation: "ValidationError" = betterproto.message_field(1, group="reason")
    """Ошибка валидации"""

    saving: "ReaderSavingError" = betterproto.message_field(2, group="reason")
    """Ошибка сохранения"""


@dataclass(eq=False, repr=False)
class GetReaderRequest(betterproto.Message):
    """Запрос получения считывателя"""

    id: int = betterproto.int32_field(1)
    """
    Идентификатор. id=100 - Считыватель внутренний. id=1 - Считыватель внешний
    №1. id=2 - Считыватель внешний №2 и тд
    """


@dataclass(eq=False, repr=False)
class GetReaderResponse(betterproto.Message):
    """Ответ на запрос получения считывателя"""

    data: "Reader" = betterproto.message_field(1, group="type")
    """Считыватель"""


@dataclass(eq=False, repr=False)
class Reader(betterproto.Message):
    """Считыватель"""

    id: int = betterproto.int32_field(1)
    """
    Идентификатор. id=100 - Считыватель внутренний. id=1 - Считыватель внешний
    №1. id=2 - Считыватель внешний №2 и тд
    """

    encryption_profile_ids: List[int] = betterproto.int32_field(2)
    """Список идентификаторов профилей шифрования"""

    relay_indexes: List[int] = betterproto.int32_field(3)
    """Список идентификаторов реле. Диапазон: 1..64"""

    is_none_secure_mode: bool = betterproto.bool_field(4)
    """Считыватель работает не в безопасном режиме (по UID)"""

    direction_type: "ReaderDirectionType" = betterproto.enum_field(5)
    """Направление"""


@dataclass(eq=False, repr=False)
class ReaderSavingError(betterproto.Message):
    """Ошибки сохранения"""

    reader_not_found: "ReaderSavingErrorReaderNotFound" = betterproto.message_field(
        1, group="reason"
    )
    """Считыватель не найден"""

    profile_is_not_supported: "ReaderSavingErrorProfileIsNotSupported" = (
        betterproto.message_field(2, group="reason")
    )
    """Профиль не поддерживается для этого считывателя"""

    profile_not_found: "ReaderSavingErrorProfileNotFound" = betterproto.message_field(
        3, group="reason"
    )
    """Выбранный профиль не найден"""


@dataclass(eq=False, repr=False)
class ReaderSavingErrorProfileIsNotSupported(betterproto.Message):
    """Профиль не поддерживается для этого считывателя"""

    profile_ids: List[int] = betterproto.int32_field(1)
    """
    Список идентификаторов профилей, которые не поддерживаются на считывателе
    """


@dataclass(eq=False, repr=False)
class ReaderSavingErrorProfileNotFound(betterproto.Message):
    """Выбранный профиль не найден"""

    pass


@dataclass(eq=False, repr=False)
class ReaderSavingErrorReaderNotFound(betterproto.Message):
    """Считыватель не найден"""

    pass


@dataclass(eq=False, repr=False)
class GateMode(betterproto.Message):
    """Настройки Gate режима"""

    is_gate_mode_on: bool = betterproto.bool_field(1)
    """Флаг включения Gate режима. true=gate; false=ordinary"""

    houses: List["House"] = betterproto.message_field(2)
    """
    Дома Gate режима. При редактировании массив полностью заменяется на
    отправленный
    """


@dataclass(eq=False, repr=False)
class GetGateModeRequest(betterproto.Message):
    """Запрос получения Gate режима"""

    pass


@dataclass(eq=False, repr=False)
class GetGateModeResponse(betterproto.Message):
    """Ответ на запрос получения Gate режима"""

    data: "GateMode" = betterproto.message_field(1, group="type")
    """Настройки Gate режима"""


@dataclass(eq=False, repr=False)
class House(betterproto.Message):
    """Дом Gate режима"""

    address: str = betterproto.string_field(1)
    """Адрес дома"""

    prefix: str = betterproto.string_field(2)
    """Номер дома (подъезда)"""

    room_range: "HouseRoomRange" = betterproto.message_field(3)
    """
    Диапазон квартир. Если не задан, то устройство позволяет набор любой
    квартиры
    """

    sip_server: str = betterproto.string_field(4)
    """
    Адрес Sip сервера. При пустом sip_server будет использован сервер SIP
    регистрации
    """

    invite_template_type: "HouseInviteTemplateType" = betterproto.enum_field(5)
    """
    Вариант подстановки номера дома и квартиры в SIP Invite. При отсутствии
    значения используется вариант H4LZ_F4LZ
    """


@dataclass(eq=False, repr=False)
class HouseRoomRange(betterproto.Message):
    """Диапазон квартир"""

    first_room_number: str = betterproto.string_field(1)
    """Начало диапазона включительно"""

    last_room_number: str = betterproto.string_field(2)
    """Конец диапазона включительно"""


@dataclass(eq=False, repr=False)
class SaveGateModeRequest(betterproto.Message):
    """Запрос редактирования Gate режима"""

    data: "GateMode" = betterproto.message_field(1)
    """Настройки Gate режима"""


@dataclass(eq=False, repr=False)
class SaveGateModeResponse(betterproto.Message):
    """Ответ на запрос редактирования Gate режима"""

    data: "GateMode" = betterproto.message_field(1, group="type")
    """Настройки Gate режима"""

    error: "SaveGateModeResponseError" = betterproto.message_field(2, group="type")
    """Ошибка"""


@dataclass(eq=False, repr=False)
class SaveGateModeResponseError(betterproto.Message):
    """Ошибка запроса"""

    validation: "ValidationError" = betterproto.message_field(1, group="reason")
    """Ошибка валидации"""


class CapabilityServiceStub(betterproto.ServiceStub):
    async def get_capability_list(
        self,
        get_capability_list_request: "GetCapabilityListRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "GetCapabilityListResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.CapabilityService/GetCapabilityList",
            get_capability_list_request,
            GetCapabilityListResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )


class SystemServiceStub(betterproto.ServiceStub):
    async def post_system_reboot(
        self,
        post_system_reboot_request: "PostSystemRebootRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "PostSystemRebootResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.SystemService/PostSystemReboot",
            post_system_reboot_request,
            PostSystemRebootResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def get_system_info(
        self,
        get_system_info_request: "GetSystemInfoRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "GetSystemInfoResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.SystemService/GetSystemInfo",
            get_system_info_request,
            GetSystemInfoResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )


class CodeServiceStub(betterproto.ServiceStub):
    async def delete_code(
        self,
        delete_code_request: "DeleteCodeRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "DeleteCodeResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.CodeService/DeleteCode",
            delete_code_request,
            DeleteCodeResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def delete_code_list(
        self,
        delete_code_list_request: "DeleteCodeListRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "DeleteCodeListResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.CodeService/DeleteCodeList",
            delete_code_list_request,
            DeleteCodeListResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def get_code(
        self,
        get_code_request: "GetCodeRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "GetCodeResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.CodeService/GetCode",
            get_code_request,
            GetCodeResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def get_code_count(
        self,
        get_code_count_request: "GetCodeCountRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "GetCodeCountResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.CodeService/GetCodeCount",
            get_code_count_request,
            GetCodeCountResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def get_code_list(
        self,
        get_code_list_request: "GetCodeListRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "GetCodeListResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.CodeService/GetCodeList",
            get_code_list_request,
            GetCodeListResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def save_code(
        self,
        save_code_request: "SaveCodeRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "SaveCodeResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.CodeService/SaveCode",
            save_code_request,
            SaveCodeResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def save_code_list(
        self,
        save_code_list_request: "SaveCodeListRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "SaveCodeListResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.CodeService/SaveCodeList",
            save_code_list_request,
            SaveCodeListResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )


class SosServiceStub(betterproto.ServiceStub):
    async def edit_sos(
        self,
        edit_sos_request: "EditSosRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "EditSosResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.SosService/EditSos",
            edit_sos_request,
            EditSosResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def get_sos(
        self,
        get_sos_request: "GetSosRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "GetSosResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.SosService/GetSos",
            get_sos_request,
            GetSosResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )


class SafeCityOsdServiceStub(betterproto.ServiceStub):
    async def edit_safe_city_osd(
        self,
        edit_safe_city_osd_request: "EditSafeCityOsdRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "EditSafeCityOsdResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.SafeCityOsdService/EditSafeCityOsd",
            edit_safe_city_osd_request,
            EditSafeCityOsdResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def get_safe_city_osd(
        self,
        get_safe_city_osd_request: "GetSafeCityOsdRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "GetSafeCityOsdResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.SafeCityOsdService/GetSafeCityOsd",
            get_safe_city_osd_request,
            GetSafeCityOsdResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )


class SipServiceStub(betterproto.ServiceStub):
    async def edit_sip_account(
        self,
        edit_sip_account_request: "EditSipAccountRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "EditSipAccountResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.SipService/EditSipAccount",
            edit_sip_account_request,
            EditSipAccountResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def get_sip_account_list(
        self,
        get_sip_account_list_request: "GetSipAccountListRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "GetSipAccountListResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.SipService/GetSipAccountList",
            get_sip_account_list_request,
            GetSipAccountListResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def edit_sip_timeout_settings(
        self,
        edit_sip_timeout_settings_request: "EditSipTimeoutSettingsRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "EditSipTimeoutSettingsResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.SipService/EditSipTimeoutSettings",
            edit_sip_timeout_settings_request,
            EditSipTimeoutSettingsResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def get_sip_timeout_settings(
        self,
        get_sip_timeout_settings_request: "GetSipTimeoutSettingsRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "GetSipTimeoutSettingsResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.SipService/GetSipTimeoutSettings",
            get_sip_timeout_settings_request,
            GetSipTimeoutSettingsResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def get_sip_account_status_list(
        self,
        get_sip_account_status_list_request: "GetSipAccountStatusListRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "GetSipAccountStatusListResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.SipService/GetSipAccountStatusList",
            get_sip_account_status_list_request,
            GetSipAccountStatusListResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )


class SafeCityEmergencyServiceStub(betterproto.ServiceStub):
    async def post_safe_city_emergency_start(
        self,
        post_safe_city_emergency_start_request: "PostSafeCityEmergencyStartRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "PostSafeCityEmergencyStartResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.SafeCityEmergencyService/PostSafeCityEmergencyStart",
            post_safe_city_emergency_start_request,
            PostSafeCityEmergencyStartResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def post_safe_city_emergency_stop(
        self,
        post_safe_city_emergency_stop_request: "PostSafeCityEmergencyStopRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "PostSafeCityEmergencyStopResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.SafeCityEmergencyService/PostSafeCityEmergencyStop",
            post_safe_city_emergency_stop_request,
            PostSafeCityEmergencyStopResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def get_safe_city_emergency_status(
        self,
        get_safe_city_emergency_status_request: "GetSafeCityEmergencyStatusRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "GetSafeCityEmergencyStatusResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.SafeCityEmergencyService/GetSafeCityEmergencyStatus",
            get_safe_city_emergency_status_request,
            GetSafeCityEmergencyStatusResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )


class UserServiceStub(betterproto.ServiceStub):
    async def delete_user(
        self,
        delete_user_request: "DeleteUserRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "DeleteUserResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.UserService/DeleteUser",
            delete_user_request,
            DeleteUserResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def get_user_list(
        self,
        get_user_list_request: "GetUserListRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "GetUserListResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.UserService/GetUserList",
            get_user_list_request,
            GetUserListResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def post_user_name_replace(
        self,
        post_user_name_replace_request: "PostUserNameReplaceRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "PostUserNameReplaceResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.UserService/PostUserNameReplace",
            post_user_name_replace_request,
            PostUserNameReplaceResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def post_user_password_replace(
        self,
        post_user_password_replace_request: "PostUserPasswordReplaceRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "PostUserPasswordReplaceResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.UserService/PostUserPasswordReplace",
            post_user_password_replace_request,
            PostUserPasswordReplaceResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def post_user_permission_replace(
        self,
        post_user_permission_replace_request: "PostUserPermissionReplaceRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "PostUserPermissionReplaceResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.UserService/PostUserPermissionReplace",
            post_user_permission_replace_request,
            PostUserPermissionReplaceResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def save_user(
        self,
        save_user_request: "SaveUserRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "SaveUserResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.UserService/SaveUser",
            save_user_request,
            SaveUserResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )


class FacerecServiceStub(betterproto.ServiceStub):
    async def edit_facerec(
        self,
        edit_facerec_request: "EditFacerecRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "EditFacerecResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.FacerecService/EditFacerec",
            edit_facerec_request,
            EditFacerecResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def get_facerec(
        self,
        get_facerec_request: "GetFacerecRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "GetFacerecResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.FacerecService/GetFacerec",
            get_facerec_request,
            GetFacerecResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )


class SyslogSettingsServiceStub(betterproto.ServiceStub):
    async def edit_syslog_settings(
        self,
        edit_syslog_settings_request: "EditSyslogSettingsRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "EditSyslogSettingsResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.SyslogSettingsService/EditSyslogSettings",
            edit_syslog_settings_request,
            EditSyslogSettingsResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def get_syslog_settings(
        self,
        get_syslog_settings_request: "GetSyslogSettingsRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "GetSyslogSettingsResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.SyslogSettingsService/GetSyslogSettings",
            get_syslog_settings_request,
            GetSyslogSettingsResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )


class RoomServiceStub(betterproto.ServiceStub):
    async def delete_room(
        self,
        delete_room_request: "DeleteRoomRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "DeleteRoomResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.RoomService/DeleteRoom",
            delete_room_request,
            DeleteRoomResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def delete_room_list(
        self,
        delete_room_list_request: "DeleteRoomListRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "DeleteRoomListResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.RoomService/DeleteRoomList",
            delete_room_list_request,
            DeleteRoomListResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def get_room(
        self,
        get_room_request: "GetRoomRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "GetRoomResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.RoomService/GetRoom",
            get_room_request,
            GetRoomResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def get_room_count(
        self,
        get_room_count_request: "GetRoomCountRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "GetRoomCountResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.RoomService/GetRoomCount",
            get_room_count_request,
            GetRoomCountResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def get_room_list(
        self,
        get_room_list_request: "GetRoomListRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "GetRoomListResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.RoomService/GetRoomList",
            get_room_list_request,
            GetRoomListResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def save_room(
        self,
        save_room_request: "SaveRoomRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "SaveRoomResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.RoomService/SaveRoom",
            save_room_request,
            SaveRoomResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def save_room_list(
        self,
        save_room_list_request: "SaveRoomListRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "SaveRoomListResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.RoomService/SaveRoomList",
            save_room_list_request,
            SaveRoomListResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )


class EncryptionProfileServiceStub(betterproto.ServiceStub):
    async def delete_encryption_profile(
        self,
        delete_encryption_profile_request: "DeleteEncryptionProfileRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "DeleteEncryptionProfileResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.EncryptionProfileService/DeleteEncryptionProfile",
            delete_encryption_profile_request,
            DeleteEncryptionProfileResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def delete_encryption_profile_list(
        self,
        delete_encryption_profile_list_request: "DeleteEncryptionProfileListRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "DeleteEncryptionProfileListResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.EncryptionProfileService/DeleteEncryptionProfileList",
            delete_encryption_profile_list_request,
            DeleteEncryptionProfileListResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def get_encryption_profile(
        self,
        get_encryption_profile_request: "GetEncryptionProfileRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "GetEncryptionProfileResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.EncryptionProfileService/GetEncryptionProfile",
            get_encryption_profile_request,
            GetEncryptionProfileResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def get_encryption_profile_list(
        self,
        get_encryption_profile_list_request: "GetEncryptionProfileListRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "GetEncryptionProfileListResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.EncryptionProfileService/GetEncryptionProfileList",
            get_encryption_profile_list_request,
            GetEncryptionProfileListResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def save_encryption_profile(
        self,
        save_encryption_profile_request: "SaveEncryptionProfileRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "SaveEncryptionProfileResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.EncryptionProfileService/SaveEncryptionProfile",
            save_encryption_profile_request,
            SaveEncryptionProfileResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )


class DtmfSettingsServiceStub(betterproto.ServiceStub):
    async def edit_dtmf_settings(
        self,
        edit_dtmf_settings_request: "EditDtmfSettingsRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "EditDtmfSettingsResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.DtmfSettingsService/EditDtmfSettings",
            edit_dtmf_settings_request,
            EditDtmfSettingsResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def get_dtmf_settings(
        self,
        get_dtmf_settings_request: "GetDtmfSettingsRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "GetDtmfSettingsResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.DtmfSettingsService/GetDtmfSettings",
            get_dtmf_settings_request,
            GetDtmfSettingsResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )


class ConciergeSettingsServiceStub(betterproto.ServiceStub):
    async def edit_concierge_settings(
        self,
        edit_concierge_settings_request: "EditConciergeSettingsRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "EditConciergeSettingsResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.ConciergeSettingsService/EditConciergeSettings",
            edit_concierge_settings_request,
            EditConciergeSettingsResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def get_concierge_settings(
        self,
        get_concierge_settings_request: "GetConciergeSettingsRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "GetConciergeSettingsResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.ConciergeSettingsService/GetConciergeSettings",
            get_concierge_settings_request,
            GetConciergeSettingsResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )


class RtspServiceStub(betterproto.ServiceStub):
    async def get_rtsp(
        self,
        get_rtsp_request: "GetRtspRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "GetRtspResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.RtspService/GetRtsp",
            get_rtsp_request,
            GetRtspResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def save_rtsp(
        self,
        save_rtsp_request: "SaveRtspRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "SaveRtspResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.RtspService/SaveRtsp",
            save_rtsp_request,
            SaveRtspResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )


class SacServiceStub(betterproto.ServiceStub):
    async def edit_sac(
        self,
        edit_sac_request: "EditSacRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "EditSacResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.SacService/EditSac",
            edit_sac_request,
            EditSacResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def get_sac(
        self,
        get_sac_request: "GetSacRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "GetSacResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.SacService/GetSac",
            get_sac_request,
            GetSacResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )


class RfidServiceStub(betterproto.ServiceStub):
    async def delete_rfid(
        self,
        delete_rfid_request: "DeleteRfidRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "DeleteRfidResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.RfidService/DeleteRfid",
            delete_rfid_request,
            DeleteRfidResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def delete_rfid_list(
        self,
        delete_rfid_list_request: "DeleteRfidListRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "DeleteRfidListResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.RfidService/DeleteRfidList",
            delete_rfid_list_request,
            DeleteRfidListResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def get_rfid(
        self,
        get_rfid_request: "GetRfidRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "GetRfidResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.RfidService/GetRfid",
            get_rfid_request,
            GetRfidResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def get_rfid_count(
        self,
        get_rfid_count_request: "GetRfidCountRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "GetRfidCountResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.RfidService/GetRfidCount",
            get_rfid_count_request,
            GetRfidCountResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def get_rfid_list(
        self,
        get_rfid_list_request: "GetRfidListRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "GetRfidListResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.RfidService/GetRfidList",
            get_rfid_list_request,
            GetRfidListResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def save_rfid(
        self,
        save_rfid_request: "SaveRfidRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "SaveRfidResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.RfidService/SaveRfid",
            save_rfid_request,
            SaveRfidResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def save_rfid_list(
        self,
        save_rfid_list_request: "SaveRfidListRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "SaveRfidListResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.RfidService/SaveRfidList",
            save_rfid_list_request,
            SaveRfidListResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )


class FtpServiceStub(betterproto.ServiceStub):
    async def edit_ftp(
        self,
        edit_ftp_request: "EditFtpRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "EditFtpResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.FtpService/EditFtp",
            edit_ftp_request,
            EditFtpResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def get_ftp(
        self,
        get_ftp_request: "GetFtpRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "GetFtpResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.FtpService/GetFtp",
            get_ftp_request,
            GetFtpResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def post_ftp_backup(
        self,
        post_ftp_backup_request: "PostFtpBackupRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "PostFtpBackupResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.FtpService/PostFtpBackup",
            post_ftp_backup_request,
            PostFtpBackupResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def post_ftp_backup_apply(
        self,
        post_ftp_backup_apply_request: "PostFtpBackupApplyRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "PostFtpBackupApplyResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.FtpService/PostFtpBackupApply",
            post_ftp_backup_apply_request,
            PostFtpBackupApplyResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )


class SafeCityEmergencyFileServiceStub(betterproto.ServiceStub):
    async def delete_safe_city_emergency_file(
        self,
        delete_safe_city_emergency_file_request: "DeleteSafeCityEmergencyFileRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "DeleteSafeCityEmergencyFileResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.SafeCityEmergencyFileService/DeleteSafeCityEmergencyFile",
            delete_safe_city_emergency_file_request,
            DeleteSafeCityEmergencyFileResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def get_safe_city_emergency_file_list(
        self,
        get_safe_city_emergency_file_list_request: "GetSafeCityEmergencyFileListRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "GetSafeCityEmergencyFileListResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.SafeCityEmergencyFileService/GetSafeCityEmergencyFileList",
            get_safe_city_emergency_file_list_request,
            GetSafeCityEmergencyFileListResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def save_safe_city_emergency_file(
        self,
        save_safe_city_emergency_file_request: "SaveSafeCityEmergencyFileRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "SaveSafeCityEmergencyFileResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.SafeCityEmergencyFileService/SaveSafeCityEmergencyFile",
            save_safe_city_emergency_file_request,
            SaveSafeCityEmergencyFileResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )


class NtpServiceStub(betterproto.ServiceStub):
    async def edit_ntp(
        self,
        edit_ntp_request: "EditNtpRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "EditNtpResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.NtpService/EditNtp",
            edit_ntp_request,
            EditNtpResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def get_ntp(
        self,
        get_ntp_request: "GetNtpRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "GetNtpResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.NtpService/GetNtp",
            get_ntp_request,
            GetNtpResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )


class VideoChannelServiceStub(betterproto.ServiceStub):
    async def edit_video_channel(
        self,
        edit_video_channel_request: "EditVideoChannelRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "EditVideoChannelResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.VideoChannelService/EditVideoChannel",
            edit_video_channel_request,
            EditVideoChannelResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def get_video_channel_list(
        self,
        get_video_channel_list_request: "GetVideoChannelListRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "GetVideoChannelListResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.VideoChannelService/GetVideoChannelList",
            get_video_channel_list_request,
            GetVideoChannelListResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )


class UpdateServiceStub(betterproto.ServiceStub):
    async def post_update_download(
        self,
        post_update_download_request: "PostUpdateDownloadRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "PostUpdateDownloadResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.UpdateService/PostUpdateDownload",
            post_update_download_request,
            PostUpdateDownloadResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def post_update_apply(
        self,
        post_update_apply_request: "PostUpdateApplyRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "PostUpdateApplyResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.UpdateService/PostUpdateApply",
            post_update_apply_request,
            PostUpdateApplyResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )


class RelayServiceStub(betterproto.ServiceStub):
    async def post_relay_close(
        self,
        post_relay_close_request: "PostRelayCloseRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "PostRelayCloseResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.RelayService/PostRelayClose",
            post_relay_close_request,
            PostRelayCloseResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def post_relay_open(
        self,
        post_relay_open_request: "PostRelayOpenRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "PostRelayOpenResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.RelayService/PostRelayOpen",
            post_relay_open_request,
            PostRelayOpenResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def post_relay_open_permanently(
        self,
        post_relay_open_permanently_request: "PostRelayOpenPermanentlyRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "PostRelayOpenPermanentlyResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.RelayService/PostRelayOpenPermanently",
            post_relay_open_permanently_request,
            PostRelayOpenPermanentlyResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def edit_relay_props_open(
        self,
        edit_relay_props_open_request: "EditRelayPropsOpenRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "EditRelayPropsOpenResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.RelayService/EditRelayPropsOpen",
            edit_relay_props_open_request,
            EditRelayPropsOpenResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def get_relay_open_list(
        self,
        get_relay_open_list_request: "GetRelayOpenListRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "GetRelayOpenListResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.RelayService/GetRelayOpenList",
            get_relay_open_list_request,
            GetRelayOpenListResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def edit_relay_props_dtmf(
        self,
        edit_relay_props_dtmf_request: "EditRelayPropsDtmfRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "EditRelayPropsDtmfResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.RelayService/EditRelayPropsDtmf",
            edit_relay_props_dtmf_request,
            EditRelayPropsDtmfResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def get_relay_dtmf_list(
        self,
        get_relay_dtmf_list_request: "GetRelayDtmfListRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "GetRelayDtmfListResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.RelayService/GetRelayDtmfList",
            get_relay_dtmf_list_request,
            GetRelayDtmfListResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def get_relay_status_list(
        self,
        get_relay_status_list_request: "GetRelayStatusListRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "GetRelayStatusListResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.RelayService/GetRelayStatusList",
            get_relay_status_list_request,
            GetRelayStatusListResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )


class TickerServiceStub(betterproto.ServiceStub):
    async def edit_ticker(
        self,
        edit_ticker_request: "EditTickerRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "EditTickerResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.TickerService/EditTicker",
            edit_ticker_request,
            EditTickerResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def get_ticker(
        self,
        get_ticker_request: "GetTickerRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "GetTickerResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.TickerService/GetTicker",
            get_ticker_request,
            GetTickerResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )


class ReaderServiceStub(betterproto.ServiceStub):
    async def edit_reader(
        self,
        edit_reader_request: "EditReaderRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "EditReaderResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.ReaderService/EditReader",
            edit_reader_request,
            EditReaderResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def get_reader(
        self,
        get_reader_request: "GetReaderRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "GetReaderResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.ReaderService/GetReader",
            get_reader_request,
            GetReaderResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )


class GateModeServiceStub(betterproto.ServiceStub):
    async def get_gate_mode(
        self,
        get_gate_mode_request: "GetGateModeRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "GetGateModeResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.GateModeService/GetGateMode",
            get_gate_mode_request,
            GetGateModeResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def save_gate_mode(
        self,
        save_gate_mode_request: "SaveGateModeRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "SaveGateModeResponse":
        return await self._unary_unary(
            "/deviceapis.device.v1.GateModeService/SaveGateMode",
            save_gate_mode_request,
            SaveGateModeResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )


class CapabilityServiceBase(ServiceBase):

    async def get_capability_list(
        self, get_capability_list_request: "GetCapabilityListRequest"
    ) -> "GetCapabilityListResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def __rpc_get_capability_list(
        self,
        stream: "grpclib.server.Stream[GetCapabilityListRequest, GetCapabilityListResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.get_capability_list(request)
        await stream.send_message(response)

    def __mapping__(self) -> Dict[str, grpclib.const.Handler]:
        return {
            "/deviceapis.device.v1.CapabilityService/GetCapabilityList": grpclib.const.Handler(
                self.__rpc_get_capability_list,
                grpclib.const.Cardinality.UNARY_UNARY,
                GetCapabilityListRequest,
                GetCapabilityListResponse,
            ),
        }


class SystemServiceBase(ServiceBase):

    async def post_system_reboot(
        self, post_system_reboot_request: "PostSystemRebootRequest"
    ) -> "PostSystemRebootResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def get_system_info(
        self, get_system_info_request: "GetSystemInfoRequest"
    ) -> "GetSystemInfoResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def __rpc_post_system_reboot(
        self,
        stream: "grpclib.server.Stream[PostSystemRebootRequest, PostSystemRebootResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.post_system_reboot(request)
        await stream.send_message(response)

    async def __rpc_get_system_info(
        self,
        stream: "grpclib.server.Stream[GetSystemInfoRequest, GetSystemInfoResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.get_system_info(request)
        await stream.send_message(response)

    def __mapping__(self) -> Dict[str, grpclib.const.Handler]:
        return {
            "/deviceapis.device.v1.SystemService/PostSystemReboot": grpclib.const.Handler(
                self.__rpc_post_system_reboot,
                grpclib.const.Cardinality.UNARY_UNARY,
                PostSystemRebootRequest,
                PostSystemRebootResponse,
            ),
            "/deviceapis.device.v1.SystemService/GetSystemInfo": grpclib.const.Handler(
                self.__rpc_get_system_info,
                grpclib.const.Cardinality.UNARY_UNARY,
                GetSystemInfoRequest,
                GetSystemInfoResponse,
            ),
        }


class CodeServiceBase(ServiceBase):

    async def delete_code(
        self, delete_code_request: "DeleteCodeRequest"
    ) -> "DeleteCodeResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def delete_code_list(
        self, delete_code_list_request: "DeleteCodeListRequest"
    ) -> "DeleteCodeListResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def get_code(self, get_code_request: "GetCodeRequest") -> "GetCodeResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def get_code_count(
        self, get_code_count_request: "GetCodeCountRequest"
    ) -> "GetCodeCountResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def get_code_list(
        self, get_code_list_request: "GetCodeListRequest"
    ) -> "GetCodeListResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def save_code(
        self, save_code_request: "SaveCodeRequest"
    ) -> "SaveCodeResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def save_code_list(
        self, save_code_list_request: "SaveCodeListRequest"
    ) -> "SaveCodeListResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def __rpc_delete_code(
        self, stream: "grpclib.server.Stream[DeleteCodeRequest, DeleteCodeResponse]"
    ) -> None:
        request = await stream.recv_message()
        response = await self.delete_code(request)
        await stream.send_message(response)

    async def __rpc_delete_code_list(
        self,
        stream: "grpclib.server.Stream[DeleteCodeListRequest, DeleteCodeListResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.delete_code_list(request)
        await stream.send_message(response)

    async def __rpc_get_code(
        self, stream: "grpclib.server.Stream[GetCodeRequest, GetCodeResponse]"
    ) -> None:
        request = await stream.recv_message()
        response = await self.get_code(request)
        await stream.send_message(response)

    async def __rpc_get_code_count(
        self, stream: "grpclib.server.Stream[GetCodeCountRequest, GetCodeCountResponse]"
    ) -> None:
        request = await stream.recv_message()
        response = await self.get_code_count(request)
        await stream.send_message(response)

    async def __rpc_get_code_list(
        self, stream: "grpclib.server.Stream[GetCodeListRequest, GetCodeListResponse]"
    ) -> None:
        request = await stream.recv_message()
        response = await self.get_code_list(request)
        await stream.send_message(response)

    async def __rpc_save_code(
        self, stream: "grpclib.server.Stream[SaveCodeRequest, SaveCodeResponse]"
    ) -> None:
        request = await stream.recv_message()
        response = await self.save_code(request)
        await stream.send_message(response)

    async def __rpc_save_code_list(
        self, stream: "grpclib.server.Stream[SaveCodeListRequest, SaveCodeListResponse]"
    ) -> None:
        request = await stream.recv_message()
        response = await self.save_code_list(request)
        await stream.send_message(response)

    def __mapping__(self) -> Dict[str, grpclib.const.Handler]:
        return {
            "/deviceapis.device.v1.CodeService/DeleteCode": grpclib.const.Handler(
                self.__rpc_delete_code,
                grpclib.const.Cardinality.UNARY_UNARY,
                DeleteCodeRequest,
                DeleteCodeResponse,
            ),
            "/deviceapis.device.v1.CodeService/DeleteCodeList": grpclib.const.Handler(
                self.__rpc_delete_code_list,
                grpclib.const.Cardinality.UNARY_UNARY,
                DeleteCodeListRequest,
                DeleteCodeListResponse,
            ),
            "/deviceapis.device.v1.CodeService/GetCode": grpclib.const.Handler(
                self.__rpc_get_code,
                grpclib.const.Cardinality.UNARY_UNARY,
                GetCodeRequest,
                GetCodeResponse,
            ),
            "/deviceapis.device.v1.CodeService/GetCodeCount": grpclib.const.Handler(
                self.__rpc_get_code_count,
                grpclib.const.Cardinality.UNARY_UNARY,
                GetCodeCountRequest,
                GetCodeCountResponse,
            ),
            "/deviceapis.device.v1.CodeService/GetCodeList": grpclib.const.Handler(
                self.__rpc_get_code_list,
                grpclib.const.Cardinality.UNARY_UNARY,
                GetCodeListRequest,
                GetCodeListResponse,
            ),
            "/deviceapis.device.v1.CodeService/SaveCode": grpclib.const.Handler(
                self.__rpc_save_code,
                grpclib.const.Cardinality.UNARY_UNARY,
                SaveCodeRequest,
                SaveCodeResponse,
            ),
            "/deviceapis.device.v1.CodeService/SaveCodeList": grpclib.const.Handler(
                self.__rpc_save_code_list,
                grpclib.const.Cardinality.UNARY_UNARY,
                SaveCodeListRequest,
                SaveCodeListResponse,
            ),
        }


class SosServiceBase(ServiceBase):

    async def edit_sos(self, edit_sos_request: "EditSosRequest") -> "EditSosResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def get_sos(self, get_sos_request: "GetSosRequest") -> "GetSosResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def __rpc_edit_sos(
        self, stream: "grpclib.server.Stream[EditSosRequest, EditSosResponse]"
    ) -> None:
        request = await stream.recv_message()
        response = await self.edit_sos(request)
        await stream.send_message(response)

    async def __rpc_get_sos(
        self, stream: "grpclib.server.Stream[GetSosRequest, GetSosResponse]"
    ) -> None:
        request = await stream.recv_message()
        response = await self.get_sos(request)
        await stream.send_message(response)

    def __mapping__(self) -> Dict[str, grpclib.const.Handler]:
        return {
            "/deviceapis.device.v1.SosService/EditSos": grpclib.const.Handler(
                self.__rpc_edit_sos,
                grpclib.const.Cardinality.UNARY_UNARY,
                EditSosRequest,
                EditSosResponse,
            ),
            "/deviceapis.device.v1.SosService/GetSos": grpclib.const.Handler(
                self.__rpc_get_sos,
                grpclib.const.Cardinality.UNARY_UNARY,
                GetSosRequest,
                GetSosResponse,
            ),
        }


class SafeCityOsdServiceBase(ServiceBase):

    async def edit_safe_city_osd(
        self, edit_safe_city_osd_request: "EditSafeCityOsdRequest"
    ) -> "EditSafeCityOsdResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def get_safe_city_osd(
        self, get_safe_city_osd_request: "GetSafeCityOsdRequest"
    ) -> "GetSafeCityOsdResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def __rpc_edit_safe_city_osd(
        self,
        stream: "grpclib.server.Stream[EditSafeCityOsdRequest, EditSafeCityOsdResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.edit_safe_city_osd(request)
        await stream.send_message(response)

    async def __rpc_get_safe_city_osd(
        self,
        stream: "grpclib.server.Stream[GetSafeCityOsdRequest, GetSafeCityOsdResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.get_safe_city_osd(request)
        await stream.send_message(response)

    def __mapping__(self) -> Dict[str, grpclib.const.Handler]:
        return {
            "/deviceapis.device.v1.SafeCityOsdService/EditSafeCityOsd": grpclib.const.Handler(
                self.__rpc_edit_safe_city_osd,
                grpclib.const.Cardinality.UNARY_UNARY,
                EditSafeCityOsdRequest,
                EditSafeCityOsdResponse,
            ),
            "/deviceapis.device.v1.SafeCityOsdService/GetSafeCityOsd": grpclib.const.Handler(
                self.__rpc_get_safe_city_osd,
                grpclib.const.Cardinality.UNARY_UNARY,
                GetSafeCityOsdRequest,
                GetSafeCityOsdResponse,
            ),
        }


class SipServiceBase(ServiceBase):

    async def edit_sip_account(
        self, edit_sip_account_request: "EditSipAccountRequest"
    ) -> "EditSipAccountResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def get_sip_account_list(
        self, get_sip_account_list_request: "GetSipAccountListRequest"
    ) -> "GetSipAccountListResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def edit_sip_timeout_settings(
        self, edit_sip_timeout_settings_request: "EditSipTimeoutSettingsRequest"
    ) -> "EditSipTimeoutSettingsResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def get_sip_timeout_settings(
        self, get_sip_timeout_settings_request: "GetSipTimeoutSettingsRequest"
    ) -> "GetSipTimeoutSettingsResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def get_sip_account_status_list(
        self, get_sip_account_status_list_request: "GetSipAccountStatusListRequest"
    ) -> "GetSipAccountStatusListResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def __rpc_edit_sip_account(
        self,
        stream: "grpclib.server.Stream[EditSipAccountRequest, EditSipAccountResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.edit_sip_account(request)
        await stream.send_message(response)

    async def __rpc_get_sip_account_list(
        self,
        stream: "grpclib.server.Stream[GetSipAccountListRequest, GetSipAccountListResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.get_sip_account_list(request)
        await stream.send_message(response)

    async def __rpc_edit_sip_timeout_settings(
        self,
        stream: "grpclib.server.Stream[EditSipTimeoutSettingsRequest, EditSipTimeoutSettingsResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.edit_sip_timeout_settings(request)
        await stream.send_message(response)

    async def __rpc_get_sip_timeout_settings(
        self,
        stream: "grpclib.server.Stream[GetSipTimeoutSettingsRequest, GetSipTimeoutSettingsResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.get_sip_timeout_settings(request)
        await stream.send_message(response)

    async def __rpc_get_sip_account_status_list(
        self,
        stream: "grpclib.server.Stream[GetSipAccountStatusListRequest, GetSipAccountStatusListResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.get_sip_account_status_list(request)
        await stream.send_message(response)

    def __mapping__(self) -> Dict[str, grpclib.const.Handler]:
        return {
            "/deviceapis.device.v1.SipService/EditSipAccount": grpclib.const.Handler(
                self.__rpc_edit_sip_account,
                grpclib.const.Cardinality.UNARY_UNARY,
                EditSipAccountRequest,
                EditSipAccountResponse,
            ),
            "/deviceapis.device.v1.SipService/GetSipAccountList": grpclib.const.Handler(
                self.__rpc_get_sip_account_list,
                grpclib.const.Cardinality.UNARY_UNARY,
                GetSipAccountListRequest,
                GetSipAccountListResponse,
            ),
            "/deviceapis.device.v1.SipService/EditSipTimeoutSettings": grpclib.const.Handler(
                self.__rpc_edit_sip_timeout_settings,
                grpclib.const.Cardinality.UNARY_UNARY,
                EditSipTimeoutSettingsRequest,
                EditSipTimeoutSettingsResponse,
            ),
            "/deviceapis.device.v1.SipService/GetSipTimeoutSettings": grpclib.const.Handler(
                self.__rpc_get_sip_timeout_settings,
                grpclib.const.Cardinality.UNARY_UNARY,
                GetSipTimeoutSettingsRequest,
                GetSipTimeoutSettingsResponse,
            ),
            "/deviceapis.device.v1.SipService/GetSipAccountStatusList": grpclib.const.Handler(
                self.__rpc_get_sip_account_status_list,
                grpclib.const.Cardinality.UNARY_UNARY,
                GetSipAccountStatusListRequest,
                GetSipAccountStatusListResponse,
            ),
        }


class SafeCityEmergencyServiceBase(ServiceBase):

    async def post_safe_city_emergency_start(
        self,
        post_safe_city_emergency_start_request: "PostSafeCityEmergencyStartRequest",
    ) -> "PostSafeCityEmergencyStartResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def post_safe_city_emergency_stop(
        self, post_safe_city_emergency_stop_request: "PostSafeCityEmergencyStopRequest"
    ) -> "PostSafeCityEmergencyStopResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def get_safe_city_emergency_status(
        self,
        get_safe_city_emergency_status_request: "GetSafeCityEmergencyStatusRequest",
    ) -> "GetSafeCityEmergencyStatusResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def __rpc_post_safe_city_emergency_start(
        self,
        stream: "grpclib.server.Stream[PostSafeCityEmergencyStartRequest, PostSafeCityEmergencyStartResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.post_safe_city_emergency_start(request)
        await stream.send_message(response)

    async def __rpc_post_safe_city_emergency_stop(
        self,
        stream: "grpclib.server.Stream[PostSafeCityEmergencyStopRequest, PostSafeCityEmergencyStopResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.post_safe_city_emergency_stop(request)
        await stream.send_message(response)

    async def __rpc_get_safe_city_emergency_status(
        self,
        stream: "grpclib.server.Stream[GetSafeCityEmergencyStatusRequest, GetSafeCityEmergencyStatusResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.get_safe_city_emergency_status(request)
        await stream.send_message(response)

    def __mapping__(self) -> Dict[str, grpclib.const.Handler]:
        return {
            "/deviceapis.device.v1.SafeCityEmergencyService/PostSafeCityEmergencyStart": grpclib.const.Handler(
                self.__rpc_post_safe_city_emergency_start,
                grpclib.const.Cardinality.UNARY_UNARY,
                PostSafeCityEmergencyStartRequest,
                PostSafeCityEmergencyStartResponse,
            ),
            "/deviceapis.device.v1.SafeCityEmergencyService/PostSafeCityEmergencyStop": grpclib.const.Handler(
                self.__rpc_post_safe_city_emergency_stop,
                grpclib.const.Cardinality.UNARY_UNARY,
                PostSafeCityEmergencyStopRequest,
                PostSafeCityEmergencyStopResponse,
            ),
            "/deviceapis.device.v1.SafeCityEmergencyService/GetSafeCityEmergencyStatus": grpclib.const.Handler(
                self.__rpc_get_safe_city_emergency_status,
                grpclib.const.Cardinality.UNARY_UNARY,
                GetSafeCityEmergencyStatusRequest,
                GetSafeCityEmergencyStatusResponse,
            ),
        }


class UserServiceBase(ServiceBase):

    async def delete_user(
        self, delete_user_request: "DeleteUserRequest"
    ) -> "DeleteUserResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def get_user_list(
        self, get_user_list_request: "GetUserListRequest"
    ) -> "GetUserListResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def post_user_name_replace(
        self, post_user_name_replace_request: "PostUserNameReplaceRequest"
    ) -> "PostUserNameReplaceResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def post_user_password_replace(
        self, post_user_password_replace_request: "PostUserPasswordReplaceRequest"
    ) -> "PostUserPasswordReplaceResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def post_user_permission_replace(
        self, post_user_permission_replace_request: "PostUserPermissionReplaceRequest"
    ) -> "PostUserPermissionReplaceResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def save_user(
        self, save_user_request: "SaveUserRequest"
    ) -> "SaveUserResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def __rpc_delete_user(
        self, stream: "grpclib.server.Stream[DeleteUserRequest, DeleteUserResponse]"
    ) -> None:
        request = await stream.recv_message()
        response = await self.delete_user(request)
        await stream.send_message(response)

    async def __rpc_get_user_list(
        self, stream: "grpclib.server.Stream[GetUserListRequest, GetUserListResponse]"
    ) -> None:
        request = await stream.recv_message()
        response = await self.get_user_list(request)
        await stream.send_message(response)

    async def __rpc_post_user_name_replace(
        self,
        stream: "grpclib.server.Stream[PostUserNameReplaceRequest, PostUserNameReplaceResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.post_user_name_replace(request)
        await stream.send_message(response)

    async def __rpc_post_user_password_replace(
        self,
        stream: "grpclib.server.Stream[PostUserPasswordReplaceRequest, PostUserPasswordReplaceResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.post_user_password_replace(request)
        await stream.send_message(response)

    async def __rpc_post_user_permission_replace(
        self,
        stream: "grpclib.server.Stream[PostUserPermissionReplaceRequest, PostUserPermissionReplaceResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.post_user_permission_replace(request)
        await stream.send_message(response)

    async def __rpc_save_user(
        self, stream: "grpclib.server.Stream[SaveUserRequest, SaveUserResponse]"
    ) -> None:
        request = await stream.recv_message()
        response = await self.save_user(request)
        await stream.send_message(response)

    def __mapping__(self) -> Dict[str, grpclib.const.Handler]:
        return {
            "/deviceapis.device.v1.UserService/DeleteUser": grpclib.const.Handler(
                self.__rpc_delete_user,
                grpclib.const.Cardinality.UNARY_UNARY,
                DeleteUserRequest,
                DeleteUserResponse,
            ),
            "/deviceapis.device.v1.UserService/GetUserList": grpclib.const.Handler(
                self.__rpc_get_user_list,
                grpclib.const.Cardinality.UNARY_UNARY,
                GetUserListRequest,
                GetUserListResponse,
            ),
            "/deviceapis.device.v1.UserService/PostUserNameReplace": grpclib.const.Handler(
                self.__rpc_post_user_name_replace,
                grpclib.const.Cardinality.UNARY_UNARY,
                PostUserNameReplaceRequest,
                PostUserNameReplaceResponse,
            ),
            "/deviceapis.device.v1.UserService/PostUserPasswordReplace": grpclib.const.Handler(
                self.__rpc_post_user_password_replace,
                grpclib.const.Cardinality.UNARY_UNARY,
                PostUserPasswordReplaceRequest,
                PostUserPasswordReplaceResponse,
            ),
            "/deviceapis.device.v1.UserService/PostUserPermissionReplace": grpclib.const.Handler(
                self.__rpc_post_user_permission_replace,
                grpclib.const.Cardinality.UNARY_UNARY,
                PostUserPermissionReplaceRequest,
                PostUserPermissionReplaceResponse,
            ),
            "/deviceapis.device.v1.UserService/SaveUser": grpclib.const.Handler(
                self.__rpc_save_user,
                grpclib.const.Cardinality.UNARY_UNARY,
                SaveUserRequest,
                SaveUserResponse,
            ),
        }


class FacerecServiceBase(ServiceBase):

    async def edit_facerec(
        self, edit_facerec_request: "EditFacerecRequest"
    ) -> "EditFacerecResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def get_facerec(
        self, get_facerec_request: "GetFacerecRequest"
    ) -> "GetFacerecResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def __rpc_edit_facerec(
        self, stream: "grpclib.server.Stream[EditFacerecRequest, EditFacerecResponse]"
    ) -> None:
        request = await stream.recv_message()
        response = await self.edit_facerec(request)
        await stream.send_message(response)

    async def __rpc_get_facerec(
        self, stream: "grpclib.server.Stream[GetFacerecRequest, GetFacerecResponse]"
    ) -> None:
        request = await stream.recv_message()
        response = await self.get_facerec(request)
        await stream.send_message(response)

    def __mapping__(self) -> Dict[str, grpclib.const.Handler]:
        return {
            "/deviceapis.device.v1.FacerecService/EditFacerec": grpclib.const.Handler(
                self.__rpc_edit_facerec,
                grpclib.const.Cardinality.UNARY_UNARY,
                EditFacerecRequest,
                EditFacerecResponse,
            ),
            "/deviceapis.device.v1.FacerecService/GetFacerec": grpclib.const.Handler(
                self.__rpc_get_facerec,
                grpclib.const.Cardinality.UNARY_UNARY,
                GetFacerecRequest,
                GetFacerecResponse,
            ),
        }


class SyslogSettingsServiceBase(ServiceBase):

    async def edit_syslog_settings(
        self, edit_syslog_settings_request: "EditSyslogSettingsRequest"
    ) -> "EditSyslogSettingsResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def get_syslog_settings(
        self, get_syslog_settings_request: "GetSyslogSettingsRequest"
    ) -> "GetSyslogSettingsResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def __rpc_edit_syslog_settings(
        self,
        stream: "grpclib.server.Stream[EditSyslogSettingsRequest, EditSyslogSettingsResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.edit_syslog_settings(request)
        await stream.send_message(response)

    async def __rpc_get_syslog_settings(
        self,
        stream: "grpclib.server.Stream[GetSyslogSettingsRequest, GetSyslogSettingsResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.get_syslog_settings(request)
        await stream.send_message(response)

    def __mapping__(self) -> Dict[str, grpclib.const.Handler]:
        return {
            "/deviceapis.device.v1.SyslogSettingsService/EditSyslogSettings": grpclib.const.Handler(
                self.__rpc_edit_syslog_settings,
                grpclib.const.Cardinality.UNARY_UNARY,
                EditSyslogSettingsRequest,
                EditSyslogSettingsResponse,
            ),
            "/deviceapis.device.v1.SyslogSettingsService/GetSyslogSettings": grpclib.const.Handler(
                self.__rpc_get_syslog_settings,
                grpclib.const.Cardinality.UNARY_UNARY,
                GetSyslogSettingsRequest,
                GetSyslogSettingsResponse,
            ),
        }


class RoomServiceBase(ServiceBase):

    async def delete_room(
        self, delete_room_request: "DeleteRoomRequest"
    ) -> "DeleteRoomResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def delete_room_list(
        self, delete_room_list_request: "DeleteRoomListRequest"
    ) -> "DeleteRoomListResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def get_room(self, get_room_request: "GetRoomRequest") -> "GetRoomResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def get_room_count(
        self, get_room_count_request: "GetRoomCountRequest"
    ) -> "GetRoomCountResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def get_room_list(
        self, get_room_list_request: "GetRoomListRequest"
    ) -> "GetRoomListResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def save_room(
        self, save_room_request: "SaveRoomRequest"
    ) -> "SaveRoomResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def save_room_list(
        self, save_room_list_request: "SaveRoomListRequest"
    ) -> "SaveRoomListResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def __rpc_delete_room(
        self, stream: "grpclib.server.Stream[DeleteRoomRequest, DeleteRoomResponse]"
    ) -> None:
        request = await stream.recv_message()
        response = await self.delete_room(request)
        await stream.send_message(response)

    async def __rpc_delete_room_list(
        self,
        stream: "grpclib.server.Stream[DeleteRoomListRequest, DeleteRoomListResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.delete_room_list(request)
        await stream.send_message(response)

    async def __rpc_get_room(
        self, stream: "grpclib.server.Stream[GetRoomRequest, GetRoomResponse]"
    ) -> None:
        request = await stream.recv_message()
        response = await self.get_room(request)
        await stream.send_message(response)

    async def __rpc_get_room_count(
        self, stream: "grpclib.server.Stream[GetRoomCountRequest, GetRoomCountResponse]"
    ) -> None:
        request = await stream.recv_message()
        response = await self.get_room_count(request)
        await stream.send_message(response)

    async def __rpc_get_room_list(
        self, stream: "grpclib.server.Stream[GetRoomListRequest, GetRoomListResponse]"
    ) -> None:
        request = await stream.recv_message()
        response = await self.get_room_list(request)
        await stream.send_message(response)

    async def __rpc_save_room(
        self, stream: "grpclib.server.Stream[SaveRoomRequest, SaveRoomResponse]"
    ) -> None:
        request = await stream.recv_message()
        response = await self.save_room(request)
        await stream.send_message(response)

    async def __rpc_save_room_list(
        self, stream: "grpclib.server.Stream[SaveRoomListRequest, SaveRoomListResponse]"
    ) -> None:
        request = await stream.recv_message()
        response = await self.save_room_list(request)
        await stream.send_message(response)

    def __mapping__(self) -> Dict[str, grpclib.const.Handler]:
        return {
            "/deviceapis.device.v1.RoomService/DeleteRoom": grpclib.const.Handler(
                self.__rpc_delete_room,
                grpclib.const.Cardinality.UNARY_UNARY,
                DeleteRoomRequest,
                DeleteRoomResponse,
            ),
            "/deviceapis.device.v1.RoomService/DeleteRoomList": grpclib.const.Handler(
                self.__rpc_delete_room_list,
                grpclib.const.Cardinality.UNARY_UNARY,
                DeleteRoomListRequest,
                DeleteRoomListResponse,
            ),
            "/deviceapis.device.v1.RoomService/GetRoom": grpclib.const.Handler(
                self.__rpc_get_room,
                grpclib.const.Cardinality.UNARY_UNARY,
                GetRoomRequest,
                GetRoomResponse,
            ),
            "/deviceapis.device.v1.RoomService/GetRoomCount": grpclib.const.Handler(
                self.__rpc_get_room_count,
                grpclib.const.Cardinality.UNARY_UNARY,
                GetRoomCountRequest,
                GetRoomCountResponse,
            ),
            "/deviceapis.device.v1.RoomService/GetRoomList": grpclib.const.Handler(
                self.__rpc_get_room_list,
                grpclib.const.Cardinality.UNARY_UNARY,
                GetRoomListRequest,
                GetRoomListResponse,
            ),
            "/deviceapis.device.v1.RoomService/SaveRoom": grpclib.const.Handler(
                self.__rpc_save_room,
                grpclib.const.Cardinality.UNARY_UNARY,
                SaveRoomRequest,
                SaveRoomResponse,
            ),
            "/deviceapis.device.v1.RoomService/SaveRoomList": grpclib.const.Handler(
                self.__rpc_save_room_list,
                grpclib.const.Cardinality.UNARY_UNARY,
                SaveRoomListRequest,
                SaveRoomListResponse,
            ),
        }


class EncryptionProfileServiceBase(ServiceBase):

    async def delete_encryption_profile(
        self, delete_encryption_profile_request: "DeleteEncryptionProfileRequest"
    ) -> "DeleteEncryptionProfileResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def delete_encryption_profile_list(
        self,
        delete_encryption_profile_list_request: "DeleteEncryptionProfileListRequest",
    ) -> "DeleteEncryptionProfileListResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def get_encryption_profile(
        self, get_encryption_profile_request: "GetEncryptionProfileRequest"
    ) -> "GetEncryptionProfileResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def get_encryption_profile_list(
        self, get_encryption_profile_list_request: "GetEncryptionProfileListRequest"
    ) -> "GetEncryptionProfileListResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def save_encryption_profile(
        self, save_encryption_profile_request: "SaveEncryptionProfileRequest"
    ) -> "SaveEncryptionProfileResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def __rpc_delete_encryption_profile(
        self,
        stream: "grpclib.server.Stream[DeleteEncryptionProfileRequest, DeleteEncryptionProfileResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.delete_encryption_profile(request)
        await stream.send_message(response)

    async def __rpc_delete_encryption_profile_list(
        self,
        stream: "grpclib.server.Stream[DeleteEncryptionProfileListRequest, DeleteEncryptionProfileListResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.delete_encryption_profile_list(request)
        await stream.send_message(response)

    async def __rpc_get_encryption_profile(
        self,
        stream: "grpclib.server.Stream[GetEncryptionProfileRequest, GetEncryptionProfileResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.get_encryption_profile(request)
        await stream.send_message(response)

    async def __rpc_get_encryption_profile_list(
        self,
        stream: "grpclib.server.Stream[GetEncryptionProfileListRequest, GetEncryptionProfileListResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.get_encryption_profile_list(request)
        await stream.send_message(response)

    async def __rpc_save_encryption_profile(
        self,
        stream: "grpclib.server.Stream[SaveEncryptionProfileRequest, SaveEncryptionProfileResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.save_encryption_profile(request)
        await stream.send_message(response)

    def __mapping__(self) -> Dict[str, grpclib.const.Handler]:
        return {
            "/deviceapis.device.v1.EncryptionProfileService/DeleteEncryptionProfile": grpclib.const.Handler(
                self.__rpc_delete_encryption_profile,
                grpclib.const.Cardinality.UNARY_UNARY,
                DeleteEncryptionProfileRequest,
                DeleteEncryptionProfileResponse,
            ),
            "/deviceapis.device.v1.EncryptionProfileService/DeleteEncryptionProfileList": grpclib.const.Handler(
                self.__rpc_delete_encryption_profile_list,
                grpclib.const.Cardinality.UNARY_UNARY,
                DeleteEncryptionProfileListRequest,
                DeleteEncryptionProfileListResponse,
            ),
            "/deviceapis.device.v1.EncryptionProfileService/GetEncryptionProfile": grpclib.const.Handler(
                self.__rpc_get_encryption_profile,
                grpclib.const.Cardinality.UNARY_UNARY,
                GetEncryptionProfileRequest,
                GetEncryptionProfileResponse,
            ),
            "/deviceapis.device.v1.EncryptionProfileService/GetEncryptionProfileList": grpclib.const.Handler(
                self.__rpc_get_encryption_profile_list,
                grpclib.const.Cardinality.UNARY_UNARY,
                GetEncryptionProfileListRequest,
                GetEncryptionProfileListResponse,
            ),
            "/deviceapis.device.v1.EncryptionProfileService/SaveEncryptionProfile": grpclib.const.Handler(
                self.__rpc_save_encryption_profile,
                grpclib.const.Cardinality.UNARY_UNARY,
                SaveEncryptionProfileRequest,
                SaveEncryptionProfileResponse,
            ),
        }


class DtmfSettingsServiceBase(ServiceBase):

    async def edit_dtmf_settings(
        self, edit_dtmf_settings_request: "EditDtmfSettingsRequest"
    ) -> "EditDtmfSettingsResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def get_dtmf_settings(
        self, get_dtmf_settings_request: "GetDtmfSettingsRequest"
    ) -> "GetDtmfSettingsResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def __rpc_edit_dtmf_settings(
        self,
        stream: "grpclib.server.Stream[EditDtmfSettingsRequest, EditDtmfSettingsResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.edit_dtmf_settings(request)
        await stream.send_message(response)

    async def __rpc_get_dtmf_settings(
        self,
        stream: "grpclib.server.Stream[GetDtmfSettingsRequest, GetDtmfSettingsResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.get_dtmf_settings(request)
        await stream.send_message(response)

    def __mapping__(self) -> Dict[str, grpclib.const.Handler]:
        return {
            "/deviceapis.device.v1.DtmfSettingsService/EditDtmfSettings": grpclib.const.Handler(
                self.__rpc_edit_dtmf_settings,
                grpclib.const.Cardinality.UNARY_UNARY,
                EditDtmfSettingsRequest,
                EditDtmfSettingsResponse,
            ),
            "/deviceapis.device.v1.DtmfSettingsService/GetDtmfSettings": grpclib.const.Handler(
                self.__rpc_get_dtmf_settings,
                grpclib.const.Cardinality.UNARY_UNARY,
                GetDtmfSettingsRequest,
                GetDtmfSettingsResponse,
            ),
        }


class ConciergeSettingsServiceBase(ServiceBase):

    async def edit_concierge_settings(
        self, edit_concierge_settings_request: "EditConciergeSettingsRequest"
    ) -> "EditConciergeSettingsResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def get_concierge_settings(
        self, get_concierge_settings_request: "GetConciergeSettingsRequest"
    ) -> "GetConciergeSettingsResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def __rpc_edit_concierge_settings(
        self,
        stream: "grpclib.server.Stream[EditConciergeSettingsRequest, EditConciergeSettingsResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.edit_concierge_settings(request)
        await stream.send_message(response)

    async def __rpc_get_concierge_settings(
        self,
        stream: "grpclib.server.Stream[GetConciergeSettingsRequest, GetConciergeSettingsResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.get_concierge_settings(request)
        await stream.send_message(response)

    def __mapping__(self) -> Dict[str, grpclib.const.Handler]:
        return {
            "/deviceapis.device.v1.ConciergeSettingsService/EditConciergeSettings": grpclib.const.Handler(
                self.__rpc_edit_concierge_settings,
                grpclib.const.Cardinality.UNARY_UNARY,
                EditConciergeSettingsRequest,
                EditConciergeSettingsResponse,
            ),
            "/deviceapis.device.v1.ConciergeSettingsService/GetConciergeSettings": grpclib.const.Handler(
                self.__rpc_get_concierge_settings,
                grpclib.const.Cardinality.UNARY_UNARY,
                GetConciergeSettingsRequest,
                GetConciergeSettingsResponse,
            ),
        }


class RtspServiceBase(ServiceBase):

    async def get_rtsp(self, get_rtsp_request: "GetRtspRequest") -> "GetRtspResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def save_rtsp(
        self, save_rtsp_request: "SaveRtspRequest"
    ) -> "SaveRtspResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def __rpc_get_rtsp(
        self, stream: "grpclib.server.Stream[GetRtspRequest, GetRtspResponse]"
    ) -> None:
        request = await stream.recv_message()
        response = await self.get_rtsp(request)
        await stream.send_message(response)

    async def __rpc_save_rtsp(
        self, stream: "grpclib.server.Stream[SaveRtspRequest, SaveRtspResponse]"
    ) -> None:
        request = await stream.recv_message()
        response = await self.save_rtsp(request)
        await stream.send_message(response)

    def __mapping__(self) -> Dict[str, grpclib.const.Handler]:
        return {
            "/deviceapis.device.v1.RtspService/GetRtsp": grpclib.const.Handler(
                self.__rpc_get_rtsp,
                grpclib.const.Cardinality.UNARY_UNARY,
                GetRtspRequest,
                GetRtspResponse,
            ),
            "/deviceapis.device.v1.RtspService/SaveRtsp": grpclib.const.Handler(
                self.__rpc_save_rtsp,
                grpclib.const.Cardinality.UNARY_UNARY,
                SaveRtspRequest,
                SaveRtspResponse,
            ),
        }


class SacServiceBase(ServiceBase):

    async def edit_sac(self, edit_sac_request: "EditSacRequest") -> "EditSacResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def get_sac(self, get_sac_request: "GetSacRequest") -> "GetSacResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def __rpc_edit_sac(
        self, stream: "grpclib.server.Stream[EditSacRequest, EditSacResponse]"
    ) -> None:
        request = await stream.recv_message()
        response = await self.edit_sac(request)
        await stream.send_message(response)

    async def __rpc_get_sac(
        self, stream: "grpclib.server.Stream[GetSacRequest, GetSacResponse]"
    ) -> None:
        request = await stream.recv_message()
        response = await self.get_sac(request)
        await stream.send_message(response)

    def __mapping__(self) -> Dict[str, grpclib.const.Handler]:
        return {
            "/deviceapis.device.v1.SacService/EditSac": grpclib.const.Handler(
                self.__rpc_edit_sac,
                grpclib.const.Cardinality.UNARY_UNARY,
                EditSacRequest,
                EditSacResponse,
            ),
            "/deviceapis.device.v1.SacService/GetSac": grpclib.const.Handler(
                self.__rpc_get_sac,
                grpclib.const.Cardinality.UNARY_UNARY,
                GetSacRequest,
                GetSacResponse,
            ),
        }


class RfidServiceBase(ServiceBase):

    async def delete_rfid(
        self, delete_rfid_request: "DeleteRfidRequest"
    ) -> "DeleteRfidResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def delete_rfid_list(
        self, delete_rfid_list_request: "DeleteRfidListRequest"
    ) -> "DeleteRfidListResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def get_rfid(self, get_rfid_request: "GetRfidRequest") -> "GetRfidResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def get_rfid_count(
        self, get_rfid_count_request: "GetRfidCountRequest"
    ) -> "GetRfidCountResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def get_rfid_list(
        self, get_rfid_list_request: "GetRfidListRequest"
    ) -> "GetRfidListResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def save_rfid(
        self, save_rfid_request: "SaveRfidRequest"
    ) -> "SaveRfidResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def save_rfid_list(
        self, save_rfid_list_request: "SaveRfidListRequest"
    ) -> "SaveRfidListResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def __rpc_delete_rfid(
        self, stream: "grpclib.server.Stream[DeleteRfidRequest, DeleteRfidResponse]"
    ) -> None:
        request = await stream.recv_message()
        response = await self.delete_rfid(request)
        await stream.send_message(response)

    async def __rpc_delete_rfid_list(
        self,
        stream: "grpclib.server.Stream[DeleteRfidListRequest, DeleteRfidListResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.delete_rfid_list(request)
        await stream.send_message(response)

    async def __rpc_get_rfid(
        self, stream: "grpclib.server.Stream[GetRfidRequest, GetRfidResponse]"
    ) -> None:
        request = await stream.recv_message()
        response = await self.get_rfid(request)
        await stream.send_message(response)

    async def __rpc_get_rfid_count(
        self, stream: "grpclib.server.Stream[GetRfidCountRequest, GetRfidCountResponse]"
    ) -> None:
        request = await stream.recv_message()
        response = await self.get_rfid_count(request)
        await stream.send_message(response)

    async def __rpc_get_rfid_list(
        self, stream: "grpclib.server.Stream[GetRfidListRequest, GetRfidListResponse]"
    ) -> None:
        request = await stream.recv_message()
        response = await self.get_rfid_list(request)
        await stream.send_message(response)

    async def __rpc_save_rfid(
        self, stream: "grpclib.server.Stream[SaveRfidRequest, SaveRfidResponse]"
    ) -> None:
        request = await stream.recv_message()
        response = await self.save_rfid(request)
        await stream.send_message(response)

    async def __rpc_save_rfid_list(
        self, stream: "grpclib.server.Stream[SaveRfidListRequest, SaveRfidListResponse]"
    ) -> None:
        request = await stream.recv_message()
        response = await self.save_rfid_list(request)
        await stream.send_message(response)

    def __mapping__(self) -> Dict[str, grpclib.const.Handler]:
        return {
            "/deviceapis.device.v1.RfidService/DeleteRfid": grpclib.const.Handler(
                self.__rpc_delete_rfid,
                grpclib.const.Cardinality.UNARY_UNARY,
                DeleteRfidRequest,
                DeleteRfidResponse,
            ),
            "/deviceapis.device.v1.RfidService/DeleteRfidList": grpclib.const.Handler(
                self.__rpc_delete_rfid_list,
                grpclib.const.Cardinality.UNARY_UNARY,
                DeleteRfidListRequest,
                DeleteRfidListResponse,
            ),
            "/deviceapis.device.v1.RfidService/GetRfid": grpclib.const.Handler(
                self.__rpc_get_rfid,
                grpclib.const.Cardinality.UNARY_UNARY,
                GetRfidRequest,
                GetRfidResponse,
            ),
            "/deviceapis.device.v1.RfidService/GetRfidCount": grpclib.const.Handler(
                self.__rpc_get_rfid_count,
                grpclib.const.Cardinality.UNARY_UNARY,
                GetRfidCountRequest,
                GetRfidCountResponse,
            ),
            "/deviceapis.device.v1.RfidService/GetRfidList": grpclib.const.Handler(
                self.__rpc_get_rfid_list,
                grpclib.const.Cardinality.UNARY_UNARY,
                GetRfidListRequest,
                GetRfidListResponse,
            ),
            "/deviceapis.device.v1.RfidService/SaveRfid": grpclib.const.Handler(
                self.__rpc_save_rfid,
                grpclib.const.Cardinality.UNARY_UNARY,
                SaveRfidRequest,
                SaveRfidResponse,
            ),
            "/deviceapis.device.v1.RfidService/SaveRfidList": grpclib.const.Handler(
                self.__rpc_save_rfid_list,
                grpclib.const.Cardinality.UNARY_UNARY,
                SaveRfidListRequest,
                SaveRfidListResponse,
            ),
        }


class FtpServiceBase(ServiceBase):

    async def edit_ftp(self, edit_ftp_request: "EditFtpRequest") -> "EditFtpResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def get_ftp(self, get_ftp_request: "GetFtpRequest") -> "GetFtpResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def post_ftp_backup(
        self, post_ftp_backup_request: "PostFtpBackupRequest"
    ) -> "PostFtpBackupResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def post_ftp_backup_apply(
        self, post_ftp_backup_apply_request: "PostFtpBackupApplyRequest"
    ) -> "PostFtpBackupApplyResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def __rpc_edit_ftp(
        self, stream: "grpclib.server.Stream[EditFtpRequest, EditFtpResponse]"
    ) -> None:
        request = await stream.recv_message()
        response = await self.edit_ftp(request)
        await stream.send_message(response)

    async def __rpc_get_ftp(
        self, stream: "grpclib.server.Stream[GetFtpRequest, GetFtpResponse]"
    ) -> None:
        request = await stream.recv_message()
        response = await self.get_ftp(request)
        await stream.send_message(response)

    async def __rpc_post_ftp_backup(
        self,
        stream: "grpclib.server.Stream[PostFtpBackupRequest, PostFtpBackupResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.post_ftp_backup(request)
        await stream.send_message(response)

    async def __rpc_post_ftp_backup_apply(
        self,
        stream: "grpclib.server.Stream[PostFtpBackupApplyRequest, PostFtpBackupApplyResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.post_ftp_backup_apply(request)
        await stream.send_message(response)

    def __mapping__(self) -> Dict[str, grpclib.const.Handler]:
        return {
            "/deviceapis.device.v1.FtpService/EditFtp": grpclib.const.Handler(
                self.__rpc_edit_ftp,
                grpclib.const.Cardinality.UNARY_UNARY,
                EditFtpRequest,
                EditFtpResponse,
            ),
            "/deviceapis.device.v1.FtpService/GetFtp": grpclib.const.Handler(
                self.__rpc_get_ftp,
                grpclib.const.Cardinality.UNARY_UNARY,
                GetFtpRequest,
                GetFtpResponse,
            ),
            "/deviceapis.device.v1.FtpService/PostFtpBackup": grpclib.const.Handler(
                self.__rpc_post_ftp_backup,
                grpclib.const.Cardinality.UNARY_UNARY,
                PostFtpBackupRequest,
                PostFtpBackupResponse,
            ),
            "/deviceapis.device.v1.FtpService/PostFtpBackupApply": grpclib.const.Handler(
                self.__rpc_post_ftp_backup_apply,
                grpclib.const.Cardinality.UNARY_UNARY,
                PostFtpBackupApplyRequest,
                PostFtpBackupApplyResponse,
            ),
        }


class SafeCityEmergencyFileServiceBase(ServiceBase):

    async def delete_safe_city_emergency_file(
        self,
        delete_safe_city_emergency_file_request: "DeleteSafeCityEmergencyFileRequest",
    ) -> "DeleteSafeCityEmergencyFileResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def get_safe_city_emergency_file_list(
        self,
        get_safe_city_emergency_file_list_request: "GetSafeCityEmergencyFileListRequest",
    ) -> "GetSafeCityEmergencyFileListResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def save_safe_city_emergency_file(
        self, save_safe_city_emergency_file_request: "SaveSafeCityEmergencyFileRequest"
    ) -> "SaveSafeCityEmergencyFileResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def __rpc_delete_safe_city_emergency_file(
        self,
        stream: "grpclib.server.Stream[DeleteSafeCityEmergencyFileRequest, DeleteSafeCityEmergencyFileResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.delete_safe_city_emergency_file(request)
        await stream.send_message(response)

    async def __rpc_get_safe_city_emergency_file_list(
        self,
        stream: "grpclib.server.Stream[GetSafeCityEmergencyFileListRequest, GetSafeCityEmergencyFileListResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.get_safe_city_emergency_file_list(request)
        await stream.send_message(response)

    async def __rpc_save_safe_city_emergency_file(
        self,
        stream: "grpclib.server.Stream[SaveSafeCityEmergencyFileRequest, SaveSafeCityEmergencyFileResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.save_safe_city_emergency_file(request)
        await stream.send_message(response)

    def __mapping__(self) -> Dict[str, grpclib.const.Handler]:
        return {
            "/deviceapis.device.v1.SafeCityEmergencyFileService/DeleteSafeCityEmergencyFile": grpclib.const.Handler(
                self.__rpc_delete_safe_city_emergency_file,
                grpclib.const.Cardinality.UNARY_UNARY,
                DeleteSafeCityEmergencyFileRequest,
                DeleteSafeCityEmergencyFileResponse,
            ),
            "/deviceapis.device.v1.SafeCityEmergencyFileService/GetSafeCityEmergencyFileList": grpclib.const.Handler(
                self.__rpc_get_safe_city_emergency_file_list,
                grpclib.const.Cardinality.UNARY_UNARY,
                GetSafeCityEmergencyFileListRequest,
                GetSafeCityEmergencyFileListResponse,
            ),
            "/deviceapis.device.v1.SafeCityEmergencyFileService/SaveSafeCityEmergencyFile": grpclib.const.Handler(
                self.__rpc_save_safe_city_emergency_file,
                grpclib.const.Cardinality.UNARY_UNARY,
                SaveSafeCityEmergencyFileRequest,
                SaveSafeCityEmergencyFileResponse,
            ),
        }


class NtpServiceBase(ServiceBase):

    async def edit_ntp(self, edit_ntp_request: "EditNtpRequest") -> "EditNtpResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def get_ntp(self, get_ntp_request: "GetNtpRequest") -> "GetNtpResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def __rpc_edit_ntp(
        self, stream: "grpclib.server.Stream[EditNtpRequest, EditNtpResponse]"
    ) -> None:
        request = await stream.recv_message()
        response = await self.edit_ntp(request)
        await stream.send_message(response)

    async def __rpc_get_ntp(
        self, stream: "grpclib.server.Stream[GetNtpRequest, GetNtpResponse]"
    ) -> None:
        request = await stream.recv_message()
        response = await self.get_ntp(request)
        await stream.send_message(response)

    def __mapping__(self) -> Dict[str, grpclib.const.Handler]:
        return {
            "/deviceapis.device.v1.NtpService/EditNtp": grpclib.const.Handler(
                self.__rpc_edit_ntp,
                grpclib.const.Cardinality.UNARY_UNARY,
                EditNtpRequest,
                EditNtpResponse,
            ),
            "/deviceapis.device.v1.NtpService/GetNtp": grpclib.const.Handler(
                self.__rpc_get_ntp,
                grpclib.const.Cardinality.UNARY_UNARY,
                GetNtpRequest,
                GetNtpResponse,
            ),
        }


class VideoChannelServiceBase(ServiceBase):

    async def edit_video_channel(
        self, edit_video_channel_request: "EditVideoChannelRequest"
    ) -> "EditVideoChannelResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def get_video_channel_list(
        self, get_video_channel_list_request: "GetVideoChannelListRequest"
    ) -> "GetVideoChannelListResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def __rpc_edit_video_channel(
        self,
        stream: "grpclib.server.Stream[EditVideoChannelRequest, EditVideoChannelResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.edit_video_channel(request)
        await stream.send_message(response)

    async def __rpc_get_video_channel_list(
        self,
        stream: "grpclib.server.Stream[GetVideoChannelListRequest, GetVideoChannelListResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.get_video_channel_list(request)
        await stream.send_message(response)

    def __mapping__(self) -> Dict[str, grpclib.const.Handler]:
        return {
            "/deviceapis.device.v1.VideoChannelService/EditVideoChannel": grpclib.const.Handler(
                self.__rpc_edit_video_channel,
                grpclib.const.Cardinality.UNARY_UNARY,
                EditVideoChannelRequest,
                EditVideoChannelResponse,
            ),
            "/deviceapis.device.v1.VideoChannelService/GetVideoChannelList": grpclib.const.Handler(
                self.__rpc_get_video_channel_list,
                grpclib.const.Cardinality.UNARY_UNARY,
                GetVideoChannelListRequest,
                GetVideoChannelListResponse,
            ),
        }


class UpdateServiceBase(ServiceBase):

    async def post_update_download(
        self, post_update_download_request: "PostUpdateDownloadRequest"
    ) -> "PostUpdateDownloadResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def post_update_apply(
        self, post_update_apply_request: "PostUpdateApplyRequest"
    ) -> "PostUpdateApplyResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def __rpc_post_update_download(
        self,
        stream: "grpclib.server.Stream[PostUpdateDownloadRequest, PostUpdateDownloadResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.post_update_download(request)
        await stream.send_message(response)

    async def __rpc_post_update_apply(
        self,
        stream: "grpclib.server.Stream[PostUpdateApplyRequest, PostUpdateApplyResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.post_update_apply(request)
        await stream.send_message(response)

    def __mapping__(self) -> Dict[str, grpclib.const.Handler]:
        return {
            "/deviceapis.device.v1.UpdateService/PostUpdateDownload": grpclib.const.Handler(
                self.__rpc_post_update_download,
                grpclib.const.Cardinality.UNARY_UNARY,
                PostUpdateDownloadRequest,
                PostUpdateDownloadResponse,
            ),
            "/deviceapis.device.v1.UpdateService/PostUpdateApply": grpclib.const.Handler(
                self.__rpc_post_update_apply,
                grpclib.const.Cardinality.UNARY_UNARY,
                PostUpdateApplyRequest,
                PostUpdateApplyResponse,
            ),
        }


class RelayServiceBase(ServiceBase):

    async def post_relay_close(
        self, post_relay_close_request: "PostRelayCloseRequest"
    ) -> "PostRelayCloseResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def post_relay_open(
        self, post_relay_open_request: "PostRelayOpenRequest"
    ) -> "PostRelayOpenResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def post_relay_open_permanently(
        self, post_relay_open_permanently_request: "PostRelayOpenPermanentlyRequest"
    ) -> "PostRelayOpenPermanentlyResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def edit_relay_props_open(
        self, edit_relay_props_open_request: "EditRelayPropsOpenRequest"
    ) -> "EditRelayPropsOpenResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def get_relay_open_list(
        self, get_relay_open_list_request: "GetRelayOpenListRequest"
    ) -> "GetRelayOpenListResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def edit_relay_props_dtmf(
        self, edit_relay_props_dtmf_request: "EditRelayPropsDtmfRequest"
    ) -> "EditRelayPropsDtmfResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def get_relay_dtmf_list(
        self, get_relay_dtmf_list_request: "GetRelayDtmfListRequest"
    ) -> "GetRelayDtmfListResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def get_relay_status_list(
        self, get_relay_status_list_request: "GetRelayStatusListRequest"
    ) -> "GetRelayStatusListResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def __rpc_post_relay_close(
        self,
        stream: "grpclib.server.Stream[PostRelayCloseRequest, PostRelayCloseResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.post_relay_close(request)
        await stream.send_message(response)

    async def __rpc_post_relay_open(
        self,
        stream: "grpclib.server.Stream[PostRelayOpenRequest, PostRelayOpenResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.post_relay_open(request)
        await stream.send_message(response)

    async def __rpc_post_relay_open_permanently(
        self,
        stream: "grpclib.server.Stream[PostRelayOpenPermanentlyRequest, PostRelayOpenPermanentlyResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.post_relay_open_permanently(request)
        await stream.send_message(response)

    async def __rpc_edit_relay_props_open(
        self,
        stream: "grpclib.server.Stream[EditRelayPropsOpenRequest, EditRelayPropsOpenResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.edit_relay_props_open(request)
        await stream.send_message(response)

    async def __rpc_get_relay_open_list(
        self,
        stream: "grpclib.server.Stream[GetRelayOpenListRequest, GetRelayOpenListResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.get_relay_open_list(request)
        await stream.send_message(response)

    async def __rpc_edit_relay_props_dtmf(
        self,
        stream: "grpclib.server.Stream[EditRelayPropsDtmfRequest, EditRelayPropsDtmfResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.edit_relay_props_dtmf(request)
        await stream.send_message(response)

    async def __rpc_get_relay_dtmf_list(
        self,
        stream: "grpclib.server.Stream[GetRelayDtmfListRequest, GetRelayDtmfListResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.get_relay_dtmf_list(request)
        await stream.send_message(response)

    async def __rpc_get_relay_status_list(
        self,
        stream: "grpclib.server.Stream[GetRelayStatusListRequest, GetRelayStatusListResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.get_relay_status_list(request)
        await stream.send_message(response)

    def __mapping__(self) -> Dict[str, grpclib.const.Handler]:
        return {
            "/deviceapis.device.v1.RelayService/PostRelayClose": grpclib.const.Handler(
                self.__rpc_post_relay_close,
                grpclib.const.Cardinality.UNARY_UNARY,
                PostRelayCloseRequest,
                PostRelayCloseResponse,
            ),
            "/deviceapis.device.v1.RelayService/PostRelayOpen": grpclib.const.Handler(
                self.__rpc_post_relay_open,
                grpclib.const.Cardinality.UNARY_UNARY,
                PostRelayOpenRequest,
                PostRelayOpenResponse,
            ),
            "/deviceapis.device.v1.RelayService/PostRelayOpenPermanently": grpclib.const.Handler(
                self.__rpc_post_relay_open_permanently,
                grpclib.const.Cardinality.UNARY_UNARY,
                PostRelayOpenPermanentlyRequest,
                PostRelayOpenPermanentlyResponse,
            ),
            "/deviceapis.device.v1.RelayService/EditRelayPropsOpen": grpclib.const.Handler(
                self.__rpc_edit_relay_props_open,
                grpclib.const.Cardinality.UNARY_UNARY,
                EditRelayPropsOpenRequest,
                EditRelayPropsOpenResponse,
            ),
            "/deviceapis.device.v1.RelayService/GetRelayOpenList": grpclib.const.Handler(
                self.__rpc_get_relay_open_list,
                grpclib.const.Cardinality.UNARY_UNARY,
                GetRelayOpenListRequest,
                GetRelayOpenListResponse,
            ),
            "/deviceapis.device.v1.RelayService/EditRelayPropsDtmf": grpclib.const.Handler(
                self.__rpc_edit_relay_props_dtmf,
                grpclib.const.Cardinality.UNARY_UNARY,
                EditRelayPropsDtmfRequest,
                EditRelayPropsDtmfResponse,
            ),
            "/deviceapis.device.v1.RelayService/GetRelayDtmfList": grpclib.const.Handler(
                self.__rpc_get_relay_dtmf_list,
                grpclib.const.Cardinality.UNARY_UNARY,
                GetRelayDtmfListRequest,
                GetRelayDtmfListResponse,
            ),
            "/deviceapis.device.v1.RelayService/GetRelayStatusList": grpclib.const.Handler(
                self.__rpc_get_relay_status_list,
                grpclib.const.Cardinality.UNARY_UNARY,
                GetRelayStatusListRequest,
                GetRelayStatusListResponse,
            ),
        }


class TickerServiceBase(ServiceBase):

    async def edit_ticker(
        self, edit_ticker_request: "EditTickerRequest"
    ) -> "EditTickerResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def get_ticker(
        self, get_ticker_request: "GetTickerRequest"
    ) -> "GetTickerResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def __rpc_edit_ticker(
        self, stream: "grpclib.server.Stream[EditTickerRequest, EditTickerResponse]"
    ) -> None:
        request = await stream.recv_message()
        response = await self.edit_ticker(request)
        await stream.send_message(response)

    async def __rpc_get_ticker(
        self, stream: "grpclib.server.Stream[GetTickerRequest, GetTickerResponse]"
    ) -> None:
        request = await stream.recv_message()
        response = await self.get_ticker(request)
        await stream.send_message(response)

    def __mapping__(self) -> Dict[str, grpclib.const.Handler]:
        return {
            "/deviceapis.device.v1.TickerService/EditTicker": grpclib.const.Handler(
                self.__rpc_edit_ticker,
                grpclib.const.Cardinality.UNARY_UNARY,
                EditTickerRequest,
                EditTickerResponse,
            ),
            "/deviceapis.device.v1.TickerService/GetTicker": grpclib.const.Handler(
                self.__rpc_get_ticker,
                grpclib.const.Cardinality.UNARY_UNARY,
                GetTickerRequest,
                GetTickerResponse,
            ),
        }


class ReaderServiceBase(ServiceBase):

    async def edit_reader(
        self, edit_reader_request: "EditReaderRequest"
    ) -> "EditReaderResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def get_reader(
        self, get_reader_request: "GetReaderRequest"
    ) -> "GetReaderResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def __rpc_edit_reader(
        self, stream: "grpclib.server.Stream[EditReaderRequest, EditReaderResponse]"
    ) -> None:
        request = await stream.recv_message()
        response = await self.edit_reader(request)
        await stream.send_message(response)

    async def __rpc_get_reader(
        self, stream: "grpclib.server.Stream[GetReaderRequest, GetReaderResponse]"
    ) -> None:
        request = await stream.recv_message()
        response = await self.get_reader(request)
        await stream.send_message(response)

    def __mapping__(self) -> Dict[str, grpclib.const.Handler]:
        return {
            "/deviceapis.device.v1.ReaderService/EditReader": grpclib.const.Handler(
                self.__rpc_edit_reader,
                grpclib.const.Cardinality.UNARY_UNARY,
                EditReaderRequest,
                EditReaderResponse,
            ),
            "/deviceapis.device.v1.ReaderService/GetReader": grpclib.const.Handler(
                self.__rpc_get_reader,
                grpclib.const.Cardinality.UNARY_UNARY,
                GetReaderRequest,
                GetReaderResponse,
            ),
        }


class GateModeServiceBase(ServiceBase):

    async def get_gate_mode(
        self, get_gate_mode_request: "GetGateModeRequest"
    ) -> "GetGateModeResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def save_gate_mode(
        self, save_gate_mode_request: "SaveGateModeRequest"
    ) -> "SaveGateModeResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def __rpc_get_gate_mode(
        self, stream: "grpclib.server.Stream[GetGateModeRequest, GetGateModeResponse]"
    ) -> None:
        request = await stream.recv_message()
        response = await self.get_gate_mode(request)
        await stream.send_message(response)

    async def __rpc_save_gate_mode(
        self, stream: "grpclib.server.Stream[SaveGateModeRequest, SaveGateModeResponse]"
    ) -> None:
        request = await stream.recv_message()
        response = await self.save_gate_mode(request)
        await stream.send_message(response)

    def __mapping__(self) -> Dict[str, grpclib.const.Handler]:
        return {
            "/deviceapis.device.v1.GateModeService/GetGateMode": grpclib.const.Handler(
                self.__rpc_get_gate_mode,
                grpclib.const.Cardinality.UNARY_UNARY,
                GetGateModeRequest,
                GetGateModeResponse,
            ),
            "/deviceapis.device.v1.GateModeService/SaveGateMode": grpclib.const.Handler(
                self.__rpc_save_gate_mode,
                grpclib.const.Cardinality.UNARY_UNARY,
                SaveGateModeRequest,
                SaveGateModeResponse,
            ),
        }
