From dc68f61261b171b77e9c4f1a5f8625d42ab1ba88 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sun, 14 Aug 2016 01:10:07 -0700 Subject: [PATCH] Html5 push notifications notify platform (#2807) * Initial work to add Chrome Push Notification support * Remove push.js from home-assistant since it is now in Polymer * Chrome->HTML5, general cleanup/fixes * Make html5 generic, move manifest.json into frontend so that we can dynamically add the gcm_sender_id * Pylint, flake8, pydocstyle frontend init * HTML5 push fixes * Update polymer * Remove crypto req * Add notify default platform. * Fix HTML5 push * Registration fixes * Linting fix * pep257 fix * Add tests * pep257 fix * Update frontend --- homeassistant/components/frontend/__init__.py | 40 ++++ .../components/frontend/templates/index.html | 2 +- homeassistant/components/frontend/version.py | 4 +- .../components/frontend/www_static/core.js | 8 +- .../components/frontend/www_static/core.js.gz | Bin 31475 -> 31500 bytes .../frontend/www_static/frontend.html | 2 +- .../frontend/www_static/frontend.html.gz | Bin 122766 -> 123182 bytes .../www_static/home-assistant-polymer | 2 +- .../frontend/www_static/manifest.json | 30 --- .../frontend/www_static/service_worker.js | 2 +- .../frontend/www_static/service_worker.js.gz | Bin 1832 -> 2012 bytes homeassistant/components/notify/__init__.py | 13 +- homeassistant/components/notify/html5.py | 173 ++++++++++++++++++ requirements_all.txt | 3 + script/build_frontend | 2 +- tests/components/notify/test_html5.py | 145 +++++++++++++++ 16 files changed, 381 insertions(+), 45 deletions(-) delete mode 100644 homeassistant/components/frontend/www_static/manifest.json create mode 100644 homeassistant/components/notify/html5.py create mode 100644 tests/components/notify/test_html5.py diff --git a/homeassistant/components/frontend/__init__.py b/homeassistant/components/frontend/__init__.py index cec18b66511..ab967fb114f 100644 --- a/homeassistant/components/frontend/__init__.py +++ b/homeassistant/components/frontend/__init__.py @@ -14,6 +14,19 @@ URL_PANEL_COMPONENT = '/frontend/panels/{}.html' URL_PANEL_COMPONENT_FP = '/frontend/panels/{}-{}.html' STATIC_PATH = os.path.join(os.path.dirname(__file__), 'www_static') PANELS = {} +MANIFEST_JSON = { + "background_color": "#FFFFFF", + "description": "Open-source home automation platform running on Python 3.", + "dir": "ltr", + "display": "standalone", + "icons": [], + "lang": "en-US", + "name": "Home Assistant", + "orientation": "any", + "short_name": "Assistant", + "start_url": "/", + "theme_color": "#03A9F4" +} # To keep track we don't register a component twice (gives a warning) _REGISTERED_COMPONENTS = set() @@ -94,9 +107,15 @@ def register_panel(hass, component_name, path, md5=None, sidebar_title=None, PANELS[url_path] = data +def add_manifest_json_key(key, val): + """Add a keyval to the manifest.json.""" + MANIFEST_JSON[key] = val + + def setup(hass, config): """Setup serving the frontend.""" hass.wsgi.register_view(BootstrapView) + hass.wsgi.register_view(ManifestJSONView) if hass.wsgi.development: sw_path = "home-assistant-polymer/build/service_worker.js" @@ -126,6 +145,13 @@ def setup(hass, config): hass.bus.listen_once(EVENT_HOMEASSISTANT_START, register_frontend_index) + for size in (192, 384, 512, 1024): + MANIFEST_JSON['icons'].append({ + "src": "/static/icons/favicon-{}x{}.png".format(size, size), + "sizes": "{}x{}".format(size, size), + "type": "image/png" + }) + return True @@ -199,3 +225,17 @@ class IndexView(HomeAssistantView): panel_url=panel_url, panels=PANELS) return self.Response(resp, mimetype='text/html') + + +class ManifestJSONView(HomeAssistantView): + """View to return a manifest.json.""" + + requires_auth = False + url = "/manifest.json" + name = "manifestjson" + + def get(self, request): + """Return the manifest.json.""" + import json + msg = json.dumps(MANIFEST_JSON, sort_keys=True).encode('UTF-8') + return self.Response(msg, mimetype="application/manifest+json") diff --git a/homeassistant/components/frontend/templates/index.html b/homeassistant/components/frontend/templates/index.html index 859b2af53f0..afa9ca68af9 100644 --- a/homeassistant/components/frontend/templates/index.html +++ b/homeassistant/components/frontend/templates/index.html @@ -4,7 +4,7 @@ Home Assistant - + diff --git a/homeassistant/components/frontend/version.py b/homeassistant/components/frontend/version.py index f7c483b3d71..ec30e4804c7 100644 --- a/homeassistant/components/frontend/version.py +++ b/homeassistant/components/frontend/version.py @@ -1,8 +1,8 @@ """DO NOT MODIFY. Auto-generated by script/fingerprint_frontend.""" FINGERPRINTS = { - "core.js": "457d5acd123e7dc38947c07984b3a5e8", - "frontend.html": "829ee7cb591b8a63d7f22948a7aeb07a", + "core.js": "b4ee3a700ef5549a36b436611e27d3a9", + "frontend.html": "411fcc6c69b3cab0740ac3db4b9947c8", "mdi.html": "b399b5d3798f5b68b0a4fbaae3432d48", "panels/ha-panel-dev-event.html": "3cc881ae8026c0fba5aa67d334a3ab2b", "panels/ha-panel-dev-info.html": "34e2df1af32e60fffcafe7e008a92169", diff --git a/homeassistant/components/frontend/www_static/core.js b/homeassistant/components/frontend/www_static/core.js index beb5b8c03e0..4def07355e1 100644 --- a/homeassistant/components/frontend/www_static/core.js +++ b/homeassistant/components/frontend/www_static/core.js @@ -1,4 +1,4 @@ -!function(){"use strict";function t(t){return t&&"object"==typeof t&&"default"in t?t.default:t}function e(t,e){return e={exports:{}},t(e,e.exports),e.exports}function n(t,e){var n=e.authToken,r=e.host;return De({authToken:n,host:r,isValidating:!0,isInvalid:!1,errorMessage:""})}function r(){return Ce.getInitialState()}function i(t,e){var n=e.errorMessage;return t.withMutations(function(t){return t.set("isValidating",!1).set("isInvalid",!0).set("errorMessage",n)})}function o(t,e){var n=e.authToken,r=e.host;return Re({authToken:n,host:r})}function u(){return Le.getInitialState()}function a(t,e){var n=e.rememberAuth;return n}function s(t){return t.withMutations(function(t){t.set("isStreaming",!0).set("useStreaming",!0).set("hasError",!1)})}function c(t){return t.withMutations(function(t){t.set("isStreaming",!1).set("useStreaming",!1).set("hasError",!1)})}function f(t){return t.withMutations(function(t){t.set("isStreaming",!1).set("hasError",!0)})}function h(){return Pe.getInitialState()}function l(t,e){var n=e.model,r=e.result,i=e.params,o=n.entity;if(!r)return t;var u=i.replace?Be({}):t.get(o),a=Array.isArray(r)?r:[r],s=n.fromJSON||Be;return t.set(o,u.withMutations(function(t){for(var e=0;e199&&u.status<300?t(e):n(e)},u.onerror=function(){return n({})},r?u.send(JSON.stringify(r)):u.send()})}function A(t,e){var n=e.message;return t.set(t.size,n)}function D(){return In.getInitialState()}function C(t,e){t.dispatch(gn.NOTIFICATION_CREATED,{message:e})}function z(t){t.registerStores({notifications:In})}function R(t,e){if("lock"===t)return!0;if("garage_door"===t)return!0;var n=e.get(t);return!!n&&n.services.has("turn_on")}function L(t,e){return!!t&&("group"===t.domain?"on"===t.state||"off"===t.state:R(t.domain,e))}function M(t,e){return[Wn(t),function(t){return!!t&&t.services.has(e)}]}function j(t){return[yn.byId(t),Jn,L]}function N(t,e,n){function r(){var c=(new Date).getTime()-a;c0?i=setTimeout(r,e-c):(i=null,n||(s=t.apply(u,o),i||(u=o=null)))}var i,o,u,a,s;null==e&&(e=100);var c=function(){u=this,o=arguments,a=(new Date).getTime();var c=n&&!i;return i||(i=setTimeout(r,e)),c&&(s=t.apply(u,o),u=o=null),s};return c.clear=function(){i&&(clearTimeout(i),i=null)},c}function k(t,e){var n=e.component;return t.push(n)}function U(t,e){var n=e.components;return ar(n)}function H(){return sr.getInitialState()}function P(t,e){var n=e.latitude,r=e.longitude,i=e.location_name,o=e.temperature_unit,u=e.time_zone,a=e.version;return fr({latitude:n,longitude:r,location_name:i,temperature_unit:o,time_zone:u,serverVersion:a})}function x(){return hr.getInitialState()}function V(t,e){t.dispatch(or.SERVER_CONFIG_LOADED,e)}function q(t){rn(t,"GET","config").then(function(e){return V(t,e)})}function F(t,e){t.dispatch(or.COMPONENT_LOADED,{component:e})}function G(t){return[["serverComponent"],function(e){return e.contains(t)}]}function K(t){t.registerStores({serverComponent:sr,serverConfig:hr})}function Y(t,e){var n=e.pane;return n}function B(){return Ir.getInitialState()}function J(t,e){var n=e.panels;return Or(n)}function W(){return wr.getInitialState()}function X(t,e){var n=e.show;return!!n}function Q(){return Ar.getInitialState()}function Z(t,e){t.dispatch(mr.SHOW_SIDEBAR,{show:e})}function $(t,e){t.dispatch(mr.NAVIGATE,{pane:e})}function tt(t,e){t.dispatch(mr.PANELS_LOADED,{panels:e})}function et(t,e){var n=e.entityId;return n}function nt(){return kr.getInitialState()}function rt(t,e){t.dispatch(jr.SELECT_ENTITY,{entityId:e})}function it(t){t.dispatch(jr.SELECT_ENTITY,{entityId:null})}function ot(t){return!t||(new Date).getTime()-t>6e4}function ut(t,e){var n=e.date;return n.toISOString()}function at(){return xr.getInitialState()}function st(t,e){var n=e.date,r=e.stateHistory;return 0===r.length?t.set(n,qr({})):t.withMutations(function(t){r.forEach(function(e){return t.setIn([n,e[0].entity_id],qr(e.map(cn.fromJSON)))})})}function ct(){return Fr.getInitialState()}function ft(t,e){var n=e.stateHistory;return t.withMutations(function(t){n.forEach(function(e){return t.set(e[0].entity_id,Br(e.map(cn.fromJSON)))})})}function ht(){return Jr.getInitialState()}function lt(t,e){var n=e.stateHistory,r=(new Date).getTime();return t.withMutations(function(t){n.forEach(function(e){return t.set(e[0].entity_id,r)}),history.length>1&&t.set(Qr,r)})}function pt(){return Zr.getInitialState()}function _t(t,e){t.dispatch(Hr.ENTITY_HISTORY_DATE_SELECTED,{date:e})}function dt(t,e){void 0===e&&(e=null),t.dispatch(Hr.RECENT_ENTITY_HISTORY_FETCH_START,{});var n="history/period";return null!==e&&(n+="?filter_entity_id="+e),rn(t,"GET",n).then(function(e){return t.dispatch(Hr.RECENT_ENTITY_HISTORY_FETCH_SUCCESS,{stateHistory:e})},function(){return t.dispatch(Hr.RECENT_ENTITY_HISTORY_FETCH_ERROR,{})})}function vt(t,e){return t.dispatch(Hr.ENTITY_HISTORY_FETCH_START,{date:e}),rn(t,"GET","history/period/"+e).then(function(n){return t.dispatch(Hr.ENTITY_HISTORY_FETCH_SUCCESS,{date:e,stateHistory:n})},function(){return t.dispatch(Hr.ENTITY_HISTORY_FETCH_ERROR,{})})}function yt(t){var e=t.evaluate(ei);return vt(t,e)}function St(t){t.registerStores({currentEntityHistoryDate:xr,entityHistory:Fr,isLoadingEntityHistory:Kr,recentEntityHistory:Jr,recentEntityHistoryUpdated:Zr})}function gt(t){t.registerStores({moreInfoEntityId:kr})}function mt(t,e){var n=e.model,r=e.result,i=e.params;if(null===t||"entity"!==n.entity||!i.replace)return t;for(var o=0;oQo}function ae(t){t.registerStores({currentLogbookDate:Uo,isLoadingLogbookEntries:Po,logbookEntries:Ko,logbookEntriesUpdated:Jo})}function se(t,e){return rn(t,"POST","template",{template:e})}function ce(t){return t.set("isListening",!0)}function fe(t,e){var n=e.interimTranscript,r=e.finalTranscript;return t.withMutations(function(t){return t.set("isListening",!0).set("isTransmitting",!1).set("interimTranscript",n).set("finalTranscript",r)})}function he(t,e){var n=e.finalTranscript;return t.withMutations(function(t){return t.set("isListening",!1).set("isTransmitting",!0).set("interimTranscript","").set("finalTranscript",n)})}function le(){return _u.getInitialState()}function pe(){return _u.getInitialState()}function _e(){return _u.getInitialState()}function de(t){return du[t.hassId]}function ve(t){var e=de(t);if(e){var n=e.finalTranscript||e.interimTranscript;t.dispatch(hu.VOICE_TRANSMITTING,{finalTranscript:n}),Zn.callService(t,"conversation","process",{text:n}).then(function(){t.dispatch(hu.VOICE_DONE)},function(){t.dispatch(hu.VOICE_ERROR)})}}function ye(t){var e=de(t);e&&(e.recognition.stop(),du[t.hassId]=!1)}function Se(t){ve(t),ye(t)}function ge(t){var e=Se.bind(null,t);e();var n=new webkitSpeechRecognition;du[t.hassId]={recognition:n,interimTranscript:"",finalTranscript:""},n.interimResults=!0,n.onstart=function(){return t.dispatch(hu.VOICE_START)},n.onerror=function(){return t.dispatch(hu.VOICE_ERROR)},n.onend=e,n.onresult=function(e){var n=de(t);if(n){for(var r="",i="",o=e.resultIndex;o=n)}function c(t,e){return h(t,e,0)}function f(t,e){return h(t,e,e)}function h(t,e,n){return void 0===t?n:t<0?Math.max(0,e+t):void 0===e?t:Math.min(e,t)}function l(t){return v(t)?t:C(t)}function p(t){return y(t)?t:z(t)}function _(t){return S(t)?t:R(t)}function d(t){return v(t)&&!g(t)?t:L(t)}function v(t){return!(!t||!t[dn])}function y(t){return!(!t||!t[vn])}function S(t){return!(!t||!t[yn])}function g(t){return y(t)||S(t)}function m(t){return!(!t||!t[Sn])}function E(t){this.next=t}function I(t,e,n,r){var i=0===t?e:1===t?n:[e,n];return r?r.value=i:r={value:i,done:!1},r}function b(){return{value:void 0,done:!0}}function O(t){return!!A(t)}function w(t){return t&&"function"==typeof t.next}function T(t){var e=A(t);return e&&e.call(t)}function A(t){var e=t&&(In&&t[In]||t[bn]);if("function"==typeof e)return e}function D(t){return t&&"number"==typeof t.length}function C(t){return null===t||void 0===t?H():v(t)?t.toSeq():V(t)}function z(t){return null===t||void 0===t?H().toKeyedSeq():v(t)?y(t)?t.toSeq():t.fromEntrySeq():P(t)}function R(t){return null===t||void 0===t?H():v(t)?y(t)?t.entrySeq():t.toIndexedSeq():x(t)}function L(t){return(null===t||void 0===t?H():v(t)?y(t)?t.entrySeq():t:x(t)).toSetSeq()}function M(t){this._array=t,this.size=t.length}function j(t){var e=Object.keys(t);this._object=t,this._keys=e,this.size=e.length}function N(t){this._iterable=t,this.size=t.length||t.size}function k(t){this._iterator=t,this._iteratorCache=[]}function U(t){return!(!t||!t[wn])}function H(){return Tn||(Tn=new M([]))}function P(t){var e=Array.isArray(t)?new M(t).fromEntrySeq():w(t)?new k(t).fromEntrySeq():O(t)?new N(t).fromEntrySeq():"object"==typeof t?new j(t):void 0;if(!e)throw new TypeError("Expected Array or iterable object of [k, v] entries, or keyed object: "+t);return e}function x(t){var e=q(t);if(!e)throw new TypeError("Expected Array or iterable object of values: "+t);return e}function V(t){var e=q(t)||"object"==typeof t&&new j(t);if(!e)throw new TypeError("Expected Array or iterable object of values, or keyed object: "+t);return e}function q(t){return D(t)?new M(t):w(t)?new k(t):O(t)?new N(t):void 0}function F(t,e,n,r){var i=t._cache;if(i){for(var o=i.length-1,u=0;u<=o;u++){var a=i[n?o-u:u];if(e(a[1],r?a[0]:u,t)===!1)return u+1}return u}return t.__iterateUncached(e,n)}function G(t,e,n,r){var i=t._cache;if(i){var o=i.length-1,u=0;return new E(function(){var t=i[n?o-u:u];return u++>o?b():I(e,r?t[0]:u-1,t[1])})}return t.__iteratorUncached(e,n)}function K(){throw TypeError("Abstract")}function Y(){}function B(){}function J(){}function W(t,e){if(t===e||t!==t&&e!==e)return!0;if(!t||!e)return!1;if("function"==typeof t.valueOf&&"function"==typeof e.valueOf){if(t=t.valueOf(),e=e.valueOf(),t===e||t!==t&&e!==e)return!0;if(!t||!e)return!1}return!("function"!=typeof t.equals||"function"!=typeof e.equals||!t.equals(e))}function X(t,e){return e?Q(e,t,"",{"":t}):Z(t)}function Q(t,e,n,r){return Array.isArray(e)?t.call(r,n,R(e).map(function(n,r){return Q(t,n,r,e)})):$(e)?t.call(r,n,z(e).map(function(n,r){return Q(t,n,r,e)})):e}function Z(t){return Array.isArray(t)?R(t).map(Z).toList():$(t)?z(t).map(Z).toMap():t}function $(t){return t&&(t.constructor===Object||void 0===t.constructor)}function tt(t){return t>>>1&1073741824|3221225471&t}function et(t){if(t===!1||null===t||void 0===t)return 0;if("function"==typeof t.valueOf&&(t=t.valueOf(),t===!1||null===t||void 0===t))return 0;if(t===!0)return 1;var e=typeof t;if("number"===e){var n=0|t;for(n!==t&&(n^=4294967295*t);t>4294967295;)t/=4294967295,n^=t;return tt(n)}return"string"===e?t.length>jn?nt(t):rt(t):"function"==typeof t.hashCode?t.hashCode():it(t)}function nt(t){var e=Un[t];return void 0===e&&(e=rt(t),kn===Nn&&(kn=0,Un={}),kn++,Un[t]=e),e}function rt(t){for(var e=0,n=0;n0)switch(t.nodeType){case 1:return t.uniqueID;case 9:return t.documentElement&&t.documentElement.uniqueID}}function ut(t,e){if(!t)throw new Error(e)}function at(t){ut(t!==1/0,"Cannot perform this action with an infinite size.")}function st(t,e){this._iter=t,this._useKeys=e,this.size=t.size}function ct(t){this._iter=t,this.size=t.size}function ft(t){this._iter=t,this.size=t.size}function ht(t){this._iter=t,this.size=t.size}function lt(t){var e=Mt(t);return e._iter=t,e.size=t.size,e.flip=function(){return t},e.reverse=function(){var e=t.reverse.apply(this);return e.flip=function(){return t.reverse()},e},e.has=function(e){return t.includes(e)},e.includes=function(e){return t.has(e)},e.cacheResult=jt,e.__iterateUncached=function(e,n){var r=this;return t.__iterate(function(t,n){return e(n,t,r)!==!1},n)},e.__iteratorUncached=function(e,n){if(e===En){var r=t.__iterator(e,n);return new E(function(){var t=r.next();if(!t.done){var e=t.value[0];t.value[0]=t.value[1],t.value[1]=e}return t})}return t.__iterator(e===mn?gn:mn,n)},e}function pt(t,e,n){var r=Mt(t);return r.size=t.size,r.has=function(e){return t.has(e)},r.get=function(r,i){var o=t.get(r,ln);return o===ln?i:e.call(n,o,r,t)},r.__iterateUncached=function(r,i){var o=this;return t.__iterate(function(t,i,u){return r(e.call(n,t,i,u),i,o)!==!1},i)},r.__iteratorUncached=function(r,i){var o=t.__iterator(En,i);return new E(function(){var i=o.next();if(i.done)return i;var u=i.value,a=u[0];return I(r,a,e.call(n,u[1],a,t),i)})},r}function _t(t,e){var n=Mt(t);return n._iter=t,n.size=t.size,n.reverse=function(){return t},t.flip&&(n.flip=function(){var e=lt(t);return e.reverse=function(){return t.flip()},e}),n.get=function(n,r){return t.get(e?n:-1-n,r)},n.has=function(n){return t.has(e?n:-1-n)},n.includes=function(e){return t.includes(e)},n.cacheResult=jt,n.__iterate=function(e,n){var r=this;return t.__iterate(function(t,n){return e(t,n,r)},!n)},n.__iterator=function(e,n){return t.__iterator(e,!n)},n}function dt(t,e,n,r){var i=Mt(t);return r&&(i.has=function(r){var i=t.get(r,ln);return i!==ln&&!!e.call(n,i,r,t)},i.get=function(r,i){var o=t.get(r,ln);return o!==ln&&e.call(n,o,r,t)?o:i}),i.__iterateUncached=function(i,o){var u=this,a=0;return t.__iterate(function(t,o,s){if(e.call(n,t,o,s))return a++,i(t,r?o:a-1,u)},o),a},i.__iteratorUncached=function(i,o){var u=t.__iterator(En,o),a=0;return new E(function(){for(;;){var o=u.next();if(o.done)return o;var s=o.value,c=s[0],f=s[1];if(e.call(n,f,c,t))return I(i,r?c:a++,f,o)}})},i}function vt(t,e,n){var r=Ut().asMutable();return t.__iterate(function(i,o){r.update(e.call(n,i,o,t),0,function(t){return t+1})}),r.asImmutable()}function yt(t,e,n){var r=y(t),i=(m(t)?be():Ut()).asMutable();t.__iterate(function(o,u){i.update(e.call(n,o,u,t),function(t){return t=t||[],t.push(r?[u,o]:o),t})});var o=Lt(t);return i.map(function(e){return Ct(t,o(e))})}function St(t,e,n,r){var i=t.size;if(void 0!==e&&(e=0|e),void 0!==n&&(n=0|n),s(e,n,i))return t;var o=c(e,i),a=f(n,i);if(o!==o||a!==a)return St(t.toSeq().cacheResult(),e,n,r);var h,l=a-o;l===l&&(h=l<0?0:l);var p=Mt(t);return p.size=0===h?h:t.size&&h||void 0,!r&&U(t)&&h>=0&&(p.get=function(e,n){return e=u(this,e),e>=0&&eh)return b();var t=i.next();return r||e===mn?t:e===gn?I(e,a-1,void 0,t):I(e,a-1,t.value[1],t)})},p}function gt(t,e,n){var r=Mt(t);return r.__iterateUncached=function(r,i){var o=this;if(i)return this.cacheResult().__iterate(r,i);var u=0;return t.__iterate(function(t,i,a){return e.call(n,t,i,a)&&++u&&r(t,i,o)}),u},r.__iteratorUncached=function(r,i){var o=this;if(i)return this.cacheResult().__iterator(r,i);var u=t.__iterator(En,i),a=!0;return new E(function(){if(!a)return b();var t=u.next();if(t.done)return t;var i=t.value,s=i[0],c=i[1];return e.call(n,c,s,o)?r===En?t:I(r,s,c,t):(a=!1,b())})},r}function mt(t,e,n,r){var i=Mt(t);return i.__iterateUncached=function(i,o){var u=this;if(o)return this.cacheResult().__iterate(i,o);var a=!0,s=0;return t.__iterate(function(t,o,c){if(!a||!(a=e.call(n,t,o,c)))return s++,i(t,r?o:s-1,u)}),s},i.__iteratorUncached=function(i,o){var u=this;if(o)return this.cacheResult().__iterator(i,o);var a=t.__iterator(En,o),s=!0,c=0;return new E(function(){var t,o,f;do{if(t=a.next(),t.done)return r||i===mn?t:i===gn?I(i,c++,void 0,t):I(i,c++,t.value[1],t);var h=t.value;o=h[0],f=h[1],s&&(s=e.call(n,f,o,u))}while(s);return i===En?t:I(i,o,f,t)})},i}function Et(t,e){var n=y(t),r=[t].concat(e).map(function(t){return v(t)?n&&(t=p(t)):t=n?P(t):x(Array.isArray(t)?t:[t]),t}).filter(function(t){return 0!==t.size});if(0===r.length)return t;if(1===r.length){var i=r[0];if(i===t||n&&y(i)||S(t)&&S(i))return i}var o=new M(r);return n?o=o.toKeyedSeq():S(t)||(o=o.toSetSeq()),o=o.flatten(!0),o.size=r.reduce(function(t,e){if(void 0!==t){var n=e.size;if(void 0!==n)return t+n}},0),o}function It(t,e,n){var r=Mt(t);return r.__iterateUncached=function(r,i){function o(t,s){var c=this;t.__iterate(function(t,i){return(!e||s0}function Dt(t,e,n){var r=Mt(t);return r.size=new M(n).map(function(t){return t.size}).min(),r.__iterate=function(t,e){for(var n,r=this,i=this.__iterator(mn,e),o=0;!(n=i.next()).done&&t(n.value,o++,r)!==!1;);return o},r.__iteratorUncached=function(t,r){var i=n.map(function(t){return t=l(t),T(r?t.reverse():t)}),o=0,u=!1;return new E(function(){var n;return u||(n=i.map(function(t){return t.next()}),u=n.some(function(t){return t.done})),u?b():I(t,o++,e.apply(null,n.map(function(t){return t.value})))})},r}function Ct(t,e){return U(t)?e:t.constructor(e)}function zt(t){if(t!==Object(t))throw new TypeError("Expected [K, V] tuple: "+t)}function Rt(t){return at(t.size),o(t)}function Lt(t){return y(t)?p:S(t)?_:d}function Mt(t){return Object.create((y(t)?z:S(t)?R:L).prototype)}function jt(){return this._iter.cacheResult?(this._iter.cacheResult(),this.size=this._iter.size,this):C.prototype.cacheResult.call(this)}function Nt(t,e){return t>e?1:t>>n)&hn,a=(0===n?r:r>>>n)&hn,s=u===a?[Zt(t,e,n+cn,r,i)]:(o=new Ft(e,r,i),u>>=1)u[a]=1&n?e[o++]:void 0;return u[r]=i,new Vt(t,o+1,u)}function ne(t,e,n){for(var r=[],i=0;i>1&1431655765,t=(858993459&t)+(t>>2&858993459),t=t+(t>>4)&252645135,t+=t>>8,t+=t>>16,127&t}function ae(t,e,n,r){var o=r?t:i(t);return o[e]=n,o}function se(t,e,n,r){var i=t.length+1;if(r&&e+1===i)return t[e]=n,t;for(var o=new Array(i),u=0,a=0;a0&&ro?0:o-n,c=u-n;return c>fn&&(c=fn),function(){if(i===c)return Bn;var t=e?--c:i++;return r&&r[t]}}function i(t,r,i){var a,s=t&&t.array,c=i>o?0:o-i>>r,f=(u-i>>r)+1;return f>fn&&(f=fn),function(){for(;;){if(a){var t=a();if(t!==Bn)return t;a=null}if(c===f)return Bn;var o=e?--f:c++;a=n(s&&s[o],r-cn,i+(o<=t.size||n<0)return t.withMutations(function(t){n<0?me(t,n).set(0,r):me(t,0,n+1).set(n,r)});n+=t._origin;var i=t._tail,o=t._root,a=e(_n);return n>=Ie(t._capacity)?i=ye(i,t.__ownerID,0,n,r,a):o=ye(o,t.__ownerID,t._level,n,r,a),a.value?t.__ownerID?(t._root=o,t._tail=i,t.__hash=void 0,t.__altered=!0,t):_e(t._origin,t._capacity,t._level,o,i):t}function ye(t,e,r,i,o,u){var a=i>>>r&hn,s=t&&a0){var f=t&&t.array[a],h=ye(f,e,r-cn,i,o,u);return h===f?t:(c=Se(t,e),c.array[a]=h,c)}return s&&t.array[a]===o?t:(n(u),c=Se(t,e),void 0===o&&a===c.array.length-1?c.array.pop():c.array[a]=o,c)}function Se(t,e){return e&&t&&e===t.ownerID?t:new le(t?t.array.slice():[],e)}function ge(t,e){if(e>=Ie(t._capacity))return t._tail;if(e<1<0;)n=n.array[e>>>r&hn],r-=cn;return n}}function me(t,e,n){void 0!==e&&(e=0|e),void 0!==n&&(n=0|n);var i=t.__ownerID||new r,o=t._origin,u=t._capacity,a=o+e,s=void 0===n?u:n<0?u+n:o+n;if(a===o&&s===u)return t;if(a>=s)return t.clear();for(var c=t._level,f=t._root,h=0;a+h<0;)f=new le(f&&f.array.length?[void 0,f]:[],i),c+=cn,h+=1<=1<l?new le([],i):_;if(_&&p>l&&acn;y-=cn){var S=l>>>y&hn;v=v.array[S]=Se(v.array[S],i)}v.array[l>>>cn&hn]=_}if(s=p)a-=p,s-=p,c=cn,f=null,d=d&&d.removeBefore(i,0,a);else if(a>o||p>>c&hn;if(g!==p>>>c&hn)break;g&&(h+=(1<o&&(f=f.removeBefore(i,c,a-h)),f&&pi&&(i=a.size),v(u)||(a=a.map(function(t){return X(t)})),r.push(a)}return i>t.size&&(t=t.setSize(i)),ie(t,e,r)}function Ie(t){return t>>cn<=fn&&u.size>=2*o.size?(i=u.filter(function(t,e){return void 0!==t&&a!==e}),r=i.toKeyedSeq().map(function(t){return t[0]}).flip().toMap(),t.__ownerID&&(r.__ownerID=i.__ownerID=t.__ownerID)):(r=o.remove(e),i=a===u.size-1?u.pop():u.set(a,void 0))}else if(s){if(n===u.get(a)[1])return t;r=o,i=u.set(a,[e,n])}else r=o.set(e,u.size),i=u.set(u.size,[e,n]);return t.__ownerID?(t.size=r.size,t._map=r,t._list=i,t.__hash=void 0,t):we(r,i)}function De(t){return null===t||void 0===t?Re():Ce(t)?t:Re().unshiftAll(t)}function Ce(t){return!(!t||!t[Wn])}function ze(t,e,n,r){var i=Object.create(Xn);return i.size=t,i._head=e,i.__ownerID=n,i.__hash=r,i.__altered=!1,i}function Re(){return Qn||(Qn=ze(0))}function Le(t){return null===t||void 0===t?ke():Me(t)&&!m(t)?t:ke().withMutations(function(e){var n=d(t);at(n.size),n.forEach(function(t){return e.add(t)})})}function Me(t){return!(!t||!t[Zn])}function je(t,e){return t.__ownerID?(t.size=e.size,t._map=e,t):e===t._map?t:0===e.size?t.__empty():t.__make(e)}function Ne(t,e){var n=Object.create($n);return n.size=t?t.size:0,n._map=t,n.__ownerID=e,n}function ke(){return tr||(tr=Ne(Jt()))}function Ue(t){return null===t||void 0===t?xe():He(t)?t:xe().withMutations(function(e){var n=d(t);at(n.size),n.forEach(function(t){return e.add(t)})})}function He(t){return Me(t)&&m(t)}function Pe(t,e){var n=Object.create(er);return n.size=t?t.size:0,n._map=t,n.__ownerID=e,n}function xe(){return nr||(nr=Pe(Te()))}function Ve(t,e){var n,r=function(o){if(o instanceof r)return o;if(!(this instanceof r))return new r(o);if(!n){n=!0;var u=Object.keys(t);Ge(i,u),i.size=u.length,i._name=e,i._keys=u,i._defaultValues=t}this._map=Ut(o)},i=r.prototype=Object.create(rr);return i.constructor=r,r}function qe(t,e,n){var r=Object.create(Object.getPrototypeOf(t));return r._map=e,r.__ownerID=n,r}function Fe(t){return t._name||t.constructor.name||"Record"}function Ge(t,e){try{e.forEach(Ke.bind(void 0,t))}catch(t){}}function Ke(t,e){Object.defineProperty(t,e,{get:function(){return this.get(e)},set:function(t){ut(this.__ownerID,"Cannot set on an immutable record."),this.set(e,t)}})}function Ye(t,e){if(t===e)return!0;if(!v(e)||void 0!==t.size&&void 0!==e.size&&t.size!==e.size||void 0!==t.__hash&&void 0!==e.__hash&&t.__hash!==e.__hash||y(t)!==y(e)||S(t)!==S(e)||m(t)!==m(e))return!1;if(0===t.size&&0===e.size)return!0;var n=!g(t);if(m(t)){var r=t.entries();return e.every(function(t,e){var i=r.next().value;return i&&W(i[1],t)&&(n||W(i[0],e))})&&r.next().done}var i=!1;if(void 0===t.size)if(void 0===e.size)"function"==typeof t.cacheResult&&t.cacheResult();else{i=!0;var o=t;t=e,e=o}var u=!0,a=e.__iterate(function(e,r){if(n?!t.has(e):i?!W(e,t.get(r,ln)):!W(t.get(r,ln),e))return u=!1,!1});return u&&t.size===a}function Be(t,e,n){if(!(this instanceof Be))return new Be(t,e,n);if(ut(0!==n,"Cannot step a Range by 0"),t=t||0,void 0===e&&(e=1/0),n=void 0===n?1:Math.abs(n),ee?-1:0}function rn(t){if(t.size===1/0)return 0;var e=m(t),n=y(t),r=e?1:0,i=t.__iterate(n?e?function(t,e){r=31*r+un(et(t),et(e))|0}:function(t,e){r=r+un(et(t),et(e))|0}:e?function(t){r=31*r+et(t)|0}:function(t){r=r+et(t)|0});return on(i,r)}function on(t,e){return e=Dn(e,3432918353),e=Dn(e<<15|e>>>-15,461845907),e=Dn(e<<13|e>>>-13,5),e=(e+3864292196|0)^t,e=Dn(e^e>>>16,2246822507),e=Dn(e^e>>>13,3266489909),e=tt(e^e>>>16)}function un(t,e){return t^e+2654435769+(t<<6)+(t>>2)|0}var an=Array.prototype.slice,sn="delete",cn=5,fn=1<r?b():I(t,i,n[e?r-i++:i++])})},t(j,z),j.prototype.get=function(t,e){return void 0===e||this.has(t)?this._object[t]:e},j.prototype.has=function(t){return this._object.hasOwnProperty(t)},j.prototype.__iterate=function(t,e){for(var n=this,r=this._object,i=this._keys,o=i.length-1,u=0;u<=o;u++){var a=i[e?o-u:u];if(t(r[a],a,n)===!1)return u+1}return u},j.prototype.__iterator=function(t,e){var n=this._object,r=this._keys,i=r.length-1,o=0;return new E(function(){var u=r[e?i-o:o];return o++>i?b():I(t,u,n[u])})},j.prototype[Sn]=!0,t(N,R),N.prototype.__iterateUncached=function(t,e){var n=this;if(e)return this.cacheResult().__iterate(t,e);var r=this._iterable,i=T(r),o=0;if(w(i))for(var u;!(u=i.next()).done&&t(u.value,o++,n)!==!1;);return o},N.prototype.__iteratorUncached=function(t,e){if(e)return this.cacheResult().__iterator(t,e);var n=this._iterable,r=T(n);if(!w(r))return new E(b);var i=0;return new E(function(){var e=r.next();return e.done?e:I(t,i++,e.value)})},t(k,R),k.prototype.__iterateUncached=function(t,e){var n=this;if(e)return this.cacheResult().__iterate(t,e);for(var r=this._iterator,i=this._iteratorCache,o=0;o=r.length){var e=n.next();if(e.done)return e;r[i]=e.value}return I(t,i,r[i++])})};var Tn;t(K,l),t(Y,K),t(B,K),t(J,K),K.Keyed=Y,K.Indexed=B,K.Set=J;var An,Dn="function"==typeof Math.imul&&Math.imul(4294967295,2)===-2?Math.imul:function(t,e){t=0|t,e=0|e;var n=65535&t,r=65535&e;return n*r+((t>>>16)*r+n*(e>>>16)<<16>>>0)|0},Cn=Object.isExtensible,zn=function(){try{return Object.defineProperty({},"@",{}),!0}catch(t){return!1}}(),Rn="function"==typeof WeakMap;Rn&&(An=new WeakMap);var Ln=0,Mn="__immutablehash__";"function"==typeof Symbol&&(Mn=Symbol(Mn));var jn=16,Nn=255,kn=0,Un={};t(st,z),st.prototype.get=function(t,e){return this._iter.get(t,e)},st.prototype.has=function(t){return this._iter.has(t)},st.prototype.valueSeq=function(){return this._iter.valueSeq()},st.prototype.reverse=function(){var t=this,e=_t(this,!0);return this._useKeys||(e.valueSeq=function(){return t._iter.toSeq().reverse()}),e},st.prototype.map=function(t,e){var n=this,r=pt(this,t,e);return this._useKeys||(r.valueSeq=function(){return n._iter.toSeq().map(t,e)}),r},st.prototype.__iterate=function(t,e){var n,r=this;return this._iter.__iterate(this._useKeys?function(e,n){return t(e,n,r)}:(n=e?Rt(this):0,function(i){return t(i,e?--n:n++,r)}),e)},st.prototype.__iterator=function(t,e){if(this._useKeys)return this._iter.__iterator(t,e);var n=this._iter.__iterator(mn,e),r=e?Rt(this):0;return new E(function(){var i=n.next();return i.done?i:I(t,e?--r:r++,i.value,i)})},st.prototype[Sn]=!0,t(ct,R),ct.prototype.includes=function(t){return this._iter.includes(t)},ct.prototype.__iterate=function(t,e){var n=this,r=0;return this._iter.__iterate(function(e){return t(e,r++,n)},e)},ct.prototype.__iterator=function(t,e){var n=this._iter.__iterator(mn,e),r=0;return new E(function(){var e=n.next();return e.done?e:I(t,r++,e.value,e)})},t(ft,L),ft.prototype.has=function(t){return this._iter.includes(t)},ft.prototype.__iterate=function(t,e){var n=this;return this._iter.__iterate(function(e){return t(e,e,n)},e)},ft.prototype.__iterator=function(t,e){var n=this._iter.__iterator(mn,e);return new E(function(){var e=n.next();return e.done?e:I(t,e.value,e.value,e)})},t(ht,z),ht.prototype.entrySeq=function(){return this._iter.toSeq()},ht.prototype.__iterate=function(t,e){var n=this;return this._iter.__iterate(function(e){if(e){zt(e);var r=v(e);return t(r?e.get(1):e[1],r?e.get(0):e[0],n)}},e)},ht.prototype.__iterator=function(t,e){var n=this._iter.__iterator(mn,e);return new E(function(){for(;;){var e=n.next();if(e.done)return e;var r=e.value;if(r){zt(r);var i=v(r);return I(t,i?r.get(0):r[0],i?r.get(1):r[1],e)}}})},ct.prototype.cacheResult=st.prototype.cacheResult=ft.prototype.cacheResult=ht.prototype.cacheResult=jt,t(Ut,Y),Ut.prototype.toString=function(){return this.__toString("Map {","}")},Ut.prototype.get=function(t,e){return this._root?this._root.get(0,void 0,t,e):e},Ut.prototype.set=function(t,e){return Wt(this,t,e)},Ut.prototype.setIn=function(t,e){return this.updateIn(t,ln,function(){return e})},Ut.prototype.remove=function(t){return Wt(this,t,ln)},Ut.prototype.deleteIn=function(t){return this.updateIn(t,function(){return ln})},Ut.prototype.update=function(t,e,n){return 1===arguments.length?t(this):this.updateIn([t],e,n)},Ut.prototype.updateIn=function(t,e,n){n||(n=e,e=void 0);var r=oe(this,kt(t),e,n);return r===ln?void 0:r},Ut.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=0,this._root=null,this.__hash=void 0,this.__altered=!0,this):Jt()},Ut.prototype.merge=function(){return ne(this,void 0,arguments)},Ut.prototype.mergeWith=function(t){var e=an.call(arguments,1);return ne(this,t,e)},Ut.prototype.mergeIn=function(t){var e=an.call(arguments,1);return this.updateIn(t,Jt(),function(t){return"function"==typeof t.merge?t.merge.apply(t,e):e[e.length-1]})},Ut.prototype.mergeDeep=function(){return ne(this,re(void 0),arguments)},Ut.prototype.mergeDeepWith=function(t){var e=an.call(arguments,1);return ne(this,re(t),e)},Ut.prototype.mergeDeepIn=function(t){var e=an.call(arguments,1);return this.updateIn(t,Jt(),function(t){return"function"==typeof t.mergeDeep?t.mergeDeep.apply(t,e):e[e.length-1]})},Ut.prototype.sort=function(t){return be(wt(this,t))},Ut.prototype.sortBy=function(t,e){return be(wt(this,e,t))},Ut.prototype.withMutations=function(t){var e=this.asMutable();return t(e),e.wasAltered()?e.__ensureOwner(this.__ownerID):this},Ut.prototype.asMutable=function(){return this.__ownerID?this:this.__ensureOwner(new r)},Ut.prototype.asImmutable=function(){return this.__ensureOwner()},Ut.prototype.wasAltered=function(){return this.__altered},Ut.prototype.__iterator=function(t,e){return new Gt(this,t,e)},Ut.prototype.__iterate=function(t,e){var n=this,r=0;return this._root&&this._root.iterate(function(e){return r++,t(e[1],e[0],n)},e),r},Ut.prototype.__ensureOwner=function(t){return t===this.__ownerID?this:t?Bt(this.size,this._root,t,this.__hash):(this.__ownerID=t,this.__altered=!1,this)},Ut.isMap=Ht;var Hn="@@__IMMUTABLE_MAP__@@",Pn=Ut.prototype;Pn[Hn]=!0,Pn[sn]=Pn.remove,Pn.removeIn=Pn.deleteIn,Pt.prototype.get=function(t,e,n,r){for(var i=this.entries,o=0,u=i.length;o=Vn)return $t(t,f,o,u);var _=t&&t===this.ownerID,d=_?f:i(f);return p?c?h===l-1?d.pop():d[h]=d.pop():d[h]=[o,u]:d.push([o,u]),_?(this.entries=d,this):new Pt(t,d)}},xt.prototype.get=function(t,e,n,r){void 0===e&&(e=et(n));var i=1<<((0===t?e:e>>>t)&hn),o=this.bitmap;return 0===(o&i)?r:this.nodes[ue(o&i-1)].get(t+cn,e,n,r)},xt.prototype.update=function(t,e,n,r,i,o,u){void 0===n&&(n=et(r));var a=(0===e?n:n>>>e)&hn,s=1<=qn)return ee(t,l,c,a,_);if(f&&!_&&2===l.length&&Qt(l[1^h]))return l[1^h];if(f&&_&&1===l.length&&Qt(_))return _;var d=t&&t===this.ownerID,v=f?_?c:c^s:c|s,y=f?_?ae(l,h,_,d):ce(l,h,d):se(l,h,_,d);return d?(this.bitmap=v,this.nodes=y,this):new xt(t,v,y)},Vt.prototype.get=function(t,e,n,r){void 0===e&&(e=et(n));var i=(0===t?e:e>>>t)&hn,o=this.nodes[i];return o?o.get(t+cn,e,n,r):r},Vt.prototype.update=function(t,e,n,r,i,o,u){void 0===n&&(n=et(r));var a=(0===e?n:n>>>e)&hn,s=i===ln,c=this.nodes,f=c[a];if(s&&!f)return this;var h=Xt(f,t,e+cn,n,r,i,o,u);if(h===f)return this;var l=this.count;if(f){if(!h&&(l--,l=0&&t>>e&hn;if(r>=this.array.length)return new le([],t);var i,o=0===r;if(e>0){var u=this.array[r];if(i=u&&u.removeBefore(t,e-cn,n),i===u&&o)return this}if(o&&!i)return this;var a=Se(this,t);if(!o)for(var s=0;s>>e&hn;if(r>=this.array.length)return this;var i;if(e>0){var o=this.array[r];if(i=o&&o.removeAfter(t,e-cn,n),i===o&&r===this.array.length-1)return this}var u=Se(this,t);return u.array.splice(r+1),i&&(u.array[r]=i),u};var Yn,Bn={};t(be,Ut),be.of=function(){return this(arguments)},be.prototype.toString=function(){return this.__toString("OrderedMap {","}")},be.prototype.get=function(t,e){var n=this._map.get(t);return void 0!==n?this._list.get(n)[1]:e},be.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=0,this._map.clear(),this._list.clear(),this):Te()},be.prototype.set=function(t,e){return Ae(this,t,e)},be.prototype.remove=function(t){return Ae(this,t,ln)},be.prototype.wasAltered=function(){return this._map.wasAltered()||this._list.wasAltered()},be.prototype.__iterate=function(t,e){var n=this;return this._list.__iterate(function(e){return e&&t(e[1],e[0],n)},e)},be.prototype.__iterator=function(t,e){return this._list.fromEntrySeq().__iterator(t,e)},be.prototype.__ensureOwner=function(t){if(t===this.__ownerID)return this;var e=this._map.__ensureOwner(t),n=this._list.__ensureOwner(t);return t?we(e,n,t,this.__hash):(this.__ownerID=t,this._map=e,this._list=n,this)},be.isOrderedMap=Oe,be.prototype[Sn]=!0,be.prototype[sn]=be.prototype.remove;var Jn;t(De,B),De.of=function(){return this(arguments)},De.prototype.toString=function(){return this.__toString("Stack [","]")},De.prototype.get=function(t,e){var n=this._head;for(t=u(this,t);n&&t--;)n=n.next;return n?n.value:e},De.prototype.peek=function(){return this._head&&this._head.value},De.prototype.push=function(){var t=arguments;if(0===arguments.length)return this;for(var e=this.size+arguments.length,n=this._head,r=arguments.length-1;r>=0;r--)n={value:t[r],next:n};return this.__ownerID?(this.size=e,this._head=n,this.__hash=void 0,this.__altered=!0,this):ze(e,n)},De.prototype.pushAll=function(t){if(t=_(t),0===t.size)return this;at(t.size);var e=this.size,n=this._head;return t.reverse().forEach(function(t){e++,n={value:t,next:n}}),this.__ownerID?(this.size=e,this._head=n,this.__hash=void 0,this.__altered=!0,this):ze(e,n)},De.prototype.pop=function(){return this.slice(1)},De.prototype.unshift=function(){return this.push.apply(this,arguments)},De.prototype.unshiftAll=function(t){return this.pushAll(t)},De.prototype.shift=function(){return this.pop.apply(this,arguments)},De.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=0,this._head=void 0,this.__hash=void 0,this.__altered=!0,this):Re()},De.prototype.slice=function(t,e){if(s(t,e,this.size))return this;var n=c(t,this.size),r=f(e,this.size);if(r!==this.size)return B.prototype.slice.call(this,t,e);for(var i=this.size-n,o=this._head;n--;)o=o.next;return this.__ownerID?(this.size=i,this._head=o,this.__hash=void 0,this.__altered=!0,this):ze(i,o)},De.prototype.__ensureOwner=function(t){return t===this.__ownerID?this:t?ze(this.size,this._head,t,this.__hash):(this.__ownerID=t,this.__altered=!1,this)},De.prototype.__iterate=function(t,e){var n=this;if(e)return this.reverse().__iterate(t);for(var r=0,i=this._head;i&&t(i.value,r++,n)!==!1;)i=i.next;return r},De.prototype.__iterator=function(t,e){if(e)return this.reverse().__iterator(t);var n=0,r=this._head;return new E(function(){if(r){var e=r.value;return r=r.next,I(t,n++,e)}return b()})},De.isStack=Ce;var Wn="@@__IMMUTABLE_STACK__@@",Xn=De.prototype;Xn[Wn]=!0,Xn.withMutations=Pn.withMutations,Xn.asMutable=Pn.asMutable,Xn.asImmutable=Pn.asImmutable,Xn.wasAltered=Pn.wasAltered;var Qn;t(Le,J),Le.of=function(){return this(arguments)},Le.fromKeys=function(t){return this(p(t).keySeq())},Le.prototype.toString=function(){return this.__toString("Set {","}")},Le.prototype.has=function(t){return this._map.has(t)},Le.prototype.add=function(t){return je(this,this._map.set(t,!0))},Le.prototype.remove=function(t){return je(this,this._map.remove(t))},Le.prototype.clear=function(){return je(this,this._map.clear())},Le.prototype.union=function(){var t=an.call(arguments,0);return t=t.filter(function(t){return 0!==t.size}),0===t.length?this:0!==this.size||this.__ownerID||1!==t.length?this.withMutations(function(e){for(var n=0;n1?" by "+this._step:"")+" ]"},Be.prototype.get=function(t,e){return this.has(t)?this._start+u(this,t)*this._step:e},Be.prototype.includes=function(t){var e=(t-this._start)/this._step;return e>=0&&e=0&&nn?b():I(t,o++,u)})},Be.prototype.equals=function(t){return t instanceof Be?this._start===t._start&&this._end===t._end&&this._step===t._step:Ye(this,t)};var ir;t(Je,R),Je.prototype.toString=function(){return 0===this.size?"Repeat []":"Repeat [ "+this._value+" "+this.size+" times ]"},Je.prototype.get=function(t,e){return this.has(t)?this._value:e},Je.prototype.includes=function(t){return W(this._value,t)},Je.prototype.slice=function(t,e){var n=this.size;return s(t,e,n)?this:new Je(this._value,f(e,n)-c(t,n))},Je.prototype.reverse=function(){return this},Je.prototype.indexOf=function(t){return W(this._value,t)?0:-1},Je.prototype.lastIndexOf=function(t){return W(this._value,t)?this.size:-1},Je.prototype.__iterate=function(t,e){for(var n=this,r=0;rthis.size?e:this.find(function(e,n){return n===t},void 0,e)},has:function(t){return t=u(this,t),t>=0&&(void 0!==this.size?this.size===1/0||t-1&&t%1===0&&t<=Number.MAX_VALUE}var i=Function.prototype.bind;e.isString=function(t){return"string"==typeof t||"[object String]"===n(t)},e.isArray=Array.isArray||function(t){return"[object Array]"===n(t)},"function"!=typeof/./&&"object"!=typeof Int8Array?e.isFunction=function(t){return"function"==typeof t||!1}:e.isFunction=function(t){return"[object Function]"===toString.call(t)},e.isObject=function(t){var e=typeof t;return"function"===e||"object"===e&&!!t},e.extend=function(t){var e=arguments,n=arguments.length;if(!t||n<2)return t||{};for(var r=1;r0)){var e=this.reactorState.get("dirtyStores");if(0!==e.size){var n=c.default.Set().withMutations(function(n){n.union(t.observerState.get("any")),e.forEach(function(e){var r=t.observerState.getIn(["stores",e]);r&&n.union(r)})});n.forEach(function(e){var n=t.observerState.getIn(["observersMap",e]);if(n){var r=n.get("getter"),i=n.get("handler"),o=p.evaluate(t.prevReactorState,r),u=p.evaluate(t.reactorState,r);t.prevReactorState=o.reactorState,t.reactorState=u.reactorState;var a=o.result,s=u.result;c.default.is(a,s)||i.call(null,s)}});var r=p.resetDirtyStores(this.reactorState);this.prevReactorState=r,this.reactorState=r}}}},{key:"batchStart",value:function(){this.__batchDepth++}},{key:"batchEnd",value:function(){if(this.__batchDepth--,this.__batchDepth<=0){this.__isDispatching=!0;try{this.__notify()}catch(t){throw this.__isDispatching=!1,t}this.__isDispatching=!1}}}]),t}();e.default=(0,y.toFactory)(g),t.exports=e.default},function(t,e,n){function r(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function i(t,e){var n={};return(0,o.each)(e,function(e,r){n[r]=t.evaluate(e)}),n}Object.defineProperty(e,"__esModule",{value:!0});var o=n(4);e.default=function(t){return{getInitialState:function(){return i(t,this.getDataBindings())},componentDidMount:function(){var e=this;this.__unwatchFns=[],(0,o.each)(this.getDataBindings(),function(n,i){var o=t.observe(n,function(t){e.setState(r({},i,t))});e.__unwatchFns.push(o)})},componentWillUnmount:function(){for(var t=this;this.__unwatchFns.length;)t.__unwatchFns.shift()()}}},t.exports=e.default},function(t,e,n){function r(t){return t&&t.__esModule?t:{default:t}}function i(t,e){return new L({result:t,reactorState:e})}function o(t,e){return t.withMutations(function(t){(0,R.each)(e,function(e,n){t.getIn(["stores",n])&&console.warn("Store already defined for id = "+n);var r=e.getInitialState();if(void 0===r&&f(t,"throwOnUndefinedStoreReturnValue"))throw new Error("Store getInitialState() must return a value, did you forget a return statement");if(f(t,"throwOnNonImmutableStore")&&!(0,D.isImmutableValue)(r))throw new Error("Store getInitialState() must return an immutable value, did you forget to call toImmutable");t.update("stores",function(t){return t.set(n,e)}).update("state",function(t){return t.set(n,r)}).update("dirtyStores",function(t){return t.add(n)}).update("storeStates",function(t){return b(t,[n])})}),I(t)})}function u(t,e){return t.withMutations(function(t){(0,R.each)(e,function(e,n){t.update("stores",function(t){return t.set(n,e)})})})}function a(t,e,n){if(void 0===e&&f(t,"throwOnUndefinedActionType"))throw new Error("`dispatch` cannot be called with an `undefined` action type.");var r=t.get("state"),i=t.get("dirtyStores"),o=r.withMutations(function(r){A.default.dispatchStart(t,e,n),t.get("stores").forEach(function(o,u){var a=r.get(u),s=void 0;try{s=o.handle(a,e,n)}catch(e){throw A.default.dispatchError(t,e.message),e}if(void 0===s&&f(t,"throwOnUndefinedStoreReturnValue")){var c="Store handler must return a value, did you forget a return statement";throw A.default.dispatchError(t,c),new Error(c)}r.set(u,s),a!==s&&(i=i.add(u))}),A.default.dispatchEnd(t,r,i)}),u=t.set("state",o).set("dirtyStores",i).update("storeStates",function(t){return b(t,i)});return I(u)}function s(t,e){var n=[],r=(0,D.toImmutable)({}).withMutations(function(r){(0,R.each)(e,function(e,i){var o=t.getIn(["stores",i]);if(o){var u=o.deserialize(e);void 0!==u&&(r.set(i,u),n.push(i))}})}),i=w.default.Set(n);return t.update("state",function(t){return t.merge(r)}).update("dirtyStores",function(t){return t.union(i)}).update("storeStates",function(t){return b(t,n)})}function c(t,e,n){var r=e;(0,z.isKeyPath)(e)&&(e=(0,C.fromKeyPath)(e));var i=t.get("nextId"),o=(0,C.getStoreDeps)(e),u=w.default.Map({id:i,storeDeps:o,getterKey:r,getter:e,handler:n}),a=void 0;return a=0===o.size?t.update("any",function(t){return t.add(i)}):t.withMutations(function(t){o.forEach(function(e){var n=["stores",e];t.hasIn(n)||t.setIn(n,w.default.Set()),t.updateIn(["stores",e],function(t){return t.add(i)})})}),a=a.set("nextId",i+1).setIn(["observersMap",i],u),{observerState:a,entry:u}}function f(t,e){var n=t.getIn(["options",e]);if(void 0===n)throw new Error("Invalid option: "+e);return n}function h(t,e,n){var r=t.get("observersMap").filter(function(t){var r=t.get("getterKey"),i=!n||t.get("handler")===n;return!!i&&((0,z.isKeyPath)(e)&&(0,z.isKeyPath)(r)?(0,z.isEqual)(e,r):e===r)});return t.withMutations(function(t){r.forEach(function(e){return l(t,e)})})}function l(t,e){return t.withMutations(function(t){var n=e.get("id"),r=e.get("storeDeps");0===r.size?t.update("any",function(t){return t.remove(n)}):r.forEach(function(e){t.updateIn(["stores",e],function(t){return t?t.remove(n):t})}),t.removeIn(["observersMap",n])})}function p(t){var e=t.get("state");return t.withMutations(function(t){var n=t.get("stores"),r=n.keySeq().toJS();n.forEach(function(n,r){var i=e.get(r),o=n.handleReset(i);if(void 0===o&&f(t,"throwOnUndefinedStoreReturnValue"))throw new Error("Store handleReset() must return a value, did you forget a return statement");if(f(t,"throwOnNonImmutableStore")&&!(0,D.isImmutableValue)(o))throw new Error("Store reset state must be an immutable value, did you forget to call toImmutable");t.setIn(["state",r],o)}),t.update("storeStates",function(t){return b(t,r)}),v(t)})}function _(t,e){var n=t.get("state");if((0,z.isKeyPath)(e))return i(n.getIn(e),t);if(!(0,C.isGetter)(e))throw new Error("evaluate must be passed a keyPath or Getter");if(g(t,e))return i(E(t,e),t);var r=(0,C.getDeps)(e).map(function(e){return _(t,e).result}),o=(0,C.getComputeFn)(e).apply(null,r);return i(o,m(t,e,o))}function d(t){var e={};return t.get("stores").forEach(function(n,r){var i=t.getIn(["state",r]),o=n.serialize(i);void 0!==o&&(e[r]=o)}),e}function v(t){return t.set("dirtyStores",w.default.Set())}function y(t){return t}function S(t,e){var n=y(e);return t.getIn(["cache",n])}function g(t,e){var n=S(t,e);if(!n)return!1;var r=n.get("storeStates");return 0!==r.size&&r.every(function(e,n){return t.getIn(["storeStates",n])===e})}function m(t,e,n){var r=y(e),i=t.get("dispatchId"),o=(0,C.getStoreDeps)(e),u=(0,D.toImmutable)({}).withMutations(function(e){o.forEach(function(n){var r=t.getIn(["storeStates",n]);e.set(n,r)})});return t.setIn(["cache",r],w.default.Map({value:n,storeStates:u,dispatchId:i}))}function E(t,e){var n=y(e);return t.getIn(["cache",n,"value"])}function I(t){return t.update("dispatchId",function(t){return t+1})}function b(t,e){return t.withMutations(function(t){e.forEach(function(e){var n=t.has(e)?t.get(e)+1:1;t.set(e,n)})})}Object.defineProperty(e,"__esModule",{value:!0}),e.registerStores=o,e.replaceStores=u,e.dispatch=a,e.loadState=s,e.addObserver=c,e.getOption=f,e.removeObserver=h,e.removeObserverByEntry=l,e.reset=p,e.evaluate=_,e.serialize=d,e.resetDirtyStores=v;var O=n(3),w=r(O),T=n(9),A=r(T),D=n(5),C=n(10),z=n(11),R=n(4),L=w.default.Record({result:null,reactorState:null})},function(t,e,n){var r=n(8);e.dispatchStart=function(t,e,n){(0,r.getOption)(t,"logDispatches")&&console.group&&(console.groupCollapsed("Dispatch: %s",e),console.group("payload"),console.debug(n),console.groupEnd())},e.dispatchError=function(t,e){(0,r.getOption)(t,"logDispatches")&&console.group&&(console.debug("Dispatch error: "+e),console.groupEnd())},e.dispatchEnd=function(t,e,n){(0,r.getOption)(t,"logDispatches")&&console.group&&((0,r.getOption)(t,"logDirtyStores")&&console.log("Stores updated:",n.toList().toJS()),(0,r.getOption)(t,"logAppState")&&console.debug("Dispatch done, new state: ",e.toJS()),console.groupEnd())}},function(t,e,n){function r(t){return t&&t.__esModule?t:{default:t}}function i(t){return(0,l.isArray)(t)&&(0,l.isFunction)(t[t.length-1])}function o(t){return t[t.length-1]}function u(t){return t.slice(0,t.length-1)}function a(t,e){e||(e=h.default.Set());var n=h.default.Set().withMutations(function(e){if(!i(t))throw new Error("getFlattenedDeps must be passed a Getter");u(t).forEach(function(t){if((0,p.isKeyPath)(t))e.add((0,f.List)(t));else{if(!i(t))throw new Error("Invalid getter, each dependency must be a KeyPath or Getter");e.union(a(t))}})});return e.union(n)}function s(t){if(!(0,p.isKeyPath)(t))throw new Error("Cannot create Getter from KeyPath: "+t);return[t,_]}function c(t){if(t.hasOwnProperty("__storeDeps"))return t.__storeDeps;var e=a(t).map(function(t){return t.first()}).filter(function(t){return!!t});return Object.defineProperty(t,"__storeDeps",{enumerable:!1,configurable:!1,writable:!1,value:e}),e}Object.defineProperty(e,"__esModule",{value:!0});var f=n(3),h=r(f),l=n(4),p=n(11),_=function(t){return t};e.default={isGetter:i,getComputeFn:o,getFlattenedDeps:a,getStoreDeps:c,getDeps:u,fromKeyPath:s},t.exports=e.default},function(t,e,n){function r(t){return t&&t.__esModule?t:{default:t}}function i(t){return(0,s.isArray)(t)&&!(0,s.isFunction)(t[t.length-1])}function o(t,e){var n=a.default.List(t),r=a.default.List(e);return a.default.is(n,r)}Object.defineProperty(e,"__esModule",{value:!0}),e.isKeyPath=i,e.isEqual=o;var u=n(3),a=r(u),s=n(4)},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var r=n(3),i=(0,r.Map)({logDispatches:!1,logAppState:!1,logDirtyStores:!1,throwOnUndefinedActionType:!1,throwOnUndefinedStoreReturnValue:!1,throwOnNonImmutableStore:!1,throwOnDispatchInDispatch:!1});e.PROD_OPTIONS=i;var o=(0,r.Map)({logDispatches:!0,logAppState:!0,logDirtyStores:!0,throwOnUndefinedActionType:!0,throwOnUndefinedStoreReturnValue:!0,throwOnNonImmutableStore:!0,throwOnDispatchInDispatch:!0});e.DEBUG_OPTIONS=o;var u=(0,r.Record)({dispatchId:0,state:(0,r.Map)(),stores:(0,r.Map)(),cache:(0,r.Map)(),storeStates:(0,r.Map)(),dirtyStores:(0,r.Set)(),debug:!1,options:i});e.ReactorState=u;var a=(0,r.Record)({any:(0,r.Set)(),stores:(0,r.Map)({}),observersMap:(0,r.Map)({}),nextId:1});e.ObserverState=a}])})}),be=t(Ie),Oe=e(function(t){var e=function(t){var e,n={};if(!(t instanceof Object)||Array.isArray(t))throw new Error("keyMirror(...): Argument must be an object.");for(e in t)t.hasOwnProperty(e)&&(n[e]=e);return n};t.exports=e}),we=t(Oe),Te=we({VALIDATING_AUTH_TOKEN:null,VALID_AUTH_TOKEN:null,INVALID_AUTH_TOKEN:null,LOG_OUT:null}),Ae=be.Store,De=be.toImmutable,Ce=new Ae({getInitialState:function(){return De({isValidating:!1,authToken:!1,host:null,isInvalid:!1,errorMessage:""})},initialize:function(){this.on(Te.VALIDATING_AUTH_TOKEN,n),this.on(Te.VALID_AUTH_TOKEN,r),this.on(Te.INVALID_AUTH_TOKEN,i)}}),ze=be.Store,Re=be.toImmutable,Le=new ze({getInitialState:function(){return Re({authToken:null,host:""})},initialize:function(){this.on(Te.VALID_AUTH_TOKEN,o),this.on(Te.LOG_OUT,u)}}),Me=be.Store,je=new Me({getInitialState:function(){return!0},initialize:function(){this.on(Te.VALID_AUTH_TOKEN,a)}}),Ne=we({STREAM_START:null,STREAM_STOP:null,STREAM_ERROR:null}),ke="object"==typeof window&&"EventSource"in window,Ue=be.Store,He=be.toImmutable,Pe=new Ue({getInitialState:function(){return He({isSupported:ke,isStreaming:!1,useStreaming:!0,hasError:!1})},initialize:function(){this.on(Ne.STREAM_START,s),this.on(Ne.STREAM_STOP,c),this.on(Ne.STREAM_ERROR,f),this.on(Ne.LOG_OUT,h)}}),xe=we({API_FETCH_ALL_START:null,API_FETCH_ALL_SUCCESS:null,API_FETCH_ALL_FAIL:null,SYNC_SCHEDULED:null,SYNC_SCHEDULE_CANCELLED:null}),Ve=be.Store,qe=new Ve({getInitialState:function(){return!0},initialize:function(){this.on(xe.API_FETCH_ALL_START,function(){return!0}),this.on(xe.API_FETCH_ALL_SUCCESS,function(){return!1}),this.on(xe.API_FETCH_ALL_FAIL,function(){return!1}),this.on(xe.LOG_OUT,function(){return!1})}}),Fe=be.Store,Ge=new Fe({getInitialState:function(){return!1},initialize:function(){this.on(xe.SYNC_SCHEDULED,function(){return!0}),this.on(xe.SYNC_SCHEDULE_CANCELLED,function(){return!1}),this.on(xe.LOG_OUT,function(){return!1})}}),Ke=we({API_FETCH_SUCCESS:null,API_FETCH_START:null,API_FETCH_FAIL:null,API_SAVE_SUCCESS:null,API_SAVE_START:null,API_SAVE_FAIL:null,API_DELETE_SUCCESS:null,API_DELETE_START:null,API_DELETE_FAIL:null,LOG_OUT:null}),Ye=be.Store,Be=be.toImmutable,Je=new Ye({getInitialState:function(){return Be({})},initialize:function(){var t=this;this.on(Ke.API_FETCH_SUCCESS,l),this.on(Ke.API_SAVE_SUCCESS,l),this.on(Ke.API_DELETE_SUCCESS,p),this.on(Ke.LOG_OUT,function(){return t.getInitialState()})}}),We=e(function(t){function e(t){if(null===t||void 0===t)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(t)}function n(){try{if(!Object.assign)return!1;var t=new String("abc");if(t[5]="de","5"===Object.getOwnPropertyNames(t)[0])return!1;for(var e={},n=0;n<10;n++)e["_"+String.fromCharCode(n)]=n;var r=Object.getOwnPropertyNames(e).map(function(t){return e[t]});if("0123456789"!==r.join(""))return!1;var i={};return"abcdefghijklmnopqrst".split("").forEach(function(t){i[t]=t}),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},i)).join("")}catch(t){return!1}}var r=Object.prototype.hasOwnProperty,i=Object.prototype.propertyIsEnumerable;t.exports=n()?Object.assign:function(t,n){for(var o,u,a=arguments,s=e(t),c=1;c199&&u.status<300?t(e):n(e)},u.onerror=function(){return n({})},r?(u.setRequestHeader("Content-Type","application/json;charset=UTF-8"),u.send(JSON.stringify(r))):u.send()})}function A(t,e){var n=e.message;return t.set(t.size,n)}function D(){return In.getInitialState()}function C(t,e){t.dispatch(gn.NOTIFICATION_CREATED,{message:e})}function z(t){t.registerStores({notifications:In})}function R(t,e){if("lock"===t)return!0;if("garage_door"===t)return!0;var n=e.get(t);return!!n&&n.services.has("turn_on")}function L(t,e){return!!t&&("group"===t.domain?"on"===t.state||"off"===t.state:R(t.domain,e))}function M(t,e){return[Wn(t),function(t){return!!t&&t.services.has(e)}]}function j(t){return[yn.byId(t),Jn,L]}function N(t,e,n){function r(){var c=(new Date).getTime()-a;c0?i=setTimeout(r,e-c):(i=null,n||(s=t.apply(u,o),i||(u=o=null)))}var i,o,u,a,s;null==e&&(e=100);var c=function(){u=this,o=arguments,a=(new Date).getTime();var c=n&&!i;return i||(i=setTimeout(r,e)),c&&(s=t.apply(u,o),u=o=null),s};return c.clear=function(){i&&(clearTimeout(i),i=null)},c}function k(t,e){var n=e.component;return t.push(n)}function U(t,e){var n=e.components;return ar(n)}function H(){return sr.getInitialState()}function P(t,e){var n=e.latitude,r=e.longitude,i=e.location_name,o=e.temperature_unit,u=e.time_zone,a=e.version;return fr({latitude:n,longitude:r,location_name:i,temperature_unit:o,time_zone:u,serverVersion:a})}function x(){return hr.getInitialState()}function V(t,e){t.dispatch(or.SERVER_CONFIG_LOADED,e)}function q(t){rn(t,"GET","config").then(function(e){return V(t,e)})}function F(t,e){t.dispatch(or.COMPONENT_LOADED,{component:e})}function G(t){return[["serverComponent"],function(e){return e.contains(t)}]}function K(t){t.registerStores({serverComponent:sr,serverConfig:hr})}function Y(t,e){var n=e.pane;return n}function B(){return Ir.getInitialState()}function J(t,e){var n=e.panels;return Or(n)}function W(){return wr.getInitialState()}function X(t,e){var n=e.show;return!!n}function Q(){return Ar.getInitialState()}function Z(t,e){t.dispatch(mr.SHOW_SIDEBAR,{show:e})}function $(t,e){t.dispatch(mr.NAVIGATE,{pane:e})}function tt(t,e){t.dispatch(mr.PANELS_LOADED,{panels:e})}function et(t,e){var n=e.entityId;return n}function nt(){return kr.getInitialState()}function rt(t,e){t.dispatch(jr.SELECT_ENTITY,{entityId:e})}function it(t){t.dispatch(jr.SELECT_ENTITY,{entityId:null})}function ot(t){return!t||(new Date).getTime()-t>6e4}function ut(t,e){var n=e.date;return n.toISOString()}function at(){return xr.getInitialState()}function st(t,e){var n=e.date,r=e.stateHistory;return 0===r.length?t.set(n,qr({})):t.withMutations(function(t){r.forEach(function(e){return t.setIn([n,e[0].entity_id],qr(e.map(cn.fromJSON)))})})}function ct(){return Fr.getInitialState()}function ft(t,e){var n=e.stateHistory;return t.withMutations(function(t){n.forEach(function(e){return t.set(e[0].entity_id,Br(e.map(cn.fromJSON)))})})}function ht(){return Jr.getInitialState()}function lt(t,e){var n=e.stateHistory,r=(new Date).getTime();return t.withMutations(function(t){n.forEach(function(e){return t.set(e[0].entity_id,r)}),history.length>1&&t.set(Qr,r)})}function pt(){return Zr.getInitialState()}function _t(t,e){t.dispatch(Hr.ENTITY_HISTORY_DATE_SELECTED,{date:e})}function dt(t,e){void 0===e&&(e=null),t.dispatch(Hr.RECENT_ENTITY_HISTORY_FETCH_START,{});var n="history/period";return null!==e&&(n+="?filter_entity_id="+e),rn(t,"GET",n).then(function(e){return t.dispatch(Hr.RECENT_ENTITY_HISTORY_FETCH_SUCCESS,{stateHistory:e})},function(){return t.dispatch(Hr.RECENT_ENTITY_HISTORY_FETCH_ERROR,{})})}function vt(t,e){return t.dispatch(Hr.ENTITY_HISTORY_FETCH_START,{date:e}),rn(t,"GET","history/period/"+e).then(function(n){return t.dispatch(Hr.ENTITY_HISTORY_FETCH_SUCCESS,{date:e,stateHistory:n})},function(){return t.dispatch(Hr.ENTITY_HISTORY_FETCH_ERROR,{})})}function yt(t){var e=t.evaluate(ei);return vt(t,e)}function St(t){t.registerStores({currentEntityHistoryDate:xr,entityHistory:Fr,isLoadingEntityHistory:Kr,recentEntityHistory:Jr,recentEntityHistoryUpdated:Zr})}function gt(t){t.registerStores({moreInfoEntityId:kr})}function mt(t,e){var n=e.model,r=e.result,i=e.params;if(null===t||"entity"!==n.entity||!i.replace)return t;for(var o=0;oQo}function ae(t){t.registerStores({currentLogbookDate:Uo,isLoadingLogbookEntries:Po,logbookEntries:Ko,logbookEntriesUpdated:Jo})}function se(t,e){return rn(t,"POST","template",{template:e})}function ce(t){return t.set("isListening",!0)}function fe(t,e){var n=e.interimTranscript,r=e.finalTranscript;return t.withMutations(function(t){return t.set("isListening",!0).set("isTransmitting",!1).set("interimTranscript",n).set("finalTranscript",r)})}function he(t,e){var n=e.finalTranscript;return t.withMutations(function(t){return t.set("isListening",!1).set("isTransmitting",!0).set("interimTranscript","").set("finalTranscript",n)})}function le(){return _u.getInitialState()}function pe(){return _u.getInitialState()}function _e(){return _u.getInitialState()}function de(t){return du[t.hassId]}function ve(t){var e=de(t);if(e){var n=e.finalTranscript||e.interimTranscript;t.dispatch(hu.VOICE_TRANSMITTING,{finalTranscript:n}),Zn.callService(t,"conversation","process",{text:n}).then(function(){t.dispatch(hu.VOICE_DONE)},function(){t.dispatch(hu.VOICE_ERROR)})}}function ye(t){var e=de(t);e&&(e.recognition.stop(),du[t.hassId]=!1)}function Se(t){ve(t),ye(t)}function ge(t){var e=Se.bind(null,t);e();var n=new webkitSpeechRecognition;du[t.hassId]={recognition:n,interimTranscript:"",finalTranscript:""},n.interimResults=!0,n.onstart=function(){return t.dispatch(hu.VOICE_START)},n.onerror=function(){return t.dispatch(hu.VOICE_ERROR)},n.onend=e,n.onresult=function(e){var n=de(t);if(n){for(var r="",i="",o=e.resultIndex;o=n)}function c(t,e){return h(t,e,0)}function f(t,e){return h(t,e,e)}function h(t,e,n){return void 0===t?n:t<0?Math.max(0,e+t):void 0===e?t:Math.min(e,t)}function l(t){return v(t)?t:C(t)}function p(t){return y(t)?t:z(t)}function _(t){return S(t)?t:R(t)}function d(t){return v(t)&&!g(t)?t:L(t)}function v(t){return!(!t||!t[dn])}function y(t){return!(!t||!t[vn])}function S(t){return!(!t||!t[yn])}function g(t){return y(t)||S(t)}function m(t){return!(!t||!t[Sn])}function E(t){this.next=t}function I(t,e,n,r){var i=0===t?e:1===t?n:[e,n];return r?r.value=i:r={value:i,done:!1},r}function b(){return{value:void 0,done:!0}}function O(t){return!!A(t)}function w(t){return t&&"function"==typeof t.next}function T(t){var e=A(t);return e&&e.call(t)}function A(t){var e=t&&(In&&t[In]||t[bn]);if("function"==typeof e)return e}function D(t){return t&&"number"==typeof t.length}function C(t){return null===t||void 0===t?H():v(t)?t.toSeq():V(t)}function z(t){return null===t||void 0===t?H().toKeyedSeq():v(t)?y(t)?t.toSeq():t.fromEntrySeq():P(t)}function R(t){return null===t||void 0===t?H():v(t)?y(t)?t.entrySeq():t.toIndexedSeq():x(t)}function L(t){return(null===t||void 0===t?H():v(t)?y(t)?t.entrySeq():t:x(t)).toSetSeq()}function M(t){this._array=t,this.size=t.length}function j(t){var e=Object.keys(t);this._object=t,this._keys=e,this.size=e.length}function N(t){this._iterable=t,this.size=t.length||t.size}function k(t){this._iterator=t,this._iteratorCache=[]}function U(t){return!(!t||!t[wn])}function H(){return Tn||(Tn=new M([]))}function P(t){var e=Array.isArray(t)?new M(t).fromEntrySeq():w(t)?new k(t).fromEntrySeq():O(t)?new N(t).fromEntrySeq():"object"==typeof t?new j(t):void 0;if(!e)throw new TypeError("Expected Array or iterable object of [k, v] entries, or keyed object: "+t);return e}function x(t){var e=q(t);if(!e)throw new TypeError("Expected Array or iterable object of values: "+t);return e}function V(t){var e=q(t)||"object"==typeof t&&new j(t);if(!e)throw new TypeError("Expected Array or iterable object of values, or keyed object: "+t);return e}function q(t){return D(t)?new M(t):w(t)?new k(t):O(t)?new N(t):void 0}function F(t,e,n,r){var i=t._cache;if(i){for(var o=i.length-1,u=0;u<=o;u++){var a=i[n?o-u:u];if(e(a[1],r?a[0]:u,t)===!1)return u+1}return u}return t.__iterateUncached(e,n)}function G(t,e,n,r){var i=t._cache;if(i){var o=i.length-1,u=0;return new E(function(){var t=i[n?o-u:u];return u++>o?b():I(e,r?t[0]:u-1,t[1])})}return t.__iteratorUncached(e,n)}function K(){throw TypeError("Abstract")}function Y(){}function B(){}function J(){}function W(t,e){if(t===e||t!==t&&e!==e)return!0;if(!t||!e)return!1;if("function"==typeof t.valueOf&&"function"==typeof e.valueOf){if(t=t.valueOf(),e=e.valueOf(),t===e||t!==t&&e!==e)return!0;if(!t||!e)return!1}return!("function"!=typeof t.equals||"function"!=typeof e.equals||!t.equals(e))}function X(t,e){return e?Q(e,t,"",{"":t}):Z(t)}function Q(t,e,n,r){return Array.isArray(e)?t.call(r,n,R(e).map(function(n,r){return Q(t,n,r,e)})):$(e)?t.call(r,n,z(e).map(function(n,r){return Q(t,n,r,e)})):e}function Z(t){return Array.isArray(t)?R(t).map(Z).toList():$(t)?z(t).map(Z).toMap():t}function $(t){return t&&(t.constructor===Object||void 0===t.constructor)}function tt(t){return t>>>1&1073741824|3221225471&t}function et(t){if(t===!1||null===t||void 0===t)return 0;if("function"==typeof t.valueOf&&(t=t.valueOf(),t===!1||null===t||void 0===t))return 0;if(t===!0)return 1;var e=typeof t;if("number"===e){var n=0|t;for(n!==t&&(n^=4294967295*t);t>4294967295;)t/=4294967295,n^=t;return tt(n)}return"string"===e?t.length>jn?nt(t):rt(t):"function"==typeof t.hashCode?t.hashCode():it(t)}function nt(t){var e=Un[t];return void 0===e&&(e=rt(t),kn===Nn&&(kn=0,Un={}),kn++,Un[t]=e),e}function rt(t){for(var e=0,n=0;n0)switch(t.nodeType){case 1:return t.uniqueID;case 9:return t.documentElement&&t.documentElement.uniqueID}}function ut(t,e){if(!t)throw new Error(e)}function at(t){ut(t!==1/0,"Cannot perform this action with an infinite size.")}function st(t,e){this._iter=t,this._useKeys=e,this.size=t.size}function ct(t){this._iter=t,this.size=t.size}function ft(t){this._iter=t,this.size=t.size}function ht(t){this._iter=t,this.size=t.size}function lt(t){var e=Mt(t);return e._iter=t,e.size=t.size,e.flip=function(){return t},e.reverse=function(){var e=t.reverse.apply(this);return e.flip=function(){return t.reverse()},e},e.has=function(e){return t.includes(e)},e.includes=function(e){return t.has(e)},e.cacheResult=jt,e.__iterateUncached=function(e,n){var r=this;return t.__iterate(function(t,n){return e(n,t,r)!==!1},n)},e.__iteratorUncached=function(e,n){if(e===En){var r=t.__iterator(e,n);return new E(function(){var t=r.next();if(!t.done){var e=t.value[0];t.value[0]=t.value[1],t.value[1]=e}return t})}return t.__iterator(e===mn?gn:mn,n)},e}function pt(t,e,n){var r=Mt(t);return r.size=t.size,r.has=function(e){return t.has(e)},r.get=function(r,i){var o=t.get(r,ln);return o===ln?i:e.call(n,o,r,t)},r.__iterateUncached=function(r,i){var o=this;return t.__iterate(function(t,i,u){return r(e.call(n,t,i,u),i,o)!==!1},i)},r.__iteratorUncached=function(r,i){var o=t.__iterator(En,i);return new E(function(){var i=o.next();if(i.done)return i;var u=i.value,a=u[0];return I(r,a,e.call(n,u[1],a,t),i)})},r}function _t(t,e){var n=Mt(t);return n._iter=t,n.size=t.size,n.reverse=function(){return t},t.flip&&(n.flip=function(){var e=lt(t);return e.reverse=function(){return t.flip()},e}),n.get=function(n,r){return t.get(e?n:-1-n,r)},n.has=function(n){return t.has(e?n:-1-n)},n.includes=function(e){return t.includes(e)},n.cacheResult=jt,n.__iterate=function(e,n){var r=this;return t.__iterate(function(t,n){return e(t,n,r)},!n)},n.__iterator=function(e,n){return t.__iterator(e,!n)},n}function dt(t,e,n,r){var i=Mt(t);return r&&(i.has=function(r){var i=t.get(r,ln);return i!==ln&&!!e.call(n,i,r,t)},i.get=function(r,i){var o=t.get(r,ln);return o!==ln&&e.call(n,o,r,t)?o:i}),i.__iterateUncached=function(i,o){var u=this,a=0;return t.__iterate(function(t,o,s){if(e.call(n,t,o,s))return a++,i(t,r?o:a-1,u)},o),a},i.__iteratorUncached=function(i,o){var u=t.__iterator(En,o),a=0;return new E(function(){for(;;){var o=u.next();if(o.done)return o;var s=o.value,c=s[0],f=s[1];if(e.call(n,f,c,t))return I(i,r?c:a++,f,o)}})},i}function vt(t,e,n){var r=Ut().asMutable();return t.__iterate(function(i,o){r.update(e.call(n,i,o,t),0,function(t){return t+1})}),r.asImmutable()}function yt(t,e,n){var r=y(t),i=(m(t)?be():Ut()).asMutable();t.__iterate(function(o,u){i.update(e.call(n,o,u,t),function(t){return t=t||[],t.push(r?[u,o]:o),t})});var o=Lt(t);return i.map(function(e){return Ct(t,o(e))})}function St(t,e,n,r){var i=t.size;if(void 0!==e&&(e=0|e),void 0!==n&&(n=0|n),s(e,n,i))return t;var o=c(e,i),a=f(n,i);if(o!==o||a!==a)return St(t.toSeq().cacheResult(),e,n,r);var h,l=a-o;l===l&&(h=l<0?0:l);var p=Mt(t);return p.size=0===h?h:t.size&&h||void 0,!r&&U(t)&&h>=0&&(p.get=function(e,n){return e=u(this,e),e>=0&&eh)return b();var t=i.next();return r||e===mn?t:e===gn?I(e,a-1,void 0,t):I(e,a-1,t.value[1],t)})},p}function gt(t,e,n){var r=Mt(t);return r.__iterateUncached=function(r,i){var o=this;if(i)return this.cacheResult().__iterate(r,i);var u=0;return t.__iterate(function(t,i,a){return e.call(n,t,i,a)&&++u&&r(t,i,o)}),u},r.__iteratorUncached=function(r,i){var o=this;if(i)return this.cacheResult().__iterator(r,i);var u=t.__iterator(En,i),a=!0;return new E(function(){if(!a)return b();var t=u.next();if(t.done)return t;var i=t.value,s=i[0],c=i[1];return e.call(n,c,s,o)?r===En?t:I(r,s,c,t):(a=!1,b())})},r}function mt(t,e,n,r){var i=Mt(t);return i.__iterateUncached=function(i,o){var u=this;if(o)return this.cacheResult().__iterate(i,o);var a=!0,s=0;return t.__iterate(function(t,o,c){if(!a||!(a=e.call(n,t,o,c)))return s++,i(t,r?o:s-1,u)}),s},i.__iteratorUncached=function(i,o){var u=this;if(o)return this.cacheResult().__iterator(i,o);var a=t.__iterator(En,o),s=!0,c=0;return new E(function(){var t,o,f;do{if(t=a.next(),t.done)return r||i===mn?t:i===gn?I(i,c++,void 0,t):I(i,c++,t.value[1],t);var h=t.value;o=h[0],f=h[1],s&&(s=e.call(n,f,o,u))}while(s);return i===En?t:I(i,o,f,t)})},i}function Et(t,e){var n=y(t),r=[t].concat(e).map(function(t){return v(t)?n&&(t=p(t)):t=n?P(t):x(Array.isArray(t)?t:[t]),t}).filter(function(t){return 0!==t.size});if(0===r.length)return t;if(1===r.length){var i=r[0];if(i===t||n&&y(i)||S(t)&&S(i))return i}var o=new M(r);return n?o=o.toKeyedSeq():S(t)||(o=o.toSetSeq()),o=o.flatten(!0),o.size=r.reduce(function(t,e){if(void 0!==t){var n=e.size;if(void 0!==n)return t+n}},0),o}function It(t,e,n){var r=Mt(t);return r.__iterateUncached=function(r,i){function o(t,s){var c=this;t.__iterate(function(t,i){return(!e||s0}function Dt(t,e,n){var r=Mt(t);return r.size=new M(n).map(function(t){return t.size}).min(),r.__iterate=function(t,e){for(var n,r=this,i=this.__iterator(mn,e),o=0;!(n=i.next()).done&&t(n.value,o++,r)!==!1;);return o},r.__iteratorUncached=function(t,r){var i=n.map(function(t){return t=l(t),T(r?t.reverse():t)}),o=0,u=!1;return new E(function(){var n;return u||(n=i.map(function(t){return t.next()}),u=n.some(function(t){return t.done})),u?b():I(t,o++,e.apply(null,n.map(function(t){return t.value})))})},r}function Ct(t,e){return U(t)?e:t.constructor(e)}function zt(t){if(t!==Object(t))throw new TypeError("Expected [K, V] tuple: "+t)}function Rt(t){return at(t.size),o(t)}function Lt(t){return y(t)?p:S(t)?_:d}function Mt(t){return Object.create((y(t)?z:S(t)?R:L).prototype)}function jt(){return this._iter.cacheResult?(this._iter.cacheResult(),this.size=this._iter.size,this):C.prototype.cacheResult.call(this)}function Nt(t,e){return t>e?1:t>>n)&hn,a=(0===n?r:r>>>n)&hn,s=u===a?[Zt(t,e,n+cn,r,i)]:(o=new Ft(e,r,i),u>>=1)u[a]=1&n?e[o++]:void 0;return u[r]=i,new Vt(t,o+1,u)}function ne(t,e,n){for(var r=[],i=0;i>1&1431655765,t=(858993459&t)+(t>>2&858993459),t=t+(t>>4)&252645135,t+=t>>8,t+=t>>16,127&t}function ae(t,e,n,r){var o=r?t:i(t);return o[e]=n,o}function se(t,e,n,r){var i=t.length+1;if(r&&e+1===i)return t[e]=n,t;for(var o=new Array(i),u=0,a=0;a0&&ro?0:o-n,c=u-n;return c>fn&&(c=fn),function(){if(i===c)return Bn;var t=e?--c:i++;return r&&r[t]}}function i(t,r,i){var a,s=t&&t.array,c=i>o?0:o-i>>r,f=(u-i>>r)+1;return f>fn&&(f=fn),function(){for(;;){if(a){var t=a();if(t!==Bn)return t;a=null}if(c===f)return Bn;var o=e?--f:c++;a=n(s&&s[o],r-cn,i+(o<=t.size||n<0)return t.withMutations(function(t){n<0?me(t,n).set(0,r):me(t,0,n+1).set(n,r)});n+=t._origin;var i=t._tail,o=t._root,a=e(_n);return n>=Ie(t._capacity)?i=ye(i,t.__ownerID,0,n,r,a):o=ye(o,t.__ownerID,t._level,n,r,a),a.value?t.__ownerID?(t._root=o,t._tail=i,t.__hash=void 0,t.__altered=!0,t):_e(t._origin,t._capacity,t._level,o,i):t}function ye(t,e,r,i,o,u){var a=i>>>r&hn,s=t&&a0){var f=t&&t.array[a],h=ye(f,e,r-cn,i,o,u);return h===f?t:(c=Se(t,e),c.array[a]=h,c)}return s&&t.array[a]===o?t:(n(u),c=Se(t,e),void 0===o&&a===c.array.length-1?c.array.pop():c.array[a]=o,c)}function Se(t,e){return e&&t&&e===t.ownerID?t:new le(t?t.array.slice():[],e)}function ge(t,e){if(e>=Ie(t._capacity))return t._tail;if(e<1<0;)n=n.array[e>>>r&hn],r-=cn;return n}}function me(t,e,n){void 0!==e&&(e=0|e),void 0!==n&&(n=0|n);var i=t.__ownerID||new r,o=t._origin,u=t._capacity,a=o+e,s=void 0===n?u:n<0?u+n:o+n;if(a===o&&s===u)return t;if(a>=s)return t.clear();for(var c=t._level,f=t._root,h=0;a+h<0;)f=new le(f&&f.array.length?[void 0,f]:[],i),c+=cn,h+=1<=1<l?new le([],i):_;if(_&&p>l&&acn;y-=cn){var S=l>>>y&hn;v=v.array[S]=Se(v.array[S],i)}v.array[l>>>cn&hn]=_}if(s=p)a-=p,s-=p,c=cn,f=null,d=d&&d.removeBefore(i,0,a);else if(a>o||p>>c&hn;if(g!==p>>>c&hn)break;g&&(h+=(1<o&&(f=f.removeBefore(i,c,a-h)),f&&pi&&(i=a.size),v(u)||(a=a.map(function(t){return X(t)})),r.push(a)}return i>t.size&&(t=t.setSize(i)),ie(t,e,r)}function Ie(t){return t>>cn<=fn&&u.size>=2*o.size?(i=u.filter(function(t,e){return void 0!==t&&a!==e}),r=i.toKeyedSeq().map(function(t){return t[0]}).flip().toMap(),t.__ownerID&&(r.__ownerID=i.__ownerID=t.__ownerID)):(r=o.remove(e),i=a===u.size-1?u.pop():u.set(a,void 0))}else if(s){if(n===u.get(a)[1])return t;r=o,i=u.set(a,[e,n])}else r=o.set(e,u.size),i=u.set(u.size,[e,n]);return t.__ownerID?(t.size=r.size,t._map=r,t._list=i,t.__hash=void 0,t):we(r,i)}function De(t){return null===t||void 0===t?Re():Ce(t)?t:Re().unshiftAll(t)}function Ce(t){return!(!t||!t[Wn])}function ze(t,e,n,r){var i=Object.create(Xn);return i.size=t,i._head=e,i.__ownerID=n,i.__hash=r,i.__altered=!1,i}function Re(){return Qn||(Qn=ze(0))}function Le(t){return null===t||void 0===t?ke():Me(t)&&!m(t)?t:ke().withMutations(function(e){var n=d(t);at(n.size),n.forEach(function(t){return e.add(t)})})}function Me(t){return!(!t||!t[Zn])}function je(t,e){return t.__ownerID?(t.size=e.size,t._map=e,t):e===t._map?t:0===e.size?t.__empty():t.__make(e)}function Ne(t,e){var n=Object.create($n);return n.size=t?t.size:0,n._map=t,n.__ownerID=e,n}function ke(){return tr||(tr=Ne(Jt()))}function Ue(t){return null===t||void 0===t?xe():He(t)?t:xe().withMutations(function(e){var n=d(t);at(n.size),n.forEach(function(t){return e.add(t)})})}function He(t){return Me(t)&&m(t)}function Pe(t,e){var n=Object.create(er);return n.size=t?t.size:0,n._map=t,n.__ownerID=e,n}function xe(){return nr||(nr=Pe(Te()))}function Ve(t,e){var n,r=function(o){if(o instanceof r)return o;if(!(this instanceof r))return new r(o);if(!n){n=!0;var u=Object.keys(t);Ge(i,u),i.size=u.length,i._name=e,i._keys=u,i._defaultValues=t}this._map=Ut(o)},i=r.prototype=Object.create(rr);return i.constructor=r,r}function qe(t,e,n){var r=Object.create(Object.getPrototypeOf(t));return r._map=e,r.__ownerID=n,r}function Fe(t){return t._name||t.constructor.name||"Record"}function Ge(t,e){try{e.forEach(Ke.bind(void 0,t))}catch(t){}}function Ke(t,e){Object.defineProperty(t,e,{get:function(){return this.get(e)},set:function(t){ut(this.__ownerID,"Cannot set on an immutable record."),this.set(e,t)}})}function Ye(t,e){if(t===e)return!0;if(!v(e)||void 0!==t.size&&void 0!==e.size&&t.size!==e.size||void 0!==t.__hash&&void 0!==e.__hash&&t.__hash!==e.__hash||y(t)!==y(e)||S(t)!==S(e)||m(t)!==m(e))return!1;if(0===t.size&&0===e.size)return!0;var n=!g(t);if(m(t)){var r=t.entries();return e.every(function(t,e){var i=r.next().value;return i&&W(i[1],t)&&(n||W(i[0],e))})&&r.next().done}var i=!1;if(void 0===t.size)if(void 0===e.size)"function"==typeof t.cacheResult&&t.cacheResult();else{i=!0;var o=t;t=e,e=o}var u=!0,a=e.__iterate(function(e,r){if(n?!t.has(e):i?!W(e,t.get(r,ln)):!W(t.get(r,ln),e))return u=!1,!1});return u&&t.size===a}function Be(t,e,n){if(!(this instanceof Be))return new Be(t,e,n);if(ut(0!==n,"Cannot step a Range by 0"),t=t||0,void 0===e&&(e=1/0),n=void 0===n?1:Math.abs(n),ee?-1:0}function rn(t){if(t.size===1/0)return 0;var e=m(t),n=y(t),r=e?1:0,i=t.__iterate(n?e?function(t,e){r=31*r+un(et(t),et(e))|0}:function(t,e){r=r+un(et(t),et(e))|0}:e?function(t){r=31*r+et(t)|0}:function(t){r=r+et(t)|0});return on(i,r)}function on(t,e){return e=Dn(e,3432918353),e=Dn(e<<15|e>>>-15,461845907),e=Dn(e<<13|e>>>-13,5),e=(e+3864292196|0)^t,e=Dn(e^e>>>16,2246822507),e=Dn(e^e>>>13,3266489909),e=tt(e^e>>>16)}function un(t,e){return t^e+2654435769+(t<<6)+(t>>2)|0}var an=Array.prototype.slice,sn="delete",cn=5,fn=1<r?b():I(t,i,n[e?r-i++:i++])})},t(j,z),j.prototype.get=function(t,e){return void 0===e||this.has(t)?this._object[t]:e},j.prototype.has=function(t){return this._object.hasOwnProperty(t)},j.prototype.__iterate=function(t,e){for(var n=this,r=this._object,i=this._keys,o=i.length-1,u=0;u<=o;u++){var a=i[e?o-u:u];if(t(r[a],a,n)===!1)return u+1}return u},j.prototype.__iterator=function(t,e){var n=this._object,r=this._keys,i=r.length-1,o=0;return new E(function(){var u=r[e?i-o:o];return o++>i?b():I(t,u,n[u])})},j.prototype[Sn]=!0,t(N,R),N.prototype.__iterateUncached=function(t,e){var n=this;if(e)return this.cacheResult().__iterate(t,e);var r=this._iterable,i=T(r),o=0;if(w(i))for(var u;!(u=i.next()).done&&t(u.value,o++,n)!==!1;);return o},N.prototype.__iteratorUncached=function(t,e){if(e)return this.cacheResult().__iterator(t,e);var n=this._iterable,r=T(n);if(!w(r))return new E(b);var i=0;return new E(function(){var e=r.next();return e.done?e:I(t,i++,e.value)})},t(k,R),k.prototype.__iterateUncached=function(t,e){var n=this;if(e)return this.cacheResult().__iterate(t,e);for(var r=this._iterator,i=this._iteratorCache,o=0;o=r.length){var e=n.next();if(e.done)return e;r[i]=e.value}return I(t,i,r[i++])})};var Tn;t(K,l),t(Y,K),t(B,K),t(J,K),K.Keyed=Y,K.Indexed=B,K.Set=J;var An,Dn="function"==typeof Math.imul&&Math.imul(4294967295,2)===-2?Math.imul:function(t,e){t=0|t,e=0|e;var n=65535&t,r=65535&e;return n*r+((t>>>16)*r+n*(e>>>16)<<16>>>0)|0},Cn=Object.isExtensible,zn=function(){try{return Object.defineProperty({},"@",{}),!0}catch(t){return!1}}(),Rn="function"==typeof WeakMap;Rn&&(An=new WeakMap);var Ln=0,Mn="__immutablehash__";"function"==typeof Symbol&&(Mn=Symbol(Mn));var jn=16,Nn=255,kn=0,Un={};t(st,z),st.prototype.get=function(t,e){return this._iter.get(t,e)},st.prototype.has=function(t){return this._iter.has(t)},st.prototype.valueSeq=function(){return this._iter.valueSeq()},st.prototype.reverse=function(){var t=this,e=_t(this,!0);return this._useKeys||(e.valueSeq=function(){return t._iter.toSeq().reverse()}),e},st.prototype.map=function(t,e){var n=this,r=pt(this,t,e);return this._useKeys||(r.valueSeq=function(){return n._iter.toSeq().map(t,e)}),r},st.prototype.__iterate=function(t,e){var n,r=this;return this._iter.__iterate(this._useKeys?function(e,n){return t(e,n,r)}:(n=e?Rt(this):0,function(i){return t(i,e?--n:n++,r)}),e)},st.prototype.__iterator=function(t,e){if(this._useKeys)return this._iter.__iterator(t,e);var n=this._iter.__iterator(mn,e),r=e?Rt(this):0;return new E(function(){var i=n.next();return i.done?i:I(t,e?--r:r++,i.value,i)})},st.prototype[Sn]=!0,t(ct,R),ct.prototype.includes=function(t){return this._iter.includes(t)},ct.prototype.__iterate=function(t,e){var n=this,r=0;return this._iter.__iterate(function(e){return t(e,r++,n)},e)},ct.prototype.__iterator=function(t,e){var n=this._iter.__iterator(mn,e),r=0;return new E(function(){var e=n.next();return e.done?e:I(t,r++,e.value,e)})},t(ft,L),ft.prototype.has=function(t){return this._iter.includes(t)},ft.prototype.__iterate=function(t,e){var n=this;return this._iter.__iterate(function(e){return t(e,e,n)},e)},ft.prototype.__iterator=function(t,e){var n=this._iter.__iterator(mn,e);return new E(function(){var e=n.next();return e.done?e:I(t,e.value,e.value,e)})},t(ht,z),ht.prototype.entrySeq=function(){return this._iter.toSeq()},ht.prototype.__iterate=function(t,e){var n=this;return this._iter.__iterate(function(e){if(e){zt(e);var r=v(e);return t(r?e.get(1):e[1],r?e.get(0):e[0],n)}},e)},ht.prototype.__iterator=function(t,e){var n=this._iter.__iterator(mn,e);return new E(function(){for(;;){var e=n.next();if(e.done)return e;var r=e.value;if(r){zt(r);var i=v(r);return I(t,i?r.get(0):r[0],i?r.get(1):r[1],e)}}})},ct.prototype.cacheResult=st.prototype.cacheResult=ft.prototype.cacheResult=ht.prototype.cacheResult=jt,t(Ut,Y),Ut.prototype.toString=function(){return this.__toString("Map {","}")},Ut.prototype.get=function(t,e){return this._root?this._root.get(0,void 0,t,e):e},Ut.prototype.set=function(t,e){return Wt(this,t,e)},Ut.prototype.setIn=function(t,e){return this.updateIn(t,ln,function(){return e})},Ut.prototype.remove=function(t){return Wt(this,t,ln)},Ut.prototype.deleteIn=function(t){return this.updateIn(t,function(){return ln})},Ut.prototype.update=function(t,e,n){return 1===arguments.length?t(this):this.updateIn([t],e,n)},Ut.prototype.updateIn=function(t,e,n){n||(n=e,e=void 0);var r=oe(this,kt(t),e,n);return r===ln?void 0:r},Ut.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=0,this._root=null,this.__hash=void 0,this.__altered=!0,this):Jt()},Ut.prototype.merge=function(){return ne(this,void 0,arguments)},Ut.prototype.mergeWith=function(t){var e=an.call(arguments,1);return ne(this,t,e)},Ut.prototype.mergeIn=function(t){var e=an.call(arguments,1);return this.updateIn(t,Jt(),function(t){return"function"==typeof t.merge?t.merge.apply(t,e):e[e.length-1]})},Ut.prototype.mergeDeep=function(){return ne(this,re(void 0),arguments)},Ut.prototype.mergeDeepWith=function(t){var e=an.call(arguments,1);return ne(this,re(t),e)},Ut.prototype.mergeDeepIn=function(t){var e=an.call(arguments,1);return this.updateIn(t,Jt(),function(t){return"function"==typeof t.mergeDeep?t.mergeDeep.apply(t,e):e[e.length-1]})},Ut.prototype.sort=function(t){return be(wt(this,t))},Ut.prototype.sortBy=function(t,e){return be(wt(this,e,t))},Ut.prototype.withMutations=function(t){var e=this.asMutable();return t(e),e.wasAltered()?e.__ensureOwner(this.__ownerID):this},Ut.prototype.asMutable=function(){return this.__ownerID?this:this.__ensureOwner(new r)},Ut.prototype.asImmutable=function(){return this.__ensureOwner()},Ut.prototype.wasAltered=function(){return this.__altered},Ut.prototype.__iterator=function(t,e){return new Gt(this,t,e)},Ut.prototype.__iterate=function(t,e){var n=this,r=0;return this._root&&this._root.iterate(function(e){return r++,t(e[1],e[0],n)},e),r},Ut.prototype.__ensureOwner=function(t){return t===this.__ownerID?this:t?Bt(this.size,this._root,t,this.__hash):(this.__ownerID=t,this.__altered=!1,this)},Ut.isMap=Ht;var Hn="@@__IMMUTABLE_MAP__@@",Pn=Ut.prototype;Pn[Hn]=!0,Pn[sn]=Pn.remove,Pn.removeIn=Pn.deleteIn,Pt.prototype.get=function(t,e,n,r){for(var i=this.entries,o=0,u=i.length;o=Vn)return $t(t,f,o,u);var _=t&&t===this.ownerID,d=_?f:i(f);return p?c?h===l-1?d.pop():d[h]=d.pop():d[h]=[o,u]:d.push([o,u]),_?(this.entries=d,this):new Pt(t,d)}},xt.prototype.get=function(t,e,n,r){void 0===e&&(e=et(n));var i=1<<((0===t?e:e>>>t)&hn),o=this.bitmap;return 0===(o&i)?r:this.nodes[ue(o&i-1)].get(t+cn,e,n,r)},xt.prototype.update=function(t,e,n,r,i,o,u){void 0===n&&(n=et(r));var a=(0===e?n:n>>>e)&hn,s=1<=qn)return ee(t,l,c,a,_);if(f&&!_&&2===l.length&&Qt(l[1^h]))return l[1^h];if(f&&_&&1===l.length&&Qt(_))return _;var d=t&&t===this.ownerID,v=f?_?c:c^s:c|s,y=f?_?ae(l,h,_,d):ce(l,h,d):se(l,h,_,d);return d?(this.bitmap=v,this.nodes=y,this):new xt(t,v,y)},Vt.prototype.get=function(t,e,n,r){void 0===e&&(e=et(n));var i=(0===t?e:e>>>t)&hn,o=this.nodes[i];return o?o.get(t+cn,e,n,r):r},Vt.prototype.update=function(t,e,n,r,i,o,u){void 0===n&&(n=et(r));var a=(0===e?n:n>>>e)&hn,s=i===ln,c=this.nodes,f=c[a];if(s&&!f)return this;var h=Xt(f,t,e+cn,n,r,i,o,u);if(h===f)return this;var l=this.count;if(f){if(!h&&(l--,l=0&&t>>e&hn;if(r>=this.array.length)return new le([],t);var i,o=0===r;if(e>0){var u=this.array[r];if(i=u&&u.removeBefore(t,e-cn,n),i===u&&o)return this}if(o&&!i)return this;var a=Se(this,t);if(!o)for(var s=0;s>>e&hn;if(r>=this.array.length)return this;var i;if(e>0){var o=this.array[r];if(i=o&&o.removeAfter(t,e-cn,n),i===o&&r===this.array.length-1)return this}var u=Se(this,t);return u.array.splice(r+1),i&&(u.array[r]=i),u};var Yn,Bn={};t(be,Ut),be.of=function(){return this(arguments)},be.prototype.toString=function(){return this.__toString("OrderedMap {","}")},be.prototype.get=function(t,e){var n=this._map.get(t);return void 0!==n?this._list.get(n)[1]:e},be.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=0,this._map.clear(),this._list.clear(),this):Te()},be.prototype.set=function(t,e){return Ae(this,t,e)},be.prototype.remove=function(t){return Ae(this,t,ln)},be.prototype.wasAltered=function(){return this._map.wasAltered()||this._list.wasAltered()},be.prototype.__iterate=function(t,e){var n=this;return this._list.__iterate(function(e){return e&&t(e[1],e[0],n)},e)},be.prototype.__iterator=function(t,e){return this._list.fromEntrySeq().__iterator(t,e)},be.prototype.__ensureOwner=function(t){if(t===this.__ownerID)return this;var e=this._map.__ensureOwner(t),n=this._list.__ensureOwner(t);return t?we(e,n,t,this.__hash):(this.__ownerID=t,this._map=e,this._list=n,this)},be.isOrderedMap=Oe,be.prototype[Sn]=!0,be.prototype[sn]=be.prototype.remove;var Jn;t(De,B),De.of=function(){return this(arguments)},De.prototype.toString=function(){return this.__toString("Stack [","]")},De.prototype.get=function(t,e){var n=this._head;for(t=u(this,t);n&&t--;)n=n.next;return n?n.value:e},De.prototype.peek=function(){return this._head&&this._head.value},De.prototype.push=function(){var t=arguments;if(0===arguments.length)return this;for(var e=this.size+arguments.length,n=this._head,r=arguments.length-1;r>=0;r--)n={value:t[r],next:n};return this.__ownerID?(this.size=e,this._head=n,this.__hash=void 0,this.__altered=!0,this):ze(e,n)},De.prototype.pushAll=function(t){if(t=_(t),0===t.size)return this;at(t.size);var e=this.size,n=this._head;return t.reverse().forEach(function(t){e++,n={value:t,next:n}}),this.__ownerID?(this.size=e,this._head=n,this.__hash=void 0,this.__altered=!0,this):ze(e,n)},De.prototype.pop=function(){return this.slice(1)},De.prototype.unshift=function(){return this.push.apply(this,arguments)},De.prototype.unshiftAll=function(t){return this.pushAll(t)},De.prototype.shift=function(){return this.pop.apply(this,arguments)},De.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=0,this._head=void 0,this.__hash=void 0,this.__altered=!0,this):Re()},De.prototype.slice=function(t,e){if(s(t,e,this.size))return this;var n=c(t,this.size),r=f(e,this.size);if(r!==this.size)return B.prototype.slice.call(this,t,e);for(var i=this.size-n,o=this._head;n--;)o=o.next;return this.__ownerID?(this.size=i,this._head=o,this.__hash=void 0,this.__altered=!0,this):ze(i,o)},De.prototype.__ensureOwner=function(t){return t===this.__ownerID?this:t?ze(this.size,this._head,t,this.__hash):(this.__ownerID=t,this.__altered=!1,this)},De.prototype.__iterate=function(t,e){var n=this;if(e)return this.reverse().__iterate(t);for(var r=0,i=this._head;i&&t(i.value,r++,n)!==!1;)i=i.next;return r},De.prototype.__iterator=function(t,e){if(e)return this.reverse().__iterator(t);var n=0,r=this._head;return new E(function(){if(r){var e=r.value;return r=r.next,I(t,n++,e)}return b()})},De.isStack=Ce;var Wn="@@__IMMUTABLE_STACK__@@",Xn=De.prototype;Xn[Wn]=!0,Xn.withMutations=Pn.withMutations,Xn.asMutable=Pn.asMutable,Xn.asImmutable=Pn.asImmutable,Xn.wasAltered=Pn.wasAltered;var Qn;t(Le,J),Le.of=function(){return this(arguments)},Le.fromKeys=function(t){return this(p(t).keySeq())},Le.prototype.toString=function(){return this.__toString("Set {","}")},Le.prototype.has=function(t){return this._map.has(t)},Le.prototype.add=function(t){return je(this,this._map.set(t,!0))},Le.prototype.remove=function(t){return je(this,this._map.remove(t))},Le.prototype.clear=function(){return je(this,this._map.clear())},Le.prototype.union=function(){var t=an.call(arguments,0);return t=t.filter(function(t){return 0!==t.size}),0===t.length?this:0!==this.size||this.__ownerID||1!==t.length?this.withMutations(function(e){for(var n=0;n1?" by "+this._step:"")+" ]"},Be.prototype.get=function(t,e){return this.has(t)?this._start+u(this,t)*this._step:e},Be.prototype.includes=function(t){var e=(t-this._start)/this._step;return e>=0&&e=0&&nn?b():I(t,o++,u)})},Be.prototype.equals=function(t){return t instanceof Be?this._start===t._start&&this._end===t._end&&this._step===t._step:Ye(this,t)};var ir;t(Je,R),Je.prototype.toString=function(){return 0===this.size?"Repeat []":"Repeat [ "+this._value+" "+this.size+" times ]"},Je.prototype.get=function(t,e){return this.has(t)?this._value:e},Je.prototype.includes=function(t){return W(this._value,t)},Je.prototype.slice=function(t,e){var n=this.size;return s(t,e,n)?this:new Je(this._value,f(e,n)-c(t,n))},Je.prototype.reverse=function(){return this},Je.prototype.indexOf=function(t){return W(this._value,t)?0:-1},Je.prototype.lastIndexOf=function(t){return W(this._value,t)?this.size:-1},Je.prototype.__iterate=function(t,e){for(var n=this,r=0;rthis.size?e:this.find(function(e,n){return n===t},void 0,e)},has:function(t){return t=u(this,t),t>=0&&(void 0!==this.size?this.size===1/0||t-1&&t%1===0&&t<=Number.MAX_VALUE}var i=Function.prototype.bind;e.isString=function(t){return"string"==typeof t||"[object String]"===n(t)},e.isArray=Array.isArray||function(t){return"[object Array]"===n(t)},"function"!=typeof/./&&"object"!=typeof Int8Array?e.isFunction=function(t){return"function"==typeof t||!1}:e.isFunction=function(t){return"[object Function]"===toString.call(t)},e.isObject=function(t){var e=typeof t;return"function"===e||"object"===e&&!!t},e.extend=function(t){var e=arguments,n=arguments.length;if(!t||n<2)return t||{};for(var r=1;r0)){var e=this.reactorState.get("dirtyStores");if(0!==e.size){var n=c.default.Set().withMutations(function(n){n.union(t.observerState.get("any")),e.forEach(function(e){var r=t.observerState.getIn(["stores",e]);r&&n.union(r)})});n.forEach(function(e){var n=t.observerState.getIn(["observersMap",e]);if(n){var r=n.get("getter"),i=n.get("handler"),o=p.evaluate(t.prevReactorState,r),u=p.evaluate(t.reactorState,r);t.prevReactorState=o.reactorState,t.reactorState=u.reactorState;var a=o.result,s=u.result;c.default.is(a,s)||i.call(null,s)}});var r=p.resetDirtyStores(this.reactorState);this.prevReactorState=r,this.reactorState=r}}}},{key:"batchStart",value:function(){this.__batchDepth++}},{key:"batchEnd",value:function(){if(this.__batchDepth--,this.__batchDepth<=0){this.__isDispatching=!0;try{this.__notify()}catch(t){throw this.__isDispatching=!1,t}this.__isDispatching=!1}}}]),t}();e.default=(0,y.toFactory)(g),t.exports=e.default},function(t,e,n){function r(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function i(t,e){var n={};return(0,o.each)(e,function(e,r){n[r]=t.evaluate(e)}),n}Object.defineProperty(e,"__esModule",{value:!0});var o=n(4);e.default=function(t){return{getInitialState:function(){return i(t,this.getDataBindings())},componentDidMount:function(){var e=this;this.__unwatchFns=[],(0,o.each)(this.getDataBindings(),function(n,i){var o=t.observe(n,function(t){e.setState(r({},i,t))});e.__unwatchFns.push(o)})},componentWillUnmount:function(){for(var t=this;this.__unwatchFns.length;)t.__unwatchFns.shift()()}}},t.exports=e.default},function(t,e,n){function r(t){return t&&t.__esModule?t:{default:t}}function i(t,e){return new L({result:t,reactorState:e})}function o(t,e){return t.withMutations(function(t){(0,R.each)(e,function(e,n){t.getIn(["stores",n])&&console.warn("Store already defined for id = "+n);var r=e.getInitialState();if(void 0===r&&f(t,"throwOnUndefinedStoreReturnValue"))throw new Error("Store getInitialState() must return a value, did you forget a return statement");if(f(t,"throwOnNonImmutableStore")&&!(0,D.isImmutableValue)(r))throw new Error("Store getInitialState() must return an immutable value, did you forget to call toImmutable");t.update("stores",function(t){return t.set(n,e)}).update("state",function(t){return t.set(n,r)}).update("dirtyStores",function(t){return t.add(n)}).update("storeStates",function(t){return b(t,[n])})}),I(t)})}function u(t,e){return t.withMutations(function(t){(0,R.each)(e,function(e,n){t.update("stores",function(t){return t.set(n,e)})})})}function a(t,e,n){if(void 0===e&&f(t,"throwOnUndefinedActionType"))throw new Error("`dispatch` cannot be called with an `undefined` action type.");var r=t.get("state"),i=t.get("dirtyStores"),o=r.withMutations(function(r){A.default.dispatchStart(t,e,n),t.get("stores").forEach(function(o,u){var a=r.get(u),s=void 0;try{s=o.handle(a,e,n)}catch(e){throw A.default.dispatchError(t,e.message),e}if(void 0===s&&f(t,"throwOnUndefinedStoreReturnValue")){var c="Store handler must return a value, did you forget a return statement";throw A.default.dispatchError(t,c),new Error(c)}r.set(u,s),a!==s&&(i=i.add(u))}),A.default.dispatchEnd(t,r,i)}),u=t.set("state",o).set("dirtyStores",i).update("storeStates",function(t){return b(t,i)});return I(u)}function s(t,e){var n=[],r=(0,D.toImmutable)({}).withMutations(function(r){(0,R.each)(e,function(e,i){var o=t.getIn(["stores",i]);if(o){var u=o.deserialize(e);void 0!==u&&(r.set(i,u),n.push(i))}})}),i=w.default.Set(n);return t.update("state",function(t){return t.merge(r)}).update("dirtyStores",function(t){return t.union(i)}).update("storeStates",function(t){return b(t,n)})}function c(t,e,n){var r=e;(0,z.isKeyPath)(e)&&(e=(0,C.fromKeyPath)(e));var i=t.get("nextId"),o=(0,C.getStoreDeps)(e),u=w.default.Map({id:i,storeDeps:o,getterKey:r,getter:e,handler:n}),a=void 0;return a=0===o.size?t.update("any",function(t){return t.add(i)}):t.withMutations(function(t){o.forEach(function(e){var n=["stores",e];t.hasIn(n)||t.setIn(n,w.default.Set()),t.updateIn(["stores",e],function(t){return t.add(i)})})}),a=a.set("nextId",i+1).setIn(["observersMap",i],u),{observerState:a,entry:u}}function f(t,e){var n=t.getIn(["options",e]);if(void 0===n)throw new Error("Invalid option: "+e);return n}function h(t,e,n){var r=t.get("observersMap").filter(function(t){var r=t.get("getterKey"),i=!n||t.get("handler")===n;return!!i&&((0,z.isKeyPath)(e)&&(0,z.isKeyPath)(r)?(0,z.isEqual)(e,r):e===r)});return t.withMutations(function(t){r.forEach(function(e){return l(t,e)})})}function l(t,e){return t.withMutations(function(t){var n=e.get("id"),r=e.get("storeDeps");0===r.size?t.update("any",function(t){return t.remove(n)}):r.forEach(function(e){t.updateIn(["stores",e],function(t){return t?t.remove(n):t})}),t.removeIn(["observersMap",n])})}function p(t){var e=t.get("state");return t.withMutations(function(t){var n=t.get("stores"),r=n.keySeq().toJS();n.forEach(function(n,r){var i=e.get(r),o=n.handleReset(i);if(void 0===o&&f(t,"throwOnUndefinedStoreReturnValue"))throw new Error("Store handleReset() must return a value, did you forget a return statement");if(f(t,"throwOnNonImmutableStore")&&!(0,D.isImmutableValue)(o))throw new Error("Store reset state must be an immutable value, did you forget to call toImmutable");t.setIn(["state",r],o)}),t.update("storeStates",function(t){return b(t,r)}),v(t)})}function _(t,e){var n=t.get("state");if((0,z.isKeyPath)(e))return i(n.getIn(e),t);if(!(0,C.isGetter)(e))throw new Error("evaluate must be passed a keyPath or Getter");if(g(t,e))return i(E(t,e),t);var r=(0,C.getDeps)(e).map(function(e){return _(t,e).result}),o=(0,C.getComputeFn)(e).apply(null,r);return i(o,m(t,e,o))}function d(t){var e={};return t.get("stores").forEach(function(n,r){var i=t.getIn(["state",r]),o=n.serialize(i);void 0!==o&&(e[r]=o)}),e}function v(t){return t.set("dirtyStores",w.default.Set())}function y(t){return t}function S(t,e){var n=y(e);return t.getIn(["cache",n])}function g(t,e){var n=S(t,e);if(!n)return!1;var r=n.get("storeStates");return 0!==r.size&&r.every(function(e,n){return t.getIn(["storeStates",n])===e})}function m(t,e,n){var r=y(e),i=t.get("dispatchId"),o=(0,C.getStoreDeps)(e),u=(0,D.toImmutable)({}).withMutations(function(e){o.forEach(function(n){var r=t.getIn(["storeStates",n]);e.set(n,r)})});return t.setIn(["cache",r],w.default.Map({value:n,storeStates:u,dispatchId:i}))}function E(t,e){var n=y(e);return t.getIn(["cache",n,"value"])}function I(t){return t.update("dispatchId",function(t){return t+1})}function b(t,e){return t.withMutations(function(t){e.forEach(function(e){var n=t.has(e)?t.get(e)+1:1;t.set(e,n)})})}Object.defineProperty(e,"__esModule",{value:!0}),e.registerStores=o,e.replaceStores=u,e.dispatch=a,e.loadState=s,e.addObserver=c,e.getOption=f,e.removeObserver=h,e.removeObserverByEntry=l,e.reset=p,e.evaluate=_,e.serialize=d,e.resetDirtyStores=v;var O=n(3),w=r(O),T=n(9),A=r(T),D=n(5),C=n(10),z=n(11),R=n(4),L=w.default.Record({result:null,reactorState:null})},function(t,e,n){var r=n(8);e.dispatchStart=function(t,e,n){(0,r.getOption)(t,"logDispatches")&&console.group&&(console.groupCollapsed("Dispatch: %s",e),console.group("payload"),console.debug(n),console.groupEnd())},e.dispatchError=function(t,e){(0,r.getOption)(t,"logDispatches")&&console.group&&(console.debug("Dispatch error: "+e),console.groupEnd())},e.dispatchEnd=function(t,e,n){(0,r.getOption)(t,"logDispatches")&&console.group&&((0,r.getOption)(t,"logDirtyStores")&&console.log("Stores updated:",n.toList().toJS()),(0,r.getOption)(t,"logAppState")&&console.debug("Dispatch done, new state: ",e.toJS()),console.groupEnd())}},function(t,e,n){function r(t){return t&&t.__esModule?t:{default:t}}function i(t){return(0,l.isArray)(t)&&(0,l.isFunction)(t[t.length-1])}function o(t){return t[t.length-1]}function u(t){return t.slice(0,t.length-1)}function a(t,e){e||(e=h.default.Set());var n=h.default.Set().withMutations(function(e){if(!i(t))throw new Error("getFlattenedDeps must be passed a Getter");u(t).forEach(function(t){if((0,p.isKeyPath)(t))e.add((0,f.List)(t));else{if(!i(t))throw new Error("Invalid getter, each dependency must be a KeyPath or Getter");e.union(a(t))}})});return e.union(n)}function s(t){if(!(0,p.isKeyPath)(t))throw new Error("Cannot create Getter from KeyPath: "+t);return[t,_]}function c(t){if(t.hasOwnProperty("__storeDeps"))return t.__storeDeps;var e=a(t).map(function(t){return t.first()}).filter(function(t){return!!t});return Object.defineProperty(t,"__storeDeps",{enumerable:!1,configurable:!1,writable:!1,value:e}),e}Object.defineProperty(e,"__esModule",{value:!0});var f=n(3),h=r(f),l=n(4),p=n(11),_=function(t){return t};e.default={isGetter:i,getComputeFn:o,getFlattenedDeps:a,getStoreDeps:c,getDeps:u,fromKeyPath:s},t.exports=e.default},function(t,e,n){function r(t){return t&&t.__esModule?t:{default:t}}function i(t){return(0,s.isArray)(t)&&!(0,s.isFunction)(t[t.length-1])}function o(t,e){var n=a.default.List(t),r=a.default.List(e);return a.default.is(n,r)}Object.defineProperty(e,"__esModule",{value:!0}),e.isKeyPath=i,e.isEqual=o;var u=n(3),a=r(u),s=n(4)},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var r=n(3),i=(0,r.Map)({logDispatches:!1,logAppState:!1,logDirtyStores:!1,throwOnUndefinedActionType:!1,throwOnUndefinedStoreReturnValue:!1,throwOnNonImmutableStore:!1,throwOnDispatchInDispatch:!1});e.PROD_OPTIONS=i;var o=(0,r.Map)({logDispatches:!0,logAppState:!0,logDirtyStores:!0,throwOnUndefinedActionType:!0,throwOnUndefinedStoreReturnValue:!0,throwOnNonImmutableStore:!0,throwOnDispatchInDispatch:!0});e.DEBUG_OPTIONS=o;var u=(0,r.Record)({dispatchId:0,state:(0,r.Map)(),stores:(0,r.Map)(),cache:(0,r.Map)(),storeStates:(0,r.Map)(),dirtyStores:(0,r.Set)(),debug:!1,options:i});e.ReactorState=u;var a=(0,r.Record)({any:(0,r.Set)(),stores:(0,r.Map)({}),observersMap:(0,r.Map)({}),nextId:1});e.ObserverState=a}])})}),be=t(Ie),Oe=e(function(t){var e=function(t){var e,n={};if(!(t instanceof Object)||Array.isArray(t))throw new Error("keyMirror(...): Argument must be an object.");for(e in t)t.hasOwnProperty(e)&&(n[e]=e);return n};t.exports=e}),we=t(Oe),Te=we({VALIDATING_AUTH_TOKEN:null,VALID_AUTH_TOKEN:null,INVALID_AUTH_TOKEN:null,LOG_OUT:null}),Ae=be.Store,De=be.toImmutable,Ce=new Ae({getInitialState:function(){return De({isValidating:!1,authToken:!1,host:null,isInvalid:!1,errorMessage:""})},initialize:function(){this.on(Te.VALIDATING_AUTH_TOKEN,n),this.on(Te.VALID_AUTH_TOKEN,r),this.on(Te.INVALID_AUTH_TOKEN,i)}}),ze=be.Store,Re=be.toImmutable,Le=new ze({getInitialState:function(){return Re({authToken:null,host:""})},initialize:function(){this.on(Te.VALID_AUTH_TOKEN,o),this.on(Te.LOG_OUT,u)}}),Me=be.Store,je=new Me({getInitialState:function(){return!0},initialize:function(){this.on(Te.VALID_AUTH_TOKEN,a)}}),Ne=we({STREAM_START:null,STREAM_STOP:null,STREAM_ERROR:null}),ke="object"==typeof window&&"EventSource"in window,Ue=be.Store,He=be.toImmutable,Pe=new Ue({getInitialState:function(){return He({isSupported:ke,isStreaming:!1,useStreaming:!0,hasError:!1})},initialize:function(){this.on(Ne.STREAM_START,s),this.on(Ne.STREAM_STOP,c),this.on(Ne.STREAM_ERROR,f),this.on(Ne.LOG_OUT,h)}}),xe=we({API_FETCH_ALL_START:null,API_FETCH_ALL_SUCCESS:null,API_FETCH_ALL_FAIL:null,SYNC_SCHEDULED:null,SYNC_SCHEDULE_CANCELLED:null}),Ve=be.Store,qe=new Ve({getInitialState:function(){return!0},initialize:function(){this.on(xe.API_FETCH_ALL_START,function(){return!0}),this.on(xe.API_FETCH_ALL_SUCCESS,function(){return!1}),this.on(xe.API_FETCH_ALL_FAIL,function(){return!1}),this.on(xe.LOG_OUT,function(){return!1})}}),Fe=be.Store,Ge=new Fe({getInitialState:function(){return!1},initialize:function(){this.on(xe.SYNC_SCHEDULED,function(){return!0}),this.on(xe.SYNC_SCHEDULE_CANCELLED,function(){return!1}),this.on(xe.LOG_OUT,function(){return!1})}}),Ke=we({API_FETCH_SUCCESS:null,API_FETCH_START:null,API_FETCH_FAIL:null,API_SAVE_SUCCESS:null,API_SAVE_START:null,API_SAVE_FAIL:null,API_DELETE_SUCCESS:null,API_DELETE_START:null,API_DELETE_FAIL:null,LOG_OUT:null}),Ye=be.Store,Be=be.toImmutable,Je=new Ye({getInitialState:function(){return Be({})},initialize:function(){var t=this;this.on(Ke.API_FETCH_SUCCESS,l),this.on(Ke.API_SAVE_SUCCESS,l),this.on(Ke.API_DELETE_SUCCESS,p),this.on(Ke.LOG_OUT,function(){return t.getInitialState()})}}),We=e(function(t){function e(t){if(null===t||void 0===t)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(t)}function n(){try{if(!Object.assign)return!1;var t=new String("abc");if(t[5]="de","5"===Object.getOwnPropertyNames(t)[0])return!1;for(var e={},n=0;n<10;n++)e["_"+String.fromCharCode(n)]=n;var r=Object.getOwnPropertyNames(e).map(function(t){return e[t]});if("0123456789"!==r.join(""))return!1;var i={};return"abcdefghijklmnopqrst".split("").forEach(function(t){i[t]=t}),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},i)).join("")}catch(t){return!1}}var r=Object.prototype.hasOwnProperty,i=Object.prototype.propertyIsEnumerable;t.exports=n()?Object.assign:function(t,n){for(var o,u,a=arguments,s=e(t),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 J4bqgj0RT&HiiH3G delta 30475 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 S?soVB!tg)62HeC>xB&oz{8p6! diff --git a/homeassistant/components/frontend/www_static/frontend.html b/homeassistant/components/frontend/www_static/frontend.html index ce85cdc4f52..cd17014be89 100644 --- a/homeassistant/components/frontend/www_static/frontend.html +++ b/homeassistant/components/frontend/www_static/frontend.html @@ -2,4 +2,4 @@ },_distributeDirtyRoots:function(){for(var e,t=this.shadyRoot._dirtyRoots,o=0,i=t.length;o0?~setTimeout(e,t):(this._twiddle.textContent=this._twiddleContent++,this._callbacks.push(e),this._currVal++)},cancel:function(e){if(e<0)clearTimeout(~e);else{var t=e-this._lastVal;if(t>=0){if(!this._callbacks[t])throw"invalid async handle: "+e;this._callbacks[t]=null}}},_atEndOfMicrotask:function(){for(var e=this._callbacks.length,t=0;t \ No newline at end of file +this.currentTarget=t,this.defaultPrevented=!1,this.eventPhase=Event.AT_TARGET,this.timeStamp=Date.now()},i=window.Element.prototype.animate;window.Element.prototype.animate=function(n,r){var o=i.call(this,n,r);o._cancelHandlers=[],o.oncancel=null;var a=o.cancel;o.cancel=function(){a.call(this);var i=new e(this,null,t()),n=this._cancelHandlers.concat(this.oncancel?[this.oncancel]:[]);setTimeout(function(){n.forEach(function(t){t.call(i.target,i)})},0)};var s=o.addEventListener;o.addEventListener=function(t,e){"function"==typeof e&&"cancel"==t?this._cancelHandlers.push(e):s.call(this,t,e)};var u=o.removeEventListener;return o.removeEventListener=function(t,e){if("cancel"==t){var i=this._cancelHandlers.indexOf(e);i>=0&&this._cancelHandlers.splice(i,1)}else u.call(this,t,e)},o}}}(),function(t){var e=document.documentElement,i=null,n=!1;try{var r=getComputedStyle(e).getPropertyValue("opacity"),o="0"==r?"1":"0";i=e.animate({opacity:[o,o]},{duration:1}),i.currentTime=0,n=getComputedStyle(e).getPropertyValue("opacity")==o}catch(t){}finally{i&&i.cancel()}if(!n){var a=window.Element.prototype.animate;window.Element.prototype.animate=function(e,i){return window.Symbol&&Symbol.iterator&&Array.prototype.from&&e[Symbol.iterator]&&(e=Array.from(e)),Array.isArray(e)||null===e||(e=t.convertToArrayForm(e)),a.call(this,e,i)}}}(c),!function(t,e,i){function n(t){var i=e.timeline;i.currentTime=t,i._discardAnimations(),0==i._animations.length?o=!1:requestAnimationFrame(n)}var r=window.requestAnimationFrame;window.requestAnimationFrame=function(t){return r(function(i){e.timeline._updateAnimationsPromises(),t(i),e.timeline._updateAnimationsPromises()})},e.AnimationTimeline=function(){this._animations=[],this.currentTime=void 0},e.AnimationTimeline.prototype={getAnimations:function(){return this._discardAnimations(),this._animations.slice()},_updateAnimationsPromises:function(){e.animationsWithPromises=e.animationsWithPromises.filter(function(t){return t._updatePromises()})},_discardAnimations:function(){this._updateAnimationsPromises(),this._animations=this._animations.filter(function(t){return"finished"!=t.playState&&"idle"!=t.playState})},_play:function(t){var i=new e.Animation(t,this);return this._animations.push(i),e.restartWebAnimationsNextTick(),i._updatePromises(),i._animation.play(),i._updatePromises(),i},play:function(t){return t&&t.remove(),this._play(t)}};var o=!1;e.restartWebAnimationsNextTick=function(){o||(o=!0,requestAnimationFrame(n))};var a=new e.AnimationTimeline;e.timeline=a;try{Object.defineProperty(window.document,"timeline",{configurable:!0,get:function(){return a}})}catch(t){}try{window.document.timeline=a}catch(t){}}(c,e,f),function(t,e,i){e.animationsWithPromises=[],e.Animation=function(e,i){if(this.id="",e&&e._id&&(this.id=e._id),this.effect=e,e&&(e._animation=this),!i)throw new Error("Animation with null timeline is not supported");this._timeline=i,this._sequenceNumber=t.sequenceNumber++,this._holdTime=0,this._paused=!1,this._isGroup=!1,this._animation=null,this._childAnimations=[],this._callback=null,this._oldPlayState="idle",this._rebuildUnderlyingAnimation(),this._animation.cancel(),this._updatePromises()},e.Animation.prototype={_updatePromises:function(){var t=this._oldPlayState,e=this.playState;return this._readyPromise&&e!==t&&("idle"==e?(this._rejectReadyPromise(),this._readyPromise=void 0):"pending"==t?this._resolveReadyPromise():"pending"==e&&(this._readyPromise=void 0)),this._finishedPromise&&e!==t&&("idle"==e?(this._rejectFinishedPromise(),this._finishedPromise=void 0):"finished"==e?this._resolveFinishedPromise():"finished"==t&&(this._finishedPromise=void 0)),this._oldPlayState=this.playState,this._readyPromise||this._finishedPromise},_rebuildUnderlyingAnimation:function(){this._updatePromises();var t,i,n,r,o=!!this._animation;o&&(t=this.playbackRate,i=this._paused,n=this.startTime,r=this.currentTime,this._animation.cancel(),this._animation._wrapper=null,this._animation=null),(!this.effect||this.effect instanceof window.KeyframeEffect)&&(this._animation=e.newUnderlyingAnimationForKeyframeEffect(this.effect),e.bindAnimationForKeyframeEffect(this)),(this.effect instanceof window.SequenceEffect||this.effect instanceof window.GroupEffect)&&(this._animation=e.newUnderlyingAnimationForGroup(this.effect),e.bindAnimationForGroup(this)),this.effect&&this.effect._onsample&&e.bindAnimationForCustomEffect(this),o&&(1!=t&&(this.playbackRate=t),null!==n?this.startTime=n:null!==r?this.currentTime=r:null!==this._holdTime&&(this.currentTime=this._holdTime),i&&this.pause()),this._updatePromises()},_updateChildren:function(){if(this.effect&&"idle"!=this.playState){var t=this.effect._timing.delay;this._childAnimations.forEach(function(i){this._arrangeChildren(i,t),this.effect instanceof window.SequenceEffect&&(t+=e.groupChildDuration(i.effect))}.bind(this))}},_setExternalAnimation:function(t){if(this.effect&&this._isGroup)for(var e=0;e \ No newline at end of file diff --git a/homeassistant/components/frontend/www_static/frontend.html.gz b/homeassistant/components/frontend/www_static/frontend.html.gz index 5997604af41f092d714acb6e8488377585485860..41c7c071ac75a40a401361571b9fd1358c21cd49 100644 GIT binary patch delta 11904 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 Gl?MQa&PeJ2 delta 11500 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 diff --git a/homeassistant/components/frontend/www_static/home-assistant-polymer b/homeassistant/components/frontend/www_static/home-assistant-polymer index 474366c536e..af4af1e9332 160000 --- a/homeassistant/components/frontend/www_static/home-assistant-polymer +++ b/homeassistant/components/frontend/www_static/home-assistant-polymer @@ -1 +1 @@ -Subproject commit 474366c536ec3e471da12d5f15b07b79fe9b07e2 +Subproject commit af4af1e9332afef90d25d61589840d239baf7ded diff --git a/homeassistant/components/frontend/www_static/manifest.json b/homeassistant/components/frontend/www_static/manifest.json deleted file mode 100644 index 4cd13ad5470..00000000000 --- a/homeassistant/components/frontend/www_static/manifest.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "name": "Home Assistant", - "short_name": "Assistant", - "start_url": "/", - "display": "standalone", - "theme_color": "#03A9F4", - "background_color": "#FFFFFF", - "icons": [ - { - "src": "/static/icons/favicon-192x192.png", - "sizes": "192x192", - "type": "image/png" - }, - { - "src": "/static/icons/favicon-384x384.png", - "sizes": "384x384", - "type": "image/png" - }, - { - "src": "/static/icons/favicon-512x512.png", - "sizes": "512x512", - "type": "image/png" - }, - { - "src": "/static/icons/favicon-1024x1024.png", - "sizes": "1024x1024", - "type": "image/png" - } - ] -} diff --git a/homeassistant/components/frontend/www_static/service_worker.js b/homeassistant/components/frontend/www_static/service_worker.js index d3a04d4e9b3..40e47f06969 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)})}var precacheConfig=[["/","a463cb982f337e09c3ed47c41b2d9dda"],["/frontend/panels/dev-event-3cc881ae8026c0fba5aa67d334a3ab2b.html","e22ed0d2d10777c87eb9620d81f525b4"],["/frontend/panels/dev-info-34e2df1af32e60fffcafe7e008a92169.html","7e939dc762dc0c0ec769db4ea76a4b09"],["/frontend/panels/dev-service-bb5c587ada694e0fd42ceaaedd6fe6aa.html","782c4860c5e8ab274231ba9dfd528f29"],["/frontend/panels/dev-state-4608326978256644c42b13940c028e0a.html","26758b741ac1b7c8e9cfcb24762d8774"],["/frontend/panels/dev-template-0a099d4589636ed3038a3e9f020468a7.html","99114026cf9193263c74cc25f9f6a469"],["/frontend/panels/map-af7d04aff7dd5479c5a0016bc8d4dd7d.html","6031df1b4d23d5b321208449b2d293f8"],["/static/core-457d5acd123e7dc38947c07984b3a5e8.js","69e2a5b421d7ed7a7e70390cd9ced80e"],["/static/frontend-829ee7cb591b8a63d7f22948a7aeb07a.html","2afa980f1c1fdf9e596580112ac8e51a"],["/static/mdi-b399b5d3798f5b68b0a4fbaae3432d48.html","819d479ae2b690589687469045b22c26"],["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","b0f32ad3c7749c40d486603f31c9d8b1"]],cacheName="sw-precache-v2--"+(self.registration?self.registration.scope:""),ignoreUrlParametersMatching=[/^utm_/],addDirectoryIndex=function(e,t){var a=new URL(e);return"/"===a.pathname.slice(-1)&&(a.pathname+=t),a.toString()},createCacheKey=function(e,t,a,n){var c=new URL(e);return n&&c.toString().match(n)||(c.search+=(c.search?"&":"")+encodeURIComponent(t)+"="+encodeURIComponent(a)),c.toString()},isPathWhitelisted=function(e,t){if(0===e.length)return!0;var a=new URL(t).pathname;return e.some(function(e){return a.match(e)})},stripIgnoredUrlParameters=function(e,t){var a=new URL(e);return a.search=a.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("&"),a.toString()},hashParamName="_sw-precache",urlsToCacheKeys=new Map(precacheConfig.map(function(e){var t=e[0],a=e[1],n=new URL(t,self.location),c=createCacheKey(n,hashParamName,a,!1);return[n.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(a){if(!t.has(a))return e.add(new Request(a,{credentials:"same-origin"}))}))})}).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(a){return Promise.all(a.map(function(a){if(!t.has(a.url))return e.delete(a)}))})}).then(function(){return self.clients.claim()}))}),self.addEventListener("fetch",function(e){if("GET"===e.request.method){var t,a=stripIgnoredUrlParameters(e.request.url,ignoreUrlParametersMatching);t=urlsToCacheKeys.has(a);var n="index.html";!t&&n&&(a=addDirectoryIndex(a,n),t=urlsToCacheKeys.has(a));var c="/";!t&&c&&"navigate"===e.request.mode&&isPathWhitelisted(["^((?!(static|api|local|service_worker.js)).)*$"],e.request.url)&&(a=new URL(c,self.location).toString(),t=urlsToCacheKeys.has(a)),t&&e.respondWith(caches.open(cacheName).then(function(e){return e.match(urlsToCacheKeys.get(a))}).catch(function(t){return console.warn('Couldn\'t serve response for "%s" from cache: %O',e.request.url,t),fetch(e.request)}))}}); \ No newline at end of file +"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)})}var precacheConfig=[["/","9a5d0507bd1f13e3eca6b35abd4cbebb"],["/frontend/panels/dev-event-3cc881ae8026c0fba5aa67d334a3ab2b.html","e22ed0d2d10777c87eb9620d81f525b4"],["/frontend/panels/dev-info-34e2df1af32e60fffcafe7e008a92169.html","7e939dc762dc0c0ec769db4ea76a4b09"],["/frontend/panels/dev-service-bb5c587ada694e0fd42ceaaedd6fe6aa.html","782c4860c5e8ab274231ba9dfd528f29"],["/frontend/panels/dev-state-4608326978256644c42b13940c028e0a.html","26758b741ac1b7c8e9cfcb24762d8774"],["/frontend/panels/dev-template-0a099d4589636ed3038a3e9f020468a7.html","99114026cf9193263c74cc25f9f6a469"],["/frontend/panels/map-af7d04aff7dd5479c5a0016bc8d4dd7d.html","6031df1b4d23d5b321208449b2d293f8"],["/static/core-b4ee3a700ef5549a36b436611e27d3a9.js","e2fb4f1dc0d1e8192a327b51768b3802"],["/static/frontend-411fcc6c69b3cab0740ac3db4b9947c8.html","5967b9cdaeb14753552c2461805eb397"],["/static/mdi-b399b5d3798f5b68b0a4fbaae3432d48.html","819d479ae2b690589687469045b22c26"],["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","b0f32ad3c7749c40d486603f31c9d8b1"]],cacheName="sw-precache-v2--"+(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()},createCacheKey=function(e,t,n,a){var c=new URL(e);return a&&c.toString().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))return e.add(new Request(n,{credentials:"same-origin"}))}))})}).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);var a="index.html";!t&&a&&(n=addDirectoryIndex(n,a),t=urlsToCacheKeys.has(n));var c="/";!t&&c&&"navigate"===e.request.mode&&isPathWhitelisted(["^((?!(static|api|local|service_worker.js|manifest.json)).)*$"],e.request.url)&&(n=new URL(c,self.location).toString(),t=urlsToCacheKeys.has(n)),t&&e.respondWith(caches.open(cacheName).then(function(e){return e.match(urlsToCacheKeys.get(n))}).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)))}),self.addEventListener("notificationclick",function(e){var t;e.notification.data&&e.notification.data.url&&(e.notification.close(),t=e.notification.data.url,t&&e.waitUntil(clients.matchAll({type:"window"}).then(function(e){var n,a;for(n=0;n<<(saSpt-a~W+K*c3esQmqS%Ce}RBZ^+*9N+E<42Huftxmrl5PP$+-*2muvDw# zFV;=h6Qyol1Mhea{iFVQ~6T%3lDVGAHW(ANtKP=1BLg#`i zLp1^i(m11;=#N*LTIKhazenRsgR0iTJS8R6d1Bh$>ei8u*+%TDCXQ!D5zwL zvs|Y%&kD_vng@1w2bc&-oiUloq~=Cxk_(~?N4jV!1wy@xI+aj(~XJHGK zOB$G$sA8&Dl$Vd5B(14e@FEDJxSV^eQ53azszHk#H0@i}nMLVQU(SDDcgxH3i&$Cv zj}rZKb#wFDTliykFIRCFeeK1`&w9Q3@cs?z)pVm^C{MH5%qJ_=Ej(IJ+6wz~IHA#a z9Ns@Zn{`p_ldk?1b=S|s=v!wF>? z(J&RA^!2$e{m#|q9z%P;pM`1{0|uKix!kLhAjY|?{jJ`Ss~ymIi{1{$t49I!&~>vu zz}Vx3Vp-g0E*^@ks?AVf$dB0}g+p~16SDXj-J$9HjxUIXFoDXu2tE6@LgGj!wK31>)VHSjpFo-`FOH@u=FlNqjyccEL%v>efVS3 zsG9_3co{xGGr3aL8gL?hkU>9G0j3#Y=quEGC)xHQ? zjDJ!$<-GI(0yF$P8k+acgRr$<%GF0iWJ892Lwo{Gh1;(%O^0}HGQAtWPabgkf8c)N zyTKnt+dlF24hn1MD`3IAIjQKY#iy7+PDi$zOtP zXHnZNh*&8nJ5zYS2aoWS5=GN)_Am<@8VwCp&9E#`lr}Tj^jS9^t6pGck7O(CwIe=d zY-7#LP__mmW;_l&&J6ROActo}Nf?hGb^Y*D@Ov1(d=_qm{#LEZ+rA}Kx7$yX%j>%N z0u4(2?Na&D^|n5@*e{|a`s-hCMmT_EP|3R%V;;1a{g!d^L@^$tx7ng}*^gzn_}_WD zQJIJK=P>9X^2-eGkMxUv=Blf{Mj9VJe^sw5>;L_{8}(SgXcH5DY`eM{1wXXGsP87D zA*2_hAAWg$hy`j_JTUN{H3MBw^L4du7e~q(i`J^H=Lh!k;daOXg1BGJM@FVaef@LY zm9E_2AEIEDUDb=~Q&r>lwqUiHFULdLU$%|!$ip584E(_xQ`IdDBsj5ULxR0lwXOOg zvp-^g`P$v|Ot6?7T6 u+N@hF&5_!*CzTA(!f1*+c472X{5ZJYEqnYX9I}nS)Bgh1c&Hko5dZ)>6XA^j literal 1832 zcmV+@2iN!?iwFo6QLk4519N3^c4=c}Uw3bEYh`jSYI6XkS8Z?G$PxZ43ej`OhNAb4 z%lb%CarnO0FmnhlIF%X6BifXBeIL zIO~V5azk_y&KoyWZ8Pg}_&K};w?hBEtNR#}&m9iuT{FY%6JGUkk_{_t;@t~-2iCB8 z{K0uwe@(s~ezn2N*)KTIFLdkzy4j{fH#+gMZ9=tNeEb+4M`;AAkj@${f|MmP<0N`j zI>oK<#(RiPQ#u&Bwi&ST#~Wy{?vFiQ%<%%7VJ@B1ngePk3de$l9H1z@lnNwRVYAh+ zuE`Dxfu4EcIV;Q3=@P9e1oN7QT;x_Awo^5solAwn2M$3BELaG^K|u1CX)uBpW@n~E zBaL@uA-rRbA>A2o6+&5nvdkPd(_?p0Ihi$W=*zQH+Do(=GvBugX5Nn zL*s(8LX9Envit^d1FkpqXo>+d#;aVLLKf&HlNuzNzywo;hH_`h7|zw0$6&Z2-=r&* zb0QBW5PQXekf=iE5K7M!1iJWKmB!`37%!~TUU^^oorQu)PHD8t3+Zz!1s6;!WvJMM zkwI@Qj09Eg*tH$el$SmS=edwrdMCA^>SU$S%1R*Wv)}s>*PsBZBEfx$zJwA>CJl4m zIP{v~9_}uHxfTYobT&8KYAB>HgAhg$BY>8bw<&-CMzg>j4?Y;oO_6KHxd2K>&S4LI z?W?(!#@O6Tax>(%(3XLs)&P`B3a|7ISaV8CX#j;S3>)*KOX8WS+zR1DF#+$qCa3%3 zuC?vZ9>1F|^S`&X&xRool$XL#D_W_Fq70NrFu4)}06e#>kl%xPT`gC`HCAc!V6_fh zSag~z85l#st&>7f#?<$)-k`6}*VkYHxkSZFR&wJ+px!ES#*v1A^+?#?1AB+d^BTHq zG;lJMRLr@x5OQvc0G8)qwMVTacX!b$*EaoefQ#{F&W-qk{<2N8Bpk(!VbW@%h#aDN z5j4QKwP+}>yvz^cWb_}svV>!Bp8IEICmJ4<HE>34 zd4=7XU0!uMm4sG4mXSVr>^ zJoRm%ZgMCMn!q? z;Fqj-?FOGmQIb~6hI*7l?JabKIAGVmfx)e+hV!Ng7SO3oU?&dmI zJjwbEm1s;%C5Km;>obdJ+-E{nljX+_4jHW+-PP@*VfW|>O)l(d*ZIg!lW8kDXzTa3 zYIdf!_vG5W`dLB0nmE|D$=RJgiBj6T`d`~!arF}$Z^+vIdiB78k-A|qI+y}o_-WeQ zW-gtYtZv=ZU{oKA{SuCweV?d`pYR>~ADcVQr|$G?lAKI<)OSCPJKF29s2bulsu~(1 zH7UlS0_t<5jrd*$Vd?@(Gtn@1&`mli#(1Rh9scKhtN=(q6Lp@VuAuIpM?LvJZ@X$) zH4zar{d=%9--(B4>pxYS55&l}7{(XU19SqtenDy4=X0Cs-THknz?1)j_XFPz@F?5x zEh@*)h&yz8tf}wm%%363)zzp$bcJgD9jXG-wAts0yomns)34Dq+PZE2G8#Lp)?brI zopNw8#kcQJ2;Wko1XF?yVBeWK6n&~~%vhd!E(^J6x-^nCWi&rkQcAhk-T Wn!Bx&sX)IbC;tV!yL(}!4*&qP>7qdZ diff --git a/homeassistant/components/notify/__init__.py b/homeassistant/components/notify/__init__.py index 4b73c46b198..782a4510ffb 100644 --- a/homeassistant/components/notify/__init__.py +++ b/homeassistant/components/notify/__init__.py @@ -13,9 +13,9 @@ import voluptuous as vol import homeassistant.bootstrap as bootstrap from homeassistant.config import load_yaml_config_file from homeassistant.helpers import config_per_platform, template -from homeassistant.helpers.config_validation import PLATFORM_SCHEMA # noqa import homeassistant.helpers.config_validation as cv -from homeassistant.const import CONF_NAME +from homeassistant.const import CONF_NAME, CONF_PLATFORM +from homeassistant.util import slugify DOMAIN = "notify" @@ -34,6 +34,11 @@ ATTR_DATA = 'data' SERVICE_NOTIFY = "notify" +PLATFORM_SCHEMA = vol.Schema({ + vol.Required(CONF_PLATFORM): cv.string, + vol.Optional(CONF_NAME): cv.string, +}, extra=vol.ALLOW_EXTRA) + NOTIFY_SERVICE_SCHEMA = vol.Schema({ vol.Required(ATTR_MESSAGE): cv.template, vol.Optional(ATTR_TITLE, default=ATTR_TITLE_DEFAULT): cv.string, @@ -95,8 +100,8 @@ def setup(hass, config): data=data) service_call_handler = partial(notify_message, notify_service) - service_notify = p_config.get(CONF_NAME, SERVICE_NOTIFY) - hass.services.register(DOMAIN, service_notify, service_call_handler, + service_name = slugify(p_config.get(CONF_NAME) or SERVICE_NOTIFY) + hass.services.register(DOMAIN, service_name, service_call_handler, descriptions.get(SERVICE_NOTIFY), schema=NOTIFY_SERVICE_SCHEMA) success = True diff --git a/homeassistant/components/notify/html5.py b/homeassistant/components/notify/html5.py new file mode 100644 index 00000000000..70ab9580a04 --- /dev/null +++ b/homeassistant/components/notify/html5.py @@ -0,0 +1,173 @@ +""" +HTML5 Push Messaging notification service. + +For more details about this platform, please refer to the documentation at +https://home-assistant.io/components/notify.html5/ +""" +import os +import logging +import json + +import voluptuous as vol +from voluptuous.humanize import humanize_error + +from homeassistant.const import ( + HTTP_BAD_REQUEST, HTTP_INTERNAL_SERVER_ERROR) +from homeassistant.util import ensure_unique_string +from homeassistant.components.notify import ( + ATTR_TARGET, ATTR_DATA, BaseNotificationService, + PLATFORM_SCHEMA) +from homeassistant.components.http import HomeAssistantView +from homeassistant.components.frontend import add_manifest_json_key +from homeassistant.helpers import config_validation as cv + +REQUIREMENTS = ['https://github.com/web-push-libs/pywebpush/archive/' + 'e743dc92558fc62178d255c0018920d74fa778ed.zip#' + 'pywebpush==0.5.0'] + +DEPENDENCIES = ["frontend"] + +_LOGGER = logging.getLogger(__name__) + +REGISTRATIONS_FILE = "html5_push_registrations.conf" + +ATTR_GCM_SENDER_ID = 'gcm_sender_id' +ATTR_GCM_API_KEY = 'gcm_api_key' + +PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ + vol.Optional(ATTR_GCM_SENDER_ID): cv.string, + vol.Optional(ATTR_GCM_API_KEY): cv.string, +}) + +ATTR_SUBSCRIPTION = 'subscription' +ATTR_BROWSER = 'browser' + +REGISTER_SCHEMA = vol.Schema({ + vol.Required(ATTR_SUBSCRIPTION): cv.match_all, + vol.Required(ATTR_BROWSER): vol.In(['chrome', 'firefox']) +}) + + +def get_service(hass, config): + """Get the HTML5 push notification service.""" + json_path = hass.config.path(REGISTRATIONS_FILE) + + registrations = _load_config(json_path) + + if registrations is None: + return None + + hass.wsgi.register_view( + HTML5PushRegistrationView(hass, registrations, json_path)) + + gcm_api_key = config.get('gcm_api_key') + gcm_sender_id = config.get('gcm_sender_id') + + if gcm_sender_id is not None: + add_manifest_json_key('gcm_sender_id', config.get('gcm_sender_id')) + + return HTML5NotificationService(gcm_api_key, registrations) + + +def _load_config(filename): + """Load configuration.""" + if not os.path.isfile(filename): + return {} + + try: + with open(filename, "r") as fdesc: + inp = fdesc.read() + + # In case empty file + if not inp: + return {} + + return json.loads(inp) + except (IOError, ValueError) as error: + _LOGGER.error("Reading config file %s failed: %s", filename, error) + return None + + +def _save_config(filename, config): + """Save configuration.""" + try: + with open(filename, "w") as fdesc: + fdesc.write(json.dumps(config, indent=4, sort_keys=True)) + except (IOError, TypeError) as error: + _LOGGER.error("Saving config file failed: %s", error) + return False + return True + + +class HTML5PushRegistrationView(HomeAssistantView): + """Accepts push registrations from a browser.""" + + url = "/api/notify.html5" + name = "api:notify.html5" + + def __init__(self, hass, registrations, json_path): + """Init HTML5PushRegistrationView.""" + super().__init__(hass) + self.registrations = registrations + self.json_path = json_path + + def post(self, request): + """Accept the POST request for push registrations from a browser.""" + try: + data = REGISTER_SCHEMA(request.json) + except vol.Invalid as ex: + return self.json_message(humanize_error(request.json, ex), + HTTP_BAD_REQUEST) + + name = ensure_unique_string('unnamed device', + self.registrations.keys()) + + self.registrations[name] = data + + if not _save_config(self.json_path, self.registrations): + return self.json_message('Error saving registration.', + HTTP_INTERNAL_SERVER_ERROR) + + return self.json_message("Push notification subscriber registered.") + + +# pylint: disable=too-few-public-methods +class HTML5NotificationService(BaseNotificationService): + """Implement the notification service for HTML5.""" + + # pylint: disable=too-many-arguments + def __init__(self, gcm_key, registrations): + """Initialize the service.""" + self._gcm_key = gcm_key + self.registrations = registrations + + def send_message(self, message="", **kwargs): + """Send a message to a user.""" + from pywebpush import WebPusher + + payload = { + 'title': message, + 'icon': '/static/icons/favicon-192x192.png', + } + + data = kwargs.get(ATTR_DATA) + + if data: + payload.update(data) + + targets = kwargs.get(ATTR_TARGET) + + if not targets: + targets = self.registrations.keys() + elif not isinstance(targets, list): + targets = [targets] + + for target in targets: + info = self.registrations.get(target) + if info is None: + _LOGGER.error("%s is not a valid HTML5 push notification" + " target!", target) + continue + + WebPusher(info[ATTR_SUBSCRIPTION]).send( + json.dumps(payload), gcm_key=self._gcm_key, ttl='0') diff --git a/requirements_all.txt b/requirements_all.txt index e2be50c8f4d..4c1078c1968 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -181,6 +181,9 @@ https://github.com/theolind/pymysensors/archive/cc5d0b325e13c2b623fa934f69eea7cd # homeassistant.components.alarm_control_panel.simplisafe https://github.com/w1ll1am23/simplisafe-python/archive/586fede0e85fd69e56e516aaa8e97eb644ca8866.zip#simplisafe-python==0.0.1 +# homeassistant.components.notify.html5 +https://github.com/web-push-libs/pywebpush/archive/e743dc92558fc62178d255c0018920d74fa778ed.zip#pywebpush==0.5.0 + # homeassistant.components.media_player.lg_netcast https://github.com/wokar/pylgnetcast/archive/v0.2.0.zip#pylgnetcast==0.2.0 diff --git a/script/build_frontend b/script/build_frontend index da484a943b0..a00f89f1eea 100755 --- a/script/build_frontend +++ b/script/build_frontend @@ -10,7 +10,7 @@ npm run frontend_prod cp bower_components/webcomponentsjs/webcomponents-lite.min.js .. cp -r build/* .. -node script/sw-precache.js +BUILD_DEV=0 node script/gen-service-worker.js cp build/service_worker.js .. cd .. diff --git a/tests/components/notify/test_html5.py b/tests/components/notify/test_html5.py new file mode 100644 index 00000000000..b562775d32e --- /dev/null +++ b/tests/components/notify/test_html5.py @@ -0,0 +1,145 @@ +"""Test HTML5 notify platform.""" +import json +import tempfile +from unittest.mock import patch, MagicMock + +from werkzeug.test import EnvironBuilder + +from homeassistant.components.http import request_class +from homeassistant.components.notify import html5 + + +class TestHtml5Notify(object): + """Tests for HTML5 notify platform.""" + + def test_get_service_with_no_json(self): + """Test empty json file.""" + hass = MagicMock() + + with tempfile.NamedTemporaryFile() as fp: + hass.config.path.return_value = fp.name + service = html5.get_service(hass, {}) + + assert service is not None + + def test_get_service_with_bad_json(self): + """Test .""" + hass = MagicMock() + + with tempfile.NamedTemporaryFile() as fp: + fp.write('I am not JSON'.encode('utf-8')) + fp.flush() + hass.config.path.return_value = fp.name + service = html5.get_service(hass, {}) + + assert service is None + + @patch('pywebpush.WebPusher') + def test_sending_message(self, mock_wp): + """Test sending message.""" + hass = MagicMock() + + data = { + 'device': { + 'browser': 'chrome', + 'subscription': 'hello world', + } + } + + with tempfile.NamedTemporaryFile() as fp: + fp.write(json.dumps(data).encode('utf-8')) + fp.flush() + hass.config.path.return_value = fp.name + service = html5.get_service(hass, {'gcm_sender_id': '100'}) + + assert service is not None + + service.send_message('Hello', target=['device', 'non_existing'], + data={'icon': 'beer.png'}) + + assert len(mock_wp.mock_calls) == 2 + + # WebPusher constructor + assert mock_wp.mock_calls[0][1][0] == 'hello world' + + # Call to send + payload = json.loads(mock_wp.mock_calls[1][1][0]) + + assert payload['title'] == 'Hello' + assert payload['icon'] == 'beer.png' + + def test_registering_new_device_view(self): + """Test that the HTML view works.""" + hass = MagicMock() + + with tempfile.NamedTemporaryFile() as fp: + hass.config.path.return_value = fp.name + fp.close() + service = html5.get_service(hass, {}) + + assert service is not None + + # assert hass.called + assert len(hass.mock_calls) == 2 + + view = hass.mock_calls[1][1][0] + assert view.json_path == fp.name + assert view.registrations == {} + + builder = EnvironBuilder(method='POST', data=json.dumps({ + 'browser': 'chrome', + 'subscription': 'sub info', + })) + Request = request_class() + resp = view.post(Request(builder.get_environ())) + + expected = { + 'unnamed device': { + 'browser': 'chrome', + 'subscription': 'sub info', + }, + } + + assert resp.status_code == 200, resp.response + assert view.registrations == expected + with open(fp.name) as fpp: + assert json.load(fpp) == expected + + def test_registering_new_device_validation(self): + """Test various errors when registering a new device.""" + hass = MagicMock() + + with tempfile.NamedTemporaryFile() as fp: + hass.config.path.return_value = fp.name + service = html5.get_service(hass, {}) + + assert service is not None + + # assert hass.called + assert len(hass.mock_calls) == 2 + + view = hass.mock_calls[1][1][0] + + Request = request_class() + + builder = EnvironBuilder(method='POST', data=json.dumps({ + 'browser': 'invalid browser', + 'subscription': 'sub info', + })) + resp = view.post(Request(builder.get_environ())) + assert resp.status_code == 400, resp.response + + builder = EnvironBuilder(method='POST', data=json.dumps({ + 'browser': 'chrome', + })) + resp = view.post(Request(builder.get_environ())) + assert resp.status_code == 400, resp.response + + builder = EnvironBuilder(method='POST', data=json.dumps({ + 'browser': 'chrome', + 'subscription': 'sub info', + })) + with patch('homeassistant.components.notify.html5._save_config', + return_value=False): + resp = view.post(Request(builder.get_environ())) + assert resp.status_code == 500, resp.response