From 1ffedb291cae731bfedf58a74133d7467ba0fcb7 Mon Sep 17 00:00:00 2001 From: Otto Winter Date: Sun, 6 Jan 2019 21:26:39 +0100 Subject: [PATCH] Update beta config (#305) * Update beta Hass.io add-on config * Add README --- esphomeyaml-beta/README.md | 109 +++++++++++++++++++++++++++++++++++ esphomeyaml-beta/config.json | 39 +++++++------ esphomeyaml-beta/logo.png | Bin 0 -> 8763 bytes 3 files changed, 131 insertions(+), 17 deletions(-) create mode 100644 esphomeyaml-beta/README.md create mode 100644 esphomeyaml-beta/logo.png diff --git a/esphomeyaml-beta/README.md b/esphomeyaml-beta/README.md new file mode 100644 index 0000000000..1fb5d03ea8 --- /dev/null +++ b/esphomeyaml-beta/README.md @@ -0,0 +1,109 @@ +# Esphomeyaml Hass.io Add-On + +[![esphomeyaml logo](https://raw.githubusercontent.com/OttoWinter/esphomeyaml/dev/esphomeyaml-edge/logo.png)](https://esphomelib.com/esphomeyaml/index.html) + +[![GitHub stars](https://img.shields.io/github/stars/OttoWinter/esphomelib.svg?style=social&label=Star&maxAge=2592000)](https://github.com/OttoWinter/esphomelib) +[![GitHub Release][releases-shield]][releases] +[![Discord][discord-shield]][discord] + +## About + +This add-on allows you to manage and program your ESP8266 and ESP32 based microcontrollers +directly through Hass.io **with no programming experience required**. All you need to do +is write YAML configuration files; the rest (over-the-air updates, compiling) is all +handled by esphomeyaml. + +

+ +

+ +[_View the esphomeyaml documentation here_](https://esphomelib.com/esphomeyaml/index.html) + +## Example + +With esphomeyaml, you can go from a few lines of YAML straight to a custom-made +firmware. For example, to include a [DHT22][dht22]. +temperature and humidity sensor, you just need to include 8 lines of YAML +in your configuration file: + + + +Then just click UPLOAD and the sensor will magically appear in Home Assistant: + + + +## Installation + +To install this Hass.io add-on you need to add the esphomeyaml add-on repository +first: + +1. Add the epshomeyaml add-ons repository to your Hass.io instance. You can do this by navigating to the "Add-on Store" tab in the Hass.io panel and then entering https://github.com/OttoWinter/esphomeyaml in the "Add new repository by URL" field. +2. Now scroll down and select the "esphomeyaml" add-on. +3. Press install to download the add-on and unpack it on your machine. This can take some time. +4. Optional: If you're using SSL certificates and want to encrypt your communication to this add-on, please enter `true` into the `ssl` field and set the `fullchain` and `certfile` options accordingly. +5. Start the add-on, check the logs of the add-on to see if everything went well. +6. Click "OPEN WEB UI" to open the esphomeyaml dashboard. You will be asked for your Home Assistant credentials - esphomeyaml uses Hass.io's authentication system to log you in. + +**NOTE**: Installation on RPis running in 64-bit mode is currently not possible. Please use the 32-bit variant of HassOS instead. + +You can view the esphomeyaml docs here: https://esphomelib.com/esphomeyaml/index.html + +## Configuration + +**Note**: _Remember to restart the add-on when the configuration is changed._ + +Example add-on configuration: + +```json +{ + "ssl": false, + "certfile": "fullchain.pem", + "keyfile": "privkey.pem", + "port": 6052 +} +``` + +### Option: `port` + +The port to start the dashboard server on. Default is 6052. + +### Option: `ssl` + +Enables/Disables encrypted SSL (HTTPS) connections to the web server of this add-on. +Set it to `true` to encrypt communications, `false` otherwise. +Please note that if you set this to `true` you must also generate the key and certificate +files for encryption. For example using [Let's Encrypt](https://www.home-assistant.io/addons/lets_encrypt/) +or [Self-signed certificates](https://www.home-assistant.io/docs/ecosystem/certificates/tls_self_signed_certificate/). + +### Option: `certfile` + +The certificate file to use for SSL. If this file doesn't exist, the add-on start will fail. + +**Note**: The file MUST be stored in `/ssl/`, which is the default for Hass.io + +### Option: `keyfile` + +The private key file to use for SSL. If this file doesn't exist, the add-on start will fail. + +**Note**: The file MUST be stored in `/ssl/`, which is the default for Hass.io + +### Option: `leave_front_door_open` + +Adding this option to the add-on configuration allows you to disable +authentication by setting it to `true`. + +### Option: `esphomeyaml_version` + +Manually override which esphomeyaml version to use in the addon. +For example to install the latest development version, use `"esphomeyaml_version": "dev"`, +or for version 1.10.0: `"esphomeyaml_version": "v1.10.0""`. + +Please note that this does not always work and is only meant for testing, usually the +esphomeyaml add-on and dashboard version must match to guarantee a working system. + +[discord-shield]: https://img.shields.io/discord/429907082951524364.svg +[dht22]: https://esphomelib.com/esphomeyaml/components/sensor/dht.html +[discord]: https://discord.me/KhAMKrd +[releases-shield]: https://img.shields.io/github/release/OttoWinter/esphomeyaml.svg +[releases]: https://esphomelib.com/esphomeyaml/changelog/index.html +[repository]: https://github.com/OttoWinter/esphomeyaml diff --git a/esphomeyaml-beta/config.json b/esphomeyaml-beta/config.json index 22c7d71812..b05f09f8f1 100644 --- a/esphomeyaml-beta/config.json +++ b/esphomeyaml-beta/config.json @@ -4,30 +4,35 @@ "slug": "esphomeyaml-beta", "description": "Beta version of esphomeyaml HassIO add-on.", "url": "https://beta.esphomelib.com/esphomeyaml/index.html", - "startup": "application", "webui": "http://[HOST]:[PORT:6052]", - "boot": "auto", - "ports": { - "6052/tcp": 6052, - "6053/tcp": 6053 - }, - "auto_uart": true, - "map": [ - "config:rw" - ], + "startup": "application", "arch": [ "amd64", "armhf", "i386" ], - "environment": { - "ESPHOMEYAML_OTA_HOST_PORT": "6053" - }, + "hassio_api": true, + "auth_api": true, + "hassio_role": "default", + "homeassistant_api": false, + "host_network": true, + "boot": "auto", + "map": [ + "ssl", + "config:rw" + ], "options": { - "password": "" + "ssl": false, + "certfile": "fullchain.pem", + "keyfile": "privkey.pem", + "port": 6052 }, "schema": { - "password": "str?" - }, - "image": "ottowinter/esphomeyaml-hassio-{arch}" + "ssl": "bool", + "certfile": "str", + "keyfile": "str", + "port": "int", + "leave_front_door_open": "bool?", + "esphomeyaml_version": "str?" + } } diff --git a/esphomeyaml-beta/logo.png b/esphomeyaml-beta/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..cd37247307d32fce33fc7b6b1926d89b1316013a GIT binary patch literal 8763 zcmeAS@N?(olHy`uVBq!ia0y~yV2WU1V2I&hV_;y|lyUko0|Ns~v6E*A2L}g74M$1` z0|NtRfk$L91A_oN2s0kO*`Lb5z#v)T8c`CQpH@mmtT}V z`<;yx1A_vCr;B4q#hkZuEBDBRPCdR~ztU4dz=^4o#VNu~m8DgHbG3wMOp}0MY9XWG z1j&OJ6D5upCSDO_D_|296?trwXUxUSq{XGh#iW-k!BNd2z~eb#ftZi| z{dIM3>FQr$<@=|9{#)}-{pG9ZfrsXYt(G$Yy)CE5}tCQ9;fUE_G*kl^LFf8&9J2l_1ksxcck1kSTN+?aX5?#KCy z+YV?qcv>F6BRPXJXa42$V6QF?YGagVx_0ry!h7s8SFYsSe6U@hfAxJZE*=70&& zm(p!N6fW4l^1kMQPa*qN4;1>=x-m{?kPiO)j%AtI*V#V*Z_Ls?5N_alTB74T{`1@eZNIj0zxsP_RsB2Wb8ElvwlUonKE>YlSlA(dL)Oy&--~V>(Z^-46O+leFr7 z_3PW$l)7(xG!a=Y8}xVGy8Qove?NzQJzu`$7mu^p4yl5^*Zt-_R?8sa6Ur5~oo#2o z_uv0Jd;Y86e?Q|QdqS$i{xAQJE2d`7SbjevCDJ?P8{=x@UvF=G$&U(?587}k*%*{A zlRGZ11%*vpqQtQUM@4iXNkH*j%7e6D%k3pr<#KyT7Zyx0PUmseVFUR_ru*Qh53Ucs zYV3RwkS^i1pvp9?ER)9+xhs z;!Y`uqtzTT57`Ys;OTM<#k8=4!@_NrOx z?n#d?YdoHRGUhqltQiq4emSsmVL0RO1wYn5T>0Ldsh&yBX=&p+)_E%uWIWyeBnMh9 z+F$hLcGI1s``PyO-?`v=Lrybqq0Lzb)nbzmSqWyV3^ruPJ~Pwke3SIR@qyWtqx;uX z+lVdBoO4}Vx%-pYl$vtZ0{vgP&lzXmHd!{EA)hs_Gs#pv^~*{||AkYxZeKVn$$y$n z9RG&!#(%3D(`D~}WpZa+@2I-FY+Zgdw+*vR&nnY9eIiE}&E?4Cd9YJUND{V=d8ZtsRAcn%_IGbsz0ff@HweF-=0*<`(z{6Tw!_Z%li+x zX?Syne{f&$`bR;?ryTQ=`MwU%6GXLMe>3=C|6+S~>eKgS2fDew#JBy9x+7R&Tp&^P zPK|T@eE0MJ*aK?sS8JH>yvu57rISK{-5qsqXSSAW|E-@K z;3j5sZK|ZvGNyQ^ZhxngHEydHl=I3w-nXLU`YVT@`U|AitUKw!!^g00Va%*K?G2Ba z`aib`eab$tpZ&zXO-tS!E`HMIQks*$;D)hc=68nr;OW6rCUeQX=9M(+V_xU(mD17U z-pDVoZP9*q%_sKD1M~FO>$3fm^KDAL6q+fOl*koUcxz$8-Z@2Gp~bfuYS^Z7X`R+P zpgZx{C-cVRI*SwDHpHdOj*@v^KEZU6sFTPV%>&yrMHKXJO;hIf_2FZ9r)4>BO_}!J z>`Biqb~SAk4w`c6*`sLIIqxKIt2~fy+265g-Tz|lIo$%snBwyjeO{Jv&zkc?!iVdc z#e<}h`A2q4d%x_)R-Uz*5ylPiTMh29PY}I)RPca&)P(;kpLmWO64BvbmT>g3&!Kef zg>U&zMcR}xz3aD`R?lUT7s&eh{smt7?4It7w{<6iH{9!tnYFgBSoy;`v12oz#XO2H z-}>u*rP~9EQ(6(nmCfCHKBn28@n0wyej{tQ(ubHQ8|}H6JAOv%9-r?}X`m6IJfT(f z+WV<_*~Wd(7xy%oGR<8t;r03R38#5!(hrI!KH2ZEn zS#wpwSysKpdqgjk*3OHN_t!5nKW-k7+< z@9r()x;9heo%XYe`O7}eyVZMbO;}{EXrWW!F0X@|6v_?RST*eKy=-)Okn>>C96Nu7 z?WZ5VaI}zNZGYD+SNGWVw;X4U%#V}@75Dhge5%>cz`EhQGyj%}FWBxevrbpvyfLk+ z;d9XZ=gQZ;MROcCT6i~_YMiJwN<6s5dV#`&=Embnz3KO>x=)(DD8Dhi=-_g3=Klg0 z@^!neR`C42cX;CMH|qm7d@r;7T`%#MO?;Zf;%?)P_^XT9BWJ#2Tc@;7TI@kliQZ|O z?aP?#9naf|ubxo-GA`xh&4x7>CpTVSsE{W9c*5*I98dD(b8;B$`kj<(mWWSSxm z_vQMJ0bX@gZ-^qSLDB!Vj|Ll#Abb z-#7LA?NfPE7vuH+{`t zH*CMJYS{l$f-UZ}H*?DJ+g>RvZ5d+^PoB_Z!yQ@nj(5uAUGwHU3*QmGSUS;XRvhOX z{y%yFb*qIZuG^GwG--oYL}$^|o?7mz4O^OTaE0k_dbA_XWB!7Ovxhq~zP;TQv7UQ^ z;n~gq?~6)spOAX6+i3vAK&$+)jD0pXo{3-kh2ijfi?j{i%g~l9_zU z_V<>(DEeeOap_^z_543Xj!rop_rUpw=!|rYX-&+B9$ghW?RsL z$@|_*3O}B#U04zGov{Q*Vd3$e-lK!W}<)oVV$_>6~@- zko?F0AfW4dudVR@MKz_4m7ELnuBm1?P1x?RlKm)$SgE8w+dW|g`7M_|+?1)b=bP~O zu!s)-+mH=q>|#bA+%u+65{*7+#s0muw9s>=@P%$2?`LVBk~!`@zfo>^bgiZG2lfTW zgEr`?-(U6YQS*y!OJZ8AoaaXmAPTkMXHLLt& ztan5fhq!ax!Cxju)$QAugNtr0P1reQ^_Qc?VSC?eY&rBQ=ZW4e!%GrLS`o?x&!^3D zuWV&}vaVq6a{uRVerF!9+plLS7B5iB!>X-crrY9Q_2jySnDvvO4c8RJT_gEUOFs6T z_(Wvujnu+WyOy7v*LFwpc(T4;`on+5`n3xa&t|kYOq+cvA&j7Jw7$f;)C~j!)bzc&f1eQwrK4C z&|~;T>VKpAvD_`oZm55G(4YDl zE4wdr-|xED#bl!*x<>Ft3g;}`;GtInDlIq zxVVvB-gf-sqDF`{9osM-2#b=YyQq#8uP6< zJSRLJZ5*L<$LO`4Yc+w{eutf{+YZdZSpy-3_@TR+P_x5EE_6CNstOgnVc z@U2uw`~Av&+?+*ra^Es6bcE}du69_PrGsFb+3H})~? z+z@s2>zsy~?f#QI_syJpVaW=O<&)P|9G|5iel&dXmaAR-p#j%U3pm%EXqxNjcqT?t zc!H78t*DRR#Z$Suey`lr7ry+4bh+Q8+e)&J1<#l7yVbD$QJtntcbMkBZEqIrlDXgf z=fbw$LuZZ7mn-t`xL&>QciO>?Egy2vmxn%?p>?Wgm2TW_w(^b716W^k9RC(^zB5(B zPQCkY@wZy8A2T2CzUM=W}3TR(^5n;mp z>X`6mcCTsSC11}a91Jf?8`|O)g+?jQQ@7rkd*Z#R*!R7= zCRI%Pm431=?v40{_c5EoUF6!&z3w_-DAOqxmwNKOh+VRq`g~@+Rdsy7=h-`}F;=ay zPZ4@Lb#;5-yI!poPCL6||LzX0;X3D=Yf%^HcK>tZ^#|u$H`{Y<@-+&MZ=RO7zSHmk z-$t>W+cvFXTO7!9>vFDaVEv{$h6{U+%5K@iZ>pXVmpw12^dna=}R zJGLH){BY6lm)5lSuX`_vhAh;S>rM)As_e?DJF`kBTwVFKOOL~T2@y}O2v*^ueeoX3 z#-;asszr9y^|@*btaoSpW4}D=yLYHf=WSi%&U0E3Yaetc_k{ATm>CsYHmzwZ_bI0R z`xYhhvu;`?xMg=e$Gtlh;pB?Qv9% z@N=Ek{eHoLAMM^f8-sPe*GvyDUO)Te-?oK$bBxxMfYKV3kd91P{}yCA$w*@*l*RsAWjt@ z2glj2VccR%*>`UCTmL~~Vacz9lDk~~rJoS}5!)55qplSGnAzjvt<4Yq%{?TZ9+393 za{Gf|zSTW<3p67x)UNxTxA?NKA;<1#^Bvx|=-d+GdUIfgZMt(&DcsnR zCYwBByH1_jGdF44oWvK3ztg51U)eRIYsQa9=dNwd75Ug{sn}I|XH~KroAtip>w5jp zD`wa0ec09Wb~)4kp5NQ&d3|eYU#+qHh)h$_#nLLFY@VPbtqAsoEZqxzmIun(K4boU zJ>%v#zZFpxJ)hJw^W60g*@-;9ni-Qf(SE^$PkB%3rl|g}5!q8^HA}WFjy-vTYPL|} zq*tM>`K~kd#g^XwsB5>PNOZ3Mw_9BO)*?3^{CwxIDmo*iP5MOK1q0TnHpRB(_h)a+ zWqzubbh#n=MBLVyX@*g(du7&2eJd>MER<-TF~cz8`}Jsz(0vJcYyU^P?px@pk+3Pc zAacSk#TBOgS2fnX%Jz`7TYGOA%e()QCcpP>n{;t&pMKcOmD_ri?DpN*q$R2|eRejt zv-)25&>uQyg^Ol1?5`aA-iHaCSG~tsqqj6OgVEzn>W#w_gytO;+M;u>;BoMac$d=E_NPCYK9HBl zxN0YO^=tOFMRM-nxGozVe7pRSUr!Z3SKyCe$C-1BR!hsOOl#U|e)HK)0kg;E@zQl- zmfQRt^p{AKUc2Qf&!zQOb=JXs{1*J%o$LfHn19qnyNRExOR@jp_;Vwh@#+adlS7@0 z-KX6B|L(-`JM!CES9d(E$v!$=?Sa9c)I6($Od@?3W7smSr>HHw`F6VKoqrrpC*7O( z{Kh_sqde0$PWvUIvpIn`FiA5a)AGK{zs~{hTs$B26#d}ZD|hxm@P&4_E> zt?>3_$^53TZ0F18YF!tce1GEHd=8NXGSLS=9Tg6XWiQb9AX4-;ZRgs4Hoffk1x+)& z%jTZE{9=8=Teok2&89y(by{x6=5zHepVnn;PRMNynaKW{`-rAYR!gBiSIK>~$Gd|$ z&ez>JtK*{I_&YG@WLnyV*iJQf1@pFU>D#6gxOTE`Z~A)uMXRi~We$JAwCB~~yw;2D z_q+d`Gpmw!*ZN($AK%t5?hG!rc^P=%-HAmkTm7?RKz1=Ii$`{Nm z5aXT@WOHMu+|m81QyFe@TQFXo)^jlDj_N`&=K7wJISbGErf5ejZs5NVarLfl4#U3o zpj}HO+um*Tp7`j~yq?_ z&d1uDXWp(m^lh!$Q#0;sVIDfHuM3|DSu8kUXT9)`_Th`pTew(X$8C{HJ@4_!j48fX zMO*E@`*Zu(4-J@q$ka^_4Xpa8owN7E(&tH5Pes;TocDg$!Mzu|)9ys(`Ai7<)ccKh zd68Xv^ub%)nv)f8Zm*4Ls&>5|^@YjoP(<65N5V$?ZnN3C$NBD=B3^mEQ$Wtiu)Ezf z_rCbrOSa0%^N(xHUwmQer9`2qjNr0E6GRV9Ob}*Kw#r`;sHeU%aO;|XKbOyy3X$G9 z;n@B8TcuWOh(FZ#{K9(Z^sOB?#DDm2F*`_dC1b#pjUm!!{ejma~wd~zjV@3~Ez|MM$#Z}k4QUu4SmbBgNM zoF>>?Khf`1`Cr&x6aVOX8eicFk6ZE$Cw2RZb-cE3V%ffW5664O>NWSByvja*tIv5D zQ7m(O)k4v;sS^Bm9!~syUNvRkL1lfnPfriqep=t7@SmaoPncFo&({-wJ-Cak&naq5 zjLO(86TD&4e*3m2Q@*qNKFQ5nr{E`kcw*2e<|jqIDRZCQRQEr)it)La%<V zCPv85ZwhrbPMf~_>e0j}*B|Ve{H8)xzS;5Mt@bz5V?Hw*FS(F^DC3vC{H9w@UAtR- z4+>qke4>(T85I(6<**^|&bML9QjU5s*+^aedZv2Wm4G|bv~9gOk_+P1wKc-lvTSL1 z@NkY{d_dBiWeKUqDxzyTPt=MPF{f-jvNe?}EPGG$hR?OuQ7=uWHePFu`*O*KcL&p1 zr_Cukhv&}Layj_QIq&Qq@qGQDV{so&XbF9vzC1zoEniAuktpx|b#-^LKSoDpd3^jT zDqn9|lx<=@{n4g_7w=EqyWf2A`q!zk&Z`YKKRI7?!e0IP`}K-XALslLJCu9TbdQGn zHMc*)t%7|Ych@cNm8=!7deUEZqTH9kEd9&Zqr%@Tp5zyucwhXbT=UCrMe~Gv`QI!y z3CVTU%}!HW$TEMv+s?Z&MVnr6iK%wRp2;>83;T0G`G4e>oG-r9sv5$t9TzfsHucN@ zyR(dM$R9p%zig%Zz0Z<=YgeDVKj-58uXoljw5d4zx3+Nk`tvXL-%$RqFZp+K(yKnl z>lwRjA5PqDwD|vm6AR6!{!_0{Z7i$x>eGx^JDKHg+qTjdX;pJRL?&H|*;(u)vgXUz zPqHS-c1&k;(v+S)HGZ-`r{3F8JY+@F)I9AAI$!u6n7??sTe0AN=?>A!EzMp%nyYt) zIrMg@+)uyxyQuN=N9U5i^P8vK;GP(o>brm^{uJAX=;uze^9@gb6MXVJEb6<L#~e&MtQ6?eWbe)CCPN&Jy$ zhH0_({@eS_dY>;5dwTW5@);H3EI;GFpQ!g{`DuS@g7o7(AyJ37beZsO-e40k_leAx zMYehy{%=b;@8^7@_1I~JvsS(=5*Gou}e$u)eer#B|DQL-=1zX>Ewh;Ik8RYBq%FsKGajCv&Jq3aTKA+Wzg}hUdf`0z zgsbW|-x>We*VlatR(O3>Kib0W&|(c)pUsOVr-gTg>fh`TsZZ8k#KoE&-*tSJ$`-5B zh9;M5w4-9DPL)?<<6qSNd2Qc&bLRaSx6IgBZH`B++rxME&~x`m;PIH`5!suO4`L;#caChh9(mc6NQ5tRuhr!qyL}kFIph>5e}*%X`nsYezGf zel~J!n&)&q@3ZkmgC>vN9LZa(Z(INA3z*t%aCYU1Ir6W|BRfP^Z|eFm^GEVZr`ydM zdP{ih#1jR#x36C7Y^b>}_2yX~R`JAH$_>AjWH+~kY5hvNG0RYVVblwjs`@{MA+EQx zOlB4>)z&=yt@LK(@jESRybLATYIw@uM0@NOjQrcx;ya_eAVGSH-l4F`%T;w2M*MYL zY+J*=bE{pe^?q-;+83{qEs{L@V}PdAF#e&Aa&>sRr6N3RF5BJ(-z zo0BfZ^@OpOdf%MqSD^l@*U$Y_fn?T!^??mJLT9o<4%ckq`V$hh+USEqk?8w2wWN*3 zm)9PYJyNIqF)Ul{%fc__?g4jxZDEMrUaT=a@SX(Iku!SMZAJfnnrvSvqqAD_j%%0m z4bioS7}x&O3W{67qa4V){$>W}yL~C@?_!$e_AIvl;it#V#tnxFgCRnPV-H%e#aCm-@4S-wdrUR~c{5rqx^hy}&8}WwGKX^y@6qXU z2OOA>2EULk<2}_meV=%DjPd!!tO=aAA8zw&-z2v7$=RgpDDPaxBGcU>CnX-oA9rZ2 z#~u4iTpyYX@Ro4mA+pzd%-w;P0HG;Nr_XGD;d?#cYb}5dcAW~qPT&5y=4Z<A{o&N!p?fBU~me-mS$>D4!x&wjba z(0}E-WIL1XWy{jIzBQiS7kXCvh~1B{aW3CcX1;ijMz^)Cz+zn;)qU2-SM-^R_@_m& z+OA+rG%n6uU&LDVul)4q%LZH@t)v_?CI{WN54=BZ#ykDh^?B!V{@(ueP5agS$ql!? zgKIB2wjWnMs{3=!y2anOUHNv=NgYSMy->RGJ5o)^_I-@C7qAjt++IrI5 zIcBR{x)MuR@2*N%8lK#H;>Z7G%j#!`FX%1#B0cjW`;^r33aKcrx_Yl`XICc2O}X{Y;%|4^y!iLVGO9b*Tur^#9maKS0+ZR| zd-?iXa<;dHJ-Fknto(s#m8NgvlVrztZH7B$96V56YHYA{aOI{c%++v5T=e?h#y4v= zUB19wrWCX;Pr>^4w~HFxAH}AG{_5+oyRE>QW!1&{gY(q#t7q~w)?dGOqUf8ml;yUb ztV+QTtCrGkj?c=GnaI=ZQQ!io>^EwzN_iZ<(k=zrrGs9Ps5FQ4rg$$ zU;Z^|foaN36Q0FY=a&De{q^b_|8;{qCD{{pgO>;(O&Xtoq!EcWLCN3^ph?`r21=J_ z-#===rt8mq-DN_uHV5xwTN|gJ)n?gGcYt+6mKoqAKh`sEN|L#K`uaZx1_lOCS3j3^ HP6