From d089302afea66d04b49924d97b5d68984b15948d Mon Sep 17 00:00:00 2001 From: vados-dev Date: Sun, 28 Jun 2026 09:01:21 +0300 Subject: [PATCH] Backup for MikroGig created successfully at Jun 28 09:01:21. --- .../20260628/20260628090117-Binary.backup | Bin 0 -> 177026 bytes MikroGig/20260628/20260628090117-Config.rsc | 2774 +++++++++++++++++ .../20260628/20260628090117-Diff-Config.rsc | 13 + 3 files changed, 2787 insertions(+) create mode 100644 MikroGig/20260628/20260628090117-Binary.backup create mode 100644 MikroGig/20260628/20260628090117-Config.rsc create mode 100644 MikroGig/history/20260628/20260628090117-Diff-Config.rsc diff --git a/MikroGig/20260628/20260628090117-Binary.backup b/MikroGig/20260628/20260628090117-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..24b2137aaf033e1d19fafd33c5a53359c4f2ed68 GIT binary patch literal 177026 zcmV+aKLEh*sF8DmvjPB2R{u-tIcw_;{=;(~Duata)ZW{dN26WLnd_+lVUh!|2EMR}Gi{yi5og@`)c8n{i zTlB-il4*ibr1cH#Wv?NKws(*id^h>=MEKGF@VAu6xo{eE();ez%1U%xwDSQr;@lUB zVXK)!WvcgnO^ix^pSje%0G#_h2phx4&eX=Y#udlE*V{P%p4r2ptHVur6zPnxj(=dX z(QG5!I)ZF?;*-5f%=QnY&yvi6$7E)*-{h$-uk@@re;G;6<=dyc>xg7Tou@x8ZN!WZ z;1I2ss&EIua=S!ksHq{Y;9N}VAD(sa{;D~&@xbVmvt8`r$}q7qd&b8?DP|f%nyr}p zq^BWDl}`7*{wbU~CqGCL|E&-A3kQZ7TK9gFJh1`Zmqi%DwY{Xes)jXGcyy15yCiU< zA5HcO>A`g30U$<7+{eKDYwq!^FF$$|<|Ow_u$voVpQ$dT8X87zixhlY#ZzsY6L6=6 zEHld;JPqTlKUwa*T`jUe_*jg1j{pNr9C1Y$$%@r*z_NEs@aFXkajZc;%EKd^CH@{# z(^W2zfGYKA5#1a{hFw7E3~q)uMrOiTTx4(O1R_3)7;e$(qOo2fXwqhmqxs^Pu3qX$ zd}Q3EB@}#p^V3erJ>yQ&#id>4I-W?gVPl1oLg+bt^JBCYz1H38RN&3SJaJ8xeE*zt zF5^1X`)t3m$Mfhm0>SJLSK;_~R*7^W@xK?(p><4tvVHI$7}OhYkH|5fgiS>*Z;|kOZ<^{esrz zVIzTG`_ph#R<6NOFcQIsB!T5;YXicb(P*|4;naCJ^J(!{o6Dpu7XfHbJ(GAZTUN1o1+9vZskDSr4F2u zmjE(jwj)35b{udC_dq1M5gj^*@&9#mqlvh2Dz=I|gG63P`#;6o0MniV^H_#)G{=%{ z6?0V&5sl;X>tAd5r|$6Pt|tPnU;}rb2vKTs-g^S%?J?l2JpBqFA1@eej8Kq}fq1%! zB-8{My>Rla{qYyrElUj{gJ&vlHxPZdmerIJmQ7AA{O;5c8fBIeKT5FQGBjJuyPLAk zT%FPYh}{){&XeObZt)e`{@&TbH^|1S;?}q3*Q?QlMl9cVr)JVyX+ zK}Tv+J4|Zr@t96Cj?_;OwyRGJ2*n~u)RP~q<=CD}$J5f;bzVAhasj(aX!ANGifADn z58FV^N4$3krsPtZ?9Cf9=re|@t;aLDOr63VmxVWzVq8}X@3#B20XWulBt<$A=pK)T z1s=tN4Zmr+6*^%KGU?c$?w+iU6ec%h?RW8q@h$#@su)r1c|bhy!Mpt$e=OTRDe;f* zro-C9R3Ht#H@Q>-uDP=l;m*Epws$lolV~M{r#^ck`}7L0Q);VLuTHXHFssaFf$m$P z_>>}$%*1r=l5RW?W*ShU@-9bN=MsupxLKj0WjjPr&4x{uVWeR)!Vkh87BJXf(HS|| zooUove1OA_>{0W=x$2N4oW=I7ld6laVkJB0tER7a-fBQO)8Lrz__lXEu-zaR7lc=I z&c6B|7XTvbp!Cc$u_zLiUWKCq4!T0Q)(S-^5$q9vY2!JG*?co0D20)%T{4tQ>~7Fs zRiJVX31Yuu=F3B5mxkqF4!Z|wSQue0hvn+g_Or@L$XYvxiJpb(pN3xR?QEfrR0ru_ z%7nL-Wvw8V0Kx`75{L|=^tkNJz0cN^coFF03Nr#&+ zy+%iM^3oVvUbFb@EM6f1RDYIoa7K0R5lrkLI`ipR)ufd514d6X22K9Nif*7KvFNZ8 zaO%aXZEK%YlFE)k2|WPomjCtv6~#k3Y*19cBtZ3DbvC)a@n2SDAk>Thp~?FDv%fr? zWq!>A^0m{aL(5bn1jNWzRViCGTPb%3;nz;k?D?VIm@KbuOdu?oUNs|G zpl4~I3;9%ail3vatFwkg8YS@567n+=b++VUUa`5HpyMe-?i|L8;yt!aB(PSu@Z~@+ z`jnjbvxkYT-$o_*??LEps_G8JQ_L=a6p_!DcvDp zoZ|QToEaQT$-!Q>O0U-9zgOL9#;uBCw~V?JA?wMs>;dS12=Rdfnv<`KqDxaVPQh-i zk_k+be}_Y&hmrwa1s*y(855>?X(0v@FQusAo2 z?{r3#L^=JGGC2D3g_uj6EBl?Z&;#mYs%V+ z9Lju=&MQ%Y_|+|muzoz3`ZEGHz5hw!x;+SiWEQkmGIzh;4#0Z7Ci$nRL=hs${iY5nJ^cqPv%hG{i?F8*1k{4L zaSRfIJyuPd;{_0a_0;cr-}JV+tLG`jICb=WhOw4H4EA%tg|SEfQmNHGj>7);mtemd z{(~0Z9wo;{L*W%6F}<7@Kg_XI(Ra&3F|9#?O6%cIjwMi;X8cgFzq6D$D!iJT7&T+o zNVg7hUXop2%%d=!2>O`BoPX*0E3@{(3Yk`VsJlI?j%z0-R`R?Ig;`lhNgeX!f|k!z zP_l#>5&5Wuxv&FE3X25;sNT(ZET{8A9U`b&$2cQV?#{NC^F}81jlm{GQ?94R_M&id zomzc#L)3!#eE1hLX%JGZ7s>W+CrAk?M^UCrAZQ~1$uB}w*`^`GtF;>2U06pDxWmp5 z%gzgaCLwveFDAHHsshU?GC9^(i!hV{D+Rl> zM$jp?kRKu@<2O`D^$SrUv_Qv~#Mdb;mZzs=4#Vs_7-sul5UL}XzB8CM$1toO!V5Ts zEhePk1lZQA0h~S<_A9F~qaK&yg77jq-9iZsP}^}uo|caP_UF{J5B7CK^Ob{vDwUlB zqPi#4E;#28eW)lZMSG*~4MePhx;|+b&Q422)!DF01TCXW*=vM6Cmdi{#~I+u&EwOr zt9$(WNozo7tI*1)lGdnk(>}ztPB@vC!T8q(qVR5)m$Aeimjen&m~ixeD+uuz(1Qaz zdi=53IUHQI|261ieC%{9E!e$eNLzxXLsD4ZSSimfafJ;<*zOfuJJNxoTaV*w2Lccq; zfYTkx5y&Ez<1nRetek7aF;bKMJv@y{XO{1kP=>J`83X-aBe*fa=S?phW3|DrfynwH{e;%A_NxKiqE%vG1oVeX$j-7 z4ie5iN&#D2JMwg6?)i(gps`C~~gEj`cXO!Q`mG>ux5ne98-6`v`c z@RzR(u2qWMq&)~2dr^20?gWZOQv^Q-?&*@FH&89USN#cF$EaU1ZokP`<3G%?HM#Ef z`lY;OeKx^BVLq2e;*tj8=~c8zGmy$?+SEkn=A(=SB0!Ux*CD@4U!nWPHqgW|*+*2$ zYn&S!Iq<#fXQE?W{cjrYLxn1?;m#%g-6B&9IwvR68!_bmzXFI1AA!r14*iYM2F0eceLn05ZZ5P5bvi1H|5H`mRAwsni_ zgqBi6&@z%*JyVUSmA3LzXg~1Dbv?!(^w@a{GY@%_iqmV&A(r)ng0EjX4|v6ecGP6? zI*kxXV4%m{nwQDhy%|z9C(x+|lJoy;I?Hw0M2ycjcr;7(EQ@ZoMcY7bD}@eNsoPhj zVq4rjdbDTr!T`Lm0^O$cz=FiQZVr{lIwFzba+&{-cw}lqG@$sN@Z~NlT7kgkA8kzF zXqj?ryt6~!HM88sJtcQ@L;s%x$`ew7&>^dx-sQ{w8^sc7E!RCPmnFfPi|-yzIQ&ed ztKB3EYeT5Us2Td1UELd`y#ppcfL=O&l6!z5)rNM_z;yAfNcOWY$`_L%)|JXX;gX-VR}@j)*f#Vi7WZfxkC5i7uR`|D}Gx;-{lAR zB`5?8Gzp1>WSHXhseh=~XK3A*(!oNif7nW)9*~`d%$`@nF$57G2znA7X%blz)qKZX zZZIY^`2?aoEWw_o(j0_5gO_~p)OmI<2>D$8YkDSr&$SfF7SUPPV^u^o{Xe)xwxsU} z_}h0XjG2o60$5g)@NurmU=6fH+`-v&yH+FQWbv{?TSfz~H#sXE8aW>GdpX71cW1jt zpW(Ekei}|FPP7j`F^xmWjLDU`rO30r!kI!@WBE`3kN;=@M^}~?#dm{ zMA{q)oL_<~GhV{4ZeqN8R0kO%AuvG?)$;FI5uHfvC%qN9EWH}F3~{L%BMR7Wztjl> z`iv=KShrMg^IyFS1&VxSO^r6LB_2pIQjnHXRpTAJF7uiHnW*3RJM;`#y{{aM5~~=+ zS6hr(db(9^x9#{q?F+h;kEWjSd-DnjP0_ox~ zzm1IF-afO;qcmXZ{XJVfah()qiHlkal*R(QRiB_lNnzB|lsI$4xMn|*{A7Z(9 zWkBLI0@9pa4Y0Uz_t6ChBBCWtjDv}wVpMZ+1vj9t+J_t!Z_do34~zOn4HoNC!llo1rsgkDAgV9WK|A9 zBb~{oQtCd`DvUS*a5R4)1c0oUdN;UnjvR00Y0KW=J0w2HKFrlLuEBrF8g547OC55m z06g`UVSPL-i!th%<$8??=lX*s$!)S`m6Wk8Iq(sRaAK2lG)Z|oVl%o}K1eP3Zb1>I z6yGvku_anCsku-Xum=Au?%2dmi>uWEX#?oYLlM`#T6-| zkH$GWu)QGLjLHNX8PZH`W|U+EmHKwFJtP^qyaGc@?%KE zm8wLE`KV^~dS>A->r)_h&^u5{ervcVGS~T{{nkM~Uo;!L&+O5)#b7p^6lFiu`%~sK zP5}PbTqFG>!=Lzt2$q{5%2sv5d3tZ*bj>0iJQ zyA|HRH^!Gx#t$iQF~{n;8~<-YQqI_ens$z;<^;&A=~`l%>yS{v3rDYsn*B;05z{R_ zd!(s{e$58NN3;d2zP7J|g|B zVU#a7up}&2ljs`fRRUhtPDYzpwO9;!T)SQ8-#8K-0BQYos|gfBtB&oGIuZJJI}c zpX^?-3FSU&;C_i{W39Rg!zy%SflBjU(-{{QCHWRpu~+p;a<=Nl$IOr5xne&Ef2mK* z5+{CeQHon)bxjk_*Xvq|B8rUW&hZ4}V2nafxAlTgGJ?+2C9wsrO5z`>hQZS0Y`9ri z@V7LZhLHP&X)4~DBE}yryCUb<=AGo=48Vrsm}(Kczza1UHDb)UkoF;O6{rm=N*IKL zhvfhM(36+=ZM5q@Znp^P^cC*OFUkbN#IgOo@t>_Chnel(MKls;6C=6}FVyryx?wli|HzQ<0(|jJgsyj+W-)WqYDTl0avK_J@M?i+KAmMJ50s)r;+pDP}gEq6((1_)>n6O=i_^x!NA zwfzBdjEqhvy($5CS*d^t($~Ec!fQCP#c=f2GS8CW|DRj&Yl|OtT@fH_>HX1N(eqy{@i@B6M1hA5qYNkqAS^f8qh|=RNTJa z{LBIY)ae3Gzx>INrG^CAy%?&z-Ua>gJ$BltQh^&3vIvkkBfS3wEEWL~vc3NceZez9ZoV zAArudLpEbx1?|zAvRS2l=gjjN@j5!51|0UPK?M9)oyq)Gq|={2x2zCG61SE52lX_O7Ws=NsC~Rjyx4)k5FbRS+||MzR!6ecJO`)H z`6B6oN{1bYXZUpS1Sc6Ww|`>XzSih(rrDS6Ul>MkPxQ`qy%6NO+XjdO2VaI-QWp!>SNq4yP{hsr_p z<(rSe-k=r+ir{(=CYacSEUybal#fK|@vjJBj4Zb?Zol zV~pS#&S$$-n+V+|>P@JcnV0^1aO4pp=Yuwt@h*e74hA|PY$w>~3naUoBW2|;rP;B-p31St%OChDmh=6V0G7`+Mndu+Mn*fePEVo za~=ccuRIJwKY)3;)Chj5^1RX&E!tOGWPc&3&A(R&a)|N@sktxTf<*qzodHKLkSHTz zOXwk@bn36z8f=#1;%MhiMXAv#yIbZB?Do@Z0nOkD#N*6f>gl*B5~h1V`H56a)a2Y! z+R1`K|7K0ze&$$7HOqw;p_5W06`QAI13-dN`yOpg9jRkiK^edj=>G=)Z^Oroo$qC8 zYioKaz=8q>KlMT72OxMTdW6M7xoPj zzL-nN0C9YM)$^Oa zZi0uRCm($RJK=f%YuIdyNeO#6syg|fK-Nkq)?_gW)*;|8%rWuFq~f5zk&8fp%2995 z8B$$&{V9r?q_5|u7b_Dj_iIcb&51}NcGA3+j0C`zF$%q}tE*~qC0i|{!`J(4sTeM- zj`gqzuHOi_PFK&%#K7s-^f}{r;?b=0VNp97?QS&*dwnJ=a(f`T+>@%`y(^=^*g`GP zeVi8F!9xq$MsJ&jEcw%-wn$-Ovj8Q*>yUb9d;(_|gkdeV5MwmKhzwblv+VR`4<9s6 z>Pco3Q&dMU2*9Y--81>@&xz5M`02Ii1}5L9i-26 z^O_4BQs6K#$)piO@~JDpf3(`@EH4PQ`RV}TZfaqh0=wedbb`2B<{NI=2bA&^pCuc= zx=kj_zZ#kK3M)fO#I0Z}S00AG-cePtU;kJK7h$m`|0Rv~>zUcpkE`*QQ}P~gQ7mmP z@>rNm7L22-%fsh?ag;-f16Dr}2z45@Or#f?JyrG-XjS7o1yMR#q)yNDsAruF zS9>;Rgyj!Oo%eXP9(kuE(ON9DZSunX*)9!B?;@gd}lsGtojLNQm0@UL850K~w(%+ut|%{k=v! z^*9{teS3ynLQnyC!fn;4NN_&xU+8GuqRsL4*4BUA8g zo!%=E!AG%em%PWQJ>DQkN*J;qxi6zZ`wx}4TbZ$UUvDj^jSHl-z=Lp$v<|bMOVC~N zl}v1C!4@?5EqrTWw`!tEQ13ni2q3l=Xp>IOlzzUh0kP&QNx9#cV@0;fji!B{UkQ-M z^hiCGmTH4)kfy32^j*h9C(&&T`DXZDgl?$e&#JE~nOLPZFMBJPyKIs@)10u9j2^HR z*T7&e4-`Df0aaO))6qxtV+Y=xA#%+(&N$49pTEifKIr<5S;^Gj7nxJ;^shDP0v)E% zPdsarn*|usU`G+*z;7AM-{6bdsdSr>qHALvpi241wlS*2Szp<# zk&C>XumFXHsIDXNAnAjd#anC5={%&XiYc>c`g z+g{GWso>1gX1?ySP=mb_LO$r)Z+T#vdNcgJL=0*+ND=iwi)dv)=WF(qHN)a($W+pB zy#(nI=;bDU?0y3#>v^XTsp^+_Gh1xt3e#5>*P+@APi~=GC@`#q|Aw-@@Gl*9Diu8S zU&3Hl7Hq^)ytvNMk8~W@gXaFluTC*TA!l{C4gug@+C1X(dK!^`JRw9nKO)Uul-s_H zRu3~T`{VJnkKM0bMMqhV=_J#ZHHRT0E%+4o_kj)-*f@5iE6{1g@asJW7=eivphJ5C zC$i$$)%h#M+E+Ir(r!1_u~n}hXPe7G5Y9KFi+a@c_2f4>-Uc01*N&?ojcKb|9pn*{ z9weVlVqtW=_1NdMD1xXN;~JWftVgCa($?;;mz(5qxf);m6$o_uYS;uf0)#ZBR;sgX zA!=-LIxMN+%OZ`5YwMH7K9Z!TFNIaW5mW2~0l}&@YoR`!BveJDv+z#XUBtuwKOSX(Jj;#{Gg0iF>=r;YbD#ZDh?-*%k{kHg> z0wiR@&Mseem=#-?i9LMkTtDu#lR!&WcpjOENmCI%PBuI_de-KPmx5*p5kY!i=9rXZ zXysYU(u=(&+Neq{r>gRb^V0tHjs6ohq2-Dy`hmhOy-eenn}j9qdL+XCTvdm2J}WJF zaghHyc=ecS_&C)F$GOvB{b+qRJRf3S0(D%ax@0 zxw~(hMF=Fzl;T&|7UY8>(jxGWhxs9@tzTuhBfv@fZJUOR1t>wq^E%FZdbKiFC z=8D3B0%6Czw~Z+oA$x>;TItdia@`=b<5TbgvPZz8GrNhE%f+1lT!kdM@hJ-}`K(sk z$q1wrS@@FC8NoLB-X+$@UVFpFL>e!o+z%YyOA)#*O6#)JF^XetImc0FLS`dMmFZBm zW>(Sw!GW3Utmsm7sAM&0 z%)3tp29?P!w=Jyo~7GYC-IcRxAh`vbbbkf26#N^+>QXnY$z!&KLm6W`?xEfC2hQ}J~ z#IW|De&3fvc8;PV$#!FxOzzx(1zPrb^agVp-$cB0)HNX9QfrHf58UK96T@t#bSM-e`REvt zIm+n@0tfwB5eC;-yy;OMN~wc%9V9&XalDlo<$v=gX*)s9E}L2@87QWXVz4Cg8yNeL z3h}2}O&pe$f?p<%$jxP0;=#?sP_N}o`S9KdI3$J`^@mu_=}it;<-7iUf%cU6Us!SY>cMQ1#{RM(iA>_bH=|PoSc&r(;Kt+LGmeY`dKG8A}dj+`F=URA%{fmUBiFHXQg(2pxN zAP#3)yT(irut40YviP>k`^YBz9W}fen)=@V^KRsq#G|4){0nQsgrRKgDB6HIM)3zR8(TDreUY=f7vV$**sa6>tX{&b#(q8{cz{B= z`2%kL%rCw9l?vX;z30x+D%N<&X8qH~5+Nv0s?J!>JR>}3mB0*>QG_KT z=fr3*dd4SpiskFIT0n6`k_%-xhRyNp_EVhbsT2hv4BsKQn0O;FU%ks%G@D^`NB0>k z#mL1kTSng`i<~(a*a|_8ZP6alY%&o|Vf*s0f3uAS>M1BsGalRC%>>qCa));5a}LdX zOo}u9I3nBY@m&}|7cb_OURq1#Y~-j>ksujy_mJ1YJSuu?s*5rC(&N0j<8lT-=pU=k zh@;cc3Ke@tz0YdB`Y3vTLe$UWda~H40i>}y6MTJIidWX8G>F))1agDp#2?8l-w8KKEMq@{j5;77uOsv-%E;tL;VKcW+Na*XH)Q%-MD3 z9$$qTL%?*2PQ8sGO%gcEa8MXJp=#F#JS&$qCcCjcOtN5fczy{PO*|~(Z&?|BrD?sh z?&w>$vx#)S?k_Mzc!pvhX(TSL+>&_inX-z844psd0>)*SWIyFkj}+AxN;By0{~3pj zZuJ}1>%zGZ>@RskSQG<|e;4;pNp4D+2Vq&&GxK%xklV5Z&G@XowUEC#W+dUfheWwq zjaiz3d6f9I?)H;UjwwxSd@IdX!0EpL${Z1U$KL^JwSJlVa95i9Rr@6@}ep!#e!?JZ?gM%PPi&R@lsCw(>?8OALHs}hnD*i6 zt!l2N3~8k<;1w_)IF?0`WrhELtLN#|D=*~y|0}TeSk^t#cIa0jh8#7u!^MYb z0WhOqb<+k)&*4Uc8*)hT`RovFOhHAlf}~d^PdN|foL`~bl;A~H3J9#UbR8~=x5Szz zSD)=a2d+;id=&X=tP%6d?O-l|U`%pr^?+!s6?)dfgQ`RTOb?nuV9$pn5R@pkSRqVr+J>HxhqYJ*MU)toen*?9<>ole6)Gil z=6#}HRo156IqgehRbi3Jf2geW@*Mj!$*4Ov6H-e3n(vd4^iIy}n!wu4;cWlgl z8j_q8t>m&_TVh95OFeX_mVdCoCV}+>9CJ}WGBF|K0anC?VC&DTH;uu`*!==eY{-Nc z>g(w_lX{li6!D0w^It`CTC*sn6=O8TgH{NuvulS~J?Z|Sw}1c=m>BF>O`njQM=hT} zV9`L1W*j{?69$nXXx@`jN<>?wbh%{}apA|yqNU*9>)d;4hL$d?DDO8g&PE2MAg(11 zeEs^VE-bO5bkYc`Hoe>+y%#;4G1w^f0$3jxkgR`9!uQ@Dx&s#7#AjNeqk-ot$^8T% zMCcrfx&_i1kk{hjB;9}^^0%dKo7QAuS5 zRtf|{>{&D^K$8rm-Tfi}_&CRc3#n^q+xOMe7wafcO3#O>mTM;V22DTsDo@H)|L78dKIQ-uIZWV*_ zbGgh{o;1>^Y7;;)ADEMy7@o-n4p_-)9T3}T+&E}${2s<%t`vmx?~Ml%$vZ!i9x3r zGn-n^iSu<`yCYH0SaZCKVXKro6DF@m&UoiBLv^wceFBVI!}kd(`+&|8{yr>3`Fm1D zK!Esq8xe_+a&1KMZFO)QUj%o|Zz67x5=a`GA_a&!#GUCMj@hKyRn9q{=d}}mJ#keLiAoA3)_Q_qNQk=)ZxO{y!_E$?kKd}dG z>I9izPS7MM(NEi(-Lc`o#>2@OqYdBV5q1(ly!^$zZ9Od`-L|FN~yJ&M;Ir??}@ z2Zp_oJ(GBx*E>DH2Qy0<#aqk%C5<XMXyS_8ec1eewI5QEeR^Q#w`I1dejJ)I%dD-118G;Dua#!{9nwfV!TJ!PfSLy_ za>qfZ`zW+Nmyu)GGi|FOAz|YgUt7};M+VS0ZdF_bm2r3xig*5)x)KiavqngL9@pUS zIFL3usI8Bj>H~1?xjDeV=ReNb2HtgP{+q4?f0C? z764G$pvHVxVsi5s&sR$nB0!o_vYiBK0=y5fftJc@yG>8^is$u)FEGOR=zwff00043 znq8%yFncof+GRxDCn1Xrgs?jzqxq!- z_dI>BZSf2g<&l?qgdJ_HI@vmFI24udl^fLkXaW&!2*G`kF0L|Gp3Q#GvHFI32wD&K zGkU+*isvcbO%m%cW+J4HJgBr-f+emRP>Be4hxwFtz;d)IE~isU0(|}HJfBMtAr9O) z)4F1BCe@H-X27I$<%^)8myfiTL%xEf?yTh|CcvZ=5U?Mlr#662Ss6GijHf02C?H|J@*YopFQ(nN1$v zWPixE3oY+B9}-auVGWP_Ikx;XdQcSe0^Lsp$591NIv{EbOS7g`efyoK|362>zK!6T zb(E}Pnyp9|xgSWL?JWs|IFvzHF7z-EKc|66ftLCX&V?#KP-jd{Ejjm&1QSdJ8|NW= z9VILouZ1!5DxMNz)+!nKY<&_P=^lLbk$a?^l1x>{23vowhN*FU8BQsczNM z69$WU!V7eGinU}nyOIn=yww+I-Ei-_HqxsU9IaDyZPyoH40Hpt31dJTbp||W=~#fs z&vN2*aRkCsgKQ8_sYp}G<*>F!2+s6a{Jp`KU&3BUVoJCgT6UF|;7_=~yCIhHo07NL z0K~$F1%@6CIwUD%R~{cd-K{BfBeV$tqxvYD99fwd0h^?5IjjRRj9OZUMF(xJ?Wl4g zQ}X;Z5kH_tu9T@HX5xDDg)>!^$>?wtM4tG{L`$u|(TqXmO&1s!j0*EXg*LB63fHq7 zd$g)q9(T)em{Mht!PUV1gdwp@Syx&VxU#1X0#Pw^1DIXvw2gUqY+RZLUwf=O3>?)6 z6YV@TBtIcvGfrs%9oTv^gxu4wtv;OzaTZX^v>3M;X_4;-iZ{4EtF&E|2)tuFvI9X0 zPQz|HL_rH`-Qc)_uQSWT*owD!o0+Rn#YXIzLDyWIPKBRK)9ky|X0{MT^$Looc17!W z13K%1->H9~9?i+8dn+z01B!%EloSA)i6(A`FZ|0)AsE*TL{xwFlA3u207=bOgbKZG z9v4e%B}iXHQO_a|{PT!$UR6pWL*c}0%1$qdGyvJ8N+&6IaosOZ6gf4+Nv`On>8+#U zhHO0PZP5+e?QuKkgFRtUlmLDf&|2vuGFJ?0M`e@2#10_b_I+ zh$(<0xcys`qV$b!?!{?!Kn1dhHo!Em8>K6qeh}L{>ypMM-M1U^cQQCltGrgW4gq)i#!Z z#oazk_6sz|fUlIE17sl~LD1d(Q*oXGInlI#VmHxJ*`q2Zo2tnd5=Hncr|0)}idI${ zMg>b=_#w#E5T-qSy^RLswfDTz=GUZX;sM&M^CVaZZ>e?pWfzB*6q=MObB}!Zd{&n! zQ*yb#i=UiQQWJv|fw6EGeujsPzi^lu4W_oHj*afp5%(~#R8eU!P!FYJ1Y9XH|Tv65AP$tYfR#a2`XF9Y1nHbi?f|*Ejh~xmVo3txIAcAnmh!c zdD`h$xCtib{}}eGAMBr4@u}1D^d|k?Wi)1-y|$R8#@UCp zvSH^Qz0675A^_ePHwWLm=&JjIm#$g^&F!i0uw;?5^2TmY)T#BC*A@h*_B+m zV+2}~_#Spis@+ez50yeMxl|OdR&1cXp)-E4>pWMHT=y5%=+YOJ{O}8yP&PrwG>Pw5 z{wN1|kZXS&lUg5qz`R`RS#T-GzAf?aRH?M+U*HeEK2@4hq+&UX?z?Dug*2p(Bbem9 z@vx7&xG-cUM0gag`PU^!1H~JxS!#A}g_dqEQ;ADC?#P-U1U8^Vy%VD2=lhKe*oK%7 zi43b|O%G8(KYbh2*mW%-LV^cl<*9_Vm81O3F(YAmC3$j_av~ddpUXQwexCkiGA*FG z^(YR+N^^#UITcy;2s(7hZrEE(ETX)it8Xi4g6iS^RH7WYQ2u#IICU0chSbYB5 zT#b&)H8hVR#^+kkolv>?;&lhs6R)U!(F91^{i~=gl|pvDkNT7{FXgN=8x@p)k(kgJ zK3lP_#DekMAb@+9?hvBXbpMqJC`gaZCXBWr7CxTAWuF2aO8P}Twa9XwWMS?{9E*#@ z?tphE4Dk%1Kh%`?UFqQASH1&!4K3~Y6~G}={g;mdtWsFN7K$@RhUF`VjrX8g+3W)u zbRT$CDt%j<+#YwOcQC%58PwtrWGXzO!HZk^vo*Ny9(kg19QVH(I>3&XE?M!R>HSMNhmI|95_kDo$XS)IkkFN-BNx3j00@007Ub(wd z53=h+!4S}n>B3-mT%UErm8#l&jis9D$vJNI&>g7!Zr{mYWlVV?MMcNTsZCFqsnvRt zt)$bK_;wH3YsB(BSu+PQLZ-BL6MB;NjZ_yDMV!)aMZS3JWKIzlA$Rh!K!E564gmqQ zBKhu0YOnp%>c*pWTdD57_l)_h5wza{(5uK3&V*u_$qXsu9`@$$DD~IAFqTBauYM9Z;`y0pX`Nl{F=Iy#zrfj`VDCyAZ<*I~LPI?8=4=M>s;>7E~N&I}8#AI6%*x6mu%?`#h0CCC_ zPlp}27_)5jlzrOmM=2lQyLvMxt?h*hZdxP-L4hG*7cl4cY+}?(HgKf;*H~%2t~~P8 zVKCDlwYvMu`(e^K5oI#kHH*DP(y1JIJ}l&R0e3T5)RxhJr`g3wIOgwv<&S&008G(E z>vb zr^}dE@2~n!6#t6B1_T}ZHppE~Nc7#3HJmwbrGLDO)4vT{@#*Hds%lLZeMc=tNn`95 z8!n=A6U5p{djxXMxR05oTY8sFvT zkB9mVpbp~1l9RSz($^?1Z(Mz>D$}Fx(WDf#*#?zbh{r*f?{x0JL-F?Gg>hW~aa!4* zXGNOQIo!$Ab1ddM^US%yVov^;d7gOAeJ+(`c0JS+^Fs_6mXx)+SBpGbPMBUKJGQ!} zQNy2Y${jNv+33!`Jx#CpAO za^oM&wOv%cD~;49uamPJq~2_O;_glD)N)Cf{gx)mZ}FEAReHFl&A~S8`$=b|IQGzr z`J3)g_-BOr#mcvV2aI5^&#NQr1-TPkFH>}S!sSLw1F$#xCaJWdzR|(?KAQd&#a zgVSpl!Cu@@+qn_W^Z@B}J7TB~1`|_BxZI69&}DO)cVl@MGeBLxFBpV~VozUh(-2-+ znBEzfV+tg-C4ivpbKT8XQH6W)T*K)21VRCsAo(VPC?IxH{F$*)!vpi-Nril%Do%q` zHXr-JsqgFZX|5I4n;iuIV7nI-xeWI+fQ96IWrUPmP(BSgQP3Cfiu&9rr3tYB)UD5; zb><(Jv;lskE%3R19=r+3JBQ=n3@%ehDX4*>PFRNX2XmsVBP8SaxjAAv{Ti7b*gKlj zFl6lwT7yP5%HO_wOtGR^!_nB(Qi*cNiMvGh3 zZROvm00!$vhd~va?Ac;e{JrGke+IFZ7|pq&;c#SLj>g5fONSwa>u6SEjN*+=X+y5( zNzM(XO>O84yFisEPn74UBqI49X^ZK|CiPp2Rknuc+M~;^HEU zO)kN2uJ2FVL})&-AQdbDlO}+F&W1T*|y4m6s*O6YhlQ+a<0%;5Lgvi-BAS>QNy#v&Nl#IUpnJZ= zQlFakA|KSLCUAGR06UyA4>m`(? zlw~!|^C8n2q7CGB(u24Utc3;>kNy7oXaLBUyYtsy0UqwX=6oD_Fv0qs9cDh4!As^d zz?fZ}Trz*FB9_N41Y6A%6wx`|XKLkx0A(}n>c2A*hErNE#0v<#vD7o9i1{L<0!;UH z9eeyha@AST~;BgXOCAh1(V$EEHTwJ;pS&Y3`cnl7^6C zDlLTYkeaI0bEfIgZPAT6ilUWSDq#!Kl1LY7a;Gm#n3(X+U0Q-a$ zax0M=bd!?EWg-B*JB{@cA@-=ZBLIVjgoQkPKWRp>!8MR!F9al{w`~0sF%A%wv?TWY zKqwld&`}vvzkkN)UVR6QbIM;0_^06$3xey^krBrX!DFSPfo748s{=B(-CO9a*GIGn zkW@bG${m>^O{Vz^wtInmhbmSElJqbnccn?yJ3C-B|j; z*9&2_w%?czkJrCReeb^e%DD)`MJ8d8(3^aBLM!E;_ztMhbo&>@ZO#QhbU(lNNAtKu z727w3FlYotMc4Ln^i)>)yr+ph<$#5wDVTrL)5U5=59*h$Uj~yPz0Za|7!fQg>}Y8& zv(3g70h{kBZ*D>9$xtlEsal*{{Fe5tLyL@5H-s35EnN-7pCg+UXd$Fuw~KnpZzs7N z0+#^*P#_K%D)8PhJt4;m3rd71x6g+qe*A-$WOShKXv+13;%ba;BQ8j^6-xlcJCwSv z%gGNwJt^BeGXGytymfJrU3ouFkedhsOp3!JXs z!q}jIm*dN9SO9z#Rzsi7d5|y=1oldu$pb{4*2`G{c9Ge?|wngHJIo zvq$qSZ3URDJuq>IV- zbZkgSD2Xnc(*~3_Z8dwToN=*5o0BEj9Dt_a`9AqfC9f!b^U}Y|3c1P0*G-kiGF;mn zytRY>> z;X`HD#J=HlByw%9RsD9Hh5d4CX9LQKz@43Pn*5-^JW+({<^;&RS*&Nai>ewvtWh=q zNZ9OWplBx!198$C@R<(yBhWw{T}?i{?(MrW#KZSG)$i=_SxZ1w$DbE_2{dS^CJpJuoRfqe$U0rP=X#}v-*oJi!7Wqt9xb2^C(c)P}B1*|1Cv)5!R zZ5RL)8t_so9eBr&s^~6KSrATu{7Fa57I<9Yl16q2#9FarCB?pY=y1eQF#2^KJ?$OD zA=#PXqaK4s0Z7Wde-I3?hxTDurCwQ9^<0}R9h|#DsCJ=>{DK~x`A|M<)(ilVEx4Rj z^6v8c)n-cTQhw-#5Snf`+l`by7{gc}Np04ps^fUs(;lZ_VHghkgxTkl-5vCUHBSntwCMDz7LhyjV8>p47@M7 zq|5$?yH=JWr}IFe#r2sE>>W6tiQ8JP?QcO0+@sTV!zE>qBdmnsHlte0NcN zp&GIGTtxfwTkFj}PW`oJ8yNCaI$9@Cj!X{1%&_5HEvyB5!qaL*c`1dVuBt71m6u}4 zo4<^7zNcIg;B4M&4$J>_g;rVCd>f!#psLYnI72&CgbTndt&v7Y|V5?qC|LQ zo=MEY*fS=d`p&n!4g(W#^dS6sMC4>dTvI@pF_tDa+o_FJ$vGSwz?M0ALJ9ZT}xzBmd;T99jO#Pq5FCN)EChOr` zFcfJryCVUMd6jLkFn4&;ce|>UwhX&Szaz1En!#I;Jv7nx64xg+kc{;Xqjx?p)!m9g zpBpYjWO3*co_L6uXchz-cBX-aF6633{sCieS*TqV0~GXBJ?z0O@BY|VyO1-k4EK&0xCf6dy1DA5q|}grz2>fQxr$01vRY> z06LR}A;HGe%)>{?jyj|hS7VZAdAXG#GOG$ZH%onCG-*ECnye}POtp%WK{)zUTi?x0 zOFLM^6gY)5R=pnVM$^)n~zkqfK!)W9RJG)<7HTM;0DuuKyK3i^oY zXqTM%x5QwtNrY$j9!-#VIu=K)W*FKaRzQ7S%W%}^N?p%`T%ys9z}zR#^LtROu?K_S zhud+H!!6KRrGXE@gIkTUaWrS;f0nV>ayiTw1S87jLZ}z05S)D@p%KHbJ|Aq~EWzdz z>0y$Sx$l)kivy<{UlI?hE5l>YF+TsFoGnLce!@glexx8)02^j`FxI~P^R@>%pVH}} z16to%$*H@9b11%p)1#2lhfif?K-Y2_IE8 zQ!kg3xJ!U&zQva&)sWbQljBR99w(~*02NU8Qucaq0QxYE&M>oGNk-1opoR`eTaz^}))tt5{@ zOBFrd&H*kkJ=nXSPSs0XRCLDDrRvSWQ@aTBMu?Y%dZL;;lX^ImnGS{%IYh14QWbPe zTKWK2_b)0JpZQ&8%9hdckJ>!*P9X6I>Ltlg+^gxt3JF#3zgk4AIR(dNt$r9{&dlEa z4&$2S!^Bh7Q|Q%!+i~fugdM*7qeG0FpfpQ%BrwA#3E9i`*|NEdppJU z%fBOColGV|21finNfoL~eu+p%NWe+gSDSafCF_H_1JLk1NyhQ`mv>{}-&T-o9%XeB z(iOfN0J07$AS;N4RLm(g*S&6!)AhQ-4+uV5RbA@%0VSkL@?lDuL(z}u)Rsp*_;WeS z5;n!TnLb3jxCsQz=@7iYUwI}Rqs~leqo|RK6LY#9{@Ke-hGeu$>rjOjbQ{m!-JM?D zWqC@-X3h`GbDhZ6j1BX1eawsP-o;VoCR@TSZRjSDE~X4yKWOr`71%b|^@B!iG0%hv z7_=eAik>q116={z6Ya#TKzTLHu=$4kl@waRE&$>`@;jR7UxtUd-ior`-SI$yniE~l zRX(&t>5DR3_@Yc~Lszo(P8}k#-S!(wWC1!!(O~jb?g+wN!60s@l`yN&ds6uWbGl_% zo=t?ZrIbxKmDg=0KE_(PtUBE7m^R35Em7>*+>B3BHpNqBJ1~N;ui};DB zR$*6KjF5(y*CQhEWRC3@z-vO)O72EK*KiJe*C!VK_jCVP2-$1MC@oF#lRMFmdtD20 zj~xv4Isq89u>NfbfBSHwd&U<~QR$UdrC{Um54MhiTy#M6?}RuJM9D|5AojT5B*HIVM{bhga48*3+r=oXDFp)Ld8y=}UZ97n|p`3ruyw zR;3%jQBwbMR^#obj&KC^Y)>wx`zR73r!Z=xvfwO{S>x|1Iw0TMg)DKHf(5aBTG5pWXJ*^ zn%U{WWh{z6?SK1+`rOJwTC&H7Axx`E3hma|s*G!4*p^fHB#K4Y{MA8IcZ^q{!`Uu` z<<{l9T|3gJD`9zMCXk1WH4okg0F|I{kFcrXV`iD+;w79N@!|a0Z`8r-EZ`hsY9-8e3F9%MTUA5pLT`r(UhMp+dXcLwbAT4|9p#=9< zrANcl+Y=bjb+7xO>waqMXQ+tG8*hjG%>{Z2vv;MgvoXu*-^8&5@mSeN7{9fIk5@Qi zh3;3*g!^rrzU<_Snh~g(&Mid|Ymdk20FzDe+9(6K+Tqz`LO40@#T=#mXX6vn)7GUQ z7ZLu|R;#Q5?4B6Q7sW>l=f7fm4D4Hyt#a=uH#2?Q$|1v7h{?de6lzNQ!&8V7OR&Z# zOUiQB0&VVd-Y*=YD&=x`ipgryl)xYAyhi2JfYZ*1h4gZ5^)W#j`uE&*mSCJt8u7NW z`9SA=2ZQaZEi@L^EMzZTy zNN#lY$hv9$Ay^x2&zT} zr*0tKQ-MMY5^&hQQS8Vuu+6mo04?|;QCAmbt1{$*W2;wVWr@o@)VVA+5=-(}a7;N` z0~5-b2Pze3v$~U+1@v&p+)Io*ov=dNZkG1Duowypg zrUmyu)X1R#ux|v49S?||zWJ#MbDizb*Y4FW617dLNh|IG12ZRF zzbmI@ZP=|Rw_xLIJ7Pd`N9M@LYK`daR_l~H5)BF3gZ(djljId=ZkE}HPCoRIy{AX>Eb>T z!(lHUQoL9jgOyh{=>1@b97dcr$WP!RypH@g;Fz+VoP4c)x17x43C`&a>VchO*kRES zl3pfT({4Jh?dd&q$9F#8gR_B}qp(IjyOSh3Xm7oy9D)?X2%{q$%-@pPA*qQJE|6&< z9$E9s%+QY~zZ@EI0*_GHa{4A@d{;OFIy)k2kyA|X&ZxC zTq5-2I$DIeZY;r+UNDxww3#dcoQ~Yn6qCDbeqw~gX71~E7jD>KExf}t-4V{<-!xJ9 zjP09o=I}}t@Mf14A|!1>UHR(0eZ^!>%<( zh{0UIjU}j$m4+-BwfJ_JHTIi6Zrftq4JXT#Y*fOCUiR*I<8PnLALF;ZI$(!v3I9m2R^(7o)Cl2@=rW4 zJ#p7}YA$7Yr7*VLyYdGURjo|LX{KOt1rs;vQo@Ey!bbWDXwX~!(1F(lZ@4&%YXAN9vH^9 zmO;nHUZ7IZsyjX2j{u&j1RKVC7E#)sgfBU_KFJW~PkP|p-DChTqk!v;lxK8%5zan|EYB)CBXzZ%KiXB^!mjllQHAE=t- zGwOzY%WL89o1nuO(qQhX61eKxs%ii8lNx*mW57n91fh_iWyXEElqVO9Af(lP`$q5*>c9^3Br-M1?071`k6wjkt?t_%HK4!4@>r;$)Ms4w5xCG?3Q*8X&M zNzLT`1EbtqIY@B(rom%njen)H(H-PXXMj0;Wo*r z=b&iT6i6ZEwV*TumQG@?oS(gBY_*E1h7`7L4s6bHE?r|x8*6cakkG50ge;vF)(?H} z8oL0LN~oy5X+?q*?NDCC?NQUgQ}8QOxE$vhUdy{p3%5TZG9STc*%qs@{v{m6s_^k z4c(P7wnF>fuO$%Bem8|NNN%0*Wr1TWqQR2?ro>IfmdvfS`c7t5l0GsenE+i(2Tpl! zeVPOhL9snCXtBAUvq1@Wdg`K|SQBOp#7-L^M9v{La6v?h(4OW7;_?8f$beU*%$sbp z24tLsU}EF;RjSaBuvrw{IE31{8X=j2p!t<3X4j}WB(OM(VBZ9spkl9(25WuptX6%1 zi@oaJ@ub_o8IoQoRf{QGf0^j!kK6HgsOX*GEP>^jn9wMz+W7{NTV^(t=yNo>kNG40 zxHyfQrdeHq?ffPJ4Xg|e2-XKN!dV;oDBeUf+prEd5uC6NA#Wg9TqFEY`wj~Zzpt?D zomNn5kyULi@b$HZuip(q`OF)qpPOwUYaR>wk5Q6X)!(V;0Z?rFRWMrQ*IV_7glqvJtPPnNw=X&H&raA=UGi z=pZFW8p<&0l2NcAEx+meJv3^1nc4t%9JpUWxnb-o?|j*)>N>`mo#n5Y4UqpT9#mW4 zYxrLvVL~EgXAp4vBF0s&$%tqQAIa!vx&&8W*@}C6u1at;?GdjuAhrj{r&(W5f)KoE z)T!K`Tof_Nxoaed2VraWqn}feL`kQ!baKVxKOF#sBJPGf-Ti)ruV&Y7x+KScrOZy4 z4B9D~y6(o3$d45|nxPG&W!e|T!&=DCgsqQ{w`gAuME6cpjzzuf{_gAYUI)7)7f!wo@xfX`sN>bTt zzMeWbD=8{A`=)WORq2lGl?Cd8I#s((zgl3#d_doHL&R(cGh~c;pq|hyiNS#v=hET| zb|OAc$iCz z!@O3h*zR0w0lm)$|?ZiiqfG7gB7C!%_}#SY>soK>Sg={6r8?1rUFxXvAxq!tJg^VDj`)mIrb!KMg>9#?rL6B+C3ye8ky={!#S3?JjMUuQJ}yOb`K6?AB4)>k7QyHhd>#>> z!oI^c9G08BB+=s#czbw1UghLB3g~;pSmsQt*NPsd%vg)U(eK#9NyA$?jT)j;#Wu?1 zgk+UYZS-DM-cpRz4#w!axtP`9{n*A@+65mO1@GY9A;Oq5rv5Bwia0CeC@W3ZCU~G2zAkPww}P z1mIoLmmX4hl>;>QpW-#pEOtvI z(A`WAl=WT@$YqJUSqnhv+oZS~n8#g$!{_N5Quab~-4jK?YMN5kb&u5 z-b?K?vnPm`OuwWAnU!>^sWx8sLDHWOk^RG8i`$WXG|Q9n&rw^*JMhZT$>zE@PNtAZps z^;V`c*$HmBt&<057S``q9q(!eUqpnxl{l!LKPE$d#X~#rGE~s$A4u`;E(!t18A>1q z=Q7X6y^qC|J^M$d{M0tI`1@yKYB=5$Zs9?WDC;>|EiB_Ff7^aChs#Dk{RojQO>sC_ zfET#vf;FHyNlZ=_(Ck$ord<5v5tfs7hu8<0f}dh!6L-L(2?!%*saNGJewRZfssVj= zHw|gI*gwBapblT2X=ka3RN60eiA<-S)le!eQ0s5K5^CFzD&pxiko~GzX~-z~H5j&N zG_7sLOW6_{fV){1XkQ z`|yZF8qcd#a2JKMARw6NP|)5DuM?!WZGo%g$wng%Kcc! zdKy8nB{8%B+YQQ9Z7*-;9df=zm@cl4pFzA{U;2exk!)oW9p8Oq2o&|}$9~DQ@W>al zub>Jju=k|X(Tn0Q($-;}Gr7Q=F<_Rek;~N&gPLF|EPAa!W3M@yVW-@xExvy9Q+x{l zo9iiK!jV*sI-rK&CT@b?8KcP&yv++Jg&dEHX3AZiBl)AD71gC6fKuPQ9Xd4_0NmX2 z*inX7h5h$f1nYasvE&9H6*X%UWt`JvTm7`J2Hol_m)H^UJnT1KRlLewETzj-|n&i3giLC#&oz`a%7}94-fPypHRG}sZyPgpC z6jTNqY%dsre`T)h!5PUjwrPH0doK&n6AsASyC)Va{kud5~9 z&`ge=(z$9Ww)h!Fh1%5&Kfl{-k~}MX(@1_;IE?Nsm-M#zXGGWjr#oqgSlg=z+Q_KM z&F17-BsKtp#?&~*PtA-Ki|huqt>c=)*9e6W z{4>@EwYRm-0`vSGj4_w>29r+yuqgfK7L>zW2T9aCMR{#y5p=`*I(#U9Ga$UW`uI{J zLvwC^w5GY^t6;fMsJyPtp)+|>S7_S<623t>M@k+8p1Zk)rLJJft=j5ir}EwUjazHa zQV;h|n`%k%EOko%3J`WDkGvA1YRKQu=4n+UwHJdvk**9+_yl|>wspwzT*WfXT0W}J zXYBvfgvxTfgQ_+38baVX%6JKEfF>nJD%f*q$eF1^yXQOiOhgz%|M3a_KFJ81mjTm; z#BA+q22^%t50c-cCedK+nTAG^hZF_>w}Zo}Jn<Ul$B6o4?~`=$?9kN~G`O|<~euM}sC@A$yMxc2)HV;vO4Egpl$WBu|_ zo_zb@RBLvhMc(~4ZKS@*_kPwCfM0{%J7-ZJmZJ#Unm-{M5QN*fJ6n3?`xij45!3; zP@)%bgJ3S`lQq52o6Btg--55QK1tSc_$8|WoKdD)ZFttjjZr?M*n(}&Y+`OBgFc3u zg)sadh)FW{7gMX6UZBGO*I@E~-+alWoA+yZqhCK?4^fAJ`|OR-$}?Jv&;&R)C=lI-~Dj`xz;2?plIHx-u_M4^O2^gF>A#AH!|Kcp{sf%Pj8bPRO3NcgAf`lm%nTmYgD0lly8vb7U27i>uh zNjLXp7F(7Z!=y!cJrg=#Ioj|w=#Sf}UIbu=2neVkediN5+~2J9`K<78^#-$Haf5oN zIoL4)&iq1B-Hr<@>9lRT(n0%fKSQm_yW2yljI$(NpvTvp)#AO<$Jeo576IMWJ4HE^ z2L@dn&YF*ZIfIzzSqJ+#cI-r(n_(7 zp>DJl`lxS6zWP@W-VFh@Wylc*kG(?de)?yL%Vw%<7qgHq1>}+!rP_=(q8_XFd!4NB z3mofb0cg`wWqK@r2aO>E<5;bFwu3cADPPiwr{Q*M=HN$8JH~Y>Ht&>!?(uPz`4Ttg z4}K@xWM+D&`usjC!})f(1kbNTID*A0r(#nY@#-_S4-v`4XkRMhAr5h>`VHBd@YH$D zv#{Vlmg6XDH=is0vFr~wSQZCxOXBepBA>E@;DXhUW%j_Fb6bry-mHThS*$tKjU9b4 z!gN<6Z*)xw{dw<*ydvn&&Wy9sEQr6YzdW>MMrUf4p1z(Ej9-_*%omtMUue$GxDZnf z%M@9TX8U0Cu2n44E@4RIH&L?{zf;qZlk3eax@y9rmBrkv4BX4}9b$e%*+{eMnWmtN zD~;WaE#jX7EsiWDl2|1K3QX(l#9O2g$p%FkCR5NT!eOl4q5+d{XH~-{5tvSF5`bNP zcK%PT_#-A?{y4faY^|f|<6-Pgs5`b;#-fb9?D<7ubPZck>O^<=r?ofhM|jd>lK4Uk zd6NdAvgIa89)QKbJ%`8C#}F;Ik4_F!=b*kgOw6x@Z|-6=oUa3&aWGxVoD^Plt?UNG zq9_eFnL%AXh|@x^mE2rMkwXEBT^o~4c*BA9-jc8jugfbjf6{rWt2naOz^}yC=cDTh zJTXwjb<)gT?ba8Nr-@P2-Ei49TXvR(Scs3^JR9}Gld4C1szmQ7+>i8kEMzt3 zINMwLKA(>z1$38K%eLNLDux^wAygB|-=h56e?m-#fqrXO=9bG)r4@i4>rutjJgH2I zG>^4ZNuvn4q=U{i5{wc&%{_M{~tgN>f@s`vADnJ~aI;P$il-POM-upUuWU((;l zFL^?oV%x|xG53TLu5yBQ*lWp_&inyOn*P!7mw>z28++?v$P7&+4_`=jsKlS6#VVh6 z*Yci(Wej12m?OpWBj^5ZK+6}AwUS(a^2i&TayUcKm;T8owJr603TnU1 z%6FcP;=(cxvrtM6>SHZ+EOCMDj$TgRmHGs(G1J6R0_`f|^`)+n4UwQgx~rn=8V5sd z8XvmJ%%m+xkZXHt?W2!RkT5c8)`2f;CWQAS%__5p`1x^{8@MOd2G3@@7;~z8=VRqL z0TLtm{+mgz#i^+9KhUUG{g^n1%%``1{Jj!;&YHPqbRCYI>kjhE=l7n{IsSw&ZlIjy z>6gT4XqHBtye)8A8GzccYpem_+EL#bOFOG{G3nyHI@rS-4E^2m^>gEE+jAU>dd(f` zv~ktqctW|yDqtJP7wR&YZLUrh7|;PU4{r={a+P0lANL?#<6NSUIImR37Rc5PT z1CZrF0FY)7f=>|T#0K=>#SKI|G$`mpo6&a&V!+>tNU3FWmDM+^@JmIsYcqt%+t>=A z`L+H(>adH)mOX)5N!~4i^RKlDu2W64A+35>&t&%QSnLKb8UobPD>zTGh#xaGMe)58f7=E2uKCO{&ceW5$0|=Isod)M!%m)#s?G zr}plYcVPgCc>63IW0K;K#)t~IEX@>o9kgJOsQXaPEIEP1pm|4hngertUE-d4_BTcH z7x!4)wy*l?PZ1m>h)ov_O_gEmT&hvl%{#otFoxeI2@d`v^&5Lo^%L6zuBnV)-oOuo?tg33Lgn2$9OS_0&{4NGOMy5 z+cb)x%F0Gj4UKhDczbSE4f1$EPS}4bHWA%0CFzdA1={JC$dT&O_PSxoL(R;XH-oNk zW~PHbAu8B3$=U=YOmdA7l33yxa{Oy3i>5-VNdFk0N^yNe*4c#I^vB|H$lZuGFNG?p z(2(tWCtKCE8S@T#Vl&jFA7x7Y@L%QvtP80wSUv3Gyd z7Yo0K0;?~E!&xRsp5!WMm}y=&O$eYx%er-^l;~1XV5+_W)hTsz44QgfkN^Su<L{Gw2U__W-_NB z1}ZzcMhmeak36npMJ;6n|clvp|$mmMus_BhjLGKZ?R`3Tcw0 z8u*m#LtKECr?(qED&SZIJvCFUD<8}*cbTG-!(<&<+~^>B1_G)=Om@6`x9j6=7T{;R ze`yCemVUzamb?4zX{W@%s!WaeSBlA7fVnL)9U_1pQ1GRn3cla#V-ItA;fn95j?KxK zjh09!>x-b51xj?|wI|SfNvzE}lKM^5C5E#nw1Qfu6$C3GwLsG)Ki~?r8vIL*EdDd| zc8Q@qz#gi3ql6(YjlFkPqB;*aTp#QB-6@Z1Izc?>?}G#y#+-H1{8Qxr_%&zUQ;H|p z^gRI1LU2W+R5f#m1KleaDCsmtx?Z#{vS2uNle#CTJhl#3)_yL8TU8jgZ5Sm$8SLu5 zaBcd?j4--tepdCB-RfPY|B&xgJla~k6iQ=8^E)twX*R@Ih`V7CmG49dEGe`!zlA!N znV1?&^O|o@sMXbrOIu>Rx2b%k>&pl@!Xd1rumNQ>m9d|xXCQ2LuqH~Zy#!-~J1H<2 zbC&A`g=ASl%;aeXjmc(RoQo3Azw8KsG4*Tv|9K=04wAAF>AsBO9BDNJ^w2vF|`DP{utMV~vhFWodE$Qu&Gv%(!F~R8{Lw zkacOJ@1B#ah`RLoLnU@TV(l4MNec7<{Qokzb-GPC1X%&f=W^bded4ab6f{k_R<9P%Itgq$>BFp37)yFad*Wi7eKZ@&3rI%!gKZ z3cQ!NK};i&IgN zTJ3tyT;yrxbds_FTkpPlP2e_+=e|L>|L$RnZ(5GrA}8OxV1^@|gCxyrZ@guh`lppJ zCg19);$c2UBPTCXWa*JRBu>1Io~>jr}$8pIdU2&XvJOyFD8!M$wuU- zpoWxQ*r?<45HHQJ?sBJnTxN=v9}k^xR%+h(=3aWRb<(Bj$|lRcVod0#@&ua8nn&0Mo)yxdOg(;;#PYVEhHCfrW^!Lf1Ga5;+Q4ghlab zq6yEclogA7tdc6yAmRttHiJ&fE4-4dfOHfdEH+lALH3Rot(3ZBp(N+AhleBE-G35F zw>Q!!1yqHcU_OWg!R&~oxp@1h=yeBf%k@P|!b>g1e8ir|1_Doj)&z-0#bP(pD<>6A zrDhOGUq0v$CWWmmMPe=rOyyZR%x$Y6j^-jTkVAJ9dz55yV}QpURU3?|vZSQzj8SQY z>dOy-aE+(u#R9DI&BZOh!m3UHWym$RhmM6922tLo!-GxHLoTPLB$57xa~r41rtLfE zqihUR;;=LjC>&VNm?nCnl_2S}BdUF1F_H(G&a+&H_tC^pFRRU@K>%8|HaqLVW}|pT z-%RYE*r3_=Ph5O)^$rs$n}Gd^jIveIMp$iUlg>& zg7=pqUasX6f14J|DykYj>1Qq$M*j76fcX5llelx!S*TCT(W#nh1LVGB`_qu=c5u=R zZslW-#`G0c-~uKmkblQHn#s=5`AJ)FmQ%`inH`yAb7eM@fad^N8?XWiaF68~7Rwc4 z#L)DQry&&4{UD(j-3+S#aKtXAhl0X-g7{AGfz?_V?>-^ok@~nh^;0>uaFl~5S0w?J z2hQpkgysX6&fb)+~x>>*2>dFnXPcQZ(p zp%aD(*F%WO{P|3(h!6)9ODFaF+~YjTGjfC-Yjfa-2;P%aD(s}^sBO#(PPZM7cmAx; zTwob-bGF!shP4zR1vV(nlLBuKfZ~ScT#wM)qlzT-c5_Jq zEgY}%P(LZgjCyap&bZ%4XlUr}@c|1@TJny`oJ4CUrT%s);tv{+4=7^!6Bdt z^|WMN&)sLa2nA?9?cI_S+SPy=UwCMsiF&y2eRM2vCF|Clpxvd-JgW z9?ua9!xXOUwrX6`l}~$hL~m5SZWBIjbOghwL;aj*qKL4??U5+P12{?eIohGtW^)j! z=mAM8x&9luIiHQWHh5g3qk zP4i4^DV=@E@N31G)AA=)s(OGF%o-cQlmqbNP?t=>r@=qYMl`e@la{|Ba$J1C+p)DV zCa8epKx)|?qvX1LER*sU4C2hS;t4McEKsi6V_Kg!rZoX=@c9=@dK)8EZ`8#wQ%5A@NGqTP>AnCxC6-pWyYgi4NxkU{9i-BczkP@i&*v+NF zn%s*(6^dnH`CgfJ028o9kTy0HTE6`iWC&6NX3v-dMYM&D*!UjW5&`?rlq zO-D7CTKdK+>YW)$0!p!w%o#S#YeY_mE$W~Be-)??rbM|oon{)cG#k~SzI-T9izn5r z3`T#%C80of_+5eE!VtRTZMz7DnsNviou45RYWC2NtTm50a{vriyO|q4Mgv`&s(|)$o}$m4e-105 zh;J2tJ^Jx-LuGp=q-M@?9#nN zQoup~Dx?lXgV3ZqpC_<=^c%PekuJ2La(N?7ZwuX$@a8wpt|ej(ZqF#h&4OJlB_ieR z5xd}&Y8=V-8v7sjT^J%+;4MI(pxWJCA&QdBv}q^(rP08HtuZo76?+SuU~)Se@qeJ^ zSV3xBJI)`6e#OsIBVz6(72y4kf|xFcDrg=dtUj5@Em95!wN{T{x{2w4VKgF+bR~JS zgC+i%rc?ESwUJf+W(#F?3;Q$MTakWblAGG1$7=D;g1|9@NsWLN!71HB+M$O`IC zyJ(hfQ}CgAR+V2f0CvNu=Jn*5wc-#`mDoq{E%O4*?}CUi>KZRxH|8@o*PZ)3(RfLM zGjS<@p1hHmNY+>R)>aZ;g<+Ln^^?sC{VlPzL?epo7J|eh8c&W#kEcq^Umw5SO6T*( z|4P9E`gGDuOa;SzYrTXh*)S9Do#x%p?Xo+m)K!*^2`zs{)@NKb12!-YBm77zqK%Y| z-i7NH?0?>v!jBUrECtQAn8=oB!6m$Bo=MAq7r#6VvODSS5s(4WZ0t8aX9oyn_6T3V z-_^Lv+yVJ^l4zd1umWA8&L+XF!Si&x<;+fI8hLB31ryPnr}6#e9#|1YFM~btmlvkf3~x&HpP*vES>o?*94z}s%`go zr^XN65-yoh8x4d`wc;OHwgd*5t-E4nE6XbJgRG* zy)%;`&d_z4*>-t+emS7-ery<~IaPl(v`{=7sRt$%q_hJWDQ&7H!LLZ^M5Sci024o= zJ6;??adn~fgHQVG&x^m4OO^{!m4!I%_QAH9{FA)QMopE<2gE7g5i*&_0V>(<1-NLi zWsNvd`CV3C;aodNB(s9GW%jQktwO7$7=9nfN)6ek55<^nbS$|I-RWU9B7D86uyjvp zMjzP$tC$!x3Yei;pv}YYfq=r21z&Lm-?%WMdzO6cL!G;R5U6meM;LRWv%$S~&IR!J!ef8k)-iVohmpw7Pjg7X2O=@CzDULNu8#0A z%Xz~hlB)1RUDf8#D4&&QUzTD$kw^27tQI}q&t81SiAm&eLlT4vY9nwyTcAVLb-!XE z&(M16OR!Gv!1uL`nQ0hepIQ%bX-3R6Kzy;A|1>S^cq4Sr(Mm~(fsskCRPXFTj1!%l zX|%JHwIy{2ZiL}!T#SDTD2KG3-0?kYh&=Aa1A=zS(hR?<%BS~9z1BQpN?5fpK_q=5 z?fO?xAwO~|g7IVAI0KfbW3qCvstdsSTcS-;ClK&%rw1FI>iiytRX$0t|2hbs;Jt?4 zvOU#fH|>zz*4p2mqaRQdtiUAJL~s-g1{UG6eW-#>Po}enOt*8%!|Cp^=>*rPd&}8F z1G+`pj3!1n?h| zbz7oaJd!jSUshmcmJv%jY1H`ctP5H&GRt_}*z=tyD})kNX}ViXGBPr0TFY}MUeFgK zy~CSp1b05CnoTe%o+?e7>h}QuKLEfSz|8KU-ELlSp?urq-S_+dZu$9Oc42Y6l6I!j z{C*}xe>!n}<7&+ks*QVvyNBNC0CnM~FIvP*zr^>1_Ct4DOdPyt$IVE~I8|Ny&NST@ ziJ1VSC(qo4SDp#4Ej@@<&y`2>x*noBP2FKDj*^p~ULC+`bJe^9d{{V_D`00v48tOI zbyZZVgFqowLl0(Ii%XR_IAn|VFD?Oc##9Q*uaS2wB7S(6k7SLedr#hjDEi-?IZ4Qi z}d-9pC5;2w?^{@dX{6J(Ei?8Z{#@d-!K9{4;Ns)s&;;XEz z=rKS->{szb+gX(UL(wxWM+(Rn2s3Uie9e(OFLSbfocBM%@v@$poBOF!Ivmtn(S~#Y zJRg%X@s*uqN{2aOC+&Sy=wnPK4W92dV4I}c8Uqm&=IWb=9K&Cw3D7L1QbO5KU1Vl%LD1{=Yg5wM< zKz4C7Espv1#gJxyMYz=>w%!Uip*%<61uApUN4GqL8ku*gyU1Q1P$fO$DhD4c+_|MW zyoBe1VysiGd{ZVqL!AJ1T%!6URq7Ben> z!fj;{c4i?@h}^S;vjoiHjrtx+2HWC!dMjD#4MdUB%6`mg?W?fOIV0Hktw81ANxLJ4 zM2Qs?Qw}KA#VB3f2iLthe@x3?<7ClAOXtpPg|t-tDot}(P+LZk=R2#Di>HfpKt@G8 z<;c@&o!ICaMh!jPW!!t#7CI1JaU8u^v^gl4a7WmdaOG~9o5@-TQ`M+B1vklSrw~@V z4(H#JSyg6;!B|`>(L-oPd+Gm!L;Kav1*@lVlOR+sZFh!RFd2~4`XT0-GD6)y)3@sb z`wEQpKqn?_zLdnM7`qcU$))N*;zziMr*gvn9k88Nl~En24^A|GDc3RoStxP_kbi98 zB;+|Eo6J@E)|d>nl{4_En`ebWru!Cr5(NanK5BG&1qU?>sI~pR@`SH#cE%-N8BJ@- zv6eZPBllGad)oC0al%D;v=%Rbib`iV9>3pfglNw_9S210u)sNI4AD-6%jlxH1-%LB z%)2=C&;-#|5q6@khuw16_BJR?p*84NNo z&vHnHvN_ee&Q@%(Q$wjNNS1&*3Ncq)hv24OIL?Bw{N3-wTjhTXH_@?}#Gl!&tKrxm zMNtY;V5{P2J{db!x;3hyLCMQYzHE3->12S_-#I(HZ~A>XQKpR}qLWt%f;;dnVvF;E zWzEEf$jNfZ=0pYN?Yy^R_p1*=jCE$pR(5MfST8HT^-{LB91a2@zoslrB zXxQLIMwhUgv{ z^LkQ-{+j6;Q7sR`BR3ckxyrqVb>3#u@9-W3^Xo;H8Hvgp^f-A{aw%Ozl#Vm9%L2}c}TaRZ( z{tx;4@qLxn@~l5SZ|r#@cAs`K*#uk$(E#Q=OYFM@)ksYRg4L{@ptEvwR!e+@h)!UQrmE|epjsk=7)5$}@F|MAcv*q_pn=0^1npO3b_L}?3)S~49?B;x^I2-@png0S zbDJRQ&$pXgF2^b)QH>dC4m2hhW5`T7R1CteM8A(0`)DH2mFE0N3M^>7y*z^wtm48Q z#70h3k6hFe_52P@>jCM?pHA#ytU>|Y1;5-s zf1E71g6_Vn3dqkgm=xN%frIBzWMHq7ov84ZlR5>j_%m+?gZer}zrXf)_1?q&COLf~ z9Ua{=tTyMgg}ks%smFG-y_ja&jNyf#RBefBxf)0qPaXQr1f28#yAz+DjM{Zo{dZhU zN~PuiTdy05nVj)hqTawwMe06Ek~w~{S^iOlYPoxZ@UOoHzynG#PVo^p7KnFHoBdA&%j>v(hF{$}}&1c&nx7wVdILUR3<2dZzxP z!7EPMHXJR&MsL(>lwP}OGsywLZQCTP|a)|Z>+UePxpOzVF{e`O#+r&i7GLw!NA@`MV+lZvIL`N#fyBb>DSbm z5_E1CG4uQYzT;>NY&G8MQ$x$6duWB#MMwIlb5^&a1Ln*x@qLoRH5{xka3jNwGDtxl-2|5^F7VQ-qW2F8aE5SRW>4y6+f8{1^>EErNc%0k4G4$m+EWyrlv-^4t+p zcw8M%GH97?SE+H9pi0?#wFal8jc%2@S z;pFKwpQ(`j(e}D^)^KyRlqpgNn5Q8{a%*UD5ZHn;5&h`qkE?9Y%MSG!)p-V29@!%^ zzz$8pJTo@Z*>W@{4h!YU`O{`qXy4@Y&6`V)@~M21@q-gx#+7Qq(RmC}bkkG@N)Y)4 zH#q_r*3U@Tvczb{dmoSKCE17;a*_sE;C+87CZmv!oaG&}JOrPn*h{l-g zr1_yDceYLZ3F1o>FL#=k6EUIMgK`OEN2U$~bMC_k=w5OfXSp)fJ1+#=n44V~^bb3| zT!Opvgm`EMT7vIK{`BJKm~b)($8oG`vbr>GJt zx7FVF#Fchz({1cdEc)fvQ}im`q6mqQ$98G~PC1IWsX!lJ!>q=a_{al0l@QmnHDIEp zsr)ef)~Krp^_pa|B>Vl(PYmleLEF>Ar$Rc6_A(uITlPanX=8#D=c#3v}z5{I(^ z*5Lq<7ek_q`}}VA{prM!qm+yznGGhKKNg~MVAG5AqtGPKiST1MLxiKTCE^c7`sSeR zmPR<14StvP$fWPS;;-!t_{(Kb^53=La5dMso~|@GpQ;_Tq>=&??r^K?Pwmbi=c3D15em%{{obOCJ1RQzXt~dRP!^$ zw6*q}9ACeQrOl@-9!1IsO$ZM{{0RE7w4RQd@vT8*oW-1P8~f*MdZqlE7+9U8%ViEq zs0c<*Smk@GWzOdetUchxFfZm8zKRX6^H^MWdPwEfX+ZAd%*{&)uJ{%*n<(tLYxM2Z%tZ?UX8#EHOgx-yD#)h^8Oym?g0!l)(VhJ&>@K zWko}>CNA6ZW&C^O40WZa4|{(Td`c9Xm{3Bj1lJ{C{kz28fEtSeo--jri&;8TB z)M_Hh+hDzJKX|7%SzHoWWUyy7#YYZtJ-d7Zc0q0eKEd4GQ6~TVnbyu*DvE~k7**5T zUoV~N!+kjq;?;5)jHAn@v28ZBEl^G<1!$a<4)E}f9yZ++`yNzIN(GbW<(u;-ix3=w zR{y&1%MADaQ8OQT$|^E!@kP1MRfuM!R0c|$-`Y!C@3W$A$ZXn6i}F5C^hibbkJAH> zk@opOx)GrIW)8SWktjt#y?J6(=b_1=#e17?&ag7_eL(At;4RVNnRkUAhN7stdx@Kx zu5jaT*wL9GCU^E9_4CbIw;J!$y9>;je7u6K{k zoSHF%pTVZ|TS*l&N`%sFZG?xtptt7QP~{(zR3cgzbaiyAZ#VA~%Bo84Vocd%lhppO z)T;$~+*&+rv6q=IB(eTU%li@^Mpx?;Qozk(d5B*I3tYwqo@isRPb3dp0U@g=oMqMe z@rv-yAU#nRZeGfHRf55RK1&qIr7U4=>uHXR%_Ih7 zSF;^#)jAAI!Gu$KJy_*^Bppe<>F*noL%gnswQ3>iM>6g;-XcT37w714(mwCyM&Zyv z1^HE9x@2JP$hF`)n!gKy$>t@Yy5bdAmRc_Z-{JT-w}j@^zH5uCtEEGw=?5= z0`&NFJ_I3;ypG|bzkH2?l91gl#Hp(hJT|$?J)ujThv!kY{#EV;B#cGMyAGz~&3 zAzl+kylO4%)3y$#6B={+0pnSKCp7s7U~E$P8aWh5=CVKTB>h^H?G}ydZDD$Xk?Y{X zGitXrDfO67{25YUu%pI!B)C4McUDfSHHBkyq@m&V;|Kv%Kd^hB7%v}HH;vLVz_=!k zIcuU6Z#KQp>tn=)hcP$WnO0&rANu4j=;KlqKCn?`0E-H)*Xcz0)X$VhmiVoHQ~P#w}aU10xO@x%UM(iC+ryYaD}HJ63@H|Zy8DA-q9#zJcq%xHeH zfQd0H2v9r9KWXYmZ|YaG_fEV$qK?e9$=OY+o#7uuCns4y{10c>)Wp!Il&ZnGs+r;})U>VYgBY5g zkEDR16v8TlP6d6VfX8X0nuV)v3?}DhS{ZI~xj}Yh4Eun;=CC8iLD4KUlBVbKhgI}$ zo{IMgZySkP1!4mC({i>*Se->LD%GEOLm2d{Akzg8&6d@YX_>6WcAlWVDZXIyGxv}C zuXJ7tvFn2&?7o|WbeTH+>5g#|P5;8qDI6K(?u+X{*tb#IY=-<)NH)_6lHRqDPF@WB zpfOlb*9&7m>8Ei_8IC%&VSq0yLa{w&Mr4Y#-5@AGSv#6(0it*P$6lUU+`|l3_&ch&lo~(m` ztt-QbpzQbgN+o9HmFBesAY~&pc-?o}ja{u&2BXolW-Rs3T@*#&gI&fKf91sc#&njO zc9f~-Vj(V9v??v9gA}(pmDw(4S98j4hLHv&SH$bCf ziJ}?mh-&p}Gor9#F@8m58l31YzTuxQlErNxa3KW#f;iJ=NPNQ{(u)a&`-t$ajNU&A zM#GBg)_*RX>uBw$MGdD*zF6O1cOpa{l!1RhhuSeW&|>GAM$DB5pR(4Rx(4+(MH*dT zeS4_v6?`H}ZU`{uqaGb3zt`T*4h;gR+_R>1E+@a>!I(Gw>P4&4Le7dg2%@v3nc3Vq)z|f|07Lt)N)BiuJA$2K*0lu^FQW zWoEdMD4ZrJ+^#ks#QV4hD@B2dbJptgUZDv@*Gjiot5l_)b84}==ZaP&X}QJ?i?wCZ?XwQv{E0ZU%mZ)bSul7UC04+=52Zm{Tf~O zn*kx4UAK_~@@UmhNRRa>>)Vs8t`&YtoEnzi5K2tUy0QUG*1uxG5mVCiGvzlrwg8XXF&HOWql2i zvw#D4(wfGta9$ji7;=!XB3VY_zpn0)TN)%?4+MVuOz}NfcULA;@on*+uxi@e6`z=> zAv=@O>R$Xo-^VwiQWhwzYRg54VCJ*NQO>K-lxP*MC zdTj-pDql~RenALdD1ngrs6OY#XDWx^?hxxHF~~e1bk*c2pfvOk&m)tH&YpxxLRaXk zR>V2V51;-kJnc6=@dnB&`?;Or{k?(3qiJP6Nt6W@9bq0DAk$?&qKV9d2f$^m}6ZKH`!n4zGC7q{^4OK^*>K zitPTed4$5qAO?b6zl7mBX0cS1r@X8a&VG&d%pNHHej1;)Wl#9s(fQ{0v8|tF{xUzb zTNJ??cQ`U@FpDB;X%4?>S^6%o3dxfSSsi_*WkX0xo~zio*Ce4BCi)1F>VkeEqOg_MJ7sRzqxoV|0Df`BkFp=V@S+HD&6`t9GIaeJRw|#SB~Qd(&9_HHMU^ z{7r2g>49o7S4ctz*=VPHWPze{95+Pv8{aMs_b3Yg+3?Qf)WSxoGS&v!B9 zGqunvs(YIR53^g+XKCTA{VK*qk^BqM;Hp48LwA7WTj{clYN$w!n|Gdu1Q22+#1VVz z)m2P#5cQq-mDnAZO?aq~s=69z=*>2gX70lhUa{UO*?0dFjB=2y@U>OK5H#zo&F7To z`$v#-uZ}nzVSLV@iXdmln@Tc(%WPCxtGVC8{AW@e(cRZJawgU>oyw1G^oNC~AWe<5 z9bYlY=CI9(jve4>WBfR-sbBM3DYQbLSY*lcw(^yRuo&NLpG2!)rNa z)I`IlYn)b*q12!;&}09&f%zN$7Wt!l5)^EM12TdLjjy?^LG8j*!oWU9XokzfBQ}?Y7-R znkBj=M{#*WfAr^*4?dVQ^2a$FA7ATKgp*ngiwe(Gy1x00b=d`Oq9Q9ctZ?FeDCLJj zDaCQx`@G-Wqd^snGqwK6Ks0G{O83*|Xsi_>K3<`2?JOlS^ui?S*gEvhL3%qEi8>OT zzlqs*S*vSD@SL*qGyAW(^=c2X+ta*|x~p6L_`$hrf=Q|Jyhj)ztjG+OG9H^U9NJ?t zt1H90>)dAhWq&vf;sS`((N`8?{R4Phb~Zf+_*+$C`-Uiub;FmiIu zTZ-jtTbe}cy#ma#Wf<%dGxH(&K{bE*L1w&Z=Y|w$`*OdNrb{B{XU5k@d!NK#f9Ji zJ~o?w`c^N~@fe18*>qW|X(#jr$L8%X`oDml~!*i_GW_R5=KT#$*aZomX1Th}wV@jS(+#;-WeirZN? zMm|ch&wZ+*N|5yk%Fczm|gAR>gfkvS}6kas-Fzsgy)5-hn;K$KW zsfp;c=UlRmNzV-`BDVH0FOb`Sl#S61z#35kcE_=Mkg#Q|7Cz$;?>B;`gQdz}sp(oW zz(Q*|*?DVYf8^G(=wFN)m2E4FD-J}U2rnDO$kv7s48xKKWIrx@f=#DEA&Lc7 z9OJC^e03z5nf$^~d&}fQztBe^tebJgg(5Nnvt&7TnL|h3h8ged(Q*sDy7~7lT+q>* zN`Gl)xG*2Cs7BSh3t{}8&ec9~d%{xxLk!GQP%PDps^Jy=Zk01b0gUA_0Gy9Rz?9w* zMG}0D4*~T*kIfS2f~2pUtZ!aBk1;eWYhvb%C-bD?-xOuk4x3OaNXy z?rDp_v6L8qo^pJ{f&~6R)tCC z)F_=ROFLUQZ~q~zF)0-T`W}u=c4{mgDosmV0>R=RU}Lfd5sTB{%ElLjMkc2%dqvLz zY%p06mjyNuXp-~mbi7jPo7y`K1#l44eOPBL7auTN(ItlEyK&VfgqN!#Y`&5FbL<#` z|4l58u+E>>_a-A;iuj`%qeAI5z?F}lVaA4b!oS{u4oLQ7QheUY??9wXlM9Ou0Tfi< zqOoBChvAq4lX3tw*qxL0-=+n!KoYrmf02)}fdad@gEU%(5#z&yZtTMqol{W!1Q$_= z3^WOdKWsE?p!W8t6(_W26+RrU8MPNbJSKfV}Az=R9rKNE#Jb%AB!kY)#ECSYkI3I4HjkapL zD@|;#t!T!&u3f!k3$K5 z*xwvdV^qE;wJZMs`o>ZFm_j2$Grf;k7z%FCJrwnqcK9h$hDxc-v4tdpvcxe3sMISp zNzx?Y7J?7&8|^r}_v%0!`|L7U?@$*JSpzBvT%6eFPa&oY0J@_dJ2U3{G0LFJ#h=1hi z`jKw_o@TT@=mX1F0%%mwWYt4{t=Q&6lfbpV=BUI1lYix@lMg*Wa6{{P^{;2QD0+2H zn2KYoDD)370v(PPDWu7N==0~3bG5U|`xugH<{AHv5SWzC5!F`#^+`V}(uL;dUH zifR4>RtE0|)n{FK0}n(#1^Y8Eha*nLVv8Q>Q=4{r2wICKi_iF5X?p!sj1-sx)gV(G zZ%0v3PI45ArdLg(kqoMrwzACWp=Ir_yMp$aU>@wIJVPEr;?&uRJbd#;rM#Twbj$WD zMW=FP7ePWv>6EC00jB6$1<}?;kCNL08IM50UBRotn!K}!8q|R=>#m0c{6_Lq7!TTE~vKmn7vbP z2ws>_%Y9;zGJL!iLB=UzPfLr-IL`e}ovyMIe8DX76|XV110cdEGsSi8=WHI;R@`#F z5V@b~#kIOC>X6~!(euLu5Ccd^dN&H8e&!`Eo7wC0txO~Rsr3PK!*K3>CUrx@V%m-d zzxFMtUckIS%J$T&RR94^|!o98z ziq4({ajQpx>MYwy{ozi;8>BZWN2QWnhLQ$wp?7H zmc`b*lq%ycg0wx~CAp7)AYa4JrN9XO)KD=G z8#*`0hw}1NZ+7xc5?kk#6RcJahts^0|AHwyQqfis$J{V#f?tLZFX9zYOtGNXQ-#)_ zPX^mA3J8kv^1#9zgYF3A9u90BKIlRQm(cEE0*{?al+NDn5Pmtiloa@aD0Zl~*jg)^ zCBro&*ot5YIf3*ibu@Vzv=Ai$yGUu>`HogiNv8*fvEVnYRXC~4kThrAqw@Q-4#GUh z%F;o=(XW4N!p1=iF%>m}O;t9)VV<0dipAoB5L!=$eVZN#oLeYc zDdXZNMU)7q;*_gCnrNi&f$ePM_S_t^j#qbP`hX66tqg%`)5WeTPLQIV^~r}LBYk64 zCq}cdi&FsC6BR^ro09rvbPIe^Q^x7Mj?$x($C98!^Qqw{-yiepYr>Tgf0!n%8vt~u z&)J#*rBQ2P{K8uAnKbm`bHmw>5hmr0=|sH-8@RQ>8(_`P>*kw$-6{MB{Cqz!$9hUs zHCD}lcy5LX?h^>n39gNi<>S#>M~c{#2*0vHX04tw9E@233gcUpN$Ou7gc7D}`4b=m z%_7jN(jzeUeHn5Pnk7bXLDVV>3&}Hkkk>yYzK9d2O)0!`|~8B?tz`AN~#=11wuHU$_v z;hS2Nlui0^EmJRY9$ty(GU5_u1B5I1%euK=TJ&>#`qJgxRYEGupe1=U{w$mjXTB1Ms1cbaPOl~IAv1azQLe$O<@ zQ-GMltWE>C?jXhdN#JX!7HxTFQLi#(EQcGc#bW zdVwZt@wcOwy?Uj!wd)cCR6E)c_B0A-;M2DwFo-joNJ0@uN&~UJ)M3?45-iS=i|Ce|(1&}tzBE_7owlXV>d!-HeVn(k(5NfBM6=G0|T$v+>W z8m$0UoKn`jwzj4)7q_(|6*mK(C}QR9RFm3Y8NeXwLAOr7V>JkV{x~sP>T}}`p^5B0 zvDLjOooz326f=A0OR+*FFIb+-{zt+!C7j`{l;ON7MfVil1ClWioBhPbNiI@_J0rml~Y28d0f#T3ZW%fXonC7*2{holcm zaQIaGeu6s+w&lH1_rnVh!;*ks30eL0qdZ%@uVDvvKLR^C`8KBs;^3P4 zT7X*!gEi0z0Y0k=ag$DBNwul2S{Spa;81;J+ih5pe9s#e_}jLST{H zff$8I1qi+Vx0c|KFZeQ|JHdUUW1&Bd>L^}>tRDZ$m+Jm*r;wZ=G_IB%)m)L0UitdL z9Ik>HHk|s`kbIizbQL@iUH&CtySc@~R(;BOhTTNv_T;Z-&Jt1=C^JjtgRRMPF{Zc| zjmcabXr@;7fNmaEte8`c&ipbrAA+4}^D?L*(icp6Q-I(M(!7Tkvm*&SVDcSoRxN{! zk6dBpmc7)TUq$H^NxWTMj+-ET=P987=pGlGY95{h{vD7!gP`lT5T(q7<6>#Rrw6bx z7--kW0*3L>vc%7aGKny!E(|~8y9lyLG0?3RP0>ZfAU}I0q{g|l`}O2t8jNKT_{n&D1rv4R6I8%F>l^iF0+|P_(QDyvdL!mP;!GwHkRLYMNg2& zYBOBI41S4SNVVujvf-jUNdW+RF9kOzLVSzZa@1k)G+O`a0kd*9xl;V0=?BCr06sQc zZ`Gzhb+nCh0d0K0F{5ak>IoR|m5g^QbU5thW^@l)k$W?}&p7&T*cXgb{4L&ad=gH^ z!#t+mEEG^_vyKE7$~O(tp!T5FAUVHiA5Q2BaL6W4Tas|WPHs)0>-h^q*C#!lU!n#R zIM^U@K|}bm4qzH|E z%61S$rg`2402EE1)cwxr4zx9Q2fsCI;{_N?$V9V#QP#gU#>zA}&vV_&%YP0o3vvdiy@h5q zdsw+es^^VHK3284UB%34P?^w(^NIq#V_`l z6HY5+ZdtdHSZP%}*C`DG^a~1(Kl;|_uJmDh95!d8-WICldn<@<{z=qitIMCJ0_a|i zbkqpfr`&N@z5y45JRc(lKjtEJW`(}qv6=0bqn)O1*dg<_k*ajmgJG%cVy&M+Z~+gA zzd(A%LpzJDdPFPvXCbNG)dvb>moLE#k1S{w(jX_AbQ&;F>HScJkRqu5j@^+h>S{QS z&!*5DXF$yvL}4cL5wd$5W;5mRt>Io?f~7MdL*#=E(QrA%icpK(0C%c)H9~HhFa~Wq^yF;xN^$h^;qrOj|dQULMaT7DWglt zl{BPW%wz6Kt`XO z6cvj}`Cw2N(}&%W0{nHf6t*Q&E^g z1b_h`spJK~SfAN4kp9lzS`>SJ#u}_994IOc-_HLCEYI@mq)6%Dy&-nK%VCbl7M%TO zPNw^q3QYX8_3SEkaz9>k^H@Z?@f8J*xFB;Z!aoAeqhbPD-7(^2$cP1og?AqgBm7S0 zd9E6BLq;y2e>`J?jLF#;V;FoxQIoL z63k4u+&e+UgZOU47(Ef@Q9#Uly8y(aveOiACLI{SG5;OF{4eA4k&Ddr1tC885hOkU z1e=;gwJoTTX#UlmYJ|9T5JKJ^4i)pkQ!h&%d8tGiT}j%D@n`IG`q~c_%p(j^Di!u> zGg^N%px*MW=(;qcxfe0ueOv)YcE=IT#AsS!2b$n}HbDT6r<4w&svxV^kscrRh$q{?w(ZkvggY#T@;$O{5vzaV6?Dh=gQhpc2{o}#@^p`(CcYR3R2TrKn4{LaO@9F^%oR3V`@tF+Qc|aS1rh8 z!jp-*QVNgFH$!p3Lh4u`Qd<}+1T6#^l9SU+pm=R!LN+_3|x;^StuaDX=1#=Yy&Hgt2XkAa${r89mi5-$t?c2wp=M?@F6&`&je zZ=)jzrcwPWRHC+R^D57sfFayR@ll0Zf*wd;X!tK4%e|D4@8S0Uk&(NpiR5^miN*e# zA}GVeD~Q^77q0Ld(E`OH7~E|pMT#dP2Oj%@E(|LJ7J|L2DNx)|CpLuBPIm_tvhNM3 zkgcqmVq-RX4tI=|gk%w5r4+z-FM;&-a~LKF8ncbYYv zi0wx+J`B}1@bn-pVv33(F|B7nW+c7{CTCb)pkI$U-B^h2PjzUJIJ|kG6=J}bO1hM! z6IDoE_N@iyS#G!<9?D1T#^!2I-n_Tj5^ssV?7;|M<%` z`%=r4Z_R|Xo>lYIhg5Au4d z>PQ?^`t2K@$@a>bI5C+q35H8=Xn}a*cq$$+6~iJEgl&j$R%};j=kj+faLPl^1DU>0 zMU9@i5s1Qg{ljW^anuefGA%w)*qw>fu#yPJ<+svm1!)-YSE@&{PeR!5LYwcG^RDhH zv*PAX{ME41M=_)wzo$1pU_t?Y3KyZTg?Ok@2L=vieYS-E$RfP3;&`s-NOd10v=!BN zA+t%54NlhrG;7L;urmJz$MKEy(oKwkVBf_X^*q5*C1<+Z+hEAQosE9>2ZUr;i7J#v z<#Z6L+QR(_?143@2Fk@k3DYoK6~zt-fS-IUXW6%>y3=IDrL(fIs}!dp6*9NrfS(m3 z+3VIS_nTrX$@{3T(gGi}%N4Gypu-E5XLkL+10ewFZ#hlp#l+JtPi`oRs-iPqZKD%I@dVC=Yx?Qa?W)MH z{+dX1+y@NW^;xdL2#nCcdD$>!1Z<~ap{jHtmU zsQgvwEwfHxh3sPk*i^{9 zhT7D`ep%6z73B$Ma~Bk+j2GRW0mbBd$1GPg_94Vp*Bzbp#i^I9CK0XB(L;aWQ=$=i zaa*6aJHCIe&pd3T^4cq~>^LDUF>pX_iBJ3BgH4RZhE4YuWlFmqDP$l1GOODFrA4wr zrXdqesum}JakG1|@;)VZnq<7HkFD>nT5!qX#6khWd_uw_g5NlZyP4xQ){9&?=ph=i zQI4XP&~oL7{R>xsHz}#N&MJ%C)7pZ<;zg=IlO5%tyuR~=;|Na%xX}(so~|mQ0mQOy zs_NvDbh<}4*XTULb3O(IqqHXE10ckXQ>qO~JL{WJ0Gn+&bc+c^@|OHTUV9%>TIefs z_4O4$3%vgAzvr~8J%Z;U*9-i|1$H+;U>37fu}_s_D(Vd#AE?1BE>5DAzBjqw3#Jmk zVBp|$1btVq=8XLJI;=fu?V~hTaNYHS{U4 zvF-hCz2bF=p?(VPl=5WSOFw1#|EX;}*D)}7Wk+sZ?9eP5gr2FOomxd`H--{4dpDFW z=cj(vyrOwT(86zLXd3Y&Lo0UjUU)X8X1m?%8$nG{Yy;itPg|wd1PmKH%1M-h1^zHa zd_M;(JSEJoX;w7Gk%pPdJM%6T_6@e=1;tw@%ej+XCU9pKcoR%#+}hBcqGG0>fR@=q zlg+!Wv}hqYH>@!)5`JECYsF{>&eG`Y+x3`@3nSyR3L=x_bd{DEhY`M@*XkS@*l|ND z7PE=>r_nh$V9+@P2V6-RCiYmN18yJ<5N4<7L;C*uLoGx6Cx9G#j+#ZKt(XVHCIs`V zprygw40%&yim<-CpW|wI!;w}W4({)AL2L*WgywSK2<`RYGRiO+j6@g^b$(VlUPho1^@Mub?qxCg5irTQF_^-t zOK)#*G9{hFS9t)Up;!ze?viCIYi4ias}Y40AU<7%^=+m)w0nbDk5B-JDpf^D2D>zM z3vIU^=!sGSVUEl8A)9t{van!Qc5%NGYf8_mPoW~k5b@h%AM@m*qzcReu8j{Ck;C%g z<5OI|^Nb32HAHWPJsZZf&y&LtG`bHjj>W9t+M9|bYTm`d-ugY{X6(Q}YO?z})0`0s zh+3w7s3+v+5yTmau9zl;{M5^nm8rYk*b;t3*NlVfBb~adK>IDaxb@muWg227L zpSjWxNxi!jGxTE$WcFD$PLl8MWG8I0+{hFV;qQ9)xP*cMEa6$BJ9llEj+Y4ScFwb~_ z?Z&rEVMCLdqHSc_=}_Yjjhdgc;FPPR#mg9Of}#$~&Cg0Cso^VfJg73adopE>TM(JC z03$hDPMMui;yXS6NJD^8|D&sQJa|vc3Fp2`c87n|*(rtxWq(j~1#ml@g^?VO4jsSQ z^^+f(%_M89S7fsczN}7oy~l0($pxzIsQ6LwO}iAJy+&=Ibo=CMk|?bzlm;mys>0f(m7jlgq?zU&)l&55lT@!A+SBl_nA zjCCw$B6eVM@ONtJ!I}Djp~*w!1V?Q?-N68$dO< ziwPvk1Xf^1hs+)Ev82GVNvwK5SEUi;`sMNrgRb^ctdw&)ZC&M5E*HC5>Kv#u8%9S^ z9Z&(k?vw?*`rcK}jXy~mWz!=C@Z?H-Xu5ED3Z02;J_TAz1k8PZ90035DJ)7KJ5#{k zuQv;S*}DNPlO5TkkLIogq@xjKmWwGT(=w`zA34`8!qI1A7Cgsn>Yn^Cb9YKPXAu1P zZKatrVvtGGgotVKqT_jJ-API#n@1VK zNa2Wf&%sBVpP7`35adj@UqEDf)83tL5#vywgGP<;wL>LqL;@d&0XSn&bhdIhh)^B0 zj1v+uup={j?EF~Vy#BWxAPLZG_=a6!WH-%2Em6@ zo({i8X|f{D!HMB0rhN6Wwk-7ZWE_*}NV;u+pq~8HrWv3vZ-%;jD+uUF`~_r7Y3Zwm zOhZA0wo=fWWCQH`=CC%Vcqp8*iQYcJ&y)i?r5Z0TC}VnJ(5ji2AY?vK`3`F~W4~Ah=g;FJwXA1lS8vMRvK> zY5KULTm^P9e&Ns=jHm|=545GmgT&W=L*JKUyY=5IP>|Q|!udpWI!WBNR6y%04oNw> zpYJDXf^vAjk7O8q*+A&>Z$z#+goA6gb;V0|X;ZfC%+g=Uk{Tm&rSq@Yw6>7JjhD^nw2;kuc18F&ik0^)~V{g)|Xpd_as+-X|U5B zAF(842K1LF=0n8obr!Im7kNu=QXHn-f8Tw^F_&o<%&0JGZn~^qyrQ*3f6S9are!kk z1f_#dBOoF0u}!XgL948~c79XeNoi&o2}tIrW|WE(GZ<96d#4);qU>zneUhE(i6jYL zTbb@e_e1FmaCqlCtug`pl%_^ZaJFKMhI5l^^EqEYX|T9Ie@Z*Vr?&qLlIt-*s#d0& z1>{x=>HTn_W52m>COGbbP|e;Y^)X5l_bpZ~2+IgE846{Gou)k2$n3hT$(%*#9brFQ zdRQ}YeBYbekp}@l56wjr^MTBtIVd`X*ev&=hr#0=kTnR3N^EYv*o%nc;p5#z_je}g z3*jUI(Q>SO1%JJafx z7LHX4WA*N@0{i_rIr^y;$#OG@NRZ^0#NIVyB$BQ0T20Tm*$Ps=$f{rCw=itp-`T1`k^P zLt?s}deyf%#TN3dg%0h#TlQyc56EM%S9Cp^CVQ~zIJz1)k2V!+#@#dd7|r{Fo@T%ogVJk` zLw|egJu^G@hT`9nmmC{`5fP(7g&GFA!A)q35jZ*~5bmmW5E#GE5w_?|-9b?nQ*XUdZ2EzJWmG3w^9&@oWZ_73Tv|`~WW<%MO*IIDeYs-Xr)I9tf6DK;_J9a3ON(46A zn^RDfGD(SA`zcxtu&0@H?N<51IQn7r z7Ej_qETMuIVO(@Kf6t}+@%DBMN-L{%`f(zVRUU)KPNnGJbm(XygKNVB1MB;5=?)^mkW;B!ua~^j~-vHPqfHAE!q+R{_8qp}> z(><3ig*h$-J`wx>rG{7jaJwH42oaMbb0=y&?8xV9>Cy+y0KVm_6c3LjY zc(nr^4ThcfiT$vKfAtH>-$dB;giewQAQ6lsSI7g~SL<4;=9#x?JW;!UIw#7q$=L%QM zv0n7w@Ytz85ue^4+M8+xYktF>ejNStN`&kq$8dize1rVu$57?L$~Y{lZ_V7-&r07` zkxyyT%F%lBn^vm3* zuE=J49rUU(eyej(Ozu@hsSC3i`%BG7=yt;^Mdtt9d97aWhdXys@us=RTZ z_u?}A1Q6XBsc%<&P3`p{slVTRBb%;ylw{=LEcai;cg2JtJ{US*i^~qx19ZfURh)x@ou9 zFkSrHoB6B#IbS91!vzatY+^!zxA`iy5hN%u^tl;YCy$MJ1lw9C2_X`gFA|QTnjv81 za6h~9z9w`p7QU+x`}+dZg!x8gl??r?9n_eU9|sb{+55 z0WLt`_)&ikwj3J<$9gbw(8U%Q)1?<;5WHd#y4gZ+lk^$XQzWNV$BBZN;drIoN_4B8 z1-Bz9FnzycJ}xUSyT=+cWk}iUYOshmhJzIVc529#$7I8qVVu;S z$f9Nsc)mQ+@fP!q9mX(G>3Ti}tkG^@i$b3-wjxXJyUjo4f)$T9`!P1jwzWcdjr{$qi1rY}ONWueVYfa6*yZ;XMj4G9EIvy>J^FDg_ zi+x!1Fs^b>2xw|`0m3T~+ahP_HAuIo3g_KFW+SS!W%PVx`fkDe?Z48ccQCs4O_=K= z@{*T6kB`X^*ilv$b;l^MxrMrLKsCXdOrD9`x%%7YMd~)p&=|*Ba{s!1$XzS!@aUbC zHjlNtIUK{X{}FF@Kp$e02-s+FOYf2|(#y&91}*)sX$llF$k|I}LVF(`?Z>s(lR(r} zIm+Jl#W+mVD{g};<>!O<(cRTzaaK>9b~DV_30GTtHlqi}3iFg=%u!O6b)NZ`Xfd}T zI+;|4$zP9SZRg$}pqMRTR&R|?K(tW<(%-eMu9kO134d0? zIXSVL6I0Q~n}M%LpRjHWV-jtM*ko*eY^@e?k-N?nSft8LP!@-8(Zc}3CWfYQ2CH`X zq&LQC?Hjb2UoKL)nCpXcadnskbS1B_mddbcE>NbB+PHp55lxBFC{r;CxcL~dnj)bu zaD5AP0mdPED={ma+QyFji!QFUy4+14=1r@7aJ^jv<<m`>Pk)8csltNF!K%rQkUhbkoTh?#cfB61KDt$%vGlt z-DH-pvv23}a`pF8o%F5GlG<4NdKSG4 zrd++I{2|HDY&y*NK3F!wukXQ$p>ShTh&^8F{L;4H4EL+#_4kp&GUp9JsmYLi?4ps( z+78LQs1Z~KKE<(Qx_FWCNJT4DRPRzZqOUo1VwjGVC(o#3ZGB!DeY?U69C5cu)qDz9 z6HE7;@4>^Sahi*LGzlm60xkhPaL-@a)Ayrawn0y7~W7Z@3~sMIj0QfO2NGkB#4VUgBi(sv9+ z&;r5kfMl5_N-cp#zfCf~*N8%@9+xbnox3e-pNGWx@++|PRs0bOLZ6G|^pD#!;+;^= zC^V|iVJwuf3M5!5zVSSVht&Sg)wO;jTnO)65W+T}U|%@4UAAHDMjzIx8OJrTR@n07 z5aUd?<#N&Ts(>8I`$wTJ_1l)l70B;74XhgYa;;Z5VHWrWI;nnDz;@z8t*D(AIVryc z;0eund$E3~^QLC9ZcugX1n%t-J?!R(m5VtJIv2nq?F#O@i{$JvwKH^b~@&KzX3Q%vKccou)HeIWq1I5~Tp@QerLdG!1 z~?eBeWD?gH%xQC&39|IUqsHpl&*Nz>0vRo>~kH zJ+WRI5R&L`2(wo~FjIzAL3nM#ps|*fEgo1184_C$z z5;3W`#*3NckxX>^W#A(d2RF)>uX5}#=|<5`Xhy*GK5n3UI`JGsipf2UegDa}hkZ6V1{*C1@}bTt7Mu=F=*Ux}l}Y&G?o*KhYI}|7R09>vy&mo-T?^ zYBJS*gC2Btd+=Il2xl~*pGbBv&xiDvh~@qP(20q2;UK!Xe4vIlbw_8|+;CB;ECkL! zA*9`je|2Vt);BD9&;Hff$Guy4un?iOjWXZ+;mDRRyOpG2P0VxG!!8fiX_VLV($wYY z1zasz3FI4u5LptY27Sj!(7Na74U{K#FNp2H@_%~AKsoM8syI48^)_$-@aHnQ@Ht;? zB-uX9sr~8EV7^ZZwR}PU&RJT;3ddw(Ug|04Zz5k168|?*{XXH1aZ7>o7tERDm zKPQb+4k;$3jFoyl{$u@m8IbJb@WIga@Pr1kCf*#Ynrh~4G4+~cbsetSJtF!9BD^^- zej?}*hBF+S!CjTEfrE9nlBIaG;H%11l|3qO2qw)N%m!T@rXpOQ0U$4@Vua{pN=gxR=AIi8PK&pYp58op6E^Z^bF@3OtM>Rf71qY&x zr?0uA8VAn3Al4C4#)a#-QQ*YV^O7>i9CtTwYXFt53q)KdD29B8U9I%lzjl34N#vVN z37S&!GdQQbz;#kN#k@L)W$??ZinbHVMUwCU>TCEj*cZmIH7_e@srO2E8xnUzxHz2o za`mv!x70!nem~)N@LJR~IZK2#QsBufOKp-|AoF`T@gnx-D;ZbP0uu!_p6cZ(8?_cP zju97cn`$MPQ~J%$bd;p_-aoRQY5{|CjSkSqAqz{mTgV9k77Icw3fhaEC-3$*EUoaT zePT)HiBROV{e8LZ`RmYzYgUHBG*2)wR&N_m!J2_?n4sHqecQ+MPO?dZElzlE4q`HbzENXr8TqoZR>=1hgmcslA0XWOr0McBFSs8rHat*8NV3k_&98 z-qV1o*xknHkIOX(D?*yo^2DI7_bGbxV88wOdnxDZlCva$l83K1PchsIw6Pfa?7z(b zgK7oX#fT+$UgFY9WAH3-26F-!;Z-#H8=Su^Z#@)_$I)KfLL(54!_wQ!M^p-XYE6~z z6bewEEWSjlS+7>97w9efnldYhp$xXbJ`;^ivtDZEPkB$7+XsAKBbaD`+-X zFTBX9CPLzJztI?^{VW|!1DL#P$L=d6P5;|%tz_mcn?2T-Q()W_sJsUT)=x!R&Zxl&%akt&TMG_=gbq_4gn z#U0g$rlhz>_a+Du+402|)NoPNYG~^KSm_`3PYGb_`!G0DysF2fyd>n4bYMz};*Td7 zUDZQCCsJqi1}2+iR5TXMlo8E67#?35(Paro+>GM!cfN-dX~xU?ONCTK!4Lwkw(L{< zbCnhQ)%6hfoU`DH$aF28Wbg*W)P|2F9n_Uw)+MeCuRnZbohfe<+TO05N}`D1gMPr` z@5kSyU&94{6Ri=@{A-%)H^n0N333yNPuN|GNnl)b;LZ?5;JI%t>&TD8|E`4L@0~Gh zfx7*!mUg7qx9lO>ZM7s*5U(Actcz}2Nz7+ibiiro^cEDG8LULILJe{7g>DBPe`8uD z$M%Ll+2CF}Rmuy9WTF0Wjn^*rr4URalvf#;Jx|_{kGgq zMvufL@^Asy!2FIPBd8FGtb{5y$B4D?6sNmAY`kC{Dg-$@j+F9mx7(4?k_04e=3Wg| zJ*a+o*dZILcq^SJf?Dw$$jh%+vgC^O{Fqv|vbp|URK`<@980c`KvRYvqh++Vdb%Nj znE5zu_tOK$l{dqgcybux@ZO9MNtr9Zpfu3yC<@&F+_ zoGsWn2VbxPd zIb{zXh^M)}uYlZ~Y$1V7`vQ4S7#{CxlolB7VxvD=O%rgW9}tK&N(rY_@L2&{3bfLr z=kX41uo}6h|@)l_=u!%f~kB=eoV2iuHa`JP-vu9S<@W1BZOEb|@19)DaLqSPk zYFPVk8a^Jk3^sHz9{QKKR`zcDp`4VoE~-djpFMx<3D=8rKj&X5l;a2~GZdni~4Ok(rEBzft7os;} zy*I7^3whEl$Nzv{zZ^$~-W4VW82-Jtz`_ z1GZ=*y=pyR+|_Qx%JrHF1kQ}RflgBDK*n}!)G7?#On{Q>BGFDTS-e{eB0@o@WdpJb z90-&%#}&<fOlO=$yWY$V(OR5z{zCRV<#{T9X8Oe0zNWFbr}iPc zu)BUDwl995Lx)CPPim&EY^7SYu^5mC?|;Iw6r^(Lbx#d?~T)JU=E$QY>QQPp$NDsJtjq$NF7LtrG{9 zipH(hQf%MNaL;-WM@bf3NKqJrE}Iv5%=)p^=XDacB+}Te>EsV%BLnz6J9ymKOd(_l zYGRTs^-U0q9d|W58s%?A!$v2mKkSUBfPru---=baYk|7yLo%urr7`59PVw#GO*?4XXr51=hR~44cjUNO8V~*j64H z3;{S9t?H$n244zaP(+HpA(UWE*yLEdj(76zSn+TzUQtM#LY$URnmuhR=UOfhaX-V1 zdyBH}w312>6~yI}J-KEr{%gi-yp@sAIKSmdlaRHE%S{hyzOKmRD##d!n7?iw*;E=< zBre@b_okSQDf{A@4sqY~1aaK}MLsA?<<1<-a%x1;>v38I`-hr9r+8SRdfkjk)58M|2M3?Z~bwi{x|lyz;SBo z*5e_&mA;!03<1u9=B4Q}TE3#Cw+4C@N})ZBiZX$}EZmyTynR`taQ zR`|r7Zb!waLnxm4kXzdl%WRUpMQKNpI(tzw!W(*%ShpgA3Fej{m&1>iK)mAm&JGZB zrCh4XMrc(pYAlX14)HTdoq(o@Brbyd+X!(bc^uK6Mu3ZW5Vs2SD+38{-XuFv?L~4R z0H25uKELScT^p0y=RmUl_4gbYmp>`$#z>j0C;rKgvY2aTOMq zy-o8T<;Y8*A1lwclNg-=bOep6p`10-KN(*|eurvHT1RfEu&RFX$l!BtVwQaA8p={2 zmKZga=8Wa*Ul}{Iid-)2b(%_7fX;U{g#-r1u3S$Wdv8M>C1)4Wzft(Ldiim_G|xu= zd8MlvlIlmXzs0xpSi)TvcpSweF^*_ZLkTt>0wDZ5j{{&%Hp58Su=1n4eFCFEh^Zs! z%Qs(pbo2h(m}oeCIBU55L!cMWtzH>ECy;?3b1sBhHBiS;J0RtMhVTaE0s7qvt(N4DvX(+UvA8S#2bYb7f~^7nbPh(L4S>jJfub!lHJld+?uo-vmaBDP3!-Rhfv6PF=BzRV z?_r{y0Ac5~E>S&AL@)3QD=mO8fqv#Z$4OLEY9TFY3sjfSgxbsYk+&|0gidBJ+271^ z?UFB7O%x905eOr zEoM7HedZ{AgcBDz8T{O@`acrL#RlYIRqg%-&k=s={fcsa)Fm4e%<0IwY3tI)^|eH` zT!soj=Bd<+s&(ZK@aC)ZQM~bQMiBIGIqe|;*WcCBsS~gCW?Di_I66yWA_Jspoer$eG)D&j?%xn z|JM=lNHQ=4zPn&BKn@jk|2jnQm^hr{aF{^vhXjmmCo{RBPZEGO)oy-naUoS2z9o< zg*$64XGPtOnVFtAWN3llmX1Pv$tT`J1fB?f4<#mK!7eI$^s}Igj@ZL7*{AI}PQ4D1 zi>>6N_9nfi@{&LPUnoR#Zly)<_}M}bv&QURf@-O5Y}j(ByNUgdLe|8g_?m+C<^8wk z;nq^TmV{sP1@Sh@*Ub~IFHGAbeg+3&IlzpC(?z7gqv>6t3!g%9pPu5sJwMI6QXnI!t@u;hBCVUX^FP3SEivJ7%o% zSN$uNkk7DzajGfv+8NLq^bYwL=DUQu{pt&|bn@TqvbGi02TEE&brVjlKP`=u=QBk& zZaS@%c8<*AxrzKb+>6E?-`g?f(cW>J8C&>gpLgm0xI8?OF9T2m`%P0sycr}7E8X+t z0ac4m8}2we|){;!PtNR_SBg)lMpu|a)Z@9H4Y zn^mdOe9cGpgR;U(JHE04bF~o$1b#YFzD0=}H4wa~GiJ*2;i13G{isoJk!jieED%5p z{Xa(kW=+2!+)D*dzESQ*TO^-?%)l*eCS1JxI$f-*#N5b!Yupfrjxl4Np;-2IcU>){ zHpL3GRE0``dlD|X-hFHz6Ej*$oO8129M9dYpW-najHEhz18k5;Ye?>Q(nbm%nopH*-wFQbK!oIGW| z-#DCd2)_3xfm~=E(H{h%r>W&z&qr5?YdKG)y_3G9N84ba6p8U&4`Zrx;G%CXDy*J4 znI8+q-uokj#faGu(Xldu-ZcM55#of6|HY z-iuWXWZOu!`B0DVnx*|qjbn|7kyN6pj6oZko6I`YH1N+sh#N=@;!#AKJ?Vi@H}*?W zF0as`YsX4gp@t9d9G3xQ*(ud&&VRH@1Fo*C&4oP3&JaiZ)XlmyM6_reg@08ZF(k&C zPgfc5iu98!VM=4LG_c!SQWvJ(MV;xPfmb*wZ%pRj0uIF^I#RrbUcw;=mtK%h$4;bu z5uQMqU-MoQJ_pBc^RRJAOd{-W*eLOi+eIbus(JU2>DEx2TlBXz_VFAa|GER!0V6Kk?6r=ic-_~iW2nF$ zI1kG?Ly##?JQXJ3#tGP;Y>(5By_3%qp#>~wSH|qn)(a$%;#rT0lcmDBl_WJ(c zpXa)RgAL(uriVG`%{Tz@k7Hcy;I-7w5QT7NBT)PU*FGUvE+1>8o~6g|lnF^2CAQFO z;+mf>Ud;cUOE-+R+~i zsyc@NS)ALEaYn8-hZ1cL@}u{SgcjVk8A4q6+*Aa}9B1L^0{V{mfRpyx#68&!a57og zi2ipxf!bW%gJi$e?IxPemhjfNbChr3k$cB>6gn$}h%K5;`x*IAW!&w`^c*+Cj_x$5 z>HZF9zb!ZyeAJ*3Mn8pgZ=r~46!7NSeBqSwC0)zw@eEY67lk{@Vs0s|!SM@h+CDRZ zizqkyRE!+~%4xf84Xhrja2< zsjl`vg@Yh_YY*nW9*`6aQ7ht{X4D6kQ_!oQ|Yk+p65mbpHrQ*ZZ)J8cypXUcc1^Ppr;}yra?t zzYW@lTOqx7U@yqoA55{R@lEeT;Whk~bU(a&sSrG36P`1uc)_22C|0KR<}SK+^wO_`;w$ltqv%U%7lnMwG1i}o zG-3)j`?~VPJ9p|-^XTeSYHwC~)@6#K!^(%q&dL%)NFdSDjUo+BEc8(5GZ!2iF?W%1 z!BDZ8oNH3xoQfY5gJx7-pwssgQsYeC-Ui?xPU}AN-KnlZMge-+zRWMwhO0!c_RbVU zuGE+XuYSeRQteeMjuR5DksXirb(M9c@0o+%qjDh2X- zz$>^pZcprImXFKLST`t_&yjn&!#zid7^{#>&4gC$YD%{9d(<4puPE$I9c&#Tr_xwf z%rI?Oh~Uv9PLTi@Qnn$!jmbc~>frsdE9p|I+%ce?5$9M%wR>~{D@)ek+5Ay;X(mYj z(AY(@mDohrBB(EgX-XTiqxXGm)p#BFGZ`itN5P*aEvYJpXfe!7x{m* z>-~dbGx$h$TP&hZ`A%>m4LehI(5i{Zn%@6|8 zP{YoGbb!2wzas~(Q2%|tWZ!yjG%+a$ASgoLA002obyfXq;gWCOJ5@Y~W^X30(K3-I zV$bBefa#?P*;PPN0^&!t26rF=jRswct@txwepmjzy4&qhFa+OH4l-gwYs~3-Okuvf zn54xydE9%S3~|;-d!``m1Li?$DI%sq?M-p25?{|!fQj0YH|a<>MS4xz@Cv&mYvj8Q zGdoz%O6rMOZ~u&MNTFOORwO6PTCRCr!&L_45AwRPYfceb00w+x7}PE_iFs%|xyT~M zo|HZt>~-G!66V^$nP1%sXDL)Q8L(J(8Wt$|{YvF0q{YvkF;MX{t5(L>d;u|_k8&JH za_Mz>w?%*a$vxTP*6}*DIn6tl_K)euWP(Q%fi&U6aB|po=5P7#1)f39h8LzCy3W)N zEDSI31X_tz&iK7uUc*7}|DfSr1VY;{<)&Y%%Oe`b9!HK7ZHrCqgedoQr6x^8?SmfC ziV%mELuiG_{;KJ7@7cHF3I(SEwRHX0d$S>5R9zQZ+nJSj=d9*Abm7~$hZTuUPeYiF zNs7r`Df8*=AcYw-dBDJYZBXZ^4FMNVc+wj)B&xMKbX&6CDM&(~2eoW14nh*P|1w_3 z$YF-j*Iq?YdSaAV6%hz~9AiytsC_?a#Wo2Z)tY5Kep!&~Bk7i7Bp zA_obCPjah{P`qBEuDP1yH+|=lc2`VM5k+!_fZz`d_j=2?W(bv*G}c4nyGYHQsBl2i zHp__va!OJ1t%MRumFUIy8(CWXwc{u)6H?-9y7zCLR?_$Y1~fvef^4HJ#~gXKD+i#n z=Xoj+F0#ZeLqqmGk{_$ywA?(5D?_RLTG`0*$KIPEn+Sk3S3qP}&Gc#-%Cg1^Cu+HQ}C zgG^ynI~ALrT1gS&r>rL1`Os0c5B5$b0@7e4(TZHc4k0W$t~)9?97?rw_buG?IocF^ z0X9GS#=~?_0+$WzBo0k>nAz+O3s(TB)4@`4^++BO!9w*oBtD)PJJ7pBBIBT0zA+cL z+or2YjYl|+!zaWr$%pU=$t}5NCex!-+Asm!)yf#1Vl-694LgYfsVIcP^HxPQ#`{6P z698DiRJF%|Sv4ZP*LX3kb>0;8RDPe@v+OIA{*O-C5+T{`9~1z=qYz5J4GXd-A7=!} ze+YQ(G307Zqz?vHxdDgk#ks8t@+ptT%CDK%DW{e(ltK1UuHbp*j&<>bqM)pA_KMz|4qgHd+$ZbZ^ORr3 z@5l;9q}whj3$+lnm1NaGu0M&A(7z2XcVz=hG{JwZ3>5n$F!igDNJdx0#^nnmydfg5>}OU*~|KRXXkqn!?|PQ*EHkq1dQgkr%dyMuCC5@Vnto~A~ zcC2J90k(VpU+Ro)kyU5n9&`I*-VNzXDxp8&Mbt$T5gYFbGK!UqT9D)Hx`jNg9O8J} zoNdBi{DRhSM&3REvAb12Ina7hqV__Id+$FaoJ*LEW{c2L;3?_E7=onpY%`zT ziKH8m#RQ?Z(vD0PcsfgzjmsbpE?JEC01-tIIio&fO&VNY<>zI9Tk|oN#On-*N@10Z z`#$s~RIwncr==)8#v5;6td@&URG z^o6a-SpkY4zcA_a3BwTF8U`tK1-CXT_iAXZEvu@J0;K|(yyfA9xp*z_0#_ovCj~g!s>R(fe=81HbX}`6ML758I z(i9in_02}eQN}c&-c$+XHU5BEuhiM6s-`UN&JQrLa;lhRrxR@Ngc!cua}M?1k-8_| zO+B*%5Ogl){G!YK{aHHpQ~dmyC6Ly+jX#W|&22&=$ucH-hyQ{0)}YAN8%48X{meirG{3jd?pr=YNyt;)b4h|u zsNbX*yH&PO>@ZrLcckmelIGkX#>JyBC_7T-FeXuFKm^X@$!49vb+)UQ+C8hGGZeuT7~)L~ zV+JnZAi%Q7`&YXD1uSIANc-{4nDL*JUbGR?1akGn>$HqZXKYD)^x+bC1<>L|TNb zU!EByHsZam=e2oO`;N@BzwVj3w2)>ZVuH3>R6?akZL=5>8EPd@hUzN zqt}V6}NYd4oL|V>crfU1!{3NJ+}@Zgb1(Z|JrD9 zQQZcEcURLT6R6vDP@TZn0O}d=p3S=Of-QZ>qLnaQ1xBiyj_8{i?Sj#&^Ej~^)Frbk zW|m}zw6X47U<=(&M5OIXmp@|yu_#6YD=#rS=ryuer#!S>N(^?mrS|e7;XXpLNCJ0naf!FK`SLG=oeJ%0i%=+E8)1s z=)gpl!&IIfRUxO5wQsQPb4ZbwC^RD~;kTv^w^a+fp}ob`-HN|qlylI`6Bz0r-2Yo0 zEF*-ltzNKqP<@d{;@P+A0|`c8hvA!XW-kv<8Td}ihl%I`z+}w*7$w`V1@>Zqn3Xtg zRkg~w#)^>C>45wA$ezF-0Z9b;P^oT}0;VE!uKmB=F7JIn5%>Dg)6ah5Fku69Kt*zD zp8v zCeai!SVI$`T!8=0kO^p)iA@+ZoR|v9@7P>f1IzMno9G=_a^YRlxUb*BZKSW|uJ64w zhcWTbtdsLI8?5DkS%LEuXo>Ppk#b?H-bD74Ugwtf%4z>-<5Z`x5{5i)LNmsA+6OJK zC6c)9BS|qr>0IW8&Rvb{uDsiu$%$z{u(X)BcimU>0M2an3ab-xm}3_A^9VAK?AWj(HJd8^b{&8T zOXF^JJXc=;{fO~qSii-hW7k3S-^bq-<7vX?9kxF;Y!Pow4P=0;(mKX-@V+@l^;6T` zIUy|cToJ};pRb-%8`o9g=9$j^q}(vvlLgBF;D?@Ij{342)CX4k2~MIXUxuWuE*`z4 zmCjBJ8S28HrT+|~%WN=-c%743JBV2(A`5JwX10pBibCda!iZT0ofs0$h-O^Y5S_~- z==L_&EeDkFy@0vvjbLX;56D)>EqEtN%Z#};4jU)E zN^~i)oeH*^lLlj<17j|p(zWXLlWEUp_5hsxBi!ybx9EhV3Y#=tvt;R>Nn^P+Vi+ar z!%AoBogt$;l!@UHXUjPVu6E7A4NokX=_5Nen@UhaxPMbjR)0;@n{FOSAuYG^h=-vp zrMZ|$%UNN1UHgSa4x&Zam|(*0ufW33ki@0Q)PYyFxcTVY_v>At{wr7_)RPe@Gu4S6 zCmt!Mh$1?7>cA6K03bra)J{|lJxQ&>|8sy-@A|&f6}_eOTlW-&Iu3r6^ZYZ@XI7Rc z%rBy@J1s?GbO_aLxhujG)mtzD%7O<;!*h2*4@$<8MiS4{H0q@A8G^!gSKU*?Ep!2R z(jwzf?qCffMPVVQtV#Ep@b{1OMuC+mEmim(-Q=3dnU)bLQ_k(wjnaVi-rB5nUbINU z|0LF&6Bw~HMVu)v_G$qBNh{PY!N=o(_ifn-2@jz)!F;nl;jQ~AHar|1VQ!NH`|i5K zPUX#MmTa5U!@D$oP6we+K+G7RXmuYcmVI+simV!D%|Kw}nn+L)OYelGK?ROceslJ_ z4W!oQg-S4t0T7uqb6#BCk~b;H$+%TK0RqS%HCw>EBSYNaIJw|1O~3ycoNGBUe)oUr zM?We*Cj8er74ES4U3kGo|3D}ec^E)_#ZSODb!E0YLYJr5Q{hY5kAAHC`Q0N`vXP35 z%XLc6w1N5kGa!e1Hec=7d*&`E9L?vN$KM!LvLvH{cH!iKLKt1VqYdpZep$-U*0d9P zb@&)K#OmF+{R3Sike$(VX(tTDs2M(aJ3j&-YQA4Xhn>nshrYr@4=GD=@Sne*%*opm|ZM8n+{rDL1+#Y=4Qi~&c0xEPP{+#@npmtQ@u9K|}6 zrcBb!4!q^6-c;_v1=>qO08u-*Fwwar5SzdENAkAVXTS5xF=!A;2Eka!nTf&zQ*rbm zF)I$nfty#(k;6K?XEfY5dxV1tdDhH0|iKNnun^9%CzX!e&%gwQ_)pK-{x@tGnXqE>h7pK^0wuCKDLUf^VOO%g2tDr-6Lf*uy(B_7I-JJ zpWIF~;dT++eW|pf=qqLEYA2PS)_9PUIyZN2A4a%>6f6M$KLEhOk@2P`-U}l+AfAgw7APCAR;yg9o6y#35rNec=d)fO!^0&`2_=X9@Rmu zvetBO?hV$E#e$UfFurH?m(HeYer#9*mOF(Gjqoo^&$jdkf&7YC1$XNTZljZKsbdO) zRsY&t?JQrzf#Cu~Sb=rnZ0GBTZ{lSVuWj7-)n9Bp_+NcVD}B~D?&6B7XS9fO-p69l zZZ3!@4rHN5P!X=w&dwiEtnOzz74l_>)s!g*UTorMK$fu9(Fy)U-E+TSShMT(qKrD@ z+Gvn7-xv%VI!zv9VZ{s~GK@wm`}@uS^VnmD9uY466FS$K9i1{q&=<^4pP*dDL&z44M4^5v(nXCc=c` zDz^QA1`PEXk}6K?3nMj{#7jRR9`S!?3z-1TX;AX=IUiSk2aUPtZ)X#25Y`VzX~AEV zNloo38)?`k3YS}Bl<4=VAW9;F6VEL2L6HaSn%$dvBXf2`0Hruu2vz>=CZytgdHieE5WIi@=YF~^giY)w*t3%iL-*}NLr zQ&TsoGEiA{0ULF2PJmn=uyOV${ezFSnU<2#fKPSOk+n(lVq|3AEF(RsD`*WU3Iz9> zpJ#OWXGplU`GW_!sRtndF)XE^Z+cr^Z%Tnj?u+mdrp5D>xxjOtbM#9tY&{gaG5hRU z$FyH>ZZ}h^Po-7aW7u4Op_l?>bvoM$z_wryn4qc_tiJN;;?nMhT4^)hyY&ax^K6jj zfDM9F&joE65h*1%Toihc+q}tDRi@`7)S29kxmV@#UF>&!Rsy))754itFc#3gq2^`X z{N_HjpCTKgqR>hqJ_=?9*qm_Hura+XZ7PA#6p?FVrTJ@6d0>d#lw?^0+d*rZ@a0fwrovZfl2AiCOW!g3q} z_OqWOuE2D)7Js4kZIR`!wR6pd%^V|$;=F6g2$^@;rCbUsE=q5luIO|G+-A&2*^k?E zI{79#=BAElzz;MW)prDE!5T_U%_l%$)*Hso8R5={2k%ZIUZ`CV1?2)nw^a}W*S%-E zyLcX@@8Pg-KU%GI>}gp&z2=&#h!DNdFRg@7sXa$qT`|D_LozhHax$bFuh4IGM=8lC zQY&G|!#z?*-HsU379E(l6W%zF0A7K}gbzZ=i03O3wns0mFijOkcD;^kxDfb8RB3%U zladIMm4H9NPD1oOq`!^E>~|U%I*&yffsU_s9SL1?OWA)JCeVUh+E^|m{@ek17!@~% z47-kJwNn8FnI&G>$Ut@aDx0C^Pb-#Wtry%xViM-=?iJOsWI&To&-*k;SwLiMMZ3}6 z2U(4NwKjw6ihhsWHvQ9zd0ojs60rFhqj=(>;q;_I!?=4m{A#|C#zgCDjmRqQBZibGk@~5^DVW{Ost|I>sWFK>IhTg7!rWT~#3n3Szlrkt= z>|Vtk3|gV^sH$;f+ciedfMODu3ZFgc5FjYbSQ$WNV*XjH^EuV@+&PG@7cbK?t_lW)#@99en`j-qBEg#M4xZpV=yK}oYAvvw(E2Km;G${-ho+IY-?TLw@ z-VCB7DXbb_MH{r2gpwCAa}vH~#I8InmaRgKV%ToNas z!acG|sVr`K-O`t@m#H8Vkl`=q$-g?$;;zSoBp3c0*#jg*aS-wx`Ot*IN!B_8w+bf^`FXZ@#RmvIPWU{~t@ zo`$guylVr*le%T=PV1UhaXOxZcf^rTJhSB+yUaA0*ht#C3Ys2!M}DS*fZ?guxO_dV z#3_a0-fD^2;v>J9h8!*-*KYCs(X`^6+eY3W<^M3nKb>|`;H=)>+d@61`dgWYVpESc z!N=$%n;MTyYU^s&jZZOKDf72La?AD~uYS{(&UaOCfj;h&xUUz896;`&8z9)+)5@z# z*sGRH#B4mp>#3m}%A4HT4yN4uopoq=bWGvp$ft0Gd&$f;_z5G|7KmD#fpue{*60%K zXDng1Zju@_fse|{Y6_18I}%UJRyV1_Z1J5EMLt{{OuQRfLZJs4);Jrx+FIqy0v-e{g|=pw9Nfpgu{AiSVh5&A6| z%>lGBob5&af#OgKhi8F8VO1c}+K&86vB+>uS zBZ5|wCN!vnR-MIY`OMv4nk@eE1D!PhDTh-D$iz%N&$L{O;?-WV>3d`5@Xa{if$fez zLuug!*ODWzhUn2>IcWg{q+rGFqr9zQZhUH)Pfv_b({POF2rcU-y!S!+c5&1ToivPS z-^4{IgWWuIXOu}e%2Er!$L`!83pdH~o$0x7*bfz={74qbV>a!6K>UA#A^1cF0dO?d z`hgM+8Ob{34(!8g0ZrNT0S-0J9rE@V4F&BbrtiQ5^OSDho7KDPR2-vxW?pELBbMnN zXx4xl)iuH~z4iB!7$Zqalt3^`Z`CNG#pU0=EMq}n=E(+}h%SY|K?|bShzUJ(b8T-h z>axc0)otk%rXborT8oUErHfNr7q~)0e$E<^Qyln?>iw5-N ziwDRuw;ixi(x}wnJ4PutyRhWqup!H;45DrfTFDEx5Xu50c+RAae@>$jC^Z;O(@`&Z zICA+8%Pg`uqtJ{(@pvx#Y0N0NKp!r>B7dH8CK!ag zn~b>oTIj}_I+*uld+ehTrK7I7OM0`kl|jHO&c(k+Sn|CC%z5)E4-a?$orli78(>(U zCq9ude|F|p|5(B&Z|{l;rmAY$*rA&s1flw2txC{|03*k5M)@?Qw~dN^h03e>j1O~Q z%CI)1_xik-Q{0#(n%27Np7h$l2wwe}eZn^bP<7cd07zDLXoxNP z{k@t4gjH*;p8xD~_5$XG8oYFg-|OgQjuj5;_+fF|x?} z>cBlcG1jOSX*$Qq?(0yw9g*iq@d$nV#6-r{9EsW7mO zNmu#2Nm%X<2$oF69jOQbn46q3-Gj32B6bSupI1SS9G9+Vi%@fzhW zuSax=#Xgsk{5*QDr4!QJPjhH|KBKu0$KiM14c`}|Op4tLedgQlVPp|`buOVev{1rn z1J2I9w>oKOfxs8#z+TnsSA4mk%rmlA|Bh^k9zHJrG}b5cs-wg~S3_VH0_U<~U93Uh zP)4iGDT!W1f^z9`I~xY!T0(?)q014Prs?`vB4H{LOww0AI^b9`*aX2ccF{eJ2&83h z2}8R4X%UsP=ER7Ox?gP<0o|~Id+v5GE*!ikcwN1=VptMR!aRa$F3lbIU0pr;$c;JY zNy6fVZInCugWdm1LE&(xX0O#;(Q0XSIFCVViYp)BjG~&VfNf79C&Zwm0v;ZYD7zF> z{tVnGk_qUk#Ad?y92Y7&r`+Eo_O?3;Apt#%UW9GYHKb2C_g}$3-vwUNF<5G3UC~Zg z8QEG%zKqi`C~#Y&wR14+pfoNYKjS)Oq5*GOBuohuIVuY31dXTW*7cO0X(l&FcNgqS zDlF)?hshYx4%INA-1ntrZ8kgpMvUoyBT$jr)^q##@9XW$k&^6BI`U~FR zSWnpjwSi^)Amm{fX7*@?zuJ=}>!$1Hjc>bBPwjs{@8^_;j;_GYQo^vOyt5rlt0+I< zRfyc&N0`Xks652hjUu|JUPoNR_2CenQoNN272J8$>L{P(W6F3^OOiEG)5q;B<;-Fn z-}^j|lHx>4@cpEF5*!6Z1b(n_95fYQNclTob<4xZd5PB%o}$94-dJFDWw5{XiHMrd zqA1K1CYiw5>I>xQbZ%V)xd6J(S&i10=lZ|{2c-dBN4cNqIah}}FyoN@DDKLGcav$3 zmHDFn!ySL3k+xprSx$dh*QgCQ%7AhBgALZDkItXbd?OWmRkERjGe5P^PDoktJ0vew zq8hidch*CKjd1nn`II}e!G;&wb%q;L#_bVNdc^#jiOOLy?j+fOeeWCjXb?Ak_+IiN zieNxEPWX_2#U>_5d!Nk(8ke66TMlW%EvCF$!Z_&uh#gTQR*_*vG=L(drDK>lh?;*& zQiSGMnL(%PS{#ubdh7gk=d!b9(-jLfEL3l7tLED?*20Ga<*Nfv$0LeH!?d9>VWuBM zNtetzGW6z#m?WT_<9MN^z{FQa*3B`+Vzk^fd~k&E-ba*c&I5E_dQ99tFcIgq7_Y8# zWW)FrNP`Fy;tmeJLe+_hPHkPBwIDUagFjE09u>py5u8@y$3YGh z?Az6?FGBO+uw;(g@7__K(vwshajmGM0!7hj1J_mga-97BS(+LhTQ;0$!L=`l?A!#~ zYl}6yRm))_Qk^R=ZIa6oJ?ouiWvERER=H8>gMOScUpfmhX%l8QjtK92Mpr=0=htCa znQ1p^#S_qQiXlTzd$$W6f6T9hiMvqvd!3K!T5ZfC#V9iDdcY;1t{WpgGChk)6JVwO zUah}vrInZ%qQt$}bS3j=sEaClu1LEv?!&;z0?7sSV#9cZscZdFGxTE&F z`i$eYMJ2N-0naw5%v-}!Jf}XFPjK1CZaun3ynyfq0Il!G%7h-kB7X6vbbN z3@o8sQkXA8!GuS1PZQ}A@ZLPVuALWbVFrY5Bb4fdLTV^DdExSiBGphairv4b%>3_nn48Q{vb~as z(<_z;c~`|(x=K3p?p7a6AX0%ewSpvSyT<%k8{Y-JkW1IJRVz4@Zx0U6gfIEVIe6T< z>nusJcXx>lmX6dTUx$3(foLO96WTLZ!TngT+p;bT*bHj+Ehuy~OvTG- zH5|~7&s-)9XC2P}?^X4W!4`kFI*;(Y@`z!fk~eFxaZ>w6!3J$q4loGy@V}EWNXk z<)H%kJ=Ise)jC@2Em$v?B$PSBf7-_;>)bkk0Px}@V4FJ29GcY8e6NoX|J}p}3R-1} zRtjo6&z1Drc;&e&Q2dJHgwt***W@T_$Hm7p02s0kVCx>cFD?~et2;(XWH>re{YCOz z|KfPlOJ&{!-%^X95|+tKb@JmAZNKjk00=CYWV)%rSZDTLhF-Lw*D7!LV#PC&HwL=~ z&;BYbCB!#w_>ZuP;&aXKv`I5`N$o7u4`%D!k$)i(;wKMV^2TrOV86Qto@97b~BUFU2C@%dvt45^K&y%+P zmwO+R)f?q=UV1I6e}jcLpULY@O*6wEz)miE(C+$&CK68oC$L_o?n6w}08kxlKJFMU z0;hRUm|k7Ww6cZbG46=C$E{)eK*=ccp@P&f52-^)ZnF_Y&Ftr%M}}e{X5mM;GMTeT z=#4CD_u{}B+6?&&;6~@!#D(ocjvu59^v96M2pBa{Qz^XYbU!m^zPCZ+5d7po58cmW zUb@N8+#*&m88Ki?VWs+nnm;xr7Ofi-Q390+2T`sNQPzo_qJb9R8PFAwxU+2;{Yo^X zQ||^*_p2fR%aGd=CY%_kU*vJ$d9atQ;0cRCuNKu-{GJBDql#e8gYof}-)ohf*?Nvd z?2K8Xp=24h=H(>Ztgv5>G#sjQS`O8{>z0pHP-ewAnqju@>3@m-#)lWi+weU$A3E=;FiySnJpR(7M z(xgL}zYl4mEXvC|XSz~vo|IF}Gz@r?>lAS2hqQ959G4Lw{ut|XJv;0qK>I*^E3d2gHzv%(vqMVb9_p4oKv1RkZML|ok~JqQ(Y%WfcV33eab$_ z9sy>ifvu7f7^A08Ug@`(`}{xo)MN~U?$GCiPy}AgtS2j0{YTtL z-QZwDxb#H9tBfm&X7kGnF{AqR*|JZa0Qy<}a3JOLb$}G@2KyBS=GlaP*|om8L1_i zC!5Z?ClKNnZjqCjxmVvK{x;fM7Xaav&G_}&{le5V^)wQUrb9UxQ=Buu;l7Jl>BEtu zF)pGK-?-@+Ss$mLw#pb$=>(D5UZxMW9wcQOJZM9nZEO4P6s%WbtfeYpwCU)9QhG%K zriH1&f{*Frm1q5taknKq5q40bL%J;Ho|1|MuwUK-n_!+f@Mr-AnPFqY3?{CK;`eA%6k0%ZFXZ9(dJu z(t@lwq|H$Id_5>WjaPz@blR2y--)py*~Tp=0*NgM8(-6_M1%85MSyA7)sb96lgwD+ zBI2SUq?6~0Hi&zqxm8cPeo^kbUuIuTkhyoGO#)KrQk{~q>f|w% z9S2$ft3Os|1oxYVNoIS#(Vd;3%OF%InfnaYdph!F#SV5OX{CV5QM{SpBvSQlXqAn6 zPgu4{HMR>xfci{sl@vCV*4uDntAb*=7TVb zA#b6*vkvjpEl>z`!uSw=!KRaw=l);ch}YrD8HM&mkOfAYs>z+m-Qrmdrt5ky%d@y3 zZUu2>68m$|`|p0zfK~y3-53M!`x0(0>W@%H*y9N$alK0mgv;Rtfcd|93oWk4>p7h= zwD_4(12zA?>5B9J`97cS_>H6;%Q9 zz0!*(9_5$b5F`XIT01p7SEVB#*xfm(*)GH%7hhl1oUiCCGgy_VZ$4Bw0e^fx<7Ifx zI`+S;s`I)0%XjStmDUb_M9j2?A7}}X$fDe!ah#0Qm0XNrOo$jy5pcw_cHOc3(nFx> z^=d3fMtk*V%mez|{f&juQg&D)=v+7Av9JSbz-qnIxvB<%&m5 z%(GwdX|!Xz$_ zvh}QL8TL`|mr59pHG)`PYirYd`39ku1O2DiquhiZuKK7={4l&H>K*yPW@F6aa{;2LGpPo^650)d=Y*kg!PKK8;TI@W%%|_E5bbH2U3S)AcodQ^{m^SkN+w zG91qlbz*C+kXZbA0?DX;Rz@_gfp3HDTb5iPS8`ppO*z0`NQejo2(BUR3YfQ|glWdDLc$hCf4DiVx|T1!$pYnYc8#~ZPkt8ys+9mT)s zipzSJrH_MXp!45Qn56rV|Igaaut?7jef8n27b0m3djR|O6=M8xlC2JpS{qA{+GldO z(gH}>!3`r_xjXuV>KYqmOQfmjje?Ht*Z*xSnU0RGd?`x2w7Uqa@sx!8n5sx6JY*F>bBJo->y;J4fE5ItaX(A$V;foFOJd1vLHFQ_ z*$4IXW=SW7^aoXqih-*-bm9}AtL$D^SAv&6cDfvIj5(%z0wpR{2g#nHCK4UY2)VdI zt`MPu!aDQ7f4k>5ep$Dh^`Vdsoov6{;V{8hr{O#!kYaq?9(fW#;VwKtzI=|~?{2e>$Z+AxRE5(qUg){3;vclX+$;%)AE3LKUGn_ z4uQA>HYuSk@>fuJ_l@Nk&sp+%-6%8|Lz`6}*SCEBlM@Bmc0qOBE!^{O3Xw!>@e{P? z(Zua$nqW;7jU9aWn+2)1 zCW-CZ^Eq5uoD{b}g%A@(C9@BirwC>~6@e^1XS2WG&JV$J&l)~eryGnu?m*ec5_91f zg10N7lRjS2l>}+0sr8OV!N%NpJPgO$=YW01&gp{D5rmF^+AEz9jo@!bzptO#IGKBW z9<<*CL_)MhNcOp$1gVCr$#XIRd>>O(C(Z%+oLP4vuc;Vt6fm(Uh!Ib$Pocc?-_#F} z#Krp7Kcg*QIuxf3r6pu(hvZ$dh#MY=lehH$9*pi{*B;0!#Mg;vctNaVI`kSC=_a>% zOM3!ugx3ttNeP|RhNtDso3w{%=irf}$NHUYlC!{yqyvvn5*)j+xv>bO*iW0ewFv(M#6L1n3j7$JeDlv;z~BwVhel-h#R^Noi}JpUGn?- zTb&Nh+(otkr=-A8XrB1RBsCx8o;7_WyQvw)=wAAx@L4yAknt9tngNrOJN0Ik%d1>c zC{Wu~Tms>DrS*e_Y^lmePL}9IzO1o z?omc$vr%+u&5?`W0#0zJzXzHjTy6vBU<;euJtO=swfH%VcN_ zb7P?ofmHAl)(-i#*#kg#v$onGpSu0Vr__(QdZr&jY^I17T$kkx5Eh;OgSvc}@Y9FH z`ddPm#+S34JGhObi-49@kAj5;utRl%;@SLRMWR*d#>Cd`z&?Ks;r5iP+oIevEAbTR zRfvwf8^|fY8HA+(V92Ybz#}Ruo8!Vqv!ktUL}>@vfOb;F-}Ly?20U!q$$@UEvoG%` z`+ysEpC$&&utk&NR>hT2NBS5kP-uT)AjC~P{BD&*Zb|rF2_aj(uefS{(klMj_wl1$ z9C+jE=GjZm9-PrfV)2Xo? zVK@X!FQA|;BkqR8^;CNwM$b`?!cqd<%0yM+9ZAU4WVa`wD}V2ucCsz#JNdqZ~QR7T!92vX@)s+e(jOGg4kmca1oL7 z;7+p3#R!|PQmz3tJ6ZAEq)t^{b^D11LuSchU6&?63Fo@UxPFL9$7t)=6Q`1z-dhsF zB+K ze@2{v`{AyBl?ADx{r5FL2^_#nJf0Ix+3;{#Z6|1+O^vdF;bWX0mBiI^|9Ch~GA4S- zp+qHr43=|}!0FH4|8z@}1L;>IEO%wJVNmV21Cn1QU$v!q$V$~(JL9W1(LXGaex4ky zjtaEyE&5P?T-_?WC*u)z`|NIjfm=!v6V{8xikGSwBTJ8qO?KGdgzFPEe-TbQ7M^C; z42X7BVl$Y>_?+3x)R^+8L7FH|rM_gSxfnOs{~V+d1@3ZV-EMMm)S>;>wAOYKW5$1N z*NX~reaVz9_x!whbTpo+4aw#2wD$ZLI-n7t1E#Wjs5Y(e!vnDiu2s5_PPMX)JlgfR zoaPu%^Jc0NqD!Z_Zysb6WS&rqsj=(oiKlDrD-Um6d zW?b-a+8@Z3Z3UQH4~Yb$(v8{S#mU#fBG4v02K}Qm!6FAG;eCY1Brmh>TbuKcrM$&= z>|B-m7f7J=U;%OCXTpK2s_W(bz{gJf_=U1Yko=l7ii#6R2nJJFL;EIC>{Q5t_iYwv zho}}GBAPR*x=qez$=8VXMf(Jss>Yy%?MV%(kMw?gd&pQ7(I~&yxM1HpPa<~0itV#E zJ-JqEM${tcPDbMM4W2|H(MFwr+f&-*<)kERM*!q2`@F z63VVFWRQMBqWj_Utb_Q6PG|Q^(W_1ekjqmw`fTN%H4&BI(fcor} zz?|tSY`K^Se^3fEP?d~efzpX-fw*Y%lC^Sivvh4Bz|DX4EAs;mcE9Fwo!cHXw=0NU z3Fk-b8zFTZA1mG4=Ajdm zVYbeSA1nsDAM0&iuuhxQDf}BJf#%(Zm_`{e0lPktGLl_HQz)YF9;!$q!g`bRAQ)<> z?7NTkbcq8%>1_vPj?Bn1;{70nM?7AKae_Ztw!{@3|yH*U_7djnR$50$_EY;%@KPjukX z=Y-bwws#YYxa(U@8ixjSFI=y)=t zK9ubLHhAy99j-gk7C|!II2I_B*QvNJ@NmimR{vcq=xdJke=gb#;--dL$$kxO75`K- zG#}SS#wC`0t4A#STZM@xQrgNNwnK;hQsIdvIAOZm(T(;KpK}ke@yAZ>1P3IKY_!kv z^lG>_T%^vGH0`8{sUY1$uO_Kwk~#L5ajDAQ@Yz4w+Mg_>#}el4GXv~&@CNDUS0ioi ziKn3Q#mUQ?pUZ;MFVNu=Xb`@|^o2@oX`g#l`A+@LLbTyymh_i8ewQ{j6H^H%F{5ve z(=6(eXtf$z3gzc2EYkfyoQ~**`6hwWdFkl+bpIUn?LcqoBwt)Cq7+}nHxIAp15Lan zB&+qE6;xMataY-=Lh~Wt3(?|~!XbQq{l=GXo208>H8ihhLG#BSjWh~Y6GNfbNIIg> zdca&DUtG2Y~b1=W5k+hp7AE4(j=x`)HSKSdiaNp+a-11^&sYybHD4j9WI-H|YtEId0o^I@1M^696I54<)w^Aaty9&8mb!3;0`( zvgSwRV)Pdlu$5k3v-#{x&lU_rEp!nm)w4~@zusHi5=_R0bJ%0R!O0yc+n$`{zu6b@ z%F>#t-kL@eG_!Q zFD;s7_oQsBlN0TQc5N}?FK^ohB;H%Yyh@qz`aqX)FDY=i5^agh@`~Sr+HPT%-oE6z zX3I$}5+rYVARbyVMg&D_7(=6bgG)m}s-7X^=&_FLM%a+C(;N>P(y>O470A|8?Vsc1 zdHtgb_~T144&$%qh{OI~G-rN%ds&UK{`1)pbWn)_FEve=x&D0DxdP=+!P*u9+Sc)^ zt|({Ju8GftDml`JcF_EywFZAjy=d_U^7&ex+`|LTej-;9Wc_*`uv=XFOXz12m}STG zw4U5NDL>v1S=`et<@07_;@1z)0+=xFx$;Is^@P1%H31z;KbRi7)AL_-`-D$xY9@Mb zuqP@+mnS!Z@I3m9X9tQ?ebs*}i7TY5u$u!|?AKcnIVr1QrBP?QsJ;PF-;fDO`_e7X z={iZQEFy%}-8Fh|ZD4bvIQ|2xYBW!D+tZOq%Bo&5W-9ypuFIU4CE9-HV@40SCS#70 zQ~6^+B4#03az0O$%CGdEz_Y&}u(qpM`w*?oIpO#o<(?-z5gbul70+X8k%1$XC=3nM zY8U@&a|YeUb_^ri(llWlLT+?4e=%IB%UFXMw|9_JH7#c&ajVIE@J4Iw2KuCjmWkqV z38Dp;d47;~fs5#a?q-0WrpX<*Exlkw7N^nSPoj>~_n z-N)4=(uuc-d1jeLtW4&8Hse?UuS`UzOi8pIO_YNKIi*-bm9Xaa#I<#)+&+ z%)Pu{Z@4<2z%PG4!#3D!Z)X*iGLkE!tn3*x8-c`KhfuakbHR@%RA|(^^XT^DZ~*O_ zT;={Q7-?AP7)0>gkeOJjzek#YI~c{_m0gm&~ z6UEXb%u#;i96S^Evv(c$*kdUPxhDU;d>MpS^1IyfJ0uWAYbjP_vGleJdnIVGnYszQ zO?v=j_|kB{6ReFH>?>M&-n{!I#Oabpy!7^!lK|N+24TF%oM2JMnH!u|D>oj%Pg1o7 z-^6*Ku>1BTxZ*fLA#T_b!AygB@C7WkGqIu*Jz06ONh*VY<=g4xAyN79=6(ZAVq$EG zMmmSGv3aLIsVjoNQL^z}w}7eE81M~HfLf|k-)4`tSI=%UEf z-yu+OUaZm(d}xM3cWBq<@EoAXSW6IFzmkrdGip6{SB}zi#bu^oAzdF5%?`_v29d!B z)Xz~@G~Ehwhk|GkK|eD*W}5 z<#o^DdI{8%O#ug>kb0F}))oc4UYL z#qTjM-8sFX!%E0ghyj~}3`55$D=fbt^5OHfhY6l?3^}gt8C}URhRLpk?#@Hg6fuJu zfJAlb9{&eeCldr>H=LsV^AcY>eBFd&6!#M(p;R6cDeD3LvE&VzlvKLL(!lQUG3#MYJ`AvCXIRf(T61|=*)&V`YOoNG%aT@tEPfcC)OELfm z>97v_&WhCv*6wiMB6}UxWAmdqc74vMwrgK9Wz;oDsA@--R(`cS7&flwP7ltDcB!=6 z=}!|#aQ}V0vIVwxQ}+a!$zUs%@9t|?1uXxi{0CVvG9XVH>%w`C87oDM`Z3QG%h@l@ zW+G-81h_U200;n7DGA1eSjjMOWv$3(u%c;mRQlqclXz#kFa6<=!-hbar?`;1A?^LqqbZ52_m%HqVb9=fm5 z`8dQ?OlL^56=;OtteR>{;HNf-;OGe|;%<*H-6brAMThap%SQHq=POtR%W;0VmbBsB!CRNuUnD4kR}J=B2tCiJyssbh?vOF#Pa2_G&hrWFic!HMmgxZNPXr<|uW{ zcbwFj_9I2?}EJuz_Ioj!INGK=Jlq-;U8rLHUjdfNe;smB-49Z#YpOTLU1 zc8zw5$fuK6S@lQ4S7r%WTKB6omVF2~H`8QQ%oKaOPDkpmdWqC1{x5*rHDv%lfr5cM-RNL)(Ar8Z&fY!e`#Uic&E#OkH&@PEIggU|LiXH1!$f zkZQ^=R%i+ISEZpfJv1kp14y^lfi-;byjj}Oz`F{$`N|P ziiBDPf%$U;zn&ugzLX$yM*64LcwTu!o{Sx2!VD{G^jHv3!q3Xx90e`8!%#F#6=(2AcLR)oN>DbcZ4aL#pJ&fwOr~>LltEtR^T; z`)1}C@d(P5jC>Et^U419@JKVHj@4j z=reozs&ELx;mL8fcAl?(eQfvgBmNmoIZ*PQ^YddEhEoU6kda=Gr(uq@P_kL}7>w%J zZv6&Ff=GFqN9<92JVHN1KHOAP8|PU?FkgL9G;1rNx6f-K1c3~R86Kk&WKKTb()qhH zHE{pZs!mzGl?{t|{SX`ZpsD5Pq&wq)AH3fZugZ!AkwFhVnHAQi{dUf8%v!$^abCC- zzBuR!0Ty93Dpo{C!Q7A^QK3%*vdujc5J-@jH4WFy9rBZ{o}~G@20r*)N84khyOH{p zhfDUE?O**2&A8NApaj9s-GPp*>N*Jn_G&W&czETYf^KweO7B|+Q^6bvCU^xApb(Z1 zu8$yZjiiFb$faa`4mWFgX-X^7!ApRxNdyM~fthXl zNz6D~)GKpi4b-Q#%Ob*3pZUH52@qDk2JjC~h3Qg%!xPD2xYKEocY7(r3FvP}a7&3i zR^mxTF-9l?RHuO7aT)~n(v8LmRWLCuH^EA*tMk48^3TU>q~N;0XSWOO(4eM%8Z}b= zR!wW#PKOHGY1=L8BRL_!HT&xkv!qI@8sl+7`fYrJy;u^(=75 zQPw(5kp$cIBrwKi&?I1XmJ8UTo?(Z&sw;$vNQ0Ky^)a9(AmspWbxXsJT^-umvQ74$ z2U?eQY>UW;eTcG^7J)L%cyYn1h2%(rHuR0?$^awIj*(NPtU5v^uRkonT&YtX7kI18tB9#sRkH7k9ZHl`$IPy@&g(g914($u1`Xk%Ki2U;kd5y$^=NhM!MVw2N4lu0GT_n&uq3z+8z` zt6MK0-m{V~$-=&{O@;3ddvxUa8a0CVOqNf`+)VjrvIhuaora*N$Mj8x{iIrOF^2!) zf1(MY!ZUMdSD|q(3Rgu4JF&B)^lu@wUCLt;^S!iM#@5l8EbMo2Io{)DCX=H9y02c$XA#xKm!O3c|I+%0~ zPL2@0t?rmO2e0u1rfD*zq&xx(%a2&Mf3ITIAA8(f!dZ}><7*^@!nkp~&u#R#UZ^nV#Hxy39+YVv44K%cq@1i%jM+T|617`(kJaz_M_CNaRNM<)(k==yX zK#2waj!IJs(8ESDi|E&j4>CjI=_OkWg6LQ~9-|4Qa8S0*N$Kz}F6k_VPlQ7f^QfcR z4};CB<7^!T9&dsPn3XVP@3cT8Hmnpa#pkVemIIYr((rjw#K05ffu zX*rNhABUouPRCqeHV2C!i?N)cVc$lrW)vUu1_G_=&dEmnTu2^pHF~a;rK_17~GfumzxdDQ#FiAe6!Cmy-5(S!j!!-C>4AxjnP{cpNpfE2lY2p zXH<1UJI{g*wr=$Cezoxko}YSg4GEkb)P-?!rgJ}4e&aDtY#a?x3eI8i5}(rs^W832 zM1nub26rC(KnAEDm4BPSsKe2h_9>XUo|nYDZbEMl5Vhvw0RsXBR+a$&KLEg;GA@Dd zBR`_rg2qE)PvUMJxQ`iIIR2YEHO4_|B1R|JD%H6jbKEPydytVs2KJjP2oF(;(qu1t zR~*0)T3mug!Bms?>BHrsMD*#uXgL&>$!IAm6jqE!PO=41Y^#c?w*x1SZNhF#?_oVD=E z8$G9WjtbhB7hfTk3TD!}LtGrQV{$*NYEv&D)ojPnyAZ$(btY?np`G+|a1QeM-U zQ+ZUkc!$0g^N9&2JMO~YyFHGlv(h22qw3e?#if1*<6{OO4L$Ob4=oqZJ&G90mWnd+ zJbTMrVFJHCzpQ`Bc0s7#`IsSm_t5UWSQufQ41AbXhC?Yc?dI92kOP|l9(xQSd01Vx zobrtE02}nBu)z1cjGA-c1as6~o{ayKK<<;t#2TfBoW9LkI1#5ST5pHf??@bZd)U(w zBFT0p>-zSbNI)&i?JOEJ`(%iU+sm(32x}*a%^&i(%M;Rx2iU4FbE)q`G`5WQA9j@H zIEve2f1}tkrJRnpLr#Y@*302{5n&7l!nArX)_VBf@vj7~uI}7}7T!`#zIN1Hm1n;4 zBZG)9*_#>`7UhwL@$*ZI`MC@iM-PYn@Sa0J?`4B=%WuuFgjB@xwEYhX5(OQBr&xd( z6Uf}8<_RknK7zS)=(=@5)FPL%bC=|JRrfLL$-!=crBn8TSg8Xf=O;(KXUA`tpmHs)#@2U>ba2ga&*L4WyG&@|?; z0+$1Pq$A+7*Bh5Qh04J!nTj-&ms? z;qk0(IG=QTuBref|EO4P~28n@V*Q3yU;~ z$!*8O-V5(!<*M(D=q97&;-Chx+Aj|dC5T9|CJ1V`twGMM+dz6m*%S)FAP^pONsKO& zN7D^#9v#YI~x>c7!A5|G25=Ues&*f-D>#Fdvh-oTK=o10ZR}2mhc0yOv1m3 zn#CLK?kI?>c2J2daIq1eKcc?3Yu$|2y?*2R(yzvEjzLPA01taOYi}-#(>GN8&@c~R zKGdSJPFO;aWmUyyaU<()#;B7Q1EYsKcUHj+w-lLr2}FsTxupAvaVZ}Ki%&&*OL~yQ z@k)(c{^%MofER-a$;Kb>!Uo?2AsIF#-{$&ohdgicWgm*mvkfQ&K&10kTpR|T0*C(% z;~)cHUj!{!)7d9Vb-{R%$7dWyBlrrD7~>c7Up{RexQn2vVgr){ySE?VXMuy=Mvo|% z5wG=GnK%rUHJW{bpwv=lsUS`)6DZiMN~+WMVzN5;Bb5-F+!1jA0HXyifEyJIsu)-t zw7?X6I=;Wv!aU=!Q%Y;eI&=tpkZAOI+Sqs86OY{~~|m-{|+3Q#)VSyttwxLz}GDW3y-!fXz0oSH6w!IjDXb zYA&~^{LzWr@F6DUficvj5$8}twP@q`E$V>UR`l%!cTI@v<))O@8hUUZ+Hbt{z?3qL zC&+Es^Gp$5WMqzE1K zBqVR@aiR$zTxNJPC+$)`A$1t7Kraq90RVuIKL9c}=D}F<20UeIibTZ9-u*!b5SDZT z+fmjt6<-1x2tmEEKl0_ALJE0o)CiR6-7O{yn@YVON-K6-G3I53MY#t(s7FHm0aS-h z5Jwu`0E5*%{ZqzTNf%5g3S_QoroZcDTX0qj)d0yAp>>k|~ezm9gBU zxussMrA_}*5|75p`#El25N&E@>imG}u`nuChkDhf4zaF?#)C0ew+Q^RkvL|!?3+xr zb6@FoD(6QN%0SVyI2^9;e)Ds-Lo#)xEmVQZJIUX zQ=Q0+#1&UQhk)K@`iRnOys7%frM0kN`$4s1HKppZrUA0lF&uGc7V1?~4q;wCfe=9M z%nYEPmN>oX$TUlMY_NisU{ z5(S#GQyQL9N5V1H;LkwU)!=`Cr%T8ISQY45wyXMUHpl+Ka{I%5RcagE`)a7?W#DBP z=?;WtRUGBcz8$DI1a0ibBLo|K#W4CR$NCdWaC-wd*!9Fj2mzI&-ygQL^d+HW%mMSI zy!+H&iL>_CM+kCpUjL8^ZLE{mK(x>-K1KBdZiw_WoD*YU_~V>e&|qs&NSAc_2R0bh z&~D`Y&ZP-<%KXPWdfiz%`&th`M$W+TWn=r1zxACxxD|e^@{#fAju9@C1Ts5HE8a78 z1nAvRwl~_XvMWlW3#LWh6@WXJIC021P}zG}r3NYg3b?=^7g`cDt)D@>m$HwBy6t#` zD1zvfQ%pxeSree|X0!*P@_q2lz!tumb`t;|D?z{2J%B86|G*?}2TwhE+>s-^s+l;Q zYZd6hUK2xP%S9J9f_(IZ5A}FU!1W3oH@)BFW z%GcWzPVb^Q#(WN7n=DIR%wZ30bA}{1H1Uc!Q6#xB!q2cs@Ff2zX)*bFYdaI-O0yEK zT=w|E7?LT7fCz)P*SEwCpn#1(Gtb5Mgt${Q z4|8zb*Slp7b*WET6)#Bd}@1Y$uo@5DlBlNjC8PX9uGHVs3>KPc+ z*Rt~)0Ey+P{Qv`W>=!o`@!rg?{OGI<(D^GyTEX+V2bKlgud(E4%YSwmWCUkDmU-84 z0M;yq#&L7(C?Tr$_n~L2A@@_1$%xzFVKczTJAY+F1=(8uo|Qby=gS~LvP~A*yWYqN@XxvVd68L(YHYKtq+5XcU!#|7X0-$!!zk0%gwSocNAK; zklU`+woeRvC);2NpBRt%@P)H5FK`i^B59Z}Bx@!pZ-MD*{- zWt}BzCE1`i30P$n8-Ym^TRgplChvMh1BpbyWV|H{bd!clqBkp>&JOHHT`}l!+x|rm z8~kYFI%NZK_Emu9mP;p@#ksbbW|3<}jI^{RX5PQD=wW++1r zT%S1Qy9Bi2*!ecR{=rGcQCfOa;70N?9~$KB>^$! zZLzq}&ca<2z(ATl^66X=)|Fzm_E!P4HemM^&Qmy1_?oL53@5(AXh&P>PzI86aOjdl z{}7ds=TDdnIIpulf5{oysI1nr{t{e&t@V-cs!?{5&>3Ant#o(tOX3L>P=cJbupR}f zN6Lur|5(?Kea`dY8p-Zmr8l3>BC&y_2ZmiZNyHU_YT3YO8-x#w zODc73+*F<&q>k@y_0Js(4fHim6U7(F*=opvw~r>HE5L_G8oMPJ>k>7R$5e1CKA91| z{U+X9XdF^5YylW~bWOsxGR$}ttyyx=m-=oy0zo1T=RXYI@Jc7%^!m~MXs$uSJ<5`i zT4+^b@LT77g#o1@l@j+8jS4RN!hTv$M~{l;Zo4V{%L;`h9MZLAou+&_c^(G-94PdK zZ5Ew(Ty)Z#PCCVOff2{JEz)bDsgvn>FK*b!?le6)se@YUz6Z%(x|FZfR;ReJ&^?b# zKR`v3rQp;De5&<3mQlDtPvz#fDg`nz!)?6ZZ?FVX9p zB~UKMOw4jlLx7%dJri|Ie?RV~k+@!WnA-4qw8r`$srl94n)p%bUL>v(x;2IAM~95Q z=&>!wY;)amEGUdD7COA=OXkaXc|Z*hOYh&IfhTbFzk&yl1d2TJp57~Z|5PBMvxlr9 z&m+>xdj$9qS!~&_5_yQqM7wwSA6)b~nH(~NBJIxC)22mflc18cpv;s7b~%Y5+n#=N zP^)74Iow(uq#UKqk^Fc_#eWeDv%NU|cX^AY9E(00BjcN@e z*AgG(*YtS6_zNi4LlTAs7y%aV)D#q_^@{CS_iQ!ngkHKfCf42mijQ!_{6|j41nq@7 z3M%p6nLDPTXwoCbcQ7yqaIxQE&wSjE3JR^a07oBmDOLs!5j&?=ao!=3D_sEhzY~q0s&^L5+@m= zpGetyQ5HVcG4;ThkJPT~=y><|)}!+XPR;VvIABdBZDA-2l&ml|&PiKlYfB(KPHZ-t zjH)c(+FH_}mY$tQji$p$cZ1Js(6z6xq%O$Fb(WeGX#h%4pcr&c{sNfC#G>Ae+7=_e zu@+QI4K4PCARp*ZAnSJXA1)Jsa)Rqx)@B$4^p(9Q6=BBY*DPz(dIYTKZOZIJ_MW6j~X`YPeN6JwQRwY&%x_IYga%R)$y)V9$k8>ePK zKH^M>(Rr_AI0ul2M_5B)O^*69mL{>S;oDL+_E~?z_b74D55nLc8*v8*?_Sr)jwx09 ze@UJ)XFDq#v!g_Mafr+q7CMcn~Y4~aQcQ1D+gHrEV3!IXb%m?QpW=-p-he6VT zeS}OwFGwTYqA?v_GaZd_3jd5Az7`KREOW`6@x&| zKru|P=OSE_;>|r*1^q?mMf4IGE_Y#}Fa-gw+&aaEe9aG(WSycfAWCeM$feL<-ATIi z0qCH{_#II+PMFZoP{bl}W+=`?eRba9)-lWISxieX1vLRSih+y~CMnL49N_Lbu8!LQ zsUVsAiw2OqjjD|PUQh^*Nv0%T0e}WphVBP`;VHdT>LekEK`IbHZcJFcn!*@*4j4FT z_&OW-HfQRXOnz@d9yDGbs2=LvBgzW|uGM4dbMrpa%l2M4ILIYE0%S^;J{y=N zJ2s_Q?Jbhw?EKQZbT z5e@NHPt{6@6R8|9c}*`laCJHhuo}!`oZAY?XEut7-$ICw(EuS1p zY$hEP5AasV1ye5Uy1B|ZJGbFK!E54anPwUk&S-w0uo;a{-R( zNnxpEZ2_XBS!LeB693p3KB@c^JwuKtW6+pK;P=|fH#VY)!q83rpV4l_nB~ZQ)r)4K zpRHd{{-!*a1xY{AB8e?1uoVu!I66q=U64q8$p;&sJ^7cQyNM8Nzz> zF)3A3u_YvTJIlZzTFr*6{Yf~43)I6FqGqM*qMKT}w)UfheyqN?H%>|&{tQ&3Rko>q zVeISRoA6)rOVOlICL+}+0uNiV?b3i?fk*)Y0kw~Kdxq1FEGit@Muj%@D=5TP9OS-D z7&o)S(Tlsb1@Sj^e*4tDAZs%!q~EP{!A9A72?&J=)@XPdAx`wa_jCoy0mGb&X=B$c zc@cC3l%=khU6$@0bxiG)itPEG;4}=h5qG03WSa1`FF-elfdDA(itN~O(#>xYiDwi} z*gQYhCFSm`PuMMh-|2SjOUvkew0|V;i@&0?T{Z#C>xo?>#i`&DFTkjV|Kf~nQPt=a=%K|AZh(G*z@7|wF@QZlt0*w)1eVEYi0cOfkr6I(67XBp7;JY_5FRtz1d<~nAOYz-&X^VKVE zInq0Jb>#^aYiCwPkrV$B$#Se}I{T^_j(c8(`RI3d2%IA&kYMgw(sWMaw0rCgMa8Ni2h_ zar9l`@}V2i$6M++TI8>q_x>0tOM^tEX9sf{bi0l;$an0we`F` zm)zykI)b@>pshpW<7Y^2&QfW%GhIHNPGZ61J?TyO0CNfYGF3QLVT9J$UXZe3<<_Da z9l7`=gHoKy2^W)6xc7|JbCHW|`(l9X_ZCrsqLi;e@?-f7-WOx2M*4LA*I^6K;vZM7 zOILVzQZE$EAMI;ZHG1A@-N|}@*h^pRkQAtW|3*>Pz;6XE<-fz~$gbSomabrOY+>`v z9%6QoAEj;ZMSGUrM_hT4NV|oqwN_fDiXHU3(!5!Lq|t-TAwGIuAT9;&T1wQak6fp# z>TtZ70t#_UuvaqSLrEFiZ4DP~5WhObUL?Y#>>|QH34&vr&U1(h#*@N=;fzOZtNg3l z=+0TJ8>wX(y9V@_ttvX-UB*_Gp0S4Y!ERRu6N`8~%#Q1lH~*oIM9Ec9#S_&D5Io7SKR!)g`3-&Y_Bmth+l0Go!w`6A%otJwb z;%{M<(nv@RsfP(h58Jd!d1d?o(syEcVAZvrb094}n(${$oJ5m^Cr$!q&<9fXf3XCJ z)kV-n3_xZ_DG};a&7bWJEG*9)JDVi%Ac8(l|A*ynr|~#dPoihieI0nQ%AEwLY_VlZ zfx~wh?WY|A!Z<5_FXZ2Bq*S?MoLeo4P3rX4ms&u0;tH&NN(W&Em$&+?xnq?uKUsZl z5iZ6K@g)ru?nqk;?F@Sh>+Nt9f!kSQw+$((cdcohycxqAMqiCL!i_Di;i$2o+6xVA zcsqXbTb+nt=!^K8J|VH<&ckVIkIB`Z)KZA_A@2oP9j-5$_!wrVX*iKofsSwsoxQRL zu#dMLqgF0!IW>axmiP=KKk-kFQ(wzt38mSFvLlIZ8dDht!K^XwMJCtAy^4c3ZN%op zQ^O;3IpdUNUI+8@t_ZQs4xC~u^YOFJnAZfbFdN23oG>|*^>rh8qhFTVqk{4gCxOT2 zujPVz^@JV|%stcjOlnIzZcWR}#AC ztcf+JU{kF_uGcqb1n*qfOP*Yx@PYXnQs>xgJQhe*o%Xmt+0PKS+&k zf`~gwua+r%-*3@OUj`MM%B%MX&PwjDsKNlqeM~IWN|5&MYXXo@vYh>4fCv=sb#$1l|A8y3};ONMR{UW2+ z>7>-F;vj!HybyEsFG0U4>!OM%uQ}wpZBv|Ah}s4Mh3CE#$EZ=x_1!bQYuJBHy4Ot&UR@_nq3f}#ukQ%W81HY-B)|>7QDZxAi6gw&0r^&X zQ0Nl$`)A~Vlw$unYd-fL#P9oqj|{{Gkb=?rxtRIT&|H$w8Y-s}P(wGd)ty{U!4c-2_rZ`Ova$VS#XGqO9|#n} z3d7d(Ovav2)i2(VbfCI4BEX)>9%JOb)HhszgNy#dJ7`@G1i|T zBj(cG{PCTcSdAT3(dK2#vf-wraDv20&mB<^i3&xIvY(h{^_5)7*4Tv>EGx5tW3+CW zHlYjcRl%~YQky1wv>gGlmmdk3k(P06AJKhWkn*_NkqBk;ZVGJOzvS#c$yaLniN8@L zP#n&P$9qrSWua4N)^VB=9I~H@6#WYQOJ^FF5bdGdP<+pvO7KjXg%d#~{;4XPKRlbg z36AU^?RQ4cV3gggL5r^I{)uz)+P`A#62Ld+<&f6boZ?6HW_4h$RR)>=95i}1E#_oA z=t64(`lYXi+vrg8t%=ti`}_QV;d40|S%P~rZj-)hmbE76PYj5K5_Z&c#I}G=<++#R z$GyV&f8*8HSo9sNCQknpyM|;lQZV*)s>!=4CeG;7kNip~U_a>u<_6bhKb^|)XK`!j zC>D6eNt=8`4m}nIJbwTOI5}zRjcAG=b6?fn6=uMVYn^-ry$@%L%fg83ou2#&7vY)2 z_LGE-W0L8Vo>PDMEKx|E;!o@#2D*yxm9OXUT**L=Sx8Bhmzu9f3!iCy$)|UF0FI$E z@NQ@$PAhC!%SKTTnWVoE2rIqRDS~qVP3&hu?nZBSAVI@S#q*rKoWS_#DD#vD8tOBq zr6BqeSlYyubAUFEiRFH;;^Jk~3zqrX^CVqaa*cWL#cXSNZXw5|75sFOZA##V{mB@L zq&N9MZ1XUGhHVtq^9#vl+3I;%@sAD6Es!ocb#=Hu1Kn^U6kPn z!NS=>@#PylkUEkslODyy%5o8NdeHoM|80UBs-H=M`$e>kv|zYOFwpGHVb&Hb0n1Oy2Oeg(VyXR%e&R^Sbtr|)PcivRx++6$ z14(9&#j=1eM*Fr%foqKYNZS!!Y+YyptaSRZD3OaI`y)JC5TCMJiY2W03&;{x{9^Sc zqC`Iq!u?Ugl3&x+=^A{l%nY5)`&`VcR81$z{>bLIVlVf_K9scOQj93XEe6cs$&0gu zJh-%X)h*4nGd3bSIvuzhkZiFSflmeUNF?F+^<>2$M-CPntB4D~@;Q&xLS6v>JePaZ z1kUg*n{5-pI!HZOh4Hai-*^mM{(e1r-@WxVQs9qqp3rx#3^F|j_-qPLyqcOuxVZms zu(#=&=vMXiX~pKttlkElA@j;C=R$Cm`M6GqIUqiYMD7(Ib^9*jVvnG9k1Lx4bWIrr z7=L-mJ?ugRU_PboNgDQl*TOqu9p9$Xtwle_;@r#`vdBj?jT|Snq~*o)VUbgO7rL-G zH`6Zmv#I5dfD{6;dQQKVwSU-zXR%P7@9vQD=2K!_;g}2{1j@~36k)^jvL?Bnhy!arZD(GqrzVF=Tv<9XYSD)HE=wNcsU`ubd1$m2DQ{+@_j_;fX&MD|B~8*c~QG zZ1ZRt>*T6_b;4~aXrYtIt>?gi1VhPA4ym3+aYwdgKlis|z&?Vk$T=u}vUScapK?q$ zZpkH)4>vkABeULzcW2Kp zDSw0Xhg?1wg1V||JLjW?@;+IAkOQn^90+MnS~|3}tkL7>Im;0>}=Ht7q0R z&3vN2|JGn`7lLPPCr^MR+%p2AX@BN|*Plsl&Fn*wbDhxN4N1Ifb*E8wuIeyscPaJr zPywM8u-f@Z{2-@&Fz=s5BDf6To(Cvl%f8_>_%|4}Cb${qgZ_y9S1v(RHKg%fmK#}Y zmhx`TEt_s<&6alVwxIr3_uhfhW!mHO7pspeVTBv=%eOvZTm5UbqP9G zI;07dUSIpj4FyE6(1{be3)iN4LCMv-*Y%M|`&7jk3CFaJ0_KR=K?-e7L8&)(N6m2a zF6R_L^7R4ALzD;yeZtC`QEt=$&0`265ct^dg}RQv>DR%Pq+aFw^_}Km^ll}-eta`P zu3!X~@gMa`7YpVC>gr~h7b|eV#NwJ3AWiYKoFv(OvlitqY&1-ktNEV!(6rzm61lPR zvlOa-SBWDKE*5dk57whuFYkM(TeJB@L=S58 z_FKi@lH)0{Psu zL4a}*)S&f)>^16k+tO~pd^FJ~@LOnokIt$hFr4zLPgz#DckiX{&H@`0EF>nxGd>B0duzV9-b8rP&R?)m) zCPd6v$RtIPq^ZdQRl16lRdv(0fu>@9BF6n){v1xk*n7*K zl~_W)t220pC8b#!Ix_P;xR76zT@K1y2)6$q&kN$B7C>SuQkgRxLJYB8f_6I>MSWzamol6Z3a5ENRq9X`!zy+s0csE=wk6sw$_tJ>GMT+S*rlzaSf^6`*+ zX$zUN#3}MOPPC6vL6`M%Lmltkzh~>Ta2qS$r6!(5LGCtDZjTCfB$?}qU1c@Med$B& z28#ciR8Du>S@Wmz>>8AZ(P|&%C5dr2(oT;hWZ|OX<&RtbfoWXz1!coXZ7w(tq`N`D zq$+5h970#od1~24xh%Bad-7syqwop`v`XciM7w>c4YE9&SY*aEb|U`N3=)?Kyh{( z!atEtlUU7yYj@4a5<`_MPSfy4kD~#0ZF5k5cdP^8mIQsb$_~Qn9V;GsHKN>B*T%x> z2*d=1zoYy#{vDVPTG0yH5^a>#FKU~`jtj=PHyi7S`!0024#z;;3DNQmD3pn%Ghf=u#1tMyRjxn>@b8+{ZG~R1@=`*gaPN97;^Gi zq*xL|;)Z{n4;tSpSAaJ>>I;kztuWgZpDf9L{m44T6}DGSZn{wdej&z1eRh@%2UFMf zdt?d{Hed|MqUM>skN~BB%AyI6pU|uDINstUjs&;WXR~K(!|YK(ILn1Ux{8Sm;%rOX ztX}*S71Swd93~Vt7qDW;RX=kn?{HBDIOM!@92WJA zACq;#x^2^^EwZ#dxB#W@@}8baV85J;jlHi2*pa4kL|t)veAyQNgyQh2m-qpuGupX z($*`kfc8K;Q)Of#ftMxj=#xHXtEi!w3@$?ER}FWEU2TFqz{Gu21ATA0c>BVv#=cAu zEv`oU(tTmPHks{V0bm=jgmY$F@AJ^ELMT7aO@}i+SmKcq?Hni;HCyl-Qg>K}J zqAZLOab^fshU(r`>ig&GMUUosP3XXP^NOutfgt7 z=jgivAoEh_IZUGt6y5l}nEcni0(NuaMiP%7K;lB3pKs~uEn!(;&B4zt{N}_=+mcSw znaEeuWyj+{x$S}Z(zb?)=7%EPg;IEPFf7Igsc$qsuJ;`GhV7*oJPOv3Cub5~XsdB- z+7nIP1v-0uKiXX{J&7PPi)o(q1l2FkZhP0MuV9=vl=qTAjb@~HE?w;Jd^VD9{{doe ze~I1!s3UU36bRgYg4>*uFJb9wza-A#H|9xp@-oUVotC(C|8uegbw`Lf?v*-{bIgn| zDQ%4@3>d+K`!S7ag(sm4zjvWElR52L$e(l+sbCmX5{Kza?%?10{9Cj z{zBvR5y^0VFf~tEx&Z?OG%!&?vRZiXX>hA_D7i^!g-M5xMWJ8+&s7*!Rc-SR@`%^X z_D{iCR@EEt_2}1=G1#BjHy7!Tf}O!PN&Z@KB1(9gE;R)zs_fn_d`dzlo!i8RS)}%9 zVGnTMsSC&|=_T0@?OJflAXZlP(onjiKRMQ{LXmazOH|`Z@LtB0O_ENaL23nRL>868 z6`~jX*?b0lN6KgK$VuiWnoy%|)uVvR9`dei^mRZN6qh10&t#>R47N=RxQ&`wGNl1E zhYmlQ#D33u@9uG)#xR6BZSu##O3i0tfCMibX&x&fj2^jbEmfrsLD`76=%c;9jv}oj z>6Iy`?n*{PZtQ6qu*tP0wd%`4y-QsHYYG??dJ<-Jcqs4oxUVbMIP3TyuHkd5vhEQEYEm z7$tEwySsC^I zliL|!vHMB-xLSK(8r$dy|3T`;0--aih&}Nt^o0D(6aFj^E*97(oM*2do*Rxjn3^n1 zDJ?I5B4aHhY~MRl8h;bWCGePXz^J3$6tl-2trN*UQ*u9s5~~I~Qvu?Dr{I~}cnHr> z0qLta-n9=apjNQ*sOzoFGTy#t2W5YX$~;`hH*IsZgKernY&CCWcq19uQdqKRO|9#;gA`Qp|8cXgld?h-8-s7Gjk2St&l&YB)-)8609G_(} zj{YUX7X&JzJz1@JC`B@)#0!w&ih16RUD=9Mg9POzk7o@;N5C=c9x%WGTsWtm1o)aE zQ_0?eEHW`On;+QR8}luTlvxKD+#8Iw8LneRKc>N9`Mm%|$1kYWu4GtM8Xb2eETlVC zX)OYAhL+IDi=lBSgYKhBRNnW<=(nVUK8jjN# z4TnRzhGqbA*nv)_W>|U3BNp3pW^JnsIck45wko!It=*%H%p+u5PEi5&-YRm2iZ%TX zc*q1LhYY5PvC3vV5hzEl@sV#!w+4TShc57&reiq{s=aPwktc_RswHSA-QDhfR~b0a ze5V}=Pc%S-!@dxgrZ#KwBozUwM0?_XQ;=Je2ca35+bp*CwBo>Q#LOyTW=p$Z$oW$9 zC)gHJDtK^^G)`7t5K!PolceqQr`peF>ArS8p7nIX1=mMkpXmR+N9kVQj2M$8A>U3b z65DmceNrLJCXCDTY_$R)DN|d^i2ct3VXaKkrQ&{7yAC8r9YLfp=J=b6YZ56%WM+xk zSt4(H=XHk9F3vVr$s@BIRLx}evh%%<_Y?wU@%?!HLy(Gy8znw$!rF=1RvejJYmBpd znX~$RTYFb-MyG4pKj&Pv{F`;(QYC1teCs&ugRF!c{7Ee#_G6o#8Ib8BZPLTBn(X zccr!{$_h(r7-WDX{vOb-5J-&F?lkTSHpJ<|#=#vTK}IhaH=!wFkJGCJau>4wN~dp0 zs_77H+FTPU0I!DF&n$b_U9_E>e3Fn8w}MUpkO}vy1O1gI-rX!*2FrAaW^Y$W3lxs} zXs()PPc;^&$h}b7_Zc~>y0CAGK2f+Wx>w2FZHWo$lS2tTw{8&l>b z{EOfe+>Zn&sCX48lo>V+zy&vSkdUTM#L#~Pu@h5yswc2 z8IkbmBiaywfMv>V38jbqJ+DuPlSZgb+%xL2!w*RoefG9rqt)6@1U)7!IATMVsW!He z{m=qZG`cfeY$9e<}^Wb5X)FE`-KdGFPffgH8onwBov8`P>S3I44uMn&3u^YS^=x5-Qez~GGU)7^F~i>;O8%4J61R~eD(&Q zB?(13d==ssbch-6y?G)i8A(`Hhcygv5p3u=5F!yA^xfWPI(#^5n}XMlH8WPe1mQo6 zD%8S7erzKh>E#^U6ed_HIo+j=8bEw^K~F|oyC-+ieZ>CrGV+5FwW;st13>bA*0=EX zL4OKi!)*|!b<~fI!;~xUN0m{g-46ExC64XUCiGRuIM)Yrp~S*@p$m3=Ax=0V9X?D@npQJv-%`)!vNHl>P$w#?URmi zb`YbV%~Xu^;+2f&9e-^ z`xkdvxDoLG{PnLeT;E7>gf;KxpDzRk|sKRH#n2y4<#HnxeVUW|2ABq4$^v zjphU)b3Et8@P)Un@|75be@Iy*gMP+ag4$8R6|p8QOkN_2Ip_^#yfuDB}TbD2kS z`e_6JU=SZJn+K>lUANRMV{|gC=&3aJ@bGqdk1x^- z!Vzz!uN%zY#NYqD{P^N2Q$nXc09~|_5hd3l%$uQ%Z`B# zI9<(+zT`&%$dB~?yENz{&@J@^pah^U>wN0Sw4JIp97_ zhJ4j7!rb>w=2dC__`z8lJ0Cl@jP_f>L(fM*CZ#tWw_&Z*;L*UCN3jGQWb$4u@b&PU z6(Vf8k?DkJKHe;@oRJ(d7r$^iNy70Owi&MCnL^PC;B9^nt&_>K6{O!D?+E+AuoT(b zQqC+^!5~}ATobkQ^izD9)R*8smjY*f!}l1{jT{3DH@j~ewtCyt;S@4x)6RsK_)ofMo*20{Scf2>XCcQick0z3QJ`icg@KQju`2|9K?lPAdcEfmrN0I>MLb?`e%b zo`Mo@nEUe-;Y#7~6d_g2eEYy?DX;SzBGh<<2MnI}LD1CDqS1djbEwhl&%I(8Ns+B~ynW29Tskpfzjr+Y;R`mVfb+tiAtb|MEVP!~?*1c<4V87LHH73KP_A_C`c1d$2= zIkM|j&WGa-RUl*#fKfJi8UxLx>Lh1pzgEcHqP3{?h)h3G1ZnSd2q=K409yhO@~642BG&8t3l zNbwjFTUr`W?dj2l>UdU4;Zi->y$SALRepw6vGhuJ@-oQwSf;9=-ia7Z5m6 z9*gB$em!CWHC`iMJIXUS;*mJnt6KpL7yZU(+wWKC!i5-b*@D$eI8u!Y4N*Nl&~&%MZcdVLnohsAr>XOf_(V) zMF8td_ixq(i|(AGhV3z^7*Gjlo4f!_sfSdIr2Mn;yst{s(D@5N7y6$!$1Fdc)4Lj147RI1sFO3c@&1Zi$A8-PNsIO5nYE6R9Rq14Pi*A@E=1Y0g;QcJp{g-Gc!v)HLg+or6%yN5?6 zDu3R-l)v8mG<)bqh+nT!ssC+wv2z8=sMlMFWUiHGrQ03u=~yc|dc3JMnVdpRa=|(C z(b^G{)l8@;Gi0^-A*Bn2FqI@#q3d2Y)#Mc>yHV~+9G zcT5%DNJQTmFe^b|G*{l8MD2yuJ6Om?cjD&`y#(N(x*`P_l)mS1z&l2=?)5LRqCdj> zZ9}2YHqAF6pqnZZPFz1upottrQ?<|o9_KlG|7jnmtPbVKxtqsD9v z5T*yEjF;=Mg|47fwc^uUZ30Keu8Zd@T?$}N03A{3t5g5nP3~LRUJ9I3;o2j#pVs9xW+Y)d2bL*w zlY^P*93WysqIJhIR*D{l9KAKl>{o0TMc;#OA(>@f@!{8wQy1o(4>nk83T*}VyYZCe zEcl!;eU3O&Mjx~F{vS-QRS{)-^8`eB^saQ5+is8B%L!)P zJTgv;7HB{8=oHKv+-XCxRZh_s*NM1$Dv@RsOpeR!ajK&~I`~Rd@TTn_lk&`s(J#!> z-k4;+3M`79^KVTRW67FQVgS)BVyMdgAKILb`Ib)NL2u7Ye(|Nmo^V!7QRb{z4D4a8 z$&>9DesN3{uP{#N?tn?~Y1!R%t*|&x$Oz#4UZ>v~MZFMzv3_+}2$@XEaidl34}i7@ z^$BDvI4%?&iQg7ar&;5-UQkm?^qX=5Jcxna zCad%@=51#~s>Fc`qChKrjXirWz(Qf@oEhRjlQLs@R31e|XXkfB`#7|Zlb?s`dmeXZ z%oY3EHPAf&pAd~>)a$di-DXqw=5DHY^44rn?rvPu2=AQEAAL;&-P1vvV|!Xy3a~|B z6#&+14v6#~o({f*+LSDy3FV%eU@pi{7GCFuDu0`^W(t#s;F~8lL`umjZU;(-gQi_} zd)kt4J656QIL{M6e+Y!O`01P_X%3w?*Q6sxyyYg)QCrg{6)Fnrv$X{`N(OF84`s0- zFfEO1N`WgvU4(TH=57`w7}t34`P2>D4*KP1H~@alPw=jx zj+(-DNfx9@QxlIZc+l*MoS<7wCM)fr&Rb`UIHmU49U@tj>r_EQUUtCEum5n+l#d9b z0H!yw&ae?F+sLQj#WBQT$B0gdDZh{@(m_Y=oDFO>Qr#3V4&*;=%&1&JAv9D2aDj`f(yi;0>x1|HnOi9@u#oapi}Q7nW5T1Lwd^) zV2ZG=O3)vXh2!G0HD}IrE0}166kq?Zmbc-2&7{0}432 z4Pw7)vd$gX%1?8nE`A4%o;-`Z7PCBk1Rx`=Z{-rOzuId;^9-NQy~fmNxX^Q<;MF8E z*r+)Ki67o!3MHc1K4($xo$~mlcix#d&KFB_Z~^4Pa5Pd)A1izGPM8NSw&b~!^##aW8u@K+ZP%*?Xj@!n>Z!bh5s+lYse=HBDPTa8 z_P{InRG1}m{)edG{4(HcqRx1xsLMCAJ5PpW_%C-l4(9~6Ot)y2mCu|!bRd0-FsxLQPYJrPTf%nLSf4 zPnDEaNOExB{K9L0D6Sf{!OAhYaAaS;sZ|^2X@IcT>-LjNet_d2Vg&%PZV&T!W}#@U zr5-TOuQ@AZKtas$uAfN;aF+XQ?p5|a;?O0 z+U3l~4ZaT;REZv{bWTH^{bbR`?f#zN6wa8vE7Vwi5wr1Rvpm3Of1DPXhZyM?M$^|RKHT*Vsg7=48B%sO8c9%kuJeZTSfLKHQAlUGFzE#q`D%@K6t2@DCp)K4I9fds2fYirS;^1qbP_58teutnOwnT(nZ`}|^;w-DlR$Put{GDtM7Wq}E`9@5CKIvS*L zpGwldCno1J;8W=6E+%Nt@_tCvk=fjWjGQiiKSqv78NRC{V)c?b!K-3a$z_}l;n}j> z00_~Nu}rMDK(xRl?#MoC0tU9ztML zIF8QhJkM-LbP70zO&?#M7b?olqaf6Wj#yTsicgfN@;>XcS^O?Qus_@>AgcY(GY7ai zfY4u9X(_I=wLrff8=k=ll=JCLh$5YO1{J^~u`E!(Wb({w>V|^Z6|74V(*Na(adTJp zlttVBQFM-aJ#_iyL~MD4ds*Xpd6|6!mJcd(X`~Wm4I4L{!og2lBz%;p4*#v$(R9~h z%Kc8|>qWDbl=Os7i&JU|obSLO;!>QwS#OMbQvYE9&(F4Hz*XvYxjOE^PgVl;v3?)` zRGgETYep#^>bAP053uiLawI#8dI#5B^5Z>#L!2uxSVLdbt6ks&Jes)q&{3O2eBDQJ!OjI{md!alW&a2*h z+xM%kPmK?b%on<0#dF8~J4eJgT13(~Ek9IMeIY=wmYEhQBr22{@g!B943YXP1dxNr zF|}a!7bbhw1645$*^j6E?_PSh$=};w;bwhsL0yp zfEhIq(mHY^hw^d$?oHtv@Elcy2^)$Mf0>Mm*N5b@Q~{dE93e+lt~9`WcHfF9|DV>G zSj2o1T%7iL7IU}IZLUeG?m{hec@XEPUhzrWR}MvBbSX+dFD0FzZ#@03Bg3&QU+;=` zH?4dNU2c=l$<^8r9$?f(E#T9W#16nW)7d>fvSc{q$q~xJQUs}d8@h-8~f$>612DwdiJ}11stg%GhH!@e8E7UkSLZAP@3@;^ zbz;<7ktaT&u3M-Nn7Lu&n0R@sh3zJXv|~r-5nS04eoH4=6QlIzt3g+?1Y_X~Y$GN( z9KOce?6zKp&C8H8wGb{dRMR4xhG4M6A-z>&5LUU&pJBSt1dC5p6;4Iq_yggx@mCnp zh{%%SumE=0g(`K|$z@II(9CjOdOz*8%BHGMLgUy8oB#M0=U&k);K*Avx4b|>w2E+v zkv4SC5@iaQK8;;n#dVG2p`=zNO|lE-)XP`9L0Xw|cj#r3haDf)#l5m~)}`bgI4<|A z()vVGmB3fxIx&LxMF5akAk4rJP>!m%>XVonbh5M_=j5}tb?P4N)%_LkXn^&!k zaG@xMy+a?pxZy=5mP#Z(X^9^x8%dWucK^Kw+tjZFAsIXzJRIP-{qk1B9=>vgvES!P zGKFk!3Ri@B)4|d7qtx9Qo-AlLAR^@}84|zNY-9GC2S%>kC?~-E)ywm&x%h#)hx=OA ze+OxMcS!u+mfC>6{|?jUJv(lBO)6s6UfyrZLb!bl*msD+?1o=}yD>*e7o8UCh&@BF zT+*GV2MZk1>z^;d&GaC7>|4fpyTy7Fs-@A^2C{eBj|4Z@hmjEO9N222tk@7uxaJ5Ib>jMRpKoJ=$ z7akEXjKJzcJ2TlJb_7p5XV!g_o1A=~3No9M87bb5wKGZCM35BrO7xa)gsLf0AwlZv z8Yle=?7o+@$r%!VJ_x!3BA7pYHap!*u#vtE?NG*ljYj+0t~dLP9O^Hq-h6Z8^nH(t)tOqVbC8?jH6P z=fvF!ck~IoMvq3*dI_Cnk|5M;p(c5~xR(>sWAyA3lm36d?=-&!&i*WErI z$(+&mU_)}_N}z=)9>b$3&QkuVo}b;&JQYyRg8zV<;~~w|Dqd~N7_53hq`Bf`fzLPS z@f%1}RY`n~cX70Zy?UdC$OY@=gAQ5-X$VH_BR%?f{Ay%{C{@H-LYww;=+yAQub^~@|I&Jixf~4 z_wIuviw@VaBSy+EE4w(UUI*~ahdesEJE3&Q@ToxM#8=R|F`Y$Sf zkFqwkY@SqbYVR|ODfX`-p(Xi+%Jry;OM&w25-US?V=;?(Y>s2POSh8%)WHo`R6=*4 zs99pLHBO25TRe9LIg&^Q^t7NVlKG@@NDWZkti$9fE}|%l%Uz_p2|q~#+xT*J4orhq zY~MMw;7!3Ua$L<^Uj&~Fw--68K$uHjtq7MWyt;C`BBt!NFwYY3nZsTQvt^ezHCX9; z;6b*>43w%7W=bvcIs*6WQ0`TeV7Ah=UZO=H4pLc{9FOABvu5vXE{qLyu8C0|oGH~f*hZ~nNNEpkH95cw z_Gi8UGzKI&teObK`-*aD_t6LB8<5)}=YfQ5QjXf-OMeJtU*_beAtkI7S1*S&G-30% z^!UJBl>?s**!4U|jF$6>Pv|oatsJ5yG^)}1-T=uB#k_pKeU=y(Mk(}{;K%`&8=zdA zg-KVCV_0Lg^wl;0UrPdv`|)MU8L3F4BNttz>#Uq9g>wo;zhl)s?_DUf+`BP=3jiM5 z&>k|Lf0+tL9uzyJq)+f<r@1urLjYhJ+za*4+Z~T@%oMfdXg&h=m~{FvFN>fo73Hz>|0SrfmRD@VAmcGK&mS zbw*1BMbtpUeW>*S{tG)WiiasT-~nnQg;9$w5<8)knlHmC_(=M}pxmwOJ;&bz%H~En zB=<(kN}kmqp^F`8x$^X7v8C!isR16f3RcC>R{@)F_owmRZ zB`1!^jqj1a1?)2i|HFnS4-qF^YB{`M+SOxtJ)E z*WgL+qbV>$Hu1*uvQnfTCQ$EZfXLb$K&*=TZvK{U4KZ=oPac`XZ z2l(=`0d@fS^)KTT!`65M{BeB2_!DVr-=9h6N|LCgqx7~1VhwVMar126Ir!u!9fIX* zOugz>GBj9o8ZlH9Zi}#(ZgN8AA%b3+Gq?uJ>fwakDdCz%`)k5mu%DzP3D#Hr>7$Ha zl{$0tz~rmi`8IABq+*^T2;tD~*PJfF-5FY%d8@~Solk!^%vy-Y%JVcnyNR?*kgboC z$sqm$tb%yE>u+of@oN({sZnWVhg@is511J7fas8@yEf6_r~j2C$h2~ze1`W!_Qg4c zU7ymZoep^6+Vs`EE~kCX($nf4_1Z?B-^rx;s*xr5V%L|-uG!DgDct&vxi%t5h)Ts* z9wWgHo!p-3>*~HshT;SoB3BHbJH8UV6_i#8Lm|vi#ND#6OETZ{6hr_Xpd8q-vOArt zJJeLj{ITLSKi$M9x{aVvX2tWip_)Jh>}%09O8>4aKgLIJa{%oG=n|Gc;gmcq>ojb< zd3l8z_!_poaAb&;N+l(^#7xK74&dS;RscuB*~=@@A3a z)^vS*4BC{&-is1rLeQf$b>=QQY53t3^KE;L9psjOiLO_&7ldG<*zLs_Z-G0V#1Fz*B3I zF#=!=P4WVN9uHkoS;^RiSip=nen{*4s1Fv>T)s-NabTH}Vf!w-(FR)Gr}5g;nS9ib zD`_JxFeLgK4vQD9v|_UOV6QI6;#EWrnXxB2UyLJYm9ou^-u72I>B1i4laMkOiUxdPFtQgS?5}1S%j{BrQM+_~fklPR0P) z{EsjUDXNt$o@X9rN$veaVaOVlO19um`>0Rs)6SFn{^H88@E@D9&$tg_*{mp`ABLgT zIR>xbT<_Lx2F$wppm0Smf>aLqh`9$Rrrpus90@ zKxpk5Z*~-FpRjz8A3pu=1gc)u!889oQGho?DyM^*=RR?Tsd6`91fx%c#9#&o5Wxm$ z#=UNDVqCV)*q;F(H6X8sP#H(hDZqNkoPz7*0((D2l5j_f##vhd_)$K;DGisjR2FEy zhWQ;tptdas;?1fxap5~X{J=votShP0#DLLAd^43O=LJE7DKVu+*qVn=TtaASG3fHV zX@BhBm>z{lhPBzak=>-{ko|FKNu}O3`4*jD1SXRLNes~}?q^bZR}|10H_yTN{bR9? z6du^CS|zw#C~|12P8xl=?h77bhfDMJ?I?<>F(7LT#p5 z1kQ+z7#rr?ij+TQh!VF*$RmI%IQTX@rFT>AQowQm0ZJ{Kn^gES?ICc7kt-sNx4)0+ zSrC|o)Urmp!S>v4p}AOPDAOA}L7-xP5jMU%ut*iY7Cx(_!K>&zoc#mGkW0_Rsq|I= zEW5-@z~cXQ6;)bh-ZA5=c*kOfeWfA*T;#+r50AW|Gm39|S|b;d?HEYgi=R4x(!Xzv ze?0t!BuXE-wPf!l@;CfDk4r&C8ZD{u3WV=t9HE2H=|OT0#_<*PmvC5d8N{m>hSe|p zW!0QPSX*Lo5>)j&2F=B>u$CD0)Pi!gsaY;o_fabOzhhf$N5#|!ssIPTb3oj#z&g}@ zp@pTdHEQc%eQ|7x>eg=pF?$)?Pms=~+Io#!VBG?K=yiY4Ed~`5YuYy?TSYK4(~ueU zk-NxcUzi=Y%Sj#(GQ*QOSV}+Ny3Cq^l!TUk{(X0|b3SG2D*njx&-T_CVeMZiV}@6j zPNCB|20yNlO;EUc2iubCQD;jto^FHP`O2YR3Yt-?lh#wGS&`r)2?P{)t0e;<${F(l zEW2o(m?=4Lok!t-HOaKLL<8$4S(NXW@<1{(QMe5EoHrn&Pa$)0s%fADWFqqi8W7G3704LY2P$`}Z5L zs%Axch7aU15Ec(%w(ck;ZP5z5UO-rdn2ekza8xQ$y*SZbL*Q|{c_KE;!_PkYE^>gF5g@gsWs?+32_v^XEY+j!i?-VR7` zLj}}ZLJ;JQ7m&7EaY5450u{Gfi{oyFE+E_*+^F?AIYe)9|2!X0SO1f<7hhCRg$c@o zU?g|`JWOV~BjD|1D+Vz&h;nj{(uYt7I0GKD>bvc;JNNTp(We2(w2z~=pv+h{rf z@UpJMJ3E&8E+L1`wXakOsdlKKy|x9ng8;rqirD9e_L*B!3;$6HBssdo=h4I}@*ps; z6~2zPxu;CP!4{O9(ZJvLXGHJyH9-5VND)SGmI2{D1?K1%3fYOq51Ur6XD7t=GVqif zxM)CIzPDLI3ie9%Xn-rCc6{yOu6p4(HhVwcj`PU=L|iWO!PxsvPzM_z5dckZl$7@n z^{f+#k`qm7@dkyaeuA$Yk!$R=UVxw~ng$heLr1KemW6xA52oTWcMr>+*uIye;$VYI z@M9nNO$=v;jE?GnGfUSUJzAJe6{r^gyuOp=mS=x&SW4?S@ZubG4oD>tDRbe4ol?MR z&wt(k?xm80nQ$&w7K3;4&1yz8vsiztb)z9*?tJvQ49l3WFz_v~Z-J|mF!H9@y~s73 zSs9j3I>0LZ&0q72f$aey1&*AB_*9I00yVvM}W85lTDg4M$#;{s3 zb;y6hH{8OgU~O#}n6$kVbbgeZfC@oQyLXl;0(rUuJ73I;m(p?ZCRuP35yBg=l4)VM zkhw)IztuBIt`#y5<%EH5Jg0=eO_Aw9v#pWA4v5JOnTH9J)KmZg-M*xnKPIa8(-K?}j2gYoq9bN_-67-cvhnu#4X6hm1Yk zKY9+fkyqx>r|FLr!Jd%+2>7FTXw;ylS4j@YA-nUzXlyORMV|I|= zUxJlP-V&#UU^As;&NXxKOH zWBcvDpAS&c?e1kAW9$azi%Z>j5c5{wR@m0v0qKTiZ-&)%Q2t853%KAYmYmx#TUE=8 zbDYC(d4LJlp$@myg$(k@H85IHWpVzoNB8{HKD^OG#-$sSBow`?8HA|6JTa-8WX1#M z593%`64JE`4a;lDDN5>dVEKHB=)^JR>ToYnRilsFF@`3Y8RT_TNo_Wg(E$_RC*iPU z4_#nWHP_{?G<d zcOj)^l&X4OqeUgmm?j*W5EWM1N??T|K(zdW{>ooYK@ha}+&RW~CJlRUn2+L&KmRR{ z3s?DBD3>3NkJw9_(#{^xA^{5@IR%msh-Kf);XfN`plR%3l@=`L%xS1T|3ep~o)dF< z!;!STmf}{yG0d32c=D`^xhoyRNn=@~p}p)aX!(H3KuixE11F)hWYtsKIuxfbUU2?jmd&I;4=+JLemYPG%{AU}>^-Ch`35E^L< z)3?ob)Fp(y5TrEcX&kN>l7Rw#HX~-YZHAxX7PLO@Zr!J^2)WNE*L& z9A2f?;kim$j$pHukK=}D8wpx_+D$|MLTDR}(RHtYzzK5>-I!$8mb#GYtcz%G*RxC8 zx8qyNgh$&?V7VmO(lReYk|%&`1ZS|;RAvYRg6s#%f=DHfAvP}P<88G|k6r37R2UcDk}` znnHWx5NGT#t~uKCP|hV?io7`=PY)jKNxV;KJANw*fT8v2?f3nlpLVA($?FLf?aO*+ zsW}tsRz}KlEnW@N5z?)UceB=EeR>QP73@&OVXXhNSr_yf5PU6)4>_^!!>-z zkfpdp{1O+4KCbgjmnMPLjZ7mKU@_LInrD_M{oi*FEOM*O^2DX`aCvey)p$?~61}g$ zYj0eNBn?K&rg^daw|}M9Qo*sg5DUUVSJp}_tUWm;?Yx*^U^46^ASdkgB}gF)yy}VC z&o;G0Ehqr7EnuoZs`NCX={UOiko(Mo!t<3UeLrhH-^H zD}ze-cq-gJqUg(b6~;KO)zf7uSM>L2UWbvi$)O6?3LvcoC6uQH=C z5o`kD8bEowRDKc1C+;UIpyB8(pJ=I6E?&YnC}_R0baU%Yrs0g^ijQxl;19vmZB^FMBnT_PMY zI+x~JGpR&OuCmrX5B@4f$e<^yIFNZrJcpRvmY#1&oK z5{;!K$8i3l&$*TnAD|?{uU>oeF@>`@sAXoX746@MtDSj=0Cm}rdd=_Cn?Yh(jVBWa zuiidG1ArjqXV}L@_v+>iwhhKe3mhb2LGlN6Y_&Z?+i}4y79haQmRf6x;Tzhc?pu z@u>gMG1v`ews46>`57F`afg4sDSu1Bfyy`=ez5W5vqkuYn~Z4HeX@q+~id7Yd!{8DYNko)JpfU0N~ z4UCj3%8QvzDCj2s1}R&dJPg_9dLanXjp8j!%@x+w+t_ZHJdT?cuX6~xKDg59rdV2j_2R;Yck%x zf%N6Vx~Vu`^ciFeuF%u>i$Vj8bkw=#-=8g@Ta3GanrOgFQXbxD?ROz zZ;uckE0B=$Cf1hDH%wf?XKHQ6UlPeRir_nmb~(UB-8Zp)u( z>mVsFAfa=a(KYidmUezj8jBmv%1tts=Ot7!Us1d+`9~Tjq@SC+WUtnmrAu~pn7oNr z)nlxZD`x@~%ODL(RkBig_EeNj4ifyX>;pn{)_`3yE)p|rHi&XZMBAuE&>F%J=&=@DgW`|s57nMJSo3Xg!#c2GoVp9PZBf?X=!dhKL%2KpFd0$7C|C=jX=V^}s@$G|U6`dHvdjPY#r? zG^-*H9t)*&7+x*Tf8RTZ_-khmK~Vt<79Rt|bbs@Z##>uMz`6d#c0SqJpw0?o3_Z3^ zIY`&~@6T?91vXYMLVtuhc1+oZutXFdJYb6s2Mt7dVSBGy^x9ZRyhY%CVu`o;B!RRE zH|l;x*dC3RIpWO;5N+D-|Je(~P9b{3*VmG&%IH=!+WzYkZlYkJcsqAA=LG8gzmOEF z?A3Xnl5hpbm<}iFpku<+@7dgKRb`R;U0Yq}&ZYZKGaoO<%LAbH{V;?{)GLk)9|won zj&0rwDTZLB68h`t@}rv1C|=vS0nwYdqChq-sq4IhJzW}cr4fRdd`LZy%1mWYLbBwZ+qCqu z3z|M(cHC1sKcQpbci{W+dI?vs;dn}UU&~$};0e_*`q)(xYhUsH`o`*j_jW|u^li}0 zd7;hlEtaoNd^L)~npAv~V7u;N0@139)r1PX?7X$%^<6yhv5`oSv50XCKpn04a7v%7 zJ_r9hEq`t@@=kPRJC{6=^rjsv zQ02YdFuAK_qXypx7KQ`?5u>HKHIhci*Nxj=??fGSM|2i0yl%5#R~p|6_d;^ed!C2# zFjLg_3`sg~lFD$@);EaVD!3C{EK&97Z zi=(55`j_NFR?CW9pXO)?wO^5~G`_#;>%FIID^__oHhb^(HI3o+!z@_bL%dZHjXgg( zf0op8nqD%m1YUZEJEUc|@oRN-=AshxUw5D|O1l03AFVw3%lyy|%Ts z#eJNsZF*%BHdmqfg;q0Vb?h)#-dMc%flSS=%)crWaNZOYP7gQ3+8_lnbyL6<8qz7f zquz)!6kWJ-#t~x2dfjt=z{ABRr#1ZtNQLWiQ+~eXTwHZ}`qJn8)x-b}p5kVLo=GMA z;5cjE40E+3QAoKB6xdjVo`u5NpOzVtY}KG+&rwRTrR9};>I3Mj zW}wmN&|DVIFR5~P(tk-gnpOPUnB~+&lORRsP}e+Xx1(q_jclyqIQP|b3`HP11WbwDkL8=fk+6#`S{BcEn;wGI@jy2Qjmz` zZQueVzZ=A#dTPw=(Hxg;`P2;;YX|LtY*_5|{PE8R7H4d1F*m%sGzMF>(P22%oJa!9 z5%nyyvZ@TBk8X}F9Ut>n>ZA9Up-<#rw}2L6>Fz!89UWDLk+CdQx?nevs*d zUFC>?A^7nh0%lr*`OX!m#=e7&Wj2~-e|aqS^BD2RwJipONQKf&FUxqKN!w#o?^-HZ z{eW5_{20zq2RW30=54|hZ+|~VQ=Zs0H|dFnGfkMR^%kLJSui(2kg(_jma^UxO>NAnKz`)CE$Gh&L7#ALeW++r-RfrOO7kc znU}bEx~qhZ*8y(yv7}v1@tcJrqS1|qwr?M^WcGwWijIm(+t>QnAn5+A0Ge@;W} zij!%DFi{n~a{Z|d0l5*fY46RgO-{=0u~92)V-yYMvo!uy;8|ZkX}`G#xQm!tm!9zn=pHv+q77UU?(Wo%BCg|3( zXHzA3&>=4$c}xlHnbeCD;jHez{I-#Ka(6mXT~Fu zgQ4*^vY~zp7Xzt1@iT6zBnnF(Bk2Blt&Y;^?^~xS5vd$?8|>g2Vt@$r4CV5SIBsUA zQ85>WAH$rXlz!I6ztmKw4b=-gjl~gKRo5#axV8$=P)-asy8*z}at|Qm5r-~*9Y^q{ zThMT)M&P1Ox3~cI&`?}iLi&_uQ*)kPvUy!hU2ztsQLBWM?|u|0#~Qp}Ox}z-C0O%H zuCbRRJh#Wey12r-^qVLr`fS`%giCQ{{AN%?>GA^ak`|_%v?2<~Jhqvo8DS`&&tS3Q z6msISvP=y>)4Yv#wcAww%QlUAMq@6i7uk7lE-=#v`d3D#k)Dar$96)J@O(>hnS-V% zE(N9P&2hLO$Nl(72Ayw{s0_>)BCZ1q#+WkfNIhWqcB4v<4Ne7O3aG$-h3v8dKQd8# z0kBTBT;LD-RTSUesaIapLIHTl#*{-!J<>6h^@kLoeVvb!JHOTqLS*J~E17jhhQSGZ z^r*kj#R9iK=d~a0Tc6SfH<7TnqR8yM;g8%q9=_+$x}lyU05J*N51jTpnKagu!GPL| z_xq~YEC7ej?=xHZ_Ss+6NL{J(J9d=~3j3hk^jGMAENtKMmmPL!9q=5baNsy4<%PF@ z6=OAkfN?-7dCf7lZ@;3bp9T$XQc7cE&!1=2o^M~I`qHxsJz|wVnQKPnY5yXh=H!Xj zV82t0Sgi#5ndu?RP<52p-V2%pGr2)RUV~Rc!uQ2%wWdd|P{n4D$3TNgbwIcyCeSHS zn|2*2)ofjmn3$_;SlPQ5DT5&eQybv_gKJwSo4Dk9%4v>DaxOdO0~mOD8@u`%w1uq! zXL31Qbt4u%!{l5jddesuaWwNsf}Oqy$eIR&g-24m$RR^iQ;|i3KPrF15V0%FIN22? zl$z9;d*{6jyITFX%FQTXT|D-XLFbOu=4B3hSB<12nuxr$ob1GVZ1^5WkMI>XIgE0* z0Xc161*jN~@I)%OTnZa*A_|uHMIa7Oc+IEfc3rLjMlF7g`@3PtJf=-Lp|*KK@mJA) z2bWQrpQ!V3PygVn?X?}p9U_iv=UKOTQ&_WpZK*4bwdm;IfsH&^>3l063;DZ0bqD+i$f(L@6;6rn8E-o~J_{k)8WGhi zIr~{nVuc-amX}1dd|#D(B^)+EmPnI3Nzw2NYUxr?0*VY&qv$Km&n9DuJaQ=OZJLac z#|M=55%(%xM?M%fHLM*xg)VEGm46n5Q}^Mtj8?rH4sohLh$cZ`K_N z6kBAzrn8h6fz~|oye$q3V09m%Tt0W2skY3qki17ahx6E_vr6yQT^c{vgLipNAcR#^ zbpaU;Yc%4R4(8kUfzBr>uIC5FEAFD)3b?>h@A!v&TAj5lO+)P8iR^y6BVj||b`gLe z_lruZ9{=W2QjL>%ax=pLXdtdqq{L;9OcNz}-k2SDYcV`HMKu);x?-!BN!1a&On1rY z<2}>75DNxDtbFV;FGMGmi zDQMDhq^#^-Yc>5%K!@eTW$ zpU%e^qS+K&9{t2D1ALOi4zHCTz1i%4#OYKkhPJJMSqjxk6SX|>2!Ap+?CaLmW%itY zRFPu|$&eXoQhWJ=cjV}dq~3aiiz(}H#~|rwd26-PfFLSLuk&WtBNLgY|LGQX!V(M1 zCj-dT)sl)%mz?oag)Sft?WY_W?fz2_{&|g$SPe)c_beQS&Q##n?y>^N_ZmEq^vee{ zMbo4*WydOx!HpJN5B(;hmch)CSB?*UewwFX&4C zut~OqdM^vonFIwNB*gWap5lF*S3iKW`?pfFiwRW&V6=&$x-_19gxe{5i5C7r1>wXe zs-d^IYPO9BBa}x-3t??KGe+ChNpHA758Y?cmQqtf1QC5zk)a~$^AFh1!$5tz0LZd>-* zW$&&=3N`u$ylp4)p#Np&s5%v=lpBRB9!8)?d}hmpYOhqHwd(t;KZE)(3WZa_kuqjk zCbO&jJSLkUniqA)O*%dBQAzK2I^+jr@PNu~Z+le*PaL7Ec~_~{hO8vcMTtV#e%vdk z`<2_9Qee*YvM;EzS3Zpy&8hs)Tgab9IUgg8l_>`%vJd9<^dY)lyiy4nsp=jgby4X} zzK_r0w|G|z;B%M4hG`YrUB~GWZG@1=b7gI+^6F%f4W-kPqmzm_K~9RwG`^XY?yo7K3q+Xz=svx zMpziM-F1>XWI5&bR>XsfX*B?_2H*0ca}niG=%YXEc3+Ehb#x&mgE+31l)+MwNglv9 zOnLo+h-fk5s`lp;mo$i{Eu5OWKVs#h*v2>S6Lbhi$8G5P?mwDCc^5q_#{mWVNfKv+w|0FI$cea$CA+M~YiI&c5Em zm|IS6!v|AXZM*}TiIe)6*f%!#D|ZatdT6Tc!U3FJ*UaW<1(Y{J+yMFt!ySsqfTyAR zs~kTl?G*abQC0F&O*t29ai)&9B9Nia5HGas?r zMBvWJ!NMtzp>G&_-5V5}rcl%7@5sywdM$w(y_tiieEiK>N_hWGn*N$pWjDkjMHFmW zry_q;MDVH%8nuMAu@L zjKd&_5?hqFFoL7rp;-qFSYpnK_I~MM=ViMy3u%Q;i7&)^f&+;Sar_F%xOa5ZSbrdx zH5&bAPz-Es=9LYDO zY=d}&?Z}kjG*56%zB+&n$fT*HjcTgY_H8GL>&BjFs(9-@Bl8=RY8%_@$Um}*CS-gT zmhC1q*^aC83}B{Be)^^i^@+dNz0w3TUZ+&wYHhx}%U!>cO4kwKVlpAd zHTs+(8m@iEosoU}9N)ulH80D%EXW(`m2b*ygWZ4mqP5)Sy)cdw+=yr$l2X_St+F2ombW1< zjqBm9pao8eWt~!Ou2Ncj z2v)rc_IO}8Qb!YubZm#wmzAFwP<96b+^1eDjnvkisFGW-rvp!UiU716bApTJ@6I*% z5_xMcRl=n}0yfS3N78T5h`sVj6fW7{5sGj?cU8P%aYjA(W#mzCl%`Hzbqm2aU9pN) zBn7A`s4#5-Y4*ZQHQ$Ta_$S?M%mu;|9%C4`aQjvm$usK)QHG*hOP+TKKk`+33zI4W zC2OLzA4i71Nden1Y=rp_ts8t~BnV5cmfWW)vDP+-v{?BeOzQHqSSqI3h=x$0S>j!C zZyl*r%gz|fqvRLR3uT#Qw05sfKQT|$0S7XJeUiS_=+DU!Q7=?JbNzSLQ*CM##!lVQ zp2Q<;J!txt(BA_pU&H*8W{!%$^P@evxr-~_8~}+X#Ax?S73+MSpC~`zpU>9uxqxWg zGMHX*%2cSUvQJ#cGqLr*xi}3j0lYz zyz!z9Ed>W@FZl5>XE8yUdQ3 z9S552MOt;T?atdwiOfyU6uG&sv2wUDuAV!*I&c2qBur1L?H3k3Ra=W%NS;WVdiDEK zX*nYyeae#|L{S`rKhIE#CUjbOIOyAYlqi~Vp3Oo5Qo4>;(SwoE+4$qlCx&MzpU=9M zFu=F}h&4b4@tIX#@`gAq1aOb;ar6J1oW2ahDNgSzy`+|C{A`xfUx4nVA_T{QYwcJo z7e^B1)7CI@o55~!e()F0HnMULv93jr4b8>{hWf8eA%I2v0l*E5eJl&}kr^vB99p>?hX+pWH6pp@g|hemL*{c)!vo{8t*O;^Af2 z9aZQAF5KXZq(j=;EkWf!xd8kxF9W;6@EefhmmY|`PJovZl2vkvHy!xmosRO+BJw}l zPFs9zaGB%pCtmSKOCWkIaJJoDhV^Mqt_dQLC96@V9>uu?{BKXR=aq9C8XQO95I-ZY z|MBq&u$yfyKCek{sL1$j_jrVlMbG3OkegdmhshJhmbQsMu7kIrf@~TF;b`9}Hn{y* zua|C5pjsI7R3*gwd{?65vWZHhixmf)hx&~e7?`@x=Gl}R-8IT}iJLocrBGB*RZ%R+ zp#(Wd`!a$5#Qg##t2e-fG|P`0jf+R#x%Pb-I_UVD$b?I9JNr9U;woD^!IAgko75~+Z>v@jnTt_DW0*^T&(`!&3!dzW$n=OxBitRILFtX3T^ z>1@_^Z5W?`T!+Zxi7E{qqJGtt?kOGN&DyzqBsnIOR4RZ(c^Cui+pZuTR0wh;SA4_0 zy7<>Qn|eh=T22Yovg-X>cO#p@DAe`l0dgTV7tsdtS|G!Nj!g`XY&gxxOS3PJF-*{s zy#Yk8_!ut##u8`?V%}fQ6aPV&63|dE|1*-XRX@RutLMB$XdArkade!+Yvk?jWy0v) zIIyYQ!G;Itc_PiS$o%E>DP;r(QdFDLy4Pg0esQD*rd_0nkleAFXYD{)ePT0rT}Q_i z4N~k8*xBj315cdQfAC8+h})JFUG$O3Z-wye4(Rod^AXOs%vQ7md2Xo3um>JBSd_s3 z=HLN0>zH1sjX6Mf6E=YsAYX-!NEMytW%9z#UP;zha;bu+AV?cvsD37J;Y!Qqfw&fU zc^C#UD8Nc`1H?@{`ej9=TUuXtUF@%PuK~hZD;_`tE=>g3mPw%Xji-Cm3O1vkYJNR~ z{gDDcXV=M1bMbLdB;lsG0%)P=yWnHHjZn>QiCfT77L3{kL(p~5F04+o9?_hx3nbqi z6N>Eda(7YSY>ef?V-6vwS1fr1I zJHY#S-C**6NE>;1&L&>QwroGkVTka|4;2ynsZPkNceCE;aPk`XH@z#md3F!}hJF?;5_+2)kz%I~hp6AT zl1MToQH}wcOcqqUcj^`n)BWborusveO(UTrT~*?_3Fs0^H;BzXL=>%HolD zobYc=Cl%8boB*QhZqpGhj1Gt3h%LY?R@Ml3{CLg%r;nVAf_f+WW+XG)(?&Aj7l>D} zMnd=5b5*(}yF7KR$a6}ZqM@ZG8@D}Fx8ZZDAhHu^nnHOp+|9kXXYljD>YC$%&{*kO z^!IF12cgc>U^IITaY~2wL9BranKPAL4&uJ&>M;P|qubDDkKcxiOb;_)%PLf!O`$J3 zt|5xS7G-@As70r-*=kbnW&p!d`06f{UOX_MLFGiOISA7Pv;aeWeoxxl?TT!`GdNO2 z%Of_D!w1|9BT25A?Mh`~sML$ovAVj3L8VC~CIx)-aQ`Gj^t-wnOB}nfc~OwW?G|@U zvZneWudsvqhj{7AaFp&j_!YH&OO>6FgE9^!{Q-nM{ZT+(NelX@gZLYnO?~=hi+c~d znuAZ`^0hE6XAyW2rRF~atc0$~Q6X!76qVi^}uVwG&FDo#_fNvbUCyB4xu&XsR298g4H z`@xDS_%o_34vc^TEYa;6l9>rYRVI6Xhs-?0t}Y<8ra^O&mQ`*IXR$)oZD!O@>GP7` z_Z+byJ%x->#~K5$Uff~j{z@EK_*?`1Zs-KA^)$dA;n!#A>EPc&YR@)$_%57Z+!NoI zU4n7+!EY2!l4tXRKIZLZiuJ|hj|2Hv=(M=dRycQWA-!jCTC6i33@%(prE_sn*l)~C z!U6=KvCkz$wU9i26fv?|a#@!miKk_bjg~V8!kiCjnh7{UwxT)MO>v{OLqEGM#E|Bu z`dm8i;tur>FV-riwS3NO^Q78rEu?1nff#-JbI_svHy+1&#my|Uwaz`tj^&b|OZ7RM( zSI1olegrBTJ2AFOZR`Kz?;^V#7*S+!K1$l;J5ddZ=mzRynOKF*eOXTyXgBsV-kxcK z=r61Hy)}uV?!kwQg8*ywzISg&G|;rk#l?P#AJ3tZL~p21E@-Ple2V-lUF7~%wFz+-JkjJPGf+d{{t;Nl~ zU2G7sC5u^9fTBCdXY#9oO%OmSXk3Y74f0mwSeV+E0?a2YOpVy)G{yP!E0n(on{9)?^j1}f^1$Z*@%N=9*b(2Y zy0Rof;!>Lp(d-Q@7}7_PqgIpbZOhVg7EXTY3hzkRGMFLe*k~%|^~Rh1Uf77Z-y#s~ zwHo2bl9c4#sPKM&sI?5{)^rUg<|G=GqS9u>ratG7#3DmE)cXe2H0(m0ZjdE6E8$FjpA)^h7y7-0TuWFBy|ydd zp4Vi}6o9zIVdF8<@gSpVXL36vJg%#{LJqSLYR7&bh&>zD=XG-Tuji3H^XqVlz;FBfXR|{B0TxfNCy<(|k_i32- zB8~R#IuGzM!Drz9vpSl$*gqVe(~>66(CLVd)&5Q zgV)L;nws3)d3NNhN45@`6o1X=Lu9+DRn-7k!PJJr{Z<(gRtg3k8K?~;rWGs54Fr!n zf2!8zPN_64k}k5znDvaJUH%x?C-TA%IuWn~XZnldY53Xr$6vHv!cMR`Yj$N$j_PIY zn6GBBAIlvP@v^!;^oMo*Ww|HbH=%HA)p+FBz{EF3U=tG4@s6H$RL(zefazBeFS;~< zHM@7&hW60cN!k4~8`xwN-h8F#%7ks&TBPnkrvsWyQex@(a^<73Y=MYHP>k7ZyQibY zVF)Dmc)fqllOA!6KW4M%mmiQfXKJ65LG+S;jvdAI<3@)ckkl=U zLgOS$n}~G$%~-D}^aNqEjg*U#-wXW-zi{YVhw<@R>{(adb?(WBhL4dYmqRDbyODvL zQAGDO_5a@#;X-`7P!TnHYwy1AR2JQy5iUH5$9Ry7+?qV&)#a0GbcdS0?Fcz#+LLxI zcXw`o)n>BNi@yA>6r0)ut>wXp8!Fq^awbP0BGerYFu&4P*V#$0N$+GBmZ&T>9J-+> zdVb2-F!RA9(63zWIhE1bLrCBgJwsbj2`O-u5u0S+LjH=EvFSvElpP~_djit?8v!%z zUvxlAR~9EcesmK=SQ+;qdY6Ou?56&CVv~!%E=f$su%OukTlY=rZIiAYcIA`E7;EUQ zMGv{fjIuCn{67~>uMc&@^ncVi%LRJ9;mm>$@irNTCPyEPRr|~n<8?uBth>+F>kfmH zxI(}}r#)n2Z7x4Fp|AVs!1~KoGSbdkz^eOu+CjaIy+^<89^x`38;3 zEJ`Zh7~OPUOxCrzE8}(kzFNP~1%_XatdPhAuL)@W*iU<)Iq*TOIWzmBrMO^S33GYj zSSK5|Y)l%vcXzz5^gXjXqwVu&C1Ms0#Q6VFRA|+=z#)(YixWmt4W{Ak3xJe2tjf3d z74nswLG?y4hPh>KB+~hlX=)VIedJ8aF;>U5WC#e0IKYl@U!Ew`K*(r>4r+%24+s(V zMuN|*SA5<1U|7W#hHTZe9;G(#U|i`KSLI+}L=}z?mKc|#g_utR;(LT*LhQGS-!Hvn z7sZR68IDzE^@i9-t{Mf@nMqadzQ) zd{Ze*tr24ZoP`!ko2%*LAIMq4J!+{1A+3dt`wA;gqPe{rX~pPPzsyD9W3?b898a0s zC(s94sj7p4c5VyfE~I50XbG#b8vck5hwBV&U%mqf1cnNKPc>aYkYjJ8W~ENRkjmyL z;=l1|JV@fl9ak@f4f-9=X)`b&FvWc9K~zRCPKMZ2ksiX8jJ;C~sOI++K0$`V=dFiy9>gd}% z+!rcys;nl_YIm@nW^G!m<|B12g4GDB!@_G2ajDJdw?==+uVt$+?Ue^wS@^>Dq;6_DhB-o!G zKSbmYV9lEcXDPC`AfKsz={eU76fE7Xdcd{B2-W!UsMXF`Y)WedfvF~8HPPlkPivGNPVUEY?@WIHQRdsfF?HjqfGzPIE2(PsUjf8#H5j^1)qvw zeyF=x;mfjhb_A}3K_1HJKU7rIu~p!1xUiG0h^}0)^&R z#~s#Hbzx}YoUfaQ(Qw=?|HTDgL;FEuy+tNU4dg#mG=A$e zezYEEG^$syEny#R`lHIEqy;B$x9XPfy-qZD&U0e@CIaE)&UCns`~Pd*y1>2&1~g&} z`?~FrhfpJQzAS&ZYLshlNES&`S;+SGyZ6H~k1M$@auzwAsRgW*s}&U6IV`9Y1jcbe z;x@yAJ|N1^gpqqJ9+uO|Iyt&am>hGHY? ztCgfUDb;EMW&S8BH?Ec2btm~n2$gnDYPC7p!gBf6KmEe_hD;QPWyNOKN-J-UzpjP*_Bh%qFc^*TxGdDUvgL{w z^2Vn}`Va5>35F)1;K!#3BOzv)(s*`xxjxS{)y5dlvnWsD`~ar8$7vIc-S@7tjI_O* zLi1$O@qEJ>^8vL`Pl*owJp$fy+1I=d)(Hpr=jDc6Ofqw;7{uoOn;<&g z0X5iI{`J??^01RkN(f{sszANGp_6~EO^v!Yu-!_H+bZl1Kn@lFOl&}ZxAERDgpdaU z->C5Brtb0=3v0SSu=d@CfQ6qV9MUTWR$u935eYhbHSFbC0$9)5G8P#J>)0@Y>@8d8 zMR%)WbYKn+Iv}n#lCIj}{0r*~n53LOPQkGB-+NhQI|ix!y2KglYyp5CE)2{{Qm|j8 z^s&;#_#5Ij=k4LFyFyfmTzc85P#j9Jc|3vrZRlBWJKtY zGOI=$8kM#6G$0}FH_iWcmjonZG6Ug%#u$y$wb!AP4Q72C1GA?MWOX*n(iRM@wNj?% zX?NyFZ|Wa(c(v%^cf!O>_o|fh7WtP`526tOS5@A@3QEgHBQon5c#3FbN{A>c&fI^K zfEIr%6%{MU!`g5npbvrKZneON4yNrIFU15bV0H#SEkKY(m~- zu^-`Ap)hvABs@%<@-{a^g9#=DeBXk#-5&~@R+=@x)U-Qgh#8CfrzYw=4`Ah66kKSe zAM`9an95($LKmE@Mqm@_eVxQEcESKLVFH|ulx$UxAwW#b=3o*$dALRQca$2?1<9RX z#o`E}5wSCc7PzV8tNqW1=z8xeGZn{k|Mbi`*GL4ZahOs? zWl#k&W}!h6jZSuz?P#=S_N><_&BGF4NbZ(i!xTWks!#h?d&r7c*1d;UQ82fQYr==? zciOTYo9@f*1wEWG%`(~qca>#c7GgqH&wFjExh|aqUKr^^rndNdxh#-%(ayd&Gp7>= zieL_HVtuQibrt`!+{QjcUaMOLcQY-xt5W-9!Si1mEp3Q5ixqp?>I_e*V1GPdiJwT> zCdp|uNsnccL1VH8(x6%8osW6Xi~&k%zVSk$13REZ)kz{v{rwJPfiw~)JCs}h}Rbl+c;Px6O5e^oK_sl>9nEU9Rn z8>U$zz`PTYp85NFUZayQQ1v5apq#nDYvPB@0G^aRa9~NvhIH4jG-;-zp{8xYsfIcs zLKYzxKtReW0Epwbsfcjr_F&f%M-inR$&3PF;|$5>t(E)v43gw@u#f$PWZ+WM$^q?udmqc?ED+ItP~8Qx0dbH*6VxhhH*SIx)n)3nDBQ z@r<`M>*=MwRX%+}?`cs(!ma7~W49c*;}lJzbdkqcg?vCeX=7rntzKL_l~awcnC`|A zsi_PE$}VppQ!KU^qrk%Vyrd$6_+IKle^gUl3}<$-OE9};tp*ClAO-AJX7UjFHDe|C=;ce8?3J$(Se6Z!(Z%^{q zO;1h7F1%Yy&YO6Rj_z2=#CqL!3Qm*E-M4J0QG#cK>@Qh>DhSaJikZ^-ZMFDLvz=AR~+Wzw?YOlD0srCmGr z>64>J>VaQ0$bRVp(TQPUXO?GE(DR7$#;nIok;Bx&kng5*odDlr#Vd4`weo7XPR)Vm z9bWjuSaijA<3zn--~DGSu1aNlcnvJD^tV3q*mk?7V3OgH?%{~VV&`!K6VIR!RaTsj#_05yJgA6Af&vKL!;~DXfqNO38Y%}SGT#jT9m4Y_ zQP?jaM3;{emTDN5)C8`2;fSXo3-C+(eh&GKTf|!uDS;Zl^gq&9ju`!#-tm=~P?_bD z{zLt%o3alTwPsg?jVf3<&Rpf(eSr<4N7EWeftsEpw|PtK={=I zOi=`EUn8`5VmA5!+`ptTp;6*_VQ4=+%#?>`H~H}2;oma1y_OfNLgoHSQj;YRDNvpH~`tLB4 zTn-W9$NEE$Otw)&ix^p{Vv&qaaa;NGJ}f`qFBoD|x|n9j^tO#`YhlP+Q*U)1-3RYu z%G;;sRJ3F1stfsinZ&JwX1J5|b?2n(ClmQZeYhY(5c42iCx2aU#v#V%*8l2%LrjA$ z8pzRk+=%DhoooW|S4cPUbHuq1<-J!4Of*qWEKoHu9gP+O9^^R1s4VHJY{55A5ygnu_{45CcQIe=8UXW0N)&HamGZhC%NQpdvH#06TP&1pz<2}J4hJE$dc$l9X7a5+G( z0i&kVkly>o1m4~)cZByG;W~3qa<6Yj=kY|~5Vpq*S|EJM)9<~wyW0K7{Q8;KhD^vT z+DK}|ARRobsudm6!1BT+MQBfZR^&63lYgJAn`9dI~REXcQ z6)ogG$Q6>hYY+3#>P;$ZypnN3IvjQ;7x#HFR})x9$kmM9#V#@KjbYU^OK~za6n8Sf zN~t%efj}V&rAW>{k1B2!mR%-F@sc&+@yr6(qT~ImV?u_!Q*FCEV9~@k555YC(b*t$ z<4Za`-GFXD12ZvgTw-2c(Yy9v)(}Og_G6`>-=deoywKMt8a%(baPY+vj6Ltp8RL1t z%YK;Q58#Vgh4gRc52dSrUDY~NOGY>!G!pk%1VK8_i=5SfgLU-b`4zZy(dHBNjITUT;1!w5WT>8lv z`n4y|lLE2`T zIbJ0g|9`B_tXRr}PQF4ja8U*CVBuanH=lQh=-ctbZ$__AK#vQgbmJ}({#;$vLZEwX z?COm^df;u@Y>eJR>f<{-j$Gc9cJ7jteHMA@#?0& zNtsDUYRf;nrLtzNAMV(k&jr}6V2!0Px@rU5d2JI zH_-FVu&i=d3?rusF`okv#;-q}|GMoY8VBW+*H+ABz|`Pob_t>N-tsSgxx@Rm{U7T> zWk2LaXY_4Hj}8hT*6q|u&r7^^#twV1Hv1q(I^_%R?WY|LLzwSVi^(F!FD{tW{W-ym zaNC3X>T^8LR@?#nN3a>Du%R>ZN2q7wTLPr}Jy6H!j5Q~fn3~Rmc>O9*=vyjtTNFvK zujig!hx{GZgEHN3BgvTvfCl-)U4qH631EU417`vPaS9bVDuO;~zl>@}`+g$7EU?j_ z*gLjaEz8jgpfm$7I6D{L^3H%eK4-qHX^hPUF$Y@=VeE5Op%$?wz!N5xP}v!!v!wYy8BZ9S_`J`CIN(iP$^*Q5I&+JNJF7azond zV#UGBoBSxWxEkm!$-y)|#3gS=~pgdJ^5eyjm1CWvL+gnANGAPL($)-r7agu@*i zUlV;B(WCpG=obqOYv|AZiRkk=hX8(J&Qv4_QdY^tTb1L?tfT} z|6$R$NNHFZ+{h)_AozoaAL5Nnw7)T3TmzTS0&Etb*kn>4ZLdIG8UOGj*vXPq;nLrM zi`MQzEL%dY=WzJ^crp*Yb)np&2}pd)>rWK>ED=l`BWKcZ)GiNHnug*96TcFvBb_b8 zu3{`8z<|p`e+o7&iwAYDEqHCT9#pwa>uC8n^#^zYS377>tDro%ZXYbu$+{I;1Rd@m z?Kv)Y(TWpg43ZiwD@#x+AKY!#v&@giI;@8;^N-pru6U1W;xs|MubC?;v^U8;R^- zEXPrq%;W>+8uFM8P-gV!st*2gvSqrBs=XL#2}oK1uh`pMO)0curIWyQb>yhLoqBsw|Bi9lL`yW&6>LBc+%Ff75cfcZ)h4> ze8r1@#B%Qu0Xxw84IMD%jhnWpLm8V%!6DdN#gp#Bj*|ROV%FeX%TBJ!UFD$be~C+Iv%pm^4BpLQx_zWo7PG&= z@#|3&zS6?qbw^wM`%s_4ZxZ$h%MP(N@&CFgH z9#i%nDZmcs$3OE3s>R0(Ub=mj*>Z-mD=E$}2J6+VVA<6N8?iOFH0s zWM#4nA9RX-jdTwJ9GQXR(C*8l%^(|iGevV#QDh2z1d56eYK%dl<8oO{r%WShx}mqo zyq_9JDwc$wS0RnxAw>zhhO*fofAV6O`Xkqa)I$1uK2(1nLYk*D|MVuXv*s7jA6sR6 z_kamH!@P#OX7#rMHkrT;02RI(zcZu(=TFzf@Rea*6je|k)l?>Wg$7biXC*?H$p7Ot z24@GOubsN2bq#|C<%aDqtg4p1(_%*Kp*yLigCe!V#)s_|Qlb=8RdwJ+?2Rg$(Xi*( z(DIszjZaQ*h!rxAHTOqX(gP^SmfaVNURj#=?YDg`GCB(&5e&ZdUSkzB4;)GYnsn6> z*F>YP(=Br_{0tMpFQ9C4Q~=PgES%t76|K+FA=*n{?7c)!MA?@yU|jV13|r_9Yf2zh z$&=@$?JD+5KsDPbeE@*o#URJt6+r6*>!OSj=rot^^HgntI5k@S^-ch|Z_1$?e?tJy zp)0UMiubTu>Qi;AQa2^Bg)heSi=2@A?Zc6G%m+V7`Z0fctgI?Mt0kb2ny2o1-SPy#er-T}Jq&HoY~zf%ZusqUTg{X5fe8qy^)woGDBK#zEB z;mB3;rS2OnL3_k|J+NN{OOurrNiu>vz4VtJWp^~_DNiNiJ9iT3W!pxjTl@$TUWA~F z-y6~5=ECKil)+_%}V4p!+WoJ8`7U*^iD+N!4 zy{;%Yq>-S;JWw@zF^z`e_R;KAD2Mc4NF$8&~ne4CcLIDFPqfjvPi z2?r8-#z|n4XULULK7Lu}avfj=JMJP1fuTx~=K{+Q``3rC4={x9zh}tn)q4IdF~xrS z6H%}6^`DRm*hEhB`U_-M-T5sSDQRA4hhpjvZf}HeV=0S5pn5mn#t)uf_Dd^NEjWLi z@TD*BFgf-uMC2*o`+8#iEMIrHEd`T4*rLYA;-k(cOd12<9G7APV#fKeSZHnt<=(SY zqWi@vitHHgteyM7XA49?4XWW)GQ^&RP-4D?Aw%wC+`y+k?V-N)T&>I&mgoa$u$(W+bPXiU70wSi!<>?5J?$7UEyaNR9qU~ zVgJG`dMyn@=S$z*&FHYAe4S`xgq3rqvH-y5JOuK<&oQXO`r5&s^wUc{z)>Q3aH@e; z5tD);=o3Mz%Z7a7o+;O3Hda^9k;UzU1rx4vJP%s2SYnq!sL6`wtKEFy-6w9H+2LZ- zdxAh^i~-LED$;%s*=$XhK9-UUeI(%hqdr`X-_*==T>K>39P#HYTE7gZ4QYLgx~CH3 z^ITd8PJa`SI+IWq88lP&)EZsJdBGLurd$-F7g)ys8z~-dS29Wo#yZtuQuh0qw@ZAD zH~?Y>;MHr;tt(k*Xd3%csOOOvT%Q8r#35dK~pU7s2HCl1y0Doiwkkn@$w&vfYA!s+n zJ{dPHk0DVg>AB|mYpxD3RZBD0G<)rAr?@@K(k+bMd<&3*1ZJ(QrfC>=pGLCVWj_kw zSOmG~9KkWkeW`Cx??@Jj=?{nB&i#Mj?CxA3w2vEC^$#z3CX1}igsU>Oy%R%6Viam<9#Px(F1MbvF zt0Unoxepc*JbP{e(b;73cYU~B;vznm_*+wKV#}@Sy@&!=!u`jryP6qM3$IGuU~)wZ zLJ0#KZ#Unx@gt1D-Vp87TtT%i2_Uo> zcC1hgV>KPJtpY+2Z(FJKglGh!(f#;Mx(0 zM-0Wa19PMW` zc)2QdXS}}$(^(~;{ZW{qaHHwe^2`B_-Q}c$;1Jch$b9mZ4RB!rxX|q^uc$WD+Bnm= z?!(DA#X|H3e-&0SX9VngFRiaiL-uLdZ-pLg_3Wl&uhE8btvntdk9xVZf(-QMs#2@{ zA9f8SwPQj%LVx()ym8RsJ*3*JTdR_KhqCl1ya(ciT}V;!I~KP` zxi;Zg#1k%Yi^kTtL5DH6ad@v{1atAuPt^TbpaS=TxQHEE!`pGM(mNnuuKre$tQXsV zRjC1Dfdo~9aA3GCo`k8ouj7*?lNj6gQ?E)`$Mdh1oSRU{Ne8dah)M2yE%lrcXz9{K zx8AzZMY)q%*)%D>HRMY3Sa7oI0I&?H)O`t+fNVJ}L&sJX+0oT~5VT27o69k~BNS5pn zJ^oAnFdZQ3z(dT?AhP28uwP3~Anb3KJ7!*){KN!AaSc@0Wdgw81RSdyP=& zWon+B^)D^!7M9wtDRKEvvQdQ8ZR+kcx8McO6rpD-xJMadUnMP+yg>Uz%uG3aln~_f zF`5#cycSDFW@xa=qRLb}ve*SV?}BW=zl92XpXPaJ*$+e(-^rV?{AB1%yAYIk#BhjZG|W#?vWoIDY!P zu9QTC_M`4(4wsGkKVDxj1vNL{EmWd+-ILRatoZNmhVidY7{jZQYz ze6K)_FFP;|aO;pQZz$896a5>=@Z%se)okfQ{QzDqa3DbrKp^$BfHIlT)QzYJY5jH&LiTj(Dp>u#c& zz0n%o&GQj0d(TUDZA^220#`#Z_!XtdH|cHW>AIy4b70-zWC-|G;}c7J zId&h~kf}!hDrC;QB!-CF2&HV%O6E;0?d|MK8t%Nvn)S{K0F`Faw@(jT0~+iqTo}}0t}_IJN|0Xohgn>j z`8d^H7tLjJV0R0i*7ps+BUMudQzDUFc)gnw2I2j!ij`<#zU=HJhWpD8f$XD;UzC6d z&S>lhyb15zzkF`W6Nn(n3R;304K$Nw8P54ea9@DR$C)H5c zS=$o6!B7zmmbovf8fx|Bf_o~N)jNGKeH+5Cc-v zA&6Wfh4l`wkMIw+{2NT%xZ#dSJi`V1RYcF#0Xsh_mk)dgt+UCrj73z>B|F?Rb7VZq z2;)<6c*SK1gj3_D01Ndi+Z`mM855_7~%R)!u;);aBVj7Rj#N}6`F8dz_~tg&rfP%Ah7|DP0?a3(A6<6tMGqdI!!7X# z;T*;JL9mq5hG_Fsv7PrhC!5@nhn{%S?I_G7V;h4&42nlhWYHBOuaEVF22^)hzKJtJ`07c7tF zpmg>-n;=G&rAn-%eIS#n15o9nTuPlAiRoa_2;oc7k3N-g-l)Jy?G$RiBV5NnVWU5G zGZIgXBp1{*rG=ICY+&Y>H*#Q;41h5t=-K)()fs-kP6U3QgP=RrEv@p+eBX?z-CQR& z)j5!u4Wez!%|oYPF>cCM;{IRw@53I`2|1W$LVrthX#4{z1cV$sEFtr~{eYOp2Q91a zbULw|@Z{N033XdGy|HSD_qg~8Hm`w?HU|ApOJ(^kl)RivP~!^#XC-7E08Y;=q4`7@ zi~Muo9l=Bvf+fv^0?Lk*+Q*zL%$4CB>BvM?U;n`>I9(R=tZ}lY^sJF=Lv|qZxNQO2 zWbUZq^omsR9Hts1hSQ3qx){;SN06n5H~KcA*-=cG+rJkuX4yeB$vs)Qq!DA<#bibf zCS^>-Mii2jPu+NHo^V4J1NGU_Z01Y~emXGqx()%Kr%{p0*0M9y9VwS8*c-8V%LTHj zH0D7}@x75Dt#i1Mk^W-Gm@45jx~`oux@!&4~sWpbjD zUj44W;p(bf?_Z;yIG3?(!;xOm@$c<+d)$-kSqJ>wC_G5*AaU}7HRV3G8ZJ>v<#T!b zO;i^RMbwo(=x2|*l7l%1PE1l;9JrqdFY`BzF*gR8l$_PM(&r{QMd&if*62Mi*`tvMeH;NLdIWN+ zG-y|(310+Wt0YFwY3DwPUa`VHg?IJ~}b4acJ7 zcf8x~13-u#xU(NC4Ms6{^j{D>50;#W7Y5hNcc{RnYn@Bhb z-poCmo`;JS;R_5d=l8&!>`g)@)I&gxH{PK_4wOM7P(JFF#2FD=H1n^s6Q3D1I8skV z!`&kbWWqI!v&;EeyX#a1>;s2dwG5^dkVtUwV2BqiXkyxaOEA+7o^#t{&f;Ca57*QA z8}q%K@mOY*yo%s6p2m#^7~aw^Z13f@0sm2OAeNAQYVOv-xgPxZF;G)HS1N`xl401< zJe9q7P{9BOfx+tf?m=gZKu~z!EE{rRkMAKv3&fA$0#vsc#{D)Gbt`^L#VxWAulAjE z&o5k1EFhr_;riLg&F&pLyq^<9W&S$L4`RcGb&oD2OFaGt#Wns5{0VOQCp+7-sDP$> zm|-nU@9Wd(Ac@~d&s|L^Pn)uF^CF8_0{#6dg;u`E{EW5=UstFW5g7Fg$>kw1qsr7o zr3&ZNqe>8O!eSBf&9rD8HOJ|D`U2GZ1P$~J7M*2jGeQzHyEg>!<$Iy)TM+PnB?J75 z?NvLe!4P#90!4lkt%zK?0$xK%?VG~rhm=}0oF~@fAJ?W@ zi%8DRXbu)}22*bH(&5sP0?m|Vvmp|Fs-x->wuSC&i{yg1VIu|L5BW>F37eS{@F{r7 z-#5@q5lA18_l(mfCeMRHWDzj&6Oka}Y~5i1S`M;AhFZgG{&fuTc`6A!3R3*xh?8Tn zt4ee}Vu@h#XtqBR@S5c_j)nG31J=T!PmF3fe@cP+`4#e7=m|xmu^02%FkYh zKaXv@5G8757qsJC19m^}&qCRP3;lIew1t^3*FYnhKbD{m^ix$Gz(;y;)ODKgkLUZ| zT@Gh3mi<-}Q7#%oN?lP~g?!*yiChT;IA`8Vn$s9={WhEnKMbOnQPqAU;-^=5-S_1u z`i-=}w_nAR%u0Nt0_@jh1q+h{FDc3!VI)qp+xHS#>mZ3j?D=lsif~<3c(E0l6N0Bg zni0KzS3*YBm#6P?HyTxlq`^tg7khU<)0Xc+%}2VOUl{N;M`Lr(=&|rHrnm+K#1zS! zwg2(M?w}XA7}ag)@739JAzX2{(5*(g6n3jps&>A6m@iA42Cy}#Q7*u z%^R6>$6(zMxX3?=7e%r|44j|I>8^fNd89Nnwy2_49Yq5O3uO7l>GO9q3RW`wIQ_z# zqW=@W1C#t5Bc7c4lLx*MHhWG}VV!MKXR3*VEyvs{)iTghq&cNxCl0El@TfHXa&a%P zL%-dU{kjxgKQ~%$4f8&OQVY|yX6@1%UG|@L^)Ya}0!tvQnyRk{wdVjA2VIIO1TRP_ zw=*|9YB8wO<+XANTy=r5shaGINGiY-H4Qk^Ich@po&nxj>XA?Q&IV`|2ZY0K$9tHp zp_xAdE5X>xawQ&}*c28_@p!nBDQaYFm*1n_wvr4VEMbtj zO8K3S;n~lyo?i~5lALaeb6CiWU`9UF;G;nb|GUwO;j4o+%ZhDbd^X5D!sorkhjFig zn=#y*F=66^qim%Od3UgA{>=-uD7I=tCAS`A54rpUq;&XUL+iwKyELky#U5L!2&>KG zw4(+T%Pn((gtBg63A{`DbQP!^oS$dC$>c?*nF52 zP{1>%@!t%4ExJZI&Zj%bl%;lX8yz;Bo4iIQJY0o58ywpAY5|)94DI9%1)Qow^-kOrOvNC;x{Oe;S?ab9Y+Xy{0vN(v z@(FotR(XEh3LwVvT3r+%`kTDMo{y4a$Z7Lnp{3w{CrUx3_*rOlTMU*j!G&?ff;~PV zok2HJ@(Z@_#-$&MUP+zB5@A>^O{b8PYyE%@nYQD>&9*;mzz75K?R|guCKSXw` z__*pm;Yx>WPtr?0=ku^}6ex{!`AwH|Xr$un_;RXgWi?OXXx5Iq*d}}%KG<}0db2jc zP~;M4pT{_N*^Vn%%irou1d^;Bi7?}iO+49IUXTwmOODEQ`>R}k{hQjWn?aW+4J}|` z!Vu<}yRgqissEGkT5y5|ZJFCd;ZoKdF-h)`a|8qDcKC^vUK$NmvkodspTw~lfhT?f z0&IKbtGR{tMW*Imy^2VkgxNqrg=c?SL&e{!cM9YkL8^qqaq z+zR3Ymr-*h?r~}tJ0%wNa3`J(v;l4a8tj9aTz5xtzLFpJ^wXAgPe|sUi~rr&f%C($ zxxUs}1Hck_!wclSAbqjgxMrP}n1{E4KD?3jeUfbn8Q%1xArNf~<_n{HBcUf3+|Afk z3vtPBSqiYqqo@@}Hh`jr1%L-DE_D)e?Y}u)P{tK^w#gR5m5tehr%K67qKY6BPu=_c zZnj&D*%v0p9OccQ>z4Moz@H&JBrKaWhQ9X%xcFT+>{&Eytyw)E;_!Q}f|pCVIDm8$ zcQTe2bsc$z4UgUY7i7#dY(e4j%6NKqmJ3ZfB}FXDn^NndTssMukt;t?2{Htia1rY6 zhqK2@1sGq;et7r-O%#(pXB z%yyT2cQ;<@Y78TO^i-&M-hL33f+C#7V%*dV@bH1jIrrTf<$8aWV?M~|-(^GDSx;+{ z2*ppOqCm<5_c@KAdqt(EL(m*aAVuY0Uum9rFUD&PoYFbhyax?T$t;dFF<`=^XaT;C zI?2HRo?;u#Z(%pkTrtFe{1&W=<4eU;Pa1ph941ql3o|ujFh zB26gh>3=Mj0}RpQtjrp#Q?eH9e`>sVNy14GTP7wK(Kk>Zi&paa*8*3GCV9y*fA?&m z)s^2##95DU>gcV#fD?t9_gAa4_yS(}t$wU(X)q+I(!-(J0y1HeEg&C}*5{yVQ~8S` zGHK<*_N0?&RZ>^)266rvGEWF(PfDT}k`Pt%V<-fp8ytoDfU#z``IN~7bIwfx2xKkK z?>rEEb%r(Mnp*jgvExw_Wo>Kq%^Lgk49Smi zo%yh-Zv!l&%>wm-zFFv6$0x&wVvR*g7-^4zc|ec=fr(p~R)Wv*oRwwywa4INcD#`Ol40b)}xb zNRVOGXFTMP&O@@S8a{m8m9Q->` zrusX8h;OY0>+R|{H3~N$26hL8#?FnwFQqvEEFMAk&lJ4pYqC$~h=Vhthgei26HpnJrf(L{ccOt{4Tx+q(b^D}l55((l zH(VduYzI1UwmN-}n(`?FVQo=ZkwG7lN5|^OoNp}oyWf!%L)*h1z0L=aaW8^-J1LL~ zPwZdhL*A?h_H}t)qqNDol3zU!DbrNPgT!?gU_j&FgErTg#E&d=23prj@Ot6NzTo@I z%uSw?gph;E(uY;Li-@};1TT-09!?Uky)@!lwYHBWsbTE7`Nkz{7*KDqL&__GZkQ`e8a(pvwskTPogYujj7 zxHfD6QdOhi&TU)Y))A?^GwFO9;6BEYIiBduKnJwhz8+;6UwJoGYQSdUG3me(F1J>??Ts&okQx^9>-{C_Tu@%>)Z{0ZI zMF7>5Csw>u3-R;A$c3!-(-9%2j!U2MFg7&gIlKg}O&e9ON_Sc+!APKWU>cIg$B?WT_c# zpAaep-($?Jn0b=(NP8VQ#U3>+Gq^B;?|j|kuZxR?FJCiE6A*7=kcL|OYz>btkjK$L zjUA+Fo2jsba$TOKW_h=bMx=%&(7+mMlgqK%B=gzw0|NrK?<-C(&&HV8bcDQvdOtiA zy?KNPD^&7<%_wGC$cI?d;Exvvy+r?HKj0LdmIHHAz^oNiuP7^jKF0J z^T$N{KOslx;$CA>FLwr}NAzc1t);{vmS2JF?IwkNy^Z*(Irm6FV6VWWod#6DE|DT* z569p~ZmjtMKpZT9I*t%PC|Zz{8>=ci7P<>A(U{PIBPg|zYhSii2r6oIc$ZWzkOto^ zB;}OUql!IRHvh-FA}?`=fmeVkMv4%Qn~ER^AQ!o9910+69Xre#Wq^x__i-JLj&k+5 zC0j(<0cc*%ctObX^IjY(+`y~4R{!W(+Gi{qpa0I<4&?%Qw|NP(hJXelUAYlx~|$2b9Bm@hC!XrphlNtU)C-!ya-QP#eEJ@i#c<^ewfa z>sb+BQvyR;0%s55+GDN#UVn-0?AI#;vipQmFpCh5n)29d>Q0Y55xb}zEv%~ zplT@nU)owyQl8m4hj?K#;^<$R3Lpi#5`0pEN-pJ8fj>*P$n4d-6TGR#gza1DSv{%b{N|A@HDPi&XjI{h&y*e3xu zixA}ZApGBP|9MeSjA^(SI1kRl6^bKjAv15g1iuK7Q`vg}jfPnI2+&|XT?t(9dyFDC zLxg=Z4tF1FmE|ib?E`jD?;q1W%J%ZTmz%uQHzL!&eVAaiQk26R?qU>z4sb&c=@_mHwA#oaa5+r>1j+b%1uWn2mhRC^w7hK=5m zLVxm1FrN-WASk`a&UBFAiD^o#I)*0Lwu5)n6uUaNxWpw89t@dEoSCdSdX z*qSDw%C^#*LiH)LT*~%>2!kA|g?>7IW*t}v^HLtx5Dk2aY@Oanv8*w5tiJt7?h7TBjREMl6z zB`)@3{gBacDJ&%izE*hU=T8l5O-i3y1B=`lrV7QRt@6{mdl{3jL_W9p(P%!#6&VpQ zMH4T;`BoWTK{=mH!n~2tOurV!B|$g!N(5oFy*t_uHFPcj{45v1o>m~gF4fv3rlKTU z9`dofKYTV}n8Xi}YG4*3#-28%53}i+SN=9p#L?(qR`T;*j^q{jB8tq)VB1zKtwGIH zL)E(rh={JbE);7OBYI^5nbtW{WkTP|pU1Gnt}BkJ(HOmLd6bu9g=3#zf00Td#n?r_ zV|8pmqAo_UmY_nt_X2Y+X0U0v?X^S!Nzn3s;{*ArgZ$(@?*i6$6%oK8;Ff>2{1ZnQ zFM;<1De&&y!XU2&mHP>kfV5ScM}e1|)_fmnL36d%d40^@aeFY&jPxh2g9d+$ZAYcK zh4QqSQp3XjPw<>0>CZj+IH)VyFp)nd>)ZvfJ!vHv^bxn1S}Dr8>{(c9<&yw^<%tDn*d~5|X@6*L6Km7ziz4 z?=FxIpZ+)VE|C*qEA>WakEGpCq*Niv7MydzGQ%2Vu!7IH3lej_9i?phoPt^)@Z_LO z{b})S!sx#SBR97+dbgHQppdcduoJ|18u)A($*5$`Q)YvlX6tQ6sTG)hhDpyeeQ4W2 zAV8KDO#+|!h$Ui@hb+PsD(T`8wz1HDpRWa|i{)u02BY4k35}J8j5~^ZQYVQK^F}5?ugb&&>JuG^@~L;RydI#H zOO>^>AxRJ)bgqDt9UnwsS#k?;*>#u)4%Zsr2^$xUR3m8r?^g!>q`pqo%jgJz-ceQs zQ5{KU)HNsBHO>U&)qEmMhlY~j={chLNOq#tNfv_LSUYW;{YM8y(VBhQL%snt#wPR7+^hjJfeJV9`pLMdHz(z|(n*D26t5*EL-+u+nK?-mkmP*? zi6~d=#;1XwwF7LH^YCn^%}VvX55L=}P>j#54=1oaSWqP?G$OyUuScGf;8!Ps1z%U8 zPX>+n`yv5y1j)x;JH$D46WLXDNsvmY#IYAi@)5tL%JUqo3@?6}yu2k^7vWYO=XEHl zQ;+8|PF)r40{@>AR+xp@#@+Aer*L`ivwlg6s!~^{3|GvtZhi4t?#&d`akGXz^RRHf z47tanJaKIMX5>Oj!9{h6p5Z61`I?1Xhj`G|eg(AsL>wZbJBD`Hzx6XW-=nuOV!#NR z=hlW+((YQ*hm)X}QZSB#2dXqUUpND^4KkBM38@uIlYB2~#Z~-n++aZHrkI!TkmwIB zUPt43G-5#}g%Z{TrRf~pyGA)e!K1z$AR;rk83PCwP&Z>OC1ESkz+TY@(qj><=`Ko> z8xa*3ObJ$t@_{$3-It9~HZ5nKBVeKN@)-qm*;_GO`Bfa(ga}KD37%o}W1$?3{xa!m zfF+7uqE|wPB_W@{v1Jym)D;sCr<>L69=p*`H7}_73ja@~i!6i|x(|a-a1R>4khj>< z(jlxm+QoFY^HjhNO$tEQR%a}QAkD?{3n;7X}MKgcCT;;cDpm0Z2ZsqB}0NY*a8MSqU=8A$0thmf}dNismp(-lv!%N zBPsm-?=_BMuN|t);aqu;v!9j3DW|Nvu6YmHb3{}j!@>Zb*;>~S(T#88q=b;6u|S<( zPYXe|FNKWbo93rxwa=FsBGM6WSe83^LP;@1WMsU z_uE6ZREM6&oln|pVRhn#Pz)~EG z75t2J{yzdg@m4wa(XjtmYFH$aQ#IiNW9;aj<#duy#sxk=M|k<@c*|yeJ)M@KcR*O5 zLrQsV8f)H+TS;AU-({*F`+$4(@J0(OB4BP;tx&VVps*=w6gZ#Ijjh%+FOd2^~ZaLb6H9`utrd{j3 zk{8knZc5~trc6yoKiXnhuWDU7i=$vA$sU~;Y-wv{9U7*8ofj&F>Zsmp<7;HE{}1wL zbTe7T%5{ISN_d6WQXk`I4JDXVR)o_LB#ZA~g`wA8DS=wc)DO${ z$KK${^+9Z)gnl>Os~rqSmpJD%O5V%JI%XAVCvFgPq@de=1ky$`g__A#3EH^nBHYe)$)%+xNst&Sd*$kLLc{>A*j@nW;zU{fj?-)OQv4!m_ganeHNuyZl{=5R@f10ohzC+lDB>YV$UnUO}2 z(s??i_#@lJQd5_o?mV5%&H21-qQ$QiKT${ci=+MxNFLcPg7${48pKx~@8fvuz(i?K z?D|^fS#v1$lqANHt_&+ZR>=-UJPRc?Bb?rQ*w6zXCb?>y(O`}no8oD=IuiPF*ubR# z{%8PPa;8(g-g`w*0gElra%`$HB4 zGHTV)ynf&KmVN0JgpLJWT~O|ACP6En}|Z+5D(cJYdQNAE!2{ci|>@!x(uC`Gf*StTc~kZvOOX z%3|Tl%KC&DCuR3*mn$Rd0T3<^D0M5RRAjG^UHIzKad$6^kxK4T&&fbUnjH?*M&@KTsb(gbyhelYz;0= zBmjmTYxWl3!K8`%J$P9ho(7~EczP=#~_)@%|eMGC^;r1V`w>KD(JgruZwyn^>3^fjq zD%ormPY)zaU3>8XakKS3a4kZ#gnIlz+!!7ppYZ zhl!b_5co@^8cvdRKWGtV?In#qJbgCH=U}|~=>DyV)VT*Eg_>xU60m69c>n`sY9ElN zM@%dZ-?BZziYaUv6ipBL1jM=%e?NA5^TL@v^1dXk)J-*bQ`RgiIa3h5ovL!^Q~>V>Q2=bYmqa8X2!O1ar0Oyydt ze)4lyhaPlw?(I%_QKjJi`p1ZJfA=BqeFt(j>2wKMZX?CKZUJ@NE}p`aaT5pPD?E}_ z&SYj7a{0N!qyYJJj$pYUkSL(@_R5Jy+{1+{Gj(Vss3(QBWvDedr-$Y!1ghj?^nZ??ZTu^Z($MyPF7A2zx`c*)fz zumh_gJpDng248t}G18Q%?6L9da=I{r;Kz8cUr|;p?GU&x^HiE7mKPPttShOLHqo#H zT8R%=HXar!6N^g?)D9hgO~ImFdqr3LL01r>7|=Z&KUeb5eCf-M4}GxwI&6l6*BMB^ z;5lSn?)F{c93tz(G*K^5JFmB5V=Q^`0zj2VOFGHSGx`ghKnhJ+Y)raYx4jwfMu_%i zal;Is?h#A6<-0D8E}4yVFa8ori

{_Hho+dHPnd6n4G~0^{fD-g2>sLu*%xLyIVm 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�oRFJcfknj6k@QCJi$yosH|UIPt4%62pF(U0 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\"data\");\r\ + \n#:global NewScript (a);\r\ + \n#:global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n#\r\ + \n# For run from terminal:\r\ + \n#/system/script/add name=AM-setup owner=AM-Setup source=([/tool/fetch ch\ + eck-certificate=yes-without-crl \"https://ros.vados.ru/AM-setup.rsc\" outp\ + ut=user as-value ]->\"data\");\r\ + \n#\r\ + \n\r\ + \n:global ScriptUpdatesCRLF \"LF\";\r\ + \n#:if (\$ScriptUpdatesCRLF != false) do={\r\ + \n# :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vad\ + os\" ] do={\r\ + \n# if (\$ScriptUpdatesCRLF = true) do={\r\ + \n# /system/script/set source=[ :tocrlf [ get \$Script source ] ] \$S\ + cript;\r\ + \n# } else={\r\ + \n# /system/script/set source=[ :tolf [ get \$Script source ] ] \$Scr\ + ipt;\r\ + \n# }\r\ + \n# }\r\ + \n#}\r\ + \n\r\ + \n# /import verbose=no \$ScriptName\r\ + \n:global Identity [/system/identity/get name];\r\ + \n:global SetupScript [ :jobname ];\r\ + \n:global RemoveMe true;\r\ + \n:global RunOnce (a);\r\ + \n:global InitSetup true;\r\ + \n:global tmpfs false;\r\ + \n\r\ + \n{\r\ + \n :local RmMe [:tobool \$1];\r\ + \n\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SetupScript;\r\ + \n :global RemoveMe;\r\ + \n :global InitSetup;\r\ + \n :global tmpfs;\r\ + \n\r\ + \n :local UrlSuffix \$Identity;\r\ + \n :local UrlDir \"certs/\";\r\ + \n :local CertUrl (\$GlobalScriptsUrl . \$UrlDir . \$UrlSuffix .\"/\"); \ + \r\ + \n :local CertCommonName \"Root YE\";\r\ + \n :local CertFileName \"Root-YE.pem\";\r\ + \n :local CertFingerprint \"e14ffcad5b0025731006caa43a121a22d8e9700f4fb9c\ + f852f02a708aa5d5666\";\r\ + \n\r\ + \n :if (\$SetupScript = false) do={\r\ + \n :global SetupScript \"AM-setup\";\r\ + \n }\r\ + \n :if (\$RemoveMe != false) do={\r\ + \n :set RemoveMe true;\r\ + \n }\r\ + \n\r\ + \n :log warning (\"\\n\\\$GlobalScriptsUrl = \" . \$GlobalScriptsUrl);\r\ + \n \r\ + \n\r\ + \n :if (!(((\$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=\$CertComm\ + onName ] ] > 0)) do={\r\ + \n :put \"Importing certificate...\";\r\ + \n /tool/fetch (\$CertUrl . \$CertFileName) dst-path=\$CertFileName\ + \_as-value;\r\ + \n :delay 1s;\r\ + \n /certificate/import file-name=\$CertFileName passphrase=\"\";\r\ + \n /certificate/set name=\"Root-YE\" [ find where common-name=\"Roo\ + t YE\" ];\r\ + \n :delay 1s;\r\ + \n };\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint ] \ + ] != 1) do={\r\ + \n :error \"Something is wrong with your certificates!\";\r\ + \n };\r\ + \n\r\ + \n:local MkTmpfs do={\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 (\"The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :log info (\"Try to removing directory 'tmpfs'.\");\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/remove tmpfs;\r\ + \n :return true;\r\ + \n } delay=100ms max=10;\r\ + \n } on-error={ }\r\ + \n# \$RmDir \"tmpfs\";\r\ + \n :onerror Err {\r\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource/g\ + et total-memory ] / 3);\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get tmpfs;\r\ + \n :return true;\r\ + \n } delay=222ms max=10;\r\ + \n } on-error={ }\r\ + \n } do={\r\ + \n :log warning (\"Creating disk of type tmpfs failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n# :return true;\r\ + \n}\r\ + \n:if (\$tmpfs = true) do={\r\ + \n :put \"Tmpfs variable is true. Checking for tmpfs/scripts directory...\ + \";\r\ + \n :if ([/file find name=\"tmpfs/scripts\"] != \"\") do={\r\ + \n :log info (\$0 . \"Directory tmpfs/scripts exsist.\");\r\ + \n :return \$true;\r\ + \n } else={\r\ + \n :log warning (\$0 . \"Directory tmpfs/scripts does't exsist.\");\r\ + \n :if ([ \$MkTmpfs ] = false) do={\r\ + \n :log error (\$0 . \"Directory tmpfs is not created!\");\r\ + \n :return false;\r\ + \n } else={\r\ + \n :onerror Err {\r\ + \n /file/add type=\"directory\" name=/tmpfs/scripts;\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get /tmpfs/scripts;\r\ + \n :return true;\r\ + \n } delay=100ms max=10;\r\ + \n } on-error={ }\r\ + \n } do={\r\ + \n :log warning (\$0 . \"Making directory 'scripts' failed: \" . \$\ + Err);\r\ + \n :return false;\r\ + \n }\r\ + \n# :return true;\r\ + \n# [ /file/get \$FileName ]\r\ + \n }\r\ + \n# :log error (\$0 . \"Directory tmpfs/scripts does not exsist. Remove\ + \_global variable tmpfs!\");\r\ + \n# :global tmpfs (a);\r\ + \n# return false;\r\ + \n }\r\ + \n}\r\ + \n :put \"Renaming AM-GlobalConfig, if exists...\";\r\ + \n :local ConfOldName (\"AM-GlobalConfig-\" . [ /system/clock/get date ] \ + . [ /system/clock/get time ] . \".rsc\");\r\ + \n /system/script/set name=\$ConfOldName [ find where name=\"AM-GlobalCon\ + fig\" ];\r\ + \n :foreach Script in={ \"AM-GlobalConfig\"; \"AM-GlobalFunc\" } do={\r\ + \n :put \"Installing \$Script...\";\r\ + \n /system/script/remove [ find where name=\$Script ];\r\ + \n /system/script/add name=\$Script owner=\$Script source=([ /tool/fetc\ + h check-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \ + \".rsc\") output=user as-value ]->\"data\");\r\ + \n \r\ + \n /system/script run \$Script;\r\ + \n :delay 2s;\r\ + \n };\r\ + \n\r\ + \n :local Script \"mod/AM-Certs-By-Ident\";\r\ + \n \r\ + \n :put \"Installing \$Script...\";\r\ + \n /system/script/remove [ find where name=\$Script ];\r\ + \n /system/script/add name=\$Script owner=\$Script source=([ /tool/fetch \ + check-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \".\ + rsc\") output=user as-value ]->\"data\");\r\ + \n /system/script run \$Script;\r\ + \n :global tmpAddCerts;\r\ + \n :while ([ \$tmpAddCerts ] = true) do={\r\ + \n :delay 1s;\r\ + \n }\r\ + \n :delay 1s;\r\ + \n :put \"Removing \$Script...\";\r\ + \n /system/script/remove [ find where name=\$Script ];\r\ + \n\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint ] \ + ] > 0) do={\r\ + \n :put \"Renaming certificate by its common-name...\";\r\ + \n :global CertificateNameByCN;\r\ + \n \$CertificateNameByCN \$CertFingerprint;\r\ + \n };\r\ + \n\r\ + \n :if (\$RemoveMe = true) do={\r\ + \n :put \"Add Scheduler for remove this script...\";\r\ + \n :local OnEvent (\":delay 30s;\\n\" . \"/system/script/remove [ find \ + where name=\\\"\$SetupScript\\\" ];\\n\" . \\\r\ + \n \":delay 2s;\\n\" . \"/system/scheduler/remove [ find where name=\\\ + \"_RemoveSetup\\\" ];\\n\" . \\\r\ + \n \":delay 2s;\\n\" . \":global RemoveMe (a);\\n\");\r\ + \n :local Comment \"_RemoveSetup tmp scheduler for remove setup script.\ + \";\r\ + \n /system/scheduler/add name=\"_RemoveSetup\" comment=\$Comment start-\ + time=startup interval=30s on-event=\$OnEvent;\r\ + \n :log warning (\$0 . \"\\nI've done everything, and now I'm tired..\ + . I'm leaving.\\nThere will be an error below, this is normal.\");\r\ + \n }\r\ + \n :delay 1;\r\ + \n :put \"Loading configuration and functions...\";\r\ + \n :do { \r\ + \n :global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n :put \"Normal removing temporary global environment variables.\";\ + \r\ + \n :global SetupScript (a);\r\ + \n :global InitSetup (a);\r\ + \n :global RemoveMe (a);\r\ + \n } on-error={\r\ + \n :local ErrorMsg \"Loading configuration and functions error!\";\r\ + \n :log error (\$0 . \$ErrorMsg . :error);\r\ + \n :error \$ErrorMsg;\r\ + \n }\r\ + \n}\r\ + \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/700/f14f095d\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 13:30:03 22.06.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="Download custom Certificates By Routers Identity " \ + dont-require-permissions=no name=mod/AM-Certs-By-Ident owner=\ + mod/AM-Certs-By-Ident policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-Certs-By-Ident\r\ + \n# Script comment: Download custom Certificates By Routers Identity \r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n#:local ScriptName [ :jobname ];\r\ + \n#\r\ + \n# CloudFlare\r\ + \n#/tool/fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobalR\ + ootCA.crt.pem;\r\ + \n#/certificate/import file-name=DigiCertGlobalRootCA.crt.pem passphrase=\ + \"\";\r\ + \n#/tool/ fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobal\ + G2TLSRSASHA2562020CA1-1.crt.pem;\r\ + \n#/certificate/import file-name=DigiCertGlobalG2TLSRSASHA2562020CA1-1.crt\ + .pem passphrase=\"\";\r\ + \n# Quad9\r\ + \n#/tool/fetch mode=https url=\"https://cacerts.digicert.com/DigiCertGloba\ + lG3TLSECCSHA3842020CA1-1.crt.pem\"\r\ + \n#/certificate/import file-name=DigiCertGlobalG3TLSECCSHA3842020CA1-1.crt\ + .pem passphrase=\"\";\r\ + \n:global tmpAddCerts true; \r\ + \n\r\ + \n:global GlobalScriptsUrl;\r\ + \n:local UrlSuffix [/system/identity/get name];\r\ + \n:local UrlDir \"certs/\";\r\ + \n:local CertUrl (\$GlobalScriptsUrl . \$UrlDir . \$UrlSuffix .\"/\");\r\ + \n\r\ + \n:log error \$CertUrl;\r\ + \n\r\ + \n:local CertName \"DigiCert-Global-Root-CA.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-CA\" [ find where common-na\ + me=\"DigiCert Global Root CA\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-CA.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-CA\" [ find where commo\ + n-name=\"DigiCert Assured ID Root CA\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-G2\" [ find where commo\ + n-name=\"DigiCert Assured ID Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-G3.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-G3\" [ find where commo\ + n-name=\"DigiCert Assured ID Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-G2-TLS-RSA-SHA256-2020-CA1.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-G2-TLS-RSA-SHA256-2020-CA1\" [ f\ + ind where common-name=\"DigiCert Global G2 TLS RSA SHA256 2020 CA1\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-G3-TLS-ECC-SHA384-2020-CA1.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-G3-TLS-ECC-SHA384-2020-CA1\" [ f\ + ind where common-name=\"DigiCert Global G3 TLS ECC SHA384 2020 CA1\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-Root-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-G2\" [ find where common-na\ + me=\"DigiCert Global Root G2\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-Root-G3.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-G3\" [ find where common-na\ + me=\"DigiCert Global Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-TLS-ECC-P384-Root-G5.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-TLS-ECC-P384-Root-G5\" [ find where com\ + mon-name=\"DigiCert TLS ECC P384 Root G5\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-TLS-RSA4096-Root-G5.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-TLS-RSA4096-Root-G5\" [ find where comm\ + on-name=\"DigiCert TLS RSA4096 Root G5\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Trusted-Root-G4.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Trusted-Root-G4\" [ find where common-n\ + ame=\"DigiCert Trusted Root G4\" ];\r\ + \n\r\ + \n:set CertName \"GTS-Root-R4.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"GTS-Root-R4\" [ find where common-name=\"GTS Roo\ + t R4\" ];\r\ + \n\r\ + \n:set CertName \"Go-Daddy-Root-Certificate-Authority-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Go-Daddy-Root-Certificate-Authority-G2\" [ find \ + where common-name=\"Go Daddy Root Certificate Authority - G2\" ];\r\ + \n\r\ + \n:set CertName \"ISRG-Root-X1.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"ISRG-Root-X1\" [ find where common-name=\"ISRG R\ + oot X1\" ];\r\ + \n\r\ + \n:set CertName \"Root-YE.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Root-YE\" [ find where common-name=\"Root YE\" ]\ + ;\r\ + \n\r\ + \n:set CertName \"Starfield-Root-Certificate-Authority-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Starfield-Root-Certificate-Authority-G2\" [ find\ + \_where common-name=\"Starfield Root Certificate Authority - G2\" ];\r\ + \n\r\ + \n:set CertName \"USERTrust-RSA-Certification-Authority.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"USERTrust-RSA-Certification-Authority\" [ find w\ + here common-name=\"USERTrust RSA Certification Authority\" ];\r\ + \n\r\ + \n:global tmpAddCerts (a);\r\ + \n\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"GTS-Root-RX.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#internet\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"ISRG-Root-X2.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n\r\ + \n\r\ + \n#/ip/dns/set allow-remote-requests=yes doh-max-concurrent-queries=100 do\ + h-max-server-connections=20 use-doh-server=https://security.cloudflare-dns\ + .com/dns-query verify-doh-cert=yes;\r\ + \n#/ip/dns/static remove [find where address=1.1.1.1];\r\ + \n#/ip/dns/static add address=1.1.1.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 1\";\r\ + \n#/ip/dns/ static remove [find where address=1.0.0.1];\r\ + \n#/ip/dns/static add address=1.0.0.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 2\"\r\ + \n#/ip dns static add address=2606:4700:4700::1111 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip dns static add address=2606:4700:4700::1001 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip/dns set servers=\"1.0.0.1, 8.8.4.4\";\r\ + \n#/ip/dns set servers=\"\";" +add dont-require-permissions=no name=fetchCustom owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="\ + \r\ + \n:global GlobalScriptsUrl;\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@10\ + .30.30.86.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.86.pub\";\ + \n" +add dont-require-permissions=no name=awg2-webui owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + :put \"Download image, and save him to usb1/tmp\"\ + \n#/tool/fetch url=\"https://ros.vados.ru/docker/awg2-webui-arm.tar\" dst-\ + path=usb1/tmp/awg2-webui.tar\ + \n\ + \n:put \"1. Create veth interface\"\ + \n/interface veth add name=veth-awg address=10.9.9.2/24 gateway=10.9.9.1\ + \n\ + \n:put \"2. Create bridge and add veth\"\ + \n/interface bridge add name=br-awg\ + \n/interface bridge port add bridge=br-awg interface=veth-awg\ + \n\ + \n:put \"3. Assign IP to bridge\"\ + \n/ip address add address=10.9.9.1/24 interface=br-awg\ + \n\ + \n:put \"4. NAT: masquerade container traffic\"\ + \n/ip firewall nat add chain=srcnat src-address=10.9.9.0/24 action=masquer\ + ade\ + \n\ + \n:put \"5. Port forward: UDP 443 \? container (AmneziaWG QUIC mimicry)\"\ + \n/ip firewall nat add chain=dstnat protocol=udp dst-port=443 \\\ + \n action=dst-nat to-addresses=10.9.9.2 to-ports=55055 in-interface=eth\ + er1\ + \n\ + \n:put \"6. Port forward: HTTPS 9443 \? container Web UI\"\ + \n/ip firewall nat add chain=dstnat protocol=tcp dst-port=9443 \\\ + \n action=dst-nat to-addresses=10.9.9.2 to-ports=443 in-interface=ether\ + 1\ + \n\ + \n:put \"Create environment list..\"\ + \n/container envs add list=awgui-env key=WEB_USER value=vados\ + \n/container envs add list=awgui-env key=WEB_PASS value=zoomzoomrulezz\ + \n/container envs add list=awgui-env key=SECRET_KEY value=RanDomSecret32Sy\ + mboLs2325272931q\ + \n/container envs add list=awgui-env key=AWG_ENDPOINT value=10.30.30.10:44\ + 3\ + \n\ + \n:put \"Load and start container...\"\ + \n/container add file=usb1/tmp/awg2-webui.tar interface=veth-awg hostname=\ + awg2-webui \\\ + \nroot-dir=usb1/awg2-webui envlist=awgui-env start-on-boot=yes logging=yes\ + \_shm-size=4M\ + \n\ + \n:put \"Start...\"\ + \n/container start 0\ + \n\ + \n:put \"Verify...\"\ + \n/container print\ + \n\ + \n:put \"Should show: status=running\"\ + \n\ + \n/log print where topics~\"container\"\ + \n\ + \n:put \"Should show: AWG started, nginx running\"\ + \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" +/container +# killed due to out of memory +add cpu-list=cpu1,cpu3 domain-name=vados.ru envlists=awgui-env file=\ + usb1/tmp/awg2-webui.tar hostname=mikronuc interface=veth-awg layer-dir=\ + /usb1/docker logging=yes memory-high=12.0MiB memory-max=16.0MiB name=\ + awg2-webui root-dir=/usb1/awg-webui shm-size=8.0MiB start-on-boot=yes \ + tmpfs=/tmpfs:512.0MiB:01000 +/container config +set layer-dir=/usb1/docker memory-high=2048.0KiB memory-max=2048.0KiB \ + registry-url=https://registry-1.docker.io tmpdir=/tmp username=amsternl +/container envs +add key=AWG_ENDPOINT list=awgui-env value=10.30.30.10:443 +add key=SECRET_KEY list=awgui-env value=RanDomSecret32SymboLs2325272931q +add key=WEB_PASS list=awgui-env value=zoomzoomrulezz +add key=WEB_USER list=awgui-env value=vados +/disk settings +set auto-media-interface=lo +/interface bridge port +add bridge=Bridge-LAN interface=ether1 +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=wlan2 +add bridge=Bridge-LAN interface=wlan1 +add bridge=*D interface=*C +add bridge=*F interface=*E +add bridge=*11 interface=*10 +add bridge=*13 interface=*12 +add bridge=*15 interface=*14 +add bridge=br-awg interface=veth-awg +/ip neighbor discovery-settings +set discover-interface-list=Internet +/ipv6 settings +set allow-fast-path=no disable-ipv6=yes disable-link-local-address=yes \ + forward=no +/interface detect-internet +set detect-interface-list=static internet-interface-list=Internet \ + lan-interface-list=LAN wan-interface-list=WAN +/interface list member +add interface=ether2 list=LAN +add interface=ether3 list=LAN +add interface=ether4 list=LAN +add interface=ether5 list=LAN +add interface=wlan2 list=LAN +add interface=wlan1 list=LAN +add interface=ether1 list=Internet +add interface=Bridge-LAN list=LAN +/interface wireless cap +# +set bridge=Bridge-LAN caps-man-addresses=10.30.30.10 \ + caps-man-certificate-common-names=CAPsMAN-51B25E507D07 certificate=\ + CAP-18FD746E5814 discovery-interfaces=Bridge-LAN enabled=yes interfaces=\ + wlan1,wlan2 lock-to-caps-man=yes +/ip address +add address=10.30.30.86/24 interface=ether1 network=10.30.30.0 +add address=10.9.9.1/24 interface=br-awg network=10.9.9.0 +/ip dns +set allow-remote-requests=yes servers=10.30.30.33,109.107.177.79 +/ip firewall nat +add action=masquerade chain=srcnat src-address=10.9.9.0/24 +# in/out-interface matcher not possible when interface (ether1) is slave - use master instead (Bridge-LAN) +add action=dst-nat chain=dstnat dst-port=443 in-interface=ether1 protocol=udp \ + to-addresses=10.9.9.2 to-ports=55055 +# in/out-interface matcher not possible when interface (ether1) is slave - use master instead (Bridge-LAN) +add action=dst-nat chain=dstnat dst-port=9443 in-interface=ether1 protocol=\ + tcp to-addresses=10.9.9.2 to-ports=443 +/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 walled-garden +add server=*1 +add server=*1 +/ip ipsec settings +set accounting=no +/ip ipsec policy +set 0 disabled=yes dst-address=0.0.0.0/0 src-address=0.0.0.0/0 +/ip ipsec profile +set [ find default=yes ] dpd-interval=2m dpd-maximum-failures=5 +/ip proxy +set cache-administrator="" max-cache-size=none port=80,443 src-address=\ + 0.0.0.0 +/ip route +add check-gateway=ping disabled=no distance=2 dst-address=0.0.0.0/0 gateway=\ + ether1 routing-table=main scope=30 target-scope=10 +/ip service +set ftp disabled=yes +set telnet disabled=yes +set ssh address=10.30.30.0/24 port=2222 +set winbox address=10.30.30.0/24 +set api address=10.30.30.0/24 disabled=yes +set api-ssl address=10.30.30.0/24 disabled=yes +set www-ssl port=18443 +set www address=10.30.30.0/24 disabled=yes port=18880 +/ip service webserver +set graphs-plain=no rest-plain=no webfig-plain=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=Bridge-LAN type=internal +add forced-ip=109.107.177.79 interface=*A type=external +add interface=lo type=internal +add interface=wlan2 type=internal +add interface=wlan1 type=internal +/ipv6 nd +set [ find default=yes ] advertise-dns=yes +/system clock +set time-zone-name=Europe/Amsterdam +/system clock manual +set time-zone=+03:00 +/system identity +set name=MikroGig +/system logging +add action=email disabled=yes regex="* added|changed|removed *" topics=\ + system,info +/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=10.30.30.81 +add address=10.30.30.10 +add address=0.ru.pool.ntp.org +add address=1.ru.pool.ntp.org +add address=2.ru.pool.ntp.org +add address=3.ru.pool.ntp.org +add address=time.google.com disabled=yes +/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 +/tool e-mail +set certificate-verification=no from=MikroVados port=587 \ + server=smtp.mail.me.com tls=starttls user=vadossio@icloud.com diff --git a/MikroGig/history/20260628/20260628090117-Diff-Config.rsc b/MikroGig/history/20260628/20260628090117-Diff-Config.rsc new file mode 100644 index 0000000..971f9bd --- /dev/null +++ b/MikroGig/history/20260628/20260628090117-Diff-Config.rsc @@ -0,0 +1,13 @@ +22,23d21 +< /disk +< add mount-point-template="[tmpfs]" slot=ram tmpfs-max-size=64 type=tmpfs +2630,2634c2628,2630 +< add cpu-list=cpu1,cpu3 domain-name=vados.ru envlists=awgui-env file=\ +< usb1/tmp/awg2-webui.tar hostname=mikronuc interface=veth-awg layer-dir=\ +< /usb1/docker logging=yes memory-high=12.0MiB memory-max=16.0MiB name=\ +< awg2-webui root-dir=/usb1/awg-webui shm-size=8.0MiB start-on-boot=yes \ +< tmpfs=/tmpfs:512.0MiB:01000 +--- +> add envlists=awgui-env file=usb1/tmp/awg2-webui.tar hostname=awebui \ +> interface=veth-awg layer-dir=/usb1/docker logging=yes name=awg2-webui \ +> root-dir=/usb1/awg-webui shm-size=4096.0KiB start-on-boot=yes -- 2.52.0