From 68137b5471773ade30c8d7d9b2ed148e444ef520 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Thu, 17 Sep 2026 02:40:07 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at Sep 17 02:40:07. --- .../20260917/20260917024001-Binary.backup | Bin 0 -> 243760 bytes .../20260917/20260917024001-Config.rsc | 4335 +++++++++++++++++ .../20260917/20260917024001-Diff-Config.rsc | 8 + 3 files changed, 4343 insertions(+) create mode 100644 MikroMaster/20260917/20260917024001-Binary.backup create mode 100644 MikroMaster/20260917/20260917024001-Config.rsc create mode 100644 MikroMaster/history/20260917/20260917024001-Diff-Config.rsc diff --git a/MikroMaster/20260917/20260917024001-Binary.backup b/MikroMaster/20260917/20260917024001-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..ac1c38ac5dcc9e7aa003d3be047cce285c6170bf GIT binary patch literal 243760 zcmV+aKLEh*sF8CpxB~!(kX#&W$dd!K$iZ=XaStW{0002|`~QAWPz3;3!s&KNdw$T+ zwxbwMcLt}wvZffn%0jlEv@Uud9>Z=YPceB|Brq=DO1$ME`ah^jCn*5tWKo>+B%(I8 za9Y~6;c0T$1K}zJEeI8T&NHW$HkJe>JO*Q7WGYwG>N>qCQf04KG|Q}xuhQcnS+CO;X>mkC=mtroD>i0Qn}Z4305kz3 zu#zV8i47O1CthgQQBKk--{6|_7FJjnA>bA*TV5Q=AzHZ$b-PkLY-2oRP_Cr5brw?n4W;sYP zR)Jda3}pm8SlgxRb@dj)9)`N)gB?cII_ zu5IIYqc_p?3-`%I4}nv8RfTRlZ5zid-5b&(^tRg=gQU4UJxZl<2Q-49y4dDVGd~oK zFWSautPbSVa&Hb++q`r>wm6>QanV2Gq3^dJ>UxHnH`%n(U=KixTbh|%xKG|8CCq*P z3rHhX#xw_`LAbMIU*K-^;$<~j*o7sS)-5`XH0L&dS(h7o(I)y?*!9$$R^4%T(4 z^KB6`pMBPvY+2-z021w)c?lK4R9edCP6&mb&V@>y#Cz`l%p9(+EI+F<|EFIps!@{* zr(|#IvX-bMD>j|HJX`@{?@lXib|$L=R${<5xM;YtgZ{By2eD>t99%NQ4swe-rt9jQ zT;7sNk(q^Mi+xCOo2#tkP}^B9pvnslnSjSyi;oj{BQT(Ll~1D3FX1+4n88yDrAQ&A zI_2Jw4K62Rwx-2I$PjJ>HnbROhGmHhggTnjY5?vH-F+Bpdsc4^MJOBrO;F0|j~M3= zhX#fmmq3``@IS>ZIm@Ip@}s@zctlz`tiCIlSjKJW1u3;l89K_NBKY9B$B-yJhwoz` z)e?Ww?hCRG0dN)m=sMX9cASaO1grLf+k2b;}ew0<_ye~RnX8~%+cS;L)KvzRDN4uxU z4qii?b1`yuav8{aSy+dboj~9)d}B*5Y1QIpq_J9CYVd@Bu!h zC_;4%ww2m#%}jkhtUCiubF^s9rJ5#^perylZT}GYPjS{ zR|)Tx`1Xmj`!6prBj66Ru?)l<1UFPrMmq5U;F~P*8OL;5j;TeN^MO+{6i}kY!jjxa zp>N|xXk@`OIi@O@A9r9ioRaKB-PBkUZ1b$T5?9P*JI+_)sB^tcK}t$H^;9%^Fg&J8 zbx~B43^eYkLKu=cTpz?zQqgy#0IJ2Yd?66A@@l%xp2%egS&+^JGftEn%o{M%x%yvu z)pTx$ZpMq;e`{uXo8l9b8XRfL<6`grQ8BYIZiD$k{0|1mIz~D*0ptcw?+6lSwKokd z_E|t$12V_sZ8w%lhjMuC)FygC6)Oc}QrTaToxqboJdpv!i5YyhV}cNs1~~F0j;cD> z9y0gMaA5}7rL)!>j;xq-q0+CX%y444O@O%j<{<#(StlM#hxy;e2xo1EziosqCG>aTjeQ0@3usw(=!a{ofw{0eO;%cO zMN2&VVdxmyYPD%Gz-{Sa6o2PWq}_n0^N(D!A&dsL@;c*!?)sXcK$~Pi$)g$| zPjnk`@;NwMfhQ?D;~?VHqeZq$lVKe+f)HQ4sl2j!s+t~LWFZ6-?ZwUj8wOwhp96mN zCc>*vr3Dba>taK8(PHS#vwk@#M?oL=Lt4Jb(GOIRTNmbH#ohUs=>qQcNEWF&0vQY^ z>KTbSE~IZ(eq%A#USh-UVQ-ydABX@@10lP0W1V!)sYGD;i(FyUHP?1R?^31lHjUCt zNDd7qx9+;x+MeT%dm%cW3r6zTKe&Qa`C4|1sNe~ug!L~JYpY=C8#m_E!h<_20t!t+ z{mA=we}YH`ow3#0l6-W$rV<7xkW&}+dh%|M*weFJ@9AYo6ytHxc#nh#z-6A@*gPLn z;d~}-Pg;~%Yvm`=xPP6w#HEOnHdBk$)kb_TQ`@xjUyV%2YaLdxgRiWH9UMK@PG>Kv z=S(rxP2nrqz|*=CeHErB@^6ZDWnZCKrn6ar1)Ckjb=96^B6bCLV&KrP?x0T+pot6q zLi#Zi@ZFUh;Ip0P6a^9HrltjNr$B@_KajX;85|)kC)YKnCnhYE{}Cry%Wo3xqr2tl z9mSvF=;K`Jlo}v%TtQxpPBuq(>M(B@Ip#MWZD6~dzE8NtRt0OPa^gVUBmu; zsUwbOe{57$st?_GWG7P6%9D%`NLzgELv*5~B9Rt(RSMoa(lb;6Pp6FMKnZY!l9*{M z$M48XJ6pV6>`%u6?Y`oHk(aa&l~Kn)*vEpsU^e(7{7aNy3DROHD2HZ9l8+^kI{@WP z8IzU|pkXwEsTk61#*sw?MG#CX4Z2xyU+U2AUXdY?fw+?^=M31sZ>9oHNW|AxGAO-@ z{CeqkgUW7fe)q2?Y11U_KWEI$`43A;t|ehI&j@+()yMGyYsK%%Gif9Z@t4<=05{U& zf+ldn;mmHxYmrvh2>1FJsbuQwG<#eBw)0F&v5qNbe?2~-*4@+~*~-rA{Wx@=t!#&e zRJUr3L8i%T)CkHs40yVRK|N8)Dz(qVlSl{PrM_{4?To}-8r`wUdsQ!{6gA66sdQ-? z3-5xlM5;P?{vQ?FEnXP0W78Sz3m=EiRmLkCE{%@O%9D$WIS`p-5%nDuM6)>Z5bG^V z>%`red?|d!f^_3I;=u-gX5#P+8oEgMXs$~Kt>H_q?GZ&UebwcFH8UyJ*F52UP+D|n#Sx9sPMT%oRYajMK%}(sr%vLeaFuUDCZ=bD+#2!;Yf_tF{BSO6+`Peq5!Q&c~dQH}6l7&C>*rk3$j$ zPm6){EO!{+M5yf4RVVo1)#o*L36w@MBxC2`YAEqtW$(#!+tOXDQAjQ}#(&(hg!K4T z#@g{sx)Mj@(N40(Qfg-EH45-M@x{u>U`e5hkXQ*ZlCi)_&2rs_#n-fbSM{qKDC`F4 zQ3zKM6Ew+m;x{(i$wZng_7;=}K0hxBPFOhd-^#d{^zRD_B8b$WnC1uipuAys(w*xkC;wS z`bXHz#P=&~$;+Hbe%b=;(H5D?-(9H~Q$&zq`^>?s^~536tk_hQIH^FpMt#uG5A4FX z&XSWECOZ_qN*a(}i5X2>ma14u$u0qjS6GcpJ6`3ov+DW?lVL4Okow&;-*Bmg^63@F z{yFTwJENby524i4ERXy8nQ~ z&lhU@UgVD5y%!dZvSQ8|zV;qPL0hRE$r`;3PV}d6KzrU!xdDMm@imK*E4x_v*F-m1 z+gc$=udSw*>5e)O7_4S(ZY8aC-+7E;0mf?#of-dNY4%V%GQ%bz)K%~q%PS$-b>4J4 z>LdII$>GH#{IYyrU71isK8V6$pI~$_0_Y4St-?j zZC|$4dVd4JYah$wdH1tpwp{7h(pAjWn~u=x4WUErSG>oL7Wm_>dDz>?!G$u+@N-Kb zLcG8&lyZ7gfzV!GeiJ0@u3OZMgk<7Zo#-&b;*N8gWI~aX3a8V z3B9$X(yyX28wq|E=0p=2cKG8M6PBz)LKsh+!63q05^0sDrP{;iswM=idM3DX_7zn5 zBi;$MaM$}aZ0?LOFrYU0lJ}Rme(E?32vW3E9rjCp2*odSxbdu-eHk^-T~GWTt!gT7 z&$`q76l6u`Oc12Jr7{M6O->9!=^(pbSb+18IvB6_8@uGV%jSjv2_3rP>Am5RSt1bC zC5h%NC?`Ivc*AmbckT2?WYG+61~h+-9qsvdh9z_MRW=Ma+9Jk3a{s80;ob};iUL~r z!~64{JBIPB&SDhhLUS?0d@mzXsp4r^WC2mSYag&^rxpt3rMVfAFbDTs-0Wg1zou5U zxW7#rg*u)q^6G!3&1NeLb(G_v1-~?Vz4aza-$4aUcAnlb7$z8dEp%nm=586Hz61>OhD>s=>TS zVOXg}8)>%tPf*vqBP7fMhB28J7Ms`~-`tXo~}yeKtmTrJXH^}U^nD{Gq+FcA%{Wf_uY7)L$Lj4ycS zt86%X8H1^;0+AB^CnXCwT8R<@U_#?O~0W3 zZcizYTMEqKUe{4PVyvZ#M1FOq)%}y|9)(j52v`TYvHQ=q%c_Onf~K|I+96E{kQdCk zOWlrk8R+8uR1_;tY#BxzhRt61%#>OH+M1%)@dNY!S)Np)r2NC1+S`FV!Gexnj+{;hDd&1SOr2#E#SzTBu9ZV_~1szHw{F68gMPHRXh5t=BQ1bQr6x2#hm3CK{(XU74!cJI=;Y4QG$w3nXyyEw}W zOS-rUyqs?`f-LeEzgJADShD^e{=4;%4)Z!ydak54bQ3qz!6 zuu*9U3S$1~!R}va{S}Ny^r99kBwjREOn~{*;ZnQaW3u&;xEGY;g0m~SeUjk$rS!zI z6MOa@9LS0+8Q-DZIApw$_H~H#?3ek%Sr-PnY_ej$puxtWLJBLEl9k*4ZEbt!73_!% zS1UTiZ>SimJXezbarWk~*H6c&1(;`b#Z%%^bf=Q@=wqBeD?fHDm1W*T7$EAu`d?9O zrx=`L4hr0$kZDjth0}n3R@?3vpnw?mHRO8IR>;Vzc^JC>CgKn%VM=- za~mMFeMaZT848xLQ*;w%8WE|1KXGw1dL&Xh+6=*rjLdb?g##xOzYEYp8-($v>Nfu9 zt&D%39aKs!DQSK->hw&@gAP`&i)%1CJOF)k9M*0WqzuKu-(L-~y zZy76WUsBpB4O^+?Kgvo9saW##EL(Bb(?NaMtVw1LYB19g-QqV>HK0>qAVnQvz-d;k zi|wnb4vszQzMO~$`kD~ zPFU)fms{D2)f+TIB;dT&4odVObN2VcjNQB{@kOt@$E*W;jN8UQ6uz{Veh|5+YK{h2 zb{^x3&`ScMEKcW!*8Z$``pvUVy%+>nH)HJXb8jh~JU1)fB3z^o_=IP3J@` zHX?|RRFPwC_x6A7|G9#x1AFH-h36iqEI#1AFXk{Is@TZ{Hs8KdF59a0}Nk$R=}+R3$!!6Gr|7XNm= zU@0!utsDwSpoE<%HZQh%RZ!%C(&|v>+x5KszOj}vhpu@tl3@UBj6Y?7TIk378_~gD zE9wQ1@$dnHK01PUmD9yRXU{%@g;%Gd}L8gWFoC(<|h6SBXt4(WP> ze{_Uxi;jYU=JrK$ZSIqq)w5^lJ2XY#0lUMNMOF-H&jylQ!~vlaMAbwVZ{(h2)hmE< zT1XO_FKOxE^GL(Xt$E?j;czqi72{(;mgHMpiJx=TEX|RGhYDrD2*yXUCKjPS?XqC` z!GXSHyly+L zfBx^~&4^71IxWL@@&W=fl{;W2=7Jl5*&8fKS}AYdLpfv+Dlp|jj_^T&L5V5uWV#R<5NMhN64qj@BHrCL@ zh6-=w)XU;Y@;gKVkcE?_aJkRl>j^Ss=9mG@Vqt&<2PDA41g2=kSo zDEBUoKAHF-mVz|PH&8a?7vOxrjdmO22Q!|PfM!HKTGvrLOgHG>M#^;z0k7Ce+>)Ae zI&X|Jtd&HX${#-X0ADo)o(m2e$zyjGN2F^|DbcY#Omh+M#Yp)H_I&86R?+QeCwP(L zTLfzIub`ACmTjAJb4~5Bd%p3GzXsI!xk$`dg47u^CQV_fADN>Zfdy{N?`;uJ#EKOT zeQ7J`^5S~vS@5YnIJ;xK%AQKafa47(egX>yM_XPzj?DLeP%XKY^bp!#SeuSw6t-}- zNg6xzXzz+dj|q;+6#yD43x3H)D!#tDmIANRKx_6v5vV*5CSJbbT* znvzuUM@?(@vERP-aWu>cOaL}PKkLD+cJMEMT=oewt}CRxycA=u9Ky)q6cAB=U7;O zf5&zDtm#D}ygb#*3PF&wSGOS>fd54^SRs5y&Z(CNs0QD|PS}h1!T>Hi4oM!l~R&ft=#XR%I9&VL(KSNB_YTdlJbRe{*TlGqYrM!@6DPM%ykQwjDc z>j%bEA9XkceR|9RFrx%us2WaHzQpk}eJ+Gg0z%P<{;ikEY7J4lP+pWw_qXgJ)iwLA zDV9yZV6SsQRWZCO!2`{-?0IFA;p+M@}B58MSj`Xg(JMG zgmLf3yeLnD)ys<_U#>Sq6#dlENe6-c1d_Rj4c1$Cj{R)I@=xSqHsZUW= z$*T>9S(Vy@fB=S&%}lCnTge=?NTx+oq#hjhip@XWFM+OhVQph* z>_~8PkIAWd?AeXR-Ge$xQM*bQ!(MET zvw^K$4Hpz8&_v(`lZFz?oFpz-ziJN4VCPl~j{rlHTOg4Dl28DvDHEhlN%Gzu5YwPk ztvb4gVfb!Yz(H=S_8A|W_%B*@@=F3s>;ySdqw5o>XDxvx9R#DApDgM9sF$2>@Jp_W zOPPSOeP9saPzKVZ*9nS=$$3`s7c4n z`6%d#QWdy4y%Wk-%dO0#t5;D_V{JXR;1b7srau&m?uag%iMzE_ff;ti`<4iluIa7B>hPAYj!G~{nh{0&d%JFo8B2*e3mJ4iBtv5--2Y*@4 zldYTC6VyqipQz+hln2DdA>1a7n?#rF5~Z2v5%+s-B>PGQ(=4!}f>+f(l0{gVa)G#( zm(C)Zd8_&JQ0$BXYUJm%BmZmCk7%TBwP_p|TwsiXfbOCxIGOI1zeD<0>~ZzR)~>P8 z44G{;tvA&S$%Iu}*{6QG>VPpYjI`5s0cnJV8Fj-qUQ~@mi-cfig*{n!$p$baO2x04 zXDznI5;k{;{?XHfcx-*~V!Jm$wQ>%lsRs}t?OWZ5X-9n#eJBGqH{#kuR%Ik3)vg69 zKl`d!QhE=j?8TG08#)ZRnL0Mnio2bVRv+pZ+C*Tm8pilN+!4vF(*+9Wv>(dPxGjVG zXUo)jaChV=8q^`0KHOJOM0MT*B1Z)$5hH`h@jhml&(Eui5xdQ#l`u+5`Nb8g_n|H19$^mm*yJiY#zeUZx zBJk}8M$hRKBn`M&#@8LL6(eZx0g$^`?hMsT$a0!ugCx!1T+$T$e}G+zDc18sFnK3I zCybW_`ES`r@DOd(Te@%K4T^CN)qk_ywIrrRu!FoS2{}-(zu5wb^T7{FW(F$ zOAQ@kk(L=d%Iig^dFdvTlLS6$KJ4l}d_5@<-i*LHHY18oRP#wC!vp#rt#jL)w@{#= z4B=|q9QP2RQ)*6vMl9E1w3a;{YOQuqEpKI;@z7)YrS4}5-H$+MQkw?q7$f@UtuX8R zRz~nu4&-;M1=!SIxqqH)hfDFHu|TYVr70%N#g<(z9Z8}nW^nUN>3TREUY0tC>EVu< zt`M8hnrV-wXqzqv%Dv>FN$q0~@-S{J#avZWWLwdO;I-Gzgl_AMJUBNlPbw?Z1x32$ z^nG0M_P7`xGCMGHZq#B2T&}g4Kb0&mcHuNxc^cO#W5#hfBK$u|+MFf3Q<`(`KJ=uJ z{j`MqR7Gg9`(e!R2PVEKg_y&D!B+!mPF8yj)plwRXCJuW)dURVMb@(TR0<@TEL&0u z`&i66=p||48u>Ex%3v!uC`zV(et8i@>E7^+z#$`fb>pmzPZuY2ZOKRnxyC^)VK<`h zUyc&|DT76dj7+LVW-$JXL8H%%7Nq#ah8>4#Wnou7@_pG#q;~XZ5!l9LH$riObcHa5PB|F)IqYzi;R9<5V0n`!^D6^i1k|5t<@Jk}H}Q{0E&?`k zovpAZ_&Ghg{z*UC4zD%`S?w?Ca177K~Qt7|xiAGL1?-<=s1f;PT_) z`6MzS_)<@(!L{Hq+zoi8Ttm-q#@mLEM)8rJ%y=NToBlnMfo`Dt)~2cWp&-%W>uM*! z67lzbL*%-l?42kDJ$j#BIq8OmdboV}srPoIv>KwhWE2E&6&}V?a)J z?9fuTUmKp9n>_8o$W?u=>nxKa1N**E{r2ucYI*2Q1n?Ec1)#?6QJTHx7%1WiU-Dxo z!{Sjm0}kxgC`giVx6^-V`*LZ0Mb(ugM4@nn{rGjbwluod;^WW66aFSDVKhy<D?Ke3u_EV1=t4y=)U$fMEwVR$tiXd zk5$67N3FUyBc8*BA|=*W?`7_5Oxlq&p=@fDP$@*MYdy-& zaH?jxnec;3&gw}Pb3zc5Pvg%e{WH`48`%WW#$=dj`;PZgn2>b8;&dr$D`6Ra(+%@bAFs z>OY`k{ZOq2ilP5n-^lS`Q0b0%5gX6-z##OnX3k!1_;F3WmeM&!E0fYH1#eZhT$r|< z8R9;O-^X>@lMahLCSMVa859cBr-a;@z;=>((!xXIqoDBbMz~0Ip<#FQ3NFxN2MpZ3 zjQfHY)aHWx1eK5l=V!dbh4mjxL59I{3-S zuwpEl3iFX>bLond$3hiAd7>Sg8wBNdu#FGmdmDMu-l8DeLX@@A@UR?kBL7QY}@E?@V&)#N2YxD8zsi~VGs+Q;>>M@$$+#JEL!F^ji-B@8MPXXw& z1Om4*`2jo;eMM;cEC}+y-C-^oE1!Loz^{GgH~I8D4Kl;vp3XjkP=o#?DkO~Oqm*yF zk&EU-xRmV;Gi_7IlUmx+nVq9#;3#GTaVXvn^}%7{xhOR5aukEImKNy769}=23>XBF z9E_3t8T7(3C{rR^tXhZtmG*XJYQ>6<7{>wn7!#nQZN8`1r0gbBvzkJPv*t}rI?WA( z0*MdV3-4n!}`*-k~C(yIO=w#9yy@Yn-KH0EVGAX$vT ztMr3uLy+BRhKzuBBwa-l*Ewg6-fDVS5ik!PhE0SSCH;;1;dLcqFpc9N;SzOHzTSr6 zxBrUA8-HF6yrf(nCXm771+%z#_{xEV2?*9(vcI|ZA27|TRPqxYIk_OHpM60xzB<7! z3A5+OPmTA0jqw;@Xu}y-&cU8s$nX6K!-FLSQ4FZl^)N}AdDHVZ>MW`D+_M<+1-xW6 zv|@GI_)31WN|+m=h@A}Ghd3%K^~;!gRkSa(b-MuoR(dRtA?Ua%qg-XICDqN=foy1& zwTh{Ki{@}sy;A4&dm^yz%F!A2=fJ+*PHY}iITm7Ym%R~lZT-ddM58ax@d>*GH#s|;ito;b5SS2+){K$_``OE zK2n+t%(0B-F>4{=Cdo>e-EeoKKvuy0@bn9cvRxtAC((p6?~%#5OCU+#G1vh~ZS3%X zYCEz=bp7un2KfNOvyWD@ZD#v_=a0YZUCNC_H%+-#kn~&OhcD-&h|*z(RKPVJa38Td zVgq@JVJM)U(nnez=AfRMCc02OaA4&aJ5R6|R%0O;>MaD5U7&Da?DSAGf~q^F2x6ke zMFA}$$Y^YldBrFqbD*9rz z^ME>xpZZ<-@zuNR-!^?lSpxPszM8lw^%<90Md z@=;~W-+$l1DqU}{J_4DGop_GMnoDaV zIsHmo%ECu+#d=-r0ZL^_>P}}X!Vi2heereh#h3o)9V_(MrLu?^}TWsnCi)FScxU|0GLt_W5 z_g+MXF=%k{F2TbL{&%&jk<2Mi;{OF2yI!}#I#Vnm6JZFio9cftV>b~`1~KSBp&zFA z!Bf}#BG-h%t7G804@J+) z8sT0^z8}HTj~r5;%^Ww40lMjYqVsruY}lU?RVe4j z%T9#CuG)GuT8hOG4xfq8uk*mIX7U!?U&l-Rxj`}1r6u_=B0Zc7E4Pi-n1`xOzV@*n zx6X~M?5bc!OdyW^EfL4p{{$-pl@QqMmw3_qi&BmTfFpbmvzu@pVU(+-R~Q(86uS1B zS(x}L>CUc!H3Z;VxuqRpfem`Eu7{aggG|aAa>bdFN5V1R2}EQ#9gghoaaYT<(OW$; zdEL|aSlLK6T&-%mTRtIVVC^Isb zWG)rE0CUjk%5Jk#F<@L_9F7}Lft|o@qX>u)1^rU8se9MIo8Hg=C##7nz9dnKpgwzy z2u25KK@!BX%J^dtT;x@1WT#D2p!TTng7l$u)oC!ouD-N9_n~)>{%?^$T+I-8M_abE z;wtZsRH)_N>4(?DO4uSAjkISB~qL=mF>)?|NV%bN=gLgrEagc_#)GQQ*ZI#|Eh zRrfQE0@)2-C^Y0)ab;R+(HPm|(P(GVtjmjADt|jZYg}=)5Fy%IAv-n#7tLvt>}@Eb zm~cl~%jOnRDcf>A?Mt4%U0a1_(VkDC9k>E&8@vH;`!x`MlrjuZ0-og1+OplrhaJ|h z-mQk;(*qzHv0}(3imijyROCnTs+*w1<02D{oZL!Vm2d=ylXtbEq3+TWHN4FF#9DO6 z!!Q&n2)nNTw2Mfe(3<_nfbUjp8yTnS0v6vVF6bm(rh?G~+iBdzxQ60Xsvy^jBx-gI zwe0SX+G8hfy>vJyo@WmW%hO`|W!}g6Qd)4|d(<y@i|Y*18S>FHF|@SO&hAg`|>Q3sjYAT#zOpSbofiF64;@!kjoWjxXwK zt8G0}U*mxEiUP|f&$0R>A+{}1iW3u6M5FUc2LNv3Ba{GMc^zMXGL51#fnGr}-!Q_~ zD!hUoaU13!jK8BdjPI9TqKvz;>M5qJMnIY`j?`l1l(DUeTP8|S^zwhGpndLE z(YU(jMf~u+n|fX4vZMIIt?~@@MV~N2Mo2`n%Wek1?|&5o$CvhuyOucRh=e*xu&9fy zNmo>{G%_tQfYk#&?f+(7DqQ3)61Ud~x4S|QH&XskyHbZfMOjhXQ4>zIwyoqz>o|q! z%Otgn5vl>Bd(FoM#v z6gZ0tT#}24%pqXS;=`kCx*R!ZWURHuWT!RsdbI*lb*3f*%?%f?V|EYTNu^2b3`6=- z-l|FJ0bnq#5(43TDSxJwj4XyBLk62UrL1;myHpb2uLq$+@nrdbIhWs8G>F*$sTU$E zmXLj}HuDJeRcZ0n>sCNve24ArvETK*%Wq|)N1)E9tFMLd(GJRw35w93{WSIqT`XWQ ze`Ivw7A|mtaL$KavIQqN^Kgf+A>c6I@(i%#rK1`LFrzdGSkJg`GhQtOD$R(>(>oy<_yMf^iG94G9>-ANYem6YMYV zs_IQ;qq{lSiip&S3(lrQjyJxOgpZJ35JW4uM}sbteL_uz@Vej%ye0$W`;NqYQhY+( zlhu|B*Io54+*YiM8R^K*HC(%gzmc8lk+kERa<5xu^0v|e+vRm_3FZU&hP*_@gMB~Y zyFMlbPD!Fo<}h;)eq{YKI?K;Ne9$zHP7M97P5UJ>K`>lmm@5|L zop^CBL7cbXQehWx%w=Yd@=K?C_#qBM;7gvYA^N}wGjRjmmqjggY!gEpGfWp_+TlJB ztag@ffj?32+d|?a&?Cp*bIn^FXx^k>%$`W!S_p5Hj;B!`BjZDGaT8p8=zl=*>!fKATFzUNTf)z$CTaLE0?R4rsiL)7e{hY2Io!$9OCN9eq+DO_A$^H_%- zhs#V52@)q)0w0PFBEjaIPOQj7Zm+*@gb&DPk@*<#ELmj~hFBylvQg1i^+Mi6K7Zo( z81GFF8ILPah+}t)$0#h7k!}SVurA_JL?SyUn9F_ZI0y_Dz;UV= z!iWWSm_p_=^SouNp)%ww+hlq{h(2=3jX92u`3`K4J*&GWhj{`A#oi$k4?Cb^fsmZBQoLiei+MIiI?Udw$xAy0A~C_w z)In7XZ_vR_{Vb{sVmXx$Qb)K41M)wQ<+{mI8F9FGN#rDU9T-_5h!8{49Z7EXyp3Kd zr!f$+osnLZte_kRbT1~WFNsDoE0KUf;Ec8m*GliR5xGgR#s)zy%R3RdJ30OUaDRX^ z9&0Q{-}yh)vaGhKmi@>~lC~6+v-8HlRw%j2SsffJaC)Ctm>|+7)ttc&o?)n&#?i{K z;FK*S>uO=-kwj4K_%L| zg=E~h8rO={YnOk2&&fxE zmw<*HT%%)Yly{%Y`hL$wCzQMxYvvghIbU^q17~mA-8<2vvvkG|x)&`r4SVt=?gk)x z)cBGs=Vw+XUIlJaIkE0nDSlpSf?nZ*mR^`|?ExGUb2~)X<(G}yr&P`XFqRI7I|Uz! z{vXyLfqp_dn34Ma>L`qX&*CrY&2f!JVn1`D&nF7F{<=n|1n8jnM07*CYwxhJI8<2& zIC#+zFob~aGj@-w*jju&M%PUtA-nD=`*^8Ko;auNpTZg3xfJ*X;uE`?B5sQJ_`0er zRnuuwtB_^wcsD(`r$h2>SHlIkAzXhTX1;-!L-A+KgYN@n7aJu1#??!PDA7a!@e94t zRPBDguK?pX*0v+CV;}Dqe_ONWp#O&YrYxOGwzoeIs9L2mWaraOiF~zzNg#Vl0`2{S z;PU@*mFkI~jQ7$e!Z$J-gOln14kVSVx&k??gzSyvxz}M~(P&Uq62(JX#x~VodAGjB z&z?#JQ`o|wKdPzd^|#T5Obn+E-WPPk)YVD?O2m&uPvB(M3>h{72CEluiTfJZarkG` zUYKdK-BtkJ?QtCKx+!hPt1jw`P*4Y6(skEUng&8Mg9j#HQN2Ztiws~PTF_j3A(>e6 z#|Y~V$F-D5+1j`v>-oXI$l8Hh=$07-G4hlRo_aY7Mqb4AhedM8z%pZ&vy942_&X>6 zNJC`x%AMO?$BW@R!u3~4S^6{&4zw{05IWeLfw(FId@ zy=lm2J?G5BnQ3^-(c)vo05)u+UYRxS=U+nUQ~EymJ3N7M7WO94bTS8q+Fpf&k~Xeq zVLHG51<#>3p!*DKIWs&up0M|d==fkTr(|D=`E+;4#u-@=@O12JsHdH|9P837Yt`Jk z;@ZK2?K>9$C9rfNCIi+BH9k$71#tprQNUzzZYcved>@PrX!j_P?|C=!X3-MUS|4wO z+yw8#<8S-96%wjG5>LwoWLZ}KK_P%ydj{Btk4QsbSuTZ&j1I3?2F0EP{5IDtmc7VO zzI^oMAdh^g5J&+3KLEf&D9+ILE^sWcJZD9!8$%>FwZ!MQV~GP35^Xc>lO3gaW>jy@ zj0#CSbQddgeG3i=8sROvo11?c;W7@kUuSz8=^X@wYY(Vk9u97kjMP3*ey@JDbLz>s zr*QXyqBKV}C0_%+L%&i>XsayKXOhEJj!(#hnTdxQo}`1tL!f@{e&uB`w1?V7R;O3M?)OvJ2!1-sKNJOa- zCl=$qczt>wyH#t?zq~H-pb~QxBJe7{`+5Yi9aZrk>q>X>EEKK!$I1Ah!v@}BzgiL}9IyfxiP z!VDcy$JQpDA~gCZcF-c@1jRVHEojYuQlAr_*3cdccQc6@=!wa+wgat8v;7W<-g8T> z(JS9G=2GO}V9=AXxZpZA?(a*BYY$o~sf&@9JZdxqEyNg>#Hh;5q0cqHLpU#dYVy5g zv#M+dnx1Soac#3)lJHq)sFA0tiEL9?fH57$GkKl6cn+7xS-r;+9%M&VCr1$`VlTEe z9B9WUf^mPE6pYiyF+Q8UtAkGnjj*x$D5)_N9yT}btMKHFH732O$uPu{#@_S$br>w@ zO#ScLRRnGw{FN*GtY=3pOKBl67bdQ$i;YL*G&NEv>=2Piqta}fdptJ$GYM5!FI&W= zn9(ww4MZ4(TOt(6+KuBePqSo2|Lev3)R*;zvMm2)PV>ms>6dF`ikg*BnOohB!Q`2` zdPNhM)*^GILi)eq0eQovAU};5`ZsY4wN<*uBh$U2#K%eXALa@?YgsbV)CMXnFwx{E5~STg7GW_N>8y7I^uv! zrTR*%HItH7@EFfrhH_m+HOxw|w8vTvyH#PoG=y66siUQL+x-P<{ma3R1>#ytY*nky z2od1yiIc}y#rQHg(YRkwj+3yy!73(PG`p{#nD3v0<)r1@^7Sjh?mttK!%FW5gN^G7 zdAL{-eWp62+FW6-dh`INn?<`H8{J?`m<~xYyEBw61QOdas+~0SYx~s61RS$7$Y3Y5 z6i+T&dpAeP2GDJc@uy6t35wF>dgyZ1<}ZqBlw!Yon`$%wX!6)OOt|k)K%rfI?1<`W zp(WjToeFDywGxp8LOu4m_ZQM%0d}cW_@%}*H1@)Yoh6e-r7uvb3>`^hycVTR|D!pN z?!P-8cB}>DQe#HgkTwb4FIVW(7ks?;mxQIimt~EY6lx0}vK&@@fO-%RH1<;-;O?hC zu6h|TH5j}EX0a{dIZz;JnJ3v`w3lTfh}E|;V{v@G18|cnkyHEq{r^F)E1kTF2rW_Hi~tCLrO`=m<1%4yGxDi7zN?9a27JuMi56D~<8Wfpw;kakMd%MKm`3n{~)D zTStR4${6K9dc?1Oam->NPsXgJQ3-D(B{AYTY3;D2S>wpmuWVSksRM=x0D;uqfRtw- zqa|M`x|+P+ZOlWOB&!moCio%WBT#mM$NPFvLgPWFL=7!VSgFjoxs#WHp|iNB;32c(Ob70&$;M9EfDzt8>KPrPi!6moM>$n7b&LUE|V#_aN!^nuO(v z0v|PR70EH66z;txP+}eQ>vl_&Mj~ZOO(&L#rk9C6XY-TGP!S1|@8;{%0v(N!Wk@qM z5)x?r$MX1$Tz^fx&tcR-Xx=dCOPb`?ywQ}V}! zJ3UTkPy)M>O>WE#g!WbyO_Rd@fyV=C;;;J>5>rX$B89eT=!7=$@u56jdXfg2FzeIl zt*;amxH&Yg29@_Pex2AJ$vqg#i8SdjXT2#RtBbxPGVD)$m@{OF_NS|2gVQ(Um)-Ek zQBmbw@m@C=pKhHKsSO}GfmpgYZ~A4e^3a{QXFKd87(R36H30@eMHVRZgefs%C<1SB z5K_otHlhR9*;5XVFj84Ej^F41A3SzoY>sjBDF!k(cZq zlwaTaGfshf@;Cl4cno;$O%7&JH=Pfz}f)E-wsR}0LigwiP? z)FiGU)6Ygr?+yJ;C-uF4KIW< zQMErb*qMmB&O_BI)bkHVIl1axZp#euyCN^@Bnjl+{z>JHLa2OYtMY`l%p z-0(h7%>9rK-RkPTm`R~_$l`79*pRYD_d4h_mIz>UQ;;8YsGz>Gm^`5CXs%B5i6a*y zRH@SsP$NuiHU=Rce;3Myykq4k@`8Y5IEjYspy})mTeJePMKxtmbqbP$H_acvlP+;= zWiTerac$uM(xir5fokD`aTWqs-`+m6Em*P#^+S+FtkTaLcuV0nH$EmFJIrK6R7csy zPFsQ{fN~WvcWF0rW`dRV3m7-|o;>Ac-?dk7hbP)F(}*{LxdoB!>t5RxK5G0gUAO6M=hm{JCi%bTQ{_W=RA4ui^DXhJkenu1A$xb}IjaSQVaqPj%8>UJ{H#L&WfA^&wDR(<}u+l)u#BzO@j?Y}Oi=PzVTn4`;+ zS1~UE1Yv+YUSB#wh=%uNiXVejZq8Gq`(=hy!QvT;GA3D%#2;OcHfr`R!sJmTcGe%is-lz6OUl9 z5X45(Md}}n3n3mLOgvbMS15870c7GqxGxEo&MHFoZ_naX%uhSY$Eq})z zmCP+Qj}@u++){GFBJ(9wK@!zdqtk4UW6bO9**bI7K$2vmZKiCMF~gq<>F5}29H?MJ zpg|7AbNCqYW-toeA)%?miT!gDeiZxzLrZIyrlfeyegcLUvB$*XCrilo0*Bc{-MpUJ znK28O;ccBxVLvE>KD(AT34*moqNwQQP9D}~rB(N2ZbpQ4^Cf=Mz9@_AOweQpsPi}U zqT2=e=%^x7ZlJ-D7bnkS>K78{PyN=Z1)RBHzV&@TQI{Ij7s*IX8V;X|f>7r$fyOp&CgS&_OuhC^?`ub#)I;S>y%x4wG!TaeUiWzmSui@vosEWsU7%6@Oy6#ddtxe zH7<`~>Zai<8wB)0#9^ExqHwsOmw++LS#*n{L&|7}*%)wgIw$;Gc9W!>2FXz_%VU8J zIj*cUGFG(~wx1JwwH}!2hVwBWA^abJNG!pyyjiT8B+1w%KBBZxN{fo@@n-w^vUy@^ zNq^`o%P!Gv7Rb73JnbvMa~vBJa5k_Fb@1FF0ABhgQqpfGrSH07wB$q#QtRQp*Av6l#Q0w z7>_Om87n-7*W_cnBW(d1z}C;0Y?!r!v!W6Ym9azLqr;&arqyZq|d zEgzA-b}^v>2PBrDHF)w%n2>>Sd(K+7xJyY8a>$GE?R3>D#Y~jE%Ax`_!2a3>#+QWo zr3M|*yS0VBVLoV{_z=R4uKkbm14bQ5*?&HcdEE>Mm?q^zBm+Zg)`+h~%$j`oeu_r} zTM*HYK@Xm-fH>jSu_eTEVTximYCB3f;NM5JO@{~6RY%e zj-!!+C3|1b@S3)84*#H#*uQgZpY1WwxjIqvH5O}i*=4lv}=*Fpsp5AvPC`00>+y*0EOj((B9wxExnZdBu* z&tF0C?EkUiBLVXuqd1=v-cJcYAVZO!8nSs$!q5~=U)~_!26|-fcX{lgg|hv6WAzyQ z^dx5q61id`VHGIW{xB|Ma4%|qm@V~2+wAIr4NKGJ?stATD8}dg){;=+Z7HR{iuRje z|Ejbj#Vkw`?HtyfNu6Ju*-|>b@Z^fb{S{C0aZC~L%c=s(gED*~n5PntT<+yHs{}!b z7R`z&*usCL`Ne?cpL~iZc1RpsBai%?lQz^ic$^M@-^**nE>!j!tB3C+@h z6M2PlRge%0I2K{Q#oQs}X>O8wyOf&*{^#$e4I_c>Y=fGP+eo}4`hsOB?s;y5YPYe{ zew5-y1}xA_(OoF^VI4pdyLPgUSoLK$`S?Eq_+=zstA1_Z;`2V)asI5Fx(gAPJ*;N} zNMR{PHcHBxwQi31+uNGeV0rBa*#cP4I_NDfkKM4%mM|Ny?~!7Xuyrh}J0xHv6ZJwM%ejg+n#a}Y>{8jw!rel7)#}3Uxw|$N@+fSaS35QwRc-@g=LydRdZqz9 z-FMSmAFrPVAxO9nvNxUZhHGz{DO({b@qz0SQOu2L3&#hNc~PnHYw6DJQymzuHnB|t zC_In6jK#RJEPErEKq$LH8)30w<=rtADN#nSx2AoWw$9D8U zr-5)vEr2qjBX7k_O?$Vwp`zAowc|?jEDYx2gpD#(Y7KhI#FzHPd_3JUDz=-pkmbI%9@zgqq{KbJQ`Y@yZJ6MxYWsxXaFkp?n?Y$H}LvWCK^pdbV zsn;Buu8a@6FDng?x^SBXEv<$2p`H=L$V`$JZ%4x!YDrT~xH^qfFLk@gX$Y^pi%CF0 zpJu^1r+8DNp9aQ+A&I*cNsXb6n=h_dLm`L*i`VWT+k1G9;m1nr75N{sbx8X<9?V(N z2BMATyNad((=0i|0sdp!M{vS4#7}N^U>L2j56bPXmLswW#>Ti{2Yc=2&7;?o8V=i1 zY2SdH?eL5OB4j!$t&?&ndY}JiofyF!>$5RTtR5h zarVQFJ%k{IEx03beu_I4HOg5u0zLf0U~ zu3Ze}<`SvhJ#Zf}zNxs9M=OgVCa2K|0?7r881t{iE@)3;1(!gfJY%tk66LVsw6m&7 z^(5pUt?t&A&9%N4{cnHraitL(0Aa#4sxzCRc?uHb9B}+G#8Awn`L1;Mlrl0`-5DRe zAwDS2sUM0ijP1icx{1E9SPH*#Agrv31|M%~TW8IZBqV#>EEA6+^P0QZj&18}Uw&*Q zkH}mm6?d4yQR4nLAY3!+%3Rt-Lu~pQ4t&r%VnWu|#Kd}|E-Xmi)Jr`7|5tCf-6h`W zQws4xC;GBs0hW>>_7VV!1z1Gpe)$qG%m=$fo-~dXpN?t!X@^SAFqodtRH;4PhC7ls zfNy-D7X(#3`hGIvo5xBO)IkS$_rwMbm)|z0DigeCst*yOCa!z>- z#r{%~_IXjw;|QCg!_^u;R=;AsuQbPH`3?+CSB3xbKmD|&h-iANY41rbA=Rx(}T7qsCOs6la8L!k?~DXl3<|uYyqJ1;%E}0|w(42>nyp>`fH!mIuQHC)A69oKA&m6CxbYBpba>lNG~ zZy9oOa%u6W1^@rHsc`g98JTbIDie(~=2pcP0*-vJqoSaHqP_1BL3PJ}1v=yR{Pyg9 z?`^>(G#;#SnQh4e<1*j&f`&a%ckaBaO->Duk^W&R^J{6WeMkpAOs>QMfTwRR-ELaq zU8x*N=7SY2LZiSCdNDET!%O@7Ow+`^O*X8$$N5w28fL*YAi1 zXO2ESY6V;+RW5W#y#w(j+;Qm(VJ#;?|NG_U_s->~+^#_Fc%OPc{cMR03_9r2RFfA3 zJ{lcg$DR`=%4`^FU%gPYyZmJKAsuVtAvL1Fq@&bFN?S<)0VVHj}UxpfDlW$#2DBp;q|n9R37I8nS> zOvU=1XNYR=!GgwM79uq-*~Vnatbn(+cF4aH2XIkDw72ABd>&M_S%k_Vwx5hF8{dm! zQWqIYajmLG5^kKm3Q4WkuSOI6mc^Skv!bd`zmV#7F#N;&08lSqwIqySqmd@ZWO=aL zVCh)Sxa+esw>C!7d5suD{iO)cm&<2#1`yV%q2nt0|A5PNDN1#j`@9E8oPZalWK=Ok)w`kUA3GwD!X-N)42|WOa>%@Z$Gc2F!wx8K5PfbQGeR-58#a43v1Eu z!U3X@SigghE}&QcB|s&#Jax0AVmJhX)eR{Swlgn(7neQ^_>)%IgehEiq`ZcMm)xBW z=h8zpz>G=06ZK-sF*k+EmaV@5uD^90p1Aqhq_nrr8+f6>2_I#wDh@Ds`&StFfd9x; z(a@$ptc3PYlAu-mfrkXWc5ev(dMiSA_cSoU0a@gh<-X@_OF7r6FhCw@E5F)fxd(l= zJ2ETsj0(BeTV$AxV!HY9A{1*nwBKe2W0~IURbRZ)v0?zHB@c<641D3<`+ly$79m9S zumCU(N}jsu&c&|T*VZbA@-uQ?hBn;>00i#rpuk$pi0(205pmBKX5o7NUS7SB zIJj&tT^RdtV-bk1d~Se=#m8O9vF2OnY&u8eSIm2jD2(Xo>a-FOTninQgwyk)gV^b- zAMJM4q$seMlB6$+rfzzSmBWWH+dfbP?HbZ!9KT2{JE`CBfMBCg?Zj zuT4)#engrR?r~vE-*%+|QvL+$U$wy9i63|NV8tKG+`<lZR7w+<2JfsYtjd_3$GrP#%qRBxWL-^ebnwc&Z43vx$cWR(dsO+M#RUH`W~P1{ z3$d{TaZzonvf-l*7Tn}7=@Fi!Q4h3Z?kkW1+uea{?MhQYmVd7oS6|~XT5m7;7lR@b z%2t@(mjEQe@M85pFRCIxHI>h*9@Io%GYXb#2w=@hr^Ew@9@YUTJ_a@P;igpcD zpfTh(UdXJWUh&GmiERFQWqSmcQlIHvVRC%2gsLJcFkEssq=1gNy`BUnf{$?w;g1Dy z=tDHXT&>8-x65yaHxV=EWIO@DYXtxy6iV(2m?@#ZmQH~;r|-1&l?d%q0cX9>5oS?{ zrvh?AtC_&zKT!^Rmij$3ghFNW{^@8U|I0EAXm|Z25$e?Y>*uye({_chQ@gE7Rm)9u zr7irUse?^paLDlUu!+qwg&P^BZ-kvB>90k2FuaLvxm2El#I=bswpDa%-xWOICzyE~ zGl1j0zRw|R#H%bX+k#mF7*0K7JF9d7Q=60von^P`l%;*19a3O1^2vnf7X}TxJ)gyM z8_?4yF|Sz+<%K?sCqm|?$&c=RGZ*M@x?Nqpv&HBY+vL@6Pa<}Byx%2dN^DS+h!xR| z>E87%46C~SfLYeaP6BCx1+gJ_$;8S9imM!7Tghl0E{xCE!Bl-k-xbeUBd>6*>VgQ0 zHFU)?*^b4`!XKKa1v4Ri9zZq$n#g5%Pe>n{iY@UfmB^bh#sNM9Iv)bI3VDdvXU+n0 z@711_D>RdD?{ehV&`DyA1=1v7Q@zTSR%a^bco3~1x0@KTCS zcy^Gk6m9fC3+E$PvZ7mhusMq{9^{M6!Im$&QJa_KbGghn8u#XOnh= z3=?=^l^Hb- zRs=_v7A3LwTh&s;w28JZRu0<06I3?9{PEet{RNNcdPxn`MDp*fBIH9)%KEDyXE!kU z?fib|l#hGPS@(}nIs1X8+TcG8@NUacB@4$JZYuv#9xHaqj7zZDTBt@RSTis=A5@Jc zs2TkUz&1C=$O(EOgBJS^;UZx-Q?m&XrDWlr+Ub<0gY@|0zD4Lt3;9BI3oWEJY6hUB>1CCJsC-X{>w|Xyw z70mtIK|qGbACreUmF2J`nM6yv?O%hmB<7$+ogn{Rsz8Un{u1)4@sS|r%`4xoz^#bJ zI(I1Q3~YxJ65eo%{vZW4)v{P}D3E?>zIG%x_mbUaUyc-)vX}ydUgqy{9EKOh#2oBx zF6A<(g@gQtm*-QjhiyP7sl1iNspd@@kt(U1+xf6GG58R2sb1|v} zJpvKWx;2TGn_re6(EGLz4Pi<#Nf%Zc(aa=mW*t7Br;`rCHQ}qO30fyma^41=b1kvG zisU7n?rmp_^gz+&w%335>gj{j@|PjSQc5;I=)F%(bGAu#pIh zh)ZET2QyGh7iIjbYTw3euE?k0+)7FoJK$u__iW6}(%ncBL5GqmU8c1{S(T7pO7AHv z#=)5GV7+Z9-s-7{Gg7a5({6%~FX^y`N6EOKc}dS>uO2FDPDKK_&rRpwxsVAoE!RgH zxxq3AzEsB0kqz_uzd&#(BD3JJ-dKm7xBG|J5q_;Idihi9-L&S1OOYz=5lbK6yC4y( zyy(q?(N%`nd60jZicp{@xgWGMVtVap_|5Xaq`hf5eAR)BjLM@wA^rX7eAH~fVL6{0 z&;FDJnt)L9Gv;B|0+a}~LVqHg)vZTKp<1O}Fu<`cY|Auna_Ay98&j(V;1k<9<>7}i zeEIdg?iH+6dP0~6Ci0F*^cc8~QXpQ@Z_l$QtublfFSRs8&qKRfVYZV*W!7|*R|p?mA9T82tARCim1H-sF-|h@r-k^7f=9y0KXJzk62usG>=}DmRFfY_1h^?q zRa9BjQkRxT%&RxtkCdn8#zi&waSUnMJ47esc223#9F{xtVB~yMGW*=B>l!<_rHq6n zX_<6=E%VrCn_3cD3g-KU@N^zSZc4H5|HRG@n!pXFedj4(r-CgP!F4PZh>`zL){#>B zt`f%ADQXr>gnE4ctJf}w3naI59p_Q99<_XmU|)Gn2~Ae9Y7e_#{X3X0VHhyCL81+s zch8^p{?&2~_oFCDwBV!|*|Ano%C%(}Y3$6><;bl#0$P@9Swln7cQJaJ z7Rt%KIrmdJuaf%{i_yaTksVdkz49)!QqC!Mib^;eJmn2YyWvk5?Id9N!-^`{!puI~ zIyIprwug$XSnv4G7Wm^A%$HR-<_^d45_f%JD=R`onCA6wPe|uJXUQiT1)Bw^)2*$U z1nTrjM8-%T8jEoe^&+;xTnhHXE1?J;;H7gt1_)m^jsWbFn?QK3nv!oQ5Bp39tN$e# z7%ldtG`Bw|u^q;)2zFzH`Ut~sSqEGnq=e}*ul|DTgxF=xhDocMZ6EKMZC_j@{(#C= z;omkGmxzzCD$aC)ZGIMVme$9B8&w86n5qL`-8VR=FVxBJ*&tj2176A!igL zY3rU}rKceGoLm`}Nm!4&BR0r!?vYmDL_)ScC~s=^DQ&xQr~lUO;tKK;5+9`xqZCVI zT|j4}?g7Jb>|Bh&lQ!?1S}Rfh2!2PR-63h@;7 z-d1;^ck{TWlP`)9dS>1gBWEPr;8Rwsq{@AJFKgOpm81Rsi`{E3nQM)UQ4``Kg2_RL zYE%vUp~9eevRYta>i}}fOgIne6#grHc>OvYqoLQw;_g_-m*LsqXh41ZWoe$g1=1YT z+-A`9XhTXz;!4QqOD8YOC zGy5I96unyqN2ze%%TrGyiC)mt2&2|q?`eY^>Ls3U=G$Ii*-Eve0#Sy#RJQY}C>!6o z^((zF{wzf3#3lSMtJk19Xe|`dRXFKwny~%${nl2xk26@Ak>mT1de}`L)8VHN!h1L9 z15ud|7P}F<(%)|-Q*>MuX{p5jZl7JcSNiUD@c%S$&*e3#`vl?b>`^emh(u95b zseZbxd1sXzO;2y{xK%br%s-Rr`FQob=*%wl<}uQVTTXOUO&;(R@yI9PJV; zF=9$JMkB?v74 zSqz4pJmz1QBFp zz9wPP^H!NZdU9?suW^?MZUwr?>LuChP!8QvIwF5}3a@$}4o3Z`(60V9N((CDwlN5T zQvTI}d1@mj+KSnG+#u@f=lSw|>U212hevuu@VVSa{-cwfBV7wQ5mXsBf{e$abJA&E zguu0m9}Vb0xao5VUB<-c2&j0ZOr;zWJ4D?utc9LzuP z9d@Ipx^J0?VU909K>30A7pE)E8`e(2%zr9az|WHKv;T0_!?qaqo9!`SA^p4I288JK zJhkgL;--!eQ?5Ghz$Iq!6>~R&%G%&R?-4oANHLc3_fLEG60=Hnv0EB5|t$q1+hwS?|U)V|#6gigGt$Rg80p?+P}OYRU| zFk$!oxuywUkyGLrg|65d3|9F}A0zEIxQ3%kSa+}lQP6y6J-0B_>gRLaXs4aSH&-*{ zUh#U;;7A`PwslzcjywW?eh*&Dyw1NwxYP)OquZx^G*_$ zq-}gBe7603-0(TqdZ}qB#KjM$EawG5LZLz)hRrrgp!q0YL~oDp+J=SSt2dU*(w&lxNYZh|wjD-)mRADp?unU| z@-d||3Uc!pUSq4GF3yj`EzQ;*W>h;P|5*oD0P!Krb_hwHL(iEZ)#Mh7m$2%Aqh;eL zW4bd>gU2j)8UGnJ>l`R7R?iwbyWrQ_Azs(geDA$(vP7z7HTe`r@aDJUULGh^Rh>mE zG`kosJ^qU#TL85+?IJrXN~mgu{vZ+5S8~Uj$E${u3Yh!tp&k zhiy(@z8n)>MOp6tJg;LwBoz2>+uxLO7m7e=a?Dn7?LIPAHZ%j#E7@^+GlKZ-k)A@Z ztrPOlBKzgx$o;Pi{|N(87+&0J9! zA~N5&)zY_=unGk;7^ETJ&dN`Jd{&^W_mbVtCok~++mEuBaT*U5;Lz#Cx=RmSp3g8p zk^@`8qSX#l%SHRZwcTaBO)f;>Zg z7!ecfGvh^SRIVhEJhg>nC{qw}yT92g^iB?95>tvj{ykZ zEGTq=c}rxvuGOMr^wB$#;o0GQo3K1a3`z4;61AQy_ zrBFRgC2KEgE!pN248~E~nmISWP9$Z#-#JiRVoeO*WFI!GY^BrXr?bZ_IViZ1MAuCQ zFk0KDBv1)w>P0Fu8oa5qZ?I>abwh9`Ncv+hoPDDYuAxaBB04Klq&J$wT-xB|DjUY& zy&$n6-$e4nz_cX7UckJOz;^RFf8Wgg7Yrd`VV>YD{Ci^5!NC%G^5s`22S_XxUoDz5 z^|r$s9Mt(?1%W^5c#w@YNBkqiv+S@s;Z!#RLY&qY9$=PZOLbo2a)*Mfffe>0%!Aq= zIP;yv_cYk9b?Mk&@c($sVWX0k)G?+T@KC5A(vy6F1!kYCz4Y2Zw2r1e>Trr^ z5BX+tn<&$n^kK+m&$WJ#{}Cn^^JqgV|3=Byo1~GRe~9pHgLF=XC~qpY7yN8&Ck_Q) zQw7MsK04$p2c6gLk+~4|z6nJ9wLm*xB2cO2rt-E2$x)XyEYz_yVz11>tFYl=$e=>0 zo1rp3XQ_=CEvUCbPM`J-L#6M+q^<%*?9R49-sTzyuK#wO#dld24O z8_h!ObwVl4>Z%I^_IH}I(nG_UTH2CGSoNCM0W>$syy4lLBKeGaEE zDz+z03;j_@3&Cj!An}mm(oq`QZk7cHQO0G4GqmTy3k3$mOdr>*!}Cvutu0-}!o*vi}b!7;9P z)MuX9#WtZ`)!?I}ye=l1xc65M(%{*bXz0oo&g}6)&-=XRU{V}ePKGla0na5<*!D>{ zuJGaZ-!TX+?)$=7{VzR|_whVrq6WGgpiV^*N*QiSw zp=4Wb1M6p9ElHz>l0OX3{YKtKgDau0a3CVPW6bmg{N|q>?bojQiDlU;M8sCUclgvI zQVt5k5t-W3kJe<(T>Dl%%=tY8lZOX1R1Sx3c)t7c1%-CzC-g(B-)-l~N)e&7smA%f ze4;8o`(JDE`FCkKhk-9}Ag9Q}&vBA}n8(q@4! zr^hm+(<7eP3h#VZ|G%ua7Q7=fh5i_R`od3!k6qb7wwA#gAgky<$KA1$?M~c^*W2lc zsQDZy_m^=fT^>~@JyjsYK%Zu^D{ev1=oztV$9%0LyVHC7xvG7iaKpBzAjHe(Gw*sx z<#knfB9Z%n* zHOQOX;|WWheQE938c6$FV8JjmV=@TaS`=|5ROz0nf2?%2P{kwki=^VWwGC@$ob@$D|_!a>rDZalo>Eq1;JMZ0EVc$W9DHO3ZIl5MCHr|0@Hc3tP= zExmqqFYT}y)10HU2ls6_M5It?C=j->69!>P z)odXI`{LV!H>Lq9LTxAS(=MVgHztNV=~4*`<)80>PaC9g0Xub-1^S6Mzd!jJBt3Fwz2KEruyEg*s@oLUq5I6Q9AT3Hj_gbF?2f)8ArxJ;a!a{cqxAY9EjpToDcP#(|0G#G|!_Y}#XBtAGVH{VhfAdG&( zd0eqPw==~az5^cot0Y*HU;<))n!Tt5!6T5R`lf< zyxB8B6X}AOicZ3@LWNoLicW zbTfW?6s*=_Z$8;5!TV`k9{X$oN$>gcZJ8ENWyQji-{3;tt$%Xtyk>Kj@3`L9gAeV> zy%UpDSde98iL`BHMs=k8nsq&vd<*m~3sbonx;GT}pq!SI`_+l~Xf-3>>n)h^|EhYu zmuz^UdZ`o$);e|3AA}Pr97_26qydd;e5j|f!s>B@g6Nk?BJ6lHoi$jB=!cJ#?vR_d z{drqx3>#59I-i%i1XMIWo0?$-JfJsYjzMzkgS9K+j!Kh8jLR?XynZ=TDy)r}9B9jM`Y}R822uBM@25nnd3Nce; zc%TE2?~(Vup}zW*D5=Ck4=;N6=B_5~zw8ZNgo#SK?O{{zNFWyS7qn&`NU~W9fD73y zN9oSI$z`zx96WqeVeZ~J6&R#vNQF9!Qv&Pw zN)W88f*HaTheoI;*91isBme$R7|~$}2J`JIve|_ilkZX5jjbkHGyk&~zI=SUL%TUl zs3Sx;XsMzsh+Syaw3omr?r|ldssH=JriJZgy&WGp6AdPe5F5NegF8xJ30GVs03dC% zLT?$Bd2C2ARS2Wt_(pR^UHPm#+RJk-dE(VhYVZQoGF6EPmCxDll0FHh5$Fe`XN5LG zq86(#t}(=EN~9GpLsmBcY;E|GH1v&?9VNo7fOP$AJ>d_IdlTL zARqQN-1NhG>KXve;*#=oW;)^2Gt8P{oTqKKqiMZRuG5i8yn; ze|muyti$zx+ei9Vhg?!EwMc^TVKrrAOP(j$6lSXuwsfy8g6csD9rG5W>8Jg+4 zvZ{)(^fB1C&pZa823dMbtE2J-J%A5P05bKd7eSN+U}ZpX1PX zLD~>h9XMEH-;wEeZ3IJJY|v``V#!YyiaphiCnbyXbDX?eQJ@BCU$;6udLz=-S(HTp zgEB46+B{tRH(Q%u+_P1GGcG0 zvU~6VB-V<7zt@u?XdNh9m4A*#P9go!sJe+FxD^41hIdEOmdfbSnkaxY@BMu%%EmQ( zhg}>l-x`Fg%4zeD8ErcFK)(P2K>feWu)k*JE!8s{)7#=9>V3BeptS>@34B}9!!+asop!eOX}I0a93)5J46CMaA4g4e`zodj7U=x2+!DZixy5 z;D9FYcH+hEB4^HV$a_gOc|yoVL2vvVA5vb@%zbDXz6tugjR@SsV}PImmk6Vt;%W^R zk&YqItOvGu!c0pjExGTOs{|yLg>#;<)0#0<*xyhg(!ip->qm%Ba&TqZEi1Dgtcij{ zgiuv_VL4I34kzMcva8~GE`Ly^iyT`05NRdD*fRulEmf*yyAUFxn!Oa?}?}@4XTZFNe8n&-*??{+VA4@(Z5f9N{c3 zQjs7Mre|TX92)_OlYHFD)2G_62nKP?po6=BABm^&Y>PfRO3ShB65pcqDMxCP2+nAg zI$IcT!n}Cl`rFkUcZPyj49T(_@d}%Vy1`vMpJ41{c&!oG|H5Cmo3V!UR(8;3Qwae% z^jeQ?lqI8j8UU-OPa!YYS`sNL#zXw^>-fdGvq7`XuFZi6b5xL=E`yEFIMto6vKH_S zBE?LZFlr1ZIWw_R>(hC#laWpT@}P6;Kwm|#POHh#*e1B%ou%Wv!Z;W2=D65>6;hDonuyJ^k9 z``e-2Q0{)$o;JZfQ0OV5mk>KJf5M}%)Fzh`xf~DuVY7QS!#`YnGK)gKi^LY6F!wnX zo)HIg@O4g*7yF}2x-~!YF1wQ^b$3KJ%O4Md%JYVfUa;_-ZRKGPR+OZnZQWoGXaM&V zuGnPvkRzfVOtobxUGVGPg3&;LkpLj_%ZM}^T8uTqBd6d$*fI{Z5wMtp@iyC?JOuW;x@9hMj8~oUK2$}OOG9Lh%)2Se) z^J+$lECF0T-X|E3Wrhca^~YYRAyvduG;*q<*6~$(SVAO zZj!CB0TPY(kq#%HxK{nQG~-XroBOK%7VjgCqIa?h*Q>Qv!e%a(Fsx|khHdFMIf{H# z?3GbHZ5!$y|E(7|RB?9#E5+7bi9))emR;pn*N-nE0eid|geGF?T`J;K{*niJ2N0OI zo7HQw9)8kYzIX@Ob$G7Yafuv98Nf}MO&C3Cx*RUE@w=mNk$Ek$p)~%(6a*y+64Mbn z?OCT@b!S*&gHz+)3yG)QF{@36J8xos5q%>q#PPiUAq_9G!FB*ToeS~Y%U4U5@7|>H z{h5|GPNTQf8Tg1y2aX=UqP^vsSmUrlwf7+J6DKFb2_zdn!y$$Ph0y+>vPkCobrV(6 zs+U)f4vz*NRtxAKJ_U8?5nqU$rH54m@6FMqF|jbNDO<+KEW&93LIWS2DUjlgDe$c7 z=U1tN<+=}7PN%;7U2A6*L`92AvSs{9KvO?@VvAqP2lW;`!nhE22*9r@{-?tBtC>Gx zyFvr{e6tGgWCvpP?G`p3;N#78eECTq^8RuYlj29-m_0t=`sM~(F1lP9ZQC6)1BIZ$ zJ@zD!l1=zDHag%|Y1?>;c?N#A!j(>taZr+ebmY6~utdB4u^xw(N3Q-FryDX^Q+grp zZ>SakD2>e#I7hk*ZnyG@RLaP+Z@}hhex)jyhO^ST)Vu!ZZ`vhX2Za`aW1Ktr#m8>8 zG77Z;s?8i6pVP6lPoz%lQ6|@P^urosNpE?(dUu@%>B(c1x)sLk?<+q59@HkmGp;xO=qb~I^G6nBBb;TrA$z+Rd z^+%}M9A^2ak(c~(`xn_32R8zLNdlTp8KDUF-PdJ&GjYCf%KZ9Mw>Nj<=obH`cEAB) zE>htH9IC3GIFaq54B0bS<+D2~*)MpfKEtdN9Ho*+th@)bZoQ4!u3+y=!12H)kboOa ziurf3{qov&>A*9vD*yS4tLZBJq`ruoYCzV(%!vB|JVmtJ>aAVl znB?sg&n`_O&#>=2-69R%U)=OcIG6kt<1Dw{?jAeEU!3W8?b`?A8Ty=U z_G}DiVjOq#>Mu2e1ZNdGB^#*&h#C-?P&VJ;WYs`h^DP)+8H(Qv--P(TSYC6(ql-mq z1v5DpIL2KCUmx^eLMG#?`^3zspbF#x4%H6`O$?4MW)ko^B0>ud0+aOgof^=0RWYOH zRke_#6EmKDb?NPGsowC4vU-cuwvsN^b>Tm>hbYdn7!5q+RTsy0)V)Yj1f_V_&}*^r zNsM&@={!t%m7DI975;dm?P|m8RUVK#WnoGSpkBqBHX4|c;-f9ah^EH%4npL+QwOlP zz!0Iir&)_@NW!HHWeHe3+$807t?7Iv&OT5=RSWzu*`+xEvT?^RwMSy^=D3?v%1u_o zy%&c^c-q9OAB+)|J|4S(zDCgfC>*zP(?rEJngSO)B%ZVs$FEcTmv|v`NZwQrRf*oc zE%qHmE*QDKlkS=b@sA=M+n4}qt`PiiJ9oaWKF#D>5cHt{Z2W7A90u27~= zzC!q6q2U({_>$TmU@gkAz^!4C~!7u&i*NWdddXWm-8$O5Z6)c3jc3I_u9jBa&6cg1q%4um-Uf{ zz~yF?)?vrDj4uGn9XuYaahwF7EawB_{lj^;#44Brp!#asrpC{UA!Knx^8T^J$r}Wb z41{)yA}D#6^E!jquy4F$UOL<}GcxMgTD5qUeI)4v0F&s%4QKYU;60peKwEqKVpz2Q z8+mTI8%m(#6PU5=XYZNkF*~hDs(;p1mxyzli|XTXNiu{gc_MW&ToEJMZq1neR)cFo zcE>h!$>Sz%et9x3u<^Hlx8=b8<6Lnr9d7?Qa{5*MBs43I#+x zH&@!E6tlj!Mbprg{OKegpPA3BsE5y1XQY3^-+-%URn= z<2De}(uI6KD=m95-;nyCC;QCMnS5tOYoWx!fSvBcsW1Y!OLi{7}3P)-FBVS0VkiD^~rNb6S z$OD;&D?!Pr7*EEyK#=E*7Y|$l;;Vk6`GBHRZ_*QV%!iMGblLSE^&iYz+w}VJ^#8vU zQSC3C1jxm(Zu%{np`+_iTqZw1iA6UGYW$D+opBtM-Owqwq4xQlh2Q+0Fqh7-7sxy?{8v7<>_tTUY8Tr&zm72DE z*hRvqVWNdD5#(%#KN??fkHY4(DoI0OWYSm}L1?IYUBOpSmTOS&<56U!Vz^M`y@4&6j*mqApiul{?9(6>&Zy}76^m5I;C0E?{(2Dk-h*V5 zf=p*^#h;ae`F2Uju!G9HYC8t6VhAv^eR64x4;A&R#EFsM=0|)grC9H@i9a44apkWE z3oyj~HMwy16Gj^NEZvRlsaZU2rdEPlNrbt?joZw=Uil9oN=?psGrJuqhVj`BOUyfK zGL?_~u!c1H%HAwDLTL&-hhp$k&jyyXIeHIcG6UEKzXxEZuL$OVo)qDwWUA*ai} zq}=s*c9O@@PRM5&OlsT=EP*PlSC%qKYWpwR|AhkhZi;ziQHE>x zPgve6%-v5uZQFd@g&TN&+%nFB&`=}XjH1b`j4l@&upO; zIW>E}?e>1GJrPD~(uPZ1#FR|_d_yAu>c!nCX$xqIpK75GBN-25+<%pC9tXp{d*t9EoFw{T zM3}^iSnXqsD_tQ3;)RFRRqbD3pgHMgn%3~~f%8~?wV}Sf5VI1tl+)fXkj(Olt;M!O zZ)Bu^CY8Xt+%LYHG+t)O$1dShU$H#LmHD)bS;7dG2ju*PLELI9!&kXQAyTm6CGOcn zM1c#y0FQNm6Ec}z*%(>6Qw-rYk?W4mycG7NXaz;Xzanz#>&1OCvfLyRLw=yqO1Fd1 z8W%0aNczh8Gf5YkBRHZ*4PWw`!5RmJ=R*p2w5;TfpNtvs#A#U4`}3YGPKQ!!E;ZCE z?%h<``DIL5<+-c&aS6LB~CF1P}uk{Y#vj{Rl-w>y5k{=B{3Xmg{SehUF zW5h!CM!bw5N=20sF)g2H+>6pl0lI>#gT)iP4}iv?gB5ugZPvVqr`HIAa-trr0(eRi z)U|2c8xF8!*0~bL_pdV?t!x;hJ)6u(gX*OLIvzb%?vH%oqu+W+bf${zD*0Zqac8CY zR*X5qO8vZ!tbSe7^WKe=do(%urL*>cXqCcys%jC`vzo26ds3jMwhhPv9*8!v9+o6? z6bf?e!<2$W+F+2(kOGd10FN<3sJupcPC1P&e!F5^b)%0rN^eEURH76{6~ zKObo^v)_K52nXaCeebuXPjRM_pNP`)6Ti#MjS04ttIK*g*4v}S43!gHE*6qgtywe& zauUZ;;5x^*82;}ihC>)N{|PT(j>V)2H=b#5#$Ip-10Y`wXL#ByhN{M})!FEDO??Mm z^|hneP_-J1va#pql1EX#05L%x!dhj)>K)nhl}}(-X#MOvoB56YHGfN4q7dKR**sK! zmdhL081&==d6XgT3b5I_*W3H^JWvM^MVr_{@YGZ;onKJmCN}RJ0_j#R09p)nfl7Df zJAQE_AEC)*DmE}hPU^8R*tRW6q9-NpwALJMF%}e*+X>VWUFaGgfWQfAlup(elmz-9 z6$g~yntXyguEDA;)N4td<$1sVucU72e%5$rd_Q!h)>z>5P7QSUfw0!8#nNn$n83&n&eI|}qblfqT5ud%abg@Cx!P31I% z$~L4$7ACe99x9W8TMvToq=B5gRh~mtWerGPd;i+m`f@*o#sh6~%%cJf{k-QBf*VJl zWL&!AOy!2&)z46E7(pj#WW03h;|SKOXNuN!#1OdV-n9tC;_*i#Yy$dwzW7VbWX#xMC%Ym8Yof{8#U9#Ba)t4% zDgWJx@U$=bMW*P(PqJS^B5`mkQa-J$~Mz^AnHt{t^Mt*wG8ERTvAeTfWWgIA^3Q3Z6>tny_9B?JzCO%t{zFgA`jd3IHZ zga6A)-2`_ARG?pcAI9eVQd^>tQDgPOsrXB`bl4hrAN%C>fHMa>bmP_VAp4Ibe6vro z!8GdasKt@^im08C^mYQndx0vj4PA?0{*}42u1xU5iX)#%C1I^g#IO-hh#F&?nkWK| z4oAR3T8;bqa4L7AaO2%4q*3Cm*Wke@jcA!63+92C7-%#B@TB1O*bk5W5{>KWh^2qBRib$iqfq|yY zqb?+RmX@Y7skrl~GaXE3Bi5(D?D+q75+SrIu>yTKJ%M-2+x`)i69M&JLy zTOLyFW?cqc>ZjIj+QczgHr$jka>Wb!3pJk_9@5VE-FUgC#G#;hI*~A&UPGHquvua` znt-frjL!k!tkO*CP+|TaBYNF@xv*T=K|{go`5QAjQY1BRPZNb?spzQ5oTsq)7XnBe z9~0?xeV-Tu`0cEv0wWdFN+noE;Ta)4cKT%K+olMR6S!Je7;eP8JOP!zmbb6kom0eM z?zf8_O8UG^wLg_0lWq-t>q?(FarNj0DMO&^o+__(22uhJomJz2o(qV;LPPlOOGoih zZ8DS)O_W0zWEs45%`dWTV;q`Gn{rNp=8IJO>Jk4#L{_60(R1}$H|k-y$6&e~P52o& z%F_PjkWe#k&;5RyFgY}m+3=Je?wriUtJIcd!ePP2M`7BvGOGw@YT@mmcmZ=|H*t7eVTAjTc}{WoQk&ypnn`K$?>SDGCcK*=2O7B&@OD^HRxNOuX;4 z`Vof%F1At|hr+V@x};F2uPKbdKHCn*kc^FaWUxkdx25kBS6hsIje$E-sx9UFWP~B8 zQbv>lm;B3(*p0%afoO_k@li`FQgo<&>eyFU26=>X24AgywF9G4UXxF!)G=CTKoJN)Jpsf&oRw7d27suxK&jfZ!H_lDFr$zG1y598V ze$kWYC(l)hIm^#Nb*B!D^M*SM^r~%dO`bENQ!t&bI%Cnngu&ZyOQxg^)u|HS9!xdU zGUqIJWn8-iJG>T*&GY@Ke+wYIwq7%d!6)$V%{(++lF4tvt*lB8(hd=xvlCQB4N4~4 z$LR}W6L`4Y$m}1{T$TC_J}&l-BiDA?ahb=P8p-6eadJN4XMQhM&B1si{^L+)&E$E37KUXyt`?0i%5I!GAHD51N# zzR>2<`il6&nXDh6fB=IeszCa#(iGU>VB}raLuoGNb=c1HWdW7eH|H23z(12PREZe0?Nqq( zVL<_6@QO+lu8~g5+Ek|aNNonqV+uZ$ys0SE>Y@2JFgInC6V;g;yJI65=YXewWv61| zTh)(*j@lEC`O6%OEyi(Z!VnaA5O#oKSh^=>YU_r1Cq0TR@5qE_p`WhsV53u>Tyi)C zeUmMTyJ+DZ%a4*|DmtgojDgF?&j6U7xgC^75#V8iwN1m6!uM?Qiu6BYxM5L10IE^L z?IMV8kmVS5yD|^CP*4WGPs0pB-$;dW>RK}~8)Zj!5h96uwR=y#R8^SiNer=Uj^?^YLs8@1JU^yK`FH3YyX~eAt*Q%U?XIW#R;{HuD`uY#Zl*0+z=k!%5s4Z#b*< zyjGXQsxpC-9XdD&e>0ZHF_fFkfIV^^A$h=w&V$g(9sYDXKxKj%Nf}ohmA|ZYGPDzK z|6p2u(qEi-94-7JAb$AG>ZvZ2jrre2Y{uCY-#iij6wn5o)4U!|_=f<7R%kd;0!b3C zSWou5Sp!%Y*BC>P*zfZHVsEbC$bpDLI!s11TO#qOl=Fjv$M9~vmKEPczVlBfnE&n# z8lwSJ_aN_K82%{Y%y+t@_?NTJFT{L*)yFF_1kyKpKTMd$x&qbFXHRRGCiYCvVvFs! zCIgz2?dn{7kkV3dZWUsKlEIwPNJ%|Lj9e0e1Z%A_i!+I=ISPG5!`>WxdsJio*!!4S zx$C~Yt*b}~_f?%L_6(w3RXcl;Lf!?FGYwX4Z6LIh_Zg@v&qkVuf5?qagrPk%HLbHC zxz7;q2|Z9OTY+)Fh7MZK)?-ox^D1+x>caMBdghD~uF|r*SvnZJydmxbs~yvsUIM|3 z9!76EGWpp#Lb@cnKEON5YidY%JMMJNP6Xi_=_D-oV7Sf8FVM8C$#?Y2^7 z)fY=}WDxlN_Ck)yUK(gR24F4+5-hn@fh}CQCr(h>@;viT$njll)%JSc2y6qGXk_O* z?`vN@-Y_UW)>6_NlL(J0#k7DpgoFDQmk9g`dk;h)^^={K=yk6ga4pX~*IBC&3@*_{ zwGIO)F@`chz&kr(eS2XROmMy@B@Zdpf_Mp&^exe^fMmjH3l;8;U)L3CCU^V8e*7)p zbwNhUoFDb8q<|c)Q=B}_vx8Z-gT|atKcqi(zC!^SWMtVidr`7k(V3tqYt<4TfC)d~ z%2#fJK`nr?;zbwg$BmJAPK^JdBcG2qw5xzYnyE(2kLi zZCWNs3m;khmB8CG+eBV%zV?;?p-qGAT|zQ<+470>8nW%C3QL*Lap;7#p&6;g4lUed z!`rt7_qO`|{mMO#cut-J*NQH9&i_v5(1aN}w8%(lp~39f&*T zhrDh)-0U$iT)ZrIF*$iLaQC8wS4d0vZJ=*WZtXA(!WL-;dWktPXSieFnENf!5TXF? z9Uoq6k_QrMUdLmjL(TJJ%ts}7j)U6CjMmXv8}Rlaxj9IoYG{6rDsP7f71AZ1ADprU z19w?isaw-T*=Qg+S0dzS6JL%oD-6^^2S@FEntHPL!La*#qE$ZRH zy_;*t@(cT7*8Zf(D?{xB*7}9%k5t*sdQ(F!wz;cfam&t*lgR^#kdBn&NwG@2CpGe5 z#EQ8a0+M$9dKK>*6GiZm@0Bw<2|5ys+1>llf`yKoD ze!Ai~)@!^7j8e)9#|W$_c~z(2B%WoY7??PH(@R@I5?#Md=lpcsuAGZMdo0=uwO5Dc zS{I1hls+-omr!y^fLN#$R~!1rkK{CM<%t3Yhiw#t?YyR^R;D>ZIf1KeY7qOg3W1+B zeKd7%cFtoDu#SlN99)=&-Xecijf-c-N0NcC`-%EEgb;O0EhTsGXHOF%aA>b|aP}ep zW7goA3rS4mS`R%78p`jrj7z#ktfR4eN@gZaEW>iZ>VR0B+_r&95us_wp4}w_Nc&6? zcR>UwxF|AUbImsV29?gKq_b>JKb#~Y&%M%A$)9|;EW2Q*yz%ytyRd!cQ7X}Z9)n~433Cd}-W5uRjT-eb_<-yiE z4d%!7e6M!!UOmeym0x4Q~d)|01bw^+s@iEIA;vG)HS! z?zh0t6^OrgHPXsaUqn(2H4Up4WPFrAuZdqGX>yjMiyY}SwkuF81nt;1e_I=)#^fL5 zTYiC}i*(rRvAM}3!76_%Y_FTY^m&9~bxYf3lU}3Q-gkJdW-C5Jk4Wx!$yCZ;cac0ENYYItgQwRj$ zv$Vo&F(DuY<9;Ly{rk_>y-Tl8_Q8Y-c^YhrtW<^DR{Kc1$YUB z=`pi;uDuzeYokTas+PHd6+ZXLbi$jS_+bc;2-+9NeA4YS&!QfN%r*QZi$>o9I?z!7 zd#Ekx9tbD`UZ##mxJbi>&by-%$macRWl?GS>*1krWl~2T)2&mGn=y&oFR@hmraWZ+ zbE)-RPZz7@NjOZPGFPjhVFE=2g@=dm$Ec&@Lmg^?G{t584&l<|cNS67xk;@W(9U3E ziS4H$e_43+pE=5Cs;xUfi<7n>f2l)_9wV6`2Ms}v=aTsEA7bZb2bLXdU@eR@Xb}HU zHjRgyL&EyMJezOYmuxIQrN9u3PBa6w}CpZ=Cb1{&~9^uH@aS!sZ&h<1wnpw`L=esKj4I zh^S(vX;e^?p73esf1N|A^x7Zj_rINRm~D81ALtOJINL)&qm1ohu?wezZVU45NlVow ze`I)$qz(u`42r^a+=<#6BkcRfNV9g#+X-)YA+hTU399|EYe~>$GV;WkCP8Hp5^OPM zshL5dL(FyC>D zP&Uh0=E@_aMycK_Tye(Xy_CGT$*5n?M$_a;m7qD|%pL&tH zIjQn4V7mG>C`cAHB2(J(YhJ_I!}(TY=W5s1pFowQ$KUhu+$7{#+R`@_|5bxl;*+u2 zIAE646$s)#s@tRlr!?IYWyTVn7}@A6vKg4@Vm|jL3J-`o(6dXo&TgEuW&K?eqrI2q zg7g}kB|+zW#9IFN)f zei==y1-j?jFRe(%?{bknV#LTjs9J*!Oc-^4dOtpLjn>^^x8>^t6hQ?%*jwNe36&Lm zM7hndtSQHz-uFFW=k)jTL-Sza5EZIQAF1L*MDv8J=<8)|f6U%M(eZUl<8zv;y+tQFJw&JrRvdRtQ!QA_RdI#JIBE*C z6Xm;h;(!nPJ;^tPUEEZQEXH z=wG5>bEJ#VCqXM4VK6DB-ysc|#ON@tdY9XQI}Jnwm!xlNN}mN!K>#U~vQOfi09^IM z8`21EPcV1FDNOhlAd?p$?K^jl{LF~^s423;Kf755P2+99>$_n6U(Qqi!?_2<(w<}- z>8BfdRv3H{loDuV#N?HG1*W=y22?Us<68JoMvX453>4XfVf?rA+J`Nb&%@&7xD*|n z9z8B2Kn$%3y+|oH6^Q)-Pe?*S^nIgGasdYYjvN~-(Z}6b_?lU;Z?XHev!pdLvr0U7 z%>5aLnO+GeuV@e>#5?l=w=KSfy>VW`W@1{gpLGN>8(4{k!1?R7zA&3=_C~E|5=4^?tJU#>caUOxdFhfurQv53F2!{|dD~ zOd8wfQD`3poe3ccNA$L!Ximw*IXt2@kKJ^z%aNbDPM%KYh-k+0HA_G>GDLGK_14t1 zs^G;E_#NhJ223!ZlM$B9&6k-ovJ<41M2}d~fz6-T4PH>dc`S^^25aIp5P8mfG1Lzd zkfzwHWxWLVtioPH>QQwLnx`MiKIqJUo^;6t<>4NP22lA9u!BqfR2)+^Iklq-as%71 z!>%5Q19#GqbSMlE))zrI6K(hG@FNvmqmO+yq{G=olYSon$IFqqATx5^zaoa7;FSS!C~JiCZhp8!T2B?#d=xs2~ET3}uJ|9rl-R zz8@wdVqk!a_HRe1yyIYU1%K_x9-b%@EbI#)?RV zbYWQZe76z%GUfv0H+#z6_rwY8#V@vwM@$9ki;Mc^=1perZ{e=`?Kc*eHvKYu*3O53 z0(YrFy=y#14UhwBDo6Qs|BbS2at#AHDav?(^WG`Y(Kx!ehWk7nRv;_typiGPkYAU4 zC^Sxv`OCF^Xxn$=i~D`-7+nxfm-bxUM5YGSampuGGO?uKphEwlWc2`}S(1Ksz612sNA>4@$jMjsi{Jf@+!p=5R9cD>&9@<)W|? z4xG^K%9vG8F4BXWe>}lSSNDlO`|ss|OWWo|0#{JMS*8}%848rKWHT$IZ1H-=BM=cD zll=@+$!lpT#ZuSjtqBtC7cDMHwc!{i7ZApe5^n1|w86}~UeJ(nz9orDfdFAvHmBh2 z!upcNL)gsbR|R$aueigsdUmvmJh$Y)X>QCs5R?I)FZKcgd@936tw4+wM2M(lB4Tu` z2Amc;L5ix8s|F*`uh))G@OBH$s{&VirqNZtn%x^KwYfuWMHm9;&P*a!gCTT~BEo0U z75S7?@(^W%Yjx)s@LF#tQ-DpcK@wb8%0kXmjFI119sNjDrRHq|9e4d?ZWV+}1VbAM z`kW;wH;M;7>0tKCzsTYTiKH0zS!6zb6AS{z{xLX)N!`6xGG*Wto=M1^73;iYj1zQ^qJ`LhU)L9+$5rm_Qzp?x2s4xH0$m$c|)NWbJ;{Muu?-q#nB zdgG+?=4!(o(O-Wh+C(d3G)ccFN2v(p9&;aqj8Huh)~))WF!`fy6^!=9p9>gL0so|3 z8#b@kHh9@XC)D_S<6_5`-jH6{#aO3y1^;y{_LwGWa`+Tt{BUK@yB-J}1S=nDtq;%v zfIMm4M__EY>T2v5^=$MQmeY~w_|FD1-;lOgU=*~SdEU*z)dmO(EpzAD5N}y8t)m7AyvxDF-x-}~u4 zSl+`4d-r%=rXVHITJ#->@|7jUKyD&-rQ6y2WN_jHisZ}pSJoy6181t&Xiv&BL5lPg z3R>z2@T&3QCA%G+Waq}Vosu%7#`MlAkLwGaiF21cyP!#Fz;t9)m!@zm2CuLi>(QV9 zNda6R@w4Kf6=Pp!Y?Biu(wh~BMu`QTWSLz4$=0yN+H;wC>8p=HoCQSz!2wn zBe&{;tVN@gy6?Hu`sA$n-@9kbcj?WsklkAAMd}EG$FX8epZ(IxvQ8BYep*VUdM7p- z*pb5sd(uK4!;6@G#b6gJoZtv*ojd7lLO2luiS@~TxfdvK4IFAa@3rs0mFcdc01>L+ zBSuta$XDayMv{hPfg0wj$P-tIPsHy`{azB*9vuvo1iYw?jp<3k1jksgN#*gRYe~fs z%6z%@RNynEU}1CW;^fJQ)3rYa9G3fsA5X?5_j{J(2AxG4LZ8!AL0c6_6&p;zrI}%} z-OWx~=^F1nH4DS`PNep{&NO8zHQsg{A4)_<wwDgV#@n_JG&)fn3Qa~x)+8}y~c2%#H$cu$;*YFcdjKbD#!-<1*h;CC;yIykM6a-& zUG)!gCix8cKs=qUfIwJC|Ka2A+)-u3&nk`$k@@c)*_10Z$$x~-UPft&XE)t?2*#S> z6|1We#UB#0w#H}3(z_XLp4}+`i02Y9x(vzOF&m&R`fDD@`vrHpn7Qm zJDh;=nb$Rh?1^#eRe0pOdBCqfnhf`?h*i&cnCq(t$)a^MpF#kmNrFh7+u{Kv8xegJ zY%>*OYad(7B!0JhUEKWJfikvGaw}(UT@ms%0zy#${mlK`>bkWN;YNkG3~ITSe!Pgi7cYeR4Z#Mv*#Z0&~Fk1sUgQeBE*PF6u^DJLL>Gn z)$4D6WtelQQAt2wNQfIyjyN%mY$Z30Ru7K{wDNW0F`u~4Z&tH0fm^v%1o9uewA~c! zc~>6m-aSn%!FO6Z|6i2x<{QB6X)zS+8kos4WC{1tncV>^4*@anmBa$V{IYYBFQbD; zv2$+>*IbJ3k)jPtaw9$4$i{Lamo-M~w`Uh@ukpM&abT8XaO!90I)7);s739m&=2gx z{x{pF(a}S4{-u;uoa~~j-x;-QT0;Q**yVNk)%K-12Gwiv9wc@8ttQ*}Pb%CRMHKT> zT`L{YwH^rZkoo`ekEXQ_(6aKE2A1qmeEff^i68?OjePYiG+;6NL!KK@PN(tnia$0S zz%zotj{Wi!xGC-IJmQ@tBu5(@*e=9wxl{k5d1swWC-aXS29`UDv2GmcykN zcvA(@@AVF=xAkJV$exv3lwU z12br)kMZ*yjaE4<4wk~#BA-?If6Tce?CbCqwwb|lqORTH4C%Nw7Gqe0@!14)HB0w{ z2=W5vzF;;2c^CJcsj7&e__zOKx9znenw30A&6DPj8tDN(Fyfy$CTc^W%EnH>8(45B z^RBE6$aQdsyBVH(1?d<%Ehl~?$cM6u4WVl2DQ;}h?Se1_+1p7^Z6XC2AXMop%^k{k z_Dg-(<{->+?aT!3T>pX+qa@^w{BfiCK^;TY>$#TI^6(VMy<4sZ5)vV+Y@@%cS4_Zf zmzYWkZ8uPZUS*HybWl6D`Ha&F=3XCN7BxMCoaTulr}M;9+^JA+4Z&tSojQIvzOX7< zJgD+F?~|F3v?|6+>a(Z#uK=gy*l*w>#rG1U)BxDA7_J)>WF;NEQ8MK zM(!(ovT8;0h0SSm`r|M$0osS`sg=Kx8TWEiMnNm%jWa%%U=#5HK+~?J&abv>YKH@M zGJC_ChzmG~*a%<_32G2ZwQ5RlV95xlm;lyHKeR0e(M@>n08yqp>no24 zWg+=Df@u!WB~OSw%qz$yIP8R~u}IHNq3h#fzfmG$SOhA;v@f?&hm$VI#YJ!fn4IR1 zRj6ECq;`B0ik=PcN4~(K65sGiL&e5&zlV`{b3@u%W5^{`!*VuvHFE>5_uE7%;B{{R zb#G@PD>zD>I6L|G+MrydSmHWdJ$xfuY(%&?v33#bo-I@;2EY!t|HwAIdBl znKDAi&#GFknBe2bWWRPA;g0-6moz0ynupX2W_27z^5#{$0qX&nnt_rKkcPHwOfQ`V zEPt+(dNw??x?e8T6Mq}L*Z8`Mz@n>Ni>(j|`Q!{y%22=?pp}*k?aL+!S-FC4|HKFw zvT-%#v;PfNdo26v@B-8nmLwqmaB_uL2ioaG`4{^ca zN*1cDUA1ktAybLL`{bI%YCP z)`@3;6J)}$8Z3!bniLjN#(atQnJ02e^P+@S$@u;!Wo@mqvndBXmia@$5ZG#n7TUFa z?7v@Edlv-sveg`2g$f(go9e-4O?Q_h+;s^9zHm5i={v|!P-n4I%9RJ+nkR^r8m0c~QU$R8^5+ zK1&4|_n^0+c};4!I#o-3E*=GOf>65k%u1xa7r5DQx?Ti&Sa(Oy3y!GOTEN#v&i>yI zwZ28I5WI5&HRxP7EJ-zd^r|@9RR7e>ylTeSiA4A4TwC-*F1kd<@?42GP6Bo~&3=1L zcW>eN2pbGZ1j4Z^94;f|gaq`R_J#wkEtMu%BlY`T{tmd zM1UfqTq$3uoz?0C_M=Z%VL2_~$CZbUAj4a~H~u3~Em7#S_DD%%H@bE+k6g-83J!${ z>%@_TN{@BwC{*bd_*eEWBZDxg3%kDw=G^@=HL0THM)Lj|=m}ur5{4E1@SrRVT;=(m zI$HpfEP=u8l$I$xjU}v3GWp^gB~=*6YvrWRE~W$hcMT|Grs#l}GeK|Cadd!?v!t12 zU zW>z8haa6`w6I_C_E>CqdE{|M z3~KFHT6Xu5)%ZhgZbGu`+c~sNolwx7Uv*UP$+7A#Ttls^1HCGt>}Wri<(?u2#_-=H zNbTZ&R-y{J^7udd7Ko1EvRhG8hlYo{(^%Q*L;KC9`?c7LZ2aP2ZqElE1t*YIEW73H zZBnlkkpAal=`;}695%Jo>f14w1`fc{lk)G>Om;sXTB)_0RB>~}N5dId9?tddBYm7L z4Y$-rstUj2gv7u16nGiK-Pdt-z+E&D#-c)@7p+1Quq)La;rL+$1-eSzIAM)tq?D z=)|+zJs;QgvqKR&TwuNXV9FR|kRY$B=5cPt^X$-9Z0+_*CQ@+_hxok_&tw^%LViOn ztL%)Njf~~BniU?%a9FFvd|q0~=pk)h!_TvizYO?RHmmZhAIbYOm$qJ0W4Or6w?k=usLn&MlCFaGpv#aBx~`Al;}wLxWJDB3*xqjCEfr7ZTUL&Q^8;Pb zE7uR+K=Gt0nctWdlaH%w2;FF#8!>OI(FiX%{Q&PmNBIPeu3Ud(KR7L*Qb2*C$GFMu=gu6PZ z*R&Xpa=)TYxC>x|E(R^)1b8t_p+&FJDt>(~Sq~&eut#_U8gFs#QqSpzM~UoM&WX5*ZjC^OTm82a&VW`a@KZZqnoULBP(z5GM&6a%Hu^hf1-j z6o=VA8pi&Mv8#)WzgUlt4F(`4`q`VW;DeoayAMEnt8;Fw=3=e8tBzW4yCPT95Mwf@ zlnCTSDkV3U7_R7E4;;ebCyuDoqaO@s98|7|BQ#iUM~C}G63W(NW;x`a0D|vn|8HNr z38)6iaS`Lk)@=L=f&~BzZigOS7e3w^b_)t=j02EkWr;Of*-|~1DYV5{8i`D$<|>_V z{PVFBO6?5Bp;=7sP}C2Z0J3v*4&Ezi;uZSGDlrz03^H~uNpcnLBr{BC3ShSMLT_4l z3HlwKrlscMtuq_641t*95TmuX5xLx{EQ)ieZppMTJ`Yue(iOIP%C>h}g4WCc+oh*f zD*mBt`RJDpqHnXZ+1(M1o)(Hvbqu2Q!^21OYVE*Q{(j0puQ+ zqc>*QYy`MsL+`21;jdK=RLX%nNM;%w=C3hCC}mVSW}c8bZY)QK(V}V z_IM`afe2-!3C1kNVgjPMV~jSuIWSH#T343JFl% zD$Ei71kSq$UphWsDpT-4Ibn{>>MflZnRaj65J~Drl)W=zp;^$~=shbLIQSMK^?Ebe z`gd|(272b8H%Y zG%GtT8dyfW9|Q7UvWVoOd>(GvmG`0U>tds##`lWeE`0_EF>=z}WtuKr)3oG?55qDNl(;EJ%r^ivd z#VZPAJ$^{ZbD|!A$*iyhJ1sekEbn1-ZLTrjPiAan$)*&+@`uzq2zkzS(_+U`lQeFd z^_yMt?Bd#^&F~xE!K!%1FP7Tqdh%~i0tG_g5VjRzFyNXmKB*mBQ#qUz zFb-8oq3aSOWxAX4vBY_Sd&dM`*M@v7TwQ@5@9lr3 zYSOqtL1aGqOu$utLng{2Kn_Eguq9S#NH!`5K4Wp_u0`uUyPQHjI*KQ_7Z4*P!!gXEmVm3*0XpO&f+cINW$ha_^k@+7Zr%qb-^xz2{=P%GE-jjOdPE)8 z2f1E{JDVFRv8X@|@iP5~F-*>RCKto_iP0m8pxu@Rl)!_HyYX|Vl3xJg&u?$b9q{!s&q7 z4Y&L~cSxjVon{DQ!=Bo4{OmBqtP8Cs`t@4XN63*q{O92vpC^|8H#+R!wFCQPi9d%UW?LfZqDqR_{1mfyAyUI!1pz<`|FFI*4meR#0>UuWR3al4p;brPxXB0C2BuBo9HauHNiEdPmcUyw9sbP%)-xxck|4j)Slu=VF zu|g$eiHwXslvOmn)N?*{Kjw3*4&oxx+2U8D@wamJcmFS%4!X}O}mf8eB6;;BgFUKAKRw3+B>HHU+8$5 zmzxC+ZRAcBUCYxI!3hv>+jFZoavs)yG)5SFH4F~a}*Xak$%CpsQt*5dnq?2xzXpctDg~}kC!J? ziqq*^GF&YE{$NTYj&?K#N|Fod<}Zo z{axgsz|+D%Tb5~txHqK=ry)L4af}N|_~J;XU`0SN=3F@Z*@+2!Ny0rfNMqN=(zCeS zW1kL`H{U_;o_IXrKw+o`h8q3VvA;CV*F`LKO7EpfyP2F0eUIB|*mPp~06R|M3IwJc z&7-U84ed0#dPx!37#wH06i=C>0q6H>qGmXtdmampC>H7Zka< z{T#kKy-Xz2{`E?)xnR%S#325(&Y`+}xxp2fEE;F`>mNUC+$0Q^nKKmV2#%QL&B?h5 zplpq$+Hn7szMLFJu-IiU+i z4jp8Z5=giw{Oe;J#Pw}45rawXQ03ktS5LWLeZU7nfbcG#?X!=UD%Izyi!2be=A0|q zrEopPIFggUME2Y7`!*DAvsPyZ@|%FaJ9on5lmNF9Q}QG$&xe7qON(1@*1F^j^#0%3 zxW+-0rZBbp#{WP%etqf)D2nHCwI1AKwwh0)x37kuyJzN;9U;`(k?3Z zpnGH}f8ZQt>QT+^;PJ+S(pZp-Xz^Sb=dZK@7kjAyE_}@9EyJhV#sZbgwPuh>bn*nB z+3ptPX{e3j3FR&_1cf61`ZE#wg!fA*F1-y0>7;mK;ka&JVJoP4=zF2Al{B!lDZ{2~ zh&^cJrRy%p>K(AvKDXj zH$??!ipG6Vf4btl$Lqg%jO+A_Ebd~-Zj`QEMAqdP_lgA~aymhg0X?Ly=)!Wf!l$N} z58Rv`Cr@MM`II^{da&T~$mC$n-8LPL`OXw@U`zkht{ML;7*Z3Al$^hV`3Oo~D1b9CfP(U{Z=13@amqeuJl3p?JG>Ay|cHUfJC!Oky6%GUVL z_6{b1q29UUZuyl;qD1D{$d%&I5cGG~mWAJ`R0%^eUnfPCP@L)$72GfTKFsA;?5Ckx z`hCd#(tqqi7g4I9Tj<3hyvKD_wB~PW7}JqQi9LfGHyxXq#0hs6B33O}c4auZB+0yh zrqlPb28si6VXy$*5~m*63PIh!I5HhNjDHKRBErF8&X4QkbfuBr7!KV8!YenvIUqLb z3m!kEp7i3_xl~9+`>q|VLV~ot{?=h zKoxM5Uy|+1Dic{Y&iQzKChgMQ+{A1BamVcR2V4%&_*QWJUkz;^^hy(sIY!L7Xx3X6 z3SsUOdEGnJyC=%c59`TXScOSXeUHc(?=^LT5Q zm5^Ors#yS|MO|=HnYgb-hy@tXObZ0NDP1P*$J0QyKmUxF;}0BzI-wcg>!{xu5oY)6YdTr zn!!gJ2B4%@I8p%C8OA3itw6`p){jAe08TR0bJWp4YcMTA0?gd-;jtoNU`$+l%3|1C z$fM+gS(4X~_2lE{0-s}1q!x;2)K=XFST0mBQsj(#@iehcG%LHycX;~~d$Bfn?TR4l z?JuX93#sW6ADKrDTCQq^5iePL?JK*=wHv<`+UR|b2&*UZLVej%F(0>?BD2xZbk>{OUQ9cCMB348 z_Fy`zXlR(Y*RF|Af{Sv_N#doMrOjG966g>EjQ`cv5%8Bq^e5}-Ls1zH4=$-TOhGOl zqfCikYT@9gQ2M8$C6i7o6Sihn5rk9iP+r%TYul3|+;OQ+-!wR~nE^#7QCnE!01!@4 z>r4x~`8psL@00I>whnifl;1-frzJa8tM?50#A#mfG0)+)0|HPdx`(ZUAkegHybZr z%gWMEu~sr~bf7f@NFs76t zIMlh&%t$F@0FI4Q#iu=x>b0GPGZ~lGCn+%JX9kvk+QiGcJ0I|>kqD(qITn{Hum)=| zlZ5$h`_3bShMm(QV|hTvj8*sY1=BF`foA`nq%Z*Jduk}t z(!gcsl2a!5tvZV>$UI~8aV81LHJo6zx;2(PT2RGP{{uI2|ku#L@?BgF% z8q|$kE6GuC9M~98sx3`JyZnT!rI`5kY!GiXXXn)6Tt`82s};X+VncLlC}?DO*58!v z(v(sH29DI2X7scm3d`(4f+>kAt%un<=D-`?n|w{-WYrplj@*~Jd{d0JVfGOyGVNj$ zQA1Eskf@IY9f!{D4xzzP`CPs|-Y$kBoz1xDwSj_DRC?4JpLbC?LlN8DtcsGfpGeI+ z0`J+S9yXw=p#(Qbqb*B7nl@B6wH%pPR;bzUO1i*$KHYY8h&tKjuIEq&XGnJ3eU*38 zYJ-!sKbr|R0`~<4-H(K}Y{`la)wR}#PO-(WhK-tx`lD{aGx@)!&-19#a?+keDRjPJ zu=z|@+k2Xj;=61{kj8IguI?4EFwr%MY@X(py;AmjrRxk@W=IgvSRk%1VSe6;&5vqBL?^T7>;w*B;G z<+8|U;3@C%vCPA4_hGgF$~lg3LJ&WI_ZwD9cW#;j5c`mx+_-k1W!GnIDQ2UW%dq7$ zL`i}OyIbRP*{+N9c6CJYpOM80_($|jrp*^K)Tn%U^K`?g9NVCCWXOUw#?dUobX4+7 zsAWDg%b(~Fq~FdkhD$}dM>l9mAJ|5NY&i!Y`6=J9a%diFhxEksF*Dce1^wCWKMUs@ z4;E9N>}y)pG1RVry7K#g7Gan6wpPv@O}d|oN3g1*2<3->F$H7g^dcq!Ub z;!j>UVZnqj@ps-bJwGn}52j_kYuT-yZXmK)U9U?*W2c(H-EWW?^MG_^K(@e@Yd?W_ zOM*o+1Bt%L?W&Jm@KwpSG9%u6{$!G`*K-t4gg8F*Bk4U8KsuOQQpshRnZPVOh|Aqr zr(~km%qQAd@sXS0P{E#v#Tm{r?v~J*HP^C^4_a-DhDs#a@iXz!tFkVsL%nLH*t@%= z3knAEPhDaOxxU8z>Ju*vO)nkF-7p&)oFqGo6&jptMr51)YRi!SFknUW;i7NhPa&}H5sg}P%yu6){M=}L+4T~If?A8t`$#>h{XTMUug+Avv^ z>Cl>q!+NiA&71b+6KVWytXlJ{`3+d(t)M+QWVOoqmL;`TNhSgF0GgGSs=t>|r#G$p zAG~9RpbhG@j1$(-W)m{p{z~J@ilBSd(afikThqpN@RfoS)7AL3S~MlVGA?4 z)Og<{Xxe~0Z4-Gm5alFKf?PHWR)}_DkOI1Zh!0=YTtqQSTal$Eg-9TBx~^`^g2b7l z+TO8l90!hO^?ZL(wgKCeqynz*xSOmm&JO{0XmP0TMoVgQctp`|SI|PPq=ZvU zHj_g5MlFus()%N|qWb9@{grbd$+X<$-avrI!vh*quCx%df_gM~x(7p0BdtJkI+C*h zT$Mhshfn#H*iXUEH@u1O^o2sXVvpM-ZjYHYm!y4A5nCFVn!)g$=cep%;ddhb^(r7C zTpZ&QRqpV%$9cpo47&Nvq|PyYC%fg4K)DazX3&h`2LMg6;^{cpy=1@Rkb$t8+$Z$% zU>;)ZqQM+!R`U!VI{2mip+^Mfk}^|FEW1%0a!5aB_DI4KqLr$&{3@_T-lIVEIjLJ? zEkd8MjOjmxcK!w%eUxYOa(ADLb;lY;T6Nc*;U%CJYDe^RO5&b*wHl3?J;SUwBm$_8 zi+fYybrXM1z%O*I!i%AKKpneMuIP*lGQ{AZs|&(5p7C~;q?NQjI+0R7RE~r~9z!WX zMlg&|OJt5BBYJbXa-P0~fHsW`EeQ+uNmffKNwC=>wL-I#V892pZS3|(S_!~H^D2&miIq_;@zB542L`mg3a9N-kc+l>0n06v zX&0(cGE!T~H(VZFI@t9sYm;mXM~Yc|SO>9Hzm?^x@F)@>4yq#XpnUF@16;N70QCD- za_T50YXlVWQYK zj%xj6AM5oHZT6QNmJgO<-`Dy_D|%pqsH@d;H4P|DeJZC=zVPZ_c6nHcAbG_Gk|%Lp zAz7ueW?cNdygEx5LrG(+?2?rn*PUtYE}E~Xm)+|3VrAVuCJ*TYh!M!VUZ>1by{H9`3w(L(H$lyZQ0=SkG)<9#v)5HlH??`3dD+OeM>G>Wm@vF%sks{h9R1VZk$q!C zLTbiiO|IK7pD*6(1t_QDg|coFMc)YzJrp+~I%%V0Zi_8InB<7qSAhCq8@l(cC-0r2 z#tly%-f->sKc;J5G!OK1FNLmpNY2J+N}9GzWt!y@-k9nD#UE~@AKGddt`_wyxBTx4 zVpQm|%qF}t>7c8fTZtb?cE~d~u>I!FuDFKXH=oOYi);*AL1;D}TIB8l>$Fa;%fqL< z2cPpB>cJ~{Dn8F4ppM7z*+sh9KvVgdhms2K{jne54AiAmZzkTCpGOm#DI^Ti-l)81 zBTAQ|CGKlxf?0vg2ixzCmv>!?u};_u(w7ca(MVI$n;AI8Qaa^TXQ)Iq(W3J~cz1xQ zT${@Sz;Yd~l{4WL(}qYt1;v67!YRz28OGX>@$>5!uOX^|QF{~Ck_p=zOM?D!sV`CU zVrtj|RF-Ny%6*OMX^V9UTCq0gP&s1ypE3Qe7MPm(<5;P>*fJiEz74jXD_uQaehl}D zP1!hQBinOhhs zR$F5;ULH@91jjL;JK2*k3iaE&pP2uf700*2q zjrV2D@NC^`E{ms{bG4!2+XgdPkcP>ZpHuv`7Umgl2-_a*Wad7c6Yi|2D{_gp0LSJe zQXP|h9bLOH`oPIMz+!3Tw~H0D`ZRHvQ~IM8l?^t?-M{yJiI?G@S9{>uA*Gzk70&NI zyzoET2{dZe6StW|lD6@EpMgT?ir841Vj0TZeyO9`H4F=|{;3Y|SvfNufnz`9+k?G^ z;@eKAntELu;@`|Jzhtr0=r>h20NSRm)cQT-JJoS^5xf`dE~m+%)FknXRt3B2lLw|4 z0-hM=_@4DUr>6Oh7ISo|;#FKN`*qZr)dl;YdU1{`I1zROJQ(XFxvk5__y>Ppw97{({$Xt|U0{9H%G? zMA=?PEq#Wfk0OskUG)J=c&b3Su$jfqYcAKw;6bS7N6MO38l6jmnuDTv)K5JQqwA^Lu3%&ZdD8=E* z)0MF*`{N;HXde|OKzN;x>NK+Z#Dr^33f*|}I79oI^|@3`{6KQ>AFk(?VrB)8ISj=> zNvO%k?9O7+Od4D|1SRp!he#dr>)@nn#aEkhz)>lY4UGR;`5oNxwYj8K6CBH#wtQ2u zq^*)WnDHH!GVX#lFuS5kX8EOjf3e1sbEL_m`{HH{D0MVQB$%i`nrJgwngku((Pu@5 zV4d30hCsC1Rk`~Q)oZTR=hCPB(8XFg69dVy^)WNwG%ysi^}Q;rX;d)&`vL{TIs(`+ z#JlaJ=a4xzA)G?FeS0cR1*npKX}bV#-q=B>8MT`cSj*Gjfi~3z@hQrjkQ*E`;j`Ds zZS6MnSM}wO5C!4YZ<2Mv`3Vf?2DPx|o{St>)Z5pZ;EAq%neb$)q*SI01SI0CBrynA{CvKyhQpeQ-yWjT<*cK+ z6AUagp-LunH^Z-u1WhJ^{~M&2Ci%r!k{^M1M7!N(E*O;E)S)V_$~$U}bCBzfjLXU{ zIi%TtFwk(59xlPAeHeW9G(W!A+ml%wioJSSb zBKsxuEo6pji(h^8@VaDa)_R|k}X0^TCBJ~*%+FPGvU0;eX`|88@kj?g8Z z?=E2KwvJJ(j>Z!8CbBR+{^WN7s)dgP@FFvI&Xz-c^x?k-gD)Nl4r#ZR7xdGtzYU2@ zxUXs&Ew+`*br1LyvglDa5@Ph>JzDPJr0M@+N)+@5W_>$?NgIXFO*@1-rvYXXly~sE z3a0-z9{sc+e8!>Kj5DP`sHH?O8}Dl26}9-#D+towrpUq|Bfowtn^j^2^yu@apJPP- zH-8JMw@qU^ux_h0T^e~+WQGph_HR5lWO0OH1l&s2|1#BK&@_2KE5Y4&Gydz_u88F| z)_j?+HzD_MCONyb3@L>&_8wVB3@vBg%`%CZEF9XEYYMy>RDPeiP9=9#0u*6az^o9c zy%H7l{@Mx9o3`AEh8ifS1GT~a9RYqRYe8|8M0CI?>(Q%vKY%1xK%uP?$;{bLSbKnU z)l(aZG5JeY@F05Xlx#r_mUiKTY~FmzlX10H#1>&rv^DkTGpj za6_F~PEvnC+ELtpq&(W?bxJ_AKuXw41?khC^_JwgPNl@KpbL;#ktyy6rq|%9TpJWo zq7FL_`9{v+lHI81286m>fe#=+?Q_@%{=+q#>`g?DQBA$ZwUzy@~FRL@*Sg?p|$`2sP*7-~HhC3lL)pXHc2hx7W!L(2sp}W7cYs z(~Uo&%`ld2ioU;Ud5UK^6htyik-s(ScyP&f=|X!GqFsEQOVyC=-AC*e%l_EC zRhlbNFN4WqR}|Y&@Onh)kWe#fPM@x!#&{azPOlJeh2y9Sr`DzX5PukSJA(lK!xOwN z{sS??<$ulip*bif5PSZE9EfGSKr>+|{4A{U!Jre<*@A%M+94xr0<(>^I9+?tK2Bv3pGC|DuX`%Go&7=@wUFu?Ha2h$Dq2oC^36BV#)k+zN_4>Z-r>CCS36g?Vxsqx#T9thZW!ZJ; zQKc971gx>Mrr}G-vS*G2QTm6~G`eOmIIziJLHr^YD_L(00i#zZl-4a-OZjBWSDI!A zHItyw$%Ckfg6r^u1Q-VxK8P@wTg3ZmJEd1TU2bhnjWJ_mEDN#b$~L|@O#{p36b^D# zlv3w`#0lwNbEIXKF#eB=-;MvZg=V+7!^U}cNE77M=x@)?eVC^K7 zAwv<+7+CLFapaF@YE_$Jy9J-=y0p-g3h~%1>zY5VDfz!&;oLR3(P1Ge~h= zcq|?{faeCkjbC5KQj-6IjK){na0eb`A*akppKMwFtls@?#;K{YjPmG*1b#9f?6cM2 z=01!cRhm|6%Mza2suP-^m=g@#Sa1-Tya?G3;)HYad>RgMyw8~(yd(xCbN!t-&!f{( z#UTE_f2=QO*ocQr3JL+$UF!$Lzy+aLpeolk_8VdjLynd*+2G+o2k@yiY~Ic)McM8z z^)}QSg?a5h?v|eV&Q44FeIU9(B<=n~!Pjv@4bd}gB5hpM>s!kdMi^4Dtoetr7yY|F z0RQ{8ZilD^NL!{c!um}d0%^9*p_uAJjPM8BJ(t+LZ3+o*J&xrf|CPE34@3T{$d(f_ z?E8JV)I6E!`Y`^42R^fec|68JUL;#v2(e-cYrF38mg=(Y0gV+>Nq#0sc5c1jt)vhL zaZNZrYJ5V!^wW2YQRtbx1i~*~P8;;_lQD8GEEb4gZ3r5nY?%@)l;__QLzvp_`pULkS8m@k>tX9RSrHdgqc;9&8G7Iz=C@{ByNo- z;m>6nTQeFV>}rExNRcF3TRu5GqHC$cUR|(Qh6x)lW%xOQTvQ6s7OPBNvR$S*FDJ(k z)l8C}XE(9#G2~`m0(|Itx@XOV+s8xgwX@8Eh0*N>r|h-0A-j@LzzW{^mVlBkcB%Z9 zWpes?Oc{xMSIW1>_uaPpy-cAzU2C@?=;6)G&|%(g6-~swJ?~Y|9dz*r_)7^Xgsh7S zdv+4bIVG-;dMMmtr^T~_o)0Q&1@eC}5xqVL-blmvs2vpW(YbjaMgygbjO7gnrUSWG z60s1Ie*zr%avV|DYLcRL-VJK~iNHL0(649SroS5_3zrD!{~+Sm8G)ZCg2_%Cz(Jd2 zS)9rN8dF8f_RzQ7=aU%AuK21f;K_tC3oyCC>^tS<7qkmxCh4vbB7z|Oz4CD+o~jbh z5^(qzA5hPFZeYeufSp2m0~?Cw=KKQKBIeRp0a&(FqpWgU*e2)el?2oA#f3lv;v2V0V(zA$X~QmQ@VG^uUmk| zw<5P4Jm8 zV79=&7Qq`t1?!gXcqE(EmV?(-ngR43(-9y}pFFtE+G3v#9!3FydRk5Y0;-_HzB18c zZV?^E@jqzKXiV!TL$C0ew|(2CiwB=>(wVNd8U>x2vm|ID}!@KWPCa- zxJ8qk^04;O(Q;OMkZlVr3lR|a_bw6;;dxr0aEBqip{e3Pw1YbQjv}d!y=oi56N0?fpk0sy`nx zb`1o4g`g^xYV}4L$o{P;)(VH=znL*{i_>JPu7yF-X%1raV`Cj>8|uB9baG7q9#di} zgbd01jJH91s`6uS$gz=n|0I*j5J&0OyGoL{G}EpTG}UtR{@;fxh*vMXRFmylBTlup z{U4`4F$f7$FjRy zXEtGZ=5WHZ9HXg(flIvqRE#XS;zcP8nClAee1wf+mLtl8A?)^qu+htYFgKk$j6Q$C z!XYIhzS-QcuW$jhJTEi2D&u4&TR{VF)>Mq~wF8UN1FiKHO5WE&Gt}J=yfyG%qIkWz zp**3J1fD|$&v0rm?47h+$_cviC*|Az8w?Xz97)!E<+dqH{~Fc4bM8dBq&ht`aNB~+ z$uY*%82{m%JW0N`Fm)o?ggoM{Ip+*aOFYlVq4;oV#hm;dE;Mm&h(X`GHjV zv;Y(cGRse=y!0ztN*u#a6ul4;rYs+r1>G1scRjbLb`29Dh<-oQ#r)QGe5X&l_wubA zw_+d&f!F&izuJ{AF3?W~0*&8<5ezpy>+KRp>H;fdm)CO2UJP)vJ6<_$g83F58?-5$9dpxh_rB;vmPBO=FuRvF zdj(22DP#OS71xWK`sVer&AKHqecH$5pxL?AtW~hV_{k4}ob2$PSDd0rhSk&oYf>yZ z#}K9AS6`Ki#xGz$%pW|fR-+Z)EE@`S5lV<(MdK*zpS>*1g1c1GEY zv#!!Dqq*eBF6bcT-V0ec{!CFaLWS(Zl+ZNdL|-h%)t_62i<#^E0c=Twaq^;@1XP2V z?|-W+$?*N4c3)Mp1RdIrOioAJV}NY5%!in9xFk?quRpZ4cEgio*rD&_imPX7ih%vV zOLA0Rs8?{0^bJ4_$fuRJ$y$knh42^@o=d!@^ZrJy)jwOd7_eF~0(E(SNbIOF$)@^E z9JNVgh^tv^%Ogq6UmYN<=61S0#s4hNk0o)@C}sCw@pKna)riI8I%d>RhWT<~e*@6A zqy0`sizbJUTO__-TKtY}{3=tv9uIX4o8>>+lav zrMxJ!m(rG6p`qc-8^9=e*6}H2gp^?=6dB|Kw!$YPiofzmIxPu$bo5BiW|`hxY$LLd z%4PSIu<)MV;v+_%gq|s3>6TiCfe>NceNI2jg)-T1k2I6}9_m>Z2Zbw7zjjg3Dp0(o zOZ^L+M+h#(bKIBneYwSR(+qJtl0WfZzXc>s(L-LV zWseKr0E#;1`2e$jdQPc;U>%S_1{b^`%6i`TSt3GAB>9V!`~BxXexw((?dv;1J(jXJ zVm#5!vTrknH*IhF-wrxAIc_0xEp~E ziRoN9F-4!OuboWh z?+NN?qx>9Z`e3v}+E?9QFpFs?)!CcxNH!%XEk=hKZDsAh9<)6TH&*qfAsDu_O$_QP z^+C(3Y;j{i(q_vWmmPJbP`c>T!|(qlSX(IJMe$cz9RI=Q&O0ZfWxH%#HQez59N?-? zx+;)^-lRnKD~7d)=iTN;#=BFwMFpnfX@tuadRA&SmpY*yR&_Sp*;klMN#05nCyly5 zYE>lqonc0X58orc6M4am!&Tmx!axyKQ*}ihe+4Z27rIlD#@opTFW}k8z$`Sb&czlz zY=%H>$EB15i5$yF{>8EW*gGKt)bmAC#3mOy-fBLiuK?OA8ULt%%|rDg(H()O#N_5_53yG_GwT*;gCarX%q`|tss$3`P*d%e%xU|W@bd!aohLLvTysAok(f45)6 znOIHsE+B=o*UK$(1c4gJ1E^)FQYa<%>S<-RzG2RrhE6QYxMU{^3?-{JFCC6w(KnM0 zn7xx(Rqf+Y8L3XMQf6m$Xjf&R*mGx4>^=#dH8#?uF{6 z;%M|IMD^itmc9?zt6y+LKCSQ^+wxZO9n`ep z=?nvh8biV%0ap==Aojkh_!XaxBn>Beo&uy};Sg5(R3?ny#UNDe5GVwxhHkX(j8f~a zx6|70S$aQ--4L~H_IkSY#$Mx!GH)}V)@CsYlFvYkskMZN_NxM1?%3}2Z17pGxN*=S zV05MNMr#g`rzVehXm~}2=76Y_GBoGkIH4yX^Heonss-{j0xI8{^uYM>u*a@L!O8^x zVefyksP9Xg<3j(D&q!z*$on4Zqb?Njf7i5!eU}1x@SXqX9Z{61d%mX{-J5cNB}kV9vC9O~rm?mDiJX(O!TbUThcU|Akq z;mOkEy>>(9_lo_m1SSH_=!-b)+o9%(cYCeV(KVk9R37ha8dX8(T-N^TxCLU;^~N>9 zaKGtAr@pb986Pj&x?+A)6VLyy`e+WDbfLVf9dU(AhsGGEA8QNcu$5XN?Zz?o|D&5| zb#AH(x7K;)2blAj9ywG$;n2gj+wHZ&w;qNuP~Lqe52a=;+yU>my45pjbm;~H9~5dk zZM011rSo!T7hVj=O9l|<(rd>8?NcGPc>qhrPRl3W;@}aLg}u6;EB)|qm|FNeurWFP zRI}hElxCAeGJKVA%zq|{`6QT)VxnY*BJCy0O~;T|UuHYYLKn&MVte0a;e~e67hCxt z6{0mMeP;-cV|n>6{1afB9L(Hb1cvlXPIRhPYSKCVU-`SmU)m9^-ZMc(e%x&}n9X(5 zPdj^yZ_ubrIf}#Q4LOX2f!Hols28p_!T{fD2MpVX0bM|V;hOM&_9w^Pc$ac9KB;|I z6EH|GOf+30%e`oCh1cLikU{z^_mFbv>5Z&A&mMC5^GzI}8J@yB0M(S}ob4bW8|FH+ z(b!EFp|>ofEk#E5?GkVicPLrVpt(T)&z5CTZL>6_VxB5L)@)Ky$f&1vb6QfFAZ4;1 z^$S|t+{oD0w<1q-eAQ}=4ZjWwEyQlsuH47{!t5Uo9Q;Q98D?3}gxQxE!5Nw`=eP;0 zYR(=csC>D|=kJl}yt!q3jWIXhIdrrH`qGm)lyT_Jc>2H5kX@SM}K?gRE<`~IMWv0NaEzr zi$+5or$9^UCmW0orris&OuC;Z{J|g;ZNd1&qn~QDCgHe+0wZV1YXLqb-zE#KmhbU7JR&mxH z-p~xsY~ZRBDP)=efI280zV)AgJ@dN}Cu)~66;(saPG9Qlii&XhX#F_WLv&03^6$XE zXqyzaB&>O>%x-qI2cZHIrE>Z0B+lcG(+bAU*iFjO0Jm&)8yJjlT%LlJS?~sd*3HMO zPTD@68iFeplTlwl%Us=a_0A6nDM$Jd(eB%H=~@Bi`Y~kZ)SS`ITd2vJ2)Ll%7vMen z#=ehV#MfcwyvijzjVx`Ppprntv&IMN5sYkaI9z=|$2I^zMy$K!Y{rvKc^>r~*oq8~=)Opm#($9vWHulbYRLRk-2q0*XjVsIqdQOo*4G#%O$ z|ICDOow-5XUz;fG`AZxJfh>1Rv7b%uznX}e-Ajr(8{fRZ~6MxZ?{l);n@L%7Q z)B`j&W(t-1{;7se^eKZd3eV(HmXXmD(>iJdEiF9e+i+-X>34!;usJ?X)5=)dxU-WE562+usMs2~Cx-wQ?&vG&un z)jIm)Tf7L0#pa=xT6kU%%9dmtV+}*Fh(l&oC`oH~%(O86AeWdFW2${GCyxqn+JWYi zjz$9YI@Tn@f6aSOR?P>jS^d*K8Pr?;Q_Jh+r9t|0XT8tI2mt>-0Ki#L!1-&~U?V@B zmk9OH4uRnrTYN#y-!(zgQCNF6o{b+1eBaUD!uYvmqD1^O8Av-CrC2Ly8CoO$63;^3 z;>!lr;4K0RW_wTh*&UgVqyOV(GX;7fL-R4tb}~FA>)xy!N@?&+(S2H^+f)yXVFnas zqC8Bn2yZ(QP77UXqB|eX)aaR12=5z2b;224O{A&ryW-#@-U8%hPtJZQpzC^qf=r%R z16vf|O^smsQh??coa)}wYvU#D8AmG1?{9NPHYkWn#!9@?iq@SPQnMmvU@1|mbU7Xo zj^?Sl0@!Q}C(*MCM+JjXm3d8Z;hAzbeEgt}d=}N=#gYEN&CxlpX z-Q>atvTShulPpTLR`*T=y^fb4$a(kNRPpS)nY+RP#dm7uFBD^uj^2NFy^A3y{{W|KgZJ1h0L){MuHg>e zW?dYN4-~I;W*v^Q^GGcf4>n3f__~kY441`6ViZ>4nj)h9#*OQ!eSPYse4~4}E{Nc) zGQ$120Yg|iwRag5_`*~=L=;J?h{gOUG=ZT*f_+m>9Tef~5Zd7AQL=N-*|sezit#VB zpa_`j9yM)Oj-96AOKlK%jXuyd-#PohNxe&7FHe*XI!f9Oll@=jU{+sOWqC6Dk+z4_ z00FNTmw58Ls-O2LWx57Yjg%;jy8OT*m(ZHo^V=dfOnWLEN!cB1eu^cwj^BIEXYAUh z&5*(e0b4hmvfUttqqsdIe+aZdeuo#onU|_rRWWY%4wL6_d8gY8+`2ie*UxU-CNwPoa&mGdQv&eLx-z?=Irx=xic`s<>U>jzlx87!F`AIDQrF~UAx(u% zua!^cCFB6vsitnnfQe(tEi5bHQa#5fLKg^8& zMfLr62Ys;S0~!XLy z+$EN75@ta6-qQ{yl??#SOBM#gsx42EPJx?_t}{Pv&++NFWUlHYZLDN(Z}fE!p%78( z5TIH+wD|sYet)z7uHDM#Qnu}j(!CH zL9C8|`PrDY6K_w5RhKAjG%n}GftRx`HU)`G$!*hzN$vkOyvr1^w5b7^jbuxCjN(ty ziN$_Pjf^>>UXnm)P!jOdJCKX4lH#RnYs>9ehFNqO*n4P#cKlNv#OBeJQ z_YYhV&i9b&nbFos=5CV1^Qdi1?CM`+yKo8kC4D|II8nNG2+gN41x}C#aFwx}m_1Ej zUtM+pUcZtyW5O0l@=5O%0D5T%;Llv3&G4`U&t2U3#UeW)k#g`!k(A>5?EWJv`P80L zlLI_}L?|Pe3Go`wD{Uq2z?p1pOMMSrwwKco&0memwuy967z2bi?sEJ3piR}#QD{y3 zpj(VOf6NOlEroDe=coZ}X#J&lYd*N0njWAWf-s5CvzDv=VF=^UhSoORRxq z=kD#5V1&cOU|H4k?r#dItdJJ`3VSxv4?l-BgvG5u=5mIqDeNNnEo(GibPU1n)eJgL z!zj)kWqNgq6>SbNjr^)6;9C{@72eo##=05e0+I=0A2hB!ItP}9A|y-lly&qW)350T zd-7?;&=x)pkGPas+#t(JHforhpAaWIWOyu7kPF?4i;kw6xG*&?vP@D705lXbf|eD@ z*S!YkH+pthgu#u%`R?-qJXDJvF!VIc&c@7f(QNxViS{1qUL4zg(dp5qPoFQ?&hHgz zuhkR|vIgv25kX(D#itAa&`9p>;+33MEi;bBj0tc$WVBu5pcKT$IGjVW15w zJ^>2lR#7JgAJ52T59*1?$1Gn+FYNqtKx`F)FQddK@ z1`C~u1M23hFSX8#(pr3Ku7!sW{3i{}4bdMo^CpEnXW!>r%a>;}oU8pUUI)m5|2+I5 zL$28`h&KLzgoNEBa%Q_aXy}TNQy9?rhZ@~Hl0X_lj+cs$u87$oY0?K?Y6%a05VmI8 zlDu}_9qalm6Ja?1Xa; zF!GLEX0BX-?(OsW$58+Hhg~T6=E*eIJ3XkX{T4+MdW4UPUleR=?<%VuC*~n~1=V+! z2Vqg;8035Dmm0&id+G0klW{cxaRRmkRRjf5Hu1u zLiB#mtT$mrdl#}^b?bPs$&I8X)wh}cZA6l<0egy1Y{m5<&0d>w)P4-TjvI_01a#r) z7*Qz)NZ(Gf2Y@LV8)tgJZqNx6KlP?xYwrUxa;kJ>Z$047CWS@#H(V(uhX>^M>|HI^ zF&JOrUTj=ygST`s*R3y8Ec1$ENZkN*efNlbjGp-v?kKO!~;F)z{8E^`bmmsKdmJBClTH%Hq}q*x2K|w`5>|;t4+HCnJ0J=U{oBHjsrZWG=hIBLc)Xwl zz9&}UM#Qc|N);aD*mZMvT2yOB2E?b+^=xFC2*jwQ2rOuv zjQPHE`*4`*9RiCma~!plZL)dv$S+T=w=YeDO@{n)U^O{YSY#lVVt~{5+iOUUvhXP1 z+3kBkJDUNk+b$JU7kxg$gZF@U101ylc_=r-F*UvFs_(D6qcq5u7FB;rBUs|u)D)>8 zaJ$xel(vK7>h=WUvRdZ1r*+>F&s_d}JP^xUD%|?4^YwIB69J*duK_z`{q!b3I#4>d zz*Y}ueloa27t^$rIGtQ0?d7|O)ox^S$?@T3@-wcCGoCygfwd6VGuAj95^wJZFh^v^ zb26f?E0{R?EUgsmx`(V`OLxnWEYg50SiIcVn&$o-6HTN(flQ%g^{+bQe1yq*!o}A` ztg>lCl_dFd<7uFE(e;(|z8(8o<{8Jl4~+wM2VRzO7O%%IZ`}s~K#4(K8HMIzOAP#{ zsb0#4PKec9B~j83%FiGyGb{~`goqV-CjH?Tkdt&fSl#>^ms=s{3pa2uYHt|Kt1*lk zszW6F=ohzv!fQN>*#pUZFA=Cy2eTtQtz)e|ANcpBhuE8VWt_H|1ea;kPHbFZrex=*WX~XIeubXTU8Hg zd7J*;>p6#e@j*07JC!yone;!gV-DrNpZ08aI-R^Ic`s8fet%bCu1Nsf)x@`wym=4jNIe z9A15>_V3&4)t8w~I;@|rdvV-Im5E@wGf0u>#7a3;C7r`tma-y{SNoF<>TRnpJDJ2? zG2<|O{#k$RJL^8Tb{U;cN}RGFBY6~XK&=}TDjxyK+DK4IcuF*Ic++z;cnx$m_XJFHMcOS`k6 z1o=Cc)uSzHmU;fw1@%ISWhA7hKZa*jT=DIkm?`G%@8e6F82L59jF~0G(5jFdp~FM) zl``nyvcTjiL+=(Ftu`z(pbJx}_CEIr47ExsXm2ja^|P=knIVNfpTrBK`Av?JwP|7O9&BrUifjCf%0_k^7D9`cA?hsG#>g@&Jc z5gFwQ$`yVM&K)<`^vh@j;kKRQ0&>6)DLjpM+kl~E)%b8D@#7Lt^ zpX7^DC*_xWJ!}o$bM81-G^WkLp`v@9x?UhkxBY^Q>EM@xys0XI;D&bd1(ua($N9B7 zIld9ePu*U#6p2`vbBa~MzCf>6UOboQFs7JWqs_}zO!-HnhKFK#5#CuwWswa#Ikp4( z6%b@YFa#O%toIVV!<{qK{M`Rcw^b$b<{=~?TWgcl_QZUcURnN7Ap0hPh~<+E1zDci{@me&2Y248&^pSDtW2z%|L^=@?Cn!WpT2u^Z8wVxtb* z!uq=sx{r4{Aknjow19&vxH|aLRF3p4>?76huzL$bGFQXot~tf^_qLI}eskbSw#eRS zwYW;|yx1S1$Mec6MxEej@-U}=+OQa!Gjnq$q{2iRVBy<9r*x`vjS@bh4}r!sTg}mM z<)1lX?rV(a9M;J{C2f}wKWEq=GbF?3y|a95O}YeL@uVwNP1pA|PQl2oKbSpo3gFM^ z@d{+Ol^xg;?g~%8GQ@BHk&xfI&t%*6 zL$PW`N1G8s*W|B2if1Tm{BW?3mE4ukb`h@x?@91IitpP= zt;K63ZgMFyCw_XTHMkg?xi!J3M_q<&@hmCPBA@a+pfaA%M2o3ohNT>wjItu{6q3VfdK zF1>^!j_`()RTGM3L`&?dOzn1FdtcM8ew;#7})rnXcB}8Fc*f zB?zk0x=gwx(D9k%E|*bKh3zDEn@Nsj-#LEO;nX}bPrV-qI0vNNr(C(9 zOlQ31zsi&)*qchKS{-h3>?5FaV^zfbO80Sp%e4@44IvQ`^kl;8Z>%Rh*V8F<0@=3u z6-TJTxj;vHP54R^+hbu!*oXA}Of@cgQ$s{Jei(x%M1*P@irq&$H9*`Kz}cY!r8%@u zb$=xV9C~k-V%Tmk@)e*^v#R0g${+v7ADb1+bob*z^wiS_;bs~M?e9QQ+8 z5*T`0OJmqevNn-p7j1AIMjgj~x(M;?D$-4MSn*g(vD85#?XDPM64a>(BLBUY4j!=w z33khbJ^3yEbk2*6X{)Aclu2QEEg#~NAI(hvlizP*Db{N?wP9=|(<5~&(`a|3d=^QC zlmLcgb(DU^VWq&7)x)R9E0{SXKt2kz)R}_}a?UkGGg2A6TtmP0B(u6~_k>I0!J^MKLx}Ho zN~9TPNQgvDjJp}!S?e9sFuYUyF8hlAJc8U8&@i2Nelnh9WleJfnmO#xs6bEv**I_w zVQN+%nPNP86EpxmpNi#xNhbX^OQ^+WxJDRw{KB{iy5qQ8em}=+?D&7sc~+AYRQ-1xE0UwxA;faeq*6LK@k*q%zX;=YR9583Y-88dC7pBRE} zm*KO->gkUo&S9W7Q2DMmcRp}_C#vPl>uG28deW|N8?kS8==9sX2iuQx<`j~t_cy)k zCfwt{S=+b3*^nCTDI1K z$rqo-q;TK#v8c>Wg{Y1^Vsa_s22$?c!iaM8oVOLID%V2fxeicL3E)^pk08O~{0{ZB zGW+T3@}&|T*U+!kgZ&?a?&Q#X?3Sf7ip=Yz8};+&JI$F%fF?&-S_S znh&t~PufP9s}ZoIWRMwu2ztHvxSG1*=;PPkb1^<6YQ9(wPYt7Ca)h{y zf0{KyQ?pC(!UEDoR1P9E`ZbQIKnXvz z(8+`wCl{E=<_-UP-1~TDrfl@|XV1XF)Yh@$Yp0#i3bEm}*`R4P&PBFl8s!sNfIzph zXU!d$79jZG8C^hTH~6}9n?Sd@T}Lj+#t&_g(h2!7VjCxTYa7Z`+s$s?kAKx0=!C~` z-iQ{YDQ=S$hLK-S^Png8;`;Ww`*XO;;&WO-C;3jlxR3 zGRAwCU_6ShOV7&y{iItjv;_EjSIUc4RD$QkM3oH&j7lv26%AN5)ob{HL%4IvTV3fl z1L>B&N$oLk@jl(nTbfL*Lq<8_bLjw72$Zm*XaPwTVN9nnCvn0rc-{rV+y;z_`kJb2 z(_?+b^Li9R*1}S@sTR~o^JfXyBD+xr*8ikeo@WRr|GK>87o?-XwOG%6<4v3ZSeDE& zx}+2W36Wjd<^k%KrhZX2+lj-Q{;PduPUFUkb*to_)%$}@MxJ6Ajnv-3UuYxh3&u*f zL(%(7)Fu!8af3U~K{0YJ7h)s=68Y$!+@jw%xwcPuc-a&mQK;R5t6BBl5Ejbp3t{|-G=Ei zdeGiqdFieK!q);Z1Qj{@cDW9IxD8+WQ0|`58LJKZdj^XGNp4ZLzTv`ib|Z<{d~Pw5 zE5;ZjRiA-lv$JJgG#5TZYZ#$EOzDZud3!~oN04@;=vWzR zef>G`B1`t(PDiDuIWzy$&s21X_)dT67Lr;%F$_7K*TaW)k0tb;A{Ctii30LIe63mGcDog!dQkhQMnvyKEmJd#I){Jp3tP2zxrt0I>sE zX8<&N;x03AXMIt+u0PcnO}G0TZz#49 zVF_P6hqt;-ch<*{fm8E7ST ze$-V7f*e4G#ngUW0fG<)Ovaa_O-x_2V)N6nL}jm%tUwk1o?|=rK;q+!Ko6O5qPi^ z;FNO)7m&>k<#S`x1iz21d`87$Aw=GJm}E`Q?QAf)9RKoRZgjMoJ&n+SA{IzJWux48$9<|R zObB>R#_cion58zFNcx9V4guWwISnj5zh)NhQj)ad%CcAu<-X zS3}I?o$XSD`9Za=39p^Z#xU|3f|hVAno8vrK~VWBOxk?fZ^kWaUQgVuM$PjsxHs0< zc?u^qjfIoK+=BxkztuU zPxD{@c#uV&kN8V+6%>gRBsh!scrx?D;+Nsdyjjs)U{dVv32XE0<*s8+pm;Wn^2w{m zLRK!2?^*ASXD>N6vP_dPteUNDrnQ@InMwG#QTSxVM|uC60sTo2${R%cu`4%v=lf-y!n`j* z8Aj%WK%U9LY3vI;eOa-69nik$v~1|K(plUYvFFmSham2`9fj!UeK21(o`J&iT*|DU ztT{I8p#3&{c3)bm`?1Iq080?&6)^-6kBQx)hxpHEB$_I1RTA8arObW~dK@@#=;Z@O z(cAgSR^A6qR-Xtd>MdZunq1CTt`?qvonD8gA&oT2#tbv$)fdxepek*Sb8N&^z`!ON zv@X(6*_aClJHlPu2QagHb68LAskb^v*EO7J2;!3l?|8tLNbrW@l?NYjSbEJZE>Ba0 zfLOVwF{ffOSy z-OxTp-n;JyOxcejx)2XuTB;HT6@FuUk^q4)4ZHw`8rgIDlRBkfzNy*-J`gO?Gkqkk zK_2=&+I-6A7w6kX#?|u`T_DbRY67pG*fcEhM)X}7fw25fFfpKSM3*>eTAq&(M{~@< z$~#|2Q0SxXpkZ*Z#xgm_?k72|%P{8c@*pxf2}mU)Z7M&CslC>3;jY<@69`Ktr0k}QT~BG?xA0x zO~SWtuMeXx^B5qw7f2S=xwcfjS-<%mt8;f*%a|^nMfo;;((F9a54>$&xC$ze-bZCr zvw~PWIbiqk+E-}&^SsAS#hAy!dh{&k#mJ55wLYar3#j1oeZQ@=FOJQfA!O$9wMW*1 zTug|i5|{xZUy>q1!Q37QJHkyl7GmPeCvbv=={^g=m9#0-nX~xfE=gl|ls;SoPh%Oy z70>?uj)JXKnL5Yn9jpc=R^4;uD1xlb5VpEGOWlKjFOER&IfKu^RQnyIK7@>B~!K!;u>Yow6TC3i@DE@6ZH;bwa6@j zf9%#JsObp8`wd>ZZHylVwEKw4A3u6&*_p%n8N#Pot>p_Ug=*oPbi)&wZLYY>iSElT zJHMm}x6T>}2!*8nUwXPkg!L+NLjWR)tb(;+U4th|d|#V_rybU@GkEBJZ%`~VJoA>F zd+t!aKZ9F7eefzxtqqCHzI4$)p<_ zba8>?67CbnpfPiH!3@RfFBV{2H-pw;N*H38GqZy@Bo`l0EZ8>;ky119=~9rZ$?e%t;hdF{1Uxf@ze{NZDh;!1p2d@ ziI;ZVDy>BN;ZmJbAXbc`g9~cbL;7D$Eh=%bNWYC1m0?D>)%gM;KV$=ZAhn~q%_;TD z{SVz*%G=kbp;lMp;3qY%C=Gr#+RViQTn_xQ9Aoz#_dECu}-!kL!(LuE|xt=Y~W2 zhY9H{dIQ$^t1)SbZPU%zGGTzao3b9!_4D-(_sy;=$Kqa7831zU|xzMu}# ziX%%*M7g?4`*9PAm({fNnAyY)5pBXGeG+PQFC5j|l?dE_C+EEdQ$V~wl7f@iyQD~e zrHeWTJ09A^NtaaBm-8!wBj5O~)ET?BDA2W3nBkXRkRSVoMnP3#C&)e46nLY%A6Cx& z9@;5{v31zgi;-}WC*%E`Ioz`BjV@$w%8QrT@3<0 zftppXdgLOZ@<_;)58m+G^~}5x9w8WuN<5+ps_%h!HHdY?z`Kid9S9ARw6VSyV$|#e zxbdkGL{!fS;T917`!&syi_9cHUDch-nP0Zh(9#Re3t8^@ne@6V4=9IwCo=Ti=bE3< zhGOZ-Dc}L{P^K32D#ibrz>bo65ny{EiRJ3+)H)mP13GXyW(tgHSCP`pjv8thp-OV^ zq~1C6R%#GPB}r;Tk*#mzz?WeTKeA-su0&P=`3)zsp;b-fqS34>w`g#?XW9+cG+%Nf zbpHs7h4(nW{;#VNoVM6l)`>veAJ)KjdM@vGb(03q$B?WISqB+37_H3I0K`f`EgB+) zSXZJPJ1Iv+iUio4rVvcN;;b%Oc{z;QW1xhm0_K`0_1c*8fhUEhncZq5P^t(IbB;=O zon?!>_x|Bxo^KgUV{vkHGq&kd&EdDBF&RUNJp`S`v4t!b__|RMoGZ|Y!BY5v5gqm) zgHfr>$Z*ub!C|+mm)m?t?O!{44f0BdVnxd|p$;z;-$LL5lqbHO=qRxRf<()`Jv>xP zOj1x5@T*w3S~q$~CkvcspM~CdC+G2p9)N4uVL2N(8KlQFe7}SL?y;7%!}KGRf`Hh7 zPgZCV@-LJlTYvvmKC?}y8_6gbRdy!ijJ} z;3FuYe_tD_HA!mI<4pudOXzAVwePfOrPM4?Hc&6s{|ks30+kH@x4{Z>HTs^ zsR1*y9INsE-<3K*hwHk9`^}@67w5g~vV&mK@okPz*+e7M(jrhl zir4}z+WMG$9$w$6uAn{IGkHkCmwQ`-Rlx{Sej$jk-{VapCQ4P|B zNI3U=#bI3ztPGy+^9rT{@+XMVY^L+DMte7smsOrd4;ahq2M1d|;^9OT2*F(=3!+vi zw$@U(g;&%dG9d8CLup=)d&Qbfqi~rPZmR7_=228)ls{zRbrnz+&2^jzLFTPWfpS_M7ZyG=t`0uem%{BC!i%=y7x_sjp8Av<;Ptsj6F9O zTy_J)>*+Kax7~|Jnrvy5lHd1L`eT-rSw-{7pdrB)^Qr1Y`EyfEZ z#FFB=^FwS{dkaKzMMn=!;}8ISg~52Y-8tS$E`P|s6ACQDbKL!6)6xf<1jym&CStR@ zJjcoM&r5_0FUK&r6b-vOu4NE)$3I@b<8cUZYun0d@x!k(U1)m|c3J&ftx1)ah?W8N zpYBYGiW&sjT>ojFrh^`>_EuRVPVpN&7z^czHp+9_1obOXnL6o)nLZafoi<6-UhdVz zSnSO>6P0Rne(%fE9s1K+ggF!ZewrlNi+zv)yQ1l*1?|DQya}9MfGQIlgOfzES3p3{ z!Iq{viIvi~_=IRpT8gTu#hfxxSrR{W)wn_{YC;u8$84Z&%tJm!Td(3eb{v{})SW-Q z8>$L;y*uo^+UBX0%hcTsX-Dv%bAfS@FaM|5Ymh+#HYR@N^TN`UBKP$gS46)u*52+% znI*S7(Ty*jL3fj8dpwSjCC4ObN;pdFdDt2l_)g`lC1*ls!2|_Q2 zx?X8w_#%F@`$FqFJ055PRMpGilk{19^`&Nnww#?d@NY7zQ0bJFp?a3jsz7XZ|k&i(M93 zK94a2!=DTz?MZ9xqjo|BE&0nq5=|^~N`S`RYw>sNE7;`y_S%h~IqqWu`%o{Ev+}{f z*n4H;E}WG2y02($a*Ir9NRs)28EP|mi8VzX*}hT07Muui_3 z2R&2}N+hM~j{`kwY-v7}qYw2G)iCakO(PgKSEct@sJMSk20$cDgKEP{xqeFT%uZeN z<>SIL!wtH1fGOAMLi!KywId`nQaMXlDiHIT)#&{=YEYvXgx)XsCe<3-MPKWi$-o@P z4LAZ-v3Y3fE`5W3G;xj&LW@B8pS?ta=TwMNoMA_5r+wrQg#Mz`wi1%xwQz1&CmE40 z-&KLF>ULpmw4e#E=|?uraZHQCaJ8mA{T;Lb?CG%mkUb^5A0g z0O-%4j=kLxnuHNaE;!=@8L@O#o2KC%qw6X2v~IQ>3Y8;5b|DCs^Sj`26$qjE65-b~ z?c~Xrirqp0@Xl0ZuN~2-zA%8bem|@$!?;I;o(h;L9s!tCwDv({5UVwli#kesE891! zNz2`39ZoBq;np#x-5H*q$~g(LDXYW$JY5A_4|@Nj)bDRPZE9hm>LT8zN9HUxRx?BO zsV*~{7PuX( z#WP`r0@@HD$eEVmUyCbXeCtDG8_kY@M100WVK`T+)Tuw&2`B=R_5-mH1kt7OvTgeR z1^o^4X`tm^ZPJog)w7Xh0J%F{3E~7^DrV2Bq3}guq%Y)Kc{Ky1vKF8460cNCe&?ox zWdUJidsD|tp!MeEVPK@Vo&7uS;or(zF=VJK zo~rcF&0bv?`m%HR1dbhzE@^T9@C~?Pd{;s(ODr)`EGvgnld5GJGS*gB)A?m-!3)CD zKDT9%4jyZ?9%|hwoj%vHIHtJX`$ei=%0pBunRBTS2S3P`~zY72(_5a$=Q2-dde6 z3;kEM1g6^%tVggJ?vPisT9e~_y1mou zT)awO7}{_XRa{tCB%9?z?L0$W%shM~VK?h!I@WH|O__Nk*pSv;dxsSv>wsZ}R3qsW z0E=W$Do1v18ccn^OD6XXXwu2x&co_&{SNLi19Z(@CMbm6RR|TPoj0WRI8jII1(gZL z3WcMEcXT4qw)hp*Y1vA{BWLIiJ^9_qj{=tkXeTBQYD=CbitNuc@IvALr0CWgEw~GJ z*pa|z--=3QlofNxm&B{V(^4Tc?ju0R*|3t_Qs5N=)T4inu=cX!LRJ=W?(a*-R%hxs zbq)W5#*|<$SxggbkZGX=;n_fma3tOSd`DDy=!C9^uz`GFPwEOE_t6BB-CY+h=JFG~ zhA`(ANZV+rEW&Kyj#37BX1vYecer(ctiUcdW2mA-ke&i!cfQK;&#?eF7`6UpXV0>Z z=XvaK{-Bl#h4oPElTqe#zF}NAxravBHN=r0GRgKV7>vj*mJjm>wF<}wu*9I5nb+d% zL_J2sy`p#{tYM05hSslFzqMH^|GJw67#-(LDMrQ5tQx{P!d}pU&14 zPOHk^Q`q1Ja zq@7dIki!G=7$p_{HPP1u`Hy*$>l?V{)7R&J*R{rA8W7UvekU1izRu_Tq5BPqxo#Om`wb}E5=a%Nw>Agtu!%YxAEQP(D zbc)5isyYCIRYekPqC$ioW6zpK%8z#Tb~hT$OQpS}d=uCXN30~YMdCJH(Rg=kd?@>f z#tTXa!sm@X82{Y@Ck8|a3XBA{Db1z%bp*9f`JCYjKUk>L&-?=_wUG52T)E2#w+`(; zrWhM)dN%OPJOanOYL)A?F>gcY{RBO8DOcVx!3J3^+E$4qzgS$GrWL)KgfyNi?ame? z=4tNJ4?72=Mn*!b<%XOu;IUZT;YvOMenKw@QwTltg9uRcR<|} zxA-;z1bI`4HK%(w82I7w0r6^(!%p*zc@1Gl7$}Zk?cK8*c2BKB<1#Uxn%9BhrK$>@ z+R{NfYd;lFSM5QnHDgSP4m^r(Yv&4h=PoWNG7W))kp6S8JfgZIRmn{7OQI;(ENPd< zRMH#UHzul@V}iOozm2;_Xfvci*6eOc7+g}D0o-{;(3@!s8wH=dVgCQ{_;idZ)($GnN(4*Jalo0l z@+2;A5o>jmW8k=1S_4XBTS6h2v=Mwzuai+hwX^xmyR4lfr8d-z!u=>2ZM%IkQF=d6 z<2d}2QH^ce?wj2n#-|*SO2a|B>+aWng>h#HZ^iWbOI4!?eiyb2V~rs zv2SpPVPw&6X)!6&_BraDdKslmSMO1DVpT8?nAGuvj5vd1fXPwEdhSJ&rJz8tW-s4t z;IJd6Y;6_RJcM_j(YEae?O@80Uzp&@?uw+Eef>Re3pes5~*FE{v+m1na3gT;Q zA~#lq5k&x8Co8mP0i3jK8Ce~;^e>WJ?dN$~HnF?dZ?Jha|h+jhS$dU`;umW=1}Ekn9TUR+4x96)jxfwR$(U>^5hlt>aK@(19hsSSEZ zpvUt+_2MZhhgyuz}bxeE*=Ov&azqyZgA@n@w|K6g2&lnh0s2I z_a)~(OKnci96;Mvdqx17DC-cpac_TSa`i||{sydwu?>7kD6oaO(icoXhJkSBH!ekh z%W1iW$bb#j1Mo0wCj2?^$z$(}Oo%i3kNu3*wjOS{#CohiJnl!J@WJ?&f?IHA9+b`9 zh;yl!i$dR3nrr4W7@-sq)Y>3D9#POU2D8wF&`fbYd#wDCrcU8T>s;l8XiWSc#&DEv zUo%N5={_Z8gPS*UIPmqH2%+s!qU>1)qFic#pI-MDmFFz9(pSL7Ch9TtmhxKX5qXXfr=`Duz+JaG z`#>f{@QyL+)$Deu$903%;H?1@zCK7I5xK3Clp!b;ZIGw%C&QxbCW={;aYh?F;RXPC zSVQH_ND!t^XqFq zFt$sE0dgs^z}y07SwVunH0rk!%r!%L;O*H`Rzc7Hr=JKM+SSMMl|SJ)xI_PJgYuYW z(({m2ldpoH>h|j885dLLwfWK>N?Dr3!Jc^NnBF)p*)EUT)r`qwY?vV-G4z*`fOgL3 zLE`f1xGV!r=`RkbP}meOf+|GArGU#{7L1J!u_SkgB{xrk7Y$YCqU6iUZvZ9s^O9f% zX$(TZ@tq2Acv1_D!0Ye(B^;++#$nXlCap(p4m?XmI7`!Z}ipmXKgDwp79T?nJj|0A{jVs;)n-jkh;%4jY4ihkQocjjkQ zl&3^C#6K;cbTw}<1n{(wbh@*bbM`BhZhn84c35Y$h;m7scG8|L7RNGUn*jem0KoHW zzMX^R-xIeWH48+Zq2^{?27ND$(Kt192yjF=9B$y7$@%27b9+|H-p6NCRT z>f@^5<|-fqFG~J>vMFm^+lZ82p|ysqRmr9@NzKQkm@d=wf4Sou7%N08M1bzNO04WO z46^e8mDG{JAQqg3ysRLzv!bty_a&q8F=F1g1%P{fXk+zW4Wv&-W^P);VO!hc#>X(s zRIDpgyZ8IxXf`U8`6pNO(b>5pBxABbTstr*Sa85`9Eequ6j4d5>$J(_z~otM z+xc1jj2)-(4#Y_01$=p+T@M`)8hKgh&~p*vkiT{k_qf$fVi8yP7BrX~zEDu-tK_S; zfVx~v*#5+%bBR$<{iIWYM|xq?LxAT#F^j}e-&ysZ4v=WpIfrT;nJ8?TunJ06gIj(k zM@dR@8d}Zo+iAZzVJP}UW-$>Q`h1O(;ELf%K7 zf;1QTTV4DnN6Cm z$iC{Tt~`@jW&!n9L$U^749@|I&D``01kDQ%OQb~VE8TQ{cI`5rQnltj0r6XBF{v#4 z&J8^zm~Wd;>X`qUlSk}yMEB;s3N0RS@(00|ZuE;->6uu{3ahPr*sS-)-}EW1pEI2%}!Sk%tNWVWwCf#>2s zx)-yPr4U0c7j&YGPiA$o1ANa5%lH2t{yV|7y)F!r0tRF(Pilu(QW;UIETi~6!qfuJ zd8Ox~f1?A?^kYH`BzNN$MP*Z!2j_RmD=s?!-}S8`x1 z7Ls}2*Gmf7YVMFk`JcSFuk~ic5oZv$!bOg+8$m|}`)TUtZKFJBN&RuD%|`oc=&9z% z3p+xxH0m2uT!L+s^cBjO0+hq=8p)#t@{dgcUD(J5Xu{mz{YQ2xJr7RmS&gA!sT2Tn z!&zi`%L7re5=svn68F63Pu)cp^@^0lS>U;Tgm(lBvbQ@tQ~EQNvVp*-Y>)$u1fz4m z9~6CeO=)7MK7+MsPc@|tD{Z!{Qk3gpy!qcLr*R?JY`itu(oFCI;G?c{S7lJ>pwefR zn&q*XWsXH&bv^-U6uK^_6GE$4T#{+-$QEF`B7mhcN?uanbYNY24Awr(oIxG+5$6Ro z&N^JR;^g>h%xNUy)KOJHv{!%YKvwmpGjyriqbbUQyHNXsipz}Xo+c_p{zR`CiLxNVs<&a$Jc;SSZ_F1kF^p(MzB1iunPv-{(D1#!aJ97pUH{NXLz%|vUYhx1J*Y91!y;-g$N8`A0CVvnx@+Qyg}1N)IyD# z!;8~G+fI|4f0zWnVMROiFbo|wR}0x zQjwrvQOZ?({Bzi(8dsO%C5J{k^*G@n9sOFe1{~2S#8dmU$w(fIY3;Qj{!C4#WwRzm zL=22V6(}gF zWsVzgeoiP~f3Zafjs7Z}aBPTle=j!H`2uD)uR){Txg#q&cc!!oq;k#o`bZ=Q_zGkn zP*e6RbjfGa?#RShw+Y}mNFPC;oC0BtIZV26p1We(z(qGa>S3C1dbYZUNLpK#aD@K* z8J^ZBJpBgSWyd&oIZXthV0UT$V{B2o&=6?a(w+9JNSgp=GUIE)MSVPdg{J^Wtgft~ zD93tmuQSIodB29S4mfk)u#ev1+?$u9DMcfIUd*Igvt%dWU) zVo$=8ol_>#Jskb#wcO@mc#nfQB$poasVq7;J#66BHVOvl9&9oAj4G1GENFrq)O}GL z`0r(ekNg((K?4E3$9_d!$z)Njm!CMYp}Fif?^nNCD08P*uO+Jx@QIfV+j3CqF&W|J z{<`WVz1YVIF^GPi!Fs~}Ej3M``t8U_iWrjSMI>cyTleM$OurWD;jq%8k>X zFb+H{4I)tn>{uC(wr>OtXOgl@`aQuGszfrN0=)M4rm<+!n~WPUw?^Ss=pgh{+z-;L}ezVo9EZBT4nI{5n;C7$Fd%C1zxEf9^^ z>Z02m?ir`c^(z8+i`o_WJ?;{ln5np#P*vRJX;l18cZ+YXeWt?H?eca#^GQ#wuBwDs zemd`p29%RCx?>9%|AQjHdT(3XVu_8k@(j+9Q(Oe0%W()@iJ#h@aTOVq&Vt;$h123A zDmm#nfbFcvH|R|dn@nPB(CWm9?e}4xrJ%9kuEDrecJV+jriKX#F%kn66`)@g(OA&6 zP7u$NbtG49r)m`ez=TTh8Q&v!GtIh?D(&f1Im)Cx9rCI*ViE=mYw-V zJuPLln=)q#|G_9acCO*w2O4vsQ9DtXFzWUgw;)1!NP@C!-=WR*A||7d70r=5n%CIt z;*qo%69^Qs3-PY?k19{+b8bcDTg5u-$Rc)>!>I?H$!hXK=b?ZurFMC+1A6ae;QDWa z4X(Y_1#G*VzmQ_7Yr7`u9aL*?V)xTdXU%7IUFJ|<+fPO(O)iIOQ#Y8D(k@H|`nfqO z=f7l8#{>xbo@va`%Nu@q)PuZ>aCG}fOJvmmvg14%*+c$A(>AbL)hq{6q&ML*k(MTG zh~OOlJEGc)jt3+B+G>ctNNShNi4F_KeIeBR$aU)O+8CR?#vhMx^7~VHV4zH!v9{xT zMfM4w1>Imncbg*JTzDfXS(O06yM!It;1S}9CKA*R(XaG?f(pYHiys2~J&N_B%Y@t% z!)ERv=^zOWUy-asJt2+(LKQ1Jr)b3sD^a@nt!LOK79w?De@v zQEUIXdOsA`vS-?X$MNswb3_sS!r^|ly=tP8A7cNUKnzN>v|}9gyT=uEcxKMzuP*d1 z#|kE?Ogz!~0Q0N}C(%`6Vd4llOF}ZLZm(!Y4`=p*yC$AKbP(%ND$r|UAPzBYefomH zQ}w0?tS?G*1qm8%p}6|)4WIBXu}X!LWX_VBw8>I z*r$w3tWa9acioi9(Bh&?QrsrPT+qP0Iy}>wo;<=#{#pHhQu&huy1dZw326EM%O5f8`b2g$GX>gupqW21|+9QRlLELpM@qq020Zh1mePv z$#eSuCXP5+bh{|0$YVWq;R4_cFhq+b=njW-r2V-9rmswx0jNL_9e-HAWrUR@dtVWLQfVOZ2j7HD2K{t} z0(z9(k+H1ZLKQEg1T2;^*MVS0ol^SpK??cJEB4Uin{TazQwO(nA5+*AxBdV@#Hr|B z7Vmg@s!~gf0WDLPn|k(C`k^+{&$<`P>jh!hJct}@!_k#QO&8rQHG^gLB=G3Q@Jlam zJ-O~~$o_X_CAB6GP>^^{Y*k)ZhIxi6+P<*Kx`! zBf@g_4{6du7BE6K22CI_1f@Q3{;t8&%~Lq?c~*RGnR%*{2$dVfb|j&Cg`itd5>{*Zh> zvE5UdI7{1-PGn+TL#3(M`}6KKsIG(mJF7NMv3SboAX6U!KdQ!ud?2DnF1Lqn&q@nY zhG~3FNVc;yo2#BDxN);@;fxC25iQ+u9x>KpVn30Fd=b01sD-&Iv%yz@9rYwy1D!=! zvV-EoY`|3|JJ&m;=AwgVC{!LB zOqBo0H+ZZ{&PxFlu*P+4gRr351NuVmifyWj_1QdhDkGW-)7E?06PnG^=u02YUSx3f zm_aF62@GEdXg?#gW5CT!9Y)W%FDrj9EX1Ncyd}w{(nP};V&^qx?FP%4$7xI<0)e(J ztX#eo;wyCad=k^zMmh4M`8Rq{_8qcbm=xe|W3%A%h+rv0UbfcU@U> zBcx18ctZl~J?sJt;H%G{L-1Rx1O(!kPJ^ADH7R5tK-MaBL%2&p8Am|r_)wJjX>s(e zE+mglX-&U~4N@UJALj!UENC}7^|T2mRv~T3;)1rgM|N2(lQRijE&zZJy^(tw(u!3c z8iH{Tv^kb5`>bDL#RP^MZecl?5ON`hT>st|-6yTWt(PJyLHrT!?{OAvCfR%ZcyE1ABJS=iWI;`33!uXZ zi51ZGb0!_|6}`9Gh;~mRaF-=_gWrw(j4zL_yd{b?^l$Lfynr|bOeaN7p|T*QjpI0> z>w;&xw+GP{!^X-}JS%_K0rpF-lLRzkEy^$uRyZy(;lc?_g#!?eA01l<{1-N+L+l~N zXiRf3(T2qoFt|cQHUG8bx5f~q5(%s+q5`JIE>SbiSeFq|)y1N%-F5ChzR!Hx9@&4P zHyH;7i~5aGDxVRGY+1Vla4xIlL?9=jFM|+>SP8m~F-pM< zF(|2;WgtGMF2t`3fij^+u}!aOCjE^gOO1c+^WFg_5!&n|^^{QV?MEtS5H=8WQj~A* z;@Kuuv*8AxS|ByGQjDnfb7GCIePXC;yaLU~!}SIZc{_a*J5C|bvN02`e_-Oy$jHni6D`}1#`J)}nBBC5vFy48ia5$NSJDtkyK7JAbtH$BptFM^5 zKqbCjy5dX=p?VY#*gpunfSKob?yytJwZ;!%26p8tjf`qJDLWp`|GSw~e<4hPy_04G0hY4qYFBh}^`U|}d-zJ!Em8=SG zw%TqNMX1-nWoforjmLWtqO%>eQd*F?_q2poTDF(=1+&X%j?Kx((e@t0C1=CVpX4Gd zP>5hmem1z(Mps{(l~OXEA|(s!2>;oXx7=Dv)XIhHPBktwiAKeq8k@CRfEj6oIDcMt zv{FFR(5*pPbPq#q9=IXtzff`|GBq(aXeyNPgH?4R?P1#|h7f~QOK=zaU+k%ccS^eN zS{mQkWNHQo!Ey$}prls!z3Q4BumSZ$m1HH3t8SZ&SyLw=e?-Ujkn6}qbew<}7h^;; zxTjhrINhE+I{KBn$95opmbKi|wZiwvLIh~?GX1y~rww;YF;n`$j;rO$d4oZ2TczoP zY{FRS9dN*QA@y5d~VepUq78pYz{oovzaCn!cgcjzw%P#lMD% z#nC6PWTkozraws8Kd9#)T75e}-ql)Gvm3|8)%X@n>{u;p^Dme6ky;U~=9jOWqJV{5 z9@VFS!9#X5AfDaP1Gkww|G%r%l{^IZRx^39He9|3u86Cqo@Kz;&Usf%Scm76kZ#3U$T7U4F(aurynGzI!3xYzlPvag6u$|}M3 zz)PlQGOI7*;a)*`N>gvRSFg9=!~pXBhmwuGYNYn{g6h}>l*Di z6{wQ@t^C)6V?|&#Y4^UokzP@sm#rB!Y%NLA4u+-}u=h_Rc0SIo<#f zD9!3VXeAo6qUZ&x#O<3}YRStlUng`;c*Yfj?H-tukU*N}Iqc3xJS7#8@k;@!3%MVY zgg;xtnbdp+VsZWjXB^P0p#nG2lc*SGAle!j>f_h(De53g#hz8}y1Ql6qj@B6`)&i2 znDVphJBAq)Li-MGWnI{{LoJT!O(piUtW8wGvFwFcOi*fze1jS@1%D=tG)VT&fxyk` zR_M+z5kS|{=*I}G+<-=RHDM$hfS>}cQzC+#8wECT&!xQ42{Fx{a@ z$z4XRZXAipvw=HilwumSt9!gAu&ZX^JN(}pGe1U)0<1++w;meyxM#ozw{#GtA+;k) zK$YU!4Fs;Wve*w7=1nn>U#7&vl!rN;S4bp&am&*BWreLY3~7a)bFK5&#)G7dP;$NU z#(s)dycF7a%s&DM<}~9h8|~gbep3`Es4>v`da`Y7nE}n+HVDCa<)QwEa#)s-kmawy zm$c23&COP%kZA(PqRsB#_Lhx7Zt<57K3%Zx=~nUP?YFy+;$$W|^cKy~8)V@U_Ny&XNLY4AhzXNE;mhfgQMzT2 zZvEPMwJyD;zSTDdHRF>-kDlPVaI-8qnn8#r;rjWrFUnVGH7&wPkUQ2Utog;qNLMbP zqXBK5+kE+W-1%Q9X3(`QquAk0DY}4WgqAW+J-1uz#X~TM_A1~}Q!Z2qfy)MCOe0xS zw%a-?DQJd=nOgB^G@zQmlp}p;Gm%uBdWI3(Z}%vp&#{kQBPo2$G9bSKwDAx`j8Yly zkQzEadB$NGE%;w5w7MRlSq^|FJyIWLPgA4YVen2K9Rwl8>^n4K(b;7d4AfEO>1>L0l~+}WHdF0`U6Wv+)y#=FSy7EI@FDgnSIj*G zqit_q!^a%%e{@~2%hlQYTz5Ub(ty*sFbU~<&k z7=&Ny^OYMRbDr>h>)|)jE@`I_S`(}{)o$mNw{U7i`d%XyFJ~W9t<B>BDXOv)#F_t4U?|1gD3T`Ci3QOA8yJuMIK$|B4x4*1WGv6dZ$O^RJ$qCa1^Ru4o*|@sWP^4 zW-SrHZ(f+vUAVhS^mvvC`+^O=MIihT>{th-v`~4;TWAF88HHb_{puclHV)~&fBhlV~TUF&uZtExG8n6Q>U34LCM372m27~V#ME>(>!)1c}& zB=c2rzYErS#Ib;g+_7+i;wS?w0{I1-m(vjH#VC@ie>4no)JYFrUIL$a1nLY5i1*W3 zwbaCy_8NJk$%&yAYNAKg5J-0oU;8L(sk{h>w7EtM)f+(aNZs%XkTV;Q%ybc>6- zp#L4Ig1%~NVs;K$G4ZuE|GiR_6KkLy^(auu9ZUbaSL6SkJ^yq}lBRVNPy{2LzLzfJ zKQ2d>{pT||`Kf?x4!ohv$+s3|;!4F<9j*mQjK;;vM;eHu=A;&kB@zGK5N?D3< zTB#=3yo5v~_hv9gv#o)f4WgHCYxu&BE`~eBCM=sAcCRIucUoPM)nH^9lrJ8*R3E0= zwGKAqIAz0axB3KK388KT%??i8*VH$2{bh6S4@#^z&|H2U47U^!I!*8I?yKuJ6 zt04R-DyMv%71p@43Mg(KBnRaFi0KGA@p(M<64WisxXx6XP8?3E8jI3Z9R-H=jBhWb z{CJ`L%H4^oJ27_XMC_vAAVBA_=6~HtrK@Q_C4qNaX(`4>uQHY(#81t)L=gSq5oBdO zqP5E+!x#eGkr4wMruk6rk}u52@FGDT7yaPwvQOD8gxqZ^^>22R$H<4s+EivW&wQ_W zkb4Ry=`|2i;nN@@DwG(NQw7y|y!34aqnIZmpf~A91`PD~XYkwjLnTAyDEzojSjzaZ zpl3l#xiQS@%~)wE(buEREavc<5r=WH{DTHDn;6I?I3c3cURM}fLHnGx$h-=hFAH!S z(l=R&y0vYTWr-w?-(W5?kRee8^wtP%d@T3sFVh#9G)0ixLY~)ywzmV4<&TeFs=cKX zZ^MgWa9&7mg;{B0biHx<+fPxi=w5h26Y5LHZr`R3|46U`0!?W-enymoJUt z#T6)0i&Iv*AyZm6<`xyy+}Tm`;G65YYSSXuu6}5c1ZyFC z1`}8OG7Dk0a)8|>87}B>JXVmseW1-CvH}5eW}23%O1#tG`O0*@?$fmGHAYr6_DVW0 zaP_4U8x}?Ve^?N47B?Y7p!N>FGBy_8AQ=_`d7xIFYgVFzqV0E*SVUK*WkgbeIUWI9lYJ-$!sIEw5>enKn-i z2ANhp?C@g~vK7mQOH46LlUH01BVk`Opx3(9NA4Q7k_6r?@mzQ%C0vEqzBAA=$%NRz zJK|f+H5{-mcf2fd@Szk_#<79Z{BU9lyul=-XQ@2;9CZdCSl3^MwiQ$dGXcB>KZo)o zze4d1nXi=iOkP~NLTF%r5JE+)8Fw?YFAJ(bH`N|x0AkXzvB(bz>LH}w$ z1RRjFsgeW5YACL6dQJA~C(;nbkA;r{kMo?VKbj#By1Fp70zA1o6JuO4V9T~ij|Icd zRO#P}t|k|jUTtVXcF%I-12?(9YxEOzaAXL_v^-$MzGyBx@(=yxp%H%F2yJojH6=be zhL;h}+OQ2i&&BQF2rZ$nq1~!A}%s`LN z!)Li)_{4xMN8IVfzK3H^Vo^_5B8vDYHR9Mf@%}E3)ODg1x*ybLa*0#IJqmzQ8d4s) zT_Tky4>b(^otz+fqMl=@(mzI*c}f)pJhacs70NMo3q+K%cvMddW$E`zuyBFiNjJ<NIuX3&QxHzKFIwxE(NF8iytu}mpkZ|pvDYz#p zx5)CWw4si=-y(jC0xR2=GxtNST~I}P&nie@TVm@tARKTragHN{YEXI~PVrze6JF0r zAfH53cxCh`Ffev$){eUF2@^a0IS{b92XRMS&05S+(GL>d=$&4Cm<`wO^Uh>;`ODfV z3Lb6ekXOU;_^gWB)ygE1%M_`{T$Tdv#(DfL%;YfE{&Fpqnl!C>zAOUEss0xZ3|2BH z08SCjBY(0(D?MHi-Il}h2+IP(SI08gFJWq!(bn(^g7umU z?_{KU&fkbxG>K!^Z&!+D4%P~R-}wOS?FL}Yo25g~XvM=##-x<^3da3nGZC!qO3Y7I zOi3qTh;62>tsmOxm1RzBac1%sM^P9kH>CTSL}$wjkt~rBqNWf^?rjv%Vc|=eW82+Q z=zq`gTR}2)CeK-Ek`+s8Jm4-}HEU^$;xFm{O1=o~G4a&2dpwXx0hM|-OKui;II!T}k(Tej;TIg4Hc_B%^Y`$%Ocf_;{AEh~0JUE%!Y9^AXrf8! zWwL0fj}@ZijdX2+Bekq<$++nlLO_fdI$Om~)x$#%!{hK3z8F5!)F!eQvG?S5iTHXgjO35P}RY#2Z+Y zKMYm(f=R%2a>f}9@yTZI=*%!t09e7$6F) z`4wgU;#zq|5(P>mRk*AP-Bb7pvg0R|$x}t3JYuaYIluT#dv@i_yv@vH@OBjs=T>Tg zy=d2M8t-#@F&}y&H$?2p0>U8RDwM!+()#v?Q012SXHt)zb7Z(W1;FL>IpL$ol!$dY zg5#6el2yQtnSngJ4M$(1Y*_^25!2@&tHR3~9xR>8zppV_%1`Lk816eT!k{*Q$kPXT z_BZ?cJ{7Juh27fYNbF|4mu%xAEp#kxm^-rptU3^!CAVmS$Pc`W6ZEi2|4(~S z^6vw25L~%v%!5sTZJ4PAatU~)2wQVaHATm-4pHa$qdpq!TK21GFEq5OpMRAZ7L3*8 zLf6|jyIY`UF9kcOgHQP{=VBt?Dk%QBQ~H)i{y`0hTKFT-9FB9Ce40;TxV?+xbV>ipFVWTj{&AgG0BS_oMXq3f zCY0hR;`??l6=PD*FAv+5ik~4J7O^yW;Q%l-Qbeh;$udhVQ;GYC$k6fup14@PPPWP`XU|0=d1U& z+l0yMtq+Mu68-??#>9svaju$xKu9HauL^iOSxHIKP`Kr+vI*}oVjNaED~Lj>J!ydL zco`v()`~Z9G=JA~3*vwH2`)0eQ}~CYn9E(Knz=tikRncL}`!;Zet32x^M8c#>5lUm*&y1 z4kj553WhwWfdGi5;D`Bws2(34m0iPprl zE^&lDk#Eb7lGaLdh-X9LmvkR+J6=!5uHfoNc(j4cw;cqYIqP z=zxke7!awo71VPyD%VY*u}p-6cax_4M30M=h>(@n9z#TCS5HGMJ|HbeS3cF>jk8e- zr`sP6St|IK;quroqO&0mD=OhdzRZ9PbjR&8yv9h05tdCmX|h9)pzvv-G;)fk#?=Ls z8k0o2Wa&ZaT>9D{!9d2`istgPX>zLWRl7Ahr08IvN8Y%!P&R;F{g@g$w~-JnCsf;e zRG7sz_F|?qNK>}2;nqH#Gx^K)>{DG~^vj?7EehoE9?r+hm&rjs6&8U4KT`zOuRZ#@ zd*zy2#bMIItV@G9CB9mVWUk%LQceDc>*pgQ!0G%p>*#p>h4m1H zDP=hA5H^+*MP15DY~QsAFaYI;O|ju59wjiQ=$G50pFAGVlWt+DpNsdVQaw%l+pg7S zjM;>sI=}>&u$`JNQ*dHq)zhvuDoq~_;I+Ol#lIaC=fZLi zb%SL#F%BjuxfMm^!$lKiFY?2R%07-Qq47_nr?f{sj%EEhDA>6`-cn}f(l8D*Dx8LI z`juG3Ug-Hb=;6M19bPAl)*YXQ_I6ww1xa%Gr8RgNImCOJK4-?q+p>bd2Z+aTi;;1jGl?I2l_3e z-LJKE_;A+619{LGr`LS5{BBR5?FR*!)0j$*>W|IOjb6OJzAFHPSU`_Fhp>7MsP@f( z5Y?XcJ+?CW=cuCK>;?;bR#8ZH;-ay#M_}*U%^Vp|%5i5I=`_vX1P9@x0mi-z zIlFRBXau#OzrjDw5v?TcXHnW(11yv%m4)ZH>`}wi|79)R&`}_cRBmYC!1c@9O77ww z6(Q80-`#f)++I#Y`^{F0Ot+e`?ie%BcWx11aWCpCzLSOs9mo2do-_i>ir`0l|r=zO~pI@#)SIja?m;)Khmo6ov|+_fgZ#8qbgz9nV-H{PaX? zrBsCyJ~pPAMna34e`K3Mi1CxjIYsfCF;?4^lr7ds00M`8I+(#347JX6lKk=Sb-53Q z^SJxLEqa(fR`-Fy%?VMJY&}`4aauu&{ZiXdHlv}d@AmL|x%elqC~hj9JgrJWPKeFX z%*cfJ9yB2uFz4-J+TT;Wh_>5~meKH0sDRn-EAW9Eh%UF3<3UXVM}jbNaDy9q4$iz! zlw@a|D@UpO7gJM)p$W{;93;@zx`W@t-Femfn112?QALk`1~_!(Sl_QD3gyp<5A3lN z@gp1AOHuOSF>Aq149Q#eq9#Y^dT=r4U|nw|nO!IXkI=}&xG z&uPqSl&KeV$~#9*wQtxP`=f;K4-~IZ@I`S;Qq9MIq6I!)?(*bCIb= zu&IE`P;_DF_JLZ4kVKS!tm0%JS4Q}WXdc69tX>)%+=mfrnuDl1cBpO_q9d=C=Cqhv z5f0U$pgO?HSmWfL#TSw%dV^$Q5@LL)WPVQ@;&;2^1>zu7Wo z+J5U3ZD^-+@FSsJpmZSN0F zz_9cVjkSuw0l!i801OIgNm42EuP{KPUl(gDTu>!7zB+PN9do(0sdZI|jeI4Hkn}}%DqSV}JN){%{i@(C<^S-X&HFQ(1`RF3Ga&#NfRWiQ z9d*^o{`g$GksN(Dv@hL6D^oeDK3iRQSS=7q$=^+J0CA$X*wP9?F43aQ$Ym)t7cyam zo_-xt!aXMP{uprj!Af0-R7{Lx4W}!8G>`uUHby|QWTiYFHAEv*H$@YY5EKUQI`1SW zH6pzIpFMsK_XOJgb*JiPDH*g8wy1@pJN|Yb?#2@p3+G7=l3#FpY^3< z1INndq?)S_dRJ6jrL%jm0=0gNg`KUJ;wRz#7;ytrJxF;C1vZnHd1cl-c41~0XE|SS z?5rafjy8N$LA@t#Br|vi8K6AcpCl!{rFYs11fOXDmnegKf~UdlP)E8@`6cf@lD(xW z+Faa}YMhk&XpQo?eJ@+gVpW(jOUoXPi`@T}wrLGB0y1-%)?$TpRn{EK$QPs{q0!B7h)r;kzEl^D$&x%?N5H^t<5rboBuica#g}=)VEe7ev zUJ){~hReHtWh9fg5&)(O{kIcdRLeyJc4~3{pSH8ie`7dEinmT zL3QMCGZyubMTA(eM#sm(`?{UAcj-pv0#m@tcy(7+%=3}wqkUIvSd<4EQJ3%sSSY#c z0KBY^4{oZM2M+MAR+8$p&MwA^P1xRXTFNq3=32^j7N~&J30hIuNjss|8@KQmupGeh z-E06fJk2%bvs3@LTbf7c^nL7fZqZuz9s>qK_C1I?4tfyv{_-1qC!{FnU45bPky=Q;AT3hWv@hxp|R0QNsTWbF3 zb6_bo&|Iyu5+B86;ISeMPEs(1UH_WgPPgSt`aB1ltB{Vx{1iX{SlG48r32w*e&?mP z!lof49K25cEH}AoWK7&_<<~sAB@VMdOe#u-(OR!H=|UK z&PBB{Ohgz7m`h*D-Ea9vtIybgv?^PgQ+01yFG)J&hg> zvDbF9(PuT*@=ehIdp)56X)v8NT$i?c43$>UkSIUR-!?Z|6?FvXZIYTrJf^GIJ8L1G z#xFjfw`zX!z1D=vnau96bLSPB-(xth9z_jg(u{mflW_DH$T1L7a*4%mQd7%N zS_ZMYpp}eHgN;63_2)$}^Kht}p$}iL&4g0nUf&$pqc$(=P_uaD!QOoEiUuR~Ad+}6 zsxRYIfPNkUwa~(?zJ5{g#_+x;>1`nf!lVBD<7EZc&RDR?_;diDxQ1seg0`yHV|NXf zoT@!5oco2tpDEry`=@WyrS@U0ia4CK8Fm*L89+RvPdI&YmopjHCABb8+;ZTU)sbXJ zvr-;<-`9)2&1z^=#|SviQ8q^*s-XXT3>z)?H9r=g=0!melNGfFwS~iq96Zz|&KpJ9 zzm5Z@HdOg&jL^IcD~6;t~7@$&uOlP1kFNx1*89<8y zYl(6Dxgw2js@t=z3p<7tK9?G}Ldj>g+oq>DhA@hZwa0NK6W`$JOnO$6<%roS^RH3- z&5jz95I5SjAzyng>;J99+~o-Kl*&d)VV|dtV`GZfo7|I9`g$c35*}T{?&3{O#y7K< zwIdSVRgy+8wGq6_kxuqqj<4Z;m}=m#r=%ln6i!d}5qod}n^7otwhvVj0{eBXXq+C} zXJ9|J6Bl9$bZy%@US$Zmip^{e*MfaH+6&q~?}kpTW`S+juXbuu5ZpA2cNC*be#8{D z8yzc&%fLi}RPe=^^o;M3axnQO#^%FWx@^w*b=M{sDb3I*unH zGmJKkm<;ONxMo&&99KjA9xh>=ju z*j487kV4CHMwKDg5bY=)w?S7|yc`mo{^1?I3a5QOBNKV{wzi^qf_7!GNQ^&9Yr#Pp z%5(3$)%yEt?*0f--)99%fO8<~vYho!{J%1(D3|L&Mc=!5cPy)OXh*+2N}ZU0Iq-va zx_?~ylNcbp`mMQ1(s%FW+*#@sy&R0Cxq;_sH*Tw- zd9ERQOJIBzun+OZBD6wHGDU+ICwbp;AiO#nM%RC5?}4wGj)*dWM&~ zZK|2+4Nq8K#OiATtJHs=)5%-~;85c|W}=vKoSB1b30UmvOj+(|7r(ihri>8_b*lTm z23g#TB=qfs!j`tl`;Nr@?hjqbThgg6{xd+6uDLFNYRBmFSu7bIW7dF|M6qU3q1sCy z$N}x7t3n;!SqN7Xx>%*;``)Ya6QQqUs`5yRwwR|$GQmrW{bMXcfQe@R^Uke`hY0Q? zdDvZ|b=FHo(EvhKlSgyHAC%}qD_w`(43Xmb@QYd(s2kfXuFWzBN`MFWnKoEx@m-2- zzh~M!*!l89bc6{6y)S~VY-$g2m&kXk(%HVb0(dPsnQiGVN#7(6S=~JPC`q@mR>Nw@;K!4fy`7I zCqA%fP{zG@5aPm{@^o9^PhmMB~#vO4@^2vkLT%Yc5wQF{yCS+qxALjw0f=0GA!-!q9MZ zcD4q!3c?@{4_B7kgS~{Ls!%I$mbCWmD}`{{vwkVRF4PL`^boElA7}*#=Othet}pIn z5FK{vA=qg$_V@NZ2DMR8z$tTHI?sf1TGVRMM#JsV`){XYdhWGB}L!AcCKy5?g+S zIidocAog2jI$}|lTfO~F|H-QnN!j8MBbB=x`p0p~04y@U{|5B+Cm-m7E|q`)3tS@X ziS{mxpW3J1hse(Fyfxl28H_%{uRJ1JH-n@m^!y|iRj?MwBrF-=6}Z}eU>!sa8-q?D zm{Dm!;wTQ&x;dF~tvj>Udx5Z>FrlT44xF#(DVUD^_k|hJhw+HVant7tISnGqU0s!z z#WvmH$w?6O1xowg<wn%E$DQo{ov6k30gj>#Q;upUo@kHx@#3$FmmOz7NvO;t3$D)OKtYUK~)3&jq8yDNU~s{R)KS=G(#wil6%aGtmvEYyToaG7STbZF_z zjX|}I3X}o0-lC9RA3PWok9z&851iqGeFnzYg-uLsXa#&Em73ix~8|o?DGUqd`{bEYRPKAdTt*E%ujBn+zk@^fO_pCLqVWB z*!WU}aMUC$iqgEmxnMN%pD?+BinX~1Pujy~9p&;#_hL`Iv69m&UBAytPlO3PXTM*& z7`<-_{&AH=4I$~kuE(z5wLys^`aIqtZVL253nv2n$225xv$Ll`kb}+3_azMW9k4du z!j$L`zuZING4;PY3~K5~VzjZ$?b(=X#ZDm@t7X0I!;|G~t^C@gaar&ZOY@%XQga7q z-uYzto}S35m|xtRlBOPe7D1tO|Kx^K@hE9_nMS5XoIyKd2VSPQp0uK(&plN>S~xzy@0~0nd$e@(zY8lQ8A%^ z^)rHO5?hGZ!%0N#u9at+;=`jJT7r`p_Z++j#2&rS{cUv@n0LFgOv$efNu0Z|gCg2r zEmf&$QCp35C^2PE_7%|yx>p>4p^Tl=*c8(`Tt?~D(zN87Ma%eu$AWy5|5V0==wh=^ zBGD+=(hS+Z!>6|_{6T0=Ct-1>CoF4YDzJlLeP{iJ>Ea+Bn?+TX_|&~0OsRh42WA(p!5723&~6S zSr>(f3K2y!9n(I~CV)KCB)6CNVlF0325Wy7{Z8z*FPp`RS+gEtTN7H zdIiRFo zyCg|8jT_88hb}KNN%;XHHH~FYIDJ>+(}%45Dt7Ore&N1igElh9q2(*ORgwfFneTHx z!j;C}^2wY4M&(@o8~qx)I1X*;m5hg?^YyYpPnr#mf9K& z2^*{x{z>Sbv*R5vk7gp`gElD1|t|eu@{|gA#0GPZGix%#| zKuyQSQzEF{xY05IOtdHHyV|($oI0t_!lFvJZAk|sJc$O;Y2L6m@`KE&luYQo*FEP< zU?@;i)JIn{=eAaJ`vL8k7SqcFu(SNF3H7I=PB(}qNP-;3@>^i&QiMN|`%*#3KxAsP z5fW<~yUz#wpAXf(4;3LWmC}U}Xo=N{?FMuUp7rn}3|oBX&aoNw%J{oo^!5zb-n#sc z`gr}uQ7B2xQC>{xY6Ux=L|>HH(uPBco9Hx_ce#H@D9S4N=q4T;vB&}^rAy>SapG(z z=8P0drVGQ`&4wLABmaOzHmHNmDH027YyzpX=v`Ps4=E-I%-ha-01W+b?NVe78G7ZC z8E-vf*40g)J|8mM{3CG#vBtl>7Pa%2;jYPF;kaS^OOPu9{@GWHrgSN~si0&8Bo>8T%Ho&HWg$lk}vxzzx@Z$(4^VxIH0aO=$;zV_T z+s#@yf1czow@t-_u$ZJSRw;OUH?KG^U!;hIu$kYtT|w~1mr16a8+uPq5ID6ww-mX3 zR`RI^PyasA2RdFfCKeOKWuYn&UOq{AmgyC!M&98+;eyy~q^zezV|JlQ9A{rnikiKCIwA=@{M7q|BIi$AtFL zVu?w92)*+lpY@fGLylv7s~A+Vn=Gy?r?J!N4l@&WnrN=)5ZOkP*+C=WZQOkkTherj z$gKpWHtjpqcl#5V-ZS1kyTXE9JHVaVEtY_r;C)S1x^W0G&i710_Yr*#h*)#{U0;T1>zx@L zx4+EVq80TYo4C7-3o4eCFdWm#CFcvq-WGoSEAY(!4XQBY9y%yyp7(d}^7b@PM!9{|@d;0OGZi>n+DPI##;8As*R4*`syps^u_?j~nYTU~? zgckPR%VqsaC?-80l*oNj_p5B~2Jn;K&Zs_!!tXS9{}ebPiSJa$8YD&dONWCvHT|%A zDqxe`BnQ~RvWBp++BH{SxY|!zhS0{=Iz*GTwylT!_p}}z?SS^s=zr8%Z>J(32@9o5 zWN3enA=OPGwz^;vSP%JccS_O^hAw<~@S*&wqFkHT>7wssRQ_cb*^6ivM}CCyRV86O zErS8KS4U@_KtoBaq&FrOZVc~b78!Gjk3cQB=;S`#iPeC!cGzjY<|g;kYpnW0A5Nv+VDU?Cbb)cGZye76Bz*;c;E?Zo=Fk zD9eYT%LPCRUV>A`0|Nq)eQ@TCO_1Y|>J95_`05;L|l0SL;quJl^ zODgrIZNL?5KB!*&j@X7u{0RrAt2J5bDk8H&`$X!nIo0ZH)Pe&DEdZZ~5QOR>kT*?r zJ&fwrPyntNQ-~4$MH8+<^9ZRi#2HMu&My~!=x!h_q>ykCK<;hPmeq9dHwEARdL;%k z>;cTGX?!p(Y*hmGu%*2ukWkb2o(6ar9N3*PdSD+VK=3Ux23^Nd!{<9A&T^%cbBf6W#yR3y6~sR zHx$OXbjHq{f0e6Vg;}tZrYZdkV7vQW?d$aV(q7 z`k{KZ+7;PmUQp!TS)fs0ieHqGcH%q)&ijKf_QxM=WC=e60mE=ybe_BBg5+7U-C@P> zl|eRzTj}zC?D7LtlB!F8F}+C>2_)8Czdt)=>K9$Xm>S17BlzIGKGl=4*?sB3x5zq> zk@g;ZfVFC{knB*FHj?vxlboO2TElU7M&a7kSeQoUnKzCddgs&0rXMd_DKL*NH3Vgt zm!Msw#*1?cN0M>u&$MFts|c3%zFl01II8+Ns8u?$Xx4iv?(~zUpJ#y~zKQaE)@?Qi zj9sH}otfk)XBTAET(ONk-wAR9Nb3#(knQT#N7`iRU#2if3j0Ee6XCFzHnIPX0zr_i zD~tI(Bu2i5Hr|oBr!UzZI=A1KF<`YqN7Cu3m9WOYizIisPG?u}7jGq4Sc|3#xZ2#b z=2p6`;=RnV-5j?Wj3mi`(pDwvi>fYsD47Bg;5kh$Tr$pWU*;;F39$A`F`c-m{2O@N zOc0jKj*du1~A)0^hu3smmN23QMipnNpd^?u2nv< zvvPfVmzn{XDP>fU8s5wh!{i=u;NK*3p1a9tmszDCs%Yr#@}0P(R1+nDAQWz6@G^ z)ZPzj4&A<5_zQdHYCvg`81Am|m+wO4P3luHigCmgYorZKP-kmv+5n$H>g;_Q6 zB7S%gNAvlc)j%0%n|v!f$&LzV+w6v&iCuwbk9!f|^?76dgqN%*QybscuHNuCOJ{8< zZa}4oQR0vK9k}ZU`1qj&Y@q_mm~7@2lCLt?>xxcfeWT)>N;$X?)uCAa>a2(beZ6rp``jmmmhni1PO#X<|=D+kj+%C$jQ5ERfUI z+3PPjCkQF<)&C(qNeW|5HpeB3{kV|q*`?9TReg4;+Tvbom!FHbl{*lmQWHNZbianL z`%vu^Le2^C$%<$?rDf zWF1?0y2;e9^77Ngh9y5^H5gY?Ki)A;FwJp>(3-~xR&yPOUJsXB~Ry`1+oJy z#4B{baA|;D$SpE^9tvGgayRyU%^K3^ZgqDy<#x)Itu3(n6vzeeT*!BMcL$bhoe~X6 za(h@~a{KQ=SN-HFijt^CcHYEjmql9m3}fL;vQk8LzpD*bj-XSMJe0%=X7FyH!96IGCUzk^p zLi6Q`MdqTETeC2{8;5?LCT?076mjApZ{}iQV<;c|GCEg7D4(GCCXfD$E6c-N|~qoRRD}UI0=H9{Ue=C;m`zLL_R! zjGWs#?55;(RT>??Bc82GLz|%V;h&3dv9WhC{|J#Qsf^XrOlPHkEu*y*=0j-XzGjOq;w z&bgY%j*r7&NxRlfu)u{qPP65}fG_jqr&QTR)YH7Esb`ByG z%LEoleVatnUaO&atlz*R=gE~>517JdpjZD?EaJH9%?its@*2=Pl!}B&4Wb0{W9&+e zi+MAh#6ACq7l&WC0~Em<0`w{GM=&TR-_|QzYtfq{)~gd70ur^d@8;6fdiwf^sF{fp zs{DVLpKIYSP)1orBEx$dXeYG1oW6TL-6-NDlzVdIhU7$;SVKD%mw$Sy6kTaQ9QlyD z9O78F?tf4dkYk#pR5NZ1PEul_$87r{1m@^xA>!V>=+R(3`1yR9umH`&?i1c%q*PnE z$ko_&xP`}wmQdDjK%`>MBgqhf&usL?1y-1>^0iTM(YAO4#NY{};NU&~Ac`}2q z0E`_J3@lN8Q6N_-^qe01At~+01a)<_jR9GklZTje-~_0)*!|Wz zC2_=yc!S-=TPet*j)KEiI0iv=$%mk}Dtj(Cr5Ilffo}f)FZ{SaYXu6tWUfp3R%OHM zVC06QxM3*zN@Bb49`4x}Wj3~?_gZlgyp5N8q2cDJY66drs%YavwFnD1z0*`}RG|6T zhfe9*9ukwq1NSG}#zGY_&B-;~Yqq(AWP~YUTnQSlmDUO1ag-y)v~H!6-ODqE8w_>g zYxCkez&o0ZoT%u*jonKAEQj10(I(iAw$^1?47=v}08B+XR;7BkluK{pFJ1U53RIYU z!J31xgigJ$v{`%45MRCMecZNpgBz2&e{3=)5iBmKqSN87ySd4eVXn=eUJIu=SRZJT zR1?@}_Fr^h%~I>|RrF0$uh3TFAMNZ>Rk$q$4sNEBcIxh*z#S;n>MC8DiK=XZ_=xr4 zLhqFG;{8XG7-%Ir#X&w{3mS3OZMs>xh9o8@?^+3Gh!koL!lgIAV;-ZsrJXp`Dr@=U zZh1h+K0UQM`DE=A>=UYmV0?pjkcn4vPC@B^r_kU;ch>uALlSS8ztBHyEIY7DH+XNA z&+!KS$*s64GJSIS>`h4G0Xi#IuQuB4_jMYskdvWnSviJ>R0yYs$)}j7HJ>~qm|wav zw3V_3j-piho-gV>l@>v{O+FjJ538S<@|-9X-+}U45STgR_9eBrFGZo9=Hq_0rGy+J zAH$FE`W;h0dnc}yg2+8X?sdI7oB@gDoE2zNp?<|COZQ4R5mvPFt>CSB=zuY1rU4zk z<0m#`=~W4e-?C-=KidLwm=swm%KY1miqsRs((O6Zo~t(e&~xtWF2T9C6PjeA-nijl zfc8ID;(7H^7RO(Z>Q47^V?jre`^71%=VH+)%cEP%M~!%vbb>5$VcM3jOX^bdYlUjL z=UtPOr-PFOm?V;yu!f1l1qLWf%e2Z;Kb0D2-?KO>FGm|VH7CwhnP(b(!x715*n0qs zfC&n?2sXug5CbE5$D;b(hHF&Hy&1bn#Kdq4T(j5r>J=iH#Cqow(?rKuRB~!ffzcBB z{=<5MgsghLUa_;zs~5+kypI3gF@FjDM=2pa2SEQ8St_`iW8|X#wOCe4G=zxonaV3b z(t0$ct9gpEEvIa?#}H zqQAzCMmZ123eb?k_lQlKjbFACB+B{Ym=?lQvI^PQNMlZWZ?nxwa|%l@CO%TLn@4ND zN<=1Tq07&RbP^G4-sFFb9xKp*=<25zi7>nx{8@EltWmj6@~q~+pl*=k+ zv#C^jT-C6k@as^$+8bvbiRSe9}qit_~C)UZQ+ZfMd;o3C)CGn zU?fCTV1v60P7e!7cMv6tljueD1QCam4wvXLnj-QFwsr~bgrv@-tqRxO5DL8|2yFvl z0o~1owEjSAUC^bN8$73oU%BhG3nvioLo%MLma0|cAF;Q+z^Qzavc?J^_eYiTZKT#V zALDbLxBc0)@1Ddq8=&`9O6NkFWv^@?t(--j)Qpsfqek=U?`u*PD`Hx}Lf6z-Jy>aK2u{EDu3XX9ONcj54*V5&lQT^itwR}&BWrAq| z8^T-j8PH)PGdso-AYM5hv^~7`m&E6vNNgyQA3ABRCO!+g(dd9~D4{k3_gh)Wa-NP2 zK8CA`vcQoQEoni`MCdu!_4e8GRFgc)KVQunKnQk@8-5bl$MQaZCiX=xyj*U(cw>Z& z!$5R(QO%QMxLtHBkQAFE&Q~c<><{nu-R*MY`)>;bZp(sNsLkw&F-qUvuB)onRM{C2 zYdTWB5(jvpzbircbTFCxPskG6kg`>K?&3dHd2cIJ-BjGdutGv{fzR7k&iC^(H1mk0 zkp#zpYIn@nbmkv`!+>W+Gj*G{-)0<1REXk3?r3gJXSXthfc{ zXCwV;=uZUO%Nuq&FP(;QN^%B5e4387%foVd#IzI5broqBI{U`cb;pc;g&5G{?;F!( z%ZnO$%HaL)a}tP=20ayN$@Pt?nn=EOs~&i;_#}Y^Xx^a>Rg&#yRQ=i?GA6~q-rT96ytg%9NS##U2aCPbm@D_qqdN@+oc5?V>n`n|adhT=UDvk@a-a&!MS z+^@l(HWgbcK1erY#!kiO9-EtSlL8sZt-Qry78+U{-{guGVqR8ae?;FwXFFJt*mUpF zedtKOR7u$H`j4E{oIJTs7GyeX0=?ps#?_6ed9-nt=PEDVl{3s<(n0(V^;atx0ZvN> z`XhpVWLI$_e`aPU98T}vlLkiO?xkt6Tw}2_sj#-Ap-DABqZYwdyxetntpQId`z3sS zLd_%mB!r5STn;C4K3+O0^)wM3{>4#T?Jf3(FGGp4u5>pco=uMr;dM->#=U+RRK``( z3L>Gi8SBrXqY2wa&5BbRk*nm8jZHiw<+FyDx-noga(ZCVkb>9U$gC-lVCoi-l|Fp? zH?Ikx5rw-G(=UW+AIPOMCL?|u`{TwRJ&Bto1a;^10pku-9YkD}VW93VgM+5ORqHNX zw5nq%dPJ=y;xF%B_Gd)nu%?4qF1x0qN6f~la6wii&Da*caJUnBZ(;@dsfK{*{arxC7(b<$(X)~5{vVFRV(Zlzh-nZ`XqEK{nl6&=OG;D?jlkQ?B`77T8l0U z)~+;V2SPM9oQU@)Xi7}HbR)ho4B%LcfB(gDE?s>1RK)5PI;xY}`_DOV)%;VI6yPtl za-@d*Svrf(MU$J2A9u>&MW=hC(Q+D9gXjUc0EVs<+9JgFPi)X*2XUiMCIDQyU*Ke@ zw&rFIj3Z*pYdSI|+q#MoS9Z^+r_xjp=%bGMzGk~ud>KM9UP=DDq$0B{XrIDS`9BYP z;28-)3e*-11hyAN*(U_T41hdAG9O8T zB#X6C97LcWTjHN*^3T9-9B~-!yKIX&Qw|^YSip`s)Y5bjNwu!jWgP1F!6l>18j!}6 zr(HC=SQO{i4TbU3rxt$90Kd~`ps~g?@QjNUEK$gmtJXaa1g2j`6EP85Ak84+@LrTI zr3#d5WODT((|8Q=1h(lG-|uxiInGQbw^e_81^#cWg-q4X&1J@Vr+o(8yC=ZH6QJ5` zC+LhOtwfJ^D|-~I{M4MRR)6&XN#OD|FD^6lyK0n-PZZ4S3137*IX&YI1iP_2&0_q_ zG;te#Ig|~%9OTk1`!QAd%pxO+V_3N(6Dkp{|Ag5Fz9ivxNGVvinFWlGaL;o%ftSk%98_oB3PnLega2AGB+~|i&2D34ievYn#7_p=z(KDS3fNzWd)^$R zFwm01DI<3)mTl=meBJm$Xb@#RS_FLT<1FjQiyZ1GxeunZ#O6v$EIQKJ>}0>a{UMDf z3%BnU9J<5pk{Efoj)Er+)2wg3ur`FXZtjwcTNjd zT4qyqPM z{>D4$GLk+fYqF6KH3ZWt-gcv!j^Y|Ia{XLv zMQB=auBR$n)!Y1oN?Y40DEJN8OmAYjYx>mo0eQH>BGa(rGa(cM&b3^+B+k4Sn{L7C zG9VUfnazAf?FiFM?Wf@j&B53B!37vBg!tnE4gQO1h3LU#5Jhx(NUxS92HQp%{%GGG zlqbML7c`}b6sIGo=9@8?&rI&OYSPgXE&==pvmM~GO3ioG7Ir~3`4i4PMQjQx7Ocvc zn<_>B{j+k4c^c36h8s-)e*sO<(tM-z==_8A*u;2$FG{hgBkR$)+Ln}c+?Zv+M*S4jey%F8Q!=Z+j&-{L$mg(2a; zYh;T@zWkBMp>h@ z;Fhrlt$qm1mqVG6ZqR*2>s`l_Vy5a!c}lxOjpi)8aG3xd{Avizz^qKs7WWo+O&^PB zO8fZ?Z zoCKp;diXv4zuXLd_aHY=4q?z>5=o!rFY?DC{HQPz7a0QJWvbpQgfDAY&39VaF@K8P z1m1z_ZvLpak}JV^iq{7p8J`o9gy3Du7sKXGGeGqW3ChHgF1*L_j35=@G7xu_*)D;Ss{e^#!K4dT$98#1})kgh^~I!|(H6RB@|Vx4G)LF%XX zegS04T^UTQ{e)35E{)yOJcS?R`#E7$?`=z@Tv9|1ah~vbo}g39xW{J>dSNGy-y3P| zTfOi7M8SwXR8ZwI!dL(~hd|^wC5X%_g%dt4d+q~$vCy_mv-bh+1pzICGITjTo(R$i z03ba&7j}G0Qr<3MS?qHu?y)4TdB+6Wy4QRx18_C&sV5}1tm}i; zd5^!PUxtlBrt{$U&479elf+j*H2;}%%BFN7{)6~ZIlkqO zaG@dcI0yc~LFiFNcf&X}!5FOqa@RNY&jt?zf+j>IF5K#jNx9YR@V0d48vwk_^U>C6 zR9~5KH%%xkkR}$Qe57^@XJnf&+sT1c6*KBR$i-g@s|oC;=M;QaSoKfdz*@qv6lKi8 z$3hJBQX;liQ!S61&|)4g*rt2Y)fvmqqrtzHEYOMRp|uq}??F80ogQMARKOkiB<$n! zPz#br+QJ>bPQW~F%kHH$fCZ}ww=Z|{4zMQ8R|}M(mt_%-P3I12Gt#k3I0UPNCMveB zY;dWsxCBmbGKvOnTgYC@{g8s%z!#|Loh-&>lM?Ei*_%Xka&LWx;oKt~Qa#u3XUmf^ zU_?GYT^n68;TOp{>D2T!*eM@xaZ{#thW<^(WVrvoR{&9q*jFI|yt&<%6oeYxF$!V2 z_q{b2Qwy{9RWb{8(P6?W?YXfV=m1T%xdQ+0?|5kc0xTVKAQii!8y*mFeCv~*n_^6; z9nTHG7(G0>evy)!&m!Z1bym4hg+kRyyJ$z|b-Yf36~V0DzmTaCfVi}Y?4xWb)_V+l zM$4pMfpm6XPu%+7Su*?m0a)fH+9lN^*6i>&h)7S_qeCxqD1F~i)hn32>e&k19?2^; z?DU96DIfd_jF0WN0KWdo=Gba5AV67SPT2!uRW^;hM=Q=xJOl`Ey|BLq#Rda9+hHA~ zSOQ%@Q%S#OTeM*No=J%J@KZw=JXNNr9=@uz3s($bDs}=y!lGvHSQPom(((~C%^`#Q)QZ{Us}T$WOH?~= z5 zc?j!1Z4=cAh-cTpK@@!;5rbaK1HPaV*fgDI6LTR6K3<|Bg#4tukz;XEITtHx95H>7 z0+RNt|1`+)S*%RVOjx)tOb8_gAEvwTpyNjWt&*$R{Y#^x4qRoY& zE;Y4VkC*({%+pck`;JOTZ#MU4K1ARu%a_FQ>J~wfpS5%vRoIyiu!^l#zj#LXOsDqx z&^)x85?}!BK~j89^=xAt64OAO(1sQ)Y1~R8K+Q1RI`ZZoxNRz8&;(=uWxiSyAysE# zW;n?S?zV*5crvNaSA>4C)%$LA5`Yqib{J&d2bf1E$2_Zi_Xq)L*l(+I(e(zoJl3Km z6M`A3lD$vcT*g4vumCFS-slf-_ZEXAS)}Wvh@7cOk!P2tcURw&Rs%hi?8)~iy3ICH z(8lKjvbwIRQH)Z$HNsOANKb`SiSG%TLM!oT$qwk5f;)o_=RL`KBCwlGb${V9N!42Yg_PFb?#za!7|yY)vWK<%wWk-*e6z4G`ipL_C4Wrfh&1> z9bwzt0zO64Yyoey8Rgl%=R3=DB(Z#h>Q&mLSAZ=#M?xq}`LRIQz#(L*%QAK1$q!58 zEA$b}PDic$;0is>`zWiE)5xJ8WTo_HI=(hcq-yPmL4cy}K@UC)?E#?<5+YAu@0N4} zL=pdS(Hp>ST?n>Gx2#a6sTT&v&Uu~w(;@*%@L0-|y2{*60S|$upKO->R%XV04nUsq zOY7XQZLBDHweGq?dfVz!o`ns7xqkcilvPlvyv*mFy&6|_j>Si;aIP<~5^z$-Ldr?* z&(!D|8P9>u`o-dy3k_JpLA+RZ;w#>|0bB5a#^CuG2r`#3K+^v>>5lLq5Tjvn50G&# z_)r)ID`vzwG2lHOtmg-v*TO&9EBT8?*!(&r^kRxx9My%Qv(y-(@{!NxL)iMST#t-r zyU7fQ4zPYi21KvJ2j8QP-E=J3XD^JO^t!frkID`h=r3jFyu11HL0xQvdn)S3KAol; zM8Tn!Xr42>z5!^*AC{pZhr?h0B+WcMXo>$podfDEFDpST1jt3?Huf_-d??%cg;?9OlQk@Rg64sin5^eh zsaY{Vq30*5CMBBcJ2sC_GzE{Jx%^)d?IXok3OxxM_|k~UvYnPR%jWiYSs#e58=%_b zM?qBad~r%2a#}1CXgualdZW zcu2!EAw!byo^!+bs!K_@who<_k9uzSmJ~V#`gZ}Ra!s(vNrHn=amjufCj%9BU=n$# z=zpYIqt=Pp)f3;_Y!iWNos<_f?;#nQ$Lv&#kH;2`Wgb63_x7_D_<0PI!E0co^l8(b zsKSuOqot5{mVTUtif)_@iHB(28xbWY1QGhRuJC}4sbXNX#Rit~cdt&?ftsIl_A92D ztz-79DQTTsEo*g98^^_pk958*|E5O5M?sHy{1OnyYEDC^$T~?BsKaXhJr|WTlML$s zX#B^b1LMzC5+20c3&IjvOvpO~%LOLPjJxlta5xX86>&*()KONCq|pk!i$Q8PJQrCw zzH3USZE7)hFo049nsQ!Rg*9Ea+MNb=<{#OO3fS_&*V`33ZC`iHVX6 zh-W~JI$=CUNsK{{@n(##mD5-F{Tv(C0#8M>f$@809A`f!jZNB=`wHTR=?iK8LD)FOx2`U8)p0#+s(tUwqX{Q!Vj*?N?B0gvE~Q7*!P z_kp{mCkRR;`*;On(^vvs&{Acy92<3`Rl!DX;aCkF!!+5_xAq+n+54x2+YQdCKYvE= zyrNW@8IV_fIe|PB^{$$cCIgPM^OfERsbK&lB*_WX3q|)sgIROpFFfXm7DY^U8)$~p z!yk8Wgg(Q~9NSC)Jga8^U-t|Vhf2NzGTok_XrUCEVa`7VpSPIy%a}Y^QLbh=?P!(< zD9QbYj=w~{@&O5^@*BlE2aY6$6t*LtV)(w2)lV=30xS@Ye|wGbMjJQ&YZ#yw5}GD+ z1^bNYjIl<3=Gjf4AyYsZ18m=BF5051u5x~QJ`O%rL3_-yao~Dcw1k5wjr5^Fr8Tg7 zkMTvW=K?yM=v^1ngK10A5k9TH#H6lnG-HD*0IbCMz4U|h;kz0c+3 zp(JmoeyjHxYx^^+7GEs)rtvh(BN*S|H2oycH=pM;C9e#v$NK9vs}sP!J14r$iJhuuBzj; z#9h;{H^fU$H)Qq-*g0X&K9w)_Buh^X$Nc|oV&%L zjvs%8BwsI+J=-PA^KX9fdYEwfnQ73DUbZ6$-{}YM{)EB??v4L%&{rs;Kjk1fE3q3j zsxCNbQt2FZfU>4LR7Em#{c@Hs!3Z{CU2l?lTI=aoHhn6v!eZ$|q?y9@xw9#JIRcWs z+i2}|f+!0){*jG{v&MW32kl{!QlOOC#YRlliDA}%F5n=-@<&-4lOjK9)2rvQr8s7d zJWqRHBZ1;DG!=9B?FSmm_ii27cf7)Uu8iF4W153s+M)|&%a5-rJI%i#% z7xV9#@r^Yk1q=4vAQ6?Pb=oZ+YUT}{B+@4qj`ylghOcJYt|4X*Zt_sbwny->WZRvt z!%H`H@MFSf@8wvX-i$`$@SWn5U(Cm?Viwz@Zl+GqBmSnI@#$jwW+{u3Mx>ot&RxP= z$5vMv)B+lLxN{11fu)$lP8tBA^x-)^I(OnsNndWa6|PTRz@P_TbzZQEW3vR2+H3El zx~2*a{P;i6izC1U$a%7y`i1)9s;WSAo|Fa~w@$(k)PUZZQ$ZWE_)_8Kb7(f)A^wMj zIW_x0Dlq!03m;7e`>XsQ(5HqB7Gxqsva=nd^-RH)_IY%$cOoB)t`jJlFuoqh!Vu;_ zu;&5yNn*2p^}P|TRqeF((1Y~NTurfJ#xVF~Z?KTAU@?kR5ILmbnGsmQorjT8<6 zIT=QUvV;{CK0FkQCB1EGDKtzXK10UHM--p_nqLpGHYtgcX#f4&lx|;WYfWx|-Nb{4 zA)usW$eH$3|LxXr6xaRBHL;vSAGqi8$Ab)#LNU{=n1sH159{-b4QSp$3w22E30XM7 zb|?3NXiF6VNd9)~80Pj~#jw|@Y18&TW-dY!uV}({rPH;(CBfgz>M;6LQK1j!TKu05 z|4o(N*-MBRl8zjRl>Ta=&KJP4gE&nye*7lKJN~`O$rl{i!Dt_(c`vSY=0FN@uqIEURu7$qT@po;l-P(`Dhfc$XurfF;$Quj7?^JEMXS zTt<0TvQ>%S_Er8L(A1gP5Xb@{#$@-IchzK*nvZVP8%QI^)~W3Ro@cHo7+qznb<7`Y zbw@}W#sZ0pJS^jyE36L0nz=|>-d)(#x>QREjo0e<%0E7;-Bs5`Yu3~6P$*MtDG&*o z&G0Tdqy;lf3^tu){j0+OW~q=cVAUh?f>+ZVi>LY-Z!Ptf=8qn4vs49kcbt!KRZBpV zO%?NKG0_;zZhPmM61%+oU5;?)qz+==h?F_q$-c|wau6dxQ@HRcB_7WRVDnfsnghMp zW#|?~0RtyurQ_aMdbz>7&E#U-oHS2#Trh(2EB6j{29t2Cn39Y+EiNbA?th2>l%s^tn^2}{mwm~MM`sxvP4JvHp3Z@P;rIgWArMg1+ z+?F)oPtGFeL?E+vatsJBL2y)iM2V&}u#_D%N}s&^vI3Lpblx9EY8ge5A%bvHnMeZd z%k|#bvfp+RpDn#bZy0Pw^{i+g(~Sa~!u}4f<|%V&ZnR`F!9!yCp}B3Js+XU)YcY0~ zRzBwnL&ra~kGF(MyDg@$qcZ9WCdjNp{t!hLZo&Djsr@^Lt;EiZpYeq--x4M%8sEPcelR~8))M+*m+Livr` zF)L`|15i2gTuAGyLXMsAp~F^05Z3~<%X^OH+7U$n_icd?8r7cULlHYXTqT3ozghU~2=dIwC4dog7jsYGJ(So|!h!9e z^(q-j>BJ~ew+w0*&attw-bFMP3*`=`E9lMn*!eMWrvR!H`-DDA)Nj#*wk@zu~&)Mpswzdz9VGh^g5qm9t3M(BC!injix z(JWfAK^@#D#pR7chQSGMH3h|+V1ELpXxvCXqiIlyYU#ASnb4W#Igy$2|1Xp>e#V_WWXQL}C4Cao?W$B-3SsVc8} zFqh#IoREZDL51n@kn!(5rN-5JoZ#AccA`X}ujKb8+oO8j4LO@gr^l5!)y{W~O3pTn zV_(_FBDE;53<-&=fv{x3h0jAQ&3idg@B(i$e&$3H&m>I~M0B~v2N!^vRW}el_cAf9 zc_@g`NQfAh3svE0c$6-u?JPBcrP+P06suRe=@LfH9OiGOCYu>3fc|=lbn4={df?-c zv?dj}4A5ioesbmt2x=-ya@jSMFyfVR;nco%{6jS7=L4Fu-<2k$t++KP^1J$6e>&`E zpp&55>Dv`AL%6{plvxQj{30_52j%IbTfxAzhr8OW@A^4L(Z8@LEU2p5tvA|$o{U&? z^YriO69uDWgi24yhr{A5>zphRt8PEG+~SF6$xJwG(Tp4GniZ3cqk7#nL42mu*xEt^ zUbYuPJ!g8}n@c1uTap&>{K+g95o~?}(^t~coM3@dAT-f%Z17J3U4M1*(JK7Q7Bq)q zb*v(=t3_O`&kYlAVMH-TZs?H)b~>gl(Vf0$k2x;)*vym?>|3hGK$bv&>&L^VZe*DT zI$gB&yE9_hRgl(C@PIR1`%-!HD>}H9NCY5XD%#usAg|&3EMSc{Hdlk2NNDSetKxTp zgdpz0takq*SOijzEVy@nRdW*(3{|9Fv8l7${^HPT)O|fojoMDz9HMHy(weQ%c6o>p z^WhoxLqX?Af+ZphgB5Le`Mg(B4iO_tm=G#el=5i2+MPsPHFI6=Z)t%9&5eeaTB#pa z!0bsG@RSS&L_$4*Goh>q+~@*deSZDs35L9kloca4G<*zmk5*!IJ{{q6#v=$>Cm03pNpPI|05v6H!}6U;O8Zrpr&)T5u^E9`9i*5)~X zzEvmA0C@e}nv3n2QFjtqePqgQ)C2e-pLi-1dCNWOXxEn_-Bz3`C7vAh4 zG@#{RaqhE?68*gu)$L*X1M$K-R}z86z*9Csj29h!_FBw^NmXYCr>v0T5UE7&H(-r6 zYWvzN-YjteUd&kVZiZ{K3FBM^4pV#Cb0k0!a8q6CuAo{*bTgIp;L|{WwTrbY_T ze*}%+tA67-5UKKZR?EO0{C_}4J_X5YW0Dh3o`HEltH^2+GrbKkI|%J1eQWyWz?ImYa|04)Pk zE@HVK5P!6qL?lnUyP-~^M{pN@g;F~)qRRD&i1Slu`1~!K1Gy@)|KIR^FSB6$q|U+c zQSa)D;nU1*BgTJz_UjFHQ=q%-_~&mX3!;fZ{2xW%NB|W7O@#yV?82`uYXI74U8#G? z11{ihY5fC^>RG2AQcalNW%i*R!mN< z5+ceASb@RQ>2vnQ&SwOBsm&wCaQ^_k5f)XL@1C86CCX|&JDZHybqaiaTeI8d<~Zu` zI4pVW5M?l&B-tv$=a7K@^M`G!w)LHC0ePpVcQlc~Kx4>;sW)bnNdt#)4&41j4PoOs zYzTO$idb;8m#C|<3ormsM#6hwz?jZkz&f{;pj;H(?{Z$-xrOT#fCGeeC%Io@0?dD~ zHv=c{R+R^%0xf6Q*bL9Bq0Vk#S(kPm>*cV|5Y(nM4iRrtxWUt^b7~`^#)e;|UUv4l z#ye!=gxVy(N&x>q0KgPW1Eg(>Qw12aCV8l8YVXbiN=PvIOY?+HAmr}+8IF*yepOY6FKfWo*HYxYbZP>2XlOeNp8f48%X9bxcD&It27 zk>`+voB~cQcZX}$oWWQaQX(f7-$s}nmCeM>GIh^;JRwzE@1X;D#-_#F=G zV3!2^$a7}TyGp&3jD51H4b$vO#Ub9Re19nsN+e??;qg!|tcYh}Jg}#HJUvY}y%|LG z*{xHX!U~%kGiQ*#?kx{k-nUsUbcjAL7Z7;(07=+u|FX74A2daPy;`HnPa&vp|D?CA z_w%A%zjw&+k;+MNW}}`jxalF@4;*}#8~diDeNX9z(tE>Hw;?jQbjZq`kvq*7e!xr7`~|B__La=bt0Cw_pH*JrRpsO)II zszln9A^tPjLaqELz<7F0I!=P|kE;y5ql@pJFc4t^qGn&ZfKbG);?La0a;~l9EKst^ zI(=-CUL5@jt>f#d)GsidNaiM0%l^A}((*-X$Z^Vvdk~W6UIt!$OKyk@)wSyDG*sgJ zH-+(WKDGno{;{FU9)bT7Ps%ArnspcB;msGA3lRp#%gHfU*-?NrDd~1>b?%Y=nvOOI z3Eg#7Pl=$o0Zv=sC3pb4b?LQGJ^zZEC+*u7uC_%=C>8wYUQn;Y)bm-;veP=?(1Y<(wtGGZyQz={T zkv<{BJ)nmrL$Gu%Lm#0J0$x+77I9x-Wb}9jZb2_A)+B{VpBK;nE84`8T*^5@$T;Zp1C?1By%1(R zq)Pw_T|UmjTBL;snlM~$PFrO2G7lmD)Vsqa60M_cK^l}!)L z)q;!XhnXm9tp7f_k6;)S()EL<(a&Af@WIq0ccDt+`wclt%z@nQJND12^D@J=I0r-I zG2PX-MKtbnSNGP$1?zpq#~2+7zzP6V=Y+O1uotksINiVhrpEe#@AhQI<|JBftoYu9 z;uj^r587@cDYZv$uy$d@^j;Y=mM5YcpkF|&cnvpVyVbEwGUpKk?Pkfm9Kbl9K`**i zNw52HDlI4)7=ssvd#gD;H9FGWzHwpmdUn+z1MRxf>@WY4gM7{i2$Xu44CvL}w|Ir{ z2oG**7yujH>daT>JXGbq*V zbsqLMqcb2th^KkTTwO`bf8&;p0sKrWy!izDJ_uj=s)NYo(%?Wp5+B1X++eFDFQ?e? z`CMcC5(_`wi37xC6p;JWZTGFRJ{fjg+-Veol^Aswox^IP7xVc?h?7qw59yj8b6#|=25u7c@>o4#UAVtL=0*JAh@`>%O%M=c zH%Y$2AH*p#wXPd+JlcawYbAeZ!TpE-8s`^)80fuNM6%;Sl?M@P;_n_in_c*Tx#DF} zBP;1`S;9AM^to=GUXc?SG&*dp0$LxMBV&PVP4I-5O>)Z2JBV?52QV8dny09@a^->O z9u=m6yefB`vh?O2{BctK2ul?P&Kn}mXF4uVpRDLXQjy=5Skvl=j3kKY>DKDKdB<*R zjpm8DC9Pesh~BqWsLD&BgJY^kdeY9wvPO(;v(l~!Pv|CV7_g>nLSVIS>v^CG1|2cH zQWz!cR%R0w3<1O3UdijsfG_p~TjMB?R|wX@VJ63Swa@gkMJH7}!Pt?CHx{AWS2cD= zil76BPHb2}M@U)r-;LEbRiVxM+|dXP;+x7LDxx`uMob0fn>uno#&5V>*B=C9w1eX( zN75)BmM2^r{uRshA&U!5+tF#kL)3$sM&iOydROnlZD~&1SHW*9V!A6rdCpTT6|H;a z4y{b)cm_1}iq3mkuf-}VnUw_zjdIl%YVAJBGkK}bOYi-7j`Lm_UB?hQ#8(u-swm{? zeYLpF1nw@3tOshE&nAZZfO!Zi&FJ5Y+3^Yc^`A)g?j9H#6d58_^Y}!*G+EMTeC6?{ z&Z=O1Si|bl@Xxv?JMBSzOq0Ph$_8FcK%f+sP>js@3AsEyQcH6Snvk!4p=*R3IL#>m zA8$z!yvz@_H@X$aYuW7fNjq~#hqn5Hj2fdtj@g!E{jK5!Z4gw}=}J6&k$epPJHnAu z){eo1d5C;yiBNOtJ<}s&A6}G#8Pm-Mcn7RfW_Dq?6-tor)T+P7Dhtw$I@SIq{4A^x zCuAp0gj|mJC$q{I&L`F%Lne%-v_8Jd$|X<=y*`_6Xn@M|*0(@Y)HI*piLNPk%qn zssdQyY@=&A;BLWwkeIJU(w5!~z@L%=#wVZZZSdbhgW?t6(sALqT-7fmRz?=(K61e= zZVq`;b>-!XDH*h&E=8RTK7LY`5i)HpjW3ix2p<588nl$HmJ6p4v&?aD_)#hkoh=a8 z3noR_5_F9EVR)?of|_P}Y-_;#BL7%hxTHi^$lT=?t(JhQ1*$;_N`ug!I!=|PEVEj{ zP>)fxW`~XHP@AYH+Fz~YLb4ZvCJmz?Ko`^zK+g?tv$s6f8 zmaT0&wHr9=yCqk+Y5L#vWUJ3y9frwBP$8sWL2#VY?HP;O_#G(qQ2pdnq6MtO>%iQ4 z2^jM-C`hD(aC4ehPJ-_mayFh5B1-EPor+uj-wH~lu+aV)=9=5zGTd4k0>&=M3c-TSQ2vi`G1Cx$_XPWP4f%pk9&q=MOjTVIPs;+bNU9Mgg`><^^7#@B z0p>C?-V4(Z+~%-;Pz=jNucnHJSWI&CSiPm|s1B+={IFs?HT(eSWP*h=48Q*GTFrJ@ zRIF}H+A=!32=K);)*eczXW{_)=f4EB3`y0ND;e>LD4h<#- zeS>jThflF_nGhEJW!eGcg($Fp%tDsiRoF5K%$pLB8Tr+h~ooS$m z0Ntf4p}?;){d=@4EmJ)2lu?>s1Xri%6zQ}O(H1xdN}8zyAbM+YS5s6Om3DJeiel?e z$4!2fP84%puqg-ZuMHNDhrHhCEk}kWErWxNx}boyhnWz}#kL+fH?vnA?39hRj^0Dh zm%v77M%|pdrtdnIaO`fkkUL!Ot`_w9&NBrKDOpQW6q22s@P@nhD%~f!zK_q$&T$ed zbFqxjA8m%^CS6cEKSK0dQ1c~ohPF8}ae*70aO0@mGqo(V@uUrR{8T8iFsn`WHq2yR z1CDsCh|#8y+51)uv~b(-4O(HQt5bBI^H-XLO2L^k%`2?KSbq31GlaNGNaPhIT;=xv z6A&K-1J!>Ek|rp4_Fnj7YU9Mi#~;*#%CGY5#_J|V45VAbMHv&kT-^1ewbJr*!{)qQvF58M3%5K&hT9k<{$fub8l@ay4fRVt{qvn*DagtOBplPn! zz)EFcA5-y7`3Z(Ky%UXw5YX^CH{iY zqMxkuBH19vkgNsjGr&U~k|Ap18C1fEiy|+;L?3?^wEkT-3I&V92KE86s7-Elh=7TS z^96~(8#_SSH8n$hgE~vdZEiO+(28k(DC8RDje3cD433;VF1q*SQ|B^ftkIhW(wchE z9-ebPX$d%lCBh=(&U+-PvhYuDbz*&1DjGtyOuAT0*)(Ou^6}B_xnw@Oyb%$5mmq@# zY+Df&ul=!$e5+SbGZ9Wf>hRVKsfHh|lvgIC{^6{7IV*sKNRD{SAST6p_3OV!6lBbO zp(ou@i;my_UN*pAZ=6F4X(VgM=8Oq9#WTjVAxt@IFCw&(%P##pTk2)2V|br z<`YY4huPRZ6*)?%LE*58G(_VF)ZFZ-xm9g1r zO1_dLUq6r@=mf#yb-#iIL06d6sXqwXa1oh!ty{30c!`jaTqjv02<9}2ndbaiST8$} zUB(62%>#3e+xk<_uyFVRGcL9d(GrQaDfhE@T(Wysdlxwq>&v4K^8hI-=e;!LPIiL~ z<5Y+k!DR#=)(Q+5T=tsuh=J3;P85FRf^~p;;x11%3Tlg#AGf8a?5fJ~i)6>z(pP89 zI}(H>@@xLH_+l-^EbBO2QHD`*?&lZr25_p*4eSZ&rmVdQ9b8v z^a=1P&OU@yYzFs8gJfpmz%>HZ+Bd+^01-BlEm;|Bc#8b_-q&(7gzPe|L!7QEhu<7P zhbf7UIO}y_e5#+1614UV-62SzX3wmFd43?ZyiI}i zS2VB#fY&#^18}vbzw7>Z22vFx%KiPza*pjSV#yC7`qvEa@hS|k`PtMH7^afEe}2O` z^#1cu>p4JpBqPY^@{2CKYTOeZAzm%kX)-im3Z%En?)BFnBV}KSh5v!^9vVHDmJ`TI z*I3yWnDAydo{Ljo-Jd74TAnZ4&KKl)aed^Uk=A&&;Vr@}%F?7CzwZKx+Kx%LCZ3Ob zz(Hd2Z)vL${6R5Uzwwf#p3mpTDe)(rDEnt(uqw6{(IZWU^v-A{g6YLX^rwijj=vgu zV+{5pl6R>Vt|k)@tl4d4&{ZR4NQMm3iBOOAQ63+zY2`sN&uF3&{6$LdTAd>@6`sn# zhWWQEV^s`#158*Ju>GPBVG=)zy>;v87dIej@sf45 zRI+=EQr*P8gPQHN72%{i-ygV!!PzJV;BTU{F)j5v<>ia!dxzUS{Y8<;I#(Yb_6sc4 z?;91}@lWbRfHb|j_4jDUBI*G58L3f+CWl#aJq7pDdJV`K<@Q01wz-32)Luan%XKyT z$P&Dr{rRRtdW&YF6a0$lF*EUL_q~~71aDc4iwb3%ctXYHXf?p6GPziu#*GNbKN&8z zoy`!~B)kR%;KOjc`#bYwR%iuJXdR2nlOn_+tMu+i65mB?YfD0eIGb3tCxZE66HmQr z_oxAD?ROLxOQyuKbPP;efmfKfl=|w(wW%?KNRPV|4y;nM#wk!0+0m_)lW9CY4o`!9 zI!OfVdl?Zw9ycY&Y&45I`AQNzY7WiG^Hn&MYt1=`-H5ZS+3H>RbJl*SSg-Z#W+JzX z`;;P_Ds)4iIQi2&J4tN#J35Da|?;n4ZNpeL|LxZ4iG8vT1f zBSG@Pt>t(Tb^aYsA`T8Rl;KL8c4NysK-lWXMx3B?_O}sd=%L74G z!P-*E1@u`MRAkhm!UrQ;2>LzM_Rm_;P?0c-iNV52=OVe06u&Z6C8~JuYVIkIqatm$ z9mq^a3K5CSU$x5GD&AcT_&;Ezurd;xv&d<@e&OQtfU32yU;4La`>WL>gZ709T76a% zz1!2H7oB`J1EPOAQQ`&;lQgdiLtv2+*IxNUa6--nSffy2!tASJKa_s;z9*{P8%lGp z#Xm9~j7>k_X@=l>vrBwmB#8vDN{BHZT(v+jM8d^|>p|4L5sGiDS$-u23!y52EOfz1V4KIiA6nFqGlh*YxsfToQD!7a6S9=TqxC$@9+=UTMJ&VIdkGO9 zTak{tP%{6atqmCP=~vltXI^iuD#4@y_(ET4IY>r6j1qiy*@eR$P^(v*xdq;U!chQO zc69^Q93cEoRZ3h8Tnn{^bi}$OE3W)p_H|U^#A2lrio<_082xC(C6>+*|eA z#jc#hy^z=QQ@LQ09P;Hp_jwrQl>O@2C#9`7-4@or#?K}XrPfT$TJONfb-}4`sK^kP_x7t%!Zya z2y5NQ>z+gLzb{NO|Ccusa2ukROd(-mxHDrPI1IK2q`WUT{8OdTdlRp(pPvqM`SsZisySAdmm|bUUL17}-Q=l>}0K64)ZOXYx4NG8Teku+?ox<=*ex86VXq@A`K2G3nLeT95MOX8*Hc#>|G5SsvcVDP zq9ln;GM*qiV&}(?)qH3hw6tYuw57o1gSh<~-C(!YA^riSx#; zYr78!+YJ$Wa`A@m@SuX_rb=}dpv;0(93JFEdWWRO6Vc4Qe^5;e<0S23Zf+ad6tsK@ zRL-STS#B2k{2TbR@*qiAT>npR{<7!pm{`nHV_%B+uQuM0UF7d@b&u5drKy_}>FL;| z<4ymXm@kmrs#zG;O+GIU2zD^>`@Xka&_Hn-;&+~z-X2fsm58%zO}miy^ejHsT_m;h zB_tX`xwsWP%=9RF*!g(KOJ=2I%vxfhAnvsRCXzB-AsiAMQ*HoUCQ^a?OcCC7QS=2) z=d=wdR_KvpM)f`s`K|~OXE+HO$hwI=Xf%K=ytobZUc1r?`7pw;uEuL#w48<34t(9L ze!_OOl|f1_aSOtCLs_MsMICl@%mT~{=L}pUTYN=kb-DfP9(-1BLSZ*Kam{%de_B^7 z6PXt&h?XK(`SKt)s}T^7vvIv+Tln=di~{Ls(hJAg%Y4H*(0STDM5SFPm=bgT{1mmW zPe{O%l;|Y-*}!c5M=CZa_+$kePhdmPAUmQr&Zvip^BbvJe z=*_Ik(Stf_P7Kx)2n2D3Ko@!95gvDGkhyNz5|}ikVK)zfUEL zJ6YUMfe1y~C-jRk)M+T1reM5zzPu>lu5`>2n_Ev1L`^u@HCRBDkL zhps8LIx-!OTo^5DrY_M-W&<;uJ=F%b0>eJ}a6>b3nbbQqxqCn~twA*}?;YM$(Sl{e zgY_^!)v4I1>B7o6z*9m$Jnqe=-tkR&vb#@qQraoKODhxAp|faW@dZ5%@aU0Z^9ddT@mPArm;Axs6ftp*fH}!T#`AFsyWATkQv|06FAC<21=6zTR}iP0Ou8`sLcxV)<%cXs3t)*7Hfp8SYI2SI+AcvzdB0BiK`oOUQ+MN_T(6 z9|Ox3*dOTEH%E=zSTWhU54t*amAt#obN(g_IgP~nN^7o6Af+2#`>iBG#H^Qb`XWIf zfpQ_VUZX&)mk#ytA1v;7Y09H>DWdV#zdt&>hl;;`tV12oz+ZX6@u74V>)vCaLsNDX|F5{gbfEe^-GOs#zgJFzLe(sG;#A#$`kC>o#QtO-bXqK9%KRW3 zYjlewN3iq!W~_+xnR>9fQ%M%}6(ty<0{_B6G!_6|t8yP_%kzdJtpq)IP;b~8!+vre z$oW&-!W_c;bMG zOz#+JUT~P$kQbX;-5og7Zv(XT-8BMebw|`tzc5EXklW3jLP@>zo=z;d+~~mZ<2N#y z!aa_igvn(5$7|su@bIa8F)08bWZ|4*)O@+v4?yI+jzs9vgDds-q{r%ACoq&aHFYeD zqJJuLl|tk3Jr78e(y-r&jY3zO2^-uKAf+vfY8Kj3n^-V{5p{oFXm!=@*O3(#>|nC16+Xcp_ zpU5j)fWk!)?399UV~}?IfnP z4Lux)8%2wr7|wQ9I-1HRc-p<8R#Z^r$fwtjFCl%seFqdjH$iHZe8^6s%sC`yNru>m z*;mEb;GaA-r8_@oSuRom*x#wSk8V%W57|I(X<02&Yx!>;+&5Pp8vpv^wDonw#O~&=#DIn{ zoc(G~FJ6#(Yx5uIxM`Yn0*5BR$gznEZ)a$;{1qyO4sI!IL%0kSM+RUXR-ygCltlzX>=?aOq8TLA!_n zP|Uq~X-}d-tSsOvctzz6^{$9Kv7ATCH#=sO9NOxX!dG8p*`_963gswnX5-#6o8^i` zD=G$sgKdjVz?UeU1`BtNNMO$_a|G>v?jE~}YXm8i*6R1HaGDouavwo)uRyD|60a(V zCP3cp`j?t2ThtB(mt6ir!~s_pygKbHQq)w^V_7Mn2(A4tyYi^cKnrYJj2LXH#6(I~ zL^(<`3zsege!mG=-&JWP2gaI=^fhQVbd2C)V>5z;zb;^yg@86?PcusMXGSeWi_3Gv$vfe>_d0e#I1HX-m&3UnU`^jGf_RZ zH1@sM!@6=o&l9_x4^;xXs2s>tVT*(Ye==Pfv7k^Ir=_LmD0B*&Se${tln5`NBTX-D zY06cWY|j6E$80LWwmpGIiq&A!zYq0c-hK~>xXP|`FcGJ76ww!tL`A>qBoBJe+V3(b zLM_~`<0wvwJpLrAkZuQjJ!Gn+fzPyTh~8r;A8Z}-r^YG|0y7fHz8?Lxle5+jQ;SAC z!uTCVPx^=Q>_z;sx6pR5^=RxbC6R=O!S8t-RA#DEqDOb#z*S z=<*bS2A`_(l@1;9vlw{w;X}gCfiX{AjTZc*VtLYJcdxcuUo-7b-1Dp!)SHAc($q% z6F<)?LF!AnrWLy7kot6{RT*RPQE;ZyoLS$Q1YT8dhkQ_1Tc%u#0|w zc5hLcy$JT1^-xfmECDd&eS)3P+>05hLNg5~J}YwB*7zEX`nxe}Xg3vNZ-gdLB;etROzx#|&s}>DnOHi4#QfYH%-w`(*30 zycK&ROy|Fh*(w!n;AL$c?x#$cn#)W%v}#~#+tZzS4^00?hMD_-lErb5siBuG8b}AM z(dyzNMfH@-owFDz;so}%9ZpJAm;%qGjBW*#kkO4>$ln~AS!rnuM0U4!3#V9#ot@on z*Aw%m&Bx8>%qpTm<9>~l(B6X;9RZOB_!D5RPO}YG7R8l5;$iAJTLA0Pn}cg|cL8)?LC|``Ij0(sI^OM<<=)ztF$)0ssek z!vrsVDeckRYTqSchns3i>1oc_29azL9RaQf-O&>HOup=Ewc#mgQS+c_W<~2S;grJh ze!JkNj|!ZyQ^uoSRDA;Qk+&C}s0kL7wsIR$-Yt5ob{FnWdEOQ#Ze&}`{bK`D2FtKYRD zxCg+qn~yt=ct}BeHK~9m8qeq;p3uvq=JiGU+%T1%10iwc5W#9ag10+f;K%phbb-SH z)%DmnFyqlt8{xg5*p2{04I^`;$Dzuab(!5z@Qz3IdP);4mv0g0$A4FT#**{3aUMM0 zQ*evZ%EEDft0Nr*%9qXz$#Ee}(mk21!d{h3*;BkvQp?plN3p~-gZuV`ruiv=;u{`_ zSI0JBpl|8Y;_XD8*Aglko^Rr2isiYap5^WrzkNUW&p#R5Rji|l$(IO$TC5^9zIw)8Fu>>{cF`auHY#X9(~MNK=2j+XA_z&+K(_Y@@M&59LqD>s z)bXKp+!o%N6^Qt(u|nXF@h)+D4~hn!_jdl?O1#7Cb07{eS;#`1GY)7tz^zO9cOiiy z=<1jR9WmvM_Tg1BUjIlen10LhY!$QC(~(=`-=@q;qF%WXr&5W@WZ{UHXtuxY7EMSw z4Du!OtQgTQ-2Ti)1QvFY*TpkL%{&QWozE@<_HMp7)Um~;?hYc4jkp)DD3KLmH-nuD zg%Jn?_@e={1fh0U&LL92J3|+Ov;B|Dvk^N|0R%p248vWBLUXV-knMw(YQajOX%P0; zBqwK8)#qn-@OJP_;*r=T1t}O@(f5%5n|2%Rj!2f+Q{1CyrdWi~ak$hv;#2oZYD(9h z#NOJCRFh6Q^{=4C#h0czTi8vatj`uylYVWu2-fm-^AZTr;P>ez?=Jq2qsBM0B;0Jx zrP5uGQguB$#()#$@0Y!48ej*z>FoFMKGKTYZ=}{pOWk!C5^hUG!N>-Jk1Lh3Rvbnx zX+maD3LJo7>hRWV3Y1N;#7Wgi5gZPsab(u@zi=DUa2YhT<6n!oU%dXx-5^EjA~d7O zg!IbCuU#Tr0lYItcieDk3ZK{&rVnq07;<5XzKfP$VvtmtCcy@V&Z(4n8tGzozJ}!} z9j@pV8Ztn0zqlFpW9@tqPcecpdyX|Fj}DOHf9^s%?kxgcQJ zH7rl4qr7Fq&zZDyRzlwbjwM8FLcyr`EFBG@IOj{I_K# z=L$g=upV8J2>l+yQSm&3qjlUqX!ciL-7qPGI^cT@I$u4suar!ECB=nY@IlTMtF;1HcQLkXXdfB?M@e|9-&I&*;7T!yk7^K-P3 zw*{|gi_wU1Q`u`L*!-_(+;hA9PW7kY;zZ{*rerw;E16zj4!EE8b$}YvE~@J)mFNDm z)j5?IwdG`YoGh}wdGg5P3Vqg&!S~7L33|pT8iKDsJ71Eziacu;8kgud84d3DW316o zwl36N+`}(WFe6E_Apy>}s45=L;wBy~QUw`t5$8J#GteIxi&4f-rRqDDM>@+|6_IW- z|Mn$`rPkD;)tX@j7QG*f&xB+m>wam5DD7w0y>JrqB?if}qxel>v zk5Cc`5|Jvw{CE#lhYHUtOm7imqJR}{*NqP7D~EHp6A$E*45PnN>(NX6U^10=#(!?M z5~k8&j5B3;!2&OKvlv;v)!$LTqbaSGtLF{!oV_Qhr%6T2YCMAoLCJX+izhj&HU}Vz z&5C%todUXz9D4ICOF23jwK;e2yN|mt0GR7rQ3nbJHIoqvwn)SQ?XQJ5n#mafYFE8F$DbMxT zocY3jO13LJWmy96hMNo>G3WbNS~8g1R7^nLF$D2qgLxpY?_K)rffgId|7>$vsr8NE z@g?8mzNnkkwx=nmU(`YFrk{2e{h{z{!VPqcw5Nj}jwwUEo&5?x63|XQq({Od9+^`> zmSMAq9imN7f WvLqwY`_p~7f$?ee)3~&AOXtgC?`PlA(64&*!I29q39}0TYj1S zUV#^oR?W!-W8byOwTHGHu&Jd3YsafgO)K_-uu%kvD5R=p6aWLy9>1>UrsGP+FR!LL zwEJQ(HOwveo=gzngSkOYp$h_LbMq{`_We#wmL&*|CPoGkDZ|*w#M9TMsL40CKdP>% zRqjimV$~#2sm;>1%(#g9(Q?6`w8+R158;*-?KA$bW=7>^jEBZRE)pHBUtOK;s5~nMwn%$PrE-e(J9_hm$#O}-TPn<5j zja85j`NIdny{y73+Fx$zq_y&gm|D|x05|G97Svcl>TIEBguZ2UO`3!WkXDdk@5_85 zbW_5a9;W&8i4t+G_#-wp4V-&{RhUCbJOIVkqes(>a*~WM>KeUywe6wH9AFV?Cjs_( zY6o`7c`T~Xe2|smbx7Otgi2|Z8UslT$@Rp(xh9&lLj#~cyL`|>8Y`5oz@3@Z!98r& z(4non)wAL)``8=SB7FL+E4xhjTI(*)eD#l4N%9o-i|fB^8OLt%3xgG4nM#&8kEE3+ zh`BY^@;>+jl-obMp2-n**=u|XT6O$70dey+zfS#Z+X-*ft6_^E>{nG=W~i`Q7W1hr zHG8X*+D`VRgY?=<1UUHRv}?<0vQ*0nGR;SuIp$W^`#I;Kua7!Oj2tJs+UKLAbKNKI zj*E<3nrEUoe)S7^`HG&Xx%bX|Vcr-}Ku#ap@Ytgu#(h^dBc*aRGlTBCGGES_?03JU zJ{bFuDR>!{FrIYlvj-8_a=Sdx+YF7^(vdf@ZH9)z={atwCS^W2-OZQuHAtq}JSCUe z=}BY!B(;OUcE4`95F?7kOk8(Qf`a|w@YbFT!!visDic?edMPDgUk~_mTvh^kvPyR_ zA3K0M-q??iBG{K2jHDuob7*lXyl^}+6f~AEXgD`sTLRP_l1AD|C;yePIihgxQ{zZ4 zgXgE343G;G+z0UQ99l3<6H`c(V-WNyP018-6cao0^qBA`a(L#Re~~5zu^mO-0y4y* z^ZP>V5fpBXopQ@!)&6gm|5f!DWHTJWO(d&th8di4H+Oi`kk-jpAE)fN2llzE)v%Mg zncHgtX`z@{Mm~X1hsSj$R#k)Sv0kE0pcrw1c$%G3jmGghr+Ij|Y8U%oF-K8IfT-G`R#c;~8@J)-%h}Q(~8X%ez!ig*E+A$oe?7#d_7{*FVco7Ywu(t z;@+RSFy|0-e0k*kcR^z{J~BM@AEf(bx?yENPInLP-x2*)Y=-|l&hg@jh*&b-m@kY+ zV|RdgqVo#Voc8et6XieK@1l)(`{-nawcUtPlgvLp!y}Sr5&#Ojo^NZ_Sz@n;S0s1a%_HejoxfmOg-zP~p|nVkGYSDU)mxtzEW!`$blB`RL}FSL)iGH59M0hQxv?wt!mEE zrv%g9V?4hXCSCDM%c=vCFtb8~GP3`o7RYN}#`vR4J2>yHiWz&dS8R?xD^=Lv7^zT61h99)7?!t`JTNpJk}f>J&}=<)>UcJrPkxx zo`mN7dB++ml84WJdo2lu-CWU0+ALTAwfyloaJ)eDZgsmUj#v(QQffj|DS2bZ!{l5` z;F$uNS~TuMKiA#<-r<(`(`eo-rXAssg)AOVHf|)yd~#F4ZoEh(-&duq2cj*oCn8uG z-B6_nfE-9x@sZ&XPc!`p)Pv%LJTB3=K`wQjj$as~6PO)ZzAg#yY4pgBlmvJdq^-Log@D%}0jbt<<=+9!E1euykah9E<;TCK=%n4I}DWmGIBv$qpJayh*^ zkmCIMt9BHX6JGx&5h{x`n2e|zQ2WTuK`~rQ0xOt(GuV!oCB&%>13q`M86so`P96jtB&LqH+8`(}@57PS^z9&9r-DzB$;pB^T%`6Uq>^dI`vq5S+#*Nl_DzbXGpyb^!u-*ym_*4wWrt)%Vt}VwD zk_waNfr4-Hvt_G?y{EkQ556{nvXq4#&PEZ?`8Pk42Nt5(2LHQsgzwg+ z3-zCArvH47pcx3xM1o$u7e7G~_BWfC_rb-2YdMu`!WSmWW)sHu5t^wL9A zUd}X!4_6Df)e{|2H&sx1>??bv;Nn-NG+t>?MyHTLId?e4UN9byy?#5ebQa9Lp!H{? zM&KZQ->t`%3OF>A5MF-Rp+K8nmLD4*d4y|ZPI4FD&L-c#D|kXobwcB^;~O9_+VOqN z$Y(XgfX}u$&OCkQx}`SkYw2qcfEc#`PHx1ZibdpE}%f zDw}UgayUe&wybQi%M(#l8SuZ8fL(ykAHT8tqEGnVb4`abU3QkD#pu<-U_|dGR4&^o z>1o>BeNu$1)1P9*WVufG*3-aG_FX&TXGEMr60}5aViQU+Q&U64RPWkq%I;%_@FS6% z{*YG9jXYg%TJ6qKf&e zt5M-m%4ei<@swko-A&`6s6IiUUWXgPtDRdZL`tQ39u`XdP{@nwT1|N;KBD9pSOj88 z!cHsJdJ6Om(!Y^Y5gmZ!MOxxUcAQ22R;4tC1s(8N!9OEy^uY;CDmOfXm8xk44)vNI zhlp$=(+1A9Qj$E+{o!d=kIVs@zLmz$V^?9T^WePv$K=)ezBkY>FISvC5gENmcYLGiu0=&*6+HBf$@;}d*|-+R z{`1d(W5ah9Lz5@P6)eGu2##%9OL#14Z}#3M>A4igC@LN@Iw+?KeyJ4I<^K<@^v+;S zaf!|H_>3;eHHxLZhb}P>VoNZzKT2d;UI{6RhSE_Dqt|^yS`2V_^QE^^WHPL$&SeA{ zFTz9(EAt6)u`$h{qBK+J9}TIlCSu9m>%CyQxcN1%;wB>RZXC95wxP=B(|h3w{2ap%3K94x!w1xNp2g!uv!Ii^$u6VS{?b zlCCF5iB2rDs-Z>79>iusJ@RzB4BJW*1irR){vL+!qqY$GdygbZC(!S|6n5M=93p0N z*d?cM?bpS|rV>gybLs3%9AHlFwheG!tG`ru1F&LcEO`DE+OnYsUUUGBbrw9ugJMh{ zP8Kt?xrx_(;S|rsI_7%Wcp2Wu(8I28Z3GqJjoqjDd_#dyE17*OaEc)oOx@EZvWG2O zgpfP+S@QNUR5yHObJF6LK|9FJP-2R!{b~+4 z(0bc`7w}qkFh)td{uO!8LZ?&klgodIc6IH#rg%&%y;m~)VWiJ!yV6M}nIBx#U0Poi zF~~}GTzT^<&H$ng5B-bWUuqkRH+)dQ$5=WbG-V+2YGUQKBwtjpY~8OuVhp_D%?NP4 zL?egbohs7GPO#5tkHMMjwfEI|S)%xCz}Z3ApI+TZ_NC#L0j3mAf&Y$s z1PA;IvTj?opJWXWvMZdt)P}UkHs;6OHQ`tCMdEh-meh}_xj6>apDl<;`>|VS_R`a2 z{x&xO*uqK}!v|Hk0f-Eia?GKWP>Gqvz*t52t&pLGy#MVU{zzQyo8kC|GKV^#TPVau z0TX-60+GX;2A~}9?k0BSs}V6tSJjqGkPo^+mx1@2piVdi;E05TJDL|OVqa{p;Qi@v zZUIQOc#R;5%PKq#hgozeotlZrj~?tEXUJ4k znJ&)ECkukoXN&}NSTI?Mw8JC7r%Z8(KTB5GqUut~2;@^Z;*feh*YaE(lsE6`)eZNT z1Q;dLs@K(3K&>O<>yDIRbf?E&ZTK3xRPdBsHtdA7ynO99mzz!{r2%?kIkpz z@<{ChWwVNlT-kU+I`D9D2D#2LQF&S&Z7M8XLh{9gR3Kq__vr zLG+K!0|eOsJS*3X5HOgSGwLv1M`fIkJz>#}dd!L?@;90V=n$*7u7Eve;;ogI% zy9nQS?H^brB5^o^fDNg}Wd>O0f_#bR>sD?{^FD^S0w)R=(3E6BSWCb2Nu`mj2S;(H z#5J+6<)ciwEg;cnN4LeE&|{-R7GFnI6ofQFcOzZ^lddO+u0rVZ*5)5@`1pZle!X{uZXk zJ3=$3f=~5g{30-2c?pHi&p_W@xl6k?CUr_gzE7*`W5TxapX*B%4yTHmpK#@CvihdD z=Q`j}w_Ih`jEWYu#(c8Zv#opR=-xJPtmh#e7AB?#0IaYT zQ@cgE+_OW=hc0L4ufQ~gNWOU_8TH^o-@#IWP{TfLk#85lUvlmH7TmQ9R#2+9->s%( z)}RHv%_iQNG7Xr3fnvlsbSTe0rPE-`P&2#!FWx$tt`6HL`Ad}3_< z87z$Uh3Fg6K|>h@O}@_L2#j*FoJDRIKcSfnA&s7H#D8M>c6@<#2l#2WOtzu*SFiX} z#OtDP;B(vdh-*sa&^2KE%w|*k14W@~%pT=(@hD0OYDt*H`Q!eO@qq9_*MyNSr-+06 zkif!be87`Bn#4+j>sU~U$Kr^~k2Pxn*z0E3!A&03x~25~ZL7g_q@o&Ux`p#`kAefQ zDFOhJ#(>H*{2sN&=|7s+9|wEepSv>xP=?aU2C*5&Ur=)g%P?DLL{CF6n4XypeN+n5 zj~pu>u=cy2u#J#W2wx|3$6;~_c>JH9m};!uF%^UExCr(dfzswwk2N+yCMKc2`iEVS z37`WqAc~+MAg{!p<-Zh~e(BsJEri6CPS_`uC?gg3P8#tGs$D_*q}=FrVd+6a#Joem zv%xaZ+PwrDxzGQD0#Dyl(1(4D5qM=Seg*EwNie7CS2!*f34pPvms0}Uhyj&{|PyrB8Git-^>g%~ib z{hiHAA)rpn=jO|judQLZmx|^)b#92>>;hS_bpOs{sNbKcWScnzFrgzsMztinoi7Q!^H#s-xqqL2 zkN>87#w|!LVYi|nBTw8e1IHP75ti6pt#uqJ*I1P5l}u%59IFaCeMut~P72bg3B}w<(kiJCyb8p5#a%dq(Xp`^ebEVCJ?RysVtsUQPPF=R~b~tx37! za!`r5`4Dy2$s+h!|?S=HNe&*@$51(2*oFZca+q?DnN$waSt=QN91wxgiw?%9U+lf{f1f%tAk zNE}(NR?`<^9yX8@u{B-ZTxTjqBU|4*GeF~+Dj7aW5cwn|1>I&a9+=%IuBm$IK;>wC z$Ya}=%edjdp#$Q>@P23n`8F?We*|EDW`e(M^olyvVw(xx&U~@_;Q5E!QPLi47<@Ao zjL=N3Sjq%7TF*hdB||N)LQxjaXaY;mUma0z9|b@6 zyKz_2`)Tn6d@@RtPl0=UohpMVXMgvPdeqwNU-a7s_sntpgD+)3o|p|T#9VI;=1+~< zC0qUbUTP%+ZQlpAm@RRKFuk~k_o(A1V`cIVNVjjlhY?T{Bg-!u>yhqx+t?}hi@4k5 z5ChQwYw>J}eX39g4iO%nCl44|0kRSNLh2E7sYIAR0oWdj+T1{(vHd{kQSVPva7hnI z(-jj%glBmQ3JK=yVV+PT&FLRFI};MDHU3b9<%1ix0j}zPh!Z!>B`b%uDijbGDtKdW zcu!ptYok3lp@ylokDDNulRa=X{xKsZ(+0~}yF-^($Q3dUVj?zA~A)YMWKGh zo1I>GB)Xq*!TEh63ZPuY|>qU{y`Li3}N z-y;xd?|RGXevmM9UaQ?5b%GcIB!KLzy_!0*2yjK-?*~)7E<7;P1RGK?f(pxgxWEcA zl(+8M(Z^LJy7PWsq|PGtf#4b>FR;N5rhf?q zx1AlKroqTi`{;|ziw=u(wISI0671NpKu+ zvqv5O1ZhEMa`je$Jpd-MK^pX2KN1+Ru}>;A5G%|*#bEZ=V)>VYFMi_Pcn;ksjyIQ! zN$xql!qR>U&QlNEE9U$1@nI-7mc<1Zc=c0P+vn}r7U&k25w`qd6wJxj7d?88L*Vkq zsKr9p{kDP(6&E(1R3y_+5pXI}G6Bk=miYUse)HALJ%#MCTR2L@T-M zPRm}eXTvX!qCr1m8PnGb63@8{$?|s@^$9Nv*hDMr@I8_8!n}-h2b-<%UAz4qV4f6N zoUB=I!pEVI1ygM0RPnOM6Q}mzw)kOv(~H$+G_P4Mv^$M9&^w(*a5wdV@Xp z&33fK9epAwCM5+Dm-|E-ZLdFgp6q{1QV@$|^V$j>hW~(e@o!2Q*TuIH2a7_2C^ajh6?*x-sk#tSlTfAzv+TP5)FGt$Zhq4IFRkF zgGs}93}4(tw^L`QF*9#b5uOT$c{cg?RFrE}+f?k9KRq`899~p_gVdG~pJS|D8{*S4 zi&DT06t$BY{TAuU2;4=BA%im4Y#7d0v!B_pR=hW=?P^(*?W%6@KF9(V5Fub&G`X;@ z;heQhtSVc+Q!Xiz__5w^K@*`3IQH?g$rj=j^LwOe*q`t*YaXXu}Oi zYpn*o^o?wNTS1LSb7s*Kzl3Y$8Q=_F5>E>v6!;>j1T`?(<#EHfnxY@#Lg$y_4IjN4 zL)!8WP_z^5izXAO4ucF0`muua;CQJG=Y;S3_U*);&#e7)tj3g0MANBOUZ3zW-+a&w zg0LOOS1AFFfBwzVZN*@Jyd>28ZJUj^!e-eD@mGUwn#*$Tu_ywGjl5%O(EMD=FVw^~ z@_~-Y?{4W(S+{OTjTjj!E^62nLkWXtio-+bO;lf19-IHWFadi*UlwaX_Gvp0OrI6N zQ6Zc6;zh8}g%J_fHSlN&Hv9X-H1*QLpGZkjG`@mNh0Brt(?qrk0Rg4riHpYz=O+^L zh3@HdevcFgt;jMNoipZ-ClS?|HQPa}(9d%!sg|jK{A0v!^Wcx#D!NPT#F|RF$UxLV zq2a_QJX6sGzPeFcH#W7XOEb6I>gv$ewqyStj2bR-YzKYP`HB3^HVT~?hE+|*PHN4x zC+g#lKseRxk(G#0VDs=poc!(rYJg_2Xu9T1fi7@TjqRxFfcxwU{(}5jTCySPwch$6 z#1_2UZ>1$C#~%-|NZ5&9t;E+u=Fwr0^l%#rx<}&o zegoxZ;{cpd zJG|j}@LBZTYS<;o?>Exj;-w7-SH$F%7nA%@P|qH=%d)YtmZCc2xZ9kTZb`Qag`M6Z zHnDn6ohl}Hi=A>me#U5~yF`X~ITaY}2$XA=|2F5;Js78PwF+le{(V_im>{!EO|jT@x^M%OwPx6=>SU zScI%z7yI5P+4`NKX38^kxd+k5;Mb>lMbeQvt@Mg&VKRW7ezI8`q7d>5uL#%d^g~e*jfr8XgsBCM84( zISjFJNO-|P2-&#FBkbvjzA4q_sePL&t!zSQzq+rgU-2T;&wy}?Rj01!y(o`~H3EEq z^Rk8oO9d_N3yn$Bxj<#BOZ6l_r3Y=xqgL!u(yI-qV8|mFR;@)IWuZ9qlXhCO+QLbiF1q z)x%-qOgf$`WhZYo!LvQ&H`=FP0K+TdLV^-$SOCm$I+f4wqe=}g7Lcwc| z8?p0-(UmD4!+FU;HlVN{c-f9e_{A&=o&ovhAABO9P zHgbRvdBkm}thZDvf&-n;t&nmeV4-v+OUjAq3j|u3c;b+R)8eMr43o4#jbGPnfiaM# za(qm0AF(J#p6?=os|yiTa3ytolX_g!4J~EJh*o03^rhktu89avlH9Zpz7G?ScphsUnYe)bT z3O+1kG`?qg3?+#=1>Ymn z$ul0rAALO(8k8H$sg!a8zT}Re5nw~%@7Lx8thvn*ekBec84T2O`q)88`u}0IoY6m- zR=SsT3h4n2<1}k!e_@M4Yqo3>9LFOV#>$w1!^=^*5uNkz@$eJr zG>(W2hfN#w*(5|5L;F;TmuG4nol3>XXHN;zHf)0hT<=u3;st6!uy2MsVf0+ro_oxq zeF%bPkIsLg(ixhC9V)iwntHv_7u+BPC1KG~ZmSyXu+`X}fZg6UwqYH>Rp&-n11#ewDvJUBqx{M+A0IK^2WVdQe-}$Vjhcpu95HF8a5F496e;vHV*j9QR z-nJNe88Fq!TAR-hps&V?d6KvPTK7ahGt=~@?>$L!m(i7D_^_3DDY0T7Xvb~7w`hA) z@D6m^T(}I;6R@!AGpJmr4*swz!CNREH9)lPa*zYS5)z{XqPMUVJNG;!#=T`gGPL!m*e$oxkEMUIofnE25c_M?d5u0851zUHe{*{~B_V~=#QK`{tqU2ln^3-Y^ zHZHI3d&OmUE{xQ1GK6PJ%P!=;gXJii_W>;^X>vpi`r2 z%ny(@Cbe-XJD|S$7rCJ+8_uJW+qd<%j}9Lv7@4t0=A%RehTVT>e?2IAuM6Wm9#TT5 zn*EldxM*Iua0zoCw(4RbSKif(-2 zd+Oauv<-OE|FkDG&o?OZ+7=G+I5`xr88BvS|X_#nIN(w&I;Y@BfdAC&5O8!$%bZJFuOf0 z4LUM}_8~rflPA}U9_{Dh-K;wc?lr5P%;8}cS|O#*Ht#K9YMqm6CrJY5^8yMdGDOc^ zSGq7-3!^Mfp}ntL=$V2`&oQ;e8koahKOG6 zFwlD-CZw_6b{te*v1jr6recm=b4~KOQ!ht|C*LzH=Jt@40C1?|3N~@Tsd(_z9tBve z?sf>1BWvPAHHH(JrU29Jo|`YeBp$n-VDn=K%y6N$&ddIJj-h9zw1-_sxrEszGf!!rr@^jP7)=w;qs{~__B4EuO=vc{d zaA%LwBH<$Myyjal)UaQGm4(RizkPk$lXA2I2lM7@hDd`u0<13I$yptBaEp8srIW99 zP9aNlbGnvksKvwjvHBGW)BAp;n5&Vc`h!Oi*oV#+1Ae+J)hdL zyM#G!3?X*qaQn;l^*$9xEU_AOW;Jp)zBu)R*nM=^)Hv6GFSEn0GmLDoxZa>YKiEV9 zBeq9C+{75btooKZFoaT+NNAZg1RvWr+IXDm{>4mga96lDAji-u8_w-tc@(fIu13xg zbFsu3`=mygEK_*BP4^`};IW;N`)t+h^|3jCxueCe{6DX8u{@W+qsDmNTKupmqUL;O*Lpd0>C?Uz1E)ABB;Epk?US`#BeV`=#CrNx} zcpxWmUy)}G;V7C_O!Ssn75D|4G6V3(zgnJNmj>TNvfrk4RajDAt7n>VnuMOpCuxAz zuC9Fw{g07S9)xd5<%F<9{tI+y%;~sz<|sGG{@T!rXN(o6F1L5FMv5xU0W7W&HR}^U z|6LQlp&4n#c@3cQCAi%rSW6Ko{Fc3T^h$vP_3s;j;diW<>aWOM5u(BG0%k*BS(Y>x zYeBRm(l5w9O0_g#qH4xgf^Z@H`Y41Wy76$g==1;YUGmq?*LX_N<}-oF$50d!r(om` zzqgx5t3rqb)v9da5vF@N}48w0$-=!Mh2t3SW&XN17liZ9|@(9_TRkjAqWf4 zD@QPYnn+DHB!1~PRjn&s9_gt`G@7W@-SrS5?$7e1lNfW+*d|8l{F%nkQ4(7=*!cJE zXl14oy)|aRpi!p(BW`Y=*fa;?6(LOCwUiM8b~*z?ul%CPY$o>V{G&hd&yQ)fqO=#f zoar~qNX?u*1qPO|JLZvUu*d?aRmGi%{Fv#XIGU=~ulihX6i;moJL9c`9nXcDm=w{pMYp+mQp~deNhKp&)l94Hny;rq7?w(ZVA2D!(G&ZxnOa zf+DH3r563UR9X$@qDQIZV!5VOKmnDfxK9)c+g!=Y3*2jeFZefrKyehDxL}nQjCHO% zK*~kb^}rCB@O&DBv4`Eb_qEOX8?Ucj3&=cp@Ts3Kcut8%EsMjPZPe@Hd`L)ZizUDI^t85h1JRotss7=Y8yv*IA(jr zN+D?Oufw9;7KOh&M|eUb>Ve_&EZzQG6|!fjQsVS5y?l0UCp&`t!@sog%ROL?%aCnm z@zg7ZsqF$tD7Rb2+N=Z32=1{A)jqUSW@mTNBtu)4(bz)Q1X)?d60o31SO4u316%90 zwiX$_2oWdTE*JvV>`M)5M_*i$+rO^o@@Qa%YOIBA&Kv_Y93FW;&gF8v(Vj*+;7F;* zR&~-}o!NBFLXS@@TS4~vgSOvV1W9Nj5&_`;a$i_HGcD#euI*9ofGXy#946Rohd;Ee{^^Hl@QH#D1 zGV(!)7XPgbps^Cv^}*~=;b9OBY$WB$o^ut&=m6;|Qy$@8ntyI8l}_rDjycVNgdPrM z$-gJ%A3yCk4cxInE{=*>8IZ%dnpYm;`36fagQv@9lH=dnxYp_zz3;H_rl`veJxZ1L z+t*KE!f&1;n2O}bX?}r47{U%D_{i?M9}0Te;$CPWv;ylTGqQvfizQAQchjfgJ5sp{ z$ikeSl>(~q`T!Gj7#m#?@kulzd62<+51iOXq&|5hdXN}Xs9%Ka^hT4n4zY)xJm^L% zNTGFZA}p7ED?d!*u!Y&%{4#qDmmo1rrU=8GaZmtcr$=WY<(=LM7TFN)upgl9#(OyP0^@eI(PfhnZGVAp0`~eZV+Oa-iqVGB!MNYha;bm z(EFzWeGYDw2_Cg>7Hg!mB*}kwCyLG2n#2Bl;wDQMWa0>wn`k{OcJl3bpm=xq?-}-i zW$q8*|9_LV0{Q?7*a40W-knfZ2^+y9>sm3WKkBs_XpN|!I#*Q&vd(qL=<}{&LeLa& zDJ9oA;HARI8W|&qK?r;v-1q7q3pvRu4MW3SQD{`t1!0{iAL@N8kQu^JeHUS^-^V~y z9Mbq4+1GO)ykpqI-RL{#LL&r~fXwsAs}7HXv*AA!$#7bLJl!WtMhYdM+6}#wY``!^ z@9Ci>62|0CwuRkUKn;>fnqAE0jLV)J2Z9|YICGUhTGG1>bt%kD@GkBk!R&K!#L!Yr z?PX3y-SZ00xDzP>RsxbolswfdC*=%r7rEBv?LK&oAGkE^a=raZ;mx2trIgw{a=_08 zgDI{%ne$}mzJDrkwhEb|9_9{aUx}Vg{Q`SpMxsFkZo!32Ho4eEs^ef|^uO=sM3n#i zn=F3Ha2R``!k}zdV+Ed6z3S5GBjC7%PLxBi6w7d`b_bzW4JBRQ2!+Yp_j3sn!ieVl zKIIXikiQcRBJl!@=nB2(^()@@ZGUE!Gk`vy(*zvRX7!qtTP3~0Z|TN zX7)93xdVd0#WFttkVFr4_CiI_$Rl<{{F*lUPhl&mE!+9q#8D*$F#j!+FetjbF4@4# zQT=mdMVdcPwG1&O4YDh14ckteA`7}2Yb?YjfdFRiwqCR%{S;CmVz%sfDV!!0#2NP8 zZk65bN=R_5w;e+h+mUfC%ms=AQ!zmN$&?(cF@-ynGsjv;kSo-hRE72L`6!Vz@}Jo^ zB?0eFcC1XKLD`3iWXJFCHYUP}FTT&J!YZ4_-uzXV4S5^?pKgE684*Q^R4z(ao>&-W zQq7GweR@)1W5Ya}W^nv-=wR0)(|;{(o7Yq6^_XvXMMMZrZsD8>8ytufnd%>f zn_z-t*X+RC%D%?MUcJaA%OLU@0kPC>sfL?m>=!i1ktj&*nn~LN!0ABx5URh!-C9&I z2A9gImPQ?XL%va74SA@L)~KUj8=$T0?9th&Z11N!3B4jy%v^a!*2>(=-Wq63)(}m+ zsci*~0)4S$ocClCE&G=)r;ggGJuC#^9%Fmosu*I~DB4~h*lc((GIdvde{*vF&vkLY z^$ocfF3R6GQ`CeXl_Vuj2OA=cpcXeSCkO);?5lhwY1#wiiaNKH%5O{9v1>lPz;TBX z`PaXZC^)4n-#Km!1LKhJ*ivhh!UC9Hf z_s~sL(k*Y+qR?v={LgFGQfS5o&V`0%h)nJoyM429=|M%i; zVhj;*s$e}?U02RETc5MIijG@-`t?IT-2ZW2Ns79W3+H*$e{W|jDWtXE7NA|g{YmTm(k*l&14uOKFDm^k z)mqo|6^$G(%oW1PoD`x|6s#SImC4>Lclm%&qasegqZQi+xh{Wi*ItGOFHc1GVPZM` z8IYD`W$I5y*@dxx%*$2QnW~)oaKoKPe(kM5^o;Snn>yr#piAfr#`NN`3USgOn4v72 z02O`F8Cz9~H*z8Dv_#76o$)^eN_5tzE<0wgE-Hcb8Jdur0XoFRtupK&HqpyL1!ti` zv`Rc2I*p?!id)dMdLcTl9OuXqaoRuF?0GCxdS$^H<(}#J2L7E<>1=E^r(!8fpUb=E z#*zZoY|nl9>0ja38JLcy?iZ4*ZcY}Y7IuzJB-156W93|}wA@oC9O%;SwsH!;%O_FV z-%*4Pkhd3>O-2JeZ|~zYX4(UGCjKaBiCx5nh;!F3N3V1JTQ!zFu2Nxzo7FF1#}wF5 za-u`6TTIYO8=i`InSJt8n-FHc*hXc0SwIU*w}dbDJ~mo$0~!hM>&oDp02EqR=eh{- z55i)az{R83W>pYlB*0GC#!9EoNSSyIxLk}Z6))B1mZ7XZ4)_izg-Q-sSa;ji;)Bri z>0*F}ZXmuqjVcjqm=EX!yw=01))b5)Wb>JU#NW|ci#Yrc?wQ=&+t^}FUcEe>taFlf%_N;flG@zqE zT5nc9J6-?ONaqdSZomOyj-7?_q4o~|J$K2)Z!fN&5;gVwVw{lQ<`QUdZr9mrx$M3? z*|bOgtqiB%0_1#ji?!M#kKKA}Za*d-WQ(*G#>f&0)XlpAw)_8jQiQy?YW!xG*5l?y z>*KgeQ+IpdldyoiBXfJaQvIW)_A=H-#T!p+2PYx;xx87WCG`oi{pO%s0+-Eb4KEJ7 zPM3LE(wU{Nj9^G4j4m(jMTs_m->?sr7Cq@@#p1;)+EgQ8wZVh_hZ_L{I;XbcskH)R z8O>0hhBAL*~5cr}Py;nV!gxOQp`v*L5k-ljRxAQa2nS z4i4yYRp0#TiTVQyC)dpW4R`rKgYk_HuFZN=P9L*w*Y->1K#vb^Uv_{s6RXCzgc%QY8Usw5na(DcN8ikFdKffC zNE$Xg)fuJV~ApyBPlB1iw~<+)CQ<);vu6Y3nX;Moxs565XC$ zti35Ed2=($OLkLUkmb@Ac65+FDe4nOnZHaF34xEMRkOe!K1)J7=rh3*SR(NQyZbK0He zwL6ah`>8BCFbI!=k{Wvz7O)fonX{?G*4i9C8QapjXrP&l59fEP?A`IjcnbWqpvEBzfVsj0`C!PO#(xczL&Ea~{TLB*rwO4ImqShYLDv7J{n)`*!h;9O6 zPO`!HZUFQ#8={=o()djJI}q?x$(%){YqH=t0uq*J-^nx{4~~)$wcmxwQUX9Gcxu4Y zI~s?YNS;eVAi-Klq7k+*fQF)~Z%1U+@lSw|eZ6QAw#5H_dr>2Tx9EMOdV$7p$%>do z?brd)OYsQc-w9?kQUU&UL7H_4Msy23O*BcQqWsFtZxg6ae zbWfc995lsm*<)xhJ)Eb;ua*a5#4!QS!~eo|pf}x|&v2~b4sAj1qwd@e=YYMDqyY^ySlAM4ECC&Yz+*RaOE6I{6 zaGKMDiWqz>gMS6QUDYfabL`q|Jt}gapz{UAMRzraRZx_LT5z#Mn0)lI~ zA{>~;>OZArsQv6ZimZ{Y+HwWT;JCMf7m(z1;pJdt?JH*9SlN@_)KCV%{)?HZ8|3x8 zlFoy^#w-X^M$f<`hAt8}8kpaWPd9^%q%0JAQ*9{9y=1=*l#iwmy!^z^P}Z%hWn=v@ z#8tVAx+ZwCE$cCj;88!DZDe66rfGZ57-sanrPwT)uw%78QdH@7^wp? z>d+hD0>C-W42%&rk%&?-{e{xp+AA|&T^2pL=AEs!z^&sIz+F?B&0bTvvP}gX(dt8> z^aK0FL)z#ptn-S*M9)PD1ycXEa^|URcvea4D#}s&%_*>_2)dLTeWesgSA=?&^L9fvdD<+O4F z$sSqE3ja~KwfQur>O+}yvt;54_L>ub535dy9y?7EozViPu{rI@c)Xe@!s1G)KbTVc z+AZ%0UZn4s@a25+5$|^Y>1V4p2RAN2Xuffx`(cszlplU`K~nW_Y^nSit6CDM-z3f} zs&h~i0hC2hznb9N{&JKS3c@wfNMz)VEIO$VidmtB)!5q5O9ulu(gBBC(QZFvUo2au zXIQL}R#9$Mx~9JxnCPE{89FuN15Jrrk%P@#6v$2fpqCLJr1)0pc^R6DZ!}R2`}MSG zg<3Hf@pX(R>CF2n^|IO5@64!ymz0TblRO^R3px$Pf&9wZlYLM&_P)Nd&Z@j10*uja z899EQx*A~UNr1FY7eCT~i~7$cx|t_}!13l{uwr!Id14i+O6!_(6jIJ19DcH4T`qZF zH$Qe&Jl6bDW*R2lNMm@`UuInKz9uo^ao4eBXF*$_0m_Unruq%#FL$}@^JhC01GQm{ zvJ^1jkA$+X-s}aRboqlN*MHWbS#hVQx@TfQCL^(ZJK2#~j0{iId>tU@XS|JtNr86}+`uP{1UFCYm8;^`m^*gKZ|t2@k>3@d z?jP$0|Ku=klNS_f_#B2H;#u6UwO9NdNEmY}_7_Hl@eI@40`I|cr%|0Q z$4$!#=xTslQBt^Yu*&LadjD0FbB003lYesbyn%Yhzh0lVSc@h3P4Pn_f8IZokdp?m zZN%A_GxE5FInKX_Lq}m?vzD9y&T@raFh4{kHI<2r>lmKHPZ(_|uYl|#J}nSIWt#{I zdo(XPojS_?r%CTu8MU$xPNHL>t03$$Q<#~O7s>M_cfTLWCt2w6$%Yn~XIBA6quFy? z#@ugvEr3Wsdh=xI*R6V4BFhEvu6X2(XcCR+9WT43yOMOtA_)fI!g4;vadCX07lCXj zp0bs)dm=^d#}NUKugOy3F?^^FBvyI1Nsezhv)h-FeXflwcH||0-d)49K=+Zp>Lc?h zPBED!UbH%sW>m@^^ge4sIYdsl(*8xt^>~|IpBbN9@=6;)$)!iIof4l{??njzdD%Jf z=!w6`nSbVl^4#fwiJih`mJU8UQ$6#P)sG%}cdl41C-~yzD@I6tVl`RiOjYVnsVAD& zp&jC`&3FnG)+99mly=^*Y(<(6z}&T!&csVTZb(*zK)BB*?%xe_5EWFR76#r`ZW%1* zk;m*J4WS+VofQD$R_PZLp|Dnres*b9`-iglWLIm1C_31kwQy$D7Kjw>*Uear$lBiL z^E5f5D4U7^tHFypAdyN;#e1iG)XZtQ?g^|da^+2nGJ3>kF9htzR#<|CewTIXC3%P- z+BFlh+&Gz0gyU^I=1QE6F~BuY1FkI6=5Sh*mmu%lY(Hfs*XRs3Ez#0&z@65`4k#ji zOjEU$hIfQW2|ag9Me*Gbax2Uy(1(7G63Cs8wI4tDWw{YII>q#Es>QECF2id*#PknA zBGo)%GvoTz^*D>!RqLr+eNelNY7=%ab8!+Ub=PO<%vdj^GwFi9pT6?dBd|11Z|k@Q zVz6GCi$6~bD1l#%Nhqo3gl68!j*Y9zYlENWK> zPxZii0pcg1Uc6WF3R@#QERHBa6+?8_$by%wbvBqSBLEJV#1SPpYshpQS2NWPPz zZXcz|<8i6uHgsikyp7M}OQ?UfSEQfLGUPS`c0C=4rq}LXn`LgIjbse|Ko9Oe8%Lfp z82I0*|K?BQ3nEM!?b&91o$yIH&KJ*4sHYIt2nAJsY^n9v7IXuk8X5Y zbJldW9NHB&xz)xo)Joyx`~1VUY$3n!clx$b4uAJ`IIl`Mal*lV$&J5Kk?Bq!-84nm z`(x7-B2gi9hHZwo%+JrCzu4VMaVc=ML~(OPt=_dB<|fHvlu^z1Tx8-}LjP!Wi;t^y z3l)eFG|+WPToyOm#)ve;^t!dqjEJ(oVGr96I?Qg`la%6L9Z)-A48tB=+Hfu5MfrUQ zu)>l(AhnWmq!fjMV84fmqLt}j!DLp2%!@ml&}F{&A~PSEp&|aaXhk(kk}0D!!4s)IOx(H@0Tk; z*+VUDGY>zt-U|LDfZRyGbff?I0cx%uFTs;MD$tw|;_ zSgP|eNTB5m_=N*smGMciq3r`~@Z8uM#;`z$DI-hBOiswMD2{KCT`{BCs)^fgEdRNY zn-!qmYi{2^$H_eW5_#nH7akrfWf@Bequ+){}ZBngk(@&SXJs{KN4rte1BPTB0BX|9*4h$BXJ;zPduuzGiOW834z--u)}82U8PdkE54_%^Aya{{MggQHfZjbi(OaLz0|8+ zE`(g(N2pwY%uA4=!CW5ur9ix+87$cIXbqDe5eHsUV)86(DJY3|znLIeu;l9a83&xO zx{_3PifWPIsfbYf$u8hpkqf<(h0=Id)yof>XZl^vK9`9mk%T9{rw>4*>v|qvfqZyl z^;=Gg>qvxiM~!dnoJJ%ctUP5BA3^+~L7Ef^S+;BK*$eV+DRf*w`iHq}la0Ib2Ss z1Q}}un#}a+bM+|S-h89wea?NWQ?eqb<{-VrHX!R4EnlKm^@=n*#@-m`J1DlTe<=@L z5^>|3w?#6(_f!eSc-p-_j>;PD#OvLklT|{o-sj`$a+Iyo%h69v%`5birlvJ#eqztm zNEJMMwjX4Q)pHi@Q#`8B0;5bbcf=o*;suQ8FVNTT%lF$_(H#-Vro>G))FRz7zsV`0 zD@U_S#CP7_GVJ1;VI>Tp(R#@!^!mZsaoGOgdW_37xLmE}tujT#laCg`eZH}Cw=vBY zk){8ozcWikP1Ar6rMXMH|1;=VtU-0}TU+Yy!=NL}iL zNO&jshw$Aa!Q1mM0jq@z-XAE!TW$5|1!(6lLQH}Di}8QI*wB8fc|V54-;;thbI&_l z3L5IJmNB%_pMciD0cs}J_5!L9Q?t$2I}*b`LKDGI7G5bEVY1QUw73Nc#PDC|@`7s! zX~qJm63&;5Ez$>3th9VVn>QCxolCV>wi$2gR;9cu$QXb^vHT|tzl1Yj{nW8coivKG z?dH=8B_Q(BIbbC*-;@^vGttxlmvcR9EyzLuNvZ`OxW5fp&?58p*2Sa)sEg+#oVsEd z7{O2gYlKB9D9U;`kPxJpy&bJF7ciln0}0Vrvw^$jO8`7@?c!qqS|&$4sQ_?hW+p5^ zY>5q>E6TxC3pH9gvgk3gkT{c_?5Sh=)nVg=Q6 z88a0qS2Dn|jfqdh*}P#q!btg-c0>U<&Cis_jId+DK}sB3IUS`1$nGWl9F) zg+!huzw2eg9}#A`E=lucB;XXa`sn*tq~ioe+$$+h6=l+&1l#?joW`g+qvBxuUvAj5 zXN!e(_rz(4+v*vyd$)csiy{qLDeGYj2fm+53TvpOQnu2~_&@yU=CBPy9#D<7O${>@ zZF$|YjLsa;qDjJ&%Q>$9`a=c&%K%8g@ie~qXhjxi$&yk21rj*d4Z_#6iS)0-ZoWBZ zILe!loFf6TaUEXkS&QQp^JEdphMrV(Jlw-d}k7o;8Q^ILj;cqJ#~if3|W^cQ7($Telp0 zF1FOm%<-B>6p%2Se~iXj2Wti08*5{7--yPe%zY(T&DjFDF3rA47I=f;W>nU=dTYzM z7Q|FW^FGl7p-d_(Cxb3NzL&X)s1+H7;P6A7dun&KQ*NW7W>xp?Hq^c}0D|9+==;6`BquzuW{y}8t>#f;E7Ov|VLZtWN?O45tw;3qj*m=_^2 zWfh;AGj@RhU;HgQsP4f%S##lRTQV)fqHBzWQI>Z zrK&Wcr(+Y{co^*Q6S|0{ihPnqEXFxrD9+fDR~P=xEz0O|bXlG@-Cx86{e9$Hy5!4M z6C5*^G!r6^3}C2-@27>hVuV@C0R{Yip{-NZ+lK`&)Ezi0wVK-{*;5(Cx%A*S>+!-8 zw7jw;a)HlZqQbG8u^7IKx52XGszEwsD|GrvK?L3GFw$EZi-_BfWYu#27yl2Oo@u4I zbWNjjUXRqLUNL!u)-tDKh=}}KeM$+htIGwM@5L~{?hA64M^MPygEzFyZ-^(ENRft zkfS|PfSDh$;D<^D<{&lVo}wv3VQWUv4x+pW$c}NHdbZG9?uID6ApKs`~bx)RSLCuCw2Z!9b@5 zf4PnhYdD0zll)*q6p}OuXv)k4%UM%P&T>cgSqpL-u?dnC%m0zl18~d$pJIu7RRxAN)-Ot6U zoyFNw!xq<>{(_ig|A5oE-W7dhdh@P$1>5scG-_y@!dUyRQN@Y52F_nx*4j|GWxcfA zsYBabY-Bj_@Kn&RKs(wG@ribCvTHH9hj{2HxP@Fi*tg#+oNqOzOFZqe!=0}FM ze@e1eeuLi71v#;kPn&fWbI~;3R?~OaTA-wu>{ebf{+p6w1 zduXK5^!wu5-?X3-dr(eb?*AV(*|5EoFIe|m_M4O)nIWJv`a=Qg+!JJniC36>Dx*Uf zd?%P{`b16=sZg&Q0OI)TyBw@5Y%$(fbHG8oC@MeQHvcf=-I$6}EX7wPsvb01dKVK_ zk*Bi`fbq6sdI>0Rg(=TsUS(fNF`60{azR}s^{$pB#PDO-M?9PCS6`-0!sLTBrRD5j zkMW!b9-M~=P#O8xA9f{NVQZP(0$%zUmNiblDK~t`Q>gwd}Ek;sF0Y0KiUUu#2bq`{%mjfVbz~F7@t2FO0_b z_8oS0_YuJX_bbv>U5=31iJIUxPsWQ2D5+zf`dw(@_iL>oo>mc?10wLI`bOX3u) z7G&lvdlLi6_@g$DGs!;al4}}Ojnp_Iv{p@e&KN)L=F|d+5_|gUwlX;TARy$2#B=17?HI;p zLVes2-x>C7>a1ATDjTz{gVip*795gpq+-WOm4y}p?vcd2$Yd}M$w>gSfC`wjw673+ z4y-(n@5o}DsL+KRI|iIieDVlonhnoSsZIfC-y~*me{F8M_*%AQYd)0mB5+LM8#7k{ zMgg&0J3TxaYoRAvO-y>Fn=s>yNVpgwA`l0_P2}iue6WiHXHwPsQm(zLQYqZ#qggV{b!;-WJ#mytZ;ix)Qd0L&J>ouB3ytD2qF zDvT%jaB{j4gC({a3Um*!x?)Q4sv4VF^>*nlM*y!;hRzC?Z^mQX;AH@1F4^MJeBgF^ zTwM^IFu0EHXwOL+C2m)bDQGJR0$Yt)L1fS@->K^sIW;lv0XM*IY%j~I6 z;}DOk&(>={6e$y*MOa`7)M?lGS51Hv79*M-jHKmXti$VqfdZ(ei& z0QB$^t{4>Bp2;Nfsx{uTA)J1isd3D(NxIH`)=OtL{#M=7UFPr`Dw?D>xkK=JT?;RyZPvOOLy?_|Cq_GYY2Vbg{442IsVc{dS7He}OF%2d1(Y@wC z;q82rwUGX}77G`N-?h+@Tf|2@t}FoQ@ke5On@H#&JU~+cQxIB_q?!kJ6=L}ME|KG} z0ru$UU~y|#Pf8>00;^3c2c>oupl>ev@SVb78CSi4uJAk{^e&c1_C$% zu)=TSl>V$G&0-xwA)?AH)#(?9vtEY(9X1=K9NSuSc&rQ0FGy@ z#djHxmshA|aB%nF7jNO$%UY}n9SZXH!VL9S@Cz_{h!#<-OU$^P+HOmrl{p7Tt5xev zQwP3dYI@UNTPA40m--4zFfsh@;G^IJT|m@+-%w^%XdYh84yK>LqtZDIbzz@lr>*~z z@+i0$A`IuvUd9% zA41vipq{XbrBxeGs17z72pkkH1)Q}lGUx0}a%)4#p*}_ft~B#c+)~o_04N3IPa!vk z1DGWgM0;c!YXmICm}Et18T6q&OB*+TU!czbnZh(EdzubiRp`x0q0`{6|GVYxzxcb8 zZ5ho&z<68*Fb84pkSc4Gz}+dw>9wo^FDv7`5QB4QyraIlGhERc%VR=P)LIKmG8}6f zL_xK?*|mj1wWe#~P=fT1(7e(|pN;>ydD0YOV>{OaDa|ytBaW1ceJ;M0cn0QWDZF** z4?AuZX9gN9a=Uv?p~b^2Uijy_4{>Ny&v}ZCn)!QlK_VAIh_Lh6hu*1+!IBe93{$a2 z%bhYXVQx@Eo$Q0Tds1?P^_W`%aZ#Apj7l%0q3s6tU zh?C;NDXkwnMEX7}2Mjn3N(aKD%z(b+Pt0=02^3OXv)2G)IUH_Gp(_F&BLMY`S<>BU zq_4*%bbUxG#+1bLADnD-Bg$f)KTo-1#j1EpHZNsrHE!3To4^_(lc&mdnwi+wGKHRB z*2Rz2w<^O;k+fU;pjt1#suZ&G;h39Ks)H>+{%{z+=&quCo;U|i@?^-UmT;JqV-sf+ zPYJ%X+CF^%Z~J-Ms=zSdTtYils0jbg#Cy7aJOlX7T_h4cH(XF@%$eVvewms;N#7V@ zIR3S?|LuX0w*H6~00tLYR9WBll+$yVs$0mceZ2#lIugk*O0u8(4A}pZuC1nc@qpKR zuCed$e0C38a46igH>w4;U*%+`&am(+HK71WXD-&-2zY7ve@TP)ySyyEXD!=DuMA$` zT675m%5D=@0^l|N`uG#Bi#7-TGLC192$Qr=CoEnB>$`;--imFuh8Ek_XE;|?;8vZL zOQ9Ulcp&oW@9u@;j&8;w1z1O#-AApsE*%*l)|Tyk@0O-2y+rq{!*G=!RXmw zJi^Ti`8Itp)<<+~zC!^4s{_^lEY1o>Y71W~PcL;jn!lyayR2!^}wejAI}YD#*xt-T2kk%b1sVxiE+1p2SuQZ)I%3*#Kbd zCr_PHh%knXc}G_bNsjZ$RVDuA+6Noad3RmO1pdq0qrmJSLeEp;raOP-lcSU_$PP0jQ2UWjc5p?N$cuRPga_SQv*qWFicE5u3+*JstQaH z27N+nn!XNlj0-Bar4W6KDnt?62v8+pAfP)dmyU(Fh3JpOyGA6>tHYTF{EzOSW>P(` zDYD9}q<3osl$oSS(Lsvf3CkBs>ySdTb!-W#bW|g{v4uhW4hZ7!iaffeFFp5KR#>~* zmD-pCYv^ITY;&CRBNN(Vzm^y&P&L>fGEOc>3H)w~x+jHqfWx-nKnQAL93Ni)bBuP= zmq^ZTO>GFf>TEMbkkYMeYE%>u!G>vGGokt!puQT=qd5{uZx?h-z~(k>z5p)ta)^+v zrix0&D&~MEz%gFK$#mq~-lIP+UBCO09*JLul8)^qZuSL`d}u9x5vZqLZ4^^X*IeH| zrG7%5@Dd(P4}m*ac$5Q97pxSLFi3~pRT%Tfj`xsl1KOqd^;m+qc|J}O=}2C)gI69tlzr)09+ zIy$BI^j6pZ77MCci}{5f)3JZuBd>MFPU|TBw+87RPihS(Rvr#P>nz5Kw;>YBmie#) zc|r2APeR}C11wVfH&Ms&jQ*$XUSVxQ+mav@(T}M~g>AnZ!{tnt;1M%BrF@$2KpCbe z3&c>~$@|;KUU8B^?W~?9abUaOfkHl=^nP0M3vZoy1p@iwiseH)Ikqu^Kq80OXSp7; z;_OTiAptv?e)IkSe`8%}`?JN9PMOMQ_97-1NTx#18iWdA+K1t1875G!3Y2XmMp{FX zpfZ|ng@(r9)EjAWz>8&?t}b&o^KJ`WG}TJK_vAl5s%QQji?aTQFrZz%`iX(~kk3%0 z!wnK3!h~rgy0Y5nY>hOi7!T&WdTN(WxmS=Z!npfO74s5Mm_c6^%i{?0{^Du$GJZ)} zF+L^Q34pasjwQ#b9!|i>$P4nF!{uM8g$NWO`P7;6(Yom_YAFb?oPzhv$08ZYhB~S> z`B<#lq(a6(qa_YM9x`t@8vvfOQ>k2#_Jo9{usx21Yuuu5k{zd;cUin=GQYBCF|33nmDY+Sf>Oue7A;#e}j6EvT4N?T~a<>CO0&v1#3uOf@t6QP4#BQiW5?I(GJ&p z-Tb6^3OsoNs2^kpE?zwhyL{G0;PYV+6Xuk3`DXlc?g*@2T&)?FJ(Q z85Y(h8I$BXAnC_$nF-mX;y}!zP28NZmD~3359K_4opocCY!L%W&ZyO%T@C8_PzGVR zmiRp$@&-{5cK;Bl5E2IJHQrGBAf+VzcKQyAdO0prFlHn1#|=zMdXlat zt$$0c%T7k3N{oZ=A*<6*AyI}!c||XFZY=lV$1pbJ5CuT_wq_q>plp;wM}oa=X?g#MkoU(I+az@K9Ioq?Jm% zA$_nl{0$AT?cDKKQ@v)f?b-}ZhBynRy`*LEN)5eT6 zGYfj9Y?|tEl{RQeb%0PW5^rvJH z(SDp|yAypESPL!+(QCv<|Md$u2B)qVrVnt1gud?Hvkd5&F+ShhUX$5ig>T>B6DWW6 zs7zIT2hpxHs$`0ada94Mz~_AN*GUdw!pqJ|Gl~Fm(U(k`ycifa5`oGDqT~ zTnVHvoGr<7j!aV=7dO7}W`%m}&!iY$v$joI<19&9=jK|{d!s4koMOyskYb=mjwyTs zaCaaFg@6i@`(0~&Dm4O_NMa?NV@5PRx1Y5W&j6f`(xr7748)$q_-DBt=jJs~LoUIa zA0P3dq3^$NVmq6_Icuyr2L2$OBD823hvi;TFFAZ77D9GGs4PUjoeo>Oq4A{&dHZ!NW){`QHd#D zKQ{#@o6cd@mO#}hzCPf>vHE@;7F1af*8qUW!=XeZ{>PaPFxKyeTfU+ShI(Y9Km60K zUwyp7#2Sb_TZYGcgF)KSV*3A~PZWGZ;U=mzT4AA5SdkuB8(MDutkS4Yk%|veyP~kX zRQ?dbI=&Z|xzUcq8)RF>;}^DW^RYK&RN*ccEd*}8Ra}M(QZ|QKZ4=ZhOo*F|yZn;F zq&3Vl0)`xASZ4=m5J2GGeCsLnH9c>&vdo5m>tWY=Uxnc(S7R5a26S9uoBmx(c+)*u zqO!o13d)b^r|?~Q^(>{lpo`y_JvGhOQtA04!uVCp_>P<3*%9GAoCJf^SJrl1{?rDC7BQT->D{HSN|nJ?9ERa2zdwqYtW$*4mxOL-g`YX6E=>|i^4_B zu*YihnNd9cP)tMf*Fsih+C~AO;^F9co*93q-Ju3EH$GRNSL5kf)d^mFd|Cf!u}LWZ zD?s-a%il#6a`~8?-wkiPdfJg!;g^>9z}D>h=-S~6>N%jUQWY}JcaNXH5FveArLQ4U z`lggX;_@{=Fz++5z%FSZ+PB1=d(hymyQ@!Eu%WD`WIV_fOccB&KXjhtC`)DsR1&oCTU(KCsKeaY#p7=5vNT+O|=8C6M6+iFW0 zv;eLWixSr>r`ElvbSWW*GG)$d<$B{s(S;6{wf2>Ld-b?Hnx+iZx>*im{9kFcN4SR= z0ItGusc9FyBa%o0lj7(fs3(v z<20u^EkzrGDvqnAUI_Z|ifHmVcqW(P+kOW=kW}$NL^hH<+xW7|Nb@`Q#Dw9Ngra36`VxMw z1tkWTE{j#&fZb80_M^A!<#iJC_palWEP(a!IQ2{Q$AG8r2@f?*z|rQAxGFCzLo)*D zDd6Y{#;J`{Fu9BO&hB@;|NmCQG+dTND%=QB{7;Q6+(!oI#MrlEr_}Gn_yddncPs4g zl8b2u58RwdBCe-xPl*N$Zv;x7c zGSJw&jP=1*M&ghcxPIt-!W?LYWzifT+~AWEj5>+Qp$}g6Sj=N%kI2Q%x63QqI#V&T zchsL%v)VncrW#_28wYP8dX3CI2U+L?TG>%mH$rT_<6#zV;I3=(xV+5juy>ZHh4K5! zFP@^*fbr5PVtpqFn&i?=CbENn-PQ`mw}6irD*|y2W3YI^SNKu?w)G4|KWNbdrtycgJVCD+^CvxU|}y z_m=LI)!B$1RoDUC^k*3?L$Nj8(CV&;86_Ds(fRL~-vv+3`j+I@&CM@Qc8EPls>fpS zZBSUW&J7pizA!4b zbW#Zj%l`O-0(aIqgH9CZl$X-W^m1qB8;yO{VK^CgI4fiYm-j2FJ~>)qi)$3@Xw;!9 zg(0N&`&DB9L)AHyed+59hO;0ee@gfUFX9eMt^yB}2DRWDzu%FSwQM$Wlfds!CSIA5 z*uM><=Y1`hdqBvGHuRVbHBK>O!{_P2^IVq&=s5m@R3%ULStT&x=vM9I% ze2Pmf`fK#g=CB*^9`LG9p!yGhHvFDF1~S74?K5 z9zd&$#!6ltuF#tQZQ^{IDy=#rVbxo8II4&Hmy1HZ5hZVm^^ek3fUKizp z;j<6UI2}5ny2U09?GXv3^m^rFA;P4gegq`f<_jT&Isz;{@ zRuL|=xQeScohoiki@m>P)FcF$L+2P1e!@lQnY1@G7f-$9k70}1Wo4yi~^e^Q>{DGr1aQ(-MshaOct z)%yKcv`1kDYFcHbIj!gi1#JRBABk(Dk5`20+KxR%1uwV=zjIX;JZLOAsC5Yj9F?_} z5WaW{2RjJt8<29S5uE!DqDd785^oo0Atd%uGsO3^aFp64T41N)TfqF&<$-fEPZ!q0 z$BBloSwdtM!jGeH3o(ptIY4=#y9b<#fsmp=0dZJ0xWIkHO4niREzVX!I)>7ziomMT zP~ePeglDg+FEmru2xVub$0iXB7BfNyf_8INA~$Wt$oMO1sF$^(eg_FhuWq>+64ceY zD@islU;ocn0@W=^sxxnvLRBCfsvjcZw)JjtiMuR&d<6%F{lW0k*JxSs1>f&S=0J#pCb|0mokZf|d8PTi&Tjx$rgYGTg6LjAfjblK&4R zC*mGJ5ns!<%@_1b~k;qfpY}Oi*ZYG&H5z zS*uet39lqVlv}csciT><^Gg9y!^iKTDD0}Py|ET;M(7JsL51vfEk$r`qMH;-&OqD_ zVf+=!`0Xop&w6^nFIms;^9-NPy(iyqC}$^5_@dlOLeeMfpZJ;vN4)zMQl5dlI3)R; zc>Ngz@M)&O3R9A|`zhSLil&g)uc$NHI4qMeZ`ah=6sD1t7XPKRDk}Xpj$4-3$_a35 zLW97dph$&rdaMsMq`_eQG?}n59z>MiT%}O%;$tjrZC1jbzq$@6i0xxSyoO-4_?gMl z%*R3{cDNH#Bbl^A+f=*3IvxC1&CHqrEQyVm`h`N^X@dew*l$+K;SnfymDSET^Tu$O z9v56Mpe>1$?Y?ggR~YSzv`_2Z!>VRjuQ@}rI`L5Xz@9h@dyD+#EvUDu)%-_`fsv41O_f-jEMT> z%Y~g0v}?>*0IAskI;Q-)uBQ}Zqpw1O%Xt#lH-iL0)RK1ue`xTk>9{DcZa{WTbdk6NX z@{HB=(&w0Hc<1wKX2^@@EV#?y7#hH?gQ!+GUwEuMaqhx&-tPZ)^Fy1hxU`Xu^ zZO$y#WFTXR)sDOIce9aI9WgNOu6Z#Lr>RT_+CO8Df1>RAR1;~Pe#<8C=;MQ>@|*uf z4M)q=5`zrkhuQVn2;u=1+E_K*%{DO@6w;fJ^J-*5-KsIer)$*^l}f%OkTMBuBB_xb zRMA^GNcet-JVg)XWEYk@Sr#u<8j@z0jHH0_jH<%`z;jIqZOvfeP{3?g=c_)2lp4Lm zEcaRl$KQ%X8;>$vI^Wo@|z_G`5VOM3F28h!r7 z<_$<*07_kkENHM7^n@f5#T^3e7yWS8k=?e@4p_cO;7xlDY%`7(d^?Zh?;q7!bzP`OrQvM zZysP8+vF#%DlhI9BkhpQT<1Re+Ohvo@-yJRV^_d)a+Jh)cO#?UBYDf7(=|A(x?DH~ zAi`uBfzmw(HZQS;V^M52IniY{bBlkQIsNS?WY+i#7G|)D9%fC5w=kE6hi0&=&Fb8) z5Nb1}gooPhAf1G(N|J9>R+7dfuvDh%taLOPG|19>NBi4x*t1HWBZ9_dv~LILxQTOb zsZQ@AzP=mF38$nNf^{gKYZgT|+Xwn5rWISq&AX?9Z*fADqLWTc2_Qa%d!7Deq~J?f zQ#sjRaP(6G{=$^%@Z9Kt2AFy|gW=u5iX|R`>|QFf&&fk8jz=!F9X^P~GFIXrG;rzH z-DlSm?FJH`yRMX7h06ORtWMH*e~T-Q0OK%qLo%R_qOAPxbfZSb=E9+W$KIaKCyiLQ z%dBD@8M7?vt?+fg&G4#n0RDD4ehZMW!$8>sKiob!K)9-|jCAO#V&pvMdmx8n`w&ka z#AOWBWU-V?$R8?UNV>ryVZ<^od{fGyj{PwGnF%(;mq`V3=H1OKvZZ95n+wqVL^@M3 zrB^wm9=zu;yLClx_2rvGbxbA!YQ`wtXrVwzB%L@y&#{` z;-%1|(xB#(cljgvSkQ6V;73q!w8M{G8qR+vNn1Q@)Wohce0+Z#{f-6de)B?%^x?io z{6RrhGF4;pHT*YY%#)F@!aipHEnuC|Ei|en-XCwXs7&ubULGad|4PQ-cTF|NT&tGx zMg>iiPTn7v0w~5WmgTPecyNHt-D)*E=&cHB`}K4t@A|NJ_I~~;v|D7A8EH};oik6q z6{}4+&s8>*4IW=(#5q}A7)<7h^JOb+yzN4DuhK>o3L|fo8jVX^PH+GCAcNpzp)EU> zKowANrjXta&Jy6xRK(1k7kUT)80mMJxXz%wCwurIhtO>t6&N z;f__Bg-2oUbbz4=DlMA<^Z$0yle-&ks>aZ|vjqnYo3Wz!MN`N7(QWx}TYa*y z>bDc9{8g#DeCC#J3tC7FzQTDq=YCf;i(LNkxXO`07z`Hqnl{p{sTJp4eF5_`v#v;5 zuk$9LNvFJpu$Pa@P*2s2G>KBTf}GA!gJZylcGoN5rKaI|uzy;v)~x%*a(QGq4Goat z@cMkp6d)tR95is>XEb3QkwyWuv+_eq`Xs@ppOU2$w~H=W^XTUBW^+18o4qvBAFDk) zeSPh(f*CEpVdp;i13Co8&3i$6I6+SINnY1^)_^d=7*ypS`CQ~q$cU4&(`rb^l!W55 zeq;C*IZs{QA{2I=@|`t<@?AYwJEHzKhl;7*2U&1YB2^Cl4SrvkFYuK);-73ptGN1c zQqcWM-6v3VK3qm*{Kcn$7_Q|bN#-eBS~ z_%ex^$`~Jsoc?HAaX%B+4tm}%wa%$V&B5aUCJF9>yZIVL_~6dDSZszW7x?1$EzW!= z=Fcy*Rn#PYX#%-Gi#_ecNJT!0{B|>8T0?qo3#}HGMYb>xrE=2*UyuswYbn9!%QNF1 z@oku7)S~mySY0{5t2n1FU4o)2fAxDVk=9S9z#ZOHCDjzQxL_tdEnSsL!$ZwB6kzXx z>xWaw>oKQ397c0Qia7E5&Unic>`)hzX2dM^$#ww6v5~h#6)npAi2;%) z&hpg>b9Mr!HIfxF#ULV=7vKj)OwPJ~0Z>Ph%EC5K~3NIZ7%kTn6XR zYyQ#y21K3yD%8SGqqvze{QF*|0x3jMF)_j(aWomO$V*1kOO~xS_r{y+BJ!qr_Dx-3 zb=S5)Fe`#d=}BoupvCM=7p*atu&I2vXtNaNMak6#5Y&wX5)f*G1rEV{k=8&38DpD@ z{bx(I{|m=5=#_@=(0T7ztySm%9u6+^AU%2APDkbHHtXte-6eZ|TNW~#VGv~OC3T=1 ze687Mm3`s922v2zD*qB#hoIJ3m%R=<==8W5fdnldty{Np33)MC0?*{I4P7`-3%RNi zn&(Yc3M+$QsGSEHAtZcsra!%ypKJ8?Y$fb%k+TEV?)$5xntDV|n`9rh#Y=`0Gmrf| zU#XKilzf+@b-Tdj>{DxA-9oZnSElfoBvLnLf~{TDo) zzzG7rUqLufOLI?6#*^q%Z@W&tn6~QY&e;q#a2T(}Kg%zyot#8fa0RDvt>~5)CgeGu zam0Y;6@RedXX>fGl-iEq9blwmbY;`%mqkxCfEB;75IG;)$&#gjnysRApiz;guwnjO zVAWiyz@Qv}2&6F#@ijvXsbdYJIi^55V{hg*kGy~nU`n-}2_R<%z7tDAiCFQR0Fupd z#BEh#Xz65A5|Ze#nniWy)Rt#qh}*3)iQix;BEz4daMM}1r@LkPo@_U~5nbhno8LMq z%I||?+~@jYF}VP6Tlx0oJfXp8a|jB7FZ=?eVOG?Z>H1;e_F|Qbdqx!0qdR*DftcPt z(3tYHtztry50Cf)(DNxmNM@mQW)CoOO3g@&_eaa;U90)iFAs&k>#HDE?mz5r_qOKu zDp@@9cIcVqpx=syDM}eLr(;C83ovt!6%srQFPh?!YL8*Uajz=}KN^~RzGt3Ip39?^ zh_f|0I(-6B_qKsjy&JH0{|CJ{J9ZOW^wI>HP*_$1^?~JX>D6(6<=FP78$l_ozlZ5H|{@FfK6moDS%I{rSnHCOiSuzpq009JzAFg8Swep(b2~ zX3X<<{Ly4gp<4u;+vrXc+N>&Z8q5S?wpC_YnneH;@GE(E{$PYHm^_{eAI3Mn9sl5r zszu+AC0kxQ*qAKaIQXZsh4&_gQ|NOm zY85QROKc9{8btXeaAtM+1$nDHU*?y`*0n1Cu;$iMxFmuZZTrNN36YNNMEueaHHFa$;L_ z9u2ja6>fH5dB@z6h$+v4aQx*Np}_FAX2$k+J2V$wbLDpdteW`IzCthUZ+bF6;w_{w zjL*Gw-4T|FVq3O`VthtKnbm{Oc5$GNwd%Q4IWOr=R(^k5*N&XJ)ALf>5KR7@8iA|F z?q_dYhYT9VrgOQ8Nw-?R^KzAAR72T_0xkNh6jG7Un1NpX0==vVbSjg)>v41f7||`X zp-wv_JjG{s+I!F*Rs2LxM&q~(iMw!wu_lRQ;**!rTns>nVk;SJ?Pv}U*E&S5faV`) zt8v|+)MfT=m0@WEI5*Bo&E2q*=&47dh$PRM^#E%sfN|qTIKTc*W5$Zx#mQpJ|4HEV$uZR=tyOXdw*w7y1jaf1#Vr_5L^d3qJ~ilo9mtbmX8|#k=b-nVREC=tEFBzBWXyx?LG*{ z9__PJMQu9AL(6##wGh#nc-V4ctC>%VCRI?*X!RG#kzzuI=K6eYq6{?GM$lFX0w$K| z#TE+{GOZ<$cF?|}NhRFUb|)nP4D=eZ#}bi6XAd6}vS?WRZEOw_&_h*bC~jQjQkytY z@ot3A@tP11EzTZjTTeFw3-sC6hqACr zhd6eW3+b;dYg-IYKKL?9I5pP1Ig~1nmNsS976aPdzg}Qul`yACuHw|kwlurf$Q{Qj-&gq{Y>F(zp_Jmo+l5fe z-Nxa-6$i3PRrz;rvUnV*ZgG2|&`;+^t;j#5x#(8W?0h;15z|n#B9qRpieRbZMpO}adKbEv z{%YKa(pFMh;(D7aNmT`yos(@kqEu(Kd*45|b05P_332_175thNd{7tBtGT_Gv^asH z6<3zVz>KpDWE@bqfQz|)SI7jMkgdW3Jgw+gue~Gz-fFZMOlJxiLI~VjIRg$@Og?}LA>l!#^u&DV;$^_0~QQD6noNQzDk_<#DqWm`aQR$~lvJ>ZiCLNnGb17drCc}FXeo}Xg>h$s2?|05lK->kjla>_aV@5zw{MpGEKgW+;Gs zIu*~smysA`6h5BI-l7=rf-fEQ<6#o}9R3t~1k0y#XgV z_Q5@I#SiGYrn=ToV$$k7X86kV%=`E`j7Q(M;?H9EkMwmWLw|da7713kni`dio&M*m z<$obZQ6BIu;uY^L%uh1RZAfmRveds?pECzuv=o<(U$5Xksn>OaKM(dlV_{q>G0QxU z6D{iiy2g?vISeNgk-HKIfT>^n3H1FvH9Y_9MdopM2)`lZ0)GOOra;9e2X=rc(=C&~ z?wWX7=Bryq5ig5vLL~14^NGBcymLg+#1pNb6_)wy zs^8o25A8WD;^Y!ghqXOSc=!dy;p(UWVi?u3Up!r97hH;=+puu!i9Nn8Mr;SPP)ZR+ zKPrS$l2E)CRa_!u?kB4{~jb7QtU4K&#{dP!av4ADS*8gwim$yw&m)V5t z>+vvK?6mni`t=vYg9gRe85oLP(?+X z=9)Na4^Lo|XEA@U%sC!Fndz~LC3;{27s52WRqiJ5XHYiXa$^{HWRFc1%>RJjL$K@Z zP$KTxm3wX?x8?k3$FjdmNqTk>B~ocCB1P~w@=hS{d0c&^KKJ#~98LZnSPT-J2?dCfsBl|>_2JFTG+^a~TrGKfx*#B(k;>W~!k6Z)QS~?U zL&5KRdlurCVSX#SG=9XZXdWEX-;8sTEz#eaQZ7{Nv&E==1lMku-tU~(bYcPfT0|EV z0g4cfp;W^5>2BA-mC)Uo8f6pWxq}gD|KZRmZtHpbd`EB<9>oTCN=KbVOt8Tj>%>Aq z;=Pz#J(vfl*X+U4RqEA`_hHhd;wKqC=Yyi32wY?cK~N7JEyv)HNXTI@&DyKQF(D%+;OkRy@0 z&$P)CqIWqV9?|vKj;#d(%}}J>3Iz`W=zY?xJqPOS8Y?T>Ur+9Pq9)A)7wXM~9?l5E zt+jqaZ?M&wS86CKK@GRt4y^#ic9p;afs#XBkS|Qd5{+4H-A8TKq-g!kWl6bdZS0G)u70Qk?VVz#?_B+z-b?>$yx-f2+SYcd{wuA^$;qv{;}X#n3JyL*b0h&jbn&me z&)}ezj53mXy-T?64y|{sl)0Zu`!B3OGhAGsRy^Nq2s?p|Q=R4`DqASQv7g0@XWA1p zN1w%q^J7rNaT8}C?~Mo#3^5=U@_!Q$N8En)AwyZaMnvbJxFB@}qA_&Pt-C0T_feDo zGi{0@%&c|0abv#J>=3>NvUmzIbOz^5?Jce>^p=C%J3z(xcE2G7m@pP<1uRnstRz(5 z;@-RDGoRyPvOFa`hH1M=-9@DwwkkzDH7$xauZu!ZAdWMTLrou2>mU#MTQ|+21_sW# z33tW-#RuPW#*n@NR81s%1&apI4=X~yriN*Di_#*!J6Ig=E$?vMcz;|OaXi`hg2Iha z=8@v*(FsE{!pDgVqo-(zK-&P+ni2UgHG*E;Bpx%y}%Q0q5+(mxsT;0=m z8PVwJV&tG7O^c=>6XY&o7~rp z=J0SK12WWaY0xYwwRPJ$0rPT!WK}*PODyZaHsy1>(Q=V%6A99rFA2Do@%63$Y8wZR z$S+ArDa_bK2jZ$jW`6AJFSD=iUg5xYvhC-1^k~4De!HbbVbYj3X+6&r_aHl>R;4?hSnfhGViw`G2fU3b&|tsUAD5N+y+XD{3Q>I%_md=dy5g1#9F zXUbG+ydD`y>kM8j0sU!-;F09JiuK>XL`E)EVSh5TF$A74C72W|LRe|Xa@pm!90hJc zil}B=K2QAKM9!7U@5;J*p6IrCx*wRVHv}wcLNM5hioK7Wk4{(2wl@L*`{lJq zPiR#8y9ny?3LCtvz4D%_UaYsTH&8Sy>jf{<|39tA1BBC@RH+Rt{iefWqYPaj{)5C4 zUP-`krop938m$W(Ik?nFKaC;Vm8>FA!4h_(oj+}9H(vfqXfy5p4qU`isDxuh z)vYS!4!#(IHKX^G+{CvX1`0p+>_H%)lieF!Um8TNMel!@+< zKv%3IU1a$m@q=)cNKjB0N!5F+p_Gym8iIDGvlGn>*NAyU|+F-mYf|$lLMoO zZR2*V5YaxcI?lPpln4~k#l>vL1@Hk^#bY{y=RF2{bjnb9RTV9yWcBnTZrI@UA8WzM zN5KIP+0WH7JIgFjd4`5sV!0jGaH!Q0*0aDUCss3sLRqJ)OvI3=pcYluns?A|)L48J z&01|Q>udh8pV)SqwMZgD?5&nlf{#5ATV6_$u>g>L`n^3Mua}`hCWfdn2oFp$7tw9w z#+!N-5MGA1Kfyi*s}9x!`%nPy2DhdgUj{UoFqW%k{g;%UJ8qyu!%o-{6uyR2wYwpG zzd3t?8U4JfRjdVh+5tPSODhaJ2)y{;XJ`g`l}Pc^wI2O68GxzF>u_z4>EO=2dT|i# z8c5-kq>yO1g_>^VI8{qvH-&PYAr8Hv3>FdxjZo@Zv3nm2@kx)=&gk;irzy2>6q&wq zdgDm3Odg~@6`#R*lCoyGIm1_c6l;SN>*i9qMZF}j=KQkW$;F(z)bmTFLh5Gp1~Ox> z(1aio)&V~Ra6N?TcPSluhOu(KTHu#PaBpJB&KL|HvKwJ&qv2T<*F4Z0pv#-Xi&9fW z%hLT2feU#g2vp?0Gs<;B8U9QhIHDdsK0lfZ9sqx>uB@6bsc<(_nf%0RX??Wv(i<*~ zn`mnGiUBV=;}oS37}G};Pn`lwc+Pu$3?Tcd4)gn=(931KE=f|yZA$1AsOFc4=RQW= zN^f9|I7S~?9hb)pfRo%?Cs=&|SqFbz;h;`&4b0JhbzGg&L0$`IjHk)Ks~d^T%Sni& zT+&*B#_5+eR)xql>fu<|uFXfoAR(hdYYa`DUC$yWRvc!6mK3HXJ+J-Nw39h13|JXB zRvwS=x3qbN5(|H(n{s_|6bQ5)DUIlim@czW06PT&xOtoKaFYts4eabMs=6Z8jk}2O zT6Q8{+inQDk1m=6AuQ$M=Jhy(Pt`wrq)s83Fe$cC$L z$kWLx!CAEO$AsJsF!6nFj2?~v{1v=zli+vE>L+mWQ1C(zy@e03D{b4Tid2r7qTLl- zj;o88|8j7ia@HYc(T$>SH}o8#a+XxZ4gpIJ9wfxA0+^BAd;^D$7Q-eeL;1loOPGtq zrwLT~7KnfiCe*fc5^xdpWc97{!%8uiT$KjQPn9X>38IT)2#AEi^Jq_!smGM4_sYjk zU?vwjB*}}au82LjzBjO}cP`Zf^E>`c)9S*rU^rITnG*n%I+U52e&D0Ki{y*tC93WkImugFkdf zurDiEqH{@@x5yw--#4})1!brZrHTA$gzwhhn#c}qqn0QvX&3}_Z+@}5l)SwC;J zYACw0;dz{*0~!gP=uEQUT;9?2G{auC3(5Cu-&bf@uni#cX>7e7kLYi^zn_v!x;{(Fw>0>F*V2go`2f>W27JH z*q`ap*5YIZ1?lJK0@)wNcZwLfW;sMZDyB!?usrJn8n+^q9mXpGh-0B~yUujdC;`yv z5M+87*JJ@vYYO8mFWN0k?`SEc`^!Qmj@;_h;f4dKHtQep;y$Ku9qs-9DQND&ujbuB z?3Oj?l?zx=z%pjau&r-b&I@;seJ~HPso>T|2Yn)j;Hp(5&VKqFomP{UDX{ zmM5Nwh1N5t!u}_qdlQ%Pt!NXW!fJH7ciftGSFp062K!n$N$uA(unA`&v{)Xz6T~x( z)}`1H4Gr#4u184F6y7PN(u>L94Hfyn z-=;xh7Vw!ksi<4f7|y=GQE$*l5{mtq3vnyZzQH_@i>6vBCz1TXpcnOv(=rA_lz{?Q^9Fh zZe9s{jn(SnO41E|65OD3183G4Krt#{9T9ty&u7^`2GxdFoTh!^?^#!VeC3Z>jT{s$OCx5ug%Bb?3<1ys)ue5m(Mv&sSaXK|DQFV)Wi(FdT^rOl8)Y%gG^;W*{v zbAT;_=k@~ZiRUtRAi9XqF1f)VJ}igXVB}9)5M)#)<=6*%NNem6CdK{+3NuvnGNgMi z+=QbW>u*m7jWtnY9_Od@?mCFZB@MMHi5b(bciAR2OpUSuS-D(Zi5*TXtWwHFP&3&p z2iM|%(bK(RQa_Q=ovU2${8R(IL1%K}BL3+6!U(@oH8OkBBgJ@!MKJic0&+ z%jdH_hd>J;)~q2!015`SGoJcs&Fd_?nw~!uAjcdBswL!ZWNilZC<-cK{920b?ZcT< zO5x3Rj>3c@G_|^kQSQ;bRRlyE0h~PxzXs_bs`$;FjkAM3QR#mVhT4ehPJV=8)J<5g z1)yFMK#GQ}#MaJ*HHy8mx*T_0k&~Xr2=ah>kCfItt2mwvExO4ysy9Hb_MO3>`eGF^ z`u}hEw+o?3@dh(8RI)DTUK`l$7mR7UvcfRNOi<);t|`_uieV(PUa>}~P-jUR=ORWq^9oQf+pt7lVSU$)zRSq;hBlGg@UmiLM*=n%@ho zwZ~(+vQaW(aJF$eFtg1(_(R(i)wMeLGb>I*6oPqv2tF)9al+i&mnxpat<(8OdbjU6 z7Brh!Ubjz+vz|))IgS>2n}&pAseBFa_#EIC9!w4X^jW0vB_QiT=eS1Vdgq%Ygq)Ev&a{4?z@$^}PYSIFV(>dm_g4A!+e z%~c%7oWg@}NnH-z7G0nbpP!#Ku9Ey~t0mXMRg%_+LBE(9cbcDR-L63!=(qmT@D>0B zP+*vXJsHUxx84XE1GePwdnh4#R0i+%sp}V}Sb~t;u3IUD$)b5~+VIW3fc&ui-u}bU z{4%#+pH|@8;zBMDh~^wVbU75mJR;-H%DR6(XG zDV+5&XYcCmh-Hw)rc~%w|L~zw4$8o|0<9Ux$vCwK_p2H2gyUKp$qxXiQz+b^^@s@3 z@o)nq!^2|iPMoL+jV9d9ravMH)^>t;A#-G%X6P)%?Fs7_1 zf;Z3k&OYSpw6=OgNlY{nI)*{pT2(W>q_=RCHz^`B;vi{4o)zL;T#M6$24O9;gcY#m zAmsf*&tLh_9FwF=(@BNek>CPzR(#b!#!H}St^a-4{DW6z_FUH?7Wv<5E@{B+IEoOO zbpiGjPvdZY^Ch_{ll;IM_3hZ<5q`_Dpfx5y%sRRKj*}E2>%W;R{EyT*{^&{Np1aX| zMw74~1M*FxZ58QBs#b>G-M8*%&GX!;Ndo=M=&{kajoWyc#^LsP=`~MAXxLPyjE089 zX`KPQd zF$GCV#>C}7Q&)k5M|uvv)lw~f(oCj#`|ya)F<*4C4^eG?;Hp+=niA>^gTxY5xBtQL zDfx9xsf9IPHh|pMEy^#i4)S34<%N}+k_l->f9}>?FD=1u1hVr}{YjB`N#khig4T4m z>1MqP%yi}yNLJGR?0KGEF9vGTJ&~xz|0#x8m&Z^lXWZvGR?FX!x}PT2;HAPa1Q>>s zt>4obv@heZE@XZe1+QYw6ZlAJzF&U%d??@(go>?WXCr;QF9b;CcY;wbACCH_rgBG* ziHvCL{QAVmm-Bv?^|1^3QO$c99iE+WC6x(zRZ!j!IOq1)qt0Ou^#G)}UX(+D-0DoB zG_)Y3CNtSA%?qH$7*)Lx{ch|pN()UV6A=`@E=pMgX8zMv7!b{n)PGGJe0&3yo$)UQ0 zYYpzi$DaCmqFA8i8S=1V+t{g-Hd4(>3dG;v8<)s{_rp1_UOoub$$-!{o@rRNC@rm-#VsA#(a2BfQa%0wW+5Im;6i}3>usp)Cuiu)-()FW>jmYj>=rxY0JhPQ0nKZ%glDwZ*(}8Y<}e(Ac>MHei%`am77{} zAn(9hUar{rIt=~N?gL(R_-5hTSXo$g7CT!n-mIqayO`$5(=+kS>!+NZ>QaBu8hL>l?Ew@`sRz^}~Thw9~0_F4NaYqq|S3+cm)#?;yB` z!I{iQp%;a%*-3j=dpyh-4fKD8it6;d*n@OtrJ@=`*%Kzt z>PS-MxD;nf@BoY><=&vMp+NvT*Po1%$O%QU-(jzwJ(?aC5p0(zHSUCvFfwxQ@}T2HVD!T#1wUQ(8+{d{BNK zWm34MMfgDGMXuTtRL_Cvc=V@Mm$6}X8Rv@4uvHR9c*zvN@xcHb0W5f;(UGj&gYk~q zX={f|1T&j#a}@R2mNONi?B@>Nau-+Pb>Fn;#l{b7hd=s$dM)J*S;+cXjGLk?0$8Bn z&HyyFSGt0x)0SsEVA1{(U(oaY>UI3^#>JOcdZ5p1r{cNk;O|~bZ2ZU9QW7lV-wzen z^ng|O2*xh1tJrd1B{TS-&Pmv1j7A~cmqbbRh8<2)R91TbXYJ?nKi&Ub-5bt`m4$6* z7Z^x(K5c6KX_#}g?{gXLAA8BsjPEKDy&o4BrwVqIw|UjSaUu>vNi)IY6* z?}Rb){94;}FQT1^06$nSodjAy7CGEKwWM`NnmPx@kz7kKD}SS3j;#?mn#JZgF5x2> zVyxyB4&4^C23SbC|4H>LwPpg$&`gWTh)7(0*3g*`A_CsxvEJfLF>g!10M{q!`IUJPCc$2B zsu0)kSw}uU#19pBtCcA=@nOiFBQ;M^-be_BuO+PcW7%uC-UsP(Pz~% z%@DU{xnq)TbguCrevDJrqc-Atb@97&9MKjh>$SgLQ2IWy+p19@v$WD9tqQEoaCQ#` z{e2^d64X=AVc#-K9V)c?M^^4LAX8?aH!N1*pMakP#A`7R6^uU@7u@~Pc+T^1ynBAw zA#;j?Cza{i{BPjw4 z8{Xc9!5d$M%=HEJ^h!4?J(^>GE~q`Pd&0(jQO!BY$yYi9dP?li>~OkJU)a3Uv#d)f zE=>xxX40eq@9e_R5S7HGLt<|ygsS81nd=u|FrMa+N%=_0-7iL+*y1KNRPG!7oUYeR zd&d;hs;a{uE0O*z2ah#?WWJZ_;=#pf-+7~hE?{TzDg{@I;F*9m0=44?i&ONNmTs{wN-ZJre_mu2|#P!a~{W$EEYMi=N2-Ya4W9Wx)=VD&X`tA(H0HhG0W<9WkqWfOZ!`^+DYs z0Q;lRaeQ-Mc?OXAbRKXYP5qzP36%o92OF`Q#IcHLOz1|yP4yl!7LSeQA^7T@I1N(8 zBgXDUkC_PHL9BCmeBw4H2HN3JS2q?})7ny1T}NaUPuU0kY69v~S@agh%bxA*I!yVG>Cmqm_Q>KKI{ zX?P&;{#P;imp&RZ4ee2@o18^Uz{jdT&i-I3KWwU23exKQMQKQlWo)V${HwG$r>JX{A;0`uA=RE+ z3Wwi(z082zp1{RcP)4v-<_ng0HlWXMs#;#ZQYEKn{q0a^w00Kpxy%MK&60K-gMAzMSQ2=y{Ybugnn;pn+3+~#J6O~PM~+fnMI);od@+al2; zso!edijxDfdiY(k7PyFJ!P&$n+0k?nC?3~3j1;fD2T(z$qcYH{X}dR~$JlSZ;=Dp| zjOu*zWON1T_%iW&I)XaAFQ=nOKvJB$Q34^iIYwH54H33QJ$TuD_%Ch28x<~?C65;U zcGHQYerm7F6};4+V(Tq~U@P{LVo@?N^y2IG2?#`69r?XrSx5=t9L;qs6f>4af9T*} z2k|GU9M(`kbQTRrA@}i!kH>kK>Ra$2XLb3j zb?`5^c0q7f|JKid=v{&1E&rnB$H@5EbbMQ>QEAsTE{a7Zi~>LM2K z`a^?A#Wk;!-fa!zybno0)@0!V)MTRB^%(no_~K_!y(;dh;j_Ae68!HZQ-+5hYTO%e z@l<5@eqYc6+b{E-WC*zpb*i<6Q zo+=8g@hBi*dNySF=cfEGW_AfuyH@Z?w>E_JCG$Ll_&khr*V74e*w8whH~>#PJ3T`q zI&MaV&<45!yS*1VLke{|5-!p;Ey8f8{7_5Hqm`P+Vx{q#Y-IuK*7(Aoe(*NQr{|wu z&n`b1x`AG|DRtYRXX|GVp{oMcwX#ospkb-`p!MMsj;GIv6!bae*Vtu;>tnw zRsZVLpzzP61IE`z>om{*idQ|$X1G!+{d?<>@<`YI_}9c6EwCq|h9V;t_Xww_?vY|( z%(Q~J+YHIHd^b7img$&t=_o6+8zyd527s6>h(qIzIb5<1DtVpt`$#&w-2vftb#5a{ zbN>kj%7ENYkhRP%m;^(J*noLn^ChgvjBoe@bv1m1@#(Te1`Z&Op^TeD?-5?pwvOct zJ`K+BP;ps<3svaY<{8;Yo=H-vY7$L{>mE{{ksIZfwh89~U zm;3X#hCW3Pn^jwW+}44^f5-gRK92HLd4e7Oru~71bLWy8dvPj=8*rnyP2==k)MX&& z0}?LV^{>NF^3hLj|O%f?YUt(qygls1BNz2 zXr?7~3N1BOgb{sWddU^8SH@}SHqgeNUaDmhH~E*Im+RPNFWIm+(F2h_MBF0O^?c%d$A4l=*G_!)+8&0fcUUoHU-}B>N4IHbQ3Zw{U7zDXhr}umOL3p zzxIy?6P>0rFi(*=7OTPwW?sk?w9x}T+>J$IVxI_~SsTZLw_o`u{i%?z1-pdVPfP=0 z2ptPJadRYzXzm| zrxzF|aazZZ)b}kW*0u8XOHi;n1{7&FB=4gE>Hu3TlbWM06nu0*{+HxkugV^!-YO}F zRV&MKF*=ZUgcB)Xh|bSY&iMz~LJDnCl@nxtBbAhg?$MahM`kWLM-5Zsy%*wq$iQ@K zko>`|!dCe0^lx4%tb5^&2PYPsmEog#^CDjsO8O7wI zjk`&G+zGFR5FRNTXZuimM%BX{1ml{M-9;fR4jRA6S|1;Xcd!P~vFk-J|LL>+Z*^6! zYC#`|7k|FK9#jYojCEoWeuKS;06{GipDmf5OIYuQ%<} zOJFh(9<_Tkz!TO5T3>k_e8>n>8vl2HcnZMB?LopL%4+jMX!me5ar6)cNURv-f z!SH!Czel01(w0llF&!;etu9p!rqYmf$QW#y(ReY@2KJZfrQW-skY7=Qzu)hOXc8d> zdk*A+p%+PFdA5=V2;o+mqjP8Bz*HlmLbI5(Vnw!r#IdR|bL%IKFN>>K13rFv~x zLo*SDB>$Lg(r<0HiXUEB2>YK{JT`vBA@7ERO%=G=ZjQigeq+%HiTeHJ954<%7Zcw?%@KjJ(&cKg?BmfNoZ7dAFn{EaCJegw~ z#Z31KL9PEkm3Uxi*GgK02jOis(HG%&O;CB|e>b{r)i_~DFW67OX;BkVr|%;3{nA!l zWhE~|+!nToRAFSm(?(XLPmTb6Htn#*Jqqb58@6J&$Uh@eCS_= z5KIRDJ+r}{5XegivD}r@o@s<4M>lt+bt8mw@b%0t5g7{*Ami0g=>fM0BEkRvnn<7Y z8>DXeC5DY9`p?VL^Bs2Qb=Ujy-n=7bx|oDo5y+AY3A~u3RR@M;IQ(RL;Ogkj<1DL} z{tye@i9E5iqPUj}f->a$bOM+>6<8EQToy0O;?zo}kA9AkFH} z3VN4-7Si3(y;lEt84W*%$SiR7M;YqnOLhchIkF&Awuo^o@SOUd9KzflhU|`zl7?P4 zGrcMrTC{Ly+9E;D`DpZ-gO1$6gC@AV1^`APq&|i1?QZ=0M)RWu29%u`z{Uya|9py> zR_U0Dpm(PcNe)r^YWpRr3A6}hEW_5xO=9G$=7SoY9e-!#Pb1zB!{=AYUfqVHV;6ax zyVcLPbg2Dmvxq}Icr{eK;G}%e*o7@SCA_d^FZ4aDm<9o26PoXyF!X)5zS?AFhvlBW z!J}Z`F=3I`MPVy^3rdfM7fSr=RT7B~8ZwzY^)ckFWo!k{CM>g63WV9Y8M`3yIWTMo|slkW-p#SAm8f3(J?A2cJ1?UIObLGHE+QhuHk!dE& zVZ@&)_5NH)1oO{TIrkBMG%6)dJ-juxCN*EsY6ZvSmFj2q@*J|0h3SwYR_;DyoFaHL zMgI2J^zI{IH8rB`Wr3oK>;(JRk$uWrC==c{ttA&U-u z(J7!Vk_K}Cg1|y22OIn#@d$-ZkG8tgB-|3p3N~wB-TR=^(Xh4GBXi=zA*G}%_l!(z$IRM(^mE0DKIaCay)uZcUy||!;5aSUvxWZ?#WgSC1}QOm zL~MyFe>1AFS~wwh&+ajt2OAEw9*X{v5L;LAOC@NfKcZ^#R&}81`-R|=D~vX29=d^C zw^)J<%LrrEjS58$j*9iplYX!as^@}lCBpPi)PSUvj5G>)u%^QG6~ z3(eSH@a)=6I1@Zpz02eegnh!zx)w-K;754Hb8nXoVUKs^9{gKOmt9ISVv5Pnye8gg zm4Zy{E9B512ol8%3sF^Z?Iw4CBy!XMk>C)-gDu>-?bIA5-iSa~fLzp$7}{XVnRDAE z!es=ITb0d1T1?jIIyZ1T(h3LQe~}AjL$1}6qdV}~xD<`ISLYjB0F`cMaU{BVBrH(m ziz>ovyC~p(k0MA!mXM^_$%HZg=842H3x^J&PNvbZz{O~Y#EjRkqkG6tgghWE3y_5$ zb9%UGspOcaI^1#h%6;n*Xi<6$Yn1vte~GI&?vzN5{-W=f1A;i=cyf~_z*K<3u3kHr z>voK3bT&aIAYBPo;Nmx8M)<5u=h@76Hjek{QK8 z$;s~s4tQ*}Zv09+wO{6(+G|yW-BSE#<_E(Lw%~}}_nrV&f#+Ll0Q#B^DZyz&q(Wc+ z(u}c1)Lu1&g#P5OFa%taXrc$J&+nuST@HvD#m|s0(Ch&g4Dso8D8td(Tp-Zv_eKqU z#j>mSb=c%kL=m(Y|6b2Z@+G}ieZV!&VaNe84r^scaQFf6X7b?9X-F0UwJw*{Gw0UO zr?GDaAIj3d3zjI_{COg18WBI3tdX^$1iDD9l{S(HaEI7ERP^#e43R98?DS~#1n)Eh zy=J{(BuAfM&?7UqYWc)G)(InjvGY4@%aSUnxARHR| z(dHXG1~n=RhRMe~9O#xjIHN*0AeX#b0{)70O(UPXbJto^^Y;Q;^ZvvFx!Wh?jUtFf13xI_ z?TVk#5ovX0rj^(FIfK!WT}Uf*JxSym;eySJ!4=MBj9$?FpvCpB2kuQ?hywe3 zqo+SBWGERqc!z~RsP0>tappvn^Vnp22{?e7*_Qd!IFE?J0;#*&)Lyr_N;0i^h$3ou zINZde-ZO*q`sR8fZW%~BuBUMdheKaJ3k@Wc%(X@9h2S6}qL(WS(ijpG4q=sp0#l=bs8UqF1s6(Q z0%KT-%n=k4YMm4*?B1^!TlFpJagk-~8eHWgTmOKQv|6C-+jDLDgYV5JidzjAy@NQ} z;f%{E+lQ*4vqdm*@GxtTK0*CS;OI6_#i)Z%U0ktI04Xsm9%_8lP2wn!HY@X+!BB`q zfe;Uow0{oqzk3GWiKWlwqEAo|+W( zl>BH6Yc}KYzTtniX{J=301QqPT-?7s6U8W1YX~BI;A%r(g^DpAk`_E*XwM*h$+60J z56~&$;9X)3ARc{mu`UI=nn*(737e7Fz$Dwj398O%d3BPGhEe z74%j^aDUBesS`>|)1mS$KZNXU&1*W_#gh@1AA9b^0%Pm*b#FbgDS}5b*IPqgKvs~c ze?Lno6}E71941g&<~uVHvw~&Ppi)aKdkhXXmW~i65SI=kI+tB2TmS7 zwEpuK^NQ^9d!Q0_lRYh1qXtH*3-LOxG{Sc>mCmti@ymv0VKNl8$J+heDvBnamxAxKJVA7#KIMmNpV zrq2ACjGv~pbf>Ii72zTw`ImF_q};VEQ-okM_~o)?ypAA^%GwK4W;lq>wNn9K8E+rt zlvu$5C;Ub@!wz5F!)Quz5_i+_jZvytI3*n|N|fJDWh2Xg{u-f!CcD|?P7mU=6}?!C zA6h#@R(OJp7VOuED)i9aCO;w(zX4zdm&XS(FECAsBjf$N1y0dcLxx$rJ+Yf%aH}EE1T{F1Q0@h*BA;1fO7l-6>_GZ9i4ygEUXp~ z1h zEeXYAE_A+j(AQ_6c};pNkqZ^R1k<=KQi)xvw8JhMFo0j0zmyWmvOzaDyC*k7b`YP zdTjkce0A$eKuwr`8NbJdzk+(?x;Vu=+=K1nEwn_Jaetzlx%85veyzYPHn&F!jrWz@ zZs+lkG2f;kz2^A{L&9_mNT!N2bFPRR=d0A_V|r_POqOx3`il}XVV68HpAZ<1t1-v` zouF@%Yd{-O@Z4CCY*PZNl28uc_!{y5iBn7%7^EYx6XAx4Xy1;%{}8PJ?pDi=yr}(@LI=#W%JikP;l3 zL(PPv2eiLUro0qDr$HR0crsC`B@zL)1Veavet?MoT8cI8n~KN0($+a2TES;Lmwt%* zOA*6lSI3|-dM@$9>mZpNfI|*mE*7I_(l2qDl!Uc&@oW6JD`dc7=Upem{5hXPYNe)m z@7>XE-Ij`=>VQodU-pV(FzcAA4fESxP#UU8adVjU@}=B~OIU|6T|4_k|Cpv_$T6dV z4l&a}=)V8W5>=%_I#*w3dUvBA1@(yofl~Dp#?h-MHQQ=TTgB!u1<|zkS#JloI5`IX zA1Z~b9l;5__Zo*qM{L7BBe>^1+R}i=Q&+kpm#6|p2A1Z(qeyZw;t6ob-{e)GcdLTh zse%0*>5JA;W&#s1;%5}haI>J1DS;^W&5L{KsvaH*2mY0y37BTdVA?09)s4NQCNxq1G0;Z=$QnxyId<)kdfS_ttHXv!tAAlGchH7c@ zGSqrOusJno`E<{H@$#IN8KZZ+a%ze|7q*{9%KLK6@mLST)6R5wu?_*Se5UQ5LZqF)bh$>3|=m>QJK8qhz*mBRV!h};qPpzrW zaxKunuScX~P{fkn+x;@(MWvnmQioo>Ap5LGUv<6L%in8EWkc`Xv45)$Y_VD-fl>o+ zTE%IC67O5+W>mqg34pIRLy^(l){s41qtiL(rzJik1n^2&UTO;}q)dVSkv#M0lT*HK z)WpQTCF4JMf^lLU_FDTH%F1YNGle zwz&^bV!Sd1NSwA`G+C5UBw>QG*{9-v|=b_&wU_qkJa*vZ|(q^ zDBCV{gJxDiJK_8rca9eL(3?(5*-*s5H@6R9+QCyNOa5&|xD;{xmIBU#7D2Bss*9io zeK04Wq2^+c%_bQze6g+aG$>;{OLj~~t+%0?Cw&rA5C1UdzmtLITGIwb?bTmp$x|2ISvmpb7Bv4cnbmSXJMf}N9(#H#d%^Q9p z9U0VI){eMrff^X#LCgGBV9VG$TkZ+@4`%<7bPpCTg~+ z$4w(LZ2s!XG$;HE4aA88(_m5Y9Mp@-Grz1h6`?9^=VCmhj4x2lGc});sNQ1P=UuEe zDyR5tpBbmZRel% zE#p;UgK2c4h+>+Wuh*ST$wlyU{G zgm4z_fAk(M=*($+0jPylSVgFMa>!vknR2NAEq{^mt&+rik2aNg5>(W`uI=O7g61Qg z^3kIgZN-JB_3QT{I0~OP!o84gb;p}oJbM@*nPGim}* z2|C2^w1HL!ybk$1ZG^L+bi*msDyjZ z4*!@Bc72cZ_w@JD9QtopHE5(;@T6YF!nd<_xcO16}#R6UOpyK=YO3!K^(R#R2SZ5Zg0 zE$eG|APeOrYJj{_EvM5eiq?jWcqzAeb4EDw77!Wh(#DLRjNS`*=Sy7TBr^j%#h(y- zPZgFkIu_s!%w)@>#aa|DO3_qh3Yw;a4FZDc)+|$}&1TYP#WVC20iF=_EsCTn-R8-4 z;AdmJzo#sSb9<_8hxuffMzB~CV4H* zlUNy#kFsqbT!Goc81>C{}KN-Irb zOKQyps{TE_-!%NCtBSJJ_~gep#dsBh+O$f~D0lHyGLnVM4uAAeZrz*Iq#|UpR34_l z^PJNZ6+}SO&{%PGz6dTP++ulFAjwCcD8y!wx#)G;4Mc`tbjzUcB7p7GE?#dWnDy?w zFpj0pcf`E2=OpLV0DuhPY-j}N{0V5l4I{KHC0CC7ZGMjuI00>dM?&n8qjO?`q#De( zK)L7B>Qaq#wH5l0`Hno(fTmEqjzd9fox`GD$z+LkZIvDS{kzz)`kZ4!P;6N^M+rS> zTfHeZdzX0Lg*jfgwLFB$`CkVb5%40RC?`L$YmsKv*Z}XewhLpS!@knRZu}p_O{kVa zHs2C!R-sX|0<6HEYj9Z4G1(P-N)#j*mY9j?gus_Dm)(CmvazLV*U$d!=INvq`PF80 zqqF9vcpXNB0>f0aBXQo9FVtE1iW6?Er-89} z!Lpvfh=E{e!8#^$nO(J>VZO_u5VC^9MR^4sru_<_$+_z4$2ZDIGF2c|>=qCv$!`Wq zOrwPr>D0+Pj~ABpKkCL@6E{42@^c@lGq^e4gI5{ULIGUi`{;N_63bhDfOgkCG*3wZ z@wsop&;gOmG=c??TyFoq>Q zds|dfRIEG)S#VU$z zG%NxoY5;|9(iZkt?3Gzr2^n=qVDEX{$VGS(!Vt%?m8~373ucN+v0<5Z(r!J;og#z* z;R1$ds248#y|1ebYuh+YIkOz#vPoGXcj1@$=%fDypmzSKj&S2(j84wFJ}f8jm{T$~ zdijNCC#Ro)N0o)usg@@8oN8uf6T>+rmG7FM z*8qyUq9(DS?!)gO3atzYO(teS^=T7Hu1_$4U#B9VD6sP*>1I*VB>E)K<;JQKmDbun zM&}RPDlwy$)*`&sg$rrYWf&UPCw)j-`F7@SJWbf_W<9J#KtqRzCnx+a$cH5MTR?NfPM%Gotsvcy{Sj7X`@16C6j^hh<&XGfMF!9_ zxREXlCU4349ZZF}5Aud_VtLJ*olKuf9~bqN$y*Caab9)mOBDl4w7I8~Ix|#ak6@a9 z2KZx@aiyAMAP^>)ds56;BP&EAI(yaY_U?JBXmOvPb0f>WJ`r787V=fA(JR;#tftz4(w>~6ogJIm zpkS|HLaY*Ily?M+QDbpu+)COqE{p9BUwFA&ddbOUQM~I~$alyR71sH{-%zrIk5DrA zE~%VbTHC`8WLTP+Os9in?jfMp%NGv`bJZ>!2(Z z(Az%}dv>7qT*`A%(4_jkf>5>Cgr~)D>4eD4*>r^0KlCLn)T4> zvd{}_M_=V&`hzPX1lFSefh4r#ApIIZS5Sj;(9*3ay({5c1#Ue@$Fba32;&0u_ct?O z)W{Exa?R_+u(V8W+`3L|Jw_rRuFS_SzIXd9z>tKK@ax;wYGYw$ymqN8R|+L{(>8xZ zjaejb?iT3It4l@W%lgb~C9W3_1vH@~Lowt!P!v?lR^D*3#}61I=%FDok~Y#e-0wq4 zEjQ{Vbb?}q^E~Ba`0LF8`hJ2J;QwalCZ1SU>27aposBQk#pg@DC5UA7_dp6*r34Wz1w9jamJJ=oaoUxVP zOXsVt*?1BfH16|8?!FScJi{`cmbT%lx+HGi(kyTL_6Zul+z+2y0er=btqs$dnqdQ^ zBl+w7CzjU#c9`^O_P+4CG{FF6jf82#fbcJaHedvye6U(3XN}OM+_-1y>EdCC>Acjc z6;9*K>F2!UC7EkRg9fG4`jEM2Yz3^{2Nayj@eomqN@iTIZ!t&H%Cpar-?Wh32$|vj z<(dvr!%lce_L@7QJDu&Qk?2BMR*74tm>#yRct;-~>HmhuG0AtX#l5Snb&788Owd~WQ=#FQYIp@G7g-W4CT{&(J{66E*v*!C{aWBae8d=Yj z?ACW19ncYmnEJ-*)V~Zk;7;B>4}WO8Z7FBbsIvLg2@Gb!(kb;fXI-s-_nsN-4y0XO zS$s?yfSJ}N12EZ3!u$plh?i%~V|-6^7Jxll(6zI)aML-WfubgH;Eoc|dwxY2m?~+`51U4@e|-AUXh`5K=6f@X^zPw zx*2=&MbAf(%tE~DM0ffLqxf$;ug+rD)h6xY(kUMjO*UF|xhI@c9!9v(Yc2}p1o=3d zm1LB~R=8Rwt!F7+7uc+-p8~TUpDy{=;BOuIy%aui^;jJ)1Y28|v^pPqk|KNY(P`e9 zbWb-(vRU~%+AEgL)M8r$AuRdv!1=_`Keh6v!?0mp{<3nv{l}-Mv1FNvtR_Z_~ea$IgR}|n@!q8r}h>~s(f6f#=VbOs%Zu{G{6Z5iSW+xED zLeq`>o4)+>^bEs3`4+>xYxk#wkLAti!obp(JR~K6gUvpINhX&8#9Q=ef^HzF%d(Lf z+N?fbrNJHRQwqsAi_*0C%uf5>Lk@^7Y4UD zQMI|?X8^y~bkBmIzhy&H)M3wrtCi1+62#K~gvn^R?$@D7Y@0J0FD37K5A?lzrDHT+ z$OsMyyS=_%T_R(KkIX`B_^lBn`}lGV`NQ$#@8n^f@yMrdHv0!7*c@${(M5Xi<#W3D zOrQJ-Fd~WOj|2J3^+J;_+QN&-TzHK3wrDofsEY0zZs7z-RU%X6xQY1mpg* z>Gd)T39OacpcbNi)+^;;v7<9ZU9RkbQfP`PUGx0rob} zo$6zYogz4a06L`6qCG-6)lQ|lwv?R@K&*Qyc~7w!P%5SQga(w?ZYt0K@dMgp?4+Pv z<>geBkN@XIB8f2|-(`9meD55l6Lf8P-+<+r)|pEg3bA#B#5uI(93e=cAKa@yXF+i? zYJpllScS6zF#jzLI8=EsZE_4|lAC_2)mt z#28T3W`=zB2Gk75MMwSe2i{Bfy~0U*;Nt~hLhnTOEH#DC&fING6%76WC7NeJhNgj? zZ$Rgg!Hb-y#A|In`Z1(jhf|iCCdKy!-4~fzYM7CoD@X5JbIu=zLBo{o_f^Y?v&xk* z^{5$Tb>eN1UKx}I5nymvgcOzq3SX)XdJG&612;ZVia?RZK%>3`>fB^4r zI-WpPRIVs}_S&2r(r$)J7L9?CibOd9P+!LV9nf3a8cv((+QOM&xd%cF?n~-rCrhw& zFnI~apSOa?E*7yIDWt2sfJ&s3Gt@s#>Y{txQ>x#4U{0lq*Z z5s`%UD@ z5}TRH21Pr&kY^ql)NPc2M7xR4FnXf=wh?FtldsB|QsD~<=V6M-&vz$Q?5uMP)ZOuN zj9@JNpgPUD@w(HuTM`e{U7Civkc6@FJkr$vGqk(@W2C~G+=NPwo|0Cn^eM~bZz8v< za&1(rq^g@yBG*oce2R=w$NfWz$9gZg)ZBdVK^x7Nh8Npw`P5`jHRuBt^SQp=D8Dw* z)d_pyYEleJWB8w9JO8O3lioA`sO@_47ejq-L)iImepmNl{MI>KCwnkPyLYB_pcze| z*l%0@A8V6`@eazgxeAqjV(I7Z#?KT3_v!XyB!HrFDJ2_6)$s*&XadoKAU16 zGQe?&++y9mh{G#{3d>aHrZ|BIPqOku)BibR6P_fD6O226;@t8)=ylshzD~bFFkF`i zd1!;De+AYqvc;*+?LP9?&}hjbj%`|3nhDLw@5ALLZcWbVh7aAG6eh@seEna(iuKS2 z`+t=$SNFULHD25-Snu`a*P08%+{i{KJq#EvUK(H>`&h(#u^5do048>VZM=FOv|2XR zm0cPvOx_T4=^yk>dxavNC^AJ;?J8$IKd~Sl7Q*UVVZp~^|MB)EG%O=4iE$SrCKM$t z4qZ%qijvX0A`AnCOC!>B-7cFpQq06`OOEO>KmD0(q<3mG2qiMV%xJl0qsEm$ zyP~;Q!yW(jO{><1;Cdcl$x@ZH$-)3q^AZ*UPq34+s-_s@`#DYQg&AkYir%<_Z|tkb zJnKQXR(h9vHp8$a;2X$%)pktsYxhnvc@=rexisCX7MnQ5tz$>G`T^H+2JHtu1R*%Q?K5tEv$h zO_PWaHB}^nR}XK6MIuV}`^4QFznqNR5#j@Vi|?|N6P|#joUgG`{3Kh1cjE4owO4_l zNY`|;&Sy!xL540<*2CnLjmhLwE`8-r%y5#H#xPC&yDlW}8hmY-RF4nAhpcn;f(u(- zvQ(Z%BTQ%i1k%IGwh;;LD~&UT{$v!uWjRiM&XG^JIVgUqcs*INlkJ1NQSIh=N^~hD zU~SO}!C6hrcGkC$6L^i`gU>cTe_`Ta0i=>CCWAjw0-BRuHu{!FdufND51>C(v$_#W z0E|Nb-&Uy}Cj1C17b14Y{zh1GESMbgTw?{34Q%D0Tn-~E2~V+^^n4`<0C&jBL!%U5 z(2OxCPtpWM{4wf=$+l$;#8HXm2b(b5(O$#S1U=JtgEby$&`@0kd2cpM!cgceHGmkP zCi!c7LmL}l!kR0wUQyIp>K_kwIt?<>*tCjlG%u?c@Ns3GNPS8)jRf1Zf zFyl-U%)U6TO@rGPcDx^SpM4dqYFGCssu42*?PQ!nqWNF~Neu5dxjY$A`?0HQq#Fk20%_XP{U+M3 z+OTX%XkN8Pw3KA~Vo1nhdu)h;VtJv z?Z|Bq1vn8H0}ZYHvoe6d>~=&zWO3)u+LA~JK1(BSC?KU&iN45>hi7W{XfJ(o^7LL6Q&CRc{F^0%Q}%5&LDuRqpOY= z%kVZ=G`uTxS*dHlZi^9ui_eG7fI7{0 z89aEK9<(}B7ZGIa-nw?R$t1FmlP?Vz$m>wHo1!yfF;MVTnf0~A$c4>k`0gpG2V?l; zg%ln?oXIb~?f}^ns12<{X&_vQaUKNifY3`Uj0F=psTuk)(jGefzf5k^Q*5wUz~ES( znNxvdtIK1dxsGvxXJZ)1$Al0h$^%-=e7Fd796P6XSffZoO^E>wTk?(qIv=B7niIsz0&_bsC#W@?M_c!;_X@3QPEtg!DYV8If8pvG^`2@;2Fp~Z&X&UE z2a6jw*)TTdQY9U&l}RgKk{JSSZB9IyIkjw*cWwZRCdfB7=I|<&u;52Fr?g87;9Qq^ zSePl@>jtyvUV|uj;EIEZT|On!u@D7^3FI(sCSCS%!gq;g6!9?6wOGm4TJ~!n<-BP7 z;Ke;SYa9C>ixZoWVc-A}qFOxGllm;>tO1irrp%ew8MPMEz52FNcf#4t02-^UU0NNr`H)~ z3DS7C3Dh#$n=-uu$|Phv$)lp`zGv7?zUc~pg=|NwXLVwQKHnRz

XY`Lnb7ng-3} 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 Mv!)Zsb7kw@+^h$w&Hw-a literal 0 HcmV?d00001 diff --git a/MikroMaster/20260917/20260917024001-Config.rsc b/MikroMaster/20260917/20260917024001-Config.rsc new file mode 100644 index 0000000..be00437 --- /dev/null +++ b/MikroMaster/20260917/20260917024001-Config.rsc @@ -0,0 +1,4335 @@ +# 2026-09-17 02:40:02 by RouterOS 7.23.3 +# software id = 2961-C4ZZ +# +# model = RBD52G-5HacD2HnD +# serial number = HCX084RAVFA +/interface bridge +add name=Bridge-Lan +/interface wireless +# managed by CAPsMAN +set [ find default-name=wlan1 ] mode=ap-bridge ssid=vados wireless-protocol=\ + 802.11 +# managed by CAPsMAN +# channel: 5200/20-eCee/ac/P(20dBm), SSID: vados5g, local forwarding +set [ find default-name=wlan2 ] disabled=no mode=ap-bridge ssid=vados5g \ + wireless-protocol=802.11 +/interface ethernet +set [ find default-name=ether1 ] mac-address=48:8F:5A:8E:1A:BC name=\ + "ether1 - Unet" +/interface veth +add address=172.19.14.102/30 container-mac-address=30:C8:D7:A4:6C:D6 dhcp=no \ + gateway=172.19.14.101 gateway6="" mac-address=30:C8:D7:A4:6C:D5 name=\ + veth-awg3vds +/interface wireguard +add listen-port=41430 mtu=1320 name=wg-awg3vds +add disabled=yes listen-port=32252 mtu=1420 name=wg1 +/interface list +add comment=defconf name=WAN +add comment=defconf name=LAN +add exclude=LAN include=WAN name=Internet +/interface wireless security-profiles +set [ find default=yes ] supplicant-identity=MikroTik +/ip dhcp-server option +add code=12 name=HostName +add code=119 force=yes name=domain-search-list value="0x03'WORKGROUP'0x00" +/ip dhcp-server option sets +add name=HP1505n options=HostName +add name=StartLife1 options=HostName +add name=amsterDev options=HostName +add name=MiTV options=HostName +add name=miller options=HostName +add name=amster options=HostName +add name=garage options=HostName +add name=domain-search-set options=domain-search-list +add name=VADOS-LEN options=HostName +add name=VADOS-NUC options=HostName +add name=MikroNUC options=HostName +add name=master options=HostName +add name=MikroYellow options=HostName +add name="=\"Client ID\"" options=HostName +/ip dns forwarders +add disabled=yes dns-servers=1.1.1.1,1.0.0.1 name=blsp.at verify-doh-cert=no +add comment=Kra disabled=yes dns-servers=1.0.0.1,1.1.1.1 name=slon2.to \ + verify-doh-cert=no +add disabled=yes dns-servers=1.1.1.1,1.0.0.1 name=slon3.at verify-doh-cert=no +add disabled=yes dns-servers=1.0.0.1,1.1.1.1 name=slon3.cc verify-doh-cert=no +add disabled=yes dns-servers=1.1.1.1,1.0.0.1 name=bs2web.at verify-doh-cert=\ + no +add disabled=yes dns-servers=1.1.1.1,1.0.0.1 name=bs2best.at verify-doh-cert=\ + no +add disabled=yes dns-servers=1.0.0.1,1.1.1.1 name=psrms.is verify-doh-cert=no +/ip pool +add name=dhcp ranges=10.30.30.150-10.30.30.200 +/ip dhcp-server +add address-pool=dhcp bootp-support=dynamic dhcp-option-set=domain-search-set \ + interface=Bridge-Lan name=masterDHCP server-address=10.30.30.81 +/ip smb users +set [ find default=yes ] disabled=yes +add disabled=yes name=vados +/routing table +add disabled=no fib name=To-VPN +/system script +add dont-require-permissions=no name=fetchCustom owner=admin policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@10\ + .30.30.10.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.10.pub\";\ + \n\ + \n\ + \n#\ + \n\ + \n#root.mnuc.backuper\ + \n\ + \n\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@10\ + .30.30.81.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.81.pub\";\ + \n\ + \n\ + \n#:local Script AM-GlobalConfig;\ + \n\ + \n#/system/script/add name=\$Script owner=\$Script source=([ /tool/fetch c\ + heck-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \".r\ + sc\") output=user as-value ]->\"data\");\ + \n\ + \n#/usb1/mikro_bak_rsa.pub\ + \n\ + \n\ + \n#:local FetchFile AM-DOHCert.rsc\ + \n\ + \n\ + \n\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/tmp/\";\ + \n\ + \n:global MkDir;\ + \n\ + \n\ + \n:local FetchFile Manager@id_rsa.pub\ + \n:local localDir \"/\";\ + \n\ + \n\ + \n\ + \n\$MkDir \$localDir;\ + \n\ + \n\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \$FetchFile) dst-path=(\ + \$localDir . \$FetchFile);\ + \n" +add comment="Global Config Script" dont-require-permissions=no name=\ + AM-GlobalConfig-2026-09-1211:58:18.rsc owner=AM-GlobalConfig policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GlobalConfig\r\ + \n# Script comment: Global Config Script\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# Warning: Dont touch this line!\r\ + \n:global Identity [/system/identity/get name];\r\ + \n:global GlobalConfReady false;\r\ + \n#\r\ + \n#\r\ + \n# Global Url For Amster scripts to fetch\r\ + \n# most be defined in AM-Init-Script or AM-setup scripts\r\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n:global ScriptsUrlSuffix (a);\r\ + \n:global CheckSumsVerify true;\r\ + \n\r\ + \n:global ScriptUpdatesCRLF true;\r\ + \n:global CommentsInScripts true;\r\ + \n\r\ + \n# Debug output:\r\ + \n:global PrintDebug true; #false;\r\ + \n\r\ + \n# Debug output for specific script:\r\ + \n#:set (\$PrintDebugOverride->\"AM-GlobalFunc\") true;\r\ + \n\r\ + \n# Debug logs\r\ + \n# Other actions (disk, email, remote or support) can be used as well.\r\ + \n# I do not recommend using echo - use debug output instead (https://rsc.\ + eworm.de/main/DEBUG.html#debug-output).\r\ + \n#/system/logging/add topics=script,debug action=memory;\r\ + \n\r\ + \n:global MikrotikUpgradeUrl \"https://upgrade.mikrotik.com/routeros\";\r\ + \n:global Domain \"WORKGROUP\";\r\ + \n\r\ + \n:global EmailGeneralTo \"vados@vados.ru\";\r\ + \n#:global EmailGeneralCc \"\";\r\ + \n\r\ + \n# \$ScriptInstallUpdate mod/notification-telegram\r\ + \n:global TelegramTokenId \"8390868324:AAG3_d1hfVR2M6pGAgDK6ZvhOe4J97nyopw\ + \";\r\ + \n:global TelegramChatId \"-1003631309063\"; #\"454403445\";\r\ + \n# Use this to send notifications to a specific topic in group.\r\ + \n#:global TelegramThreadId \"30\";\r\ + \n# Using telegram-chat you have to define trusted chat ids (not group ids\ + !)\r\ + \n# or user names. Groups allow to chat with devices simultaneously.\r\ + \n:global TelegramChatIdsTrusted {\r\ + \n \"454403445\"\r\ + \n \"-1003631309063\"\r\ + \n \"-5124482807\"\r\ + \n \"1087968824\";\r\ + \n};\r\ + \n# \"-5294757340\";\r\ + \n\r\ + \n:global TelegramChatGroups \"(all)\";\r\ + \n#:global TelegramChatGroups \"(all|home|office)\";\r\ + \n\r\ + \n:global NotificationFunctions {\r\ + \n \"email\"\r\ + \n \"telegram\";\r\ + \n};\r\ + \n# Toggle this to disable symbols in notifications.\r\ + \n:global NotificationsWithSymbols true;\r\ + \n:global TerminalColorOutput true;\r\ + \n\r\ + \n:global DetectIpAddrDefault \"https://ipv4.mikrotik.ovh/\";\r\ + \n:global DetectIpAddrFallback \"https://api.ipify.org/\";\r\ + \n\r\ + \n## Update channel. Possible values: stable, long-term, testing, developm\ + ent\r\ + \n:global updateChannel \"stable\";\r\ + \n\r\ + \n:global CertRenewUrl (\$GlobalScriptsUrl . \"certs/\" . \$Identity . \"/\ + \");\r\ + \n:global CertRenewTime 2w;\r\ + \n:global CertRenewPass (a); #{\r\ + \n# \"\";\r\ + \n# \"v3ry-s3cr3t\";\r\ + \n# \"4n0th3r-s3cr3t\";\r\ + \n#};\r\ + \n:global CertWarnTime 1w;\r\ + \n:global CertIssuedExportPass (a); # {\r\ + \n# \"\";\r\ + \n# \"cert1-cn\"=\"v3ry-s3cr3t\";\r\ + \n# \"cert2-cn\"=\"4n0th3r-s3cr3t\";\r\ + \n#};\r\ + \n\r\ + \n# Script BackupAndUpdate mode, possible values: backup,\r\ + \n# updateOnce - Update once as \"osnotify\" and back \"osnotify\" mode (i\ + n terminal run :set OSUpdateMode updateOnce; \$OSUpdateMode;). \r\ + \n# osupdate - Update if available and creates backups before/after update\ + \_(ignores `forceBackup`)\r\ + \n# Set `forceBackup` to true to always create backups, even\ + \_without updates\r\ + \n# osnotify - Set `forceBackup` to always create backups on every run\r\ + \n:global DevInfoIncludeIP true;\r\ + \n:global BackupAndUpdateMode \"osnotify\"\r\ + \n\r\ + \n:global forceBackup true;\r\ + \n:global BackupPassword \"Peskar55\";\r\ + \n\r\ + \n# SFTP Backup Variables\r\ + \n:global BackupRandomDelay 0;\r\ + \n:global BackupUploadUrl \"sftp://amster.vados.ru/upload/\";\r\ + \n:global BackupUploadUser \$Identity;\r\ + \n:global BackupUploadPass \"root.mnuc.backuper\";\r\ + \n\r\ + \n:global BackupSendBinary true;\r\ + \n:global BackupSendExport true;\r\ + \n:global BackupSendGlobalConfig true;\r\ + \n:global BackupSendScripts true;\r\ + \n\r\ + \n# Remove local file after uploading if no errors\r\ + \n:global BackupRmLocal true;\r\ + \n\r\ + \n# Local Backups Root Directory \r\ + \n:global BackupLocalRoot \"tmpfs\";\r\ + \n\r\ + \n# Encrypt Backup\r\ + \n:global BackupEncrypt true;\r\ + \n\r\ + \n# Sensitive information in Backups\r\ + \n:global BackupSens true;\r\ + \n\r\ + \n# User Export\r\ + \n:global BackupUser true;\r\ + \n\r\ + \n# License Export (not for CHR, will silently skip)\r\ + \n:global BackupLicense false;\r\ + \n\r\ + \n# SSH Keys\r\ + \n:global BackupSshKeys true;\r\ + \n\r\ + \n# Certificate Export\r\ + \n:global BackupCerts true;\r\ + \n\r\ + \n# Certificate Password\r\ + \n:global BackupCertsPasswd \"\";\r\ + \n\r\ + \n# User-Manager Export\r\ + \n:global BackupUserMan false;\r\ + \n\r\ + \n# The Dude Export\r\ + \n:global BackupDude false;\r\ + \n\r\ + \n# User Files to export, comma-separated string or array of strings\r\ + \n# User Files are not removed on backup\r\ + \n# Any directory paths will be removed (/ -> _) on remote file\r\ + \n# Nonpresent files are silently skipped\r\ + \n:global BackupUserList \"autosupout.rif,autosupout.old.rif\";\r\ + \n\r\ + \n# load functions and any custom scripts\r\ + \n# [ /system/script/find where name=\"global-config-ov\ + erlay\" ], \\\r\ + \n# [ /system/script/find where name~\"^global-config-o\ + verlay\\\\.d/.\" ]\r\ + \n#\r\ + \n#:foreach Script in=([ /system/script/find where name=\"Amster-TGglobalV\ + ars\" ], [ /system/script/find where name=\"Amster-TGglobalFunc\" ]) do={\ + \r\ + \n# :onerror Err {\r\ + \n# /system/script/run \$Script;\r\ + \n# } do={\r\ + \n# :log error (\"Loading configuration from configs and functions\"\ + \_. [ /system/script/get \$Script name ] . \" failed: \" . \$Err);\r\ + \n# }\r\ + \n#}\r\ + \n#:log info \"\\ndevMode = \$devMode\";\r\ + \n#:log info \"\\ndevRunning = \$devRunning\";\r\ + \n:foreach Script in=[ /system/script/find where source~\"^#!rsc by Vados \ + GlobalRUN\\r\?\\n\" ] do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n :log error (\"Run script \" . [ /system/script/get \$Script name \ + ] . \" width marker \\\" GlobalRUN\\\" failed: \" . \$Err);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# signal we are ready\r\ + \n:set GlobalConfReady true;\r\ + \n:while (\$GlobalConfReady != true) do={:delay 500ms};\r\ + \n" +add dont-require-permissions=no name=AM-Fetch-Generator owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \n:local srcFile \"AM-Awg-Generator.rsc\";\ + \n:local dstFile \$srcFile;\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"/\$srcFile\") dst-pat\ + h=\"/\$dstFile\";\ + \n\ + \nexit 0\ + \n#\ + \n\ + \n#root.mnuc.backuper\ + \n\ + \n\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@10\ + .30.30.81.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.81.pub\";\ + \n\ + \n\ + \n#:local Script AM-GlobalConfig;\ + \n\ + \n#/system/script/add name=\$Script owner=\$Script source=([ /tool/fetch c\ + heck-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \".r\ + sc\") output=user as-value ]->\"data\");\ + \n\ + \n#/usb1/mikro_bak_rsa.pub\ + \n\ + \n\ + \n#:local FetchFile AM-DOHCert.rsc\ + \n\ + \n\ + \n\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/tmp/\";\ + \n\ + \n:global MkDir;\ + \n\ + \n\ + \n:local FetchFile Manager@id_rsa.pub\ + \n:local localDir \"/\";\ + \n\ + \n\ + \n\ + \n\$MkDir \$localDir;\ + \n\ + \n\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \$FetchFile) dst-path=(\ + \$localDir . \$FetchFile);\ + \n" +add comment=awg2vds dont-require-permissions=no name=awg2vds-uninstall owner=\ + vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="\ + \n :put \"Uninstallimg AmneziaWG...\"\ + \n :log info \"Uninstallimg AmneziaWG...\"\ + \n :local prevDNS \"\"\ + \n :do { :set prevDNS [/container/envs/get [find where list=\"awg2vds-env\ + \" key=\"AWG_PREV_DNS\"] value] } on-error={}\ + \n :local prevTmpdir \"\"\ + \n :do { :set prevTmpdir [/container/envs/get [find where list=\"awg2vds-\ + env\" key=\"AWG_PREV_TMPDIR\"] value] } on-error={}\ + \n /ip/route/remove [find where comment=awg2vds-tunnel]\ + \n /ip/route/remove [find where comment=awg2vds-dns]\ + \n /container/stop [find where interface=veth-awg2vds]\ + \n :delay 7s\ + \n /container/remove [find where interface=veth-awg2vds]\ + \n /container/envs/remove [find where list=\"awg2vds-env\"]\ + \n :if (\$prevDNS != \"\") do={\ + \n :do { /ip/dns/set servers=\"\$prevDNS\" } on-error={}\ + \n :put (\"DNS restored to: \$prevDNS\")\ + \n }\ + \n /container/config set tmpdir=\$prevTmpdir\ + \n :put (\"Container tmpdir restored to: \$prevTmpdir\")\ + \n /ip/firewall/nat/remove [find where out-interface=\"wg-awg2vds\"]\ + \n /ip/firewall/nat/remove [find where src-address=\"172.20.200.68/30\"]\ + \n /ip/address/remove [find where address=\"172.20.200.69/30\"]\ + \n /interface/veth/remove [find where name=\"veth-awg2vds\"]\ + \n /interface/wireguard/peers/remove [find where interface=\"wg-awg2vds\"\ + ]\ + \n /ip/address/remove [find where interface=\"wg-awg2vds\"]\ + \n /interface/wireguard/remove [find where name=\"wg-awg2vds\"]\ + \n :do { /file/remove [find where name~\"awg2vds.+tar\"] } on-error={}\ + \n :do { /file/remove [find where name=\"usb1/awg2vds\"] } on-error={}\ + \n :do { /file/remove [find where name=\"usb1/ru_ranges_timeout.rsc\"] } \ + on-error={}\ + \n :do { /file/remove [find where name~\"usb1/pull\"] } on-error={}\ + \n :put \"Uninstall AmneziaWG Proxy complete!\"\ + \n :log info \"Uninstall AmneziaWG Proxy complete!\"\ + \n /system/script/remove [find where name=awg2vds-uninstall]\ + \n" +add comment="Global Config Script" dont-require-permissions=no name=\ + AM-GlobalConfig owner=AM-GlobalConfig policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GlobalConfig\r\ + \n# Script comment: Global Config Script\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# Warning: Dont touch this line!\r\ + \n:global Identity [/system/identity/get name];\r\ + \n:global GlobalConfReady false;\r\ + \n#\r\ + \n#\r\ + \n# Global Url For Amster scripts to fetch\r\ + \n# most be defined in AM-Init-Script or AM-setup scripts\r\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n:global ScriptsUrlSuffix (a);\r\ + \n:global CheckSumsVerify true;\r\ + \n\r\ + \n:global ScriptUpdatesCRLF true;\r\ + \n:global CommentsInScripts true;\r\ + \n\r\ + \n# Debug output:\r\ + \n:global PrintDebug true; #false;\r\ + \n\r\ + \n# Debug output for specific script:\r\ + \n#:set (\$PrintDebugOverride->\"AM-GlobalFunc\") true;\r\ + \n\r\ + \n# Debug logs\r\ + \n# Other actions (disk, email, remote or support) can be used as well.\r\ + \n# I do not recommend using echo - use debug output instead (https://rsc.\ + eworm.de/main/DEBUG.html#debug-output).\r\ + \n#/system/logging/add topics=script,debug action=memory;\r\ + \n\r\ + \n:global MikrotikUpgradeUrl \"https://upgrade.mikrotik.com/routeros\";\r\ + \n:global Domain \"WORKGROUP\";\r\ + \n\r\ + \n:global EmailGeneralTo \"vados@vados.ru\";\r\ + \n#:global EmailGeneralCc \"\";\r\ + \n\r\ + \n# \$ScriptInstallUpdate mod/notification-telegram\r\ + \n:global TelegramTokenId \"8390868324:AAG3_d1hfVR2M6pGAgDK6ZvhOe4J97nyopw\ + \";\r\ + \n:global TelegramChatId \"-1003631309063\"; #\"454403445\";\r\ + \n# Use this to send notifications to a specific topic in group.\r\ + \n#:global TelegramThreadId \"30\";\r\ + \n# Using telegram-chat you have to define trusted chat ids (not group ids\ + !)\r\ + \n# or user names. Groups allow to chat with devices simultaneously.\r\ + \n:global TelegramChatIdsTrusted {\r\ + \n \"454403445\"\r\ + \n \"-1003631309063\"\r\ + \n \"-5124482807\"\r\ + \n \"1087968824\";\r\ + \n};\r\ + \n# \"-5294757340\";\r\ + \n\r\ + \n:global TelegramChatGroups \"(all)\";\r\ + \n#:global TelegramChatGroups \"(all|home|office)\";\r\ + \n\r\ + \n:global NotificationFunctions {\r\ + \n \"email\"\r\ + \n \"telegram\";\r\ + \n};\r\ + \n# Toggle this to disable symbols in notifications.\r\ + \n:global NotificationsWithSymbols true;\r\ + \n:global TerminalColorOutput true;\r\ + \n\r\ + \n:global DetectIpAddrDefault \"https://ipv4.mikrotik.ovh/\";\r\ + \n:global DetectIpAddrFallback \"https://api.ipify.org/\";\r\ + \n\r\ + \n## Update channel. Possible values: stable, long-term, testing, developm\ + ent\r\ + \n:global updateChannel \"stable\";\r\ + \n\r\ + \n:global CertRenewUrl (\$GlobalScriptsUrl . \"certs/\" . \$Identity . \"/\ + \");\r\ + \n:global CertRenewTime 2w;\r\ + \n:global CertRenewPass (a); #{\r\ + \n# \"\";\r\ + \n# \"v3ry-s3cr3t\";\r\ + \n# \"4n0th3r-s3cr3t\";\r\ + \n#};\r\ + \n:global CertWarnTime 1w;\r\ + \n:global CertIssuedExportPass (a); # {\r\ + \n# \"\";\r\ + \n# \"cert1-cn\"=\"v3ry-s3cr3t\";\r\ + \n# \"cert2-cn\"=\"4n0th3r-s3cr3t\";\r\ + \n#};\r\ + \n\r\ + \n# Script BackupAndUpdate mode, possible values: backup,\r\ + \n# updateOnce - Update once as \"osnotify\" and back \"osnotify\" mode (i\ + n terminal run :set OSUpdateMode updateOnce; \$OSUpdateMode;). \r\ + \n# osupdate - Update if available and creates backups before/after update\ + \_(ignores `forceBackup`)\r\ + \n# Set `forceBackup` to true to always create backups, even\ + \_without updates\r\ + \n# osnotify - Set `forceBackup` to always create backups on every run\r\ + \n:global DevInfoIncludeIP true;\r\ + \n:global BackupAndUpdateMode \"osnotify\"\r\ + \n\r\ + \n:global forceBackup true;\r\ + \n:global BackupPassword \"Peskar55\";\r\ + \n\r\ + \n# SFTP Backup Variables\r\ + \n:global BackupRandomDelay 0;\r\ + \n:global BackupUploadUrl \"sftp://amster.vados.ru/upload/\";\r\ + \n:global BackupUploadUser \$Identity;\r\ + \n:global BackupUploadPass \"root.mnuc.backuper\";\r\ + \n\r\ + \n:global BackupSendBinary true;\r\ + \n:global BackupSendExport true;\r\ + \n:global BackupSendGlobalConfig true;\r\ + \n:global BackupSendScripts true;\r\ + \n\r\ + \n# Remove local file after uploading if no errors\r\ + \n:global BackupRmLocal true;\r\ + \n\r\ + \n# Local Backups Root Directory \r\ + \n:global BackupLocalRoot \"tmpfs\";\r\ + \n\r\ + \n# Encrypt Backup\r\ + \n:global BackupEncrypt true;\r\ + \n\r\ + \n# Sensitive information in Backups\r\ + \n:global BackupSens true;\r\ + \n\r\ + \n# User Export\r\ + \n:global BackupUser true;\r\ + \n\r\ + \n# License Export (not for CHR, will silently skip)\r\ + \n:global BackupLicense false;\r\ + \n\r\ + \n# SSH Keys\r\ + \n:global BackupSshKeys true;\r\ + \n\r\ + \n# Certificate Export\r\ + \n:global BackupCerts true;\r\ + \n\r\ + \n# Certificate Password\r\ + \n:global BackupCertsPasswd \"\";\r\ + \n\r\ + \n# User-Manager Export\r\ + \n:global BackupUserMan false;\r\ + \n\r\ + \n# The Dude Export\r\ + \n:global BackupDude false;\r\ + \n\r\ + \n# User Files to export, comma-separated string or array of strings\r\ + \n# User Files are not removed on backup\r\ + \n# Any directory paths will be removed (/ -> _) on remote file\r\ + \n# Nonpresent files are silently skipped\r\ + \n:global BackupUserList \"autosupout.rif,autosupout.old.rif\";\r\ + \n\r\ + \n# load functions and any custom scripts\r\ + \n# [ /system/script/find where name=\"global-config-ov\ + erlay\" ], \\\r\ + \n# [ /system/script/find where name~\"^global-config-o\ + verlay\\\\.d/.\" ]\r\ + \n#\r\ + \n#:foreach Script in=([ /system/script/find where name=\"Amster-TGglobalV\ + ars\" ], [ /system/script/find where name=\"Amster-TGglobalFunc\" ]) do={\ + \r\ + \n# :onerror Err {\r\ + \n# /system/script/run \$Script;\r\ + \n# } do={\r\ + \n# :log error (\"Loading configuration from configs and functions\"\ + \_. [ /system/script/get \$Script name ] . \" failed: \" . \$Err);\r\ + \n# }\r\ + \n#}\r\ + \n#:log info \"\\ndevMode = \$devMode\";\r\ + \n#:log info \"\\ndevRunning = \$devRunning\";\r\ + \n:foreach Script in=[ /system/script/find where source~\"^#!rsc by Vados \ + GlobalRUN\\r\?\\n\" ] do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n :log error (\"Run script \" . [ /system/script/get \$Script name \ + ] . \" width marker \\\" GlobalRUN\\\" failed: \" . \$Err);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# signal we are ready\r\ + \n:set GlobalConfReady true;\r\ + \n:while (\$GlobalConfReady != true) do={:delay 500ms};\r\ + \n" +add comment="Global functions" dont-require-permissions=no name=AM-GlobalFunc \ + owner=AM-GlobalFunc policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GglobalFunc\r\ + \n# Script comment: Global functions\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch, scheduler\r\ + \n:local ExitOK false;\r\ + \n:local ScriptName [ :jobname ];\r\ + \n#:global checkRunJob \$SriptName;\r\ + \n#:global fixCRLF;\r\ + \n#:if (\$fixCRLF != false) do={\r\ + \n#:foreach fixScript in=([ /system/script/find where name~\"*\" ]) do={/s\ + ystem/script/set source=[ :tocrlf [ get \$fixScript source ] ] \$fixScript\ + }\r\ + \n#:if (\$fixCRLF != \"LF\") do={ /system/script/set source=[ :tocrlf [ g\ + et \$fixScript source ] ] \$fixScript};};\r\ + \n#}\r\ + \n:global GlobalFuncReady false;\r\ + \n\r\ + \n# Git commit id & info, expected configuration version\r\ + \n:global CommitId \"main/18038/819287c3\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 02:20:04 17.09.2026.\";\r\ + \n\r\ + \n# The variables are received right here.\r\ + \n:global GlobalConfVersion 140;\r\ + \n\r\ + \n:global SumsDirAndFileName \"tmp/checksums.json\";\r\ + \n\r\ + \n:global Identity [/system/identity/get name];\r\ + \n:global IdentityShort [:pick \$Identity 0 18];\r\ + \n\r\ + \n:global devBoardName [/system/resource/get board-name];\r\ + \n:global devMode [/system/device-mode/get mode];\r\ + \n:global devCurArch [/system/resource/get architecture-name];\r\ + \n:global devCurVersion [/system/resource/get version];\r\ + \n\r\ + \n# Variables defined in AM-GlobalConfig.rsc\r\ + \n:global TerminalColorOutput;\r\ + \n:global CommentsInScripts;\r\ + \n:global DetectIpAddrDefault;\r\ + \n:global DetectIpAddrFallback;\r\ + \n:global updateChannel;\r\ + \n:global Domain;\r\ + \n:global EmailGeneralTo;\r\ + \n:global BackupAndUpdateMode;\r\ + \n\r\ + \n# Single functions, without nested functions.\r\ + \n:global MiniDateTimeStamp;\r\ + \n:global MicroDateTimeStamp;\r\ + \n\r\ + \n# Include globals \$PrintDebug and \$PrintDebugOverride\r\ + \n:global LogPrint;\r\ + \n\r\ + \n# DeviceInfo and Updates\r\ + \n:global IsCheckUpdates;\r\ + \n:global WaitCheckUpdates;\r\ + \n:global GetPubIp;\r\ + \n\r\ + \n:global GetArrDeviceInfo;\r\ + \n:global WaitArrDeviceInfo;\r\ + \n\r\ + \n:global devModel;\r\ + \n:global devRunningMode;\r\ + \n\r\ + \n:global devRbRevision;\r\ + \n:global devRbSerialNumber;\r\ + \n:global devRbVerAvail;\r\ + \n\r\ + \n:global runningChannelVersion;\r\ + \n:global runningChannel;\r\ + \n:global runningVersion;\r\ + \n\r\ + \n:global devBuildTime;\r\ + \n:global ROsVerAvail;\r\ + \n:global PkgUpdStatus;\r\ + \n:global currentUpdateChannel;\r\ + \n\r\ + \n:global ScriptInstallUpdate;\r\ + \n\r\ + \n:global DeviceInfo;\r\ + \n\r\ + \n:global OldMode;\r\ + \n\r\ + \n:global ParseKeyValueStore;\r\ + \n:global RandomDelay;\r\ + \n:global GetRandomNumber;\r\ + \n:global EscapeForRegEx;\r\ + \n:global CharacterMultiply;\r\ + \n:global CharacterReplace;\r\ + \n:global CleanFilePath;\r\ + \n:global CleanName;\r\ + \n\r\ + \n:global CommitBrief;\r\ + \n\r\ + \n:global EitherOr;\r\ + \n:global FormatLine;\r\ + \n:global GetRandom20CharAlNum;\r\ + \n:global GetRandom20CharHex;\r\ + \n:global GetRandomNumber;\r\ + \n:global Grep;\r\ + \n:global IfThenElse;\r\ + \n:global MAX;\r\ + \n:global MIN;\r\ + \n:global HumanReadableNum;\r\ + \n\r\ + \n:global IsFullyConnected;\r\ + \n:global IsDNSResolving;\r\ + \n:global IsTimeSync;\r\ + \n:global IsTimeSyncCached;\r\ + \n:global IsTimeSyncResetNtp;\r\ + \n\r\ + \n:global MkDir;\r\ + \n:global RmDir;\r\ + \n:global RmFile;\r\ + \n:global FileGet;\r\ + \n:global Unix2Dos;\r\ + \n:global UrlEncode;\r\ + \n:global WaitForFile;\r\ + \n:global ScriptLock;\r\ + \n:global SendTelegram;\r\ + \n:global NotificationFunctions;\r\ + \n:global SendNotification;\r\ + \n:global SendNotification2;\r\ + \n:global SymbolForNotification;\r\ + \n:global SymbolByUnicodeName;\r\ + \n:global ValidateSyntax;\r\ + \n:global CheckSumsVerify;\r\ + \n:global GlobalConfChanges;\r\ + \n:global GlobalConfMigration;\r\ + \n:global VersionToNum;\r\ + \n:global RequiredRouterOS;\r\ + \n:global ExitError;\r\ + \n:global ExitOnError;\r\ + \n\r\ + \n:global FetchHugeFiles;\r\ + \n:global FetchUserAgentStr;\r\ + \n:global FileExists;\r\ + \n:global CertificateAvailable;\r\ + \n:global CertificateDownload;\r\ + \n:global CertificateNameByCN;\r\ + \n:global CharacterMultiply;\r\ + \n\r\ + \n:global InspectVar;\r\ + \n:global InspectVarRet;\r\ + \n:global ParseCustom;\r\ + \n\r\ + \n:set IsCheckUpdates do={\r\ + \n :local isInfo [:tobool \$1];\r\ + \n :global updateChannel;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n :log info (\$0 . \" \\\$isInfo = \" . \$isInfo); \r\ + \n :local CurrentChannel [ /system/package/update/get channel ];\r\ + \n :if ([ :len \$updateChannel ] > 0 && \$CurrentChannel != \$updateChann\ + el) do={\r\ + \n :retry command={/system/package/update set channel=\$updateChannel} \ + \_delay=300ms max=5 on-error={};\r\ + \n :log info (\$0 . \" Set updates channel to: \$updateChannel\");\r\ + \n }\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local Channel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set currentUpdateChannel \$Channel;\r\ + \n :log info (\$0 . \" Update Channel: \" . \$Channel . \".\");\r\ + \n :local StatusPkg \"undefined\";\r\ + \n :log info (\$0 . \" Checking for updates...\");\r\ + \n :retry command={:set \$StatusPkg ([/system/package/update/check-for-up\ + dates without-paging as-value]->\"status\")} \\\r\ + \n delay=300ms max=5 on-error={};\r\ + \n :log info (\$0 . \" \\\$StatusPkg = \" . \$StatusPkg);\r\ + \n :if (\$StatusPkg = \"New version is available\") do={ :set PkgUpdStatu\ + s true; } else={ :set PkgUpdStatus false; }\r\ + \n :set ROsVerAvail [ :tostr [ /system/package/update/get latest-version \ + ] ];\r\ + \n :log info (\$0 . \" \\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if (\$isInfo != false || \$PkgUpdStatus = true) do={\r\ + \n :log info (\$0 . \" \\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :retry command={:set (\$arrDeviceInfo->\"devUpdates\") [ /system/pac\ + kage/update/get ]} delay=500ms max=5 on-error={:log error (\"Error\")};\r\ + \n :return true;\r\ + \n } else={\r\ + \n :return \$PkgUpdStatus;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set WaitCheckUpdates do={\r\ + \n :global IsCheckUpdates;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n :local Status \"\";\r\ + \n :local Update;\r\ + \n :local WaitCount 0;\r\ + \n :if ([ \$IsCheckUpdates true ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n :while ((\$Status = \"\" || \$Status = \"finding out latest version...\ + \") && \$WaitCount < 60) do={\r\ + \n :delay 1s;\r\ + \n :set WaitCount (\$WaitCount + 1);\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n }\r\ + \n :set Update [ /system/package/update/get ];\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n :if ((\$Update->\"status\") = \"New version is available\") do={\r\ + \n :set PkgUpdStatus true;\r\ + \n } else={\r\ + \n :set PkgUpdStatus false;\r\ + \n }\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :set (\$arrDeviceInfo->\"devUpdates\") \$Update;\r\ + \n :if (\$Status = \"\" || \$Status = \"finding out latest version...\") \ + do={\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set WaitArrDeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :while ([ \$GetArrDeviceInfo ] = false) do={\r\ + \n :delay 1s;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set GetArrDeviceInfo do={\r\ + \n :global LogPrint;\r\ + \n :global arrDeviceInfo;\r\ + \n :global devBoardName;\r\ + \n :global devModel;\r\ + \n :global devRunning;\r\ + \n :global devCurArch;\r\ + \n :global devRbRevision;\r\ + \n :global devRbSerialNumber;\r\ + \n :global devBuildTime;\r\ + \n :global runningChannelVersion;\r\ + \n :global runningChannel;\r\ + \n :global runningVersion;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n\r\ + \n :local DeviceInfo;\r\ + \n :local Resource [/system/resource/get];\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local VersionString [ :tostr (\$Resource->\"version\") ];\r\ + \n :local ChannelStart [ :find \$VersionString \" (\" ];\r\ + \n :local RouterBoard;\r\ + \n :local IsRouterBoard false;\r\ + \n :local RunningMode \"\";\r\ + \n\r\ + \n :set devCurArch [ :tostr (\$Resource->\"architecture-name\") ];\r\ + \n :set devBuildTime [ :tostr (\$Resource->\"build-time\") ];\r\ + \n :set runningChannelVersion \$VersionString;\r\ + \n :set runningVersion \$VersionString;\r\ + \n :set runningChannel \"\";\r\ + \n\r\ + \n :if ([ :typeof \$ChannelStart ] = \"num\" && \$ChannelStart >= 0) do=\ + {\r\ + \n :set runningVersion [ :pick \$VersionString 0 \$ChannelStart ];\r\ + \n :local ChannelRest [ :pick \$VersionString (\$ChannelStart + 2) [ :\ + len \$VersionString ] ];\r\ + \n :local ChannelEnd [ :find \$ChannelRest \")\" ];\r\ + \n :if ([ :typeof \$ChannelEnd ] = \"num\" && \$ChannelEnd >= 0) do={\ + \r\ + \n :set runningChannel [ :pick \$ChannelRest 0 \$ChannelEnd ];\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([:pick \$devBoardName 0 3] != \"CHR\" or [:pick \$devBoardName 0\ + \_3] != \"x86\") do={\r\ + \n :do {\r\ + \n :set RouterBoard [[ :parse \"/system/routerboard/get\" ]];\r\ + \n# :set RouterBoard [ /system/routerboard/get ];\r\ + \n :if ((\$RouterBoard->\"routerboard\") = true) do={\r\ + \n :set IsRouterBoard true;\r\ + \n }\r\ + \n } on-error={}\r\ + \n }\r\ + \n\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get mode ];\r\ + \n } on-error={\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get running ];\r\ + \n } on-error={\r\ + \n :set RunningMode \"\";\r\ + \n }\r\ + \n }\r\ + \n :set devRunning \$RunningMode;\r\ + \n\r\ + \n :if (\$IsRouterBoard = true) do={\r\ + \n :set devModel [ :tostr (\$RouterBoard->\"model\") ];\r\ + \n :set devRbRevision [ :tostr (\$RouterBoard->\"revision\") ];\r\ + \n :set devRbSerialNumber [ :tostr (\$RouterBoard->\"serial-number\") \ + ];\r\ + \n } else={\r\ + \n :set devModel \$devBoardName;\r\ + \n :set devRbRevision \"\";\r\ + \n :set devRbSerialNumber \"\";\r\ + \n }\r\ + \n\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n\r\ + \n :set (\$DeviceInfo->\"board-name\") \$devBoardName;\r\ + \n :set (\$DeviceInfo->\"architecture-name\") \$devCurArch;\r\ + \n :set (\$DeviceInfo->\"model\") \$devModel;\r\ + \n :set (\$DeviceInfo->\"revision\") \$devRbRevision;\r\ + \n :set (\$DeviceInfo->\"serial-number\") \$devRbSerialNumber;\r\ + \n :set (\$DeviceInfo->\"running-mode\") \$devRunning;\r\ + \n :set (\$DeviceInfo->\"build-time\") \$devBuildTime;\r\ + \n :set (\$DeviceInfo->\"running-channel-version\") \$runningChannelVers\ + ion;\r\ + \n :set (\$DeviceInfo->\"running-version\") \$runningVersion;\r\ + \n :set (\$DeviceInfo->\"running-channel\") \$runningChannel;\r\ + \n :set (\$DeviceInfo->\"routerboard\") \$IsRouterBoard;\r\ + \n :set (\$DeviceInfo->\"current-firmware\") [ :tostr (\$RouterBoard->\"\ + current-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"upgrade-firmware\") [ :tostr (\$RouterBoard->\"\ + upgrade-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"package-channel\") \$currentUpdateChannel;\r\ + \n :set (\$DeviceInfo->\"installed-version\") [ :tostr (\$Update->\"inst\ + alled-version\") ];\r\ + \n :set (\$DeviceInfo->\"latest-version\") \$ROsVerAvail;\r\ + \n :set (\$DeviceInfo->\"update-status\") [ :tostr (\$Update->\"status\"\ + ) ];\r\ + \n\r\ + \n :set arrDeviceInfo \$DeviceInfo;\r\ + \n :return \$DeviceInfo;\r\ + \n}\r\ + \n\r\ + \n:set DeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global IfThenElse;\r\ + \n :global FormatLine;\r\ + \n :global CommitBrief;\r\ + \n\r\ + \n :local License [/system/license/get];\r\ + \n :local Snmp [ /snmp/get ];\r\ + \n :local Info [ \$GetArrDeviceInfo ];\r\ + \n\r\ + \n :if ([ :typeof \$Info ] != \"array\") do={\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :return ( \\\r\ + \n [ \$FormatLine \"Hostname\" \$Identity ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"location\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Location\" (\$Snmp->\"location\") ] . \"\\n\") ]\ + \_. \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"contact\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Contact\" (\$Snmp->\"contact\") ] . \"\\n\") ] .\ + \_\\\r\ + \n \"Hardware:\\n\" . \\\r\ + \n [ \$FormatLine \" Board\" (\$Info->\"board-name\") ] . \"\\n\" . \ + \\\r\ + \n [ \$FormatLine \" Arch\" (\$Info->\"architecture-name\") ] . \"\\\ + n\" . \\\r\ + \n [ \$FormatLine \" Model\" (\$Info->\"model\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"revision\") ] > 0) \\\r\ + \n (\" \" . (\$Info->\"revision\")) ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"serial-number\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Serial\" (\$Info->\"serial-number\") ] . \"\ + \\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"nlevel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"nlevel\ + \")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS:\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"level\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"level\ + \")) ] . \"\\n\") ] . \\\r\ + \n [ \$FormatLine \" Channel\" (\$Info->\"package-channel\") ] . \"\ + \\n\" . \\\r\ + \n [ \$FormatLine \" Installed\" (\$Info->\"installed-version\") ] .\ + \_\"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"running-channel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Running\" ((\$Info->\"running-version\") . \ + \" (\" . (\$Info->\"running-channel\") . \")\") ] . \"\\n\") \\\r\ + \n ([ \$FormatLine \" Running\" (\$Info->\"running-version\") ] . \ + \"\\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"latest-version\") ] > 0 && \\\r\ + \n (\$Info->\"installed-version\") != (\$Info->\"latest-version\"))\ + \_\\\r\ + \n ([ \$FormatLine \" Available\" (\$Info->\"latest-version\") ] .\ + \_\"\\n\") ] . \\\r\ + \n [ \$IfThenElse ((\$Info->\"routerboard\") = true && \\\r\ + \n (\$Info->\"current-firmware\") != (\$Info->\"upgrade-firmware\")\ + ) \\\r\ + \n ([ \$FormatLine \" Firmware\" ((\$Info->\"current-firmware\") .\ + \_\" -> \" . (\$Info->\"upgrade-firmware\")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS-Scripts:\\n\" . \\\r\ + \n [ \$FormatLine \" Commit\" [ \$CommitBrief ] ] . \"\\n\" . \\\r\ + \n [ \$FormatLine \" Version\" \$GlobalConfVersion ]);\r\ + \n}\r\ + \n\r\ + \n:if ([ :typeof \$NotificationFunctions ] != \"array\") do={:set Notifica\ + tionFunctions ({})}\r\ + \n\r\ + \n:set GetRandom20CharAlNum do={\r\ + \n :global EitherOr;\r\ + \n :return [ :rndstr length=[ \$EitherOr [ :tonum \$1 ] 20 ] from=\"ABCDE\ + FGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\" ];\r\ + \n}\r\ + \n\r\ + \n:set GetRandom20CharHex do={:global EitherOr; :return [ :rndstr length=[\ + \_\$EitherOr [ :tonum \$1 ] 20 ] from=\"0123456789abcdef\" ]; }\r\ + \n:set GetRandomNumber do={:global EitherOr; :return [ :rndnum from=0 to=[\ + \_\$EitherOr [ :tonum \$1 ] 4294967295 ] ]; }\r\ + \n\r\ + \n:global checkRunJob;\r\ + \n:set checkRunJob do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLock; \r\ + \n :if ([ \$ScriptLock \$Script ] = false) do={:return false}\r\ + \n :foreach Job in=[ /system/script/job/find where script=\$Script ] do={\ + :set Job [ /system/script/job/get \$Job ];\r\ + \n :while ([ :typeof (\$Job->\"parent\") ] = \"id\") do={:set Job [ /sy\ + stem/script/job/get [ find where .id=(\$Job->\"parent\") ] ]}\r\ + \n :if ((\$Job->\"type\") = \"login\") do={:return true};}; :return fa\ + lse; \r\ + \n}\r\ + \n\r\ + \n:set InspectVar do={\r\ + \n :global InspectVarRet;\r\ + \n :put [ :tocrlf [ \$InspectVarRet \$1 ] ];\r\ + \n}\r\ + \n\r\ + \n:set CommitBrief do={\r\ + \n :global CommitId;\r\ + \n :global CommitInfo;\r\ + \n :if (\$CommitId = \"unknown\") do={\r\ + \n :return \"unknown\";\r\ + \n }\r\ + \n :return (\$CommitInfo . \"/\" . [ :pick \$CommitId 0 8 ]);\r\ + \n}\r\ + \n\r\ + \n:set InspectVarRet do={\r\ + \n :local Input \$1;\r\ + \n :local Level (0 + [ :tonum \$2 ]);\r\ + \n :global CharacterReplace;\r\ + \n :global IfThenElse;\r\ + \n :global InspectVarRet;\r\ + \n :local IndentReturn do={\r\ + \n :local Prefix [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Level [ :tonum \$3 ];\r\ + \n :global CharacterMultiply;\r\ + \n :return ([ \$CharacterMultiply \" \" (\$Level * 2) ] . \"-\" . \$Pre\ + fix . \"-> \" . \$Value);\r\ + \n }\r\ + \n :local TypeOf [ :typeof \$Input ];\r\ + \n :local Len [ :len \$Input ];\r\ + \n :local Return [ \$IndentReturn \"type\" \$TypeOf \$Level ];\r\ + \n :if (\$TypeOf = \"array\") do={\r\ + \n :foreach Key,Value in=\$Input do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"key\" \$Key (\$Level + 1) ] . \"\\n\" . \\\r\ + \n [ \$InspectVarRet \$Value (\$Level + 2) ]);\r\ + \n }\r\ + \n } else={\r\ + \n :if (\$TypeOf = \"str\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"len\" \$Len \$Level ]);\r\ + \n :if ([ :typeof [ :find \$Input (\"\\r\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\r\") \"\" ];\r\ + \n }\r\ + \n :if ([ :typeof [ :find \$Input (\"\\n\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\n\") \" \" ];\r\ + \n }\r\ + \n }\r\ + \n :if (\$TypeOf != \"nothing\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"value\" [ \$IfThenElse ([ :len \$Input ] > 80)\ + \_\\\r\ + \n ([ :pick \$Input 0 77 ] . \"...\") \$Input ] \$Level ]);\r\ + \n }\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set GetPubIp do={\r\ + \n :global DetectIpAddrDefault;\r\ + \n :global DetectIpAddrFallback;\r\ + \n\r\ + \n :local PubIpAddr false;\r\ + \n :local Url \$DetectIpAddrDefault;\r\ + \n :local JobName [ :jobname ];\r\ + \n\r\ + \n :do {\r\ + \n :log debug (\$0 . \" Trying to detect public IP using default serv\ + ice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=50ms max=5 on-error={:log error (\$JobName . \" Failed to \ + detect public IP using default service: \" . \$Url . \".\")}\r\ + \n } on-error={\r\ + \n :log error (\$0 . \" Failed to detect public IP using default serv\ + ice: \" . \$Url . \".\");\r\ + \n :set Url \$DetectIpAddrFallBack;\r\ + \n :log debug (\$0 . \" Trying to detect public IP using fallback ser\ + vice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=200ms max=5 on-error={:log error (\$JobName . \" Failed to\ + \_detect public IP using fallback service: \" . \$Url . \".\")}\r\ + \n };\r\ + \n :local IpLen ([ :len \$PubIpAddr ] -1);\r\ + \n :if (\$PubIpAddr = false) do={:set PubIpAddr \"not-detected\"} else=\ + {:set PubIpAddr [:pick \$PubIpAddr 0 \$IpLen]}\r\ + \n :return \$PubIpAddr;\r\ + \n}\r\ + \n\r\ + \n:set FormatLine do={\r\ + \n :local Key [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Indent [ :tonum \$3 ];\r\ + \n :local Spaces;\r\ + \n :local Return \"\";\r\ + \n :global CharacterMultiply;\r\ + \n :global EitherOr;\r\ + \n :set Indent [ \$EitherOr \$Indent 16 ];\r\ + \n :local Spaces [ \$CharacterMultiply \" \" \$Indent ];\r\ + \n :if ([ :len \$Key ] > 0) do={ :set Return (\$Key . \":\")}\r\ + \n :if ([ :len \$Key ] > (\$Indent - 2)) do={:set Return (\$Return . \"\\\ + n\" . [ :pick \$Spaces 0 \$Indent ] . \$Value);\r\ + \n } else={:set Return (\$Return . [ :pick \$Spaces 0 (\$Indent - [ :len \ + \$Return ]) ] . \$Value)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ParseCustom do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Start [:find [ \$Str ] [:tostr \$2]];\r\ + \n :local End [ :tostr \$3 ];\r\ + \n :local Num [ :tonum \$4 ];\r\ + \n :local Return;\r\ + \n :if ([:len \$Num] = 0) do={:set Num \"0\"}\r\ + \n :local rest [:pick \$Str (\$Start+\$Num) [:len \$Str]]; \r\ + \n :if ([:len \$End ] = 0) do={:set Return [:pick \$Str \$Num \$Start]} e\ + lse={\r\ + \n :set End [:find \$rest \$End];\r\ + \n :set Return [:pick \$rest 0 \$End];\r\ + \n }\r\ + \n:return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set LogPrint do={\r\ + \n :local Severity [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Message [ :tostr \$3 ];\r\ + \n :global PrintDebug;\r\ + \n :global PrintDebugOverride;\r\ + \n :global EitherOr;\r\ + \n :local Debug [ \$EitherOr (\$PrintDebugOverride->\$Name) \$PrintDebug \ + ];\r\ + \n :local PrintSeverity do={\r\ + \n :global TerminalColorOutput;\r\ + \n :if (\$TerminalColorOutput != true) do={:return \$1}\r\ + \n :local Color { debug=96; info=97; warning=93; error=91 };\r\ + \n :return (\"\\1B[\" . \$Color->\$1 . \"m\" . \$1 . \"\\1B[0m\");\r\ + \n}\r\ + \n :local Log ([ \$EitherOr \$Name \"\" ] . \": \" . \$Message);\ + \r\ + \n :if (\$Severity ~ (\"^(custom|debug|error|info)\\\$\")) do={\r\ + \n :if (\$Severity = \"debug\") do={:log debug \$Log}\r\ + \n :if (\$Severity = \"error\") do={:log error \$Log}\r\ + \n :if (\$Severity = \"info\" ) do={:log info \$Log}\r\ + \n } else={:log warning \$Log; :set Severity \"warning\"}\r\ + \n :if (\$Severity != \"debug\" || \$Debug = true) do={:put ([ \$PrintSev\ + erity \$Severity ] . \": \" . \$Message)}\r\ + \n}\r\ + \n\r\ + \n:set CertificateAvailable do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :local UseFor [ :tostr \$2 ];\r\ + \n\r\ + \n :global CertificateDownload;\r\ + \n :global ParseKeyValueStore;\r\ + \n\r\ + \n :if ([ :len \$UseFor ] = 0) do={\r\ + \n :log warning (\$0 . \"The intended use is undefined!\");\r\ + \n :set UseFor \"undefined\";\r\ + \n }\r\ + \n :if ([ /system/resource/get free-hdd-space ] < 8388608 && \\\r\ + \n [ /certificate/settings/get crl-download ] = true && \\\r\ + \n [ /certificate/settings/get crl-store ] = \"system\") do={\r\ + \n :log warning (\$0 . \"This system has low free flash space but \" . \ + \\\r\ + \n \"is configured to download certificate CRLs to system!\");\r\ + \n }\r\ + \n :if ([ :len \$CommonName ] = 0) do={\r\ + \n :log warning (\$0 . \"No CommonName given!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if (((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" || \\\ + \r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \$UseFor || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\r\ + \n [ :len [ /certificate/builtin/find where common-name=\$CommonName\ + \_] ] > 0) do={\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n :log info (\$0 . \"Certificate with CommonName '\" . \$CommonName . \ + \"' not available.\");\r\ + \n :if ([ \$CertificateDownload \$CommonName ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] > 1\ + ) do={\r\ + \n :log info (\$0 . \"There are \" . \$CertCount . \" Certificates with\ + \_CommonName '\" . \$CommonName . \"'. Should be ok.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :local CertVal [ /certificate/get [ find where common-name=\$CommonNam\ + e ] ];\r\ + \n :while ((\$CertVal->\"akid\") != \"\" && (\$CertVal->\"akid\") != (\$C\ + ertVal->\"skid\")) do={\r\ + \n :if ([ :len [ /certificate/find where skid=(\$CertVal->\"akid\") ] ]\ + \_= 0) do={\r\ + \n :local IssuerCN ([ \$ParseKeyValueStore (\$CertVal->\"issuer\") ]-\ + >\"CN\");\r\ + \n :log info (\$0 . \"Certificate chain for '\" . \$CommonName . \"' \ + is incomplete, missing '\" . \$IssuerCN . \"'.\");\r\ + \n :if ([ \$CertificateDownload \$IssuerCN ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :set CertVal [ /certificate/get [ find where skid=(\$CertVal->\"akid\ + \") ] ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateDownload do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :global ScriptUpdatesBaseUrl;\r\ + \n :global ScriptUpdatesUrlSuffix;\r\ + \n :global CertificateNameByCN;\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :log info (\$0 . \"Downloading and importing certificate with \" . \\\ + \r\ + \n \"CommonName '\" . \$CommonName . \"'.\");\r\ + \n :local FileName ([ \$CleanName \$CommonName ] . \".pem\");\r\ + \n :do {\r\ + \n /tool/fetch check-certificate=yes-without-crl mode=https http-header\ + -field=({ [ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n (\$ScriptUpdatesBaseUrl . \"certs/\" . \$FileName . \$ScriptUpdate\ + sUrlSuffix) \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n } on-error={\r\ + \n :log warning (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \\\r\ + \n \"' from repository! Trying fallback to mkcert.org...\");\r\ + \n :do {\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if ([ :len [ /certificate/find where common-name=\"ISRG Root X1\"\ + \_] ] = 0 && \\\r\ + \n !(((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" \ + || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \"fetch\" || \ + \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\ + \r\ + \n [ :len [ /certificate/builtin/find where common-name=\"ISRG\ + \_Root X1\" ] ] > 0)) do={\r\ + \n :log error (\$0 . \" Required certificate is not available.\");\ + \r\ + \n :return false;\r\ + \n }\r\ + \n /tool/fetch check-certificate=yes-without-crl mode=https http-head\ + er-field=({ [ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n url=\"https://mkcert.org/generate/\" http-data=[ :serialize to=jso\ + n ({ \$CommonName }) ] \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n :if ([ /file/get \$FileName size ] = 0) do={\r\ + \n \$RmFile \$FileName;\r\ + \n :error false;\r\ + \n }\r\ + \n } on-error={\r\ + \n :log error (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \"'!\");\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n /certificate/import file-name=\$FileName passphrase=\"\" as-value;\r\ + \n :delay 1s;\r\ + \n \$RmFile \$FileName;\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n /certificate/remove [ find where name~(\"^\" . \$FileName . \"_[0-9]\ + +\\\$\") ];\r\ + \n :log warning (\$0 . \" Certificate with CommonName '\" . \$CommonNam\ + e . \"' still unavailable!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :foreach Cert in=[ /certificate/find where name~(\"^\" . \$FileName . \ + \"_[0-9]+\\\$\") ] do={\r\ + \n \$CertificateNameByCN [ /certificate/get \$Cert common-name ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateNameByCN do={\r\ + \n :local Match [ :tostr \$1 ];\r\ + \n :global CleanName;\r\ + \n :local Cert ([ /certificate/find where (common-name=\$Match or fingerp\ + rint=\$Match or name=\$Match) ]->0);\r\ + \n :if ([ :len \$Cert ] = 0) do={\r\ + \n :log warning (\$0 .\" No matching certificate found.\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CommonName [ /certificate/get \$Cert common-name ];\r\ + \n /certificate/set \$Cert name=[ \$CleanName \$CommonName ];\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set FileExists do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local Type [ :tostr \$2 ];\r\ + \n :global FileGet;\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={ :return false; }\r\ + \n :if ([ :len (\$FileVal->\"size\") ] = 0) do={ :return false; }\r\ + \n :if ([ :len \$Type ] = 0 || \$FileVal->\"type\" = \$Type) do={ :return\ + \_true; }\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set Grep do={\r\ + \n :local Input ([ :tostr \$1 ] . \"\\n\");\r\ + \n :local Pattern [ :tostr \$2 ];\r\ + \n :if ([ :typeof [ :find \$Input \$Pattern ] ] = \"nil\") do={:return []\ + }\r\ + \n :do {\r\ + \n :local Line [ :pick \$Input 0 [ :find \$Input \"\\n\" ] ];\r\ + \n :if ([ :typeof [ :find \$Line \$Pattern ] ] = \"num\") do={:return \ + \$Line}\r\ + \n :set Input [ :pick \$Input ([ :find \$Input \"\\n\" ] + 1) [ :len \$\ + Input ] ];\r\ + \n } while=([ :len \$Input ] > 0);\r\ + \n :return [];\r\ + \n}\r\ + \n\r\ + \n:set HumanReadableNum do={\r\ + \n :local Input [ :tonum \$1 ];\r\ + \n :local Base [ :tonum \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global IfThenElse;\r\ + \n :local Prefix \"kMGTPE\";\r\ + \n :local Pow 1;\r\ + \n :set Base [ \$EitherOr \$Base 1024 ];\r\ + \n :local Bin [ \$IfThenElse (\$Base = 1024) \"i\" \"\" ];\r\ + \n :if (\$Input < \$Base) do={:return \$Input}\r\ + \n :for I from=0 to=[ :len \$Prefix ] do={\r\ + \n :set Pow (\$Pow * \$Base);\r\ + \n :if (\$Input / \$Base < \$Pow) do={\r\ + \n :set Prefix [ :pick \$Prefix \$I ];\r\ + \n :local Tmp1 (\$Input * 100 / \$Pow);\r\ + \n :local Tmp2 (\$Tmp1 / 100);\r\ + \n :if (\$Tmp2 >= 100) do={:return (\$Tmp2 . \$Prefix . \$Bin)}\r\ + \n :return (\$Tmp2 . \".\" . \\\r\ + \n [ :pick \$Tmp1 [ :len \$Tmp2 ] ([ :len \$Tmp1 ] - [ :len \$Tmp\ + 2 ] + 1) ] . \\\r\ + \n \$Prefix . \$Bin);\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set CleanFilePath do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CharacterReplace;\r\ + \n :while (\$Path ~ \"//\") do={ :set \$Path [ \$CharacterReplace \$Path \ + \"//\" \"/\" ]; }\r\ + \n :if ([ :pick \$Path 0 ] = \"/\") do={ :set Path [ :pick \$Path 1 [ :le\ + n \$Path ] ]; }\r\ + \n :if ([ :pick \$Path ([ :len \$Path ] - 1) ] = \"/\") do={ :set Path [ \ + :pick \$Path 0 ([ :len \$Path ] - 1) ]; }\r\ + \n :return \$Path;\r\ + \n}\r\ + \n\r\ + \n:set CleanName do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Return \"\";\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :typeof [ find \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqr\ + stuvwxyz0123456789\" \$Char ] ] = \"nil\") do={\r\ + \n :do {:if ([ :len \$Return ] = 0) do={:error true};\r\ + \n :if ([ :pick \$Return ([ :len \$Return ] - 1) ] = \"-\") do={:er\ + ror true}; :set Char \"-\"} on-error={:set Char \"\"}; \r\ + \n };\r\ + \n :set Return (\$Return . \$Char)};\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set RandomDelay do={\r\ + \n :local Time [ :tonum \$1 ];\r\ + \n :local Unit [ :tostr \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global GetRandomNumber;\r\ + \n :global MAX;\r\ + \n :if (\$Time = 0) do={:return false}\r\ + \n :delay ([ \$MAX 10 [ \$GetRandomNumber ([ :tonsec [ :totime (\$Time . \ + [ \$EitherOr \$Unit \"s\" ]) ] ] / 1000000) ] ] . \"ms\");\r\ + \n}\r\ + \n\r\ + \n:set EscapeForRegEx do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"^.[]\\\$()|*+\?{}\\\\\");\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :find \$Chars \$Char ]) do={:set Char (\"\\\\\" . \$Char)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ExitError do={\r\ + \n :local ExitOK [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Error [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :if (\$ExitOK = \"false\") do={\r\ + \n :log error (\$Name [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\\\$\") \ + \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with er\ + ror\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \ + \$Error) \".\" ]);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set ExitOnError do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :local Error [ :tostr \$2 ];\r\ + \n :global IfThenElse;\r\ + \n :log error (\$Name . \" \" . [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\ + \\\$\") \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with erro\ + r\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \$E\ + rror) \".\" ]);\r\ + \n}\r\ + \n\r\ + \n:set MiniDateTimeStamp do={\r\ + \n :local mikro [ :tobool \$1 ];\r\ + \n /system/clock;\r\ + \n :local vdate [get date];\r\ + \n :local vtime [get time];\r\ + \n :local vdoff [:toarray \"0,4,5,7,8,10\"];\r\ + \n :local MM [:pick \$vdate (\$vdoff->2) (\$vdoff->3)];\r\ + \n :local M [:tonum \$MM];\r\ + \n :if (\$vdate ~ \".../../....\") do={\r\ + \n :set vdoff [:toarray \"7,11,1,3,4,6\"];\r\ + \n :set M ([:find \"xxanebarprayunulugepctovecANEBARPRAYUNULUGE\ + PCTOVEC\" [:pick \$vdate (\$vdoff->2) (\$vdoff->3)] -1] / 2);\r\ + \n :if (\$M>12) do={:set M (\$M - 12)}\r\ + \n :set MM [:pick (100 + \$M) 1 3];\r\ + \n }\r\ + \n :local yyyy [:pick \$vdate (\$vdoff->0) (\$vdoff->1)];\r\ + \n :local dd [:pick \$vdate (\$vdoff->4) (\$vdoff->5)];\r\ + \n :local HH [:pick \$vtime 0 2];\r\ + \n :local mm [:pick \$vtime 3 5];\r\ + \n :local ss [:pick \$vtime 6 8];\r\ + \n :local Return;\r\ + \n :if (\$mikro = true) do={\r\ + \n :set Return ([:pick \$yyyy 2 4] . [:pick \$dd 0 1] . [:pick \$HH 0\ + \_1] . [:pick \$mm 3 4] . [:pick \$ss 6 7]);\r\ + \n } else={\r\ + \n :set Return ([\$yyyy] . [\$MM] . [\$dd] . [\$HH] . [\$mm] . [\$ss]);\ + \r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set WaitForFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local WaitTime [ :totime \$2 ];\r\ + \n :global CleanFilePath;\r\ + \n :global EitherOr;\r\ + \n :global MAX;\r\ + \n :set FileName [ \$CleanFilePath \$FileName ];\r\ + \n :local Delay ([ \$MAX [ \$EitherOr \$WaitTime 2s ] 100ms ] / 9);\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } delay=\$Delay max=10;\r\ + \n } on-error={ }\r\ + \n :while ([ :len [ /file/find where name=\$FileName ] ] > 0) do={\r\ + \n :do {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } on-error={ }\r\ + \n :delay \$Delay;\r\ + \n :set Delay (\$Delay * 3 / 2);\r\ + \n }\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set FileGet do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global WaitForFile;\r\ + \n :if ([ \$WaitForFile \$FileName 0s ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n :local FileVal false;\r\ + \n :do {\r\ + \n :set FileVal [ /file/get \$FileName ];\r\ + \n } on-error={ }\r\ + \n :return \$FileVal;\r\ + \n}\r\ + \n\r\ + \n:set RmDir do={\r\ + \n :local DirName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :log debug (\$0 . \" Removing directory: \". \$DirName);\r\ + \n :local DirVal [ \$FileGet \$DirName ];\r\ + \n :if (\$DirVal = false) do={\r\ + \n :log debug (\$0 . \" ... which does not exist.\");\r\ + \n :return true;\r\ + \n };\r\ + \n :if (\$DirVal->\"type\" != \"directory\") do={\r\ + \n :log error (\$0 . \" Directory '\" . \$DirName . \"' is not a direct\ + ory.\");\r\ + \n :return false;\r\ + \n };\r\ + \n :onerror Err {\r\ + \n /file/remove \$DirName;\r\ + \n } do={\r\ + \n :log error (\$0 . \" Removing directory '\" . \$DirName . \"' failed\ + : \" . \$Err);\r\ + \n :return false;\r\ + \n };\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set RmFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :log debug (\$0 . \" Removing file: \". \$FileName);\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={\r\ + \n :log debug (\$0 . \" ... which does not exist.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :if (\$FileVal->\"type\" = \"directory\" || \$FileVal->\"type\" = \"di\ + sk\") do={\r\ + \n :log error (\$0 . \" File '\" . \$FileName . \"' is not a file.\");\ + \r\ + \n :return false;\r\ + \n }\r\ + \n :onerror Err {\r\ + \n /file/remove \$FileName;\r\ + \n } do={\r\ + \n :log error (\$0 . \" Removing file '\" . \$FileName . \"' failed: \"\ + \_. \$Err); :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MkDir do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CleanFilePath;\r\ + \n :global FileGet;\r\ + \n :global RmDir;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :local MkTmpfs do={\r\ + \n :global WaitForFile;\r\ + \n :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\r\ + \n :if ([ :len \$TmpFs ] = 1) do={\r\ + \n :if ([ /disk/get \$TmpFs disabled ] = true) do={\r\ + \n :log info (\$0 . \" The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :log info (\$0 . \" Creating disk of type tmpfs.\");\r\ + \n \$RmDir \"tmpfs\";\r\ + \n :onerror Err {\r\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource\ + /get total-memory ] / 3);\r\ + \n \$WaitForFile \"tmpfs\";\r\ + \n } do={\r\ + \n :log warning (\$0 . \" Creating disk of type tmpfs failed: \" . \$\ + Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :set Path [ \$CleanFilePath \$Path ];\r\ + \n :if (\$Path = \"\") do={\r\ + \n :return true;\r\ + \n }\r\ + \n :log debug (\$0 . \" Making directory: \" . \$Path);\r\ + \n :local PathVal [ \$FileGet \$Path ];\r\ + \n :if (\$PathVal->\"type\" = \"directory\") do={\r\ + \n :log debug (\$0 . \" ... which already exists.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :pick \$Path 0 5 ] = \"tmpfs\") do={\r\ + \n :if ([ \$MkTmpfs ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n /file/add type=\"directory\" name=\$Path;\r\ + \n \$WaitForFile \$Path;\r\ + \n } do={\r\ + \n :log warning (\$0 . \" Making directory '\" . \$Path . \"' failed: \ + \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MAX do={:if (\$1 > \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n:set MIN do={:if (\$1 < \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set CharacterReplace do={\r\ + \n :local String [ :tostr \$1 ];\r\ + \n :local ReplaceFrom [ :tostr \$2 ];\r\ + \n :local ReplaceWith [ :tostr \$3 ];\r\ + \n :local Return \"\";\r\ + \n :if (\$ReplaceFrom = \"\") do={:return \$String}\r\ + \n :while ([ :typeof [ :find \$String \$ReplaceFrom ] ] != \"nil\") do={\ + \r\ + \n :local Pos [ :find \$String \$ReplaceFrom ];\r\ + \n :set Return (\$Return . [ :pick \$String 0 \$Pos ] . \$ReplaceWith);\ + \r\ + \n :set String [ :pick \$String (\$Pos + [ :len \$ReplaceFrom ]) [ :len\ + \_\$String ] ];\r\ + \n }\r\ + \n :return (\$Return . \$String);\r\ + \n}\r\ + \n\r\ + \n:set IfThenElse do={\r\ + \n :if ([ :tostr \$1 ] = \"true\" || [ :tobool \$1 ] = true) do={:return \ + \$2};\r\ + \n :return \$3;\r\ + \n}\r\ + \n\r\ + \n:set EitherOr do={\r\ + \n :global IfThenElse;\r\ + \n :if ([ :typeof \$1 ] = \"num\") do={:return [ \$IfThenElse (\$1 != 0) \ + \$1 \$2 ]}\r\ + \n :if ([ :typeof \$1 ] = \"time\") do={:return [ \$IfThenElse (\$1 > 0s)\ + \_\$1 \$2 ]}\r\ + \n# this works for boolean values, literal ones with parentheses\r\ + \n :return [ \$IfThenElse ([ :len [ :tostr \$1 ] ] > 0) \$1 \$2 ];\r\ + \n}\r\ + \n\r\ + \n:set ParseKeyValueStore do={\r\ + \n :local Source \$1;\r\ + \n :if ([ :pick \$Source 0 1 ] = \"{\") do={\r\ + \n :do {\r\ + \n :return [ :deserialize from=json \$Source ];\r\ + \n } on-error={ }\r\ + \n } \r\ + \n :if ([ :typeof \$Source ] != \"array\") do={:set Source [ :tostr \$1 ]\ + }\r\ + \n :local Result ({});\r\ + \n :foreach KeyValue in=[ :toarray \$Source ] do={\r\ + \n :if ([ :find \$KeyValue \"=\" ]) do={\r\ + \n :local Key [ :pick \$KeyValue 0 [ :find \$KeyValue \"=\" ] ];\r\ + \n :local Value [ :pick \$KeyValue ([ :find \$KeyValue \"=\" ] + 1) [\ + \_:len \$KeyValue ] ];\r\ + \n :if (\$Value=\"true\") do={:set Value true}\r\ + \n :if (\$Value=\"false\") do={:set Value false}\r\ + \n :set (\$Result->\$Key) \$Value;\r\ + \n } else={:set (\$Result->\$KeyValue) true}\r\ + \n }\r\ + \n :return \$Result;\r\ + \n}\r\ + \n:set RequiredRouterOS do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :local Required [ :tostr \$2 ];\r\ + \n :local Warn [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :global VersionToNum;\r\ + \n :if (!(\$Required ~ \"^\\\\d+\\\\.\\\\d+((alpha|beta|rc|\\\\.)\\\\d+|)\ + \\\$\")) do={\r\ + \n :log error (\$0 . \" No valid RouterOS version: \" . \$Required);\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ \$VersionToNum \$Required ] > [ \$VersionToNum [ /system/packag\ + e/update/get installed-version ] ]) do={\r\ + \n :if (\$Warn = \"true\") do={\r\ + \n :log warning (\$0 . \" This \" . [ \$IfThenElse ([ :pick \$Caller \ + 0 ] = (\"\\\$\")) \"function\" \"script\" ] . \\\r\ + \n \" '\" . \$Caller . \"' (at least specific functionality) requir\ + es RouterOS \" . \$Required . \". Please update!\");\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set ValidateSyntax do={\r\ + \n :local Code [ :tostr \$1 ];\r\ + \n :global LogPrint;\r\ + \n :onerror Err {\r\ + \n [ :parse (\":local Validate do={\\n\" . \$Code . \"\\n}\") ];\r\ + \n } do={\r\ + \n \$LogPrint debug \$0 (\"Valdation failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set VersionToNum do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Multi 0x1000000;\r\ + \n :local Return 0;\r\ + \n :global CharacterReplace;\r\ + \n :set Input [ \$CharacterReplace \$Input \".\" \",\" ];\r\ + \n :foreach I in={ \"zero\"; \"alpha\"; \"beta\"; \"rc\" } do={\r\ + \n :set Input [ \$CharacterReplace \$Input \$I (\",\" . \$I . \",\") ];\ + \r\ + \n }\r\ + \n :foreach Value in=([ :toarray \$Input ], 0) do={\r\ + \n :local Num [ :tonum \$Value ];\r\ + \n :if (\$Multi = 0x100) do={\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={\r\ + \n :set Return (\$Return + 0xff00);\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n } else={\r\ + \n :if (\$Value = \"zero\") do={ }\r\ + \n :if (\$Value = \"alpha\") do={ :set Return (\$Return + 0x3f00); \ + }\r\ + \n :if (\$Value = \"beta\") do={ :set Return (\$Return + 0x5f00); }\ + \r\ + \n :if (\$Value = \"rc\") do={ :set Return (\$Return + 0x7f00); }\r\ + \n }\r\ + \n }\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={ :set Return (\$Return + (\$Va\ + lue * \$Multi)); }\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ScriptLock do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local WaitMax [ :totime \$2 ];\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global ScriptLockOrder;\r\ + \n :if ([ :typeof \$ScriptLockOrder ] = \"nothing\") do={\r\ + \n :set ScriptLockOrder ({});\r\ + \n }\r\ + \n :if ([ :typeof (\$ScriptLockOrder->\$Script) ] = \"nothing\") do={\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :local JobCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :return [ :len [ /system/script/job/find where script=\$Script ] ];\ + \r\ + \n }\r\ + \n :local TicketCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :local Count 0;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:set Count (\$Count \ + + 1)}\r\ + \n }\r\ + \n :return \$Count;\r\ + \n }\r\ + \n :local IsFirstTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Check [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if (\$Ticket = \$Check) do={:return true}\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\" && \$Ticket != \$Check) d\ + o={:return false}\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :local AddTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Add [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :while (true) do={\r\ + \n :local Pos [ :len (\$ScriptLockOrder->\$Script) ];\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Pos) \$Add;\r\ + \n :delay 10ms;\r\ + \n :if ((\$ScriptLockOrder->\$Script->\$Pos) = \$Add) do={:return tru\ + e}\r\ + \n }\r\ + \n }\r\ + \n :local RemoveTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Remove [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Id,Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :while ((\$ScriptLockOrder->\$Script->\$Id) = \$Remove) do={\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Id);\r\ + \n :delay 10ms;\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n :local CleanupTickets do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:return false}\r\ + \n }\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :if ([ :typeof \$WaitMax ] = \"nil\" ) do={:set WaitMax 0s}\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\r\ + \n :log error (\$0 . \" A script named '\" . \$Script . \"' does not ex\ + ist!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$JobCount \$Script ] = 0) do={\r\ + \n \$LogPrint error \$0 (\"No script '\" . \$Script . \"' is running!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$TicketCount \$Script ] >= [ \$JobCount \$Script ]) do={\r\ + \n :log error (\$0 . \" More tickets than running scripts '\" . \$Scrip\ + t . \"', resetting!\");\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n /system/script/job/remove [ find where script=\$Script ];\r\ + \n }\r\ + \n :local MyTicket [ \$GetRandom20CharAlNum 6 ];\r\ + \n \$AddTicket \$Script \$MyTicket;\r\ + \n :local WaitInterval (\$WaitMax / 20);\r\ + \n :local WaitTime \$WaitMax;\r\ + \n :while (\$WaitTime > 0 && \\\r\ + \n ([ \$IsFirstTicket \$Script \$MyTicket ] = false || \\\r\ + \n [ \$TicketCount \$Script ] < [ \$JobCount \$Script ])) do={\r\ + \n :set WaitTime (\$WaitTime - \$WaitInterval);\r\ + \n :delay \$WaitInterval;\r\ + \n }\r\ + \n :if ([ \$IsFirstTicket \$Script \$MyTicket ] = true && \\\r\ + \n [ \$TicketCount \$Script ] = [ \$JobCount \$Script ]) do={\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$CleanupTickets \$Script;\r\ + \n :return true;\r\ + \n }\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$LogPrint debug \$0 (\"Script '\" . \$Script . \"' started more than \ + once\" . \\\r\ + \n [ \$IfThenElse (\$WaitTime < \$WaitMax) \" and timed out waiting for\ + \_lock\" \"\" ] . \"...\");\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set SendNotification do={ :onerror Err {\r\ + \n :global SendNotification2;\r\ + \n \$SendNotification2 ({ origin=\$0; subject=\$1; message=\$2; link=\$3;\ + \_silent=\$4 });\r\ + \n} do={:global ExitOnError; \$ExitOnError \$0 \$Err}\r\ + \n}\r\ + \n\r\ + \n:set SendNotification2 do={\r\ + \n :local Notification \$1;\r\ + \n :global NotificationFunctions;\r\ + \n :foreach FunctionName,Discard in=\$NotificationFunctions do={\r\ + \n (\$NotificationFunctions->\$FunctionName) (\"\\\$NotificationFunctio\ + ns->\\\"\" . \$FunctionName . \"\\\"\") \$Notification;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set SymbolByUnicodeName do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :global EitherOr;\r\ + \n :global SymbolsExtra;\r\ + \n :local Symbols ({\r\ + \n \"abacus\"=\"\\F0\\9F\\A7\\AE\";\r\ + \n \"alarm-clock\"=\"\\E2\\8F\\B0\";\r\ + \n \"arrow-down\"=\"\\E2\\AC\\87\";\r\ + \n \"arrow-up\"=\"\\E2\\AC\\86\";\r\ + \n \"calendar\"=\"\\F0\\9F\\93\\85\";\r\ + \n \"card-file-box\"=\"\\F0\\9F\\97\\83\";\r\ + \n \"chart-decreasing\"=\"\\F0\\9F\\93\\89\";\r\ + \n \"chart-increasing\"=\"\\F0\\9F\\93\\88\";\r\ + \n \"cloud\"=\"\\E2\\98\\81\";\r\ + \n \"cross-mark\"=\"\\E2\\9D\\8C\";\r\ + \n \"earth\"=\"\\F0\\9F\\8C\\8D\";\r\ + \n \"fire\"=\"\\F0\\9F\\94\\A5\";\r\ + \n \"floppy-disk\"=\"\\F0\\9F\\92\\BE\";\r\ + \n \"gear\"=\"\\E2\\9A\\99\";\r\ + \n \"heart\"=\"\\E2\\99\\A5\";\r\ + \n \"high-voltage-sign\"=\"\\E2\\9A\\A1\";\r\ + \n \"incoming-envelope\"=\"\\F0\\9F\\93\\A8\";\r\ + \n \"information\"=\"\\E2\\84\\B9\";\r\ + \n \"large-orange-circle\"=\"\\F0\\9F\\9F\\A0\";\r\ + \n \"large-red-circle\"=\"\\F0\\9F\\94\\B4\";\r\ + \n \"link\"=\"\\F0\\9F\\94\\97\";\r\ + \n \"lock-with-ink-pen\"=\"\\F0\\9F\\94\\8F\";\r\ + \n \"memo\"=\"\\F0\\9F\\93\\9D\";\r\ + \n \"mobile-phone\"=\"\\F0\\9F\\93\\B1\";\r\ + \n \"pushpin\"=\"\\F0\\9F\\93\\8C\";\r\ + \n \"scissors\"=\"\\E2\\9C\\82\";\r\ + \n \"scroll\"=\"\\F0\\9F\\93\\9C\";\r\ + \n \"smiley-partying-face\"=\"\\F0\\9F\\A5\\B3\";\r\ + \n \"smiley-smiling-face\"=\"\\E2\\98\\BA\";\r\ + \n \"smiley-winking-face-with-tongue\"=\"\\F0\\9F\\98\\9C\";\r\ + \n \"sparkles\"=\"\\E2\\9C\\A8\";\r\ + \n \"speech-balloon\"=\"\\F0\\9F\\92\\AC\";\r\ + \n \"star\"=\"\\E2\\AD\\90\";\r\ + \n \"warning-sign\"=\"\\E2\\9A\\A0\";\r\ + \n \"white-heavy-check-mark\"=\"\\E2\\9C\\85\"\r\ + \n }, \$SymbolsExtra);\r\ + \n :local Magic [ :pick [ /system/clock/get date ] 4 10 ];\r\ + \n :local Special {\r\ + \n \"information-04-01\"=\"\\F0\\9F\\9A\\BB\";\r\ + \n \"large-orange-circle-04-01\"=\"\\F0\\9F\\8D\\8A\";\r\ + \n \"large-orange-circle-10-31\"=\"\\F0\\9F\\8E\\83\";\r\ + \n \"large-red-circle-04-01\"=\"\\F0\\9F\\8D\\92\" };\r\ + \n :if ([ :len (\$Symbols->\$Name) ] = 0) do={\r\ + \n :log warning (\$0 . \"No symbol available for name '\" . \$Name . \"\ + '!\");\r\ + \n :return \"\";\r\ + \n }\r\ + \n :return ([ \$EitherOr (\$Special->(\$Name . \$Magic)) (\$Symbols->\$Na\ + me) ] . \"\\EF\\B8\\8F\");\r\ + \n}\r\ + \n\r\ + \n:set SymbolForNotification do={\r\ + \n :global NotificationsWithSymbols;\r\ + \n :global SymbolByUnicodeName;\r\ + \n :global IfThenElse;\r\ + \n :if (\$NotificationsWithSymbols != true) do={:return [ \$IfThenElse ([\ + \_:len \$2 ] > 0) ([ :tostr \$2 ] . \" \") \"\" ]}\r\ + \n :local Return \"\";\r\ + \n :foreach Symbol in=[ :toarray \$1 ] do={:set Return (\$Return . [ \$Sy\ + mbolByUnicodeName \$Symbol ])}\r\ + \n :return (\$Return . \" \");\r\ + \n}\r\ + \n\r\ + \n:set Unix2Dos do={:return [ :tocrlf [ :tostr \$1 ] ]}\r\ + \n:set UrlEncode do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"\\n\\r !\\\"#\\\$%&'()*+,:;<=>\?@[\\\\]^`{|}~\");\r\ + \n :local Subs { \"%0A\"; \"%0D\"; \"%20\"; \"%21\"; \"%22\"; \"%23\"; \"\ + %24\"; \"%25\"; \"%26\"; \"%27\";\r\ + \n \"%28\"; \"%29\"; \"%2A\"; \"%2B\"; \"%2C\"; \"%3A\"; \"%3B\"; \ + \"%3C\"; \"%3D\"; \"%3E\"; \"%3F\";\r\ + \n \"%40\"; \"%5B\"; \"%5C\"; \"%5D\"; \"%5E\"; \"%60\"; \"%7B\"; \ + \"%7C\"; \"%7D\"; \"%7E\" };\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :local Replace [ :find \$Chars \$Char ];\r\ + \n :if ([ :typeof \$Replace ] = \"num\") do={:set Char (\$Subs->\$Repla\ + ce)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set IsDNSResolving do={\r\ + \n :do {:resolve \"api.telegram.org\"} on-error={:return false}\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set IsFullyConnected do={\r\ + \n :global IsDNSResolving;\r\ + \n :global IsTimeSync;\r\ + \n :if ([ \$IsDNSResolving ] = false) do={:return false};\r\ + \n :if ([ \$IsTimeSync ] = false) do={:return false};\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set IsTimeSync do={\r\ + \n :global IsTimeSyncCached;\r\ + \n :global IsTimeSyncResetNtp;\r\ + \n :if (\$IsTimeSyncCached = true) do={:return true}\r\ + \n :if ([ /system/ntp/client/get enabled ] = true) do={\r\ + \n :if ([ /system/ntp/client/get status ] = \"synchronized\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :local Uptime [ /system/resource/get uptime ];\r\ + \n :if ([ :typeof \$IsTimeSyncResetNtp ] = \"nothing\") do={\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n }\r\ + \n :if (\$Uptime - \$IsTimeSyncResetNtp < 3m) do={:return false}\r\ + \n :log warning \"\$0 The ntp client is configured, but did not sync.\"\ + ;\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n /system/ntp/client/set enabled=no;\r\ + \n :delay 20ms;\r\ + \n /system/ntp/client/set enabled=yes;\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ /system/license/get ]->\"level\" = \"free\" || \\\r\ + \n [ /system/resource/get ]->\"board-name\" = \"x86\") do={\r\ + \n :log debug \"\$0 No ntp client configured, relying on RTC for CHR fr\ + ee license and x86.\";\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ /ip/cloud/get update-time ] = true) do={\r\ + \n :if ([ :typeof [ /ip/cloud/get public-address ] ] = \"ip\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :log debug \"\$0 No time source configured! Returning gracefully...\";\ + \r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set FetchHugeFiles do={\r\ + \n :local ScriptName [ :tostr \$1 ];\r\ + \n :local Url [ :tostr \$2 ];\r\ + \n :local CheckCert [ :tostr \$3 ];\r\ + \n\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global MkDir;\r\ + \n :global RmDir;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :set CheckCert [ \$IfThenElse (\$CheckCert = \"false\") \"no\" \"yes-w\ + ithout-crl\" ];\r\ + \n\r\ + \n :local DirName (\"tmpfs/\" . [ \$CleanName \$ScriptName ]);\r\ + \n :if ([ \$MkDir \$DirName ] = false) do={\r\ + \n \$LogPrint error \$0 (\"Failed creating directory!\");\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :local FileName (\$DirName . \"/\" . [ \$CleanName \$0 ] . \"-\" . [ \ + \$GetRandom20CharAlNum ]);\r\ + \n :onerror Err {\r\ + \n /tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName \ + \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] }) as-va\ + lue;\r\ + \n } do={\r\ + \n :if ([ \$WaitForFile \$FileName 500ms ] = true) do={\r\ + \n \$RmFile \$FileName;\r\ + \n }\r\ + \n \$LogPrint debug \$0 (\"Failed downloading from \" . \$Url . \" - \"\ + \_. \$Err);\r\ + \n \$RmDir \$DirName;\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$WaitForFile \$FileName 5s ] = false) do={\r\ + \n \$LogPrint debug \$0 (\"The file downloaded from \" . \$Url . \" did\ + \_not show up.\");\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :local FileSize [ /file/get \$FileName size ];\r\ + \n :local Return \"\";\r\ + \n :local VarSize 0;\r\ + \n :while (\$VarSize != \$FileSize) do={\r\ + \n :set Return (\$Return . ([ /file/read offset=\$VarSize chunk-size=32\ + 768 file=\$FileName as-value ]->\"data\"));\r\ + \n :set FileSize [ /file/get \$FileName size ];\r\ + \n :set VarSize [ :len \$Return ];\r\ + \n :if (\$VarSize > \$FileSize) do={\r\ + \n :delay 100ms;\r\ + \n }\r\ + \n }\r\ + \n \$RmDir \$DirName;\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set FetchUserAgentStr do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global CommitBrief;\r\ + \n :global IfThenElse;\r\ + \n :local Resource [ /system/resource/get ];\r\ + \n :return (\"User-Agent: Mikrotik/\" . \$Resource->\"version\" . \" \" .\ + \_\$Resource->\"architecture-name\" . \\\r\ + \n \" \" . \$Caller . \"/Fetch (\" . \$GlobalScriptsUrl . \"; \" . [ \$\ + CommitBrief ] . \")\");\r\ + \n}\r\ + \n\r\ + \n:set ScriptInstallUpdate do={ :onerror Err {\r\ + \n :local Scripts [ :toarray \$1 ];\r\ + \n :local NewComment [ :tostr \$2 ];\r\ + \n :global InitSetup;\r\ + \n\r\ + \n :global CommitId;\r\ + \n :global ScriptUpdatesCRLF;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global CertificateAvailable;\r\ + \n :global CheckSumsVerify;\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SumsDirAndFileName;\r\ + \n :global GlobalScriptsUrlSuffix;\r\ + \n :global EitherOr;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global Grep;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global ParseKeyValueStore;\r\ + \n :global RequiredRouterOS;\r\ + \n :global SendNotification2;\r\ + \n :global SymbolForNotification;\r\ + \n :global ValidateSyntax;\r\ + \n :global CommentsInScripts;\r\ + \n\r\ + \n :if ([ \$CertificateAvailable \"Root YE\" \"fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, trying wit\ + hout.\");\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=\$Scripts do={\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\ + \r\ + \n \$LogPrint info \$0 (\"Adding new script: \" . \$Script);\r\ + \n /system/script/add name=\$Script owner=\$Script source=\"#!rsc by \ + Vados\\n\" comment=\$NewComment;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :local CommitIdBefore \$CommitId;\r\ + \n :local GlobalConfVersionBefore \$GlobalConfVersion;\r\ + \n :local ReloadGlobal false;\r\ + \n :local DeviceMode [ /system/device-mode/get ];\r\ + \n\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSums ({});\r\ + \n :do {\r\ + \n :local Url (\$GlobalScriptsUrl . \$SumsDirAndFileName . \$GlobalScr\ + iptsUrlSuffix);\r\ + \n \$LogPrint debug \$0 (\"Fetching checksums from url: \" . \$Url);\ + \r\ + \n :set CheckSums [ :deserialize from=json ([ /tool/fetch check-certi\ + ficate=yes-without-crl \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url output\ + =user as-value ]->\"data\") ];\r\ + \n } on-error={ \$LogPrint warning \$0 (\"Err = \" . \$Err); }\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vado\ + s\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :local ScriptInfo [ \$ParseKeyValueStore (\$ScriptVal->\"comment\") \ + ];\r\ + \n :local SourceNew;\r\ + \n\r\ + \n :foreach Scheduler in=[ /system/scheduler/find where on-event~(\"\\\ + \\b\" . \$ScriptVal->\"name\" . \"\\\\b\") ] do={\r\ + \n :local SchedulerVal [ /system/scheduler/get \$Scheduler ];\r\ + \n :if (\$ScriptVal->\"policy\" != \$SchedulerVal->\"policy\") do={\r\ + \n \$LogPrint warning \$0 (\"Policies differ for script '\" . \$Scr\ + iptVal->\"name\" . \"' and its scheduler '\" . \$SchedulerVal->\"name\" . \ + \"'!\");\r\ + \n }\r\ + \n }\r\ + \n :do {\r\ + \n :if (\$ScriptInfo->\"ignore\" = true) do={\r\ + \n \$LogPrint debug \$0 (\"Ignoring script '\" . \$ScriptVal->\"nam\ + e\" . \"', as requested.\");\r\ + \n :error true;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSum (\$CheckSums->(\$ScriptVal->\"name\"));\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Scri\ + ptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :convert transform=md5 to=hex [ :tolf (\$ScriptVal->\"sou\ + rce\") ] ] = \$CheckSum) do={\r\ + \n \$LogPrint debug \$0 (\"Checksum for script '\" . \$ScriptVal-\ + >\"name\" . \"' matches, ignoring.\");\r\ + \n :error true;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len (\$ScriptInfo->\"certificate\") ] > 0) do={\r\ + \n :if ([ \$CertificateAvailable (\$ScriptInfo->\"certificate\") \"\ + fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, tryi\ + ng without.\");\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n :local BaseUrl [ \$EitherOr (\$ScriptInfo->\"base-url\") \$Globa\ + lScriptsUrl ];\r\ + \n :local UrlSuffix [ \$EitherOr (\$ScriptInfo->\"url-suffix\") \$G\ + lobalScriptsUrlSuffix ];\r\ + \n :local Url (\$BaseUrl . \$ScriptVal->\"name\" . \".rsc\" . \$Url\ + Suffix);\r\ + \n \$LogPrint warning \$0 (\"Fetching script '\" . (\$ScriptVal->\"\ + name\") . \"' from url: \" . \$Url);\r\ + \n :local Result [ /tool/fetch check-certificate=yes-without-crl \\\ + \r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url outp\ + ut=user as-value ];\r\ + \n :if (\$Result->\"status\" = \"finished\") do={\r\ + \n :set SourceNew [ :tolf (\$Result->\"data\") ];\r\ + \n } \r\ + \n } do={\r\ + \n \$LogPrint warning \$0 (\"Failed fetching script '\" . \$ScriptV\ + al->\"name\" . \"': \" . \$Err);\r\ + \n :if (\$Err != \"Fetch failed with status 404\") do={\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$ScriptVal->\"source\" = \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Removing dummy. Typo on installation\ + \?\");\r\ + \n /system/script/remove \$Script;\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Sc\ + riptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :len \$CheckSum ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"Added the script manually\? Skip u\ + pdates with 'ignore=true' in comment.\");\r\ + \n }\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$SourceNew ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"No update for script '\" . (\$ScriptVal-\ + >\"name\") . \"'.\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :local SourceCRLF [ :tocrlf \$SourceNew ];\r\ + \n :if (\$InitSetup != true && ((\$ScriptVal->\"name\") != \"AM-Globa\ + lConfig\" || (\$ScriptVal->\"name\") != \"AM-GlobalFunc\")) do={\r\ + \n :if (\$SourceNew = (\$ScriptVal->\"source\") || \$SourceCRLF = (\ + \$ScriptVal->\"source\")) do={\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\") \ + . \"' source did not change. End of lines set to CRLF.\");\r\ + \n if (\$ScriptUpdatesCRLF = false) do={\r\ + \n :put [ :tolf \$SourceNew ];\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\"\ + ) . \"' source update end of lines to LF.\");\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([ :pick \$SourceNew 0 14 ] != \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Looks like new script '\" . \$ScriptVa\ + l->\"name\" . \"' is not valid (missing shebang = '\$shebang') Ignoring!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if (\$CommentsInScripts = true) do={\r\ + \n :local CommentLine [ \$Grep \$SourceNew (\"\\23 Script comment:\ + \_\") ];\r\ + \n :if ([ :len \$CommentLine ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"The search in new script '\" . (\$Scr\ + iptVal->\"name\") . \"' for comment in script body, is not found result Ig\ + noring!\");\r\ + \n :error false;\r\ + \n } else={\r\ + \n :if ([ :len (\$ScriptVal->\"comment\")] = 0 || [ :len (\$Scri\ + ptVal->\"comment\")] != [ :pick \$CommentLine ([ :find \$CommentLine \":\"\ + ] + 2) [ :len \$CommentLine] ]) do={\r\ + \n \$LogPrint debug \$0 (\"Exsiting comment for script '\" . (\ + \$ScriptVal->\"name\") . \"' is '\" . (\$ScriptVal->\"comment\") . \"'.\")\ + ;\r\ + \n :set (\$ScriptVal->\"comment\") [ :pick \$CommentLine ([ :f\ + ind \$CommentLine \":\"] + 2) [ :len \$CommentLine] ];\r\ + \n \$LogPrint debug \$0 (\"New comment (\" . (\$ScriptVal->\"c\ + omment\") . \") for script '\" . (\$ScriptVal->\"name\") . \"' has been ad\ + ded!\");\r\ + \n } else={\r\ + \n \$LogPrint debug \$0 (\"Comment for script '\" . (\$ScriptV\ + al->\"name\") . \"' did not change.\");\r\ + \n :error false;\r\ + \n }\r\ + \n } \r\ + \n }\r\ + \n\r\ + \n :local RequiredROS ([ \$ParseKeyValueStore [ \$Grep \$SourceNew (\ + \"\\23 requires RouterOS, \") ] ]->version);\r\ + \n :if ([ \$RequiredRouterOS \$0 [ \$EitherOr \$RequiredROS \"0.0\" ]\ + \_false ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires RouterOS \" . \\\r\ + \n \$RequiredROS . \", which is not met by your installation. I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :local RequiredDM [ \$ParseKeyValueStore [ \$Grep \$SourceNew (\"\ + \\23 requires device-mode, \") ] ];\r\ + \n :local MissingDM ({});\r\ + \n :foreach Feature,Value in=\$RequiredDM do={\r\ + \n :if ([ :typeof (\$DeviceMode->\$Feature) ] = \"bool\" && (\$Devi\ + ceMode->\$Feature) = false) do={\r\ + \n :set MissingDM (\$MissingDM, \$Feature);\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len \$MissingDM ] > 0) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires disabled \" . \\\r\ + \n \"device-mode features (\" . [ :tostr \$MissingDM ] . \"). I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$ValidateSyntax \$SourceNew ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Syntax validation for script '\" . (\$\ + ScriptVal->\"name\") . \"' failed! Ignoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n \r\ + \n :log info (\"Updating script: \" . (\$ScriptVal->\"name\") . \" Sc\ + ript comment: \" . (\$ScriptVal->\"comment\"));\r\ + \n\r\ + \n /system/script/set owner=(\$ScriptVal->\"name\") comment=(\$Script\ + Val->\"comment\") \\\r\ + \n source=[ \$IfThenElse (\$ScriptUpdatesCRLF = true) \$SourceCRL\ + F \$SourceNew ] \$Script;\r\ + \n :if (\$ScriptVal->\"name\" = \"AM-GlobalConfig\" || \\\r\ + \n \$ScriptVal->\"name\" = \"AM-GlobalFunc\" || \\\r\ + \n \$ScriptVal->\"name\" ~ (\"^(AM-GlobalFunc\\\\.d|mod)/.\")) d\ + o={\r\ + \n :set ReloadGlobal true;\r\ + \n }\r\ + \n } on-error={ }\r\ + \n }\r\ + \n :if (\$ReloadGlobal = true) do={\r\ + \n \$LogPrint info \$0 (\"Reloading global configuration and functions.\ + \");\r\ + \n :onerror Err {\r\ + \n :global InitSetup (a);\r\ + \n /system/script {run AM-GlobalConfig; run AM-GlobalFunc;};\r\ + \n } do={\$LogPrint error \$0 (\"Reloading global configuration and fun\ + ctions failed! \" . \$Err)}\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore > \$GlobalConfVersion) do={\r\ + \n \$LogPrint warning \$0 (\"The configuration version decreased from \ + \" . \\\r\ + \n \$GlobalConfVersionBefore . \" to \" . \$GlobalConfVersion . \\\r\ + \n \". Installed an older version\?\");\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore < \$GlobalConfVersion) do={\r\ + \n :global GlobalConfChanges;\r\ + \n :global GlobalConfMigration;\r\ + \n :local ChangeLogCode;\r\ + \n :if ([ :len \$ChangeLogCode ] > 0) do={\r\ + \n :if ([ \$ValidateSyntax \$ChangeLogCode ] = true) do={\r\ + \n :onerror Err {\r\ + \n [ :parse \$ChangeLogCode ];\r\ + \n } do={\$LogPrint warning \$0 (\"The changelog failed to run: \" \ + . \$Err)}\r\ + \n } else={\$LogPrint warning \$0 (\"The changelog failed syntax vali\ + dation!\")}\r\ + \n }\r\ + \n :if ([ :len \$GlobalConfMigration ] > 0) do={\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Migration (\$GlobalConfMigration->[ :tostr \$I ]);\r\ + \n :do {\r\ + \n :if ([ :typeof \$Migration ] != \"str\") do={\r\ + \n \$LogPrint debug \$0 (\"Migration code for change \" . \$I .\ + \_\" is not available.\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$ValidateSyntax \$Migration ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Migration code for change \" . \$I\ + \_. \" failed syntax validation!\");\r\ + \n :error false}\r\ + \n \$LogPrint info \$0 (\"Applying migration for change \" . \$I \ + . \": \" . \$Migration);\r\ + \n :onerror Err {\r\ + \n [ :parse \$Migration ];\r\ + \n } do={\$LogPrint warning \$0 (\"Migration code for change \" .\ + \_\$I . \" failed to run: \" . \$Err)}\r\ + \n } on-error={ }\r\ + \n }\r\ + \n }\r\ + \n :local NotificationMessage (\"The configuration version on \" . \$Id\ + entity . \" increased \" . \\\r\ + \n \"to \" . \$GlobalConfVersion . \", current configuration may nee\ + d modification. \" . \\\r\ + \n \"Please review and update global-config-overlay, then re-run glo\ + bal-config.\");\r\ + \n \$LogPrint info \$0 (\$NotificationMessage);\r\ + \n :if ([ :len \$GlobalConfChanges ] > 0) do={\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n\\nChanges:\ + \");\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Change (\$GlobalConfChanges->[ :tostr \$I ]);\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n \" . \\\ + \r\ + \n [ \$SymbolForNotification \"pushpin\" \"*\" ] . \$Change);\r\ + \n \$LogPrint info \$0 (\"Change \" . \$I . \": \" . \$Change);\r\ + \n }\r\ + \n } else={\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n\\nNews and\ + \_changes are not available.\");\r\ + \n\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$GlobalConfChanges ] > 0) do={ :set GlobalConfChanges; \ + } else={ :global GlobalConfChanges (a); }\r\ + \n :if ([ :len \$GlobalConfMigration ] > 0) do={ :set GlobalConfMigrati\ + on; } else={ :global GlobalConfMigration (a); }\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n} }\r\ + \n\r\ + \n# load modules\r\ + \n:foreach Script in=[ /system/script/find where name ~ \"^(global-functio\ + ns\\\\.d|mod)/.\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :if ([ \$ValidateSyntax (\$ScriptVal->\"source\") ] = true) do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' f\ + ailed to run: \" . \$Err);\r\ + \n }\r\ + \n } else={\r\ + \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' fai\ + led syntax validation, skipping.\");\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# Add and fix global scheduler\r\ + \n:put \"Add or/and fix Global scheduler...\";\r\ + \n:local OnEvent \"/system/script { run AM-GlobalConfig; run AM-GlobalFunc\ + ; }\";\r\ + \n:local Comment \"Every Day Set Global Environment Variables\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-SetGlobalEnv\" ] ] \ + = 0) do={\r\ + \n /system/scheduler/add name=\"AM-SetGlobalEnv\" comment=\$Comment on-ev\ + ent=\$OnEvent start-time=startup;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" comment ] != \$Comment)\ + \_do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" comment=\$Comment;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" on-event ] != \$OnEvent\ + ) do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" on-event=\$OnEvent;\r\ + \n}\r\ + \n# Add Update Script scheduler\r\ + \n:put \"Add or/and fix Update Script scheduler\";\r\ + \n:set OnEvent \":global ScriptInstallUpdate; \\\$ScriptInstallUpdate;\";\ + \r\ + \n:set Comment \"Every Day Check For Update Scripts\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-ScriptInstallUpdate\ + \" ] ] = 0) do={\r\ + \n/system/scheduler/add name=\"AM-ScriptInstallUpdate\" comment=\$Comment \ + start-time=startup interval=1d on-event=\$OnEvent;\r\ + \n}\r\ + \n\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady;\r\ + \n :retry { :if (\$GlobalConfReady != true) do={ :error (\"Global configs\ + \_not ready.\"); }; } delay=100ms max=5;\r\ + \n\r\ + \n:log warning (\"This script \$ScriptName Loaded \" . \\\r\ + \n [ \$IfThenElse (\$CommitId != \"unknown\") ([ \$CommitBrief ] . \" \ + \") ] . \\\r\ + \n \"on \" . \$devBoardName . \"\\nRouterOS: \" . \$devCurVersion . \"\ + \\nArchitecture: \" . \$devCurArch . \"\\nIdentity: \" . \$Identity);\r\ + \n # signal we are ready\r\ + \n:set GlobalFuncReady true;\r\ + \n:set ExitOK true;\r\ + \n\r\ + \n:log info (\$0 . \"Global configs ready!\");\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n}\r\ + \n" +add comment="awg3vds installer" dont-require-permissions=no name=\ + AM-awg3vdsInstall owner=AM-awg3vdsInstall policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-awg3vdsInstall\r\ + \n# Script comment: awg3vds installer\r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch, scheduler\r\ + \n# ============================================================\r\ + \n# AWG Proxy -- MikroTik RouterOS (protocol: v3)\r\ + \n# 2026-09-12 08:41:48\r\ + \n# ============================================================\r\ + \n# 0. Check prerequisites\r\ + \n:if ([:len [/system/package/find where name=\"container\" disabled=no]] \ + = 0) do={\r\ + \n :put \"Container package is not installed or disabled. Install it and \ + reboot.\"\r\ + \n :error \"Usage: /system/device-mode/update container=yes\"\r\ + \n}\r\ + \n\r\ + \n# Check storage device\r\ + \n{\r\ + \n :local targetDisk \"usb1\"\r\ + \n :local diskFree 0\r\ + \n :do { :set diskFree [/disk/get [find where mount-point=\$targetDisk] f\ + ree] } on-error={}\r\ + \n :if (\$diskFree = 0) do={\r\ + \n :local baseDisk \$targetDisk\r\ + \n :local dashPos [:find \$targetDisk \"-part\"]\r\ + \n :if ([:typeof \$dashPos] != \"nil\") do={ :set baseDisk [:pick \$tar\ + getDisk 0 \$dashPos] }\r\ + \n :if ([:len [/disk/find where slot=\$baseDisk]] > 0) do={\r\ + \n :put (\"Device \$baseDisk found but \$targetDisk is not available.\ + \")\r\ + \n :put \"Format \$baseDisk as ext4\? ALL DATA WILL BE ERASED!\"\r\ + \n :put \"Press 'y' to confirm, any other key to cancel:\"\r\ + \n :local key [/terminal/inkey timeout=30]\r\ + \n :if (\$key = 121 || \$key = 89) do={\r\ + \n :put \"Formatting \$baseDisk as ext4...\"\r\ + \n /disk/format-drive \$baseDisk file-system=ext4 label=\$baseDisk\ + \r\ + \n :delay 3s\r\ + \n :do { :set diskFree [/disk/get [find where mount-point=\$targetD\ + isk] free] } on-error={}\r\ + \n :if (\$diskFree = 0) do={\r\ + \n :put (\"ERROR: \$targetDisk not found after formatting.\")\r\ + \n :put \"Check mount point: /disk/print\"\r\ + \n :error (\"Mount point \$targetDisk not found after formatting\ + \")\r\ + \n }\r\ + \n :put (\"Formatted OK. Free: \" . (\$diskFree / 1048576) . \" MB\ + \")\r\ + \n } else={\r\ + \n :error \"Formatting cancelled\"\r\ + \n }\r\ + \n } else={\r\ + \n :put (\"ERROR: Storage device \$targetDisk not found.\")\r\ + \n :put \"Check available disks: /disk/print\"\r\ + \n :error (\"Storage not found: \" . \$targetDisk)\r\ + \n }\r\ + \n } else={\r\ + \n :put (\"Storage OK: \$targetDisk (\" . (\$diskFree / 1048576) . \" M\ + B free)\")\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# 1. Uninstall and update scripts\r\ + \n/system/script/add name=awg3vds-uninstall comment=awg3vds source={\r\ + \n :put \"Uninstallimg AmneziaWG...\"\r\ + \n :log info \"Uninstallimg AmneziaWG...\"\r\ + \n :local prevDNS \"\"\r\ + \n :do { :set prevDNS [/container/envs/get [find where list=\"awg3vds-env\ + \" key=\"AWG_PREV_DNS\"] value] } on-error={}\r\ + \n :local prevTmpdir \"\"\r\ + \n :do { :set prevTmpdir [/container/envs/get [find where list=\"awg3vds-\ + env\" key=\"AWG_PREV_TMPDIR\"] value] } on-error={}\r\ + \n /ip/route/remove [find where comment=awg3vds-tunnel]\r\ + \n /ip/route/remove [find where comment=awg3vds-dns]\r\ + \n :do { /system/scheduler/remove [find where comment~\"awg3vds\"] } on-e\ + rror={}\r\ + \n :do { /system/script/remove [find where comment~\"awg3vds\" and name!=\ + \"awg3vds-uninstall\"] } on-error={}\r\ + \n /container/stop [find where interface=veth-awg3vds]\r\ + \n :delay 7s\r\ + \n /container/remove [find where interface=veth-awg3vds]\r\ + \n /container/envs/remove [find where list=\"awg3vds-env\"]\r\ + \n :if (\$prevDNS != \"\") do={\r\ + \n :do { /ip/dns/set servers=\"\$prevDNS\" } on-error={}\r\ + \n :put (\"DNS restored to: \$prevDNS\")\r\ + \n }\r\ + \n /container/config set tmpdir=\$prevTmpdir\r\ + \n :put (\"Container tmpdir restored to: \$prevTmpdir\")\r\ + \n /ip/firewall/nat/remove [find where out-interface=\"wg-awg3vds\"]\r\ + \n /ip/firewall/nat/remove [find where src-address=\"172.19.14.100/30\"]\ + \r\ + \n /ip/address/remove [find where address=\"172.19.14.101/30\"]\r\ + \n :do { /ipv6/firewall/nat/remove [find where comment=awg3vds-v6-nat] } \ + on-error={}\r\ + \n :do { /ipv6/firewall/nat/remove [find where comment=awg3vds-dstnat6] }\ + \_on-error={}\r\ + \n :do { /ipv6/firewall/filter/remove [find where comment=awg3vds-v6-out]\ + \_} on-error={}\r\ + \n :do { /ipv6/firewall/filter/remove [find where comment=awg3vds-awg-in6\ + ] } on-error={}\r\ + \n :do { /ipv6/nd/remove [find where interface=veth-awg3vds] } on-error={\ + }\r\ + \n :do { /ipv6/nd/prefix/remove [find where interface=veth-awg3vds] } on-\ + error={}\r\ + \n :do { /ipv6/address/remove [find where comment=awg3vds-v6] } on-error=\ + {}\r\ + \n /interface/veth/remove [find where name=\"veth-awg3vds\"]\r\ + \n /interface/wireguard/peers/remove [find where interface=\"wg-awg3vds\"\ + ]\r\ + \n /ip/address/remove [find where interface=\"wg-awg3vds\"]\r\ + \n /interface/wireguard/remove [find where name=\"wg-awg3vds\"]\r\ + \n :do { /file/remove [find where name~\"awg3vds.+tar\"] } on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/awg3vds\"] } on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/ru_ranges_timeout.rsc\"] } \ + on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/ru_ranges.rsc\"] } on-error\ + ={}\r\ + \n :do { /file/remove [find where name~\"usb1/pull\"] } on-error={}\r\ + \n :put \"Uninstall AmneziaWG Proxy complete!\"\r\ + \n :log info \"Uninstall AmneziaWG Proxy complete!\"\r\ + \n# /system/script/remove [find where name=awg3vds-uninstall]\r\ + \n}\r\ + \n/system/script/add name=awg3vds-update comment=awg3vds source={\r\ + \n :local cids [/container/find where interface=veth-awg3vds and !stopped\ + ]\r\ + \n :if ([:len \$cids] = 0) do={ :set cids [/container/find where interfac\ + e=veth-awg3vds and start-on-boot=yes] }\r\ + \n :if ([:len \$cids] = 0) do={ :set cids [/container/find where interfac\ + e=veth-awg3vds] }\r\ + \n :if ([:len \$cids] = 0) do={\r\ + \n :put \"Container awg3vds not found\"\r\ + \n :log warning \"awg3vds-update: container not found\"\r\ + \n } else={\r\ + \n :local cid [:pick \$cids ([:len \$cids] - 1)]\r\ + \n :local img [/container/get \$cid remote-image]\r\ + \n :local ver [/system/resource/get version]\r\ + \n :local dotPos [:find \$ver \".\"]\r\ + \n :local rest [:pick \$ver (\$dotPos + 1) [:len \$ver]]\r\ + \n :local endPos [:find \$rest \".\"]\r\ + \n :if ([:typeof \$endPos] = \"nil\") do={ :set endPos [:find \$rest \"\ + \_\"] }\r\ + \n :local minor [:tonum [:pick \$rest 0 \$endPos]]\r\ + \n :local wantRunning true\r\ + \n :do { :if ([/container/get \$cid start-on-boot] != true) do={ :set w\ + antRunning false } } on-error={}\r\ + \n :local healthy true\r\ + \n :if ([:len [/container/get \$cid image-id]] = 0) do={ :set healthy f\ + alse }\r\ + \n :if (\$wantRunning) do={\r\ + \n :do { :if ([/container/get \$cid stopped] = true) do={ :set health\ + y false } } on-error={}\r\ + \n }\r\ + \n :if (!\$healthy && \$wantRunning && [:len [/container/get \$cid imag\ + e-id]] > 0) do={\r\ + \n :put \"Container is down - trying to start it\"\r\ + \n :do { /container/start \$cid } on-error={}\r\ + \n :delay 8s\r\ + \n :set healthy true\r\ + \n :do { :if ([/container/get \$cid stopped] = true) do={ :set health\ + y false } } on-error={}\r\ + \n :if (\$healthy) do={\r\ + \n :put \"Container is back up\"\r\ + \n :log info \"awg3vds: container restarted by the update script\"\ + \r\ + \n }\r\ + \n }\r\ + \n :if (\$img = \"\" && \$minor >= 22 && !\$healthy) do={\r\ + \n :local imgTag \"latest\"\r\ + \n :local rbModel \"\"\r\ + \n :do { :set rbModel [[:parse \":return [/system/routerboard/get mod\ + el]\"]] } on-error={}\r\ + \n :local bName [/system/resource/get board-name]\r\ + \n :if (\$rbModel~\"E50UG\" || \$rbModel~\"E60iUGS\" || \$bName~\"E50\ + UG\" || \$bName~\"E60iUGS\" || \$bName~\"^hEX\") do={\r\ + \n :set imgTag \"latest-armv5\"\r\ + \n }\r\ + \n :set img (\"ghcr.io/timbrs/awg-proxy:\" . \$imgTag)\r\ + \n :put (\"Container is down and was installed from a file - pointing\ + \_it at \" . \$img)\r\ + \n :log warning \"awg3vds-update: broken file install, switching to t\ + he registry\"\r\ + \n :do { /container/set \$cid remote-image=\$img } on-error={}\r\ + \n }\r\ + \n :if (\$img = \"\") do={\r\ + \n :put \"Installed from a local image file - /container/repull only \ + updates registry installs.\"\r\ + \n :put \"Reinstall with the configurator on RouterOS 7.22+ to switch\ + \_to one-command updates.\"\r\ + \n } else={\r\ + \n :if (\$minor < 22) do={\r\ + \n :put (\"/container/repull needs RouterOS 7.22+, this router runs\ + \_\" . \$ver)\r\ + \n :if (!\$healthy) do={ :log error (\"awg3vds-update: container is\ + \_down, and \" . \$ver . \" has no /container/repull\") }\r\ + \n } else={\r\ + \n :local rootDir [/container/get \$cid root-dir]\r\ + \n :if ([:pick \$rootDir 0 1] = \"/\") do={ :set rootDir [:pick \$r\ + ootDir 1 [:len \$rootDir]] }\r\ + \n :local rootDirOrig \$rootDir\r\ + \n :local slashPos [:find \$rootDir \"/\"]\r\ + \n :local disk \$rootDir\r\ + \n :if ([:typeof \$slashPos] != \"nil\") do={ :set disk [:pick \$ro\ + otDir 0 \$slashPos] }\r\ + \n :local verPath \"awg-update-check.json\"\r\ + \n :if (\$disk != \"disk1\") do={\r\ + \n :do { /file/make-directory (\$disk . \"/pull\") } on-error={}\ + \r\ + \n /container/config set tmpdir=(\$disk . \"/pull\")\r\ + \n :set verPath (\$disk . \"/pull/awg-update-check.json\")\r\ + \n }\r\ + \n :local newVer \"\"\r\ + \n :do {\r\ + \n /tool/fetch url=\"https://api.github.com/repos/timbrs/amneziaw\ + g-mikrotik-c/releases/latest\" dst-path=\$verPath http-max-redirect-count=\ + 10\r\ + \n :local relJson [/file/get [find where name=\$verPath] contents\ + ]\r\ + \n :local tagPos [:find \$relJson \"\\\"tag_name\\\":\\\"\"]\r\ + \n :if ([:typeof \$tagPos] != \"nil\") do={\r\ + \n :local tagRest [:pick \$relJson (\$tagPos + 12) [:len \$relJ\ + son]]\r\ + \n :set newVer [:pick \$tagRest 0 [:find \$tagRest \"\\\"\"]]\r\ + \n }\r\ + \n :do { /file/remove [find where name=\$verPath] } on-error={}\r\ + \n } on-error={ :put \"Could not read the published version\" }\r\ + \n :local curVer \"\"\r\ + \n :do { :set curVer [/container/envs/get [find where list=\"awg3vd\ + s-env\" key=\"AWG_IMAGE_VER\"] value] } on-error={}\r\ + \n :local doPull true\r\ + \n :if (\$healthy) do={\r\ + \n :if (\$newVer = \"\") do={\r\ + \n :set doPull false\r\ + \n :put \"Published version unknown - leaving the healthy conta\ + iner alone\"\r\ + \n }\r\ + \n :if (\$newVer != \"\" && \$newVer = \$curVer) do={\r\ + \n :set doPull false\r\ + \n :put (\"Already on \" . \$curVer . \" - nothing to pull, tun\ + nel untouched\")\r\ + \n }\r\ + \n }\r\ + \n :if (\$doPull) do={\r\ + \n :if (!\$healthy) do={\r\ + \n :put \"Container is not healthy - pulling the image again\"\ + \r\ + \n :log warning \"awg3vds-update: container unhealthy, forcing \ + a pull\"\r\ + \n }\r\ + \n :put (\"Updating \" . \$img . \" ...\")\r\ + \n :log info \"awg3vds: repull started\"\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.backu\ + p\")] } on-error={}\r\ + \n :do { [:parse \"/container/set \$cid ignore-remote-image-chang\ + e=yes\"] } on-error={}\r\ + \n /container/repull \$cid\r\ + \n :local waited 0\r\ + \n :while ([:len [/container/get \$cid image-id]] = 0 && \$waited\ + \_< 180) do={\r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n :if ([:len [/container/get \$cid image-id]] = 0) do={\r\ + \n :put \"Pull failed - retrying once in 15s\"\r\ + \n :delay 15s\r\ + \n /container/repull \$cid\r\ + \n :set waited 0\r\ + \n :while ([:len [/container/get \$cid image-id]] = 0 && \$wait\ + ed < 180) do={\r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n }\r\ + \n :local backUp false\r\ + \n :if ([:len [/container/get \$cid image-id]] > 0) do={\r\ + \n :set backUp true\r\ + \n :if (\$wantRunning) do={\r\ + \n :delay 3s\r\ + \n :do { /container/start \$cid } on-error={}\r\ + \n :delay 8s\r\ + \n :set backUp false\r\ + \n :do { :if ([/container/get \$cid stopped] != true) do={ :s\ + et backUp true } } on-error={}\r\ + \n }\r\ + \n }\r\ + \n :if (!\$backUp) do={\r\ + \n :put \"Container did not come back up - rebuilding it from t\ + he registry\"\r\ + \n :log warning \"awg3vds-update: container did not come back, \ + rebuilding\"\r\ + \n :do { /container/stop \$cid } on-error={}\r\ + \n :delay 5s\r\ + \n :do { /container/remove \$cid } on-error={}\r\ + \n :delay 3s\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.bac\ + kup\")] } on-error={}\r\ + \n :do { /container/add remote-image=\$img interface=veth-awg3v\ + ds envlist=awg3vds-env hostname=awg3vds root-dir=\$rootDirOrig logging=no \ + start-on-boot=yes comment=awg3vds } on-error={}\r\ + \n :set waited 0\r\ + \n :local newCids [/container/find where interface=veth-awg3vds\ + \_and start-on-boot=yes]\r\ + \n :if ([:len \$newCids] = 0) do={ :set newCids [/container/fin\ + d where interface=veth-awg3vds] }\r\ + \n :while ([:len \$newCids] > 0 && [:len [/container/get [:pick\ + \_\$newCids ([:len \$newCids] - 1)] image-id]] = 0 && \$waited < 180) do={\ + \r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n :if ([:len \$newCids] > 0 && [:len [/container/get [:pick \$\ + newCids ([:len \$newCids] - 1)] image-id]] > 0) do={\r\ + \n :do { /container/set [:pick \$newCids ([:len \$newCids] - \ + 1)] shm-size=4M } on-error={}\r\ + \n :do { [:parse \"/container/set [find where interface=veth-\ + awg3vds] ignore-remote-image-change=yes\"] } on-error={}\r\ + \n :do { [:parse \"/container/set [find where interface=veth-\ + awg3vds] restart-policy=on-failure restart-interval=30s restart-max-count=\ + 10\"] } on-error={}\r\ + \n :do { /container/start [:pick \$newCids ([:len \$newCids] \ + - 1)] } on-error={}\r\ + \n :delay 8s\r\ + \n :do { :if ([/container/get [:pick \$newCids ([:len \$newCi\ + ds] - 1)] stopped] != true) do={ :set backUp true } } on-error={}\r\ + \n }\r\ + \n :if (\$backUp) do={\r\ + \n :put \"Container rebuilt\"\r\ + \n :log info \"awg3vds: container rebuilt after update\"\r\ + \n } else={\r\ + \n :put \"Rebuild failed - the tunnel is down. Netwatch keeps\ + \_the router online meanwhile.\"\r\ + \n :put \"This script runs again on the next schedule and wil\ + l retry.\"\r\ + \n :log error \"awg3vds-update: rebuild failed, tunnel is dow\ + n\"\r\ + \n }\r\ + \n }\r\ + \n :if (\$backUp && \$newVer != \"\") do={\r\ + \n :do { /container/envs/remove [find where list=\"awg3vds-env\ + \" key=\"AWG_IMAGE_VER\"] } on-error={}\r\ + \n :do { /container/envs/add list=awg3vds-env key=AWG_IMAGE_VER\ + \_value=\$newVer } on-error={}\r\ + \n }\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.backu\ + p\")] } on-error={}\r\ + \n :if (\$backUp) do={\r\ + \n :put (\"Update done: \" . \$img)\r\ + \n :log info \"awg3vds: update done\"\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n# Daily update check. Skipped if scheduler is not allowed by device-mode\ + \r\ + \n{\r\ + \n :local schedOk true\r\ + \n :do { :set schedOk [/system/device-mode/get scheduler] } on-error={}\r\ + \n :if (\$schedOk) do={\r\ + \n /system/scheduler/add name=awg3vds-update on-event=\"/system/script/\ + run awg3vds-update\" start-time=04:30:00 interval=1d comment=awg3vds\r\ + \n } else={\r\ + \n :put \"WARNING: scheduler not allowed by device-mode, no daily updat\ + e check.\"\r\ + \n :put \"Update by hand: /system/script/run awg3vds-update\"\r\ + \n :put \"To allow it: /system/device-mode/update scheduler=yes\"\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# 2. Network infrastructure\r\ + \n/interface/veth/add name=veth-awg3vds address=172.19.14.102/30 gateway=1\ + 72.19.14.101\r\ + \n/ip/address/add address=172.19.14.101/30 interface=veth-awg3vds\r\ + \n/ip/firewall/nat/add chain=srcnat action=masquerade src-address=172.19.1\ + 4.100/30\r\ + \n\r\ + \n# 3. WireGuard interface (MikroTik derives the public key automatically)\ + \r\ + \n/interface/wireguard/add name=wg-awg3vds private-key=\"AEU+diR7SCIEOtwOW\ + SWR3pEpkw6v0Qro2LRF0SnPpnw=\" listen-port=41430 mtu=1320 disabled=yes\r\ + \n/interface/wireguard/peers/add interface=wg-awg3vds public-key=\"MMWjD/T\ + PNpupCvhXLCAw0xHXV4N6jgtQkg9Pl6pcQhU=\" preshared-key=\"r9B13bB7gUTqde6zgB\ + DfffFIUN6puP2gOWdK5zVS3nw=\" endpoint-address=172.19.14.102 endpoint-port=\ + 51820 allowed-address=10.31.31.0/24,0.0.0.0/0 persistent-keepalive=14\r\ + \n/ip/address/add address=10.31.31.2/24 interface=wg-awg3vds\r\ + \n\r\ + \n# 4. Container environment variables\r\ + \n/container/envs/add list=awg3vds-env key=AWG_LISTEN value=\":51820\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_REMOTE value=\"89.110.101.1\ + 7:31031\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_JC value=\"5\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_JMIN value=\"510\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_JMAX value=\"952\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_S1 value=\"138\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_S2 value=\"105\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_H1 value=\"457615290-457646\ + 150\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_H2 value=\"1307355386-13073\ + 63580\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_H3 value=\"2441734303-24417\ + 81787\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_H4 value=\"3719180788-37191\ + 95844\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_SERVER_PUB value=\"MMWjD/TP\ + NpupCvhXLCAw0xHXV4N6jgtQkg9Pl6pcQhU=\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_CLIENT_PUB value=[/interfac\ + e/wireguard/get [find name=wg-awg3vds] public-key]\r\ + \n/container/envs/add list=awg3vds-env key=AWG_S3 value=\"51\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_S4 value=\"22\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_I1 value=\"\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_I2 value=\"\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_I3 value=\"\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_I4 value=\"\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_I5 value=\"\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_HEADER_PROTECTION_KEY value\ + =\"FkGxbrW6ds3YPWNl48OWFEccrLC4tF94z9MnoKUZUsM=\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_CONTENT_PADDING value=\"54-\ + 119\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_REKEY_AFTER value=\"102-130\ + \"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_REKEY_TIMEOUT value=\"6-8\"\ + \r\ + \n/container/envs/add list=awg3vds-env key=AWG_REJECT_AFTER value=\"174-19\ + 5\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_KEEPALIVE_TIMEOUT value=\"1\ + 4-21\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_MAX_HANDSHAKE_ATTEMPTS valu\ + e=\"12-14\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_NO_DF value=\"1\"\r\ + \n# Perf: give each forwarding thread its own core (4+ core routers)\r\ + \n{ :if ([/system/resource/get cpu-count] >= 4) do={ /container/envs/add l\ + ist=awg3vds-env key=AWG_CPU_C2S value=\"1\"; /container/envs/add list=awg3\ + vds-env key=AWG_CPU_S2C value=\"2\" } }\r\ + \n# NOTE on MTU: the value above assumes this tunnel is the last hop.\r\ + \n# If the server forwards your traffic into another tunnel, subtract\r\ + \n# that tunnel's overhead too, or every packet leaves in two fragments.\ + \r\ + \n\r\ + \n# 5. DNS\r\ + \n{ :local rawDNS [/ip/dns/get servers]; :local prevDNS \"\"; :foreach s i\ + n=[:toarray \$rawDNS] do={ :if ([:len \$prevDNS] > 0) do={ :set prevDNS \"\ + \$prevDNS,\$s\" } else={ :set prevDNS \$s } }; /container/envs/add list=aw\ + g3vds-env key=AWG_PREV_DNS value=\"\$prevDNS\" }\r\ + \n# NOTE: replaces existing DNS configuration\r\ + \n/ip/dns/set servers=89.110.101.17,8.8.4.4\r\ + \n# DNS 89.110.101.17 \D0\B8\D0\B4\D1\91\D1\82 \D0\BE\D0\B1\D1\89\D0\B8\D0\ + \BC \D0\BC\D0\B0\D1\80\D1\88\D1\80\D1\83\D1\82\D0\BE\D0\BC (\D0\B2 \D0\B0\ + \D0\BA\D1\82\D0\B8\D0\B2\D0\BD\D1\8B\D0\B9 \D1\82\D1\83\D0\BD\D0\BD\D0\B5\ + \D0\BB\D1\8C / default),\r\ + \n# \D0\B1\D0\B5\D0\B7 \D0\BF\D1\80\D0\B8\D0\B2\D1\8F\D0\B7\D0\BA\D0\B8 \ + \D0\BA wg-awg3vds: \D0\B8\D0\BD\D0\B0\D1\87\D0\B5 \D0\BF\D0\B0\D0\B4\D0\B5\ + \D0\BD\D0\B8\D0\B5 \D1\82\D1\83\D0\BD\D0\BD\D0\B5\D0\BB\D1\8F \D1\83\D0\BD\ + \D0\BE\D1\81\D0\B8\D1\82 \D1\81 \D1\81\D0\BE\D0\B1\D0\BE\D0\B9 \D1\80\D0\ + \B5\D0\B7\D0\BE\D0\BB\D0\B2.\r\ + \n# DNS 8.8.4.4 \D0\B8\D0\B4\D1\91\D1\82 \D0\BE\D0\B1\D1\89\D0\B8\D0\BC \ + \D0\BC\D0\B0\D1\80\D1\88\D1\80\D1\83\D1\82\D0\BE\D0\BC (\D0\B2 \D0\B0\D0\ + \BA\D1\82\D0\B8\D0\B2\D0\BD\D1\8B\D0\B9 \D1\82\D1\83\D0\BD\D0\BD\D0\B5\D0\ + \BB\D1\8C / default),\r\ + \n# \D0\B1\D0\B5\D0\B7 \D0\BF\D1\80\D0\B8\D0\B2\D1\8F\D0\B7\D0\BA\D0\B8 \ + \D0\BA wg-awg3vds: \D0\B8\D0\BD\D0\B0\D1\87\D0\B5 \D0\BF\D0\B0\D0\B4\D0\B5\ + \D0\BD\D0\B8\D0\B5 \D1\82\D1\83\D0\BD\D0\BD\D0\B5\D0\BB\D1\8F \D1\83\D0\BD\ + \D0\BE\D1\81\D0\B8\D1\82 \D1\81 \D1\81\D0\BE\D0\B1\D0\BE\D0\B9 \D1\80\D0\ + \B5\D0\B7\D0\BE\D0\BB\D0\B2.\r\ + \n\r\ + \n# 6. Download, create and start container\r\ + \n:local prevTmpdir [/container/config/get tmpdir]\r\ + \n/container/envs/add list=awg3vds-env key=AWG_PREV_TMPDIR value=\$prevTmp\ + dir\r\ + \n/container/config set tmpdir=usb1/pull memory-high=200M\r\ + \n{\r\ + \n :local arch [/system/resource/get architecture-name]\r\ + \n :local ver [/system/resource/get version]\r\ + \n :local dotPos [:find \$ver \".\"]\r\ + \n :local rest [:pick \$ver (\$dotPos + 1) [:len \$ver]]\r\ + \n :local endPos [:find \$rest \".\"]\r\ + \n :if ([:typeof \$endPos] = \"nil\") do={ :set endPos [:find \$rest \" \ + \"] }\r\ + \n :local minor [:tonum [:pick \$rest 0 \$endPos]]\r\ + \n :local suffix \"\"\r\ + \n :if (\$minor <= 20) do={ :set suffix \"-7.20-Docker\" }\r\ + \n :local file \"\"\r\ + \n :local imgTag \"latest\"\r\ + \n :if (\$arch = \"arm64\") do={ :set file (\"awg-proxy-arm64\" . \$suffi\ + x . \".tar.gz\") }\r\ + \n :if (\$arch = \"arm\") do={\r\ + \n :set file (\"awg-proxy-arm\" . \$suffix . \".tar.gz\")\r\ + \n :local rbModel \"\"\r\ + \n :do { :set rbModel [[:parse \":return [/system/routerboard/get model\ + ]\"]] } on-error={}\r\ + \n :local bName [/system/resource/get board-name]\r\ + \n :if (\$rbModel~\"E50UG\" || \$rbModel~\"E60iUGS\" || \$bName~\"E50UG\ + \" || \$bName~\"E60iUGS\" || \$bName~\"^hEX\") do={\r\ + \n :set file (\"awg-proxy-armv5\" . \$suffix . \".tar.gz\")\r\ + \n :set imgTag \"latest-armv5\"\r\ + \n }\r\ + \n }\r\ + \n :if (\$arch ~ \"x86\") do={ :set file (\"awg-proxy-amd64\" . \$suffix \ + . \".tar.gz\") }\r\ + \n :if (\$file = \"\") do={ :error \"Unsupported architecture: \$arch\" }\ + \r\ + \n :local url \"https://github.com/timbrs/amneziawg-mikrotik-c/releases/l\ + atest/download/\$file\"\r\ + \n :local filePath (\"usb1/pull/\" . \$file)\r\ + \n :local altPath (\"usb1/\" . \$file)\r\ + \n :local rootDir \"usb1/awg3vds\"\r\ + \n :do { /file/make-directory usb1/pull } on-error={}\r\ + \n :if ([:len [/file/find where name=\$filePath]] = 0 && [:len [/file/fin\ + d where name=\$altPath]] > 0) do={\r\ + \n :set filePath \$altPath\r\ + \n }\r\ + \n :local added false\r\ + \n :local fetched false\r\ + \n :if ([:len [/file/find where name=\$filePath]] > 0) do={\r\ + \n :put (\"Using image already on the router: \" . \$filePath)\r\ + \n /container/add file=\$filePath interface=veth-awg3vds envlist=awg3vd\ + s-env hostname=awg3vds root-dir=\$rootDir logging=no start-on-boot=yes com\ + ment=awg3vds\r\ + \n :set added true\r\ + \n }\r\ + \n :if (!\$added && \$minor >= 22) do={\r\ + \n :local img (\"ghcr.io/timbrs/awg-proxy:\" . \$imgTag)\r\ + \n :put (\"Pulling \" . \$img)\r\ + \n /container/add remote-image=\$img interface=veth-awg3vds envlist=awg\ + 3vds-env hostname=awg3vds root-dir=\$rootDir logging=no start-on-boot=yes \ + comment=awg3vds\r\ + \n :local cids [/container/find where interface=veth-awg3vds]\r\ + \n :local waited 0\r\ + \n :while ([:len \$cids] > 0 && [:len [/container/get [:pick \$cids 0] \ + image-id]] = 0 && \$waited < 120) do={\r\ + \n :delay 2s\r\ + \n :set waited (\$waited + 2)\r\ + \n }\r\ + \n :if ([:len \$cids] > 0 && [:len [/container/get [:pick \$cids 0] ima\ + ge-id]] > 0) do={\r\ + \n :set added true\r\ + \n :put (\"Pulled from registry in \" . \$waited . \"s\")\r\ + \n :do {\r\ + \n :local verPath (\$filePath . \".rel\")\r\ + \n /tool/fetch url=\"https://api.github.com/repos/timbrs/amneziawg-\ + mikrotik-c/releases/latest\" dst-path=\$verPath http-max-redirect-count=10\ + \r\ + \n :local relJson [/file/get [find where name=\$verPath] contents]\ + \r\ + \n :local tagPos [:find \$relJson \"\\\"tag_name\\\":\\\"\"]\r\ + \n :local tagRest [:pick \$relJson (\$tagPos + 12) [:len \$relJson]\ + ]\r\ + \n /container/envs/add list=awg3vds-env key=AWG_IMAGE_VER value=[:p\ + ick \$tagRest 0 [:find \$tagRest \"\\\"\"]]\r\ + \n /file/remove [find where name=\$verPath]\r\ + \n } on-error={}\r\ + \n } else={\r\ + \n :put \"Registry unavailable, falling back to the release archive\"\ + \r\ + \n :do { /container/remove \$cids } on-error={}\r\ + \n :delay 2s\r\ + \n }\r\ + \n }\r\ + \n :if (!\$added) do={\r\ + \n :local freeStorage 0\r\ + \n :do { :set freeStorage [/disk/get [find where mount-point=\"usb1\"] \ + free] } on-error={}\r\ + \n :if (\$freeStorage < 262144) do={\r\ + \n :put (\"WARNING: Low disk space (\" . (\$freeStorage / 1024) . \"K\ + B free). Need at least 256KB.\")\r\ + \n :put \"See: https://github.com/timbrs/amneziawg-mikrotik-c#insuffi\ + cient-disk-space\"\r\ + \n :error \"Insufficient disk space\"\r\ + \n }\r\ + \n :put (\"Fetching: \$url -> \" . \$filePath)\r\ + \n /tool/fetch url=\$url dst-path=\$filePath http-max-redirect-count=10\ + \r\ + \n /container/add file=\$filePath interface=veth-awg3vds envlist=awg3vd\ + s-env hostname=awg3vds root-dir=\$rootDir logging=no start-on-boot=yes com\ + ment=awg3vds\r\ + \n :set fetched true\r\ + \n }\r\ + \n :if (\$minor > 20) do={ [:parse \"/container/set [find where interface\ + =veth-awg3vds] shm-size=4M\"] }\r\ + \n :do { [:parse \"/container/set [find where interface=veth-awg3vds] ign\ + ore-remote-image-change=yes\"] } on-error={}\r\ + \n :do { [:parse \"/container/set [find where interface=veth-awg3vds] res\ + tart-policy=on-failure restart-interval=30s restart-max-count=10\"] } on-e\ + rror={}\r\ + \n :if (\$fetched) do={ /file/remove \$filePath }\r\ + \n :local freeMem [/system/resource/get free-memory]\r\ + \n :if (\$freeMem < 16777216) do={\r\ + \n :put (\"WARNING: Low memory (\" . (\$freeMem / 1048576) . \"MB free)\ + . 16MB+ recommended.\")\r\ + \n }\r\ + \n /container/start [find where interface=veth-awg3vds]\r\ + \n :do { /file/remove [find where name=\"console-dump.txt\"] } on-error={\ + }\r\ + \n :put \"Waiting for container to start...\"\r\ + \n :delay 5s\r\ + \n /interface/wireguard/enable wg-awg3vds\r\ + \n :put \"WireGuard interface enabled\"\r\ + \n :put \"Installation complete!\"\r\ + \n :put \"Ping test: 89.110.101.17 via AmneziaWG tunnel. repeat 10 times\ + \"\r\ + \n /ping 89.110.101.17 count=10 interval=1\r\ + \n :put \"\"\r\ + \n :put \"======= NEXT STEPS =======\"\r\ + \n :put \"\"\r\ + \n :put \"Route specific traffic through the AmneziaWG tunnel:\"\r\ + \n :put \"\"\r\ + \n :put \" Route a single host:\"\r\ + \n :put \" /ip/route/add dst-address=8.8.8.8/32 gateway=wg-awg3vds com\ + ment=awg3vds-tunnel\"\r\ + \n :put \"\"\r\ + \n :put \" Route a subnet:\"\r\ + \n :put \" /ip/route/add dst-address=100.0.0.0/8 gateway=wg-awg3vds co\ + mment=awg3vds-tunnel\"\r\ + \n :put \"\"\r\ + \n :put \" Remove a route:\"\r\ + \n :put \" /ip/route/remove [find where comment=awg3vds-tunnel dst-add\ + ress=8.8.8.8/32]\"\r\ + \n :put \"\"\r\ + \n :put \" Show all tunnel routes:\"\r\ + \n :put \" /ip/route/print where comment=awg3vds-tunnel\"\r\ + \n :put \"\"\r\ + \n :put \" Update the container:\"\r\ + \n :put \" /system/script/run awg3vds-update\"\r\ + \n :put \"\"\r\ + \n :put \" Uninstall:\"\r\ + \n :put \" /system/script/run awg3vds-uninstall\"\r\ + \n :put \"=========================\"\r\ + \n}\r\ + \n\r\ + \n# 7. Verification\r\ + \n# /container/print\r\ + \n# /interface/wireguard/print\r\ + \n# /interface/wireguard/peers/print\r\ + \n" +add comment=awg3vds dont-require-permissions=no name=awg3vds-uninstall owner=\ + vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="\ + \r\ + \n :put \"Uninstallimg AmneziaWG...\"\r\ + \n :log info \"Uninstallimg AmneziaWG...\"\r\ + \n :local prevDNS \"\"\r\ + \n :do { :set prevDNS [/container/envs/get [find where list=\"awg3vds-env\ + \" key=\"AWG_PREV_DNS\"] value] } on-error={}\r\ + \n :local prevTmpdir \"\"\r\ + \n :do { :set prevTmpdir [/container/envs/get [find where list=\"awg3vds-\ + env\" key=\"AWG_PREV_TMPDIR\"] value] } on-error={}\r\ + \n /ip/route/remove [find where comment=awg3vds-tunnel]\r\ + \n /ip/route/remove [find where comment=awg3vds-dns]\r\ + \n :do { /system/scheduler/remove [find where comment~\"awg3vds\"] } on-e\ + rror={}\r\ + \n :do { /system/script/remove [find where comment~\"awg3vds\" and name!=\ + \"awg3vds-uninstall\"] } on-error={}\r\ + \n /container/stop [find where interface=veth-awg3vds]\r\ + \n :delay 7s\r\ + \n /container/remove [find where interface=veth-awg3vds]\r\ + \n /container/envs/remove [find where list=\"awg3vds-env\"]\r\ + \n :if (\$prevDNS != \"\") do={\r\ + \n :do { /ip/dns/set servers=\"\$prevDNS\" } on-error={}\r\ + \n :put (\"DNS restored to: \$prevDNS\")\r\ + \n }\r\ + \n /container/config set tmpdir=\$prevTmpdir\r\ + \n :put (\"Container tmpdir restored to: \$prevTmpdir\")\r\ + \n /ip/firewall/nat/remove [find where out-interface=\"wg-awg3vds\"]\r\ + \n /ip/firewall/nat/remove [find where src-address=\"172.19.14.100/30\"]\ + \r\ + \n /ip/address/remove [find where address=\"172.19.14.101/30\"]\r\ + \n :do { /ipv6/firewall/nat/remove [find where comment=awg3vds-v6-nat] } \ + on-error={}\r\ + \n :do { /ipv6/firewall/nat/remove [find where comment=awg3vds-dstnat6] }\ + \_on-error={}\r\ + \n :do { /ipv6/firewall/filter/remove [find where comment=awg3vds-v6-out]\ + \_} on-error={}\r\ + \n :do { /ipv6/firewall/filter/remove [find where comment=awg3vds-awg-in6\ + ] } on-error={}\r\ + \n :do { /ipv6/nd/remove [find where interface=veth-awg3vds] } on-error={\ + }\r\ + \n :do { /ipv6/nd/prefix/remove [find where interface=veth-awg3vds] } on-\ + error={}\r\ + \n :do { /ipv6/address/remove [find where comment=awg3vds-v6] } on-error=\ + {}\r\ + \n /interface/veth/remove [find where name=\"veth-awg3vds\"]\r\ + \n /interface/wireguard/peers/remove [find where interface=\"wg-awg3vds\"\ + ]\r\ + \n /ip/address/remove [find where interface=\"wg-awg3vds\"]\r\ + \n /interface/wireguard/remove [find where name=\"wg-awg3vds\"]\r\ + \n :do { /file/remove [find where name~\"awg3vds.+tar\"] } on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/awg3vds\"] } on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/ru_ranges_timeout.rsc\"] } \ + on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/ru_ranges.rsc\"] } on-error\ + ={}\r\ + \n :do { /file/remove [find where name~\"usb1/pull\"] } on-error={}\r\ + \n :put \"Uninstall AmneziaWG Proxy complete!\"\r\ + \n :log info \"Uninstall AmneziaWG Proxy complete!\"\r\ + \n# /system/script/remove [find where name=awg3vds-uninstall]\r\ + \n" +add comment=awg3vds dont-require-permissions=no name=awg3vds-update owner=\ + vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="\ + \r\ + \n :local cids [/container/find where interface=veth-awg3vds and !stopped\ + ]\r\ + \n :if ([:len \$cids] = 0) do={ :set cids [/container/find where interfac\ + e=veth-awg3vds and start-on-boot=yes] }\r\ + \n :if ([:len \$cids] = 0) do={ :set cids [/container/find where interfac\ + e=veth-awg3vds] }\r\ + \n :if ([:len \$cids] = 0) do={\r\ + \n :put \"Container awg3vds not found\"\r\ + \n :log warning \"awg3vds-update: container not found\"\r\ + \n } else={\r\ + \n :local cid [:pick \$cids ([:len \$cids] - 1)]\r\ + \n :local img [/container/get \$cid remote-image]\r\ + \n :local ver [/system/resource/get version]\r\ + \n :local dotPos [:find \$ver \".\"]\r\ + \n :local rest [:pick \$ver (\$dotPos + 1) [:len \$ver]]\r\ + \n :local endPos [:find \$rest \".\"]\r\ + \n :if ([:typeof \$endPos] = \"nil\") do={ :set endPos [:find \$rest \"\ + \_\"] }\r\ + \n :local minor [:tonum [:pick \$rest 0 \$endPos]]\r\ + \n :local wantRunning true\r\ + \n :do { :if ([/container/get \$cid start-on-boot] != true) do={ :set w\ + antRunning false } } on-error={}\r\ + \n :local healthy true\r\ + \n :if ([:len [/container/get \$cid image-id]] = 0) do={ :set healthy f\ + alse }\r\ + \n :if (\$wantRunning) do={\r\ + \n :do { :if ([/container/get \$cid stopped] = true) do={ :set health\ + y false } } on-error={}\r\ + \n }\r\ + \n :if (!\$healthy && \$wantRunning && [:len [/container/get \$cid imag\ + e-id]] > 0) do={\r\ + \n :put \"Container is down - trying to start it\"\r\ + \n :do { /container/start \$cid } on-error={}\r\ + \n :delay 8s\r\ + \n :set healthy true\r\ + \n :do { :if ([/container/get \$cid stopped] = true) do={ :set health\ + y false } } on-error={}\r\ + \n :if (\$healthy) do={\r\ + \n :put \"Container is back up\"\r\ + \n :log info \"awg3vds: container restarted by the update script\"\ + \r\ + \n }\r\ + \n }\r\ + \n :if (\$img = \"\" && \$minor >= 22 && !\$healthy) do={\r\ + \n :local imgTag \"latest\"\r\ + \n :local rbModel \"\"\r\ + \n :do { :set rbModel [[:parse \":return [/system/routerboard/get mod\ + el]\"]] } on-error={}\r\ + \n :local bName [/system/resource/get board-name]\r\ + \n :if (\$rbModel~\"E50UG\" || \$rbModel~\"E60iUGS\" || \$bName~\"E50\ + UG\" || \$bName~\"E60iUGS\" || \$bName~\"^hEX\") do={\r\ + \n :set imgTag \"latest-armv5\"\r\ + \n }\r\ + \n :set img (\"ghcr.io/timbrs/awg-proxy:\" . \$imgTag)\r\ + \n :put (\"Container is down and was installed from a file - pointing\ + \_it at \" . \$img)\r\ + \n :log warning \"awg3vds-update: broken file install, switching to t\ + he registry\"\r\ + \n :do { /container/set \$cid remote-image=\$img } on-error={}\r\ + \n }\r\ + \n :if (\$img = \"\") do={\r\ + \n :put \"Installed from a local image file - /container/repull only \ + updates registry installs.\"\r\ + \n :put \"Reinstall with the configurator on RouterOS 7.22+ to switch\ + \_to one-command updates.\"\r\ + \n } else={\r\ + \n :if (\$minor < 22) do={\r\ + \n :put (\"/container/repull needs RouterOS 7.22+, this router runs\ + \_\" . \$ver)\r\ + \n :if (!\$healthy) do={ :log error (\"awg3vds-update: container is\ + \_down, and \" . \$ver . \" has no /container/repull\") }\r\ + \n } else={\r\ + \n :local rootDir [/container/get \$cid root-dir]\r\ + \n :if ([:pick \$rootDir 0 1] = \"/\") do={ :set rootDir [:pick \$r\ + ootDir 1 [:len \$rootDir]] }\r\ + \n :local rootDirOrig \$rootDir\r\ + \n :local slashPos [:find \$rootDir \"/\"]\r\ + \n :local disk \$rootDir\r\ + \n :if ([:typeof \$slashPos] != \"nil\") do={ :set disk [:pick \$ro\ + otDir 0 \$slashPos] }\r\ + \n :local verPath \"awg-update-check.json\"\r\ + \n :if (\$disk != \"disk1\") do={\r\ + \n :do { /file/make-directory (\$disk . \"/pull\") } on-error={}\ + \r\ + \n /container/config set tmpdir=(\$disk . \"/pull\")\r\ + \n :set verPath (\$disk . \"/pull/awg-update-check.json\")\r\ + \n }\r\ + \n :local newVer \"\"\r\ + \n :do {\r\ + \n /tool/fetch url=\"https://api.github.com/repos/timbrs/amneziaw\ + g-mikrotik-c/releases/latest\" dst-path=\$verPath http-max-redirect-count=\ + 10\r\ + \n :local relJson [/file/get [find where name=\$verPath] contents\ + ]\r\ + \n :local tagPos [:find \$relJson \"\\\"tag_name\\\":\\\"\"]\r\ + \n :if ([:typeof \$tagPos] != \"nil\") do={\r\ + \n :local tagRest [:pick \$relJson (\$tagPos + 12) [:len \$relJ\ + son]]\r\ + \n :set newVer [:pick \$tagRest 0 [:find \$tagRest \"\\\"\"]]\r\ + \n }\r\ + \n :do { /file/remove [find where name=\$verPath] } on-error={}\r\ + \n } on-error={ :put \"Could not read the published version\" }\r\ + \n :local curVer \"\"\r\ + \n :do { :set curVer [/container/envs/get [find where list=\"awg3vd\ + s-env\" key=\"AWG_IMAGE_VER\"] value] } on-error={}\r\ + \n :local doPull true\r\ + \n :if (\$healthy) do={\r\ + \n :if (\$newVer = \"\") do={\r\ + \n :set doPull false\r\ + \n :put \"Published version unknown - leaving the healthy conta\ + iner alone\"\r\ + \n }\r\ + \n :if (\$newVer != \"\" && \$newVer = \$curVer) do={\r\ + \n :set doPull false\r\ + \n :put (\"Already on \" . \$curVer . \" - nothing to pull, tun\ + nel untouched\")\r\ + \n }\r\ + \n }\r\ + \n :if (\$doPull) do={\r\ + \n :if (!\$healthy) do={\r\ + \n :put \"Container is not healthy - pulling the image again\"\ + \r\ + \n :log warning \"awg3vds-update: container unhealthy, forcing \ + a pull\"\r\ + \n }\r\ + \n :put (\"Updating \" . \$img . \" ...\")\r\ + \n :log info \"awg3vds: repull started\"\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.backu\ + p\")] } on-error={}\r\ + \n :do { [:parse \"/container/set \$cid ignore-remote-image-chang\ + e=yes\"] } on-error={}\r\ + \n /container/repull \$cid\r\ + \n :local waited 0\r\ + \n :while ([:len [/container/get \$cid image-id]] = 0 && \$waited\ + \_< 180) do={\r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n :if ([:len [/container/get \$cid image-id]] = 0) do={\r\ + \n :put \"Pull failed - retrying once in 15s\"\r\ + \n :delay 15s\r\ + \n /container/repull \$cid\r\ + \n :set waited 0\r\ + \n :while ([:len [/container/get \$cid image-id]] = 0 && \$wait\ + ed < 180) do={\r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n }\r\ + \n :local backUp false\r\ + \n :if ([:len [/container/get \$cid image-id]] > 0) do={\r\ + \n :set backUp true\r\ + \n :if (\$wantRunning) do={\r\ + \n :delay 3s\r\ + \n :do { /container/start \$cid } on-error={}\r\ + \n :delay 8s\r\ + \n :set backUp false\r\ + \n :do { :if ([/container/get \$cid stopped] != true) do={ :s\ + et backUp true } } on-error={}\r\ + \n }\r\ + \n }\r\ + \n :if (!\$backUp) do={\r\ + \n :put \"Container did not come back up - rebuilding it from t\ + he registry\"\r\ + \n :log warning \"awg3vds-update: container did not come back, \ + rebuilding\"\r\ + \n :do { /container/stop \$cid } on-error={}\r\ + \n :delay 5s\r\ + \n :do { /container/remove \$cid } on-error={}\r\ + \n :delay 3s\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.bac\ + kup\")] } on-error={}\r\ + \n :do { /container/add remote-image=\$img interface=veth-awg3v\ + ds envlist=awg3vds-env hostname=awg3vds root-dir=\$rootDirOrig logging=no \ + start-on-boot=yes comment=awg3vds } on-error={}\r\ + \n :set waited 0\r\ + \n :local newCids [/container/find where interface=veth-awg3vds\ + \_and start-on-boot=yes]\r\ + \n :if ([:len \$newCids] = 0) do={ :set newCids [/container/fin\ + d where interface=veth-awg3vds] }\r\ + \n :while ([:len \$newCids] > 0 && [:len [/container/get [:pick\ + \_\$newCids ([:len \$newCids] - 1)] image-id]] = 0 && \$waited < 180) do={\ + \r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n :if ([:len \$newCids] > 0 && [:len [/container/get [:pick \$\ + newCids ([:len \$newCids] - 1)] image-id]] > 0) do={\r\ + \n :do { /container/set [:pick \$newCids ([:len \$newCids] - \ + 1)] shm-size=4M } on-error={}\r\ + \n :do { [:parse \"/container/set [find where interface=veth-\ + awg3vds] ignore-remote-image-change=yes\"] } on-error={}\r\ + \n :do { [:parse \"/container/set [find where interface=veth-\ + awg3vds] restart-policy=on-failure restart-interval=30s restart-max-count=\ + 10\"] } on-error={}\r\ + \n :do { /container/start [:pick \$newCids ([:len \$newCids] \ + - 1)] } on-error={}\r\ + \n :delay 8s\r\ + \n :do { :if ([/container/get [:pick \$newCids ([:len \$newCi\ + ds] - 1)] stopped] != true) do={ :set backUp true } } on-error={}\r\ + \n }\r\ + \n :if (\$backUp) do={\r\ + \n :put \"Container rebuilt\"\r\ + \n :log info \"awg3vds: container rebuilt after update\"\r\ + \n } else={\r\ + \n :put \"Rebuild failed - the tunnel is down. Netwatch keeps\ + \_the router online meanwhile.\"\r\ + \n :put \"This script runs again on the next schedule and wil\ + l retry.\"\r\ + \n :log error \"awg3vds-update: rebuild failed, tunnel is dow\ + n\"\r\ + \n }\r\ + \n }\r\ + \n :if (\$backUp && \$newVer != \"\") do={\r\ + \n :do { /container/envs/remove [find where list=\"awg3vds-env\ + \" key=\"AWG_IMAGE_VER\"] } on-error={}\r\ + \n :do { /container/envs/add list=awg3vds-env key=AWG_IMAGE_VER\ + \_value=\$newVer } on-error={}\r\ + \n }\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.backu\ + p\")] } on-error={}\r\ + \n :if (\$backUp) do={\r\ + \n :put (\"Update done: \" . \$img)\r\ + \n :log info \"awg3vds: update done\"\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n" +/user group +add name=backup policy="telnet,ssh,ftp,read,write,policy,test,sniff,sensitive,\ + !local,!reboot,!winbox,!password,!web,!api,!romon,!rest-api" +add name=manager policy="local,ssh,ftp,read,write,policy,api,rest-api,!telnet,\ + !reboot,!test,!winbox,!password,!web,!sniff,!sensitive,!romon" +/certificate settings +set builtin-trust-store=\ + capsman,fetch,email,netwatch,container,dns,www,api,reverse-proxy,logging +/container +add comment=awg3vds envlists=awg3vds-env file=usb1/pull/awg-proxy-arm.tar.gz \ + hostname=awg3vds ignore-remote-image-change=yes interface=veth-awg3vds \ + layer-dir="" name=awg-proxy-arm restart-interval=30s restart-max-count=10 \ + restart-policy=on-failure root-dir=/usb1/awg3vds shm-size=4096.0KiB \ + start-on-boot=yes +/container config +set memory-high=200.0MiB tmpdir=/usb1/pull +/container envs +add key=AWG_CLIENT_PUB list=awg3vds-env value=\ + "LnLYVichmfWj/lDZqn2tk7pj2XII/1tnyZaOjf40Tl8=" +add key=AWG_CONTENT_PADDING list=awg3vds-env value=54-119 +add key=AWG_CPU_C2S list=awg3vds-env value=1 +add key=AWG_CPU_S2C list=awg3vds-env value=2 +add key=AWG_H1 list=awg3vds-env value=457615290-457646150 +add key=AWG_H2 list=awg3vds-env value=1307355386-1307363580 +add key=AWG_H3 list=awg3vds-env value=2441734303-2441781787 +add key=AWG_H4 list=awg3vds-env value=3719180788-3719195844 +add key=AWG_HEADER_PROTECTION_KEY list=awg3vds-env value=\ + "FkGxbrW6ds3YPWNl48OWFEccrLC4tF94z9MnoKUZUsM=" +add key=AWG_I1 list=awg3vds-env value=\ + "" +add key=AWG_I2 list=awg3vds-env value=\ + "" +add key=AWG_I3 list=awg3vds-env value="" +add key=AWG_I4 list=awg3vds-env value="" +add key=AWG_I5 list=awg3vds-env value=\ + "" +add key=AWG_JC list=awg3vds-env value=5 +add key=AWG_JMAX list=awg3vds-env value=952 +add key=AWG_JMIN list=awg3vds-env value=510 +add key=AWG_KEEPALIVE_TIMEOUT list=awg3vds-env value=14-21 +add key=AWG_LISTEN list=awg3vds-env value=:51820 +add key=AWG_MAX_HANDSHAKE_ATTEMPTS list=awg3vds-env value=12-14 +add key=AWG_NO_DF list=awg3vds-env value=1 +add key=AWG_PREV_DNS list=awg3vds-env value=10.30.30.33,8.8.4.4 +add key=AWG_PREV_TMPDIR list=awg3vds-env value=/usb1/pull +add key=AWG_REJECT_AFTER list=awg3vds-env value=174-195 +add key=AWG_REKEY_AFTER list=awg3vds-env value=102-130 +add key=AWG_REKEY_TIMEOUT list=awg3vds-env value=6-8 +add key=AWG_REMOTE list=awg3vds-env value=89.110.101.17:31031 +add key=AWG_S1 list=awg3vds-env value=138 +add key=AWG_S2 list=awg3vds-env value=105 +add key=AWG_S3 list=awg3vds-env value=51 +add key=AWG_S4 list=awg3vds-env value=22 +add key=AWG_SERVER_PUB list=awg3vds-env value=\ + "MMWjD/TPNpupCvhXLCAw0xHXV4N6jgtQkg9Pl6pcQhU=" +/disk settings +set auto-media-interface=Bridge-Lan +/ip smb +set domain=WORKGROUP enabled=no interfaces=lo +/interface bridge port +add bridge=Bridge-Lan interface=ether2 +add bridge=Bridge-Lan interface=ether3 +add bridge=Bridge-Lan interface=ether4 +add bridge=Bridge-Lan interface=ether5 +add bridge=Bridge-Lan interface=wlan1 +add bridge=Bridge-Lan interface=wlan2 +/interface bridge settings +set allow-fast-path=no use-ip-firewall=yes +/ip neighbor discovery-settings +set discover-interface-list=LAN +/ip settings +set accept-redirects=yes allow-fast-path=no +/ipv6 settings +set accept-router-advertisements-on=none allow-fast-path=no disable-ipv6=yes \ + disable-link-local-address=yes +/interface detect-internet +set detect-interface-list=WAN internet-interface-list=Internet \ + lan-interface-list=LAN wan-interface-list=WAN +/interface list member +add interface="ether1 - Unet" list=WAN +add interface=Bridge-Lan list=LAN +add interface=wg-awg3vds list=WAN +/interface wireguard peers +add allowed-address=10.31.31.0/24,0.0.0.0/0 endpoint-address=172.19.14.102 \ + endpoint-port=51820 interface=wg-awg3vds name=peer1 persistent-keepalive=\ + 14s public-key="MMWjD/TPNpupCvhXLCAw0xHXV4N6jgtQkg9Pl6pcQhU=" +/interface wireless cap +# +set bridge=Bridge-Lan caps-man-addresses=10.30.30.10 \ + caps-man-certificate-common-names=CAPsMAN-2C900E832E04 certificate=\ + CAP-18FD746E5814 discovery-interfaces=Bridge-Lan enabled=yes interfaces=\ + wlan1,wlan2 lock-to-caps-man=yes +/ip address +add address=10.30.30.81/24 interface=Bridge-Lan network=10.30.30.0 +add address=172.19.14.101/30 interface=veth-awg3vds network=172.19.14.100 +add address=10.31.31.2/24 interface=wg-awg3vds network=10.31.31.0 +/ip cloud +set ddns-enabled=yes +/ip dhcp-client +add add-default-route=special-classless default-route-distance=2 \ + default-route-tables=main:2 dhcp-options=clientid,clientid_duid \ + interface="ether1 - Unet" name=client1 use-peer-dns=no use-peer-ntp=no +/ip dhcp-server config +set accounting=no +/ip dhcp-server lease +add address=10.30.30.101 client-id=1:48:8f:5a:8e:ee:a8 mac-address=\ + 48:8F:5A:8E:EE:A8 server=masterDHCP +add address=10.30.30.107 client-id=1:f0:de:f1:91:d:1e mac-address=\ + F0:DE:F1:91:0D:1E server=masterDHCP +add address=10.30.30.83 client-id=1:0:80:77:ec:43:86 mac-address=\ + 00:80:77:EC:43:86 server=masterDHCP +add address=10.30.30.50 client-id=1:4:7c:16:36:f5:37 mac-address=\ + 04:7C:16:36:F5:37 server=masterDHCP +add address=10.30.30.71 client-id=1:10:2d:41:2c:20:c2 mac-address=\ + 10:2D:41:2C:20:C2 server=masterDHCP +add address=10.30.30.61 client-id=1:10:8:c1:81:59:5f mac-address=\ + 10:08:C1:81:59:5F server=masterDHCP +add address=10.30.30.72 client-id=1:10:38:1f:d2:5f:13 mac-address=\ + 10:38:1F:D2:5F:13 server=masterDHCP +add address=10.30.30.99 client-id=1:10:b1:df:e9:d0:d5 mac-address=\ + 10:B1:DF:E9:D0:D5 server=masterDHCP +add address=10.30.30.111 client-id=1:fe:2:52:be:3f:16 mac-address=\ + FE:02:52:BE:3F:16 server=masterDHCP +add address=10.30.30.92 client-id=1:d4:6d:6d:fd:e5:49 mac-address=\ + D4:6D:6D:FD:E5:49 server=masterDHCP +add address=10.30.30.93 client-id=1:7e:8b:1e:cb:b8:cb mac-address=\ + CC:42:10:12:46:94 server=masterDHCP +add address=10.30.30.94 client-id=1:50:cc:f8:85:96:a mac-address=\ + 50:CC:F8:85:96:0A server=masterDHCP +add address=10.30.30.82 client-id=1:e4:18:6b:58:34:ab mac-address=\ + E4:18:6B:58:34:AB server=masterDHCP +add address=10.30.30.75 client-id=1:0:27:15:41:97:a9 mac-address=\ + 00:27:15:41:97:A9 server=masterDHCP +add address=10.30.30.77 dhcp-option=HostName dhcp-option-set=StartLife1 \ + mac-address=C4:82:E1:03:49:10 server=masterDHCP +add address=10.30.30.73 client-id=1:10:38:1f:82:81:f2 mac-address=\ + 10:38:1F:82:81:F2 server=masterDHCP +add address=10.30.30.96 client-id=iPhone mac-address=4A:91:ED:0E:1F:39 \ + server=masterDHCP +add address=10.30.30.74 client-id=MiTV dhcp-option=HostName dhcp-option-set=\ + MiTV mac-address=20:72:A9:D3:34:36 server=masterDHCP +/ip dhcp-server network +add address=10.30.30.0/24 caps-manager=10.30.30.10 dhcp-option=\ + domain-search-list dhcp-option-set=domain-search-set dns-server=\ + 10.30.30.81 domain=WORKGROUP gateway=10.30.30.81 netmask=24 ntp-server=\ + 10.30.30.81,10.30.30.10 wins-server=10.30.30.95,10.30.30.98 +/ip dns +set allow-remote-requests=yes servers=10.30.30.33,8.8.4.4 +/ip dns static +add address=10.30.30.81 comment=defconf name=router.lan type=A +add address=10.30.30.81 comment=defconf name=master type=A +add address=10.30.30.33 comment=amster name=amster.vados.ru type=A +add address=8.8.8.8 name=dns.google type=A +add address=8.8.4.4 name=dns.google type=A +add address=1.0.0.1 comment="CloudFlare-doh IPv4 2" disabled=yes name=\ + security.cloudflare-dns.com type=A +add address=1.1.1.1 comment="CloudFlare-doh IPv4 1" disabled=yes name=\ + security.cloudflare-dns.com type=A +add address=149.112.112.112 comment="Cuad9-dns IPv4 2" disabled=yes name=\ + dns.quad9.net type=A +add address=9.9.9.9 comment="Cuad9-dns IPv4 1" disabled=yes name=\ + dns.quad9.net type=A +add address=91.192.189.2 comment=Unet-DNS disabled=yes name=ns1.unet.ws type=\ + A +add address=91.192.189.2 comment=Unet-DNS disabled=yes name=ns1.unet.ws type=\ + A +/ip firewall address-list +add address=10.0.0.0/8 list=RFC1918 +add address=172.16.0.0/12 list=RFC1918 +add address=192.168.0.0/16 list=RFC1918 +add address=91.215.120.206 list=TRUSTED +add address=185.71.70.78 disabled=yes list=TRUSTED +add address=176.53.203.171 disabled=yes list=TRUSTED +add address=176.53.203.170 disabled=yes list=TRUSTED +add address=176.53.202.194 disabled=yes list=TRUSTED +add address=8.8.4.4 disabled=yes list=to_vpn +add address=10.30.30.98 comment=vados-len list=Local2Vpn +add address=89.110.101.17 list=VDS +add address=109.107.177.79 list=TRUSTED +add address=185.71.70.78 disabled=yes list=TRUSTED +add address=176.53.203.171 disabled=yes list=TRUSTED +add address=176.53.203.170 disabled=yes list=TRUSTED +add address=176.53.202.194 disabled=yes list=TRUSTED +add address=2ip.ru list=Test +add address=89.110.101.17 comment=VDSIna list=TRUSTED +add address=10.8.0.0/24 comment="WG VDSIna" list=TRUSTED +add address=ikus.pesc.ru comment=ikus.pesc.ru list=NoVdsina +add address=love.ru comment=love.ru list=NoVdsina +add address=gosuslugi.ru comment=gosuslugi.ru list=NoVdsina +add address=pochta.ru comment=pochta.ru list=NoVdsina +add address=vdsina.com comment=vdsina.com list=NoVdsina +add address=vdsina.ru comment=vdsina.ru list=NoVdsina +add address=youla.ru comment=youla.ru list=NoVdsina +add address=kupiprodai.ru comment=kupiprodai.ru list=NoVdsina +add address=myip.ru list=Test +add address=geoip.co comment=geoip.co list=NoVdsina +add address=x.com list=Twitter +add address=facebook.com list=facebook +add address=fbcd.net list=facebook +add address=comp-lenta.ru comment=comp-lenta.ru list=NoVdsina +add address=128.85.102.70 comment=update.microsoft.com list=\ + windowsupdateslist +add address=wu-b-net.trafficmanager.net. comment=\ + ctldl.windowsupdate.com.delivery.microsoft.com list=windowsupdateslist +add address=ctldl.windowsupdate.com.delivery.microsoft.com. comment=\ + ctldl.windowsupdate.com list=windowsupdateslist +add address=redir.update.msft.com.trafficmanager.net. comment=\ + update.microsoft.com list=windowsupdateslist +add address=geo.prod.do.dsp.trafficmanager.net. comment=\ + geo.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=13.74.139.29 comment=array605.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e12437.d.akamaiedge.net. comment=\ + kv801.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=displaycatalog-rp.md.mp.microsoft.com.akadns.net. comment=\ + displaycatalog.mp.microsoft.com list=windowsupdateslist +add address=rp-consumer-prod-displaycatalog-geomap.trafficmanager.net. \ + comment=displaycatalog-rp.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=sls.update.microsoft.com. comment=slscr.update.microsoft.com \ + list=windowsupdateslist +add address=glb.sls.prod.dcat.dsp.trafficmanager.net. comment=\ + sls.update.microsoft.com list=windowsupdateslist +add address=fe3.delivery.mp.microsoft.com. comment=\ + fe3cr.delivery.mp.microsoft.com list=windowsupdateslist +add address=glb.cws.prod.dcat.dsp.trafficmanager.net. comment=\ + fe3.delivery.mp.microsoft.com list=windowsupdateslist +add address=fe2cr.update.msft.com.trafficmanager.net. comment=\ + fe2cr.update.microsoft.com list=windowsupdateslist +add address=download.windowsupdate.com.delivery.microsoft.com. comment=\ + download.windowsupdate.com list=windowsupdateslist +add address=wu-f-net.trafficmanager.net. comment=\ + download.windowsupdate.com.delivery.microsoft.com list=windowsupdateslist +add address=tsfe.trafficmanager.net. comment=\ + tsfe.trafficshaping.dsp.mp.microsoft.com list=windowsupdateslist +add address=edge.ds-c7110-microsoft.global.dns.qwilted-cds.cqloud.com. \ + comment=9.au.download.windowsupdate.com list=windowsupdateslist +add address=52.158.227.125 comment=array812.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=au.download.windowsupdate.com.delivery.microsoft.com. comment=\ + au.download.windowsupdate.com list=windowsupdateslist +add address=a767.dspw65.akamai.net. comment=\ + download.windowsupdate.com.edgesuite.net list=windowsupdateslist +add address=52.151.58.88 comment=array810.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=consumer-licensing-aks2aks.md.mp.microsoft.com.akadns.net. \ + comment=licensing.mp.microsoft.com list=windowsupdateslist +add address=licensing-prod-frontdoor-geomap.trafficmanager.net. comment=\ + consumer-licensing-aks2aks.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=star.f.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.f.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-nlu-net.trafficmanager.net. comment=\ + star.f.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=star.b.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.b.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-tlu-net.trafficmanager.net. comment=\ + star.b.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=storeedgefd.xbetservices.akadns.net. comment=\ + storeedgefd.dsx.mp.microsoft.com list=windowsupdateslist +add address=\ + storeedgefd.dsx.mp.microsoft.com.edgekey.net.globalredir.akadns.net. \ + comment=storeedgefd.dsx.mp.microsoft.com.edgekey.net list=\ + windowsupdateslist +add address=e16646.dscg.akamaiedge.net. comment=\ + storeedgefd.dsx.mp.microsoft.com.edgekey.net.globalredir.akadns.net list=\ + windowsupdateslist +add address=40.69.76.189 comment=array621.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=bg.microsoft.map.fastly.net. comment=\ + 3.au.download.windowsupdate.com list=windowsupdateslist +add list=windowsupdateslist +add address=40.69.75.33 comment=array613.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=star.sf.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedgeextensions.sf.tlu.dl.delivery.mp.microsoft.com list=\ + windowsupdateslist +add address=cdp-f-ssl-tlu-net.trafficmanager.net. comment=\ + star.sf.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a2033.dscd.akamai.net. comment=\ + star.sb.tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=13.74.138.242 comment=array602.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=dl.delivery.mp.microsoft.com.delivery.microsoft.com. comment=\ + dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-f-nlu-net.trafficmanager.net. comment=\ + dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=1d.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=1D.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-b-tlu-net.trafficmanager.net. comment=\ + 1d.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a122.dscg3.akamai.net. comment=\ + tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=windowsupdateslist +add address=geover.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + geover.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e10370.d.akamaiedge.net. comment=\ + geover.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=52.232.182.21 comment=array511.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.70.77.95 comment=array519.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=a1683.dscd.akamai.net. comment=\ + dl.delivery.mp.microsoft.com-c.edgesuite.net list=windowsupdateslist +add address=consumer-collections-aks2eap.md.mp.microsoft.com.akadns.net. \ + comment=collections.mp.microsoft.com list=windowsupdateslist +add address=a1847.dscd.akamai.net. comment=\ + wildcard.f.tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=13.74.142.6 comment=array607.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=au.download.windowsupdate.com.edgesuite.net. comment=\ + 2.au.download.windowsupdate.com list=windowsupdateslist +add address=a767.dscg3.akamai.net. comment=\ + au.download.windowsupdate.com.edgesuite.net list=windowsupdateslist +add address=52.156.123.84 comment=array818.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.78.254 comment=array610.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=4.au.download.windowsupdate.com.delivery.microsoft.com. comment=\ + 4.au.download.windowsupdate.com list=windowsupdateslist +add address=cl-glcb907925.gcdn.co. comment=\ + 4.au.download.windowsupdate.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.111 comment=array510.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.69.70.43 comment=array623.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=tsfe.trafficshaping.dsp.mp.microsoft.com.delivery.microsoft.com. \ + comment=tsfe.trafficshaping.dsp.mp.microsoft.com list=windowsupdateslist +add address=ts-frontend.trafficmanager.net. comment=\ + tsfe.trafficshaping.dsp.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=40.69.75.248 comment=array616.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.74.84 comment=array615.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=sds.trafficmanager.net. comment=software-download.microsoft.com \ + list=windowsupdateslist +add address=40.69.74.80 comment=array611.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.175.242.182 comment=array804.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=dlc-shim.trafficmanager.net. comment=download.microsoft.com list=\ + windowsupdateslist +add address=e12671.dscd.akamaiedge.net. comment=\ + download.microsoft.com.edgekey.net list=windowsupdateslist +add address=20.187.55.34 comment=array808.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.231 comment=array513.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=52.167.222.13 comment=array518.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e12358.d.akamaiedge.net. comment=\ + kv601.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. comment=\ + tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-f-tlu-net.trafficmanager.net. comment=\ + tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a1856.dspw65.akamai.net. comment=\ + tlu.dl.delivery.mp.microsoft.com-c.edgesuite.net list=windowsupdateslist +add address=52.167.164.252 comment=array506.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=13.74.137.54 comment=array601.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv501.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv501.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=collections-prod-frontdoor-geomap.trafficmanager.net. comment=\ + consumer-collections-aks2eap.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=52.167.160.173 comment=array509.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.70.77.148 comment=array516.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.200.126 comment=array507.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=52.167.167.59 comment=array508.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.76.172 comment=array620.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=82.202.162.184 comment=comp-lenta.ru list=NoWG +add address=smtp.mail.me.com.akadns.net. comment=smtp.mail.me.com list=NoWG +add address=17.57.155.37 comment=smtp.mail.me.com.akadns.net list=NoWG +add address=smtp.mail.me.com comment=smtp.mail.me.com list=NoVdsina +add address=40.70.76.5 comment=array514.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.186.119 comment=array618.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.177.176.186 comment=array520.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.70.76.27 comment=array515.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.160.43 comment=array503.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.110 comment=array817.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.142.8 comment=array614.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.138.254 comment=array603.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.96 comment=array501.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.76.215 comment=array622.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.143.200 comment=array606.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.111 comment=array818.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.112 comment=array819.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.137.53 comment=array608.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.98 comment=array805.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.96 comment=array803.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.104 comment=array811.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.101 comment=array808.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.99 comment=array806.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.17 comment=array802.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.97 comment=array804.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.103 comment=array810.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.16 comment=array801.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.70.77.177 comment=array517.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.164.84 comment=array512.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.105 comment=array812.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.107 comment=array814.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.232.161.82 comment=array502.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.108 comment=array815.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.161.91 comment=array505.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.102 comment=array809.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.109 comment=array816.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.106 comment=array813.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.117 comment=array622.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.107 comment=array612.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.108 comment=array613.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.105 comment=array610.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.113 comment=array618.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.116 comment=array621.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.98 comment=array603.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.114 comment=array619.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.111 comment=array616.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.97 comment=array602.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.106 comment=array611.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.110 comment=array615.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.119 comment=array624.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.135 comment=array514.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.97 comment=array503.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.99 comment=array604.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.61 comment=array504.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.131 comment=array510.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.132 comment=array511.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.96 comment=array601.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.104 comment=array609.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.138 comment=array517.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.60 comment=array501.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.139 comment=array518.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.118 comment=array623.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.113 comment=array820.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.103 comment=array608.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.100 comment=array807.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.129 comment=array508.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.134 comment=array513.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.62 comment=array505.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.137 comment=array516.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.101 comment=array606.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.96 comment=array502.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.130 comment=array509.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.112 comment=array617.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.100 comment=array605.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.115 comment=array620.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.136 comment=array515.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=purchase.md.mp.microsoft.com.akadns.net. comment=\ + purchase.mp.microsoft.com list=windowsupdateslist +add address=e110219.a.akamaiedge.net. comment=\ + purchase.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=72.153.5.140 comment=array519.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.141 list=windowsupdateslist +add address=72.153.5.63 comment=array506.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.128 comment=array507.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.102 comment=array607.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=storesdk.xbetservices.akadns.net. comment=\ + storesdk.dsx.mp.microsoft.com list=windowsupdateslist +add address=e16646.g.akamaiedge.net. comment=\ + storesdk.dsx.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=software-download.microsoft.com.delivery.microsoft.com. comment=\ + software-download.microsoft.com list=windowsupdateslist +add address=download.prss.microsoft.com.akamaized.net. comment=\ + software-download.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.109 comment=array614.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.133 comment=array512.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=213.180.192.0/19 comment=YandexDisk list=NoVdsina +add address=87.250.250.50 comment=YandexDisk list=NoVdsina +add address=consumer-prod-bcfd-v7-afd.trafficmanager.net. comment=\ + displaycatalog.mp.microsoft.com list=windowsupdateslist +add address=purchase-europeeap.md.mp.microsoft.com.akadns.net. comment=\ + purchase.md.mp.microsoft.com.akadns.net list=windowsupdateslist +add address=ne-az-conspurchase-mp.trafficmanager.net. comment=\ + purchase-europeeap.md.mp.microsoft.com.akadns.net list=windowsupdateslist +add address=storeedgefd.dsx.mp.microsoft.com.edgekey.net. comment=\ + cdn.storeedgefd.dsx.mp.microsoft.com list=windowsupdateslist +add address=star.f.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.f.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=a1996.dscd.akamai.net. comment=\ + wildcard.f.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=cp801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + cp801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=glb.tas02.sls-prod.dcat.dsp.mp.microsoft.com. comment=\ + tas02.sls.update.microsoft.com list=windowsupdateslist +add address=cp601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + cp601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=star.sb.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedgeextensions.sb.tlu.dl.delivery.mp.microsoft.com list=\ + windowsupdateslist +add address=star.sf.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.sf.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-ssl-nlu-net.trafficmanager.net. comment=\ + star.sf.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=tm-pifd-prod-gbl-weight.trafficmanager.net. comment=\ + paymentinstruments.mp.microsoft.com list=windowsupdateslist +add address=10.30.30.33 comment=NUC disabled=yes list=NoWG +add address=10.30.30.10 comment=MikroNUC disabled=yes list=NoWG +add address=89.110.101.17 comment=!!!VDSINA!!!! disabled=yes list=NoWG +add address=wg.vados.ru comment=VDSina-vpn list=Trusted-VPN +add address=80.85.244.9 list=TRUSTED +add address=disc801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + disc801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=185.71.70.78 disabled=yes list=TRUSTED +add address=176.53.203.171 disabled=yes list=TRUSTED +add address=176.53.203.170 disabled=yes list=TRUSTED +add address=176.53.202.194 disabled=yes list=TRUSTED +add address=vdsina.vados.ru comment="!!!VDSina Server!!!" list=NoVdsina +add address=dns.quad9.net comment=Quad9-dns disabled=yes list=Trusted-DNS +add address=dns.google comment=Google-dns list=Trusted-DNS +add address=security.cloudflare-dns.com comment=CloudFlare-dns list=\ + Trusted-DNS +add address=time.google.com comment=Google-time list=Trusted-NTP +add address=0.ru.pool.ntp.org comment=ru.pool.ntp.org disabled=yes list=\ + Trusted-NTP +add address=1.ru.pool.ntp.org disabled=yes list=Trusted-NTP +add address=2.ru.pool.ntp.org comment=2.ru.pool.ntp.org disabled=yes list=\ + Trusted-NTP +add address=3.ru.pool.ntp.org comment=3.ru.pool.ntp.org disabled=yes list=\ + Trusted-NTP +add address=cp.vdsina.com comment=VDSina-vpn list=Trusted-VPN +add address=vdsina.ru comment=VDSina-vpn list=Trusted-VPN +add address=ns.vados.ru comment=VDSina-vpn list=Trusted-VPN +add address=vdsina.com comment=VDSina-vpn list=Trusted-VPN +add address=cp.vdsina.ru comment=VDSina-vpn list=Trusted-VPN +add address=ns1.vdsina.ru comment=VDSina-vpn list=Trusted-VPN +add address=ghcr.io comment=GitHub list=Trusted-VPN +add address=github.com comment=GitHub list=Trusted-VPN +add address=149.154.164.13 comment=telegra.ph list=FuckRKN +add address=194.85.61.76 comment=grani.ru list=FuckRKN +add address=109.70.26.37 comment=grani.ru list=FuckRKN +add address=104.16.4.81 comment=xhamster.com list=FuckRKN +add address=104.16.3.81 comment=xhamster.com list=FuckRKN +add address=188.114.96.1 comment=lostfilm.tv list=FuckRKN +add address=188.114.97.1 comment=lostfilm.tv list=FuckRKN +add address=172.67.182.196 comment=rutracker.org list=FuckRKN +add address=104.21.32.39 comment=rutracker.org list=FuckRKN +add address=104.247.81.99 comment=lurkmore.to list=FuckRKN +add address=8.47.69.6 comment=dou.ua list=FuckRKN +add address=8.6.112.6 comment=dou.ua list=FuckRKN +add address=66.254.114.79 comment=youporn.com list=FuckRKN +add address=185.110.92.40 comment=pornolab.net list=FuckRKN +add address=185.110.92.41 comment=pornolab.net list=FuckRKN +add address=104.21.71.238 comment=crimerussia.com list=FuckRKN +add address=172.67.172.95 comment=crimerussia.com list=FuckRKN +add address=149.154.167.99 comment=telegram.org list=FuckRKN +add address=149.154.166.110 comment=api.telegram.org list=FuckRKN +add address=myip.ru comment="!!! Check IP (MYIP.RU) !!!" disabled=yes list=\ + NoVdsina +add address=ipinfo.io comment="!!! Check IP (IPINFO.IO) !!!" list=NoVdsina +add address=cian.ru comment=cian.ru list=NoVdsina +add address=hh.ru comment=hh.ru list=NoVdsina +add address=trudvsem.ru comment=trudvsem.ru list=NoVdsina +add address=esia.gosuslugi.ru comment=esia.gosuslugi.ru list=NoVdsina +add address=spb.hh.ru comment=spb.hh.ru list=NoVdsina +/ip firewall filter +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=12h chain=input comment="block honeypot DNS UDP" \ + connection-state=new dst-port=53 in-interface="ether1 - Unet" protocol=\ + udp src-address-list=!VDS +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment="block honeypot DNS TCP" \ + connection-state=new dst-port=53 in-interface="ether1 - Unet" protocol=\ + tcp src-address-list=!VDS +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment="block honeypot NTP" \ + connection-state=new dst-port=123 in-interface="ether1 - Unet" protocol=\ + udp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment="block honeypot asterisk" \ + connection-state=new dst-port=5060 in-interface="ether1 - Unet" protocol=\ + udp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment=\ + "block honeypot ssh rdp winbox" connection-state=new dst-port=22,8291 \ + in-interface-list=WAN protocol=tcp src-address-list=!TRUSTED +add action=accept chain=input comment=\ + "defconf: accept established,related,untracked" connection-state=\ + established,related,untracked +add action=drop chain=input comment="defconf: drop invalid" connection-state=\ + invalid +add action=accept chain=input comment="defconf: accept ICMP" protocol=icmp +add action=accept chain=input comment=\ + "defconf: accept to local loopback (for CAPsMAN)" disabled=yes \ + dst-address=127.0.0.1 in-interface=lo src-address=127.0.0.1 +add action=drop chain=input comment="defconf: drop all not coming from LAN" \ + in-interface-list=!LAN +add action=accept chain=forward comment="defconf: accept in ipsec policy" \ + disabled=yes ipsec-policy=in,ipsec +add action=accept chain=forward comment="defconf: accept out ipsec policy" \ + disabled=yes ipsec-policy=out,ipsec +add action=accept chain=forward comment=\ + "defconf: accept established,related, untracked" connection-state=\ + established,related,untracked +add action=drop chain=forward comment="defconf: drop invalid" \ + connection-state=invalid +add action=drop chain=forward comment=\ + "defconf: drop all from WAN not DSTNATed" connection-nat-state=!dstnat \ + in-interface-list=WAN +/ip firewall mangle +add action=accept chain=prerouting dst-address-list=RFC1918 \ + in-interface-list=!WAN +add action=mark-connection chain=prerouting comment="NO VPN" \ + dst-address-list=NoVdsina in-interface-list=!WAN new-connection-mark=\ + To-ISP src-address=10.30.30.0/24 +add action=mark-routing chain=prerouting comment=All2vpn connection-mark=\ + !To-ISP dst-address=!89.110.101.17 dst-address-list=!NoVdsina \ + new-routing-mark=To-VPN src-address=10.30.30.0/24 src-address-list=!NoWG +add action=change-mss chain=forward comment="MSS on WG" connection-mark=\ + !To-ISP in-interface-list=!WAN new-mss=1380 protocol=tcp tcp-flags=syn \ + tcp-mss=1381-65535 +add action=mark-routing chain=prerouting connection-mark=to-vpn-conn \ + disabled=yes new-routing-mark=To-VPN routing-mark=To-VPN src-address=\ + 10.30.30.0/24 +add action=mark-connection chain=prerouting comment=\ + "Mark VPN connections to exclude from FastTrack" in-interface=\ + veth-awg3vds log-prefix=Mark-VPN-FT new-connection-mark=VPN_No_FastTrack +add action=accept chain=prerouting comment="SSH To ME" disabled=yes \ + dst-address=10.30.30.81 dst-port=2222 in-interface-list=!WAN protocol=tcp \ + src-address=10.30.30.0/24 +add action=mark-routing chain=prerouting comment="VPN Network" disabled=yes \ + dst-address=10.8.0.0/24 log-prefix=VPN-Net new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 +/ip firewall nat +add action=masquerade chain=srcnat comment="Default NAT" ipsec-policy=\ + out,none out-interface="ether1 - Unet" src-address=10.30.30.0/24 +add action=masquerade chain=srcnat comment="NAT for VPN" routing-mark=To-VPN +add action=dst-nat chain=dstnat comment="dst-nat for acme" dst-port=80 \ + in-interface="ether1 - Unet" protocol=tcp to-addresses=10.30.30.33 \ + to-ports=80 +add action=dst-nat chain=dstnat comment="dst-nat for amster HTTPS" dst-port=\ + 443 in-interface="ether1 - Unet" protocol=tcp to-addresses=10.30.30.33 \ + to-ports=443 +add action=dst-nat chain=dstnat comment="dst-nat for amster ssh" disabled=yes \ + dst-port=22 protocol=tcp src-address-list=VDS to-addresses=10.30.30.33 \ + to-ports=22 +add action=dst-nat chain=dstnat comment="dst-nat for amster DNS (TCP)" \ + dst-port=53 in-interface="ether1 - Unet" protocol=tcp src-address-list=\ + VDS to-addresses=10.30.30.33 to-ports=53 +add action=dst-nat chain=dstnat comment="dst-nat for amster DNS (UDP)" \ + dst-port=53 in-interface="ether1 - Unet" protocol=udp src-address-list=\ + VDS to-addresses=10.30.30.33 to-ports=53 +add action=masquerade chain=srcnat disabled=yes src-address=172.20.200.68/30 +add action=masquerade chain=srcnat src-address=172.19.14.100/30 +/ip firewall raw +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-static chain=prerouting content=spb.hh.ru +add action=drop chain=prerouting src-address-list="Honeypot Hacker" +/ip firewall service-port +set ftp disabled=yes +set tftp disabled=yes +set irc disabled=no +set sip disabled=yes +set pptp disabled=yes +set rtsp disabled=no +/ip hotspot user profile +set [ find default=yes ] address-pool=dhcp +/ip route +add disabled=no distance=1 dst-address=0.0.0.0/0 gateway=wg-awg3vds@main \ + routing-table=To-VPN scope=30 target-scope=10 +/ip service +set ftp disabled=yes +set telnet disabled=yes +set www disabled=yes port=188 +set reverse-proxy disabled=yes +set ssh port=2222 +set www-ssl port=4433 +set api disabled=yes +set api-ssl disabled=yes +/ip service webserver +set acme-plain=no crl-plain=no graphs-plain=no graphs-secure=no index-plain=\ + no index-secure=no rest-plain=no rest-secure=no scep-plain=no \ + webfig-plain=no webfig-secure=no +/ip ssh +set forwarding-enabled=both publickey-authentication-options=verify-required \ + strong-crypto=yes +/ip upnp +set enabled=yes +/ip upnp interfaces +add interface="ether1 - Unet" type=external +add interface=Bridge-Lan type=internal +/ipv6 firewall filter +add action=accept chain=input comment=\ + "defconf: accept established,related,untracked" connection-state=\ + established,related,untracked disabled=yes +add action=drop chain=input comment="defconf: drop invalid" connection-state=\ + invalid disabled=yes +add action=accept chain=input comment="defconf: accept ICMPv6" disabled=yes \ + protocol=icmpv6 +add action=accept chain=input comment="defconf: accept UDP traceroute" \ + disabled=yes dst-port=33434-33534 protocol=udp +add action=accept chain=input comment=\ + "defconf: accept DHCPv6-Client prefix delegation." disabled=yes dst-port=\ + 546 protocol=udp src-address=fe80::/10 +add action=accept chain=input comment="defconf: accept IKE" disabled=yes \ + dst-port=500,4500 protocol=udp +add action=accept chain=input comment="defconf: accept ipsec AH" disabled=yes \ + protocol=ipsec-ah +add action=accept chain=input comment="defconf: accept ipsec ESP" disabled=\ + yes protocol=ipsec-esp +add action=accept chain=input comment=\ + "defconf: accept all that matches ipsec policy" disabled=yes \ + ipsec-policy=in,ipsec +add action=drop chain=input comment=\ + "defconf: drop everything else not coming from LAN" disabled=yes \ + in-interface-list=!LAN +add action=fasttrack-connection chain=forward comment="defconf: fasttrack6" \ + connection-state=established,related +add action=accept chain=forward comment=\ + "defconf: accept established,related,untracked" connection-state=\ + established,related,untracked +add action=drop chain=forward comment="defconf: drop invalid" \ + connection-state=invalid +add action=drop chain=forward comment=\ + "defconf: drop packets with bad src ipv6" src-address-list=bad_ipv6 +add action=drop chain=forward comment=\ + "defconf: drop packets with bad dst ipv6" dst-address-list=bad_ipv6 +add action=drop chain=forward comment="defconf: rfc4890 drop hop-limit=1" \ + hop-limit=equal:1 protocol=icmpv6 +add action=accept chain=forward comment="defconf: accept ICMPv6" protocol=\ + icmpv6 +add action=accept chain=forward comment="defconf: accept HIP" protocol=139 +add action=accept chain=forward comment="defconf: accept IKE" dst-port=\ + 500,4500 protocol=udp +add action=accept chain=forward comment="defconf: accept ipsec AH" protocol=\ + ipsec-ah +add action=accept chain=forward comment="defconf: accept ipsec ESP" protocol=\ + ipsec-esp +add action=accept chain=forward comment=\ + "defconf: accept all that matches ipsec policy" ipsec-policy=in,ipsec +add action=drop chain=forward comment=\ + "defconf: drop everything else not coming from LAN" in-interface-list=\ + !LAN +/system clock +set time-zone-autodetect=no time-zone-name=Europe/Moscow +/system identity +set name=MikroMaster +/system ntp client +set enabled=yes +/system ntp server +set enabled=yes manycast=yes multicast=yes use-local-clock=yes +/system ntp client servers +add address=time.google.com +/system scheduler +add comment="Every Day Set Global Environment Variables" name=AM-SetGlobalEnv \ + on-event="/system/script { run AM-GlobalConfig; run AM-GlobalFunc; }" \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Every Day Check For Update Scripts" interval=1d name=\ + AM-ScriptInstallUpdate on-event=\ + ":global ScriptInstallUpdate; \$ScriptInstallUpdate;" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment=awg3vds interval=1d name=awg3vds-update on-event=\ + "/system/script/run awg3vds-update" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2026-09-12 start-time=04:30:00 +/tool e-mail +set certificate-verification=no from=MikroVados port=587 \ + server=smtp.mail.me.com tls=starttls user=vadossio@icloud.com +/tool netwatch +add comment="doh-fallback, doh-url=https://security.cloudflare-dns.com/dns-que\ + ry, doh-cert=DigiCert Global Root CA, notify, name=CloudFlare-doh IPv4 1" \ + disabled=yes host=1.1.1.1 type=simple +add comment="doh, doh-url=https://security.cloudflare-dns.com/dns-query, doh-c\ + ert=DigiCert Global Root CA, notify, name=CloudFlare-doh IPv4 2" \ + disabled=yes host=1.0.0.1 type=simple +add comment="doh-fallback, dns-fallback, doh-url=https://dns.google/dns-query,\ + \_doh-cert=DigiCert Global Root G2, notify, name=Google-doh IPv4 1" \ + disabled=yes host=8.8.8.8 type=simple +add comment="doh-fallback, dns-fallback, doh-url=https://dns.google/dns-query,\ + \_doh-cert=DigiCert Global Root G2, notify, name=Google-doh IPv4 2" \ + disabled=yes host=8.8.4.4 type=simple +add comment="doh-fallback, dns-fallback, doh-url=https://dns.quad9.net/dns-que\ + ry, doh-cert=DigiCert Global Root G3, notify, name=Cuad9-doh IPv4 1" \ + disabled=yes host=9.9.9.9 type=simple +add comment="doh-fallback, dns-fallback, doh-url=https://dns.quad9.net/dns-que\ + ry, doh-cert=DigiCert Global Root G3, notify, name=Cuad9-doh IPv4 2" \ + disabled=yes host=149.112.112.112 type=simple +add comment="dns, notify, name=ns1.unet.ws" disabled=yes host=91.192.189.2 \ + type=simple +/user aaa +set accounting=no diff --git a/MikroMaster/history/20260917/20260917024001-Diff-Config.rsc b/MikroMaster/history/20260917/20260917024001-Diff-Config.rsc new file mode 100644 index 0000000..f36952d --- /dev/null +++ b/MikroMaster/history/20260917/20260917024001-Diff-Config.rsc @@ -0,0 +1,8 @@ +606c606 +< \n:global CommitId \"main/18038/819287c3\";\r\ +--- +> \n:global CommitId \"main/17750/4de228d1\";\r\ +609c609 +< r: root, in 02:20:04 17.09.2026.\";\r\ +--- +> r: root, in 02:20:04 16.09.2026.\";\r\ -- 2.52.0