From 5d820ec188712303512e49b97481500fe6323296 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Tue, 9 May 2017 18:44:00 -0700 Subject: [PATCH] Add support for automation config panel (#7509) * Add support for automation config * Build fromtend * Lint --- .../components/automation/__init__.py | 36 ++++++- homeassistant/components/config/__init__.py | 88 +++++++++++++++--- homeassistant/components/config/automation.py | 20 ++++ homeassistant/components/frontend/version.py | 7 +- .../frontend/www_static/compatibility.js | 2 +- .../frontend/www_static/compatibility.js.gz | Bin 362 -> 355 bytes .../components/frontend/www_static/core.js | 2 +- .../components/frontend/www_static/core.js.gz | Bin 2695 -> 2678 bytes .../www_static/home-assistant-polymer | 2 +- .../panels/ha-panel-automation.html | 2 + .../panels/ha-panel-automation.html.gz | Bin 0 -> 40511 bytes .../www_static/panels/ha-panel-hassio.html | 2 +- .../www_static/panels/ha-panel-hassio.html.gz | Bin 7383 -> 7381 bytes .../frontend/www_static/service_worker.js | 2 +- .../frontend/www_static/service_worker.js.gz | Bin 2513 -> 2509 bytes homeassistant/config.py | 7 ++ 16 files changed, 144 insertions(+), 26 deletions(-) create mode 100644 homeassistant/components/config/automation.py create mode 100644 homeassistant/components/frontend/www_static/panels/ha-panel-automation.html create mode 100644 homeassistant/components/frontend/www_static/panels/ha-panel-automation.html.gz diff --git a/homeassistant/components/automation/__init__.py b/homeassistant/components/automation/__init__.py index 5f59f760d0b..7c11f15862f 100644 --- a/homeassistant/components/automation/__init__.py +++ b/homeassistant/components/automation/__init__.py @@ -16,7 +16,7 @@ from homeassistant.core import CoreState from homeassistant import config as conf_util from homeassistant.const import ( ATTR_ENTITY_ID, CONF_PLATFORM, STATE_ON, SERVICE_TURN_ON, SERVICE_TURN_OFF, - SERVICE_TOGGLE, SERVICE_RELOAD, EVENT_HOMEASSISTANT_START) + SERVICE_TOGGLE, SERVICE_RELOAD, EVENT_HOMEASSISTANT_START, CONF_ID) from homeassistant.components import logbook from homeassistant.exceptions import HomeAssistantError from homeassistant.helpers import extract_domain_configs, script, condition @@ -26,6 +26,7 @@ from homeassistant.helpers.restore_state import async_get_last_state from homeassistant.loader import get_platform from homeassistant.util.dt import utcnow import homeassistant.helpers.config_validation as cv +from homeassistant.components.frontend import register_built_in_panel DOMAIN = 'automation' ENTITY_ID_FORMAT = DOMAIN + '.{}' @@ -81,6 +82,7 @@ _TRIGGER_SCHEMA = vol.All( _CONDITION_SCHEMA = vol.All(cv.ensure_list, [cv.CONDITION_SCHEMA]) PLATFORM_SCHEMA = vol.Schema({ + CONF_ID: cv.string, CONF_ALIAS: cv.string, vol.Optional(CONF_INITIAL_STATE): cv.boolean, vol.Optional(CONF_HIDE_ENTITY, default=DEFAULT_HIDE_ENTITY): cv.boolean, @@ -139,6 +141,14 @@ def reload(hass): hass.services.call(DOMAIN, SERVICE_RELOAD) +def async_reload(hass): + """Reload the automation from config. + + Returns a coroutine object. + """ + return hass.services.async_call(DOMAIN, SERVICE_RELOAD) + + @asyncio.coroutine def async_setup(hass, config): """Set up the automation.""" @@ -215,15 +225,20 @@ def async_setup(hass, config): DOMAIN, service, turn_onoff_service_handler, descriptions.get(service), schema=SERVICE_SCHEMA) + if 'frontend' in hass.config.components: + register_built_in_panel(hass, 'automation', 'Automations', + 'mdi:playlist-play') + return True class AutomationEntity(ToggleEntity): """Entity to show status of entity.""" - def __init__(self, name, async_attach_triggers, cond_func, async_action, - hidden, initial_state): + def __init__(self, automation_id, name, async_attach_triggers, cond_func, + async_action, hidden, initial_state): """Initialize an automation entity.""" + self._id = automation_id self._name = name self._async_attach_triggers = async_attach_triggers self._async_detach_triggers = None @@ -346,6 +361,16 @@ class AutomationEntity(ToggleEntity): self.async_trigger) yield from self.async_update_ha_state() + @property + def device_state_attributes(self): + """Return automation attributes.""" + if self._id is None: + return None + + return { + CONF_ID: self._id + } + @asyncio.coroutine def _async_process_config(hass, config, component): @@ -359,6 +384,7 @@ def _async_process_config(hass, config, component): conf = config[config_key] for list_no, config_block in enumerate(conf): + automation_id = config_block.get(CONF_ID) name = config_block.get(CONF_ALIAS) or "{} {}".format(config_key, list_no) @@ -383,8 +409,8 @@ def _async_process_config(hass, config, component): config_block.get(CONF_TRIGGER, []), name ) entity = AutomationEntity( - name, async_attach_triggers, cond_func, action, hidden, - initial_state) + automation_id, name, async_attach_triggers, cond_func, action, + hidden, initial_state) entities.append(entity) diff --git a/homeassistant/components/config/__init__.py b/homeassistant/components/config/__init__.py index 1255043b6b5..0bc44501e28 100644 --- a/homeassistant/components/config/__init__.py +++ b/homeassistant/components/config/__init__.py @@ -5,7 +5,7 @@ import os import voluptuous as vol from homeassistant.core import callback -from homeassistant.const import EVENT_COMPONENT_LOADED +from homeassistant.const import EVENT_COMPONENT_LOADED, CONF_ID from homeassistant.setup import ( async_prepare_setup_platform, ATTR_COMPONENT) from homeassistant.components.frontend import register_built_in_panel @@ -14,8 +14,8 @@ from homeassistant.util.yaml import load_yaml, dump DOMAIN = 'config' DEPENDENCIES = ['http'] -SECTIONS = ('core', 'group', 'hassbian') -ON_DEMAND = ('zwave', ) +SECTIONS = ('core', 'group', 'hassbian', 'automation') +ON_DEMAND = ('zwave') @asyncio.coroutine @@ -60,7 +60,7 @@ def async_setup(hass, config): return True -class EditKeyBasedConfigView(HomeAssistantView): +class BaseEditConfigView(HomeAssistantView): """Configure a Group endpoint.""" def __init__(self, component, config_type, path, key_schema, data_schema, @@ -73,13 +73,29 @@ class EditKeyBasedConfigView(HomeAssistantView): self.data_schema = data_schema self.post_write_hook = post_write_hook + def _empty_config(self): + """Empty config if file not found.""" + raise NotImplementedError + + def _get_value(self, data, config_key): + """Get value.""" + raise NotImplementedError + + def _write_value(self, data, config_key, new_value): + """Set value.""" + raise NotImplementedError + @asyncio.coroutine def get(self, request, config_key): """Fetch device specific config.""" hass = request.app['hass'] - current = yield from hass.loop.run_in_executor( - None, _read, hass.config.path(self.path)) - return self.json(current.get(config_key, {})) + current = yield from self.read_config(hass) + value = self._get_value(current, config_key) + + if value is None: + return self.json_message('Resource not found', 404) + + return self.json(value) @asyncio.coroutine def post(self, request, config_key): @@ -104,10 +120,10 @@ class EditKeyBasedConfigView(HomeAssistantView): hass = request.app['hass'] path = hass.config.path(self.path) - current = yield from hass.loop.run_in_executor(None, _read, path) - current.setdefault(config_key, {}).update(data) + current = yield from self.read_config(hass) + self._write_value(current, config_key, data) - yield from hass.loop.run_in_executor(None, _write, path, current) + yield from hass.async_add_job(_write, path, current) if self.post_write_hook is not None: hass.async_add_job(self.post_write_hook(hass)) @@ -116,13 +132,59 @@ class EditKeyBasedConfigView(HomeAssistantView): 'result': 'ok', }) + @asyncio.coroutine + def read_config(self, hass): + """Read the config.""" + current = yield from hass.async_add_job( + _read, hass.config.path(self.path)) + if not current: + current = self._empty_config() + return current + + +class EditKeyBasedConfigView(BaseEditConfigView): + """Configure a list of entries.""" + + def _empty_config(self): + """Return an empty config.""" + return {} + + def _get_value(self, data, config_key): + """Get value.""" + return data.get(config_key, {}) + + def _write_value(self, data, config_key, new_value): + """Set value.""" + data.setdefault(config_key, {}).update(new_value) + + +class EditIdBasedConfigView(BaseEditConfigView): + """Configure key based config entries.""" + + def _empty_config(self): + """Return an empty config.""" + return [] + + def _get_value(self, data, config_key): + """Get value.""" + return next( + (val for val in data if val.get(CONF_ID) == config_key), None) + + def _write_value(self, data, config_key, new_value): + """Set value.""" + value = self._get_value(data, config_key) + + if value is None: + value = {CONF_ID: config_key} + data.append(value) + + value.update(new_value) + def _read(path): """Read YAML helper.""" if not os.path.isfile(path): - with open(path, 'w'): - pass - return {} + return None return load_yaml(path) diff --git a/homeassistant/components/config/automation.py b/homeassistant/components/config/automation.py new file mode 100644 index 00000000000..64eccfaa2b8 --- /dev/null +++ b/homeassistant/components/config/automation.py @@ -0,0 +1,20 @@ +"""Provide configuration end points for Z-Wave.""" +import asyncio + +from homeassistant.components.config import EditIdBasedConfigView +from homeassistant.components.automation import ( + PLATFORM_SCHEMA, DOMAIN, async_reload) +import homeassistant.helpers.config_validation as cv + + +CONFIG_PATH = 'automations.yaml' + + +@asyncio.coroutine +def async_setup(hass): + """Set up the Automation config API.""" + hass.http.register_view(EditIdBasedConfigView( + DOMAIN, 'config', CONFIG_PATH, cv.string, + PLATFORM_SCHEMA, post_write_hook=async_reload + )) + return True diff --git a/homeassistant/components/frontend/version.py b/homeassistant/components/frontend/version.py index 0d649344862..f92bb64ff69 100644 --- a/homeassistant/components/frontend/version.py +++ b/homeassistant/components/frontend/version.py @@ -1,18 +1,19 @@ """DO NOT MODIFY. Auto-generated by script/fingerprint_frontend.""" FINGERPRINTS = { - "compatibility.js": "83d9c77748dafa9db49ae77d7f3d8fb0", - "core.js": "5d08475f03adb5969bd31855d5ca0cfd", + "compatibility.js": "8e4c44b5f4288cc48ec1ba94a9bec812", + "core.js": "8cc30e2ad9ee3df44fe7a17507099d88", "frontend.html": "5999c8fac69c503b846672cae75a12b0", "mdi.html": "f407a5a57addbe93817ee1b244d33fbe", "micromarkdown-js.html": "93b5ec4016f0bba585521cf4d18dec1a", + "panels/ha-panel-automation.html": "cc6fe23a97c1974b9f4165a7692bb280", "panels/ha-panel-config.html": "59d9eb28758b497a4d9b2428f978b9b1", "panels/ha-panel-dev-event.html": "2db9c218065ef0f61d8d08db8093cad2", "panels/ha-panel-dev-info.html": "61610e015a411cfc84edd2c4d489e71d", "panels/ha-panel-dev-service.html": "415552027cb083badeff5f16080410ed", "panels/ha-panel-dev-state.html": "d70314913b8923d750932367b1099750", "panels/ha-panel-dev-template.html": "567fbf86735e1b891e40c2f4060fec9b", - "panels/ha-panel-hassio.html": "23d175b6744c20e2fdf475b6efdaa1d3", + "panels/ha-panel-hassio.html": "41fc94a5dc9247ed7efa112614491c71", "panels/ha-panel-history.html": "89062c48c76206cad1cec14ddbb1cbb1", "panels/ha-panel-iframe.html": "d920f0aa3c903680f2f8795e2255daab", "panels/ha-panel-logbook.html": "6dd6a16f52117318b202e60f98400163", diff --git a/homeassistant/components/frontend/www_static/compatibility.js b/homeassistant/components/frontend/www_static/compatibility.js index c152c50ddfa..927b37e68ce 100644 --- a/homeassistant/components/frontend/www_static/compatibility.js +++ b/homeassistant/components/frontend/www_static/compatibility.js @@ -1 +1 @@ -!(function(){"use strict";function e(e,r){var t=arguments;if(void 0===e||null===e)throw new TypeError("Cannot convert first argument to object");for(var n=Object(e),o=1;o`=v$QVZ|<>R72LaAX+9@aaN?d012Aa z;A(jd?j+X67#K(FyuU|^&lGL~;U+%&3%nBrlG&?83@oaES0EO(qn3rGruzY8!9j%b z3nE1ob(CK%2{QY?k_4sEYzo{ZdAss}4WA2KF4b_?2J`$o;IVi*TNo4a{O;@?sWjTn zqgUV1w{pe=rL;F|T^X0=`(0J|#IVL4{85*ww*lVY@Poo7F4Vt4TamkPBm`|$@#L3z zUakP6IkKgPJePE^M-$?srip+%LP68>xE#+u6KvbM2FGzuPf$CA1e|T_?4io^@DJH8 zHacFqc1<_uYkecfDZX0Y!4@Vp$>Gty1$_y=ubuZ>p42KOGD=kO@(WML7T^>D0092; Br^)~T literal 362 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 literal 2695 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 BEja)H diff --git a/homeassistant/components/frontend/www_static/home-assistant-polymer b/homeassistant/components/frontend/www_static/home-assistant-polymer index 9e7dc4a921f..ca82a411aa1 160000 --- a/homeassistant/components/frontend/www_static/home-assistant-polymer +++ b/homeassistant/components/frontend/www_static/home-assistant-polymer @@ -1 +1 @@ -Subproject commit 9e7dc4a921f86e60cc1f14afe254e5310b63e854 +Subproject commit ca82a411aa1e875ef0fc26e34bdd2033f5b99276 diff --git a/homeassistant/components/frontend/www_static/panels/ha-panel-automation.html b/homeassistant/components/frontend/www_static/panels/ha-panel-automation.html new file mode 100644 index 00000000000..081586c2f7e --- /dev/null +++ b/homeassistant/components/frontend/www_static/panels/ha-panel-automation.html @@ -0,0 +1,2 @@ + \ No newline at end of file diff --git a/homeassistant/components/frontend/www_static/panels/ha-panel-automation.html.gz b/homeassistant/components/frontend/www_static/panels/ha-panel-automation.html.gz new file mode 100644 index 0000000000000000000000000000000000000000..e717b38ea4bcf39acbe093a4bc03e6130d72fecf GIT binary patch literal 40511 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 X9!q!(B5kR!=1=}V)musg)IkCOxoYTS literal 0 HcmV?d00001 diff --git a/homeassistant/components/frontend/www_static/panels/ha-panel-hassio.html b/homeassistant/components/frontend/www_static/panels/ha-panel-hassio.html index 80d1686acf0..ca491348298 100644 --- a/homeassistant/components/frontend/www_static/panels/ha-panel-hassio.html +++ b/homeassistant/components/frontend/www_static/panels/ha-panel-hassio.html @@ -14,4 +14,4 @@ computeInstallStatus(addon) { return (addon && addon.installed) || 'Not installed'; }, -}); \ No newline at end of file +}); \ No newline at end of file diff --git a/homeassistant/components/frontend/www_static/panels/ha-panel-hassio.html.gz b/homeassistant/components/frontend/www_static/panels/ha-panel-hassio.html.gz index 5ed1205a99958263848ffedc2f48e134b50c3172..2a18410d99060cdb43efeb316028b7fc579b161f 100644 GIT binary patch delta 461 zcmV;;0W$vAIn_A_ABzYGXYdiR2NfHCZaFc`L}C#wNM#5&CA&1{XBgQmXjzEb7`dB` zX-{mo0BoOdEXGlnx-_nRanw~TotL#JGEGr`-#-lb zw}jkw4WYyC6I~Td%d|G8c5vfE+PZh!4eLBG!WyjpZuV?@2yCVq4*Wx!*xoA5OVTww zy*@{xi;}!hhX%BY|@q5sA z*YLUYwUiCh=t$!Ot$yU^jmu#0aGU&4uX>7(kB@S>wJX|X`DmA-i2?GBPi+k3kxALr z@`S5=*KU8qvyRLiq;R%XGHC(YogFrO0P&Or)!7qVyx3xDZ?@nM?jWzm7e`CsNi{l-FCw|4~(z|tG}B)+a3a&X@&#;kS4abO7oI* z4NtGnk?5l2@3$LRuN&{b_eOj}ddJN-0%FJAHymP~moxG%*FV_R{SEGYLAByjzRmqc zNvH2fdVEK(7q=occCmI#ec2FykP}tC0NYMo(-@awZGvf){?f1d8M*j!!Cl(JT|@jH zwB0p)E`2R!!!$b5_&}>4`FZ0q7(Co2Kh&$9qT}PETyE`(c3D2!rD$S+eB)Ca19@ap zcC|d=D&Mu+-|+0@c_X)p&Trv&^&R)x{hLs4G-v@E$o+lWyA#^j*7f*4gk(e5GGZ)5 z@o~pX`Wiadva6!?1N0eDd+M4fw3X5;(#q-Dp}QFCG*-&6jKmR;C0(Uw{|n|>&=&H9 F003Rn>%Ra1 diff --git a/homeassistant/components/frontend/www_static/service_worker.js b/homeassistant/components/frontend/www_static/service_worker.js index 445c8d0b9df..7315b62aa3d 100644 --- a/homeassistant/components/frontend/www_static/service_worker.js +++ b/homeassistant/components/frontend/www_static/service_worker.js @@ -1 +1 @@ -"use strict";function setOfCachedUrls(e){return e.keys().then(function(e){return e.map(function(e){return e.url})}).then(function(e){return new Set(e)})}function notificationEventCallback(e,t){firePushCallback({action:t.action,data:t.notification.data,tag:t.notification.tag,type:e},t.notification.data.jwt)}function firePushCallback(e,t){delete e.data.jwt,0===Object.keys(e.data).length&&e.data.constructor===Object&&delete e.data,fetch("/api/notify.html5/callback",{method:"POST",headers:new Headers({"Content-Type":"application/json",Authorization:"Bearer "+t}),body:JSON.stringify(e)})}var precacheConfig=[["/","c255cdae4bfd691ee9fa43e38e8dc462"],["/frontend/panels/dev-event-2db9c218065ef0f61d8d08db8093cad2.html","b5b751e49b1bba55f633ae0d7a92677d"],["/frontend/panels/dev-info-61610e015a411cfc84edd2c4d489e71d.html","6568377ee31cbd78fedc003b317f7faf"],["/frontend/panels/dev-service-415552027cb083badeff5f16080410ed.html","a4b1ec9bfa5bc3529af7783ae56cb55c"],["/frontend/panels/dev-state-d70314913b8923d750932367b1099750.html","c61b5b1461959aac106400e122993e9e"],["/frontend/panels/dev-template-567fbf86735e1b891e40c2f4060fec9b.html","d2853ecf45de1dbadf49fe99a7424ef3"],["/frontend/panels/map-31c592c239636f91e07c7ac232a5ebc4.html","182580419ce2c935ae6ec65502b6db96"],["/static/compatibility-83d9c77748dafa9db49ae77d7f3d8fb0.js","5f05c83be2b028d577962f9625904806"],["/static/core-5d08475f03adb5969bd31855d5ca0cfd.js","1cd99ba798bfcff9768c9d2bb2f58a7c"],["/static/frontend-5999c8fac69c503b846672cae75a12b0.html","d6ce8eb348fbea599933b2a72beb1337"],["/static/mdi-f407a5a57addbe93817ee1b244d33fbe.html","5459090f217c77747b08d06e0bf73388"],["static/fonts/roboto/Roboto-Bold.ttf","d329cc8b34667f114a95422aaad1b063"],["static/fonts/roboto/Roboto-Light.ttf","7b5fb88f12bec8143f00e21bc3222124"],["static/fonts/roboto/Roboto-Medium.ttf","fe13e4170719c2fc586501e777bde143"],["static/fonts/roboto/Roboto-Regular.ttf","ac3f799d5bbaf5196fab15ab8de8431c"],["static/icons/favicon-192x192.png","419903b8422586a7e28021bbe9011175"],["static/icons/favicon.ico","04235bda7843ec2fceb1cbe2bc696cf4"],["static/images/card_media_player_bg.png","a34281d1c1835d338a642e90930e61aa"],["static/webcomponents-lite.min.js","32b5a9b7ada86304bec6b43d3f2194f0"]],cacheName="sw-precache-v3--"+(self.registration?self.registration.scope:""),ignoreUrlParametersMatching=[/^utm_/],addDirectoryIndex=function(e,t){var n=new URL(e);return"/"===n.pathname.slice(-1)&&(n.pathname+=t),n.toString()},cleanResponse=function(e){return e.redirected?("body"in e?Promise.resolve(e.body):e.blob()).then(function(t){return new Response(t,{headers:e.headers,status:e.status,statusText:e.statusText})}):Promise.resolve(e)},createCacheKey=function(e,t,n,a){var c=new URL(e);return a&&c.pathname.match(a)||(c.search+=(c.search?"&":"")+encodeURIComponent(t)+"="+encodeURIComponent(n)),c.toString()},isPathWhitelisted=function(e,t){if(0===e.length)return!0;var n=new URL(t).pathname;return e.some(function(e){return n.match(e)})},stripIgnoredUrlParameters=function(e,t){var n=new URL(e);return n.search=n.search.slice(1).split("&").map(function(e){return e.split("=")}).filter(function(e){return t.every(function(t){return!t.test(e[0])})}).map(function(e){return e.join("=")}).join("&"),n.toString()},hashParamName="_sw-precache",urlsToCacheKeys=new Map(precacheConfig.map(function(e){var t=e[0],n=e[1],a=new URL(t,self.location),c=createCacheKey(a,hashParamName,n,!1);return[a.toString(),c]}));self.addEventListener("install",function(e){e.waitUntil(caches.open(cacheName).then(function(e){return setOfCachedUrls(e).then(function(t){return Promise.all(Array.from(urlsToCacheKeys.values()).map(function(n){if(!t.has(n)){var a=new Request(n,{credentials:"same-origin"});return fetch(a).then(function(t){if(!t.ok)throw new Error("Request for "+n+" returned a response with status "+t.status);return cleanResponse(t).then(function(t){return e.put(n,t)})})}}))})}).then(function(){return self.skipWaiting()}))}),self.addEventListener("activate",function(e){var t=new Set(urlsToCacheKeys.values());e.waitUntil(caches.open(cacheName).then(function(e){return e.keys().then(function(n){return Promise.all(n.map(function(n){if(!t.has(n.url))return e.delete(n)}))})}).then(function(){return self.clients.claim()}))}),self.addEventListener("fetch",function(e){if("GET"===e.request.method){var t,n=stripIgnoredUrlParameters(e.request.url,ignoreUrlParametersMatching);t=urlsToCacheKeys.has(n);t||(n=addDirectoryIndex(n,"index.html"),t=urlsToCacheKeys.has(n));!t&&"navigate"===e.request.mode&&isPathWhitelisted(["^((?!(static|api|local|service_worker.js|manifest.json)).)*$"],e.request.url)&&(n=new URL("/",self.location).toString(),t=urlsToCacheKeys.has(n)),t&&e.respondWith(caches.open(cacheName).then(function(e){return e.match(urlsToCacheKeys.get(n)).then(function(e){if(e)return e;throw Error("The cached response that was expected is missing.")})}).catch(function(t){return console.warn('Couldn\'t serve response for "%s" from cache: %O',e.request.url,t),fetch(e.request)}))}}),self.addEventListener("push",function(e){var t;e.data&&(t=e.data.json(),e.waitUntil(self.registration.showNotification(t.title,t).then(function(e){firePushCallback({type:"received",tag:t.tag,data:t.data},t.data.jwt)})))}),self.addEventListener("notificationclick",function(e){var t;notificationEventCallback("clicked",e),e.notification.close(),e.notification.data&&e.notification.data.url&&(t=e.notification.data.url)&&e.waitUntil(clients.matchAll({type:"window"}).then(function(e){var n,a;for(n=0;nVT`w>*sND62ofqbOarlR2 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 bGZ4K)XMEKS_;v3EtnU8>_REydV-^4ap|