From f1d57b1d17b4285fd6e249aa5ad371b989ab15a3 Mon Sep 17 00:00:00 2001 From: schech1 <76683319+schech1@users.noreply.github.com> Date: Mon, 21 Oct 2024 20:02:15 +0200 Subject: [PATCH] New systeminfo features (#17) - InfoView got reworked. It will now show some system information about the backend host system. - Show and warn if backend version and app version are not in sync. --- .github/workflows/build-experimental.yml | 2 +- .github/workflows/docker-build.yml | 2 +- Dockerfile | 23 ++++++++++ README.md | 45 +++++++------------ VERSION | 2 +- backend/Dockerfile | 15 ------- backend/app.py | 54 +++++++++++++++++++++++ backend/requirements.txt | 2 + images/sysinfo-1.png | Bin 0 -> 144127 bytes images/sysinfo-2.png | Bin 0 -> 154156 bytes 10 files changed, 99 insertions(+), 46 deletions(-) create mode 100644 Dockerfile delete mode 100644 backend/Dockerfile create mode 100644 images/sysinfo-1.png create mode 100644 images/sysinfo-2.png diff --git a/.github/workflows/build-experimental.yml b/.github/workflows/build-experimental.yml index b13071d..e12bf9b 100644 --- a/.github/workflows/build-experimental.yml +++ b/.github/workflows/build-experimental.yml @@ -36,7 +36,7 @@ jobs: - name: Build and push Experimental Docker image uses: docker/build-push-action@v5 with: - context: ./backend + context: . platforms: linux/amd64,linux/arm64 push: true tags: | diff --git a/.github/workflows/docker-build.yml b/.github/workflows/docker-build.yml index 5c637fa..adbe964 100644 --- a/.github/workflows/docker-build.yml +++ b/.github/workflows/docker-build.yml @@ -42,7 +42,7 @@ jobs: - name: Build and push Docker image uses: docker/build-push-action@v5 with: - context: ./backend + context: . platforms: linux/amd64,linux/arm64 push: true tags: | diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..d70716e --- /dev/null +++ b/Dockerfile @@ -0,0 +1,23 @@ +FROM python:3.11-slim + +# Upgrade pip +RUN python -m pip install --upgrade pip + +# Set the working directory inside the container +WORKDIR /app + +# Copy everything from the current build context to /app +COPY backend /app +COPY VERSION /app/VERSION + +# Install Python dependencies +RUN pip install --no-cache-dir -r requirements.txt + +# Expose the port the app will run on +EXPOSE 5005 + +# Set FLASK_APP environment variable +ENV FLASK_APP=app.py + +# Command to run the Flask app +CMD ["python", "app.py"] diff --git a/README.md b/README.md index 13aa455..7ce8b15 100644 --- a/README.md +++ b/README.md @@ -29,42 +29,31 @@ Uptime Mate, requires a lightweight docker backend to run. ## Last Update Changelog -### Changes **App Version 1.1.0** +### Changes **App Version 1.1.3** -**IMPORTANT!** +With version 1.1.4 of backend and app, the InfoView got reworked. +It will now show some system information about the backend host system. +It will also show and warn if backendversion and appversion are not in sync. -The update 1.1.0 of the app and the backend is not backwards compatible. -Make sure you update the iOS-App to 1.1.0 from the AppStore and pull the lastest docker image from: `schech1/uptime-buddy-api:latest` -- Added an option to exclude paused monitors to the list. The setting is available in the info menu on the AppleWatch App. -- Support for MFA implemented. Uptime Kuma instances with 2FA activated can now be monitored too. - -To add support for MFA, add the MFA variable to the docker-compose and turn on MFA in the iOS-App and apply the authenticator code. - -**Example** - -```yaml -version: '3.8' - -services: - uptime-buddy-api: +
+
+ Systeminfo + |
+
+
+ Systeminfo Details - image: schech1/uptime-buddy-api:latest - ports: - - "5005:5005" - environment: - - UPTIME_KUMA_URL=http://192.168.1.20:3002/ - - USERNAME=admin - - PASSWORD=admin - - TOKEN=gkd4el - - MFA=true/false -``` + |
5i{6jwv5_ zN7SMSgt1L#>eTd}XuRp-s*n{P)kE$aiR+ubbyjA668PIH@KHh{tJRh-*99j;1ak|l zBj#k)DgZO*o#!2*d_)=L3U1?kZio=7OH?)4E)XSER7pHjOWX)ZFf8_GYR7d*jMUR- zp;Ik+){e*qAv?x2O6x2$wv~PaZgUaDBp|rIYp5$Qk-z{A38%!Ym~7A-E&9Fh6Z7HnnY<^n;O z#Y$`qj!68iwRPgB^Clke{Kg?H!g110$idZm5hOG$B9-_=eiJTPEh40@bZGCi2wxh) z3Cw;gg+}snl6+m0se7uWQZQI?_vF_%klsp9;-Xrma0*BoY16ys5nYhRe gcJ+7s%Aq5qE@}&R&&iIcMsjdqSv1D75R2GpqopB zLH)Q9Yfc5e?VbfB7d>R3!ZH%k#+}*4Yz=C+Svyuh5x%PN-2WB;g%fX!IV`l^y$|W9 zl`jP^m>dU1GHQ3z;9o?Xp5d?jwK); G;`T51tkKa#$=D zh!5WIIH &PC?sy3A56sPTuZ{fdqco{HyVzobmAbz*>9F-m<-n zgw$1iCS<1jrIrcUDCC2BTWSQJ->qmMWdPWS?dBUVhfh N{>#-GM-f7#W;?U}E#f=s?IC?xt$h6zeK`{TepC@(lwu z4Lw_7hl V>JB& rxf zPN=o?x?d(@dxv$} Q!zt>-w*tl;}?zoJ~N+W zp hz4aF3SwNjjmL6-Wq44SzUS* zbkrV5N%oaftH0%o>~TW&93w#1+EeU;&VVMo5@F}4d*&O`%Q0>%q@G5A`P=EYPp(J( z>wf`!6ed-lDXawnQOz3b3xm4v)tVWD2_a7~p8khtv 1gl(k6( cSJfvdLL zPn+CTmJ{DiUnf-BK2vsl*|*m56Fw=Gbqy?tZG#0I#VQN^Y})LsZv9Grc6F$c0ul&3 z*O<~o4@;6c^63iie$72^ZFSNvr2fy$08c}wZbyLU>fh~=`O|-VdgaIZ+K)lL%!x `^~fK}r!ztqtf^u6j ` g-rQ*qLcD7Sgx@VNVuV~+n~UJ-b&u>wzyw06HiocqnHVXi>m1H0-TSCFg;8Z zO#+$OM-)!N9p{m1?yT_T8VjlY!5^ihJ zZl_g)Tk>TtqdXq3JUGoYo=7b<2oLfNXgQTl47f9_ylLP;(sV6=CK@wZI-Njs%ESd* z)CSQ)#l?FOYo{Z8tHGDj;@osHDVY6hYV&DTkcw*wKY)eaNNr-m&vQN)rfUala+}}O z+&NAEiG77LjG)x~7$;0zTVs5kYof}Xg(<#a5pl?`N1V~Ic<}!I#N(G% te4jrl|WL3AfE|IHftal zJ6hZokFI(VKQGS#544pe8X{P21-&t!ACskBZAl*{C9$qr6)v4O3%|m>tpYkb+l-8x z pk{}y1 z{GUF!)?f7BDGVsv^_|Hg-}!walw2-)3y2bnVHnnN*XoVyD88?w*v-`7x!zfBf-(aq zfZS6ex;3$5BUfKA@w1xwU-Lk-aMRzjr6kG|_Fw>q5gQs5a2022@%D7_9;B9k!KDhp z4Pbj`Q@)cY-e{|nFt6{(9cmLA*wOUnej@>B940NOf(SnOjjVmId1nNs1pzb^BB=$z z0R`%2suv|QY%Avs{n7}bD@7k{BZpKZohI7alKu}{-yPIc7kx`nP!Ul11f)epMWu<< zgr=e(()>i}O_3Tx3!x?y@dHtc2uKS=1VN-pH*} YpAw;q1;VO_wd2TrF7fdQgYvUDm`AOwI= zpnr1s06s1ol2b%Tj#=Tn=jDy+^L)0YIh?KKudP~5$yLm}B3etwiuok?qIEc?=^Y-i z0Oz6_jUYH@=Ve?EB8z6noGm87BB;Wb7sWOZDsXzoqt)AI4-xzF#_1M#3!G;leCx#+ z5^VUDik`I;o*F5>Px4q{YdaoLa;lOqa|?y$^%7G(c@0z#wi23Z>|Kh8Ysczo7yR*V zsm7QWRf+%nH)LZbi@Rob_Cp*lJi##-i)gx$!UGZWt`qgIL8+j6*XI+h%>cz+o`$+w zVRo%d+8_EEmBLqWJIU1Gs0bU?fjfd)vje<&+#S6Nh53Gr*gVe*rNUm&={i??>-M^$ zyuPYG{|(}3pNMMtod)?y-7@KF?hM?&M(Dt6;JnS|4Iz`ZE3W##any(#NqOyZ1Aza@ z%9b$Yk2@7bd9|C(878giC$d=+%FgvuuGiu}5zuZe{N7H;|L;{iXcSq6I&`-dRHkJz zaBpyT?&!mZW0|w#PfXAu-KjL9qIlY&9t&x09qT?;?R)j--2cMt-g` qo`_P!!K(9(WFFFW>yJMUjBccki{Fh`>+{Zug zd_YBX#Fwj2V#>XV(~wL3>w`k$(itW1<%Af{Z4}r5D9H;OwvXrMV-#PSb2SSYxM0vh zv6T_vjCw!-IdD21LnQ?`?5vC_T5imC@`dv30UF7gU&LtTY#xUEu!O-b8ZfrNmS`H@ zqsDT+i(AsV8^16TX+t)-IQB!G95P(9ga;e)VbnZxFMZOBM2{wCx<;~n&VX4Yd&q32 z=HSeP3fuUxqz~HWX!LB$O{gnl$XFX|*t3yr5Q*wHvhTT#33Lm(%#IPPkbmHl !6-QsHsddCJLN}%Pmk6*`i_p( zdN9-D-edkH<&n?H9$ 0{&?pd+#lM4-j( zjzuAGWD`mfjtwbGC$Wd-5O_ zKi+MtUfg)iVKsmhF%X`wwu08eP?N=4%bf)kxl?1I*V&cfb5{&pJij{#SuIC?a~0~i z^SO%t#MX(T6VY=nr #e8a=}GCXH&xdfpC zPK8SF>VMW4>l4ezMCC1HX7LRS8v_^ Q|rJ?1qO*# zKiuVRJJ|x*6LNuB@IYqL|ak1% `qT{qO<5BVYLB8>4iwtRwl?2IVTEAE=2md$wu846ho$7xCZ=U zx>ligA}+Sx^`odr+LfSDfD#lc8_lIvzR~y%l&jAr3LDPAB&p5EKi|v`fnU!NB3+qz z_Nh7{mfB=WejF_zR!JC?zh>Y$SLNwS{n2fK_|>v#2$AOep@eeEi%YavBJmhVC}`-@ zn!k&-G>R*#QN9>}V`GAbyhZF#y1|O Yk58Q*7lgdeiW{ ChDRp1}jP;!H5t)s+k{DZ~gWps? z?1YZ -&RSWTfM~x43N%YA7W6;ZM=Z@ z$&purcq$*yW)`MyD~GE!n r0B z;{Iras1X_6w5YQz 7)JJsDKH;EB`-8~>(rir(F=qvO%ctU(~V4i@eD r4r;%eYYiX6?>o0ADzlaEjHSr%qd{ar$AzvBuhBV|4i9AGTwRMo=ir>Xoq# z;-vS1 SNzdaQtoyGu3D4I?2h6)|q_->#=)y@AA^ zFx^Lf#fbMb)~+*e^^D%ibUVo%h9zsZDwt#FvjmU#1$W`_dIjQ-jWRfB3Hhg$Oaf|` zaUrew4tn2w`}iEMwcVz@RMnp)Oe*x^XYv=k)?~ztIe7oh%&*UfiflWHw}Zz1=Kk*u z1lQ>?k-h%B 0y0EC(Tly^_vPa3Py`pIrGSO_cE6OJTf{ z9mfqgFU<7UUs`KvH4UYFWDRhge9v=~`AH7ny?C%cZbe(jjM;n 9rB&`56 z%fK>Vs~KA6Q}%0T_S=Ex2D%+IO`)XwFXb+tz$x0hdy<|E+c({~dfmTVkvJkDH6`R) zh&`{ESjpu!3DIrsg;SrvH?JM*z-g(*b`vq3x2%FT1q|Oe>QC%)i&M;Ini3B!rhdpT zSYNkv*j!4D%X81$PiR6sS62|q^X=w|Q$i)g2~p>?Hqoz%sqVh{C|aJirON(#({5n7 zXW8GvIp%LE7HwEm@|OyFdY`a{S_{B12$gm6Y4O;qN7U|!G;ym@@- @OP2zc8%n_V*m|$Wr%o32V+! !UAQe4)!w$-9~BmQD)@eBU~ z+m=g-=B6I%k!k3joOneUM#a^R>OU5AQyt3~nQJm`W9!O)P&uLG<+c5uHHo@|6*p_e zNo~ecQu#5>!sY*3MWCSdcr|%27iVy2pbjt(6zWQP!h(6^qqgjK)IaQ;Nya^do!WBK zRf`8(w;Hlj%x)_xA>oH;Q3Q5l(b)LCX$yvWoqgANnDM-)(@sq(4EiK!RrYZ1&W*{W z?N12AL?phWGnSwHZ(-9XhjChpmM(}f{&?BK!g^B)RJ`TZ3NR#*bab3ww}-wRPBy2r zn@oQP6NN>RPt=?2_G)lT9wSdjHUG2!7L4NYoY#m>^xP{T`sk{d`H8kT4+F!``y8a4qezM*>c#mUxVt!1J<&_dODML#Oa zI(8H~CV~cF0DcJGeRjU-vEQ?Fog1qPd{aO0e$8FE>hnL6u#W{Jw{VM_7j#fPRtXqC z#AIYL04=3%d`Q^*gkjht`QA)Keo&JCj<~aymaa4TAvV7ShaAosJksxYfxwy^nn4K# zZdkYKoV;H4ZFQ<(Q_x`|+ C37me){h+jb~2wYLv=TJ=nt zyVw@1fH47T3ZL^v&MGF#CaSl^{YuLpJ9ou63b&+`XbinwzxhguqT;z&RB;G0BAFR4 z_7ppFl5VwFpZO$@EgUpW4cyU5H3#qZuI;Kc&Bkhh4t8TjwI+jZE$b9z9FGdjj$2Bz zG=ZUuzIZ@p(V!@# ^dXSJHUFdcAoPmWHQK7SJpfR7Ao#aAUUv^UB*1S#{1LuEm=Q;-t%B)L(oIz{_n$ zA-aV_TIe7=&v$eRSO5$Ezj3F0qxS3Z6x|BoMAy?M)&hNG3ZLsu(a>VAE^N+qclhV& zH7>vATlAXrd9_*%ff ^FN=oUWe3%}ZZEtVt=x~-@-FIId?7h4t$yZ(2bL==XIRT`=gH=Mc z1Lcgxa{xQoUfNg@Jo-4M2+SbVlnO-EXTz1y0Ihf+N!9EOLLn&r7fk zu(pV<_g<*49o)$sJ`M*7AR4^XF91-|7Z$+Vj8UY1O#BE1`kEcRRbjDdJ8J&iwKPF7 zpki}Qy)&CT?Ay8zb_a` vzZ6lGKw$FiO1 kbJli&M>OUz-sY#D1U )aiM)X>p(=_0UNAXG>hHCp%| zBBg8R;o3yCk69aNzY!#nK5}%{8jxkf%m2F1O`O^CF|ev?%QhxlOuBtX|9b$&&;IC$ z(JhOQw&q7tx?}E22u6t){!vZKR|V%}IRUBt-cFVjo4Rp5zk*Ks@ WP=6brlETtTnBI6B-!7y(FObkcB7XR_|2TZg zi)g_}XpZP}{BXad(amrzWdpof+!lVC{xVCQk*RKmoNHu1>S@?VdHf~I>y!dmnsrLs zH{+pW@Oy(OcGR^2wcBS*dp*luq;>N5->?;Zc{BYx*n>RX9E~U47akKzW&YX2$_~st z&+6}Y<5Ox%KI=t5ZAIW{4i)tq%wdvL@o<36S?Fh`yDwYVg)KMi@pxy=7pI|%>*F=P z?g59MP2IH@k~gU7_Z?m8MDW`_UQZ6~VbE?Fzl_S+@(77(6R3!(AB^IGH?^^^_uH!y z28FI!xL9n=JFJfMVuj!T5`-4TsJa92yB9c3oY>tI9A19q5>^4`Yr=sKO|%a5+bD2D zK{t}|NXDA5s{a;f0$`T4Wj6zkLBK)&bbOFMsYuj*FKj4bA)W}B09g2kqH3?_!r3F- z?~>*y+LtCWik{qwpguH6$1$tv@5(hBTcc>RVS=tnDX#_W?wlo`^Z_7MeUr&BUg9X4 zTVLQbSplR*@0H5C^90kHenz0M|l9W9=E^1E5CF;;X!!{s#e3fdfOj*+|@mfML(e z{>n>aBVtExk3c)V{JCYI=erG)`|ov>i3~rBdE$pQeYL>eOE!Qi+5oL21KW>R(95IG zuE(sIWA0?erlq(bTP;C;`Ixq1eAH>V!x_aexi+N>>Xgj;Vi+<$Ge!*p1MD9g+|IUJ z8zBGo&EJlt5z+<3zP!KE2mo~33z`cJ-QT>7W8oANbJcH0Bl{@raq^H*3xh$0>fM=Y zK!eF!IpIC_S27%kKB+$5`cdJOd+*zJ4uXB7W@9$nS&At8qUN}Y7q(fHrq{3`jmi~F z -;*HVfjvi`^Y z%HsHTo#WD${x1GAzd>nZGGMx)@#uXeq7CokCWlujMI*srS*4eyBmC3UEWJ=9Fjv&a z$+%sNsSHz0u`}4UfRRr0M5Kj 2Z|icVb!vrqJVu-<$B1$c4d9-Zm9Y$X|}L>^|1e4kk>RB zG&j)6um;#x>sH6D>CTT$RX1ZBJ>X7(4|9YA)|CJ#&CXGH4-Oa}b!ihCI}#f^lB0N3 zqV9;HQeI! phRL-~E! zm2A2gYJRvSW@U+1c!s%aOPQVaLlRV$t0D|L^KkGmp`tUyB0>IiWrd-~NEeGnqfLw7 z6@9JQ#U!jZUUkPsrNZy<&pmiT%Gf>Mz$<=*bfMP;`PZ+*g#qsH#=LZppU2U`j_PiQ z!Qt+d&_<9-$lv8~*FIhjohA3JS5<%=osjxrtF<2^+2L?^xc-o~*i0Fc)?Zafm-{uI z>C%L36ZX-KDv6T&REc&9^!<=5Zu_|C@_ $)7c(PY^O_73(;0eA=P1<%@PA` zGq7q&&B4eg#l&QwBW1lAB^!5*^JO+hTl2~qa|5X#-LKFh(x{gVQ!)qF7-*0=h<{_q z?eKQ8P;#ENDU~J;Mbie8peL$trzg#ob #&9H~T1$V30>H;?Ec52;bH`1XgP6AE>uN4HGk=Q^&OG-T*=OzWv07F^;zUE$i zBzdJ?0LO?k#r$QN@6@q$b;+z9K>SZ0H`&Q&B6${6V^p_8S&z1-4#!%C>$b}mZ}W-y z2 9a|5QMfizHr>PqCBBJr)nMkMev?$MgWQh(MUQA{d&~u= z-2$ZM#;8{bt%hHRV|`x@wI;$}4a@KWu34n)7+bJn^UcQZ;sc6p#kbSxq!$>47|EsI zVce-WKFzv@eg|~h^_YLtIaFHx_PZ8W_*K|YLX1Du;v{}A4~EkxzsOKBHe5flty)ih zjWONE)^ri-YoZJ~MXJdEO925K93;2b0E>a}ac*C~`}@%P?L@x%b&h)9xgKS=qlWK| z6hfZe@rjx=p58C*4XDqy0!rqRf(E4y>!W>mc>4ZP-TwSo{boXuE~iAx^b=X!=CM;> zt(`6_E+RQjhLa`guAZ#h`MfbDaTwYO(i^LA*`~b>-!T>ztl3Cn0qHSEF$F55vIueu za=um&@$5Yn@#xJ!I4*1@+Y)rH`O> g zi~NQP>1z*>(Y8Hp (yp zPFQyg-PCVZh)4HY`!9Z5e8Ouy?3m(|KJv46GYl7DlG@57sIIn)4UZ$C?UQ)aagbEN z)siJjN`YU%7U_~7&M#P{=A|g0=_RO@C7AHkI9nPqJCvQ<2cUA(yAG}j4vgmR4vv=R zhh^m54VYc@3v4QV7>BQ+%u-(UR9~_$1^k76&XTtTGG8hbJ)y#WHrj`-D2u5CuG>;; zzPz-jo>5Rsht~X>1GmD%q5{xPNbJSXydJqWz$`y{x95ZOopL|dkj#*6dJ8q$KE;C2 zsDdmPG0txDsW+Iag9AxN`mo=ck Rg@ll6p>*3HAi#`0QlEn!2J~HMwu%0 zIhhR{xWfr{E|sI&pq(|5s^q 1+D7y2P%CRMJRxa$KR9w;*wAq}`Jx z+-=+#tgSyzf2omTBVdyP9Cao^yVSYS%h0hCSJSvV8Y-P_r@HS$2BRoi0(t(gBKzX6 z)xB!Q(V>y$bHT<_<3gA4H9HS{(z;j7Vh0^2&T-rTla>)G@;4GoTFU`5DGmswP|Zbg zlZSm09l2N;+p1aFxP3AwN}f~RBh@)QTxIx|v+h9Gi`VHno9imsPTMWFAb8~ixq)V1 zhlrw2StG6X>u5Fi>4vQWq3$Dx!)|=c7&vgI7dQ!9ZJLJ}rw9LzId<|{9PlP {2>%60?xn^7A zNjEpDXG9f?mm-q8a7sc7eUD!`1zb !(|H^j35g )z2V<3h(s*v;LK=f$i7O_;UgmLvGlQF0#o-DofH zOv%Q~gA{uKN0&A1Tr*CS*d38vnL6SaPaC;8b`9=s5{D~e?;@R4;SA>|KG}C2LGxpv zW(~<2#5cIsKR@Dwq{L9P8#~vQn;T@wURGiO2%8n7wZn<=NPM1h_SR^A$M^blj5R zh#rY*?rI7V$uamOY;z=!?H{2`V&;8Kf|3#&opiaedgS5QJ#nmAceRF^o1fH}E){7< z{ZC5T+3AO0;ni~NlNETfeafGXxGtXz*IzS?7FKSRpSun0YU_$^@I6dqIcAU0UbgwS zp5F%~;oHj_nd!OoV?tyUa9XGd(zRQgM{4?oK{Q}?WEk2#^tz7pJ}NAk$L)zhCps8x zN_}B!WlAEP)i0Cla*-R9YeOf+%5}?i)I4%2jm$coaoWCATeJUZuS#&nzczoe&Xp$H z;A+xv{ta{^MF?Ht=3Kx QM9r2yvC@KcuS~Wn%~AZjFKqo)t0U71*ppzG+m6# zDehbTZu145@k>?kho0#?O13V%m@e$oDSK%5uc}X2-+ZNYau}xVtmr{5b@zA0Eu;4t zY`eZlM$fw#<9(Hi#uBdC=5^Wj7A>LEgf=yZpmA`=b#9dyb_Jz%>h4t#C`M=g2tSEx z7&Cgl!>azz^)HvNK0d#m@$d3`f#MIG%7i}wEx)Z#m|vi=w(>`1JDzo3Znes6{c}>h zShMBLDHTWz`#ZVDH}thNi@-J9#4>yhyP`T-D~rLSlTAzQaVfyJ1{f<~_;!a-!u#F3 zJM(Y@rq0##P9kq6hDDOT^?+H2S4UKqNvWbcKLSQ;IZarH#$c5&Y 1sH{&aj)n?3yUj1ZwQVj>YX|92f^k0kuCUy3KK_z1`~@U>zRF% zCr4K=GYK(a8{U)@{e)*d1XukK(*QN-)KUwA
i`|+$VORBpr%dnr*pSLn zl) 5rg~Az<2S8YPYaEd| zx6qh9D@=@@Mbk*4pZrevLKuI@6Q}6Vt-+me@B5y{l1MDe5GjK$RwVM}1$V;_QH?uO zOW+(3WHGN!u|EifnG4iD^E`mxyJv*H$YY>V+)fay6 K;KjoxR;YrBTpCcm 8J6~TF(acd`!C?oj$ ^T*Ah!xYO@?!*!jQ?)(%l!en`A83_1${mbt7%_6k0J3jc<{9IgEj{e?V zhFy(DnOUnYy=p~C)j7Q`ze<0vYMflqg{muy;vz1IW?ILjSIp!Z?jJC!RGwQ`VyN~+; zP7AWRNX7Y%%Z8xUm-EX{G6%G8R~0Rg>MD6wmgVm0fexzbx5Sp(SY_{^3ZQzzLnSx< zWTdl yl`F4m1jcY9EVplA{E{P-f4mkrytzY?>GJh z<~#kE6_54{_6oia7-A@CRpZc#ce*{`%U88Tf>SIVm;^94Ph1{m61E{VguGvV%6c1J z;Vo1dzklK~+sDVxS6KyZF5i2gOg}+q!t};dK2~UV Db6phsirm3SGwV2&Ed|qGIz+S92>irRc%vFcKkRK!W;;wh47{ z-Ti5f2XlW6mcP6l*r(YoRT9w1n!k|FY#(B|lMP{z1yh(DVDq$jHTKUP-k2rsqzW|? zzWnoB2sie}4vM4xA3>+`QvK)WrKXntfO-?~iX`5YlPM=Z_pnf@Tsk=hapMv{^Cf!0 zW4J(S>W5YDLpm8%w^vzQuutUAX}`}>#w0r}Ax~y2^+w5x3 zFx#vW1CLR4fnXaav&_PCbsn^tzl+qLJc@s=HR(drKoMY(#ZufG;k*G^=rUJOdJ1nH zHfwaaBy8?K`^i(cbiy|m)oF;7ZRXy4J|v%K`?-m;+Um)~j5zia>o~Dj$U2+cP_3!tv%?)vPiQPUJ zRDF9x&uY&s%zua5Y y8Mj##7jbRd>cqRem`;jK3aI#y23me}_26>UwQ5 zIVsPKRwt^SAgA7PiiR&&j1`({sMU5!DXUje$e$u>|7SfMj@JYKS?^hC1BAn?2R^l` z^+pRY4!>otJkZX}QVAvG-?~LUBR7U11)~nSm>C)8o_1@0V3OAQz&^qC&pjOT2k(6F zpJjXIKd(Isy>rTjKc8hXom&op6|;TcM4bJlZQUQJip}8OkbSHd6LM9|=IYjZwu<>E zc`b2oWwH9>&yU-1m@?lXc0F3~2>H63aAP Wn^)VTtZe9Zcmt#z2+=ciQ7 z&y1Ax8h-?HUxp6Pxb0F@i>lzgG-10h!>k1XLkHwT#GFR;L*jRzocWGY9zCu*FrU#% zW07WNH_vghNX3epxw7Zm*E 6cPH>(7}EO+IB@Jt}RpT{=u?|ul=%o}fQ=q34rJI_H*Jn282 zEi0y`s@_{=e;+GtR$n@J^#_P#cOZ-5}7Mj0c>t9nxiW(qac+@iznwaOzHi$kU~? zf4e}lk2vs8YpYVM$cs-|i5?Iqp5RC=u*`gw %d?y`w-hEv?wPN&hh-Gh3UqA{Ra#D^RBc)# zY?BT%-+Z;)bL4g8O^P`w5S$(}WR_|l!p!0I#k x3UEMX zVK_E%QJr+GMz0GmiEgJxIDEHsL{vjCj4YbcZ@$sqaxR1Z6n4q2z#sL!a}&0m+7t+F zRh$`Rp*yzlh11MMEG8SJdSm)e=ui1Z)XF6L+effq+w+cWKOW5oJ6~35gOrsErdc{( z9_=Zc`q$TZAJF*C+&^$gb*me(tb&h_6YiJC*oWAMoHVsL&@tk>mM!nfYcj&SaF3d% z+^}CR5A7Kr&s*HT|6qp@<>|%h%l1`xc$$d{MR9Q}ktD!I`bNpJx^vg4G)Z>n%J;V2 zt_hYB(aEJZL`!D7q2W Xi95laK;Z1)>ZAw-9lf6Ohjo~XQP8vIqx9MetaUiWV z>NkrnkhA%44$fi#+n&U+=Hma+PL~=BF4UXSB<|V|z$^|v)>IkLX6`FuPSV$hR2Icx zjQMfy1w{3FxPo?a{`&PIU1_I#o{aa0xiPMzn$lBJ%+(@q)6y!8-mSvr?mpUy4cDW* zc^;rL*-v~qdj32#(pH3UqI!@Z01exJ?!Ty4&A!c5gbCUc_Ni&z`D&n(3fxGf n zs3iO_{bKS39z9W=hDR-qI257EL1$Qc47C&pp9g`7P@kWJK7s4}^jRkOn+HM? g^o)L!}lWJasfJSM<&y&$Ao9&VY;Q2Cc?`X<-F@#&)^e-lR<;Q^%HxZ;{*%QbW zA$S;*On4ie8TZUiKemY{#1U395ZNa6tVe?VvXkOJ&!*UaEyznU@zsJlgnwui&5Ltn z&<1ixX*7AarBB(gP6Xt6n-s_C*FD#4v#Ycj1@mz)Vlu2(y9Af24f5t`WB705iOPu; zzHQ|gy?T$8{v+fPMWF-W*t}0S*)bjXR5W15< kQg~_Ze%p$#R@smzqz+Pd!m`}+VcEKVTNUhzC zES&f7jV4j$rk8magz$uV#?XcqCXnG&=|vcsS|_!=dB!x#b%DKgW5lvk>cS;7ru`*L zqtMmBo{yzx-Py7>wEK8I#WbxXY784aU2Pj#SOTbZH=G#SSpE6Em+$KF1Jc~(i!qgd zw;!Da^My`?js7QnO9b{Ty+HMFy;JP1QP&g8e(l%9sQj{2ovM!&jAZSjI+3`o7t}$& zl4tq?DV} $mAYp-Q!H3C&|q|#O0L9RmTtyH#)t|-VD~&tMq4@@uep8Ya ) *oc2c+|g4DGf)Xgb82+NOXwKyFeKWX-D=1nS~5Z5M9oKt*U8Dl fInJ}yG%?O#lzbX>lT$Bs4mj)yaw-R&dO4+g3ROBo=AgIB zH_T;Kk{lETFbGYip9#zk`-He)M+!%s5bGkN%9YQ6LMWj4OnpwXJW=-d4ltDj`r!N< z&S!BfhP(?*Yf=-ba{5bwH-8N+4drzyryHnGV6yUW1-aU=k4DGXw4L&ehJVmVXw4mA zX88nu;Kik9HFwW2ed*vmX0*8@TVWm|+(|52)R<2(A`bv7z=4=}ioHWqW5E1}IBu8p z>0UwMTNU+NT~-*IhBw?QDu|5yF|H25uefVaTLR9W)iycG;l{xpjBHMD{SMQkkSU%h z+*h}HH5D37XVU-jnd5lYlHE*wzy2w8L6MJ1E>Np^{lx38obhjC-jtq>2?3wlLR?D! zzyEXh_Z=T!$8@6+i92@8%J>Oxxc;(tTBYaY$e4oAko(&vE-$MqEgl|@-eGg#+N^6H zR^I6=r bDpq6ofM;H>sbN zRM8F} O}D33 UzTFHei4~V>f>Alj1c%Zm(mCZ1<;pIRF9UiUx^j=xw0aEl_fkD+iOmO0S z^rqG=L$@)LYFF~e>eFZ|cN27CL-DN-LO<@3FMjNf@OXnxZ=cD~CZ00XvO;^R7f|MS z!T_SY^v4PEzxq=LRsD|BqR4|E9$RWt3FSh{-NyB0m=D5b+R6t#-&T+`iyz)JrKRGn z#l?CNic K8j?aWOAJwtzCCP_aI6ABP=B=TA$4^1qky?J>0b?}&O8z#F89 zG<7m9VEZ$t+vI|yrAlV-EB*Jx_tgHRxY_AJyGpULB;#c2k`^uFKjY4hp$w^E`udkx z(e@p`*~c4Ol>ThFx*F7`Hbr4k%W^@xNj;vhvcw1+^FSg}ITK=}`ef#})T7fG+5>gt z+GBd1e5zveYgEbS>Id8%r(lJQZ
V3EVpwYy84-20;+ZQ`U@5pfz503W{ zXy}->F2ee6;#gW((loH05n_dhFMV45+6?u<WDh0=L4265@*mC$@4eE zgV`myo}?S{fbZO5ztKMIH2TkM1N&jJ@79ZOj~e;fo*1ZL`a+a+83gC+3`VHc$irl) z<$)TWe5FT`<)1H&KAno| pa3Y%t z!8VunXl*C GS+ zO=Ku$<@NGVd9|0qff=f_;Yry&)?V?AAC)qA=a3!`m&pT}PKT;W=j9ddXF?O}pE;|0 zI{n7j?l*XHrq4g>8Fn@B4vTN`9~OJ>?)vIM8aJ#WzG*pJt-!jF?(idzKG!7ZU^$$l z55ag0mhh%HP?CQ?qf`!V+ES8Rl?*2y(99k8JgSC>DY-EzZjX&7yx&z8f;w3-^0iZK zzpAb<&J{>Y&tI_w((D|R30AAk^p5&b#0q*Y5DD&y-R}Fh+Ld!`{ %Q52TLn@qMz=7tx*NkK>a0CUr~1Z&O3ZTD#9s@f!R}S$ouq zecZ*vkzJCRdg}NnuWSdGweQtR1A~KC-#8LLs^mQUgE52tH6-JmrRQ1{MXaPLrl^N| zNQ<{_Fx;rp03|7n)R04z*Fda?|Fg 6JYSJczoMhR*R(F-AVX2b+yb{A4)}#4|Muuy$GVFUos9N2^J#U1%R~FVTjP)lv|r zKfbhK=G}vp?@FT4r-SwH5r49v`}#h0<_MYPqMNkP-*0q?315(X&L g$Rb)6&~K5bvZ>)s_l8(y;>^FU1t8!INNIm}u*(`9J|uI(ZR3h<#~QV|t}?L1(3 z%=hjse(YA0goU+2p7WVmM|;*6O6|-KQ^gPm@!e`Rg fVFSZp&wz6iN6 z6QiMT* Hto5S)4z zikjZjL`D{Kr0+9~Tp1*R?>7%v)-rrux4h=+yJ(fgkLcb{1f*lc!h==q0|Kl>b4aF|az(s4?mY^7;;vuQo6rUFUA*RJ zNVHPVuWT)Ebxwn{?Y3A2Uo+repW)adTQI&aBCKjX8_JMN6JxpDwfIy >Oetd z-a3(!qvo{xY;v$4uyk0KiJ}Avq0l(l3P?hc?dnuM$E|R&5>XAmPsq{hQLEbF3ro*1 zg9mzI%s7Z$ZRbG@Z`z9P-tYstwNm!4m6QII-`tOV$QhLrwlS*ey+i8xf=zQD?#IJ` z#BdjI&+6@3ep4~ijc1uCq^{sCN=c@ZG{9HUA+5XujjG^Tk#-03^|bZKl11HB5`$_@ z9sPz&A^JD(*LkNbbiS%J6i&}_!jyf!lp^PqYZ5xkL`&g47%2QageOL*c{Ix#EIFHX zDRQ{n=1p1=X-CP9`LaBi;NHA7?6i3hU~h4$mLN^f^6IRW022&)d``lwo-emGvO;Yd z UA|8JNSOjgPiiD=v8X4 zxY>wI^0hcEgFOhw+wkr%>p|}3MfGyw93A7K2f!*-G`R2}&!7oAiF^2i{um~wdu7ib z3rvm|$=vjRV41l8OAglFCi=+^_4Cq4_MmBgPEc(Dl*MM{qEB?`$%j75y_qY(hmy-y zDvXbG#nuGUYP{n`!(12N|Giu`ODgXV^8%<>=_CRCzF jraV)h*=Qc}NyhN|eAiAFVl3Y@)(!R3=oUp#sUncM&ygSx z>)p)!y{x8F6iCbS(E?XsJB`dOX_A)e20!+k>GmNB$L$sHeQh^lnmy2OP}LmL5ZlC> zuTs+^STZmfaG0PhErF(*H{9hmX~mp&Jrb7{?1Z<|ES9n!)LXop&>GbiP2JyW+&DcW z{$H2+)zWNB8Fgjfx>u>1PC!OjSgq Xr1{JQ5;~q zqo|BOE5Lq<%$xFjVZcydKx7_5;F6A(W~w^n3OdHM1v^+8R{Vnnud`?xuIA7VB-a9a zR0|{qopv3*CTg;R%B4D3JKi89QkfUIxvNTOxRg*(Z;$ 9m;pq=611A%4^Zd3sHiY#Og z4c}H<_!7EmnKY&aR1; 73CP7To)_i^ax 6^PPA`bpO&!HS0KeAb&JzyqjeQyd=M2(Cv5kmQtjtW9sY z-x-PZC<~1vx?E7YrZP(SVyv2y6zua|NNr{BZvXcC#h>G5hZo1>o*X~ltf>t{l^?s> z$VAxKA^y|8Lj7;5unYo?x(S-B!pz0ZUeVAUE90*HY^&PECD(wCVu9s9+FIAVI@LqJ z^3rD;%d`MsRCd5;=Ic5#s{^MJ>&$_`e0Ds~eS+ ZH>7 z)xTjxGgyzsE?3xLEo>WyM)Wfr*#+KhkHx|&u%lzjliWTf*}TnOqy2xE7N}6WkY8ZF zIF{muBE0IFB{_YM;yO%6&z`GUD^uG!E96j_tihZPzIdfav(DSX!zkl=i{d{@IT`Qx zP@8x7COf_<^c*9(-zpmBc3cT>{c-KA0gf7@_QEN*hV*OY^~*@}N?JXd%2ikX{8wSc zXmxcS$Z%0{K`<7fBIf*~#{u|%%2{4^_a=DI0VM!JU0%?Pc5`Q|Yb~p0xdXp?udF1= z`Um{Zy|O!V@y>#IMNJ=h9uiLxPc#`;9!JUXPyYFlsMR7t4X9SF<`C~$RcJB-Ct%FF zPy@RuN68Rgr1mHm1v?z|Iv %M;}|=*?#h}k>E3vfuXbQH zqW!!(OM`41liV;<3TtlKDfT$w1p%R9KU52N=->uOEUC=<&5YCEcz;sTFsIyC{Dcsb z@s9x^D=Whe_C&y+AfF4d87V9s40|&;;sBldkI%}4pbvGt=jF4%a$7h_Ex6|R(tCe$ zl!y2?Y$l9j5| @C5bEZqxUn!!?mznM6@Mt zVDmT;h 90o~cse7gE zrc473aCH20(`m1;SH1%XwBbU3^LnJtfVcm_xKCborQ5gTEf7yU>3mKYmkl~PQ;xB> zJZ%Z4Xr^V0NS>FZmz8dxuDitg9VJRG5PDONPj*~u*P=@QN5BU!!11aMd*#r|sY+Yb zDmh0WBX^Ahpouh GXsW6^!i(aC7YD*EiwqA` zdXSknK b?BJ)am)1bj&FYlq6pMmYV{34$jr(x2h!Flg2p`Kra7TC|3fE1x4QS9 z7XUNS_NhUo28mW;CC3>CecTp#)>Xk=fc9K;q>8mG{12)JOP1IVE+z^#$bRXT`4bhb zQ9O1bJWh^FtmlldBrT&Ygbs R`?FiWjNIrV`k!u!EEBk~^YmX _$H|>I@x-C7@;mXCGpcj z@(ya=tT5AsXx7K8v@=c>Sq*=~>%S&b&cpe5PoSUsrP7JMVos;J-|=6ExZK)D?zjRb z+;64bMv{(BCXI&>4m5L=niqIff2YcAL4*Yit@U@q7c|P&fnq-R F$w(@j)F*OG!6~ba#o;jPCBi z#;8$)!SC7kc;Ejyc5Dy#bKTc ?wg}!(M z@&_08$!6snO_3+^dc^2)jYeOBN_ <#wg59#ot~Z7=M0IyA+!X-+%15D(>I+ %x(oKfo8R6d zo^(Fv6Cs*2b~c9(J#RdCLJ&b9W;=&85Gw l;)+KKc3N#=J rd$)pOur2(6! z$^ED;Ijl&SJv?4#C8$ZY?Mkw3TBPj8U4+IT?H;?67)$U`l#E5uh-(Q=GRE&0joA`A z#pm5sSR0@B1NcSVI(QDLb5y^e|EogeGoIHzM*JvKd#&^u=3c7sN|yh;f!Fc zO-~zR3wb$!KK50k30hCd)E-ZIVVK0Ff{hBvJH+mHU+Pke$}PTelT(lVl$o*J zG^yQA&W$Mu?S-Kislo6-< zpE2@qOx2=hm-hhb`l(fM ip^JTm3vIZ~2BnF Wf_>6C_DQTN+pBd>TLKc$TT19zm6O1xiDD8!nX)h>b8W!>1R)nQhcfQOvs zWs^~E-LGs`Aa4$%5y>om`XoRmtq-J?Klksl{>J9PZ`so2Tm{!H6E{=-BEIlo^pdj# zR|t!8l*?@+jku2fQYQoF-oL6cT24BB*aQokHYLqGBUu8qjRVM=)LDpgA z@RW_rG1H*; K`Vhzd{sU)0bINtB5o}Go3j?CicCJ}NKgpNeG zU1oZ?W4HY;PQ#g`7m$OY4sMwgT75@My`k@mjpY9)miC^Wo_miEJU93kcluyop{~xO zjPm?H_68HTT gNIww7bLIQbEwiZ33AlYU0gsS$L@VrcD zgx!{zscp7%5O`p70*M9>_*s?#jfz5M)c*HQ8{qu8{BNe;`d+nLP_9^Q>Vg6$vuYeh zcV_=FujNNny!MJ4*b;rShTxthTQ8KvIfv`+q<5CwctDUg47(>Pr IzC8?)_ch^3sV+d=?sm;<~#G3Hc;2&(s}?J<0D1PCjXr2wAe z3v#qi&l&oxk850NK$UHlN`kb27|l0&>^&5f^49GQN|~hY=sld#0l_<=1{3E9IfG=C zXNETZ%F&SiJaKF=5U?pNvn{m$Bjn&5JSY!5=0Sj(q|eO&1HMzt?r@-C&QsuiuSk)} zHvZI}z(!#E@jFiQEh-je HmZ}Q4gG0!@ zx>(&$`v=29144T!y-vjHWyR^PrD(8uSj$rCtmP_I8Y{E%70Wx VQS#=96TQK?la#joSMLH7Eg_a&3g$4Q4vFduSj%@m`G3!oK_!~PTx*~G zK~ biGcy61n`n;sFnH2t*J&WvW?grVeC zZc`t_4)QdGuq}%y9wWF<;UyxI?meD`>t8zk$I4S4d!H@y7@M6fu{Ym99G0gFIi|G$ zpu}m6CvckKZUawfLp6YPX{0G6%uLtc2(V2J=RWCFjy?AS{x}qNRNEgz>vI$dvEBmv zV$t!IDKfH~zcO<|Yaf*1Z*&kJo0j+Gpg(AiGW)Nk^w&warH%`QDqNYJ>XaONO|;o2 zdP>tFtCnZxzu;R4YnCZq=t9{m3cpr?ceBN%l-y9RzN~V71)SJU )=c?0K>d8P( +<;N)(XY1ijfE30`@4u$zvsIDsL#$$jvyT%f4Xji3lY6uB z56L{vmqe0F_W1qxy
u~<{QY$1J=%1ijmpV zwEA6R7pw7=(#UCG+*>sZ$ODK75*d=Q76E7q_EeAEId&t@!MbEikO*k fjs$Cba{ %vKuUk7sYijxl z&1G_OY+1hD`f(f2`3`13_2SG5kYGJfc-w$?FV-gvRL|OpRc4xU+d!bDy!a=eR7t-T z&t=Z}ngR|5;$Zk?U77^>1zQ0$mxVEO2xdE+h1Dj) w_{fZs6t;^q9 z%4fNo2l@eb%mcSBtlB24G+X`SPwJYar^C)-GFD*>L92hIVRd%DSR$AtI$e`w>Tg0Y zZ?W?tsN!saaf-EYFI(l|GpAxdz`=+Eu_m6%fw(xG7jgIO<$c4=GqBbaqp%dj`@+$y zNBsz=3Jwqgd|Xa(z{Mgb-il Oi<2VCn1pgP1$~s!k*}ti6B-zLNF@7NlY97NT)bqcuMiV-0p4orz2spFf>D>b^o} z4z0{hhELUbQQA?suQ40(H~G?MI&3Q2X&0wa?d%+bQ+ZhQn2~zxM}@SYMY4LNEE6Xu zHb4R-BE_plOuyjoI%&BEE7Ya)d?;xj;gpehrS&3!T2mYggSbDMuN+PhhW8GxG}g8` zoC4Q-Jw--xA$pg|o?YOE{}^ADmc|ImH#zp{QGkw_B{s)dUs*n+B#`cze&B>+JmR^D z-r1I;h?h6tZ!qRYWp+
WWW4u>uV4NpGj#ylSD_mGv#y= zMV%aNoGvsjU5=J@J(`Fq`^k^ElUlwMvBAZX&ZG${JOc{lIEE% 3i+>DrKCAFbi7Z!EiX7dY|P69ClL$UiD!TU$o3_WS(mb z?OVA7jJdWi$mLVb$apir;0cf7?brF}D-4cvB`Kg)wDSDQeJKub3)&c}V4pnrLZ76o z6Vk`|q~YFQ5|$2?$!k=*Zg)WLBnRKjUSW0*zLXXkP-tp-BAWxtt6Q0D{RwCzSV95~ z4SAO7k?+@U)@%=E$8A4VD33atK{IjU^Gh=j e^RCPImc|5kKUy9M8r{u9_qmu3;=+?0^Sv+Yh% z2h(el!thtds%^!u6wYvT66<}?z4o@b_H9|O*PRK8vzQ{keI}Ld!7e!&7xKK%B{<;s ztcI)T6K9(Qy@5;DHusO`a{P*r7Q6K7#2?kp3zurb_BCEQCB51sNz}_u2|iz-TBegJ zmjh8<%Yu=XpQw59yM6B^WQv?n)j5~oUZw(lN&AOex70U{uJ&@AfXwy C%T2;ZK%^n5?XqC*^atj8*534TV>=cPjAYRCYeS1q8C1KH|4dW44z8hOyl z)oHe+Mss-=0ty*JAJ9m=&34I{B=${v{>2FmY3#|xfp@lF&aXnrJN3lUM~xFd3TKvw z3i66jrIcgtQ(HOn^<$Z wSJ@=K4A*X7-kZY>tMM+c!LzBY1$Mdj-My zF~sPgh`aGKMjvbNaH<1X&a5fPJFfOI@9W%rL|>D~s^n@+?>RWjW3>m$8{t@P_|S$1 z)bHDd$W(tRDx=CPARSxq cZLvfL-aL -uEA zPZSDn6ioYe`rCV&8ft|ww>3SUu>a(M+eX+CoSryNh%7EVHSiDS_@oJs uHXLSc8bbFl4+jk2;Mpg2(d)8<~05 zcYH)aB#9mVXB}nvg@w(6Qm~_YO|ohIQdxzf!_Y$wn}SPL6h_R x$nWQ6xN9_@lZKg!|!y{M6(! z@;X^e`3hfKz^kh=n^U_5+Gbb8SB8U^*WWJBWME$zI!_#b_3XMG9vULwuwsr&N41K!PTCP{LC@rR$`@^%>TdWU&^DICc~9`2p(vX^rBAE$%7G^7E{J zXK;qLW_F5F^do5SS)Bh#9JQGq`%tkdr`d2v!bhgze!XSHuu*!P&NTn2X`Eb(&rc7y zuK$#tR0TU6KwS5v=Fv~EJ>gdaw3avK>#Z|q2joLx`kjsJkUQc8S#urpJe7-rm~O># z_s7`0vIzI;xllZ}* 1SNZ$G;t=08FkO*~RizSST#m73#8f-L-oaPLcP zb(PRO$ULQe(jn)|x>^WfMqrebc`lAS#z~!?fP)i1bOJ5nzp0)2(DAfI4faTb$E6JR zK;N?SsQ*7BZA )epQn%K@ej8AXnQ-U=OMY{wE7L4F9~KrBom*Vd z5_&T-0)uyodp~}_2px09z@2+5|2m_oMfk3EXjOl}`67i3QEpu0JhRmN$`AjhcSq4r zyzDxpWmzl_Zujf{HboZ+eV1?&WpFDwbP}3A##;d}bw}7bxtznhXjM=hGcF4C^8rR3 z5`H^@Jl6&e0ZY!p3g>2!6R4QyN<#f{<71`QhexyU46y#f02VVK-cQ1&iI2jo8k_KB zy(^}m9Q|;s&)S!q0|p-6Bkr&B6Y5um96$JRS)ETC`k`G@w28wLflZ=b0x16%*KlsB zBaQk~dgkgk*>l_yPgH0V8NU=5YDEf)0!&CstNLv`fTZuWh`01hx*fI@FxKlTJj0r? zGhvqeJ1c;h7`SZ!beUX*0d$#i0v95VuE~8qmth|er`Icl=PLXM%lpDzJp1NE`stsg z*P9ZAtQ8lAq&_Vgrr7<}kPTic-B(kNTPnOt-!+P04NBvHRq3%;YGHAlX`pvfWkbAM zOD^Oj$sV3=X*0Z;K>Z2q+CS4JrzMHnT$lst2ACYJY&rU$x^T4#ES`O-GO_dqwBbBk z F32q@ z+R(DqU2DG4RAGp_rnpdoQDL`EPR&v{drHvcG%o{#*J0#{(z3QgV9;@LTLP$f)7fo2 z9M(|P-;A8#C&bcW2vnqU_Woe;uEB|rNy<; 0otO@HEWnXC8Vq$T_0T*&SsvwzKu=^8(Xj&ADR7I!cGFG p}WVI8iB6pTcN7K)oP&Z%j)xk#$U`9@A3Z`8CYh zZTI1 _;Y}|9M4yNzuQ_sj4-)XhKs!*LEI7vXyVy$R7E@GPUs3s&ISP@fE$0{E z!>c!z3YK2e6(_&!UR?FnDh|thgI}lr2 (rtD-%)Q})v@Oyh0D?)h%5@}Gf etA28e%#H4pmVgPIRZOHH}jZ9+%Uh!pk90Q