2022-07-02 16:00:54 +02:00
|
|
|
from enum import Enum
|
|
|
|
|
|
|
|
|
|
|
|
class NotificationType(str, Enum):
|
2022-12-16 21:39:18 +01:00
|
|
|
"""Enumerate notification types."""
|
|
|
|
|
2022-07-02 16:00:54 +02:00
|
|
|
ALERTA = "alerta"
|
2022-12-16 21:39:18 +01:00
|
|
|
"""Alerta"""
|
|
|
|
|
2022-07-02 16:00:54 +02:00
|
|
|
ALIYUNSMS = "AliyunSMS"
|
2022-12-16 21:39:18 +01:00
|
|
|
"""AliyunSMS"""
|
|
|
|
|
2022-07-02 16:00:54 +02:00
|
|
|
APPRISE = "apprise"
|
2022-12-16 21:39:18 +01:00
|
|
|
"""Apprise (Support 50+ Notification services)"""
|
|
|
|
|
2022-07-02 16:00:54 +02:00
|
|
|
CLICKSENDSMS = "clicksendsms"
|
2022-12-16 21:39:18 +01:00
|
|
|
"""ClickSend SMS"""
|
|
|
|
|
2022-07-02 16:00:54 +02:00
|
|
|
DINGDING = "DingDing"
|
2022-12-16 21:39:18 +01:00
|
|
|
"""DingDing"""
|
|
|
|
|
2022-07-02 16:00:54 +02:00
|
|
|
DISCORD = "discord"
|
2022-12-16 21:39:18 +01:00
|
|
|
"""Discord"""
|
|
|
|
|
2022-07-02 16:00:54 +02:00
|
|
|
FEISHU = "Feishu"
|
2022-12-16 21:39:18 +01:00
|
|
|
"""Feishu"""
|
|
|
|
|
2022-07-02 16:00:54 +02:00
|
|
|
GOOGLECHAT = "GoogleChat"
|
2022-12-16 21:39:18 +01:00
|
|
|
"""Google Chat (Google Workspace only)"""
|
|
|
|
|
2022-07-02 16:00:54 +02:00
|
|
|
GORUSH = "gorush"
|
2022-12-16 21:39:18 +01:00
|
|
|
"""Gorush"""
|
|
|
|
|
2022-07-02 16:00:54 +02:00
|
|
|
GOTIFY = "gotify"
|
2022-12-16 21:39:18 +01:00
|
|
|
"""Gotify"""
|
|
|
|
|
2022-07-02 16:00:54 +02:00
|
|
|
LINE = "line"
|
2022-12-16 21:39:18 +01:00
|
|
|
"""Line Messenger"""
|
|
|
|
|
2022-07-02 16:00:54 +02:00
|
|
|
LUNASEA = "lunasea"
|
2022-12-16 21:39:18 +01:00
|
|
|
"""LunaSea"""
|
|
|
|
|
2022-07-02 16:00:54 +02:00
|
|
|
MATRIX = "matrix"
|
2022-12-16 21:39:18 +01:00
|
|
|
"""Matrix"""
|
|
|
|
|
2022-07-02 16:00:54 +02:00
|
|
|
MATTERMOST = "mattermost"
|
2022-12-16 21:39:18 +01:00
|
|
|
"""Mattermost"""
|
|
|
|
|
2022-07-02 16:00:54 +02:00
|
|
|
ONEBOT = "OneBot"
|
2022-12-16 21:39:18 +01:00
|
|
|
"""OneBot"""
|
|
|
|
|
2022-07-02 16:00:54 +02:00
|
|
|
PAGERDUTY = "PagerDuty"
|
2022-12-16 21:39:18 +01:00
|
|
|
"""PagerDuty"""
|
|
|
|
|
2022-07-02 16:00:54 +02:00
|
|
|
PROMOSMS = "promosms"
|
2022-12-16 21:39:18 +01:00
|
|
|
"""PromoSMS"""
|
|
|
|
|
2022-07-02 16:00:54 +02:00
|
|
|
PUSHBULLET = "pushbullet"
|
2022-12-16 21:39:18 +01:00
|
|
|
"""Pushbullet"""
|
|
|
|
|
2022-07-02 16:00:54 +02:00
|
|
|
PUSHDEER = "PushDeer"
|
2022-12-16 21:39:18 +01:00
|
|
|
"""PushDeer"""
|
|
|
|
|
2022-07-02 16:00:54 +02:00
|
|
|
PUSHOVER = "pushover"
|
2022-12-16 21:39:18 +01:00
|
|
|
"""Pushover"""
|
|
|
|
|
2022-07-02 16:00:54 +02:00
|
|
|
PUSHY = "pushy"
|
2022-12-16 21:39:18 +01:00
|
|
|
"""Pushy"""
|
|
|
|
|
2022-07-02 16:00:54 +02:00
|
|
|
ROCKET_CHAT = "rocket.chat"
|
2022-12-16 21:39:18 +01:00
|
|
|
"""Rocket.Chat"""
|
|
|
|
|
2022-07-02 16:00:54 +02:00
|
|
|
SERWERSMS = "serwersms"
|
2022-12-16 21:39:18 +01:00
|
|
|
"""SerwerSMS.pl"""
|
|
|
|
|
2022-07-02 16:00:54 +02:00
|
|
|
SIGNAL = "signal"
|
2022-12-16 21:39:18 +01:00
|
|
|
"""Signal"""
|
|
|
|
|
2022-07-02 16:00:54 +02:00
|
|
|
SLACK = "slack"
|
2022-12-16 21:39:18 +01:00
|
|
|
"""Slack"""
|
|
|
|
|
2022-07-02 16:00:54 +02:00
|
|
|
SMTP = "smtp"
|
2022-12-16 21:39:18 +01:00
|
|
|
"""Email (SMTP)"""
|
|
|
|
|
2022-07-02 16:00:54 +02:00
|
|
|
STACKFIELD = "stackfield"
|
2022-12-16 21:39:18 +01:00
|
|
|
"""Stackfield"""
|
|
|
|
|
2022-07-02 16:00:54 +02:00
|
|
|
PUSHBYTECHULUS = "PushByTechulus"
|
2022-12-16 21:39:18 +01:00
|
|
|
"""Push by Techulus"""
|
|
|
|
|
2022-07-02 16:00:54 +02:00
|
|
|
TELEGRAM = "telegram"
|
2022-12-16 21:39:18 +01:00
|
|
|
"""Telegram"""
|
|
|
|
|
2022-07-02 16:00:54 +02:00
|
|
|
WEBHOOK = "webhook"
|
2022-12-16 21:39:18 +01:00
|
|
|
"""Webhook"""
|
|
|
|
|
2022-07-02 16:00:54 +02:00
|
|
|
WECOM = "WeCom"
|
2022-12-16 21:39:18 +01:00
|
|
|
"""WeCom"""
|
|
|
|
|
2022-09-07 13:03:10 +02:00
|
|
|
ALERTNOW = "AlertNow"
|
2022-12-16 21:39:18 +01:00
|
|
|
"""AlertNow"""
|
|
|
|
|
2022-09-07 13:03:10 +02:00
|
|
|
HOMEASSISTANT = "HomeAssistant"
|
2022-12-16 21:39:18 +01:00
|
|
|
"""Home Assistant"""
|
|
|
|
|
2022-09-07 13:03:10 +02:00
|
|
|
LINENOTIFY = "LineNotify"
|
2022-12-16 21:39:18 +01:00
|
|
|
"""LineNotify"""
|
|
|
|
|
2022-10-04 13:47:14 +02:00
|
|
|
BARK = "Bark"
|
2022-12-16 21:39:18 +01:00
|
|
|
"""Bark"""
|
|
|
|
|
2022-10-04 13:47:14 +02:00
|
|
|
GOALERT = "GoAlert"
|
2022-12-16 21:39:18 +01:00
|
|
|
"""GoAlert"""
|
|
|
|
|
2022-10-04 13:47:14 +02:00
|
|
|
OCTOPUSH = "octopush"
|
2022-12-16 21:39:18 +01:00
|
|
|
"""Octopush"""
|
|
|
|
|
2022-10-04 13:47:14 +02:00
|
|
|
SERVERCHAN = "ServerChan"
|
2022-12-16 21:39:18 +01:00
|
|
|
"""ServerChan"""
|
|
|
|
|
2022-10-04 13:47:14 +02:00
|
|
|
SMSMANAGER = "SMSManager"
|
2022-12-16 21:39:18 +01:00
|
|
|
"""SMSManager"""
|
|
|
|
|
2022-10-04 13:47:14 +02:00
|
|
|
SQUADCAST = "squadcast"
|
2022-12-16 21:39:18 +01:00
|
|
|
"""Squadcast"""
|
|
|
|
|
2022-10-04 13:47:14 +02:00
|
|
|
TEAMS = "teams"
|
2022-12-16 21:39:18 +01:00
|
|
|
"""Microsoft Teams"""
|
|
|
|
|
2022-10-06 19:01:51 +02:00
|
|
|
FREEMOBILE = "FreeMobile"
|
2022-12-16 21:39:18 +01:00
|
|
|
"""FreeMobile"""
|
|
|
|
|
2022-10-06 19:01:51 +02:00
|
|
|
NTFY = "ntfy"
|
2022-12-16 21:39:18 +01:00
|
|
|
"""ntfy"""
|
2022-07-02 16:00:54 +02:00
|
|
|
|
2022-12-29 00:22:53 +01:00
|
|
|
SMSEAGLE = "SMSEagle"
|
|
|
|
"""SMSEagle"""
|
|
|
|
|
2023-01-04 22:46:12 +01:00
|
|
|
ZOHOCLIQ = "ZohoCliq"
|
|
|
|
"""ZohoCliq"""
|
|
|
|
|
|
|
|
KOOK = "Kook"
|
|
|
|
"""Kook"""
|
|
|
|
|
2023-01-17 21:01:55 +01:00
|
|
|
SPLUNK = "Splunk"
|
|
|
|
"""Splunk"""
|
|
|
|
|
2022-07-02 16:00:54 +02:00
|
|
|
|
|
|
|
notification_provider_options = {
|
2022-11-05 18:48:31 +01:00
|
|
|
NotificationType.ALERTA: dict(
|
|
|
|
alertaApiEndpoint=dict(
|
|
|
|
type="str"
|
|
|
|
),
|
|
|
|
alertaApiKey=dict(type="str"),
|
|
|
|
alertaEnvironment=dict(type="str"),
|
|
|
|
alertaAlertState=dict(type="str"),
|
|
|
|
alertaRecoverState=dict(type="str"),
|
|
|
|
),
|
|
|
|
NotificationType.ALIYUNSMS: dict(
|
|
|
|
phonenumber=dict(type="str"),
|
|
|
|
templateCode=dict(type="str"),
|
|
|
|
signName=dict(type="str"),
|
|
|
|
accessKeyId=dict(type="str"),
|
|
|
|
secretAccessKey=dict(type="str"),
|
|
|
|
),
|
|
|
|
NotificationType.APPRISE: dict(
|
|
|
|
appriseURL=dict(type="str"),
|
|
|
|
title=dict(type="str"),
|
|
|
|
),
|
|
|
|
NotificationType.CLICKSENDSMS: dict(
|
|
|
|
clicksendsmsLogin=dict(type="str"),
|
|
|
|
clicksendsmsPassword=dict(type="str"),
|
|
|
|
clicksendsmsToNumber=dict(type="str"),
|
|
|
|
clicksendsmsSenderName=dict(type="str"),
|
|
|
|
),
|
|
|
|
NotificationType.DINGDING: dict(
|
|
|
|
webHookUrl=dict(type="str"),
|
|
|
|
secretKey=dict(type="str"),
|
|
|
|
),
|
|
|
|
NotificationType.DISCORD: dict(
|
|
|
|
discordUsername=dict(type="str"),
|
|
|
|
discordWebhookUrl=dict(type="str"),
|
|
|
|
discordPrefixMessage=dict(type="str"),
|
|
|
|
),
|
|
|
|
NotificationType.FEISHU: dict(
|
|
|
|
feishuWebHookUrl=dict(type="str"),
|
|
|
|
),
|
|
|
|
NotificationType.GOOGLECHAT: dict(
|
|
|
|
googleChatWebhookURL=dict(type="str"),
|
|
|
|
),
|
|
|
|
NotificationType.GORUSH: dict(
|
|
|
|
gorushDeviceToken=dict(type="str"),
|
|
|
|
gorushPlatform=dict(type="str"),
|
|
|
|
gorushTitle=dict(type="str"),
|
|
|
|
gorushPriority=dict(type="str"),
|
|
|
|
gorushRetry=dict(type="str"),
|
|
|
|
gorushTopic=dict(type="str"),
|
|
|
|
gorushServerURL=dict(type="str"),
|
|
|
|
),
|
|
|
|
NotificationType.GOTIFY: dict(
|
|
|
|
gotifyserverurl=dict(type="str"),
|
|
|
|
gotifyapplicationToken=dict(type="str"),
|
|
|
|
gotifyPriority=dict(type="int"),
|
|
|
|
),
|
|
|
|
NotificationType.LINE: dict(
|
|
|
|
lineChannelAccessToken=dict(type="str"),
|
|
|
|
lineUserID=dict(type="str"),
|
|
|
|
),
|
|
|
|
NotificationType.LUNASEA: dict(
|
|
|
|
lunaseaDevice=dict(type="str"),
|
|
|
|
),
|
|
|
|
NotificationType.MATRIX: dict(
|
|
|
|
internalRoomId=dict(type="str"),
|
|
|
|
accessToken=dict(type="str"),
|
|
|
|
homeserverUrl=dict(type="str"),
|
|
|
|
),
|
|
|
|
NotificationType.MATTERMOST: dict(
|
|
|
|
mattermostusername=dict(type="str"),
|
|
|
|
mattermostWebhookUrl=dict(type="str"),
|
|
|
|
mattermostchannel=dict(type="str"),
|
|
|
|
mattermosticonemo=dict(type="str"),
|
|
|
|
mattermosticonurl=dict(type="str"),
|
|
|
|
),
|
|
|
|
NotificationType.ONEBOT: dict(
|
|
|
|
httpAddr=dict(type="str"),
|
|
|
|
accessToken=dict(type="str"),
|
|
|
|
msgType=dict(type="str"),
|
|
|
|
recieverId=dict(type="str"),
|
|
|
|
),
|
|
|
|
NotificationType.PAGERDUTY: dict(
|
|
|
|
pagerdutyAutoResolve=dict(type="str"),
|
|
|
|
pagerdutyIntegrationUrl=dict(type="str"),
|
|
|
|
pagerdutyPriority=dict(type="str"),
|
|
|
|
pagerdutyIntegrationKey=dict(type="str"),
|
|
|
|
),
|
|
|
|
NotificationType.PROMOSMS: dict(
|
|
|
|
promosmsLogin=dict(type="str"),
|
|
|
|
promosmsPassword=dict(type="str"),
|
|
|
|
promosmsPhoneNumber=dict(type="str"),
|
|
|
|
promosmsSMSType=dict(type="str"),
|
|
|
|
promosmsSenderName=dict(type="str"),
|
2023-01-17 21:01:55 +01:00
|
|
|
promosmsAllowLongSMS=dict(type="bool"),
|
2022-11-05 18:48:31 +01:00
|
|
|
),
|
|
|
|
NotificationType.PUSHBULLET: dict(
|
|
|
|
pushbulletAccessToken=dict(type="str"),
|
|
|
|
),
|
|
|
|
NotificationType.PUSHDEER: dict(
|
|
|
|
pushdeerKey=dict(type="str"),
|
|
|
|
),
|
|
|
|
NotificationType.PUSHOVER: dict(
|
|
|
|
pushoveruserkey=dict(type="str"),
|
|
|
|
pushoverapptoken=dict(type="str"),
|
|
|
|
pushoversounds=dict(type="str"),
|
|
|
|
pushoverpriority=dict(type="str"),
|
|
|
|
pushovertitle=dict(type="str"),
|
|
|
|
pushoverdevice=dict(type="str"),
|
|
|
|
),
|
|
|
|
NotificationType.PUSHY: dict(
|
|
|
|
pushyAPIKey=dict(type="str"),
|
|
|
|
pushyToken=dict(type="str"),
|
|
|
|
),
|
|
|
|
NotificationType.ROCKET_CHAT: dict(
|
|
|
|
rocketchannel=dict(type="str"),
|
|
|
|
rocketusername=dict(type="str"),
|
|
|
|
rocketiconemo=dict(type="str"),
|
|
|
|
rocketwebhookURL=dict(type="str"),
|
|
|
|
rocketbutton=dict(type="str"),
|
|
|
|
),
|
|
|
|
NotificationType.SERWERSMS: dict(
|
|
|
|
serwersmsUsername=dict(type="str"),
|
|
|
|
serwersmsPassword=dict(type="str"),
|
|
|
|
serwersmsPhoneNumber=dict(type="str"),
|
|
|
|
serwersmsSenderName=dict(type="str"),
|
|
|
|
),
|
|
|
|
NotificationType.SIGNAL: dict(
|
|
|
|
signalNumber=dict(type="str"),
|
|
|
|
signalRecipients=dict(type="str"),
|
|
|
|
signalURL=dict(type="str"),
|
|
|
|
),
|
|
|
|
NotificationType.SLACK: dict(
|
|
|
|
slackbutton=dict(type="str"),
|
|
|
|
slackchannel=dict(type="str"),
|
|
|
|
slackusername=dict(type="str"),
|
|
|
|
slackiconemo=dict(type="str"),
|
|
|
|
slackwebhookURL=dict(type="str"),
|
|
|
|
),
|
|
|
|
NotificationType.SMTP: dict(
|
|
|
|
smtpHost=dict(type="str"),
|
|
|
|
smtpPort=dict(type="int"),
|
|
|
|
smtpSecure=dict(type="str"),
|
|
|
|
smtpIgnoreTLSError=dict(type="str"),
|
|
|
|
smtpDkimDomain=dict(type="str"),
|
|
|
|
smtpDkimKeySelector=dict(type="str"),
|
|
|
|
smtpDkimPrivateKey=dict(type="str"),
|
|
|
|
smtpDkimHashAlgo=dict(type="str"),
|
|
|
|
smtpDkimheaderFieldNames=dict(type="str"),
|
|
|
|
smtpDkimskipFields=dict(type="str"),
|
|
|
|
smtpUsername=dict(type="str"),
|
|
|
|
smtpPassword=dict(type="str"),
|
|
|
|
customSubject=dict(type="str"),
|
|
|
|
smtpFrom=dict(type="str"),
|
|
|
|
smtpCC=dict(type="str"),
|
|
|
|
smtpBCC=dict(type="str"),
|
|
|
|
smtpTo=dict(type="str"),
|
|
|
|
),
|
|
|
|
NotificationType.STACKFIELD: dict(
|
|
|
|
stackfieldwebhookURL=dict(type="str"),
|
|
|
|
),
|
|
|
|
NotificationType.PUSHBYTECHULUS: dict(
|
|
|
|
pushAPIKey=dict(type="str"),
|
|
|
|
),
|
|
|
|
NotificationType.TELEGRAM: dict(
|
|
|
|
telegramBotToken=dict(type="str"),
|
|
|
|
telegramChatID=dict(type="str"),
|
|
|
|
),
|
|
|
|
NotificationType.WEBHOOK: dict(
|
|
|
|
webhookContentType=dict(type="str"),
|
2022-12-29 00:22:53 +01:00
|
|
|
webhookAdditionalHeaders=dict(type="str"),
|
2022-11-05 18:48:31 +01:00
|
|
|
webhookURL=dict(type="str"),
|
|
|
|
),
|
|
|
|
NotificationType.WECOM: dict(
|
|
|
|
weComBotKey=dict(type="str"),
|
|
|
|
),
|
|
|
|
NotificationType.ALERTNOW: dict(
|
|
|
|
alertNowWebhookURL=dict(type="str"),
|
|
|
|
),
|
|
|
|
NotificationType.HOMEASSISTANT: dict(
|
|
|
|
homeAssistantUrl=dict(type="str"),
|
|
|
|
longLivedAccessToken=dict(type="str"),
|
|
|
|
),
|
|
|
|
NotificationType.LINENOTIFY: dict(
|
|
|
|
lineNotifyAccessToken=dict(type="str"),
|
|
|
|
),
|
|
|
|
NotificationType.BARK: dict(
|
|
|
|
barkEndpoint=dict(type="str"),
|
|
|
|
barkGroup=dict(type="str"),
|
|
|
|
barkSound=dict(type="str"),
|
|
|
|
),
|
|
|
|
NotificationType.GOALERT: dict(
|
|
|
|
goAlertBaseURL=dict(type="str"),
|
|
|
|
goAlertToken=dict(type="str"),
|
|
|
|
),
|
|
|
|
NotificationType.OCTOPUSH: dict(
|
|
|
|
octopushVersion=dict(type="str"),
|
|
|
|
octopushAPIKey=dict(type="str"),
|
|
|
|
octopushLogin=dict(type="str"),
|
|
|
|
octopushPhoneNumber=dict(type="str"),
|
|
|
|
octopushSMSType=dict(type="str"),
|
|
|
|
octopushSenderName=dict(type="str"),
|
|
|
|
octopushDMLogin=dict(type="str"),
|
|
|
|
octopushDMAPIKey=dict(type="str"),
|
|
|
|
octopushDMPhoneNumber=dict(type="str"),
|
|
|
|
octopushDMSenderName=dict(type="str"),
|
|
|
|
octopushDMSMSType=dict(type="str"),
|
|
|
|
),
|
|
|
|
NotificationType.SERVERCHAN: dict(
|
|
|
|
serverChanSendKey=dict(type="str"),
|
|
|
|
),
|
|
|
|
NotificationType.SMSMANAGER: dict(
|
|
|
|
smsmanagerApiKey=dict(type="str"),
|
|
|
|
numbers=dict(type="str"),
|
|
|
|
messageType=dict(type="str"),
|
|
|
|
),
|
|
|
|
NotificationType.SQUADCAST: dict(
|
|
|
|
squadcastWebhookURL=dict(type="str"),
|
|
|
|
),
|
|
|
|
NotificationType.TEAMS: dict(
|
|
|
|
webhookUrl=dict(type="str"),
|
|
|
|
),
|
|
|
|
NotificationType.FREEMOBILE: dict(
|
|
|
|
freemobileUser=dict(type="str"),
|
|
|
|
freemobilePass=dict(type="str"),
|
|
|
|
),
|
|
|
|
NotificationType.NTFY: dict(
|
|
|
|
ntfyusername=dict(type="str"),
|
|
|
|
ntfypassword=dict(type="str"),
|
|
|
|
ntfytopic=dict(type="str"),
|
|
|
|
ntfyPriority=dict(type="int"),
|
2022-12-29 00:22:53 +01:00
|
|
|
ntfyIcon=dict(type="str"),
|
2022-11-05 18:48:31 +01:00
|
|
|
ntfyserverurl=dict(type="str"),
|
|
|
|
),
|
2022-12-29 00:22:53 +01:00
|
|
|
NotificationType.SMSEAGLE: dict(
|
|
|
|
smseagleEncoding=dict(type="bool"),
|
|
|
|
smseaglePriority=dict(type="int"),
|
|
|
|
smseagleRecipientType=dict(type="str"),
|
|
|
|
smseagleToken=dict(type="str"),
|
|
|
|
smseagleRecipient=dict(type="str"),
|
|
|
|
smseagleUrl=dict(type="str")
|
2023-01-04 22:46:12 +01:00
|
|
|
),
|
|
|
|
NotificationType.ZOHOCLIQ: dict(
|
|
|
|
webhookUrl=dict(type="str")
|
|
|
|
),
|
|
|
|
NotificationType.KOOK: dict(
|
|
|
|
kookGuildID=dict(type="str"),
|
|
|
|
kookBotToken=dict(type="str")
|
|
|
|
),
|
2023-01-17 21:01:55 +01:00
|
|
|
NotificationType.SPLUNK: dict(
|
|
|
|
splunkAutoResolve=dict(type="str"),
|
|
|
|
splunkSeverity=dict(type="str"),
|
|
|
|
splunkRestURL=dict(type="str")
|
|
|
|
)
|
2022-09-07 13:03:10 +02:00
|
|
|
}
|
|
|
|
|
2022-11-05 18:48:31 +01:00
|
|
|
notification_provider_conditions = dict(
|
|
|
|
gotifyPriority=dict(
|
|
|
|
min=0,
|
|
|
|
max=10
|
|
|
|
),
|
|
|
|
smtpPort=dict(
|
|
|
|
min=0,
|
|
|
|
max=65535
|
|
|
|
),
|
|
|
|
ntfyPriority=dict(
|
|
|
|
min=1,
|
|
|
|
max=5
|
|
|
|
),
|
2022-12-29 00:22:53 +01:00
|
|
|
smseaglePriority=dict(
|
|
|
|
min=0,
|
|
|
|
max=9
|
|
|
|
)
|
2022-11-05 18:48:31 +01:00
|
|
|
)
|