From 42e0a1b54377c80560f6d8547ee60132b6eb14c9 Mon Sep 17 00:00:00 2001 From: Joseph Abbey Date: Wed, 10 Jan 2024 23:08:08 +0000 Subject: [PATCH 01/13] Use webhooks for battery --- resources/settings/properties.xml | 27 ++++-- resources/settings/settings.xml | 8 +- source/BackgroundServiceDelegate.mc | 21 +++-- source/Settings.mc | 126 +++++++++++++++++++++++++++- 4 files changed, 166 insertions(+), 16 deletions(-) diff --git a/resources/settings/properties.xml b/resources/settings/properties.xml index 7d88dff..c7009ea 100644 --- a/resources/settings/properties.xml +++ b/resources/settings/properties.xml @@ -13,31 +13,44 @@ --> - + + + + - + - + false - + false 0 3 @@ -71,4 +84,4 @@ --> 15 - + \ No newline at end of file diff --git a/resources/settings/settings.xml b/resources/settings/settings.xml index 66912fc..15fd778 100644 --- a/resources/settings/settings.xml +++ b/resources/settings/settings.xml @@ -107,4 +107,10 @@ - + + + + \ No newline at end of file diff --git a/source/BackgroundServiceDelegate.mc b/source/BackgroundServiceDelegate.mc index e398065..d40bb42 100644 --- a/source/BackgroundServiceDelegate.mc +++ b/source/BackgroundServiceDelegate.mc @@ -51,17 +51,26 @@ class BackgroundServiceDelegate extends System.ServiceDelegate { } else { // Don't use Settings.* here as the object lasts < 30 secs and is recreated each time the background service is run Communications.makeWebRequest( - (Properties.getValue("api_url") as Lang.String) + "/events/garmin.battery_level", + (Properties.getValue("api_url") as Lang.String) + "/webhook/" + (Properties.getValue("webhook_id") as Lang.String), { - "level" => System.getSystemStats().battery, - "is_charging" => System.getSystemStats().charging, - "device_id" => System.getDeviceSettings().uniqueIdentifier + "type" => "update_sensor_states", + "data" => [ + { + "state" => System.getSystemStats().battery, + "type" => "sensor", + "unique_id" => "battery_level" + }, + { + "state" => System.getSystemStats().charging, + "type" => "binary_sensor", + "unique_id" => "battery_is_charging" + } + ] }, { :method => Communications.HTTP_REQUEST_METHOD_POST, :headers => { - "Content-Type" => Communications.REQUEST_CONTENT_TYPE_JSON, - "Authorization" => "Bearer " + (Properties.getValue("api_key") as Lang.String) + "Content-Type" => Communications.REQUEST_CONTENT_TYPE_JSON }, :responseType => Communications.HTTP_RESPONSE_CONTENT_TYPE_JSON }, diff --git a/source/Settings.mc b/source/Settings.mc index 407145f..942c4e3 100644 --- a/source/Settings.mc +++ b/source/Settings.mc @@ -25,6 +25,110 @@ using Toybox.System; // Battery Level Reporting using Toybox.Background; using Toybox.Time; +using Toybox.Communications; + +class WebhookManager { + function onReturnRequestWebhookId(responseCode as Lang.Number, data as Null or Lang.Dictionary or Lang.String) as Void { + // TODO: Handle errors + if (responseCode == 201) { + var id = data.get("webhook_id") as Lang.String or Null; + if (id != null) { + Settings.setWebhookId(id); + registerWebhookSensor({ + "device_class" => "battery", + "name" => "Battery Level", + "state" => System.getSystemStats().battery, + "type" => "sensor", + "unique_id" => "battery_level", + "unit_of_measurement" => "%", + "state_class" => "measurement", + "entity_category" => "diagnostic", + "disabled" => false + }); + registerWebhookSensor({ + "device_class" => "battery_charging", + "name" => "Battery is Charging", + "state" => System.getSystemStats().charging, + "type" => "binary_sensor", + "unique_id" => "battery_is_charging", + "entity_category" => "diagnostic", + "disabled" => false + }); + } + } else { + if (Globals.scDebug) { + System.println("Settings onReturnRequestWebhookId(): Error: " + responseCode); + } + } + } + + function requestWebhookId() { + if (Globals.scDebug) { + System.println("Settings requestWebhookId(): Requesting webhook id"); + } + Communications.makeWebRequest( + Settings.getApiUrl() + "/mobile_app/registrations", + { + "device_id" => System.getDeviceSettings().uniqueIdentifier, + "app_id" => "garmin_home_assistant", + "app_name" => "GarminHomeAssistant", + "app_version" => "", + "device_name" => "Garmin Watch", + "manufacturer" => "Garmin", + "model" => "", + "os_name" => "", + "os_version" => Lang.format("$1$.$2$", System.getDeviceSettings().firmwareVersion), + "supports_encryption" => false, + "app_data" => {} + }, + { + :method => Communications.HTTP_REQUEST_METHOD_POST, + :headers => { + "Content-Type" => Communications.REQUEST_CONTENT_TYPE_JSON, + "Authorization" => "Bearer " + Settings.getApiKey() + }, + :responseType => Communications.HTTP_RESPONSE_CONTENT_TYPE_JSON + }, + method(:onReturnRequestWebhookId) + ); + } + + function onReturnRegisterWebhookSensor(responseCode as Lang.Number, data as Null or Lang.Dictionary or Lang.String) as Void { + // TODO: Handle errors + if (responseCode == 201) { + if ((data.get("success") as Lang.Boolean or Null) == true) { + if (Globals.scDebug) { + System.println("Settings onReturnRegisterWebhookSensor(): Success"); + } + } + } else { + if (Globals.scDebug) { + System.println("Settings onReturnRegisterWebhookSensor(): Error: " + responseCode); + } + } + } + + function registerWebhookSensor(sensor as Lang.Object) { + if (Globals.scDebug) { + System.println("Settings registerWebhookSensor(): Registering webhook sensor: " + sensor.toString()); + } + Communications.makeWebRequest( + Settings.getApiUrl() + "/webhook/" + Settings.getWebhookId(), + { + "type" => "register_sensor", + "data" => sensor + }, + { + :method => Communications.HTTP_REQUEST_METHOD_POST, + :headers => { + "Content-Type" => Communications.REQUEST_CONTENT_TYPE_JSON + }, + :responseType => Communications.HTTP_RESPONSE_CONTENT_TYPE_JSON + }, + method(:onReturnRegisterWebhookSensor) + ); + } +} (:glance, :background) class Settings { @@ -32,6 +136,7 @@ class Settings { public static const MENU_STYLE_TEXT = 1; private static var mApiKey as Lang.String = ""; + private static var mWebhookId as Lang.String = ""; private static var mApiUrl as Lang.String = ""; private static var mConfigUrl as Lang.String = ""; private static var mCacheConfig as Lang.Boolean = false; @@ -45,10 +150,14 @@ class Settings { private static var mBatteryRefreshRate as Lang.Number = 15; // minutes private static var mIsApp as Lang.Boolean = false; + // Must keep the object so it doesn't get garbage collected. + private static var mWebhookManager as WebhookManager or Null; + // Called on application start and then whenever the settings are changed. static function update() { mIsApp = getApp().getIsApp(); mApiKey = Properties.getValue("api_key"); + mWebhookId = Properties.getValue("webhook_id"); mApiUrl = Properties.getValue("api_url"); mConfigUrl = Properties.getValue("config_url"); mCacheConfig = Properties.getValue("cache_config"); @@ -64,7 +173,12 @@ class Settings { // Manage this inside the application or widget only (not a glance or background service process) if (mIsApp) { if (mIsBatteryLevelEnabled) { - if ((System has :ServiceDelegate) and + if (getWebhookId().equals("")) { + mWebhookManager = new WebhookManager(); + mWebhookManager.requestWebhookId(); + } + if (!getWebhookId().equals("") and + (System has :ServiceDelegate) and ((Background.getTemporalEventRegisteredTime() == null) or (Background.getTemporalEventRegisteredTime() != (mBatteryRefreshRate * 60)))) { Background.registerForTemporalEvent(new Time.Duration(mBatteryRefreshRate * 60)); // Convert to seconds @@ -90,6 +204,15 @@ class Settings { return mApiKey; } + static function getWebhookId() as Lang.String { + return mWebhookId; + } + + static function setWebhookId(webhookId as Lang.String) { + mWebhookId = webhookId; + Properties.setValue("webhook_id", mWebhookId); + } + static function getApiUrl() as Lang.String { return mApiUrl; } @@ -130,5 +253,4 @@ class Settings { static function getIsWidgetStartNoTap() as Lang.Boolean { return mIsWidgetStartNoTap; } - } From 4190ce23621958e15e1173342446ed2878d61f40 Mon Sep 17 00:00:00 2001 From: "Restyled.io" Date: Wed, 10 Jan 2024 23:10:15 +0000 Subject: [PATCH 02/13] Restyled by whitespace --- resources/settings/properties.xml | 6 +++--- resources/settings/settings.xml | 2 +- source/Settings.mc | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/resources/settings/properties.xml b/resources/settings/properties.xml index c7009ea..e7110d2 100644 --- a/resources/settings/properties.xml +++ b/resources/settings/properties.xml @@ -15,10 +15,10 @@ - @@ -84,4 +84,4 @@ --> 15 - \ No newline at end of file + diff --git a/resources/settings/settings.xml b/resources/settings/settings.xml index 15fd778..4cc33f9 100644 --- a/resources/settings/settings.xml +++ b/resources/settings/settings.xml @@ -113,4 +113,4 @@ > - \ No newline at end of file + diff --git a/source/Settings.mc b/source/Settings.mc index 942c4e3..b7cdcf0 100644 --- a/source/Settings.mc +++ b/source/Settings.mc @@ -177,7 +177,7 @@ class Settings { mWebhookManager = new WebhookManager(); mWebhookManager.requestWebhookId(); } - if (!getWebhookId().equals("") and + if (!getWebhookId().equals("") and (System has :ServiceDelegate) and ((Background.getTemporalEventRegisteredTime() == null) or (Background.getTemporalEventRegisteredTime() != (mBatteryRefreshRate * 60)))) { From 5f794388e66e07cee8e6eb6572c63e016c56c780 Mon Sep 17 00:00:00 2001 From: Joseph Abbey Date: Thu, 11 Jan 2024 07:16:38 +0000 Subject: [PATCH 03/13] Resolve review comments --- source/Settings.mc | 104 -------------------------------------- source/WebhookManager.mc | 106 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 106 insertions(+), 104 deletions(-) create mode 100644 source/WebhookManager.mc diff --git a/source/Settings.mc b/source/Settings.mc index b7cdcf0..b6f8562 100644 --- a/source/Settings.mc +++ b/source/Settings.mc @@ -25,110 +25,6 @@ using Toybox.System; // Battery Level Reporting using Toybox.Background; using Toybox.Time; -using Toybox.Communications; - -class WebhookManager { - function onReturnRequestWebhookId(responseCode as Lang.Number, data as Null or Lang.Dictionary or Lang.String) as Void { - // TODO: Handle errors - if (responseCode == 201) { - var id = data.get("webhook_id") as Lang.String or Null; - if (id != null) { - Settings.setWebhookId(id); - registerWebhookSensor({ - "device_class" => "battery", - "name" => "Battery Level", - "state" => System.getSystemStats().battery, - "type" => "sensor", - "unique_id" => "battery_level", - "unit_of_measurement" => "%", - "state_class" => "measurement", - "entity_category" => "diagnostic", - "disabled" => false - }); - registerWebhookSensor({ - "device_class" => "battery_charging", - "name" => "Battery is Charging", - "state" => System.getSystemStats().charging, - "type" => "binary_sensor", - "unique_id" => "battery_is_charging", - "entity_category" => "diagnostic", - "disabled" => false - }); - } - } else { - if (Globals.scDebug) { - System.println("Settings onReturnRequestWebhookId(): Error: " + responseCode); - } - } - } - - function requestWebhookId() { - if (Globals.scDebug) { - System.println("Settings requestWebhookId(): Requesting webhook id"); - } - Communications.makeWebRequest( - Settings.getApiUrl() + "/mobile_app/registrations", - { - "device_id" => System.getDeviceSettings().uniqueIdentifier, - "app_id" => "garmin_home_assistant", - "app_name" => "GarminHomeAssistant", - "app_version" => "", - "device_name" => "Garmin Watch", - "manufacturer" => "Garmin", - "model" => "", - "os_name" => "", - "os_version" => Lang.format("$1$.$2$", System.getDeviceSettings().firmwareVersion), - "supports_encryption" => false, - "app_data" => {} - }, - { - :method => Communications.HTTP_REQUEST_METHOD_POST, - :headers => { - "Content-Type" => Communications.REQUEST_CONTENT_TYPE_JSON, - "Authorization" => "Bearer " + Settings.getApiKey() - }, - :responseType => Communications.HTTP_RESPONSE_CONTENT_TYPE_JSON - }, - method(:onReturnRequestWebhookId) - ); - } - - function onReturnRegisterWebhookSensor(responseCode as Lang.Number, data as Null or Lang.Dictionary or Lang.String) as Void { - // TODO: Handle errors - if (responseCode == 201) { - if ((data.get("success") as Lang.Boolean or Null) == true) { - if (Globals.scDebug) { - System.println("Settings onReturnRegisterWebhookSensor(): Success"); - } - } - } else { - if (Globals.scDebug) { - System.println("Settings onReturnRegisterWebhookSensor(): Error: " + responseCode); - } - } - } - - function registerWebhookSensor(sensor as Lang.Object) { - if (Globals.scDebug) { - System.println("Settings registerWebhookSensor(): Registering webhook sensor: " + sensor.toString()); - } - Communications.makeWebRequest( - Settings.getApiUrl() + "/webhook/" + Settings.getWebhookId(), - { - "type" => "register_sensor", - "data" => sensor - }, - { - :method => Communications.HTTP_REQUEST_METHOD_POST, - :headers => { - "Content-Type" => Communications.REQUEST_CONTENT_TYPE_JSON - }, - :responseType => Communications.HTTP_RESPONSE_CONTENT_TYPE_JSON - }, - method(:onReturnRegisterWebhookSensor) - ); - } -} (:glance, :background) class Settings { diff --git a/source/WebhookManager.mc b/source/WebhookManager.mc new file mode 100644 index 0000000..687f908 --- /dev/null +++ b/source/WebhookManager.mc @@ -0,0 +1,106 @@ +using Toybox.Lang; +using Toybox.Communications; +using Toybox.System; + +class WebhookManager { + function onReturnRequestWebhookId(responseCode as Lang.Number, data as Null or Lang.Dictionary or Lang.String) as Void { + // TODO: Handle errors + if (responseCode == 201) { + var id = data.get("webhook_id") as Lang.String or Null; + if (id != null) { + Settings.setWebhookId(id); + registerWebhookSensor({ + "device_class" => "battery", + "name" => "Battery Level", + "state" => System.getSystemStats().battery, + "type" => "sensor", + "unique_id" => "battery_level", + "unit_of_measurement" => "%", + "state_class" => "measurement", + "entity_category" => "diagnostic", + "disabled" => false + }); + registerWebhookSensor({ + "device_class" => "battery_charging", + "name" => "Battery is Charging", + "state" => System.getSystemStats().charging, + "type" => "binary_sensor", + "unique_id" => "battery_is_charging", + "entity_category" => "diagnostic", + "disabled" => false + }); + } + } else { + if (Globals.scDebug) { + System.println("WebhookManager onReturnRequestWebhookId(): Error: " + responseCode); + } + } + } + + function requestWebhookId() { + if (Globals.scDebug) { + System.println("WebhookManager requestWebhookId(): Requesting webhook id"); + } + Communications.makeWebRequest( + Settings.getApiUrl() + "/mobile_app/registrations", + { + "device_id" => System.getDeviceSettings().uniqueIdentifier, + "app_id" => "garmin_home_assistant", + "app_name" => RezStrings.getAppName(), + "app_version" => "", + "device_name" => "Garmin Watch", + "manufacturer" => "Garmin", + "model" => "", + "os_name" => "", + "os_version" => Lang.format("$1$.$2$", System.getDeviceSettings().firmwareVersion), + "supports_encryption" => false, + "app_data" => {} + }, + { + :method => Communications.HTTP_REQUEST_METHOD_POST, + :headers => { + "Content-Type" => Communications.REQUEST_CONTENT_TYPE_JSON, + "Authorization" => "Bearer " + Settings.getApiKey() + }, + :responseType => Communications.HTTP_RESPONSE_CONTENT_TYPE_JSON + }, + method(:onReturnRequestWebhookId) + ); + } + + function onReturnRegisterWebhookSensor(responseCode as Lang.Number, data as Null or Lang.Dictionary or Lang.String) as Void { + // TODO: Handle errors + if (responseCode == 201) { + if ((data.get("success") as Lang.Boolean or Null) == true) { + if (Globals.scDebug) { + System.println("WebhookManager onReturnRegisterWebhookSensor(): Success"); + } + } + } else { + if (Globals.scDebug) { + System.println("WebhookManager onReturnRegisterWebhookSensor(): Error: " + responseCode); + } + } + } + + function registerWebhookSensor(sensor as Lang.Object) { + if (Globals.scDebug) { + System.println("WebhookManager registerWebhookSensor(): Registering webhook sensor: " + sensor.toString()); + } + Communications.makeWebRequest( + Settings.getApiUrl() + "/webhook/" + Settings.getWebhookId(), + { + "type" => "register_sensor", + "data" => sensor + }, + { + :method => Communications.HTTP_REQUEST_METHOD_POST, + :headers => { + "Content-Type" => Communications.REQUEST_CONTENT_TYPE_JSON + }, + :responseType => Communications.HTTP_RESPONSE_CONTENT_TYPE_JSON + }, + method(:onReturnRegisterWebhookSensor) + ); + } +} From f155ab0925c83d94b6eff81dccf5ae1609dfe27e Mon Sep 17 00:00:00 2001 From: Joseph Abbey Date: Thu, 11 Jan 2024 17:27:52 +0000 Subject: [PATCH 04/13] Added error messages for first request --- resources/strings/strings.xml | 1 + source/RezStrings.mc | 6 ++ source/WebhookManager.mc | 110 ++++++++++++++++++++++++---------- 3 files changed, 87 insertions(+), 30 deletions(-) diff --git a/resources/strings/strings.xml b/resources/strings/strings.xml index c03c3ec..052e264 100644 --- a/resources/strings/strings.xml +++ b/resources/strings/strings.xml @@ -32,6 +32,7 @@ No JSON returned from HTTP request. HTTP request returned error code = API URL must not have a trailing slash '/' + Failed to register Webhook Available Checking... Unavailable diff --git a/source/RezStrings.mc b/source/RezStrings.mc index 7c0bda4..2344bbd 100644 --- a/source/RezStrings.mc +++ b/source/RezStrings.mc @@ -47,6 +47,7 @@ class RezStrings { private static var strNoJson as Lang.String or Null; private static var strUnhandledHttpErr as Lang.String or Null; private static var strTrailingSlashErr as Lang.String or Null; + private static var strWebhookFailed as Lang.String or Null; (:glance) private static var strAvailable as Lang.String or Null; (:glance) @@ -98,6 +99,7 @@ class RezStrings { strNoJson = WatchUi.loadResource($.Rez.Strings.NoJson); strUnhandledHttpErr = WatchUi.loadResource($.Rez.Strings.UnhandledHttpErr); strTrailingSlashErr = WatchUi.loadResource($.Rez.Strings.TrailingSlashErr); + strWebhookFailed = WatchUi.loadResource($.Rez.Strings.WebhookFailed); strAvailable = WatchUi.loadResource($.Rez.Strings.Available); strChecking = WatchUi.loadResource($.Rez.Strings.Checking); strUnavailable = WatchUi.loadResource($.Rez.Strings.Unavailable); @@ -178,6 +180,10 @@ class RezStrings { return strTrailingSlashErr; } + static function getWebhookFailed() as Lang.String { + return strWebhookFailed; + } + static function getAvailable() as Lang.String { return strAvailable; } diff --git a/source/WebhookManager.mc b/source/WebhookManager.mc index 687f908..ead1da5 100644 --- a/source/WebhookManager.mc +++ b/source/WebhookManager.mc @@ -2,38 +2,88 @@ using Toybox.Lang; using Toybox.Communications; using Toybox.System; +// Can use push view so must never be run in a glance context class WebhookManager { function onReturnRequestWebhookId(responseCode as Lang.Number, data as Null or Lang.Dictionary or Lang.String) as Void { - // TODO: Handle errors - if (responseCode == 201) { - var id = data.get("webhook_id") as Lang.String or Null; - if (id != null) { - Settings.setWebhookId(id); - registerWebhookSensor({ - "device_class" => "battery", - "name" => "Battery Level", - "state" => System.getSystemStats().battery, - "type" => "sensor", - "unique_id" => "battery_level", - "unit_of_measurement" => "%", - "state_class" => "measurement", - "entity_category" => "diagnostic", - "disabled" => false - }); - registerWebhookSensor({ - "device_class" => "battery_charging", - "name" => "Battery is Charging", - "state" => System.getSystemStats().charging, - "type" => "binary_sensor", - "unique_id" => "battery_is_charging", - "entity_category" => "diagnostic", - "disabled" => false - }); - } - } else { - if (Globals.scDebug) { - System.println("WebhookManager onReturnRequestWebhookId(): Error: " + responseCode); - } + switch (responseCode) { + case Communications.BLE_HOST_TIMEOUT: + case Communications.BLE_CONNECTION_UNAVAILABLE: + if (Globals.scDebug) { + System.println("WebhookManager onReturnRequestWebhookId() Response Code: BLE_HOST_TIMEOUT or BLE_CONNECTION_UNAVAILABLE, Bluetooth connection severed."); + } + ErrorView.show(RezStrings.getWebhookFailed()+ "\n" + RezStrings.getNoPhone() + "."); + break; + + case Communications.BLE_QUEUE_FULL: + if (Globals.scDebug) { + System.println("WebhookManager onReturnRequestWebhookId() Response Code: BLE_QUEUE_FULL, API calls too rapid."); + } + ErrorView.show(RezStrings.getWebhookFailed()+ "\n" + RezStrings.getApiFlood()); + break; + + case Communications.NETWORK_REQUEST_TIMED_OUT: + if (Globals.scDebug) { + System.println("WebhookManager onReturnRequestWebhookId() Response Code: NETWORK_REQUEST_TIMED_OUT, check Internet connection."); + } + ErrorView.show(RezStrings.getWebhookFailed()+ "\n" + RezStrings.getNoResponse()); + break; + + case Communications.NETWORK_RESPONSE_OUT_OF_MEMORY: + if (Globals.scDebug) { + System.println("WebhookManager onReturnRequestWebhookId() Response Code: NETWORK_RESPONSE_OUT_OF_MEMORY, are we going too fast?"); + } + // Ignore and see if we can carry on + break; + case Communications.INVALID_HTTP_BODY_IN_NETWORK_RESPONSE: + if (Globals.scDebug) { + System.println("WebhookManager onReturnRequestWebhookId() Response Code: INVALID_HTTP_BODY_IN_NETWORK_RESPONSE, check JSON is returned."); + } + ErrorView.show(RezStrings.getWebhookFailed()+ "\n" + RezStrings.getNoJson()); + break; + + case 404: + if (Globals.scDebug) { + System.println("WebhookManager onReturnRequestWebhookId() Response Code: 404, page not found. Check API URL setting."); + } + ErrorView.show(RezStrings.getWebhookFailed()+ "\n" + RezStrings.getApiUrlNotFound()); + break; + + case 201: + var id = data.get("webhook_id") as Lang.String or Null; + if (id != null) { + Settings.setWebhookId(id); + registerWebhookSensor({ + "device_class" => "battery", + "name" => "Battery Level", + "state" => System.getSystemStats().battery, + "type" => "sensor", + "unique_id" => "battery_level", + "unit_of_measurement" => "%", + "state_class" => "measurement", + "entity_category" => "diagnostic", + "disabled" => false + }); + registerWebhookSensor({ + "device_class" => "battery_charging", + "name" => "Battery is Charging", + "state" => System.getSystemStats().charging, + "type" => "binary_sensor", + "unique_id" => "battery_is_charging", + "entity_category" => "diagnostic", + "disabled" => false + }); + } else { + if (Globals.scDebug) { + System.println("WebhookManager onReturnRequestWebhookId(): No webhook id in response data."); + } + } + break; + + default: + if (Globals.scDebug) { + System.println("WebhookManager onReturnRequestWebhookId(): Unhandled HTTP response code = " + responseCode); + } + ErrorView.show(RezStrings.getWebhookFailed()+ "\n" + RezStrings.getUnhandledHttpErr() + responseCode); } } From a211565810926e7a6602a4f6010466d51d017d20 Mon Sep 17 00:00:00 2001 From: Joseph Abbey Date: Thu, 11 Jan 2024 17:37:18 +0000 Subject: [PATCH 05/13] --- source/WebhookManager.mc | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/source/WebhookManager.mc b/source/WebhookManager.mc index ead1da5..7302c88 100644 --- a/source/WebhookManager.mc +++ b/source/WebhookManager.mc @@ -11,21 +11,21 @@ class WebhookManager { if (Globals.scDebug) { System.println("WebhookManager onReturnRequestWebhookId() Response Code: BLE_HOST_TIMEOUT or BLE_CONNECTION_UNAVAILABLE, Bluetooth connection severed."); } - ErrorView.show(RezStrings.getWebhookFailed()+ "\n" + RezStrings.getNoPhone() + "."); + ErrorView.show(RezStrings.getWebhookFailed() + "\n" + RezStrings.getNoPhone() + "."); break; case Communications.BLE_QUEUE_FULL: if (Globals.scDebug) { System.println("WebhookManager onReturnRequestWebhookId() Response Code: BLE_QUEUE_FULL, API calls too rapid."); } - ErrorView.show(RezStrings.getWebhookFailed()+ "\n" + RezStrings.getApiFlood()); + ErrorView.show(RezStrings.getWebhookFailed() + "\n" + RezStrings.getApiFlood()); break; case Communications.NETWORK_REQUEST_TIMED_OUT: if (Globals.scDebug) { System.println("WebhookManager onReturnRequestWebhookId() Response Code: NETWORK_REQUEST_TIMED_OUT, check Internet connection."); } - ErrorView.show(RezStrings.getWebhookFailed()+ "\n" + RezStrings.getNoResponse()); + ErrorView.show(RezStrings.getWebhookFailed() + "\n" + RezStrings.getNoResponse()); break; case Communications.NETWORK_RESPONSE_OUT_OF_MEMORY: @@ -38,14 +38,14 @@ class WebhookManager { if (Globals.scDebug) { System.println("WebhookManager onReturnRequestWebhookId() Response Code: INVALID_HTTP_BODY_IN_NETWORK_RESPONSE, check JSON is returned."); } - ErrorView.show(RezStrings.getWebhookFailed()+ "\n" + RezStrings.getNoJson()); + ErrorView.show(RezStrings.getWebhookFailed() + "\n" + RezStrings.getNoJson()); break; case 404: if (Globals.scDebug) { System.println("WebhookManager onReturnRequestWebhookId() Response Code: 404, page not found. Check API URL setting."); } - ErrorView.show(RezStrings.getWebhookFailed()+ "\n" + RezStrings.getApiUrlNotFound()); + ErrorView.show(RezStrings.getWebhookFailed() + "\n" + RezStrings.getApiUrlNotFound()); break; case 201: @@ -83,7 +83,7 @@ class WebhookManager { if (Globals.scDebug) { System.println("WebhookManager onReturnRequestWebhookId(): Unhandled HTTP response code = " + responseCode); } - ErrorView.show(RezStrings.getWebhookFailed()+ "\n" + RezStrings.getUnhandledHttpErr() + responseCode); + ErrorView.show(RezStrings.getWebhookFailed() + "\n" + RezStrings.getUnhandledHttpErr() + responseCode); } } From de19fc94a7faaaabdcb1802d0c69b5bd21f62579 Mon Sep 17 00:00:00 2001 From: Joseph Abbey Date: Thu, 11 Jan 2024 17:41:05 +0000 Subject: [PATCH 06/13] --- resources/settings/properties.xml | 33 ++++++++++++++++++------------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/resources/settings/properties.xml b/resources/settings/properties.xml index e7110d2..8c5496e 100644 --- a/resources/settings/properties.xml +++ b/resources/settings/properties.xml @@ -30,28 +30,33 @@ --> - + false - + false 0 3 @@ -68,8 +73,8 @@ false @@ -79,8 +84,8 @@ false 15 From 807a4bb46165737ddad51aa51be1fdfd17dd9f77 Mon Sep 17 00:00:00 2001 From: JosephAbbey Date: Thu, 11 Jan 2024 18:07:15 +0000 Subject: [PATCH 07/13] Apply automatic changes --- resources-ara/strings/strings.xml | 5 +++-- resources-bul/strings/strings.xml | 5 +++-- resources-ces/strings/strings.xml | 7 ++++--- resources-dan/strings/strings.xml | 5 +++-- resources-deu/strings/strings.xml | 3 ++- resources-dut/strings/strings.xml | 7 ++++--- resources-est/strings/strings.xml | 9 +++++---- resources-fin/strings/strings.xml | 7 ++++--- resources-fre/strings/strings.xml | 5 +++-- resources-gre/strings/strings.xml | 11 ++++++----- resources-heb/strings/strings.xml | 5 +++-- resources-hrv/strings/strings.xml | 3 ++- resources-hun/strings/strings.xml | 9 +++++---- resources-ind/strings/strings.xml | 5 +++-- resources-ita/strings/strings.xml | 3 ++- resources-jpn/strings/strings.xml | 3 ++- resources-kor/strings/strings.xml | 7 ++++--- resources-lav/strings/strings.xml | 5 +++-- resources-lit/strings/strings.xml | 7 ++++--- resources-nob/strings/strings.xml | 5 +++-- resources-pol/strings/strings.xml | 3 ++- resources-por/strings/strings.xml | 3 ++- resources-ron/strings/strings.xml | 5 +++-- resources-slo/strings/strings.xml | 5 +++-- resources-slv/strings/strings.xml | 5 +++-- resources-spa/strings/strings.xml | 3 ++- resources-swe/strings/strings.xml | 9 +++++---- resources-tha/strings/strings.xml | 3 ++- resources-tur/strings/strings.xml | 5 +++-- resources-ukr/strings/strings.xml | 9 +++++---- resources-vie/strings/strings.xml | 3 ++- resources-zhs/strings/strings.xml | 3 ++- resources-zht/strings/strings.xml | 3 ++- resources-zsm/strings/strings.xml | 3 ++- 34 files changed, 106 insertions(+), 72 deletions(-) diff --git a/resources-ara/strings/strings.xml b/resources-ara/strings/strings.xml index 589c496..dc9341c 100644 --- a/resources-ara/strings/strings.xml +++ b/resources-ara/strings/strings.xml @@ -38,10 +38,11 @@ لم يتم إرجاع JSON من طلب HTTP. قام طلب HTTP بإرجاع رمز الخطأ = يجب ألا يحتوي عنوان URL لواجهة برمجة التطبيقات على شرطة مائلة لاحقة '/' + فشل تسجيل Webhook متاح تدقيق... غير متوفره - غير مهيأ + غير مكون مخبأة قائمة طعام @@ -63,4 +64,4 @@ (القطعة فقط) قم بتشغيل التطبيق تلقائيًا من الأداة دون انتظار نقرة واحدة. قم بتمكين خدمة الخلفية لإرسال مستوى بطارية الساعة إلى Home Assistant. معدل التحديث (بالدقائق) الذي يجب أن تكرر عنده خدمة الخلفية إرسال مستوى البطارية. - + \ No newline at end of file diff --git a/resources-bul/strings/strings.xml b/resources-bul/strings/strings.xml index 41ff33f..d622087 100644 --- a/resources-bul/strings/strings.xml +++ b/resources-bul/strings/strings.xml @@ -38,6 +38,7 @@ Няма върнат JSON от HTTP заявка. HTTP заявката върна код на грешка = URL адресът на API не трябва да има наклонена черта '/' в края + Неуспешно регистриране на Webhook На разположение Проверка... Недостъпен @@ -53,7 +54,7 @@ Трябва ли приложението да кешира конфигурацията на менюто? Трябва ли приложението да изчисти съществуващия кеш при следващото стартиране? Изчакване в секунди. Излезте от приложението след този период на неактивност, за да запазите батерията на устройството. - След това време (в секунди) диалоговият прозорец за потвърждение за действие се затваря автоматично и действието се отменя. Задайте 0, за да деактивирате изчакването. + След това време (в секунди) диалоговият прозорец за потвърждение на действие се затваря автоматично и действието се отменя. Задайте 0, за да деактивирате изчакването. Стил на елемент от менюто. Икони Допълнителен текст @@ -63,4 +64,4 @@ (Само за джаджа) Автоматично стартирайте приложението от джаджата, без да чакате докосване. Активирайте фоновата услуга, за да изпратите нивото на батерията на часовника до Home Assistant. Честотата на опресняване (в минути), с която фоновата услуга трябва да повтори изпращането на нивото на батерията. - + \ No newline at end of file diff --git a/resources-ces/strings/strings.xml b/resources-ces/strings/strings.xml index d75e89b..bbc8795 100644 --- a/resources-ces/strings/strings.xml +++ b/resources-ces/strings/strings.xml @@ -38,6 +38,7 @@ Z požadavku HTTP se nevrátil žádný JSON. Požadavek HTTP vrátil kód chyby = Adresa URL rozhraní API nesmí mít koncové lomítko „/“ + Registrace Webhooku se nezdařila Dostupný Kontrola... Není k dispozici @@ -61,6 +62,6 @@ Zleva do prava Zprava doleva (Pouze widget) Automaticky spusťte aplikaci z widgetu bez čekání na klepnutí. - Povolte službu na pozadí, aby odeslala stav baterie hodin do Home Assistant. - Obnovovací frekvence (v minutách), při které by služba na pozadí měla opakovat odesílání úrovně baterie. - + Povolte službu na pozadí, aby se stav baterie hodin odeslal do Home Assistant. + Obnovovací frekvence (v minutách), při které by služba na pozadí měla opakovat odesílání stavu baterie. + \ No newline at end of file diff --git a/resources-dan/strings/strings.xml b/resources-dan/strings/strings.xml index 9a7bdcd..52bd324 100644 --- a/resources-dan/strings/strings.xml +++ b/resources-dan/strings/strings.xml @@ -38,6 +38,7 @@ Ingen JSON returneret fra HTTP-anmodning. HTTP-anmodning returnerede fejlkode = API URL må ikke have en efterfølgende skråstreg '/' + Kunne ikke registrere Webhook Ledig Tjekker... Ikke tilgængelig @@ -57,10 +58,10 @@ Menupunkt stil. Ikoner Yderligere tekst - Venstre (fra) eller Højre (til) menujustering. + Venstre (fra) eller højre (til) menujustering. Venstre til højre Højre til venstre (Kun widget) Start automatisk applikationen fra widgetten uden at vente på et tryk. Aktiver baggrundstjenesten for at sende urets batteriniveau til Home Assistant. Opdateringshastigheden (i minutter), hvormed baggrundstjenesten skal gentage afsendelsen af ​​batteriniveauet. - + \ No newline at end of file diff --git a/resources-deu/strings/strings.xml b/resources-deu/strings/strings.xml index 8f115fc..5e1a587 100644 --- a/resources-deu/strings/strings.xml +++ b/resources-deu/strings/strings.xml @@ -38,6 +38,7 @@ Von der HTTP-Anfrage wurde kein JSON zurückgegeben. Die HTTP-Anfrage gab folgenden Fehlercode zurück = Die API-URL darf keinen abschließenden Schrägstrich „/“ enthalten. + Webhook konnte nicht registriert werden Verfügbar Überprüfung... Nicht verfügbar @@ -63,4 +64,4 @@ (Nur Widget) Starten Sie die Anwendung automatisch über das Widget, ohne auf einen Tipp warten zu müssen. Aktivieren Sie den Hintergrunddienst, um den Batteriestand der Uhr an Home Assistant zu senden. Die Aktualisierungsrate (in Minuten), mit der der Hintergrunddienst das Senden des Akkustands wiederholen soll. - + \ No newline at end of file diff --git a/resources-dut/strings/strings.xml b/resources-dut/strings/strings.xml index 9bedd5d..59d002e 100644 --- a/resources-dut/strings/strings.xml +++ b/resources-dut/strings/strings.xml @@ -38,17 +38,18 @@ Er is geen JSON geretourneerd door een HTTP-verzoek. HTTP-verzoek retourneerde foutcode = API-URL mag geen afsluitende slash '/' bevatten + Registreren van Webhook is mislukt Beschikbaar Controleren... Niet beschikbaar Niet geconfigureerd In cache opgeslagen Menu - + Selecteer... API-sleutel voor HomeAssistant. Toegangstoken met lange levensduur. - URL voor HomeAssistant API. + URL voor HomeAssistant-API. URL voor menuconfiguratie (JSON). Moet de applicatie de menuconfiguratie in de cache opslaan? Moet de applicatie de volgende keer dat deze wordt gestart de bestaande cache wissen? @@ -63,4 +64,4 @@ (Alleen Widget) Start de applicatie automatisch vanuit de widget zonder te wachten op een tik. Schakel de achtergrondservice in om het batterijniveau van de klok naar Home Assistant te sturen. De vernieuwingsfrequentie (in minuten) waarmee de achtergrondservice het batterijniveau opnieuw moet verzenden. - + \ No newline at end of file diff --git a/resources-est/strings/strings.xml b/resources-est/strings/strings.xml index 995c777..f592f22 100644 --- a/resources-est/strings/strings.xml +++ b/resources-est/strings/strings.xml @@ -32,12 +32,13 @@ Rakenduse seadetes pole API-võtit Rakenduse seadetes pole API URL-i Rakenduse seadetes pole konfiguratsiooni URL-i - API-kõned liiga kiired. Palun aeglustage taotluste esitamist. + API-kõned liiga kiired. Palun aeglustage oma taotlusi. URL-i ei leitud. Võimalik API URL-i viga seadetes. URL-i ei leitud. Võimalik konfiguratsiooni URL-i viga seadetes. - HTTP-päringust ei tagastatud ühtegi JSON-i. + HTTP päringust ei tagastatud ühtegi JSON-i. HTTP päring tagastas veakoodi = API URL-i lõpus ei tohi olla kaldkriipsu „/” + Webhaoki registreerimine ebaõnnestus Saadaval Kontrollimine... Pole saadaval @@ -61,6 +62,6 @@ Vasakult paremale Paremalt vasakule (Ainult vidin) Käivitage rakendus automaatselt vidinast ilma puudutust ootamata. - Lubage taustteenus, et saata Home Assistantile kella aku tase. + Lubage taustateenus, et saata Home Assistantile kella aku tase. Värskendussagedus (minutites), mille juures taustateenus peaks aku taseme saatmist kordama. - + \ No newline at end of file diff --git a/resources-fin/strings/strings.xml b/resources-fin/strings/strings.xml index 1609c30..59d76ba 100644 --- a/resources-fin/strings/strings.xml +++ b/resources-fin/strings/strings.xml @@ -29,7 +29,7 @@ Ei puhelinyhteyttä Ei Internet-yhteyttä Ei vastausta, tarkista Internet-yhteys - Sovelluksen asetuksissa ei ole API-avainta + Sovellusasetuksissa ei ole API-avainta Sovellusasetuksissa ei ole API URL-osoitetta Sovelluksen asetuksissa ei ole konfigurointi-URL-osoitetta API-kutsut liian nopeita. Hidasta pyyntöjäsi. @@ -38,6 +38,7 @@ HTTP-pyynnöstä ei palautettu JSON-tiedostoja. HTTP-pyyntö palautti virhekoodin = API-URL-osoitteessa ei saa olla perässä olevaa kauttaviivaa '/' + Webhookin rekisteröinti epäonnistui Saatavilla Tarkistetaan... Ei saatavilla @@ -53,7 +54,7 @@ Pitäisikö sovelluksen tallentaa valikon asetukset välimuistiin? Pitäisikö sovelluksen tyhjentää olemassa oleva välimuisti, kun se käynnistetään seuraavan kerran? Aikakatkaisu sekunneissa. Poistu sovelluksesta tämän käyttämättömyyden jälkeen säästääksesi laitteen akkua. - Tämän ajan kuluttua (sekunneissa) toiminnon vahvistusikkuna suljetaan automaattisesti ja toiminto peruutetaan. Aseta arvoksi 0, jos haluat poistaa aikakatkaisun käytöstä. + Tämän ajan kuluttua (sekunneissa) toiminnon vahvistusikkuna suljetaan automaattisesti ja toiminto peruutetaan. Aseta arvoksi 0 poistaaksesi aikakatkaisun käytöstä. Valikkokohdan tyyli. Kuvakkeet Lisäteksti @@ -63,4 +64,4 @@ (Vain widget) Käynnistä sovellus automaattisesti widgetistä odottamatta napautusta. Ota taustapalvelu käyttöön lähettääksesi kellon akun varaustason Home Assistantille. Virkistystaajuus (minuutteina), jolla taustapalvelun pitäisi toistaa akun varaustason lähettämistä. - + \ No newline at end of file diff --git a/resources-fre/strings/strings.xml b/resources-fre/strings/strings.xml index cb0ec35..78d7560 100644 --- a/resources-fre/strings/strings.xml +++ b/resources-fre/strings/strings.xml @@ -38,6 +38,7 @@ Aucun JSON renvoyé par la requête HTTP. La requête HTTP a renvoyé un code d'erreur = L'URL de l'API ne doit pas comporter de barre oblique finale '/' + Échec de l'enregistrement du Webhook Disponible Vérification... Indisponible @@ -52,7 +53,7 @@ URL de configuration des menus (JSON). L'application doit-elle mettre en cache la configuration du menu ? L'application doit-elle vider le cache existant au prochain démarrage ? - Délai d'expiration en secondes. Quittez l'application après cette période d'inactivité pour économiser la batterie de l'appareil. + Délai d'attente en secondes. Quittez l'application après cette période d'inactivité pour économiser la batterie de l'appareil. Passé ce délai (en secondes), une boîte de dialogue de confirmation d'une action se ferme automatiquement et l'action est annulée. Réglez sur 0 pour désactiver le délai d'attente. Style des éléments de menu. Icônes @@ -63,4 +64,4 @@ (Widget uniquement) Démarrez automatiquement l'application à partir du widget sans attendre un clic. Activez le service d'arrière-plan pour envoyer le niveau de batterie de l'horloge à Home Assistant. Fréquence de rafraîchissement (en minutes) à laquelle le service en arrière-plan doit répéter l'envoi du niveau de la batterie. - + \ No newline at end of file diff --git a/resources-gre/strings/strings.xml b/resources-gre/strings/strings.xml index 598260f..ee621ca 100644 --- a/resources-gre/strings/strings.xml +++ b/resources-gre/strings/strings.xml @@ -30,14 +30,15 @@ Δεν υπάρχει σύνδεση στο διαδίκτυο Καμία απάντηση, ελέγξτε τη σύνδεση στο Διαδίκτυο Δεν υπάρχει κλειδί API στις ρυθμίσεις της εφαρμογής - Δεν υπάρχει URL API στις ρυθμίσεις της εφαρμογής + Δεν υπάρχει διεύθυνση URL API στις ρυθμίσεις της εφαρμογής Δεν υπάρχει διεύθυνση URL διαμόρφωσης στις ρυθμίσεις της εφαρμογής Κλήσεις API πολύ γρήγορες. Παρακαλώ επιβραδύνετε τα αιτήματά σας. Η διεύθυνση URL δεν βρέθηκε. Πιθανό σφάλμα διεύθυνσης URL API στις ρυθμίσεις. - Η διεύθυνση URL δεν βρέθηκε. Πιθανό σφάλμα διεύθυνσης URL διαμόρφωσης στις ρυθμίσεις. + Η διεύθυνση URL δεν βρέθηκε. Πιθανό σφάλμα διαμόρφωσης URL στις ρυθμίσεις. Δεν επιστράφηκε JSON από αίτημα HTTP. Το αίτημα HTTP επέστρεψε κωδικό σφάλματος = - Η διεύθυνση URL του API δεν πρέπει να έχει τελική κάθετο "/" + Η διεύθυνση URL του API δεν πρέπει να έχει κάθετο "/" + Η εγγραφή του Webhook απέτυχε Διαθέσιμος Ελεγχος... Μη διαθέσιμο @@ -53,7 +54,7 @@ Πρέπει η εφαρμογή να αποθηκεύσει προσωρινά τη διαμόρφωση του μενού; Πρέπει η εφαρμογή να διαγράψει την υπάρχουσα προσωρινή μνήμη την επόμενη φορά που θα ξεκινήσει; Timeout σε δευτερόλεπτα. Κλείστε την εφαρμογή μετά από αυτήν την περίοδο αδράνειας για να εξοικονομήσετε την μπαταρία της συσκευής. - Μετά από αυτό το χρονικό διάστημα (σε δευτερόλεπτα), ένα παράθυρο διαλόγου επιβεβαίωσης για μια ενέργεια κλείνει αυτόματα και η ενέργεια ακυρώνεται. Ορίστε στο 0 για να απενεργοποιήσετε το χρονικό όριο. + Μετά από αυτό το διάστημα (σε δευτερόλεπτα), ένα παράθυρο διαλόγου επιβεβαίωσης για μια ενέργεια κλείνει αυτόματα και η ενέργεια ακυρώνεται. Ορίστε στο 0 για να απενεργοποιήσετε το χρονικό όριο. Στυλ στοιχείου μενού. εικονίδια Πρόσθετο Κείμενο @@ -63,4 +64,4 @@ (Μόνο widget) Αυτόματη εκκίνηση της εφαρμογής από το widget χωρίς να περιμένετε ένα πάτημα. Ενεργοποιήστε την υπηρεσία παρασκηνίου για αποστολή της στάθμης της μπαταρίας του ρολογιού στο Home Assistant. Ο ρυθμός ανανέωσης (σε λεπτά) με τον οποίο η υπηρεσία παρασκηνίου θα πρέπει να επαναλάβει στέλνοντας το επίπεδο της μπαταρίας. - + \ No newline at end of file diff --git a/resources-heb/strings/strings.xml b/resources-heb/strings/strings.xml index e379ba9..1755d13 100644 --- a/resources-heb/strings/strings.xml +++ b/resources-heb/strings/strings.xml @@ -28,7 +28,7 @@ יצא לפועל אין חיבור לטלפון אין חיבור אינטרנט - אין תגובה, בדוק חיבור לאינטרנט + אין תגובה, בדוק את חיבור האינטרנט אין מפתח API בהגדרות האפליקציה אין כתובת API בהגדרות האפליקציה אין כתובת URL לתצורה בהגדרות האפליקציה @@ -38,6 +38,7 @@ לא הוחזר JSON מבקשת HTTP. בקשת HTTP החזירה קוד שגיאה = כתובת ה-API לא חייבת לכלול לוכסן אחורי '/' + רישום Webhook נכשל זמין בודק... אינו זמין @@ -63,4 +64,4 @@ (יישומון בלבד) הפעל אוטומטית את האפליקציה מהווידג'ט מבלי לחכות להקשה. אפשר את שירות הרקע כדי לשלוח את רמת הסוללה של השעון אל Home Assistant. קצב הרענון (בדקות) שבו שירות הרקע אמור לחזור על שליחת רמת הסוללה. - + \ No newline at end of file diff --git a/resources-hrv/strings/strings.xml b/resources-hrv/strings/strings.xml index 82faa45..2057b1d 100644 --- a/resources-hrv/strings/strings.xml +++ b/resources-hrv/strings/strings.xml @@ -38,6 +38,7 @@ HTTP zahtjev nije vratio JSON. HTTP zahtjev vratio je kod greške = API URL ne smije imati kosu crtu na kraju '/' + Registracija Webhooka nije uspjela Dostupno Provjera... Nedostupan @@ -63,4 +64,4 @@ (Samo widget) Automatski pokrenite aplikaciju iz widgeta bez čekanja na dodir. Omogućite pozadinsku uslugu za slanje razine baterije sata kućnom pomoćniku. Brzina osvježavanja (u minutama) pri kojoj bi pozadinska usluga trebala ponavljati slanje razine baterije. - + \ No newline at end of file diff --git a/resources-hun/strings/strings.xml b/resources-hun/strings/strings.xml index dc7b544..cfabe4a 100644 --- a/resources-hun/strings/strings.xml +++ b/resources-hun/strings/strings.xml @@ -38,6 +38,7 @@ A HTTP-kérésből nem érkezett vissza JSON. A HTTP-kérés = hibakódot adott vissza Az API URL-ben nem lehet perjel a „/” + Nem sikerült regisztrálni a Webhook-ot Elérhető Ellenőrzés... Nem érhető el @@ -50,17 +51,17 @@ Hosszú életű hozzáférési token. A HomeAssistant API URL-je. URL a menükonfigurációhoz (JSON). - Az alkalmazásnak gyorsítótárba kell helyeznie a menü konfigurációját? + Az alkalmazásnak gyorsítótárba kell helyeznie a menükonfigurációt? Törölje az alkalmazásnak a meglévő gyorsítótárat a következő indításakor? Időtúllépés másodpercben. Az eszköz akkumulátorának kímélése érdekében lépjen ki az alkalmazásból ezen inaktivitási időszak után. - Ezen idő elteltével (másodpercben) egy művelet megerősítő párbeszédpanele automatikusan bezárul, és a művelet megszakad. Állítsa 0-ra az időtúllépés letiltásához. + Ezen idő letelte után (másodpercben) a művelet megerősítő párbeszédablakja automatikusan bezárul, és a művelet megszakad. Állítsa 0-ra az időtúllépés letiltásához. Menüelem stílusa. Ikonok Kiegészítő szöveg Balra (ki) vagy Jobbra (be) Menüigazítás. Balról jobbra Jobbról balra - (Csak Widget) Az alkalmazás automatikus indítása a widgetről anélkül, hogy egy érintésre várna. + (Csak widget) Az alkalmazás automatikus indítása a widgetről anélkül, hogy egy érintésre várna. Engedélyezze a háttérszolgáltatást, hogy elküldje az óra töltöttségi szintjét a Home Assistantnek. Az a frissítési gyakoriság (percben), amelynél a háttérszolgáltatásnak meg kell ismételnie az akkumulátor töltöttségi szintjének küldését. - + \ No newline at end of file diff --git a/resources-ind/strings/strings.xml b/resources-ind/strings/strings.xml index 2ea08f1..0cfb7c1 100644 --- a/resources-ind/strings/strings.xml +++ b/resources-ind/strings/strings.xml @@ -31,13 +31,14 @@ Tidak Ada Respon, periksa koneksi Internet Tidak ada kunci API di pengaturan aplikasi Tidak ada URL API di pengaturan aplikasi - Tidak ada URL konfigurasi dalam pengaturan aplikasi + Tidak ada URL konfigurasi di pengaturan aplikasi Panggilan API terlalu cepat. Harap memperlambat permintaan Anda. URL tidak ditemukan. Potensi kesalahan URL API dalam pengaturan. URL tidak ditemukan. Potensi kesalahan URL Konfigurasi dalam pengaturan. Tidak ada JSON yang dikembalikan dari permintaan HTTP. Permintaan HTTP mengembalikan kode kesalahan = URL API tidak boleh memiliki garis miring '/' + Gagal mendaftarkan Webhook Tersedia Memeriksa... Tidak tersedia @@ -63,4 +64,4 @@ (Khusus widget) Secara otomatis memulai aplikasi dari widget tanpa menunggu ketukan. Aktifkan layanan latar belakang untuk mengirim level baterai jam ke Home Assistant. Kecepatan refresh (dalam menit) saat layanan latar belakang harus mengulangi pengiriman level baterai. - + \ No newline at end of file diff --git a/resources-ita/strings/strings.xml b/resources-ita/strings/strings.xml index f7d84e2..98d9f65 100644 --- a/resources-ita/strings/strings.xml +++ b/resources-ita/strings/strings.xml @@ -38,6 +38,7 @@ Nessun JSON restituito dalla richiesta HTTP. La richiesta HTTP ha restituito il codice di errore = L'URL dell'API non deve avere una barra finale "/" + Impossibile registrare il Webhook Disponibile Controllo... Non disponibile @@ -63,4 +64,4 @@ (Solo widget) Avvia automaticamente l'applicazione dal widget senza attendere un tocco. Abilita il servizio in background per inviare il livello della batteria dell'orologio a Home Assistant. La frequenza di aggiornamento (in minuti) alla quale il servizio in background deve ripetere l'invio del livello della batteria. - + \ No newline at end of file diff --git a/resources-jpn/strings/strings.xml b/resources-jpn/strings/strings.xml index f2f7414..aeb7ae1 100644 --- a/resources-jpn/strings/strings.xml +++ b/resources-jpn/strings/strings.xml @@ -38,6 +38,7 @@ HTTP リクエストから JSON が返されませんでした。 HTTP リクエストがエラー コードを返しました = API URL の末尾にスラッシュ「/」を含めることはできません + Webhookの登録に失敗しました 利用可能 チェック中... 利用不可 @@ -63,4 +64,4 @@ (ウィジェットのみ)タップを待たずにウィジェットからアプリを自動起動します。 バックグラウンド サービスを有効にして、時計のバッテリー レベルをホーム アシスタントに送信します。 バックグラウンド サービスがバッテリー レベルの送信を繰り返すリフレッシュ レート (分単位)。 - + \ No newline at end of file diff --git a/resources-kor/strings/strings.xml b/resources-kor/strings/strings.xml index 4b6d3c8..3cdfbc8 100644 --- a/resources-kor/strings/strings.xml +++ b/resources-kor/strings/strings.xml @@ -37,7 +37,8 @@ URL을 찾을 수 없습니다. 설정에 잠재적인 구성 URL 오류가 있습니다. HTTP 요청에서 JSON이 반환되지 않았습니다. HTTP 요청이 오류 코드를 반환했습니다 = - API URL에는 후행 슬래시 '/'가 있어서는 안 됩니다. + API URL에는 후행 슬래시 '/'가 없어야 합니다. + 웹훅 등록 실패 사용 가능 확인 중... 없는 @@ -60,7 +61,7 @@ 왼쪽(끄기) 또는 오른쪽(켜기) 메뉴 정렬. 왼쪽에서 오른쪽으로 오른쪽에서 왼쪽으로 - (위젯만 해당) 탭을 기다리지 않고 위젯에서 자동으로 애플리케이션을 시작합니다. + (위젯만 해당) 탭을 기다리지 않고 위젯에서 애플리케이션을 자동으로 시작합니다. 시계 배터리 수준을 홈어시스턴트로 보내려면 백그라운드 서비스를 활성화하세요. 백그라운드 서비스가 배터리 수준 전송을 반복해야 하는 새로 고침 빈도(분)입니다. - + \ No newline at end of file diff --git a/resources-lav/strings/strings.xml b/resources-lav/strings/strings.xml index ef007ab..c89c231 100644 --- a/resources-lav/strings/strings.xml +++ b/resources-lav/strings/strings.xml @@ -38,6 +38,7 @@ No HTTP pieprasījuma netika atgriezts neviens JSON fails. HTTP pieprasījums atgrieza kļūdas kodu = API URL beigās nedrīkst būt slīpsvītra “/” + Neizdevās reģistrēt Web aizķeri Pieejams Notiek pārbaude... Nav pieejams @@ -57,10 +58,10 @@ Izvēlnes vienuma stils. Ikonas Papildu teksts - Kreisā (izslēgta) vai labā (ieslēgta) izvēlnes izlīdzināšana. + Kreisā (izslēgta) vai labā (ieslēgta) izvēlnes līdzināšana. No kreisās uz labo No labās uz kreiso (tikai logrīkam) Automātiski startējiet lietojumprogrammu no logrīka, negaidot pieskārienu. Iespējojiet fona pakalpojumu, lai uz Home Assistant nosūtītu pulksteņa akumulatora uzlādes līmeni. Atsvaidzes intensitāte (minūtēs), ar kādu fona pakalpojumam ir jāatkārto akumulatora līmeņa nosūtīšana. - + \ No newline at end of file diff --git a/resources-lit/strings/strings.xml b/resources-lit/strings/strings.xml index daffe0d..4b7e6f6 100644 --- a/resources-lit/strings/strings.xml +++ b/resources-lit/strings/strings.xml @@ -38,6 +38,7 @@ Joks JSON negrąžintas iš HTTP užklausos. HTTP užklausa grąžino klaidos kodą = API URL pabaigoje negali būti pasvirojo brūkšnio „/“ + Nepavyko užregistruoti Webhook Yra Tikrinama... Nepasiekiamas @@ -46,11 +47,11 @@ Meniu Pasirinkite... - API raktas, skirtas „HomeAssistant“. + API raktas, skirtas HomeAssistant. Ilgalaikis prieigos raktas. „HomeAssistant“ API URL. Meniu konfigūravimo URL (JSON). - Ar programa turėtų talpykloje išsaugoti meniu konfigūraciją? + Ar programa turėtų išsaugoti meniu konfigūraciją talpykloje? Ar programa turėtų išvalyti esamą talpyklą kitą kartą paleidus? Skirtasis laikas sekundėmis. Po šio neveiklumo laikotarpio išeikite iš programos, kad taupytumėte įrenginio akumuliatorių. Praėjus šiam laikui (sekundėmis), veiksmo patvirtinimo dialogo langas automatiškai uždaromas ir veiksmas atšaukiamas. Nustatykite 0, kad išjungtumėte skirtąjį laiką. @@ -63,4 +64,4 @@ (Tik valdiklis) Automatiškai paleiskite programą iš valdiklio, nelaukdami palietimo. Įgalinkite foninę paslaugą, kad į „Home Assistant“ būtų išsiųstas laikrodžio akumuliatoriaus lygis. Atnaujinimo dažnis (minutėmis), kuriuo foninė paslauga turėtų pakartoti baterijos lygio siuntimą. - + \ No newline at end of file diff --git a/resources-nob/strings/strings.xml b/resources-nob/strings/strings.xml index b1c6840..53a0f3f 100644 --- a/resources-nob/strings/strings.xml +++ b/resources-nob/strings/strings.xml @@ -38,6 +38,7 @@ Ingen JSON returnert fra HTTP-forespørsel. HTTP-forespørsel returnerte feilkode = API URL må ikke ha en etterfølgende skråstrek '/' + Kunne ikke registrere Webhook Tilgjengelig Sjekker... Utilgjengelig @@ -62,5 +63,5 @@ Høyre til venstre (Kun widget) Start applikasjonen automatisk fra widgeten uten å vente på et trykk. Aktiver bakgrunnstjenesten for å sende klokkens batterinivå til Home Assistant. - Oppdateringshastigheten (i minutter) som bakgrunnstjenesten skal gjenta sendingen av batterinivået med. - + Oppdateringsfrekvensen (i minutter) som bakgrunnstjenesten skal gjenta sendingen av batterinivået med. + \ No newline at end of file diff --git a/resources-pol/strings/strings.xml b/resources-pol/strings/strings.xml index edaa467..7e3dde4 100644 --- a/resources-pol/strings/strings.xml +++ b/resources-pol/strings/strings.xml @@ -38,6 +38,7 @@ Z żądania HTTP nie zwrócono żadnego kodu JSON. Żądanie HTTP zwróciło kod błędu = Adres URL interfejsu API nie może zawierać końcowego ukośnika „/” + Nie udało się zarejestrować webhooka Dostępny Kontrola... Niedostępne @@ -63,4 +64,4 @@ (Tylko widget) Automatycznie uruchamiaj aplikację z widgetu, bez czekania na dotknięcie. Włącz usługę działającą w tle, aby wysyłać poziom naładowania baterii zegara do Home Assistant. Częstotliwość odświeżania (w minutach), z jaką usługa działająca w tle powinna powtarzać wysyłanie informacji o poziomie baterii. - + \ No newline at end of file diff --git a/resources-por/strings/strings.xml b/resources-por/strings/strings.xml index 3877e62..5eeb870 100644 --- a/resources-por/strings/strings.xml +++ b/resources-por/strings/strings.xml @@ -38,6 +38,7 @@ Nenhum JSON foi retornado da solicitação HTTP. Solicitação HTTP retornou código de erro = O URL da API não deve ter uma barra final '/' + Falha ao registrar o Webhook Disponível Verificando... Indisponível @@ -63,4 +64,4 @@ (Somente widget) Inicie automaticamente o aplicativo a partir do widget sem esperar por um toque. Ative o serviço em segundo plano para enviar o nível da bateria do relógio ao Home Assistant. A taxa de atualização (em minutos) na qual o serviço em segundo plano deve repetir o envio do nível da bateria. - + \ No newline at end of file diff --git a/resources-ron/strings/strings.xml b/resources-ron/strings/strings.xml index 370cb48..433191b 100644 --- a/resources-ron/strings/strings.xml +++ b/resources-ron/strings/strings.xml @@ -32,12 +32,13 @@ Nicio cheie API în setările aplicației Nicio adresă URL API în setările aplicației Nicio adresă URL de configurare în setările aplicației - Apeluri API prea rapide. Vă rugăm să încetiniți cererile dvs. + Apeluri API prea rapide. Vă rugăm să vă încetiniți solicitările. Adresa URL nu a fost găsită. Potențială eroare URL API în setări. Adresa URL nu a fost găsită. Potențială eroare URL de configurare în setări. Niciun JSON nu a fost returnat de la solicitarea HTTP. Solicitarea HTTP a returnat codul de eroare = Adresa URL API nu trebuie să aibă o bară oblică „/” + Nu s-a putut înregistra Webhook Disponibil Control... Indisponibil @@ -63,4 +64,4 @@ (Numai widget) Porniți automat aplicația din widget fără a aștepta o atingere. Activați serviciul de fundal pentru a trimite nivelul bateriei ceasului către Home Assistant. Rata de reîmprospătare (în minute) la care serviciul de fundal ar trebui să repete trimiterea nivelului bateriei. - + \ No newline at end of file diff --git a/resources-slo/strings/strings.xml b/resources-slo/strings/strings.xml index 7aee066..6f3177d 100644 --- a/resources-slo/strings/strings.xml +++ b/resources-slo/strings/strings.xml @@ -38,6 +38,7 @@ Z požiadavky HTTP sa nevrátil žiadny JSON. Požiadavka HTTP vrátila kód chyby = Adresa URL rozhrania API nesmie obsahovať koncovú lomku „/“ + Registrácia Webhooku zlyhala Dostupné Prebieha kontrola... nedostupné @@ -47,7 +48,7 @@ Vybrať... Kľúč API pre HomeAssistant. - Prístupový token s dlhou životnosťou. + Dlhotrvajúci prístupový token. URL pre HomeAssistant API. Webová adresa pre konfiguráciu ponuky (JSON). Má aplikácia uložiť do vyrovnávacej pamäte konfiguráciu ponuky? @@ -63,4 +64,4 @@ (Len miniaplikácia) Automaticky spustite aplikáciu z miniaplikácie bez čakania na klepnutie. Povoľte službu na pozadí na odosielanie úrovne batérie hodín do domáceho asistenta. Obnovovacia frekvencia (v minútach), pri ktorej by služba na pozadí mala opakovať odosielanie úrovne batérie. - + \ No newline at end of file diff --git a/resources-slv/strings/strings.xml b/resources-slv/strings/strings.xml index d17b9a7..14cfdf7 100644 --- a/resources-slv/strings/strings.xml +++ b/resources-slv/strings/strings.xml @@ -38,6 +38,7 @@ Zahteva HTTP ni vrnila JSON. Zahteva HTTP je vrnila kodo napake = URL API-ja ne sme imeti končne poševnice '/' + Webhooka ni bilo mogoče registrirati Na voljo Preverjanje ... Ni na voljo @@ -48,7 +49,7 @@ Izberite ... API ključ za HomeAssistant. Dolgoživ dostopni žeton. - URL za API HomeAssistant. + URL za HomeAssistant API. URL za konfiguracijo menija (JSON). Ali naj aplikacija predpomni konfiguracijo menija? Ali naj aplikacija ob naslednjem zagonu počisti obstoječi predpomnilnik? @@ -63,4 +64,4 @@ (Samo pripomoček) Samodejno zaženite aplikacijo iz pripomočka, ne da bi čakali na dotik. Omogočite storitev v ozadju za pošiljanje ravni baterije ure domačemu pomočniku. Hitrost osveževanja (v minutah), pri kateri naj storitev v ozadju ponavlja pošiljanje stanja baterije. - + \ No newline at end of file diff --git a/resources-spa/strings/strings.xml b/resources-spa/strings/strings.xml index bf329ab..a928acd 100644 --- a/resources-spa/strings/strings.xml +++ b/resources-spa/strings/strings.xml @@ -38,6 +38,7 @@ No se devolvió ningún JSON de la solicitud HTTP. La solicitud HTTP devolvió el código de error = La URL de API no debe tener una barra diagonal '/' + No se pudo registrar el webhook Disponible Comprobación... Indisponible @@ -63,4 +64,4 @@ (Solo widget) Inicia automáticamente la aplicación desde el widget sin esperar un toque. Habilite el servicio en segundo plano para enviar el nivel de batería del reloj a Home Assistant. La frecuencia de actualización (en minutos) a la que el servicio en segundo plano debe repetir el envío del nivel de la batería. - + \ No newline at end of file diff --git a/resources-swe/strings/strings.xml b/resources-swe/strings/strings.xml index e2fb6e3..652ad8f 100644 --- a/resources-swe/strings/strings.xml +++ b/resources-swe/strings/strings.xml @@ -15,7 +15,7 @@ @@ -35,9 +35,10 @@ API-anrop för snabba. Vänligen sakta ner dina förfrågningar. Webbadressen hittades inte. Potentiellt API-URL-fel i inställningarna. Webbadressen hittades inte. Potentiellt konfigurations-URL-fel i inställningarna. - Ingen JSON returnerades från HTTP-begäran. + Ingen JSON returnerades från HTTP-förfrågan. HTTP-begäran returnerade felkod = API-URL får inte ha ett snedstreck '/' + Det gick inte att registrera Webhook Tillgängliga Kontroll... Inte tillgänglig @@ -52,7 +53,7 @@ URL för menykonfiguration (JSON). Ska programmet cachelagra menykonfigurationen? Ska programmet rensa den befintliga cachen nästa gång den startas? - Timeout på sekunder. Avsluta programmet efter denna period av inaktivitet för att spara enhetens batteri. + Timeout i sekunder. Avsluta programmet efter denna period av inaktivitet för att spara enhetens batteri. Efter denna tid (i sekunder) stängs en bekräftelsedialog för en åtgärd automatiskt och åtgärden avbryts. Ställ in på 0 för att inaktivera timeout. Menyalternativ stil. Ikoner @@ -63,4 +64,4 @@ (Endast widget) Starta programmet automatiskt från widgeten utan att vänta på ett tryck. Aktivera bakgrundstjänsten för att skicka klockans batterinivå till Home Assistant. Uppdateringshastigheten (i minuter) med vilken bakgrundstjänsten ska upprepa sändningen av batterinivån. - + \ No newline at end of file diff --git a/resources-tha/strings/strings.xml b/resources-tha/strings/strings.xml index f479478..80a6f1c 100644 --- a/resources-tha/strings/strings.xml +++ b/resources-tha/strings/strings.xml @@ -38,6 +38,7 @@ ไม่มี JSON ที่ส่งคืนจากคำขอ HTTP คำขอ HTTP ส่งคืนรหัสข้อผิดพลาด = URL ของ API ต้องไม่มีเครื่องหมายทับต่อท้าย '/' + ลงทะเบียน Webhook.dll ไม่สำเร็จ มีอยู่ กำลังตรวจสอบ... ไม่พร้อมใช้งาน @@ -63,4 +64,4 @@ (วิดเจ็ตเท่านั้น) เริ่มแอปพลิเคชันโดยอัตโนมัติจากวิดเจ็ตโดยไม่ต้องรอการแตะ เปิดใช้บริการพื้นหลังเพื่อส่งระดับแบตเตอรี่นาฬิกาไปยัง Home Assistant อัตรารีเฟรช (เป็นนาที) ที่บริการพื้นหลังควรส่งระดับแบตเตอรี่ซ้ำ - + \ No newline at end of file diff --git a/resources-tur/strings/strings.xml b/resources-tur/strings/strings.xml index 0b7a4d4..8651cee 100644 --- a/resources-tur/strings/strings.xml +++ b/resources-tur/strings/strings.xml @@ -37,7 +37,8 @@ URL bulunamadı. Ayarlarda Olası Yapılandırma URL'si hatası. HTTP isteğinden JSON döndürülmedi. HTTP isteği hata kodunu döndürdü = - API URL'sinin sonunda '/' eğik çizgi olmamalıdır + API URL'sinin sonunda eğik çizgi '/' olmamalıdır + Webhook kaydedilemedi Mevcut Kontrol etme... Kullanım dışı @@ -63,4 +64,4 @@ (Yalnızca Widget) Dokunmayı beklemeden uygulamayı widget'tan otomatik olarak başlatın. Saatin pil seviyesini Ev Asistanına göndermek için arka plan hizmetini etkinleştirin. Arka plan hizmetinin pil seviyesini göndermeyi tekrarlaması gereken yenileme hızı (dakika olarak). - + \ No newline at end of file diff --git a/resources-ukr/strings/strings.xml b/resources-ukr/strings/strings.xml index 6b84ebc..586aec2 100644 --- a/resources-ukr/strings/strings.xml +++ b/resources-ukr/strings/strings.xml @@ -15,7 +15,7 @@ @@ -38,6 +38,7 @@ Запит HTTP не повертає JSON. Запит HTTP повернув код помилки = URL-адреса API не повинна містити косу риску '/' + Не вдалося зареєструвати Webhook в наявності Перевірка... Недоступний @@ -49,13 +50,13 @@ Ключ API для HomeAssistant. Довговічний маркер доступу. URL для HomeAssistant API. - URL для налаштування меню (JSON). + URL-адреса для налаштування меню (JSON). Чи має програма кешувати конфігурацію меню? Чи слід програмі очистити наявний кеш під час наступного запуску? Час очікування в секундах. Вийдіть із програми після цього періоду бездіяльності, щоб заощадити батарею пристрою. Після закінчення цього часу (у секундах) діалогове вікно підтвердження дії автоматично закривається, а дія скасовується. Встановіть 0, щоб вимкнути тайм-аут. Стиль пункту меню. - іконки + Ікони Додатковий текст Ліворуч (вимкнено) або праворуч (увімкнено) вирівнювання меню. Зліва направо @@ -63,4 +64,4 @@ (Лише віджет) Автоматично запускайте програму з віджета, не чекаючи дотику. Увімкніть фонову службу, щоб надсилати інформацію про рівень заряду акумулятора годинника до Home Assistant. Частота оновлення (у хвилинах), з якою фонова служба має повторно надсилати рівень заряду акумулятора. - + \ No newline at end of file diff --git a/resources-vie/strings/strings.xml b/resources-vie/strings/strings.xml index 84fe7e0..f108d01 100644 --- a/resources-vie/strings/strings.xml +++ b/resources-vie/strings/strings.xml @@ -38,6 +38,7 @@ Không có JSON nào được trả về từ yêu cầu HTTP. Yêu cầu HTTP trả về mã lỗi = URL API không được có dấu gạch chéo ở cuối '/' + Không đăng ký được Webhook Có sẵn Đang kiểm tra... Không có sẵn @@ -63,4 +64,4 @@ (Chỉ tiện ích) Tự động khởi động ứng dụng từ tiện ích mà không cần chờ nhấn. Kích hoạt dịch vụ nền để gửi mức pin đồng hồ đến Home Assistant. Tốc độ làm mới (tính bằng phút) mà dịch vụ nền sẽ lặp lại việc gửi mức pin. - + \ No newline at end of file diff --git a/resources-zhs/strings/strings.xml b/resources-zhs/strings/strings.xml index a38c912..6726b12 100644 --- a/resources-zhs/strings/strings.xml +++ b/resources-zhs/strings/strings.xml @@ -38,6 +38,7 @@ HTTP 请求未返回 JSON。 HTTP请求返回错误码= API URL 不得有尾部斜杠“/” + 注册Webhook失败 可用的 检查... 不可用 @@ -63,4 +64,4 @@ (仅限小部件)从小部件自动启动应用程序,无需等待点击。 启用后台服务将时钟电池电量发送到 Home Assistant。 后台服务应重复发送电池电量的刷新率(以分钟为单位)。 - + \ No newline at end of file diff --git a/resources-zht/strings/strings.xml b/resources-zht/strings/strings.xml index 8e4f014..3216a1b 100644 --- a/resources-zht/strings/strings.xml +++ b/resources-zht/strings/strings.xml @@ -38,6 +38,7 @@ HTTP 請求未傳回 JSON。 HTTP請求回傳錯誤碼= API URL 不得有尾部斜線“/” + 註冊Webhook失敗 可用的 檢查... 不可用 @@ -63,4 +64,4 @@ (僅限小部件)從小部件自動啟動應用程序,無需等待點擊。 啟用後台服務將時鐘電池電量傳送到 Home Assistant。 後台服務應重複發送電池電量的更新率(以分鐘為單位)。 - + \ No newline at end of file diff --git a/resources-zsm/strings/strings.xml b/resources-zsm/strings/strings.xml index 1c97afa..e9da9e2 100644 --- a/resources-zsm/strings/strings.xml +++ b/resources-zsm/strings/strings.xml @@ -38,6 +38,7 @@ Tiada JSON dikembalikan daripada permintaan HTTP. Permintaan HTTP mengembalikan kod ralat = URL API tidak boleh mempunyai garis miring '/' + Gagal mendaftar Webhook Tersedia Menyemak... Tidak ada @@ -63,4 +64,4 @@ (Widget sahaja) Mulakan aplikasi secara automatik daripada widget tanpa menunggu satu ketikan. Dayakan perkhidmatan latar belakang untuk menghantar paras bateri jam kepada Home Assistant. Kadar penyegaran semula (dalam minit) di mana perkhidmatan latar belakang harus mengulangi penghantaran tahap bateri. - + \ No newline at end of file From 805a7aa075339b225c217fed1871a3e37bb5b554 Mon Sep 17 00:00:00 2001 From: "Restyled.io" Date: Thu, 11 Jan 2024 18:07:27 +0000 Subject: [PATCH 08/13] Restyled by whitespace --- resources-ara/strings/strings.xml | 2 +- resources-bul/strings/strings.xml | 2 +- resources-ces/strings/strings.xml | 2 +- resources-dan/strings/strings.xml | 2 +- resources-deu/strings/strings.xml | 2 +- resources-dut/strings/strings.xml | 2 +- resources-est/strings/strings.xml | 2 +- resources-fin/strings/strings.xml | 2 +- resources-fre/strings/strings.xml | 2 +- resources-gre/strings/strings.xml | 2 +- resources-heb/strings/strings.xml | 2 +- resources-hrv/strings/strings.xml | 2 +- resources-hun/strings/strings.xml | 2 +- resources-ind/strings/strings.xml | 2 +- resources-ita/strings/strings.xml | 2 +- resources-jpn/strings/strings.xml | 2 +- resources-kor/strings/strings.xml | 2 +- resources-lav/strings/strings.xml | 2 +- resources-lit/strings/strings.xml | 2 +- resources-nob/strings/strings.xml | 2 +- resources-pol/strings/strings.xml | 2 +- resources-por/strings/strings.xml | 2 +- resources-ron/strings/strings.xml | 2 +- resources-slo/strings/strings.xml | 2 +- resources-slv/strings/strings.xml | 2 +- resources-spa/strings/strings.xml | 2 +- resources-swe/strings/strings.xml | 2 +- resources-tha/strings/strings.xml | 2 +- resources-tur/strings/strings.xml | 2 +- resources-ukr/strings/strings.xml | 2 +- resources-vie/strings/strings.xml | 2 +- resources-zhs/strings/strings.xml | 2 +- resources-zht/strings/strings.xml | 2 +- resources-zsm/strings/strings.xml | 2 +- resources/settings/properties.xml | 2 +- 35 files changed, 35 insertions(+), 35 deletions(-) diff --git a/resources-ara/strings/strings.xml b/resources-ara/strings/strings.xml index dc9341c..bd93143 100644 --- a/resources-ara/strings/strings.xml +++ b/resources-ara/strings/strings.xml @@ -64,4 +64,4 @@ (القطعة فقط) قم بتشغيل التطبيق تلقائيًا من الأداة دون انتظار نقرة واحدة. قم بتمكين خدمة الخلفية لإرسال مستوى بطارية الساعة إلى Home Assistant. معدل التحديث (بالدقائق) الذي يجب أن تكرر عنده خدمة الخلفية إرسال مستوى البطارية. - \ No newline at end of file + diff --git a/resources-bul/strings/strings.xml b/resources-bul/strings/strings.xml index d622087..4e1a067 100644 --- a/resources-bul/strings/strings.xml +++ b/resources-bul/strings/strings.xml @@ -64,4 +64,4 @@ (Само за джаджа) Автоматично стартирайте приложението от джаджата, без да чакате докосване. Активирайте фоновата услуга, за да изпратите нивото на батерията на часовника до Home Assistant. Честотата на опресняване (в минути), с която фоновата услуга трябва да повтори изпращането на нивото на батерията. - \ No newline at end of file + diff --git a/resources-ces/strings/strings.xml b/resources-ces/strings/strings.xml index bbc8795..9f925fe 100644 --- a/resources-ces/strings/strings.xml +++ b/resources-ces/strings/strings.xml @@ -64,4 +64,4 @@ (Pouze widget) Automaticky spusťte aplikaci z widgetu bez čekání na klepnutí. Povolte službu na pozadí, aby se stav baterie hodin odeslal do Home Assistant. Obnovovací frekvence (v minutách), při které by služba na pozadí měla opakovat odesílání stavu baterie. - \ No newline at end of file + diff --git a/resources-dan/strings/strings.xml b/resources-dan/strings/strings.xml index 52bd324..747753b 100644 --- a/resources-dan/strings/strings.xml +++ b/resources-dan/strings/strings.xml @@ -64,4 +64,4 @@ (Kun widget) Start automatisk applikationen fra widgetten uden at vente på et tryk. Aktiver baggrundstjenesten for at sende urets batteriniveau til Home Assistant. Opdateringshastigheden (i minutter), hvormed baggrundstjenesten skal gentage afsendelsen af ​​batteriniveauet. - \ No newline at end of file + diff --git a/resources-deu/strings/strings.xml b/resources-deu/strings/strings.xml index 5e1a587..96a6186 100644 --- a/resources-deu/strings/strings.xml +++ b/resources-deu/strings/strings.xml @@ -64,4 +64,4 @@ (Nur Widget) Starten Sie die Anwendung automatisch über das Widget, ohne auf einen Tipp warten zu müssen. Aktivieren Sie den Hintergrunddienst, um den Batteriestand der Uhr an Home Assistant zu senden. Die Aktualisierungsrate (in Minuten), mit der der Hintergrunddienst das Senden des Akkustands wiederholen soll. - \ No newline at end of file + diff --git a/resources-dut/strings/strings.xml b/resources-dut/strings/strings.xml index 59d002e..52d595a 100644 --- a/resources-dut/strings/strings.xml +++ b/resources-dut/strings/strings.xml @@ -64,4 +64,4 @@ (Alleen Widget) Start de applicatie automatisch vanuit de widget zonder te wachten op een tik. Schakel de achtergrondservice in om het batterijniveau van de klok naar Home Assistant te sturen. De vernieuwingsfrequentie (in minuten) waarmee de achtergrondservice het batterijniveau opnieuw moet verzenden. - \ No newline at end of file + diff --git a/resources-est/strings/strings.xml b/resources-est/strings/strings.xml index f592f22..37b1516 100644 --- a/resources-est/strings/strings.xml +++ b/resources-est/strings/strings.xml @@ -64,4 +64,4 @@ (Ainult vidin) Käivitage rakendus automaatselt vidinast ilma puudutust ootamata. Lubage taustateenus, et saata Home Assistantile kella aku tase. Värskendussagedus (minutites), mille juures taustateenus peaks aku taseme saatmist kordama. - \ No newline at end of file + diff --git a/resources-fin/strings/strings.xml b/resources-fin/strings/strings.xml index 59d76ba..853633c 100644 --- a/resources-fin/strings/strings.xml +++ b/resources-fin/strings/strings.xml @@ -64,4 +64,4 @@ (Vain widget) Käynnistä sovellus automaattisesti widgetistä odottamatta napautusta. Ota taustapalvelu käyttöön lähettääksesi kellon akun varaustason Home Assistantille. Virkistystaajuus (minuutteina), jolla taustapalvelun pitäisi toistaa akun varaustason lähettämistä. - \ No newline at end of file + diff --git a/resources-fre/strings/strings.xml b/resources-fre/strings/strings.xml index 78d7560..269a7b9 100644 --- a/resources-fre/strings/strings.xml +++ b/resources-fre/strings/strings.xml @@ -64,4 +64,4 @@ (Widget uniquement) Démarrez automatiquement l'application à partir du widget sans attendre un clic. Activez le service d'arrière-plan pour envoyer le niveau de batterie de l'horloge à Home Assistant. Fréquence de rafraîchissement (en minutes) à laquelle le service en arrière-plan doit répéter l'envoi du niveau de la batterie. - \ No newline at end of file + diff --git a/resources-gre/strings/strings.xml b/resources-gre/strings/strings.xml index ee621ca..5e1da5e 100644 --- a/resources-gre/strings/strings.xml +++ b/resources-gre/strings/strings.xml @@ -64,4 +64,4 @@ (Μόνο widget) Αυτόματη εκκίνηση της εφαρμογής από το widget χωρίς να περιμένετε ένα πάτημα. Ενεργοποιήστε την υπηρεσία παρασκηνίου για αποστολή της στάθμης της μπαταρίας του ρολογιού στο Home Assistant. Ο ρυθμός ανανέωσης (σε λεπτά) με τον οποίο η υπηρεσία παρασκηνίου θα πρέπει να επαναλάβει στέλνοντας το επίπεδο της μπαταρίας. - \ No newline at end of file + diff --git a/resources-heb/strings/strings.xml b/resources-heb/strings/strings.xml index 1755d13..e97ead0 100644 --- a/resources-heb/strings/strings.xml +++ b/resources-heb/strings/strings.xml @@ -64,4 +64,4 @@ (יישומון בלבד) הפעל אוטומטית את האפליקציה מהווידג'ט מבלי לחכות להקשה. אפשר את שירות הרקע כדי לשלוח את רמת הסוללה של השעון אל Home Assistant. קצב הרענון (בדקות) שבו שירות הרקע אמור לחזור על שליחת רמת הסוללה. - \ No newline at end of file + diff --git a/resources-hrv/strings/strings.xml b/resources-hrv/strings/strings.xml index 2057b1d..3aae53d 100644 --- a/resources-hrv/strings/strings.xml +++ b/resources-hrv/strings/strings.xml @@ -64,4 +64,4 @@ (Samo widget) Automatski pokrenite aplikaciju iz widgeta bez čekanja na dodir. Omogućite pozadinsku uslugu za slanje razine baterije sata kućnom pomoćniku. Brzina osvježavanja (u minutama) pri kojoj bi pozadinska usluga trebala ponavljati slanje razine baterije. - \ No newline at end of file + diff --git a/resources-hun/strings/strings.xml b/resources-hun/strings/strings.xml index cfabe4a..17cecf3 100644 --- a/resources-hun/strings/strings.xml +++ b/resources-hun/strings/strings.xml @@ -64,4 +64,4 @@ (Csak widget) Az alkalmazás automatikus indítása a widgetről anélkül, hogy egy érintésre várna. Engedélyezze a háttérszolgáltatást, hogy elküldje az óra töltöttségi szintjét a Home Assistantnek. Az a frissítési gyakoriság (percben), amelynél a háttérszolgáltatásnak meg kell ismételnie az akkumulátor töltöttségi szintjének küldését. - \ No newline at end of file + diff --git a/resources-ind/strings/strings.xml b/resources-ind/strings/strings.xml index 0cfb7c1..d259a5b 100644 --- a/resources-ind/strings/strings.xml +++ b/resources-ind/strings/strings.xml @@ -64,4 +64,4 @@ (Khusus widget) Secara otomatis memulai aplikasi dari widget tanpa menunggu ketukan. Aktifkan layanan latar belakang untuk mengirim level baterai jam ke Home Assistant. Kecepatan refresh (dalam menit) saat layanan latar belakang harus mengulangi pengiriman level baterai. - \ No newline at end of file + diff --git a/resources-ita/strings/strings.xml b/resources-ita/strings/strings.xml index 98d9f65..8ef8290 100644 --- a/resources-ita/strings/strings.xml +++ b/resources-ita/strings/strings.xml @@ -64,4 +64,4 @@ (Solo widget) Avvia automaticamente l'applicazione dal widget senza attendere un tocco. Abilita il servizio in background per inviare il livello della batteria dell'orologio a Home Assistant. La frequenza di aggiornamento (in minuti) alla quale il servizio in background deve ripetere l'invio del livello della batteria. - \ No newline at end of file + diff --git a/resources-jpn/strings/strings.xml b/resources-jpn/strings/strings.xml index aeb7ae1..ea21f42 100644 --- a/resources-jpn/strings/strings.xml +++ b/resources-jpn/strings/strings.xml @@ -64,4 +64,4 @@ (ウィジェットのみ)タップを待たずにウィジェットからアプリを自動起動します。 バックグラウンド サービスを有効にして、時計のバッテリー レベルをホーム アシスタントに送信します。 バックグラウンド サービスがバッテリー レベルの送信を繰り返すリフレッシュ レート (分単位)。 - \ No newline at end of file + diff --git a/resources-kor/strings/strings.xml b/resources-kor/strings/strings.xml index 3cdfbc8..4fadb10 100644 --- a/resources-kor/strings/strings.xml +++ b/resources-kor/strings/strings.xml @@ -64,4 +64,4 @@ (위젯만 해당) 탭을 기다리지 않고 위젯에서 애플리케이션을 자동으로 시작합니다. 시계 배터리 수준을 홈어시스턴트로 보내려면 백그라운드 서비스를 활성화하세요. 백그라운드 서비스가 배터리 수준 전송을 반복해야 하는 새로 고침 빈도(분)입니다. - \ No newline at end of file + diff --git a/resources-lav/strings/strings.xml b/resources-lav/strings/strings.xml index c89c231..a06df55 100644 --- a/resources-lav/strings/strings.xml +++ b/resources-lav/strings/strings.xml @@ -64,4 +64,4 @@ (tikai logrīkam) Automātiski startējiet lietojumprogrammu no logrīka, negaidot pieskārienu. Iespējojiet fona pakalpojumu, lai uz Home Assistant nosūtītu pulksteņa akumulatora uzlādes līmeni. Atsvaidzes intensitāte (minūtēs), ar kādu fona pakalpojumam ir jāatkārto akumulatora līmeņa nosūtīšana. - \ No newline at end of file + diff --git a/resources-lit/strings/strings.xml b/resources-lit/strings/strings.xml index 4b7e6f6..14d9afb 100644 --- a/resources-lit/strings/strings.xml +++ b/resources-lit/strings/strings.xml @@ -64,4 +64,4 @@ (Tik valdiklis) Automatiškai paleiskite programą iš valdiklio, nelaukdami palietimo. Įgalinkite foninę paslaugą, kad į „Home Assistant“ būtų išsiųstas laikrodžio akumuliatoriaus lygis. Atnaujinimo dažnis (minutėmis), kuriuo foninė paslauga turėtų pakartoti baterijos lygio siuntimą. - \ No newline at end of file + diff --git a/resources-nob/strings/strings.xml b/resources-nob/strings/strings.xml index 53a0f3f..8c21b39 100644 --- a/resources-nob/strings/strings.xml +++ b/resources-nob/strings/strings.xml @@ -64,4 +64,4 @@ (Kun widget) Start applikasjonen automatisk fra widgeten uten å vente på et trykk. Aktiver bakgrunnstjenesten for å sende klokkens batterinivå til Home Assistant. Oppdateringsfrekvensen (i minutter) som bakgrunnstjenesten skal gjenta sendingen av batterinivået med. - \ No newline at end of file + diff --git a/resources-pol/strings/strings.xml b/resources-pol/strings/strings.xml index 7e3dde4..55689e1 100644 --- a/resources-pol/strings/strings.xml +++ b/resources-pol/strings/strings.xml @@ -64,4 +64,4 @@ (Tylko widget) Automatycznie uruchamiaj aplikację z widgetu, bez czekania na dotknięcie. Włącz usługę działającą w tle, aby wysyłać poziom naładowania baterii zegara do Home Assistant. Częstotliwość odświeżania (w minutach), z jaką usługa działająca w tle powinna powtarzać wysyłanie informacji o poziomie baterii. - \ No newline at end of file + diff --git a/resources-por/strings/strings.xml b/resources-por/strings/strings.xml index 5eeb870..44f08b9 100644 --- a/resources-por/strings/strings.xml +++ b/resources-por/strings/strings.xml @@ -64,4 +64,4 @@ (Somente widget) Inicie automaticamente o aplicativo a partir do widget sem esperar por um toque. Ative o serviço em segundo plano para enviar o nível da bateria do relógio ao Home Assistant. A taxa de atualização (em minutos) na qual o serviço em segundo plano deve repetir o envio do nível da bateria. - \ No newline at end of file + diff --git a/resources-ron/strings/strings.xml b/resources-ron/strings/strings.xml index 433191b..39ed73a 100644 --- a/resources-ron/strings/strings.xml +++ b/resources-ron/strings/strings.xml @@ -64,4 +64,4 @@ (Numai widget) Porniți automat aplicația din widget fără a aștepta o atingere. Activați serviciul de fundal pentru a trimite nivelul bateriei ceasului către Home Assistant. Rata de reîmprospătare (în minute) la care serviciul de fundal ar trebui să repete trimiterea nivelului bateriei. - \ No newline at end of file + diff --git a/resources-slo/strings/strings.xml b/resources-slo/strings/strings.xml index 6f3177d..5253d29 100644 --- a/resources-slo/strings/strings.xml +++ b/resources-slo/strings/strings.xml @@ -64,4 +64,4 @@ (Len miniaplikácia) Automaticky spustite aplikáciu z miniaplikácie bez čakania na klepnutie. Povoľte službu na pozadí na odosielanie úrovne batérie hodín do domáceho asistenta. Obnovovacia frekvencia (v minútach), pri ktorej by služba na pozadí mala opakovať odosielanie úrovne batérie. - \ No newline at end of file + diff --git a/resources-slv/strings/strings.xml b/resources-slv/strings/strings.xml index 14cfdf7..a4668b7 100644 --- a/resources-slv/strings/strings.xml +++ b/resources-slv/strings/strings.xml @@ -64,4 +64,4 @@ (Samo pripomoček) Samodejno zaženite aplikacijo iz pripomočka, ne da bi čakali na dotik. Omogočite storitev v ozadju za pošiljanje ravni baterije ure domačemu pomočniku. Hitrost osveževanja (v minutah), pri kateri naj storitev v ozadju ponavlja pošiljanje stanja baterije. - \ No newline at end of file + diff --git a/resources-spa/strings/strings.xml b/resources-spa/strings/strings.xml index a928acd..bb33d53 100644 --- a/resources-spa/strings/strings.xml +++ b/resources-spa/strings/strings.xml @@ -64,4 +64,4 @@ (Solo widget) Inicia automáticamente la aplicación desde el widget sin esperar un toque. Habilite el servicio en segundo plano para enviar el nivel de batería del reloj a Home Assistant. La frecuencia de actualización (en minutos) a la que el servicio en segundo plano debe repetir el envío del nivel de la batería. - \ No newline at end of file + diff --git a/resources-swe/strings/strings.xml b/resources-swe/strings/strings.xml index 652ad8f..9f9d494 100644 --- a/resources-swe/strings/strings.xml +++ b/resources-swe/strings/strings.xml @@ -64,4 +64,4 @@ (Endast widget) Starta programmet automatiskt från widgeten utan att vänta på ett tryck. Aktivera bakgrundstjänsten för att skicka klockans batterinivå till Home Assistant. Uppdateringshastigheten (i minuter) med vilken bakgrundstjänsten ska upprepa sändningen av batterinivån. - \ No newline at end of file + diff --git a/resources-tha/strings/strings.xml b/resources-tha/strings/strings.xml index 80a6f1c..a01630f 100644 --- a/resources-tha/strings/strings.xml +++ b/resources-tha/strings/strings.xml @@ -64,4 +64,4 @@ (วิดเจ็ตเท่านั้น) เริ่มแอปพลิเคชันโดยอัตโนมัติจากวิดเจ็ตโดยไม่ต้องรอการแตะ เปิดใช้บริการพื้นหลังเพื่อส่งระดับแบตเตอรี่นาฬิกาไปยัง Home Assistant อัตรารีเฟรช (เป็นนาที) ที่บริการพื้นหลังควรส่งระดับแบตเตอรี่ซ้ำ - \ No newline at end of file + diff --git a/resources-tur/strings/strings.xml b/resources-tur/strings/strings.xml index 8651cee..6e87f25 100644 --- a/resources-tur/strings/strings.xml +++ b/resources-tur/strings/strings.xml @@ -64,4 +64,4 @@ (Yalnızca Widget) Dokunmayı beklemeden uygulamayı widget'tan otomatik olarak başlatın. Saatin pil seviyesini Ev Asistanına göndermek için arka plan hizmetini etkinleştirin. Arka plan hizmetinin pil seviyesini göndermeyi tekrarlaması gereken yenileme hızı (dakika olarak). - \ No newline at end of file + diff --git a/resources-ukr/strings/strings.xml b/resources-ukr/strings/strings.xml index 586aec2..be805a4 100644 --- a/resources-ukr/strings/strings.xml +++ b/resources-ukr/strings/strings.xml @@ -64,4 +64,4 @@ (Лише віджет) Автоматично запускайте програму з віджета, не чекаючи дотику. Увімкніть фонову службу, щоб надсилати інформацію про рівень заряду акумулятора годинника до Home Assistant. Частота оновлення (у хвилинах), з якою фонова служба має повторно надсилати рівень заряду акумулятора. - \ No newline at end of file + diff --git a/resources-vie/strings/strings.xml b/resources-vie/strings/strings.xml index f108d01..d545951 100644 --- a/resources-vie/strings/strings.xml +++ b/resources-vie/strings/strings.xml @@ -64,4 +64,4 @@ (Chỉ tiện ích) Tự động khởi động ứng dụng từ tiện ích mà không cần chờ nhấn. Kích hoạt dịch vụ nền để gửi mức pin đồng hồ đến Home Assistant. Tốc độ làm mới (tính bằng phút) mà dịch vụ nền sẽ lặp lại việc gửi mức pin. - \ No newline at end of file + diff --git a/resources-zhs/strings/strings.xml b/resources-zhs/strings/strings.xml index 6726b12..9402ecb 100644 --- a/resources-zhs/strings/strings.xml +++ b/resources-zhs/strings/strings.xml @@ -64,4 +64,4 @@ (仅限小部件)从小部件自动启动应用程序,无需等待点击。 启用后台服务将时钟电池电量发送到 Home Assistant。 后台服务应重复发送电池电量的刷新率(以分钟为单位)。 - \ No newline at end of file + diff --git a/resources-zht/strings/strings.xml b/resources-zht/strings/strings.xml index 3216a1b..accac1d 100644 --- a/resources-zht/strings/strings.xml +++ b/resources-zht/strings/strings.xml @@ -64,4 +64,4 @@ (僅限小部件)從小部件自動啟動應用程序,無需等待點擊。 啟用後台服務將時鐘電池電量傳送到 Home Assistant。 後台服務應重複發送電池電量的更新率(以分鐘為單位)。 - \ No newline at end of file + diff --git a/resources-zsm/strings/strings.xml b/resources-zsm/strings/strings.xml index e9da9e2..245c31e 100644 --- a/resources-zsm/strings/strings.xml +++ b/resources-zsm/strings/strings.xml @@ -64,4 +64,4 @@ (Widget sahaja) Mulakan aplikasi secara automatik daripada widget tanpa menunggu satu ketikan. Dayakan perkhidmatan latar belakang untuk menghantar paras bateri jam kepada Home Assistant. Kadar penyegaran semula (dalam minit) di mana perkhidmatan latar belakang harus mengulangi penghantaran tahap bateri. - \ No newline at end of file + diff --git a/resources/settings/properties.xml b/resources/settings/properties.xml index 8c5496e..d01f756 100644 --- a/resources/settings/properties.xml +++ b/resources/settings/properties.xml @@ -53,7 +53,7 @@ 0 RJ$tGq2Fy z`Uz;ZAK^zc_fYjr>5Ss#zE+50>aLXH9Zi`|%&~`?nbmb91ANXXXj(3FqzaTOn zA+v4RegrLsO6U?3l`=zxPuSpRT7|ddz9Hz+Xpf8+C{|^m@JLg18R!`FI!`&41Lqi5 zi6dvfA~F+B9^26us^kCIBT8QQpu01rE87NVwD%*fjv~q%>1~j=ygUFtV|X~*WFQ8! zUC{C-Z5LtthxR7~z2Ds=Y`_w#e)lWM*SIWiDn@*cTCIxOi>NVq*_8R$$Xp;2M9e*k z`uO1Id}HGiI|+b`9Z|kV@rj`mz?pRK{(Lr-(dEP@{9TpdFuA)2ZhVGPMoFp9-}A)e z?$hl1-*|iPXtw|V|GRsmt>RsZw%)C(qAj6TbfK-iM~t>=MXeIi5ZWqQineNx*ei(@ zNvzO?nn5IHj4DAyYD7qcU)s;_`@OF3IoChexyFCaapZWu@_4;ok8!`>9s>XShZooX zL%{$4QwsP$1#}(yE4lwd%YO!YFWnZ99vg(OfjW9=!Z>6k_eXNCgIJG%Ra*A1>$LC& z7Zl?U2=qlv+4&jguY}uHJL&wPL2;t}pn#P~!xe+*^>R}4MDQ(nHP@jFk>|z`r7_}5 z^7BhR*g&`o>GK5;9jK94s-Nk8<`!($WD2|hT*0o=pJ->!0WTHW=UT1(PRa#47FS!m zPeN<&boX|37uS&Gs!laY#&3;=yCxo|2Kig*MyBz&R(5i-Yv0&u>1k`o>sh+bURxqj zW+{;iKclQpJyo3Bc znyf2*8XD^r-<3Qi=v`<)U5P)(KcK18W%KPqyQTx4KYG0e&hb;8FJ+|4#3-Pa?jXP~ zcF*mS@+@)WKOx|9Zy(PVn`?OPPtix#mC)O>zUTg}PS4&!q}P2JKUAKlmom`LUu8JZ zuW-5UsLJffA?;plJ-?6p;7EK)QD+5);!U6t*!7Pr-#9Hf8>FZO@e`!F>O6bOz+N>= za+1#nd}n&p0(SdEeZ8xnPocSy9tFWN5$q|%A+UKAr8{;4}}vyvyPv1q#ju}r!3{eG{z6Fw+h{F zWA(GG&2hNpuWq-DAD#25zhP(;Vd6zg;D^D+N^yR@7gl&Nu8UO6>K~l%X`+$P!+Nkda5m zYTLZHY&Fmj2QfCk&I-EEK^G(X`6?d&f})VZWw2G?qt~CXGNj_9h;T-JMApa-(`3#7 z{}(UaeqzayP^4IsG1#oiHqr+C6bIa>aUdF{qT=>js~@O$Ngr@e0LwW@h+)Y$@kH)t zwRA5R@cS~rM6th-7Q7;YwGNZ7n$OW_I!m+fQlLyw;fei43Fsr4MxxTAf}($@sUO{p!>zI zSc7!0x=wr2XM0YYD^TIDQ{vPcKj#;h1sdjGmRbxH)`9%WJ(J4U$pr;Tef6Gj5p+m%!9`@@FScE7JzYaG;aF(K$~2(K%4>gd}ztfW^{SxI~sOryu}t;dSTl! zf!eRj^I6QFH()nJy5~H2-|Apz^hItSHr+WA3GFWbvdT>OxLR6`If|TaqK@j zIUko6Ma$P874skT#|R5>LYsHvqXRt5K~m@GGt51a6n_4@QykT5%ZxiCmP$jG(FNSD z62_9Hvv+e_9i>sR)IT-CuKhA&4ZyVCL8()|8UVt`_u zLhIXdGe^}0F%v{EF)$?0aQjGtmZy@7L3u7YlMjSkT+Ke{bFWhq~R^O`IY+I?hSYpyKbjT8Hs*v-B&~ZmU-;}P#!!XKVMWU zUSH>bp>XScQJe75+GCSG%zUOso9hNwj`O&p?#OXeJR@{xajOh?<5)DDnZYToF zwB2OsuS=X2-2blJV%aYyjZQu|>ydR>OaR0skZp31;+FkYRHa^v2?{n$%DUkO zbh7c{JXq}F1+>s$r}10#FM9c*%g9K$4)-C1!BiE17H3Fg(2yn5-96Lzl}M69^OMZ} z)lTJ_HmyTQlwOc$d!btcd8*hLOe;I3?Gwq-VQP32G~+sAu8Y~48_&jjFwt&Sj^67n z10!PB#2=#VXUlg1$a4e!JX(HU>pvw04Hd@*->crTt~4Qk(-9e~e?(;WtiukpDRZY! zS1PFtus5=LQ+C=1kfqJD$A;Jj;N)!1_}Xd->UfC5-wKPLI*47mGwjp58P{qlZ-ZgK z9@2sC6h|lqa=+6u#?jfu&vEV#2_@F^^(`$JILLq!+^Q+?o-*_MMY46( zVUTaZ?eK=d=Yy_{?%q{R6WZZrg$!$~lK7Lt%zpdg9|jkw5@KbhS^cd{%vwHZ!GwD; zm!r?Ts(VJWXuox3I9XDCqT;Ax?`x+M^}wQ!ADfKG|Huz!ZUL zu^VkIol5$KN8>MpPt9wsi@GZONhEWEH`X&v6m)R}JzlXOX(rdYasszCcBUmH;7t%n zN8GttU%Jh0o)els$(QufS@68Hf@0;X;II(k1TXhw z$ajgs-q%65>W6p*>DVzN{3--%|0RU|2gQsqMs;}O#8jlt3btibW#NPyv` zn2&v2XeLJg>G*w?J!@?=7{i~VfNwjJ->DZNW>qY7Dz?|9TI|?oy{LNk@tSRKpfx$p z@06S2FF921J7wqArA4>&*$lt%f0+y_*qRJdi{2EV*&U2uAQLfLPXE+bI~r;GRe_?j z{vv0UO*A?)}TA!ETGUncia4pGub*!1j20JA5o_K6Ps8=qZr@LRkOJTJ+VLX1! zeD+20Q)}=N?}xF`Kt0j9H=^ax`pc*5VsU^4-ap=&mL6T5^t-7|BMwGp*A7}SObfPW z_~~h(J@kIkH}vnGAEl&@8-a!sVL`S#6)zt8hGGB~nh9y2VGr(SV2+;o?c?=0YMWzM zzg`e*f5f&qap{<4iq4S1Ie{|ziiYmsNQxSUY5~V{ZE?y$H?tr5Zk4H}6oZ%8ZAl+z zhJTVe9;g>7iT>qrzWA9p+jPwG(|;N_pNH>s|H(-BlDPkSbh7{O75*QiR%eh4*Wkc) z*$ak4XsATJ>+W+P-?*VC-s~W_RLF?JUvEduTfcB%NlF<@m?HnkFAC%*iUpR5l8x<^ z<-kxgoQ3G21=kW6NetmM_(VvToILIr+$Ww*C>38w&dHO=X#?7p?w9Vew88JYz;f^2 z_^uJ9WaKA3{SI5_JiSwQmk9?;4rY43m7?>T3HoqHAV;8^GkLVa6%99U z>k_m)^k3-*&uAU`ruh5m!1Kn~u87yV;=n0LL*vzoZpV_T2yT7C<+H*|(Mv9$}seE+tPN zj*}j-L(|EAN2=p5`!gOBZfr6~ety~z>0i|)Xsn+cX7)3rkrM<9#>$HOSKdD@a!$%V zrwc`VO2e0`A1!^`v*^&P>*9WYbLVqV|C?}Nv4lj%W_}DJC?b2SBkZf&ZSs%-b=vwk zeP~S@VAVWp_uK#?>EC={-J_yp#A+t9Xp64K7h`pa{p45k@Lvcv$Edd1t~=<{;B#cf z`d+C%ZMf#;kr5pbtXegkRbSLxYg%gjR*W9}E<0y5q{jSHNO`rOtOvD`27phA7k{>z zyJn))6O#AOc@B7P=;eYqXo7R>Ij;FVBszW|(U)2-xH;~=P4qPaIqsdE*^CrJh}?BD6;ru!v9oTTGOMKv~9ywh>j~-Q@W!0*10Mfz|(ua5U|Aj z76W(6y5G)Z{B~QG9DrzXPqi`nl%TQt%^&(l>7vH zKTBO4LiEn=w@_IS%63K1qa4r5zm0)}X?1Wgp0}BEDamt;!Pb%l$;G3}H-#EE%XVC@ z2fiwL_a?v~RG|08(#4^awmK-qn|EgkO3i+!@mwXKnLV zm92z0jbS}1TP}>QYSH@>Wl9}6ZWs@G%@pn11NF*Vv19Cq&7fkB9vCh7uEPk3$57Y5 zH_~$7_WuF+7kSDJKuF0~QD2QSGG3yZb zThh7+Zom9&JqE=CY3P%p*iif^-Jx|oC|M3|9`>K_5vnUFRXWkOPoB|cvo^-|d2~~w z@VWC7348eN(eH(Xt*QkOG z6NlJYTCnhWt5P$lR7bBVc3$(*X1DLT8!bHuihz2p-ca6!*v#^_*SX|~w+a&b{Skw5 z=S>HB=vGWGOaq<4Rs1m>%^1;EPZXKN#kX^ow!Q0`l@-kt#%NpBdy=WmT)r-uX+ekU z8Im^dGd4W0GSH z28WHVC=1i(Tdu`ohxawY6d>4;cZ(x>^oFODrNZ>>AIkRbC-ZS&YGVWIXU7w-aZWWf z(pLdF0RH|DwYRa%oWd7sBFAnw8zLjpV9U>WDiA5-~iC(l#pa=S?c?>08AeAI~a zYc04t9OBsH8-46_jxohu-izA?TQq?#v_u|d#lpu{H^#sw`(9MKb-sAgSS)Q9# z&JhQp)}KTSgB1U%$Q61wsE?#<%-=SBpWks~vPV>(|N5xMw9N9F(y=`XYi{W=JDqf9 z$4SDCnK0}#1k0^H#4uc*`Oj{+{f5*`OkkM91>VziHj2nuZFXmSZF3Z?ZJohTQsW~8!?ncnK_OivLCGwDV>vFeC$YSY~n?R()!y793Q-8+iqomifVt@sj(r>iYu`W<#!F| z{O*-do7cJvQ>@8ICi{mcEE`#NUK~ncBwnPuO^h_D3a>4K66RWiJ{)0bE6POGB{c5C z513*?SHf5**^q>2}SyV;%& z!bB+YA%Ot=%6V=o$wzg%?`Qm(_VHVWautS}+{B{{R@(gAjq?Zmt8p`A5Y!HIvY>{+ zA33J=FdaAX>zuag0~*0&j$J_yeAlVy67abZLUmHBF*KP0z$7(|2|tD-hw^h%vc90{ z6#bc}(5}2a;2_67#z$7$?CJjHdixca- zH6+_6%6(X6m%Z2vnHRH)(&%*OC5vR1Ya?k=cHoC2?rwVYFyN`1-@gsBt;fJ?YtgW2 z?6sg>>uRy?4yhV>>`bY6NG-qeJ_+RuVU0P2E{PSXN%=aAYlMYw$! z`#XpC2KA(c7{r+yR}GE-NgWxISXy2R2gR&T%M|$P0{{&*ArZh1yC$4)y}6)fIFTXV z2~}Zdy{+fw#r z&{EUnYeQaP9?HA@#(R{p#R{(M8v1mr7)JMA-Ex>SAuar&A@{4DHyz#pFLkP9vjmN{ zZ+sahD#9Tc%zMaH>Hgk~$Ea{Q<4gXf+~KPDPVaARp2Lb0#K8R;I>{g5sv-23%hr=v zK|9Y0%mp$yhb2`V=C){yR?5ulZ-2n{q>MY~yM>~uvpEA^6&bM}xz_(y#P0Fkn%
en&B)BR#O7 zMwo9243xWG+fQzU_{41O?t3*(l{pRhsrkeDNI|1D}dQ}38>FV60&8$fE=0MlGTDkL- zlnOaE#KuBc9IXUe#-NWck?(!q*MclQW+97jeVQzJBlarYMEpN0Vy)sG_XRf5qg}9= z=vP^HV5To0|8sFtqQYiLa*CW864#Up!Ru-Lbgz_?|5TplA1xK?Urwr_YD8g*DsU6r zFMSM19pSxnu8`M5G1{3>m2brp&oT~+d%Yq~1rvbYPJQSLEA8It_0MyCa|EqL0Fbo2@yQ8p@d*DBZc@sD52kNJmJvRoJ);)qk0Pp!ox9#ZabF&ktNY%ekEN1?#X}M`|4FrY z8hjuj1Nb@MguhdE)tSt&-(j4zkOTKKAV{0dHe+=8X-R5`U2_EU`7gLL&-8O7wjhb< z^_`GFKN{l92eZeTXog$7avAvIT_t?|MvqTRV%0VzE_*60=t|n#&ZI|Q^L0d~wmz+4 zJe%F+)tSRPG^*~uY;BOJn3s0fja}0rs_(njjlxD1up60N$yq?`4YvHnoiD|9+%Sfn zhLg^anDZ-<1@%jXws>cL&gZ>|fn7J*RZ(#(B|TY>?;T14t^G8w@ZQ`kVJWogzXj^_ z)FVZqfA5isZ*Wt5l{n1obv2%Vbe|O^=V0?X%^gW;R{?jCu^+sBWBr?2??Q%4oEteQ zqa?=LpaAyodnT*F2G0c0?Dm z^sId>zeX&@<&7!*EIa|5zuC~UWOl7TXS_WrSEKv(n0-sBlR}amrn|)J6=c0^`0;+6{6yuCHxpDT16QfVCZ)@;st~__nbwcVy zEjp+6EBlqfPmK%dz4WlYwPJd{u~=k5(yEG%$@Tey6D~%Kz-q@>mae~fY=x9C#05mB zy@bGgoxX@gEUx}6P2zqdq|cuIx567rm110(zBInsUXdRqIR8}WscTsAXN{h{AiyB| zc6UGg!HV|&LUkRf*`-~HUH$-w$baBaceeQAaLDH>ine}oxm9=C z%5&#UoxPNxZ~)&8SV4-S_Oz&Qzka-+IO1u5sDYRBFt%Z1LhfdpKUmDdrOE#cT$UjR@_cn~!{t`kwZ39-M0@{u=mqbZ@+NwW&l` zklx+x0}*hMRk+oQ-aWwMc0O_NsmmRkay<9duAQP&<<`C!A*u*^A6#R3_l{V_gC{Rq zcUDjEz7(%FG!`t`mTU^|we=K zf}NWEglj5_-F3E8uDE%G&oB=mSl>%(8-v2|uxzGv_DfcteIZ?xzFa$W%3=72*{)p) z&G+x#vb56q_HykVLNLu&qK({W#n0%94jp{OSl%1IGt|1HnlWGK_Z;x>itN&|V25>0 zk}`n~gnf5AMUZv{Bh9;@-6#PV6|LT`L(Q3wjKA&tg0=jhy17k?95oE}!g2SHiE5Y+ z)?5S3wm%3QB)GK!x!Q?Xo>zD3a|jm_Hc3iZx(8)cltC>V$P z5VxQE%p|qF%nvdOv>c@mtQhJkEW-JtMTgV#b$jh+N-8q+HD%gl;jC&CG%xMwyqBa) z$jwqfIz!Dg9R06w$=AmNxp5XBkxgK$_K*_=Yqa7-J)t-Y+d|=y%A8-1D$SacW2%jB zSx3!>GB3AmR^1_zw9!hdML3qCcHI!2mpbjm2-HuVs9W>wc39N*dm<~)FmM{HGw)7& zW%*@+_Il{u+8Cp0vuHgCvxK5LH}HD3nRoD>jd*N3e|6O9rwS7{4&**sS?~+A7U4Br z?s^Ehp4EeXpS=*|YTyt0eOG0@uK0PzVK5&HIA)!*YGLlg9DdbScte;)4qMYqhd5`R zUtChagOfwfvEHo_tR=f4Lt5~@EYCjNp7NYeFW+e?)W7@IaWy>Pl~>6JqRvOOUf_?3 zSA};Gh?9Q`6f+v6c4Di`o4-}ociVH8-Lot3aO_z1LCa;(b1U-t-dpBaUOmH&mhAV( zB=9pw5;k^(z4=tI>LA=JlqUs0lTk>IwK}ozf0_kSnhSt?=aX6&Bms-SZnEM?;eIuD zj{-+;uhLL^8BM7HnoS5RS@U=v!+Ho6)aQe)<<$DDUJ0RCQ5Lj|(pTTZ#$cA=*9X-u zBl-uN-omiN?J=`0p4=*Es+)w@L?s>{yM^CbwWEgW%I@GpE+^I5uV4=M08Y8X=g;(E z@~PpY?~-*mo4eO{J+m9Np%Yl^Uq>)!oiw|PRGN(wi?mSjK|03D;#{Qhgqd)cSkuEJ zN1G5_6*iEq&eQTGKV7Y@;<_rzJKi6~kMQd5gi+FYuxkKSOf_pG?2n%RYD--9Dm@xvJb09SgB>|hw?f$B)sMdG>#m{<8&Blu zR&3Die-G|qiZJ<4Cx(S~a31pz*SdG!-RHF19@gsqcdwhBrO|4D!4C_ZIYU+aY6{+g(nI93SNoA1%>%Y6L=KoStL?Q-P-YIN6mj9iWIkHSfckp~nf@z&_wNoz z=qz*G+&)|LpC=c*I*ax-xQzm%EXMl)uH-8d1`2fT04$5yQrQW%uc*_Ne+KgkEs8tX zwfkvKd16s1^11Uc^uBF@Y`3JvqHE))xmAm=kiDPP|B9DgVZ*A`@l=`mv45qjnH%;^ z8ahR%i#(eSvxP%_r#~V*>wOjXY*F$+cDFVXxS_9H-^cq_-$LJ2lBrU$dm>c_GdlktRaZYn=G961{UEGOXFK5CwP2m(D1D z_jMi5e|-V?^q{AhYd3`_r1K57eg!9F9j%}HVz;z6wocpTrSswgKf}e4AE3@zf!i$d zP8~EbWVGyoJ?Dj9*QKS}-SN4~&1MMEdFvOyb#7Swc%in|+DkbC{Ecm;UTc~>ZauVl zZMSQyq%Tb;{o(I2c1FRdagCtA4QS(vnKY&$H0ozR! z6&39Y+VT(V$&&8M@lbASoe}&w+kM1eX>6vs89FFupt5c*va$W6le3ipoY@2_Z$=&q zCc&Jsmsj93jbXc`aiNG1V#s%Rs*If`^x!DIsk1>^gtoO|G2~7P4Z8?JNQZ;6Y0RQ2 z9)4UYVD}ezoRku{XT#u>wJl{mBuv&8(U39lRR0_eIKtW5`o`Hh6>QpwlSz1t8eJU^ zke+cpaETz#{9Kiyg|xHiz8Mb`l)ZHAhF+gW1Tg`-WK)z1`dycxeZ*F6*QcbIPvM@) z;ez+a%x#1eJPK+OeKxdC=X%G2%61xZ!?;t#?Yt^If^@!j^aE2K{Jf#FcX?4sYD8Jk zCG(xj`CopyDX}mLvfn<{RHbEeOvYQG$nY{`SOtL8$^#_P6ra0;o(WK|$?7$bs1?sC z>r3&zg=U!ZpKOOVcF*|9Yh5rVM?kgECTbVNv@{@|u3e-=c0D~P7Nz#eyvv&%`ifBH zN{Qgli?An!GVD*;)GPaC9EL_7;NI>gVN7}kqxL!({l@$mzP6<=kBc^3>>W(D!-K!q z6mo{Wjp=?kc+VB)Q78!e6B*3t!enA$&<1^5=clWYIR;Yxdhtq?lx@Q`%G{2>ev)EY z5cb7tVimu!5_;bE-t`Btu-j3`exR{CJ1gb#71C=hDH4mUS@kIX!~uYjojJO$w@fs- zkM3L4F9P>;>{EVvH~!sT&{`?NT4{j=y~FM- z-3*DUbDhc5U+Ul5yAAx!51CH`$#&uW+N5n41aU0o2b^gAV=Q&U#wcutzJ=H<3|Q;v zc!JM4Hj^oh;Am~IS(S~0lQtI29Yxz>W11|zj@Lef6 zdHmipgppPOm9eANSAbb3OB%AClUHwf>OwK{U<^Wi_zhfuTsHn04DYH8U%16W(2 zK1ltYs4CRaYvpsg!-N)ekhS`n_28cmMY%qIeHxhxuekx{xN_f=$2_f4aJOyWK7O8H(7k@8`m;X0Zs08IIDge6whj@n335u{itbU zZHU-~I6j%c)Ni%XGZ2!dsIc!9-} zPmCDjwkAs9mX5xf7ucZJREzs&FjP z6%YcCu?~tz1@@05`+0*XH=&_osJl?Rgwe+qfVG$>*pg{$R`xNgk!%glL$lh8#p=3( z>{Q#fb8bEWZ3_Lxwg<1Au)U^Xk1c6B!1xgohjb(a5{B3}m+ImFaZhH{Jtc%NFFKla zDh3s(_6aMIS1dx9iWw9K8^tnIGiwwnFP`SIbS65(37x!TjyPxZ#}!+z zWOA1(guww5U0 z#Nj3|oW|D?X}xAkrx#p4!U68UMkf2*{g8OZJO|8&Y^a_scE7gU|--7Em@= z;+7}apQlI|>3E(hqk2D_fsyy!5bQ7wHhdLDeQrBFme+{#(|#Nq)h5~D*gTvJVlSZY z(Q;2vuUat$C(IsJ>bS%SdMy7|@TpYGba_Tb-{*j=@IT1kMu^Qkf1BN3n$CU;j1yUm zd!xu3s4%|}(loH3xF){Xb7Z~f%0f75Q@XJuMZVQ*U*r4K!wX|T-{!3jEAVA4jvgcq zZhT84!uv?r{S*i<-(HWe7cX(J0*E{1PXIWHph^GI^COK#<@~*nd}53hScS~2?=g%1 zVeoeu@7docmb4#pehC(+g=81$Xx|@%te1Zj*q2*RS>xi0XGdm}MgO!}t?*&))2{>< zX11LwXrpsHY5LrojBo>bGLpTJaLxLXwi9SMb_AT$u)PD%ulvd7O2l*@p;_kun~F=b zH!|#S5!=fyMo29S#`I$DLZhX*{cT~wjvhCYwVpm~zFc}M$aHBc*2}yN7z{HnJf7u*e?#@h|Qai&ytl#$NsprOr$F+*l6znFeC1=_}WK| zVb=i8K5ao%?BXTIDe`S>NLqkl`4&h5?i;2w_g+I4D(e5lvy05NGI}(E8w%Lc@L1&b zRZCnfXq|go+Js$ieT=pZAILVatGjtLOo0@o-V$i(`L=V75%a;PdCSQj_bg4&6=Xtw zYejhIUfN$mnS@d{tJb|SHi#Y9g!$1p&7`T(^JjlPYS9BRbMtlRZAst8!g$|mR@x9~ z1ymWwdkG(}$d5=rpR;3J;WK>C-?WOy01_5h*<29pGnDPr&0!waZF4Kj&%lRw9HQKj z23R&DGTRCh(V!7Y-1%U>T2a=XN3rPxv(qZpqsk`eA7Ff+Qs=wH2?uDi-5rccYMaCA^}iQIjg1vnN&L=&GZH3Cw1C+HMf4dzK+L`mCNVL(mB6iS(TH<^*R!1>&>k_6Bg zchGu|ZFJ`qTdJ)UV4v1*Ct@;(XT@P57?Hh5*UOxD73|lZ)31sa>O0ggzLkB&YBj;4 z)#;Fk#r+P$Wu6~tx%UXwJpo&ay$3;HI#QeR6fF#P=lyU#*krsaU3ZHw70=6c?fZA< zp|jeljQO2_o@meHo#7Uz8S1A=a_w2=sf%#->Ryd!p@pML;T6X2z#Q$_rFTcHO|yAd z(ooYqk+GE}6Y^TMx!M(^9m)qd92*85kN@|Cz(`4qpyz7+OO4bzih?7uD`GF!Glg{# z8J2sVN3h{v?iai6)(+CsliiOK{s_MZSu^8T=yeYP%=PB_A-mt1t1J3__RmW`e$8O^ zI=A`u&z=auPR2~vw>Y=J-aaWUKm4WigniARoSgj|3j9P_1^h4#m z!FuXRqhwl2vy=?M-tgZR;|bKfC*fAZOSpmil=njx3r|zBC<;{v$@w1uAzJqiqNSU4 z388&HW>30qLl$N|aZE$8q+8Ge(!rvIHlD2Ig`d|Q`+35S@EO{|ab>%6Vzsw)+7!w> z*~TUL6zZx^bef{?W6sS1O9ADZXa9ttAm35=M-49Kx#XPOE;VsQ#Zq8#CBUrGCyQ*I zKdVA2V*mp4tjm6u5Az3mc>3zl9(`^3ro{b`tIGcN#A745%Y(t}87287z_KuDQQN}I z5jVHfswpP0&7|z((~->WLnV!HAdyS~GHW1w;ScDliKs_#cm6z-a~i%rOg(^8Ko=Hg z?w3y;Jw=+o26;Mc2?%XHen~_G)SeAhe~MN&^o-V$kos3Lp%>Sp0HMon z>NAvdhQ)_3w7?kY4-DAvtZj7Lx)1Fz)yR@``8j?3Y#jJ8xC_Jfm2Ce$^prx2Rr>GIKMrlnq3$WZ>RNpD}q!MkvL&!bg zUFz^d_dtMr~c~5$|Yz4mt^NW_X4rK)qb#Ra$nrQY&F|bZ4taZ#6SLIX6t{U9o7$xHB}2K4t5<@ zuBm#{WoyO<7mO)2y^s3+eCf*)O^V?Z@9SHt$rtY{KXiN>={AQ6IXO_B-u#G7r}Ik9 z_$=n<6Eq-mjycXQVSgWZN^tRprrbV&>m&#frpog_bBQ6E!|LNL?G5JxNwvpUFp^8Km8Z}RGq@VKIDlRkdiztdsg3lNLxaCUWoC_f zF^KVkqV>>Mz(tlUUkhL@;-rAptIPZtx9#JsxJP2LL zfFgP$gic8=?zIsy+Rmx7zIbaWJ6-M?>^12yTN&y{hvsGUZ)21GD5j20f1mKm z*u&ogRd*hY-2frgq@Ni)U``T!JzRdCb4?vxs58#Gkyp?iz=H5a;EiaimsB4+1KKfi zhX3%H%+%|KpDwusVBfgI>R+4wy^s9BqsT1aTg?vz)jXuzeB_i4{iA)8!rl&jTF`wM zaw05iqbkmacj<;n%8Q_>c^E5O5`4yzWa9OA7lZpz0Q=^C6%|F@Ag`SqXAw!5eP2*% z;fg2gO}nK_!+AoHV0PqHxWQQ1F#e&CMqw;LqbFl|KTM_5(y`&Z&fT~B{;~r^`80;l z>W%@=n}=8ERUmpbnG)(wq!@fsz>?OKzthOyCCpKw*BOHRR2j-oMB$w*;9e&-|h z2c2^d>_ziCZLCUj*!6$@r5-rH?h`TnnOqMGHn#8{b0!rhguLlrSL;n-;;osOZa&F+d;gPVRN6NSFV0OV5xz7IV;k?)qPA-Y&5}CE$NZt$y3N|8K7k;Dj!AFycH4o=C}Xwue`85ba@`0#h25+NydCzu|$n*U+HY&-0F z=3ej0umymQMEj)W(-RTkMOOe-zbXE5*oXjZMP6CwKbXiz=B=FYxpn^l7Lt~Dic?wC zOfo@7plK9f#TQ{(oyk2cOe=T!jwaHRAYPq~%QWp+2f&yu%lyu?V=LN)&!FSCx{#^G;1y{+LnN%HmR;G1{9$PXQ?9(Go-?ivUJI|@!U zXbr-HEUo@Zocq#XD0es>wRSrLLP;w71*{%7j+kD2$V8Igs{vN~vcXw=*JfFa$G9U~ zix(e-^N;;|5nq?o*_6PxW(26?Uo9~g7e;4RSxn-f$4=8R_GX^d_wOB7YR&6aHgD~sE@NC4AV`|^R9k4T=+ZB3 zifZC-g?-{}WkP$8gmen(=q!VUjjN?$>OhfNT^= zS)k{4nMDr~6|l)0UD-D7S&JP<(-dvyus} znAj{3QZAMxfvhR!&Ea|`JyZ|x!a}FLEyIO{fe#~siUv*T+2NKKFcy6>CnVA4`4A=d=k9&+QJwh> zKJ8;>qm`NC0O*Fxiz$X)ewAy zV&<5kZ?BUmqQjoawBDnBeY^YuJ;7f2Lrl|Gxj#kki;p+>N1#U)o!0%h?mAI?jYvSJ z(D?4yVZJ-oTYEDlWZ=qoyK+Oz?p_zdIx_usO^BTYkGW>sVi-sMY-4{J2)I{)0KM&)qMI9!*^jvHmeae} ziRNBmi3o;Msk?qH@sGFXhHMslYW%d8lD!ReNi)@{M7*ZfEIeDoI*$5LnXImAq<}gW zzSVY7yymj4b6wIBG7*WK$S|tuOs}A5Sxjd>Rw92|^FGQyP4dN|c94BddDO{n!(KTu z*5JWq5TM&*G5S2KqyDnJcZy?<5N?2CQ$&LPt&lFE?uUPfAEc!Cs#rHGB(V}%zl&?G z^4voJUQ0G!4U7vbcGq}9;=wLr0*%lzT&=6?xwZalKD}@QVjQEih|=WF2L~$`(MlgH zH9h3+ble-h3}<0gi}lMqn{&Zd%o0^40Gul%|IMNB5HeTKy0*eQ9%7wrj{dtv%ak$~ z!0a%jqFOLgeGyPLA1wm~kD**gT))~;Z}7Io-P8C=EaPO6WTYoI`JrrTNM}je-Ndc3 ztTkau1Qrgjlzbmx1qJszm(7H~z@B%^5iSxX7*|Jq&o*~&Sgi4Rt6d@$hZ>%~rQyN5 zk>4jObayVEu+%7j?c3d-6HfgpCSG^Xi5>5H0pt0sWvvLgrF>}W;V`w}o2w^u9mR|1 zzDck?z>$ql5@!l~uL4;6c$1TvBipZ@3^xZJ;Q!SouA$`1ZhqFZYoEqff`S=B>$>r3 zif`YEhC6{}A5)rhXf_!i4&SlD_u5;TTnNeQ6V5ZRP?jn;Zei=p2h*!_%O-3cVxLIipju6N4 zSb!%Zdn_9~@YW6=3jY^vZy6P5({&9dKnNkYySuwf5-fq>?(Xj1KyVN4?(PnayKCbb z++7-)kKFh3yz{L!^J`|l`o+39t9$iTRlCkPyUspDXBFps+&@A4y{;vpoLM)DkqTUO z%sC#o7OKbjGh850A9vbOWoL@t)pF_W2EN5q;>cqgVmhVij*8opMcAHgZI6pxL}kmH z3Zt4#583IgVGsjBkfaTtBh;@JrT z|L(ajf#S^|EN?dFT9Yd2Int_ytECeD2B$kw=`_tm!$zq(;n3+UY;FYw8AZ3zVK{5e zCCNOKz^n`nPx6W&p@(V2VrmiR=luJN+Z6cdA5+y^!JIR1MNbn06&G5<(I5hTD{i?r z$?bhxI^BQ}7ROK9#R>oyqJ3`Jw~iR(W+xzQ^z*4V#j*sqMJ*M3V?yQak$aBIO8KWA zrPIGi_=Q&KZ+El^SkZe-^}$tc;4=j=+ieAA_*;4IKZ5LjIgV`;CF8S2tB>HA0;-wu(_sl-w$^#mOcKBNROr&6rD4= zKgNImM}ou`J~|c5h7!Vg-=vjMjH`{*7XAE5ex?>j8(2D$vUdDWjpu~?-0BYZeK+>> z({(P@vI~upyG@(V|IKZNf%z+{M)IGo3KIyN|Moh_9(&X0fBSjw;Ozc?YBT`;BL7!W z5FCd_b+XWgxK`^pHC5)S34ZuXs>mV#qe}5kj;F^v+ss>uu{5LJL}BhM*Q$s?E`aDi zg+7k<1|9q_f4P*&{h@{1Q-$&@YUK*|peLR{%$_No&c&4%_i{};uDOFE|0bEaN=;$~ zk9^vLTn_N1D4`X;Av4rF9*GNX;&*mI|Br4tR_oE3I`ZL_+`az$#{ViG{f|nI5`nsh z<)V%=QfWbv$^48}Q@vc_9$-#}eiJlR%8h3^rPI{jGdlAN+(gSXrj>l5@(-QvkJOB; zUAPCiWRh_9@{BkGa4YGy>~?aZpAkp%=l&(qPd%Ed+XL^Wb2fDIe-_YRMm{!!$;K?ihrZ zL_=QLHiM@!TheE2QR`Ize&YstnbNZi-M_MDG(X@KG!$3uBz)#yICFVr5+AgH9R^@$ z@Rc0VekyHo$SgH^Xs?niFO`vSQT5oDa_ZCYnJ3;WJ}ZQ|=e4D3R$Dn1y26CqVg#Ps z6UVC=XH+^zvN5&M?7w*XEe(3(S6tVrDM#(E4Juj>noaiWpOF(waFtFEelF)sOl)A3 z?{Ma*?3f`>-yw7wdn)f|Rv6cYM1>bnWJ!zBwJ8%5KEBoP{2Jehd!v%SZUH6>vhGh} zUP|>lOhw{iGsN0=!R6|MEc%fa-l|jkz~+4*hU85P^Py=Sg=Fg)T6$J2Wc=ehCAfde zK3~&@RGePOOR@e4F+}}ug`YZMQPR%8UUG0=b{^F%!GekqJ=?K2Li<*WzoGI=H-tMb zrkw7qyh^g@3NQ@jJW`>&1$Q8c@#}g;&L))6cI+lByLuB-ce#f@=fwhi3KUi^^wQxg z3+kl+RnTj#L*OvoP*6r*Z7m;Sb!T$o5^<`9D*Y~%&x%9j-TET4sjd}v-+}0=9p#!s z(w#F`_c|jpdO`vrw+6V*VM=IwXP^?^``o6)vE(3P48St zk*c&|rbfoF-gPs}DZAm*olT4G0&mOQnvHBVH{HiWwTwN!3vdjd$~YrEEBy_}Q=Y<; zPrJ88Pz-HPFNz~8V^uo9?QHwVvH(f4d=uCguM%VEoz^mFtgs>icYd0<9tqcd-A6J2ycA|;C#=h&M2GNfgt3sMy(NJ2_H{Gw310tcz z)9@eO+#j_MWcN>` z8{_y**XUCRrLC+@%hA0Buc#~P!o-oUVDcLq#@|)!J)D<3eOX7Bc%fsJK$`ZH$ik1@ zJDKRZJulRkONjiNt#Bh(Y2e)HB{x*~@7+U$Gar{KZ{=S#*v@#Ro!OCzHZlX>qDUUok!8?Y z%u1W!Rb-O=q$>XO$sZxk&VbP=_YiB_ldvauO7IjDlYb0nHT#vQ({?%lR+_nGyEO?3 zk$F(Wr(Y$s&;>AxhfqUou~BB^P@-}gw#V|spL3amPl9W{ju`2}-Yk8gsX{k=cRhYSavl;!w@dHz0U<28m zQ8Q<&<$S7|hp*v$xqZ!qV1~anXFYP%tnpru1FYZ4gRGcixhzj0g^j`C9Juo6Xkp$t z$g-Q>K?{0`K3seyxw4_Vx)aar=Pi=}xZY|gHti_Z5C(@$qWd>7+u)*arj}$-yAXS_ z*U~-3ZF^iX)Y=Pvztg_I(@t}#Ww&jMiq5_2d=wQ`a-A!9NTR$qzDRxck#v4ZuglsR zmC`V1z%V#gQuMs0sE_+WgncP#kMHChMr^c{xjwhhW>h<`q7649r)x=C_Do%J9JEh@ z&~)*Xe0_8^_miQ%v}k3R8o36&0kq3O{Q>O%xu4NQdS*+b<=z$cgxecv4$latP`M9n zCH`}Fjx1c%!TkQx5W!7Db8>aIJLLh=4`ba?_Z{w)P`>dlZ*$*fO`=P^9nDGGbG~u& zFw0;i)9}IVQ~<`peBKpT28-Jfc1|%Y?5cbwu*c9YTKi*D{q=IBfgc={ke@^kBI|ho z6m#8ODkJf?#t=sQuzJUZUoOabz)d zQ_(Niafxcukzg`a7b^Etg!ZTt5r55Eiesvy-828e8l!?f`YP$~_U0Nd;XlmCpd$BJ z%eLI_s82l?0$^zl=H5SU53~(mj@yk+W!|ky1~b{vr;gZ=J2A%SYKa_6G*g)N?xc;I z;kMy2ffz<{%l4_9u;X%sUlBC`Pq3+4WA*aZD?hzEG_KMT5R$Cw!fRPjnXq?jk|+Zj z$wFXh+I?VW1|}p5D`re+U-_F0b^JgO*G)$f*j73L;$i~ScgQKx;dzCj?@G#1PWd@d z!L9Npsg1&Y?gk;~en*(bB_`nsqg&X%mfO*g&a9B@zIw(F#YxtDrh;}I(#loRK3eB< zKfMwJ+|D*a#9Nk;I-Q9kk-R@3=OtTX`9f7tiN|#EQ19}3ek<4XIzgm#KYq5)Ye|d% z$1qnlloM~2SOu$CFifB;t_L+DC%j2{j~m*8oNdn=%qw%RN7ma<`Gx5C0oS1+Ay#^J zw&BNe5$<1}KU@Fo+P93h2#x9r@y+SnLe)K`%2ns<$$UhV{b1($fyf+ZIWONrx2fx= zRfZFhw%7O>UV816&4qejM2nw|Myxk{O~nJLc>9cu_G&^7I6s!dn2y@5s+@`xHw1NM zqcVl|g2~tO3mR5b`+H$Vu~i}ct?KKC`%MnFHcT_~Ks$4nPqIJxf?qNi&aYlH{*ahx zkP%%@{tAzyg`>v+7qt6YVFcY+ynkF3#hyYWCz4YvI~TZVOU!LhUoqb&cUXdO?I0qS zET=aQ-^XyLi;+$7nqa~4?IhmY{c*aION38*Oj>PL?Gms};J@;`5sP9%mhKEi-TFS> zyf*gnNhXlQ$D*bNY4}rMY{*y#>~Txc-)tSJLPE}D5YDX4IJfL!j{7@@FIVh}pP@AQIr2?<*i)c{y3PC*p2PN8 zZ+1oP9PGs%>ssPQS5J=l_CgP#sf%-;*(tlYEkaj{6?HR=R!{muwY{M#{*9Xw_<7s= z4UP{8$ZVqO(sr&RwJ*3Y*T1G|(q}lf!2BWosr?Dym*Uo1*IYAU6DnJO`%K=ZH(i-% zuy$+)62_l2KOP~mI-D|c3pY%-H1rg0ue6@MVp_Z~bO!_YfkKaIXcstfQHF!a7DriC z=vSItXg>V_Nye6z_L3x0F(SN?eWq=yr8y#j+v$m+gfc1V)p46u>lpV@FNW(x8<%un zdd9G+KWUM672WtVnoL*MVVh3U^sKYO0qsEcn7fCKvE>Jk?BW_W#c%;T#j_$y)p|V< z7+&jvt^1hC?JHf$<@ODh&&x+h&`yKv{^!iwsb<^J8^oSi*b?EVfG+IY2_OGG-Gp0~ zJqZrUA#~I5#nabwd>Z>7(wE0&H?T}a_0+F^W5L0BUu@y6t(q~AW!=x#$Ab1{g-gwi zY24Jt@3$9|ezO(RUsXNJO}ILV?CliZ?vr^BVf<}de8{W}NQK*PpO_v`cf&LUIaXvj zYB=)071Lo1CNI+bm`vnNcQw03;WMQn;7d@0Y(q~>0%hS%z3OHMy& zano5!Y04N34hboyVrg#L<3q|5@#^br{`7FA{m}|BYYl38gR4unlT*PnXX3g)Soi26 zF2~Q~dM|(Ntz~OYU9;&3&t5R;C8E8SbpPeX4Nkk%YHwAGdX2-*` zLVW9=i6JzN-Hg~B(v;LfEpRqekiv$Z8)m#M#o4tp=}X{Dpf*+%kPj{I<6YN5NzC`T z8Hm;yS+zTq>RQ+)-~qikK1}XPuIlUCF`E^-AvzVu=%V(5U#oFy!=Vfneia|*y0bO( z^wv5?0l9ar-Kk7~F>4x%uFQPMu0d(y8xW55m)*-2?sv~^R;}CVEQ6IUFmvWe8Rk%(tiUVdFgW(Pu;^EL|>D@Nh(Fhb^pty5`$O>(L^})HI%5cS%kpK};7C3-}sZp}_{b+zsFg7>*`v~jOi_+16`mlagS@oO;t z3aLeSLFHKAEzDlT2Qr zf#LMAmw%mYvUPB>5a1&t67^SRgZ8w{d-5u0Wn%HdylG(M#p5o#R@jahFNOx%*(24D zPq0#1)NlSPH=kh6%>a}Cn0SeBuKO6cPtU2>0RH zPQ3+}WwHsvTZ7!k)w+v`xk1CTtL?XcX*-8zljBlpuQ}3ori=yhw$@2=+0%a95qWco zy%EmFIkQ4g3Hznf85%a+sPFZeZ6wpjY^{g2zQ&O2V(HKvTr$k?H|NB_0n?Ufj4O)P zl)fc;5pG0b@q@DM?L99NY2pjq)Kkb1>Q%n3N1hKlKk8%%Go>YUMRG>2oCP~Ej^|Pc zoI;Owjc}+(GU`-KInAa=4}8+4B^+v@9B`mE@6dkh zRf9a=0$Y0zX5R3d1XkFwn(d}!>PY^`mr7KLY-YN|@hkJO?`2%l1e7D-%*r$0lce?m zq0g0Se4GKzcxbs5&l2=s1bb!e1RZ_`IQ&Xm7axx-jddUV>Z8Xk(AV8E-_scZfaYjo z+lp_*Jo{v!`S`7)d`3~(+)k(kX?;a{f7Zb*{JKCs=j1b?-8ju*cz2~`om`?xS^6yc zCi$;1&!`i+GsE2Clx6Ww{YG_NJqx3)jlSH#RG zk3;1#uf zV%dgd>S6|Sx5w7)kl#Kp)9jMmu1y-nh-a3Cew?kj%4ofz1PDiE^wZDshZ)*^hVe%S z9po+&@}5#y0+(q%4D{~bD?YB-@{R7)24_RIJM<8ZkCM&-I?UfN?7b9sHm#)6k*JkceU-;5$)P?Jh(Vf{4~ZbKKH&rX!$2$t^VlnDgl!^V8k&pH8VnC3AlL+ z#Lx3r0-J^Z!1e%-fm~J6{MVHwf7iQFu<-VV$sh^~s_c-0XRo;zWQ$qDz`7(FN*!m* z{)7J7=dwk5Z%)eQZ&5U>M>QOMu%Vj`>5wvlrJ_%@hTZfy7eA?VZ0+lwy)#z7FHtky z>wf#WDP1u5V#9b<{o3z%aHdZuSXklguy0wy#*QfH1nuDahbkV@cCw# z2eV#+x~Hr(WS7Sf8cBCX8WX-f#^=bFFok**SwlyFIUC1ac5^QYQ} zWT(=)Xy4DbaMANsos75f{c|2!95vVwD&+-o=!{z-k!TvSRm}|$))95QHlXe-AKD#W zSTT5UPglm4-8Y@|LgdUqM7y=1iweitA5%yg^Y)!kdk`J~J zd$jy{5n2k#azaHJy$|1AS+4bT_+oGBqVKJ6AsJm8hG<0Xc5hJL>{B-JiEJ?6hZ06o z$8e+>TM0CcXTMA)fvI*ZznbK0{<3|pQ~AvbUN~4HHDQ`JTY3F+pM8qbQS*U4(-Q9K zb5-JHN*>E=9Io4!!wOz>>OI8%E8*rruO)gnkKqR&u0P$!;jvrsHceizhaJyWD$*`5 z=Mq@TXQ$(B982;U<*Cg6;8@bk()>$1E%$bItNFaC0wUjNcTJxq`=pY(O15U=%58tx zA(;}|Nn-29#93Z$Zw0BTTD9}GflETDBYa6CBP(K7U_pbG3gY}l zN9#mS0V%@K+9+AnRp5rsQ;s$+xEi3t)_xzdV{0F^=zcPuGT~pVlXTK@cG}JruDsV? z%Wvx$g^Y^ITiS~8x&RFUIR#e=xovDHDU5#1j zy&dhST8|dUuOJekOB{kY=oJ&EYp>QKN|3~8Dv(e*de!l$n!0m+4=wtoihjSnxJ+a# zp+aZb#O?eQ^-Nu?|9!!X`T{q;b>nOmyMy7>$+hjKJ7p&ikEPz23g2RFdv}#Jubt2p zQR?e&cyD`*LYMfxYj@mkkqkScCqeuzux`y7w$?i4{X9l#ItzTYT15=-cPAu63*;{3WyWi??h^duv3O4&VD1pSpy0 zJT0kG(FB*2s>R7+)6MIC3%3=x6H0KUw7ozl+HsoeVv$qqJ$b4s3eQpexf|5Dp-PhG ztVC=^->~71^8Hth!%^5y)A$-?C0&KcT~2_2mHt6;=6z)S2ZMWy!O* zw8h&Ps;T*t`OjY=Ar=U4|LP*tcCfW5t725icR1br*NA{v>ObZo#RJuUfUwo$f~bGT z^ja|G{o4WdcPJU+tfK$(6qT0;_P*(Z=TP79p z^FFX*f4?8o(C(ZM zie2Ru+JD8pSG%a-2cKYS6Ml$~xOjF#qLYLJZGbL2>LS1Ss86nMqUzR}lcFZsKO=Xf z_1NFDXxe*P4CXelldvn*N67z2PH*20!d|(sZ@73(k09YxTV5;Ezi&cbTdB(VID2K; zEAql(uVQ>YYK$ItS!>*k?NPh@Xg5+S*wnDQEmWfvBV@WvHTzW%ckzD4$jj@8RO45b zoh0NBC#)PSAK9O@zVfSEFk!lHuc`u*0i~n>1;wzEV+hkiMo=U2&gW}TOr4{dW8 zVvE_jmy#j$LZLT34POs&aO2;!yvb^S_zJ-5-ar0)jJD8slTzRKje%Bgu$ZGOAm{LF zwXa7g1?N$&aHvU+fuEdu{A1RDo1T4CYtS4&4fHuu2SSp7aQlmiVtZ+Ul)is#Ki3|K zFz>s#rUTS$t832Fc{Zb_f!qe7kOi#p!>rz4(mN>IiJ|E9S^ZbuNe$Tlt}Y8*?J%G7 zr&zFMn+(Y?9LISB6g|0am#)9S6pa}SRk@oO%-xrX=#>j~UO#W;p?9w1io=wC9e?5j zUHoUOrzA8N;>*iE+{Mmv*2DkkOD$P~n~jw;+Nr^2)-xEwBy=`5!R3l7c)R0L{}=scVpw$y_h!-C<*=av1k^?HPF^7l zzZX)*j*)MkpHXP`0KXN zWp7z1qMa7Sy-iH`P!0CfNdG6?k9?a|8(eZKs#0ghw9V*OahhB6vUudJn^-2o093_u z?86_YTb&g#wKlAmxWZwR7vGV5JK>r~*=l9!RPLI?o;iF(2b*`4)fF~2sZ8!iP~N|u z+x@T%pC)dmT`6KSIG%Gn*vjc`Np5tzDI&8$^Su*Qgc`D{M)1y^vmDDCyYMGSmRm|hL_lO zCObdJLRa%{5;vxN-t`cHR4Qr3ZcpGEkMl@$(_Utk@+tuSX?D{l+N+;Yv&a7hS^4pn zV}I~oWoOOLnNMUL|4PP5laD2^$li4v%PYb4^GygmjY&`--Gx?vFT_3Pps? zYWTaR*b{6HxjjNU>0zi!AIq!f=(Or$cTmvD?WF^RS-$_Ms=n2TOUinnvjdP>o%?l zqZg@`?W-ySplPJ9U#dvNy@HG}ed2<6;!j|kwZzrTkoF!{=?n$gJ)nhf==q_o!m5O= zBlxb;fog z4;Zu}_abAj$0&M&EfGn!MC@NzHebS58o0sf6HUzhs##SG$`q479ic{a$97 zvNNO(Z!xgkH+tG8pUdm}Wgm}(Zk}~KgZ?ChpBHKQHZ88yzBz_9nJuv~Fy--_6W$Lh zeF*oe`*8*=UPqQk0{@~Av2VvNh*V4h%W&do@?yG z;!VOua4jYSEOA@@G-MgZ-ll0#BPORq{JJ>P7~#BP*sQLn>x_62@eolJCm5qkam6I{ zmHe&5(9;W0Nb3-WXA#;Mh$xBb=Z*S%0q^>!Uq}2BPSwcKz5cvQ1>Bqs% z|2Q8*-K@>j|Jpj({hv1l^DC)kVNgthKYe;5?L?*i-JiMq=>A}S1yZ6nA$AB>H)WUa z;C!E?ryvK>@HL?SfA=7qRXY|c{B10+IeW@dnz&T?*{Y1p965(NsKv*gg#~6N@GB*M zq4IWS44C4pZZE3)$0}t0Pn@zwB6X&F7!&?X;S*pxyJN}N!DeLl8t;Sd1%`Csq#?~6 zd{QX9JK*&u8n{IYXi7^pXitq$T-oTl%AlTu`3y8$@*yjXI0|N}NcYQEL&(A_=`dk~ z|16Z@htj9NJ7msNT7dO=BP@9f!jkRxx!%MLmpaqz*XZ^pJ_?nf?|QaJGnLWk$zF zvhKPn&KOdOgRyRFc#&%~I>Ebf72Q~f`VAx&7ya3{gPi!s_PcCfjI(16M6=9#x*1k5 zI20W=&(atBX4&%(kbspDjcuj6VUUG`1lxWTR&SW})cJFFGSHmy>1gLd1%u^s7v;d3 z=<|5BYmK!e_A?Pb)NG!lZJgyRO*{VOyBmjYzO0MrYQu*P736gIKG*h$07GJOi;hR3 zxe#w6pdA^}84WNimSjPe*Pl>ciZMERh+q5|FflbMo z7GgZ?eT|x2vrUYnMX)Hv*W3j6bx}%+b!ZRKWexi+WO^p&&+*Ujd&%m>j;>Pk44VB$g8O37XH+%=1eOwSlkcS3qEU(ZQQanI@fy`gme4J*CEw@KP-#~XbnvP@HZIJ|O z?Za$+7jP!M-}Odf=weCjb=^V02x20P%G1e>4;>Ee`J;S;PE=6n-u#Ekvxji-`(>|N z?SZI-*X|EB#J6Abs_o(*?NR(*V_z}-1oe1Y-qSa9t=n`Y8Q#uJA85S2pltz!gXoY3 z%c(&ip~kW|v%#=L8Vaib450sg8)G+4%@H&M;;~7Cj-i|DNg(a#{k)bB$E6R;rUk(Su*_!lZFS0(z3WAcnH%*Ie(OjG$U+sn+sq7Rmz3)U8~LkUekmnL$* zp}9PvBk1G3&nHhb?Y{Bz+YKbWap5d^$<3nndW5t|lhC0u#7rD+B$?$_C4Q}7#(`uK zToTi5ryGTzIE&D|gG~K<4_YyM5nLjfy>N=Yxx~R!7dmFMN@M$!hLbf?79Q3uwnSt> zA!(k5Y%Yu`QT{5^W#!s-dTR)**YeElP(OnwAbv?wj@llh2hpTGI6tu+h_}2A)z=l#7;QOTU{e1 zZW`^7n|yA&&0IJwQ9DdDKFt6fN-YV-!SX?kkZelq66$`gak-7WKm5v!4M}VWS2%FS z5>9mfsOpy~7Isy$DS|Y0<7UdK2u@;)VfxLJE$=?*4kmzqe@Sdkz3UFxSJmqU8X0?Q z)1!V#{a^;IgA;^gvt6fvgnfQpL~XvGz#|0Rqf6J25mc7K685EP66QFV)OaYocjT)N z{d(s1aQnbl3ksD1s_>nY2&5cJWK4~qs-9vQCP^avMC&G+>F7+0gsfzh%(a~(IP$yth}-O0CCW=^P}v`dRz z9+0Zup4x1yO2J)6FH5^2dW`|qcAs;(4!S|?zWbPYzR40mfx>bk0w=$cUtb4dd#1tB zWl{9>L2DpN`3M?qk|>XL?I`Exr21<((>4#jjLkqRalNP*Rc&9x0Z4Fed$mdF>Y^Xm z{&$BTWwr@4pN9u)gcnaI`%Xe`u^^uE6?2+ShcHNDz(CtRgI*U>q&d=z_u&2EyDJmL z;+$2N>kO|e6#h$93XD$b_p<7s_=e5!!K5>>u}s4d9iEX11r<#%)(`;2LIeuwv@mY4n3?Rx4&rDSi@1LwzJ#Srx;Qb z_lhj_iIc}!>u7nPZ*ru|y~|L5>OU@7LFHt}`ow0Kb$5VH0ZM?~3Dox^o5MJ+B8Wb` z?&o?b2M#t4Tv(NjCvH<3x}#>BY)7P$VH>Fl7{Lv)%)VhUMmCi z@87TpP5A8%pa!b(Vuc&VlDg*Y`}?zgb2r8yvY;n+p)deNwDg0YJuHUZ3yyJqu}YSv zT-$#igXR-3cx1_MomuGg>-b^tc~>Ox@EYZS8yVIATsgY?si1%ePdOEU(^`+_Q$-{( zcLKW5F4cI-@&e%=8zx*9*Aq@JIH#IMDBECehdp;TB=uHh^ywwwT%)-98 z8l>9gNenqw>!5;h&#cOdIGmiITjLmzyhELtwDquiH2>a3A*M_C{cB*!9^ zlN#_IMP1GdRd@lU%|oNbgeY$4K&8SO){8}cqA!Ut{?k#O{(r5OdtXnH$0ihz)LKhM z&!H3>-Ie%?jm1btp{pFM%TK;&CLm}tw_up7YBwzeSR2;5xn#%_1S+#h^6Z@!hovTi zxXk1r>F_)sIqYR4G{aqq@$JRLJ0aeGaTnvKMy>WLZ`<9Be`E9IcyK!pQGTIZ& zJb1INBZ&#o)~x@-*8CKD-fX}E8C3Tg$Qgf-k!niQg?lz~47y=o)NjnF1mvMWEPM)< zn-F?lTIq+s$O#wh`Cp!#!FPhDF&>@z$DqqlI`)%iU^V9F$|YZ!hZHPuk{`&NZdv=h zAU5_zQPu)$lEPMK?==FfW*P3(Z+^*^Vu(^!3P*^#A04IUIr^l`Xss}j*GheuXtU>2 zu3W`n^em&L>=TNZ#PBm_5nrUcsH{Z~iBgaXaegmSeSv6?kZv4m$62}~^QMGzY)oEF8dG(VZOCFCXqdwKF|L@<6ZnZo<5z zajh%;Ytr=hcIw?O?}yIaBQWI7!}LUYR;9+AJBn_8*RR}=HKeAvM-x-SF4-CLlY{&Q zGBjDE!RW#x&V4rAlu_!>JFBX3Wj{?gGSM$|miTHv3;3?-wsIQkk|>9-K`Td7RRJf@ zKgS)>RU~eHxjyN)b2_J<&MdB5R*Qk3kvFh6SmAhH?2Q7m;5D=_XXNY}W=}+JPxZnG|1~AIUXZ60V+&+z&O_U}kY41F+q1Bm~VHEgm3xX>k-8kXDV>em0WZYi$uS;bst1@kzS7=!eL&m zK3%14zo@pqDa4p{zSNZjsGZ1iUq04~y1CC2nP7y=1}Utp718gB2W;!O+llHe*Mc3l z7n#ImiCe6s3>4 zMkUNhFu^`vNOScy8@Rv&hIGQ#9|ct_AUljLjjR+r|GT}D-wp$8ZV(trNbmpw+(^dEfxv5nVo4arK!pkOV61zhXjp%DV6^@lmI zZR;M_6CZbJV9=+P7otM6{ceRVhdH-})v(iwt=ded?Ao6pNR%{d4|ms+MM1j*X(cg> zV8{1P@7Gw)-ZNGNQ4FLrG3j#`Qtxz1%DXzZhek&an~+Rg9KQ;v*d}z}BbB?02{z7q z3Y3V5r1)uKBh2&7(id7HbQ0y&7~O`O?4KGFXkEcjF{}i`EZG1{P7dr~7rb0hSUgdg zRqODYA>GrGwvTKPa%urXF=r?g2iBpAqQwj^kk+PPwtY#FSIygrMveSU+bBU5oGd1n%0Y4a1Kai zxeY7PHe2tqqC*|ry6gDMR2{!=mBHqkRNDH$eqIReIxBsa!Mj|lh5p(it)P!v1X@2p zH^A>eA$ZDNj%sHxb}BAHsxV{3(PzH@WsdSe`-|{TPszIkIl-bt;c(-c&>58B zQ=m7G_4LmkEnLE*6z4)S8Qv_caV7pXF9*6rv8*5k)?7p8h&nt>GVm0AGCweSCTFKI zZuyasxVl}nB@@gJ)bX>cA#C(N8htRBmT4gVM0&hvQVz-a^^v0FxLOtF)IqZ-9$Z}r z@BTL>H&6PO7-Kd*(+)D86{i*4rB_^pVen*>5hdOhGlZSksOg~K&&gg@coP1W3CAa0 zH_UUf@a^XVn4Qv4>tl)Xb=^#On9SOy7(wqyzCe*NZ`73 zRC;TzgP6!-9tYR-)!+Iul%@4?hg2~buq#9LGxnt&KR(i%rT_CE00@jgU z31ex|B6{IjJtoh)&@$>P`=PKsp`Hx67ozMwMu%qc1}>^Rz8{eK&QNv@%-ZORsk6Ai zv%qXuQ69Zmk}UG8<%5_?TEj1SLTY1UNJ>xGfZ-mnTYKaT5d>i^$5(S7i4K$GDkP}g z?H5TVi)>|!U$k&!w%ShP<`rz3yW1kRz8MEcOi>-Y`qMHtC_Jr7hv|LeODry__N)Ub6U*vjP(^fSoFITk?s@1NzsfRgoq>($231$EQGVdXxsR zu*v*po58lf#jwf1WTKz>DZk&r(mBo7(0%_&{Sr8?5&Eu%c=fBUT(sKy+)D+@;{;6N zqJ-tWx9HAD)Dl@7<7t2DUdTDQTS<|`Q-`otrm>s(cB)6>cx>#?ic~)#wh)ulwj!XL zXz9G?QR@Ke7i-VpxWP*wLxXTokkHFiH?^u)Ay4Lt&(~DAay|s4z~GYySx-GVN2C4V z7rU%-PQWd~oyyb-K<|MEW)$f|oQ!^OqRO(d)e>#+AIqpp^bta#TnD4`2Z!%s7$o}O zZ&vCp?}M4cr{u9iP^$z~LxUxNa5o&bGjgcTSwj;T>=S29xWipc!SjI6tIyK~O6cgi zZX6748&IFsHLDfUCD`Pcs?H-$h;;^k-8y8AZZVsZlm`)&(f}4C@_uYzpC1RymEjTn zrR7}VVej`=SF-1O$x-kgNp%PpVG$#-FCO=5ZC?qODk)S^m!T^>3Jg22#-b6%2JRJO zrz-Q0z3?qOXxbGYw(|*~3ATd(tXL6v<&B`kj@>G?2%u!Jj{QTA3giB=$zl}c+r`z1 z`DFy%h{qTD(r;@-_ppIvUZc zhS*33yO#+2d@c=HZ5gUHW3KYQ|2=V$Snzx` zoUG4{rtt3kV{n%&KxKilAg?~}dLD=`DLqxZ@Ftm)I9d?$!pI+`+4hN>23Zg{p<;5cYfNumNW?0e4y# zsJV#~B3ap$N1P0Y{-}#SL|87il>!8#-%GNQ{H*Q)jbGBgK@Py*J`|j|@CF_%&W`Y| zaE46(<%`!+a8_M4LlQJy=m-xxI$bz*KD`PHY%`w~N8&zs?09*lw$gIU<1Ag zpyrQ?zEV6}NT#J~D|9^O@<-{~Lumm9eSaJs(`U89*<#D4OWEXB7)ePZ2bv1OHe-M5 z*)z;54`cKkMUKtNi-NWh5^`C@t6LwI7F@?x-NKqJvW&l5K6{S({T8Nj)%djB8Y24Jo(}>!tHzDVv zv8jo?<#zp|4*vQ?5%058EnyQD-#Mg;tz0wh-RMUm`$P9_?}-b`UCJw7f9CkPx7BZo zN)cuqmr@_D!XtBLduh!EOeDuo4!koVNAI)Jjx0d!y{y&(C5MvBv!iP3 ze*_d&tHT7i+ibTbHLMxmBr$nFV0-&c1e7L9XkVuLB~)Hz`%J?}aT;=BXL5yACg?L{;ReKP z6oe&CMzNnpk??mLT2MS2oO3MUJ3j_*24a@YTdK)qRrHskicEcNL@1f_4;o#p(Xqrs z;~zgSqvl$A%Xj^6^~zopqoid^!n% zGVEfE6GJ~NBM~h%wnUa5T~glALEwjqUv%G|;c~SOo`?t89Rr^3FzcS>HilYOxVGa2LBi}zeuLla|GgevNinyZ;Fgz0pEi-cf=3XaEC_1RzbS;7l@ zea}E6O1(ISpz$)Qyb}^;2n$z;Hx979Jq8he&alpw9V?nROgTZIsPcR@bT(z4XYd80 zu0{Cz?Idkc-&ux08!ZxjL8s8O{7+3SdCWv8`!x!3 zCh>ItoviM}qo^-(1MbG(c_SywE64N77W6^)+dTUz8H&H;4_9s3_f+>%e*-eZ$FDp@ z9B&Y~&m%iqW%PPMM{w}}z;Uieh33b3Q74tLGWA=!Y88s>Fj~=Kexs7klaT1YbMaQu zK=e+0k2T2~c7)9^4dfpj)wLKO4m$}7swX>^|hzq7R zI0{3)gd}FT2|MH_+Jt}P`{{-$wGe*$r`5p2bR6#|4oY!{jB_+<8Wkig;6ejFd-j&c zxgaNbdPmEPoHO#D_f{O$3hnPH=miG)CM|e{C~t|Nu70a3ND_Qffft9ey)~4 zn?+8u>7z>K*u26&G-ol_n!9}XFhsJhz7i_ zhdI40=0{{!LTQvUPH+eOs2$n~%Ky@&AxHWA%*~xZ=nd_$Z#@tYtDqN^i&o5O;b^YJ ztB&?2JUP>uZcu}6`mdQ*zI}{;GLW_X?Ujf`NA&2&!0NA^WbQh2TrC?tJwmu4S>*fy z;SyKr*F1bQ#06=B8-3|#e{1C&k32?NJGa65?ryDqjbWj(T-*J}m;QYaE4h$jR@(1! z>(}V9MUW^OW@|zAw^U}e=eB!YyJEF)GfGB1NP6ycqU+ee6AS4{+Nxd4?!{GKtt5x++6Q=$X0H@}L-HO%noTz~X<4RriQw3s2q|3F1P;I1_AY$sx(%oSqx%rAoj+@^b8vUb4TppWzuITu zfAw}AKv6Ysx>pfIlq8bF2uL1smLv!wQF6`*$iM)Skt85F=Oj5v96)l;8AdV;86?9X zafri?;rrjcTU&MO-rc=jMb*@tnnU;L?)UWR=l4E`-IeCqBQ{xyXv}iXBFvsE+;*FZ~BQL)kCk7gp4R%8eCd} zoY~3*Y8z=^4Ey6x?Zq>Sx!|5G4;S5h^|ppx}kFgb34EVSxcLG^oLC2bRP2!gHO zO7kLb$19ENQ08f9EEqpPS7YwVV z4{!U)P++nUIURSxC+-*D`YTpSI$AW$xnrs7^S3#56l=AZGv%LxXeCslPuwZ^Y=y!p zoUk9P`i7bAbGW9GFXDeFIN2^V7l@-b9FQv4KE2rTWc@jv7Jdl&=y{!+M|oSy8Bs7; zPa{w)b)0aNVmg@Oez;W_Ai$PryHn1hoItRdSOQ2295E4HO9Ei@TJ1jU^&U4Z$4oko z4*Y~OrM{UK75g0{wwC90)sw;L-eT#dsH`S6emS_s=W90PK|tNx6xwV4Z=UbJM%oX; zRhPPaqbob>v$R?cDigH0A6uA~FVEHsBrzZHe(6}mg?_z?`qTOEAH(TxeNdYN!;Umx zp^9yAUg)xaa_EPx5M|x==&h)eSe%3f%qil#jX?BPR@3*~{P=>5XovU@iNHe{N7Dv1 zbmN4_CF!mnbx=d53NIc5eJ_|{X*PUeEljFqfQL=JaO41K*jeFvVOhDCeUbl@%_I*J+G5tvIZV?sZv6xc8vQZ&Yz9N9}?^C8C+U`1RUawl0!* z!8pzoi6Yy<0(CjHDj^xiSC(e8(F@~kmCemCLH&CYuh=>l@_hMLo$Z~A+COeM=_`w@ z-|f;r3I7u{aT*5wt_a>V(A<(mJN|I;@K~vJue>|9_K`%>G`xTw!09|Yb3#w z-~@;3WxAkKx`l&q?l3dl9Ul$GH%0XOGWSLQ+WI9!5_sSBA8LQyG zM{lV(Z3V)itx>@dtMn#mv)`?6Z;dy|QWx;`xw?Mfh=AbX;K#@j)*C z>Zv%XYe^I6B0hS#$dPdx#lG+1aIJFUUr!0M)}7V)mc#wG^68O2WXrB8^M#t<-L2V> zYzP;$*&%8|6#G{a{#+?QhXe~M>c%lZ#-cE1y7kq|&YxZ9%4$UK#}u%SEH;j&w> zvOv3DtK;Q8s3?y`na_IT_QUlM@;Po)R%D4dqvW_pOx{q6bd2rcJ`lE?YUOLY)JkkR zUd_B||K&=CcqN_U&Mhk)T4_98$y+Rg?dUvKZPjC{9LISJn2lC$VHe-P;oji+kUuTd z*yO=C>Mb6@50u3-re4%FiXx#@34R^A<$ZH3#7l4MKdD$;6B_2C7^C9sDXpq0v{4=V zil3!Hq-ANDGMprw`_&*s5_@k!q$^&KF5ewF;0v~M2913;3UG`Grw1rEVIvg3xYk6k zckHcxW!XlD>iu&R+z{e15w3E~Rv;96Y*r{x0Or_x^cpp4Sx_BTlw8UZM8IIgT zQMvf|H%vPc*H#@kr%^%dw8XTR@0f?Kpp8iPd!oAfAB+q)33HP?Zt9vQ0dk{Pkb4HmrxvJzE??5WF(dvgr>`-k+eeh&8o7e=FRjhOG z_X0{VMyT=!GE$>f77mX8^cO%=Fzx@lM#G;ZNkD-=s6QzkcTaF3O(pBijUnHUDCghP zQ_T`s|CjB_ChLs3B2&`*7a|nd`TqeC>h~cuQ9ajw4wdUbX6ovY{caPAU2Ycx=lR?I5=gZOaVExNg1+*Fb@;xGq}~|k-73sO z^;tCd*MM&*9Y#4Om@mTg_WPP*vWC?qBk6G?+v~DCQENKf=La3RZsb+d)^@l(hSIly zo)Zw73;wxh?S^HOyPkXLy#w3XU=%-GMR&Q@7jxy{nwyM+q8ZzB4$p*(W7<8Rz|8)l zwJKKen;f5|!d^q4dAsgRJU2CY-aBO1#_D+W7==*y!C>%eS%J3h9iS?#zU9Q#~-7X5B?|& zNT6ooVu$R6#vn7j>Vxob1eYHo!567ner z?c*H`>QStW3#~*~tAKCm?%2rgVi)h0p!^pO68+)YrJhsO*|l+pek#f9>fjo+0MK>W z%#FMH>{`x!#Oie*<#f%EyH8(ZY@eBRaMZes!)B1G1S` z4u1M`|LUHB&M~!yKdw63)lnTnvenHBm5QT@S9bsGhrmC}@pA6+TZfY{SDaS>V10X{ zqm989$2&d^R*Jm5Yfinu=FqQ+0PaUc_w`NBPf5b*tTw5Cvav_tqzf57+Pk$zQAj6( ztmW*l4%W4r9eEmv9?-{d3!`1qn(ULE6fQHA>s2T7{|0Y>Q1N7!VjGfLN8XO>s^?N1 zuS*s`=NT`^-g7T3*_FPfNw7@`_n{oVCoS`3ZISY7ZM{}An8NDQ`4|83>b920XNHIt zSH@ND-}Fss?UGI@RfdjQYH#n`A2;cJjRGi;I?I+YJ6#jS)6nArJBssA3nI#c$raBx zs4T0_G~)Tjh_<@#EnCaf8`#9@>?p&i%U09RrNZ4jtn{SlCWM{Pz+!z6yPQdZ z*eZH1pf~tA>*3ocBrRk)LN7X9&jePFsw5w^W8&_k+v3Ofnbup6VVZf%yCT69Z}8o7 z3o+l*U|8+KiusN;NFnrVZ4G%zXSu==v>agN$BKr8>|58PW)12^<)TLxB7Gg5qag6-3vx6k29#TBzkABF-OvoQ| zWKgMda>HS=q9N(cR;!y<(^QK=>kF)1Qony+KQ492Q%m%U_lrsq9Ooj4XgG`m>t5d0%g{0W(A&ACc<&cU7c}EdfSelQP;&KT&|?Y@Xnj z8we)oECRq%t_NqZU5%3*JWlHS=`;}iLG!FtS*4aO9%d}%?hAnA2~5hh&)hPjM56^u z89)hKOh|$vOw_fPj$6D<2JpO57`pMoH5UwXJ1{G>#MtgsAiJyLnoYgb{>vXy*}aJn-fGn%{{hezvc<<*j9`@eZdv`^>n zDtuXMg@=k~+qaM_GXiMhq`zpc+`#=uHr(g{O-(^}?~e4nxWFOuE~bMiO*v&SvY)F= z-x$f?F1@5HkJJ^U8s7{>+?044TB!@4<;~YptWjB)@QBP*Amb9WBs8=$t`-eEtY4(V z1Q*9ub+fRFJUrexT~(W-vSKZ?I7*7ovU#v@tDT5!-*%NHv!fuc-NGY1Hv$I9^o9s( z67c1RT@f7p_147IMo20r@q>6z#*t1>2TlfhWkEhvILrE`mx#(*x;yVPd4w%+0(s~P zUQ<>p3avhm*AjN%j7V#~3fa54=iS>#z?K;b(T>hUC5$xO5`T`zN_cb#?|Ss-xmzAr z9&35=h=yKKuIBKic*Db1B$L+hgjAJ%tjn?rm5%?HUMo)<&|vjGkpUp~vp24yUv26v zYh|pZ`@pk%M%Bz!#0@y)1}Ie8?CE|#QinF8F|jh&YLd#EB?8WpQF|lF(Om9$YN}eju1Py& zI}d*JW$dk+Ri0A+0U0*YTTpV`>zU zGlW4%Z8^3;mjgsO&)(g0!cB;Ju)!sbUiH&>_Df*3a;e@l2{=GFa69kJSW`Yj=swu7 zUZBE@3@73A_-Up(9UD)A7oPDs?%2D`iHS%0s9d5!W%7!Rb!1-3yDI!E_ZyhoPj1RH z<{t|Va50X&*7>D`C1s5d5w51B_o|=I!PXX$gWWB7o6C~|d$4ReO<5`~MbI}1Snr3r zXEfXg$l?mOeS2Z#OLte{pD~y!#5s`j(t#HjoP2SHg>v@~BC|thr1GFF;`h701q8Pl zT3ei4?>mb;<0HU&{k3gmlS=|UwAcsLddaJ|3E=~9U1C@kfM{4WM0*581sUXZFOoxUY_`I z$YbBuB#h<{0MUyI(lSCz7R%RXGQD?}cKhBQ_s&^OINc<=^uSCJ&j5m3qKvo;RZeo( z5pdjfnp=A->(NDSa4kfu6?4&Nno~`8(B^P)XLHa}^MbDT&u&DW)nMxbcm4zq=%{U# zc*y_0AHgESn~fl|9+gcK_3#$$LBCrd7SVN$di@n)$%W}w;?mQ^q<)o6^p!lhkA9mG zot>g19QhQz0dDy_t#TDBR@yhUoDBhN5^`XD+vdkjT+z|b65kb=4_54qD`=4rsXWOI zS%y6gnvHdNSh0{lR&8IS%gpnR#(2pb$gK|bv01F3Lk0WFx6H3y)-wHndJ{6BbE{S?ONdsaJg4UE9?vE2SW2T2~ zf0$`{vmthGd@)2dmCtd{KiC}HqmKedpK8Ad(bL0QQU_yE7iZb__~aIsml;ktWMSHS z>{9bOQzxXl{IFmZCDpc;r)6~?3T@=;fFO(EajS_s?Z1cdJeDTut~Gj@_> zcP#+)=&BC7Wg7Q5X>q{%#s$}TS~v{F)b&)4O{1Qb8GC*bAc{^c=d`cGRLK&qOIBBY z$#ypWd68A=ZMr5)X>rjnLaBLK)%Bq}k!Gb|?SKJdA+=L?4;ki|qm!CzHC6Pb ztIM~g#v%%U74A@v(ua}3vD-+o@{dWGrwq@&@jeeWEz-ZL47m#Mgjpo2^zXJX_exKb zq`&xZ)7285d~}K5D(*hgZ?y18Us|l7%#XWIiLH%|Z~=1t@N{8BA~Q2;oFSw=#&s$>dHo`xn{49D-PQA;H~^xXUIwQm`1 zolnYHtazZe$LPIIZCsBvcsR!tB=vR1oVB=BY z!4#1ndZFP%RFcBUGjJ815^d-xNwfDV!G|tCz03@TLo1M!vZywfDLWF4Zw_kLX+8Q*MNm=k^NxP zw3r{|;p$f71#MkpWswTHs6_F-R%7jTITP$(`((+MGl!)^w_Ib+p>E0iDLKP1Y9JfvS`8Wk#u616dL%r5~D}baT4TG0+HOunHy+@-%yQ$zP%re z`OWUT;eMmy(0_Rb0LZmqV((+v9?B(^JD?-2CP@Q|T@}E@t+=5D&3YdDgUoQl5{l66 zP&t0}are>H*Kqxm*2`~-U94=i$+n zP}~D-@+B{W?TPPa#!&yepmD!&c3g2{z{Q=HqLQv?4+cE%$)os41V>$KX!Ef@pru&_ z7k+p1@Sxrz8V^Zs(y(coOSF~9(E&+5UvqqzWxhW@xy^&Y*jQ#p41+T>NC68e%V)AZyHI7#l_kQ3>xu7cxpZ2`gK%x zsr)#KMt`5TZUV(P=@h7F`Ix#y=v5h~NF2l<#vPxMoL?==tEqkY1B~^KuoCpq+c8SL zt6Rar7gLR1`0#mx^;?Z2c4P0w(Q%;A9bolBevEOr6(X^`En5NdB_K2W>|^rvhVi`L zj$dH2a${*g4tc;!v$>}4yko+KPAOmGmV;kPFv-9}eri`@dC*6cl;{Ol$n-!VE5yY( z_i%Hy_=({D2?I6H*VLri8?283Y;)HPt80R{WfM`Ke}hppnf)BzjI@D4bG6VNaqOSp zJ%_tz>F;Gw9n0;o6R%;S(iTH7UQjYc$v!=@cSwpeNRAz^ zK#f>FtX!Q|(qSo7t5OMEgGbC;>_~tm=&`I*ja94i&16x2Ux$F*i6X+EMfO2zch#|M z0_;HFRGmEc)4%#$15uOis2?%6vmOF#J;mb}P}Wbd>Cm?oL#4bYD!TCz+S?Yf zYJ17#(R5>9xI*ztr%-CzlEDyvv+lGwPkjSXg!0mjJ&JQ+LS74 zB$;2DbR_xKLYoh^3AK$S%W0z}r}iYMu(x?~_F!RbDtc&>Qb}1vZ`^!0X17qoatK3*o^s`hw-KoQgo;{ph}$#hNsRH_)g9v5Zk zGrdB~Yz5kGPW{9JxZjB!hkw=!cb7^^x51qqhsCsThSC6(*Z#kw%AliMpwD#}tQ|#! zIiq=&^s9?00d!YvmXJ7-%#*Zd&Ta#uKv(k@&ewJl^;7iF#R4Au@92-klhiY!={Gjj z!_>i1QH%TWV}|;@qccZ&+cQDiW?%u~Xh=#8q4BBpx{dP!%N+Qs;q3yVq>jG!*=SR2 zlN3Xo3aEL}L*C0hBC_7-@MfKlm=X7E!0NM!8Yp=Na^BF&h{#%ZGE7@D?H}9_OsjJs z%D-)X+b`;7awi{3yre?)e2wlo=tk9iJ=yE=qbPhpXuN6n$IzuN(sjhUxHBa6v{8 z7mBO5QtuH;Z0QN=yX5ndKQh&T9`ep#EK2cG(`CBh@C#R13AKqz3QNqpX9tet3SEHH z^fGE3y3j_7#6iqQ!|fCqx?8!q(@xlS!U~IN`r-!_30FTBvJ%021l%a0H=S3rHSqBJ zS6;1!R)4L5uI-t$okx6@lxC&s?y(8&y`x(1YroDNE?nHh7j|y1LujlV!u7$prTH?U z%I-x8>Sn}jo)6n)h2Eo7o5t0~fi@oE0+*J&@B*;mV&3eG%{MK*{rR_F!nOO~$S3-w z>~VTh5j9O0e*s<4iFjCeG`3gL@^YiFGhEJ;oP!Wtys6t2dziK~jY*WYoh~!uu+%)4 zlb~aZnUHDoCP&rui+vS$alz7SIty2LVU ztbW&Z_uI}~!ZJ! zgzjTb)HHK356wvzdm0Z(uFk&8OYkkE<)(`&i4r&yxA&G;12Oeg+|*h^`b-zyIv!{p z`@WE0Nxy)asMB3`{M>EEjI83tc4vf^N^KR!KeI>^%N}|9O&DTQD!ZSTbNoPyk{GO$ zAMTLxv^XzZ%8^ukR<6w5tyEhdaTT%VOA#URo+CjKkeBxDi0tD-IhqD0+zu7*8f#`F zm6b!LDMErk7iHP~x4liu=Hro7kl4wTd#Iehok_PXQ&?oW{;0*Jh9oNxLKHgdbijfn z9QA^f%sP2E+N@r4+#tWwvNZ9od&hO0Kk5}_o80u3u(sMnvKvpqnq8ghTDeMA7Ef(K zt>6y$Eo0hcJL`SbDK-hf`bWGuwj(cIc{pt{!aNoC4NAD%`HjoWwxAW#K+KP(zMj1^ zVB+0+%j8GnvMO_&5<2zxgDZHz7A%x*pESU1{qf)liYG~W`a)j! zlE7_!^@@o&E>-o>MS7n&(fl~ta%=a~m8T|i6W_KBUgsucOi-=W@=6?T!AAJYyK_bHEDE@BQW0Ra+3U>s6(o$ef1-RT}6*A zM_t(pSUHIl^I$RQ8qTC)!ssk$$sf_2Wdxp2s8z#s?y_|a5w@qeT__3ehAwZviBq>* zv%Ahe3r`A;rX3 z)0j6Cp?;LFtIJ0BOIXl3eS>UcE{WX3u*K)FCK0P2S~jp5oR2imwE6&<*05d&OP&1? z<#~yLKr8QRn*Mlvob%Kv%sw=0=)^>Kk;O{a`iEi2wntQZGbTl~nw0ijOkxmpL(Gp= zV}I10?VJMNJ2vh83{9-p!m+T+Lno_NrvE5FF zV;&tXYpRQ)RUd!~y%M@W^IaEJMq6F$bOuyR)A%j>#as!=n44bH_TZAb;h=5*ZV(rUb@vr7Xe zxpEm++jMQ$J`V><vH1byf6f&(%w9Eo)DY zE_b#)cU^3rVTi&bLV&vwhXDz_v<+kHgn<+317b0&H9h<}Z)d<%DX_KHV{mt|((pcN zznxv+BctNBcI!mLDuTIbe!20bNWr`G8ZUnIde(0V`>%Z6pf{ChEv5kOa@5i>&_Oz3 z{&sXn{vR3i##qb#ufvffZvY*F_Y)mL{YPy0xeW2({z2P(y}r0BkAd#9-*Wk7?0+y` zy7Q065?u7(%ccJ(g9M?8;=7fvnzx}5QwgXzgeqG$%SDjAwng<$oYOzw1i@+ktCk8b z4;~;s^0>LuZ*kp?1f`hs;Du;C({tA+=wto7+!sIDhu&ykjHuK6Pw<0~&XJ-|SG zJU{ci%U*hcSKJXuQzwOf_hT(4Q2Pe=vCSs7ChNoRS=ymxnC_NLm%P(4e=EE56-Au6 zQ2Knx@*Hh{HAK#4gy>h}Z3Z3|MA?fxdiaa`oG?y$ddXv6`pa?YFr^IpGJGq$Od2(t zP(@98!L9w~l=2*&jX8yAjo4n{u2_@JI+GwR1GF`c(=S)MxKPtc)05ck_vyN>xdt3n z0^9$}(?x^uHqZqI#bqMq6hBorHf!Ds`%3or4u8%p=`>C`pJm{5-$Y5;_Hg>su^5F? z>_3%e#6aY2ja~p8P>{y6&0cIR=*(Yhiyf337SYLjp$m2SD>>Dt^amZShC-ic_6h&k zU1T?ew0m;mUa#lzo?Ebs;m;hP{5-JxCJd42WUN`7`D?mt5rWf#WrU$ynZ5W@^8*53&N@)hB9 z4u8E?YqRiVTmk%>vqBvzlIWS@>M1KBV*^1frUU;P$SGTbto7gOfBl?-4e#FM`ez6g zQMsG$qQ0_S>e<(=tw#T+^&xYzc7_+{4FSdLXs=Cu`2I!$Np)je>*0R_=+_8NvT&H* z`h=@pe}gwDt-na={@JOdH8?T_7j^EMtA}X62@!n!LaZ=!nyMOzSR?9) z|26sazpi+tv^WwQTy_Mat4lOpC4KA$`{UDtGS~~CX4kx4YGJ-mVMRyO#*evI?|S`H z(;$jDQA4KcTJN9>9W1!|G=#kBpFU)M>twQ}gAIR#h1K=WTlemtpJX=%11tE6eptz! z6;CcB&-QgWeynGG{rX1kZ+M__;4*Kq>HF3g=;2UJHZNztW?u;b$^D%h?-YB6CLiwQ z>EOZ@P!=_rh-UNuKVOvPdKmz3glWFQ8jQpj5n z>1hDx%?tJZSB=8_&E$bs1;sMIi7$h0B*@O$@;-lU5A2U+8vbY+3;O{X)=}{yt(O~e zVtKJ^c2?^CCENQMrGj7R%&#KYB9ViSj(#zqmbxQp2PtC6pOgIrad3Wpb9p+PkFmr2 zx1LVlOLh6Jo)Q{*17%WlX`^lO$)*pATHV zTCh76aQwPSqe^x|(R1^g Date: Thu, 11 Jan 2024 21:22:31 +0000 Subject: [PATCH 13/13] Restyled by prettier-markdown --- BatteryReporting.md | 6 +++--- Troubleshooting.md | 20 ++++++++++---------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/BatteryReporting.md b/BatteryReporting.md index c5b558a..5a9fbb5 100644 --- a/BatteryReporting.md +++ b/BatteryReporting.md @@ -39,7 +39,7 @@ cards: conditions: - condition: state entity: binary_sensor._is_charging - state: 'on' + state: "on" chip: type: entity icon_color: yellow @@ -55,7 +55,7 @@ cards: conditions: - condition: state entity: binary_sensor._is_charging - state: 'off' + state: "off" chip: type: entity entity: sensor._battery_level @@ -68,7 +68,7 @@ cards: } - type: gauge entity: sensor._battery_level - unit: '%' + unit: "%" name: Watch needle: false severity: diff --git a/Troubleshooting.md b/Troubleshooting.md index b244126..1d2e0cd 100644 --- a/Troubleshooting.md +++ b/Troubleshooting.md @@ -10,8 +10,8 @@ You can purchase cloud-based access to your Home Assistant from [Nabu Casa](http ![Nabu Casa Setup](images/nabu_casa_setup.png) -* Your API URL would be of the format `https://.ui.nabu.casa/api` -* Your Garmin Watch Menu would be of the format Menu: `https://.ui.nabu.casa/local/garmin/menu.json` +- Your API URL would be of the format `https://.ui.nabu.casa/api` +- Your Garmin Watch Menu would be of the format Menu: `https://.ui.nabu.casa/local/garmin/menu.json` Where `` is your personal Nabu Casa account ID. @@ -23,21 +23,21 @@ Before Nabu Casa, or if you wanted to manage your own infrastructure, you might Now you have to manage: -* Dynamic DNS -* Public access via router port forwarding -* Security via HTTPS and URL forwarding -* Certificates for HTTPS via say [Let's Encrypt](https://letsencrypt.org/) (Nginx web server helps here) -* Proxy allow list in `configuration.yaml` as follows: +- Dynamic DNS +- Public access via router port forwarding +- Security via HTTPS and URL forwarding +- Certificates for HTTPS via say [Let's Encrypt](https://letsencrypt.org/) (Nginx web server helps here) +- Proxy allow list in `configuration.yaml` as follows: ```yaml http: use_x_forwarded_for: true trusted_proxies: - 127.0.0.1 - - 192.168.xx.xx # Server IP - AMEND THIS + - 192.168.xx.xx # Server IP - AMEND THIS - 172.30.32.0/23 # Docker IPs for NGINX - 172.30.33.0/24 # SSL proxy server - - 172.16.0.0/12 # + - 172.16.0.0/12 # ``` ### Menu Configuration URL @@ -57,7 +57,7 @@ The menu configuration can be hosted anywhere, it does not have to be on the Hom This is slightly trickier owning to the need to supply the API key. Here are three ways you can test your API URL is correctly configured. If successful, each of these should produce a JSON string output looking like: ```json -{"message":"API running."} +{ "message": "API running." } ``` #### API: Linux, MacOS, UNIX, Cygwin etc