From 3f7c059bf8167309fdf8de249e032461796de4e2 Mon Sep 17 00:00:00 2001 From: Osco Date: Wed, 19 Jul 2023 19:04:59 -0400 Subject: [PATCH] [New App] Owncast (#826) --- README.md | 1 + apps/owncast/config.json | 17 ++++++++ apps/owncast/docker-compose.yml | 43 +++++++++++++++++++ apps/owncast/metadata/description.md | 60 +++++++++++++++++++++++++++ apps/owncast/metadata/logo.jpg | Bin 0 -> 31158 bytes 5 files changed, 121 insertions(+) create mode 100755 apps/owncast/config.json create mode 100755 apps/owncast/docker-compose.yml create mode 100755 apps/owncast/metadata/description.md create mode 100755 apps/owncast/metadata/logo.jpg diff --git a/README.md b/README.md index ecd0a85f..64304bf2 100644 --- a/README.md +++ b/README.md @@ -92,6 +92,7 @@ This is the official repository for the Tipi App Store. It contains all the apps - [OneDev](https://code.onedev.io/onedev/server) - Self-hosted Git Server with Kanban and CI/CD - [Openbooks](https://github.com/evan-buss/openbooks) - Search and Download eBooks - [Overseerr](https://github.com/sct/overseerr) - Request management and media discovery tool for the Plex ecosystem +- [Owncast](https://github.com/owncast/owncast) - Take control over your live stream video by running it yourself. Streaming + chat out of the box. - [Owncloud](https://github.com/owncloud/core) - A personal cloud which runs on your own server. - [PairDrop](https://github.com/schlagmichdoch/PairDrop) - Local file sharing in your browser. Inspired by Apple's AirDrop. - [Paperless-ngx](https://github.com/paperless-ngx/paperless-ngx) - Document Management System (DMS) diff --git a/apps/owncast/config.json b/apps/owncast/config.json new file mode 100755 index 00000000..7883980c --- /dev/null +++ b/apps/owncast/config.json @@ -0,0 +1,17 @@ +{ + "$schema": "../schema.json", + "name": "Owncast", + "available": true, + "port": 8198, + "exposable": true, + "id": "owncast", + "description": "Owncast is an open source, self-hosted, decentralized, single user live video streaming and chat server for running your own live streams similar in style to the large mainstream options. It offers complete ownership over your content, interface, moderation and audience.", + "tipi_version": 1, + "version": "0.1.0", + "categories": ["media"], + "short_desc": " Take control over your live stream video by running it yourself. Streaming + chat out of the box. ", + "author": "Owncast", + "source": "https://github.com/owncast/owncast", + "website": "https://owncast.online/", + "form_fields": [] +} \ No newline at end of file diff --git a/apps/owncast/docker-compose.yml b/apps/owncast/docker-compose.yml new file mode 100755 index 00000000..233a30f1 --- /dev/null +++ b/apps/owncast/docker-compose.yml @@ -0,0 +1,43 @@ +version: '3.9' +services: + owncast: + container_name: owncast + image: owncast/owncast:0.1.0 + volumes: + - ${APP_DATA_DIR}/data:/app/data + ports: + - ${APP_PORT}:8080 # App Port + - 1935:1935 # RTMP Port + restart: unless-stopped + networks: + - tipi_main_network + labels: + # Main + traefik.enable: true + traefik.http.middlewares.owncast-web-redirect.redirectscheme.scheme: https + traefik.http.services.owncast.loadbalancer.server.port: 8080 + traefik.tcp.services.owncast-rtmp.loadbalancer.server.port: 1935 + # Web + traefik.http.routers.owncast-insecure.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.owncast-insecure.entrypoints: web + traefik.http.routers.owncast-insecure.service: owncast + traefik.http.routers.owncast-insecure.middlewares: owncast-web-redirect + traefik.tcp.routers.owncast-rtmp-insecure.rule: HostSNI(`${APP_DOMAIN}`) + # Websecure + traefik.http.routers.owncast.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.owncast.entrypoints: websecure + traefik.http.routers.owncast.service: owncast + traefik.http.routers.owncast.tls.certresolver: myresolver + traefik.tcp.routers.owncast-rtmp.rule: HostSNI(`${APP_DOMAIN}`) + # Local domain + traefik.http.routers.owncast-local-insecure.rule: Host(`owncast.${LOCAL_DOMAIN}`) + traefik.http.routers.owncast-local-insecure.entrypoints: web + traefik.http.routers.owncast-local-insecure.service: owncast + traefik.http.routers.owncast-local-insecure.middlewares: owncast-web-redirect + traefik.tcp.routers.owncast-rtmp-local-insecure.rule: HostSNI(`owncast.${LOCAL_DOMAIN}`) + # Local domain secure + traefik.http.routers.owncast-local.rule: Host(`owncast.${LOCAL_DOMAIN}`) + traefik.http.routers.owncast-local.entrypoints: websecure + traefik.http.routers.owncast-local.service: owncast + traefik.http.routers.owncast-local.tls: true + traefik.tcp.routers.owncast-rtmp-local.rule: HostSNI(`owncast.${LOCAL_DOMAIN}`) diff --git a/apps/owncast/metadata/description.md b/apps/owncast/metadata/description.md new file mode 100755 index 00000000..4d8d847c --- /dev/null +++ b/apps/owncast/metadata/description.md @@ -0,0 +1,60 @@ + + +## Initial Setup Notice +### Setting Up an Exposed Instance with SSL Certs +As Owncast uses the RTMP protocol for ingesting incoming streams, the typical Cloudflare Zero Access configuration will not work as it does not have RTMP as an option for routing. + +You can optionally follow [this guide](https://gist.github.com/HeyOsco/6e8102d7d82ffaeaae16f41bef98b739) for setting up an exposed Owncast server with your RunTipi instance. + +### Admin Dashboard Access + +To access the admin dashboard, simply visit `/admin` in your browser. +The login username is set to `admin`. +The password to login is initially set to the stream key, which is `abc123` by default. + +### Security Recommendations + +For security reasons, we highly encourage you to change both the stream key and your admin password immediately after installation. You can do this by visiting `/admin/config/server/` and following the provided instructions. + + +### Additional Configuration + +For more detailed configuration options, please refer to the documentation available at https://owncast.online/docs/configuration/. + + +## About The Project + +Owncast is an open source, self-hosted, decentralized, single user live video streaming and chat server for running your own live streams similar in style to the large mainstream options. It offers complete ownership over your content, interface, moderation and audience. +[Visit the demo](https://watch.owncast.online) for an example. + +## Use with your existing broadcasting software + +In general, Owncast is compatible with any software that uses `RTMP` to broadcast to a remote server. `RTMP` is what all the major live streaming services use, so if you’re currently using one of those it’s likely that you can point your existing software at your Owncast instance instead. + +OBS, Streamlabs, Restream and many others have been used with Owncast. [Read more about compatibility with existing software](https://owncast.online/docs/broadcasting/). + +## Contributing + +Owncast is a growing open source project that is giving freedom, flexibility and fun to live streamers. +And while we have a small team of kind, talented and thoughtful volunteers, we have gaps in our skillset that we’d love to fill so we can get even better at building tools that make a difference for people. + +We abide by our [Code of Conduct](https://owncast.online/contribute/) and feel strongly about open, appreciative, and empathetic people joining us. +We’ve been very lucky to have this so far, so maybe you can help us with your skills and passion, too! + +There is a larger, more detailed, and more up-to-date [guide for helping contribute to Owncast on our website](https://owncast.online/help/). + +## License + +Distributed under the MIT License. See `LICENSE` for more information. + +## Supported by + +- This project is tested with [BrowserStack](https://browserstack.com). + +## Contact + +Project chat: [Join us on Rocket.Chat](https://owncast.rocket.chat/home) if you want to contribute, follow along, or if you have questions. + +Gabe Kangas - [@gabek@social.gabekangas.com](https://social.gabekangas.com/gabek) - email [gabek@real-ity.com](mailto:gabek@real-ity.com) + +Project Link: [https://github.com/owncast/owncast](https://github.com/owncast/owncast) diff --git a/apps/owncast/metadata/logo.jpg b/apps/owncast/metadata/logo.jpg new file mode 100755 index 0000000000000000000000000000000000000000..60c5b4bc6e69051692ca61fce781c6dcf9f4abdf GIT binary patch literal 31158 zcmd422UJsAn?D?yk={Y1LU3v*sL`nptBTcIGCY{iW^d<<> zg7lV910>;#_r34jng5!#X5N`QYkh~DoRgfr!+Fa7J@s78UM&NtRG+9k0pQ^Q0C>1R zz|}n95r6<6|Mv^G5#nA%*NKP-35iI6z-!mZNXW=YNk~b_DQKw3DX1w(NvRm9sA=iw z>FLQR8E-Jq-JqePr~CaQcm%jPgha$dM8tIDq~vt}@^;k@puUa|zy}cEQ3LR)@d&8# zuDSsr+otT6aH=vFRfR9H&fKN#9`>t`L18~;?gw#Ydw?!1L z(P~)$@3_*52FK-GXMb4LL9acI;1GN17D7zIz<7h{Cg)u)ZXRB7iF=Y#(lU=8D?U+D zR#DZ_eXgf(U}$9d%F5ct*3RDjjfba~w~udVSoqtBcaiVo6Fw#;C8wmO<$lh~FDNW3 z{!(32TlclTp|Pp6tGlPSuYcg%#N^cU_nFxrb1U%GUu)|dn_Jt+!=vMq(=*ih#c#Us zaCH82`v+nF4_!DW;NcSz5)cA^(}joch1&_J35jltT%%FY0$RAz-VqJHPWLb_r>cXP zT}&H6|I%%ogn>hRg%kOkv_B~O?-3UAKcej42>Xk!IRF^}9!_`!)BrF5qmzvvL;~Oj z{Qv(zwsQrbwlmT#qhHUrbKo}Zm9~EF@4Lq(F{w#zRNX3duO&euoHtP-%vg9HULT(L zPNtB3Vo@6`SGUQZ#WIb_g2RTkE@IiwA@o>_D*&l+=h89V6=1*zf=UBdA(xI0kml>) zA~-l1cT~4Tign3^VV@e+s-i}0lp-Mqg@C}iPftsjRm^mkzKtF>(say(G(&gJnNMZH z%L{>@Y~0CzO7pEN-16w(7Udf$)_9XYs4W1NqcD8(%rm}*U++~ofDZ5s?*Y;O)q%kD zySTMA$rn+B3;;L5sJ}T9syX&6enwrP*tDoG<%SQp>$d!JS zl2-+q=uqy9fvWh|n5EQ_WQiTtdh+$424``iE}v{c`Ne$)!*~NLTdPNnX7_l%1t`$d zhS@MOmE;;}>)GzU(TrNWHGY~`Q~sGG>7+?6*%p03`1qhbID=)owvs^GY zU(xgmU{quDW=+qe(kPR775d&NBI=d*Eg{PSvS574;aeweG8mZv-`Qy6eld7Kc#Dm#m!P_6!qe$TADY;z@Zy&wqXT-bR!$2CfZXHF` zeMDhrpwBqebDsjvbUnATaS6o*Kh0VB9y|X`sK~A>T4bmSdaAN>3=XD0@&m7qet7l5%4>TLqN<5ck*doSavyaA(%(L`zbSNb?N?(s= zWpHYk)aY5wwGaKD-~|DwCy=Wa5gRH0*?WoCzp9sltlan3nG_npRp)6TTqlzF{HB`u zfS2`Dv1;wq9sgl?#SL>5Oxs~_ODy_bj(H=^1vk3dHw~jh6r3MixVv>QeFB+z9H4kp zB!|r)rBn5o--*qN0U+wG7$p0RAMgqu1t6BnZO46wN0>4Gf^jIf{hBI2fCC|=HzWtO3EJlw|Qfmcga_P_fo&E01x<1 zN}KV>i0Fxsa!X!VwZii(&4|x8sj8QXhY#Sbj|$+xY(c>benu*oI8o1%VhEfO9@GHD z?aiB&ChF)hM#caJ(syRKwg2aL#|I%WDrUuL%W-EbOAF5xi-rF8+TQ3J$P?+4iulp$ zHKVNW#TCBy&nr-%@%P&z%FIAXwBpS*)VTQ8pxx;(_QPhN zVLq_1sp4ofTjJu0Lek|;h|!nUEyrK5VXRr{nXs-jV{Oub<+s7hnVH$+eP&c{hYO`f z7diSQ-@=6SNTZ$TXfZKl+5EjHX;2`K0YLu#_=|?%^V}}F`c?+|_SX9V=hZSk0I<)O zpAm4pE4F9&3Lhz#fBswr^^t=u$z7ql|$xI6jJ~ zeE^3>K?%QciIagea^3xV6j6_;mW2sf=COenrP!Yrf)W;^h(`4>pU}$u{yH9c{STm8 zQEo0ON9==myZ4g0Hu+Xj$)tP2$ZmnSJWheSD+U(?EA;*~Tj#LEV$k4yXPl1Sc%~cCg58jQRQN0CJMR zZ^Rzbk2rl#WdzwQayuJ*GPGVa5OY`V|M7`Q8i&w6Z=*<-ari>iu7cxBM2c;tiR_5& zKS%r?YC~tBPbrMko8J?iy(x_yNqf@-4nCcF!<(bkc$m6h?Im0RSo!%zhqwbQiS<5} z&v}~pRrK~s=*vkzzPtycmUsDEQTRv`8Ys+m6Y(_3RoZyrS^Arf4r;_Jr%%EUuK?{w zb8Vj^D$R|0dE?D?CC-np0N}Wpw-Ms|7a+d#x{GP3^|BRCCysv8xyW5*HJ%6ZLfS6>oaVW#tX+lQ?N@sGQV zbgj1p11|M&vRxR)*#+}BoW)4OeG>Yu z08TjFAizmGxG}fGRSkFYdy?r-+zAjjWLQ0C5Ce;8U`?E5Nv#dFZVqLT z3xJRQP2O)T0Jk#W#EpXiqRq;3-2U6LbT$BgqbVg0TVa{FH4re3*ubhByan$v;zW)U zKG6_tspKERA3#6dEE&G_w=H|hDEa%SkKR#m&r)Pl3qzP;ugtyY>8#&qyld3MJ~(+%V|utwdfxD}+KiDnua+osz1FF317Pc_+jY0czQuc=*ZU`B zKyfPU~n0#*X@EPq{&@Cp#Nq=nrD zpLJXTZp!DV4T;lvZ#)Ba;9UWNvXGy*>6$CYe7*M(EVWcw1xhEy-XsCc3}LH%)e!m= zu!;zV7hE%Qgl8q|DgNhOlqrba)w`wl?xs<F~+Oth@2k9RXJ{FWCyWg{n& zw%IkFbf=cP&quuNRHFF�w&U`FSQu!(@{>r^4D)LmRINceuDir3=rYe^o29uhls1 zxLdQK5tm_OCyO<8@Yc@2(z`S!c&w^>uu-9f&~+&Z$69YqH5Is+F+uk>_wAOPDcSx z!-qfPdoQES+Fj_1`_{kRF1$ONma*W#9MgrV z`H<3$zlqa$57?wH^}TyFf#}=KB7$2U%qgV`3-y4t`6GjVw8O5qCh%lvLUN9H@Yp;` zQD8K9AFUYR6}RD|hM8?MpDBYVJfc)(7239Q7n7DA(QNgwm47iR4ipA`3w9?_Cs?Pg z!(SJ#rKH$y=PlQ&>biUG^tvNri&zwer z?{TIvAGs6^UDe#o+C<;Hoe<++UIjPS2A24C2@mD7$oNCz=$o zbb>y8^|!gZzyWZ5Y%`lIXKr5ON1wC!p3KlS<$(+A(V@h}5@77Cihd5O3uCwfD46y2 zpIidm0X=v_bUaF}qe=!2M!x&7wo6RyxmUjDR_%T-~ zGDD&JW3}xix1fEQZIh5RB!2qbNqj$GVYvdZ38oYen|wolk5&FBUTd5?M;?T>aSh59 zADD=`C&?N)#M?Am+^BYVsP?KAu*nyMA0*eeGONm9nD(7@y>rBEJWdy`l^T(H?mHYSV@?_JX;dw3vO6$h=WQh_861jp_ zVL-x|r6!jH+OB(70GnnGwKlHec-;m zjZXRd(uXMK)8UzPebl&I>VuN}*$(^bSb_E-O{`+yiaE?h4>Y@`T6i=7YhJ*Ry*iQQ z!f!i{eSsg;@bZKEH6r14Im%^7CtpRhym-{pCw>8>CePM;Cwv>#}5*8B_&r z?(!qI6D(LA*N@-tUtS2pytF@;fR&C-8Tz`K)C*Dz=9O$L9B#b7!G1$m3+sDUvA%t> z{nB2w&dyAGy2fqq#UHslJRQA>*Cz|2I~r30tIgGo(LLfc(Iv$kMx4@MGzzHYly@E@70ZT_L&PBwD2=I&%tOBz!zg7_YlH6ur@)jdKz3D%NA~^kN`lWm;el`R7}#;)hNL>&~oDm5Oxkzt3qHT7t^7TrBl! zGMSjL^rvNf@50Qcf73*J5JA*`(OEv??dk=8%fb>JfO|5;l3PZulbn?+2@4q!q)_5^ za=f9ySnP;7Dea1Lmmi$b4&0(4{2F~-u4(;S(lur|^JIAymf>BHyN@7LG- z4?ib{2ij4}zbE(p(JOfg#?z+_(4L&$gwd=Xh(o8S@Ph#DtbmHO)dr)#FLh2iP^Pby zr9X8bRBk@h*p#}Fcm-(L?TJJWRP4xzuRh7JQ?kuV?nnNtD1N4wGlY+$0Y`_N&FKpS zC7NrAu{JN2Ff9<5)}iJ5;2Oft{&G2*>J|6({pONi4WEUvql0(hn61l_4cO0$3O{CT zlL@fm&iUAJ$Y1II^U2c<5YnzT^a`NW06Ttsav_9&1?c})hyq~~Y166p=={a`&cs4f zfd3HWwV-t}ki0Ak zzt@mGp@%_ZJcIVymcj)cA*eI4&st`1wLZv$`15-qIz!-x6@U0RWp^bYP~3!nn?PP@+})MbY(Q? z*qO4OsxAYdeus?st}ITPQ8a-mtR?4uV!eYRy}CVWdvdZ#1OACnPwHRqBd2Ck4E_br z3&@4!f}6!4U|pkM>?g_l_?+#-eCjDN)1V|xg$E#Ve^pdhg}?Sx3r2f&usSBPzVaQM zTWJ!N4(j%~px`yMT@5=wP|nfw&#a|$@^u@tw;j^6>BS~5P}tIDv@Aqc7%EGfvuRruYGFf1@$!bA%V)npfdtgdVefq!WXhM6h|_e4 z-?%?CKg{P&uJa7B#b31!f9R#J!y_yY`R%(*R{)i!G%6p^_V;_>bE?2=Fym!j@WF2f zC~I*J4HaVMbL&25(ckfsZF|u_jE{2(_6a8&+^>1(vGlbC_AXI^SNKsWa|=Vp#~6GO z*CW95au6TYtqY5v)MLGEbqEv76pRkui8t7{JnM9O>DVmh)2y=lXzH>2aYYBz_FphO z_|hA(--++0DZalk)!e^9^5vQeS7kQk2s9>({w}I;wPg6Im|!~bA^&aXd6iyB@rmW$+YU5IMbQ%L+lB}%2#HWYZL&G{Wt zh%`|@ZJ`9Rtg)0JQ(2N(t94;$KHN9?@2iNw4alAa{1?)u_mkmED{t{ybqOX7HyzHS zeGV^BIOL&A67`B`ku;xly%0?CEHCxQ`&-7ek*T<>pTwyWqp;VWvUEs_JKn~`2X_D+ zP~<}MQqEue3J`9J=u)4wfeua!!X}-Mrk*bQe^NfD<8|%e)%3+W!&yczb%Z||z+C;R zj!grd4mO-3CRd96ck~=L^-KNs3$wCNN|ua z06_M#%H|W;?x=G@S4!`EK+;Ihv$K|=$$?Dap1QjK(<|3Wc zCZpo)9f%jpMSv`CxqH)l=&|teS%TWZ&f(9IylE-vwurUZ9LT*Ah=-pW)@pdDOuPcx zva7;%B!N*=&9I$};pXGcOU{)S86Noh4PM8UqH#=_qJs}&%?i9HYMkfDOK6u)Un#uXNf%b;omYI9TTe(cBB zVEFPG|D}ff`=mc*G}swN-FFwZ!bEX5 z%6qn!wHTbU1(vg;Q`tEB9;e)itdHIGC(juuGW)uIS=nAl&UdPX(X>!$rb`@+lU0Y~ z@@at3;4{N{{484Gz$*)&_sre#caC1#KHFo!o;hP`FP;|r z#b9%JeL{x!jTp~JzE zS>5%1scUa2=WGT*Za^YqE=YN#5SuML0A<#qcI0`IhuX<}* zqS=&DGxOrqs=hARYk>U?!9`}fm#nq`h}&NQxv&BCSZ~P^nd|%bwSJTum$#(zO~3$( ztp^M?fcBw}pSJQEzN(twk8@9phr(bl%;!g(3Don^VyGxzE5u;+yzRw87kbW4mY-H+ z2l${AGJOng?n|!aHGblz|9Pk}w+^gRQgrn2pN_d~)M@n}jCWGi)6D@DOal<`6x8K0OD^(Tr>e!R3{>Nwa(dyDwf;p(Hu`m@6ct*GDULH8BY% z6`kG_Uy9S*Dr)Fpk{4N)iBD$z&R(Bwqr_(aZJC8!oGv}BZfI#v71(oJwX;fl6#iH% z>7^e4Pr@bai^@Ziz0Ks5bS?E(=#Y8T5)~)v6OvRPNpN7mm26e&+!0H3Zb|67j2|#i zvE~0+C{{nD@U3x~@&4i!;8#njKLr;RlHOF~lN^QAn~E3f4J1UkkPOd790z{sry?i` zOi58aRKh^a&UTL>1*iT3cUfc`_8Fysmp}IF&b^py*hWYNa|Fz4j<-OW2j3Q$j-}0* zQ!jnW7?#!pQq7?tjlUH9k8u6JQW8)q`0LYoh#e(Exi2X$R(u;IYcpDG1vNzNDCg|R z5#3SD!ig~pE9tKwvtNjbuo8UDzjQX#%K6b1ntOb)F{XRZfqv@fman#TUesJ(-qXVO zNrwE^akh!-D$0rE?2iL8uK*oVu-9F1W(T1#>^&HlZm?`Cfp(*Rddd`}ucQhq0dmRw za_@wMxgg_UzhL@t;wZ}+UBfn(`6mLvutzq~*b zuuN11R*4?Aw}iRNwP@wLa{CDVV|V&c>B~Qvhj-+>SBQM@!B{}jxgT2uC(+41Ju-haA0O;mohOZ zT+=9v}5JzVNooGt zkU&qrtI(m>d%oTLO=A~BLlq-cq-YyMvcdl^85#T_@I9EbI+ZO1#Mwf@d}*xywT1mM z-%A0C4#A~1$B$rha@(qGHAv;$#|>xMd9Dz8S#Mds9C3yT$EgZD<*JNcST}ZdQ*N}X z$f+mKe^X{k%<_2hRQn1LVqkYs5rHe8(xEMq4n~@F8|x9R9}6f2Ma7~TMOs8gMRK$o z)*?Ce6)DzfOD4D`d}q+KmZt&JwF70h5V}oIs|BZ8s;8aMv(U5Tp~R`IvyV{w^2ZNL zB&N$)l!sc9E2~p;^i)(LfM?@w008bPMeM87!9{=1^m(x=8onlb^m}=W- z>E~LoXuL3|DNr`u62&jpxyB}`lW1kpe=A6Vm4|*ia3Zh^Ql|^5_3HAdo!VvZ*52veo@~?z47TRW zQ-NK63%i03C+)jHHw^&m0DhCptZz!wc#fi(wx{{bx{Y3*ZO2slI4A{1BkL1@6zWaO zdgnowSMO#m<>f^6SW3C0z5hADhJcH!xMItsnLtyZvx`*C_GJG8mVWsaEY|&!GqQxY zdfS}?X%;u?axJLAI@simR?88G>t_}A%IAtq{F)Dd?kaWkUX=#{)EA&jaeq4Vutf^m zZK^^vM^m<;GmD#rMlk@qyCD!;s>wlAv9ZrFV&)LJR&WLIAZOoLG?&jbO}E*Ub|T&W zSRoX7fK{r}@6T-b58=vxg@-uviigxh(aP3AUSfkik6S7E?YNrI;NYr=WZ`V}VIjD#^8uU$97 z6wdU~XB^+1b)M(Sjh+Hg`i@BV(*lH3YLPK>8JA|_iQg=O%H(_3HseZzz zx%rKGys8wNXfI45_|+&Qb`X14&D82i@ybp;U!lY4cw)#Z%dSPj+CZ!-jW11p(6F1T zApZ%^^mB&vOu@u-8EWo5<(f7W4>HsoMUP}uMM5G3$-I)BBg+O~-ftjgdqqRB-5yBD zMH7$EQ-T{p^5xAecjtVkWYE^ILoIUa!Kf zP*bG6>L!8 z^og+oG{7~aKnJiMQE`I)!Z|y^eK^}|ls$GiioJeDCvf=)RsMu2RaQV)^M%u%7v#3l zBX=1X@deT-Bj>kck2iu=Kn1MeLO(OAsTL7<%sp0P#VK}?VP|1kl87 zpdDgw4jn+ODnckWYeL};sCRbkPOo!io#kVnc*ZXIO@iIKq)CUqU~H&h9*npSTlvLL z*!|PYfeEE5{xXn`Xw(psDGxOD zw?Jw*X{{jELiv_V2x2hZ+>n+93{cL6@|){5FP1_|TkzuGiYcrGovd-N;q1WIuEwf& zh{BZ#*D#J}pxh+AXLes*jEp*yPRH)_(P>5Va^C<@w3A>V8Ee`a?q1G%qm$ZNsyw!l z+t>c-Nc}h9_TPp8*PwgD2sJFdWRKE!@mUgYuWqaT6_ONXL9xrt2>7Ge40+%}vDN4G z^gTTR(N4d{`PafZo^q&Nxh)20=82q!qm52uYsR|a&qk&ZIlw6a0irauiHXf!*=8Do zP}huf^_Rkw%HC&P=+^rxf2ThEQJSH~wXFxm!#ojtS_xJ+xmhOIM<%sNCh`)zr)aeIjD%>jgn3(FC5W21e=h_pwl-^mY z(eIARqS(&aKOU&LmsoQBw9oIFw|wx-Eg758ZIXlzsfK2@Y2NpxPEa0JKC!$+QTf{U zV4Ewz3&qP)Moh2}_K==36g*sm1WzTc9(`N2r;77N*G4M)zE7ciOoe z(7g_{DL+_I<`gRL-{2S1f71kC5_`t-uFFe zXB{Ajt^2i}`iZ54V(0t0VA<&vKyvJ$!@}OOgjW~qTn$!{C0=&qS{V)Btz~5(AWy7b zbYH4+DqHvx9NijcF_hojo>vX%y%2V>y*Y*p ztgir8Ur?la%?PI|2hO)u4lVcLevHNVP{|^XhfkrY(JK#FLCzN_Z3d~zn3zb`lWi{Xc~Br9r5)F&~-C* z-ceD^HQ(M~(8v_vS^wyxbJNa(O7C^;JFe?`68Tz_$)aF#e~T4z%XT*IX<6xt*@1!` znOA#`9*#n~9&+!NLp#Vsuipw$xYlx-=4k_C;^7!iO1%5-bZPbquo?{mV5K*W(39sz ztn=je4Rp@b^Gb6v5Ssh594&7Ct&JTLF3B9_R%Tgs1v5Hl98?c({bD=W0!azrRP{({ zZ*s-5*qik6jE-x7;7N`L=?C`ICkC0bwqua?l4A{$9zTAor}yVv(U!RSa?LNPB&hsN ziR2#;T!}Cw4tc#|P7*A!j;Gk?UWrm#-I8ZQKOS#+&^*U%=lS!=Co=}-S0K~8xP2lY zrZysL1Kt#;GP~_M^H{7>AOYiv>{Grs#upx7jpJ60Nt^~(?AoZ6+)w##U>&_?dcFS+ zEd7g4B2SaMp2L%t(H}WdQ|~iOCk6DZG9{3()8w&0+PPs%Yovqx-CJQ*G1VVHhAD6Q z&H|CABMv*FW^CQo)jG+|YNgHRO0e=lggiuagnRkUa_jb|X5TA-J|q$Wj`BAx@!sfW z^!;Aveby8{=;Xtk8~g2ZZqX)S%e-ktxYkAYISF;G{>fQZ@=Fm35eZhK^1T$yPU%L2 zSGE^{V$YB>in;xwuiKo)Xw#Ros<9>GP?MO(%L|vqx&mku`Jm7NWM4zOU$Vwu&hNHd z0ag|xtZB*hnV)OrmM<+g!`P4Am#+Yw>Rh<@aQ2DX6I#=ONFnD`mow4Tit5;h6&Bkn zT<2#J!w&1S5k_AlUpH}L1D4FyI4>3n2-NV@eoRiE1T39Y-~WQtRQ?xZ+`rZ%!SWJ{ z$7@%|3z`1JJkks}*)tk_9OW#eHJNR`xSbRkPxd0<{PPCs*(dpDYP`2o*_Bo2#E=&< z-CO)mT&CVWl^OdcH+iaxDXN40@Pa=!8cvD7?3!tQ@%_z*Sw`Uym%&WJ$avk$58jr# zpHd2m!~-|{wdLiihvIRZ~(lcF5T`)Fb&=U-hflsz0zs70te(N;FtNvjQ$>fh0r{R8AL{$LM8=-1PL>5A$k|s&JEw5#V}&nOkQP(dutEJ zjItyyJuw+SmL+>GWTU-f9Ux$wVex>auX_nt2yMZuu%!@nE;D48?&SoD+aO#D5fzVw zdRiz1GdTm2vIZ*_V`Z&bUsfLFVkgkPfm~~4JuOMeG##Si?vHy|DWAV^Q9wIfyrhj$ zF78;6(?Y#&%;93<6MsU%JFrf13>4Xhk-+SP82ve`WIVGt+dk**|NLqcQd9akUNh-= zut`F^G}8vF!`hJsYln5s>9i2jnQ4Gi8YC-qf7!i717CiG!FBh-7osQb?{H~^euzvg z{aOs6h;X=lKS4FRd(Ac4CoBp5uKYEK#HvAsr=bycaKECFqwO*s?j6DW&ZM}gLg;83 z^Ig_S#mL4c?#Hi}hN-bCT*Y_WIye&Jj$+lDtFqxKjiIf0L#&$=mU#$Z7sdgO3yf;z zNM?VU4j$dFr|!7XyT#$Wq7`?-0U*8wx(|ZpB#n7TKdLtO3rNmF-yhrSSaGoY@}k=@$_BC>a3nHuVWc6;U0uW8ufF3h-QtfX7+!T(d6{j)^--#nlvaJUu@>5vnY zDB075CwDH0jWj2Fj5MwcK0aR$tZ;YwT*6jyV=dOuO$8{e^yOaIh1k(GS?g*U;s_(A z$6a+~H49*?gSpjSNcF)x?0BxK1en59wW8SDcdI|-7a4y4>|GvD1P9>Q^xLvyj!Lc- zZaGZ&Q(&@NsBv+HmdDaH`$6v_+C5KNK(eP`*X_GdF1wYW7ph+;>r%*O9@=GyhKAP2 zv8Dc7CsOIj0`HOfl;h{t$%ET|eo=PGZfdl}`cGIp2t(vHf7;dVLpz1$)RuoO;bFy5 z$sK#^5;0|c>4n2QgKBnMqolM!q(rw3f@8idCa#ajR#zSC+U(uR^Z9a8`eO`Q0bWjp z&~YF%_ek1Ulk{#nzb|7Op1gIdA)3j;ecPov8&@5vt0Okj+jm{%Inr6*4Q$rW_Wpfu z{*;#%Xu*UI7}Zkuy~?<}ogwR=C5L@(;O{)E1YS#Qjn1l=uCN-3s1A&g^HO19sc*o1 zz{2Q2Ljpcxw!)cyfAnbQ?BMKFmhffU<~eBuUFXUJ6P@?C{!vD}_xQN;W6CfPQQbkb z@AjNsT)LyoUC`^PHIp7ESiuH+E=6lU6MM&SO~ySPwak*1%yDDbq3P24v0QYsKt-zV zT0t3oOOw!1pn3ch<{HWpQK5iRUqR;Edaik`lnbtPq^-4Ijx1#YmR~KqIUu43#k#E% zTfg4E5RCMJ=-cd|Scu5ll528X&GolE>3?Ou`&Sbz|K{=knV|-@L+X{#v`O=D|Kvq5 z%G`zs8Z}#c5&JGok)p^qm3@=OeJQu`*Gjdq^plIvwima2?4A@nQIE~CD|n>$~N)T1{F zUTGzTB`kg1R#7m1lIxd|ko~<%{$N5PijvAMX)ZR|&$-y{jGHrLf8u!(&$DAI4-TpT zg|b+^wDDx_-@VVE40D7&h+w|74S)>uHZG*y5Ag*eGYE{)Y zg{||f8a}%yA%kw1H6Fe?#wCr|kvc2ASxB7@Nh}D~$)q1p*DLC{0oeTzK-|IF!QSed z>SUqA-=jpUS+LWz4J-SU^=PDTxp@7C&$Hqgn;*xJ8Fk8`QF?EE9fan)idyxTKguLX zrODiSmr`E%;d=hg2ybGeJK@Ea+`X-g-hm!m_fr|ZC{!eqLWx3Nz3-iyLQ zosr_jp6bfb^}GxUm1R7Q75B}9;445iL&YkSfJYWXUfR7d&;BHvwZwV zWjFFbzYL@mi@@e`>-pIwA9`u!9ORzpvhZ5{3mh}+iF>eYAQ1PwUwuT&{Q_?trLPmm zQQU7Z@(Z4QgnZ#_*k30chnhxc-&Ws-wAea3X_fsS7cn=*5y#WKTDAI*?ewm7{8ftl zpG2(xfT1HzTndBCTkW- zKQ;T!W3K=;=1`c85H-0_udkS~0$*j#v}27x;wG?Ed)YnKQ&=AmUDRKiR`r94=e1Av z)-(IakFMH-oYC3>Y^eyZ(|4!{1iKa^E{QF-o=hNrUVG|%Z^XUVtMkW0VPJuaCl&e&U|>1}~R?KcLfFqV}idcO$%i0wPysxo-nK_DONPvF$&3T$X6Ixt7Fu zZg>I;1v|ll1EpTYPQocZ6>2;aQ!L|8!Xw7g9P#F`V{o1I&+lAh?1w8K%iwZUc3ENf z#>7XFY90A>4CfL%`dn;5$|~}mS+ag{yI&xDm(UR*6t~x&)d~da6$nC%hU6z`jf>mm zHD>90r*SlX`p9iC9pv~$(&`7r-y6k`N&#ku*fJ@(ua8j2e&y^o8pzXJKEAYM)|Dh1&}&^eJ7?_8#S9VBO6Q-{NJn2^>L>gI?G$&CNPL<2xnjY-~J%jhI?)umQcVDF)fF9WL!J zV!z6lqSP)$y_Ht9-Xbkz7MoJQbNc<1Nk84`{KI~^_&8|}zeo3p!)2Xpyd?)T&-J&@ zAjxqT_l!SSi0-Hh`kX;>x6aQqo6Y$Hxc|3U|0m?*J-D$bjBpA^5_Hw4QAUcVt2;kw zF-`bk{+J`?ykAQ0y40;$1whF4&#ndEi_p86&*0?*RfYp&)cxYbTjCL&7cGsWi}xM( zHPJ*52lt=0mM~KE>GDBD&ev8!1gMCW?=bfqRMwN$u{sC0$4SX!DN9W3E~AS&p>LUh zMR%+0`(D~@N59)vC)Uf$!Vw{lc>Q z^B^ES!_>9V8z?VLBzf@2RBM>nW98n>pZ??Zm#PY9c@usg^H#se)1rp20EE!WmNZ<0 zS2&hS#_pwo?cC|s9kUjWZBo23z_-5X5-!cE85X4@cDUwy9LmFbG(()(Q6(L7;bkF~ z*t?#^r|I&(*0yK7S=P5M^(X|KJRj!S)W}wmTMv(O?`a!y%WCr{QqsNWG^owzg3f2yKrd#R0{cgTB@w*!AAbsE=`4Kdh_lx+!Iu2^;@?jJ{@&A$Fv|7kmuuEI4k*}gCtT9tg$512ygtVfK_4K_&~!V>sel<-azESElC84=DS4E~(*RLBHzKGuB5Use0qtJYHre)C zWJ`NgtMuiEFyOMqc#6_Zsg1|2vT84o78Se#Wu0%qvLLUemOlvt-ea^AdFX=|f{T@J zrW+_JDE~KumOr#yHUTcVn~n&D*Oq}JWeM_37G>Y+x75azmUFz6X{n_1x)8aO(<$`E z;bzU-q4U*VbA$@?ZBwnJ=E^9ocSP4r{JqVjmE6{^VURbsAG^s{Ti3kNnca#NbntKw zNx)u5J$76}8euf#Gez@iV#;Jl>3^{d$b)c$AGs5nKR>@5kH{Zx(tKZPwlVPM^_Psll{Wipk(#Vrc4UF3+d2o zqw|*I4DAxxHj{!~S7laKFDpQ})~$WK#?~A!$#$Ygux|bigwS1z%;dP#Wn-KWcLvU> zKzW_{m&_D*jt1VP%OiEx2sWUs*f9uAAeTfxQZlBlOnY$ysfXMcuo7-5@A$= z*C_yaS{VG4SUWi3b^&4W(^rFYL3fP^pGLd~q{#qMrL$iReh<3K$`hUFLx<-yv2J|- zU15lRi1)0F8Z-SXT%kQyp#WIp4Lof_l`Zom3?S7GoNqL&c5qaakT-D@^WXK ztMFZoT0GGcIy})a!of2|;k&BWo_=gkl$m4_JDLh)R=!YW=2LXqUh+=tlU^D)ITpmi=U&k$ zi9cmxRqnT954pZ^r3>T_yqO^77gFx0LE}f8teWnwGkYau!_tvU(G&Z4YJ_0n zm&Kj5m>z7tk86?nPw9Avl42u6E6eHBlz7cX@%Bh1y56Usc!EVq0I4!#ggXytin576 zx;`b2PZ{`3hsWztAo`q@8{dQOdLobxPxcKS?rHde1l*V)+=b<5g#A(lg#A3hydJn& z?hj~502iRsmzd%caOll2qkEM{_JQP|dQqedel(h*ihENZH+`d7);XC&mA2%eB|p4F z)#|2d=Zh*{3w}1tZV0dEc=tr%T4TT9|H@Z;={?iyE7S!e-frVW(xZ*6qY56(FzV~D zQ3GE9`MZ~inD~_eG!L>VyRQIqeW&e6@ZNoRv7SodL<_B*h@+T-erNP6;=(>k9>PO6 zDiPA@sOOQg)OOLSe$NO?=F;$AZ9RQ8@PI9G`QXP4JR-IyFO4xs_ECVNr{p7V@pJaC zt~(o2)T>J#j07`iX`I8cf?6y4>4S?RD#t9Bedc0|353>2m6!7QvhSx0p*Zz>7#kEk z;F{Mv@czHr-aD-6G};ypHB^HlNDl}KQkACC0wN$C=^d2bM0)SiI|wQWp%($^z4s;{ zAV`OZ3`k8xLLedDpEL7(&o^gg&b{ZJd;a1{!XGK`yZ72_?Y%ZkWYEKllVHDORSq{O zXbm<13VPz4&xVkOz=yL1C*Kr96Y0y{sYIvyA?uYK;j(uDMi;&0n~D+Y)o(cL_NQtu+EWu1Z- z8D;_miBD%Krr*06g2yfB0}18krAR9I1E>=}8Hx56ZJ2zB?=$aShfYK5t?v;suja)Y2CF)S;7`a4bp zMQl#@`Ea#^yKJ=SW@?uS`2unyH?KWXsLG`(pZB#PsVwWQG3^eE)A=BREU^ z2_mt_pxnHw?JdZEw5K%b*WRqIBr5`cc+*VA@%%nB4I>#hcp_nwms<2@us64H{*`KD zQjN~?FrX+W4zUf1327iXmPb%isK)awJD*oge|JX6B;I1+zQ`C4(C&;1IzYnlOIMv)~{*N;A^)K;K7G=pd0S>6<}~QTinqX-T$h zpc$$ePhJsJw7jz0P3@&L_tdl-%~mv4zd3WOMIWtC@mvNa=4dt)sP}H?6wfv%*f60n z83fa6Oc|7}`d|adza&PQ?DG*ED!_G*1HExb$ne)99-Vnj%WZ6_l4DP3v&%#HWImKz zZ9_}g`kSuE2`yR?lg|y@ln7(bS80r5W*pu1f{QU9BI(rJy|`c6j7l4dxlb6q>4Z3x z{p*nY)ssX!O(go2N4aD3{E}^sW0cX6&`rbqNU*-oQ^I6-hr2F@GcJqJ>w(4qCV}Hb zkPp+1FdCEC;j9;dewjZ(JDEmQ@0D%Nf*BgZA4FogH@ffLPof-XoNH7byaHuud>Z%@ z6w{VvhYu=@f?UwY8)1#QO7^G~f>O_w4#rWl@&ahrn6`xMB+X@x@a^x%R?a%;dNVmh z+4z3$;D#oKw|O9u!pRq>nYWXBtNtM$=Ywi1FFtSAJF1G(J@MbG===nxr=+OwBHN+f z!Bf!2?$8hiW`_dg$x0K`NyAf<9EdidZ^qh5@r>tN|6Kc7@cSLF{Bo@ ze*`{&qTVel&aoCE*Ip6KiD|Wenxbgq2{Q`bdo)SvPNwyhB}|?OJ>K8NI)mfPU$kEm zi0pb*Y^2E1T;G_$<;K1bDq}4C%Q^k?E`q0if*K9>iwgq-kU!2NU)*uP->Z+wmOLR) zm;}>k1eEVEe2-2Yk}KK=Z;|GgtlBSStigkbme!V3keb91)GTp>MvwO8h=b{B<*xzp zqG3p-BMt=QB3`CHj-nKh@?}RqqGV~gRjg!y+92E;lNMkB#biHN37`5C zy{&pcxf%p-loiafW=nR*GoVQ!4crF`o32Ze7HLNV#u3Xq)8k#ka*gf+0wCgB%Q*KZ z*}~$6hwM+D7f!uhSu1T-dF#OU@Vhilm)VqPvy`@&;AsRdQW# zPj;#ZXd>xOZVTywCe437-#jyCov+GP?r!0Z*E&pO`RdPC5cNaRoq(N!0ortXg7w3l z395L0Z6425GTxr=WSnJX4Cntm(2J`D&dm$oo6CJ64J@ZkDKSq!dt$t|<7Q<`x4q?hm~e*B06VE*eXrN*E){vV0^!qW2rq%%5GX4i%vG|&VeFd|+k za@Zyv-X&_m@>k(L>3d)vqG1|*um8nfj|k<2{t3dY`k;K!FXs34?aUy3$I69<%SU5J ziE&ec1ViSse)!!yX}-8Z_tbsF<|r{1F7C=uS?Rd~*QjZmJ36Rzw#+<4@9Kq9`s%ii zbJEc1DRHIAg8Zj#x%nKYK7}lX;K_>->*NlZfPg)Cj}vt*#zyY?PQbB^U20C9)rCjW znIyqT|MR&y3S}qG4;67Q8=_*c0m{?+qO3B^tiogK8nuxR6kHsx46;~yQoI8ZeKP~o zy6ld>BunzW-WL9dJMm_e0uO2=KjUQrjodETfh;r>$|6b$A;USK@X^KcXfq)-6luPV z1L>DF(>p68F|Azbky^qUPLpZ%4s1BC6t)X6?JGlp2J?oi8&yi*$HuZOJ0eS zgY#o5&(wQxv8&R%d$o?=M1IV-C5!%z1cF?>sD{}ExGw2zOco;=@AOw2H!uHiD!+Gm zwV+1N>SCBAwQcjc^Ob^77)7Hx8@B(v@wYeSOX{V&`a05`6UAd!Ga0XDSldX2ld(s9 z(^sZQdP()#D-Y5Dvr5MB(3c`rmd1P6#Enk6i8+azS~YX`)N~f*eu9i>@Y{M&pHTXY zsNix8->^9plZ;q)@#$w8ENLw=O&IpFWA~c!lAeq9y2qJMSVX<_PiGM(+`UnB{=q+b zI7oO*xM;!t`S48$$C8l+7*9AB!Za^Q4ZS7wSYP;wnsvoYD7T8G%CABPz~u9xH?9&$ zc;{IId3vf4W_ba@nrwc!W(dZLXtcI(ukgdL#s#H)stXq!@1On)^#FU@Y3m1!(OGA_ zDfU}^TRX~CJE`f9us@~!Sl(h)#YZw#0Na3zdmASo_#yF<8;MNHKB5lS52<;L)uu1V zEE%ABbVb)X68O4T>(Og%Q@?BpE@^%NGN2Fw(hsM>3>!Uf3r@B_<v7P6_Or1qML~705Lhq=isUq|@j%n~(;@YIX}RgRpO++vDs5zIHF@qee5fV2w4p&? zX$OqELfdydULB}_;=C!4-_$r;n3CLac*F?`df@;+jdW3dHp#Enr1UM)ljZkJL@2OAjNuZ|kJFBPy6^E7!_yoR`=7C~Bdg^GLPquM+1@Zj%} z+KO`}uaiej#+h@3&jTdK{ageOzS`S1=TIoqmUCph{0?*$LD=K+NDgGLRNa;aZ=4Q8 znQ#=JC#yFm+=F->C@uH>qfX%ZkcBL3=)Vkiq2m z?#qHQ{DJByX#6v+fu-VERTedOs~Au!hxAxM9*)nmGERxN6R5X`0f_$&9p8P=|Jc-38q%vTXH9NJLcF$90sU%rwM zCJ4DMM*Ko2;cG3_Q;^o@<6-e7b@T1vb_|e1OfT9l!h)$LkXC5dk5!G7uJuk?o8pbZ z31rp|56&L-gz8qR((o-dUpSRej2yok&r+Jsu$2QKpC9Bv8mnLrFu!*FPRTSDWJh8F z;VwU_c)I4>;jGvfa>pXx46H_SlO9?IcMFy0U-81Ob@2ompfrax=~ghwgKZ7x?+XPV z_$36k`+k2E$F&nfe(&+F@+cQvTzzyEuAp(br1h!$gQEEjiI04_%}73U5he^Py_-6U zsCu$BLzxMG&}ExB=Df*0J~c8-wEdu}hmn*08{-%=gI*!U_?q!4%m`+iywu+ZYv>C9 z?%;Bf{zX!kIw;R{jLBX}eP@Bq*^k{7WW|14TQLCfSl!-NuS_NW^Rw-y`O@3Ja}0r{ z*r&mL!O)9>DnTiQJb~tDJjXD@Aey4LERsRD6%@2@NiNF|0v&4QiT2>)QS1Fjmji`R z3hU8QdPOVtZ4>zeP0f4}Ngs-=g>yd?MJ#0HGsM5uk-w?&vIn3A5AcjY?{anTh2bvS zCDaXkgrsmo>ayxpMf4Vzad+6t8J4Ol?5*X+ zL0eg1N!HljGb6A$ub=EW7Eyf=jZFUX_Axczkhr+P`@C#wv#wzY_~92dKIkc>?qb+} z$^`3xGQUQh;)ZY=OB7q)48e~-c|3yHO$f6+6!Js4G34?tI!ip8<_6F;K}J60UAFrn zfM--X5)^EY{~Xe!K0FMTVL-OPHIWYm+4NsJXFpEWkiUm#=-tvOXBY7ZZ5tA2JSGGX z6HrCI)?xg`x}_Hb?A#y7eeV|&lmk{F)ua$jc$ZgC8w%ETj0$cDp6b37g3u4-M4}`3 zpGy9SIJnjU3ZCXz+t_?R<83!h;;y{9GO_D_Bhi zeH$yw7OKPwoq=`lL#R&zhXm6O1D8=)^du%5tH8a`q3~|_NnX^Ywwq~Dl-hFl1S#oL zlF@Q&9fdC) z4A>0aQ?OLYH2q}dZF7Io=vnX_L6`~4(~ktQWFIc8-l52|PJ0dl=&R)AyXdf2=rGJ| z`L2Gm0C$vV-BNHOja5xwrH^{j{fxS^A@6;ioPv(swBItO^807ex-$XweLikRtaquf zAFqK{W+}s@W+=0PWRTm4#11Tl!~{x~YZmQ^Ux{^je=y0&oWFsTBMvX30cr*EtFv1^ z4@Yka8aXB}94!)|+ok~>J((gqAeA&@Ge?}=OZtWhCGS^ALvMQeWiG<|JOj5zc&2uA z%1Sz>NISs_XHfb1(m!NaKc8XvVt3C^P=iG@>6A@IO3#Jq ztXLC*U_2oXLJO|LKnNN*l}KKM58yA!XMAqJ#L~R?#Xbytt*QBX>pnko-kmP#0WbZ-LYcp_M0N8V>!D{jI$-aldK&>~{Lu z^q7b@48x0scOqLgXDx>D%a2Fs8HI3kwg*2!pKzj4F!l3A*DX+C3cue`0)YJ1ui_L~ zkoM^FyHOm$S4>o`r28PJ#kSf(Xo|oxNRE`n=Fycv`8j57lz4N{d-JznOcs~aL(y8k zkM}`z`ZWxwSwibSGzMd<8|E(welcx8W&|_`bATcLDD3%77AlViCPGN32D)QY9Z!+2 zA4N$`%A1ojjgDUzev24cQ7YK%e7KtNVl{bYZ2LcPqlDe<-pGg5I4`|C1qL2vm>kr_ zJ|)RCpGWvyc@NkLo*4NAjOaZMi%-e5zn7=wxy#;|N^7Zr-V-2@mn!UY$3;?w!coN?H zc`yp|7%PqmJFxxUsP4mbBcC{m?YXO1l*HvLBXaw0M!Mdyvr*B~3SWcy)8me({1Le# zvZh!{G|@$}GhS-9xl0fgSwFs!!)sALY+v_!GT$rm>5FO^V?M$K&KoZYWu0AB;NsO* z@w8^MrnM^(g4e@hNVX~fvnBd-?Ixyro^?u=RFWZ5;!ry(kO2`pQL90c=ZZAM zJkd+f4=zC)H}b9ZBZg>rX}#|!h|$5E2YIk(=)~mQXMfW?x}Fd6MW47r=m9zFZo0!N zEl+tVeee?gLwAFIELItJFJi#hu`0Kefd0HB)52p(Ghy>np_l%lutWvH&I1+4?J)iH zVm^`i-473b$rc2R^5yyjKxyaC1Ue%^hXY~O83X>3ZRUuF*dU=XUrEM{A2Ms?)Z( zIR(fqV_O?|X7`rHu{zmJz3IkD(p< z2|{W>lVvE|Q#p}ozDaY+lzs)~3c|1!MLu?%mUhiqQi$wD1YQ~whY~ozGdpGuCQ-dQ zqI<`4sQPFZHr!-ibC&!LPZHA0d8oeHREn}1xFb-9n2gA4<=?))EYMHT;1*7E#iKt# zr{-<)v<0y*ZT~uThuAOKlyV21#g^!Jhc4&s6B@StfO@v#BxR{Ibz$n=KZ;VANcTn+ z{%$}ry)UHi&e%i!Or70yMF`bQOOmis8O><&>4dw!f06%dG3&3v!I^ZE{?}NUL@UeU z%oZZ`9;Yeq0ApjP^=N;LnJdz1V=7YW##O$nXz@p`6r0;^Ze6xqUgPz^DCtrs!+YJ- z;}h4{>K*!}rrgr_?5DxbRAHUL-`}1vNL``sGfnzU z%;8;aEjAW0b=hG}5Q)#J+BtOyDs~kA=H=wU<~>SVX7eOhQI3U8$^S^>JeO8oQbgtT zpP+=|6iwe&^%CvV^l{BtBkI1(wk&F-$g<+rMz|z!d!U)cm5@O=8;Ffe^B+24lept5B!bm`;!U&`=4OIi>UX}NpEHFJR4`E^)anx zLwy5uACIu+JWlycXAy(Gy`-Zwev+=FH>G*;x`S8B1^XaSYI>awaB6Bui((|bxAJHc zrOSz`2ya)^v#}QsKK|^70Nw%t(6e}el@uBd2|xAmw@F{Y^!LY|o*TZP<=X4bUE$F- zY!lRz9ZltA1Oc;sQX}8;brz@0-e7v1Vsi%v3IK;L5kTf?x+q*w_CN-hwv43;oJOy< zvzdQczW-yDH^DobJA-ak#lj}nn-{*Uv~%E@`~3f}M*12IS}YVIpo7i1+givE{xTJJ z*FOEYNuO?apI?`Vx%O}}!C^J*``v+c%#G;ShA`>RVN#lQ)ys*8O-%2YRa0P*bVFag zhrPcKYNtR2aq<^%pn>Uz2rOQT^__!wt#HLUL*TNk$zhlq+s>#=SiOE_58}$}QSH~G zuNpyWJeP%m>eqhf4=50pE^zyXISB};H8OtJU?KUz6!;;Tdzea>6H1I`WS|7bwb}79 zT*8KveGo!YKg8Hn4rYJ*G=G%C^nw_pid5|jA!)Fv@%7NWJi!ii_{816vI0l1v%(e` z9xu2%kuI;88G@1vkwvcJ)ds_9#v* z7mu~>Cv*lEm3WpYMyT^k{B>a8kMRtA;17Zc-wt8ROIHmm{{mM8^JuJQYcwW6YF>#&?OzV~jEB5UnW&oZX2xP48Jmy9d;k5rpf;V`VOv`;f;Mzn1` z^vA1K2dZihE5^DkC27@B0>u!_WzoZ)v!kJIq^bqj@qT(=m%v=ZE#n6h^o3V_rb+hS zT^oOrtZ(~nn|106N(e_Q@+C7F9V=QTFZ(%P<7pCKX}BL4TgR>dLrMkAd9X`W48ZH| z4hfMLG@kY!Jk^u_u``c_TCjJ)m@4w_u{!m#T}ReMRM|_Eq(B(E>(d|?@A!=s*NivB>aRjz}r&l z;*mhsCboZq*D#<=v^9-xDld=(xJV0gcBwZ}ui_4z3ocO_+t-RteoG1oVAlc^Igp$7 z_JV;-4#og002nSQaNRXljB0M{Fyz#mBWr1)5{Xg^t<8P(!LjuyYhtvfbx-g5|3yHBR8udr-92WK~f#d+>!W zKPu^K9q&D&(wEzvF6uw-)!ykW3VvfC*Yhv2G$H?G1xOBPPtT)@pCZMCXz80&LDXCI zv3*XDR-o?{KpwB41YL})Bi7l7?MR!H6Ypu4SXk1SkL3fH9XxUj5#3)+X&v&3Z5^69 zCfM_-7NfACE|5`)qeCn!>SWw@(Bgoq-MD7yIiD%M6liW%)u9hmaqd^iU>uLg{{xlx zS0MDCJt9J>;wd-~C;)#feI5!>z7;6oYQTv_qk#GH;RpkMJm+k|#X#VSx?JM~j1m*I z-51O?BQ`D)-zj{^yr8^~YVo?z)oS>psb_W0i2NMm++l*45Hg*$IsS2>GS4^e07fZY z2kV?&HY-h;%Sq%V{uO2JpkTe?fFvfv;tTI<=8&qg(#Re6D6>pJWf%;+T9 z?W|P7{)=()?`iX24uuwY%N0l0-aAo@GeL&Lrm?5&p35(ZB!9_V(^iHd88@MkR??G8 z5XIyds`^Um{ceK<9w+s9@&MF4lnuw0-QzQx_gU)Zz=MQ-&w1fH)|Mjawc{K;J!}@I z6~2-cEMkQY7Om*wKhEFPDI;1KE;`CkG-Y( z|Lg?)_g*^#<0(RrgB@=2t_u{o`(*!Z+Hu)kK}5!4UF-E7q64xAY$kMI+u^3FO; zv3V4-T|C$xr8#ytw;?KNSlY(R<0Pu-Uf+MWC+*)tGLg`r408?YRaB!3STEG{TUK#V zlYv%xBI;2jL%?%&B8?^Z)aei;DhuA*9oxl;G_O=Ow?B1p{VjuXd$?bLhw&bSnKLXs zw1>@!w9=>C%yjd3kYh#Ifn)+shM6@-UTSx(@^v-r{CHw7vbE-L+#t*&t*Dz2@iC&8 zg(-l1uTW+b1B^D4JjEm;VhWm2nPJ7g^Q$xw9+xG&mYaO}N2=(-d9lHbj%tH5npX3I zK!-?;3{;gQz%^>=WpgJYTQ}+6@brMQ=Ebq*+hl7jTrhaHyBVGo;vgW_K-v`1mrHXT zI6vcj!zXQ{ZhFEg>u2B-C{X@B>OQJ=I+B7>wOG zTIxr1?!UR^R+e)wS;vEUxf(Cc1B*2E5y`E!J4|$T`yY!Dz>F4gNH5TiZ5xex6)Aw{ zv!^dnH<5c`vPU!Uq5&-#Yg8jS@L@SgW;5;4<*>&$g4D~$mY^Ann{=tu&%sywHZJkh zn2G?qj!elX2%d9`0*CF6njq*)iYdWwIpNzy_z5bd16E{N7_i-l+&p9WqH|DPKsocn z#ZORG(x0vq|GiuMJL3D>c_ZYjFm$c5ZEB5@jQ2|!<`*ur_TnTlWFuqWh>(RQ!J2*c zE&Q-Dn5>Yi81oq;Jj<@mZvsW_4%*GQnv|38qf?o~O?0uAl(ut8F=N}KjH2-^VPypF z_LMP(zy>t8JffSSe?E~rjAik)-5XqQ6zZpBwm7NT%RG;8!_iNm0r)Wd)X~Y^`UlK! zPyY2kztR6UAD%F&HUHb%%^4xlD&wJbomnBy+bc$^16*;|Qgk*_G(kH=-@DNrzvvk! z7-YK(WzpAek{Hsrl~BLKqt@K!yBpY5;v22;9i%9a$ju*^7d{N+X!#m`TY>M|udO$f zVS&I>8~R^Metxa>37ocUc?PU>n)+Cc;hO3>JJF=ygI{f=bZ-lOL+jvgBJmSc*_uKm zQvS^daa_1iulqkk2v@ zu9u7i;e`$z#_KFCGd*9z6`-6*oxQJtXoIbuQ&d hQy#B_KUZ>9A@)D`FYpBaLtnu^elLH2GUVst{{m*iQzZZZ literal 0 HcmV?d00001