From 326c0140cc7b85d0f59ee1bab8d5a3e303efed1c Mon Sep 17 00:00:00 2001 From: vados-dev Date: Fri, 1 May 2026 01:40:09 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at May 01 01:40:09. --- .../20260501/20260501014002-Binary.backup | Bin 0 -> 352558 bytes .../20260501/20260501014002-Config.rsc | 5547 +++++++++++++++++ .../20260501/20260501014002-Diff-Config.rsc | 2 + 3 files changed, 5549 insertions(+) create mode 100644 MikroMaster/20260501/20260501014002-Binary.backup create mode 100644 MikroMaster/20260501/20260501014002-Config.rsc create mode 100644 MikroMaster/history/20260501/20260501014002-Diff-Config.rsc diff --git a/MikroMaster/20260501/20260501014002-Binary.backup b/MikroMaster/20260501/20260501014002-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..caba1da933c55db9e3eb4fdd9a274c9e877a8278 GIT binary patch literal 352558 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%0AdU8Am&lp{(S1+D;BW?sv>`F&*75$ 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

cL&;3W2=jXw)o7aJpWUM- z6PWhRU*8D4QCDo}G>8oFQCvRJA%`vEEYx=h`HCCXRQMw}350YwFiXkX>7K%8G|{ad zrgNX`q{s5NS1bRE?rYkQqsD#JCa5CYRT?Z-q(DlkO;58MzC&QAA$~-nF$2K^Y$nnc z8ZuHSp}*8@sS*2PveOiW4kJ7hvz&FFy|ehu&768^TXb)@G`EY-WumY@#uYG%ZX+U- z4L&&@I3OrLu5(U!Z z*gurvp{3`ilaOIU(!9!1cQVH91YJ|D5s{2&bV&EE*4e7IHw?)KSQ$3EjTUgq$@#ll zM2UJTwHf`oHbRJLtRv)2IQ3Y5hbCG!sGZ|Oi_wHH6L}($PP$LAPO?XJMXA?QTAP6- zmPt9b@qJyew4HVzQcGC~U`0?xKe8f(Y0{e4%&58{)G6$`W9bSi)KN2N3z40JSZ}fN z=mTb2!hV?!EejblF9e|OJ8@TaFqv$)B*}t+dd_j`Yg)s-hll86vT=H7{@EZTFk|5= zzEll%_3uzFFAFbB>OSJn zmUn(LcA0UiM$%KjYeFNUx8UPMjVC)mMFdUB0CdL3Q$WFo$7e27!^^#c#o8b_{&9tX zTiZ=WBm8+zMQ|%hzWiMqj!6wYt&veuhfy9h1Co%*Uj|Bge$mOHg07?WUfKz>naL|e z!To}(Uzx~y={aMk_A&j~Ii)3yLzy^ry#MIM(m`+Zf51tcv0v?EQjZRfS_SQm%<0Q~ z)cPMrMmFayN+)8h^M0)~N5!B!eB1$313=-Q(1V&nrITcm;ZKqY)vb&35BTO70M?=z3ZpmtI2mFz0N@J`ZDFy zrn3S_WqsAtFY(|_h>H2M&#l0s$ag+z_&|YaO7q+Emyirf3|x zv=z*mL}(*3+|?U)i{S}Z=wV>jz}pc)5Pn1~S$O!Vpbn&|CKN&HlW|!?Jp?li=v;-V zQ-V0+a=vbnOTW?(hQG=>C84bnRlM0VU**|CmgSqcng&QpAJnfSHk) z+A~CcW@(Y3de(PUR5v77kaO(QuZf5Fvwhj2cx97-*)WmrgGo?kT;gxMGQq2!_%_t;51rR{*M7DFUO_F63U& z&2-04ndlz$wpi1i@Hv%!svb-vvq9@(JS~5fZVOQbn||9lH)|ckwi_GgVe+grTzuu| z@Y%E|IKkMKa|zFKW8I4iYIz_$7&0tLG`I;w@sbB@sFjNBDf31`IpCT9OCryAWp8_q zB*%QFTiIT6DjgtQVff2g>_XAT9MD1;l5-Uy4WQ(m9#Ty zQVd#LHc0|Y6D-6@fX z8>aeh?bkdLZj;wlKW`FIo@0IVBNjih$T$B&1I+%ZiVg@zxX)pqRwe%eYi`cB z-@Ezls)AoZBdfMd)V((WDXRaH%XK$WRgQme;qfhtMgsz_cr!S;xYdBJy1@*h-#xLl zM33h^TxwIq(U_*Y_AvAOSxOz=k~yer_*IuqX7nowLqK2{cJUoG7o&#nHE`<<{tux4 z0h7~>lNHKJ%@_Osd@3SGIg9PvOzu-X#ZPpoI*dXBV_nTi2_v0T*}DXL`T^lxehl&G zs7ANcgnT#G=8vS=^{7fFuU{!Y;!n)2z-;!zibnk2%jq}o)MTFH69ZYZzyP(iF90pn zU=zmp8}d7z*4A1qnH(;y9|DvQn3Zu0M~aYKRoQ6dYRdNHOvJ1AHN{x)+CTa3^^2d= z_aD86nreL8GZODxbvXrO#qU`W#IH`_tHg(fmg*ox9FQCXnUrWC<@on{vD5As_6o}aZ3RIKLEgVmcrGW_eXC+w9P?`=zE3{4Kry>7i<_sz>vd|&CUk6V8fMq zB$z$i&9kQY;4e6HGY)2Ycx=r>n7cLjTe7vNz!QOg8|C*L@zszH7ntX^jRW%_i+uf1 z{x28N{p?}W!(_$p!Fxs-u3Wvd;PCLxS&=oVd*g^GVHYeKoCVJvEfTM@{~1R8YvgCs z7xNVvrLuey>t&wfYmWT}HduDL`L9)_OI}JrYi)n=?4MI=C3BC874O7FBK|IUHe$Xg z#~3VFGuP2bGS4nORnnAgL40yx{>|4*Ok=k`baPAvh!boRxP`5u{DB(uQSS~5ylhlh zW)?5ITk&Scpw|_s?s*)rF^nb=g~m_RB7_y+3IpS+wz1U9(6ScBLI|sGq8yBx7r`pI zbD6iipLZG(B%OaR%d;a4XLrB>wi3_uAn+{@l&O^Gf0!m3`+T0Jc2#u|xX(0>pvUGjR9#Pv{~oXPG_2gDty zj?(^7RLf8d1cG0E00{(9=%)pc)1_$@h6Fu-(DV%hlD~Kqtr;nDJVFz^T z!b1?p#TL21&c`#fGhUG@kg2@k+T$MH%@zi?kR7?5bAtIvZ+* z5$q-e*=@`J_N1EYrkH=U&HItyIlvlVPI+eSacCPwI5?k!*!F?z12m_E+gkgv)O%A! z5qOO|7k-?Awklu?GJ=ZzFN}D8+_6>HOl-+(As#u@re!YNUq|QZ0Y11fUq|%~N_H3xu?Ljs^im=j7d5_*#XHpVz)%!%&$goeHUP7i}R zPN_}lh74h-JNv|6YWu2fwqU6SbRGuk(pLBZVeHy9;tEbq05E8MSV(Md~;PAC5?5MoE!Q&VFp94}@ZG>Y- z#>6L+EE$j?)+Y3*xN(->ubFBHsp5hWz1Lzx<8FZBJB=}KS`t`yj9sr(MS&r|ed{r^ zhfyB)t118Av5IsL@}w~Z)jHpSSg#b=@WWFh588vwB&y+ihx2$BbLk97s0uJPS3v~HCIQYwxGk` zU#36w@P~-6SMiA6`AXWdgObkA?UP=*R=1oc6k>J6X0m;vu9@nk!w!%YEUwkw#Fp$; zNAKhd9krGvjjDNvT;IWnSE(Ok5&7UZoh|LwTava?Y7YATGsMDi0jceS<4|e8@Fx(*y1m!zk<<7EKB7`^)^WBG5frWI zd@U2@k+9ZqiEDCN%HJ((RWg`9FexKaF%nyx{v3ahR)~qGT!SvCfN~G-I$<45%(kzm zwxB67-6+5Es!v1c8l57Nn)vi1|C7}*{gUGI3{|HpId5h-Zxe$EOmx}mai<)cZ>Q6$ zQqo-`DCrE51*dG`odw-_IHoH*G!|?kpjj}UR84Xlc1>>$m6^CZj<-PQc|I^1i zFbe<(_i4DoomgkOeBf8E%GPjzxEP#e#q<2QyZmfm%ExkD;kzx3haR(C|BVLP&^W;# zhF<2%?*%Gpz>X`OqUtiSPX*L4ECjx(j&D{wC-wqs*XRPZ>KrGP(b5vCAo6vkZ4s_< z+cqf6>?0IIJWGFnQOkJILY$85uqCu^e15@=-IkBT-ZVO0-4e8QW*nGDbi|O(Iz)q6 z0-48L3^OtYyL$~YNh}!5KbLwa?8O>8@ldd3hq)tCkh@Cw@gS66(fXxH$T7IQYfz!; z=!C4y68L5Dy}H0mJq+zPwMZ~maT>u5wk`cl!hLAoyc;QWnSak9kEV&89DTNh))Ol4 zCC-;q#e;SZH$r*1fJ32MB5wug)2rHYSpB4%Ggol0My~`R85HaG-hnC~i%-b0_3duw z0EF4)x{~iWEU*E|;_7yS-Sm4YYs_EHL@f`40 zB;=0$cb#prB&KlUR?gP`4k`TW9cP7~`L?e825=IJUX0)-B73?MlE28?`oQ?>p5=4O zk}bo9*~=Sy<^3JNJN&{GLj4@E>)*xvE|~X4{N&TA-03?^6}M}BetFdJ4>)HRV;<)Rd;NAiXIyVu;-eOqWAsu_%TMK97Xw5-U$|P>=#=948oFPOcsiAavSnA&Eog z7V>}E9_!7q46Tss16wuPUL5D`j-MK13}}uNd~;xhENsY)J#lGRM?S}8T#Uky@5QL*KWo2ew5SQ$qQZ3iVXbkPv;7N;9M>b#G+}1gAA`wX1O0w)pg&r8^V^H0xZCQ3t;(%E?EJMxXq&~L2Ki{p3gV_Q9OPv;cT%0 zaMj=Vv}w~26!vrE*rg0aN9uMA??-#Satm6yosG-V1v)$trLQh#58mBHD=I&0B|WH) zVDhdpAt;7CfgX#eQMr!B%S}Ezb>PS(PSCEX_0zwOR7{uG@RTPT`b76B<$8XdxLQ@&~?x3BI0X+{}LlDv4Cy1VWO zF8n3>^tHcDFXT1hD72%P4tW+Fb+Kp&kEwS~dui6T;xn{rb2Hz~#L#KYvj)pN*c_>( zCCK^tSq|5YtU;DAn5U^WV+ALGI=t&qWPWw(CvX(oCS#A!Ln8)6@~dY^Tj^qc`mA#_ z^z$S|et&#zmdah!h>Ncdidgh5IH_-a)jAhcCN;jSPhfTFSxdhuSn2^e)%s%qaOTCd zd90`crU{}ng(h0P!tmyT|FXDyUs`I&w+I4t!Q!F1%ZAzQ*EOdn+RHWQ=k|xnr-h%S zYg3c{Wk{qz4o;uHMH5vQ7=lJ?|!K&k`q5K4>M30I%YjNNT_-f|p!PYpI4Avr5Yq z?a{84*u3Wm2igT1*|0x@PnM##xcEI^Y3b?u|msLn<$+7fJ4#}cAD=pHGz%xmag-}Y8!&K+D8-2 zAhTkLMcYxNfJK8P#-5{wR0d>!rG;3ilKogX-;(*`2RwS`^amPo;;0(A9mpBs0vzDh zvELI-&(@)8=@Xa`z;yZtI(qmnd(7uGiV8p4wYU=MG89BxXTsMu=#iCgdpqeF_{CIO z(R1`DF2PnW#3^p+bipYzvwfKq%>0D9gYV+EJMD*`FndYhInJIRT}1eE2q6Z2_LZ(y4oSvya9Y!0%B3hvHXFG)LJj$6!G32_)zzw^;p>BC&!Wf zmn_HG5>Y71dJbT=yZ=TA|N4ba5Kv(*8@MrcdVGg?UWjla>YC}JIW3cR^XhHCLS__x zF1724gM}2m>2|vu5r!o_;+4NV^8|1$UDzIz^F2!KzToE)w6hfa(rhr&j8iS}032LC zZM+>b2yRFU8xW)SAL4=Z%BX{uX)J{B@+of|_FcKysTeLUz7g|HzHw-hqY$I;&x%e= z#wH41!iM}d6ZJh=@ctmVD*$63s^{!K^BwO7-zkx4C9{g zz_zA;4GV+xGI=d2``ZgU1YhtxGw#36@epV9bJHYP);JwtlnI)>SlUbU`hB5a0r2U7 zK#|eiT;SmQaySbJ1xRJ6dFmn^Uv`8x+Va9)F?wt_Pn-$HsS6LBUG=7IuY^w-fFK5pQ;pwUD3AWfE0r)22_}0z07fE-y?X|p%{zW>5r8& ze>tRLL0WdT)VWy&)`vXEB{075#4+W`9C|8{nxQ}d@sru`Rt~=CBj_Ham{US`tUd_x zUBt0`-nmZ4gvCT|D#nB@Fq>Sta~`!BC$=lCJu{}M7KLmhgS^X> z2aU3NdI*c=#9AKhs2r^Bv+_t8wTbRrN-pvvK-bv_$c#Ik2Q)o-6WN0wX#bOGcJ2XY zFIzmaHmHVyugXQ35<9I#TG83g#5#Vy&v{zad`_nr4Pg>;Xo^ME_lHVt5Wudg^X}7Q z=~2VZ*|bkDR$gb)2$7NCk*y>FEB)6bP@8<+#$rBg4f$EOCbFsE|*S=SpG0iM{& z#wY6R`87mxFmr>qccwhv<oL51r(M*Vu(RT{<5_8p zeD6oxQ!;f`Pcnpr^d-vNpF}KO7&o(>&3_Z&_h0h?rpX)%KF{?-nl8s)Oda~R*$3_K zs>r`^_@tMB(8v7BotYaD{Qb3aJ3l2;(d0W%bJCeb{OaWwN z#0wObwk{Gp(E>j2**Lzyo>ynYC2EK9Yg2+=2Pi2e>Bpf@HvDVu{WQSU@V5BrA0Dsj zN0gSp0jhXi)0Pt)TAzO%-*2}huuNn>7sJ%p4O%B{n0~(Rt(hQ-(WdudtE05+hx^8^ z<^u4-WHI6VEKpuH@xUm%{lccyu!{%$BYw?Y0pA#hYdrNm-d^|EP^gfV!{x$MpH_bu zVw3YQgWmohz*>F9^m8Hs5C3b}s<}}r1DE^Z=tQxK>Q?;f9+C+9hjygf^+P3Ns_#p? za&f=ERiPk~QJN3seym`O&LIT2C3TdQ=HtAT1|MGY_DF<_(%T)WPk7l1mM`oG=ERAL z$J?_FtdyAJj>jE)=FSQ8c!MDwFb<9f|7%+SII*gFDk%L}-Q9Tdu~ZofI#Iz+29`>k z0g2dHp%}~d%bI2qft*jOt6MtdMExrd@97Y_O!jeeGqUU2hw8eXYW1$AYXpF3+{R2w z`(p6i$qY?$7f51u8Q=*rzL-gWm)Xj$SKtZ7UIlM&zJas0;3qJtH1Uy+bBn?ADD!G3 z44spX6Avuuin8n(8VoYCb--GLF+c+-px;(pH*(K>Q*FIrrLrHyA(bFzCsQW}b-hbcihsPAEmRQshr;F~Bjn)ssGUv;v(_=B)U1PI_srCTa6nOWI&F*2 zU#Exy_~;Bk$XBHHy8LHt?n zm-LKZTmpg{Jld^0KfRq@9jup^gS3*~Kdv_^Id!eJk!1{f?X&ca5`winjM?1jtECJC zhU%lPHG9CTm;+R-PS_vF7$(C3=$cNIbnRjsUF_f%LZKy!c_q!B0H_Ql8%eUwJyvH3BcVz)#6owvW zI3}@iWI#L)5D^YtUv4zY2j3mD4MVY8HRo#A2x&`{fk^oGSxWb64H5{ zTRNFYttte7CnOQY*(bAUhc+RyXybG{{%Kv-EPSxG>D{1P`qu=V@u0gO*?gk>D`G@S z5!4f@pOjN9Dv_|9Pbo+Vl@*~@G#qWYCR#;vI{)fce1Oe-uDud?NK*!YSHcM-qZ4NW zH@LX^|?HNBb{!x`$KWE0q3eKBQ;?cI~ zB(U=u_J`xh&)C$`g#s*GLa-GTI$-(Fmq09>sZhVK>A_ookCK|?m^dkjcoaj*nfXP?MO&eWmetq~OogAt z>4JbM=H%9uaE~vEr~h%glYO=xxgG z>qE|cXyib$v|m$El3jQg_gCU@RMDG6p;#^K$ZUku4NtujDNqZ|WpLCgnM<4i*lx1A zj-C3NDKHSI`)mY$en?Hk+7F4QKU8!P>aunE@XueOvDlgh2lcPiOeA8Su`BJ0e33I{ zZ*h}b0Mm;rBd{G|{;5$)v3*D`XQ%_~U) zC(CCEIwd;f0NAB)BdQOGx|ldAh*gqu!NXxy>WlzI5gu@OY!%a$|M*{p#K+MU;XJOm z@TnoMm6MKa5LEENWuaDrsO-`e)^tn3?h*AJ+_iSq< z#=HwrZ>omJP})2D{6V-PWLcqgK3q!bGNzEaDPVA*cI2s%^ST*KSM0l$7{rPT!ZksY<Yj`KH%Z% zkSp1f{)wv}BJPGXtw}x(m8hKhn>-Nkd6LY17|xJMWV@L>RN~peP>9t`JxNS+lFyLy z#NWmE|X)_!if`^xPDyVbG zA-kd7T(iT>4F#cmjNDQYI@&PGg{pv@BS=)lIPq`n1ceC&#t+nV7US;mKB4K?%rkfLOw}mL5qSZ-@i)*f;M@xP2 zA$IvyeqXkG=r`6bF?aHxr3PjXSJ5>r2YJE$XjHr6R7>TFM+b+EA-1lX*h1j z0-5N!SN~JnZ(?x`&2fDAcVSs|;Jufts}d}Z(Ifl|l(0$e3HfP6=;#+z)8o(D!cSNM^_lC{EXs?eh2XCEIJhdQ>a%TPCN^Z2D#GMy@$@D^<7$xx!bS{8Fmlr`{)KAJ#J-c2M zBd>xk^?l}R!f+}?EpMko<9#kTXz15XyYpl?!C|)~3a+GlL?eD0UM>saHGeQ<1ODJf zQ;7Yv_B|Cyr6i#*O$nwr3EDXGc=iZfD$Q$+2h36CHamR(3f&#T))`hIDrnm-E=+5o zIAihI_Cv^~C){U|yOf`z==h5_mq0qglD9v5>F78_VgnY9y)6#3W4>9QwWeLlp&MuG zmyK;6^1UIn(QD(_O;k~J0%Yw5p9Gze~HoC7*DtX*OqWmC5sI6Nn;bZV0EN}Qd zD=959qhCpdt9QSFlU^y7Mz!Jl1pE7hn>mT%JKjnoZ{LhJ5cq$^(|=?owbTsvn5nfmJp__>CB4+?IU*7qpA zaZIf@ow%f*>^ZB_rf)`EY&lax@R8u}7>wHylTzF;_$BI(Hd%Us5EP`N%6NrG z=M45@U;I!gY2-o-+wOYzAL&=nxYWP}jCXx9QKe zVLUw|nd?pOThksa<9aszbYLn}u|w3rmHo-r-pS))D>W8Aytlk18%gNuG(W&Y-2J@)Jx&Gr`hGYA8UoXj6r%@{->s zq*0`{>8<>_m0NDC;Eh}q=`2^rs#f{xHI!94i+#eOC5~QIB3LmgvNKl7he5(>94K0I znr{y4huj4o3Bo1HfohSy1$aEC9|PWTLMftO4-m7swUd^HjrrqCe}OOV?pStPCey6j zwmi$Oo>vDi0sr7=ccJs~614z&`TglKY4j3L4@G5a0hgy^JisBQcE)*D%FZGrDiB*g zQm5BzqBxwCTJ&0e!}ea;TQ@$r+E4fhD1?qPOqma_TBjyb@QljDOEP9`=RJ^iIn;uL zg{ywlzHwpW!3-Gn3S9dXj=MI~8)R=4OWAdh!zy0k<-uK?kNO+GnsVeKA@ZF^YD8XJ z6dSHP#~LeJ9n%Gvbu(pV*i>ZG zm+BD6!0RbK^(~?Mvo|urFZP2Eii*<`7^`*~(W|qwi($d!Vq#dMk1(n^G6~@wV8&i} z$9wyncwp?%`M=Co8Ag&)UN(wwe$A#i`IOT|`!76)gBVqKduhRL9QMXtRCgx&bJw%9 z$zE6bp#;3Ws7lu|RZ2dCv9MT&yT~v+wqMwml0t z_GU8*-`+!VEJr*Pd(#-Ht0h1DEZA_~-yf(Q&z1)F8l7j5X>|)}k$OW^5Dn=PKJA(l z68oKrk}^X-N!V0Qi<}48I}k~0xTETbe9@d8+zM+Z5o{4Knf)4O#;aRQEg?)~O4chW z2Jm1=#ye^S3Yh!_vHN_{+@jvfox9}#C1zZKuk6>;mTcvrSwWq9?kTlfabk>ouB0X@rOXGBMIWhyOZ6+#6bMo=#PPCy)amVScrMKtI73r=& z2r4jnqX)n9tlKDBfGkH;IW2feBa;GN9V{8S|7p9HDY@z7;2$mE%6BG75sR zDV!0l5e-$)pE);AIZJU(oHaVKnwW(+@7Oi)HFn$;uE|;4mnn&_4XfNY5>x>THx(_A z*!&LOI}BhaA}PmV1o9U$;}|FYx#hWwev4RiTYBpdbX z7G56Am(gr0A=q6Ho>1D>ZE1(Z)d$MA}TWls(f;sxP6PMZ0oBJyzd zbW~3Y7g0m_^PaYmx<-#4UmaOz3aFBUu&nk$Sag(0!rp%oNZj7dvXN6nZ#1!D3U9Zr zWZLzjen{IO21yKKF8X^DxeT4mg_GC_6~0!XOCW&g7f8t>@j;&TIvU~3CIdGuhX5?OE`ff|B z9yX&C-Llkxkki^gpIm#;dD3zeME>(k+|Ad}K$rf=;nMA)gEU$zVGJ%|t%ybBU?_qHa#L{do<`5V{?P{;pgGz@0bU6Rhyl}$ zOmTnrIhC?vdh>H5hZq7j)GLsfJqOlu(Qg_Eda^Q|x{8Z-9cEK4m}ycr0vi$)&0iHd zEjPGb_T)GuSshoPoS9m;&CH1YHN1TPXca(8OoXzjOL?`%Ysd zWs?RR2F%heOZMh#F>4OEHB#DX7Z_mz(FM{T}! zs$tg_&xw;R}ppsjWRF7Yf1q}Nz(j;A4 z);v}AU5X3@%@etH*r>`glAfa>lqRlJcO}9?5%nU`+x|{0B$Yz@sa_qUF4wF0$5A;p zJw~!FFgp81J}B)6J*mU>IXGnSIyN^9wJ?j!`y!Q(zi?)~*t*z?`E|^Z&F>%DYNSYd zrwEw)Es=1lsT*hKpD0@POWl?H=(gI5ckPxY=;Lo&JBTbcfN-1KaOaH^3qJ#gxdo5?P6@e1ih56Qdw&>ckvMe~c9y&L z7tf;7m?|Uq*A*CR^^#V~l5!3q6m?+1ZcI|$l($o&LdK zb`O3kB`h{?8YLhcN$=xK%F|H-#Rppj(1n11`ATh6~x@Gg5y;+eYgurZm!uy zZE)KaN@P$eb`_Th7{9UdW=%z5(2JH;@5=Jhzmej=-^phvMX4;tV(IQBTuiS#oXC%Q zL3h@4XCl!UCU#&_g^#*>RJwhl%W)q=a3!@T8O>>k#_(nzGY`a*#2WL!4Hfg9BN)Gv ztQzV#zokrmgj)TkoX%e%bhgJ0Yg>NnM|wgZaMvqd@ru!G%&coqY@DK%@s_OyU*4d{ zUsJVmbfvQN7-)dnQjf>jEDkjnr=Z{`HOs_OIs7$No6m-zRvCuW62|Hf;1Txf{ z?KtOA5UNTyI%BdSA`a?+px|fjU8m{-7}epnjRKEc$oV3T8=Aqbp#){h=D{$i_Ks_& z$>q8)6-{7J19y}NOYL#YlHl=-Hk!Ivb|F+tFK6c;Qb}~{cpRc?9-Pne42OWMV@y$A z=woyv?V?bOQUi^UQ;s}3M|R+lliw{VsPiGaHMgH}fGh)jmtw(*ZcNhAN9^^p${L*I zrgrj;DoO_Ty~(@B$nYX|5-yV?FAp*q?4U~SA;U6Ta|LZUFfFLiNt)m-n2M$|n|4iz z4jfVQI^rS+$4z|6qQvMu>v`Q;%w9z9nDHQ7fGj+S6&g4Rn0B+{8OWC=UPg#CWrp$>F z_CFytC5f5oDeKIU{kc>GckM^isIRe(=VQ?sN zo`=kY8d!L}j`J*yl*8s2fojl47&2QQLm~1HSU$SSzlvK*P|CW9Z|63D#R$0zHuK7R z!g04=iBPUTZA5>nr*~MfjpT^f_7r+-nmSxNh;_JoUCq_!{llf{Mm?^Qf?UkZg0=># zA+TL>{PWcxACN)}C*%)kfhzNz3rKG!&4;k4jDcQ{LAvxJUUh^4*5+{Z&D}XHKOcbe zH(+u|zXag^Q(mp)t2W}*TQ)iye;XZB5=!1~f5vcia9nNZ81d*a8 zFo-x_t~7c|YGH>fa^`}Ivu@{?tCa>53E#oS@s&+`-jZS4FW$UlfFK}}X1{*v_CFH* z`l`XgmqcA3kIf;}E4mdLm>Z~*GA^@(A`l1y*ACTl`S<#cMNJoa>J%#mX1Whc+1ROa z$|hf#ko(=GI#wXpLa&9TJ#K?05RIwz==pOdv93Cvq`dd1Q28_9y?GQseB=N%3p}A*PRV=t+Ypv9~ky=ajds^mD zmb^IOI}Z*|X1(T3?{@4Alnr;*`f$aAu@iefS5&XXl^}h>KnJ#)7!7G#XBgZ0;vM** zNp!@E6qH1G^v1{(HYd(7sL`U5c(A)Kylaf?nOsZoSt}ZK`y#1=gF)FGt4(TcTn>KZ zcgSeaMpkgq$Omfq2o2Z&O766T+!w8liq0^Ym$|O!!2%HgJmu~fu7)Q9Uy^5Q;Gng+ z1u&O{c)|3yb{L2ZehU_I_mmfskI2?kLt*Nq`?NJDW zR7bk$?i`M>%ml37<~$k`hk6Iq*05Mjo~6aZIUiW%(g}B-eU5FC;k%q7r6PV%I$)Sm zpBagifNLaB$AStKdXJ?v%Zq6xqmlMhX4RDr{)&|Lc?y6T?Fg>F|xGXMqOf+;)Se9o9ikz2SF92$Zzo) zgd?)D4NyjXokF)@;Xh-SMeDvljK(kiewf$MTOldT=U8#;s(W*IS|xQo7!Ei_q1wp1 z5Q4`XTO~>75jSh>kO<-YDOUO~EPu`(?PsynzBn2~|G53PuA)PP9O~>QC0A!6JL>E6LSq*U!zF|E7 zJS753V5Go)IxLOPUyt_L4z^3iktRRlZ(x>4&~JePa9lsgxkHq7}r;ewVQ>*AyqVNC6 z8XCK*QX1#PUS25<*oy;K{0zH=VeT~QCGDP73Pm9 zvzQz`p)%T;Igpoq%KCeg^KxY2MdjrwiMuO%2s1o>KU4U;Tl2(ZSt?!li^qO0#W223 zXE1ZAKQUWQi-CeVGs{;=Oh zSPzN7yw=fml47*!zh2h3akL72rMh)>DBkB6D|PSe434+g81)-fkr%mM!7-qG*Gro| zf24dM?*zgvKU*XEna$XKh1kSIrvpAz2s9@KGaZE^m&s{~G{!<6vRqbCv=|dxBJ?Re8M03r7mKKMu}U}OJ+2O% zxpzb)S6fS<1_2F0-s$MVodiQgwhV%}zI3q;v^-}~JzX5`>sA&+&;ONCHS|Hh7e%OB zL_9gR^3bbLNIK*KbxdYvdUymTOj9Kngic_BAdI^eFlk%6MCx1Nv;ue&@ot6`oZ>to zT83r`cEozzRAnyo!U?UbFr#5N>$(7RP@+S;5irzEAW1DINyunNk{)PR z+!E94FmQxdi$*g7Smdvp8l>-G4ySS$qxruU?jhJ-93mPPaDJZz6Dwry9#%`@8_vh~ zO>;7U6q<0bSg=ziWr;~A$A8mj3Fbdd96kASO}v4iO+Le|bM=-r9azrzhZLEYLVZ%Q zi!_>Take6^p?4jC#O1BGtzOTJeS0@{Mvwv^GxXfp(j8upXh~FSsr19xu1q}}gmIyR zOVRma%gAu!AEdYm-s1oUs5Tk5{5aq%0wDj+rN_kY!+tNH3&ch4q{-;eztUg8qr73J z`LOP`LcS{{r{=6E)t}Wrn&m$B`R1GL_NhCg_^sVDKM}rfrJA2f2BAI89hlaszM_L? zZU4GM0|C-N3uI49AOt88esNs#Y;~uUiWX&YT%KlTFLl+~?chD@MqCt|4Nm;*CU-*d z*L{IM1c&QlH&|tCUIGcSB`laQdp2%RHn=7Rv00Fqc9pnutuK;dWH`NKS)7{Q>0_`3 zXcUPO>D!Zm+2YC5_Ek|hXMiXC{17bxA{4s3L-%Fc9hcPa_}29fZsu{PN5@XG<|0un z$_PbaTR;+9$Br!og1n0`^2N6Xb|DMgz9C@}D(jX`L;+P%kL@Pdi=tK%6OCd`Y$g)!~aulgG-@0?p<#$62|K%m1YhS)& zYt^!bT`VwqvwUjoAsQN>LETK8!jNR)*=hGp)i@^j{_c;3gWwBzJ)O4Wu+Z=E7jiDh z7ZJ;(i?8`ddfKqFbf%2{sw}jCQ+`Sw*=#k!Oa&8}eiE`- zM)c~&Bepn6?Ix0F4Zirw@{BB%kjQ>ss>BRMtU3*{1F(= z9Zk_&2{Gi^>gw(>23^6Ki5J!UqAvpkOrd6;9h>)8tolwEY;; zz_i-hvz(>ttAxhQVBw~yYY^NFQ$31)kh=$@_S!NJwEegXy~XLvyXe}xv^1$7zlGZQ ztar0#EJTKUASNt>5Kd1X7)Gt;FVJA#x_wZ2lxN-@ z=|jwTqHhvWRA@h??iFvqsn|I+*Pldm77sCqe^HC}uKhG-aY`*jKPs@D68~{AR1&*H zBB4*bTx-)dADN$>>kT%<7Oj?Im+Tv~pS5g@C9cBoZiKQLj@^?0nGPQA5p|=di@Ln( z>cN%Aa4)Y2gn8Q;a-kVsZ;#cPnx+0S#D+0`T$dD?Se~0kVW3(f&@)+!nc?^&^}Lr<)Nu;v`JKX7J17vter3YG^H zss5cbguP#vYaJj^F7Yb$aUfavyr98b#%vZgu$OOv+*6$N1KZk}{_Lto-^96(x1?o@f&mj&HrBEr6QaBROS`d83bUg_QhWb$W1yc6 zgTmhN@@>+OLs#1w6Y;23pRMrMIBKi`a*%>OpQ09yY&Ot1ogGKf@+*JYnI&2lquN#l z-n>2i%kTKkW)||ho#nNlu$FXbRMaqv`Qc{`S>Nl%-j>CWFZNsn5J7u?@2<;kdB5MH z6)1Y?LNrjOO<_O_NVlBP67En*!!`9>Z&}xbm;wr{az00$s=Ijd9wz~VlhEMd?f*Wn zQM3EZC0w{&Hy6FjeWy=z?*Meb!T$M*tn?IOP#;Uj9SA$31sQV}t79QmDn*JaU_H)3aUl1XysKoPCz4z>1 zLJk&CA3_3!uIdj{@V?`wsOp44=e9b8&Xmg<4aQ`)$cgcT#!N#q zqk75cW>=8Cr57mbwB;A9eJlzsxbAWK9M+;aJHu4XULm?Fe$Q(>9)DpAV7NJkTEZs| zm~leat@bBDaH|j^{h zM>!ngU)K3WxWfh|{el|>s?M8{;Z^ub&GrsZW9ct|BM|-X3#d>D-(5u09)^R(u_=+NOLgnEAoQ3m=;U%?n|J%LxGhL4k;_- zh~OQjD(a1$!~pY)M5%;K@Ep(VKK?t*%jnbN0lH$;wHbNR6V@0zdw~aS;qEjHE`;%d zN!6WYxYX~AP9F15n1Ay3@TT!s&3XZYO3D^JoFsWv@@&F8nUPnM*W`~=o<{7PyvZ=~ zRU$|%RPiIvyVEI+e-s9yB0`8um)O0xE8!c%2A@dFGa!*?_UP)rgVmN<61-iYuRdG3 zTvqRmd*kCMBLNehw(H$Zsc9D)=2LS`|9LB?JQJ=>*tXN+j#mslkt zbHSU+3}NCuQo2Tiu*BNIIehb&Sp{#_6kZJYF%avpI}-e7^F|HQJeBBMf0NK6|o?1RzpIe$*OCV*If)v=Ye6-KU??eGY6OL&c@ot&+YjB0>^Ys@aP zgfiUk1u3ceapHar{Y#{*j+o=ZGFEK?D`Es5!Ipg8v1Z}-mky&1%dV6u;v8+snMJ3M zEQm`lz)a8m_+tc<{0OgY=8gdWKLEf}55SmOBDPBV60ZmL4^oiuyN-If3-PP<;pZ_ ziwn$Q*vsIiqO2j~SF~?F(-r=wFp(KsLVf~HpzC>Vv`5`L8#6KrI8!FL^ZDOC^pQN3 zEvm0Od9xdS`!@!?*^!*eZOByb%??gt-N5*G@{z&G_7bZ&ME6#~TM4uYwdf#JY)%o%e1H z;3~@^+CA!^0WdM}KMCf_59zvBl-+A&7}ox$<(ya(dHppwd_--R?I+4nm-v<{iM_@Y z40kbf#j=vY&$+~AKOzHhN1@_@#nNK|KUih^xP-<1aVq_YI%t7T&a4-e>g-g!G_lmn zh1(LV((n8tD0I9P2!UD<*>dYEl(D~Dq5Y)PLUNtq&61rrKphn`RB z_YK@}G=licbTd>OtvsG&AzsusU$C)hk%W=~ywwGn+Go6@&S);P2J`*IWq7E=`H2v0 zI5iF8y8O5=4U7B{hne(NwZiYjed&=PbS>X#nDR-WsfLzDcI(ELx8b`nsse7|E_dtiibN8 z^d3OG+BhKN!xfd%gEZxL%N5(^w`AV=ly!Bq!{dSJ(n?2UNIQNkI2cbGTyYPb@)q)A z_i^Ii=BZyx0L;UO`(OD$Qy#z3CV3~0RVvgMDW0|koXPle0Cwj1wN@6}_G(|Ne6K}5Y@hR`^d>X?`84G;pIdvA6Z1DjjJ(_@!@E(UE!YyvvKHhmR|-4N;z8Q zM(~lhHEGBy!O$0ndT{|!dpZ3sspKF2?-@Y&87Y>Y;0ctm_(sp-?@H}gHZun3AxPcZ z=9>P<4x5)dp{>0AS=$HQ$OW*2xMq_PkcgV=6VVYrAqjlx$t?h#c0}|28RWL zbW_*R%QKx+6+mi4g?zZ$6I$11V^~NpwBQD%?so2Z*_iVDji|x5*>fM8t6LHNKnInb zRfM5va0Ula2rviEuiJbW?`0B>oxIuJlB%O{EKO{fJu>A&Ys`YgDNuXZIwb;F=CI3wxR$JG`B$G&VzGRd9*RKEW-qp6$@F0-0#C+VgKSS^@4OzdCSd z{e56^J}@s2`(Vg^L38P=YTXJ{)eywJ_L&4)E*?~9wotz+xe*-j?}))QZnqr>p|puf z4uF|LtC{r%rx2M^9($l6gE{iN$ldI*jWI!{zsy`kcALTCmZGzg4uf@uV(sL9x@>(R5;>UGcRi?i2^OsQ%OA zogXbdI-Im*dr31yYab?k-uap zFGzlm!61}br)b4i=04^W+ zMJ4`Fq<6}qjprAF+fVM+bMvj7jQ5taIDIv&#V8wa{98Kt%ezRYrg{l0!2)Z+$YM7v zsE08GJhW6K>Z&`4yzv-r#3GjwVh^FHak)Y~#nJmX*lhLLX?k1o6vOb^#8v z_eApVz~>M$4*K&*hUvnb!0yz~nZ1bj8((!jY7tLy7Te>OId_ ze>v`CDVglr+HQ{5G<{Mb^=KX3NM=y@QC1pw1AdfXU^S#5g-#tmSFc55$CU;0$7$ij zMRjBicSx~Y>*^D|L7fI?sA3+EQz#ulepLy8q)c0d>x1|K(QhM~MmlF1rOBNq)=l--ygvY66Us)*|3;c7A zNN5VX1c_`e31z^qb><6IgLeGh5K>@Hyp@Yks5aWA_?!Btfn46UX4-T=567tu*8yEu z#`=e_xjOXV22ZcJ?DkSN5hG}4BJUu5vYq9P!%m7M!82SaJ6rrbskLv*AQBcG02AuFp&JFhWhTEFtjl5!j7Z;)N$LbA3#And^~8rOrw2$p%u^-EmAUa zYvtQ&XCtO3{_x*k_Gwu7s126B6fXlht0eR{zHtJyUeP2iPD!5UnMUT>XRa0wBOc2t z0r3a09jCXK`H$Lo>mdWi$cCg`P&Uyx4k)4Ss6_7Qt00wym*kZ3&I}zI z=2Huihq22=scy>Mr63Z7irJ?c1i7?{R~wWl7dQqM)i2kdwj#YAMl~MKsMh26!a~34 zthFXByo%v|_q>cJLMerXBfuR)0i(G~WWZgX@pbqH$Hr=6lTgAloy2?nGyoE9&!UyP zmEzepbV7M7H}I~j`){dRrJ1>Qs7(oTLqf9dRlKm*%f5bRT})U%>%YcIRZEf#IBrO5cCWmRW<{KMhX+ z0aRkbBjuo70SH!84-D5l5Ypcxbnp1O%H2>Uu%+TS^q!r5(1sy@ov#ZrX{VTbX{~Nw zRUV0ID%pVe)HHmp1<)yQu*83wArkQ>$L9nt!FtMyZ`~w!E`vJo$ z(1?hhG6y)*Eqh4A_~!)jvZ-I*N)@kQwyRR+;r^Q-vP^40s(Al&9#jZ44-}9EM^iZ| z*`vE3&0+7-r?LbB>rGJGCCKtiz`_I@ce0j6^AKS(5+#LV_sb3@wr*yCcrDy}4qVY$ z6oy_n7D(jU?`zQ~qHABC{N|o{aB|l6u1r3%>+j68wd`Zi|knd@+IN}M)6pv(6{u_f2Mh5YR z>jQt^BJqE4^L_R6MBe zK!k6)7OXr)%5TOuc?5rs{%Ks}U6RM2r`FCZa)KonQ`NH|7Z_h^ns`7E_o5j_xp-09 z`PcHjrYu;`Sm+{)2Cp|(O;finH#5eErvYw1Fgrj(H&Qo`tJ}O7`ri(_bUBcdPnNM=K1XNUwr?=RL8L%A^=(W@PrAnzXFDz5A@Hg? z@S)(oN!iwmZ|<(vxPh*PBPU%rH`shA{!o|quhz*W6sVCrMNv5J==9IYF5!SO?-{&h z8fzTVaO{m{za#B<6fmbY&IV|`g`Xxz6V4)}qzg=#fWH%Hgf5Y2CrsoB-GaOb3^pBD6{@4gUkC&*6Bc!k6$^IWakOM*?kR!O{rcv* zMZJfH+lT>;NMjn&dhj1esD2;FbuST!tgX$=1%VbF@KNo-_BI9=^}MfUV{%Dv9|Q!% zia~=8@FW2w3<-Z<$0&WKZ%>`guHHk9jgM+IY9vhMkqUfPxrplxtB@=0i(DddiN3>3=>@N>|0_>SreTt;qxn!o7 zc$|&*m?F?wf)o*k5MZ*BxydpUFq$`=+ooTie5EvNU+N+j?)S6q{gW8d!C7qwfChRV>wte#4t%weq4$G0Y`NBIi)nSe>hEvptsfMBohEQ|)kudP3MKWIm-xC#f~~c%3`uAfaW7i2v{B0RdU~2Mgkq{k}U>1Faw$oC)|~HCONVB!zlT$kO^K)rb7Rx zYeJ0+g`oXlGMt6?pw8C?U_vUE$2tIRI&5fva@w45(8^Gp=h!jM?D@0C1;Te&Lkxc= zHgd{AE~$%qVq6+VLdlqX7St6&3ID_Tx{Dd&hq=V|UA`P0Pw=|#Hi9^pX3IV@g=Spi zmgrB^EVm*o#b*zT&DgRh_4HKB*&~#~ocuGIxXJnnZ3z$O*t4uxBZ<92X^5yA&<_;- zv%TLg9Kkb!#^EHeBW{E-7dXiL28dLgBOvD{xP*$;Ik_;;JG$S}X$8Z4;NyQwC4AU5 zD)4~xGi79fdGt)hl25zu)dq+yJ|PTUb#V+iG24PadU^rMANq1YkqKqB+u2Td&GO?+ zPr4S9$y^dw2JRug=xiuNIhKqZN~n*Lq+h0)(7d7W0E5ZY(^hH2xZ!LJPQ6x5?A~Kw z4_tHG0aCcL0GvRN`#O4BBI^42q;lbwg2RwjR zuAOy$inHw_n`as!KDPK(a&Xmoq=$7efVJF1#wrU9ltRQ{zs`}f0doN1eO5f^)4CH{H0?mlrA^x~Ac#7g=kzUOn zKb82?_oUsI-;}cyJqyYl#!h%ti6N}U{Yf8^$eiY#Xu}E%4NZyhYK;|iW>|kRH7PnF zO>OAa&Q>-B7cr<=&VAh2VjTq-<>jBBfoSHdKgww4=m|49|D+H8O(DJa^UPugx^g~Y z!h3O04}MENk0eCF`q&){h`&)wLX{;U9brBv^-w`?2jE%;YkWqcPkE(JiR19{k=u$3 zpekc8Ae>_Zk%ccj@6?U;r7a!WrL4Cz>RUYc4hNNc4b^?K+wVh77?}OeSSJWFfRDJ9 zOka_UQ!0+v#^oC`X2UNX;Jz+q2wj&^k0JSgCCOH<1REv#39XXD%L}e6SYgr4fu0VP z5A@Jphc7m)(laIY$i9Rw8f6U_`RfEU*XO{ zv-fj6_{QYry(|&6K~J%(15aXk-+7G70Xi-c{a{$P(#C2&4To}chnQ{}PSx#(s8JES z=te11W4T!;n^0#eTv1VY!M0$qu*N-76!W)D#?KAdcNTwGkOSHnbRRj5a3qJI*LKY% zD}*kk5Y5UmIMdTC?ga4tvagCLK&8~7K^=V$8GN9)JH~0;g5>NZVna7C>~rYitc9Zc z%#+3fULw3iCgEUH{B={Oauz3Fg3$WUm$!=tjfJT?>N-RNCZxJ>UePp#mXO8yM^ z?`I|y50)cj{SFotTJ)kiwCuC4rcJ2{VVBW|fcSXZy#VXGL20r;MIalXQ3T-0Rr#w3 zdH7o9{w&(E{%<7}x*1?-!!Jlz#&d%dz@$0RDW298ju0}##etPRt+Bu>Sz_|OciYZ4 z2d(Z(&mw_pm=c93mS%rY?T#kN=L1pdngk_*5NUBj0dn&8aT-vL@f!|HD?AWX@bl>(3jmzsr<{9O+>Nk7rSSoDMh2@Ba z!af}rnJ%BBTi@g4W4#$XMIqg)$7o{#Z98u&2g77F2yBC4vpb|L=MMQu0{rxL4y{Sn zWLdPka{Y&)KBQ=aT4WJ5fvbM495lAD+jYj)sOjBfwCbXoqOZg zfU|{$c+XsDm!k>0ILLW7JW$(!Qa8kt_$lUrV6m%;w^&>*7?E0G_q1u!o*cLB$9Tf< zJfl@8>9F(srzj%%c=@I$qP`8f@I$6)MArkwZ&uPA8iMwB9`zL$avYY_umsRr&ewFW zOynAH1R@KQK`a6LE*C@jBhnS#Q5#I{YCCt5Qe%v(+_v;A!6{tlFcuIr>^Zl6Q&rTF zE@pmOiTVfAv&V}_waS#DdokEAoxYt~5q);stl$xecUwfy$LZHDN>)XsNIj1F{u~2X ze}-v75GpuF7UzI3D)&o@pm%cr#V66)Xp^mLm0wV8xbD<4F@_OBf8wBMR zCz>%&4UADtD$kgXywiZ=kHi{K1-~5r!vkpG@%up1qG2D5g0}&9-U|uOIYIp3mJzW< z#LTt#k4a526MV&2RKDC@I0s(|?|v9ewJC|eRyPUMT_;gS3q#Hi9=9r_I^c3s3IX`g;=$pFupa6>sTg(thWYP(bYOhd0ZV+ ztMib1ywi>nnC14n(XLfkhyS^o3cF3^9IJc_H1t%E^EJ^Hw2fU)Mj6EJ)M3S&d$xPB z3WX)2mE)E%S(FmdU8Zm|>Sp*UfSD_V$jB8cTP;ko^p3?dN=x1ZFG=UY5f=hh5a z(S&9qUrT5skBQ$syNG}T^b3BE>*7_Wo|o#p;3-Q7_UfoWCjL*_23v!(!1 zUlD6(VOSsidkXDJbU<4olB!}qg(O4t8XIZA4GNorK&Cc)JZB1Fuw5x#iF}lc z{W@Z4_wVn95 zxP=V4nxn4$uZ^Z!X%g{r#Q<@j!V3x@#uFQB5I6gv>%p0sds|xK)GXu_MH0G|jvkZg z;Ad#Y!|HX0>s32!`vHl|N6|HHqw z$3VOVCAX79LR!9j3ZPR`tGXi0TVLcfbc`f-O9*?FZB)aRUZx`ByAk`c@I0-)Y{ z?hxC@pk)rKn~k;%R?T`*?DxFY8xKGLPA`g@A1i30m{K=_CrSZRc*bcB4DMwM3ejys zQyV1PXLc2P&yIRwP&Q66*^Ui>8kqqlPD{T?D%o$_l2fs}8o|!59ilFcU9bt*HeE3q z9oN!kYd$hZ8Oy9;<^r-HZJ!Q>y86q*0bj9 zz6m7N`~(<-Knton8bXc3@=yx9acC>lIUq%t8V3$u<+N$4x-$yt!kxZ3z|4{vPTYCoQdlAFLDqKmkW-L&52DZg& zeM$VARjEEsLYDnXr0);>pre(8$zgQojSa!hBvY&i5W&0gJwQpa@|=28r&ObV5C7ui zDb|V25d0%5K3QMBB;13Jjn2b4t%1p8d_Iugu>cL!6iS~G?X^_XS$_8I3D~@`z?uA? zzQjF%+T*Ff|DP0EOo@{8!1tAee5C01%_hF@QbyTSRP|^N8Zh}6< zVI{%AY@f!^Wz}Ty5Cy+Rj<{;cC%v8+^@1<;hZEiSHFo_6qd2*LuRQ21%m0cjxA9wF ztuHxcDR2c020-G=YpJH=b|y;e^keovVyh}7hwEFhRk za2{zGV=TowVoep4I29CHPe}+Ex?s8(CKV11wlhqQGAVZyatmKU&!S&0r%@3KdRvuJ z#G?5-f$SR%0kdh1 zy!Ut@oUDhvuX+dJ7PiE%E@~&_IYjww;X%NdL|m+KnoN!%Ra&%y4_LT~JQX;jdU*t= z3Rz)wK6spbqCw5MJoI*9p30E_Zq{T4>l9sC`cYDpnH#KW)TUx8d3sUVuR_G!b++Xt zl2UbcK00(%dP*RYL+?0-xejQdj9?EW8eaV!!4Xc&KnQ!3*S6MnE#)Ss3|a2R3;i%l z=q`jLr0S5irsSaERe>0QtLrh+40U~5rba_+3f6{V`}L8$6zjlaz&h1Ny$-%O_c8X( z^mqc?90=+K*5XGsM2Vs54wxzQB~@c8F~#J&OjfS_A!`gp-LTg(027070Qe(Uyun{ zn_d&J|LN%|j3`hy|DjQ-VNrWBE^+HPUAwHS24|Hk_;^*+u5MSl7-2wR!s8gKmv`6m zBGZyoil=k@5@J!chNZ)kUJwx%EbHF71IZ5_gaB^QP)5FWgDGR-S|&YUo&wl3;1Vl8 z9r={f%iR(RZ3erPQ9;#{Arj<#2B~lz8F>8HqFBr&84nKXb@DZ7o2=U4et|%{49y@( zV?3ZKQIYfxtoS5_q(d9tGzq$)EF?BqO+^}Y>SON%Wm2x~SbzEvLUEXB6gWxuD9Qy2 z&z+5p6xjl>)0y}eX95V4b8Y;>U24SS8AKFfdWn!_EadJgqaF#O);`at5In=6&@gMT z123U1x_*s18d>>$#ZX~kY%<)gfRkh2gW^a(@B*T6QB?h6{oDLmi+cvA8s_{W4gqU{ zj~sQp6CzLO{uj3W>EKIueiEw^;I(9co&l(PB%(7Gu=tK+J0rGC) z0y~Qqa!6AiLw3ejbbS7aR#N0b__+9Nm#~-A{sZwjAHvNS*9XVXBO7QBICcL9$awg9 zI4f`R3cZlIRu=`%Qo|5F57NHy>H?OlT-NmTGh;&S!E?Mh3W!RSzqqsT zare)-%}H}oieXh=?L0)&eFhE&Eibcr{mfN8Q7U}Xg`r@TkPc$>U)1f`yE~iNxvxU^ z#SPVs3)I}TnH-}*nh1PzlsoGu0+omYqYtrP^Q|`&I`%HSkY46ahB1w38KeC>DdC!X z{MzANFE3hnT$l4km&gQMI07s{& zJf-kktEh)dYfVr`bXb>9qVdC=F0W!%Lv@uUX57^7Ag@30yp>S$R5IV<3gz*Ox@?{A zR$P5m9Iyu$MZesW_$JrJDz)82V9i`xZg~;X3l^(J)*ojQ;KCp()iUCEfWtRqE+U&g zy?|c5T@!*f@q#A^5cF3i@@!Kf(lulHT>d?!Ty};xKZR}Y6Sif4)e~EC z)n2)|0`BQ|OR6zKm(;{u1XpD5WVHiQ6KQguyoD|5p8$gztmuAKOAzus&&F@PkhyOf zW*KleJ2`v(9t>9`QCr9mzard5MFn==I;5y-%rj2yq@EGa2tFkd|T(@#THi`v}mB*vTr}5F)*Oj z3oF=1?SYLY*iVb2P^_R=!*P}i&VIlcTTuiuybCp zmN@o5(BZszX~DdxYG{o{plI4hG-WCR#sD(AZGPYzkU2?M0pB!tlb8<)kv&0zy7eX6 zGj9|jR>U05R zvsc|$<&T{?IP)zL&$mh8RhGkO)GT<2Aom-vhtmvhl21+n*_x^}t;GSDk{?S5i6`iY z80H$SgxuPS0W_B^l05+UM>Br80RjC2L*2Cqi`T_W~#*FL9`6*uXJ#`aA z;20ejVnjvSq5BP6^5NvE4-sGZ-}#&$7`c=k;?*n!-w5fPO~F)UlP15iH%=)eF>I>) znh#aWAtFtvb62qE_s=?Pusv~s!7qkm``2do9%$k-M ze1ct+t%{o5k*ES7DBe6=K)&0}H@9@`3$g%#6R274b{b3_i!ORCqN)I9x$TW55_mM5 z@Ser8QS+${>4{jRo`&(gw}lXo?4f$DPSsS^>rO|rAe7FlWy{$5w9<#ZHAB9E`t$@i zuw7|nxHha0keQKGEB}q!;vqX~gYmYkCHoR02%KVQ&eaP!w^BV*p5?NX!J|sOU6lr{ zfHEss5NtP1e|JEViH%k+hv+R>LpFGMe<6St>@%|G{AoK!3(LNjbXiDFt4XD1qfSOw zc!@+ZXskKac?9FKO?3k640$0y@AjQ3WM@T$^b0=VX?)V#xFNPG}ez}Y7kax z9hKxxtKrU!b%?3eZlsG-wxSc1oIlO48SFw`h=%Tw0KYP%ObQoR-2?zT*guU!{ZUTf zdrdnz0PM3r5yIF*_x%DDXY_}%ft9dzJ%kZGv)2CR`k{R=bO4Y1{?9ssYzis%33$nb z!s50gk4?a+98rDMf}?#;UwV|}f~ep#QtXZOsNCJP=L94=e}yOa3Ue6&&xi{OG?}QDp{H|VsfPU>^SoQoa?jRB(=bPW? zXae=w5=-kjZT;u+zw1`mKj6YfGO59&A-bMOvTq~xdd_rOh%tf~d+?>RH^;e^w5Zls zJv-;tYp}sRcfmb{2Mtx(hoEGhzOdCV%4+Aw}ywv9vNqTZjl>DP)bMKz>T_Z zzeVY_Xvi2xpKbyj21Nm@_Ltx7r6B_}sJSVVB4FdnMpCME-C7L)CR7Ow5+Pl?%q)B{ z%M`Q3hM}%I2G=v+kTv+lt8{6CU}u5pwz0Zzsl}uz<1sLG!e_>#mrwZ`=wi1Tycl{F z7CcqfeuY&*j+3 z-&Rj9rwaG$jhmvHO;=quTpt2*|2=`gh^^ah#K338A-Z7u4JKyBqvawR#+3&{r(v97 z;I=?U#i=J@$gePP?o_VuH0~yYN=dueu}6VjAxUHBr7+XYYSl3%Zq>SCR`G-W_!*rw zJj_^Tfi^Z7PG=9_ScaSKg3eKJ@v5v#HN7b`A@5@%5xU=R`{fj&w3gRUi@`4pBXXLK zgRif|Q${U!d=34fujgqAZqEK-8|*eGGmvf#XESlG>?G*u1d-q@xq% zZGjzg%3Lttde&YD2mHLdYvd%NVGSUUv%&7C`tBkWzd0R;%p%KzEWTQW%9qBrazRTW=#(L&v?O}a?$T!`=&ln-m2 z?%ekxy;wV~WlR||5wVRkk!1xkN!wXN)Sfa9tMJy(xu&#SL9>APvNM(vH1fC|3E&+; z>Fdq5TorQdd$Wd{15PlssNE)+Y$?7F{ zzY(L+4WH?4At$yU;@Xpgm&KqN=FjnbQ^FAB7hx0oQLfhD$-jhm?=t5>pq^&)rChU3 z{t^F>qC6lI6B8$=uD4EI&rVn%GSk3CqaAWW0C-|SczJb#Gk*_^x>y5nB{^A3nI~Yk+(ouGz*9xh*6i*tVl=aNb7vW1*){lJzFxxy;448a zX+-$1CQF(P<-e^=W$)9*6@? zAs=_qh9AseqT&+A!Fx0T<0O7t$JE&}TCg+%pNIZe!f16e$Jkx_L#y08k+ppkhvuKL#H!u=Z{?CuyHOHTFx0`NLMQ zdYv`=%%Yy(J_ldWP?IRAw5g}BlfW=ZnfSBW>L+yan;O1g!q@ZZC@sNcR&b~_J< zYmCGUIEk;)h-##2EyF;5QxN*^>Dz=f0y7(~0s!;*L$VZFo<)yj0@j0M?@_9&8jHmHs zPX9It7Jn~tmg688!<|c;k zTMHnx6En&=)xVvH{BmK8(iNv#@d@M+oYm5ui{$0}M&lU^?T`$(BGAj4?gO&kGeCm| zwaRfHgb7M_&i%e+A)Vtb8(%?{=17QL;`dzl)cg(Y*w!trmE@RBa4x!nthA6E`(5|u zu?-0=LeQSCs|xeDIBrN9Y|+{I&$S?M;t~V+%PItktMVm7m`9jKUm_tg;&fNdaULY% z7smZ<3xy#yXSj1Oc@I98$9=Y7AEh+toVU4`+a|nYloW>yp-(!g=A(P!lTlZJ56TH? z|ICF)Nz6J9t79twhGhjJ`hP5{Y*Ne|edyV_s^mf6_BXV{%iAH}S3U3qLpkNe$^CPYr@(ao}Q-!~VCwh;_#}gh8 z1m2>n>=k=$v5HgQqDu8H0XteQnC{7}(~w!9cpP1a?;Vizka5LJkuww}Zhb!N0*F+NlRvNm3S^$|3mdS&El zwzx93@?h!ruMVk>G9F5Y>U)l^$uI(AP3WeXiGi{;tCVtu*GBPKB3s`F_v>?o#7=}&VGytgUVUz(;C$iklCicn$&}(p<;C5WD0A@ z*S&9E*)MmEk?=n$`nC+`kMD8ru41#YtAxrf+U75znipL;Cd00^{<{&WqmDp5T9pV~ zgMxh8v|XUALNQf0byZ0Lhk#yZa=?_^}dUi)kWc; zme1v$9EjoCr@71c+$x>Ma zN@3Y|184*TTj#}IQY7P8J>r6jHv4kn;DY`tku@hxow#k$E$)t7Nn9A1&WQrCqX8Cn z0CZ{rk>AF1$P8INbkl?R!zOL|f$|;(wK=tlknGD>zuqyPQU;Wn3M&WrxY}U15zzEexLCcJk+QNi3n|Y65Im@*0tJon zc}yTgkL*&>k&OplA*CrXTMO$YrvpHW8 z8*3FFHtWTU%{=AO7o}bJGciUsEBBul`6Sx&ifjq9E^B11T4;R2lkzc!*RJIvk!RwX zn)FJlC5AG|VLC6nP6kxv59-|ZP|1iH+ z?y9;|hF5Wo=VoVx??l(cMEgOH!HE4wnSu0)>8ddn@=sJhXFjwK5d(JNsA*vo0Uh}b z%c+^Gn6phL_!0{nnB=DOnpaH8KUpm7n`Txa-kc(RyYj4El-=BVQd>TNz?AZ z<2^B5d1{TP#y+o#b~=3%k>n1!5#OC^8dn(*3%92$cK!}`%ehzYtD%7H*tc;=sdSQ<_p zSCJ@7OB7u;l?^Hk3Y%FD_KzWakoxG!4I~YPUNB*_;=}9J&wfFy%G6)?Ul6b`VExH? zPoma;Gi|`e1gL104o|zy01~JUD>e)$d5$+(d{B2E=w}cd4+7@5ClR5P6O8BrW#~Hn z%zRH&s%4{K)BApxNwvaK_?oKRayMwIo>5Gx^5*N#$#gH!9NdhN3TdG-g zyQy*GlZ2+p3M%n>J*r&Y9jA+^cWa|FPm(V`e3*q<&rui^E6ky~DLH-c>Bl&nYl?SX z?cpL^xaD-Jjk%gTij!Ip?$qF0|8^^>Vj&zKwbA%@IpB4KArT<}_`LYQLZm(f;R)b% zv2akO)ttwR zWhA6lKBE;-71wW*Rg$G@@n&K(oYzBEanPcWTi!=rg_6GoI3w>H*Ci#Rw`1b@&69g7 zAWPsp+pRIgCT3DLvRBtE6vn|Y8ZDG+2=dDhXb%k5?b??@CZN;}h=#L%jJRT%aZ~gj z1Tw53XGn{~?vir{@B(_-UN25O&AQ;agjvki8bqh;nfNiaf%>LdCErJS5U}~~%A8ER z$=)iY80~zzTj@c8Odtg+Uo$w6Tbk-Hd#Ql8eQbUNPHSbC2t`O^W~O6QC(>dkG7p$A^tpJteLfa@WUA=K}vkN)YC2j&V(4jM?$Lf1w`Lbt&P#*ymRsV1>#T z2c_S^4a3-q7I=;x2?{ez*PdVH(?Z`GVx@8404&}r6$d%?tBd;8$yMJ`&GpTKGUL>& ze~<+$^Lmqkov_xn*z>&2a?gF*Wg6DvLJj4W-*j?=5bQJUr{P zL0O$jkfroFDEGVXQWrS50ReM0+Ad=q2fR^h=q-!Ill6doNxZMiVy%7G_8i^*r!{gX zu(~hvSRSFm#s4X0jQtkV0xI#7mPn&ta=!oqK>fcX;*d-|3cFnXimKp)`B`;pQrSfg z*xa2@uOPQvi+oAO61f^*XDKa|c)mM=OBQnT%i>h4{_$~iXzkB;hvrf4OcR?>MZl=1 zk-bGa%f9gfgSI^VJ^)F6;e{~G=3aUgY`uReQeSAOJT44d25Cnr7Cf4{`4l~|RiV71 zZMDHlaarPAm|K9gv5VVqx$GE!z4K!DWmXeFDJCyml2{wCw-Lr!r%~-&qE_Dx)B8to zD=lv5i_Vd6kK>c3Yv#T`LVj}zg-dqvJ3hz9Woih>@tBp)`%4Bfh|4{bcQ)_gn5Vug zln0qk#%m8LQq^9Bvv+9!bvdc-oNKP92SpcMeVHuY4b8qy)MC;`u`jwvpwDXw0z zQx&}^MrAR6_-d)BNQ(&fko0~2y!KGnMcyS_QBHq9x-i`qr;Mid`&N9Whqx;!Y3~P) zvee=CtI=ln3DAaw1YZc|lLq}L$<_L`XMHr-H>uLbzm(3D-xS8aE=gr={aWhM zIV_tl&)Nn-{uoGAv?*Gg0D!>tv7RVz8VGgC$%oYYnI&DqA63V(l5MSco#3<}ZcXI7 z2j-79fgD8+0KVc#fBOIS1?3)OXE3EntQ^Td22L_9DKX}|t}E=C7T4#KSvbP3`h*|R zqBU+eTCQEQ*p!S7kMQPI({p$3qf39Lb-+ztc!3kJxN(f!VSrQ(J8Skv2v?|@df%7v zWQy(04U7*u172h;{7g?{y@YW`)`u+erEb%;l3+rYX&g7xGwnPrZ*7jPHB`Gz_iqH{ z?>K`0V-H;qUTWlI@K0(t7Bq}BsCa}bEgR&U3e_R(y9C`7P-O}aZEcEnV4I@R{~I#e z5*6Y_@J~LhMJV+}ffnmhilCh-vhaeVthc5kc^|U zJ+!MYnOUqpb&PjmYV1PAQiScusR;jh*cQelNLu<|VC|X)HsyUWO z2T)Jx{_Ak4zz8H9m$)(vzCGBnV**64l$y1?ER60P144g8v8{G*oX8Y-Sc<$M7Vr={ zlOCdyL93RIK&uhU+Jt*2dyEJp=gY756!>&O_JB>&q{B}M+r;YWBWA=V*j@uzmKDBa z^wC;(ym!05I_4KCECv{fLybQH_I*L{`x|L{I?MIEN5z7fY|OXelm^26XVEVZhu+>lvmoQ{h()n&|FIi zQiRdp5&5QpGEPN$QNw~0^CM4b&`LN({97?7uP}gZI}TFgIS6fkdiv+tZS@B08#{g1 zE_Gd*9^YHa8`6y>L}uB)_D%i9>DtAZ6Mw(K8C(E}v{-!`h&m&Q-0K6S#|UK>9wNJO z8Hr#e<>?kdwkq+x!LvczD*ztP-Zo_e9La2Il?*bzm?7x9^)2p*a(lPKT#lJx`tmu} z{H1z0xY?m03s8RZw``AMU_B7dAvm>5-Ry_Y65iyRtWPZ@aIV29#*C~LC}{Fkh?e8D zYzYu&BKhqQ10%TZnP@|;vtS-alS#V~|Ji=(l2ia-inJ5w}n z?EhOOGc4oF0+GSR`#BsiH?zLQOF$KGN#}Qo+)7YXh$Ou;WSj@g@U+D(XX_KoNeBXpljQ3b83W(4ASK0=$ZO{t4=bXJqe(J$nr8#}VI&XPm4SDGdyNJQUQI;S`e7XFim2lu9sbQ3G6x7^K2%`4*iM>F| z$3hHB1noprBGu}IW&qp+bO9Qn>rkSZaSz3Zw|ufd1e|4YZEr{$P>M-9;}+^odoSqFmF4nc>LeRI+c{V zElMn;GM?8VE#Gh*L=~zYyv?N22#n%LQ0o~2sGo|uPS*1(0Y*9O+lLs)n2|IQu6xv0 zT0s=>sIc8!pLUk+k!%0*^#iPby@u2BCKv_^zkLB_d|`$9l>=A$WR$Gfhw(~a(nHxB z`gpLoS#l#x=b)KHrp`D<{XG*_8Z&LSDXIjk)m}xH=kiu3xjcQ#UO=$pm>v`ac;0bb zRIq8&jDI;;c?m0pok^&EXaeRL&RDv z=Y9N1jefj8jRmWi`TY}cRb)sMbM>eQ$c#H%r%ojW3w9w{>_gSCF{0_AULGRyqcVdR zcxU{|1TNe{$9`tYsR|zQN%^#G!NwyYj?j5kQ5HME&dDnn>>Ovtm%yua3gH(w2P$I3=|In0O9$4lW- zqLMOh0{>KC$oY#tw*GbeX9h_c&^oXBy?#?^=*e)4Q=VAGfrnMDHw6b4rFa1>(je?ECXI0(Swk695_ zq_a0YT%}$VX?#bxrWo>55jiO*lMmGtn;70OwWr3+w*($Bb6_#DAd}qkSD40_bjvfN ztjx=YrMNJ$WC04$E06ocBv--|O`}GSoZEE14(ds&(}oaRniOSO6$IbkFje!LEHFr0L;+7_ei48f%-Vm5vWxW zZY~1e6Z!njUF%l+)L2hVpajzyN|Xrrz4APv&vvl`Dx_y=SJD-ZITOFoCQSU-poi7s zi}O96341V)&9-``M7r|t^3lk7G2+n318SByAYa8 z;;q{X*F;*44y-vPxTg4L;A&p5GlSad`Pqi0M75Vs{u*?L2VXqdPpbs<~25LoOzFK)%UI)zQ4l_g$8<@ zUuuvj_mQN(I%DQ!#rrBv(4*1uwM`a^3th1sK8T&{a&1jV&^o=|Q~b8a+6!WvxjhVn z=rTc}hZpOO`{AB7xRhB)7O2wl#)c(oV;V|VAqhl%G@+mKie0&Qx9J^>Q>6WHKkdE1 zxZPZb<@^#-M(7y>8L93%b3f$k8}(tVa*4eE)*asnY1{&3!4+T#pESgKb8TuFxVbIf z)J=4L2^eZXY^r2>Dp;! za}|TFfgNH#@8lN^{m_%+Erc3ApPhk`Dbzjrj1DN-1^7pY9{S|G!wkwiT&v_6GOS7! zTma#|-5BLf5L?R2qwLBw(ux*Hb$y?iYUR#~Hg*s9 zTWou_V7+r=6qea1mxLAw<>P^vO?d5H$4n=s@B0~irb+9F@d`>V6{^rO@*!~ZB2R>_ z^Zdg%=N$37cgRFXzK|?=Cqbm}9Yu=(P7EHQm;QY;C+a4`se#!R4q?A zv7$o--g35gmeR{v>KES>?EbRUY^4*~%piUk!T%|%tIF0?2lz)j6MacFt-- zhF?#-8aT0|=)U_q-wT>9vZ?TbKoz3ErAzZ(PG`C~qInpl5Y!{fy1SC-vFe>RIgXYE%2B2@ZJqhl&k~ywP!u^I6;U;E%zu4Titn#KP z`;VXel~#TFmxd_1lNB5iSut!5?kA_l;jVHTFvYOU%Zi+0Pb&psnDl+To6S5E7%Gjz zlF3NQT_%!+yhukUEL*R#^!k`y%6Dk)hTzMK+iv&(HY&+??GbD?f68-DvD6I$S3!7X zSi?fNDZ*xOxmb0RApgW95G9`(fp#hJpb>r)X@q5$B<3f|RfJyJh9x*uUXe|cKhm7v zt+G^`ylxh3SmBuThh=Ka3#K%yOzsd<3r|VZjn3Pu?N2qWzO zhxes}+OHZXUPS~Cd>QSJUYZ%hfHne--|BJ?K)U)MrrhoVUo!uo+H+SvgIK7lOk-#WQz!Y%^`=LQIw9<#pB7AN-kzv|y+;`<@(X9dC z!WP-ef){WZQzx-(Vl)k!@>McN%(RZ_8_4%O;Wr3!(2T_#6|=Ni=!Gn$6BHf(c7wz< z4oux$Y4PyMWzVt_wS9W`-t=n0f&??bP_W^mA^DQy?J_Cl2fW1~(Xuc3WnbFgJf&XN z!_k9ud&@kOxu^5mM^P8OzABTNE(NO)Wl+yo2UxCTI5M-yk=7LEEFfcy9Wh3ZH2R1v z9%2ng6U+LxDFJtwg?s(w0*EfH?l@iMxW|-SV-YX3qe9SWcS#lS5rB*d5{N zu&A?`2-m);67dijKx-hxsY_AElD?1_hTlQ&0b;W{YBaX#Jg|?W-~;-DF;z?vlwV(C zDV0CG6W#(aFF7;t#!)qZ*zEv>&zza|cbLhjrAPqx_V~z%(O!Oh-c6cnc!cp>8K{zt zq{VpheU1mnf9<=IKiT+73(gcOVcMnOedd?;^s(hP5V#56&hF|tgIrBCf{<+Pz?EI4YXKEM4rKmZwxVzC*0kc7bEo?#|h4Q z96uG6An6U%{^K2jaLt(B34g*<6?aAt(rSvOwlK7?yarc9@n=!??Zf^leCsG zh2~YJQbN8u36{m@EcfBPp>gj$RaZsb|7TBLL7l7$gylTv|Z{q>Jw5 zUG~;fOHG1D*UdU}{m|q?$*P%OoHzmM^vxz!`uKKEI#}LMUJ2~hgQ=+pF4eE5+ql>Z z0bKfB-Wq20@M&Haazz<08971$8Dk*^9kckW@#)3?cG(?QeZhMv2eRc<_M8|!3W@m@ zofiM5&oiTV4^zJ`VWp}P1&TQxkKC`Ywnxg-sHch|NfBxt!3{%sZ$mXpHoKYcFl-Cd z)7E6EuJd6L11CyvJ4y06Kl0FhS1E&qO5$*vAzm&1f~FPtPEkeO_&eLH1Fx_kaS4eI zK;A;68(X?3lBHaV*MX0!Ci>Q7olJ^8g zqWB`Rw zx`WuVPvm_LJ--gKAccZLq9HCQs-qq1;^1B8`-W4)*!uDQQJp;`JVA+-sBELz7Hlj{ ze=rcFwQMCNTH4Qw2XM5L*KY86)skH$4!!C1D;US@-R)n)GtBHFR?CpqYVq82v6bMx zFQB^)os-`6<0a_`BzY_agTuV6+a){enj?vE0ElaT z-;=-MG_Ll0x4N!)2A`|=Nf5m;g9^`V%#ef7dA#Qfd#B`7e=UHXFOhkA4dsY_d$RqG z-FIreVBQIAoML1cSeWR)n4%Khr}r5ygLsr}!u5($J#B#3RsRoJS)Sg3*iXiql+lPs z!2Zoh-<~|(nqm);PQZ#ZM)Iss;=hq&6cugFfeGV;(-dI>HD(aD8LBsA{JHhNy#(p(myIR=(~!Se7Ggm@yeAy$zbaZlBbXZbP;GKU3Je`w#gY3 zF_~<0sFK|V!BlNbT++hUUqVyi zOJ^XRX}>j<+rn7bpZ1*c+DsY7_t zHHwZd&|=0ntAaJ|dCz`F^Xt+xK-uf)pSt-GA8^7=k3= zVO+X|I3bzvIg^!>@9fL!1gRwbb{2xtF17oe$aI_#r(Gt}@!yfcGCIJm+^+?QRH9Gf z5WWT14s6UqCKSTZz|a!gV8Azti_Xq7ms6T7WJfwQ&umIXy%{)v66PoYw7|_RGm){x>g(=V4*2S(@qz z!K?(tZsuezUkaBIQwaeR<0~$-VOoRH2F@rAmVQ3l3A0LxI&~1C?8enA~#S_ksU&8uyYM^*_}nkO$2{^ zU%_2t)uv(H_f8%8kl_XE0UEStZ&Hjq+4rcVm$C_eJhsM#v(->!8&qELE&#QaB@tf%>=wddiIz?wWwtoX@MnR#=KH{3AC z*M~P}Ma4sIOpKR2ucOG(!Jy%7f+Ua3_Q`S<1!A#jK)pLPJ7pZQYvd;pHZ?^;sy;y}JFm00^2bpB{Ns>yI^tek{ zZl+Np?toA*QHLzjNfZnOx!8!hna{CTW}sRtv9{rgJ@zr>qxiWT``0T$h+-ZfAIIh z^myoyI)u4|1^^VT9nt*MFCC-gw;OGd=rSxxQq?KhGf8ZmH;FXIL2OF@>PI-(vbp;o zk4Re)IVt%O`1uhevgi2im*Ja7-2XwoM`G4NMY6d}%L8}_jz61naN`k<3?*y8ls&m>%4+0s+^ng%Eq!zu@E?uS>NYWZ68TU3 zJNr_O$S13IJGwmu7)>FY-r~#aciz{py}bh;{xwb5)9K}15{mNFY{?H5I?Cp)0&)uWI5gigvt9Gq$fx*F&=As)q zM<&|V$o;IubFASNTqtZ}1cz5}qqLD2dgi%ZK-$ZYY__FDsKB6rt_>940UL=uOzw

z6OqAqu2$K4q!pKFM|gzlx%xV*gqrui%gkOGD7F~ z2zw~civ9AM|62CfRvRu+jfZ9Sm^C`0bE`Xd1OX-falRzp>E8Zs#wv(!RempNl)A)< zVAN26#v&<19fO(W8#P89piB)bph|_um~d^R9zY~sWgu>fUW+nZ5n)$%6d&=2QGo!{X9 zi(54iLQt;Sk+5XN8q=F-WX)=Gnj?S@#JC{zRhrg6xjW^JoQ;{UNx=SlDVc6VJN{_l z^oJh&*m#2l>tUjpc|&)sFWr+U#iOF%#Y|Qj?su)y=0pU%Ma^$>LTj?u?4;9(09)hJ zvA#8q`LMhTJ7L+tQUX2ql;FC@uTZ0A-fgqI7%ndhj*nFWE~Gory_*-1{&F|ihUvfZ zp9nM;I+SR`JkF~Yzf9(Nwh;BZoVMlO0A=j_88)H<_wHerN7IuLsXmbv(?X>_p2Y_! zE{5=6whk>^Df$b_M0Ykl;98msn35h?X!rzSIRTIPB4OBF`33OP$qDNa<(7PvIyFrF z+KAnU;Fvehix8$%X5s zoDFn>Z!@in)(>y(z?}O011g#>I_ub%^1TnGS9>!n@w+#hy*{px-f~ZiSqRs~2u&RO zOg?@XtQo{3(o6XvX0oRpoRJ|TUZNM{XlSIBDbtes^9*^rP(+3LS)wZYQCxsjhHgA- zfyD)M`WK^WPA;p`nbdo1>zq(ttW}U)tEF@48YwKB&c?wRR_!sokq5j;UECa-hxGyt zPdoIUfH3kM`?Sk+bUMS)yQ^Wm$AUxoj)(&GOVBjf)L0`cb_OM=Gj(Q>F-wssb+=#Y zKV?@9l{OBn_Kr`Cx-Y^0dbGc0O^p7)pORW6Z@ghHgI1 zA;R-L-h?s$!&CLiv>fAG)+)X3JZL#9TnSY*$$?S-vj!Ekker=N0e%brhNgiQWk zPOp?=bIxH+;<}*AoQe1?Eae%Obmvsn5hPA(Z?h+ey6B>oI&%H>jzLQnQG6gkYQO0%mToWk!5r%#ClCn0By2vo}cioDoa~E$(>UHyL-{Ee^ zVV#l{Mg+`8v+4N)7X!%P56TVKSeIlT?GWwAZ#Gmb^G9(?^@p+9mW!u*7d_g&eBIeD z&Vngc(EV?s6)gg6u$Sk$W<(VO=<` z0^W)wO=w<~WGhFt;2EZ&KjnSkl8v}Y^6{$m3DZVIxQ&dZ92TTcbLbqLK&^!pW$YWv zZ6&$>?wWJY;Ejbgj5b6VQz$OQor)M`9k*S$4?#lJmm?uQEC8ziFfs-s2PQ`TW&JP> zEc4C{3>+=})O@a0NHaS?(a`Hl%}DMdDFl zI9z6rFl^50;N^~S+jIu_fcWSt7q$STONHZ=U%G#luF`KaMQ84ym9n1^a8X1-AB$ip zKnz_}`Nfk{dEdP&eYf*rjRaW}-6AEIE%?_{F zU|St#dz?+UOTdm-rV)XmR~yd+!`M7-4)sbtroT+vX9s$AFtA?zO zf%C+7=WW_G3-$t!)D^PJ(u~4 zc7?`6AJT@LhLz%HaR=nWoF`Vh%s$Gw>AiPv@xU<$1#)Eg69Se2x7(~N#ovT;vl7z5 z+|Lt%wpmV6oV5BdG^tdYfims_3*(y$B6FF>w4ocF^)$wOyYuz&m0|T3X3(U0Tmx%7 z8v2W@(mm^0_PX(H5p$lAexzc&2kh|ex#l{8u~S=9vb_m#_^#nJ;E-x*3G6=e4f_&Kq8shl(_)el zdEOArLyVq~3T`8yFT=r_%`VG(2pMA0ZdjlVmxFbK1HYea>-?XRF7; zlZU@7WL9!m6yk7`b~!9=QE+`b#lxtTU_~wRK9FmqmyFVDykd1%b!rOXGtjfWPDf)o ztr5OgCP++%#jEb06Fi#u-UjphV4=P|h%Kj^!)rc(xl*$8;iqALjK<@zk7~ZpcN?DY zoBbJ!9;!ZkSscOhp})LfO1`m;&BQf=Vo~pQ6Q`ZRs31xRXNdIAl9DAtu`2tSERc&) z1X(cAsAd&CN!n8ew*4xR0jfU}oJPX$uYa#~4_uo!NiNTc*)@Hrp!WI8Df;z z7{(jsz7VZ7KXxxEM9sW_b2qRN($ChI$EpgygFR_KR+1dpLP{pas4>(dctxYCG3R$& z*Q3H93xhct!DEutzxJrhK~*8#6$Xo`H35_a@N3omcA{1la?st$gAo#mvbvFah?G%` zMR4M^aDX^zkJ9bt*&bHt3>=5pS%NUIxvuL_26Leas~@pX0Fjmfw+!HtuA#zePr_+LsL-`% zIX5vs_BiU5xS(K6E-=E?%v8{*C%uhs6Qd+w^puJ>766rnTY;87jQo<1`8!;?tjq-( z6JMA;^KYBGt?($cFram)wh4@lX5Z`0cFm!^L?Te66!CLw2G6&4*hw3d_*wuxs6DI(_o&}0Pcn}5iiMk%%(!h9+G0ZY0W7c|46*lM7o^fsByIuT9`AE zJsAD!MaIr5!p*#z9fcohr>*4S-?VfSsYz8xl_tmgYJfM&qcu6~h> zf|vAprwy&a8xEU&FQc0n-60oGZVRXr=RTluJ!-l@OvF#Nkl_Rk?qQCs zcrafcPh$rq{MT#eHd8$JTrVjTbTHuaF5j>glB9djd<+tvz}~W~rLqIbDp_`=DesU| z7t{9i83>)v{bKhAS`$u8qBVUs2-1-1WEaLL1!+;;T!~Xd5>t(fbnQolU z-LK)(XF>yvd2?H4*{hm_WNmqpyoy|ETbafu|LR^q|F?Cqh;CPProxqymV?sc?ut#W zGr`804lk8%_mD;9w9opspnW_8S`=S8=P{~-mPPzTEQQQ+;3EA|lhL7()<53}cGw*$ zsV*A{O31l=8bG9@Qc6tKy-9sUHC3h=MklP9eu$R1+g`dJZ3=M)Li+^Wn&rNXcw=vT@=xGBn( z?mWNVPVluCJp%^7D`U)(b`WjLmpXlIS`5I8aEi1QJ*eHhWhgvO9(oJ^$kf z0292#o+AU#5WNiXqXIdtR%3w}k)AfwgnODBgR}X;W`^q1C9%AN?NbuWR9>O&=>`Wt zU99wC@#O(sw^{7qDXLeEV*s@lx#sN_*#N8h*4g;tSk7)w_7;L$Y63Y~AP`|K#+Ky> zW1Fnk_N&?(+jN;!0x)C5{w1|O|NAx@in%+%Tr_6a_B_sRcG?LT{PHJqa>aI?>ERSw zq2sL?$dtteEPM?4ou@1#Sq%7MQo*D$Y4MMg1*?ienhN5pX7jbq?WFv#+DcS9-7-0& zmH8snIlVvL7L_RA$cMQx6Uoy4bl+;wj<{q)=&?Tm@VbMuA&`#Zrya(P0w!dgm<(D8 zWbPMR{fV|3iB`S3Oln|-l{Z5REB&E(g$2jLFRATUS%G9E3c*KwyD2%9hfNdkiVq3{ zH0A_>XOhifx{f4U-=epMDjDdHjBp9Qf|M{dSSI8`{gf!1TLH_`546 z4?bK0>rUa{gm)MhXBlxUNfm>>Hs*VUQB6uk+;uX?v+g=lkC70OSVATn_5nG5P{oaZ z3QQ1u#KLqTQCiVGRrDMXj2)G3XE9mLx1ciZCcb@YH^w9YG8IKVWZv`rxWSzXB6KOE z?cqbU?D#whPIeX?{IJUZGL@#Eq)&6|@zJ2e;1B^dd!-;CQ$zpf@h2mlc$>7?H}y@& z%v~j#-TL$T?Drfjm*wwsto%qbJO4WP%>F8wrQK~;j@+x8d2v@cd*Co)>Tg>^#|sS=PgwT zl?Uj#Eh)2Mz@dFWN_Gb6?;omD^fgE@m6i-L;Qd}JB-)rLBd|HakCN}4#vvBBM`f(n zPGeT@a>Bp=yC{wkiJcB+fZae^SiLX6$^4ShgY#WTkI#&^H%r$0U-^fEaK5wyg&~y* z+hOAJQr8~nb|5N#ET>yc&%?^_%h78zh%?R|R*q3;KTytMI8*aAVM1c3W65cYo{Rz) z3>XmU)DPNaQ;)hQ%CnPgiXBBrB&97ZTlj9-FsJTD_vAiC5%H*!4nhLUF`phJa~)vC z#0sv4XPVE*hB%aD9*ufQwOVhmDwX$T!=JZ`|D3)ZBOD3S!G$r}+fuB)x)a7IeZ{~X zbUy~I&eKI1fZlykbKJ_5EI};0ZWJzqP^cgZ?>KOp4W5EfwcJo7d0z6|OE? zXfMV>#!B&&_W9mI2DWcZ#&|TIKkJDVrVC&cp63{oM~%&V8Pr~!mncqZBA{i8DW6T2Eu7^Kl^gsiy^xyR7 z^Af(8x_Ox8W*yrRJ%R>@tg$70*e}vxWJYE5TIFy;Zpew7F>2$Nx9uXq=|QLm5W&*v zz?FP+l}GQMNLJd()rAPiih{x@Gf1b;*uqo~$B+ zzT5zo5B|_zXh?d!R1xmCXVbod*q+N}C$lBA_B+gCtg61muawkJ+UY>LK_rTzx)JF7 z2y`l0UiyPc7ByS3>c2%(>*JBv>(z-Bw(_=fe?q=|tK;3HlWd1T|9V5TQ6wtKs84~* z6Rx?&gFBO{w!L%MZGv(Vd@l)#Tb?Rb+g7=AGIjW--05}fvttyIA5s(3*1QW?r5(`| z7==vrjx?|wQ~8Tx9>CJst{GR3<=}I-_4BMZGX#)pE1-Hf#Q2i?5`J&mbGe3AWx!7U zAOT3lq3x&5o85i}VxUv*GI2$QR`9N~N?<{F%!*~flt;YaLJyPeVlzDnKB)P%GPKS+ z{@JkfXEu2jFn+L-6v{_dfV3=&Y`G%WL4kGsblHz*eK`5KOH1)ko@{h@kg9-K&~@n` zrO?@`_05Gw>%}?H=1k;}Tu*jlnt+>eKrgK5lyB&sM3R z+E}|zNgFCld|r}vu}Sfj7YDAT2_o3wZS zCgdq30nD;a zsiPc?6#{PDc_|x&I4)B4l*SDup7TvJst9I`);aX&&EiJXM|!ENwqa$PhQU{E#WxPb zj&R2RB+j;)E%&PFz|Dd#x-Xgrl@M9;L(;bMY?8c|KO?*;r1*%l0a;!7p|@=V;M4)~ zXzpGXeS%gb6RWZkO4|qZDOX32HGk8mvBUK-MXxdUhH|BUQZVPtaqbcCn=($!^Pe)I zE4==A-^vWygFcJrNy@{~WBIKB!tJsIm8EZ$(N-)RziiaTl(0nTz#vo^Nw$fJOy*WA zC9GRLnKeX~{0lrPcGZ#mYQHHDaIv_=3H=FYRftqvnK$w>;re?o#Iv4^#Qt7Xl9&s% zr!JijBi*yiK)xC6yuC8z5_DPo?lzc6tYa54VO|vhxp`yB(~u!2-U9*^B=(Vu^uU;{ zADle)dioBcmtkRb=CuFWJeatZvK9ZQwA^!K@{gs~x#X7fW z)20dAOuP5G>>IE>{W6vhwNoGvQTG1EcQJ=!_D{t!3IM1R6B~3bKuN-aj|AHNb`4T} zYGFXDT>1E;^bA2-pRXk734RE5D*=OCAuPLuXY9+Ia9-fFSuK=@EPa0SN8NwuLKZ&2 z#6HS#eZs+Kx@x1@Lg{K32sJi`-D8&z_6;PzB11LR9Pp9Pwrb zHFX9}m)Sv|Xv_%r5vc9rhF3vzdKsZ<)|yE@ zP^y(sDO_ZXIY0MC@EwOEhyr!ue)W>FGLwuX{I~!gzVkcAC3T@H+O_`M?+nI`ENyjX zm^+|0gx=)9wP}eJWd0+pJ)RQghar-M<==Rn(DZLwLDv`zq)15~Y(d*5=atAKp{(k? z{`LG*rKZ>ObT(3eLJrp3MGCJtvg(uyWqmE_k`|;_RhmGUW@;1ZIDY`dRHNCvD=hT# z&2icfO;JWMbL(x_B698#H8&3;J3M~GdB z1ZklCIPX+22U}Qmo+BQ}0S2CCQ9d`*KGiyW&K~Z}_hy(Tm5;I(>zV-f9U#=pT8`0@ z=h8H(5u%XG7o0;V??T`e!LWZvP(|q_>qqm)sPBKhs+jh&lo|w$3?^H(SBvAV$%+!@ zx}RCrY1%NnCnOLA-k!9b`=csW0i4xKfRRA>Z7oX5qc2&CjU$B1q(@~nZZZw<;y@bw0h@{igz+NoD0M_z(6?7(S-Y*=w2Ov?SS z8cSQ5hF}Bs_qyIy(^k!rG&u|#;^?UPLc&6GZqT=J4JcI~wu9M{3Cp^YDW`;nOt_SU zNFnrTyQBVtd*xsGFF(VaN2~BkmX(1sxS@~57uRCP+66{k@QftT|HViPl&~bK^#s~1 zVD-E>xVyO@_ALv=yg|}5)7^PrveI~&EU0=b$2mH&d+o*7dcGf@4*jrGM;(65_)~kG zDvIbjLB(?Y6XNLVWttQjfW$G=@jZf9c;2>E0flWB$+EP@hfzyf`FG2N-mpmqlB~K< zYwrfDY2GS_LvV#SDsp#Ns_riY*BV z;qJJZpSWOS>_klvG>l-&%hq^3eY|T5tWBJd0(19Iz1c~fa1glIEZ{5=?2x+|RU$WD zk=0FtOrJ~#(X9X|S~QbNzSiu2;CzGc66((sMbGDNsh>11`9NQ`(PqOQB1!PUW3l0u z#)Rwtq|^mQI75ha*2Rj&Q27k-RF$S;ipz}Bpu7(TxKMnIAa-UzYVjdg-LTi$-c8Y%1_p9(u0AO~AG$@vC-&dZ8u$?` z--4hck`RBdJf_PG&IS0`h6G!`b%vKT?b%PmoHsX9P5%{fZ59P#%GU~dc+sg?ZLy#4 zSTXdXt$~as0#Sz-HP~4A*6X8kKAZ1JD^q!&G>n(>iNtx7M@br+6xXzJqQC}r=>_S! zu~1Ljr;Agu9^)3%#Z+y;CYAo^Ap}kpn4e*4iUr-EK3QmPqa5TATlGcxpBF6i#QYMcrZgjL zM?**JO7;=EQ2tyN4<=^(>k7$pkG+eUTg*hg%ajQFUUBZ_JHO|799K=eo_bAZ!7L}6 z>xbzak;)LW_iFVwjNSfARPZFlaLHC~KCSzx$O)NAIg_I}==0zkm1zL7%&~}RHSIuW zBM=N-&jG^4JDAL7tJG>@Dk3ZMi_ajoN{a**-@pEDTt`QTnBtyq4!3`kBTkP?&ck&g z?(&rMy0+W0SIOqJ#JTH`K@E)E<@KfW#oP0qyNKza5F|+b=`d-gvVh1aUGuf^F9!R9 zg0Z(L*O%Tuy-E*BV=F^wrap9TCgecNMcA9ssYCjn(JvSBHFz6Q*gZ3wS_D1i+U8^(HzrQ97va;Gr++sy3QyJMu z-n9}#F1i`1Uttf+!f6I3VU-h8eb63?j+f1pnYgv{mbwsBcb_eA4PL24|Fmobg%@(G zaE&vy!gapVu0Q;JK!@78ZYJ&v^Cil=y5~0#vTubK&(6q?$t)mFrKqdpx`55sd$Euq z1Lexme?;NWtc;xOFL{OywW;8sK_^6v6w!k6{`S{0ZtXo^eJ0VmQaJvtswlKcQ zUm1)KDBu%=)B$%A!>L{EK5<~4TY`)*q%XYvOPZsPT60I3qZ}HqvB6T~a^KpD{wzw< z@cql-HJzR2C_rYpPz)X}#Hh%XAu-&tte*#-eS86U0avtQRDfaPAdGE$v#*LevIjVE zGlMo}dx0&AO6FGF$2_-)aj|LNUfsES7kx?^khkMsTh^Ke0fGm7=B*=R;xGh!27)i4 zu|uU`zFX)aHO zN9EK*b>c62K_YP5QXBRH`oyTWZw&-)NJp+y*f6L?@j-N*wDTpE1Vs}z{}_X^H&r|^`mlrPu02%_83+3DTQMWlT{w*Sil9iyas@Vq+T zzQGii^OFeHjY>V(tB*@b51w0&9zz1yyj^5$PdH>1((yb2rpo7kQ#zJK0`+lC!knH{l?t1hWjAw`-DK4Hg zgL4gp!Jwzfbp|=$pNIy{+RI8e105-&C0+FrU1k(C5%}lGZ+s(Z zKAj-3-$VPLoX)3uMCvD>af3Fh0c}pMk+Nj1-g6aPiH)4mdCHhyCt4l-*O5m~CF z6%6kzm(>a8J9Rsy(5!t1iSK_QKU&GdZXF$1NxbJu?pvP|~NLhhVd2zxU{&uphJ_D&vE9|1% zsG>Ok7KAj|otuoz>rC#r0`=s?!KUKEM%zI`nYl&N`2cLn+vE|nuld+cve%W6E7QEU zWT!F7G^Y@4S*Y>4UBY8L1Xk&Gd&qbCeVbKbh_pPBA$WX-f=aU@!>D9X2`|m$51;Jq zyH*IYF*QmokR;Z4J5YkTQPEQjNv!IFup~EqrG2n!M}sLe*qDF{11}CkQYu9PL(CK$ zNQps@4`0VbG}nCIsI|2wXM*Zd=uB6qY%MqpZ&Hi(&*|Pzq`eGe6+;$OO-L(a@BaT; zaA7rfR`Ridt+H8E4krfj` zF_Rd&oUTOjFOTwuenRHzOjxarZgjDK5xqvXE&Y6vehyEbMtyE60)HIR6PIYR zlo!hLzu~rr=-+D7Mjm2jt~)ZLRdsQzOkCi(3PvRRK18dPFU%%O>NMq*bUw<>h?_=G z>2=B=Z~fqg8NR|7-?iD1Sz32tsZ%aCll(-=7C2*ILOQVwf``NWa60({>EtcD^qCLI zialHK`G|k@)aI#QJE5LKa}ZmHzhU8-hYd44i>?Tz;D{1#d3<%s?xKjj6*VSWe{8H1;_`nb04AS{V+&$oE0=))>6y; zK>sFC9jEycqh=XCW^d8n^*RncR0lH1&Za#;GEb+gWW^A)2oq8Lnj~W}F=~^yG*_iO zuuXAXgw{gJCq2F4x$qT_907K)=w>*uQ8M!EV8PC5%oscYXzHD5wh({ zDr4u4)rG-O%RWW#AClsUc@mBH_7(rgP5VfdYyi^-*afVk3wz85qD`X$Leeo>fH*U2 z7BFY!(lKG=DFIJk0muAl1W!Pv$|GS5?{K}4(c&Kb@QIfgK>b>@tuMc$yO2;CMbOGy zcGkWKeQvrp^C?=6gkg22tePQUpt5*F<5ulHC|Jg87H(Ms3l8=GVK;cCd)dw@2S450 zzLz?#l-a3+7pwN^=l{5TSMx|M7^%ZWZeCSOy{rdqf$+BK*Aja zQKsmY0$*goFQ_i9$mbkq&B5SPB;RMQXby%VPOR)zG@tdh`oQ2M$D08)WUcpyR6&To zL>`QJ&Bp$2KwngFjU|xTBa3Xna;!aw`-Y>$eZTAohc&dv2N$hSp^-iq{Gdpcag2I6 zPWrfZ&h~0Y5?F&(#Li5rrovUPLhcA4m)ZF|Z)(cjK_*KP0w8_-35@80W}C~7NAd4+ z)tN`Wj+a4~$zMnEzl7)#SJ_`RXJ0|9q&Nh1$D84P=-*g zG-v0wNjs^KY7eXa0=>pnx6h>~d1L!hxi#y|LtLPk(W)XuJ;DG30c|J2*~$GD+3O+)oh#TEN$B}DF0?3V5LTDJ7wV@Wlr2f(~HhZBMAZu zm%IcIl}VRbsgo+o^>sMelU_dkwE&?paBx?Hpxn%&o0zkUPFRY{t+X+hb04siqE2HD z0){x3w(rK*-|BPtA0OM{=|Q++k9}`rEeuJKvTQ=)8!dg|NuBsvoYQ($SGHZ_eS(sE z=yqb2CJSQc+TDf;j@Wj8!2W1Ov+CDWgMe%4L$e%_yNU^c_q2XKPDgIGDsTY}7=+pu z)5h;XUnK}Lno-z&!6O#1d{DQqq)XQqca4Q{7N7O>3HW_vMD+BsOW;=ELn@F8sz0A6 zxYS=_Xcy+R=>g#Wh7-#v29bN*0765yG31P3+>TiqwC6x}`ZR@~Lmfr3OYO9Rj{*cf z8u>Y1aH>dq*J&i#LRM1a0P^1lv!7Se84km~h1+h(d%A%_J1jlCK@JU~UkCU%n-J1n zV&2UE=DP5nY9=k}`!sAJk_RA4Xwp84EJ(0j<>h;}l9>iH>w0 z>e}9+dX{-QAVDhOFRl0_1g2io+46WU!R zOj-522VEq0OapLF-S2j#&0_ytF=+N3b@ppv^`$+Xxwb6ms_);>Fys5Cf`59KsN^nP zUhkf*Ay!b6t)-yKj2P)<$Mo(-nVuXjQq+2A@R|D$uaP=LER>VH(1C&oz5J;NsS^nz z$u9dTBMybx8;@2qsWU zIb~E0{Z9V?KX7~^{q5X;xTXaZY2Y86X0ob%p#ax_J7r<|LYH&S8(%$3F;K@dn388^ zV`WHLRKjO!CtK9(q@MHcnlm1}^k7&nD}!j(=CO29TkUNTPJa>xb|Hw>6DiMs#EN66 zxH3oBs(;1~ZPaR@Xn-$zaOS!-KZP7aP&QHt$}0D@HB$<2`F(ZfMHLQsavXn37Rz-H z|9jBb+d`15I$SZnAlnF}46#h*4&R}V-k%5(&>6?k6_3IQN}QQUG)X%O?e7_=67p^evhFlMI(WW01z#BnQxwqUYA!8WOxfVGN%_fSH%L@%sy}t*tCX%js!KbUZTTbpU=I?TU`?|7+ag5`$!#xbC z3o0Ky8o3#c#Laa_cQSY=!53Vo9ii*p>9^CN-7Jtsglj58Pc4*zS{;eYur_6asZu#h z%6LfaMxO;(r@iuYDNj}F$DJs8t^`FYkn)(a*gI_t$mv?@rPKIOGjm>;0M?T0G?t-f zbL}Ko2-zf3fc{2lYz0KYTPfDW)P2YGNnc8((jouoK3vCiR8PR?HYCCyvbC{aQo~!4iXN>A{ToqTOUF zwAESur*31tR!Z!(dd)Ms9K90&B^6kIerb(5vennRV^Lf`ykcWIngP&dh(eLuzYcHB zN1|mWe6Rdc!VL*G80}kEUdSf;s=jv>U1Y;v=04}sg?8IkmL&y4A;w>IAAvl>Y!Dd< zVvV61Ftl}9yJZ!Oc8vf#A5sjOakZ|24-~#;1un3gv$ku?Y24M&c$j#=lYNWTM$S&L zOyMYL`8P%c7{I5B^otj$xr0BES>^@-)}QnAfAB_}gVfnnufh z&4rFxO`J@;wfWDw%GbQ`h~UuBnECSoqO(KJ7U4IkA-rKVaWghfky8DRR*6yT@rc`=27 z5=uEo+N$^?NUxN7^T9SCT83CLT6o|vTDA;gEww%^G!tT6A|`DEVygzx@g!LB@Tat( zEu-Xr>KRXb-zu=)8mp(VGOWlZ)7m8yCVA-N$M>|JQ_nrF!td<`iL7zu>%&NeG}Jqi zc%K)uN#XGLkt-Jxt)@N+X6y@}gwSVP6rc#{KncaFd+bco`Nzr?l zA=sY-RB2Fw;{KuSt#eo5!{B)MX`+l%6jS6HFuh&4Yh?~(0GnOS83zpvD+7!6`oDqi z3{(~M5T_aC!&|nBX{eD}So9rk;5#I`aRmlDYPKR2cLlr-QJSQ8>nGUmimLpPMdKhw zC~k|7?0SG5p!JpTkeECO!Aw)y?r2d7?RTWc#VDocD$hW0$;bzyn5$GhPRLk>*^DPu zM4$sqsZG^B3SCND@z{9}`ni}^a59}-HJ2NBidX_%Mcn7Kj4+cL2Im<(rqbyD(E?tQ%NP z<5PGAcL)^^MQ;kTUzfJx9uWgRUC6@N$zr1Yk^qtI6k_e|jkuUnt1;I$-NrzyP)&5k z93pQVV~Rb%75I#W{AHVpSaRH}D`Yy+!PwBnBXB9G!(`evNlYhSmOQjO-=pT=$mZ3U zauodHm{~uNM;UdFP3fFz?EV$4KPup>x+0%Lrs7x-$@D*(vzQs93o}I#qORunOJtqQ zH$`7c%V1PMPb{2}F%5%FFA3C3xc_>ni<(@$Y#GGwn?A7$vTztBh$R_ipugIl;~n~& zX3Y;&_?U?K5o$>G2BHQgy%8*sWw%<+A$C<^0Q2Hvq@E!ymtW%+}2hCjs<5fIZg zBF-R%ptNBMgs&xkcS#F-!m>hahzFnf%M)-2zp;-Dd-R75>ZB&Vl{T##1C=ebbluRH zi1jd|W*o=8M`eMwx52Efi}Kd-3}hQD8$7WK+sTX#&j_2GR5cDY7ZKs=M63(h>1F>8 zpb935xoNNED6Lmd@)dJ|Z(r|UeP+NfS;7}q7UPL^DCC``<073kEq4kD^R$faF8G*~B@>*w7ay9q zAXfm34zE>eY@_yxUb8J~i24U|)#$wPIf$tGefISK83@e-_f zm-#&SAy|7x7R|($5-2R4iQ`x;01<1zTyY4~tS{R5mlTDd-;}~yV$SJ{pZLs^Hjj7J z*KlS_O}Vt{w9Op98@+1u$oA>AComw^nlq zsn>YZ$O30Oq#s%#(HP`9V-ve2|L|N_IF~ferHysFow@x0mq$n8P{efrsj zozJ~$dht%I=4b=3wRE$3RIv;80BAlTNg-|J?qVovm9_2&Px!JBhpPlWeEk!-lkNq4j@N^&`RnWm7!SZ3+@r&GI+0Mf0P zCNPzR^yH-9tGYU|Ur;6rsw}X%&*YgjmKT%i>FJ79xtX32;EU~Gi0CE7RMVU;znFiy zK^Tf`=uJ@n#B!J}N9{Z&@+c$DrXnH~n#WxJtIed=s5lf**krMcKlX>j6E$}AOrgft z*h)E!*eUjKX>yRgYD$e>OHfkpCC=zS(q9eA^UBDMSaSEZu!26Bx?|ZmP8%Oa%hCbF zcjN!L8>G-L6@ocVVl5mfXCx0B+ni^cG5ikZC_ZG?4E-4}{;bN18(vB_7YTg6)L*(R z-gxDpX?s~-wk!?Li$)%m zXl=rGA0Y9yg6I^79L)Z-GsWaNcn3M@q`>B*NAw!JYQ$-@&rJCc?F$@ID-W>oGsf*;~T;O3;{HS~1(>N&Ddtf%M zbgypG$2%9e*^mYA$zA4xz8bOsw>=ORMMHS?CAV>13@U8kT!SxEk3cz8(AUnF#y1Q2NO7E%O_h;|BK#C%*eGMwwg^SHZv0A{Q*4YONs z>>BY>q$^lqCNptLvB&ZQw)r}{EmJFA)xt9m6L6v&a5`6`x089yr*!=sotG~P7`ps^ zt&sGo8ZF2c|KNNnv*NOio*cGoQSJ2p-8$@SCoSh8T{>(DJ15|#)Sv4OFi3HWy*CTc zhdTQ4FC`#S0KEMZ)eU(1uLS>;)FBojMxP~HiJMoN{4>glwX#DmzNMUhoqKvn2av%@ zx}phCUWGIq9F~)MvQZdy&wX2%Cu`eBf1N@zGN*%wi$kGadoSzRWbKm)Z|Tfw}YUd_vHVRJ$?L-mpPFcH(k= zuLdW4?xK>D!ya>hCbCO$%P(VLNR?Bmt!vwJ?iK}tnFzdrp#gV=*$bEw&H)IKap+Ut z&B{YrgiTY1dc5-qXE3;9vm43aV-ttS>PF!b_SDb1NBNw+Y%1=E$^{|SKA{^Oy9);> z;RIY>2>-qGI#n54L)`A+G5!qYm;Nr#QNH1ilmN5%FO)RG)95J5KC$)D01&9Ii_;f| z2bcQm0y5hr8C3(Tf>>1`heuFb5X~Hn90H$7J~LE5wAU$~N1e9s$ti5U&L&({o5YHw zr6zEbZBK>*C}9kLY^2=pl}hz6&;eLX7sfg3ps!S#;QME^xx)YtLepfg%FlYsR0J{h zkN^7RH&C8wdfM9pB?T5kWdUYqUfnSgv7B;5zL1@F(7|#-4QU&|#fT>6^@v zFnCp4to=Q{|2wyN`h@&ZJ+v6f#Ys>lN@m>M$z(28`%eZLhb*pRU~cfELhca8R&$Jf zUH1RjTk_2RdwSb%Sn%hsd}hz^PFXs~4DLQY;yyH&I7K~hma}9AVyt5>8P0f+xenzE9(Tt< z(|yjS7^q1U^FVDTji-@ye$ztD&AcV7;>y3sO1<_)#8_E>H-zOYSx#h}JiTq5@>`J? zD|SGMGcy)h$L_E?7gbn{*boU4{B0V8&Fs|zwBn>yP%7wznFZm-;?--3MQ@9Q4B}2E zX)_KJN#ac720d|YwTM#+O$@31_M%Rn5V7bE(mOM{Jt@yo;~$-`01*vz!D;zRacs0A zQq#IA*?{oXDTRLEr8`8!@1exTMco_H={LPL0BV6gytK-q3O+*^V{@_W;;m?-sdc7=A&%14Hs?Y+3 zsPoM;LA2+#~f=wtmK8xCXVhH3^-`zAOc=#eo;TuRr^v8=SdV$OZr-fvLbY?N!#|#vjk0_sy|M zqGvEj!)G}zv3@Wz)hw*Z-6azyfCDgQjyTndfykk%V-^1J(j6ZO6C=ALxAbOD@jJTe zm!!fMfgvA93y5}xl2;3Wgfu}I6*t1qebBh<<9L=2=~o3KO_BC>aMPaFDI z>TwsYfSxJVa@npCF=`r$@&doLxNteZU)$Jy@MUH4qOAG-FPfj5mMg7Iml2mY+YkCI z@k~xgO_U=}-;5liCIjat+D5aPlU}XT-NGa#k7D&)9$ha^&-py}%0qNrg`fw`T{SQ7rsxbv+J&oUdLf=T$517qP1KK6y9KF83EB!w zs81}jMrzC{6mxAQw9=6=;-eB zcoUt|G8&iIsqQthjXR-SDC8pOI+NYTh~|j{0!_5b!i=Pf%wG<@=Of{~AbIR%#tw)9 zny0p0eUmBhNDrIe2%<}Z48yaNe%7n%r7DGH#Kn{lC$D~f88xt6j<)RNY!knoXkPlX zF>da&XH|Aaq{obfbDpgGz$NU=(_W?Daa%}a18}V-V4#EffEskD9MoB_UjkX=7DNn8 zrGBd`6f%`voiB}W{O>zcp*-G6ka4jj%Zu}S^~$*;Fhj#;J4J`vdaX-?sy*Vo>U#v= zlmLX~7-FV|E{KlB-en5$kFK0vLR;^h*4ky+c;3yrP~vPv%BHxQ1dwu>vT4 zJttiRv2v?!pvIs=D0b^~`p@RH<1M@i0F2^(KD+9OKO`+QW``{@9OF%3v!~wKY}XIb z@S8LxUmmaCNW%y)Kl_E<6ijbQq_yOe+~h$gglv@w5j|f!!Xl3i=EegncIrvm`xA-b zmhnsHF^&ves7_kiTRk8C_aEPt8=oiZyD2U^h09gxFPoMwJHGi(%nBGzljA;a+18Dh7QG^V+f2TE&ak0kfS!nS@KYc^Xgum5oH(1-+i}Hu^y$II< zVU7;cHTL0r-vxOYUO-DYOFOjPywv!N%>a`*V48($rgnAi&ZEGpI_Fnl4K3r?1fNg- z#+s!KTfTt5%D}5BVU33yE70A>sozU4I2n6^2Q?VOEJYBRVXs_)tnM?S3t1sgx$Jfu zXDxL5vMunynQwZRwO4xQI_Yc=HS9a{gYvU`zU`&%#o0l#lN1R*E$;vO7aIrIJFMLJJ4vl?ZmPJ)!*oF+%3yEx&ytN6~QRRJCOFAAStJ{ zn)R0e4OE%<@aVRd+zF%c(SH+FdiTP0jaGKOQK?u_UCA-1`zjm=Ahij2;1bMh!wfdg zx8`8PVrUKzh&0$%$gmb4(y$&S$+aQa3n47yjwChmF|xr5EXQ@`({COb`G1~sZG{e( z-+SwnKcrm7GC38xD3+^MG;)8+CbFM8||W_@G&` zF}E+!bBaDS$psd*zT>_qXl=O~GjPSbGsDf5#S38ovJWJ3cW3c8?Y}=M-D52|HH`kaa9IbreJ)RyD>271rEL-;#$l=woTU=;Bbqh4T3 z?8|B0ZE28$u|#O63MNbce8uo;XBgNdJ!_)05C;b!=r2Ub|C*cB0)`l6pi+T&aVQwy z(j~@aspyYvuYrA>xC6Es-v+7h`qt1Jy#wjjM{6zGIowdVYM>0l(xiNlViQeb=w|)f zOr<9?R@nb;MFL>%$mH~ys3YIjNVFhFoGp<%paM;HCF8(1FLc0kB;Hg&=wA#EmxFa}c zYSy*V_TBLrFl(pI(jHXT%s%sjkfH$#K!GdI~^fJIMMLWmMPiw>mA8^9$W0t)zFesn&QBhkj z7ZgO(cT@&idZK4z2m?rK&bVTbbz7T-7qK`*^j6&Dx-0|mbi5pq2b=ECb9&?|c4ty} zo|9|Vp>;4K)^9ehhb4izwZD{;$H(iCWAHal7`dPBpEIb={c9@~UZ6^=2v zMj2M=o`eqkmf5&VO6iAi&Sjo`;?C~#Zt@Qj`*wOy30rO*#bnLnRY^(M361APo8?MP z8DZ0NBeumTIpr%?pUG5q-D+H_ar4Yi(8`SSTr8=af{|bG@jD{N_f%v-yH9g zc}lvsU~+FYu821e4Ic+t;#K?C&vU2WWmRAg&vSoX11(r zp=Tv{f3F#QD_@c_FLf+AQOb9Ye^6TEZbu*|g+Fc<8;4`L*aTx7J7BG<0J$FJR#PQ% zJteRw&U^}6TO=F@zP zPA}q8wWwiK62?z9Yz=V@g=e3&b9C+IV&B*$R&E#&#zEwZ1W;kG?jMX#wd9B7V*hKP z21~4UY&YU9hGs~+02vmdSc%Z!o?@gi*V{GUPxAW@HdL?K`2{aNUY)0`6Y&I}`7}KZ zZ=&)pUBNq=hB6o)TN0&Ep^oV7#4x~rhSZAcokQi5wmN~$kH~q-2~c(~!D9<&6CZQA zgVfvcAO0DEQcipD3EmZloTwbQ^9rCK-S(@P_VW8Do<4OnFrDo9^veH zoc2Ym8*n{b;|ZvXK*BY`U9y*Nh z=hV=Cy(s^I(_8)NtOxUh5+_!d)CyX07oR9-QScnf7h9_>sy!~5OiuQIEn_Dt@-KM% z=m(6?>Ox))ZAj_3O6%~LdqP%dVC2dzDDN)kZn@0>Ju7NhDTM zg@O+H_nk}Jh8ZP0#rl}%86k8MI z*qh{AexNqVNBCYW@X<4mc}Dba8q7cx;oinG%~NLbz950_$9J;{_QoN1ltLzUPoCSS zdPxQb9P~`B>05j>gE#&@K7Kl3w1!x6)@A>oZRHc>4P})@cj2W4S*wZVe2yJ9^Fsrm zL^C(1uBpXKMkiVCMXM`-W3JhzR$NK49|o2(ARY#e?kL|jW@<;z)C-7Sy)9z0IL#&P zX=-hU1B;9R6fjLJ&a1IZs416?Xe2aT4hrIag9WsIv_#x7O8es>%OYF8SSHiw z_llbzJDc3O5(J*Y_-)8zxiFoZc&3rq0m6GKW4g^V=(s_u23=_%xD!J1oX=1wz$?ES z&z5|5n^J>DrJKD59rp!yX0J*HUiruW%ffp+4fgvKebIDrA;aDM85zzm*kU?&X@K*_ zLDnUl+u>=2@f{?}#<5$@(+Y(C+y(x;MfucJ)yfwkj8XB-XS|Ba;cfUxFJEvIQ1&^% zz5J1om}s;Gc+O_eL78-r-auedYuh4KA;~6J_y#__AWq=lhgzdY0S61(-@PbI7D>cJ zi$0!wF=cwQWZ7%o>p7IH<1)8MxEH8FprwDUnn-;y(gBeMe?pMJ{48;0bD_{{d#-!B zO7WWB41JBLX#V1-s}^?eqj}u+rrO;WOY&T3v`wW~af%BqpstViJ&>#fOQGDru|<}o zNd>4|{V-f$OXBZ}%Aa=OhY7t?e!ec>@D41S+O(xYpJ`|3k)uih#4>R2kk9{y|b6X!*GHwnSEU3I@vo;@ym6}4#Pu?jH=Y9%?+0op=gdpdZSMs0NOW>#NO@X zox~15=E~lv#+TkNYF%Hg5|hBM0G`}3oLF(gmW>&{5QP70WavIhbMZ{7i6O6w01h2| z981oDp1Q5tG2bnHtZxlMv-75|S6&C}Q+Lr)xOm-z!jD%=V*ljUb>m0A(K?=GY0h83 z9mc|)pF#`y1@B@FQ$QK9Q_2>8gGxC#HO^giD}SMr1GodgIsk9IM}s3}x{JQ|U($Ft};FY*UxAdXXr2j9R!68yu0pQ*;EDr#RH;I~+O z^pW*#OK}0psn=oDzSFRo1p9~Jr-m3pvPMQd7%VDcN_lFXmLs9fq)pS0yy4|}-MKII zv9POLU^D0EL5-+2b67-4TzCgd+Irp-Z;;61;*U6Ep*E~w zhj;RN?dRu`=mJ`j z-5|2vGO)_5u>ccEgl%X(|6XdCkkvC z5Q&-bfCgHeHxA0F-GxGSp~g`7S*;)hNjw67iI$9V89EL=OK2n_Nk1e9$Usl4O3#z) zg>v4U0QPGxmXE5f;fdzY9kyf74n)klDz$y}{)%q`-b_z|l^<@*@7_$BBOAVX4V4Sp zysA|4O0NJNx>v~e5j+uq*+lJsPj+^*UNmw9!-5EjCT!qwe?Me{jfIwMlmmJ<6)7A6 zHHR<%VUFNMRGjl$iPpHZdBUN$ssH547fTg%sk7?AoV>i&u2(U5sJKVitf_10@t%P; z?^&n{HB9T&sVamq^C(-2a~M#)xk!960p1l?nReGk_cjC4;@y$b)JeIeT{lO=7%gz3 zsz<25!=`da)+wTdWkuv}UeSUbCBZk{x+a!^Lx}RkLRX{_E1=3sG@s!Y9S~r99t*GS zrjAJS*B3YExQ!t+#eV}D>ES(*Z48F%;oaMBPf=LcWWhNKK_gFCLaN1${otH~G&8+I zo#E*N5=yL6rBkN4T7Zo^8Kz1Gs#H7^Hr|yeyfFfGEiG5QQtZC7#4i88%!y+ciHWqb zJ z?Yf;M4L!44@q!7^!zCwk{wk@)h6oLv6*gT8C!DP56g`BJ{dUd)tj8x-L$;eCFrGq_ znDYD?q^M!ngqd|@(H$HEop~GA$*XVp;hne%!4=Pt!oS7mBN<=hY|)m5D_rOO*^V2G zv^-*!8h)#XyJ+*fFYZdDF0mwG1&_jkePwTX*V{XtJlymC>=2*Gpc3N=0;tnBt3;<-S1bS5?;TxpQ^{qt2qh z5d?onqKe?YQ8mD)>l#mM#cS#lA*DL_Ws&|W3pxzT6ZxnMd#VY@$9_-B9uyRDUe+PA zdL^9Ex;Py_!@U97t1B3hW9VETuO6(+E}6x+k{2r^K)Knv%3Dpf;n5P^58QIfUc~5b zC~?T>P+|FO2&@4@o?ua5QEjRfvE*nD9R%2Im0@Dk$DW_%IK~aGElo}`V97p-ZrMv5 z_71{^-w{+`|4YJ$IwgoN9fqS8Y-y6OVS7iU_?33w%_WJR@wx7g)P9R@mZ-&bQ52nt zHhUSHC?(Y9J`-4rARuutGs6eM#;s{u94Aan`W}aybg!;_+bf~(3qJZyrGd9Q zry4mIP2j`|q?F!Ee6Nv5%jmNqm5IE&eGpk%`ePe|$=m_<^3vg*Wsy`fKEQ^@+Wlxa z89jMwAnIdS{%#1u5*c)Ynn;zj22`lokw{wUU+b>ZL8KbxHzEYyN4j{YW_*CVf8?4w z1LZMz_@dm}zp14HCM`mt$IZ_g*|ix({|@|d>76Dk9Y^ZAbYlUua$&8CfRhz5dHdC0 z5gFqhxBRX@c9?mfR55psV79QC%cF_coW&C0bDJw}O_tM1B03$srwr^O=ug&?{B%Ak z80-1p^Wuwo_O2|%I6!Ubkir-hf(vjuD7CGF0PvO?A=c45$-Oft)k;;ld86Gz5p3`g zuZ{1hu#_&O@>TF@nRvW9fECb;TWu+2)6dI0LZZ3A+AU{y9bGWi6{kDv$fq+O`l z>c=zTRqQ0SS@@bZlRLAibCf}OLC_LE53M4qp}5DdxFWiqcyYJ*^Jkdkz`$6xE(Iqe z9vZ^j&1M@3x|{HQ-_^Ps99bKPWOvDS?`~VG>jB@IZ{XT|Y{LjMI8GY^WF36e(SB$TD5sKsX(!3N5#qIS7n_?xRi{YqCk z0ehPpiI5Uiz{HE>3-4FwX18wgZ-v27_L4PkP3~4TYuS8eULC9#1QE6rOh(iEbe)?V z&L)Tm1b{o$Z8|vToK94rIbv>e}S>>thO4{kyWp7|UXZpWC8Wn=jNamOA; z`ARj6V=HS)IA*Fd=17gPGPx{kpBv?T^PV)GpCi7hh}yymb=I5Y*cic}~sFGz!!I&Z;3 z>e1}y>qzz{NBf1_vN^5)F{lNXkU$!%a$={NmV8p}2y~ zG3YlRlR-&hQ|&@>GkH`anlS_QnvPe2fcc#ts)_H-90;?Q$+^wf-BD=NR%r%4jZW5w zd-F}KliI7`fd`m5_{;KSy#jSWj`Wrn0!3kZ;M*JM=8W1w2h!7%&?g7a4zPNAwH54E zl~OlVmzC&O6>iLc1@*9nMPjd7gP6o9>j+!+7x(WTbT6M`2>QAHRLUPo8ESm;r2QZ& za64I5LNXhpp|qZ#r{%TABy(P21;Gf=k!Ly}Wosffa_|*;ZZ^=9BNJli)_^&dipV;S zBTn^0AMa5w{GGk6KeH&ql%yppch1cv$Z9U^a05!?AVC`VFWO^*LlFgg8D{8REt4-e zH2R6daIr@v=-19F42Zje<8EDOgJ(gH&_^hW>ip-q@)xMlU3zruXcZ=sFE9MwCe5KmgH8iCU&R z+^>c0qgyj}4f3krsJ^uwo)`{xmXfwlZCLF^b+GnZ7jHM{p2(?5Lmld28o+ttneaM8 zvkb|>&2w|pSfF$iDyKf%2vQ73iBy^CBinxkDFGP*6TE8*Wpd}%H%;Hk>;V5i0Kld= zabPVkjU{m3hXfoo7G1KeA62Ms>k)!?I}^x4^+1bKs`Dgs(mg(TzAXeeJ$lb7w{D4dK&O3YSLY0Y+!ha#`oyYT>)YZHiH_b=9w5vJglzg;FLI6 z@E$}i_L&+xhVX`(@O^iYw>4Y6ff2m{BekB$SO6Pun&}i#Seqv}2s*M~!aR0+BJgvfox$Z2-fl6u$068bfkUbj zUWlOAr=UmFt5pV`!8QqciHL69*nMXDrp)(~f$k;~`KqfJXc+esrg6Uvj4-qLU4?EYJ-0;6}mhn4-i)1%hM8Sf5BIU-SnBKSrlNR}l z_D@u5qxJ|`D(SPL;*{4;xTU{=DuJ;Qk*K5=1`mtq@AJdP{7e5Xz_zKGGP`IJzq9g~ z(JM{a(a%b>E=U7@C5WbCPur;qSe6Eh}27$svhhx zCPJ!tfKWe}#<038CcgL^2}=F5G# zy!Y!oe(y5kTD{HS@w+7S)V`=lU8b#S|NfcG8wit$_C!=>B5>NlFYd;Ut7qPYhk-NM zq)a?6)w;{f0v_u^M)W1!TbC5fxe1aZ5zXpbaicJ+^3FXd(rweLeLu0LIrH-N|N25# zIKLhsK>&u~W8hh_n6g@Jk^cho(6fwqC@5-|tvD7YWZkFj$r965y)po3u5N1qn5d^A zcl@Gj+}Bu!1P;4*q97p77ztn&L#lCe{TsJ_3p>-K26)U)zJ(7P_{pv@&L%i_j*ghv!!fgE3q7?|h_r@xuR50f9u zR%s`1BsA%aHD_%__-$!IZ|1RTkfA&o6@{f3Zld6xYbycw^{ST=l!tY8p2m{_ZU3!B z2eJ>x&zA)dR2z2n9_ogNtasAh&)lKSCO&Js|+P$jn!3u^6nu9 z6ZtRAntrmrNnkjYz={?cVYB$|i=SSV49w7~BY4T$-tQ~e$sckOk)YrpPFNV~WM_1L zMqWj)4yhCp$LKouNBKUqRV)2L-sWTqE&d$^j2;rc!+v;<%B|V+3OuK~RrP<{Uppme%W!J-66!z;HSYY@MP)4^dMpX+Q~|6(-qw95 z6@Ot0Vo}qUhV;6^EmX}4;Fn4RRiq5Td$H^$>QpC>u?kV2^)O(!Picha)iaq^8M!;2 zh1XVCd!vaFR*n<3!Pu8~c-lvGHm4fv7K2743@+Blks&_wwFnML2ub+33kdl|p-Ez* zFjJ5H7(?S)Y@W?T23Xu$(bf>TF_CmBgE1pK+>;h^l6S5;8+^&;1nNm4tr@!vUL`Fm z;}-dX0g~CiS|4EAtK&?iMuy=&FYv^Frp;BZ>=+Mn+j~Y0WGA*M&r540_BJEEj1Cl*Y$#*C`P-G)+fNFjsHrU&p=U}uHoP^#>8)7w2+9q#-Y2yg$vF;maTqKi23h#5>%XX|9M8N0F5b6=SLo~58hFr_ zPJTGGq0H6~C+OWII$ra5*5I5Lf+Z4NludvTLLe|@#-#ek1bxS8FJep}#s};J&^CVu zLUe=ecAKx8t_+3c3hnLQwcGn(?3H~HgZ?ETNDVbAVKeB!GDjhw<;xxT`p7M2nKrKP=sZjzuo~yg@ zIFg8D+%V-fs_zjkn1Yw;gUj8~3Bol9$As>&dzNN`1uWP02BFAGbF96;3x8n>9^Rj} zEB+d8O~d0g)X2L-zkpgdJXM>t4WC!sGF`y9Se){9_+I)_QXSM2&6Jo*yDao{i4;T)UO?-)08`Getcw7>;jBDKxegg-E+*JoDg%zYr~IyA<_c+cQ>yQk;v8h ze`MI(y{EbQqp7KYGv3W2{Fdt@K=t?R^MoZKGD#9gC>{)$TJ{+r0FZ#e#k4%P)oEk; zA>*Z;+{^eVtJFNqV+C4C3Bw6h6&oxgusrm&WBs-1C!Cz1!a|_(Uz$)VF2@}4#`PlD z3=5F_gquPBt1+r;*q=zkua(JhApJT_Ubqb2A^0&)1f*qNB#DUBcZ7iNueFIB_sH>U zM>z-})8*~xYI^C$H4@>`>lgnE?&&coed7|VC2e8~ z3oCa)hGL~|6Ig|q>CXnZL*K=eI z73oFQrKdgQ@(gvorid{|%VSP%N?ViWm91yDs-+DTR_of6%z46n^s=R^FiY+VmBb%Q zP!*DxEi(g4@PROOfhK|bH&^XYPjR$FnIzIS;SC4mpm_(XA4t8KUJalaJSzLR$uQ-< z2EgY&=9$k04#4axAMrzo)mwi?RIAt0r!#}T{x{o3KD`)Arfv%l3uj%{_k*ca(M3X+Fy@fwcdzbRGQzcdZ@sRJ-RWtqx#G zqI4*Aa|R?!|0sN9ms1o$Ad}ak7!Qr;vb03vm+@M3W#dC2Ao9m?{y0m zNjbCDIz!z#F`c(?|0Az1Ql-f^$Lx;zGg7Xw4pSk&e^`BXhf-pSBspIbAhwO;uSCJN z4Im-Z-2;714ve3zn6@>q63@??07_r|o#Sze*z`CCWZZi|lY?7#%_wpSH>i%8SFmN3 zK(b7xNf%8x1$r&&jGrayJ^BPsg9FNU>u2jZkP+|FrJVf=qvJ+Z+x&&HlsgIefuqw0 z{;_LNF#?|01tK(OfyU*R8l9oh@dXu{e9d23p~j%mTPv8>{xB!w5&AW4z2{5M>0&el z4HaILALx8=A+dvn{HE31?fV6HM|IjesX99|U;iX>6FE+C(70v5;tkjb-4PHGen=%4 zGisM{`n7H`pj8h_S=W}bT~K>@?sh^>*Nb0rjG%|FiptDND=v|oe@YJ}d<{2+FdBpNTaAEpAq9s(+9i zMooGWl5$<5VLm~dyRDs<`;1Ivm3-02#Eu533Oa8!p-DX7MC&sqV2^jXwuotCl{!r> zouY$^dzwTY0Do)b!d@Divk49uYAqV~LiERvK`Ee(ZwpRE3GU%FARP+Ofp%)O6_t+X zT!?zQ!l%tLOvir{`IjiBtQw`0oImH!&-V_Dp#k*9N_lPcYRx5I#ro@Jgo7S7V!W7( z(Edbvlb+W>&G$fnoo1$7745L1%&v>D#S@d0Wgy(jA17Cykr8W{7Z5|w0bZ8@Qk`F% zBuFtlJj7z(7}R+O@#X5W4a7=YEGQKWGNi#y1ae8@=jkN;N1G#cM{dxVaGF4xCMRE& z_IEwbYBk4Y_3}+_n`cNld-V9FB4NPTdX4TK9$d>u++$F}%Ls9i@?RAOS6MDXBxKNy zBUWRBe0AgiD|s|Y@an~7dja${mjKGDkBEND=?d}FG&|$&hD}|FtM4t<<-RQXU`1!! z=iy8Y+nBS`uc|2Vfac)l#UXgIczxd%6%l`zR;%y+Zv54iM9#I!X8xR$jah83z3+rhWWdw+=d;XwD>uH_^A%3nbu5kQbC9G7vs8t3 z>_V{a3Uc3KpIPKNE|cd8N(K!ncYKZSlVYuN9vsWr%$19qj@(2LGn7dJv6NUM*w!%J zVPvOIv;gMz&)!34jAS)2a!euHFW1|3hr8$4GL3kGIo&5=pietka`trRQR+10_8?$C)kkO~RZ=5(t^9-`{ou&HGz(0D4V5akRKW-5O+K(U)Pz_2Jml@^QPRtc} z6N_0V6elK#Z;pMY?+eTEZO3HW`}<@jk%o;%1C=rU=hAUw2i~!CF66!sjO*-$> zL1`zsoy4;tVa)k9awbeU{d@RSm1@B%tiGbXU?G)DMDCP2eZ*l-fm46enn!a1vprvO z{mt|ECI~(5hhZUCm?>Nr=s2w8AFPa{hiiLCS$fb}DQsRfu-gNGE-)+qP`F?DSl+Fm zI5&6;0RAIi^p*xB0@|f^V=rcP9!j$QS6rf9>vz~BFKSgJ+lzZX)w-Bt*mkP^WT zbE1$oPKS(^M$w<(u7BUF+2YF1RX!3zH6OE+MJ(a3@xH+dzIw+wp``+ES?F-(MWef&h5jEY|zbg7;1!IiF)MS{*?}G%)jveCqI8peP(f_=`YaEtn74Z z#v-!A1$skobzfXMJL9eGp$j;Oh@UtP4&cZTSAs5sjBf$KCh?57waLB4q14OG!n>yj z=PaHZ(-M56y}+GQ^D z9-4Y6rMS6%SD7!vQ7N4x34o*!eDKouK;$hbuB{8d5t98<+=LM ziDOy1-F?TaFZ?SpToX05Z7aid8CVBazk6ntnc!A0g2e(iF+jdhU3=bpL%zCfw;fn! z5N}h+LtV^!rF9#8S6E1$f0}VtUW@8nJ5S@80BEU~^;~0cF$bzzJQwr!`su@?E@c#r zOEy!GZ#mpmX=$Z36~!sdZ~2L{@j*a*aMQFJ=j=ms0^YP2Mb7RZ%4I~@@$(an7dMml z^M?rn>+No52A@eKm9}HVPXo0O(o0imJ>I}}a2P*C5^8l`RYrawwpo7msy-8G_P_Lm zLR~$>C6S-#2p^2~N<&SsY#25OU!+!+3KE1$D42(BOIhgh;F2PKuId(8SAA8(o-h6R zoeh2hJ*kQnuFL3Vz0Cnw`c|C1I60jz2Xr@3gE+XS4J;H8;N9*!SA}#D(c&hs^G_J? zalm(jYC>9xbJ&0Y@hxy6kBztjEz}21x1@G)RpHa;0VnK&;&VpymFyhkGKz`vbsF<< zTm}SvcdBvHN;KcZNv~u`+5-rmRsEt;I*6TB^MO*en+tC+lp+|-^l&<4)n5AfNb1*t zNr&Ufjaa*e{wKFpc{ugMjHw=-PI@(P>x)un8xI>g0;juPSl6LEtjXrzqJ5r*YML+) zaufo2;n!}j(t_1t$!Bu9DUQZvv(duAm`nYy%KnI8Ww{!-WgnkY(+ZBdhz;GB)x5Rh zR${DqJbP{G-=)0vdGDz71r!7#JqRG>DG#aYr2vqinYHD4Q7os652+qM?!d5q!oO7% zn-w@(*piB4UNbl7K-6Y(w8>~wfM@>U$}Ii8Cdzu?Eqjmg<0lm@)J4h{vSW}z%9$+i zU$J)Gnb=29n`q-;PCUH2GWpl5+xkZ0a#6+HzBy>9hFD7X4L>uIwWoNEzm=iFU4-0) z{W53+eYfF0S=&DQt#E<2hV0JSIZaY!AS`enGr^BJs7Eg2-}jy+41{lJ7mT3c^tt$% zuQgBaE;vc051PsImM1MfJQ@(F_kH5(vNzhO7w!28zw$;S2tJ3QR$QYx4J&zJ3U0q) zEF{RXzGC@P3|-l3UCymLd!+K-@|sx&5n&}W)>7UTp=wF?nMs1g&SJAGZ6s}=o|+8V z9ue(hjfC8OpB~IAp64I73!rXRn}nIGgrxoGh)TDvxQM|=RgGP+BWxiMsvGF7uQ5CL@3aq!0TjeQb1Njl$g^X_wNa`m7$!!9Q)31_%;{;WOM zHCN5_L~3zKc%Ais3^>B~w0b`z*gH;O3}GAj%a zrR=OvE3(b2Jugx&0~V35Q-C_B-oNTWMQv1 zWnn7{hG07g^TX|n<*57M`g?l}psRpst0rwD1)KVoRlrU4qL8?x7Sge+m^qF6FOHrsL?m<71s9R>}Js}O!>DNk2PkjoU7gKbp?_I2$|HiGPOyB zLI`~v(HKaqQjZE}rry6iT4^&5`4FfET-_RULPTr{6hz6eA#>Kev4l)PVIQ-7NC&=r z1glyp&Hfa*Zi#X7GjNhB=&%;rOK9-ag+I}6i}nCvI;o6~cbDb(H8AifvNaoLUkf1- z2TuTTx0!#Q`I`E?&wE-J(G@4s2yg>r0!eZod+nV?@%bYN0y6=xAozx|cL$a_hdPZq z;ZL6c%k#gi{Sg0P9YDu}3gDon&96ucu~aBZRiJYv-1vXRJ*Py|=1hg=9*4bbMHK** z$&WG(g4Uy?`eE@_b{n%6dw3ow5qQD40vsJZrUG}uN@u4>+UR@q(jV+auelj?W9ck! zB_BKvgc3WgT3n${O%y!v5@EW(zt`5bf%5(H>P*XT^ftEwDGsZ+JAG zgo_lB6oR6i9hdNa2J|g0PoB_&nVWgGmVo9JL4VsIfUyG!rIUKv&k<3S$D3uvnii!z zy6f!RCMxOVZR!&EZ zc;Hn2!Hot%QOCDkM&Q_u{!uu#{AH9t`Xi1Zc@mPo%vkl7n%8r9Ju512aXe$%DhnRi z!1t&z>mbAt<>j0XI3OCZ@{C~VGIvSsppG`Jq=U34hXf)-f0h1TqCrue7gz$(eB zN06(D%v%x?C42($Y!i!EqP*wK|hl z5K9o$iGTGu&(faJr~45>Q-Ye$l0EjC)Hd4^qfym+4bxUFS&l^~Vwie-)TG4)+H4iv zy~P9_5)ip&et0`EL!8}9X5q-K1fVm8Gv94LD8_1P{6xI+7AgUQ1T#s?I=nyS1#r3s z6r)d{*NO1t&a(aDlg(`Eor*CP#Bh<$%@H`uy-x|xo9XfH4)tFNZE*>YFvtyp%(U#) z(A{(|ZwlKaXcv_y8ssIdvro5E8Yo%X&tIzdXP(f5i{cb;D2Cx2w0`qSH#4``;`VwE-WF$8`uKQ=wtNRzBnlQ_TfO^G6D;%#vDe_qiM!sAWO8@!8uF9r4fqt2c{W4zb zjxUHhqdXR#+01tZuO@s#E!{w&PVqwMtlDIs)80jx!~MLjQGd^`)aC@!kpIvc zc826!-duIyav|ukD8@XoOkuhV<|ouD-7z00vX&o5%2Z^k59X*<+aE2 z(f72eZZaG%FtA3s!%DO&?p~$LXc>Jq=Hwg1OMu-U@0rRE=}2n;PaVIrs@Qc|@cI$M z1nOMd2N`x;K~b`P*Ce4fQh?a)yQ$bPC>wn)87uzcQ${<`{14B2?(l$&uxJ}FP< zpIdEgtmD<_wS@x893SjRzM^hyKN}go;PmzH`rx?EBtcALliRMoo&oFS*-x}VEm`isx0ku2EtcXf8l-K>Ibktq-{)0j2ZTPH*)PftUB>XUZg2_rZWvin z<$r8@`^O@*26_fJYLTr#6nIUe&;6#H1&wU@$Z%zcr2Y<+k4dncY_z)@pr@KGzd!qT zU51&5{5#zC&Dd&rHjC9Iu7yIYurrd*7ZsEp{Dm?Hf4IZs-fv&Rg`KZU@ac^&OxN~tapjSREnEQVt1yc>7F@w*lFM!*o&kAY5H%c)2b>(UkB zgr@CH*u}CHNQ4h?f-VSC*vNEee#)B7-N@2^>gBo8w^=bg4DJ*feT`^jMS*kzm}!$m zw+*mpLIqesI0KBlBaowZ|22cc5AW-$#nLc>nR(SY1r-@j_s&H0#_FOI4H3)BEYb|Q zL_>=JNHfR;?y&IL0-ykAml*!Smc9-R3(~Tz@@mAGwYBLUa&Y|TlJN*SqY<;R`ZG5% zLdmsx??&JFcNmI#uI?Zq$^`!_NjW_dU`t!qB1DM^<+yKq-QuH(4&{$;q|QrHW>)Ue zX^%|RZaMsaf51{OCHPcNOYGrV_;FKNgu_FW>RZKXEUq)=P)wd+ek6!_Wm|;|+MiJuR@)+sNJG*yxC|sX@2Z~`O)00>d;+txY3;&vTuzrVI z!M2w*x_YN*7-uQEvW-wC)rZ{;2SC+-zF zAjc|DjaXj!y1vwBQf|&LwZNVXc`}4*su7L*+&(3?eT#FoC?vM>fi@zR4rDBOPH81? z!~RPxgO8#W8>!as(Kg|^G{`u$yQ zF5Kz*l(Q8Wk7?*3zHbHm&kuT!Cfo;m4}MXoP-dl5 zo$#b-6o(#b#}f=w8Cd5GQ?rI}HJ|0fRy->onTY+G{bf)f(Qxw2MGOZg9Phx^f$MjN zg<)BQiEZk7()}S4$5!Qad?cWr{Gvvkj1yE(#yEJDGjCidhgRl*&N9XkRwfNFkT42! z_HW4wS<~nL>MArAW_@!1t6a-W}-Sa*K=jWC+CGJ6Qn z5mB!LLQG9%nwwQ(#HNEBp3LkEwPxPN?En{fo&35?40pR_eka%Bd%}Rza<3o`M@l|* zacYWVxiXa)@449fu)sPO(tmP)R$R?jxJKir&lC=&Yj@le_Q)epO6~#uYFFt&N6mg* z(Eks;M@n5!=ja(ueDKEZ2@GT>@3^V`u0WeWO}R1`d)R()Nf=uw3!H4~2wM^`>YMC; zhrso^Y^KC@ypq3y0U;$ZB1`1FQ`gJIouw(hPBI>NHB3%SSgy`Sd<DuS%naw27xY zV)ZXld_s0yKBC}tX$>XeM(0orL71@o%Jf%K1E;ABkorHLN>dD~rl3cwIUCqb zYt+mcceCvWXRJn`iH8K+@RrKZ_pREv0y5h`v@yXU${Yho*_za|&!uQ;rkF-#f}!B2 zaax0!`so`w>heRuJ?tklP>JA@+9r88Tp;y8Krgod{|kDo8I#s^f?B?X<5a*q!EDNT-J@eU<@y2+F}RtO$7@nf`HC%nYTLEyx$v+sYoSdhWiv?>aYDA1cG znALwtNjK-uunxJ(RWF1Hi*>o(R}}Qv=zNY8q$)E*KG7W)U!-xkzeGQ;A^tNrbb^a< zS7{8h-=Zw1^ia9=BYsIHvN$ybs#{p2r93cr#-i4zmr?RV%f*5jIs+qWAQM|76dj## zaeU2kFKD$1ONQZq_w5kFL3>780Y~Z#`@6XzeQv1D zC2Nq6LVW0ru`n!RW;BNqx~-cNdgnT~nhVI~HGL!O_Q*7HaZXo3kd_WhR2>rkuM|L#Pk z$xMh!crP(i!qTdpxhn)HHKA(mqxHCo0yRc#N((gj34@0@R5>VD)U%u;;|>i>OW-tA z^3L-6<6j&LOU`jt2$@C2_Vxa#1>$+RUQe?GJZ*|{_C?d?8{^~SlFcf@4jm*+FHldaPa{3w(63<5!Z$5Mr-5-LW0Ad*t2->CS~>nl-Q2v~9`!Go z3t9Da*>4G`mWF0)Lk9QmMcG!=R?is*=L%B?fCrS-hW+eFc<`GHoFU=t%74+*AOBLn znr0cj@zrXzNKQ~cdMOFn);Y&`O1W*g-waki1wdm@7Bv~lW^FmZ2I+j3v{^S7>8ZHv zTLqpd?iVhzm`p(Cr4(BX=W6h`TfKTBc2+RFLjVe+72-pY2>Ce%Nze|3u^hP7YF30t zlRF&i(8*Ekc0=5-E=kzy(IUEI zsVH)+jgW$Y_2DYEOVlpmN(vbP%w5Jrk_EiI<=tBQ&@D%9-pPBE^!R$gJUhCW{=Z6471R zaRY<>CaC_o2&vtxbBVsmL zy@^ahwN{h7UL#7)7lL39o7^%@obopa!LQWKFj8h6N834Vcu9%+`wSJ9`0?E=zuN5bB6f zm`^^BOwf&;rA_3{{XnY*VqmaF4oltjRQHqZFp*Y&<9nhhnlS5mDRTbUERi`*UrKCT z9o~s)OI-C0=u=ld|3}x@*Df(+N!m=t)ic=xJZ%yImzobQ0FJWImAA00Gn*D~>Y59Z zQtnu>Il5CtsN-S%DGC3SQbbEaD$#z47!#C12ayA*x~*aK`NOU}Q1NHF61 zF5d%|&ili~IjI+`XJ>bk5j0DN6cIiK_|ZZI$lUG zB@sa`5w7fdEYFFw-SEJ1{?k6b{y?P=Q4Tk0w^0cCfiUspgB0jqV}K$t4olu& za%!^cih1b}MdetbpRSqD2H0Zwg`&vrdli5fPbASSY!F|x5fr#f@jFwi)1sFa&>bR` z%*ZucFTFw=`#3V7Wi1DWjb0L-mFPS2v`4&Np)qy~t0e}Ul2AuCb&U3?S(~uc{V2I< z_(%nAvFE#X{9MdpNNr;2*EeAwRFXuO#u6c&W-mmpt%klA_B0eGq9=Q2m~Bm0J6>kA z0Bfg5mr)6tJPd^6di~~)^n%tQDh(hK?$>zp!Tz^F7Hw_@%my4=in(z{)0M|Hui80Ew~t8i)?eKEpVX- zi$#5Db^QgGT1m1rhTM^2yL_uTPGOZ>CZ|`gVrpEdwJepPDJFz3DmVhJzXc>)OGRh< zIP}L>#6{%z(l%?p3N}z(z4e^D0l*GOY%VPy7AGZFzo|!U!d~Pkbr#@u?#PG$MAW^qay>g~iRXl`i;-g@bN`deg zIYNaJd4*bZ-H+-9Bpl{mA3Nn?b z-VP<};DM;JwknNEe#X5tG}g;K=OTs_w=dJTxm{adcn&FEww z-{%3pj4Q~d#Kjnnb`apCnV%;)vOyXQI@zZGQp6{0XXY?q|G#)0#PgzBKUD>5?Sb3W z)ZY(@JEQ4KpC;CIlz}a=it$de2ewE%1O7b>E%U~L5(aBT1gpVllV)xA#fp<07J8KU9W%jc(USG2~zr5z4@!!k}VU)=YZ&7kY;RQP;`?%7?)mE}FYw2cI99V=8`S zQ~Y=7Ooi*y3ZSEWbRTuH4rwHtHWN{<23wTM`~O9SO>^4!K5wrZFeVp6Ip^}X{dFQk z87C+k+My8(iBBNk(x}Z?E&Y2RoYC`mUd=qD^CC?sb#UDfUdrPn{=2=5LabPG z+1XdyEjJGZkVRp;6!~OqW6g}fbYM?CbtPAT58fB>ji>-5CG^+YrPDA~gnoR6P?w@k=Voh=PW`EvmxXTYD@3(*zv?ORU7M88S;8Hrv7*oiMO{ zBjrtu-D+DKdxS8X<-^$75n2&s+u|*&pe8iv|6KaeJSL88M4Fqg3RzOGC4dlBWyIV@ zNFBT$1(Y0_51|!DF44Q*^&}lI<3!BnPe3+zn;qfWf1=jF5+FZY>U3T;_|qbvLmgW- zoCpkT9E;7hdZ2|I;sD{eO`?1P06mtyY6OUU>logXvgZjSHf|b}H{!%Q7=GjDW(?@q zsZRvVR?XFuAyZR5+F7p%D1^P(HzY@M8)d}r0qLIZ?pn>u+GGL$-u#AQB|LsuSRXMP z6!YELxoeC3CAf%~0Xt$8zhrkdlN#Uo9g}8xEe6);t*!FGPyCt!?l$eR*+I-6xTmw} zphvS~H_RN@vkIW=7cqU^m-P#_qyJ9={hln(C$i{cOaeLw#O?e>W{Dj{;POhA3F^3r zl_alYJ_27|7)BX?(z&eTB11R&UdJuMCE($P6iT}Vh+-6*AY^i`+do0{-!AiMvn5Z9ZTU}W z`LRe|sM%+OtzE1>HYb4fYa<7Vy zAs}rM;`;WddFz=wZwuTZ0Zo^xU11PauB^Cy^;5T!^V^jwSB4>WM9^C+OD>#dac-fT z=TJ3AR8J(_!PDT&QX?RdD-Tm{*j!#ME6+kXpW)R5cj@e&`wf9TCBbslKB*lGqJV<^ zV75ClaLUX4_kO0l9d2Wof!{x)mSwmaTm(%F)e}LrH@f~Bc;U=`bxu7=R6A1?g4?nZ zWlag@Z~boG3D7s%=P<~cAeP510_x5?XZ6-AEj@F`1_1$o)Uk(D6h(F2SqMT6|L<&s z0b;E=5Ah&C>cJZgPqg?pugE}f@6xF=R6?=SKuvFxNjvnbO_r8Zwez$EHj7Ly^#iaEp>J~|-B(2@~f!-?bi>81^LdO@G_7Qd}HheKMcOdYvh7 zU=0~jqZ!Nuhi&qF$f;7Wjzt^|g|K1bgO-wwX!~k0*Cf71j<1Z~mTZ404`-FUO-=MOjCJP5RTG0h2jEaY?x>%a@jG%e;xvS=? z|I+7Q26UZq559S<7=A}pTd4!s40CY(nyjWQhbREMZs@-JECitO`CL5mrVh-9A-{&l zdS=;6x*S`n?{D4l7jkD%0(+}+ko;XbB&jCmYnWGJPB1it!04WDS3#M;Y+zcPb>=fR z@nkz4Nv1-{vzb$3rEO;px9zKt)2+7atx(1XzEdR|zm|l44zP&9b48Qa3bzX)&xfhxTrH z--j-`-L5_#?MH&NRv| zA6_X|9Y%TSL!;)SMX|+fW!&RV(6x>+isr^q*^4zP0i8`0g9YZUc@G$yQqOpZSj;oj z)qH~#Ff=DsB2n`L*N>GPQq^xAyi>`a-iIyNs0JG)2>`}9H)##0y-f0L6q$~;Fm2<0 zl3-gUmjJ*rs?~QClXx}Pys5J)`+kK|wRRJOYdy~zD6B*l$oLnd??UC0bU88H#P zJ}J2yUtVa7Pv12J27Ilbl(#>!5bM)qB8JJ}UZ!JtA?k7u)YVS$6Qw0f~(oi(EMJ6Q`xS2>1Wai%!jz~>B*>W12 zzvWaqlOgB~WsL^|C&npPc<0S7LUCQ^XJp17NGgtnC!qQdt$WFTgsOc~$$Kaj+~igl zKTN|Op~t7iO5_K+ta6R_A_br0uJpz7v602GFe7Vqa&1U>oOWlcIIs(rSk&;dCaAe# zP3Jze=G+c4(Q^plQlA8qji?07mJ2N3g3rN-k5W(DhdVLSc=m{`WqKS^UwQKR(Q#PO z%OMt+g6v}*?!P`wb^9?c63ez~&I;NM#09zY%xKx%ivCy5@PxLvKNTS6u zgi64OjfM*s90Gz_2*u$r6r=XIK?V)70+>WFBkCRLd)(2GF%xv-w%=*9=zjTGJ63v9 zJS`|--^B@Vvg-0v%wklf1*?Mq50BNEcWIO=hw#0qE^9j8(CjO4GnSQgtIlk&uIM0} zCl2LcKTKfIEt=EC#RDp-I2V|s^w1)T^KvE6i`q@0>&+phe&24J8iT47ZSDF({O=FE zgdv@joEs*s^X$TTbo9dRC1ar}^>Y9sliy9*I?5U%4N{a$HG%?WbcLNH`tBoF<(nJm z0XNPn)UO1{>`dc24s(9=Ooo5`!=jckgqXYh2GoMgu|7;G2bXfrFAKoz_!wcF-Oc2d zc2K`ITF$hI>T!Hg9H2cut

nCr!H-N4ip~Dv)5zi@H!4sBDG^HDLn9kF~wHoXyE9;$h{!gB)Vy(>Xpz|0IGlIAO5su#)YFSN7XBvWBSz}nqM}5D8 z27p(}1gEfFaVoFY#$0(%^y#Mdb7eo|elpVGRSUBRr$EjZ;w=DEBnt&mH3zFTzunTt z0rejLaJvH{#XsUMETT6!KgLb{QJOzMg`?5MgIAIAA4oI*P00K;kA1Y3 z)eD}etbX`u^1rW<$y>JxoH6pTsU@hW^<7q$Z0TOki}SytG5Ldc`)K_|Pn6vSYby4U zZsAoG%?|PhzzgU=URrj*m=6d$Y>pxNK{#HfTsmg-0am|pkGvs1Rcs-81te44N-G7B zPoM>SahtAV6AEgq1M=eI1%ZVR|C+9l5@+L7pq0ZD>k~pSv6)ewVG>1FwU4a-YUBZK ze{&r}DAP}P%JWvv`${K+VF~*7Ec-p(Q-&R0lHVqyPl^&7(Rl?s#;z@9tfV6PTa26g z0093#0KizflCGpSF~Bqm?qpmiN@o;}us$ja`3tlycgqytvryF(b9sSu4zcZb%bnxG_NFA; zqpfJ2JNZe*6(@Nv;Smg_5nO%j4cFs2Yx}4YX)c2t(lAwPUn?5{aQ#uk(d_oKg8>24 zHd?vt@$bt zrC53k?xC%{m6Eu=d9&hH7WVIGMrD-G{wJtSwKfv~iW6ON#w%;`{bBwi`M}t7lrPMz zWO1U7)B{tTNh$)tW;ynl*`*sF42h887Blu5unFR6Fq zJizbU8aM<;+2@R4d;Lo{shba(C*YJ7>dcK1flf13t!em7Goie9F5vYRBt7eIlcDrK z@+3E1a zbQ7XA21()jcRNdo8d1<;{=iTtASPw^y`cjQP7mVO$U0(BL(Q(nsSOZ&Loj*Ko%_jA zWhqVHZofUapkvFC7HtHvS}AZ``TLbFY=p>Lv%rKr;<_2v*gxBY3^Ta|fXTH7%t;MP zNnu@Fx@ucXF8w*;F&S(r6=C{{p_32|8t9?hdvw47Mj!DKEU>P~4$CP$fEvX4mJCbI z9$pxd_zXg7_Z)fB=?d~BcjKlEEXi17agPctb~YkOW+2uZQ*IH4&qj?|5rlld-Vg4}^WnTbuMyl^kb~J1(mk%{ zepd&VW?ddb-`7wxnnHK|x zqHZHo6gesg_c^Mn;&&;#Dc|0MITI$em&fU~`XK(I>i!la*VZY>XI;4*C0cv+gnX8W zk-oFlw<}5t zG38xOEz=uMUh}5Qz`~LQ{CBth4?EdpVOBDml3|pcl_lV&{R{d~C3uxls5>_v%~|ZP z#0%A^TsR&*OJ{sp7uW)y{s}^(OropDL{i-$jz)86x*4(GAT+vkb}8^xM{agumV~)Mph@M_~^0JUuMAkfy@73goxHy|Chb9 zV=E$)JP7a#RH1X#Zg_OCVFnW#e09qff%2dX>Wb>d$sAyL(%THY+=lS$8u|B#N1W4! zJ;u>lR2ldkzV+|4t{>5fC& zptQ#N2pn|{{`EGHOAi_-wj`6VBgp}?d`v2l`W9>lW2=HdyMB;~AP}~9w zQqA0cc|;D5IsH~KE?}WwU?zPFo~plC++c}AyKQ6ZJ7kOS9GgCCY9r1=H={!&*Zkg!Zz}knn4(?C(&(*>~5t6A7i~C<8M>`Qz5sYHWom%?e9x?);5q#)bnyKw)ee4*MhBJ z?*J>eJ7h~5R-N(=TER##<`HReb6pF-4!^4i{C!E*bov-aa&rBR!=MD4-2*EPE(+Bs zN|4tnPU0rIZ#Y0f;GK6w2!?9;ZzV@d)gtC3fGz++Va#wUaO1nDJfw2~@SE$CYy>6n zGvVN7k{bl&8F?r*{0pi=(E5~e7ogo3m^&8Chvoer{ON`1sX1Ie${C)M?-x&@w~Xlg z(fugctBhdUf=EbjI1u)z>5ZBAmOs@5)Igq)TebLKZoHmmi-Gd9_J!iXX^yDCwh~WS ze1xo9=&E?BItR+7rYvxlkokvkR=fE52c{bnmlE} zVt6?Nu{P8-dq&8OB&zE{T-A*y@&L{NG7~I=XelvNMPToS27pE&7+ZR+A%e0m$5Nb8 zI66B5#`)ls0oo_r)R4XZhtx%+)YHMCQ&?NuGO<$YgmUMprV5gdHvCi=lN=}cPkL7} zh*Zm6CxO1vxY@6 zj0-61um)gmoCZg zj=!@r-!I+4E>wy9ljo`3lQ@AB^4v57ezYGxMcZ!D%G&PaIwFD`K)3F(H~3f97PD#V-^;nqstQE!dF-<{hYsrAlcHvg5ST%+Vll?r`QlyEO`$b08e ziQzMwNMVGpdLK)LiZnZJ{H4ByuhO;8=*@hCI_v7cqx(;aW>XXWX=G$mDaK20_niy5 zSZXuW0Vd8vaAOF169aTISFb)>broxjyW34(p6t_v3z$S-iM}oawxc=V8o?>{Ldp+k zUzYug)2DQ9T)`uNTO5`SY^}>4cD0cB@x%yA%!nxc@_)|`hw+N>cR#Y_=PW^Oe1XoG z^qQ(itO8VNq+t*);v_4>qz#>8k#$_;BQ%SIfVinygea>BS3RpxI0h#NYNkg)#;I#9 zHuytfTTt*NwrM`I66m)-1%~od(ZtBMh0rJAqR@U)G+-vu)(oQq?liy_3NCJ;W#tPl zb~lC`g4Ru_SW~PprvrE&bVmfqs+X-U5UDIB?&KP;ySBfYh4Y;O2F#4fFQ`^& zmi4sCEAJe9Jf1GY0>ViCCP;05@BcPW=x?W@Ee~2amFjrMjTar{9&PB@@kjgw>WRfL z!gWj*)23*0Lk%iyWbN?iC7w{ZEcKyYfa?06h(ipAgnr}%yYh@qp1AG}@C`96FGphU zh@vdNn)V2|7D4cwRvhn*$u&?##8GImy@JJ`d@?v=eo&;FK?{X#YSf zIdL~yqFLGmwq%sUseW_26xb)jK46{Sxm*W^4k+=`LCw(QM~8@*4UvIs2P&=m(K^sd2n z>vJi``2^HzwM{v-WYaRCDQ2nYy$sI#Z;;b33z2#_mO!+j85P-&N~m9pAcx<{&MGP- zs9(BY$5yP_atI_>l8~`pK2e%Rq)t>mC>1F|ei(ar9HZR6A#kVm3{XRhT)8;BEg!tN zNjsve2clVS#r3Dlqxw^*dC;9{7Y!<8Iz>1}GF45_E{<*S-(&d}+)mIYs+E-T8I62A zjknBL#-T$7pFjO;-(Enn{DDvdLY2!0nO7>t&(tUeE&`Z$D1G&>oaUE-Yws<_&!fDvznMK7;-U?BO3@{O1@RJ6M*wI`N~?`mX~;1L zHX;a{7-(SS&uP5@mQ>S7Hek>d*(e0|B-7f~GV22Ecux5&nn?5eh~pu#m8k(#f%9zt zJGz-Zf*yfCqzZBe8~Fz0%Dw`l8UfmrSm;<=`sZE&Z`0sdKao94S0bPX0ZsM;^=RL( z>DF6#)kh$a^5J?5W4vtD9hu4%00M%F81Gvo&>oj3b)$M5322sxpQGvn<>PZ+*t$<} zF5dU2f;GP*CM}VvUS0KhaX|$^kBgRv^zi(*35VX9SOAl9(^3qG2=)VAKHSh?7ejI& zgeyVkw>zTIlXLrdS{b5okT&erZVhImzZ2ne+pyKO*(*^2^Gl--c|~`6-+)+l!D0Vn z3s0XIOfk1Pdv9t@>(c|?gO2$!uCLdju@0w&u+^a*NfFA>Z#$j*Cz#^LO06nvbk*&eWV46l;{55Y3lMLqs5}VtEC!{z02hV1+A?o067Z5%+!GwCg+f7n| z?Ei+*T-f|ftep8N&`rR(JKwQ*jjwapCQd0&KPko99fHet@|z4VKA(>Xr4(htAmMpO zUEq=UjvV}wXy~%2m z?Ci9Q-NTwrZ%vZO9;%gCWxEMkI1eo@A+^>_>%zUWcdyhKPuC8Oc?8?Yg`Ek{Fv2Ko zSfG4~9){W5^}rB-=Mm`0<5tj8FjV8(rgp$-kSXU)W}xRd6>}x@_0ZDFN$^YeinzfJ^Cu1O8@gFV@C975L9%9RHXigQpWnC}<=^8;=Am#JfBaqxBBI&3b9Et=yM8 zMvcSzc4J~WU`_e54WoCeNDLIWuz9IDZCIpgO@<7d|2*$W#4SwJgZ-W!9NAmXK*wXpDu5o zVw1mQqD>NBV@*>+*28NjCx__t)mmyfWsw-xQ>Ry4_(ffIdl>Fgcnh2hVmvAtrm|aCyJl249k0x?Aum%2+2gM&X>LB#a8- zE*7Nfdnr`9dB6~0Nwri_vH3GB6DY9@+u@WsmZ8h{nK@1+QwktjZl&QfY6#-LC)phBi_MY z0ma+##G%+u)K~xSROWX#N5&qM9w!NKTE7nnyq|r28E(E+bMN z2R5xn25Gt8wyLqr7McN-C(B(;pCpRpjgqa_dmq5Tc<1U4#M&S2hA6n3>%T zV4Up)znd_7#6k^jN2e@85Pn94KcPf3sypKUndW-j!!AfnoaTG_eet@h7k!Dz#d8DT zuGp=Z{kU)_=c8{24VpWg;UUdSzJeRfETO2ym+>Oz{LW9e4}HSksv?kZvC;yHF>hmJ z!-w>$qTVQ`8wzANtk;P3pC}PQizgSLYJY8%Y@xD!)sPSi#3bmR_&ID;TM|%Ii^Yu< zUb%6p2Vi1scBGMmP9o8Kq<~tI+_!OXR7dU!mK;DMv-@n!F50t9(q(nf2dg=L5t+{KV zRz*)X@U_vBQ~V*?o(^^)4f3<8yuETQG={d}f$zE15z@39)~m(R^3=9^&(m!MiAhle z(bfk&6_!oQOg&XG*EfrXYr774uYi2~FHU*0K8Nz61>vPDpa*{n*7U7&Cfy{j0S5t697rBTo=lJK(6R zl$l)Ko|@4oq<)53k4s#e$@svYYVHt?;srvNropGE@-jq_64lEqYmgqP(Py`{89|e0 z8eKbwE&XPkg*m#gy6LFd(_yqDA=WYbZb?C$ZX<|yUVjgnFswh@CrXp~1*l=Y-~@-M z!UGdUd6^OLLwwI`1#``@!8KdR$F|=t!}-;fFYKiYf*C9_8<= zZ%BV+lrfplhOYt$;3`v0A&Z91!)QB&2bX9}Ne^XFF92*g{)(+x4N)Um=cO!?nbr{g zSeG#e-?;|h-@I`g1=mvrNycoJ~+jC=yR4( z01%>+`!U1Tzg0x*cz5-;hOtyzkH3Vkp`ytE9+s(dott^UqVO)?r`g3)BZLm8vEorfRpd<^(_2xlGBWSp5jO+u99fR(p!s zf5D1WF6>p1o8xBu|3KR`_6eMl^zXQ7*l_C8+qB*A71ZQZU}1|_g7J6{3QVHL=WI4x zCBxWh&$kVT%r$t!oQApKw_At*BzU&2X#R#L%@oZ;5aFa-jO}sLAx|l!6xxRL$MHnh z{utcx;fc-HenZ_j?h$Zv#A+IBb({0354e$Je+6gApPK6IvX8-vDq3K_LYVg$Fvr%m zFa}00DYBj3JOK-eyI-hiAA3u4B5@geM=xgx0Vx4M2u7V}T6~g!Gg?*@%^p#4ocEJ3 zS+WH1d@O=*ZQJhCXkoFUROW=Z7N93WoOqhG_W)T~1$~3^(Ca^#e~@vpf?}B`_$M;^ zH_edLbAKiU4fxIvW7Q5&AC^$PQC=C`Z=4V1H5jnM)8;Lw5yGy z*NJgyDnbdiRY|0XbGBnuv|(liqV}o@B8-@SI8I)N3J9Ktkz%J2t(HxD#?`RVA*=FT znkfoL2Mga+Sfg~4h2?@QD{o5#lw|NB1X!Mb}bXY5N*i8G#LvnfS9dV zC~x@q?_7lYfDV1f}-R+LdNzGNcAN&Od~_tozbOKbCj!!j!=M z1QcKJFJ2>0U!vSXk(Fl6Zn0XCQ1NAA4R1}(==}95oi##pP*^~~kuGNBC8;w-5z&gN z=F{xS^ZBUy^3IR{y6WWlMBPK}Tfi4FSd#v_1Fd2Z-~6|`@i=)G7rxO(Z=IiBcODF# zk+P%ZWo&n!6&^u}dhFE;{RxmeBr4&tTM@r#Z1ofeP4H2@OvEKALzM9!L91y@FM2z& z*9br}?K%s+#bZ6*5BC%2mw7v1C$HWyPSjIsB68X5UjliBE)1cPsJGfmPE^Z-a{Z(c z6Le|G_0$qfZvCOn{Sq9rne;Hb2!Cnt*UgH_s4V#%bpZM5^o>Xqn)^ojWL7Ial}HRxlK!o@Vy`ks6ee84tJN zUXKgtW(pIg>?lIR?OB2!M!+Pi%~+PahSb}XY3BdM4EbzCLhj^8S)Hn`A#K2+@2tWR zH_KkueUVtxb4zLDRdYYPA}?@MJX06;ZkVeK4k>@L*?o|e0Y?Q+Q68%sg^ue0QLN4t)>dE8t(5K0=%o{y_rVN)?w77eEBgpJZ z!S7nhoWE^%EWbW-vLQpTJY$V6M-Y-d{6IkyjGKVz+q)11M`a;VM;b@`fAjCme2i|fq zVQ2xCd2J&$CpSC8?DFzCB{G41WSL&3unmP+!5#>NmOg zv;b?}@q&_@9DRA@OyvTb_NTb6%P_nMQ~h*!O1brfvD63NR#`1lx-Mvgs(buXMmU+n zwVZ!Lk}^caiC~LCMLx&~w5yR~C}R7MI+`o#4t=D#4x%4!cxDASqAJE zR_;4&LDG}m+kMQLcPMDpwlZ%HXfSi8T9L}*cz)!^HFHG^fqVa2Q>S@ zbKi7?x&^?$zAjQptZC>e>L;`%vv$XAp2%PS!jevrnA$-r0hwR;nT_@yV-dL@Uzx|M z_lk83!eT`TXC<-I1v29XM{xseVA8M))Xo5+rF_HGrK72@_Z8SQacdT%yZoIHXNbrX zo+1}xZ~BW5kRm7tkUswj))Us(%hyiaOKMbsk)(6Nz7$KUjaKT+gZtvr^ifoRpKi1$ z9Lx(l<`crETfVT19RnkL3wMSsRvx=lE#*>#ya5q|p{VDXY(b3~sXT&QM;@o##cj8! z{Bj|cV(2tEghYa>yt#Ryy5PsR3SKqLf6v=)>0uy;u5wL1ySq|KLu$1I_(o$Pq9vGk z%Qv|f*E*N@20Z&ie*z%|(_m5^LPbLk0__6{?wdWD*Iu&Zop~r=KMcL`9VCN<& zf+BJUUZ4{Q=r@G^8x~;(tKVyMDaxS1CVE?&`zB;yx#Bwspte8=I3sR3sQ1Mv%#4)( z(Gq|xSPP?3U_7o5`dS|5#IyJTOAzA=H(u8X|Ra)vJ_V3P{VNi*>#w&6r7$zrVv8slF*YghS z+lv=VVO+b&D6f3#lMWZ!9oQ3nb+Bj_s4+v;B}gX5)*4-yx`dYWutFI%rx`JV2B7-A zv3Cf#X?S6RLB^}BH%jdpY0&R6qDlBwCAmSD#Gii#^ z-|azGL9|CE3mkTp362IL81JlZ{29P1cVK%E)(3g2xKn``*&hA5{vpAHkm{S-qqlv` zH}ovt;;`mZspEiK)g;#IJJJ~I&*7iD4G4HfP@r*>GFv7UGEtYO8~Nn_O!f_>XN#>46TJFq4$z% zQvFJcnMu$IOOgl=3_ zxt_BWz#v`9&phGW^+^G(uxoZQ;|BFe+daK1ICNG#VCB^rrZ+U#|05s<^Pl;|OOcQW zPRP@2##$lteH4z)SjWB?Zt%7>q(2Yb%O@@`MRT9;{ibea8{IuAT_ZqlsKnh< z?aZ!!YMu0>N-mOZ9%Wq$*?X8xlPSmx9p|1EBn-RL?@OrIH%4W!6ad->+!oUOhPqjX z`S2j-(4+FisnU4O#teQScbPUEJtK60sM2gGBO6I?RN8}X7!O%OOrEC%E?gzQ8+|%b zAkD-QHZXtLX}Ts5C#<{D z?ha&P>NZ|KYM>%b(WR{OvFVL7ZYsJ05-<50BJDfs>0F*BMFvt>#<)mRr8bKBwywuw z)cf0UEwK;FcT}_1VYDcD$n1~?i>Ur~uad~#Dl73$Bnu3Qk}N`X!U`8p6bl)Gxre~r z)@T_i?FPkpCqUgR*!!eIStsOJE8QhW+?Ybs1_@A6LG|!^E_0L55`o*SOU>y97(q(# zu6J`Y_sK4 zUe%YA*-zfArZs-;0$Isx?hPBeH_!b_TA}Z_4ozLTo3v16%eq_nzcvHEO7`!{@9dWa z?=*k|J~^YA`L&lw_`_0mB(%xJ086>x_*7A!JghFiH|2G_y!WINA>8JPyDoeZX%Cv+PFsobfaeXzU}8I?KU5;c$lN~UY;d#Jl)i)3!%Q^`omgxz zPEdmKm}45v7oh+9zcmz$cX_&47PBJ~j7}#rM0?=y`E|IDr&3CIU&i)vFWwmJNSwj7 z?YnSTsFF2sE-x*!0EqdCdJD+0$@SmyUzb(BU#Rpme1ti5P1%6^ zS(ug%b0Lvfo6W&ZzR$=E3E3G;OZ7%@$aDF~IwrhIuiRtKMqjA7x~@7)G2Pj?$93Me z^w}#*PBp~wgYvBh>;k!nJ&uC{ve`(fQ|DOy_UK~cj|lwhFdn_EQh<)-h`~*t^<)`N ziAYh`HEg;_v0Dc>jGAr?(o+C{DR78Q5f!^7`wx?&4NQ1t_B%@;jZpJOMd1jSP#BtR zLpZENQ+R7M)`kXkr8n|6*5f}Ze=_3v*wTTVt5mFroS z-Ga141O3kx*;$Bfb7qq(Q^R_;;bF6>!L|`vLi53m!`ckhDFO2AqiLVFsPJPz#Uy-wD(iLsIN(hngl8;Jp>g5wtyZabO8Ih~riQ1Fk z4d9OBvMF5JN_EB=4O^qGXqaKeV9v2VH8!SsZ(H_*#?Q%`46J)k?RQ5A8IGpdbtsA! zex)QkT@jw%%P4S&bV!rGAij6S%Ts5@`}PzSyE3H6+a?f?MIWIkl48rmUIRKj?YSg= zi`=MtndS9+k0~$Bw)8umy9q`0emKI23C2eOD}_<)@$<;sTXXEZDJ zU(3B3CjJNp)wS^kS_CJI%a%mX@&xjY<8V__agA6=p}w5+kJQpIY)TeK6|wwJ**e); zkdj{y_umw~2QmXc<6wz{U_AR5KJSZ5_@BZP`LeymUl+#;kut|Jgn?YsI-VHeA-@k4 z7|ICWd98P1l5{yFngWCg?}5+tP2rw64ivNIbNmr%UJK@EG?2f){LP| z3~bqD*m;R6acA~T(>Mbj75~F4S#$oNtfmZDu8XHl+}?sXdjjUA@%imCmU|bx!R_KV zTSsXz)WVjG#jmNObs~!f!CLayP_^{DQckgVx48bQQ`!gg8v82n8>y3Y){m+z&E#Lj zEZp>NQWOTBLwB6#_#%S3X4#>&xw#mkjx+3(nQ01F+(%|{v!a9Oq? z&Fd*GXO*_x?G8`IhSt=cK)8mGx+!%InsEIleG)^s-^>)Kz4dU++UaK8JV+UaD`tR$ zGeiuJVW%yj>6cU`_zY*$bqRj1DTLgCvGad+-0MJnu@*&IP1HKB6{q#~Z~ zifVfcYF}8i23ws5=b)mQqOq;Htb2FF1da?5@~9FXfKji<&p&h`rU{OdZk$ ze~b||f>6T6l&f3Xq*lz{v61Z5^6yDZ6xG}81q?I^+^YVe$~=>WsZ(*?z3>Y$x0g`m zH}GKU7n~KD`bFBkUKYiB6B6hD*Fi3zr5?$SJ}FKs57(>3_dm6{vUsl;Jf1b$S%c4U z^|lUb^%Ds=eyAs${E@g_ohuOm*@6{Kva2u(;RqJ1rE6O}l*PrYV7RR~q|t9Jc9(14H-7J~gE(3>cm4`ubHf&)8R1FSjb z>`$VzWI=VmJ<}Rq>bZY#h(<2R!|^V^M)gp5_))!q%9VK%IA+PaA`z=}QynVE_?2cZ zgl{VIrH_ZQnwXiDplfya9S+`wC8CDXhD)iqQ0l5fIM3iGRwby(BvMA>yBQw_+C`aC zqdLj3kFUK>;gq_ms1NF2GIu&GX7AyS(^@>9G*JCvc3qqMne=Qxh`ek*K{f ztVvy$D`d#8hyn;+uKbj(5_p3}P}4*?6PB*WpAIrY9NZb2UzfqEqn1q{@{<(r3TnG> z%A~1lD%1eZV-r(!J5ovQ7O`PtZQgVF=?Hb#T7fyI;q-7s1UF&g^RCHBDOkV6Fp?{M zK)Whj{z}Wag~S}Knnf~%%_CmXxs@ghh+T6S03@Zn=c_JLm%Pu@rzYD`ZV-<9jbTcBekuHDp=_z%!xADhW`2p_dIq9@adr)XlehN`eKbmPjKC z6CXgdBU{ws#7?VmSXfg#oH?-w(k*x*NH~4Oi_G)fT-W&kS<=M_?KI_FA|>xI#DaMU zuAI&Vg$pP{%muzsBg!3Z>cWuPEL zy6lLvs1dHB>x3Y>E*Fx-vEbzoE(VBgw?Q3S?8ImQtS2M_V|d*}MR2*fp>XcBs{Q;U zs2E++@$&TxZxoOL_OdX1votl)8e{^zlI?)r`LKa~Eamuaj@G#`%7qouaF{WzH3u`* zf!F(?H4Ll9OQE@9*gT5pDjJrpRQubY>sPyJ zI|N?WGI&_9#w(bRgUkybF<->i9{-BCX^iT{5+E+Bmf~J={fc7wu9LfWG~KY;K`U~A z#wzST9^*{ukF>NGhy=f-7iz~Xa^_Dz&aK3`` z?X5M3$IpDbks(aiv|fN5zly)o^xCU&TQ#_Ck6pq%|J2O`)`^DR;@(G1Q!+J!Z1iA%--k9RiWvWXxY0?Sr zzJA-N-4Kda{F)P7t|CbenumT&QzG{@e$XzSitv3&bOHv3)Bl4Lx7&$qDR zm9(DKrjOqof5o43H7~gRFV3g(1n zPb)QZJ^2$NLk$zS`LWIa7}#B`9@f5}DBA3HqgX`ZuMY13>q7k%6Tp1_2z>y#C z6>=O=mjorz7cl=QiZg(pp=q953aqjn9+8!Tjaa1+RBJyu{jsDfLGiLeb~d?s5CH|e z@LMX!=R?I98t5ju{8#K$VG#{x%trwFp#-q)u`}fa+^t?PzbilCSK-J;lO?w0WcAd< zhL;RMTE5TGRwM`)ML}5-p)JBSr|KUN2!NV7}X%(>=O z-;CrmXPWS~rGe~CVjE80%|5#fue5G;3JXhFQB_z}7IXVH5N{P)9aYJEnqqpK?~R6& z6vPci;mSG$!gzYWBB)K?M6At~i#ZEX2~EbP9iArK?9r-0QCGz0rfs1iH=R@1g{+ z#WMNQa~CvfEMVXVadHz|Gfvfx9DfHdL=fJQ0yB(76qi7Z+X>ZL&jx;u{;>5v+hT4C zcN1CM*noJ%H;cGAa&Aq=fdsCyP$Y*BU4dIMiHkr`u}r8u5ync9gcsJ&jfz+$9&h9y zj%Usp1Fa_YBXy9X>CM&{)fzkeG<#G=Q`#6iCg!fEq@^M6nT6(zS8W?{XI=z9#o-Fp z-#P7&HhB|xe=|U_@=kgY42tZuDGa2?D4L+8sojh$yK>#7+mUz&o8UU5rR7>>>^#ZW zNXFb#h-BQi`^p3(t?;d#ykSi-X79V}Z9=GVKqgf^JhzTIbEe+kp~o_=A5D3cu_CD- zY2WbY$%dnYK>(A+7;6h4*)dG*E&iB7q4!V}h**aJY7281 z=FaMOd|7(8p6qX;#b7umKpKe~aF zmm!-0%z5Pcs9E-To|RFJ@F)qh8EyMhJ@oG%TCN3oQ55geouRj3BxKyJW69d(Hs*Fp zMUWnYajlQTz*R6(GZ>P8;1+`m7#@GP>dI&a$|diw+XM0GwK0>^k+I&7yhe;*2$euK zwql#5=IKqf&?-8l9uRjOt8v%AWO7s&+kCL{`T5L%qHlbx+a~CdA_x$dQ@H`Z!F0!AOBbatYFhABH{tEX_|Y})-moK+YsWsbo-#NF^|J|E#pJMFgJ5fN zwN(YoRnoJ5dS1x+;7{)yO!Y#!UFY(H179dZ62H1GQFF~nT$CT_gO_gW!>F`~B_Ei| zkp9rDHGJX;ArL09$M=+k0d4yB=E`R~T9(5iv;tPx5L-&Wd)s>GeS|KH`$M-`^Ksda zN1R9|jnS%N7iu$abj}13^6!b^(Y9^ZN}96V)Umyy3bzAHvJ;xKH2YwFq8=NAVH7N* z;7`CzmdEQt&#K2BiU+aoL4!Kd>v9}~$?}pw0qsa@ZSrCS4^8$}5orEpjyk97#o5;g z0MYN`ylTw_;S(mq`EUts0f)=<@n`nYh-$8A`kN&_Z+;U=QiE!YO2siZR9-r+2p_Qk zfWFkWVn)MCX%$j=C;-J4@mKO;F6}gv9Eo2Zjia7XUh9OgT`)thQ<9$A*f{#H7>tr# z)$GJOQz;FiMb$2zOb*wGyCF)oDB@~8)eA7!Mo+isYlXFeYc;3J|0^9f@i$uR;`T*m zkA+MLr!Uf^lfcutnI67Y{zb0J_?G41HA`@R$^fFqH?o(((3`}Hd|H0*hJb)0U1wQK zC0>ao&&;Jc!JP^yt(J^J^LU**Ztw#ogEg|-R!-+C8BC-f#LW2OToB?jaEgh_KWx1X z+{elZLN(fsT>~?QXE?a})4vHfg#1NW%r2amHYkLTV~1sdTN*As)nkhQI`t5r9ZcZm z$6eDGxwB)bogZag)eY72^zDpi00kuRWYe^EsqNF26^SYuqSi zHI65Ob%-=RqO;rw#ylZRDU}N1%{Zclak1XQjo&DHC-McF?iNd~P%OfOYpt(j(w>aPu}N0bi|{s4QkZzDOSzyVhih2>an@E3m!izKGwo)%eHk8 zDACx5cTUiGTe{cpT1C(j?xwl2C1)ImI598j<*x_MTi_fnA$U?eujK2T84dsnFK{ri5KPVaV9*4!HSXn~3^Dohjd_g|tlCfiCCH_xB@@3&Jc+x9eyDvo_< zj)sjKf3&6^m#xP$6JQlCHFHaSv`mN=K~m)F_i`o~*I|$($=vfw){q=+3#FhPN#EP)9@ zr^teG=p}hFD;2czR?JOjpHJ0EF*MU@ab&uh>`&Y=R*w+`=dmHAgw0DBjT)nFFL6Mt zG~<}&0e3EpG#9V0qZCHRZQBa@YlrUZp;+a+0vaiZmUUv0&aa`D@b6VMUJsN7Og9|X zX_dAJ0l$t*H~{}Y0KiZ@ubb5*dU+3zQq5p#iHWwnf|bij%~eD@#>SZRfP;Uq+xxS; zdS&{LLi;B180J`hqM)HM7!Qu@r%4cyG2H4_1gecs&R%h?X2nx?tG%;vxE9#x*9wh? z>lXf0xM6x>-Ps%=_hckcFXW@uV|~##s!xUDDYE$=8;zgSAj5wq9&#Ggm*y>U!-F}O za{NBp_qr*SK3}UV3d_|)com_ydocM)9aq86AQ(_DaCy)&sdhe*$#cJo3VbbERw$b) z+=_cH$Yv%Nz1*{vr3Zu*cPLeIEm81;7aqd8L$h`8y)lVu#ku2Ykut())|I&W4tQ-> zc1s@-T2f4C7N#??AoqD&$fPzKTZ2oLURpx=|4`Gkj8$~qcRG*`1=C5hu|fG{X#sj4 z&p+tZVjC#6lhPK;=QQ0#X(-})^hnRz)Ey*!c_4VDNr2v;@3OW&+>*G-3l@3(!~3rv z9;=V&a;9)g#yQSRRnXm0xLOV(lN%|`4$4rp;2?2h*CipyQsF?oF|MYx-k&uQoRD|X zlMi|)V{^JketFuF2fzNoO6DLByyN5-lRDcisQXfT3>^rib8yo5dXM4=xb@xM0 zM@OAe?5(7I8nv1TvcR{j#G!=#WlO>Uz1zaab(;kyv=U@3UOmDp@QEwOqs%y;xD*6Q zxvQUbl9-*kKA;5x9fW9+mByq7XWtn6jrHtHEQ!M&4oFp@V$!ETnRhECjVI|J$*mK( zsQi$nh{l}8u)vB{Z?{2H@X<`9G+Xq#GMEcrCKtxi_ z%-e^7(^AbTnBpenLO<_87@=`LHOxYsI4(W>a{LEB_#+wH+a3Y0DvBxps@ajgF~9qautf96-y%t#c ze45eG$$vxeD`a;oKj+wqbQgwg3XYE<-o>z#sDH>&yoFyoYbCVl#Xt5^Zsl{iHP)sO z75@47gfg#+@8%Q+MgHh|S`As!n3jrwBLM5%DYYg)rFC5z4QOM2|W6`gkG_5n88;rI8SD1Rg`ut*h) z8Ae*^QDdT`$c7`#=vf2LcQulb+EDXYBHqAetUB|1FX5#t;qd)tI~*ZI7|2j`+JSv< zXe{{$D1@TcQ#}cv6APq>^RRCalKg=alAY-~7diJlB=z1i$offAimEOYP^sVd9Iz9g zCO7{`50RMRiRt$MIS~f6ZqM@?ErW75c~*OS9WvK2yS@23`Py8j4= z(Nz*9F9mKaRkOL2p;S6+%}fJS7Fr#b&uH*RFLD*c%Q(pV#U$Q z?vZv?x(DNYSO0vMu({;riCaYR?#Rgjglv{RB4zUV_NWp>B#c%UkJ$xVA;G7K3g=EU znd$K&*{kR}nT49NMX7Pcc4N5+7#QapCacJk@HKQ^f>3*i8KCW7d`s{eDWXq)YK^+S zduzFhhKr78k-UCkqy5{1c{oVJOpq;_fY*Srt5D~5V>5ApiO_L6Y?L5^mWJN%0y>EN z;I?Hy8wrYaNW!A%O$T$0R%Qfy3TImK(2}4OkYi6UGT(6=-p378zq!iIsoX z(JV5Skq=NzN3L%618^xK&5O!`P0+;;7^5x5E9stEr~ zW2v98?IXbT$rwmozz!jZ8i(p8Mn!e?zGi_=e^`8+!J@K6#NFLn#QwQHauMhxzFU4#-q=dr6VzL28wjM7!q(otu|h$ zZfG<0+0HknI*%Xq-p=Y{JuR#eS@}|rrWV<(xz4RkJe+DpF*~|TaH*z>nr~Qk36-7s z+!XDXt_ZDIM=TjiXwZm~%B>Lm?}0{)>-VIOZ4jn|A1C|Qy}||*HbS1QsmdE9m{`HO z9bnnld$L0!OR|D|reT%`V5Z2^Y&L|x_a_Yjf97Lu5Vqide~Hz~tepPfsiT$uY>8%J zF?C(rs(sVV;Jk~7f%lsP9F5f?{V#YR={Y~9UwC>4pg?&9a_cY_FBAD~ME z3we&-7e6<_1rS6n&TIl41>2a8Z3^i=gfR z3p3gCz#u+#M@KM>ck%``~+|g#L9?s-ZSjnE< z2UPFY_E;K8a6yW%(R;Tmam<9L_~SUzp=aOnXNgWNUTUq`q^KQ`o+0RbYTv>95&*V3 z#Apvw-!Aw`$uenSQ*>_y^P;|s&Vtc>)eg1xpSHgDbWSKpElt3{(63{X^~0OSnN3{u z8z8ggp^+?pl+aC%I}J3dG4+6P4&i5JW+Xr`Z|^b|jJ>a$L>C@G!w-D<3iTcsrOmeI zgUWviDBz^F&SSmc7;nwL?L?Ow;@UPGsvga0rg2%%W1frY>-$vpLke+rBZg#+3J_n_dUh5bK6T^;SyNa^!vJBS<#`0F1J z=(s%p^$>4i;(m|&X2h-6dnW)V>GIcBJbC@XOluy!@YjWNh{RtzS~&^@1)jI@I(aYA zzSd8njG}$Il7rJebpiLM-zvc}|7*sGYiAR9vv9}%8ja5iQ`2UoF2A~Oj2pX8M}~jm zkWoT(A+&cBXb_6?z9hH;+vf$XEb=Shlk2Zh&)SP+@wLKCRPuw>Xs5qEHRn_?sgp=+ zmr)645pUK8xW{^Pbx#oq3wf56$1FLv(XL!KnU*I%8mD5j1lGc*sm4~c*+4KCw)|sw zGymH%HRI)o1Z_zF?xSy{I&P(sn3l)TQMlHdr^{L%|F9`C4-~9k4C2 zB5dl7tTO)ZFmP!Rex$K=pwGp{^_A<{5cC$3R@7(Nl~l=UN6_(z+W+UFToLm=c7ADD z$--ZD0g2wv&*g1)TKY83qkmDsUcVH7oX+ZQe!al>U$9I<5`*#hl*}>|uTIWyk1Rd4 z&e^9!5(B%oK^`uwwROE)oZ&}So=g3m9Kp0#g ztZLs?tYYS!$d$Jjm4)~`o_M4983lY#hEF%J23`{k3;7@*W!!PbR+=H8y_L63>&nWp zZo@l|{tmN;$pnG>q@TiMwgnwB^SbU)uYGzyL>V=Y)EWn{c`n2Galmu# zjU$u;Koe`5&0G@#+($VJSBDu-o<+z_P2DVHPmyR02F@c+b8WzuKSmES3<}Ioms_&m z52I=Hz`p0Y$d}`M4aU&S)%&0OO@QzzeY^qlo#C6)iHr+@=l{-b+RYy92>xnvm4plX zLW(R2OPS#KiesY|iqJO_87Mwdx#Ku7A!a1@12Wd0L?Qy}pX;7*^y1#lk9yq?A3tVkCWB-}8ig|lq3Rb)E z0iA8CF9w?OEVmjtssq-RQ)(ZG(d)gA&=+lY>w1$pu!y5!#Rsvp=d_2cu^VV>qz}is z0UeRRP0S4SD=BlOnCJ97e!@Dl#M={ejZOsaJyIhk#OSP~Vky3o??$=Tg!Z}H{gP); zqZi4s#Y8aO-a&?&UtbY*(r)#Ji!xAmaqF~KM-DAs*Y=0iF`$R@KkXuI=@|VYhKMfw zRxwu{jR*oQ#=I?Q*Dqs(MEjlnJGEq9OC3lsFJ4{o)?Eqm>p6GO%8BvpHzP9#H$yZX&Ag6Fps4UdM5xdl!0CT#^S=IgJrSF8}u>p%U z5nG$CqiXwbsbtdVWM}ouB#UF{A>!SfV|bw(VEE&%6`geT@^5aXVgMI9Vnp7X;{J+` zJMRuZtB=QD|H@D`WxlZS;X(Sz#%j&=wy70%6wcTWf~*9jeL+cFLDPA64BKN`SB#yaCj>j2V_V$0JI$3Jgd z-R2NKB&Hm{^4-sq+#gGqyx$-BWTydi?X}0LW7!vuqhco2G_iaG0_$SKdWp{yKRMbJ zM*wK*XR^~{LX-A+oqKjl@cj|gduO96nl?Dq_8=}&n(42$Lq1#q4JT`Ua@lFn>!wsI zB-DYplg=26QRC(>8Us9cY){jC zVFWB$N8N!a3L6=5RoCFN=NxJabv(OiuU6M*(!-+6+Z6qvdkQuqWz3pd#amVFG@uUm zcc?tTBFaXi4IDkY(I3a{+x*g+c+Q@Q!70XbTk-Ig!mP**W|KOl693oRYWF9zIfMhiUH@{x0akpd)<41b~mWM+S<-}?4pQ^@5>*;NAeig=7s^gt$?VSrCEQC$fC;s zDn%-fz*101!t;h`SyKqB+^onL8H13nxE0cE1lW7n?Sg;cjX2t?fx}})Yx$F<;iIywUkd+$3E|E!SDH`DhG&< zMjvQsu^Gtr;yF?Urkr%0U8~<>v)~$QBpsBM2VAq)%mI;rK#_cbG!IRTTn9?b@q8NU0e6uUl>hT7lOUUW z)z0(M)k=srR!>$FEo2q6OJNh{emoXmCNvKX^yPjouTATHRw4Wa0B6wfiP9SjfHiXhV> zTq~=JbUNbHuf@5POk>**^k#+O#+RuCUk`j=R#lAn#>r^4k>sxYa^1!d59^ZoNQ z?0FWN@GwrN#YKP-*0VMoC(K38&jfX0o)}nN%@bE-nr{$aZY0;?Q>?9NsxlT?{GL7P zLCRfn@topHQ<=$6`6jd!`L8*RY+YeDX-JUGbd6bgD*L*un;gehdFbbqTjzK%3id+~ zxPug;a=OBnW}j;TH)&#i0&uM!4s?;56H>QtwluBT;NW*+cBt|i;rTpEIM0X=t^bP$ z%>UHE{btD1RyyW-r#5GRxyl;l{wqx%Kijedn1DQ+hU$Ev&w$8~BhudK;gI_F zrk`mtV-&7d_{ubef{6Ed#g4^O-CZ{OZ{%#5g~iRbqhS%(5bO|s3!%g1U=wE1ayfnG zP~^tY@ps^!3D#eG0fa~dA7jB00ovsu6StdWHRzCFS1E$udf59;(--eIM+=}lqgwtr zAU1viwqKKQotFb!FixH9j)G+Q9K3STK|FeW;YW@mPZmS~IfFj8qrg+)4~>F~)3*7a zeoR770Wv}src%^v2gl98t4xZO?ukQW-k}EQ)Sy>lg66O6rOlL(8M)kV?lh}iLOYVO znH-L=&&L~~Z(r%%T!9C2NQtO~dt5qS0Zez`E(@KHR2}Rb z>;2W)u${enZ%BLj>?1kcC&wa`Mm%9aONCkYK;wjE(Ns|$hTI3>7Uq~5a?}c-*#IUi z-iP8L+okA-_76h?l#N_WaM)L@Mdsy`1+Y1cL*PU{9_LdfwTujVw#3NRXUrHK&>-Bj zSZs=o?7ZFSm=`Bow@q$zlP*J@A8xlcxYtm#xm@c$N~mu=17z$cTT-e!pPTHI_^P}q zU>-%(-Y8A#!MhpX|D+}f(po}>e=OK~-CO-|%p_umM~swZ^;LCB5}r=Mh##a~X1;mh z^zT(L1E8yNCg!hbqu`Fl(2ynKFIVEdNXq2<7I8B?apmGUa>UyiQ5J7&;eOol#za*M z=rf;+1?zJ4vx>0lJ9o(%#=w;?WRYI} zPfy(M;^3m3#V2{*Lv8Nstw{AfHZN>*LvKLYBgyf>?#@T33S(U&jC2UOQ^xN8f=K|H z`zywHqJ8f2&cc@LqC_CVjnC3=fw|T038`+`_n(iFSz+qs!w{wdjI$@ni?X(=>m8)m zTZH^NyHc0B;H98udFsSoGSKa8U2g$jT%p-HkqwW%=Q#7Q?e2dH+ALcab``Wq;RT&L zx-vZ>r*zMiBoRBB)Vaymo1-mME&xsty~M+dPK9hZO`I5Y--)vh*qC zz{7dFLzNcgM(mjVL0VD-(4tlq4l+J%&w=7$j$P^BF-ABM{Hlg_5+J@#^CLy-W&%Wx z0qx$`&mmt@yFfHJ2tLF9r*rWpv}G-n^@`Kr?PQmvj)Gm#n(H(WTt#s4MCZ<_MKacR z!~E+pPQJB1W|P#gV4rezytR&>m)vB*oP0{xlIB|ro%^CAFx}?&E8Nb(|M}X+C|Y3v zu=LCns49X@PmHiLs3XU&7k8au66Ur%Ubp_(Q|R9kNAX5!&H>c?pe2$$QNPlirO6qj@h-D;9y zaLLwv5zj4z(q(?5uIBU_qGqFiKfa~y63K&enXW00tfhz5xsQ^;i>RlW1N+g{(5(!u zMj{EbnCwI?dYCphKUGn@Va4W;sD8>pO4khDTqq#H=K?87hYoXAcN+LGmE`hT=cOEi zH1C)(^!fF30f?tO&Zet?0>X71L`Gad%oHr$-<7Z{S^Af5CiE}0`{7OeiaSfM{x+XU z$baiw&UX{eivQV}9ZS&VJykp15DQ4$yuMulFHAo|0jN~kx8!@9A^ zdc9(de+4(wlz>5FI$s5yRyk@sO52981y3Z0?gBpxN#8eBwdJlK!S>F%*kI)!LXNrN zBwjt5G?2FvPKL<t+W}pb4!Oi0r^5d7?@gjAPY>Q`8Y7@prL2` zfQ|n-kMDuGiUsIs>{-{u-Zg^TFCB!p?aj{y!Qz#pT|f$WehgmLI#KUR!I^Pe4o+JPrw_x^2_;WBuA}TF76kJ?%YTbi$c_ITq)U zIgc2VCft_l(uLvrl#`)6cHja=6m&Z<^O%HX%5zitOk$!9-lnE$6*RB+fr*)$KMhnJkpnb#;xlQYOFRZeDf^zJbnkVYk8Pi_a1PC|5G?Q)Aas_|I zQJoKt?18PlE0r$p6XFv|R-&zUpw)$e;2To$kpv$YA>80Pu&1K;*k26ueL&=4Sv8p< z|H&&s2e+vg3GpO!V@TU04Pd@1M@B%Fit%pgE=W9+d{#gP@p7r4&l-c-jMYN1IZ!14 zlV*fsZjmPG+T-^$G7QR+iztcvvx2_-djpy$!qNpeaw7|NVt{Ex?W|=Z7jU|XF5eud zLkC=TAFF8X*ik27fB}Ta0l_0u;`3*r_M#6twngCFRmO*qw^Xl8x^qXz5e-OiDu^XQ zjnW~PsyudRq~?&h<(JpJ+vJ=8M~bp~?l96!))Dv%&9-LBHqXr*S3Z`@rixT2+VD)! zWck1oy%VRw_S(_f&!^`)MIDd(lu_C*DoZDsVwXYgIj5HKU(0ttYXI30N?9o+U@&-M z?QsWz1ri`Y;!oXOG&8&OV@(UGT`l$6k7{Xksq(DWJ;OS3q9d>*kd!YvgSD0vmny_e1n1#r&C{eNB5%I} z>vn44o3Q!-s6LHmq1GSEOapn-dODL7EuSOn$yO3^0ezzqC>-LIuq1uiHr?rkB4kD2nop#Ye2&xj-*F z_hhLUv}Ii?^RbUZPd`iTZDWl@HXB*0JLQp^cgBDQML<6Me$#Nc6c4#2aZ8zj?`miBP*S+fPaMKNS|3V<)QJTirS$C23&KHZ&kG0Ppb%2JB)L2lb%t4oA&Dz5k zQ+^53*JlPaYlaRHqi2!;uMYktTTYP=PB>F7v+UAeVCN805tu(}e)~z8My=ymxp+dn zF8`Y(eS0M5?h0@+GPxq~fj~T@2asXFk5hR$+;59l_k$#=OnPAF$9o|~*5d1SSxVj!Ccrj99o~A8dse2w7hA55tVubFXM+6&m$h zHX6y7TN8|u*&!sNM+kDELe}5$1?4sz5QT0bV|dzcVoBXzASZ8r0vNE!6mW3WQ&rXk zY%{IHjic-CiSC}&82)jzh{Uw^yIi_Z-(L8r*f1h#l@o`0PJr8oo<`bVhCsWXZj4s7 zi;saqt!BpsGn@clh-`yU#@jV+R#E3z$SBFvAsdn5KD7G$6c+1)5PXTHpUNS3PbG`( zEP!tnL3nAOIT|3D><|21LffdJatX^X&SUC{T}nWwL?2|DG-QWT0N0!cnJAIc#wl27 z`OLl>&1G^)|09krl3#bcB{sghmd3o>dMqIw6bw@1!Jr~?{$kamFm97*x=F(7GO^Mc zZS_n$BPJc6De_hf~holb~=aW6Orv6SSCfm8qOELj?zsIi& zwHVs}Z1^bYh2?zLB;g;s6K~hsk_fa%Qmy-RyK5HGXZ&&D6dlh1tqdy|mX;C4B{~#k z2a5iM9sU*_1z-%;Zh0~?pDST2D^CrJ%H`%i%~)05lUaHPYm3q)TEvfG;W!ns0CmWJ zFv40;=|^aV5N|dA-_<#RQ{e;5oIh zI)xT(y7z4BOV7~nq=Z~{Li{L;6qs(uVz91DZ;SzSSc*a*W=`wYh`V;*YA|87py`~6 zgG~eOG`BqBF&>@s0>a2;90M_LU}_?3?R~5acoC0qz1CvFM8hRZ(oM%|n=X0H)C5u zQUdwrAW9!&_PYT2yDH6VYev4y=6s%Nn74L7h8O>_0XM#&0j6>xz0B7cJ9+!X0@k+L zMe2j^&rHWYP3LQXPdf;-EJ*#R3>}q}xD~{$@B`w5#2o^C_X)nPjy3!*?_??#h==_( zWnO#c(oa?H+c_q3-Qv_~wdB;ned7xz$Y|!MJ7`Y79UU%W22r6jLP<||mDUNmXuo!!ZXEzg2yx2Jn2B>!eN#~=(M%~k!RKb~VI>MhNNf7E#X zsomh7HS|m~&m2c22_qGu3YSm%UYl6f&cv9yQ_XbkGYoSbxL4HnehbFnd#rXjl07c` zTxD?nNA{Fb={1!-JOG$MiNbRvW?}D6b>u_aMHan-FA<2dWY#v8T)?vQ@ij-hMCke^ z1|a}azc#3`B7^wM(#3*AD&^^vk06?tckbpOI`<;voiOW;o3u-Za= z-)aNZswb85q%qA-cz-0vD!j2kZG*W-Jb?MuF?bh8ENi?K&e^7$Zkk7zf_T5}rQvhy zVs0xW z4z(pst>3nrEv3!I-k!Qp7K+$$$Sy`|rZ>Fto9DVle>h7w^#IHB26GbQ?9wu~{~rt7 z$iF`#(ZWI;ahJACuJm6IBfjgu>pnLxrl?~#C{%FOJDCZI4XT&B_k>H*XjeiE#1cB$ zKS^KwS^&v7A+xwuu9o`sYqB_AR(Jb-93*K0I(12)bZeNh6-C`q%6v)cQ<1)C&!}D$N=h^6u=ofO^_ejFGhue%^BTLaju}67nagVWv4$a zkc>}A%0@maiKh!dprz>Y?kgIF(L3&F~_tK<4)sBfB&+&hi}!tD;`&b&aN`($XzDIsGkA(X5=?qG^|7Cop5=EZcXXY zCJa&U$j;l$*`6}GQOYygo*_9%O$te7#8SdCLG@wEF zD?AEr4&Nie`5Dp-R$qPCLk1?g{pdD^^fMW5UoSWglMjr{P-QgL40jT;dr9X(P;A!g*uUwv^gGTOs)*s6kt~{ri(=3%renAn(L5uI8402KDu~#h+D_IzSfq#E$ z1e7Q}?+TYJ$0q7fDU)HPWazd?3w7IhM|rLXQ!YM~j+HQ$x>fuD)(soZ$0X?K`(m+1 zN_-1(REP$hWXzW)I$z8a!Ts({f&;Il@+WH|--`zPU95_xB1%@}Ga(?@C9CX=gcNe* z#d9f(|A)Pb#PdHM)G^_^&DDP2nw9~3We`S>$A zya$^5iY{bb+(<~~pmF&y9mOrLre?inGFa1W9$OC2FU#1`Um%vw8<&Y>Mu)9#_NZ`d zqYZq%uqPuKMnp{1fT0kFSuIN%(n!Gv5{bo*QU!TYAVKRad{Q0%x(<5ieM zl;9x!U`*&vbwlJ>s9Qah8Fi{V5HP*3&C^?ux>wcQ3u1%l3A-vUvOy1;{s^SoJ+aEF z{|`JYi~>$gGonkZT@>R&JOMT9Q|bn_-3q40(&yz$)E-^yyvW^%rejjId*AK&Y-D-X z|7JXLcz}`>LKjQfkSn~vJDA(top8rO>(RNhsq>dK@-?SmCm2P(5LK?Cg8Zl#eE;2= z_?(*#;{K7@*ru)k=Sd_>S&J?sQxQn~rWTEk@mrve)I7Cc|U6zWV z&a*w7LattYx=TFki`2ydQ~KI%rm@*U=b`F(-g8PO1Bls~?^?qn;udhqFrgl>JL$Pr z;)6;G8pC^eBA#_Jncz!KlsO5;rAw|fs)W8QPgp* zQ&Fn09^WYrk8zDvLH$)v1Ck3d%kjUHYqB^n1HH1bA~OWE+n{*{Urp_@D@ z!%TW&^$(yaBAg>s3SfyHNON!RlS8{kUMb~SYA*AiC1%{f7w(Qh21-b}1iD#|0M4`? zlkJn}Qqasqo`pGnR7Hne1$qBL%^jQ&E}O&ITBjY z1A3dsG^_}fTHt7mZs(QC7?K=@+Goh3@dK{|Ei|T2<6wKB0u>7CO?k5VAFDe$9zW`F z|3+^RBq>w@fwC;rIf#~K>|5UA+CCBE!!-vMl|MZxz(6H&On@v2g0BjEO%3LPCl_L~ zE%kKby#G8%J?r7n7!{rta10%lw0Eu}X%iqt`)L_-krHx4NZwUEdh7Dv8h?av`GsVp zYuRheMXUVDGc_S8r1;!i6v?MF{TkYqz@@4wN%#N37p1n7IvrEQ5^NuTihkAb;Y#hQ z%gx~TGy&F+E5{{)2e#AbGrTt#Y946{PJKvTuR)}ChZgRRtgyDw+%HxXrTZ}JY@vQs zhqEPXEGuP*tl}{Fy~oS$OEuxS64o7XCzry9L!T{dVH=Ra%m@UT%$IZRelOEdm0c-6 zN~1=ndhYiQYujk}Yq;{SZ7ono{LfB+3QO~#>@1FT+0&IQV;HQ|YR_;102GHI&dVzh z-dVStIBVkFa8zXlif@g*bqRpP87GHbr$u|ZrwO9wa`iIwmft^Esf!1VWZ)sa70bdL z9l@)|#Nm^7K8df`+58&s9kULV&@_7_&q&wSF`XC{IiDzr(OlWH3#Qu_zD3_CUXQH& zDZAX47~_%qxGA;c5QmH}D3s{lGsm;+%}nVvpB2TNcp{c@zT3Nny6jOp0$`oy@6QSu6i!y8Ex$jJbVHtUAi(mH(a zvimx!8ynf|kifHHxY@mo6{{;JNJ|8HQxlMt(?8jEg-z6Z2Q*m|9THd0YfN)(V>{rf zva95N@w(BaX(HW7*kwXiDU&|L>EjF=T${HzMn^gX-447N_IIluT7*)4#j*VVy;yg4 z4GT1`EI3XQLLIk9VU}!S^s3CzRGZrspgi-a+;TsLa-gy;85`3VfI5}T0*6xV6IVL} zK#88NTrXL>4bN+nz(lSkfH>vcniG|xOZG1LxYWf|Nk3(@JK(8~CS!4vzgQs1)Lbct zD1ncuQY0D>VMQX7t-IC6h910vF&;IzOcL(dKdJ|%(pf84_GbZlW{jHoGWCI*TrUqX z3g(K~Wb74fH&cU)S~z;TC9=5P2%5KdvU&-VgPP zq}QxsBAp35(>{9Ewo@eC6Q5Qc*~gkp2Sbyvr^Spgn;?-WA}|F|59;N+aO*SeNujtK)5;Zg3etx8uHSxWrLM5Gt?}_Q9n78rB!Iliw{f(haPAB8D)}yV}o_RZEE)yO=;N3)um1vksTQF!>QMg66pESutQ_*{|6c-hT z{0lkkoz;ou?Vl%7*8#akB8V~{4dft0E`$Fjy1_WTRYcc+Pbp1;jB!v~nvLe$Z5*KV}P} zHdGN#AOp!i&qn;)B#V(SP4Na!$O8dbG-MMvi%C-Hy3YWXJ>B$5UE=pEl2nWhtb?9j?&2 z5*$o$ChPE>n)gX|3N&(96yg~X*)iE3G!AAa)yzxjj-GcVSg2%SiFMM3Z z0WB|w^CN*4`gCu8^*5+pVB*adgJ+kO%8Yd9_s+>(&IS_!OV%Fa)2Va67W%MF>aw^6 zYQZ}Fz;@^g=H5mPh=vmv!|s0a(FWwLTRIG_gosN8_V|fMdWrPOERv2VX8VA^T#~35 zsOXUez3+QO3Gw69o7BQd?E)Iqo2UVMA-cWWTAAC6uQ=7u- zbMS44=hQWXrL@)Ce28`0ViXa7igAhmdUIPBK(O+q#pkm${Poc)9;D-tGkm%oW6L2R z>!NJ%>`E!t?1riTcn*Gom}7VER?15}K*>G@FNFa^7pPhj-(~v;C`Bso&sD*(TtMVYUA(=uE zqzq?p0#XAJSpV(p?p(A=z7|Dr;NOiErd6BRE>3%zFP%e_HMm8V2dg`{uPtU^^Nj|a z3w@|~!;JN@O5^%4xd}VrW#dfAT~)3${Xc%Lr;Hmq6^TqH$R5R^bQUal)Tng^;A!>M zxM{aeBUrCT`Ej7`7RulQ$PC{u7E4si0;{u~C;$Ur7Z{6@{zF zgjx+jH{T*ZyNAiHcmiDvjgdoU;ik_-k@R6ydyie)cuDZ6Y`{*iFjzF|^=AFcN^50Z zDVNu#_Xv#x5_L2CYfzhk4NMVii#P9PKoYh#&!9>E(O}JJM7cB2b@#&erk@o_Nl$XdJY84MQvKf*W-D+ zf8&;rZjXL*Q~Umi<_xsP?W&xrE|=h@Hm|Pn@7DZ}5bn=}7aCyyQQg9;YRDrn*Z&AF z+Ym}r_3FNnRYpRC3q)_(WHo^^x%AQi#Pb?YEUJg)!348s$~Kuaee=B21mthd7hLW*kNEsM+1^EEwJIx%kos6K%(4enz6g)WA3V~h?{L1N%UK{ovOnq z;@DY6opTkv{19!5v4}#7eOI>G++kBY4eX^!2} z)k5M&p*JiomFv|-rMWX1`Q`CBs#%d#D7dD84o~qbonES@rrr6`6A|V&l7T7;y(@pz z6|$wISUsxYR|XW{PitZh%+3iJ&GD#axOu8BwO#xX-SJbe(wawb&n%N!pKRsT{g0n@ zIIWjOhVONPbr(rKl-J+QA(&hfrtHuMA-h9JA4@Ck(wLhOdjvK~r*C_R^_P^#Iu`sW zN*lby>x9=5<*7X{O6doVjN{~y{Tnv@xM4(^JEINId}|A}vt*32xGx_f;RCYjImRNT zYc&u*1Jhu`jN>yqY@$raUHA;`5CPx>{;|Y=vnSe4a=lQOZ0&jp;lxlc;)2zJTlZux zvW=)jz)pri8OD(;F$-iYdhI!WxAz!s3o~>__L6El0fJace@T1h5eEr*3n(oxK_jFB zWSjSGuIJs-(1Ux&|8!(LBXvBD|ENqJl3H}FQMipf;fbb->a zciE-!%y4?LwMp@(h#STN7ettF8|TZoc{C;AWZF~sA7vqXwwpf~tjocAq#UE#|H{_Z z;&KIFI9;_>X~IdDy}HW&jdmgO^$Z<7dhyYUgC(}<`jHyKc*R5M&C6t_Bb5-YFs|E- zDNT(x9IdB&Xx`5pHi*wA!x~aLo-;)XHOR|UklfX?vsPrU?wW|nPDAQiNX=CE z9BjC+hWInpVb@&eHYcC?zpWWD0;XX!s)IHq!nJ^g4(->$?;|@UIxqZRwffMN7pGuu zV=u)?JQ34!ejsA{id$=sGOHgCXXk~m`g-`qMSp;pP6vt4*5)(UE@;+``Q}}J9P{HH zHA+wUT@ZNpUVp}PBtWH>wByMY>%Br@(YgLe>GP0*y#|GkTS@_ZAltpcrL?A{rr_Dx z{Oe-jb;a^o?_}p$03gLO{E4IkdrfRm4ToYNe?c)l9qVzYqv7fu!UG`KI1Y-nH8Eri zkVc_Mt&UFRfz~8AThuAo~`h|BKd9`kA5I&kcM2C zAhN2Ot@RG(NI4bQDfmpTHf-_Wtg=1gNB=|6ttmger6xVf*w<>)$%&k?)KhId6L*^! z$=D=x11~=cB_0wn*0()Ngl@Z?QoFA`;AA&!-{#s_NMo}ViQN`r1Ty?8X+8AD!^l|R zFC+DDG211)8_65h7~~jx88C~RXBkciM4}nemn2TN>7pCN2qTSdDRSK?Wg4iw$jl3` zNU+!TXQ>3!x!64ksb^NSXR$@p-_UU9m-ZC8**NEl;w-dXVD5td2BJJ7u$gk(47;#% zwyE&OHjw_1;HE^<8R;qEI#W&TVL0b+8Pja{XbE)^bFx)FVc6jAB}KH;C7%nG$wpds z{0|ix!C!vEjSPFa2?7(T5VuZu;milRn6 zA6c0Ba0;ehPAOeeL{iEl2Jn1YbfjqCXi;7Oo{5JFWUcoJD^<~O&}OHV`Pq1va*sfZ zRZwZW0b)kztSk%~ySDSuCmUyj5o*3E_j{V|G^MM3>Y~u4!daW4=+?W4WPgzjH(%!! zir^VkL(YN63+%Fp|2o($wNKhBk)$ABD$m7hn?8|9(Krgde3M=ZCdUH?nAvSGQx!6p zGHoE9|B|JU4u}|fhe9!DR!q+J>owN4cpAK{8{4%?bu^W*vODFC8QqOeE0LK|{HKY!LFW;(q^qOWNL+ofrp7VLY@qb2L4dvW66Y-P_PAx*PZEfdsGuA#iDxGVE+*Ca3=MD|wG?P$Gl=Mr{2f z`|$ZrsRzk&20!Ryg-}mVUOj+nI4IIOO7n)Or~CQY_S1qS3ONNU+W1h6;L|4hvnUJm z4aDOMIVyG@>7nq{uOmEqZohUYv&hD3di42Y-3lV~W>PQkAj;-z3q=TONh=JY%jz5e z-^Z_tfo_yCkqp|*%Y`jA6{RN54Bl`P?+#PX2cHa+?@tiMLaL8Vb5x~#!0~bPLZ_+? zw7z{L4ytU75q0}Kg-t_Y2DzE3i8?V3Al4iN@7y>XeV{JFVG9~7#OIZ%WY!s zAAgg>5c;@l?aXhIuI%_cnootoT4=u>nHI1+kjA#m@_HvuWt>gE zmu)SuRmmX_Rl{$nmsn5UtiDv(gENZT z>3-J8yDO@2a051lN_1YcDDjh#?fLMHKqOeLZ!Ck)->7{Anm*|V`+*KI$}I1r-zX99 zkm@%RwD5`HNPkz`JF_Tik@Wg18t3#$R?%{YoE6w5rjp+AN6@Ow*G5J`f6D3_ZJ70i zKoJ@%mo?}E7uly|MDiUZaT~CUgeF5DK;CT$-h*^c{jh}@50|}^fydh5%sx2nlg)Si z^ntq<9oZtJZ2M6Sh{-xCl6OC$Dm>TuBiZWG7|~^wLZ6L zzPbCxv4{GYm+{$F1^?a;3Y{GUDVP3%44%BhtVBgn;&O@@3t!5pO^wIm{Uz}sDO(5F zWab#quEf5dD0kL72#9+^oM8{v)|vv*C880Tn}kqgb6dUn<0EKna#GN$gy-~;654K# zuXNJ3r%t)CVWvpX9(sZK+@Iv~7%tW{y5ykVG(^aUzEh$NK%=${u0zm-!C7`5`OQi2 zz3t%LKUtmiHZJ@(R?7;g2t4iqa(@w%{9i=kcv}@%e;3Cz)l8D4fi+}eU!cDVoaiS) zS}k^lI4UGM(=>X%c2Wo*7#<7)?rpTQLNh#cSZU?Cnv1vB;@FV<4~w@4 z=nQYmDQW?xj&OZ9-YytdnF#u)8EvalcX@k-ebrXkdyFIPs=rd-Cqv*H%gzu176z4i zfySR@2UTCtx>i!Hkws3ijTx^)mQRYRohmbg!H?N(MQF7vu^5LaxEV`1OYjxR4Lez) zYdH8N>`ShKb;h=rEGvlXnq)*rJeIkLkJq?Wx?F4?#GYrV9;5gR z=w?0HbmItx)qv>4Pv zhb{QwLMdhh`q%aPf;r+()tCU6h6H2m1x|k>cVm`GULlAZ#?q6QNN*quE8 z(m0M@ypn7q4@|kIXlXDntPPY-KU1K%Xz?SA0Lf)e*qt0`?cnJRO%+HT*^S@xtW{ww z{=DPHP_>02#0_lskefswP%?jJeUJ{{YgcyWyh%=8H)&J|hK4$!qb9n#qAvj@If-(J zoLTa=chgww$CnIn`{!tpHr@4EjH{vAl@*Dy-q?vFN?LFrzMn9%?^Y+ZP7If| zY^a9@M_p1gx0^ng`_><<9?Qt>cW^weZ*`cO3>M}t7(G?343_|qKRaFo2Wg5okQow5 zM(hxMgo1PSY)5kn;cPHb1MQ&e4F(o{*{5v1jSNFLroto3!v-0mg%f10J^8x#Xs!L zXsJw9DHCABq0<17m-CY6lNeH6y70WsTLQ(h{f@6zu*XB3(rWY7y#0wedK>PIKopxi zQ>^Jyy?>exmW0j)*&YaWZ+4NaRim18U=$tpF6uahla-)?P!ikH7sPJu?4$V;r1 zYI+mf&zAsB^k04+joJL>AUz@R)Itg8NE|+Y)nmJm@RW33Dpc?s@MkKTsVf?J8pY!v z(+1X$>Q!aClBAR*dWREg$O_Sxq#M0)fr^o|oo}`2hEne1z&kCe)xA!3Id)Ybo~8q3 zaveIEo#Rtl@tUuq5+w8VR?!MY(Ef01v;$S3i#_&(yfA(}YWyIxDeUP!I0*3wF4mN&R*a$lfJ=iCh zqOv8Bjt^Rp(O&mA#%}LTYIh`(=Le20g;_dpSZ*Q_^2_Wo4I~q~1q+oESIooz_40eb zxfKau|5EsfueqM{DwtFpq_@Y@kJV2Mnq)9F&ZMAvMlI7qL7(M+WCx#g;_m6ZO%X(t z5V$aLP!6gn94s0hxz0e-CWIBp#fekfQJ${_B}h^UPVJsG&cmJ0U)q|DIo#^ftuTfH zg;lGlZa}qDg^gfFJXeH{Uo0%nsrPN?@!ZqC2jJlfEIulH}7*VnE$PmiPus zBJ<_Gm{)<|7na0LccK$W-lDh?vNaxLLqSwAe`nDm#nZM^=E~QFc0}g?n){p@O}Z2d z-08ji*LmdnQgQ2%8kf;fUJH)s*;3r^0h&`QRD6wqp8M<*Y4@!`k(Y%@Ndz6h#TaO(;Tu57-Y$>NP2tFWG<$M zL$r>GVw{>3qlRMYS8k%>LV{W#EpkI$rm|hI&^x2(t>K#Ko+cW}P&Yr}jMJnwINtNc z&EPN7BjySC-g;Ya&RvtFj%)TMQNKjBxBi)+u`>78v143f{_A($Gz1d!;oh25-BD0= zl){?jEe8$QPOLNoY8(jmxK+&ZvL@^US)za%ChS6HHw|2bhU{Hm2R?!Vn@1i1=eXyw z#3sIr!>Cb?q}~1?$~59tZ;z98?^1R|k8ys|9Rip4hRCCKE#I@&S9@ZhhM}vn`+}Y4 zZ|O9Nc9MG~1JNC{rL^W@mf)2@%WijIC_#E~!l{?VpuWj@=V49l+>4PDuMj&5)w`}^ z@Wk{LviuKujVOHhGD^&KiNoe`MRI^p8q#}(Qn0HTfOJ8s9nb#TPdnb!W#v-xC#{~% zha7kJGd?69+T!N==>(G&%^$WZI<(xRS9@NxvJP^*f|1OI@=P`jl%(UZscaCCu!=I` zbEaw5UvKJQqYB*6$-uvB>=XkSdU^tOvL&ENJ4|2c(!0a_l#Y5#q zwUy%F^xR)RT_BcpHwbsA;`EM;_RVrnSF$bbL$I_ukYo!2@Qm5qcMuS8qG0zSQ+zH<7%k>JAEirT@1 zBQge{igS$W)>E2;ce8=^R=TgdERFkn$+msrDo^&}Q~H?nd)_jX?v%46vbUW~5>zi~K^l()^!TaR|LNBDnQT4Zw5hPPbEV}EfS?n|gkoWG zBT+;J>~s0*-7~c~KyL(SZdE@Y3pl72(j8sIfKuU|Frd_96u@A)F{2WzhLJqaAhA~u z)xIJ)-(tQBz#OU{-vjwxs4*e3sC?pSRQ3!GF&_Yh>maa56;OJYMTBrmk6u*1bwDF8GePcy7F*DJfIYo_nyG0oX6qs-8oJ!DN}O@co+9j4 zva#@c0h~0QPG2!pJOoCVoU!~Uz}YJOPTBUJ&7W7Zw|&0ib*hFiDLA!S_>;TK7`18; zqxef2*%MQ43aj|&$cbXcASl#1JaHc9>GzuPD=&Cs!j(N|$v*1h}`+x*d$bn`ks&tU;+ONj|VnI^C zCRPc|*%i*6rFMSG(KNR}eWJq)D1!a|6xqYaB`y3{l-dlmBhF>a zc3`H&p#?d`X1_F6cd*6M=5{qH=nx@B4`_nzZfowTM&Od9&BWcg-}|zlMZPWI(^!$< zUzy)L2ASu=$Y?{fI}u6>yLz^EPz&nyoEMA((AG@_T%bdzHGKbe#iOz1AVxDnhLtNI&6v#;PJ{TYbY_!Q}&PV{BdwVp`|O z;f&8&OIY+q%^1^_{y^Fq4bQ$DPW^Fd>;=|%E5eb>KTswI(=`Jw8 zp8vX7vbSt;mDLqOTas7OyJsbhS@fB5$Y4K$^``xcTe`ct(S zN>g0zBz+AX?S={ROgg;Di_Sa<=OH~`_v9%?+L61ZX`7Ot6eX;dMa|_1eSaOHY1VQ! zPUSD$XRhircV@OMvGuXvJ0N=$m8--HfPatedEmtg=1c5b+4i%^{KI|xNoX-+DIWMC zwF`SboBvY>exaSsQ09_uFEUTD%7|&_6c+{R%RRM^v=L?O%T&42UaRNn`=JhdoS6hm z8hsqsn0bY}pM&)?Th#sy*Ax3Qz*pq-@gxI6{cC>SA9tcEqG^5!wle@$-Nfii-W5B1 zUl;z2fF~dT^uh;|2LR$GfUNYjwQr@wk_1W9d->emd2?+NQxLUAr6Y~b@Retdw@9~a z;ZeWv4y1&kujtBJA$=2?boc_yX+H|i&U^?O-L@Hb_saCGF<%fxpYZ`Bw=WgvrZiOY zL`&N`CBvXJ5U`9s77Hu=mF)F3uosqGd4%zsUTcm389tmZhlQ^(!h_Uu}r@T2CYCYK0t`7^gIYm@Mk_C8jrcHDye->ym<;FMwPywD3 z^Gw4zBvQn`hrmSHoHj`eEEJ!ygK`li=7OVziNh>fB3t1I?yIM;m@S%g1_XUNt&HBq z!$fNd24m^=X}fw4l)YRw^y*_#V!^OJ8~79Hy;r@|en)38dC&MP}wn3Hxq|R|2S}3U6_n&>e3OM_7wv_sa&3I z8ue-=POb^icb7ofDO^Ba0Z`e}Jn zv$AJLE0Z*sdOSSOhtS^aC6yvnO+eXu=8pwccs$OM-}SyVlOfBgk;M1>$;G<|og!s; z^@4M(lVg)L2Z0fqOY=L}QV;7IO;`vOp%*Eiuz4&{V$D!}_(2%aD(c9VYRIvSMXtk4 zH~DSL&wikPj~{I~J|ZVgkvNHxZrnTtFM+4rH>$j81!9iye1304EP34QkDo$CHf%cg zsf!3gah^!I48L>FL-(LOg)QE@CaG4-$7Qr4N@>em?;~@Un1<5t7!nn*f&~s#-048m zCjpWMB_uhvSOtb99TQX=|FW6FF8re|G=0K ztP1^u1;ONj&S30A_~dajN2XBmFB%(fCU#oq!Ku}3(^7#pr#BbAl0Q@}OYu%XBST=8 z5`#5k);o)Ew#LzZZ*!j(+gFAa2s+MdMt%PjqA2a9LW>x_sek096H)97&uzzPTqFt$ z{}a>G`FX|heAS7oRj;b><=!nJKG39@Lf}gn_^UT7#f=Z7-8!M;f;^Oyxw^kbm`64? z`Sxh_n`sa+NLmbs4~S7lj!cs%v^XY6{YyzQ=6Xdt$!Fnx$uQMh2&Q4Vg*HHbM(8dp zaQfqn{DaVRZ=L8L>e#NCpau#lT9HY&vTYawj_Wy<$vN{;8Tm3G-?wIwWY^aUDqOtxTB7CgJ9(&XrF%tQ*~ zjL4y1#-KLuHv$X&5bQYb_5NPk&rZJ*?SrikCVbvX%entd@r_UNfF6i~YJ(}$={WWu*Y-{u6P>5lvD(n{O7B4%I(QcT$ja^p zb?-iRBGSrCgKy>ORJJmkWr!&^4?csGWEr)up-pvuE@9n{dH$oMa#r0Xg|2yNg`Tc~ zc!rl_?7;1R8is6v&&i`sXpQW64Cm;lxEa~)yT_C=&@k6Sn$Oj1ik$cHH+2IWvIK#9 z=PRziPf+uM@{yiRSz?u)%W8)Kcktgk!A*^4mF(~)I4S_IOKrmjvzbf_w}w0SG3X#2 zGZxGW1vnK0866I_%*2y6sXYH1M9(Vbrh38w>RdCvRA*CUJZx-)8x9XbfBPH{#3yj1 zCWV~^OHEuoIV~QLMZ*lh3`Xk3gRRq<#<^S0%rtn?bVpmrTJuJU?EC0B0jFQao@Sq+ zk^ZP@Y)??ah3zP-4}gYCv5Av&LRPVr63pE{D4hwRDDJ4Pc!rpBuXA?GKfM?nwt^s? z11s>~!w!bzQ}5>H~0u(VA$oDDxAsQMf*Uu^-APE@e0rx3&Hw6dN_$ z3p<&|xpBJ}=d+JXg464NKe5ce$fI%K@Dkep;0NWGOaTyOf-F~%*rw_;s=N^fnib4H zHtccffeGEj|Cdjo&|Uh6ddkGd_eq{9H{VD72?>sbd2ekj;h+}5N?xD+f8A^;+oGf5l$o}=vhMi#rRlKwGfV4a<4 zGXnh0pXMN;VUzfJikZmSGOtn-IR505uBuS$E!ojjVI9hnBlY&6c(3_5;yAo zzYMjB{Z>-35af37nB%WUvJ6Y~wc*uTGyI&6gj9PvmcEajVde0t*56(YBb!?_sA0({&he$C^}9Adq+Ai)tJ`G zc(vd=Id4Ojdf~GGKREADNvP-1va6>Hz3BzQ*Hgij>_%v;+{ zfRY%L+JRaW%KPmQ{e0u!#WYWN>K-vKjN-V86x0eIk5H(VBlx`hs+$~l&B7KD6hYuv zQ(|vq^z>F$s^G2&DlMvEd93t|CzLNMM_bmWS>uioYxF%>>wmJs4C?|bvj8PO#{ip` zJVgsQi{UXbT83%wV@)s7i9Scjy%WdZJ38@UFLAW$+&kzMR+^X_XJ3W%l#fW|W?vAh zw5u}V*kgey@aijCCG5wB@1T{5!fCn^f9=I%{V0%N2z{}zYBfTmezxxO;SugZmrag< zwpj##XvH2T8OPv-?jV7^l^Yw3>i%>wVp?vV~-G>MY6&*_Gcy)29 za|USX%5x0t_^6q2fD7#4WT16VwW2SE)_8m>`igGb-8rf z8jW*p&pgZj0ubbFQ2lT+#KpH7O;o7vbj#Ppjkqyz*R{N*LI_#EsPc!XEnDfxOI%&p z!Y2U3OPcyJ09_6LZ9Ul%TIT9-VKO^AFfE_Y)%#H^#+gtcS=u+X^hLz>)LET?upp5c}CQp=@ zkJw~S4FS%a0Sul$i9YJQhD%vCI9aFWhhV@=LqRV%jJulKBrK`()5OuaoweNS@xs}H zIBVr+iP;UvPr@-(re0L+$%M_&k0$buHoCLjn#j!wu;Nk9Stb3M!StY06|)&5T|VLk z!EdFZ0}wd(TZ@td#1J8OIF(&Ti6#aZZNbIaBWr;+o&$_eNjlvmvTN_#@I=Oq#ry+1-|>>b2QQf&T|pW9*mVHT(|U9l6W97XXltJPR|66Yuc z4Y3)lI9^ZD-cft3HxR8uCe&s`6_THT+y;8QY>8VW>8CU&Pv z`i1tO-f^jy;*DLD1pW|VN1EC;sXfClWdioE8-Pn79H0Lla-iGp^kqP<-?1P7`W0iL z=Yz-i*m3vC(trSUbP81s$&mVvS!%V<=O0S$0AJ6JcxYC65~*i5dR4YLP{9g*Lbv|? zdej^_1SzLVX~FNYOe*py%+V=RK{@4_LvORuw9-ZIOWred1-128+hLqeAPGO3g4Tj_ zP@P`hlLXj@1(Og4M_U0k}&}6ogG2K>2$3~SZAiCQ4UK@cOYBUM;)*9a$`nxhS z*gp`Wk}zsSsjv-qbd}XTl~;}775-elDGC!hL77KDV}Oh6{J* z%KVRLI6n}eHju&uJn{L=0W6+E{fB~F0RhqHJRl0cDX_G%zAFJ$n7>hWB)f#n)MlgL z>h+IhKQE$&1d4WtbNR7wvA)8SX?@a|6TmcA4JK-Zf$Jk*+1Z7gvG@fkd_U8;)zFUA&g3Zq=#>~1dU6J0Zln^DL4RmvU4 zAw{P_8#XRz`=0n^8{t#RAo{?-d#~4*ztQv^jol8<4Up6ZfFBJ;HI9E>F2tfAQq>Ni zDecOR?lu@c=__`56R>N%3-4dlU~xal{pLX$=!GaCll`v%#&KW`5$4@C<5%B>8WD1G zZV~|M>#y&YOTy>u{VjI2Xrsh^+;$vw?Fk<25G>nME;`L0Z}!zdPBW|C0jd|2KIZ|( zT!Zr=z>61aU8Rw)5kyPzQFK118rb4_;9kY-;?ENLG{{MDlazTs-S*)F|8UG)S&D1=06XwT$>cJz9^eA=B+5O zMhNaKNQzp@lJ&hG$(tkFtQ2-yR6368zzJjKhx}q)Pp;uCVhP=-j9&YNvM2p|Xl?3>CR$>@ zx>0`D{Ky={e&J=gzWF2}E$FN=9N!VPzl>CueryFFXU0DccH30Ax+^q*v_b;zwctbTr^Fngt?*4;I zn*UPHj{Q`fehsXG{Y1LvU_;2TSrjS@Q6Tq z->1=IIfm(Z7P){(8G{dftI5gFg0bk%#I#2;<(L@##Jb-afyk{f6y`Ky=TvTvn?~k> zcu|`&urh}d3Ish)HR;p%t^IPzSUihbVA4QZ6!;+Bo1R>UDU?FIdAdu?Gzm&L(z87i zNT2UAdpUq5#tlavzWonwpQCFeAZtMxBX-e?Gmb4W&w!IGk4N!0k}E{agEg|ro104v ziA5BxLyt1U;u?iRciuHRs5d7q!D5je*hmq_90-^PNTXRIWv-kZ(&lln&K1$w%+nQ5 zeHd<$l4$@FUTyqhWd0vxr4Xqj3$D)ZX-%=3ExOZG{kj#zb}6bU?UYmh9vCOf+$h)j zV*paatiQLAE1JrCs08Q;cK(0Voa)3e5$)p8UQp*gNSQc`>PzlxI4ImxWQa210Kl8^ z@ATXBFCGaDoF62_ zjUR*aC>M#)F7*M=(Xjhaay@oKXFnfC`CZKZIa{~>tF`GdK%EAldI|c>bQR8he`_Cp zBtV<{W3+%l{+dP2qv7@Y8zq05SO{LB#$-XBNZ@+^VHRuw7hZ+g@CcbQhBO92nFJ}R zxvTCCs5zN@n9y-q_@!Gh-9IQ*kZa}zU z+ji&i6|}w8zh*(4i&LS%syQ{w^eTjnjz>lY$GJFdWj$Fc z4@DFw%2gs<)vwpA{iTR0=CB}+*KeH>M4sy zzza8D6gj%Mn8z%rmoC2M8ts7WP~G90Ls)814MTw0NQ!!f@gldr2Qt#6C_n{hqBe!h zEK#D5bB&Ltan3SF^>atV=>6@jNc)1_!68)0GeeEglL+m-=ZjNc@!H2Q#0mH9@-W-CD8ovbI)H+6=l=PWGtqvFAZUx*O zKV2!n9L+55aHy$y?xf?1vBVj?2-+WIQDQx1Hx}befIx~~+;yb%YCO{|OX~E>&iIhP z-x=24CRD7v{M`EzGzOzXo6OF6bg(#0jo+2QvU0 z!H+BPbE@y(GqQ;dv-uW z<|Z-vtclQzc)o{L!&2hpXO##vCB4xgynm-wa$*7|X81^`K!DT!T<0cZOG&n>Z@X$h z`yof+Myfcf^+mFaFO@; z_!c%K?=xp^SfFsXnzKgrKGq>58Z~k5uBMN^b4!4oqLtw|`PoJ&@8k1-aB<)H^pgGE zi7xhd(Y=t#>%78B)izS>gw-)l)_!QPfem=L?wur6;t$-&VuO_~|7}@=$V@M`+|weV zdbk7-z$%Y4{ib>um{(uB{f}*aY3?o#Key4mL$XSXz77(X0qOvf7XVg_YiTW;wG~=( z){QnCo2qCyHyjA7&xpGorij%Iz*I=w9*tNrjdFu#pI|cw z$|!P_hIY|}4BZA(Y@>g=Nuz(KL87a#^Dy!idI=U^;kP)a!(~2>Tx$pC%?#8g<^WIpsfPbPoqevD0|sa;6sBnaKN@PWkr5WFCU=lH%;v+o2gmIH2cNzP9xZK} zdD8kH1(~prpRyLDqqipX;*#yf5oBOHX3KqJ9xO)rhxT=~BUG*lMh8c+LQa5DvA*US z7k8r5prw;uC&7v$zKqQy>UGYHwP2$(*>yOmD9CTAi?fH?1?QknUcBF(XXQjH`yI}+ zGNgZyQo^O$Mprdp{VSIj?ph}xojE%*lDDa>u`*@8T4Z#=4V7ORpvDywhOK!%zB&O* zDtn|A>l*t$6gtRNeKaxL!c&oz5du9@}gUW|QugJFqm(136IP(~C}tLU)xZ6_SH zbZX>ZwS`lQ-3x5LZ-UrfNE<26%lkNy?(hS#x^p+5{2mkSDZ{5i&|INd7Z3(|Ds$xx z%nr$Z*X+qdOjiQ~TfY%wZ78MmY!9LlY;>w6JzE4*2tHT-S|OV@5hHoJ{f8{U1emaX zFVrB!aQhD!GNa}rD|{7m{0K&Na2zpVaz#%4`za3+0v#s zyTaVcU&r9_aEx^auC#!}$r`KY5+0hT(GnP9;{2j(H8#XrdK9mMtf;F=NfYdvR11Dp zjF$V;mvTGysvd^q-x?EF@it{^Yq?nTiaGeNkq6hd0pB!E7!?d+mh=LJ?U2Xg87ZOm z{sCa|vzF{T3B;t1X!8kvMtR;Wn`}-3U@o@C*PK-rGF*FEH=yjrFtRv&I|Y`*ngxAZkoc~JNGtj_M92=qb`(Oq1794Lkuz@}fbg_&hi;SsP; zMuIgeHfJIPvECIiHYSDkcq6xG@~v3?b)ES83`3)3@sv;kGEeTD0Xi5X>f`sSGNCP2 zGCtZ7(BcR)Gu|ft+8s>YxaB)?2^70F95AZcS~3iF7`fqyL` z?Sh6K763SSJhRj5=8P_-P5yyR6>C&#Cg%BU{UNgS;-f$PB11f1y$IsmjODz*36(Z9i^~O0xiJYiS^s1arLhy4fOh z&Up{S4XXTrm9P$vs(^Fbw2&Wvp~_l#Nx*a7<9oPxg|R>;ak``x8~a=I;|+$uG0XQv zz@IiX*t{;0-TiW2h!!!o=>yV^@yR(jtJ-hA((8tSP>X=&Qa_KuF(0M-7S@Fo+gX=p zDlEQL#&N3V4`BrJ;jp;wrIW7$+UWSA1UVTXJgaK#%fuakowW-F7kF|rxWD_Z;px+*z}+VFt1Rl z&@TH*C%)(5I8<(%I$#$qxMDOO+xTB;@1O)nyx1p%t9Tm~^~iQNlKv2~jwuA>=E0st zl~9o-%8Xj;+0VYvJA(T4n5E|k&sxih?$U!un;Sz;Gppm%%_k^*68>tO_gWxKG%Bqr z<3X$c7)kJ&vX+25@nQo!MbG}?F+73ZEzE+>G;F9s2Po($TU-+3W2B_dZFKGDXcY%v z4bjRZea-c@hU|h3`MH4>dqt&ru|kT`1XM$3raPm%imNy3_%ojOcYyhZ zzb^Wx>X~RR-Nra5IdLfjB9pH~7iK{if*_jhqs7$&8%V;<%zIR`im4qNMl~J!XS5%) zV%w0!CAwF@h-kt|>&v_;NgU_EqwT%%m~2Y+Im>1wI9w%p+QEi#w=3y6a7*n*#Xw|O zG-y{YNO*yoMf@@acSKp#vhlhO>#dAdzT_4UkHbngt}3nIPs1?%9)7A|`I=CuJvpsv zLF*SH%hneN_1$nc+uxO{{*6UWNRXlJSdio2=!sg@GVwYEUnAW$^`f`3GDNo5Y-qD9 z%_!5_gy*CQM$G6FanPkH9W%$Mj&xY`knlqwNKUk)wV;2#?@{t_wi;CtG^}1aTGd2a z!@XyM$9d2fFpFG^ua-U7W0^e0+T)`KVvP+|tf+uk}g_oCO$l@6jxkFj#DH}z7eBCy4^ zyJ34NVuJgv{|K--UK_mv3tm29#b-*KV+imtR7Ssc@LS-t(*`c6z%;Y_Y_;x;EC@*1 zS|0W-T1%zin$1`*wv5;5&4CPT=IAUclW`D-4JSJ#1q$x4we>Hs(~~D#TwD5vHM#hf z*#pd0CiN0jBq3-Twu+81@1y13&MzGVAPk4&wpk<~W?-=duMd(#cd%%}2@o@-Q^2TW zBWXgE2qruBh%VgvvU&m6v{;N}GAmoCGtH*sEefmtq=d@m>RhwOc!b{Dz34swfuEVn zIgiUP57#)5MV3;bD@K8Cpg$lP+P1h$|J$qeY_JuFvL-h|`45Ci&rg`N$JW^w4-l7q zOzC|B;Nex>=v4>hOq%f5sL~G7mBQt`;X;_gq{Lw;-B@n8Nr)+hb+zcG4%W4B2_hJt z(TkKQrVi>li@Qj}R5tTDxsrt~#IkfPe1t z+x!{zT@&N-02PoAJFtUvQ{D@IvS0dYlo?6Pq7Ur8GdGPZoHa58I&sw)UZDTMy&KXz z&Ev&fDf8Ven<8NOv;E23K^_rHL-FqJ)Dl4x$z&i*jEcD-kB5UkkBRX#9@JFO&2n9*t>k-?<*1UY+61mGO^cUegnJ%>yGi)-!yk!_2@m=G z8HsDTeoz6=z}+mx2&|0=1=XvCM&c%HY1&j4Saxvy&HGim<30I_@^_b7p%O7w%H$?x z9IE4eE;mKR$kqX)je6T>3Svu+#SP~a{Gxfo4@K4E5c5fk0b&l_H88??yOvhJt_ z4;G^y<5ebeav!#)^rVsh%UMJ=Uv>gOdw8SDoci*<3qh4oNA0ZJpXSRc95mHVYL^wyH(!a&ws|H-afO4~d zJEY0HIM5`ZcgF#&%$AYdt!!@(C#^z9ckWhNhsvAP40KlYH)slRGZ@o{(VhRekX6_G z4Zr)+C$2k5=Kml2=_We;)2GlY-sf3hYx zP^iYzn@5bV6fc8{S&PyD3UyMNi5!~hVz+tgSvB-uk~|w!&PufZ{XqU+ioicSIJzR3 zaQ1nA9r_3j2gDsEq1&ugiw4xoDBq8Ix%~FiSkaD!Ux-fspK_m`M$u3n1}qCm<6%?> z+zmHi5s*~pPFKHR1D=u@c`Xj37*HFo|Es=W@qnscj&dm4n1Hdcssh)*L8+#0U{AT$ z=}04I9hY-mQA4WCN>kai4r}*XKL_=`wL#~zKxrniIxHD-J61IS=G-d)Pkc|ZK=}la z(6LhgsAZFTgdHmo)%J{wZtv`rUS{E#j4k^FH<`gGxw#mrgUZLMbJJx5(Z$1Oxtef* zxI&na@M@D*n?P(!+ad%<|GTWV7j+%`UJJwBU0ECtYW&%V*4&P@)upny^_iV16!yb8u z!r;ufZOChWrUZNmK3vRvMk;){)dUk^&yRQJu4{$D^A?_%#>wX8)5NlVS2O+mtNpMf z`qc)s?|@|A6$6TeVcv%-Mmd@9jETX8+9OlG`7j!$Bqv1kTqYeL7XVGXTPwr}UHZY< z=sMIYd9h)`th3~kK*t99OkBlX3anl@b@SCyFu7-SV-TKh&JBxTo*B!_tyzW?t1Oq; z$CJ$%BJnxEPeEy4nzaB_W$?SmbyuG_z>TwounVD!>a$R_w+**xORuCYp)AvLo2ttB zH3BR*GBg{uC~}bCF5{xctpRbWA%^+d101S(y8anPY@rEliFJiqpZgy7R!y#K)o3+@ zswgaLZ`J88P)4Y`3b5t6f>XQg+LIJryo=r5cgmHEYpk4W%-j*Hgb%%vCURB*T6u@l$7fIHwDvpsBIX3|j zSEa(s4Lsp|uJp*`r9(VbvPU@bMbT9&u%cdx>&)(p+!R;HSt$Bv?FqT zW|xxN?^9CF{_mdelmU2=35W-Dv!4_}P%tLJ4FDzQL@@cEV6ssM2wPr!`7a#^;&1BT zDaLd|<|$5;;!#L*jFj)8g6qsU>7bj#$mVK5{lz;qH@I66vP;O^9JChZM>eWhFAby5 z)NQN)7vXhu40UXo0`eOE)SQEM4bn*PwmHk$a2^{uSe`e33h4a5;^@w!sIfzI9KKNZ zLMUHm^NA;eZpO6)!b@8P#fanDe+l7`SX|_qiy|f+K}VdaGOjg z4If9&Mrche4Bg$rI{3`;x>LgzaHmOJa|Hb1_LO3>2_^nVrcew-YWv8w)Uq9@o z&T6qe$8JoEsr|y34$G`rC!Z?7L5hoD^OKUT4TD`|GR_IPd#7cIoS*T-0j#zksQ@ao zmUGo$ah3}bxy29CL|!|6EE4Y>UHH%{!}KvqL;f}1{Vxtg2rPiSvD=^BI|Xofhru~* zwM0HgWqpGH_EU|Y#arvTT;1@Gd=24thikdWQmTZ>fC+Mi>-swefwz?dmG5C1YNqf_=g{-ZuJDf>)V`OsbILX=p9@^%MOgm-Mq2ol^|JyZCHFM_q~w4W3(@jmXg?@ zP!VkA>F?HH(q%WBIgRU;1>~lELo|_crvL&#{l7;Ti1ek)1%Rj%OD=j0)m}IBF`*ecYu1#s=*t->rb!y&ouO5a|vpZ zX**S19SzA1pNw;#&CLQ^z5xM|pxe29rtZgR(m-gm(2^F%j?K7B0T8K99duUJE|)$c z@L6sB$%HbM_Po?5pMD*)jfGgJ5Wx^{&x%+QvH-1(*~WhYqOBk8GYvA1Sm|Ku}U$6eR`?| zU{#>FM#QJF|#m7{60~zNak>)2x z*Jz8=YgPlXNxjaZSa!;zQ3{PSccf`g|5JrL7N^5?XJ}8RmLdws?JN|Y`Ur}~keFh% z%pAB(rP!*}zV%T(7$Mx_(Mu4??KOV!u5tiZRUOii%eB_(&!gD8o zPW3L=UbTC_O$WuB)4GTR2~?Xy_GC=oK(%g;2FjD*_F0?=BQFW{G!gOG;^n^O{EiU@ObPnhNR*O& z$#0)$t99Y{e}S5N#*wGPhhQl|K^E;xO=bi`fC6eOZyv9R%iD9cEq|=^DS)Hd7s6Cb z04h*_ix_z66|sv6nJv8B8mK(oZmfMv;2W&nod{;#JUCInet&hnJA-Dpzyv~>UHX^Y zZ9FJ)9A5ztZr{s6f@@p6sngBw(FU0IU#{V0Ng_npeiIr>k87dnXq(yH#EPt|BM1~Y zMmqWkRB^q2luFulqoe+)A|E%44Djx|dX6xXu#68y-JJZ>#0BI{*u{JP%@_#0Nn>Hg zw|9P$>=pFGO+;7L1@(%@~dKj;Dpk@9V1 zBNV-u8=qT2g&Rp<`K)2~gqE4Z9yB&yhq59S3L8iRW2wz-4@fSNTX4j+@Y-i1U@qL8 z5T>b!g9bG)u}?~QeCbScJ&8iVo==IsLPyc@Eyye3>`O7!QMBY=P<&X}=Sd2(Llg2{ z584VIXz}=jccnLh4MIev%)f%sS%*5V)d1;|O04FtvfjHFyb`f3%%JC7V_vsJV6X+~ z6)?3;IIT8%!FJ;X@?yHzkUFG=m8wmNBzO!5?;c=O43gx6K)5 zgt(b8dKcrXEmWonLYlUdBcj2eSqv~8tT}w@_Q}j`AeQrYs#t6Oiz`Eu%JVz`*^YjV ztr)!r*=ufGQM0MY|Ik%ZS%V)Vwi5n@(*pkv9MqaIoTwhJ<2wjV$l^<>iX0|Qrq_7f&~)C)(~mzaAA+J z!{r|0&YZ6359WkOYOww})!(ZOPsqA^**UJf!T+s(hiPUQZU{8UNy#t0GYLk_VHU6a zNU|ymMa*7Iob9F8Q!*IO5wQwz_-fn)n@HV?(H!Ei8kr3GO!2*~GHlXeHN2S87CB>~ zB%h(2r>NLW8p)l@`V{vA^(N6Dm#7p2PCAlrY(K}7`$ktOo_ zr+A{iOS@qEkDO3j^Rdi6g^qj(>igL@PK3!1f}E3_-$4-;ZIJ4pD_2?$lcbbrap08f4lC!iu_qnagO4`r{J?PI)bM- z%>pvCtcQJq)o`ouvqg1Mn#;0(m_=$m6Ajo3 zp>Yn+_CL}dwo?S|y0#65+8(Dk5y(It+DoXTK25@jq1W`dTjA%@cRI}U67dA*Pz)K) zNZDs80aQ=e!?m)c_oir{r#NOmF#2LJJ8XsOPPP;Tgu)?*)U_VF0EM#A#D)p*% z^0P**CWxCV2K1gVvxFU?3x@0zg^8elGQ6{oXz`%8n90a-e+>s?s9iZ8flt>rR}+u~ z2~DXt;V(#UTsb3Y>J{~Wx+LASECF8J(7QU$u+g*5>B9!vzu4vxVd=j9QGkpaVs;(c z)0~BfNj2VffPheQ!TvzXX`Bvyk9ekh(TJD3?5#XIBQ_XX#%~6SBQXQfgf`oX3_g(G zx9?Z9mHLCKdtqB_NCRaFpTVFA5EDzBJmDOE8=HB%`Vv=(SXpE;n<`F1=yg$M@X%@! zfjot?Dr!!Q$3kpI>_wq;42b8ql1cRZnX-fn3z@)&2c?FjQ@Ijn+m>+~Yw1nWW4j5~ z>*}#Czr!~pJ)WM5%lFs`Fx1!f2PX%rWex@0(B zk*^GN4!=U{j4TD`_&CF!F87!471(!3qrPX3Yt_%2)sL(kR`tYn2XdXzBvq2Ll-x61 zsch}RkUU|BJ|*H~&x=dTwAAjsozwzMVTH`7;X~k$STkGP!QOH&bQ#YNQ5fR6`J*b^@gO^MbxChN+(ws{Vwe1Dv45O+;}? z<|6PY4^rJ^QGLsKs&$7%M$x2s9S8ePd{e)vG z9r>uITe@$2*CQM4jPFLz$o5PFun#u@vEG08c@vEhvQX&9x}K)CSl%FH30e*i`}GkDj+ zH4ARlk~cMbQ!$`UWM@iFf)^!AH}WphWWYyAov;+@{~W!I@zRyr0*o8h$fUy{pre?L z_WQCo#B6+>oxf9f%P3Y&RP163%3W6JB9pQbYw=gPgpXug+XL_!xE(8Mw9~SoBT4#l?sCEaGN#y3h{P<~F*a=XIG*Lc}!b z_NxE&Hi&`$lj7ehee}{6{0W)QdA%3c4dDf@najO;IDyx^h^al~|)wqnnODFciJkR`kO)@*WTxnndbC$mT6K2Vh>!n6dX=vB@1 ztUw9$UTqOeEZv0XM}kh-ogzks(#x5f;U|SR4g_|8{HT<3w#-71qg>u3vsvW8Gbf>W z`;d=$GZZoHC;sLE)Hy0k!uS1E;UdKBm#M>FQ_cX9{ff@?s1M%%5YHJ5X*qbXXxnZ!^b;kDj6t+4($XU@9Y9k>O_Bsdn@upGf(qV8SNy1yX*uNgu1?-h zWNBp;y*3)Og=I7o8l}Nh_dZB=>X~Z;@mcQqb2BokfX)mJI>MLOjLMvJJhrdQ*&J&M z^pTPc%aNPO&W0tbxc?%u#(;UQ_>1`8W{U8w@h&yF4*A%u#nou)zTRdoTmP zP8*^|D9m)gK4z}BFy7ZOQdKNi!Sf%WH^iOxM#5HHfQ^)y|QQlYWw3r7q?JFNf)sW)M?SvleC!>|l+La)BP2*2Tp_!(Tg911z1t zWJ!qkW`V;FGlXP=rJdlMu+Ih;(9Ehi6devK*~mQ~)SPN;BZTtgigc@C`2%>K_zE5~ zHJuj7PGK?f^wr9`Cz$ zP60BkcOl~wmh&3Y>10McL|;ruD274_sia^F?!6>AdT@6|AgT3>SXu)d{Ltzjg1WBw zHWdMkKV{tI&x&O|H`B85B2gt6Fr}czC-%a2RANoi!m@|u(wxq%z}8ww`FrfuadQi4 zf~l%Qb9j+8b^rwO%UZPiVL}zU{#Ins`0KA*fmM zvS~Bkcg2-C$zA+D7j&%#ZH{goG+G3K5T_(XJbJN-Dzf5bKP0(KOWoMdQHeB#eVS4o z8d$-;iO@{|RQY1PvscVcqWqoNGu`W8MiF}J6O?@T2V zjoJ0+`(Aj*rV3&GRtfDAv53Zha{-JwQc$2C zL>oHB3sn(0?OZ?23M^}9eOnVft_%Ws)+;;ze8`q9Gt*|%F6f;Oa(eo!;$lyeGUEWR z$9RbjDyO9Ym=THpXaHC^K+KIlql5o0y? z+`+bU^$-j*lM?4hpv4OnPw5yTT$W*}3pbuk<-_Z^fXi;mgajifTkkPVyOW`MGZcdp z4JZY_N!ikRvJ_WK`)86hjxk35lcxjaVSBqdcBqMK+-MAi+AV%%t{Z-#o=8 z_F~W{pP$vVHaa$?LD#{9#KaGECpeHtTk;3JA<+7;=bH*L5!dIrlx$amyuy$l`5#s( zA7Z3XN_mi53mbnT;_kd6)KWKVd7Jz!D9#~o!)yrMs#e?V)YZLH-ZM;19+q^_G2~bj z9Q(0o<5v_s{B8!(4O-%BmW1DqdRRKC{ti)2sN}921M9{`1p6a3QDu-t_w1&#+&S$` zueVWk0QCfJDZB#&>L>IG`&NgMP!9_=--9zaRa03$(hr`Wb)!m~7CH>J4^Ai33A7!Sr=y~CUxXb#qE7^d`VdF024diMQa0xCE~JH#M03z zbhTY9timrrSiSlh`3VPQB&B>2ETcV8vSJVEP&fJQjJo7;!l@KnlamE4#$1J!~6=0or+^I{ygBVSls|AX) zl<7%8pO?4e8Yi#MOD1 z5#e}6fXU{H@)wOiPDa-&=gs zgRU^_GUtDLw;{u7%!zoRz%D12jNJH&IEtWmIN+?9Sx5vK_ItWK)%tr@X!?lCbrh7TAXtyvrRf#=sJ4N>aH^{@DeW9X9j%=diThw5b z7EX?`8?aTZ0DttXDAQmC#=~6-T}|_MYsRjBfM=KTp0!$6<`2!if@C!6@49b=LRM7V zH9UkTMZEU|8Ez6vf)2_LAyt5&%d<|VNC`Go073vX!S@T58_iZUaOfH$b|iY3EYO)) zaEb^o{5d|JhmCeD5#!>lYIu@Md?yj7l|xO>;N)fdkK4hb2<;cKz!UT}!DV7&pYtYn zaWOG24VllPc$R`X%0=k5@Ak|f5!NEkVe4Er5YH(if}aE!Vj%Iqp`5#h8@}hH?LlTz zs6t93e>jc@bIhrfoG=J6#27Y|JZfE5Ut5OZ?nnUP*>y}t_khK&GK4W6@#M=jaGV23 zWiS~N;{uyRbX8pXL#QXTb&E&dIHFpO9FD_b&V9J7%Xwi2E3%4FaA(cmQA;%`iwqmW z{jRe`l!y5UGs(Sq#0<`7mQG`cItg)sHB{-<6w(J#!O$yf^rI_M1oi~uWTvd%&)YL(gvEJ!VY!Y!$Frg!&xQO9-i-0-mtQa7D z^JcvnMS~50FY4@^Aj_p!)slt8E{%Yz<)<}@P-&DJr4?|F8|Y$}J5n%wI)Mjdg%Rx( zg~YL;peyw+Q*HzHCsBb&mg0b~J;evQTLHS<@-y2Q}EBeGJ=DlGj^DDI4<@2i6_9|UsdJy7>T0LF;Zexo2 zP2hZuwy?yoaz&zWet=_X{lCju14cQF?_pn}10MOUG}VjpCD_4^CKoZeN-mBMQvdjv zGf8It(_XX=H`=goOgUV}?B8e|fiG^sH{vKY2Gc^o)=83LP0Yhoxt(!rb&vZjh-sc_ z3{40g3!j`3AX@+C1Ksz4K9qAhk-!UfMjFJ>ZxR&TQSa94mxWD&W=z6C+S6R&J;du78#ktqAmHO4o<#{%=UBJjtAC z8NAKpJQ!Yb?mT3SGMpF{c%Y<{Q419YMj2(f#M?IqwQF zU`_R8RkkJFL+o9|jaeL|VX)75*h*BF2<^%7TMEtuChX&Au{X`oFBNZ*O$Yp1>Hw&I zdMIWt=ylnYM}zc_?|@6fn|(MP-P7YZ(7==%TbOIK1Sk~c^!3?HVX&9rO_1xmdrIP@7T6=9!fL^} zFL~m418G1D_?Yj}om^8Ade)~K(avMMC5-vsIG4aR?N%b2369g>nUR}obI&zX7%M}qudwaRxh>zX=9gJ6j*M$CuG1eR`0=E z)cw`5xU8|@d=lN?+B2K7enWjhQ2%JBcyQbn*?BjeJG>_lAtN?@VxH~|_Ekq=oc#yq zN?fB+F0|&Ib)VKU(>*DI5d^J)iJR0)PonblKlUw@TIXs3JNOPW#=4L6X|szA*k3lS zx3ke@h#|z0B;GH&b*VarF~Lcy524!4=6?mLUyI2fUGE?pjPTY?22T;6fzvB|%gA^3 z!~6Cc3mgLoCJaq%a$IbGJa%exd3pH}zrP;}JT)!TOW`uM@X#hZ7?LN-R4D8)?7X%GSEeSfg>@fonvMW1^IuoKE>E%a3q91VV5>0X;egl*cw-KhFHm z8g_mHIrv3wk_~~?d!ZLgjj!w>>y=qBgy(_n(yJ77U8cDe)7o#;rA|?Lae1TNu{B#+*Q*k14Lfs z^lNqzr9ZlgBX z7Y)$(`D`#=fIjA*W#>dQ0F<1uhh(Ic=Ip8nJH`_+#XnVi-SrF~nMu5$4TZ)Zxf!_G zSts{u)uTwzPIFNkhG1HY9HC=IWR8S^P46hBHN6HS`!6%AarbvTV*a`AAW zD_j)`j$qxOn@#(mqq>2Z5O*z zVMa2MOZx;0ov973(X6-9?=}%{!JhcVO!;BpeoF z#ImV(_r;f!6CqWZzqcPqW==CTj5%#@E(1_#`0d(|qXHp$0*z#8 zi24N2y6;_Fc8g0YXw;a8Yy>W$av+XQ1|S(Gg3~)sLYNkL;IDDXX3dUME_n~otiIbf z!zr+~spR_pbfKCx+k~0UM)fGp0T>#i{H=eL zBh9K$b)C@~tu1jq<50f(11N%{Xss%)Ry*M^s%0$4l@fT=JTs9Xhy1JP^*)!|&_exo zvpw+q9O6}S^#9oyq~Y%Ty@~^}ceui`B-MCay$gT&%1%NeRH(ySs0%;ZDbN7a2N`qea;pekxVtWK& zO52yu)c&KC5}{}&;Pux*MQ-q(&VZL@1J<(nIcK^?3`Urds9-TJW_WhWg}VRmZ-Y?5 z=hUPUncv%Rjj!u^Y$k;LTFd0MzANZ7c1kGzcpE%L;)S33Jd28G%Kw9FeqK~4{P@OI zQ8tvhY%7bZK3&=63AFnvzf17N2BeF^i>F6PBfEz=9bd4$I_ZnGZ+5Bu7htyZR70hhqt_m+RBPa>QE%fv zuKoM$mvV(T^-xF$PL6oOvK6|4N+!e6%dE^)JRpfXkZ#R@iZYn5{kAQ+;>%UuqHDgT z8oX|AH*Pc`+OHmr_$iXli-Oj7RJ@a@Pfm6}QJ6%Od15$$dTq<5LnFgwWxLUV+o~8w z#G{w$)GFMK8@k9f{-03u>?&w6-*jfiEU>!LASw)m410iU*c#NZnZkH$7wynC_84B58~$_w^3VYsP4YeXVzhseNU* z$~Vw2Q`m6oygLy^#NOs_H(Gf2vzKutI+npN|GHDr#ekjAlC%<*;6qq=+(P#Okg<>% zpp6%$Gsf?T8xRezdy6@HRG{6QXK?x4Kw48HLt)i-|Cq{G(lW@rMqx?kk9P={j#dY= zN_#NvhmGu$Miy=}R~2*|j1dx|B_@;Tq@}hFK8rePk2YWJP={IH27kUhGlIg5<8m5g zaKIn+ok^htZhUwB%p5+Dl~jS`?=yh(1P>cDBdE{*ub}&4<=oGm55{z5w!^TK*t-Bd zB7QBW&+$j){AX<2`uwC3AtxtS1&Q)GPUpZ~L#?i_w^T`0zWc3?#!kh`=VYRVrVGQ( z2%|QviEzp{HhN2Xj^S+Te&Y;Z;1bPs<4QhwsAkJ&my!@GlVSM7vACv1mhGoETh_r- zF_u$xg(REVlL~MX))d0o_gQB~mw#3nE>VRhdU1r>M=jT2E0YSPjF7(tAYfAOPoPt=mqBV^DGVzo_mPgWWEP=gRL8#25{bIeVn(F6xJ zK^N-5xzrcAFl4J%_5G=$@`8JZu>?Aw;2*&zbvY^yc0h0{`le))+7;J|3t!U#F zjNCZWRNw;od{~QRu6vg~2+rFF;YC2*;UO))zF;jHRxycSPcV&Po3&YL1ijpXNqfZt zb_0twX754Hvcc<+y7-jL;UE}`+oywkMahdBX2P>hN)qAbV^GTl(QVHJAs_YLNZEzZ zVUwbo=sZac0BZZ4)OZaPAXcR-Be||*53Vv0i$vR(_X9Bsa@E+ra&o~?Rd>;$ z6Xf{wA;RntuXL9rzYBh-;^xxnxKp|D_O|%4yMmJAphFURoG!OJa$0b%!z{aL_#+&u zE9Mo#C5}dIt_`BGXMW1D+$TFpd}Cc(=?VW->uxVSAFr}|{+ezyC@1l60XPI?ngx_l zN7MHupn_)CVTR+I4Zng3a4WkF|P;Ypf+W!?{E5_>y}ns~G9fk}#xXq~udN zq`VbivoP3*Pg?^uhnL0InhF`YH%9CN84dlfHFwlOOGrfnsYYcw_zvTZWj zA4uW~iKJ*5>(5d{zRPe7#c)Yfv3{7%BzG`vf*81zg#0lk?6y7T0dpInJ^R&Y3bMpn z7!(T453%w%6AQ$T*9P16-tmU|?Ut#*tICwY4TkTi=mg(TswYT^JSMpm%$sh@8*>L$ zx%31DWen2+&yR{S*g9P_ix+G)gOvKhS(3*Jq|8a-^88>V3(#wt%jEQp20v z@1{FYM%j{Nwc9$@dbBQJ}%l{NdUDM*pP5Wpb>`N?*!j@D#l@m&XAO%dc6S=@;PVf-Q_MY0> zfzq*QmuIlrV_qc67<)E!KCU?VMbSX=KIzPiAOiVkcx9!(8^F(5JJQ-Eu&*hbFrl_t z&MY0oG~mr2hil?17>#_agf*;dlT*5!>y6cHjVEqGp`s1Bc;}&|(UC>p+>{H*+uXT< zS*VwZ%V3ec4kDyH65jMy!Ns+`As@Lrg5BH9A}6v`hihB(@Qt0}Vh?FOQQKSq?yJ6t zTK{(ZlCavgPlYZ{`#>JaPXmbo^W$5DKv0Ht^bp{Aw_f8d^#U9OfI4$6#fVAWBLPv1f1B;qaBec_&)zIOIAB>}l#R?Vi`YCUllX8KIIuW<{~dEeK5ZGjk0??>%^w`voI>;-$;+4TDQ)A**C@r+YB$9ue_(n7-C2ZZ%F zo1yDj?+%oD7vrHw-cN9tKSqsSxu=HJg}Ge72?!Y8g4H7L{5P{loZxz1iFuU~^Z6k` z@$cWo7fJ_cYwk4%zr?i{UMP0@zzlp?L!)!9G}2oiKO&V+wO#*?B_yz~hPD7L#?l#- z{xmG1%vbAamS5Ig`a6}s{44{%keS-r0+|(^beY2CE@S`5E@0?E(Ote!ZZP?H5iQ`en~I&Bl$C2 z8Tw>xXU&hkdo!s^EnNV^t|hB2f#B!czxdiNd-GPP5>@DgG&WXX7@c1R zyv*9yrqA3V&SL!_L-jN%FcPq%T{N|?F*$6~JuZ>e zaeFc4zHHLFMKsC-5{!>^$$Ekzt8t(L?4xgxrr1%dPk#Ku_X3$f$O%ZHFeeI73Y zXN{}uS$P)|b=?ythR$eEk*NE|WO|%JSc#AT`s~(bJgZzzT+>chu9C(JAw2FtD|W^A z{C}Qd5Kh?Pp&Jv!nLXrPxi&;{eA}s-hWBkm@39jM9vUe6D0?M~w}^Z6^@`myO2F&q z&TrPRD9r31=3EU|zp*}Kn$>Yzq(u%n={<~i*Ac%r1pu=86|apyvkFcmh=IuB$T7C^WGfBkdQ~0HJlaf@J@!&y zZnKebJWp#xx#`YUzbI)!ueB&S7xZC)bcZao8Y~#-KLZ{eZe!0ylYV}g&sT&X^|JC4 zc=^7`NG!S5pFpx#Nygn!<@W;iKEhV;*tA|FN*tvN#pvXR?1v3vskLZq0)!T|2@XtK zM>LMEd5`TrjGib-8#>#XGBL+5@}iw?U!>x<-hSE1gO_pm!6Ge#BE+ybrb+I^# zX*un-yp{)t=?WyMnXFb@C~rG;2@KNmA?bsO0=NS@(}Eg3=X4KJXXIbM#1yNqROKR6 z^ZBF!ClX!lDa$)=nC=4I33Y_ZVz+PM+MNX0{wPj&vD6CiobZGE^MWw=c9+B%i_n-= zOPYZgwR8lVKEKASVekls%-T^jx)gVwNmQamNevIiv0i8Vk)zIJ_qA{C>FmUu(dD^c z+hVox^~b!Jqiw<0Hm^fv;JSXcQfX`Ury{5|TS-C{<{pIWD>meb2|?TxbA2$&Xh<DPDkrl&XxG_M%6{FF-(S>Mr9RI0}Q!5kiQ{v998ERzc{WJn{h z_5*E1gk0zUZEeR%XPD_Z;uI`E!pcE&HeaHx5P)W{JV48tq*&NFjVe;u@BiQa6Mi3f zF6`}uzf1D#99NlPzN>(gag5`7o0nj!ezw&0byyvC6&jBYoRVB>zt&)}#h|N$dhbTn zI`R>Ln8wgDqHNH^f&HOnJOC&(!GCS}r=N`L#BeD*k1Ddkd6DJA+ZeHdfv=i|7Z)C^ zJCo#k6knL=mH#ueR+$sV+M5{#%V~!NirZ&&PM%|oY?*6etHZv!RtwIjuv7u%jZQ-U zWt8MF(59uT<%sXkECqA6_$53J6#uGN!F!w;l7V z);>rd07EQeOLd@2@F>!|C-vIJqm0y;45uIAvPQi5!Lzt`h`Bi*@OEtbG^$uN>!Q3J znRQl=Hn*m3;@6@cQ~e2hA!En4<52&48zCqUSHdfCA;h+35&3s_me^Tez0V!9oAyX&8F!yLAB_-p?sJL)|hnW1wq`akiXe=b=l%JGzS+&04-`Uq7db+KOV%}cV#3!ps zW3?OUUb-Suk93letpY2mb~0e1^bS|~VNVC`$J{+(z? zf>jj<1D9_eFkW!>8a$5!G1q}YJfnAY`J>jk0hr&)k`0cDKnA9!%O0PtP{s!pwhqpP zBv6E(&c2zl@*ZV?-I(i>t$OV0iq!#StPdBCajNzIc4<>fhlaxgQcVuWf%g5}fp^Os zR}#@s5|_Ujlmo7oB)h-Cw~i$`pgQ=V23-F;SXPy<#e+>{s83fM^SZ;6(jA2bJfHw_ zwA5rY{+M97y_sZE=Vm5hg&hF=&K(?2 z!w(KKGR$Wvf_F>K^Ud-4hTb+pXb(*M6{D#E$Du|}?-TnQSQ%sO4Ed#dIUT=F(hx3k z6+sP2*@KJu)+HJK`miK1{&unx7sWe&6Cd+(58n+e32&Fp7$lzDgo#P80AfIg@bB676rC6yZ+ z*DC88ra1+~b}e%y0@P7Z7P;|8qXLmmY>8~A&WHQ8{TC=?psqZx(;#g&U>psV_jDPJ zN(z0X4xZ9hn0iIskXlOX(-a+O)l_IzWFiem6yZ5pu|I5++xmo7ka!9^7;HY{R4n${G`U& zf}Fu_u{x4VuC1{=05mxH1F!6qfIZotJ`4lgN9F|TRRdpdEDD!;=Fv`E2zE1Tszdw` z_crNO?Hy)SL0GVX#i*TKOdn99MLuiy`=4T`44jA$npaO|S=y3$V%OOC zpqV77PmFy88q+j&a{ih!4i4wRpxLz%fcV9*$5C)&BjN!TKT9F5r?< z&RtycQ&f6l0JPO2z1>wyl7VTj-Ym2n+0r334FI0Q4F8WVvG?%jCxOug{zB`)+;)hM z;0earQr4Cqgs-w*HF5^Dpr(!hX2wh*WK=!c?N|wsul)5y!5rz;In3X!a*ZR0E;Jl* zgU*`L1v&qW;Pe@9s|!~VM~3Q#-L_%6k9Hhm6s_H z@dL&8_^}Pxn!{YOSo-tML!#$+*d6g)d{;q>bVnN+;LX}M^{}fH)zR_55VWiUtS%ik z&VQZuE5tbYcW&h1!_d#f94QQXVn0Q}^Ef@!90=x6OT=qNKloBUq1}4D^Q)nv%OYB+ zOCEr)GmjW{*5W9aKK3K&zwSBYr?IyT?AY0t!Awya ze15HhT$ZTKR}{<6mBC?{g6|WJ7f;$rsq+IbbSN236w#R1FN5q~3&6%SsuPsC<8#Hs5#hhY4dzE3Hu44#v2T(Mk`Ci*ygL>gN zw9?$z9T)N%?=e8SPqX`HEX5i98?2q4Nt`EVo-a;8bqgmg>>BJ0g6SitD?oO-fEq?2 zOH`~t{t0`2hg0I&z(aXW`1VY)e}V99Ym7aoCflRDC4BdZ z&WG9;gxW~{h|XMNkr15~IJA=WNrpa(%+nQ?WqeFa@;`_k5e?nngokBTdM zoPIf*SC~!-2L89+Ci-1O@GPM`(W&wy&xd*_E>%!g>zQ0A1RH z+X{Vj@4lsDC9csToE$~^=ef-`CND6DJ@6za^WbT5Kc&#x*2bz8165W*;xu0 z?iRZ2psqZ+UUbl7PUS`H_oM-xsUx|UU2tdE;`u4e^4z*Z$E~3Q^sT1gjq32;QdJYx z&g`b0SbrFm+Zfx^Z3A4XS8nhWgD(XUW?h^%(NZ@8wcQ9=&4)aR{(U)#2UPHw7I3Q5 zVb=+u2Lxw|wzs{eZeg+TQ+Exyw6hif##b|m!rcFy=8Ic-gX>XfLx7mL^0Tzekj(PM zrGPn?mS~;PM=fOExe++FtWWFXeKj9*AO&r9>l-`svsRuDgwseWB~}JyeDtSHg`i8r z)HoOu);T9CK7If1<@4aJFDzPW<^fV|+~BE(kfbEx-!??lkJyaWK^vWmkOfUyVkQu% zQkw>{;;V+PspKn02S?p{KaX!Ghy@;5T27T_Nv`!mL^ zt#S^h`*&jt*lAVTL1;`Sn)X#&G)?)a@p;oa+tRKuUwfB~-z*I{pY zAH$zY&;7PlVdiNwVo{R*qy5;>36oHWf)^jvM#wJ|YIIjO6_=c z2{cNrTUtWq(SC^`;0@*L+9QxO<(a%jctMs5Y_NPlQ>VKPi5th#M{&&U12Ks24{&#P zkG^{YS6#<# z<%npLFC>>ht7AjV`|v;XC;PmJbbU*>(ru5n?HU9UoI6CfJ^$T*=u0|ju=KzVn5@QY zJZ!w*Ym4!tCp4smX=$DkH^VAZzKI5%1m!2PL}ufioE;)KsAmd1yJCIR!FJTV=q9G1Cu?M$oW6Pr$B&!*J4YYC z4CW8LsRYlQoMl&wEqpNqq1^UlPxOpq zvz>QJQ2HK@)>gbc3jOE}=|1>qTBe%3nlG$Lt$4Qhsa#fTI z{95I&Y>2!!VB71R1mOTG;`DPw*FuLV`y)B?1a*wjV>`LOP2RpoYFBIA033|d6y*km zwvLoekblxV9{gFn;B5k|(fANk<=%N*3{H3zX+@TYvW!bki<8Zu@q9>)%3C|Mf}kO0G!TUG*m6hQB0y9ezlf=)AZM@84L zPPGrg!oMf;cc3eJA9Ab|gJoKTFRLuh=%m~yO?k|6p(U%AW635W6aLX#Bgu>WokyY-puEkdKg6F!QF z!J18lsYLbN1kYMa%bT@+cSc(zmkwvv*nwb&g~+G}z}!OW7_oWoxAnn@2di@y*z?n2 z<3r7kKEDl4-XL{St{5S?ZaR7!X{v-pb`d4d$0XPNfkT~r;?Ve2)K%*kxl8HBlB zO`EXSaP2GUX}k$tfFYr)OAdNVB@UA9agAmE=I%_w${jOLPy2W8CKx+?QQ*bEdlc~m9FTAzUmKT zrqsAwn&w&5m?=TUpg$de>r-a@X7JiZ8g2E2(lQ$HGb~ZOd zMc6hE*tsJ_lJYY5^83$BVoUrTP|et+Q*E{$k>~5)48G~^H<((QKxtFY?24w(uHzV# zhM%1`0hQSFXBW5#*1q@QYcuBQ#k^F^@j)Kn zorqM|NN~TZ%deDJ;u5gDI%Ys&oj*v*SQ@-fukwh$wC(FoMy-{0<2S01WXN(g)S z9;w+lSErprcG+5{9Up_OqRgU6OV(OxW~e>MON4uO9@0fd(XJpxP#} zNvU}kJV)!4-bi5P^H?zfLOllG|K+hb3CTPCl3IX^m+6k4sR zpw3iBx0O4t{EclkGc(opPZcDOlzr1Rn-qBkdWyZoavBLVt?G3bactY?scC0#il!+^ zt)s&xTm)K>4E0>03yTrL@V1S7zWa=YzZGcUT8&{_X!p{X%(1Li`z54xHV06?muNX@?&W-MhXX%fyNhQ7|38n>uRPd58_Ex zS{45&|F6Da6OAl5_~0QA@^IOLB?C&JwP9^G`+M(g=8S1uRsL3P6jv4AS#VyyG?AlS zmv^6EcP2>>^YCP?wi+%xE&(3MD1v1Q%T5%PPo#rF)^E7=q_mQ9?xrRd6z0B7Z{L!+ z^=1j}i6@aN8$Gp?G>NbR?HgnBS6y_rAzTvwwl-o22-?6{`(WBG4OMR}F89Vw}WAHnP*mT%FPb@#k;hCvedE5^!1R|UQK z(PSTu+}!dAQvH&vwzvTIQv_BqT#>UTB`}C6&#g@MK)|7e+q1U?lDe}azJRllrOgDh zft9{YrKhJE&tGX4U@|URy7-q`^4F{k#8sB zOp!W%Qx~(UH(ADM^Hn+ZU;WT zJz7fwF~2_l3q*(rzhXTXnxXcqU;s{3frdZM>Uc2qbFkf%FtY&>ou zR6C9pRzYnxzVO3?idm6u!JS|oZqc-N*ysx@%r~X$L&zk5M~=_329mH!&OAtG6|5+w z%#k_r+#de(sK`N}q-)Kj40~I)Su^|HLVX^UqI0U~(Z+SDWzp&C(mJyVeD~H~9vvRe z*isMX+UdGefqP`c&*Io^7G}yqHNzh3o0ikxfh=BJ4F<%%bmePgZUDPBSc+j+)nFtF z3sc$xC+lU1-d04kZgLHD%*f_qb3_u5iI~g>F25Fq2{wKd-@SXp0@fuI7hTARf~iyM zUr|a82ShuyvyZt(Y6$m@_!Gt&uhQ>Drt;p$KEjAKJ0J5*W1(B?UZ})JNGm49Xg>ee z-9Jp__^@uGGO|DuJmyf$z$_qSwDA_Bdw1M7jk|2$H+$4pLn*cVOXtz;YAgkr-bk0X z9rOJ5;qSh4E(bujs7*Ft+x&@0r`?=NK|8!`{l%}mA7qs8lK^lXRBa`a#cJ;T*f?OH z^12ax?}^0Q$`lyG-|XT+^Ghn2WiUo#(O8WmW#wjdf7(!GUtY=kRa_XU-PS{@q6TrP zFnT7KmXTrYd} z$*d(#0hO+(^oE_aq`oKOIRgKbBS9Zyl4+ojCwx7epb6*(UTGesOfhd^QHB z4Mm###-vr9S9obikeT+W_+&wLAltH3f>_k0DC0p^B6%7zC`uIgoJOHB_rTljwixKuJWtQ9tp)@12Bn%HqWj zJg*9~3KWG@qOp{+@BXS>r>j|6<`sN#)Qux&v0fq5hRr-;Kc>DO*!8x(H~DW5wCz^? zFc?kt$14|JoV$<>bb6gk75ptYhhsTlLF#$MJT2UW6gBiB$1HTs?q{uu5dMfR>Gv~Z z$+ye=SLyB?Wc|fIQkfr#duK?UYzH|}7^P@gBco00zJwsW6*7{TUut6ISGz9-Ei8C& z3|$EvVWe#$+fy;xyANpyi!2fdk)9~JRsSS}^CP$SJ3t6-3UxPb14iVK@aDF6zl~rI z0p=xZc6I8!z-2-$lFO=fC)^P>z-HILzr=W}aOB^rA($!=>(DXC>pEjroAh20vE)GU^JyK#WRWC!RJ1zcZNS|2hl{nbxSnwcMbW~7CBYY6?e<|j z9AI|rbt!|+*V@G5D zTj-87Sdz)Vv8`G+Ado^6p5DLI(+Nup@{6wm6pC7^>QSpO`V1Lrj3mL9^TI$*AmY3g!;;tu~nas}@Y_ZgWY4$p zMCyLMmSSlXnz(F1`xx*GS{;?*5m;=cG zqo2AGmO#Q2UZU(k%I$N9y~|o^7Bb%LAFhF-88ZWXayV<{yuAiRby}C_~PEsJkX_BDhZ-xBY<tVP-WaNqzIcbC4jIRyslqfea^D(> zG@icfx6M1Q3ot4gLFl2{H$Rn7C)GIfQ@(R`GQehCwSHsC2WK;;jbr7Ja{0QEK8^Tm z0Pv}wVGaTX647tS?=gvp5Nm?p%r$U+M0?&XMbOUsJ(xTSvOwLU`;+^Yl2Ezg9m}f_ z8KO-S)5!mJPsq#Fz^ym|nx6}2sCrbpwB{>b)`<;h;(U)4?H^AS1j-I~UfEU5G zd)7?ABwYNRDzg^n2r8Am&g=q0#V{8;nEGzMezOllJE?{FdFToT)qOKl3^cpL2di=G zM&9tT{pkeij=lHNuY$o(&2$6)u_Iz31aeulD9$`D-AvoHHmnq8?XJ6w_Rdhe(&#yc zTk;r8TnoHz=}2Vh778r!hvM25>UQyjD}j=DV{jQx+1{k)l?Ksci*Uq_5ankH{4t>C z^TrRN^za^`u_-2@os-MvrXO`%XE)rzBERU49QK~Eb8ekrzC#gbl!8p)om zPT5JJEvk=lUL1`0fQD@nQ+Dks+a--DwU?*VumfN{mg#ucZ&1==B#ExQ-(n8>e^#|v z0qTh#LG`xgTpzq@E}Lyh!)}vuRIg1B^IvK*(*0;VfgEqayu>o+Cn(Sn&#c zlwBQgI>$Upz2?Jh$du;H)sokB3F{JTIgxAsyGSs^n3t zIPguv)`70w?!TRVshony`&}e{fl})1NF+bqXemP{1Xs;(NfIdVW7cm{WcD|s{;?lvnfx#w9!93 zC_xpnouSLn;NpoR#8lwMkRI}ro4Dt6l!c^L5U%`68kOJNu}zkL`xY>@^P|78lE&iW z{ryW|P-oBPx?~2j;l{!t$X7E1MG067w7#VuGxD8r<(cNC#oqzc0KcJ{C{d2(Y;6_m z)4>49>xD`JOk!9sx&jz|^`WwpT^biN?at;T{Nii#qI$qyErajgX6L{U~wcCr2U^$z8?wU#YvdpV?YYJ{I>Nrjv+ z5mW&nNJoui{()ZnrOb)3@V!GK3vInX^?P*`#A&Uv2`w7S79il65>agJmubO8XnuA7 zfUCAT3l+TeSE2dXZ`m7m(*a1bw{|km5p2G6VbEuHkfh{cX1W3jSL4 zRlpG4?!Tb1b)|*|zmN zjmgGt`N1zP>f^V|35)#Jc4lMZAQSp;^G2Tv9CXvmqjUi{H4(W5$e{Rz{s(%ti;MeB z{4CKP%IV69?{Dc>^Sb!lp|3M`+1Y1nrSjC{qPV$}12E24z$ zgTJtGz$?k9Nq2!jTjN$RFQaPt6oiYhbcfAaU1zzI_{0u+OZ759J8-aIu?sV^JGUO@E2+pu7>iV(T{06*|pNUWw9x5%HE_cri2LZMC8(LBwE8_z_Na_{-7__q32HDvD}m zbrtW6+J9LR#Y|s()WwNv!`RGfOB9NyxZuI?Jm3k-?!u2~<1)-*oS2Ef&elsw?g*Rf zDfDoDBJvKg6)OXCo_H&k*_Zt#>F_ypa}?C9S(e$>02m-n6uJuJ(oJfv~N-v6ccyg27jPZ|1`#oD`$>WnwIdwo=GNw zS7#>7&^QDXTJr4ki5k?^KA_-j{rb#M9CVdEGDf^4V~e*+Eh&84{+){3Bt7jxKJ*Tz zb8IxpyOIB{xlFtparTbX<>#<;tH)$*{F@CV$DPuSQ;%fyiEHa<)!KHJJxLxE}aa$hG)zeGuSF4WggJBt`k#8`i)Tp@tIlgbwVd=Pz>+@{ z-`oN&%MNfyRjGB~2=%J2Gf}>E%@%mhy(fWRl2b$uo{R9~KxPJy>Dc87KuFYp`C88& zss#)28++U{JJI(oZpyI2h34r7XlTV-`Q5qQ<39sn@*vr-GVS0dt<6HaK2OTsZvaer zW*s$XZAB|oQk;3@P?-Zgla7CdPp_VG#CjI+ zUaMw2tglxKy{Yz3tfvnD=NTjeaJwVO@(@2}FpnHZ&MJ6<-bXp!NE3D{!^lTx|Y$kuE( zSq%yucYXO{y1JrdK_T59ND%hiF`>|y_u7VZj~z+qLcVCKRW*<_%~E##Z-9e zkYY~CSW9TyjzZl<_X13o!Sar@u1SaMH;qw6WvigkXU+9Mj9#r$RG+r^%juO^5Ey0Z z{%|oZU)b>(oM;vNdc#PiJb-M%xKdl_-nVvog^)q{u8TE!IMEmMpZKGB$+iA^(|Lrz zz8p9iQ9kR2Cd66yOgMkQ{H)moQ)X>Wfe*Ht9MmzkycKSa#;cxC88^WQeB zK8J^{dm=5y!+FgiPmqs2v&gQH`-4gnr$t~IvDJR&o7d(cmv#jzH8j{vXu%KE$sj|a z$Q24vAW=p)3nld0o&9v0tr%aFfCC3zg2pXy#TI=WmcQn5>E|%1)0pcs)hKb#n}d{f zwBAx>J~z#>wl@f+({pzZsgG1XGkKorvrJ@=o7kr?{o)*DU9fh5&fHwG8lE_q?$qdK z%IOxPTxM2flc^;Ou?(wzzD(yqP00YZ>nFW#C z5J*N5(1H-N>}Zf7>_SGnj0& zsd1e!>t>{QVWe32mw1QgpYE@D33p779gu`P!3krXWUom2EDDj2iY3TVo)>RLyw2e0 zV7|8t_e;v{=f~rMp>P2%jMeIC|II>0+!avjSS^GCY>s!Bx4{F#U2ZzCG=X`rxf~9q zpGJ=-wPQ&!2^QDjtM3t7BTZtbs~3w+tn$8(;G^Ir zC1Sz__y^FLh*Mxza#}bAuX7~d7_N5GNbvi-Z?Jr{1ryQpt^fIJazS`;EAAWNHqU%K z&lwCWTotZe_?B>6&>}X0(DBYbFZyzs6L3|+!?$?tX>X-BxxXxU8s^*!m1xD#niM^I z%=6BItRk<28*P;%cMIO+&<=c_RDf$*5ah#`Pj20&x6oz&s zF>Q%k1z~Dd43Gr_H+JWA6|$Bv-M^%Um|QI#j>}3>NHIo~FWKNqw%*?pHVIM8Y?k&^8{O%miJ` z?z|4p-2!I(6{ig5HV+5I?=vJBu3Sggtu0Hm)G-wS3b~}xC$Qx$p)3t)xtBY4yq z9jq{V@`r}nlY8D(%GYd&-B4zmJlmLutc(Z>IM_*l=6Gx4;wQ4a|I++9TWUNTvQ?)WmBGCULecBZAp8-h>|mUJm}ZsOQ1sF-<)sARjV&Dcna6 zTwp+3J0b92(T;i-4iYI{Ukv{nYu*smtX;RMOg)Lr1Ewq-6{LnUy4u-D6zrG<(n7w3 zRCoKK+Fmbi97EJ*S6SW~o)G>C2oTvl$+jS~JlhN65%=rnq$D4BP>N=^-{M&BFwfFGsXvq|R2yhppT{)IU@o?oBYLFO^k&mqiQc7*_0dh zJ3VmdkS6o1(sKW?@W<($y;l8DB|aygkl3jxA$j<3q=LT}n;`&^>G9EIeW7eA0<<$##O<|6Vt=?Gx#)xiagH4a-*le1f|tl$rnQCPC~cci}I7 zkLs1+(G(+gRP;LV&cpZ4Nrcm3V80R@Q}>!*-%UjfPV_-*fsvD&(yhX30BzsCG(ud= zwQbQqs#sQEUY>1L_{+2;wi-N1$O}0SFqsX0V+zhpS?y2Hl)X&f{M4&lE#gv>F(X>N zC-)24v7hhBWx=9?FWe1H1>5AH;$SeRrQ9@ZJ1MI4L3_UWderC?*yIg+s61qN*e>)+ z0pT9%D~e7Lto(G!XeLJvNMEE@;cRwrKwbo9l%s5Pb<_#WoIm4hN`{fXJz-$!Z{=Ez zDK6V04aD9)Gae&I?qTz!=kq<|063`z4$j}d2a0l~0knJJMZiWa0K49W6f_b*NwBHL z%bnqMODw4R2a7|;G=hTd5HSyMKU{hm$LGb>?-P`U42QG*Ag7DbjH0Zds#FpD+LJtE zms2lWArK>?P+@9!B-et~Eo;{($lGsJ4xl9RXDfgPnX(KZI+W?r3bB^E)Y;u(T)rd} zW!w93tqdX>_;v+`UD2WT#shtc%8=N+^}fuCYsL@atG=AUtWDJ*o9c5Xd8KTp=!dA5 zd9+5}$n+bfQH|3_{o;T>E>YUE-qmkygiQ0?zzw6iA4|UB%eeMUEJF1?>rAlyl>Desk(nTH))roeD7At#W89ls>o5ki)qIcW|TYBW>j z>0nH-dQf12`xPuqmZXy=$G*olxhLJJ6}2_8Fx*f1ctjrgke3wR(>Tg4O1c=HEuHy3 zyh`sjwc@+Pl)CjoVIs}zUnh=!sl9J?xxt-2>Pp>GT$Ei1`CyyW?wSAs!ss@^_NdcA zd7wvN*rki#uGX$M_w?oDwkrDTyO4H>dsuaeqza1%HxNCQZ}NxVm@(2d^6w%8!2N{A z|NDXJEs2EOgCEi*MN-V&FT!fWVB*0Yx{FL}WW3>`BM8eogG)o7ROp&=$|uh=c~_@vdnFhl(U(4xNw9Sq_jKi%_IglTZL*tDe~pBZ)d$ zv9gljtmW_fqg3aiVf|epi@I%yi+QXSmfG;xyYH;D)-gzf8HLKdV}W?1bT7$ZhoY7a zN)sgskCg}0Mfho~?h^D}mb6Rd=^lOQso=sgDRDAjwP68?0_EwINclaVo&FyRPee^ zaBRn-+%Q(f3+kekR83Z0QRW}_6s_}(c1VNt(wV)bep>Tcqbn$aEaXfM`GCWkx!te6 zVyW3AKdR;D@QQaX4F|J< z`0F+5>@_zI%?X$~m(kD9?+;j^7`i|VS7u``+wQuKDmEHtwj3Zi2C!Ei?L{Z)HgS#K zJe899b{g1;NR)Tvi`SBpHJm~4_hLLwjByeWyWcL|TVc0$Uw3Z?t{3Owf28p?+|DK1 zf_BFJxlM;tnxC=c%f6561W6C0-xO$WeDWy^my|nsj-C%j?`coWkZ0dugyT~Yu4)JQ zon0G7ITL>-$Mad|AYdyhj~}FmEGyx~r~iU4sgZkVg)*}870NQ}t}Q3e;3ry@@$no3 z#ebU{AY9U8%um(&0ZFa08jR|!i=CD5b2jf0kw}?2or$RN2Z&KPp#x_846FO}DNMV> zc;A<1fau+Zuxd`{*e98YX>qc30C>J7o6> z`CYEOam_II#$PHgRS87>mII@hh8lQzhIX`N&nT^l9>%yTIh4Lc^xGRJ)hg;_SM0;# z+^PyolnKV|^C+2h6jU>s{$7u~77>FL@ z-Gv#yHQ6kU)x0rxR1o_!a%T+f4ONP(feHGtQ%v5@%p+UpxTb5AIOt-?wU&918Rt!D zzK*Ook}Q-ab4@sWirENpbK&3rv{iMa(Bz_kJGj71;(LK-ke@W9Pr_Oz6hQx5liC!T z`SynR(|+gfg_yi}pkgj?-t}7~#aDkrJ?svDEc$mC-N~9AF=-jdVn8x?p*y8Ds#4NP z4tYp88;(7Z49is=Gf|KZs8WZH9n{w5L=22|z^=1^H|hXLIVj0j=$x&W^eK%FaO(*T zg#EXp$|`QKYD34dvQGUR-KG^0fCZwPhEd}qQ2W=Pk58r=WZ0w5q%wn(>yXyo424)H z9Uh&H*Pgp+E>R)Y^%Av5?rFzdW={%R6MbY9UxU2{a{T@Zww`(|k53>Fr!8nJz8nrz zA5~og(wsyA2$u;=BOV`y%U2UmJREPrbBl3YJO>-s=_fPS+ttJ^dY9i5$Y}%~EW0xq zLCh~D6J59v6f}aXf?ET-EvX^#cUbE1g}=|GkjVF}5QNVppkQ=4Ov?cqj6cD`7S-IN zk|eXwWPSwn*YCf^#cGDEscimz+2{e1S@%QG!d3O-zw8v7%wmH&`y}2O4j$FNM~Ht} zdh11%5N>%3zM`VEE^^PKCZ)EJ`Yf+4ugv9;$g%r=;#rZwB!c(MeKigmW zm0UE^Hz+Vger(%Vp0$2*U-*yKawX@UG*iMi!Lh#4YzRtVY;^8B9JA9P8v_@V4J|Lw z*hCi4hU-RSBA-q{zW0uHGS?D|?yNBbQa5^CQ@x3llwou^xtKD4VSd-Vw z`xH!k9JgyXY&{#H9_f{LU?Lb9?x9>P-9z_f+Z=eb#rEZ{t9ByP@Q~YwbPv;m2Ujz$ z#g||2)tA%lT9QsgL?A&$_?7O4Y3y8lA1b>QCS+UpVV0EC^RZo|b?*QwH(90%BYUOi z=`mrTs9zJSY>*C9@@a>>*a)ovi&b1`vcO?tIYV|!Xp1m=t(FrZ!DR&0)dh_=aKsQ( zuZ->oy^{F+B1=#i#d}QXygg?zg{c0kvK%2I*C(_k&pwf-zIS=cQ^ymXSp*m(=hISz z8j^bV1vve&fC1-!b9o02I=_Dm$ozv#Fa?ykgoxeQU^w>;^lt~9NiN(n&52Uwgc{kk z?({*mGMyrJ;p?0X20*cmP)jT=Ue|(F^h%g2Dqv`%dC!es+Q%J*mq>>d$=H{+Y}Z$_+XhDNO5e@N+{*g!{;b zmodNw3$ED7O6ar5n&!T)k2Z4NaGoG?h z#G0*$q=T9f`s#OQ+5+k~Xd^O)%AfgcM<*zsrw1jdr7cV18>Zo4JR^LT;o}6Mv zjOPnfqcDIAKQZ~^Y7aI^{o*+{n6l$z(64fn(t=UbQE_p+%yE$LusU5({NcgDxQ?(X zHwC{Pgtl)55G4lD4z_1Yx2K^U0TOFwhwh?enHKP;^nQr9OS%S)@lmfY1>@ zKo7EM(y*aUa=2dW&Qw(pft#ht@$N#~_QhHOUsu>twKTrJOGy~{Cj{+e zK&zuwfteE;Osaw9%-7GXzA4^eJ+1?xGQ9CZzgD~~yL>lX zRWMPZ46KFW#JS0s{tAeQeqgTK26%+0s|{!a-Bd93U7K3c6h`t2?8OBh*a+VfdsVn^ zgLYr$9MytdObs%76f&&?&^ETIbY-fU|5C%AZ1*-`V4KtcoU)y|=!eRfW90>N(f!eF zIg?NL7u10V7KiC}oXkY%RXKc7Sg)mp2@N@SqH1 zc(fFZ3(+NNg8(z=~= z0|z#SQlN?gMUr-c=u8p|@)5H|hYN_6&)`tp7Dp9v4=f0coy<(;hI<=g^IzIC|7-B_M(H@<%p6s;-g}Pv2-82F8{AORQOGc>1 z#*TvlaM%AYNt!(K9#i8JC8;YN(_#Ki1sA-!-7me_VTv3kCTP@uz zV|Hp%J8y4iH16Ae4fmk!;Iqx|S<|wQZ1b0o{Jdv@ymA-Edbp66c)`PRYkgudL#`zQRwXC&~{!T`fH4H zCgSiQHg~Ns$Axn~E9bIIBrk2#@V!}HK_VsC(%O+8YGEBHuhG%{6=)kdr-&Ly`0aP| zAjv;hO0ATedm8|L&T33jN=i!~CpIr+3z)fvvgA`35a9Xmai$J<(;v-76?VKW&Ni!E z+iA(fKS4OFJ?#~?gM#T8d@%Ant7zZt7O@0~(g7?qiWd|wbf%lxYlPK>ftI7pakgul zS4=D<7M!tW%=Jlk)u3|wqg#mol2{Iec>@`-R+BT{wo@J1u516J-LTBDfG*D|qWX$h zT|PV^>3Y1DbK;UPM+^5V>bu7Sy8A~Q3sglvaP~)^V{PLew`X2d8Cc*)@T1Hf8aUaN z8GZV&S09DJZvC**Ggb~^C>)%b&?#MV|176qVw~DHScgH*-RDDtk{J`9>jKLg(V~%4 zBHyPfIlh`ttIOX%q&K(Lf2ch$NvUs}(h{Ct5mA0x+QBbWK7ihLFmFZXAyl3t_Lr0! zDJ9njlb$LS*Q-_}1hKpVu_waMYLRQ-rp#Ax?%z8B>IGu(13N9<`0}%)YXVovS6@_# zU3FMj?e7zNMr)Ar*AO^ieCK>HlRI)`zg!h7>m>;oo5phaZKMD^TYIW>Rs>BB*9U)N zo`7e%#Rweo>ispzXUU~2Og^ctAQcb~^wIYQ(G872(;P0!?Hmn7ZwJt#QG^&o7nHD* zf0R9Kn8?|4_VAeVvk)TUc%&+e)GJYd=BIU52cB$_-cTEjUq7ckGZe*qujAa0Ajr#y z&i@RrnUB?W@iX1L`kRW=+KMh-x|6;u1akS6$ ztvevlv;yJWRpypn17Dz3eh8?NyG2Q}J4^~toSmV}{oG6nv5bME=}}fXC$qdJspxT- ztnylSMv~wa7i$F^h@A&raca4mm-`$^j)Y_Qc(g@@k4OCVZJb;I(l`qGpMW-|n-+R6 z#@OAUjL0+_L>T?Zm8+Kxi%>S631^ANsrjQ7!ugYI%s)DT*mNycbTncNGM86krLVY^ zBS^VH;fkX@h`^JGv3s1%YyJiqZb^$w`1#XCX{+JONfI=_OuP&PzBG8PgIFl2?5egb z1Af^Pm~|s7Z83xCuV?07CXhiPV=LEoD%@P6UG30!Mi4+_rRTogGPyQlY#d2iIh5=> z?QT0v0`7^dn@ zBBNT+piB!2)g#5mGwk-1J1CJt zBxjIFweYFBT(ORVb{(#W$~@f_5xh1(wW$6t)lJ*v^>A){+6ie)0_7qcK@CK&=e+PX z8A!p(&E+z6oJQsg8{Kk&GAAPI>=g&He1Zq>TlFDFb6U^C;HNQ{R89pAzsTw41xzI? zf25m%nsg|0APh{;aD1cH&Bxt8?c|joF!*VQnnZL^Sv9 z*yHI8H@qz47WlPIU;H;p^~4Qg;{$P5yj1lw}fS- zf#j!85!4X7gDmx`BK~(f`0G&{F)OxNjdH2sYyQgUY-c!MwBJF*u!^t<ulQQL5KnNihg|N4bDFqrOfqXX{gyRJ z{7f(H1>u}h4ZUQn-~u;Bj+%aBWLSzu)L4`qR>IA)ebyv6_WR3ib;(#^KB0&OwAqOL z4qgaFXg<4clt7Z%SAGi`Yl(po{ff=6RB5q8h9&{ApC@tmqEArT`{k?0sWw^f420z$ z_@)DA2U#UBGee(SL$wL6ZvW(1?Zi0mo&ideH<@1a2TGCW)i<)8=cEH=3)p>^*fQTX zqu^EbDQ)=N&~3tJLhzyCS(KQd7&EC2FLK)4)zny*ZIB%4oRv?Mz!cOlP+9{L=Ctwn zA&PSmbm7^E8^>u)uHMThVBfhr$(<=9`>EROY);~F>Vr&zc9fXqHS0e`_R~`Vs za!Ana4I67|yxYJGH0|WZV$gD(7&D}t&L!)%t9DMCV;Wza3NxD@h|HMhAW&z@$v^#D zGn+6}>z%NzQv8koAgL2E{+;!>w=qhndOlq+PIppLC4_7SRm%&u2?dZx(Ww4w-y5%O zWDwD%JhoKd)Z%%0kxIrHLMDHPm9a`UTZu2>7^~z*D)b-q{hqA(PRNZUWBy2PU9Lam z8Fd#hJo)l$4&q~j(4?eSq26G_(n|3;t9JGhjU?n?B!}_`oS@mQ&p?yxiz4gMR-=5u_c%ihq#-pcVAUDseB3dxTH7o`AEDvf+>oe z?*ZNxzkzm-6HI3Q7>*_PANc>DM#lqUW-6_CmFkNFXFy2)E%OG7Z@HMqF=C~lumz2T z4TL~C&t+c?vFwI}ynn*@A{>aapq0M9PVtMLf}lp7X?e_^ugwYj^t9b*CqZZm|s6 zm~R$4CtAf)*U!Kn1H%*MS_*!Nu-thbwWN8jytbr~lgmBy&lpwHuP6(9JGkQh#$zBj z)%`c3e>}Ln_%Z7W7>t9(fZ4l`#J|*;+2Qe>ouu=|a$}<50rS$w%j{wUf(i{R8JsL3 zz>hbYQSwC&gW)cC77-Oz7fK!Sge~~p;`4t`h)sNfw)aLK(9T}HR7Oolz0$ppatm8* zKV*jUAtmMq6Iw{fG#sVo8jn=Sz2ICGm*W<(?vCQJF_H(67RKj3SG7W=)-j zeN(ZQ3%ijEfDR5o6%%?TxxNG|d1!a|n?W0I1EW6`5^%9JB*+|a1Zdg90RKM#z+0W9 z$@yE$5r){6>rIZ)U34F^L#)qO;PZ14B^QD z9|cZm${NhC!oy{@iOSp?iLszc4t@X(24|m=Yru0=>4x{)H=)iKY(c-uX8?nWnQqP`5Aekrh=!4e+=#xQ7M6a~EA)U|f2` zKdpw~L2Z~R0z8q1-L?U9bd}k(_DT!XCds(T9T?G6fn&aO9{TxAad=z6T~1Lm%+-Y} zrqz_jrD_+>C>)@bXdiW{=x1F%b`0eMnf%1bv5v8RedknH_I8}ImNV@sl)f=wkbqKc zvIrax-&^3_*SAhW2$AXx?R;%v{T|se;W9j$E+s-ZOtd*(08W#aW~5v>!+Fx~6VVz@PWjA~rw0_e+G^zLN$^ z4k|bqc^5f98M=&q-ZfR>cNId~!Nm4v6`!L>wQ87ZG&ms@8?fk9XMe%z(W9d;x$Dtg zu&TKr9(zmYuZfi`ve80_4De2egKKC0SqtJaG+X1af0*LODpT(+T~}Rc5Bw*(DsA{I zd%aJ?XMp>j2_6WwZLSJzpTVbpRb;n6f8P+Yle{yZtJC=$o%F!qCQR*E74_%O#iaUD zBPWOr6oNMIBE=?y+pwy=r>N4ti;ly^0(aF?criCV^xUP^d!p7mcs-ui`OQ%Pkm2&< zh&^%a=PJtc8Ccfy@X{hMdoo^{YM+za@2vtviFkcDoYkZ zfbZ&5y0@wiyA3~@&lc2Q5qt6Bo3+dV;FZMue|efsB?5h(Q0H?raf7fNDmr+lWl1yZ zlmZo(>pyK0mYuKfqE6-5oF%()2%65?*UG&PuX{0+r!oaLdw1)WY+P$oEIoIrU^1W+ z2Wp}YNbNs(cECcXS{LG|2FeD;M)U6xkA2bK2UrRDI(Hl_nVI} zi6d)?^sTEO=smD$xGx#7cwZOGOf4+=6p*S;9xtik4hWkj9nPRC-k|&kL=2n_qT#kr zWJbbA^>RB;7PJ5ef}dMC6{`5!XY6LX`@l>K`EqEjf`-!UB^iFaC#8GvW++IZYZ+R% z^GNr>&%7!&{j{00N!`OE13bUK8+ALnIsO@s9~vmBk&R@9lXCudv-CKDaOM$b2AX7g zbmJ?K`N{Jw2g>h9JRzZ$d6(l0j%SA7#-?A&p^p2)!!=ZJ4Qx@YN2`Y$fS=X52%H0c4pQZMiZd9{nYU-Y6KgW-U1ge}<2KXd}3Y0h0x(H&DVF|ff)M%T5 zhGMoF)D`2$l69<)WM;hg-{uPnf*qMBb$BvoMo(&NJM}9oyV%U5fV&88A-CPjM+~~x z?%KZdUXqmC*$6;@^w{?_*6>2g@)4}OgzU5s-nhx3JPMDSvdf;4qQn#B1`@Q>zMU(yWi}&sil)5I`u$N0!;;QA0t5 z*G48Wm$_B1FVR*;aE1w2do~CqK061VtPgm=V0TtZr=EdLgLR2fjoH-`vg;bl6OPR# zWknm2O=7r#)jJNVkqRQqwb5X=K_mm;3mp$5*HCc+LE~XJj&Eyp9xG!Ulpm2xZUb_R z_==wcyiO;0-M155sb71RP_&msh*`=5-tU?j+1l5-d#-SJGVt%x6##;MNJr<>O;1D*~#I{dQs1uTb#pVTdk+W zp;faCihm^U6g*R5dz+dJ2e}#uqC2VQ+PV#ASGthcLZgYprg;4pn=-w}_gZVjPk|UF}nwr_ZA^n z-J|5z6{p=-oW0bic_)p=Q!2; z?r%5QWV9`Lh^Q*6C^IM0MncC+aOrpD!2T{Ne1m0Dq!@F_O=cJqZSq9=M)`MFU=$9=vBj50>Oud{G0rszpgIZE?RfO8 zF_x|=URWHOn7BvLmbjJ=zgYz{GI=C}uZZi)-T*Ik$yBt)3iGqzkGk&)7yC~Xx>d0q!SDJK7ukp-M7L#7buWtG z%IlV3(KQHYReTpsJ@TGXP0v5drzdbFoJvTP#FUvaN)1i%r3?_59E6$hz>uggHTILJgJ7ZqK_RZ&(6?Z zZa^qz>ZMhl&)z$NVV)wNh0M-QmZdnW5y(}JG$%uzSG7m3p*(7)TRGV!OoW=D)LO+z z-c7YJu*FnPD#z>0RYNJTzyejKpbVt(t@VNOSoKRgtdyy@$6;di5xDD_lxE!8cAgO) zORIqQJhl zLtUrR*7fBFzg}r`w|AVV7_q#=2OT!<8&B2WAkms7ETxsw*?{n=4t)x@qA}1TgCqXB z-Q8mC0xR{~hqh`Mntodh#WPV`upQX|d(S!$$;D8g{B6c<;Rp+ZN@bxjv4S~{6NH1I zS^Tzt{&Z%GaDyQufGx9v)nmCao-XS4;B68@|Xg^qi~JT*PA{ayodiAH^B!_f-&cq`U5**ma%i~ zh&cs*4M`%`Wc+eMtQ+oss6^8K>ORHTW2(^bu;hP%Uj$s9B7U6fB!O0R)aaw^*IdMu z6miiMvI2_v6E7k$roks-913kYfQodsv{1J+Oag0ZJ2L?mPqh?-ggoaOK0s%bl z2xQhP5tQcgHzz=+WgE9ecLg~ERucssTbcPm2;qKQUu(9eIZ936$f3Oei~4)3Ma8UX zmS>G)(+uJ&Y!pE7@1E>Om+lARxIM8MYw)14xUgW$9>z}$rIJ%J!~ijd7d1Xq|Bs-*)^3+>^Gjn7C)Z{o*=u|RHjor*&%vF@X^ zkOjX3a13x}Bj#$evSr?W^iBN-pc`b3MlK%@W8JO|G;F}n4kl_KqP{)jzA}1Y4T`TX z383)7sD0XoH$Dj(iG_jx)_+kf3E4@u&C2V`J{8r~aXQhqLm-r8egW5QW1CULM#Ec0 z8*;t;-`Ob7Iq!zUOhap&NS9&qJSP`@)Tc06 zpHEGc!tJq)U^xG}ma(chb%gb=YjG7TKF`ze;u~^2cl%@l>Ug|QEzx~WWg!j+tB*vAdXG*@o`QGdffp^fgMr%%^!ZkO=ZHbcCi(D}Ym8fISZ8vDwEd8k zKPzAKFcKoXo-`v`-wzme)R1n9%cq`7BvS-$4r%W1Cix9L*wch`ON>3ra`y^0|C-C= zs1~6-jWOQ`x1u8^|0|0qy=gak3|1k+(!km)%tS+T^#j}=uy=9WTuvGiPGXJ$sT`4g zb0z)paY#%E?gcne3C&$_J6TWt>PRSc%NN`<8o{&KMLX#D90$$nIdAAg2*VVJP%S%h~wEq@f@VnZ2G8}bI$ zR&m(l!te%N&^C@y` z)tdyky-#(Ea>V4Qkq62)k1p^T%K4GN1ytyP9!7pl{D<0?wP>HRCv^!T2G6jU9|A(A zQpyc}Berxhzfumj^uWq~R6B6uVLnYE7K({|nb>MUnI`q`9opvr4zfb7HUM#WfeP(h zS3;ysTeCoM-+$QSe+wHf>qeCL_OUY9O36xF6G*K;>nJSdX$Q?S(pK##fkuUU?+{#K#r$J=7 z(7Gz!B@HN2X(a;(K5xOD_yP`P3w1L0Fk|u4@p`K)L3_V6sD@>Dq1g>nyCW5^;L`l( zwl@8)-V_k^u+w}M=Ov$U+QNVQu#r%06C`IMz(eB8DO!lOsdqh_zA%~ilYcxtFgCL? zC3WCtmyAf)m%pUhk)pLPnqU7yQwnpaBKPQNR21ekgeZ!;v$xU!Yz1NM2$12|c#E%@ z$rwO-C`1AZn7TcfX-z_o#molSbto5kvJlgt%C)_wiG@^pe_UGdM3Oo3A!@~ETqv?| zCf;Fhx82ll%@ihW1y}Q1v373HR)bq8ZkZ1#D{^A92<*WRc350~w3aFb^frwZt@<^q z4{g4OK&O)~SJcx7T6%g$UG?C~5PcG`%&t-+m(6fjG?T;N|9PR!QvfnWJIiWCvjbiG zMPoDyBr5toT$KfJCW=vi;Rn%p zfrC2XUg;yG@G2?DLNyze!A6Ako_1wqbL`%yhR#N5)4@xCE>@9E!cZB&yNH?D{dHh> zh>!s(#yS!c8)S8M^mU{@M5*A8M6|Q0;{8wvC&3KPtMT7$Pl7^I0zEE9=?T4vJP1mT z>HQZ`^Ek}1aSz{;ms0;+8RE137s6w}#k`#%Cp|L|=&tD2W3ZQ`nGv+5yU%Ot5jU(& zPM3c&poih*t>v6AGt+W)3skVv8Zd3WfEy&3TKQ#F2^IetN8JRhJ*02NOrMtuW#75 zVzt#NvK|h#U6P(K_O3L4|3CON90uDPC!LGgXLqf?N>uhOUkuZ6AFvlNodnkbvT5LW zRMw#Dt|?ZqGSk6j8F|9$_BYA?4todb`zaCE8MAU*MyWRem>tE~zvmtyThcu^qJf^~R#boKmxG7HvO9jgLo)UM7TslUeHHfCZ{Hz0rAAN)K zzuZ?SeljwZrGa{hI*i3v;Yw~TnWLju@Ly1U&7O~@e-y@hM(d{2oN(QmT(~|WHnAMb zlrZ_U(+`&Dgz!)KqXGk+=l+irC_)b@-tx5A+(s7CrNTArlZpZD4qd;|%}|CC%?Vhs zR<^&S$sSb_^$$E*1SnFdnsmU628+oD)PA}+IG zk?ev+ngz`a5x`fI*3;+7Z0#8<9$%tlJ22l*eo34XC925fyt7Cw=B6!UMYLDhtTpgi zQ$O^Fv!P}5CDTDqYFa#aQ*7|GJ|4)=*L*LRJaA<|!?#d`e2v_&i^Zbjm$R>xJ~ zQ?a+;-(WYeH`V(@lqF^@)+r%aI_F^l{>bkF$@Bvn@j>&HYp4d=^P9j&1$ynf(5}}>9Lux z+3{ODl)!?KT9Lj8{iz@Oj3SkS?(2$wv|?^g%7l@+NxT(h%ma930;*!7(sEm;()&%X zzSk?AsHR|K3RLdbas$(fwoXa!x4*0^T1K?`h%=j<^UlU;VW+`_q5E&ElBs z0^;97H0_Hr!+?Fg%GYI0&Ntc>MmP^87JiL+4NG|g15lbS7T>?fAIps{joc@mvBa0# z`%6~dGo5H9N!2F0n>pCc8DG2`01*RF7k{~HQ-j*z5VIIh1MHjV5Dp=-KQsu^3BZeq znUi;VVH?E)@l7q%_Q%e1 z2{c?Eejfg?iwJ1`(+Au<$$8n1;*IBKNaqh`m4S1rlq$%sYO**^smgd(5_$ErEoefz zolM1&>beqJi3W&v`PZ|L*&hUa#KPQrnyL7!`pybH$`GUWLlvDy8TC(bk za-W3LU{gNR2ZnY;NIM8CB0qFDSj^4LOHGA})+eFgcKMIX0#+foTiJgj5vtx8;(Sg; zv~d!WD_xK!UJ=m~68U6vC`x*IE5GH7I~#>ak=a9{CY1Wke^DV`>kC0P^n5x7+aUJ$ zC0Tn=Lk5j!)ddFq?-ya2AR-I$gs84yN_ArwGFxR;efZwZA7KxzCp}TMD z^&b$}1I*yl2U~1V%6eyFsx0=-Ar64ealDO7m1GP6di_$NXanSKY09f|qN7;u4Y>cu zR*x@|^V+waZl73M(6Z(ggCIyN@)`Ajcn~Zl0>!HBnX@Wc`h`5#q_4@K-*_ z%xCA7-6~IK-;;HUPPViMd|2#!r;j>cfl6&ho+Z-lV_6f zYHx@FQFTv|#~wNc*N$&%yzSAeD}{38rD&`3J+GWANHn_eY?T>94uH<0xFzPoEcn>W z7y`D=rIi4Um+ri#9=$O*lPBta=EI_j`gePPj!vNGC3VS-dD4QqNAx1ESeLs#K+5fp zturnkxJ>M%H^vn)3RD2*&p}v17*Z`kqksS+v?$)LEOp`+?U`nubbs=w$>2l@`JHnq zrvV_qY7DGyAgFQMe7w+uz1)Ez`?~8hJ}NN7T8=iH+k-d9q*sddn=tWiLN_V8exCUG z@_!JrHtE2DIGK?0b3MY0{&4r*YybgG5qJvwg4+-!enKVry19x5IrK%IXR%ZPweooHs) z0lr<)y*10iQA9aTCUT~B*pO&ptih$i8Aynvin}YMx?#8)#_XqeP5N8&1IZY*$f#_w z36Ih6KE~-gQz*LP;C<~R6U-jx+{CkWP0-ueDD0CO8wn!sZ@M$nI%SQ|9@K3`{EIRM zkZ~AP&g~vBGOA64?9s0UTtz=JS{FeJQP{j)wHnBV$iMhY9zF}X!{eGCg#wsx?bV>Q z;HtV)#PekCmG2(9{=pMmS7U>eGeV>NHD6D3)?}Q_0h3)5x-d({l3|ku`We5=vHw+w zJ;98sej1-BT#}>s;jyf3C3F%QK2sEbgfy9i!&Q-YbcbQQ=%vQ{(oPYmlJ`Vqlo0b2 zUbc0@gS|xFv|oj~$OQyWQ&Te74K43M3>(Xc*0^j<>O17fJ)ywW(oCUd*}t^*T0Ii zf;N!e-o1RvFm-HS@DxfJjZ#cMFT?8}G?%#~z8qbI(Xw{qtTA?L_fjo5~*kV6}8YiwoVm;Ghi+_J_yLfT0TVjB^MFn!XgfXa9!UE{Ue%2 zAoJ&zDtesy%1XBb65HEvG2gMK$@{=)e&j^^%g$L=#W7YLRq`ZwWGfMK{34=nTVNg} z&9}BZibmC_wn+iRxeHHaO?k=B{p!1sjk_c6nV8y&$5}v4AodLS5a#IKUN!W2n8zhu zo+G>Mia;BS@+LolOVpFi1w(KZ6u*PM$#maBm{o=UB6Dm+=|sr>WC3IZ;f>m_t9oo! z43FKX><)smXB8P{XCZNbg-fK8=x*i_xqbruhm4+uh($bHV?Tt-fJR-trnr!FOr$QyT=k@3(;RCRDf1O)4qDnUE;PIU=5rSux}Sd znP5`@Pf>4e{{8!RkDg$Qs zdCzA2%-7e#o(}OcTC7mRJ7N5s?p#~r+R#OsciogCxUaMyWHuSR_Z4w?nJk(ai?5tU zaNf~Slw3}2A7Y)NW2~(R_UibpVuPr8q|D}oVG0Ey67|SRu)t!gauekNLUva4EbOcH za8;GDO?R;Xu_r@YPH~?`SdztXbkhzhC=xk{r;ilH zb06R`Y*CvmPuUf|C-k*b{a8>45T!l|&Kr)kTe5N9k8!}1Hd2Z!baeHEJ$&^KKVhcNbWa~0Q{RH^>>uO32Ao(lN|}{#OKG7UT~y!LD8LQ? zAaYB&p`}jxF#}ife8dReOnD$*h@ca;KT( zL7#4Djvo=3KlCkjnw&e+kUgR6PzvXJTC%6G)`GuZj`7f4IQT%)^*;b}6$x)0&!DN{d4$BX=(wO+8SXQ;D)rnghg7I0=oMKnt!E3`a*yIUBe zZ-v+FrSzTEdbYN!fA^xkdIdK-MTm%dk!sx8t1+tzvgZtt1BJTwh?%i#dhxLqEC`Gy z@t&$+lF-?8`NP1ns1JbRayh(3k|l*C^yxO=$ZnzNn>#QdV?mLUjOy5a^=n04U8b~) zl!xKGOU@uuli<-X8O1X1}^keT)5A_7+LIv@(1V{a0<{l88*`7DklwgyL=?p587k#+c zY+Vg!LM&qr$Ts3U9nd3P5~!fGy^$F7jTn@{bLPyI5#nfEI2i{^C79-)hB;!n%>NV> zUKG6ta{f8WC8vH5-;@4$epKa;<{LelYG8 z*hJawVbjQXU(HuY$(TnzIbiCDhY%icl2TTLCa{Fo>fN)=OVut3FD0wBet1CKlQ9>M zmmpdjQc1u9VvI_Qd7}X1o2iiYts$g>P&EfHlZHO!=1)L|F_*LcaRZi<=-5)MFLu>@ z(1&vUcnc|o_+uiwrw-G<+jWoJQ?%Z+12|;D#^>|;3l_3lU0`P4)bNi|vtIIUD8T$D76K6J_HSC&PE4#<=xQWk zUO=G+uCsmFw#@{*)kqa%dz4+EVk15S3igO4ALOe&*smF-*9bh$GFSW@+9!*Yak1;9 zb;Bsnceo_Ax)g;Kmwk*Ws=&KF-lWQ9V;Ioxqm45II??pDT#OKPQZDon2@wq1I*L!) zHjX~eZ_%Mqm3T|A<9V2CwZ^rNb5>~eG(Y&q9L~qJeT#27P z2U{S6+uWuWvW}pCekDQ0WK-kmhNvhIPkv$yzR#J7U+eOXI~|Z7|IA45x|UErpVM!< zG&Z)lmXzw^^^`$9M@(U~3!Ik(X*do|#Q?OoZ@-tD0@*eWMHTGi+=_yGyfx3S>>=ka zRz4NGqw<;#`}Cioz7|1JDqG~v<1pZt?#S`BNKBP$E&v8{SSv$=5^bZ>U9(g&m! zzi4$}ox-x>wF44ZPLb@cHngQ4SD!-$HQv>5vD zVMno5Ms2G=yqfDKH(b4Rd!vY6JSxZ~K+*l!kvFR_5namgm+u^qF&=?(busu$YNokW zzj{$tMu8o6NNx5G=%_={Ffsf3haQpvriRTGQB%EW<*}0^Wah?YPOv6F3M917F=IGg zK9TSyhXN#m;Y&QLj3LD_4K}Pbv{RW^2c33;I}KXz)`XgVgDh3^-}=> zG6k+g*V6(jx5+J=F~DLQ@k)2y2w??3!wZ=mLOm}KC=TcvvvdJPM?(?fGKhQ>3Sq#r zkyL=$`|ITb=WplLwUq~ilPP)Ln}tgaqBpVFL%l~@u9CMiegWG_-_2qf5}-+&z&#U( zVte86$`|T8T_Dg5waq80kx9W(S86|%O=oqyzQ6JJM7re&2aV81Cag#yY#lBYJnH(% ztO(UgsM7w?RDB`|Zz}0nx$=Ro;Mdhg0^=jE4yk#%^-P2Y`;^GT~#NpGKFDygQE<%fn(qH7n!3qOn4tQ?mVNB35ufTE^0R-jfQTc zWzuIF$|7&dd0$@y0GiM5%O!7entXfoO%5FjXjC)zDcl1RO-4$?F1%8mQ&rsV*jN4PxamRiK;W3^DW^gM1 z0iYOt&X0k`R3>f7Vg{VJ(DWwVdjZN#}6oI^Ko zj`0ygTgMdU!zN$TRvh`nUFL9hb^;&p6xSNi%bu|dFiQ&-uWD;a4MIfbtA)x&WL(?r z?Jeh3>hI_#2S8ycpfi5`_4*CQc8vqV&0c6$35PHsfRAuf*6GNu%odQLtZNw9K4aJ# z=g3W3@y4j@@NE-`s^J4i18x5(_YU%H8}%_W3dORhLow9ZJ}eRx<8Jg}Db|BE7yEsA z1Z>5(*~;Ih{;N)upG>!ZeTxP=HGpvMZEu>xG25$>)>DE>6_iV5`ZrBNa$HL52U6T9 z#lU2vcg^F!h51+0`~I~N$^vdM^YoTTZlKoXRbhtr+sK)(GyiNR+Sw+I$_3FAW6&~l zI8BcglP^dt;ovO<6K7*JyLU%isQ1f^`Vxl6z;2b&brxh)Bu!(t;n*$LS%5K!BmFLj z?kIYR0%eXkatyP}%UuxO%y+7%9n`Q?0 zFOVz8K0uw_lZh(Dy}a8PWOEL-Z0GSu-c^RVe(LNo^Fv0#Zk@rJ}m zh|wN@wurc(;PV6L4j{Re5V|5ZpsAi)WWc?5fP%iG0*Kw-#jZ7*?&+SdPby_$7MG}M%5!Ia)o@iqfcli@`Kor^g3 zudZlUp+hSQvfvJ={W(-2qFP}kF-J{tH&_F3vYF+FyvatVJw>h=22`H3e^|xcI*Sak zO%-(`Y(KQWa8ZER}?#7!eK)fryriHyPC;D7?V`&>r@nkh5Zq$ zHP-6%+S%b6W*D~gFCI`Td&^*@XT)Z{s|Z~|s)Y6a50m6ApC^A%U|=8$iP!Ll=a7=Y zz^qE~h2|O&Jz8Mda^o1<+sa!LqX#Sv0~I;`cZ~6Q-^aUEcnbi(^vH3Zvs}gG@+GN^ z_cVzM9==_(bRlk0kEw>}^J8#;4$l_P35pc^KrU0k+*O6E?)l?~tDdTB6r`#x7YYKw zmSI0+M!bhxrU74X_UOD+&WtfO`xDRUw_(A+KN`_5k-+z0y;&b(XacL;Kjs0XX~aI9 z5a}hoX~IS2a26C4$UcASogu2>zZ_dlD&hikN-39?uMCa70+3}#hEf>xJ1@(c_p6EvH^Sh4+BTs#DUc;R6(#kTu_b*n&{(r{q^^1VEBzff_bPXN+ z!{Y|c|I_u&w~3J^6G5u!(jHKle5mGet1*#b1E@8=2eDIG{&B#KJ5mFWLyHh&0$Sdx zLcLRxER+Vamfn3Qz>`IsGoGOat*+hu<}Yg=MfE^30W)dNm|`b#07^1SOfr^oPhRQW zp!W-DA-4WnKjG4puk4DI6BYKH_p=F*DeV3&N-QnNN#4&+`oNzw*&41m^5nRazTOgs z_pd&I)gTAC1Kk99qQqKE`-C{QagpUSSf{LwC<|bbAuyWhY z7plf-ExuV1L(67ENbEiMG@c8VeZeqG;sOIHRFNHujQkUgl8*l7LgETY-|M6`BJ1m- z!Mc~-b29$Yef@8)q~wP!yec>j1~`A{d9-U48GjGay=Dhh+q~f9!JFtn3dpVyVB%(Z z%Vy5ePSswBKT!T9P#Cn%AqP{Fqo`;&4I0*}QY?br&D&I}*!vlLb}c7(W*<@;o4+e- zkeM2^W>McRKy1V|J(R`&dpMHyw}p(f3iDW1z=dz1QUfw74I~1l4+c+a_WlC!H?oib zOrL{;NY#ms%Y9-!|8uXpH$I7VieQl2n;9=>2*Vnpx7-;tMAHwrxKGbn{O+e~tEepE z?dpkKoh(u6^x`v5Izk#;=E6uj{E7V2hhT~%a;r&(v^^3}5|G7C9s(=Ktkd{!K-nVQ zqVTL&q;NFs@=>h$)kbykDQO1zYk7MIH66#*`!6y+Z1#`vrCrBE$>9MT88#-Ooi>$B zrC&1RB=Zt?1~*98^Xd%rQ{S*;nAE3bpH8hKauZ!#eLbfxzeO zOYD?*GUIyhJM*~C0_W!ex~Bw3JDa@FY*dRmib4w$5Uod1-j<0U`m6JVcQ?Hk7WgI4 zc|bz`6JH|Xd`34rY{!BK9C4iap}Ie=gMYqIf~Z2WJky}7DfYhx>)?Ent|zjWK4sCB zQbl89L#sIf2&$*O95lpsCMs10?F5$-d`lq3MSc>#U5iirsk9^iL>V|5 zCj61Gr_@{3-S56$|9Voz>#jU4b&&B6K_8f5Pp1fV2jhIH{E?U4R$ArZ;D^a_*#-2? z)qYiR!DFNkzMRaNE>8^{>56H}p&0s z=fnnTMR_`@F9Ti{HizY`;Q7RB#2Ql0e((UqnEo0AzkpO=jreag+)wS-g5BRf%GCiD zh$se4y~L}KjwdLvpY_Qo-aa;^@964EoIHTEmuX>BHbD)*;xJp|D_%>3R8o+B*` z_65*a4-C4WeU5@h7QS6mR9vy?e;N<3aZcmWv+O?YVlD;iUpVr&T$!~M1w8_BrcCS& z{tyrIUnoW91expkdst(JQNdATfIak6Mjsn4mK>o?iKz_V;$V1}T9)f2OA*I_XFv0( zZJNhjx6v;`3S=Lk8{7kL`c`SrIF>6KyZgO0;eG7_@k1i(!72M;p<;AKAeQBwTB`bx z@F9rKpHj3p*?Ia1_R+mFFoh@ly>{P6)t76?5WUKo{_{`*xbvzoZZbm8U*3!Z{O^s9)?)QG2plko^>`aH4-`T z+Qc`x)b>*;*-5w_rrd!l7A5MQ`VGeI?n)j@6ntU-H5Vf{i5kNZVs z{lUgNi_S`Kc(F2~GSPOFgpXrj^ra%o>e>4T&0!QP=V%xkmwF!j-;^k)z10PcA;Z~3 z)^RexMwOx8#aSA?b7L*LdR z&v18ZnIg3=)JG(kjuDszuknGJy!Mv9Q;VXrh}my28tZ&D(k<$^V>iLIMs(n5J8WZZ z)bs5bO(2@t&s+V(L8crr4-m6kx#sO_c#&8ZD9XLMJ@?ihKN=ZL;(T`6H9*KaN2(VU z4gG9n%gD(f?WTbc*iHzV&9$^*48@19}=Erh5yMZHpSbEKGSg#W1$)t&rRMVkLByn-V~3FwJEj3p*FkFQ#PrcJRi^ z3gZ;(49eAS1=oRM`M*ZQ0ir9~qqa{KluIX~f?Y_Er`zKN zr#KVVo2>+u4O*Ms4>*dNpL2L_vry*@)%L=;OOBa8&cN0rcw0xH34|G#!Lt$8hCH>n zy7iAbju9z2ZhT9FASH$Srf|QH8hmhg(~76QHu8H})S`yBI{L-^qsjo`IFF#-&Z7y- ztd#i8x3i5g?Mb&lAQ?2|t}^oifDLl3CY9sM-8Be3Y~0`h8}>LZM#_el6|Ag4=G50*f`v&mU%e+|03frQLfC>y);*2?$F_y0mwJqIL3^c3CWvjSE?fsva?|$ zX|RyB?~SQCbrg4a7q+!;BwL_t!jNt<^w+r+aG!;qM%B^RQ`IkX;^pR;=vaATgxy*m zow^@z;2Gqkmi_Y2X_dF9H}WWvDYpcRj4H8GuqS)fM9d;{RvK4W`lwK-CW?_Zob|I|11^tufEy3nVw>BFD;02dB+`w>r`ZKCt66T_sgXmWnIvoX2&HhMC3VK7?3e11Izi1lndamdVzB`(8>Grt5B- zPj0N-Ibzxmw25cJwLX@G(ul?4ADMi{qNjUVY3K{*!l3d?*23|Se!Ht49iP06CXK32 zzPv&LXAWRVGJzA zh8+1;3G6~Z?$mx;P|mBu0d|~?yl8Rwa@M4Y@0SUI zGJALQfPhy9e%DVW`1MWC4fNnO+LXcPM7F=LQWaMqytWKgMOE<{84>ty50{&sy`vcR zsy;$W)s|tITQH>47wvaYH1q9SoDdc@3-M^qnIHrJ#-RIA;=~hb)$c`K=vyv`Drv)v zqc!2O1*bSIhNZtoS&4_Nvl`?7p9%+n3CewX~&Um zl%3FTX;46QE z2v-&`b>1Ky`xgpHj2q}UNJD@Z<FWsezosE+R8n#9+{$q1r!BQ=;Ej^VV`5tX=FjctuzB6n8~I|j zcXXj9F(fjfU=@30aakS+utT^?%&w35M6NI>6pW4>6}+(yc^x9mL;}-Yml1!^y*23fS@1M;op+ZCkbg`s3`Af~ z#I94`N$`jcHTpMzjwDO+&b^JBvK(#BTRy=@CRPr{yBv7YcR0&_n+-#t9ycAuq8j$H z{UqvM@^a1dvJpi)`wJ~4q=;7$k7(*}{(~8b^1sioqi8KZkx@}c=PQySF*R$HR#`4_Ma5PNRfu1@Ye^5Qr#n(0WCbNNLW~@ z0RKM#z|8H^lIj-2kMstJ{JUUs>>JbHJg|8i4?1tGBeuK;{(zaogl#neobN#uiQcFU?Z#4wbEmxs=m6_fD>Sxwb z+=**f&f>$7qxu1RNf@1qSG|b>?)y94Wvth6ew>T5HwaAQy#7{;w3j}2WDA6R^T{8C zZGyQa-UwFB5f#aiJ8nDGShf@N@o^qk^N4~kEG7bD`ZiVmx1uGGCAt!GRz|qKJInzd zRaY@74p%)k!`fgkk3fQ-S3s0kh1cM~fl0LjXO-D( z$i-8>f8C0bM?k>2rNNQ7T2QADGPC_##s=mpsuMk{6U6!#4qebRBq>}Od*yp`OVGm} z$CrfQnnDu>adNj>ZKREe$dWNAKo$t=3osgOOXxpsll|+mco%kbqe%cVDQvR|sT5>! zyM(=CMX)72e`CE;(6N|^&pR26ucXg#?6yp+C%^r_Uf3;_hPwbN#uATfd6guEaE1Bi zrUCDlP{Hi1rBV+FI^1qam_qJ38e_$A*VcF=$hyH3^#3AsF7@uknPyisdbR>BDL>7 zbybV0qrr=~L1twSErm4h-p0#3$?EzVZwX9rS)DYIivMa42jWH6ofko-nXxBxTS*>< z@z5~TE+xkQ%3^>ICGDz}$-eQUG-YbCM_w1T3*7vGCxs z64?~sp=b2VG+@6hB$SUwY`X#nc+sjKZTCB_?GV;K3Em#l%6Yf+g5UI)t?%#6LvqfW zM?64xw8T*1mg%y_9bV>QPAZu0A`3F-jf77i!OZ@*FGhCFmEiQ+YSIp=BE1WUJ$j(MqM!vPxB}JKmrT*YK&wkWghc4ZEXqT)kE>UyjBW< z&!I&Cv<-614K~R+sWuO)i2z^p=MQ-5DpT;`r}`C%z@=d#Pa>9@$rw3jpx&&H`liMX zVPJh7CrG3L2JVC0S$57Awc%Uf`#f+X$+Rfd;3eUOMc>DxgjqU*a5|*m4cynOWa*Gh zlqRFTG>m#)Rfm}f=HnAqNx4;HQ;^&-DTN??5C($DVkWNfSNc0{eNf19^awnPe}(R2 zNBij|SICrGg^G8ESL?xGw?d4)hsP6g#C0C1iwO;}2TWosQ#cpxhZHxanr>z73ymA& zWO|G2lb}~Yydk%XPdM9D<<%7u&L;R}7T)cfF_%;Pv~Jsg7WD(}V!6aVw1fe1ungT) zqs^2h@dk5Y22xydci398wy=FT0191{m^FW(vi+4aI$R?-?G;!dtV=3lEKU}ejK*>< zEg{6F5%{!u5n|Yo6Nw=1Hse7UGB(nle!QBL>~f{jn^`_Y87*~vW6wKRnyB(I_q!xQ zbxJ0lJOta5g0${}>GQe;fJ8WkszKTuKr^xyfHtDup?DVeDvD60y)Sq0F$p_comZi} zhu4@cwwLR~d}#em-XIJFHIQVd=|skBzw;l9kx(r`5mP&p%cmKs#TS-6j)iFN=Vn3< zpW~@5d^!v2r3>?^-iNv}7zwP-(H|}&WLEA8R7X^BNHoPe!o!@u1Hs3pNT-yxBR(d) zyE~9is^MO%vt7o+UO7u*LhaFjOVJdeJ5KjyB#{Va?! zkIjb3Z@4YX>=|&flWl5q1{}(y4UTrv3AumA(rI28n;QZ5gPJzxz4Bq|7XJkfn3zzn zPZqELRomWD^LCcSCV7gI_v5?cBJPxNH(F&ohm3k2@%q_8Gio}uJ=vK%2g5<@gBym$ zzfpX{+iWMI$AV9=z|&Ipj*)pB?#4s0JUI&FVMj_rO^}PZ+$Tp`Es#x2)(^h@E+|2c zVzj|Cm1LP6^jz!e%C=fg%K+E)yA)e2fKIg~)84}bq5#qf*O!r}dX#!bTn=xOd(x-d z`VoS{MG0>i|8xXdO~=^zaIb8Sff<4eW*4TCY>IW!_$Ls=^9{%bCv8O`ul~UL7i~j2 zgdc_i^qvp654oBPjGc2v7xNlpGA<*|DaQ>_MAeQZbun!`$#CubjCl;-TnWXyESy1STj++$#F-lrgqGp^1?MPw#Hg>nb<{?4P;LpDRqBBwvZTS#QVK? z-^vrbn7z`eTjA+>lZZG$+*XbETFGrLbj?r}172hRV0;%s?O}9%{LAWK^y-a!yQ5p5LRBu#BXG*&8tpF<6ov})%f59Xc1RQZ87=N)q9RG^KcpR>3)R25HD-B$n;Zd&e|jHdE^&QRNtc)mC{!D*9?h8s~)C_^t)-!0WU4} zl5c4aGNI&0Z&cHYEkj@#xavxcW}#QKm;cuv9UQ&-=;Z>6#JC-`GY9|kpTANT`$?Ky zuMEkqtEuV1@>qsZO=gw=3scL8EXLnq0dhWJ;zPt#B6|$EJQ1i~p5^_|0N(~JGk~yV znZpJ?zss&#JeR_(h#N|zzE_?uzv{yU2ReX_FN@gZu~%gYg_;|TwcVkqlHtMU?TL7# z?WcRpiii1@pJ$|@ZxN|%e^QDONHj|BR_a~lCmNwAx&!AoHM=c|=?EqKUpl)+*)uV( zA&S+VKJXydh+jHZYUd+xDbDbNft+F-vz|cRJy_i7iPoYc&LwTq*a$-Sn|^iT!Bqlc zmU{xHQavHUEETV4kvQ%n+kJRO1DKhPfbg(FhaXFbQFbWbEg$r_8SMMN8$H~%1x){I z1XKwhvVi7zj7`rVXNEBHfUT*Pra563awe>VmEP)X#xH=p997$fTtCVBj3?J9V5nHi zG){yakd?Q;1zEY_^T9SdzN_Oy8M*HB~$l&ri7LXnWyQf?1A9mIzIC4LD zvzhLVtz2D4*cN&Y&Q8DNwGybY^bd!Co(sdYz5QsC>eX4eJoQI;Ifgga z1c{MKK*53`+xIci#m3^*Fg#*-(Ld$HNnq9(^BhE+ zp+jFFD^V(Zhe4V2mE3PnjkP*@IB?7~Q(b>C-qD8w4PtmA;pyp}c=lVCJHXMf98d{X z2uq1Fy%U+d!wqS>TT*dVKCs@($z(AY;c|f6X6)`3#uBYLeP7n%AuL3FAP%Lk$F`n%w zV2cgeD1K4LME-C(-}F^ddPdUDH6)O=#olPuTuO>YO>BB$=k#EDBLj-NI5i*b)f9b` zK1IU1_MrRM-{)<^M~vIAW@sQ6^w6Vw3x?Uv-5tu_89~GYevQe!BU~^*1*p}l46@Kz z-+~%DNqs82kp9}Dsf4rBj?}64!xIrsDv7+Ef==XY@3*jOF&7mVN`zhEXq<6M zUA%sg5DiwN?$7ncbR#x=p1#)#+sVhX|BKO1fU=`H@(#ZG3|3QZ`owge`;-l~5xfRC z=asBBsSf?;hVv3bw(+ZEv$F;r+aR_4CW&8a7}1Qo3ATP{$=t5;>(kf%E5Z2IA6nJ1 zZUT$76JhnaILRu78*s z<}prdUM(YVm7edI^3B^pRQ4XJV@PD+^;=c+=gwAv7{<~FuThT2W<7srBV>BCpihPs zQ(6#dxn%N1(y4R&B>yYT)*N6mRkYP~r-2QTw!Rsee8+LWTUgXu1Kxzw`Gs}qzu*r0 z`MC#z308FHoV{xtxDc4=onC$B+>9^$MGxHFI{g?c>Bej)!kFKUK<>v7S!%+Ds=b}N z%_!j_$UrJM6vOaz1Vzb1FzxhZmVUg`f7+v%JAvZI!;N&g1+*hPB|5AIe?!L}D9YpZ znG;w!=?oi$=@9bq(rn(uu<)V)A!A?hB_{Q5Q}b$T!AWr&`nnj&1gUtixl~AFGOUWkK*8@qHMk47TqY4_<{q$*3MUVOSHq?9@xFfm16 zW7&{$Pz!3rFA9O-qz{|t4>{Eu(4DS_lMdDGh}-BA*sjsUn~A&Z$*(g{Ew@f24L(g7 z$7cKb7*QWo^K`2YgbLND+k)l3TI}B4{*i!`WjW^sC_7p+;)D%O$GE|_01QRg(DVuw zl${|4c+TDbobbhnF4NON6;C9hHbg&F;07dTc9Zldwh9!v!PXnQa-h#}QQCoB`vJZh zb4(*VY4uwO+V?l?xlgX}F!_xT)Qu6?FY<2qp{KDfk_f|y-;2noPB;jOM=A9~O1U9j z`@+srQkO<>nVzAp$H}|Ns%5y{tXi0GH{TxMOkDo>C-)|7ROYC{O9mL_sYigeYRzeJ z4Rkpb?TzFZIC1xI&exC9)b3IGtC^@d2ZmANz27a0vIOc8&V z^#)M04mU$zE^>JE;RzIl2+o8&UL#=pGqJXb#cXX0!kyF%x)jRF|5>JmaX3?impGj$OIfV?93&k3rDf7kUPwv2^IPU%*g!#VhX&jh ziQpS4dTJ2LD&)FBntC)^lrQ~5pP?1W&F9zo<}xveQ54xsQ|oP9Xp%-uzaD;3#4zW7 zKIbTuEbsb@Hmp#-p>sC08Z0}?f+t8^I}&YNG0Sl=H6qU`=VybkV#@E7qb+!RgHIL4 zzQ`y4txSe-%ruZgjfWp-?h3QBR$q4|D8$4Sb8_a_3@6DfX>Q&LeK)^(!E@_r$urp} zKMaknXKB8a69N&GnCO2c3hxsSGcB#r!_?={%c5qC6ZtM@yJDe+%9M$ojO45z{6pun z{&IvN)=_o+IYJ$T?bH)o-R}(T@y^{4Bz({#Gz<|$ZYM>mN7*LA6xVM8i8&SS<3(8N zb2l^<%FA2jrQP@}#S;dYfHtcWeFl*l_x#8=?IA zHI5SNgGAje$Pby9829yx1lHJ5^?&m9pIa(bLH}z z9ayyv_&V_OAb;Sv&uW741V!@YA%y+6W=IEJy1NvNKEHxO7(r0%OB5R3Aa!2Y ziZx9l$X0df%V_+?qO6Ppp26h00oD@#MFX(+6|DL69VHnyT`Akmm7J9p;!N*aBX=C@ z76(VMina0SH_1$wqm{&D(Zt-2O9#wYOHkuxm21iQ%G6PfVAE+%!^E~t^I{O-GJ=;@ z_Wj9#v|eE9n`M`$uUEdgix$NZmTU7-=k{ID{cH9Cb)IhEZes+0G`#SmCsI0aqOaks zjbc9%SH9@V_9FcKz@Qvp88*(QpVW6Bj@W=}U5cI!S1LkRI4j}8i$|VEJ-y zys{$;bBijJ;NKgg`J(37&cg}`uI+0LUgF7@9+1WV?s^Yz|DRXT3j;6W>#H4WO~Gl; z_OFzPJ{39pmB0&MG{@*XF4GiNf%)$uizq#e3S9~#e8$(QKGhsgqkxhz?ONzaN1ct z+HR9Kxj@UVMHGeh6&|P!9Fi~lhU6nlb?X?NT6>r*I7+;`SDp6B*!ajK0L)LNv zA4!%qJ33%HssPfloG>^gozE!Q<7J&-3Rt;x(tf3Z$k`&xYG5$zCd^Uk>QY~1yCbyk z@dJX;7)_)tpN*i62U(h&3f#5Q9!P>QPnaWqWK+^erpQ;?x?yXi^9$15P^VU=$@4l1-79yDs-L-&6sLuR$fPm-kn*Iijt4j zMnH&;Ekxn=M13{ejA?t7^|KS#Ohx=!6}TiF1-tw=dZFv77%nasA5Dh)IFw@YSD?s< z_c-dAQ{z36?Xx+p;RS#Co_{yF?|Hpgn1Vf6gQ(^%BY?$IUq-EGk*aycbFkDzL-rq1 z-2|FSvoSHp!>uvD5>UT(^{NsSG5)6Y|D_{%HCxa_Vv z{X)gtt3?%rngFJE7Jz&YG`8#5C0njIpd9-o8}Wq2px4CK-1X=H&alC%+J{gsv^@*~ z9P2%p9=oBq>dd+F8?t8+oJ|RDN3{y9gD?5HEVAeefO zS#(S1d&s{LT@hc3bSx_b7PZopRp22xOWEFy4363+r5ye7p!ktoF zC6W3tw}AM36ZmSV=qz&bO#t1cSlNgdc&Q&1KB@xq-eRAB5M!+=-SauI&B7+vN^h98 zuX`qTBS8w!I!ylUFTeF}eoT9So83-20p9f6-HGri^CmQlN+_s&2LS&XaJyGl7v@9;@(n4m<&=Rr$BB#KsxR%B_AkPZociS3ssC|w>QjF9Rh69SW5`jp=ejZap&;hTMGsUG24H^8+6HnLo;9KWi0>hbmrG zKENlc0lifSW3VC_xA(a6Zi@*rKLW8QToqhZ5= z8|WQBqL8clNPon51Jh!yIOX&%>^hCI-=uJD7^AFUl>e?($}G7S5=6*r5iGX*;htWE z%7pW+HR0%gx9*1;=C+j#|+MXic7z|+D(IkROF?|@5l?g5UbN2WNE$qcL6 z(LK71))s0JnlRf4F$&d(`#!2C+Yr`fIHPYJF}2rcw+6(duUBpv?6jC^f~L*dj@oF+ z3Kp;D4Pkgw8Ru9UlWYBqsSBb`j#}=7*gIh>(UfJ={;fbVahsfOm%+8KMoAGNlT9uC z*N9!}8lglE9byYpS*LGderl$g(A_ZvRDkZef&qvDzpG4NyH7`cb^YVYH_iEWrm9MNvy4|9 z*K$8#^fQhiP2<1*l=R4IauZ&7Wa1U5cxz%Xh!X%)nN`bjVHUXGEU;sZ(Krn_9O%y7 z@nLkes_Ce~WbX;hA8Mz2da7r6wZ84_0vnGCQqD65&Hpi%l0EL8bZJvK-og_{jXX=w zrBVAGs4E^Y(~FRH`m|ODn{AGRIq$dfKi|tt+-I-=Yx5&RR-^W^|p8bfx6yEJD%lqV!D!4ODq2gxhc1lZ*$ss2!g(?2AB20j>_-C%3_XzR9=jdc1g6? z?s{yYC>Hg=0t?__g&`R7gcT<)h;Pi#v(E;^tA8E@zy$}s3U5US2ve9HPnNJ5d1?pz zo2>$gx4|G~5HFnTMqQ)GKUOmc_eI~msVxSQkka>YS_Tb0rR{TX7jZiYeNHQ1pPkmr zW`^Vgi>cYf9y3Bjehe?hFO<}W)5d9X-O+-WHe9 z_ui>-+D3#%luF50fo*_BiwfwZ0bXL?Y=~?N1%4y2!(c}}HJd>9Ee8DwEq5fU)CA^$ zDAuN5x0xPMJ^7V6@ar4-ZR#9f*D!5#N0zW3W1I&t7F@Nq4$E5{ouS_Q9-h71iVwWd zP!98ux1svLjp!^z7J#;IXk3-h1!7BmY69}{**%jrDWnEFmA1u5Cq09!B1ZRKCeRHy zxI*vNLedGipzgtyr3A1dAwf(3r677JW4GwEH8LDt4mz*0`EkWMR>0swd+kZ-YZVpz zC&E}OS}0h!s^qd6pen>>iFkRmz$#+ci65Re^7^k+De;KFTHwerQ#yCcM;%?`5y34FxjvQ(-fE1Bwdpp2oazY_?Mwghp40}neMcX6 zdz0WZuP3{t3h+)@i&4V}>}!(^ z-@ntbD6V9P^}82BXyo8*Q!0NsRSj1LTkof5%W=7yW}A)#C!GbMrwzoIj11|4&jKHB z_U%3FvJ2zGOpURhNR^>fww^(<1b#Dg`q>mkPQ6GK|Be z%s?9;zmk9uF@DIt_gRV$ut`dgpvx3!J(23{fUp}&4NT~wtRsTY|Qqv;EqK< z(|5Fb^UTR@=E%zw0_a`GzA8*o278X+?MnbUp47$Z914Ziav&Em6m-GoKG7J%B}iTS3PgQ9>Dc)!)q zmDlg_5($G=q#&E*GOp77Dd4jQAv~~~P9uOHRMcw&GNtiV_b`UlrDlirtQk ze0!z)bkBrg6v*-wZ>cl^858>rm>con&QQ*&e`x@#p0@5RPmNxXjU=&q{^QX~=CbA+ z+|YXSPvX;zG>~%Q-{V7MIn(g%3ta_6j-8I(KEz}p#slI&SV2}Rl zt=ZGwL%+H^#Fd)fo!-sQzqwBQSiT6KKO;)S#qj`5fDW54CtU0bFGfr3|J|pzGX;7& zAr|cD{nmmXoVw~8o~D9m;HAY19n0MAvVfu(_O)4<9jnye~Z$HU{Yh!hMh&`Rwb#2M(;7!+6?*sJd$ zLGd@CJ^4>4GO1^$PU(V6^snP%H2KFMX}u$;Pub}Qha{X)ZcKUxTE5)c+g<`6QY`pA zH47OD!Lk3)$X$lOD5+FB^zUbH=FH}x8^VeXkLO3g5r=700Q|C}0!jb}E!T%O885but^h%wMTQ!?Ge9UhK;@|GWoAquI+y zBk;^4eIAcBchS2I@A$5_)UKv|=F~O+3h9K3FJA300HiI?1U=N z*|H@a92;I(B=#4}=is^B`NLCU5~&z2AVKzj`1S<#?UW8D82kU3{ZO4bR$ZSU8#6nk z4#kLm(tOX#|<9#Bn@nLD7DLA zIWol#Xm{Zz7zfVLLE`8_d>oV}8PdvYr2N3Tf0DY=r^uS7RJP`t@Q3UsCMCp%fxwPE z^#P75tc3o)acvo|RJf-Tl1MOfOWNL00-)$Z;;}Z!x!%Lmq$llo1?+gXuHStxwuHd7 z3x(4#7y8qg>yqw9<;P&7;peo2^_NI4uqotll`!qlIRz@Byf1R(AY$F%40u7DVH`FE z|C+%ra+aKFZe66PvBehf7&=F?g_n$~t5x0m2-fhusGX}{k;Rb@^jn@7??mny0>Cj~ zA4S?h-ESnVjax!POV8vGuv;~8g+~GLG&62h`4@bClh{N*+30-vm6JG^UDyr(&BRU| zbol(1HJHmZ*h58?kfi)E_DRWk)A{n+&Xp95*ByZ1w|wphvyuir=+O2jf-~(E{_Q)` zZp4x2Eo3j}4v18tN(%|SkDZRWjwT@-)(k8>qfS3zeTGCQpGCyNu(N7hz3iIKK0ph| zEj%xz)2toKj6P6Zt}wK_8xd^OnoS$BsJdK33Hmy%ARB!u`Ykn(T`K-BD1;#fdzjLmUPf9Ab3xz zmRZCeXzxmq$HL{ni?Kr`{ygvidY!?9r;s)fl*W{L(yunz2*V9#?!FC-^RQ%$?|oBR z-=~JYA?bv=25UbY*-XguR(QIB0O`+rVV!qj;wh&QulcY5y}I82eUf#U@OaxvY9@L>4v` zeEgdWZy9mn`MrC@xH6#WKY&u=&?z3Ml%Eyom#WdEk4G&SnyeOp82Zyde7c4-E7mBc zP0lLFx9v(8dY~#?)Zz=GiLunH8GS~<>Z$WvSyNq!Tod^9 zQU4-M@TjAiFhE#x8r67m1BG$SPKu3ia+*mlahax?et|GM%#LN$yrErGNJVVtz@r0R4hV@r9YMl<&L6}Kn14<#79YdYiL|OF^ z`3Uo}k(fQ{h;J)CY*1H^KS3PvDASV}x9B0*rq)y&503lTCZYRlg<_kaRe+TPDo(WR zDcqx!qoP0!YtsW3G0qJ%H8{w6yUVTsU^dDZd?MlvaIY=F`qv}%MBp$O$hG((K2)6y zW7WdgL$q{iO5gaQR6tfxU&@kB#m_HY%HDLcr;J0QNy)twof^MuYsSnIn3s?(G(gRW z1Ppozlu#=$UdrSVLDy!x_t#w*bA=V+}&7fP^H#o7^{)GUWCG*Lln!k;k zWn(H#v8j}@UVPe$0~Tz`cDl3b+rF#!yhZ1s3GM*_$nW5RTLoZTsiG4su#$bjSHYZ#}c05_5oVkT)c%{R+d08+9d_IuLKWRTRf;k znAhg?A1Ac`KvgGRn13V_j+lUDGOw69uKvXf>BUd@{_lFh2yHi_qnUnS`{v^tidNk} zT7y-VAzl*vuNV1GxKWkw|Cxu*Bs8x$+r75m!d@C{kYLy8U6jqtARkP4ulVg9JE1#J@fW4`D`4k#4#Pmh} z0!zt_=!*@&lNdv@IWlt0d&xI@hx^J$*iGq`A_!Itq;_qS2vQgenR-1X0v`X4B*nLC zZ%@!sc}f@H)phZ%ta&)U?}`CBBnauyL_(;+xB(993|A$5U@15dkdG2oR9go)Ce;TF zG`v&F&H<;Xwg%?uYjwCn+JKTA`h$#_dwxh`OtgtV{xJ97pDM~i>R2fbgY zb_8JrbN*nTRH@zPE};n$J*5LWdV>);4JXvw;zw(zIVZK4HT%t<1hnJyEskB8w4D-fkZ2AETLP2%#^1zKL^BeL+GxxFO08Wk za2dovKWNo#oxzL<_TYHa>b4qB#)Z?>*O`=BVbg9(I10V^8J; zIo%0CrUg8$nJEgVIJJZ=Le%>rXGQ^d2p)_B9%4MUpQeu6D2g8lWdppo!enN$b)myG zaqwSyHgCdE)qTT~8?cXfE0emJa@@rbXYvoQ2c6?zjNm~!=z;@JA>V9FwtVnGFArT3 z`G*XB>NC1eIP#+fNHPcbbm`7I^3;JYUch7&%4FZ9zk=EAQ>5ji0n}@BL({{HjUi9m zjkxgY^|YEH3&j-mCD4qhPn|CjF^s>zZwW;{=t{oZccR)WaO~$iFd`lLjx2G>BG1ai zJ;H~)ea~eGrO=+noAuM717-Y{VVr%Dl&vxY@=UrWwE~YV8&20QHsrT$#nxZV8>H4q z={g<}_sFRRz;-4%z1D(D*0P+Qy=s7F4pufg4qq&_ENz>SK6jq}SxFbG5lul&Pm_X%^DlKCRD*;K4+Jzj zW)f-HXl*wA_)AkqiN@-UT1q;LcfueKBia*K{h0`Liv4;MpHg~F8;ZwCmA8)k=lQco zRlb_i@n2msPF@=A^4Z}npFGhnhMe-SZ<8=2!BU7@%k?NfFxv+7*)bdd5~kzw?PyK) zFONYn-IK3B*MKF(wA(lY|MWjFuqC1qp=(H9?4^%%Ztmz#xH z=Z!d726e`mHEL?*`ZS*7uePTOOUtwj$&kiJ6w}g=TA3Tudl33P62;ISRi&t{LrqKf{yy^2NTGg;FH#pZ3|?QC@Oir z5}qjFKr-%Q*$6S^np5CwKd!yd+hQO(xnI+})wYng8%WgXmQotEwCJ!#KHgC4`$ox=JcPQi&;Is$ZuuL6G&4UeLpgo0<5N+H?PY6Pi;J}! z?MRW$bLPa^M=#KZScMt^CE*!lO33$S>~E(-VeH11WWAs@!CZbL_;}<4WJX-OztDI9 z+p5r`=e1lDW}{=Gn;X(t!5YeP$@O!-AxCqjrgcIK>c&|eZ{Y;L4g6+4OG_*Op5OMz z*8K=!s=5GS-^4F1mHE^DX<_#_l}WR~nxNbtGe)Ugv8fCMrjD^TP>q*YCj-z+9^y$m zXeAXe=G_|@Z=EQJoVSOVZGfuUB{;DeOz0mGTDL$0zza;W(vd+n%NGw9Sy6sKIdv*i z7R9xR_&D<*8pgH9w`bE*^6@aa?oii%o>JXHYeGzYMR(z4+&Wh5=8m~1X@jZH-dFJ- z#-YBVZ`6DpA6kB*I%Q4&iK-Ot_S^dO7i~gjAucm$-W7xU@R@{4xlRRS^(uqB_QA}? zSAKTrn~r8x{ZJF%O|<>JoQ+tF;C(sM7%$h&AYyQI0gjnN;Uwf=(sdmQai)B*CwlYy}_D7Mf^@&rrS>&boLk zNIxo-#1Hs>kyQX3l8FT$Eltio?=r_4!_muKMxnp2v&i<(yBgi}?#t`~{_nQ59Y1I3 zp*Q&!%59+$08;x5-C4R|I_^BGZgm72Y!Ja2z=1yk^)Um$Ofjm@9TtSiO{qR^J;F70 z_&FKS2v>{5@U;6~J&!#XtiB~dQwHb-^RPtSs$^D|h;Py@Mn4r8@v=Ll1W%1Kh};=c zR4OvwwnlHKBNS(GkViKBd4;`jzDNeb>r;%xNB5^>>m>d+q!^@`a3#vZ3z*8CcKV|m z`@`uf#6_``+rijArh=6l6Wze$K+zi~A!Qa(5A!}-#ef5WaB$qCvwTgJfk|{c>e%8qtf2@2jMm2bY1SCSIS#07M%Sd zbg&k+o;C1zJY*svBhDqH^>fvb`hfWOPF4ngHL}%?5i%HCP@LIsih~t{4~dn=*x6yu zJy`D(wP@hNb}C|)c!($8cz@;cye$NG87rKR3i{)xSi>vm%jWWq5i~zPKFyqS?hh6| zNJvFiHCV-Ct@xCPpuns=Uasgcb*gCAh9^fj^3U9yQ4e(O%WB?Ml+y`QV|LQ-BmR;{HqI7{8MeE`RQfG%>!55NcEaD)0I z6GAQ3DO;oALI-%?qTRBYm%^kSjGWPm8v|FY@r!kzy4H(y5rbshvwGBh#?Va?j%m*E zT%H*X_&jiw@4QMp?YYYS5n+TZgb4s|U+w?2=PCK+xW3JKZc)v26<)1(K&*%d3^5|k z3G@)Sk<@nls^mM2K^wV4Ge@?xJzLy9BFr3cZK{mZJm=w!XbTQ}JOz^Sko0lNOidiJ z?hXt?t<^qS1M}dK3mC8e-BO2B;VRSHWvysaCP=3t#1U?$B8KZ934 zcL{fu``aI@Kim)Zh6JPDrMnxMTfJA%bK($}^+3U3Ki{M-<1^?Igl}ZY_zuZ%NSV>p zJesw>I<+nqX5ppZaNVY(Xux!vTl3=8nK{X0!ch2;!F zal_iGLY7ycm$}S4J9WI4nuSdb-;UVA-uMZ=0dnZ8_Jx2M0V&A2txKueaHyYqw=G@V;ke>4qj8P@ zx8#$hP_z_;ytQ*+Q=FGLYes5ewvU09j~2pKfq#5r{07a^jvO-fT<7f z@Pi`uA%P`#n%~RLTHZYdUl=oQc_uoAM(S5|8yw2T;S&PwOaZf;zs|!e<{@cWm}wD+ zB5lc;4hBq4xx}t{iQmaikQd3Y4kuB=S3*l2o-4RH4!9Cwitsi~k@Y96dWF-%Eo6mo z{g;II9^3K1#}zRV-HKH{ot77aK)U)lYVPL(KJ_ip7jdK)-rd!%x7xGKgGL1GN&gF^ z&mZs1p`mg`4@Jl8_gU&tS7GF(|6%9I&2(|4Bm#NFKlEH|9rTjGLXG4_Y%N6cyql`|Yg_EXE!= zv;#FeNm$;n=PEZ1gBy-(`L?m-F)XDO7WPI zjcC^M+EHeJK7IzHXBXn8!53QK%Y0{ned5ZC?c?G-v7~WB=~%bH^F&4dK@Yc^!`0eZ6{eV-m}#G zjgbQdL8|A(5p)C2f(N`@RBn z2wy_hyVmG|*HZ|uZ5rO+T)CSwNYeUDiXwGb=i$eKSa3~`Nq-%td+yo! z;o~-5)CQ0S!g0wR*XAp5Q6QKO0N1j?fY$qxUt;f*!vIn1MtCOH zTwj1L?@xLXB2}8`OYd~NCwo^M#QQXp9aE3i{leHggPtooRL=62W=R)U_t77D zq@53xYA2msu!W-h0>&$*HnBFh9L>hTjU^nbjbpR*+k>LdukHerUgK5>L=&>ye4r~e~TojU=wez$uu5VAcW5H<=fhoab|DJ(TVwJ8? zlvPi_kLad{faNYG!L_UO7$=eXzgzX&LZXfiMvqzeh|}4YhxhdL_~h=c1R=Yq$b&M) z{m?Is!zmP0iB2`)3rv+yFgCuU_1M^yH`5AeQ#=k9cmS?q5!;#p+O~rioOCux2g6RNh+0 zP9wC8O|=AQKpW!N>`RcRH){C@Z^<}0f6!CRQdLGYH9&fMDtW?RR4iOoASXKs=U{a* zy%5w)ke@H4O*MkB@mb0Xyi4X^q!LI8C2z9%4q50SaEbO;uMh62ddHNi`#z3u4LW{* z?w;3i_RjhL=saV#miXo#swc$zZyqp0$&MDf8{SM!#62 z;_y-?p$Ui?KoMm_iHOEj@>HYV2mwC;q6x0WlId|DT-sZG?7Sc+N2Lam%x zsaK*#ul`zAzNF8PDP zd5HGO4rkd`Z!i8&gk#$?YXJbA!C(sxnfbp|-zP(-q=Fg>lMHRy7W&RX1d)ZELtcdN zC2$~(zbSKzhj_&r2qUy2hy}rb^lI9A)WEJ8=>v>>A*dopSMGke4p2j)>}oFd7Y9eT zZkd~Jmik21j^zu%K~zt^k$KYjFcjiEv7_N<9E&TpD>9|Soi`B<{l>Y5E@PNxG)7H+ zAX37}l8olLyF@`8ol!pLkU39d@su!u1RO2>7%V__Y40+`UmRw{>#>7de#wNFoXLc33Aaivi~Y-p*Nv5nf2`E)R%tj zVMQpePCc8+v=pzk_YksTqPft zU76`S<|kLG#_Gq>9txfvbLlX?rA|kVP}|~D*nC5HvtL`t>JQZ9Ej+i+8*$K4@KH_m zJW81w;ALIa62X^4XmkDm)svAtQD3L_wM6G{jf(?VT8!ZUYi%p=3CvVvUu9gU`9uO(hejEk9BKuwQB z(-*rW@U@@qP!mCxKAF#6M1lKrNLuE zG+CR&gvxVk0RKM#z)}qLp4S87rxXo6ScGX&tK>$l-iH~%!cjIpblBXN}}H7sfY{PlRsd5TbJpXzhel@F&@V_mby z<4FgX90jB(mvXpHO=;;SLjS2#ZS6Wu@d>nwfjAi#rLGYm1w+_ZL#1kn&;%!umpr{} zj$FiLGrxzk6Q(N8C#E-jUmZGh=>%G4?C7zPuq=-}{rvw zBSlY@tT$O`jo7*3eJ^-Tn zzV%M<-4d?JB=eRVJps)-5z+ndNY0i5JaH+Zy*b?HF*|yBV=MqIJcH;C#d+p>w*cY| zKl#zAM5Wq@G1Lx04X79h2 zwmsLw`apQVN}P*aLhxwF9$AEQxoPvITLEqCESK0k zb+7|}hbRPmM1cE%GU}#_UH|78aR3~`ANTlgjl@XyQE3AB-;)MxU_i+GF+G#P_Mz(~ zibM6A&PQq~TcUAGrayWpRP$x5N}hD3?VHiEzu4E|U+=Re#+fe?HaUYfUo%k>V+$%D z&w&bMdrLir#lgjjbC~K5U}@kRr3Tg0d4I1bBm>|O!Q-kr(|`*j-Z*j}yTM@)$*1A7 z5QRh}rz9_wxBQ&(>B?9}vkK6+DnrYuvCX-$%Wg#_6X=6=Q(_FFv;U-mtvsyQ#GTQ3 zUbw*`m&v=evL5~LS}PUrSL(Zpl{kfaejn>qwep{1BG8Xt(XQkKyKqX8W`1AYzPEng z0r6-qyDCAt7P2uwLD{KcY=r)h))jbw#C&M>X{CVn_Ab~6Dw(*}TQhew1o&=i#fUQM{&rnsi5BwX1WK$-?7M)vD`Og`iB#a*Z? zFs$exB)!CN0;CqjBe`{x=T#Cv+d;Y`GL~L+kYuuYWj9jkH0|nbh)c2G7i4e2AUa9=^rn1{!MDDL3AYFowLJvh_kwa9q zop;HO)Rs@>{&Jul9HmNrh&QNH8Pr9nvw_NgpGCGqx(mo^f`+&7D)^p|*>whaUD?4| z+}rpJyR*+qA(xIXU#MOi=fNdmk-WCN>mLQ6DGi4Ok8dI;32@v`Iv((x+g`TxBa{d) zSH!}Hj-?&c3=~Vc#0j%&z9<42r@O^N^*Jr&@c67o0-2n=!4T|h)nOc{<6@;o=@S*} zh;XH}@qRmjY@GyM30T6PvWF86N7oyZmA{MBTI;Kx08-dU(3ysh37jF}PMuu{rQ5+Q zk38%=5+8+Jq`JL?uEp-nUDY$^d}ydO+2Cx=*L}BW_>$L1z^B5{$Jb9C?BG)c54mC} zU#8bRk;#O!irf|Wv&zx=I;eXt5zVj-iO(V59pOHbhYHRG*v2nLx?#HOakqi^e)PGj zfoLHDm54@)q`8IA4AAW9h<$j#6_tNks&VxU#qQaGoc&NW!M&gnAU^YL@05rmbq0AX z;|b|hy{lI|OJtdk^Qf^32X`m3O-k2%PShCy4SVv7IZi7=nbe++>Od}+t++GF-T2PY zW!;yhp)Elfj!*7qhm5NzqRy2mM2gk!W;Vl$!y_yX??q#On!wWuKQ#z< z4DZ%DmXDKGU((ZV4{?{Qiv{1+tSoc~8H2&@(9?Zwdp8FVHg>9z``B)BHn8NQ>#B;j zY7*I9Xx;oNusbx{^#w12;3q8D(yPrU==2R1w3k8vfDD*L<8mvnkt3>LWE)wR503;W zWnyeX?yu;B1mk6@dFZIW3_Lix*HZId#MAmzfzo39+ElaZ$n9 zWzSi*8coTpO6CPL;MGij8qB#|ZQe8^@>n1j#H1gfVG(3c!fyYwK$|+0PuT-<^m{Yr zrgA2hBx(39b% z9{Q#s4o*ZdAj5|(bVum2O(Xi38qc5Wb$b~8GDT@)G~sKTp5bFBryO9BhSNdWu|70J zIs1`Dp zbZj+T5Qe4q0~idkxG>t72b-{!5hFuQmTK|~XvPls&FMY!6{Re$dk9x>THl&<>GKjJ z78H(dr+30XP(9GQ>Fr6SYaFld>;y3LTrjyI<*A^$!YstHkqtKXk!UZ^MVb=mH%Agg zt_Q!vI00rl+u}!M6a8gFOnH~jeY9cif8qbIW-9UxQ8>ZiA=+_h$bBdE)2V7`JZByN zCa!?L7rRSB%6GXCWt#|8B0iA~gEq@&txL@E(rVH9f1Bvp5{tqJ z!*$O%&%&L)yXnq=we4-_9#6Y&yNK<{di<9F*`1cC?oY=`JMb$k0Xsu~JpmJLSMHa^ zUz8ThB|1kxeSp;;$~`U=yb6Kc!pne(Sn=8TtD!&ylO_L%ewVyVZyG=<+~aby8dEAy z8@8jH9Oua$bkd3V5vG=trkqu!j?pfy zr9$5w(@MAvM46Z_FNQ(^&(5Aa(!Qp`2?oaQl&{>JLaCQ<@FDM-yk|e^E`I~68z+Q( zd?|E41iMSn+FospOL>rOb^p!22$v&4Z}&E?BtoZX!ddZpfPE19ukVO(mvmzW1D|4W zoW?y+bA-w2CAy;4n>HNY=5C6h?Hrmz7sVh-r{Z^{UuG=5V0K3B`?iuu*u-th`Wi81zq?+OpQDWHRCoJyhuOaZd9rjeR01 zvCioAaI3dlT_9nc=@qqi=z)Nc=~>XPb9_C_PXEg8;8x}Q@b ziH*S@XntTR>o50Z2!#!nL}GL8(80;Cq<}v`)-Od6iqE~x8M+4KSgBJpc*2c3Wp&}28f{(R6FcXUrj~fACVXSZ^g?*Xivwn#gO=fmg;}u;@byGZ}+EW zY%2?6*2+%xRjxfWV>p8+?EsB&(G`cN4U<_e;y)qu3(>qWGQ%s&!fG3nHJvC78+UPz z_e1-P%9NVHmQJ<*THwUkE@fjTW*^kGqIQ+xpvVzP=g6fC?W{0>h%pe?|E4d=s?UC& zx#-yNuI$Oj%GL?te~pMiYXd5M7is~Qm^i%kW=)t}%F zjOAeuGvF0~p&F6Jb(`>Mloafot(+-|J)|PYHCDb5?(yZ1&D(JLNReX2HuE$_kpz#E zxv=E%yS>_RZ!-}IPaIEiXB3Rj0hDau)1vgQN@wt#3+2&2&U=H56(&snt1$h~0Ey#=eRP}OQ#8YgUKgBT z4>-2#kcRXJ?V^+)G+I?xL<} zTnt!O@qlM=$0Xne(UxxP{uG$gbT$An2<f+m5w*CZ@m)XWDfauy_v|CnqDk z-g?}@eBfvp>2Fjo-;%vO;v`3OX6SZ#&zQNxt$2Zg1IF&9m~>Z9;cCW{m$6`!AUW*h zKDHoan-Ei_MD#RXxAXd#QxCqWA)|6Jq9ZPEu6 z1)aU$rawO=3EpC}T|=?%1D&-__`GE&G|swuYLk1DEpP;&K5sRbYE+sKVG*pF+aQgd36Zw_%?T*e zE`5tAqU;DcW6c#5c8Wvs{4oiyjIm#B29*PkcH+C^2U9Bon?3}UX~ehQ>=F{gsA474 z;vYp*w%8xhztwS;LiId=>fy-IeEgf`cdWY}xstXivroOTlj!$RQ|16sDm!+ubO6t}7)0KZ1s;$T5$WnXaR z#P;HeFxbCid!#odG#D$XNFDHx*0ejsxaih^f$C0x_2u%4qia2Jk+6h{Y=*v?6wXf= z$EfCAO`I6;)ZXW6>*`x7UUba$r#xuf>CyZUy_JP+%xtBS)8mlBfL=u5WJ#hOHU+SF zlcP>-Ae>rmtZ|1oZRdrWo8PRha^DV#H+bdR)3q)k@^t&7~1lrkw3Xza5&@E1Fgk;+aPBcioxbiw$9+ zBEyh^N{Cta2`&ijwc#sQj9zBVl?iVKRXVKRH)2l)c%Q>oW!Yj zQ)U`u>33jeg^r!Wh;N(H_LfUw&UR5UIzl7iLVGAK{q7n zV7jRrW$txmtNd}4qS|I!m*yx`vvbxteTe_vZLg4@1~98 zZ8xs>Bz|JOPx?z|IrvWlhA`;jbtN9*Q{aFWvaQ5MphAknOl4rHofM}AU7wfVZ+Kqu zC{WiL-M`N5@na{l!Qnm0bN3OUG(iRviu@P2*GSKHg|`#b)mFsI+KmW?M=`F>xA{0t6sjd=Mjj5< zVGUNN7;!lIOF-xl+y^v>kn)zokQbKQhPP(AS5W|HdwTFJS85o<$YOH8TaRy${y4f9 zF=HXK&7!Kef}=2U<|l3JXc9vau)iq}0;Q=;3c`ePKjW&Lx&MpB&slp-VYROC@F{M32(s)6Rwl+&^;aMc#A^2h5lPj7We9v{HTaX zrwr^C1DgM`IUt>=7ZIX3J*UMEEXYxsVhjI_YfV+tWGSF0_$UWAI)DE|dmK45mc z?%F;3Jt*ZB{!0aRul0q&Pe%x;jvbWI0wn8*hKq6K)K`MM{kRfv$=F=GkSQxxq{O{B%WH zU9FBS#W>sALdyl$l{UDx!y38-u;}CxF1b;Lp#aw9p-5A}G_J;D3|k!5rhtAYBs zN_|JkHlQ2m@#Pr9V7A_63w;VjRKA|*#+TH`;<4lEeHX7>rR|Mw0*DYO1>UUKYv^X#_DVLQW>H` z#VDL<>57+z5(lCYirH>(X*=fY)kM;7G@3I>laKp)=c zGt<`ZDpbhy!@D(l*8}GWiO&gC%L$Z_jH^~B7R1&*VXL!nLJ?k`-ghbJWeu#av$Wws zPLu4XC_s~oUl3~}yaV91dO6$UtR8oT{(x3S>Nxick!lFQHMKmS6N1Rz!EW3JwBs`j z;_i#~!KjHH6#Gbd;#%C^KX!YkXInk5q5KAfl2vY^;1Jw zuAzn++=WUmwQl!**@OBUGD>$raU~O2iCO)6DVJ*CZg=RHSUUZQK#f?RAbIFwX1xs4 zJXXY@BKuhSfb`*XddD`cuF-MFi!bWn82rvVU7DJEdyM056EQK}k-{mLbrhOKu{1ZX z28#;ps%yfbf{fSGu*6=M%1iL7r7CieCQ1XzzK4xl&QibC$a~jPD->^HG8g8kPK{W* z`K~R{upTetfQO=@4sX=E>s&?VP!!C$Huo^X`~qlUxh+jrkB{arVf1HvbZY_Ctn8$y za4~CvR8_Ov!DaP3_p7ypYoKrqKnnosiR3ex+apj6DY-E~5uN8J-5~jMndx(J71L+r zDt#h>^6X`(7D9akZ-Z$PH|_uX&nZ%ir6VMxGv(wK5rF~^em{}76+bgGcBAketK+i? zlmoH7sGwio6H#|RXK+b!>-yn_2# zglMjuj7xmMm|5hQ$Qqoh4cs^R2Lx6My~7p?z@Q2vTW)7+STwN7IDzAiMW|O>OVy=& z*vPmL?uq%d_J(m=?4{zLFmjp|2I5gpdELT4G`~)!`kfzL%gBy+YiaI-y-vHBT&DC9 zvaMOM2Um292?(6A+IwTIh?1t*G1bXT1~l{cj}|k%z@-KJ_As9ztz$-*mYh%$eWo}x zzRk;qyF{cBM=*@*@>>>+|DVAsn%oj#7-ol%E_?ar@X$|g?vmS)Nu*Rl&@vYx$4wmx zF^pwwrq_VsjwqMi3waet%8LjE;Ly9-#1@|jN{l30e;>+MLBM!dA?7Z>ua{=^tWw{` zPeNooUN2&EbTMxK(rTy;I{I74aNEc&kRPv?Ppwao}(tzKF66N zMGmN{hq5U#1U|I6m~<9P48)SS7_b1p?nG`NL!o)sDfgg;0pm2-j(U!z(kerUgyL0_hj8-}t2QMS1Wj%Ru60V1?s~!=U%c zw%Y84Wr(TbWMa%3*X~K+5FfPa1h%?MjIt&$Gu!_FkCG{O^2!W|LGJR0N@0#gum-0` zIN3~;N8t^i_bo*2GNc7B&))tDcH)Va%!;eM#LVFq1=^>=inot2ipQ~XB6Hg#e_rjN z;w^DU`{heiPPu`u2@_c>+#^qBbQ*;`8Am%IRnz{cmjP|0$UqF4H&*weEO)Sv7mpxt zc%iZQHn@oW7y7qmD5f~ zktWg1AGD!m=5|JWGMMGb|F^BqgMG|=Sw@$yYR*5Xv@d_b`;=~*eR^+q;(6r&2#AVl zgk#ofjJ!VyQuT44DaV24a9J*OJFt0XsDWHGom-hMF3H6wdM+Obwe`zv3~ND^=xfA6 ziIlwH7cFY0**`nH(XF^aw+jA# zS^WuscTdNiK`)T!g9rAhLWIWma z*6Z(oF&N8A6LZ=*yZ}EybaVP%#e%Hfn9cQ9y&C&N{#Oz<(BT5qfQNoffeuUa4qw`~ z6^I*Jm*7Zj*@g27yd9nYxBY= zLSamF0#;qgl;2y~DUgm=8Bn8*l9+o+8#Tw*TVPHNX7ZWXR@ow3w8@$qf2lM3DERhM z5`JkjN!}H2;Z_u>Quk2HE&kNJ46KgwRN8il8+swwENWPxWg{MD zB-e`6Yu<{X?z&^tSAs-qp}kcc;aBn{5Jtw-7I|Xc+d@Ym`MJ@~nZBeIQv%jgTJlAE zVfuOvh{b7){z;$0^nRb<5Bm*}K#9jQVp+9ZsN!Ts*sUGzRXUZV5oHLQSQi4Dn|qMB zsL9Ge>tywPR^MfXy=Tea0^D5|>_~KmufgmX#3_;e^9I^4uc6Gf_Hj6KD6HETx!}TX zLp_LPs2ewj&#^xT>u9LQlxL z^$Bs&5hOKFMM%HYaN7N_;w2k3!q4vTeL4Q2^z&Q+E-!F{31rI>jQf@Mj!;XcFAF6JcKl;8hI4vOIBV|HK1tpl0``}Wy@5UZxM2~RevDCFj0 z=Twb?TQE&GIDsbp@{REf!8EPd48Sj0%pUSBK_}2p_vE`cYW2(BCoi35QT?xxc6!ym9XYpNN+BJ}$$c>%v$KQ1bF?`5K{DxqmGAp`xu>tkckF}o5cfApxJ8htqf$vP-O$5dUqEHIcnV(<}7E(p{BEa3n(X^ z%+*>U*U8u4#JeKN021|@Ig=@rm^o}2%g0T@|IPHk6hpGcISL1Qek;~i?O20S)^V(q zP1IK;YIp&i=S}l}hvXm=@wUHhqC)XVT!2qVV|_K~#*jzLPRC z-P7Hmt%rOiWzapC3LKDWtXeL=@SaFi^w1`dNo+8qarU zc-Jq$r5}0l>mD=G&h8*;p9?$}#HOfzB+6?exNGJ(6l_A$&pyb3iiQD_aat`vKjC*e zX;d15wd)7mWBQ-ILw8;!`9TZmijYbEm`z_RhO7Q=lY}g6Bz^Oel${(&k<<-3smz^c z5m*UqZwP7*Mt%YR^~}SXB++nbilkN6pnOm4{f3L@An{}gd@URlIm9h{JR_#oY2#F0 zcPbh5NJdWXeRc!%;}FwI@AQp9*P3I)gfG|;`_p08L2%uKG^f|&0Tx}JqQ@&C(+EPV ze-N{+0QD?1y}Ye!S$Bo!(zAMm`#-cPk90Jw=sa#K{qEgUP#F$Z?X~S;+2;99(=S!e z$(!P)Ud(a2?z=dm+xBB>ARBcTB`h0iXm%w4dSGZyL3Bf=<1f-gfr30Mpy>LmY7h4x5})HD*yb?V?txB(TL5#usb zxXoskV3>n!@FFxQe1|6i0XocLf?$cScQ%4Ex%;yy$`80iy3PC6S!iy}%5Olz0*R4%h-C9O?V18lwS&-hl$i zH^UC3a9zpju}7;C>iINGV{;zN`F#rlzCH6_pkmZ-$@m{OJnm>1bqu)z?fk>FZ3}bqCov5mlggi(zBMH=(#gjx;{F}{-23IWaMbIH5_~`uE&_vJ%`{7V; zlnN{t)FRqes1RK#Ui}%merJs}8j|aGodb9br@f z;st5aiuV9gT13-7=>~gv3`Gms+t${JNHu&8mxb4U{ra3EwsdUKXqSzI=RzfcA5Sz8b)}C2I+i^8oLk* zev5LR_v)%-DigoC4|~R>0@SjjOGPK^ zTy5$bWda)=8l8_Xqdum_sQ`d~o1H)K=p(qfk4*g6kdbrWqW?GM+$>qD4L;LP z&CkCynh_icce9!d{6Y(317%WD&DBLv9UyVXbA4Yo|LiV$QDg=+hdJLENQT^XhB5sQ z8^ud}4i0Wu3I|G5VAlj@u0~TT7`{6zmmc6`Hd#zVHIodlcT6{~4*C_nmE}UjV(!^j z)W|j^D9f-^JVehcZIn?Kz*>wpUZ@@K*oWh z)W)P1NEP&CR1vN?x3lp*KD$lB)xvmA{?E6X2Knn}GYx)LtvS*(l+rs%0Z=GgOt;F2 z1X{VG3`~ui%i4Vi0QJY0faI-|7(eY^$&IcSoY{|uv18^e2)D3>ngHp>ClZ*-^~ow@Hvy2P1Dyud>X8pUu(s*x-rvN zd~$ujd28uJg+`v&HBfy7k<`kB=-bY$5n3h1i-yH%}x9wJO?t zgCmN7B8rjE|A|8nq7#-J3w!k7+irkB3y`1Yyp^HOcnNN=CxH1Q2^!mbD#rkj=Mcp$#OuP=+!`0-XquE|)C5Jc_8C&&G-+65{&0JnKdqOpc5$ zGipkUuSz)4!o{RI5LMEV@~A_d%r1#5R{RIE@xI(8ipF~}Bu3GnnU!Pu8sa2!)g{l> zK^*^uTv8Lunvol|_?h}M;Q_Fh7&esvobCYsKrP^4>T=K+&)V+a@~j zE&4Vtr7f0uWu+zQ+xwY?W_Cp45GZr6ED%{c<0@NiFLn9LN@K-( zmcp|D*I+z&1b%S-&bEP?k;1^XnwCO8#(O`*gK2&#&d`z!r>4&y!O1{khP z!;mVF@#V^mr&ntY1ymf8lG7Sv)F10g2?_Z`EV^oHAI{WG?OWQI(dN*27Ad)5pZ7K^IoVNk|ZYPK2L^$ttfCzXNcEod4HFV;NsFfru z(76?8xh4e!p5b$yK_Eb)4Dr)ijW^>S^^We=mJx9(`A)m2(s_+!rCyrWJ%S_zsjk)D zpZIK_=Q5J>{+>!(%cm)e2fa)OrH4W0?v`JHaFGjDy5vaAryyZkO-nx|z2PqNfqB)0 zz81U(Ul>&SqA$k9(LW{e;7>YTEE7k}5Uz~OL}|>No*&-gk74eD*F!Ff^N)||c?=7F zsruw%zv}^wl=Wa8&b1FqtB~_x6wPi63yRFqQ?QLOEg{Qpza3-6qZLDPjXW$Vhy~q6 z2h9+HU3e}WY`kZC#7115_R4!E=2g20-A&mug+dB|lrUA_gE+nzLX_t9DTY9$iNNFu zRx`Vr+hm;RgP_nC!SXD?a6YF<)IFj=nkEPR2jys`qA0XiI?DX|K)Msh6s{cuxTjw) zK@4@&@`Z3Cc@FQh5J3CZr>vF4v)JP%XMaYm1k_DCT{BklcNtSc`jiYr{)7KgESY@{ z*x$T#sj`9q_`EE=IRKDXvvg2krklbSM|5+b&bs4#{eI8dE&vYwU%;4AKY=QXc`GO2 zjYB3FX#=`R22jcm=Es}YB`zPUd-jrZ9cO$dv7%{E`e)omzBx8EyZ&vDJg1_u+Zm#J z5XsqAzXw|6Gzp$yu*N7BF|NM?ZN0$mGVEf87ov2Q`cl+he{ExcOUdjMlJDre0vrnO zqsNM$ugGU2UpGBkm8m+T4q)nz==QTr0A)l%q&qU43qh75y3hb(nY}>ofHt%$q0@;n zPe_DO1U;?#e^!W$&%-pL8yXKA#Y4x1jw`+_La-wrM3Q)1lNVtGcKNX0M?!c)^Yb;!7{`&kCDk^`<=86;6CnzOApTN0!8Lrif*mxfH zFN+Jyup?bf3W>Tqz3=c*rqBiNXn*=ZOc0s4$^ri|<0oO^oh0Zar{~?YEfA49clCN4 zvPJpW=$FIWYb+|a5RM!wuiBv&l6FzmUda7S=Vm7FTA=gS2P9$`B>4Z~k@-|H!-=HO zP`6phi6^(|q4wPQ4Zjue9X&LF! z2(D)fSJ{w>?l@A12|^B5C%gGnqIJXojFdNI=89X&5(0odmz>1`l1`9fp3_K(n;AgJ zLSKXr`Xl@;k<1ah)6UdOwPeBuh%pO1+WAiLSsnu;L>mK#wLdh(HD;D&c-`=_slLV< z4lkbv_3sh?dj~+8PEw1xd8YEF$}$O0iOxD>72zU;IQi8$nn>I8{@9j9`_8N2P5U>5 zZ1CflBP{j3Y9-^U+OG!I2%SLqI)CzNf8at3g4(!Jls*p4V)cp8QMrSo;EBoMbl*GI zR-0jQS)4q)ubl*w!9m1P_L|XJ*iAt@LA;=IURiz_nH|)&Ic_wVClxakZ_KOTisu2T z!)o=|gnI)ZUBV+DY)2dUc&t?JVMtuO7J33k0dQrb(e!|sQ3?@0v|nZjR8~baV^03Z zE9_QsjLa*$l|5taIl^m{0wGS4r=#7kJU>@-nhr{-VvE!@01ETqGdIHe%AkG};%HDSI!+>vbjYwpj zl~JiOoZ3wrC~l640d6DJBtV1888DY8;;S(Tq%6IoFk*~MNhYvkd6leezg4rDWPH6c zFQHu+YGkrb|-JS_uPKHf5M&9;W_^-IH3 znfvQZ8=K2Qp_$+H>APtjbb}9sH|KSWgpF>XQ<0%U8MnrI$10{XUm;6$faVt}y<1XH zE91T|DzSty4$B&tFk2~@uCE+_{H{#pg}&=-g~v2ziikFcNnrC#w`e? z1dYP6z$D4vH0Je zMz82MD`bEEu!S$)>nil=vUIf8%LI%t3D|!+w16q~t$gng2;>KsIqp#x6$ z@FD?1K&KXJEfkPq;q{e;}neo@}h|Io|nd%UG; zV`dbhJ$~-zF)h}7XJhShBlH)ju#Yir*hCzGd4MtSh-sf-Gb=CYZ`BI2{sp4Ziq6_1 zT%ZOT$++@5!Q;=?tE9zwcNazc4;;c&)eqwpq&$Y6hvUk6sjw@!_P(^Z9fza;%O8B{*qRmVE}YZ|8W6=ddc_Od{sH8A8pBy4nV;oLK?qQ&qC=r0kAXK$ z4zY0A=QzB;{;Y^|R*0%vriVF&U?RoV!NH$Z2EYKey=Qxy8273jz*ZRk7T7zIl#xMG z7v9nKT`Tl2j2@1>r`u*0NSS^z^@|KLqu>-&u8TkM^0=`7v|PebTsDEcQ`2c zHus}Z(~X5ezh;-9c;EovJrTJsFyn?eMd>#-%D1-;H{+BFlBW{sC&?D4;x^>-XxmQ= zAu_$rb!?bv-LsqzqB;L*`J(RD1PW}Ya5M(5AhW0{`P{}|h&g@fP?VO& z4}a%Cwsy+n%3hm~(t5{T9A7c=?!t{YYuk;OU&U>l%t_s2x3yt$54c=l9I?QM(gy*Z z=(5aNuO>PwzHKEy)mPQi6MO_J=gP8RUPn$~cNeIdyqK!6pQV!r{ zi7&E~EijRU=(+7idTtMo60(bl#kc$R!bKeP9s5u87AVuJ zKLu1jX-{`%sv89q$@%oMC^{suJagCzq8hjJR>joMl+bx3M;IK5Y~uuxynnq^LwZpwXJP0ExL={Htwysr3ZgI}8p; zf~c0|^7t;BuNjv=M_>m<8LJk;s#|-VxB(nbnyM_Wty1*-$6AMpW0Q_wY|1v6ABW}D z5?z#Z!N~2~w8uKr*!ye!P!I$5#UZ_Xqd9HOu_>Hdv}iwj>*(NB&tBT8?8djum1NG% z$YBj*o2A8bk-zNgPfYBI=71V1RNZc7JlT|%4M{$9?4(iL%m<2P@?t8k=Mr_9hZc@ASR^rG8wpGgGD8YP|Cs8ZU%^zz_{>4iOE7^-+;n(x&Ye$34zt zkhngLo9u3$hJu zzFbvA{f1Wh*nEYmqj^^&w@J+2VuM@wlc}5X%>O?x_<%np1ZT@{rZ#da% zJ_{kfpCNes1%M?S6~)y=ME;7ZbpERP=!IFDFa3ecQCWUneeP;TsQId%nkKX8J?x2c zVNjam5|dZ%g{)&wU(m}gyy*1ft$byqLn?qFLI|~$cDD_J7J#h8v^+w|9I|J5L1Ut= z2?W1@eOa|r*DHG}wpilTyc5 ztl05mN8;k+!P+!Hv5UI`-VJg|I$s1eJXrO2#|{!w3!yLT&D<#)giyDntl%!wcaGu6 z@}WHyu)zUikJ6NQUZ^}YwbrT((^r_goZ`Sf^AmDIdeJNtDgp}RM-yzc{29`&@}he= zx2P4Di6lOcqJ*nyMqvMYmZo3FLkK{C&_DzWSF@2|G`(r|1R8t`SGw-dBlPCwxACb2 zSj)waO~N0QeCxoD(tnexMi)}qhm;0MQygNw05>Xr;<&ExPnIdmon)`_b8Sg{j8nRJ z?^7LLLq9)vF~Fbj9|mmZMG zl_c1;W{@SJ!e7dxXrb5P4?eWu;)0!6-y`uJb1M~I`Z?=JH^V$UccZ3mm%CEUdyFm% zPV^D|C(>iqF~ENAHjn<6>fhvZ;#_y(=UKUgBe%975@@TYV31%DoZ+QrGRl!?$pzqj zw<|+wtk0DtXcjsGsZpS*QEa|9S1}GN700E6iA{o`^3}RDCRfE4$Dx2;&6>`3U?5&Y z`JhFU{wT`|Y=rS=#YJn!25!1V6z=c)6^%<(zw!yp`X6#c9kcv^gfQa@{}z46+EtD~ zjmH8Ihsi)&HE?|Y%5HQQj6XZ2d=d68HTiyo8}Q{Jfks4!i?1e~>@)Um;)Wz!tVxze ze)kwN_S|UD>B81Gj8I~8+@*tC+skh_7hYXkhUO>YxqS3eXq<0Hm^GE<20$gG2!)+13$OMjb=cHuF{UjuuAHRD%U0ED0=i; z;CN02q5i~4ucm3{CfbtE82~s?y<3cnW}O%YTotZ@QN6+RcaL43M{OkT@Eit zKS3sc38XYclV(i_db^Z<85O@Flo`Sjpwo`;STUWPNMoT09+2sBJbu)46R_(?j~7(p zvBBDBpN)GyM(kun^Qd^~w#9Q+UQWcP6{N&F zm9^G~^8H)mKx$y=>aFLJ<<-M`?*66!7F>33A?VKGE7`e?ctOJCcS&bR zl!I3dg)?SW&QZVt2lhC0GKWnS_cyDkJXeOJG7ItW{ECRDV%VbD7#5g80jGd)wBv6C3 zoM}nY+j-^bUjyEOpphz)Y$YI3~Q9>xVabJ8f2Ji?yRHgP-c1;5tB#16L&%7NlMzCd?g|UehfN9ki9G zb9%5N^!|KdtX(luf(S|;N1ig2d_Ayo$%R3HF~zIo7Kf&wSX=JDa|m zm;XBl7%}|G3|l5GBjnk>*h)6VHB~5aWe|y!_!cP6U&qugNXp@Z=DQQ?G~CxkTWiTE zZ(jy5sReJVaI%Y5zpc*2O#ls6krPm7d2fK5+EDzSiXI^5#jk%PEGquI6EFbt4*RT`KKTLszym~KSC)?$*n!)gY-PO zR@`?Wx5ot=9$i}yXlRMt1@mPwj!5k&wucTz%JBLe>xtOYeuQ4UsL-5NdW5a2OF0^8 zD9e+#OLYCXjbXxVLuu^A&SO$eqc%D_Gr-(Z@B*qKs6&tZ;zaXO|GOq|s7Bt=&#g4e zWbFo|!wK9RHR9RHVweMPtLPGWkZ;GD=ANP1S#*=}FYWWyEe_UVl{ z*rVD*@(UY2h|M-l@TbBR=2s>3W=SfHx#70-O*wNhQHHm7NpT$2mXcFZ!0e@0U4o;^ zsLh4-)ijdTt4`jS)tfpO9||Rvfhm1uq+%+^-9IsVJLF2nj*X z^2?haXg23#3#0v16+Lnm2PWBcFJ7$?llYMPyJ0=DVvMVmy`jr1>zsT!sEhMp*$pi& zhbBp9#95;?3{J=S?x~&E3V2!pb;U#JE%=62V%YkS}+rnJLd6iKZUEnN{J)bU~qVljHr@ zg}U);t+ApR3oljvkqdWPnsNgsbfucK8ypb(mF{_~_fk6NigMtiOq8`rycqRp*7DDz zYN=?fQ{h0j_MpVppN)68-`E=_yZudb@3SyJscwsP{aI$KIpsGWxwRTusO;-2-z3vFy6;@RUzA>rt9ko6;e_<&SJyEh0%Ed%7ixj#)KjF%2(X(6Qc|^Ho zNNsNXfkxF>6AZ0J`TQuaB8t9rZAgLz*rcSt1!$7gT`XuW$EOm10ER`3_8|87^t&BU zPw7AAXPF8XW0z;Po(chH!!EZY)gUDj+K5=)DY;!o!pmRKkp(17%vBtd-zcL%<`0cL z54sKxtU!{+Y4re1^Mo<;_5?rq;}uHe%mX@5?R&SY&$5ouGVMziT}D$ccj!LTZevhbmDOn(sXVu# z%tGCV$=63a4tl39Q;Wz}*0o@%R4&BL8)tp(ENw=)zEaT(&mXR8HN6Rr5%dbNeY$td z-MLmNuZd1ITu71mCFc@^D!jWK*Ft{v2+SCg35H#j(#*`xgc=EUA}l+h?AKiozjkg! zcHBECe2Ho=HVCuujg6;W@aVM?2ciQ{<9c0!@QL-WvjE(=dWj=XFRjim!W_Q;>?dz0 zk;d%{{xEs?KsmEyYT-6kH|b9w@tZ`h7cUDJUgN71Skf-dV+-Vfe?XSb?H3TbV8x zuq>!Ziyoa7KNradP?Lw^PM^7LT=&_eoPKsQ=PR~|{nj6vkT5YZm(U>Bgn%4KiKnZp zbGAs)G5G|JuK;x$#mGtQP@JJOu=d{VoOg7~*-}J=+aqxeklXb(+WnN-F=?liYN-y} zZaZowCUjm(9uXBumFjX3?M0Fp9LH=8%gp)nh<~78Ot`CXiF??*ZHP_Q{B2! z?U4j=ar{}@F8h7YzqKnCc+lS|vH?y9x)3fvZ2yJsT-R~4VFP0h3a)c6@AV3sJ!F2O z5Q>^P@hop6G3Lu+ZKL`F)k@`@T+zewf&jQAE(#(>kRH?)n8o{gMBvqu(E8U+Ii>Hg zyJYZE5NSPGdPXU_9vcyww*W+6Sq>Ww;IFNK$}SinGn(K|5(Yf_^LYeh8Zh=^7;_(p zv?xacW(zBCW*`B2aax^npOwNrXP?vx04ZLNkAJZ_u*`8%nPPohTKJhYIsd9*nt1?R z5Vm0&3FCj~mqqS3y=m!(X*U(zLj9(#?Z(j&98Sxky(9 zUO%Oh5Vu(Ev9|@uRR76u1s2z1_26|m8-}Dc8b(4_o>?OVeXm1{SV=yc0`k6y4#pXl zpT^`NMj|a0tu={`&Bu$>KuTmdP1aW9j=!nXP!46kJb{mKHNr;EsGMzF)&564uGA|s zXf06or0S7*bX? zt*HU56>=_eP9iW$>4(h5Xf*olM!5pZMBAMKX!VxxdN9NwP<&|hwiFP?ITcB$13>u; zaOH#g8UCKGWF&2`REh5p`vPcE1`1Fq9sfDA715EJSDYL|hZkqvR48ICbbH_AD>1MZ z_<_!CR}@); zW-9ohg+0Q5vD9CxOM7k9tsT@tu?d{Je!JzjY^uC_w{Vz)Kpo!8KuqOehbGPFLx-=a z7oLyjJM59htc2QKwGp}R4{=4!$!w7;3jUs4qcUv!8FoSyJE#baYlRj>jsk|YtKMm5 zL6@IiUE$xlemo#m3|w;{)7mwqMdTp%!`R7R}^ra~L+4~o`FTXFyOh<)8AeayL{92%4F2|x_6 zxFMf!CWD>ZxA@LMr|J1wWZ8|JJxFSLgb%3bN`|SI!Zh1;q`Ld_H!(>@x$y2W(v69l z{JefKDjBaZ0$1xdq2|VztoQCpUuHWeM)v{0FDQFV@qJx@MnDP5CemHOR{+@UhAjty zBSg9BCn=c<+kdWvMC#-^&PDFC8Jo~tjn4~N1ejx2NrbFvRSHm@nn|3pTw zXFOFc`yDKlrdJF4pOhK-tl?OHZ@0>BMOp?hoXEVV1dXv59;2N{Yf3e7p`Zaxi~qNM zZM*H8&+>l9Z=2x`bn7^#M=9F`QoYXR7zn7S)C!eCjVre-eHUjwAQE?>b>w9GS%ciN zo9~`5AlYjkM(1ope~_M4%5uwHoYeX@8r8{vAHT*cEBlZx87Ki*+`Of-{(SwzaQT6I zF-&o~+wwTko=J`APPn!SSd;6I#a#SfO%xm!HlYAk))n9lCY*Eszsb`|#O%u1GJ(g{ z{Qc*xIz0!m04BQzOxkRWW^~G}|IN`G5K{aOF+{khP~1jvxsv@jT~Az-qSu=Wq+7-N zzR^CfdtODo>qBdA!?50jHUHoY_GQ&~KOStge{`ANtE z`K4=i&#ay4AEYHM*Z3I6dt%8H3NwEl-)pKTlB<6;GSX^#gpWs@Q6@QD>$Nz+4c|f_ zku!sd8l0R@1$=D_rUP;N=LIZ4sfn9yJ6PhBrHh6$q*xf{gLk1gl7S2*qh;kuDSz@) zqeH=#-nZY#m-;4$fAxuHfxm)lXNWOQy<6ef8SZN~%au`7Xvjz%LA70zA}LRi4pP8C zRCQE61ivE4cG-%Ga1u$fGQ{S2m`m4k9?J%J=Qztm<6=JXC^Sai6&sVeN+;Vh-v%ii zMQ1*x@MjdLGEsQIXt$}g-E3~Vmo1JjwwwT*C|DfK13pl|3haf4DCd(1J1BD(pl0Cd z+RvH4hsnYy_h@LoYYZ3NbzNSGYEY$SqqkjVWW6yL3;kZ8Trq_)CL<%McC>tPfiF3y+$|cIqb^M(7>lyz-n$i zn$^rP6^V_+D=FI_F{r4>*%RIp6$*X=h5^eJ`pRz+qBKw78KrEQAx@m^L(Y(Zac>;x>dhN z1_;L9dDc$9P9%a|R<@@~1mmZj%Sp>&xOyzxi-flrsV|SM%>TvhBlQZTiiu06lj!|G z3!z28(?mKY1Fw=(@IStmRQpvT5NhDXqd*$h4?5MRTZS$_G67NoMQ7)W*xHZ)BzA*< z(U$`2Sd8J{mF%X$g}#TaIg36@zGEw2TYa8Hr}_HBwdK`m0hy`+Bv)%Fm114~*64 z_-h5)D+j%0kCnC~gHj&}Kj^VMBqVXw$4A-}4Fg$s+(+dWGsbY?DwEhO?*kTOI3F<2 zsSkQXxZPhf?{wWihvoBqec_73w1|wPP=+)2JgfF$o2 zomjpv#!voOG5lAAF);}axxs5PTt`t0V??5o0j>Mt59<=M3jS1;rv5R5!j|55c3~J> zQ6ukmUB>Oo_&UuzScr?*Fxtiuf>QegmWlzR>BZ z4)VBbAJz{v&{fvNO1p)ISU!#Lvf%|q-aY-(zmRrdPB$W$|x&q-r|H&}=|9|nDj zt9?q41k^qb($k1JiD2^O%G7i4#~O-EQYfTgSw*+Q%e6kj8srHA3%Dq+ zJWUeHMK3KV>&0$~MSv-eLS7q89*3ApB>vZ*pKVOokQ*4}?3HrpS?|WF2 zv-RBO={%1-+|KNv1lJ=}x>_&>6MK+3B0>fsUv1h$)Z{m2z1_x9yM zq%v)@IUfL8*SPNKmBlDWn0|q=Quu(b7RpmPxwzxig$M4(jKktVxRrt|nl`0u|5c5Q zmQL3(fS9{1WoN;x_Xd|u5Tw(Ba@twx^&s)!mwW^}wXqYGy!XqXNQh#IP~(J7k5wcG z`@a7}7?~7pIivdb1|lmD9$w>mDk2 zXB`IaR$PO$eugSLt5TR300)<$o3?Z4M})uqqM``$A4`6GE}+|(sR|q=-3!~?#qia0 zxS`U_q+u1o(Mzga%+6QKG6VO02354LW~jK2F1AI)1(uqp#0NtrXV-|dWmcaVUyM9N zIuojcCHHff4vw@tvDv+#e4M z!rY*b`Wes>Mru~to&igbW=}PxX}^}&nC(=p$|Gveyx`wWkzcH<2yOl?)-GUUN>?#%+el- z3|*o}|C3(aK9x(cnvhb4YK+Si2lb|`ME)UTyF^Vke)eTYOWxrBIpVEa`;uEwxyMs7%VuQebh@Tph8$$1(xK8>@PaFBXZ^78Mb-- zLMTms#=inli%s$XGG(o%&;a};aT{Que$N{2BSV@NXggVgD5n|$srx;tz!J@rlxG|$ z^+`8`xh>mt60v(q^+pvxIhH0a!z{7L&bx~Aw5m=N?>PpX{Lmb_WABn#j`LO3BX(Qx zaYm-A#`RRmeGq0cce^X6b6pk}MHwB;kbTVV$lQkN9x+v$p1=ssMhjhK>xiPYSL+&N zfrbu;zfct>HWD9QnD9~YRw-Q>`!8eyTgRTn!RBHI1i9O` zpQpSXm4st!_1hopR{u{Zb7?^IMR+CVTJ2e|GOY%hB%j$67cJWOM}XRA)}M^#Dz%bl z*RMphUdjk}W7ElMr75Gz|W7hoSwVf}=hNt$Cf!LGRA8T@XITrBV57lv)olfQYJJ{(6IUWzfe;jxW z)UU@gO4E4YZ1a$4&ljJ}-lz-*ph?X&f{564r+SSw2q0DBcQ1h{gB7t|NW;EMIk=Ta zS~PJKZDs?0;MUo|R2XDGnV%HF1e3K}+C#k9SWz5OPagbKp~>`((hw@-qayJK+^(fa z>7hQd!Rzl;@k{POvt#syOtU`(%$oFp=?5rF|)=?@BT559;z9C>ir#Kr;b#{`np$BrFxo|&uZ88 z_`L4`Qo86qqkuz+cVIsS&8k1qit6D%-Ps!#ivRtWyf07ujDlN1IGA1@n8+R^9qZ{6 z^@4ESLMJ}DrORRnlt%Fj`h^l;$$og#`;9_Qp^odR+#|w=amTDPL;v0o>H)4XJyutj6q`bjppXE~o zRI-vKSg+v0q^?=^C{{2@ov;2!gOz^WnxHW%TBlDc)BO+_*(Z+si)f!~$?B(mnhm}G zHu2fI4TN8w8oXdM$oJPfQqstNss@c`x(_#oIZUsfwvd0W24ByU9^S4(ybc|a22sJf zT!}KxllHDpWHIpR2@5?yfnD#boIZAXun_aiZ*xlrzM^9>H=pT)O5ES3R%u3;fAlU(|m=t+pMZNu%L!nvu%U~;+X*-`!Ts6-c zDUTG0$}5e!>y0IGH&58gF-t9QYnFM@(1-1e8NivFv}ma4hP$$qmH@gh`4J^`24T-T z2Z){LGrm)sRYsMjYNAGQGy6X5bvot{afFj$;yH;xV`q(EqRY<5rhf*-Ybi3@WWVFW zY>l~MVrisghCz)%W%){i0+F1Kz{sjo(VFc29c2HordAQH11#Twrz!DAw!|^}UDm$D zurf3^78NRk)%uD=bx4YsxZ8jSLUcH3;P}rqWFtcH-IGpM!zhPfqxG%D3Dqhg=Sw1+ z1kv1)!VH#`^^Iw2D;K?Pc3RQkSJH|m*?|r{f*=JrtCdneypGLOyl!NlKKv#|EoW=a z#Pd}8#rkJqTzrr|IYE9FvX?J&#E^U#^k=Q^=1oZu;J#Vlvqz#h=!00()BW--fuWi| z*AfoaIE`7RBD{+ZsA0k=nATL`V3bAMNwABt*1=`|Rwrix>mQV5WY> zfsJaxijeY5+y+wb!nfKZGYKge+Vuz7*2vcHd-gFYp=>&7EedtP-OPFFHb*9Z8!^Xf z(P+|}^i;Q<>T>w8ntwp==Q;9g`?7A>)by`$lpNL*wRSFRE#j4-vCt*8h?nkT?^5F! zq8Vy&Ba7Ut?)A{DR<=hCZ+jW%`*ds6sulCN)mOuRWJkZ#O^ugvzGS(b!*mYG7h5m% zTSaAHh<_G``E+o&68|`s*Ou!SS%y{cwdpxo$26JBw0{sw$8q zRNHKn#k_s7dNP13NM(?j5M@coCdZLDgPIkS1i;aOxJr^Loqf+hk_dz>H^w2xk^L5Z zBECF7@@BBgRFVTwh|{QDE_cHdNrGeW&L&bQp%Kq~Ui*nTebqPyU&X*!+@;zhl^e{M zr2wkapJyAK7AS+|Xr@b$C2KsHZ4!}k43jz+m(yzeX^a~w#1`~cFl;|IkPwYS&H*8} zpnQ<#U+y#a_F!@o7#sXpIN!KE)<9}oq~Y2Mycugj+LWG2lxB7|w3DptjU!C4aj7S9 zo0(4!bWc^Nh#5aBpfjMCurgOnT$gEm#DZQC$=dHa$1H_{On&RjUN6t*NZj6}nJZkt zb(M%pF%w!q`0}@a%51AXZ?va#SGY1*-ksU* z!GMsclTv48V2e5AjxpJX(ZRi9v@hhJZ0DMOLhJ{dWea~c`S@zZ2BM-zp*b=DVfT4L zhUneq%mW%2k@!U6x~bMSOZJpIv_99OmM_^@PPzeij6z89&p7q_D2-G>kiw*G@hZy4 zi0A7S@Ut9zmFi?z|2Z%o%Pab{U zg1R}#V%Kis$Jy1Yd~YbUsFQbp^A&7L8|j;CZ1_;W^=yvLS0BdjD&|RIa?t5bixkfr z=5+_vwOa>AMQ3tVVxrr0yHtc-CA%Osy+G03v0Ztdqqh&t?Ih6%y(J#pH^e+~56G&~ zEbf7NHS>oxc!tt0M@M{uqW%eT*_q85R#xh+d#CBbg-Q$?NzZupas`zP`8S3X_i(FXJ^ms%=Zn3$5wj(Bi{#yg zVbCdB_nXI8Q(ZE)eKlYm@?XhZdg$VE-a2$ih@2JC_hB52qxLW5(`c{Jjd=FnC;7e$#sommIm*iE`3*^_x?xG&Hci<*Lbps0}!{-q@Nw&5Mo>Y}ugq!81ioq1B zN_zlbl}-z(m8yV^IO$-}t7(_*+7v9Hf)$LXDU*Z)AjyUmK&VrJ^e^zZsV7kdacd!n zro)4@G`*ba><+*u;(78#lu@3x?QAg=DR^f(P zFT0e83}Kd4nH0B4Td``JC1Qi#vlo0X0r+3(Dj!;kY9(iuiPI)r)wBid*48V$YqT zde#;U#gGJKP6X@Az}LN3#P$?d@x_hq z=lQ4n%v&a5maz2!P0XyFizLJoBEp;QC=tH%u&dFTa#Ms|0+@kCIXQo7dC;6xgk&Kb zCVrC1V8oP*#nC5cN;M&!#e-9>lK{=2S2xf@{>LP6zOaY_O*2Sxpt=&bREtlb(umb* zX)2$XaCqt2&-NB~{i!q=^%>{;dSX(cq6)#Xti!HnEC?KUJ&^k^(ZpTy?idZZKzZ2@nB zIrO_DtRcVF{Q_o``;1=$XJaO zx$@vesw$NXGpX{>K5vB>f;~BLz1i;o6!4<&owO)12he8@O*h(Sj89$fHtWZa{;}sd z)ee9vMIShd2WF<$eb>>*;@yn(v1BNF+?}ln0^UamRr>`#Zm|Ad|-v#M7>8H(Z*F7vLBF{+DBcj z2|xySWY>W1qfYoBm5mQp5_Zl}nL2@HmLbKiwwl+H+AFt&l?sVky<%OjOcO_=JSJ?U z#H37&c1l@zI&2s6e6K_j7VDFL5T5eh0km-EvuNQ=ed;q>a`SVijEwXVNzIyz`(oJ0 z0XTS|0au@0QLH)grm*BLubhCS#pQk`lRgzR_lydJdz)3pFVXFMNDDc3B0lnWIN1+1 zgSWkD8$;f=Jo414Jd@D80TtgN2p+=-`WjWMZsPwy4{%mM9nHEJ4M7LaQk2TkNX{}7Tpj)rpx2(z>DrFwiG}Uhv56ni z30HY?E8oM+#m$GMMwnF&WA4=;c${#2$Wn5U|Mm0ZFOuES?JVyg26Xt_G6M3I?-$t$ zqrNxku76F1Np67L!fkR_HjAeHZsf|!_p&hK9}h>-_qeo6Vpkj~!=U_3J?0#>M0c`V2T{ib(TG5Rc zz~9VI_uV?tpw911t1QO~(=)f@elRY6P0K;C z;0>~f_^M1Y8+BGt3aK!#KDFi2`K1GH#%*oAJHBy(_<1D zK}`gu4yKIUfw?mopn=rjP?4Bhe!b>n=Y9+Z*A098wtxKPhnh9zjTxWj;eG;e;=fl? zP4IW)n;U2!r?HID@qh(Jh@Gbf#Nu4ML0k@|u&BGx%{hK_l3FRaka;1FFN+(T`rp&4S!>KYyG+i$OwJr0G~*Uw>jqSBT;AgOOf+i9=m zohB*wW{rKnSy=xrzA?l-$m5p>aplUU;m6X%riDPrVmB23V$f6Hj29QLjq|`bhI+u1 zi|Qi<`WwhmH?01hur403#0N0Se#cEcxab?hPwW*~o;vvV6Cpo)uZa?A9XiqkXp1S5 z4JlXJIJbE;XJsd0Mv>Clh?Cmpgtjv`a@t@3JYwb3DhHHH3n|8!5yd19V5N#L}xG@JKw` z{_cAX-d+wSn3p_G*;&Z;2=;$E9!ec+05 zJY9)pIT8nhpCXDLg;;v`1;;KoIGf(^?i8KW#b^_J3r=H&J+PDe&x7Bqi(fOl{bq~! zm=5n@uk#!2p%sYyvDiF@+ArcM^O#{Ks7DL7MYm{B4v7(2{GV9ZcS;m zxTO1()+oKHOwRTNI$mQ=DKq2q4&3v#9w<(c>~sq?}Rqkmbo2bp9e+D7Kc0c1TMF6VmNu%N5cn#uc? zotT1I@Y)Xu5dl2_aFCZ1w$qiK;19`k-~elagr=h-d(uIH7qZkPr)gz={)U3HZ+0`2 z<(=`kc77zsF9Q-n1E(P}o*K>vFs7A><3YWrcYVJ3LYuIeG5@mo5La?O^^y~tD0!Kg zU&%JA>MIF&)*{bcGw3&U)>CZ zD1U}HB_A|^VS!N(RP3fE4K!bM2w?qwU=uPNJ$BshkSvratxa9{iHeL;R-ASsfVr>%|% zcn{AA6;i(`UkyV<`>W-@Oj(EWL0Kb491ooZ+{MtI4uBQ5D9QygkNf@11GMG<(Q)*> z?GB~N{xG{f?nQ8MPbt(0$M1#KH(#sj89*%GX};cNi6!`zrC9Fy-=`9%y~*OfmlYy$ znwly(90@!Q8NC=TS?$KH=t2r~kwGx%RfT%gt;U-^x8f!duy^zStFrWIHFlOCwo1q^ zxEr08RZes_=j>5Gn|Pc{ezb>_bv9Yw<-Cp-Q;ptTGop(U*zmzS>3Y})xp}7+L~GO z6hD}Po!76N9u~8*{i^#u#7-bO3HZ7%nlW!2K#|{AdyqAQhGP~>=5(*=>t0893_At_ zDon+JXk?o4l@x1Y;+n66#~wfFGKIJ84vR)MES7l=%_8_@9$FX~5;zUVtxoQAD*Oth z0kNWuPQ#X_$TZY`V4_VwLIBg%#Y)m>whG<2lz){~+4^OqBo8wqk}GEUN#zRZ*y@n7 zW`==nllcTNs?fevNc}&9g%NX=OhxsuYy}KT!zF#xBbj#4^?^0AVGJ(NLp$GAOkx-M z!=$2i{4_gbKMnSBW)zFxWpxPTnW=)v;W_SrE{XntDd^{fV{skU22Ci{a%W=4M4niv zpE9l1HG%+{uLk)YfWcR_fios&w2req5P<-(Jay49X5@8{{ce#q zk2?W3(3GDMiU9yj8M(iP_6%HiX0^i9A^soeBX<_D-TIl6M2U$<(MC4tFHFw&vW5KH z!l=ti<)QiP;NE01Fw?+?0x%EjOEsSO>p1@_MK=eSOJ<2eu+OI60j2y*iGUiAY(l3P(zF0RS zbh8J_zWL<5ze){QVFXqYdzsmk2-W+ztw8J9&D|E(o;)l{Rcf7V06on#Ld+U;UT5=? zPCI(#U);1>k5`-{_;bZA9UJxlQM@p`ue>@g)&Xnc3uWVVf$nTHx@Fs-TtWfyfSH_~h^+)XR} z3(AVrwwMh1v7I_Ni=-nY!R7swqRN%_I{_i*uw@&Uc>~R{M`@lFtKf|*Z`>(BFAeE$ z5CNgXMwQ0)dL=t0qEN2Zn-@|h$sYqY;5~~$AcZDj9NGt0V-hL~CZanRaDaLtb>|0u zzy*#p?%4Gk0T)GV63p zh}$J4%mO;Re_!cxO*RI^_uV)^@J<=Oj?G}6NB4ezZosrovYQa`p+mN0TLdjuw^f~P z@#wEtdE!9|99fsGptek8F0-S*R{9vrMEvPy-f_QM{>b$sN4;q6rWryv$Ssk0g>_>_ z#0f=Xx?%j7#BT;Xz@@ZZg-w9R_!`oM4>LtmY#Dg5iqfJ#lppXgWcGLiR-hL2^5gX|(+s;lV}HdApi;gV zrq-@M=(n%BTaxZt*;U_^m%$WV&$S#I(VI@ph&CD$*lEjhCKPGp_hGyzXz;nh}i%lUaOzWRCRtGgfL>*NvxQJYPG z69_`k%+ffp<+nWb`K3f|+{yGe!c7)@LRIA4|KZ7kRY7ue?{4$OS#tk_PeNT;R3)HH zqw7l4d3(xbI>&<8RP1WwEMztV?|v8QS0?ptCaNNWfF3JqA#}_U{ExX5Nuy^l7h6b- zIvy5jDDXFmyNelTx>IV?ta9-|lg@IOQt~J2Q{z{>=69|S`!fW&;++7cFy{yBhWK+8 zU#XtL4iV6X)cI*~lUz)FfV&{=wY8l7a^H}ZFNXs)PnrDxN+k11m2%x+&?U%EYC4;i zyr{tU#54lNoyTekpoN^+{LLa3QlqXuIa0p{-Kb(BWT2q8i8(Y`zR<-hrq>gVo7(fxV_jA`*7O7mx$5lu*yJeZ(9fg%~9L<0jv} zn;NUc=tr`J0;5-D&h|`G+`BM#IwC^#B3qWC2{0z3R{cPFv2AK~^J7_#jb802d6>ca zV1h-FlGC(N;AQs#wr3-DV9`%Kl)khEcyxk!*RllQoQKbI8o%6$DPWr`w|@2_Obt?E z`L!kpl1mToV$~*>xnu_EorQmJ$DjN1=Ob*Y$da8Pkg5E;o!@5)K^=TgCBXG#6;pmD zYzWu340~2p=iKPddeQz)XazVK8wJo(msTOyVVNT~cwp3PP|#n?k@ZDZ$!2Hf@b&x^TOh2o>A(nX=DceqKe<{o|ENR`gJ}NqFzN zEr$j9Y*UcUaHWZAFNLfq#J4BL8v#jlvO&}A08M6q*K_Og9Qo9F-{+!?CrD{1>V+k^ z%tT&Pt{{u=#QFPa2ByEsdVGu)_9(C30~`zGz;6sj!#)1IvE5k5l`J`$Ug|`RE6Mlq z&f~a>Y+ksCCQjHE-X=<1pG;U^KO*x(=+g2qi}`4b`MK~={n?{!8IE>HFG&T&K1HFq zb<@=k!*_1T%bN8y->v1}L(|%1Q(562W}^5}VGOPd#hMN1-r*fbzX45Arkvh+GW~BQMbx}39%6q790!*=Wz!60!?U}X}E8_ z%W2}JkuK)&Ul9$3p%h$GLqzO$<2d?MhUO?}1(Q+Xu{xeqBPDs;kttj9d?nvV&N@i_|%acQ})8Vkgx2V^Mk@^-i>WN}Jt9)c?y&6#f z!o=(k0$Lt2=hc?w_-76 z6??=1l=|@?qSYej!K0nWIC^aY*GUdlDg{4Ya%ldjPzSN;B*C1gnkL_i$x6Y%bJkIs z_5DN{V4w09MDoMDmdcyTofp0Iyax8X=;r$vj*F<1=I$l91)PqVGcKo zSs#_@WKf;G=FmFl+zo8|xb^^IG|aD>N*2^GATIl`CU1+-uTp2-Gv7n07g9!JQG|Up z#N^}4u&&0zuq{@kZBwLu5!8=-hIim|kGj}!40cO8(*XPnM39E)fosvY8q%x~wa_$D zCKO!WA1QeejceI7$m304zlC$aQ|Im?&zAQ6c5d>LaVxya`hHa+c56;DiSqpYdn#e#hSPkEgFM%S@-_mNx0FdxMC=Lp^7xnd9cQi*lf6>I#m$7BY+pa=A+(zV(# z_o=hNv<)1G`uX&XKpW(ZsrGIiXj`TPW3MFB_f<$_f9M};yJ9vij^BBNuBD-&oM$C% zs!T1OMR&(Ok+&h<@13E7p`-+kXlK1vq>G8<8hUvCC2lB!yJ7t5|$d;)K=?~{W=Cbv2$R4-E&1awIb5Eqfz_D`@yj{{65-9%3oFHH>n z$4SA+CGa#369RrKGTE1OuPz-xEgX|s$V)uz8gINoR~X}9m+d7y8yxzmldDj7z_MR6 zc>VyXxMDxCPYAh!;UKYv60yQ56=Gr`v-M~;Zr-ME_^@cIfLcnnYCJ4!(|PO}@62@( z8Ip%`gOW&^b7hi?t%>w-xhLfPj8icTe0q&mI%xs=ZyU^bN#o%nSN$?b;~1UPJm(p+ zFBGJF$!t?|yHgoB9hudG)&xbAlWrxLMwc@iomC(ZG&f82C1G=lx3HGZzq-esIn{A! zk=`oX1Ruq-@&Q!@V8jqCK^6&HL|LU5dJbqaimbjGQ3~9A zuHbO)>bHY9=+J>AE5d$<0!!D1O6gW*E>d}*qU~|_WiW^D(EM24v(q~xHXnJ!hDKL1JWj`P>pUxDHfa9;+p3SUHgKP84#n zM!r5rfR9)85lB#6elVU@_@Ayt<4?C{zQyyyE+X$?JM(UwtdWKp8p~#K0v8M3%09;g zUYowGHNzCV#v-`E*7Rt(5KY}|m(|Es^HI1R!}>@dhULzL$BCoLb1NAH6ALao%(f`R zaTy8xLLvWPh>(p3#y^R0=8gKXC2J-#0RKM#z`@q zp<80>D{dvT?7Q2#5ibD;a(oY65WH5$OI+;*T4_1qh`Ig?3;;t>{CDXKKh6R5e}J;! zU|WW`2%jgjwyPo_98A6LHEF%n9?^7wlv{fuq9i1!#10}*SD)+afnz47KTf~&S=@G} zHk}Pk>(5wIs7{|%O*8eNo?)DDEceg-?*a;?i9*s%tqRCLI3CxTqt>IN+K6)>10E{S>3}Ki?}Gi3 zl2QJhz7|NsLBLjAv^e(0k6BoK-nj>1#-@YHG;YvFl@<)4mck>pRAiZ=@%?B?txZW`@H$U2$VGZ zRwh^Mln^Ypr7rgl03JhceoBTV3kKja zs~JyZt&)pWtYAZ8T-rUkx_B-=!mFlgxZXd_6wO6kz4gtpiqetN&+NQYB}vj}0B@f^ zj8*|ebI>I}FbpiHoLfft%2|yU1KHp~A*Xz)ncGd(=yX^|D`_Yy`2h_5Wt5&jrXCax z{+AZD%mDzi-i*DQv%pu1aRPlRxO)NW);gFd3~Qp+PBoqaTiYu>V`6HsTp-QxeO(7p zU^uRCgw-QJgGE7AKlrek#8_mGl%>HRCx_s{&wjYV(`)%WsGDV#|5!^{?+JjS5oHP! z6tv&f=X&Sau)*7&WWsDd^KUb|;p+BOs>qJkHOu5O&lrI+dp9*g)@D{+d9lj@70m zb%ww&{iz3DRcn)Dd4`IS#mh<{Gmd2$?7a~Mka=i@a5LI*{kUjt18raDckS`^XgPVw zf1Gsm`aE3F7`pg{`%Z8Bby9XZ+Q_u%=aE4QDD5)!Sk^@+i+jSjOO74n$Gmi>nl*le*J>d5M0 zttM#HqcWu_t)TuBEVC}oiGEfgxn^~HK1rtgOgfI7gLdZiP6GC|$G*r8k8h^fz5mem z)HM=HJFCEm zvo+_3bvNe!?jz7`msgtVT57K4%U<&%yeCbhz}07y#I>iVK+%SX;)51$u3V~_<)i!r zVV8N@LU!D5L8l`7%MO=Y#D2B}3_IYZ(GdgSF6NPE$fc(GhQ~c@{|~p)a`UU1oi{SX zT`VShYzHF~KvA9oLr>^(5TrYKCoh2Wi2x*cR}uN^&h1Q4k%A1&yNQIm&;l?a(_FYzWIT*x7s|*_>9Z3+V857|#JjirNF(rN>6MxB3`PVh3uiqe z+bNfx1(tRqah4?`oX25R5IbPO3AhnYI(eb)S!ZhZV# zBm325`%DXfWM-}Q_7LsmwfJ!;X1$MSPw>#zC#h9Jv8*-IVK7~990MfZZB8%<3xj?< zA4A0JtN*n!RQNL_9HXF+8}+fRKyB+oRvP@KisQ5?PODyn`u|a@Z(7pSmPqUmR@utaz3;)w?&qWAE<|btc`zvmlb@wdCUxA$ zAp7Dqlo&>tMhyn9!go6)4eRZ~1n)b%oc{mfo8tE<-pvfB!_2lagigkpP0CVikRNs7 zHk$Z~ZqB5aDW8S0^$3J0p-kDMn0JixsC+jf8_Jf^N}SS~&|$37UGH%TV1!&5jL*^( zh%;O5d~?TVTEf(;S&U>5lX%_?F*W}=pE@u9XC4s-Cl$NMFo4UO?ldI@S^GBGAZvHq z{olxeS$@MCKbSVE;0NcJbmsEttAgm94Q|cIR3?e*K|c?&HVyVrA)yhav?Bp;L6)HA z&|2T^QyUw2!&jbOW=Vw}>U;eTpcMfphd=dvF-x4_=-_RAj_-@NicDPRx{OEmd^o`l z13ljL9!8(!^lYMDVYb@B8_Sc$cNJ{eyPnlA-}TENVw+t;02a`?+(n{w^lsKw{uFyV zD}wqoi3q}`=v)IQ6o*khkDgIUq*mb(N_BVI(T2^W>VN$wc8IOF*_X-{0?Kg1@nU9f z%p4w00h`dcj6N~yGCtiGjXt>xTXx9=_S1V&JK8)N+Lmnlo1j2^dwuP$yd=i;b7U_k zopnMr2+P0*0}3AWS18+nuD~(t3SVNZO37cut_Z^F)J3lygi;@joauKyZO0NaGeks622Tqo^baTaFCGXSUW6dvAI|O26s=WQ1jvvWjyT}2v zWJIwMXkFi4PR>EdShZcSsmCQ%0fRHZD9J(&`Q#X?E0odDqZ#*b;}x#Jxvcy7!#2nP ziHZIQ_63x0Mw{lk`@!zHUJm2l2Vlubd#7h29LA(Jc;LmCjvxIBLBTQW03&)9AaB7I zMaFSr=87vHJ&WF6pU?nkTvB_l%^29yb#hGzMjrA(Xl$p1J96s#^&?;c`$^!{;mBxZ z)hYwPm8V{)z}h1+)wI&%CrrZ1K}XtRxpkw&d=h$9N4po!;`$X0cA^El1RlJAY3ccc zd=$$5aWJcjw;Gf-YYC$Q$f#ho(5__c|L5`gaXiUdY-2~IQhg6u`+`z+iImJ0RTIq{ z>z>Qu`iplc2a9BDn{i21c*v&Bq4OP;l|6m-O}|i!$jK0%(7~kmyj5l2S$j^e8)0eF z6m?A1_mRusM~F<5o{LKV!LK-^RH^KijMB&;V#9dG%dEJE_)atWHv~c%|(c27Qoe-L}*`^n+x1nn=gFV;?BCU|FdErrp#v?^;tl`KKqUGlrerFTrA77R%bO-iA@2TeL9&E4aVA6z5P4mOg(~Qb=lLf`@{Wh)D>5Vt9g2*3q z9oLrVioLRb8K48-jg35z)zSzFbfz1i`PvyXhuzT% zNv#7Bzw8sMn&r&qv|{m5#62t_0UL0O;V|8@@VFR^fJ?BS*#afFHYm+Ke*;qy-eust zhXp=llm5Y5_Pv92r!Zq@3jF4~1I`{FOY1#9W`^BscI<4?gmH?QyOqRcgM4r`t?7N{ zID&(w5~f(#a2C#ZJ9ox-1x{M9(LXOG*+9FJ^IUg{;4lwnW_HnHRHPfn9>^lQ+}&+F zt2ob*^e}{BALYG&YH8^VbI6p4WMA0EkF)9ChtcH|MumfFxxbyjzfFng0Fxv7r3qwT zf+9l5VzM6Kg1;i|;cPVnHXpsp^JvC-GqqW1P&ZX}`3g_K&nounbec!k6yk+3$_bpp zpCkE}UFcmX_RpSoeOgusqD9;BNQ>}(G#Nii_LW(aMmhr+P7EP)AgQ*hGMLBqiL?3l zXvpSMxg>~k+X)DK#FL}b|C?zLw0s3k)egs(K`X*oW(Qt3$u03rq)OFLIii)Si5gJL z%R$m3M*&sx2jFNvSJ=o{SAEBQW{Tf3@)&J^_94Zn;teu%z3=u;2@MSD#scG`up1m4 zIt>P%sUf{paXrzNml;8$c}Ep`vEK^5wh=F+knFMwDR2esW`__lNGcp>xkFkqh1gds zfP)rbGS$S7IGk#%a~S|QO+Zlb64I)67LkxYd!u!BZv$3nS z4`)gsOodo3$c=2S%zr~7#9!-RUs@Y?Yl5-wr>;Vzkv?>0*q^AjTOYmX+(Aweq+7Eg z;&EzLjM)zc^dyXM8X)Tx4SEL_H!;q~0pxUWX8^$2w|;k&PbCi*lI^L^Q8_D?sFR_H z)yBa&^j0cFtVIqA%m;~rVo{N4+DeqU8x&fswp<15?v=GWX8o}F~Bxk46ijsYx2%PXo1jui4w?s zg?`_-qF0G6kZJ`BtMdqqu{+WkZAkQI9IsLX4K$yiw_sfS2;T9fqgqIQIK4By;@eix zUWijrky(1-w@T<8;O;5&b z)<1j$o|{UrBJd634Vh>S@|NLQMRBo4b+TwGn|uY`2Xk3U*M0*4dvWGp9x;G&6e+;% z5YN37_?~rqZ_OBiIDKn}BHv|ya&eaP13^!ZeMskf&fO{RTSrl6d>PvuMXWW0-BFzU z*kgF-ZnP$h(e^;;r?hz`ohd3|I5iuRl^qKcS#{lk;7kn!DOqodr!pH4SNGF%cvsjO zzxegzKo;mWK9*y-#D9Pg9$2n@7YyWyj0Mv4YqK~|OnbWCh}*QCWeLcpLBXP&UEAn0 zQ62B@jSdu~ zvDDa(d*k%@oy62MP5332cQn5f)!tRqyp5;W{|eoy?!+N=Ioy0j(dFV-swmG3l3Z1P z(j;F>d+s_EPc8E@PMyVj?fx+e&sigd)kc`h$`ZXGDkl)!(x57K@V~-nen# zf3wXS_=6GG^u7>OnUybRqhltku4j>0-0;f0T?f!SR|E))U$V$sCU#wQtyEx@&<^hM zWio_3L2YsUI@HmLUEO)+YEPIvCEZ{CtAUaMuQbwJKl6^nuTs7iytmC}lEsEf)S((4 zd1SWR3!0&S^dHGInr9)9csjjcJCCB!IzIWUd_qCi%|CgGvX@eO^m6ae!=1IkYd)z6 z8U2NB?3DfIH~(e?p9l~1ACOQ5s1UE8Ds3`IAdwh;GnvtW5SAGq2GnvAUyO)~esfVcl=F`kU=`y0$W&xVX?? z;9`t%+f64GIy4%o%`$yTgnWMr9`+2l@N_geb@|kPXqi|L#?**k-5CiJye*=`zaQkS z^gGant!yj>ds=~v+1&)B?wkW70Jhys&PAOe<>~)I5FCG{s-aW7TNOV`YI1ETg~{ zCYKIq+8pzUz)mMe`^Rr4=9zG{EqZRcrpvx-ILTLatuV9k;N~yfwaz5E@;mna)SWU2 zvlL04Ke#&$>|t(?y1LmFX}yGoP{Nyg#YGs0`G7p$*Did~Qyo zcmYJAMuWz*U-d^7@rx{dUfUHM`Tx8pg#q{npgT+KuUo+x)#z1ux-ZL-3vdPprFzLA zS6G-``4_fkPHNt3-Ti2c))*WceV+0x;iipKY`>}G=gkFK!fUKwD&5*~af5g|A8@QX zmICTfANxm9-&=$%Z=7WtI5D#^eqJceLj#cUteuH#!=H%PgRGN&cETqZLY~1kxV8N) z9yVnKUAh1=hpQght&Db-vLtu!soq_4A|foUJF{+(1fg}iO7QV>;(mAdY{@>^49-VV z^r(}*5?^`#agVch5TI>9yo*!ai_rizHZW>(-Ndgc`OYdOywKoD*_v@a(M|+znRV>b zK}e}9T@sikgPdw1<|qc|0M?$pa@hIG5S=$kp`At7DAu=rOH+QPS(MW@@Z@)lp_!w3 zCYW~yfS_!gD7o)de7pKCAn9>bmYsld!3SIvn>WWyxdlyk*KQMlnwnUI)C4qJ20?Fo zrGksfi1WKS51yaj?Ql#@;}Uslm6wlWp2ix`Vwe!X1}X$i)dz(ABcspNZ@QDAAWwX%$929_gon6Z@+ip-y^?ceFOVY=TDV=XvE0ov zkl3;^>2I#fjIUpDtcyB~b;B73jqHj89_hB&#=9>@ajlQNVv1hlGKjg<>x(Itn;3xB zvz@5?CWj}mz2Lk%1S;9|@x-Y1ld+7F?oNy3(7Z;BCwC*p`?%%`IT>n_Vu2jSMhKwUT^?FBQsC}FNeI~Q($88mDfn~j!KK573g(aXE!s&39)KGCc$UT<1TyzUCBVNKyMh(x!< zh@~~fT|(bH=NV9o+^BWUEa*rGdpEaKPQSz4{0xM8!JN~@rch&|@r!*wo=mRkg7`=o zDy+cU1tYd>AmTJ#S#pmInz!)Jz=_W8j8YYM4K0LhneVU;I956&_+grkLu<7|FZU>+ zfl5ovltQ*X^-w5Eu?1QZfyeEpBWA#I1_?uty4@d%RiFT=={eD^cnYfBl%Dv== zZ+v_90o$1uTYbvg@sPwVmCst<)1;6zvs=>>5OFo(NTjsAon&%(X^Q^i;7n}5G(Qx@ zzrY+>y4TJMeYm_wKslhbY?+oO;N`0!D@{w*mj}dKd=jZY6ZJ|xNcEb{=%#>t>t%g z)(6vP;f6!()Nsp{mBG>}ER`;2jvdaCA!b9eFAHK+Ml)JhTdCdB$BTu&Y`y)&L_5~K z>X{9IM4FajB&v#T9rRk(!8PCcVJL-XpRpl-T^*UZK({AtTt|Z4u@=TScuye8#lUGL zhW^^y(Y~3S?BdDPZfkPcmb0Lsk_O`l$$?is(lYG+U6R69CG9CoD-WGvN(!h)tvEf zW!@Ww+B{;HLpi`=N5}4j@CPN6%j~%zlYg@8ykqT#yOb)n*Y3JEuP?*$4gD>3{5|{y z(_-M?>Ij1;L^&518h$dKE4Z4xlB_0L#$|7>)K`$m972bIl*rkJd4gxmmq=fNWjxSq z^NW*jbjRB(g$)xxr6uJ2Pu#QE=2NDCWfi{oj>C{Sq7DK7Os2-c~ zHd9VWVCFsAtKb16&=dN){rQcM7|7-;G6mOND3LKO3sZYwpH>1I zQeUI(V}VDz9Gg!6t-3KjR~r94aGx+tcoDO!=0Q0)e6D;;m!X`oOj>)XN^a{M zdZM(Bh;#~}pwtiCCei>2!6Z+eLp)Zozj4-XrCt~5`w|R)Zj^h6{tx98Xd3sT5buZ$ zO%dhtjw*TvM|``_W9dJ|^P;UnW~S_Eg(Ry( zg4hPx;_LC*J!+8VOv64rDn)ZGqGP_Og1)PPsb7TE6dGk$g}cVC;dU%AN-Snz5w8gO zR~PRj)zRxnpLU)15vhSpuP2)=TOlDW+erqD*yvH^BPA>wPkx6+pA@+h%%Y2Ag;dUh z=L-bTVVp5Uy(!Bsg8WjUj+@UJbe25ldK%X^i$&6631S+PD$!`Dar8^8gc3Za;ka$I z&|ssipI5vOHXyCY{tSC36)$F=@QIhJPAX{s7GLK>Cn$$Ep(n>`h; zULv#@LKUk>XZ(I^#(Jiu3Jn%Gr+yN`ldgdo7AH(AfUbsDR()3zqk?N-H=uWt1izWP zZQzK=_ut;*zfwZ+Y=C`qv>D1b1|aHU5%09#xE+J_S4T3U^B7ZB5PQ#0!&GLrwJaAc z>?XW`eA*=c1|yVoyJ+W>tWGZs3_i__CCb?X-Q^u*V9C1{EAB>bwsdI69U(f8G+G#~0lJYi5{IfCP(-}XeU=USM zwyL^_rkyoLo%`d#V;bP#fPCD*`=G{Q-Lh$Z9@xI?5$xLwMd#^^d#|2UyAGHq@g2oE z)8R(;eZ&5swBRjLjgvPw*jCCW0-B-#4)~TL!7P-H_Gc{^+NSM8!0taWHIxrik#fc9=t~j$)dBJMtR! zmOe*}=z!g}ZX|$Ob0(-a>Csz*rF&jWg?)WV#H_SCI&(@I$tZYCsG*6BeMJs}TP8Bo z16<;GPRz-hADsux^34$Aaa_q_fCWFbD=0L;O4Maax-yQ(*7Dm?8`E$nyEUa~S!!e1 zx@ddLkKy%f=YU^DO(3}hwjqovsrwLjvV{iHa2~kamI@a#6SuY%t7Fjr^EYyxO6rhDqeqB)UuNIwwr+EN3Uc{^V< zN`HZHXzu;*(AV4eLLHWvNL<;K^E|Rc&Bu}oM0#ySd_l?-UuA(GLkuvY6 zmxyFT)j;@;|Db{VixY^B01eASuXPsHid|oe)s~8Qm-wftQxc3fr1GrYi^@kA+7ei zA0R>Ya241D1O38~#~A3{I@vvR!qRWmbOKmP`?Uu2CENT^BFZ<6h#L#7D(G=_zTLnm z)CB=(Vx;Rf#v=`SCetLI7343Gr9s{$c9OF9KlLAgCGf3%D{qLKtG!2*cV`5Bux^JO zg*s2d6(u7R8r3t`BNEjEoV?bj)180|?31l1aIyZN?1D!fqf&aE&uovrY zE^-_lxWu~X{@m5{j2|O(gYaX}0Ysk6hcfRW-1BYru^*tDBoXwNhUR{ZWLfaIPzm}_ z^y`ggOv^-rYS|CmRbO{6*I32d9C>tBOXsy8jxlG;D!sx`@TV*H2`5 zpdn28;T}ah0}+bt=vJhyhTR_Aq83Y+;yMhQ)GOG83fU)#V~mjV4H$K%3lcqTGa0x1~eDNhh(m zrFhw_Udi({pVv$7(mez^@_ZR24|ipe42#C|6SP?lRFE&N0K?-AO%{-;`EOsyf9#^& z*@B_L16Rhfjs~fwWol@8folSLKq{w)wz3gJ5~-Z@n7@;Sl(XQhzngw`HUhE6nmmBN zzLW5lG3aB=S*l59s&x1r+aqRb4W>g?#~F0M*ju;5;Ilf{_a&oz^W`yqUP&P6SyyEB z*?Hv?V2R#jP+t!&AdgHdQRi##)+PjqT)`5sJF~w|ENm=Scm@cDm_8?6H?W%1U;8AP z0C*6FOU#o~HcJRzOQ^Vu`u6SvYyji)A22oxAGGdp3V*^D7`W|%7YJtK{>pJK!o)`| z$Eoygdu#;71kP=e^dgVIQga^EY=)RAAp|gKY8Nw!052O>VJuklq4n`xv)AV-Om~4pn(QXH7Ztq|>i(o1q#}LO>UM*I5G#sW};y{q?GVem8M~gY4($ zW#c(KU34|%dDktLrr|8fIT1OK)9iuEN8=@r*albv1m|&QUBP4E{|Dw$-nbZ_jt=1o z*9F44ha&)iqUTMEhGorR;wXvATnP-F(XZ{Iw(gGVN%*r3l`KF`hEvSjhuk*y=!B+EP@rwcM!p<^ie;ibU>zSEHqjge7aiY%HNrx1;K zF0}UD-kqA6F-CdA--8`I2?Av$#E{r?* zEcU*qxN!|f+Y3+%06;_yY6$c*KFSoh6z2(@mtZ_#b5K!7Xqn6jO0BdKC?%!kjwmUY zjMOkbwFi7kkQW=H?=IU4S3m>R4Vlb}*$(I%tV)r&!a-STg?*DaXBO7gx1n-%DLyPr z)|$h;)VX8+e*M@W&^`*r{^jp*vnwlDos=5z+a`@bmJ?g?-X;lPq?{!?VUFKy ziHK297B{qJJMER5s*|Ei%%+>!BSp3LN;A(Ct|;weGcu50YeAeg%)Q}nVm~8<(kSGdmIDZIC(6U zMu*?)H{f$IY@oL5Mx7XbJ`v9tV_Cn2w?896hiTm=l(EJ54q;|QpCRmyS~Sir;E0t( z65jycH7uq{_nY$=9Ox5F=@3nX&AVNYC~sHvK$df95r~cZ+FqN-$K5We)@Wyh3L@-v@l`-QhTkV|mm9}@&CMj$v5|2P`(plp9ERV>R|mr| zDZ44Gx!DrUaG#{xJ@M2x8Bqj}I}isyH4k)fYI@CP1h%KPp4Yg-Jlr<6_^>1A#OTHd zf8?ajZhCnCHPvAprF5JS$7snKnehjJpS;-D$6Df$DROcjktx-b2`d_uIPH(nrC$;~ z$@=~Qh3`^_5j(aaOz|geufPl6oYD7oD?r76aNb%C{42a`ppPF4etZ^A70SYn$x*f( z4i3G8Vy`o=MY)JOfZnODd>AiqWgTD+CIyh^w>1{q7=-2Fn&AwOk}+mPQrhVbE8lbZ z$zj#*1=e$J9ABuM12v|*Q@^(lgrR8#pgDlQ1|9q<2?3yWNkX(zV9lvW6c=leI@hAS zsE71jgP&uDny6b;>j+UC)Z6&J$Oc2xqZO(zWfT6RHx6`vJn&c)%sn~X&2cuhx6Nqi z>qg~$+aKTZDjg{X-AlqwwltOVApN`_FZFzJyf>D=ZiVexuHHE%hrLtKn0g55DQ~+? zkm}>-X!a!!5+00&jv4R_Q~#HFzP{ZQSl6a zB@`YMU?3k#DBK)%^!M{qAzV^8pd)Ew&c4tRYO-HftE5l=1=hcfJ$yJ_NVb6>#BqQ< z+=5$$2$m=({DX(gEI~DUwa&Wzkt#wzgivJxlMcgFmy+BY5}n(vETtW|DjJV7)szxc)vyv42YeR= z@AMBEdqiE}_M=P?s}E(O2p+hIYODSN!JGU=%8~7P_V}g!!}JylC}VWe5`x!qoi;k6 z-ikiR$%E6McDINUjXz12($9(R?1(r>)D^9mfWPmdN$V#-xxUBiRN+JF)>6zXKk58Y zQjg^2$b`~S{_Qjx>xgLI9oa(q3J((dFvjB~#}u8-vUFECt7-D8Me#VyC&etS9Qs_E&nMQojXQ#m^UH3Z9L`x{-yR&f|!AH1sM82nK zE>kWfmSVCUmO_Bc=wc_?sdxr%I`o_lMu9FWQ`3Cr&%L%bs8j*v( zA^m&7|1joBwy0!)M6lfwSUztVm<+$5SZzxiGPK36P_#NU0|z{relT*&Uog>3=tDTn zjf`nyNk)s2MTRZHr8f{Qiv^J7iTu#>bGz(mxkv5%+(WJO6{?dQdhG0kt30$x;DN93 zkW`$=A`2p}d|HT^N@<6om8uh*l!G4a;^;h;cXffQORh(}mC`9ENF^obC8ouF<+uIr z6Q*pU?A#psh&2mW3r+3XtX0@?MgNQSznoi3Op!yX&okmvpsT6?5Q^Y7gAlkHKT#eE zs{BC;TQ-*0pmetvcORDCsma>nbi8$whHSf|-F*F~bD>fbviS^)-8`lDCtg7E z&Vb59t#-+9A)t=AjbqR2?``33c5cYh{UOJWn{pfoqS@jkX%s{T7Ifvv4>f=m2r?b& zi(kH$WHr={{t!XeYJ#_IV+8>cPGUjXsd`ovAxRKr`{8!EGCtDih05m`{W+9Hq$1*A zcN*cO78gpdv2WWIx-(7uQz-=?Td@95-?9gQ0lU5Va87(1G6aCO)Vo#t$5Mczv1r4# zrT(=M#8?C`E8b)_bX#BE(+3uOmDsB4H%b@C(CVeJ6;7~DHGa^ZANWz1*7aS>yH?qG z2>zHgb%)|xJ(83+i--lTczt?_?V0N|l74@vu_%?D@0A1Bj9tWclw|091Bpl4SJ*~2mCFQ^eF7n9OOSSpx{-Iei2S3s2{AEI*mv3(#d@hhWVAT@o*p;L{^}~5U8z$UC@J9s(i?@d_E{p zv9voJxW+!U|7uwa09r6oI$a)?{2c=E&%H{@Zwv--iwn=OE!BuYQ=Uh6aMc1umY9NQ zJ$Z2kPj6uO+z}EIdH8uaK3i#X>OES)*F@5*8$Pu*&lZ!WV|x42nviaQaqB=MEllP0;oxsbQHp`#@Y+6fA&x z-upPKK~kO)FR^DGN$9V00SxvGAU71i12HyTyAdSvQoTk_Q2Ki(MjDro!lX()oed*o zkP%opJfL96-^(NT<{1|SMBf5P|9#JsC#&&A8b$f}@$K}cxa7g(XLpyu5Hbaa)}krQ@{bev4g3m86=WwYrRFz3&B(xa$+AwPn2;cttq4OuTkfr9=s8{ zfE8c6JW$W=G-n@N^B%}pqUgoTcu7P4Vvg5z>- zcd%4xspcU+8R<{#Ea2OA@9*Y)FukZ2%LKRToHdSkTz|BtyNX{l>m7Vh`SMg<`zODS z@h_V338|zPzk@EtPs~#wZ|eNO)DMu$?68}&F7)ljbTx|)cL%~XQqJ0RNydYGCShI_ z{mk6EZE@8xqu2*;R}H76^-f~c3C_YlcF#8$s03!I1gS*VO(qBD^m@z17%DA!Q^rDp z9}|jH6W-j76#tjTNdWj;{Dg59-=+H^(DKmGGeDs>p4{@Z#92)$Cp7QM1TE0CCzRN5;uK>!VnFg>K%m zvHTV9GUkB{@CMF%8P@;5H|E0$vY=%V&eN?!%3U~=35ldc!J1}Pof&xvIC8fF8C6Hg z!5?^ptd66`9#`4zS$|b4E%s&^)5+dRnjV6R0O;ZMb3n3nqp@gC<&EI!%N)y8JRNvP z1VzSDZLnP*>+hi`oj@F{wx+~R@xI7>Geh+0Jn^~QqhzO!(Lvb0m2IHsN6R0TzFMF; z(}8|xfO!?B6^x}BY+}qYj@Iid<*Y$Ep>bf5JSf0WW#1`0P>H6HpmD9kqm7%yS@pf) zt-IhDjJ~=i0dvs=ewwYtTs);l66-XGlcTa8FWeqRSz}*PaUkom^Cg z2Nw=ExoIm!4GRTAgrIilt`S^u!*KNis8v)BQJf4GSy_>nPxqDAqMNE&>Ub>rYTwTH zqP2zJ^Hm_+N%{n+rfV?BtM*ve^dvlL5pZblIQ4;i`d7S3Ptfpepn0pH7;S?Y2II98 zF=j6fc>G&*LaPfKq))_%Pj7`*Nd4}mATb@KssvR6O#Mlr80GquG(w|F{=&arF6%b5 zggRN=$EugEm3F)-?F4!GXZTQs!!NHQQKK4^?A3N1?b7|g#pqx{*6Whmmyu9py{`yZ zlgeeY6|HoUgK+Wn8WH0QIh3Aaua5n)BIP^~7F3tHj637q)h-n3OD*N8u_iSuoVj44h zrh{m6Cs*vM<85N$roeAuw0t56DW5w<-?=c68bgz{3^l;PC=pFl*=Ecwpt>_br7J2; zT1(AX;b|d*iO1u@+rwqlHt7I2>*t@8b6biA`*U!KJldtTvwgs2X69`A&f==p-RDm5 zj^>mgYUtDe&z1WBKu$zfKWJ-n0=tg`(N-krgsleCTc~c@rM_dX`SbOieD1*jE%(l8 zVBPIqGM-Q(6)ap69C35=L*}2L=kgn*?JpjNolJCcSHQ_WMIN47PRqt4Agd4oK-!s> zMJP5FJt>NBy~tY_x4Q}>tQRhUi|crlb!$|8*gKZX2xLKBgi+80Dqs|Q_5Dw8=c<** zh@=eG!v)yQ7K^{vD>PwT18orP{OT*yKP;R&N-c_cX=|okrSx>B<*+wb5Ie%V_k=M^ zm)7>R{gK2{f%CvZ$V|vLYam#L1`k~apijglz(*w4`wl2b!L6+LZT#b%KKNh~)o)aSfO)fn3Clvg zGIFg~KA2F*&>IDPuBOhVNibnw!=K2PLUNA4EL_hAiY`OmPY3wP67Q7~82gE$9vkNW z5gq%GaUwZJQB(*o0+1LwdIPsRC#DY9kY~rt3{>mZ0)2?AdTI)f=SRZSP$6{H(^@5c9pZ~=k!~RQ6_W# z{%sxp(m*E6rymmk)Ci{Lom_9sIO8=@N9`wKiMuMVW~WR{ZJw}SWvYh%8_^W_zAro9AW_i8=gkKY1Xq zo@Kl;C?sPb=Wc1WdbES#N;GJXTE1tieN(Mbn)<>xK425-PMEth#G=wjU0aO$p(ELX zzt-7dihQ_+z13m&0^7)TjyY#FZj7W~P@|mEwpALuH#WGa9O`8-S4__|&fk7>YcKXO9`UNMx|IgZr#g;ldA-BLHmYV_%#RRh5~Qu@rFe&D1bUNf6T{8 z<11M7Bf)3F+DH|^+jtkyztxm9zOY^4!S~k=PDOSmHVabYH(RibX}p^Cuj@Hf^1{1Q zlQWF$a^zR>@$J?NUBiD9;YNN|NmXAfr$lDiDI=YaU5nB6lRZakbAPJ?6Pim6{kK!F z;qRL0(qYOY8-qr~8O2?u+sP(4?vr?CO7NKa;4D(QS>NeyRSl|j0(T>4-K4M1eRkI} z3rLhaPzB>$#hwo_CAPSJd@9N|Nn~j=DwH=fZEJHgmIc2KJLy60AZXNRKo5pu(?pCv z0yK;qO!;>T?}+qfY0NV7c`Sv{Ne0>+I)8m*Sf#$=-_y_-UC`vK8029WVuhI5GDgH( z5e?LAl;x$yPc0Gd@Yy8G71a65ARIgOt3)ZoEyE^OpZUhM%-Lq~xTFV3sGc1(FG#zc z!{GaEW--yjJXHH6;z`yl`*~xl1aXip+emR(5YrzxJeFVv0J|Cqk%cYj4$C3Trfv`R zS0x(ur;G|1bRZWIW&t+XK)!+_NyPAkd&FuHDOI^`?Sn9#ANN51AP7^PO+iMt13$eI zHVSqPg_a=F`7L6gxD=+i=Nn-!)4?}5Wd3n>T#lRmMH~wiV@?=0YfCp$Y%-w!+>}@e*{y6ju{Q z>eXQg0gfo`lsxsfo3U1{C`|$BWSWnB{p=`+mcAtWz2DE)Sb)1x{OL@tFO$qv7nfcl zkGZ3AEs7nCku2_DJ84A6B?zUURbGxoW5)>%Fz;Pq1c2^WRE%bf_|`Iu&niHC2>|@| zYs+E}Q3{E$)oYa0*h^-VQxk$m8d+uMhuP3nSr?4obfZ8dYcv9h`@N?XCvQ1g6;?bY zqehW7oS0!YP46w$ONE#|6waX8TWfi|Z(0AZuk*j7)v9nQUM;Od1e%gj@B-6$Tk5+* zt?a_iFzKJ9s^-ek29>o+=yTUiwqhI9u`AFg=G$v%gg^S%5>MNfPBKVdU=|ef)Tt zhZIOOSg>E-d?DQoBXR{wef>+wrnU0G#g8Gqc=vIB@tU%IYcb9dkQk#(lFz^@AUU(R z$Ati(|Kx4f_jGA-DmkC!o^D8nW}gwJ7yqe^O1xou7bOBD#_YF@n$kvQw5zT@U1|uo z{>x-GR8rTyLf2hctc;qt%JQX%Hh#b7>2EjG$a;rc*w$_i2G|MX~Dhx|z-y^(1d>R%K7oqdDIJ%uV5A)*2WURMWr2 z3c!d8-|$^JMK4+0zj2R0LwYR)JZ%wI;!QkoMx{4I267wC0=3TYHX6&X|JF7O zVBLM~w6dqU786?M%9!}25lXFv5hnxR|1U)UIt-o=Jx7_LHllI;6zH*#(_W3xNj!)~ zIrH5N1ma-Zd`^b5y$&?%MOIV;iJWr&%-ijZ^k^AS%pizhgmqlZvy*X!1gzu}d{B!x z>b6-V*Tmw_%adh$o#r@NI^%F(j)F>uNv@E`B98Nn3+SFxT>k-BRn2`3EPY+?j=HE9 zb_8Ok6rlSY(B^u*x)iY}%INJo3!5u_m70fW8VnLOZU!{0;fCp+!d(D%gTantw2wmj zeP{-;+abnyLNfl)Q1Zh)Be|SQa?}&($;!+q5(h2S%rM-aDC^Jtk5K$|hk5QjU&L^b zul=aG9ebBTg>1SXf^C$_!Z!N~Adh}Kp^11b`jO~>#G0H720=V)D{Ab(z9)zT!OVzE zdc6~Xip#-SwLl}Qd0}{{N3dlw6$yfPq)i;@(P`Ggz#fB$?8i>5x83pqBmfuFzugYMad-UeM@Rp=@2*pcKea_ubBSxwwNn{Yu|FdEZV~`iu`F7mO`xT!0t>7l4Ongx0?LmU@i{>{N zGZP@a7h9G)WO49X`%#Ud?nlJtt4BDUJ8!38iQY#saZgaxJ};+Rji#zJ?_YtOClLO0 zS!E9xMv4$_zlT$>JJ5}K9fg7JZ>N9)nY*HTXs>Y!xj)ICrnx8A0vHFgj_4nzPe#5) zC1jB(j9eBO^?=gCX^ub_t_Uq!_8Gx$!2!~eTUkvrZ=mhg)zEYY&5UvO4tRYI85b=A z`o`hY5o3X+ghN7S@FUIDP?_KMzhGbsV7q^YR^%F_bhd_GzbTU> zQjd&b^gys>PytU~N;>!BWdDwM%_S%0s$OZS0CANhjH8LlP46yWXO;3;@0hqC2Bc0h zYErt8-jA&oD`hFi`)qAUg5ha(E1cKSQ<#N{r>^kJK8n6Ga85sq`}QtBssi`8+x%6y#S=Eb{NK01S9zE2!A2ok<(5K5p4|)kfO2T32Ro7Yp)pTjfhhNu6YYtX}zRgT*-B%=0}tUM)#pq+ZxPW8E-@R#23o z4TVt3=eDJT=rvR~xlA2?J5?CODcb!<7Sr5&o^i%Zz>TB!pQUGP9(oleY;WpL+(96F zk3I&YN?#6y5SO{74|RIBAI<428W|9ig0~(lhitnXBMm87l8~!OV4>9=FG%g^RT&LJx!3o%=6g>%^=8~Sh#CuUy38{#D(1! z`8-E&P!6-k&Dy5JWAt{P?IJONO1UZ5b<%!Z%0beJ1&PdSc#i&rN(@;CFou(w+Q?nx@rHnuGs=&P^b+vb>*1)AB zMq6Of?J}E;@a7C46=r{c#InmqWS6rBxl(SI56{#DX996Im3kat)9@pI=PaDI)@J3f zA?)ShokBg=?*X26=LIBy&|t=o1jvRuadTzJ_(s+5EU-*BIn7l8?DkPm#bD_S&iOsND$J^IU!%|ha@%plx*nNV0doOsZ;due?C)G_Cdbhx+p>~zGNmjakp^CP z6G{To9H&^yB99v94_uu)5m_-`;vPYe$WJKZ=eK;mCF1EX)bVJ*1-ncWfo;IOVmqId zpiLf%Op>8qcCA=eGB!&Ual_~G>7iqHb%kN#nT0xv0p#rBjXy|~mX2Sp=zrBQaEeB% z{Tk6c@w-hE;uof<(?NFYx4?pqVirQ6sK;7^q<%8Sh^=pjQ;E?&>s4i5z55bRhIIC- zCLv0RJ+p*PNb56bJVoJ&8~c;Ka}Uk@pPRTF+(mt@4+}>6bQn6xirk|SR^#dtQM>U5v+RSVOV*8NA zwhx*Vt_sN&swCQc=gD1s$J|h|gau?-kS^Usbm(!skq99j1p& zvlrVpXUQkdv@b|LV=`E(*}o4z>h~;EmApx;evArAp8(Nmn&hZZ+|g2OizpGy)?g7c z-9bD!V0kG%tW>@$U85F>l+82!vb^#2E{dK!WIpX=JTL=eG}myWl~| zTpemk*J+}?B~+f-ugwcWB$T0x5rF-7Q6fmzzOk_(V!_e9T20|!;S2NIPe#cXSgnHl zWOJy#FKG#^Cx%(PG6vT<yg8#14#}b718hMtz!X{Hv)-kr`2T_+&6y1=FmM{oIC-(qU?)9cOxwZG_Ycq^)Dilwp5G;b6lG`4;9H47%0tuk}KUUWfvaiAKAMHdP|J4th;(heF)+VkdN z_;~P;5dL(qt-=HpYq^0GC1DmIj29#JMF@2s*bB-7lK9b*{OoaLfw!e!)mbY(E|I6C$(_|V z-73qyd>>`W-gfI>Cghu)?~6b^VQG?N2czVx3h|5<$WQ0SxO5$(N4lHJhcXxD%Yz zeKb-~XPc=EBvU?Z0BS;h$C&pbyIqAe+VE0^3qS7K2IkeFYoG%ep%dnAno5 zbMx&&5luPF{U+@gBjfxJ_3+U!g*A)zR)E>uAKibYDL@EYv?@0Ok>9UKa}4=bhnCzX zjYLO4$M!X9fGK_#$(4G;!RD<`t85m%4-?dgZ&OSgqz%9vKhM08#U0lFt#yD3^+%1- z7GtOBG06dBBH+|VLO;|39?8oi!Ok=`lr+Oi9UKmm4q9yk_tn-3BW)e!-M3#!{(G*+ zosVnM()%#OHDgGAyUd)8%eV)L79|zx4xjj_q~c1VbE;17!_=qMn=68@J?UU{D zJj~0?Sy(D7&Aq75AfCKTub>9VJyeX^^{$kcn^UzrQYr}L^0F->>78a6?CEmV3UTP96pW5Z6)KwnORD-vIBr}l_|q&p zME?R*AARw>$02hYMPu9%b4UiH>*umIxfg%{n!BzCCqIQ{F8Ao#>tye4uv9rhC(rUR zKX6&rWj|{YBmq0f2``y*a->@tQn|)T$>a-S4o^EOPl&kH%?c;3z$w|rgcn3aHb>O} zxP&6bA66W@X;p~2mp_E2GFLO@XU!an zB#NJXC^n#^cxDKTy7!X2_vkS{DpX~qC3~%AnrUKO*hjwFyi;Q^F4GrSm2=$y z^`{UT_uTS+JcJr;Q7+6wCn5qIuA4ToJ=FkY@)n{Egt($K)~F=IAM2|$U_4M4z~C>X;;|OSLoAn@lX2eir<;H7jX1WVTFhEMwD%U*kze}Dp;%izo9|B=MHfuqmv7v zta+DH+6GF5q90G1Wd7<_EQkE;+(M()E#+7cwE}QSwvsh2sCU;VeKiL+x>O=!HaSrzny9iA1&1p1`vYFPWeY;Y2>!P)sR0Gl?1>Ohy=w`LnR;Kri~l z-%)6J9!MckJw<#4`J--!o8p2oRUf)-XI@C&sm0!U7RANCi~xx0j_9ITpK5neUuEU@ z+S&p=Q1#1Z!6p1kqnhmH@20KT8oliiYKqus|Mf?@d5V6kM={!rx>&=P5EOk9v#blm zQ@|~kIy)!bALoDP(YubixkQ0mC<03 z+8L)k)`^$oLBP`^SBte*=VWQVq*LQOZDdgx)^l(#mj)|3>D6@n&vDRhAX%G+8T%+a z7EpX6JI&oe=GM{Xg3s-u5;Zi;U-%0-T>7+0)(=W*cTIAzGXE=NZdg_Zc{&@ zz43N5$lH`a?uAmVYC=rcX}5yGmsDg@HMZ$`BSQ`o=m;zA%@a(WTS<&H|t9ErHo9^Rkk-?{~Cq3`NW~0ifBdlK~<6y0fXKkem7chIl|Dy=_O!7 zXoUyCXV1hCcM`*{z~Gw$P^RyUNJQ)x(LUP(qxx5@x%TvAQglAb!`DkqA3BsKUbJbJ zgi7Ruyu!QvHnlVtJ^3UJZ$-*(%(-f?&*rbtX3D4*L9QT>5mk(o4Y~S$ol+OMVwI22 z_xn=2>vwSNeS%wwKBfGBZOWx00K|qKJ#DFcxF}*Dhocozfi910rOOu$*4L{qeDXL3 zg9=pIw_CC?*i1fe8353l!RRnOPqE}yLcx{fbbhUo;I+HiL4dRDsH^xrQo~4Zc&sM~ zS7wQ7RWH>JxBwYz%ssfl@TI+lG4A-2eWE=cg4cPnnTn56hUhFT?1-k|Q8s=HC?H^m zEHH~?-;CwD$f9?gqjLLo$5YDI?>6ST*CsP^+y$G*>plS^(};7(hY{JI>Ygp4r@mA^ zTuFhlR-(NOf^M!oN>WFjpdMhkU4Y9KtZGhUO=w zT9De}Q$#-A53?XKnZ{8b(~tU&(7t{-Ss#Z$@ACvwpc{tar#K7_+mpkpZdKEsR51e2 zU|!ORdCFnG50{gF^64HM`>1UUtfCPP8ir2xJ-G@N!Y$`>0_FuX`ZF4k1tHg+p2$t$ zF_KAe#{Yy8I1s>4l$65lR4AT`N;yffuFMVb-ZOBZ88g+|+y=P(&a;)hs==fWPllURnxSoqtlzwna@Q-}8A7pkmF#cFka(nTkyqm$ zNz&kL{k#GJKXXy;EV~@x4eU>E>!jpx8@gdUfbSAqTm&o-=v@qF?hL3deD%dJ;wgOt z5h>yOrr`Nj)74I_ud$xMkEUzCA5O>#micfKpR;BP|vAmu>!y0QRLp>Xt{=Tuft z=f_#ksuH{MAof^1I?Do&wV<2J(R6g}27CF(0UUuc+`uW=jw|>4rY;2mf{(<%NN#-j z8-FsfobkLLARUgpzpfbUqntC?^o+hrLK;t`3F;7-?^THMBeK~;qv-i7fBq0S2-=20iyT)8iC!bnQ&TkA3I-b40`2`o|P!& z5Ucc)Eby_9##t8NYyU|htpG-))1$*90XRDc3-~$((+SAl&DcpY zK@th!)EI=>g>>^v^w&+HZQ5@GyRV7@FiLTHMHN2}Fl)r%Mxo(X@sKd?>u0#B93l%b z@}QgGSQ_v^*zL*FSPvUOjS!jRFlr1X{?47SsRIcVOmJQFL%##=mjaMKJg-Bnjl^`V zV9w-T)d@xi8nE5FH@NkNRu75o_0#2MxWz9h2?pfir$u#vj_F7hN@urN$Eu`;B|IhLOOq5}3p@SU$QLn?+fUia zPqP$?aXh5yU?rvC1v0MR=PPY|*n<~Gre#~MmoT`ENa%-ron+OQEaG)ZK%UNAT^1neW6r)Lz)V+di9?(L`xk%c7gXFG2(7+=s`nsIoFcptd7Q>pZXPC z!mz4fY+`QqX?eUXpnM~S9L6G(k}t6@n+h7OHa(`Fj5LojnzB4h2eJec=`iqJz>zi6q@bv8vSh0V|v?7u5p=22=+^rn!40*7dl&x3h zG+wr14aI%lB*0O)_dB9|HnB8EwN1_TYH`)+PZRr1hpvV(olyzq81wim0Pf9QSrdEI z6M%DulAhXCG0om1<&h0!Kww`b#Dk#;|~gT z&epx)Z!b%Z={%*P63Ok->lFi(Z^YhIU3j>vU`5f) zTVn2a-Q?Wdn#U`uhV3PDC%C%7a&D2xyZ99)tsqsVVpZGL<5 z@3LCZx$xaF{ACy+f?j?);@1y4J~Lx<1r^#qlRq|=o@YEZ9UZP=NXo&T z+*b-V&mc;rIvdsG``*u^5WMn*1@c&lJunDwpnP;ss|duet%%Bb@u=u<^~f9?J@@Y0 zJic6hrK22VW4D`laJYabZAPSbS3bi&{uJC1UW)SacmC#+Ohd`A`+_)8j$f*o$NN59(y_b!m_iQe2(bZJs_ZEs+q&J z@94YryO@98P4P+Nujd4|+t`KGHZynk5ZzV=MsGN4*{5SYGeMi6-mZxLuW7S;7LRHQ zLh%Y|2XZbS?Ty>tJoX&pEXTWb78R&y>}c|~r`EJxxcEgzAdg7hmLJK}3M+21>&el2F6zbA56$e?$4b3yz(YNd=7X7|NyaK@SDwTyD`)avG9cLd5^Yc9zvX{~>! z$+Y!g9`K6O^Fx!$+9f&L9qZD6f{A{#Km=DSZWvUkV@;GCMT??4^wycKX2Nuz!g`D| zEfZZW#w&=N!w2tprXluH+>jOF0*L9+fEtPsRBTKPr{#>ol8WdPkeW#oN|lN531h=i z=f)AqKoN%-3joYSymTa(bS?D;vBoWK|8LxZjs(PEX;T9m+vF$0zq+ULTyl6+;@>E+;S7NWvo9k&GB~gF^ z!Eyu84CL^6{xFGILD0ffBx@i3*9DhQB5;HdARGgEJ-+=19G^F8UNAMrbllyywv+Ht z7`y*XE|7CJ0YZI=L$Ga)QhV`eiSqqHe=4A1tgyS!jS;%6@WhWn#;o||57x{Xa=?B; zLa*_c!Uf}QTVY|0{5VILtQqWQICc2Wd?orp@B|5R;-nq<%0`>XLdHpjc&974wQ_um zFUO>+>dKS;MKv!V*Hnn6pH>_qnI~Mfwfc290I6A*2r-XIm&Q zk*f*`0P7;0jZoy#T{U*d`&hq{nUFF~gXFKv90tl>9gMAo)pYs$3W=r$yAWvSL|jw> zr&n1E$;Nb>7S;O)0(b_R8z;oH3?2nnhU?wv0r^>vIq>paPY};HqoL<9b78$DEPwON zJ}4;)z!#4N1RaE&cMG#iz#eteRPvJDx~lr@S`A^h0RQkMPQSuerxa6Q0QQ~Dm$)xw zffEZ8blAJ zn7aP;x&9&C%}ka(LRyaxFa7XMwLE93kLO4=JblGVMmr=ckgIvVCW+(<`tH@mq_fOE zEm!NUc!9qKvDvs_x2y55FntwwSh$81n;TloQf3Tg&(%X>N@|X+2Bk!#2u2ueb){#0 zGYuLw%!+`=AR4i=t_HN_)vyww4A*Q+stcmXAXn{BtqfeQQda(7;M|>j=0ziyGD4U@ zDboDsRau3zLoOaBQ@XlHHHq0xQa0)MLGUVw!B%dRIU1iU9~YQeP-juH01v`FPsHdO zU?WDo)C;iv9^D>hM7wnuxFMZ%)jG}?D_K@ z1NCz!{wzF~+}_nF7^N-Khj7Mh?y-|>)o*;_o zc(rBdiI+-szOP@7Ze)&-%f55rv85GbmYj8dJ;x⪚7Q55tl6FF@EseHkOFkUbOEA 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 Jhr(#0`TGiHy~Y3l literal 0 HcmV?d00001 diff --git a/MikroMaster/20260501/20260501014002-Config.rsc b/MikroMaster/20260501/20260501014002-Config.rsc new file mode 100644 index 0000000..7113e4a --- /dev/null +++ b/MikroMaster/20260501/20260501014002-Config.rsc @@ -0,0 +1,5547 @@ +# 2026-05-01 01:40:02 by RouterOS 7.22 +# software id = 2961-C4ZZ +# +# model = RBD52G-5HacD2HnD +# serial number = HCX084RAVFA +/interface bridge +add admin-mac=48:8F:5A:60:A1:0B auto-mac=no name=Bridge-LAN port-cost-mode=\ + short +/interface ethernet +set [ find default-name=ether1 ] comment="WAN - Unet" mac-address=\ + F6:BE:9D:85:53:F5 name="ether1 - Unet" +set [ find default-name=ether3 ] comment=LEN +set [ find default-name=ether4 ] comment=NUC +/interface l2tp-server +add comment=Server disabled=yes name=l2tp-in1 user=vados +/interface l2tp-client +add comment="Starless 2 MikroSPb" connect-to=176.53.203.171 name=l2tp-EoIP \ + user=vados +add allow=mschap2 allow-fast-path=yes comment=Starless connect-to=\ + vpn.starless.ru max-mru=1280 name=l2tp-vpn use-ipsec=yes use-peer-dns=yes \ + user=vados +/interface wireless +# managed by CAPsMAN +# channel: 2422/20-Ce/gn(17dBm), SSID: vados, local forwarding +set [ find default-name=wlan1 ] ampdu-priorities=0,1,2,3,4,5,6,7 band=\ + 2ghz-b/g/n basic-rates-a/g=\ + 6Mbps,9Mbps,12Mbps,18Mbps,24Mbps,36Mbps,48Mbps,54Mbps basic-rates-b=\ + 1Mbps,2Mbps,5.5Mbps,11Mbps channel-width=20/40mhz-XX country=belarus \ + disabled=no frequency=auto hw-protection-mode=rts-cts mode=ap-bridge \ + rate-set=configured skip-dfs-channels=10min-cac ssid=vados \ + station-roaming=enabled wds-default-bridge=Bridge-LAN wds-mode=\ + dynamic-mesh wireless-protocol=802.11 wmm-support=enabled wps-mode=\ + disabled +# managed by CAPsMAN +# channel: 5260/20-Ceee/ac/DP(17dBm), SSID: vados5g, local forwarding +set [ find default-name=wlan2 ] ampdu-priorities=0,1,2,3,4,5,6,7 band=\ + 5ghz-a/n/ac basic-rates-a/g=\ + 6Mbps,9Mbps,12Mbps,18Mbps,24Mbps,36Mbps,48Mbps,54Mbps channel-width=\ + 20/40/80mhz-XXXX country=belarus disabled=no frequency=auto \ + hw-protection-mode=rts-cts mode=ap-bridge rate-set=configured \ + skip-dfs-channels=10min-cac ssid=vados5g station-roaming=enabled \ + wds-default-bridge=Bridge-LAN wds-mode=dynamic-mesh wireless-protocol=\ + 802.11 wmm-support=enabled wps-mode=disabled +/interface wireguard +add listen-port=13231 mtu=1280 name=WG +/interface wireless nstreme +# managed by CAPsMAN +# channel: 2422/20-Ce/gn(17dBm), SSID: vados, local forwarding +set wlan1 enable-nstreme=yes +# managed by CAPsMAN +# channel: 5260/20-Ceee/ac/DP(17dBm), SSID: vados5g, local forwarding +set wlan2 enable-nstreme=yes +/caps-man security +add authentication-types=wpa-psk,wpa2-psk encryption=aes-ccm \ + group-encryption=aes-ccm name=security +/caps-man configuration +add channel.band=2ghz-b/g/n .control-channel-width=20mhz .extension-channel=\ + XX country=belarus datapath.client-to-client-forwarding=yes \ + .local-forwarding=yes name=cfg-2ghz security=security ssid=vados +add channel.band=5ghz-a/n/ac .control-channel-width=20mhz .extension-channel=\ + XXXX country=belarus datapath.client-to-client-forwarding=yes \ + .local-forwarding=yes name=cfg-5ghz-ac security=security ssid=vados5g +add channel.band=5ghz-a/n .control-channel-width=20mhz .extension-channel=XX \ + country=belarus datapath.client-to-client-forwarding=yes \ + .local-forwarding=yes name=cfg-5ghz-an security=security ssid=vados5g +/disk +add media-interface=lo slot=tmpfs tmpfs-max-size=44739242 type=tmpfs +/interface list +add comment=defconf name=WAN +add comment=defconf name=LAN +/interface lte apn +set [ find default=yes ] ip-type=ipv4 use-network-apn=no +/interface wifi channel +add band=5ghz-ax disabled=no frequency=5180,5200,5220,5240 name=5G-AX +add band=5ghz-ac disabled=no frequency=5180,5200,5220,5240 name=5G-AC +add band=2ghz-n disabled=no frequency=2422,2442,2462 name=2G-N +add band=2ghz-ax disabled=no frequency=2422,2442,2462 name=2G-AX +add band=2ghz-g disabled=no frequency=2422,2442,2462 name=2G-G +add band=5ghz-n disabled=no frequency=5180,5200,5220,5240 name=5G-AN +/interface wifi datapath +add bridge=Bridge-LAN disabled=no interface-list=all name=xs-DataPath +/interface wifi security +add authentication-types=wpa2-psk,wpa3-psk disabled=no group-encryption=ccmp \ + group-key-update=1h management-protection=allowed name=sec2g +add authentication-types=wpa3-psk disable-pmkid=yes disabled=no \ + group-encryption=ccmp group-key-update=5m management-encryption=cmac \ + management-protection=required name=sec5G +/interface wifi configuration +add channel=2G-AX datapath=xs-DataPath disabled=no mode=ap name=2G-AX \ + security=sec2g security.ft=yes .ft-over-ds=yes ssid=vados +add channel=2G-N datapath=xs-DataPath disabled=no mode=ap name=2G-N security=\ + sec2g security.ft=yes .ft-over-ds=yes ssid=vados +add channel=5G-AX disabled=no mode=ap name=5G-AX security=sec5G security.ft=\ + yes .ft-over-ds=yes ssid=vados +add channel=5G-AC datapath=xs-DataPath disabled=no mode=ap name=5G-AC \ + security=sec5G security.authentication-types="" .ft=yes .ft-over-ds=yes \ + ssid=vados +add channel=2G-G datapath=xs-DataPath disabled=no mode=ap name=2G-G security=\ + sec2g security.authentication-types="" .ft=yes .ft-over-ds=yes ssid=vados +add channel=5G-AN disabled=no mode=ap name=5G-AN security=sec5G ssid=vados +/interface wireless security-profiles +set [ find default=yes ] authentication-types=wpa-psk,wpa2-psk mode=\ + dynamic-keys supplicant-identity=MikroTik +/ip dhcp-server option +add code=12 name=HostName +add code=119 force=yes name=domain-search-list value="0x03'WORKGROUP'0x00" +/ip dhcp-server option sets +add name=HP1505n options=HostName +add name=StartLife1 options=HostName +add name=amsterDev options=HostName +add name=MiTV options=HostName +add name=miller options=HostName +add name=amster options=HostName +add name=garage options=HostName +add name=domain-search-set options=domain-search-list +add name=VADOS-LEN options=HostName +add name=VADOS-NUC options=HostName +add name=MikroNUC options=HostName +add name=master options=HostName +add name=MikroYellow options=HostName +add name="=\"Client ID\"" options=HostName +add name=mVados options=HostName +/ip dns forwarders +add comment=BS dns-servers=1.1.1.1,1.0.0.1 name=blsp.at verify-doh-cert=no +add comment=Kra dns-servers=1.0.0.1,1.1.1.1 name=slon2.to verify-doh-cert=no +add dns-servers=1.1.1.1,1.0.0.1 name=slon3.at verify-doh-cert=no +add dns-servers=1.0.0.1,1.1.1.1 name=slon3.cc verify-doh-cert=no +add dns-servers=1.1.1.1,1.0.0.1 name=bs2web.at verify-doh-cert=no +add dns-servers=1.1.1.1,1.0.0.1 name=bs2best.at verify-doh-cert=no +add dns-servers=1.0.0.1,1.1.1.1 name=psrms.is verify-doh-cert=no +add dns-servers=1.0.0.1,1.1.1.1 name=m.blsp.at verify-doh-cert=no +add comment=telegram dns-servers=10.30.30.81 name=api.telegram.org \ + verify-doh-cert=no +/ip ipsec proposal +set [ find default=yes ] disabled=yes +/ip pool +add name=dhcp ranges=10.30.30.150-10.30.30.200 +/ip dhcp-server +add add-arp=yes address-pool=dhcp dhcp-option-set=domain-search-set \ + dynamic-lease-identifiers=client-mac,client-id,opt-82 interface=\ + Bridge-LAN lease-time=10m name=masterDHCP server-address=10.30.30.81 \ + use-reconfigure=yes +/ip hotspot user profile +set [ find default=yes ] address-pool=dhcp +/ip smb users +set [ find default=yes ] disabled=yes +add disabled=yes name=vados +/ppp profile +set *FFFFFFFE use-upnp=no +/routing bgp template +set default disabled=no output.network=bgp-networks +/routing table +add disabled=no fib name=To-VPN +/snmp community +set [ find default=yes ] addresses=10.30.30.0/24 read-access=no security=\ + private +/system logging action +add email-start-tls=yes email-to=vados@vados.ru name=email target=email +/system script +add comment="Example add WU servers to AddrList" dont-require-permissions=no \ + name=WU-add-to-list owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_Script to add target web sites DNS IP addresses into address list\r\ + \n# Tested with Mikrotik 6.4x\r\ + \n# Syed Jahanzaib / aacable@hotmail.com\r\ + \n# List name\r\ + \n:local LISTNAME \"windowsupdateslist\"\r\ + \n# Web site names which will be added in address list\r\ + \n:local TARGET1 \"update.microsoft.com\"\r\ + \n:local TARGET2 \"download.windowsupdate.com\"\r\ + \n:local TARGET3 \"download.microsoft.com\"\r\ + \n:local TARGET4 \"windowsupdate.com\"\r\ + \n:local TARGET5 \"ntservicepack.microsoft.com\"\r\ + \n:local TARGET6 \"wustat.windows.com\"\r\ + \n:local TARGET7 \"stats.microsoft.com\"\r\ + \n:local TARGET8 \"mp.microsoft.com\"\r\ + \n:local TARGET9 \"ws.microsoft.com\"\r\ + \n:local TARGET10 \"sls.update.microsoft.com.akadns.net\"\r\ + \n:local TARGET11 \"vortex.data.microsoft.com\"\r\ + \n:local TARGET12 \"vortex-win.data.microsoft.com\"\r\ + \n:local TARGET13 \"fe2.update.microsoft.com.akadns.net\"\r\ + \n:local TARGET14 \"statsfe2.update.microsoft.com.akadns.net\"\r\ + \n \r\ + \n# 1st time runner, check if address list is not created previously and a\ + dd entries in it for 1st time usage\r\ + \n:if ( [/ip firewall address-list find where list=\$LISTNAME] = \"\") do=\ + {\r\ + \n:log warning \"No address list for \$TARGET1 found ! creating and adding\ + \_resolved entry for 1st time usage ... zaib\"\r\ + \n \r\ + \n:local FirstAddr [resolve \$TARGET1];\r\ + \n\r\ + \n/ip firewall address-list add address=\$FirstAddr list=\$LISTNAME commen\ + t=\$TARGET1;\r\ + \n} else={\r\ + \n:log warning \"Previous List for \$LISTNAME found ! moving forward and c\ + hecking if DNS entries can be added in it ...\"\r\ + \n}\r\ + \n \r\ + \n# Check DNS entries and collect matching names\r\ + \n:foreach i in=[/ip dns cache find name~\"(\$TARGET1|\$TARGET2|\$TARGET3|\ + \$TARGET4|\$TARGET5|\$TARGET6|\$TARGET7|\$TARGET8|\$TARGET9|\$TARGET10|\$T\ + ARGET11|\$TARGET12|\$TARGET13|\$TARGET14)\" && \$type ~ \"^(A|CNAME)\\\$\"\ + \_] do={\r\ + \n \r\ + \n# Get IP Address from the names and hold it in temporary buffer\r\ + \n:local Buffer [/ip dns cache get \$i data];\r\ + \ndelay delay-time=10ms\r\ + \n \r\ + \n# Check if entry is already not exists, then OK, otherwise ignore duplic\ + ation\r\ + \n:if ( [/ip firewall address-list find where address=\$Buffer] = \"\") do\ + ={\r\ + \n \r\ + \n# Fetch DNS names for the entries\r\ + \n:local sitednsname [/ip dns cache get \$i name] ;\r\ + \n \r\ + \n# Print name in LOG window\r\ + \n:log info (\"added entry: \$sitednsname \$Buffer\");\r\ + \n \r\ + \n# Add IP addresses and there names to the address list\r\ + \n/ip firewall address-list add address=\$Buffer list=\$LISTNAME comment=\ + \$sitednsname;\r\ + \n}\r\ + \n}" +add comment="Add Hosts DNS names to NoWG addres list" \ + dont-require-permissions=no name=Add2vdsina owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_Script to add target web sites DNS IP addresses into address list\r\ + \n# Tested with Mikrotik 6.4x\r\ + \n# \r\ + \n# List name\r\ + \n:local LISTNAME \"NoWG\"\r\ + \n#\r\ + \n# Web site names which will be added in address list\r\ + \n:local TARGET1 \"comp-lenta.ru\"\r\ + \n:local TARGET2 \"ok.ru\"\r\ + \n:local TARGET3 \"vk.com\"\r\ + \n#:local TARGET4 \"smtp.mail.me.com\"\r\ + \n#:local TARGET4 \"windowsupdate.com\"\r\ + \n#:local TARGET5 \"ntservicepack.microsoft.com\"\r\ + \n#:local TARGET6 \"wustat.windows.com\"\r\ + \n#:local TARGET7 \"stats.microsoft.com\"\r\ + \n#:local TARGET8 \"mp.microsoft.com\"\r\ + \n#:local TARGET9 \"ws.microsoft.com\"\r\ + \n#:local TARGET10 \"sls.update.microsoft.com.akadns.net\"\r\ + \n#:local TARGET11 \"vortex.data.microsoft.com\"\r\ + \n#:local TARGET12 \"vortex-win.data.microsoft.com\"\r\ + \n#:local TARGET13 \"fe2.update.microsoft.com.akadns.net\"\r\ + \n#:local TARGET14 \"statsfe2.update.microsoft.com.akadns.net\"\r\ + \n \r\ + \n# 1st time runner, check if address list is not created previously and a\ + dd entries in it for 1st time usage\r\ + \n:if ( [/ip firewall address-list find where list=\$LISTNAME] = \"\") do=\ + {\r\ + \n:log warning \"No address list for \$TARGET1 found ! creating and adding\ + \_resolved entry for 1st time usage ... zaib\"\r\ + \n\r\ + \n:local FirstAddr [resolve \$TARGET1];\r\ + \n\r\ + \n/ip firewall address-list add address=\$FirstAddr list=\$LISTNAME commen\ + t=\$TARGET1;\r\ + \n\r\ + \n} else={\r\ + \n:log warning \"Previous List for \$LISTNAME found ! moving forward and c\ + hecking if DNS entries can be added in it ...\"\r\ + \n}\r\ + \n\r\ + \n# Check DNS entries and collect matching names\r\ + \n:foreach i in=[/ip dns cache find name~\"(\$TARGET1|\$TARGET2|\$TARGET3|\ + \$TARGET4)\" && \$type ~ \"^(A|CNAME)\\\$\" ] do={\r\ + \n\r\ + \n:log info (\"start entry: \$c \$sitednsname \$Buffer\");\r\ + \n\r\ + \n# Get IP Address from the names and hold it in temporary buffer\r\ + \n:local Buffer [/ip dns cache get \$i data];\r\ + \ndelay delay-time=10ms\r\ + \n:log info (\"1: \$Buffer\"); \r\ + \n\r\ + \n# Check if entry is already not exists, then OK, otherwise ignore duplic\ + ation\r\ + \n:if ( [/ip firewall address-list find where address=\$Buffer] = \"\") do\ + ={\r\ + \n\r\ + \n:log info (\"2: \$Buffer\"); \r\ + \n \r\ + \n# Fetch DNS names for the entries\r\ + \n:local sitednsname [/ip dns cache get \$i name] ;\r\ + \n \r\ + \n# Print name in LOG window\r\ + \n:log info (\"added entry: \$i \$sitednsname \$Buffer\");\r\ + \n \r\ + \n# Add IP addresses and there names to the address list\r\ + \n/ip firewall address-list add address=\$Buffer list=\$LISTNAME comment=\ + \$sitednsname;\r\ + \n}\r\ + \n}" +add comment="Flush DNS Cache" dont-require-permissions=no name=\ + DNS_Flush_Cache owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=\ + "/ip dns cache flush" +add dont-require-permissions=no name=create_mkdir_function owner=vados \ + policy=read,write source="# Written by Phillip Stromberg in 2019\r\ + \n# Distributed under the MIT license\r\ + \n# \r\ + \n# \r\ + \n# this creates a function called \$mkdir\r\ + \n# from the command line you will be able to just type \"\$mkdir some/new\ + /folder\"\r\ + \n# and all the folders that need to be created will be\r\ + \n# if the folder already existed, it is ignored\r\ + \n\r\ + \n:log info \"Creating \\\$mkdir function...\"\r\ + \n\r\ + \n:global mkdir do={\r\ + \n # \$1 refers to the input variable the user passed in to us\r\ + \n :local newFolder \$1;\r\ + \n\r\ + \n # we'll use this variable to report error messages that may arise\r\ + \n :local errorMsg;\r\ + \n\r\ + \n # if the user put a slash on the end of the new folder name, remove \ + it\r\ + \n # i.e. \"some/test/\" becomes \"some/test\"\r\ + \n :while (([:pick \$newFolder ([:len \$newFolder] - 1)]) = \"/\") do={\ + \r\ + \n :set newFolder [:pick \$newFolder 0 ([:len \$newFolder] - 1)]\r\ + \n }\r\ + \n\r\ + \n # if the user put a slash at the beginning of the new folder name, r\ + emove it\r\ + \n # i.e. \"/some/test\" becomes \"some/test\"\r\ + \n :while ([:pick \$newFolder 0] = \"/\") do={\r\ + \n :set newFolder [:pick \$newFolder 1 [:len \$newFolder]]\r\ + \n }\r\ + \n\r\ + \n :if ([/file find name=\$newFolder] != \"\") do={\r\ + \n :set errorMsg \"'\$newFolder' already exists.\";\r\ + \n :log debug \"mkdir: \$errorMsg\";\r\ + \n :return \$newFolder;\r\ + \n }\r\ + \n\r\ + \n # the name of the temp file to create\r\ + \n :local tempfile \"mkdir_temp_file.txt\";\r\ + \n\r\ + \n # port 0 is unlikely to be open to HTTP requests...\r\ + \n :local fakeURL \"http://127.0.0.1:0/should-not-exist.txt\";\r\ + \n\r\ + \n :local fullTempPath (\$newFolder . \"/\" . \$tempfile);\r\ + \n\r\ + \n # this is where the folder creation happens\r\ + \n # `as-value` prevents status messages from printing\r\ + \n # wrapping in a `:do {...} on-error` prevents error messages from pr\ + inting.\r\ + \n :do {\r\ + \n /tool fetch dst-path=\"\$fullTempPath\" url=\"\$fakeURL\" durati\ + on=0.001s as-value;\r\ + \n } on-error={}\r\ + \n\r\ + \n # this waits for the temporary dir to show up so there isn't a race \ + \r\ + \n # condition where you call mkdir and then try to do something before\ + \_the \r\ + \n # folder is actually created\r\ + \n :local count 0;\r\ + \n :while ([/file find name=\"\$newFolder\"] = \"\") do={\r\ + \n :if (\$count >= 50) do={\r\ + \n # after 50 * 0.1s delays, it's been 5 seconds, which should \ + be long enough\r\ + \n :set errorMsg \"New folder could not be created at \$newFold\ + er\";\r\ + \n :log error \"mkdir: \$errorMsg\"\r\ + \n :error \$errorMsg\r\ + \n }\r\ + \n :delay 0.1s;\r\ + \n :set count (\$count + 1);\r\ + \n }\r\ + \n\r\ + \n :return \$newFolder;\r\ + \n}\r\ + \n\r\ + \n:log info \"Created function \\\$mkdir\"\r\ + \n" +add comment="Certificates CloudFlare, Quad9 " dont-require-permissions=no \ + name=CustomUpdate-Certificates owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_CloudFlare\r\ + \n/tool/fetch mode=https url=https://developers.cloudflare.com/ssl/static/\ + origin_ca_ecc_root.pem;\r\ + \n/tool/fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobalRo\ + otCA.crt.pem;\r\ + \n/certificate/import file-name=DigiCertGlobalRootCA.crt.pem passphrase=\"\ + \";\r\ + \n/tool/ fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobalG\ + 2TLSRSASHA2562020CA1-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/DigiCertGlobal\ + G3TLSECCSHA3842020CA1-1.crt.pem\"\r\ + \n/certificate/import file-name=DigiCertGlobalG3TLSECCSHA3842020CA1-1.crt.\ + pem passphrase=\"\";\r\ + \n\r\ + \n#:global AmScriptsUrl;\r\ + \n#google\r\ + \n#:local CertName \"GTS-Root-R1.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"GTS-Root-R4.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \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#:set CertName \"ISRG-Root-X1.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \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#:set CertName \"Starfield-Root-Certificate-Authority-G2.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\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=script1 owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="/\ + tool/netwatch/add comment=\"doh-fallback, doh-url=https://security.cloudfl\ + are-dns.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=Clou\ + dFlare-doh IPv4 1\" host=1.1.1.1;\r\ + \n/tool/netwatch/add comment=\"doh, doh-url=https://security.cloudflare-dn\ + s.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=CloudFlare\ + -doh IPv4 2\" host=1.0.0.1;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.google/dns-query, doh-cert=DigiCert Global Root G2, notify, name=Goog\ + le-doh IPv4 1\" host=8.8.8.8;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.google/dns-query, doh-cert=DigiCert Global Root G2, notify, name=Goog\ + le-doh IPv4 2\" host=8.8.4.4;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.quad9.net/dns-query, doh-cert=DigiCert Global Root G3, notify, name=C\ + uad9-doh IPv4 1\" host=9.9.9.9;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.quad9.net/dns-query, doh-cert=DigiCert Global Root G3, notify, name=C\ + uad9-doh IPv4 2\" host=149.112.112.112;\r\ + \n\r\ + \n/tool/netwatch/add comment=\"dns, notify, name=ns1.unet.ws\" host=91.192\ + .189.2;" +add dont-require-permissions=no name=script2 owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \r\ + \n\r\ + \n:global InspectVar;\r\ + \n#:global RouterBoard;\r\ + \n#:do {:set RouterBoard [[ :parse \"/system/routerboard/get\" ]]} on-erro\ + r={}\r\ + \n#:global Resources;\r\ + \n#:do {:set Resources [[ :parse \"/system/resource/get\" ]]} on-error={}\ + \r\ + \n\r\ + \n#:global Updates;\r\ + \n#:do {:set Updates [[ :parse \"/system/package/update/get\" ]]} on-error\ + ={}\r\ + \n\r\ + \n#:global PkgUpdStatus \"undefined\";\r\ + \n#:local Update [/system/package/update/get];\r\ + \n#:retry command={:set PkgUpdStatus (\$Update->\"status\")} delay=200ms m\ + ax=5 on-error={};\r\ + \n\r\ + \n#:log warning [\$InspectVar \$RouterBoard];\r\ + \n#:put [\$InspectVar \$RouterBoard];\r\ + \n\r\ + \n#:retry command={/system/package/update check-for-updates without-paging\ + \_as-value} delay=300ms max=5 on-error={};\r\ + \n\r\ + \n#:global arrDeviceInfo ({});\r\ + \n#:local arrDeviceInfo ({\"section\":{\"key\":\"\"; \"value\":\"\";};});\ + \r\ + \n#:set (\$arrDeviceInfo->\"RouterBoard\") [[ :parse \"/system/routerboard\ + /get\" ]];\r\ + \n#:retry command={:set (\$arrDeviceInfo->\"Updates\") [[ :parse \"/system\ + /package/update/get\" ]]} delay=500ms max=5 on-error={:log error (\"Error\ + \")};\r\ + \n# [:toarray {\"section\"={\"key\"=\"\"; \"value\"=\"\";} }];\r\ + \n# [:toarray \"\"];\r\ + \n:local arrDeviceInfo ({});\r\ + \n\r\ + \n:set (\$arrDeviceInfo->\"devUpdates\") {\"channel\"; \"stable\";};\r\ + \n#:do {:set (arrDeviceInfo->\"Updates\") [[ :parse \"/system/package/upda\ + te/get\" ]]} on-error={:log error (\$error)}\r\ + \n\$InspectVar \$arrDeviceInfo;\r\ + \n" +add comment="Script for setup routeros script system" \ + dont-require-permissions=no name=AM-setup owner=AM-setup policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-setup\r\ + \n# Script comment: Script for setup routeros script system\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# Additional commands:\r\ + \n#\r\ + \n# For scripts:\r\ + \n#:global NewScript \"script_name\"; \r\ + \n#:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n#/system/script/add name=\$NewScript owner=\$NewScript source=([/tool/fe\ + tch check-certificate=yes-without-crl (\$GlobalScriptsUrl . \$ScriptAdd . \ + \".rsc\") output=user as-value ]->\"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 SetupScript [ :jobname ];\r\ + \n:global RemoveMe;\r\ + \n:global RunOnce;\r\ + \n:global InitSetup true;\r\ + \n:global tmpfs true;\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 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 :local CertSettings [ /certificate/settings/get ];\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 \r\ + \n /tool/fetch (\$GlobalScriptsUrl . \"certs/\" . \$CertFileName) dst-p\ + ath=\$CertFileName as-value;\r\ + \n :delay 1s;\r\ + \n /certificate/import file-name=\$CertFileName passphrase=\"\";\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint \ + ] ] != 1) do={\r\ + \n :error \"Something is wrong with your certificates!\";\r\ + \n };\r\ + \n :delay 1s;\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 :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 dont-require-permissions=no name=fetchCustom owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \r\ + \n#root.mnuc.backuper\r\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n#/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@1\ + 0.30.30.81.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.81.pub\";\r\ + \n#:local Script AM-GlobalConfig;\r\ + \n#/system/script/add name=\$Script owner=\$Script source=([ /tool/fetch c\ + heck-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \".r\ + sc\") output=user as-value ]->\"data\");\r\ + \n#/usb1/mikro_bak_rsa.pub\r\ + \n:local FetchFile AM-DOHCert.rsc\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \$FetchFile) dst-path=(\ + \"[usb1]/scripts/\" . \$FetchFile);\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/308/f5b1bfb4\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 21:50:02 30.04.2026.\";\r\ + \n\r\ + \n# The variables are received right here.\r\ + \n:global GlobalConfVersion 138;\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 GlobalEnvRemove;\r\ + \n:global MiniDateTimeStamp;\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 ExitError;\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 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 WaitDNSResolving;\r\ + \n:global WaitFullyConnected;\r\ + \n:global WaitTimeSync;\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 FetchLargeFiles;\r\ + \n:global FetchUserAgentStr;\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 LogPrint;\r\ + \n :global updateChannel;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n \$LogPrint debug \$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 \$LogPrint debug \$0 (\"Set updates channel to: \$updateChannel\");\ + \r\ + \n }\r\ + \n\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local Channel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set currentUpdateChannel \$Channel;\r\ + \n \$LogPrint debug \$0 (\"Update Channel: \" . \$Channel . \".\");\r\ + \n\r\ + \n\r\ + \n :local StatusPkg \"undefined\";\r\ + \n \$LogPrint debug \$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 \$LogPrint debug \$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 \$LogPrint debug \$0 (\"\\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if (\$isInfo != false || \$PkgUpdStatus = true) do={\r\ + \n \$LogPrint debug \$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\r\ + \n :local Status \"\";\r\ + \n :local Update;\r\ + \n :local WaitCount 0;\r\ + \n\r\ + \n :if ([ \$IsCheckUpdates true ] = false) do={\r\ + \n :return false;\r\ + \n }\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\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\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\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: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: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# !!! The function is not ready !!!\r\ + \n:global FetchHttpInfo do={\r\ + \n :local Mac [ :tostr \$1 ];\r\ + \n :global CertificateAvailable;\r\ + \n :global IsMacLocallyAdministered;\r\ + \n :global LogPrint;\r\ + \n :local Url \"https://api.macvendors.com/\";\r\ + \n :if ([ \$IsMacLocallyAdministered \$Mac ] = true) do={:return \"locall\ + y administered\";}\r\ + \n :do {\r\ + \n :if ([ \$CertificateAvailable \"GTS Root R4\" \"fetch\" ] = false) d\ + o={\r\ + \n \$LogPrint warning \$0 (\"Downloading required certificate failed.\ + \");\r\ + \n :error false;\r\ + \n }\r\ + \n :local Vendor ([ /tool/fetch \r\ + \n (\$Url . [ :pick \$Mac 0 8 ]) output=user as-value ]->\"data\");\r\ + \n :return \$Vendor;\r\ + \n } on-error={\r\ + \n :onerror Err {\r\ + \n /tool/fetch check-certificate=yes-without-crl (\$Url) output=none \ + as-value;\r\ + \n \$LogPrint debug \$0 (\"The mac vendor is not known in database.\"\ + );\r\ + \n } do={ \$LogPrint warning \$0 (\"Failed getting mac vendor: \" . \$E\ + rr); }\r\ + \n :return \"unknown vendor\";\r\ + \n }\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 :global CertificateDownload;\r\ + \n :global EitherOr;\r\ + \n :global LogPrint;\r\ + \n :global ParseKeyValueStore;\r\ + \n :set UseFor [ \$EitherOr \$UseFor \"undefined\" ];\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 \$LogPrint 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 \$LogPrint 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 \$LogPrint info \$0 (\"Certificate with CommonName '\" . \$CommonNam\ + e . \"' not available.\");\r\ + \n :if ([ \$CertificateDownload \$CommonName ] = false) do={:return fal\ + se}\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] > 1\ + ) do={\r\ + \n \$LogPrint 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 \$LogPrint info \$0 (\"Certificate chain for '\" . \$CommonName . \ + \"' is incomplete, missing '\" . \$IssuerCN . \"'.\");\r\ + \n :if ([ \$CertificateDownload \$IssuerCN ] = false) do={:return fal\ + se}\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 GlobalScriptsUrl;\r\ + \n :global GlobalScriptsUrlSuffix;\r\ + \n :global CertificateNameByCN;\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global LogPrint;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n \r\ + \n \$LogPrint info \$0 (\"Downloading and importing certificate with Comm\ + onName '\" . \$CommonName . \"'.\");\r\ + \n \r\ + \n :local FileName ([ \$CleanName \$CommonName ] . \".pem\");\r\ + \n :do {\r\ + \n /tool/fetch check-certificate=yes-without-crl http-header-field=({ [\ + \_\$FetchUserAgentStr \$0 ] }) \\\r\ + \n (\$GlobalScriptsUrl . \"certs/\" . \$FileName . \$GlobalScriptsUrl\ + Suffix) dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n } on-error={\r\ + \n \$LogPrint warning \$0 (\"Failed downloading certificate with Common\ + Name '\" . \$CommonName . \\\r\ + \n \"' from repository! Trying fallback to mkcert.org...\");\r\ + \n :do {\r\ + \n :if ([ :len [ /certificate/find where common-name=\"ISRG Root X1\"\ + \_] ] = 0) do={\r\ + \n \$LogPrint error \$0 (\"Required certificate is not available.\"\ + );\r\ + \n :return false;\r\ + \n }\r\ + \n /tool/fetch check-certificate=yes-without-crl http-header-field=({\ + \_[ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n \"https://mkcert.org/generate/\" http-data=[ :serialize to=json \ + ({ \$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 \$LogPrint warning \$0 (\"Failed downloading certificate with Comm\ + onName '\" . \$CommonName . \"'!\");\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n /certificate/import file-name=\$FileName passphrase=\"\" as-value;\r\ + \n :delay 1s;\r\ + \n \$RmFile \$FileName;\r\ + \n\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n /certificate/remove [ find where name~(\"^\" . \$FileName . \"_[0-9]\ + +\\\$\") ];\r\ + \n \$LogPrint warning \$0 (\"Certificate with CommonName '\" . \$Common\ + Name . \"' 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 :global LogPrint;\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 \$LogPrint 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 FetchUserAgentStr do={\r\ + \n :local Caller [ :tostr \$1 ];\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 (https://amster.vados.ru/; main/3419/3ee\ + 19780)\");\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 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 GetRandomNumber do={\r\ + \n :global EitherOr;\r\ + \n :return [ :rndnum from=0 to=[ \$EitherOr [ :tonum \$1 ] 4294967295 ] ]\ + \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 MiniDateTimeStamp do={\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 :return ([\$yyyy] . [\$MM] . [\$dd] . [\$HH] . [\$mm] . [\$ss]);\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={:return false}\r\ + \n :local FileVal false;\r\ + \n :do {: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 :global LogPrint;\r\ + \n \$LogPrint debug \$0 (\"Removing directory: \". \$DirName);\r\ + \n :local DirVal [ \$FileGet \$DirName ];\r\ + \n :if (\$DirVal = false) do={\$LogPrint debug \$0 (\"... which does not \ + exist.\"); :return true};\r\ + \n :if (\$DirVal->\"type\" != \"directory\") do={\$LogPrint error \$0 (\"\ + Directory '\" . \$DirName . \"' is not a directory.\"); :return false};\r\ + \n :onerror Err {/file/remove \$DirName} do={\$LogPrint error \$0 (\"Remo\ + ving directory '\" . \$DirName . \"' failed: \" . \$Err); :return false};\ + \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 :global LogPrint;\r\ + \n \$LogPrint debug \$0 (\"Removing file: \". \$FileName);\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={\$LogPrint debug \$0 (\"... which does not\ + \_exist.\"); :return true}\r\ + \n :if (\$FileVal->\"type\" = \"directory\" || \$FileVal->\"type\" = \"di\ + sk\") do={\r\ + \n \$LogPrint error \$0 (\"File '\" . \$FileName . \"' is not a file.\"\ + ); :return false}\r\ + \n :onerror Err {\r\ + \n /file/remove \$FileName;\r\ + \n } do={\$LogPrint error \$0 (\"Removing file '\" . \$FileName . \"' fai\ + led: \" . \$Err); :return false}\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 :global LogPrint;\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 \$LogPrint info \$0 (\"The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n \$LogPrint 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 \$LogPrint 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 \$LogPrint debug \$0 (\"Making directory: \" . \$Path);\r\ + \n :local PathVal [ \$FileGet \$Path ];\r\ + \n :if (\$PathVal->\"type\" = \"directory\") do={\r\ + \n \$LogPrint 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 \$LogPrint 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 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 [ :len\ + \_\$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 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 LogPrint;\r\ + \n :global VersionToNum;\r\ + \n :if (!(\$Required ~ \"^\\\\d+\\\\.\\\\d+((alpha|beta|rc|\\\\.)\\\\d+|)\ + \\\$\")) do={\r\ + \n \$LogPrint 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 \$LogPrint warning \$0 (\"This \" . [ \$IfThenElse ([ :pick \$Call\ + er 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: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: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 LogPrint;\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 \$LogPrint error \$0 (\"A script named '\" . \$Script . \"' does not\ + \_exist!\");\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 \$LogPrint error \$0 (\"More tickets than running scripts '\" . \$Sc\ + ript . \"', 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: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: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:set SymbolByUnicodeName do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :global EitherOr;\r\ + \n :global LogPrint;\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 \$LogPrint 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: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: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: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:set IsDNSResolving do={\r\ + \n :do {:resolve \"api.telegram.org\"} on-error={:return false}\r\ + \n :return true;\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: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# read parts of a large file\r\ + \n:set FetchLargeFiles do={\r\ + \n :local ScriptName [:tostr \$1];\r\ + \n :local fetchUrl [:tostr \$2];\r\ + \n :local CheckCert [:tostr \$3];\r\ + \n :local fetchMode [:tostr \$4];\r\ + \n :local fetchMethod [:tostr \$5];\r\ + \n :local FetchString \"undefined\";\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 #:set fetchMode [ \$IfThenElse (\$fetchMode != \"false\") [:tostr (\"m\ + ode=\" . \$fetchMode)] ];\r\ + \n #:set fetchMethod [\$IfThenElse (\$fetchMethod != \"false\") [:tostr (\ + \"http-method=\\\"\" . \$fetchMethod . \"\\\"\") ]];\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 :local FileName (\$DirName . \"/\" . [ \$CleanName \$0 ] . \"-\" . [ \ + \$GetRandom20CharAlNum ]);\r\ + \n #/tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName h\ + ttp-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] }) as-value;\r\ + \n #:log warning (\"\\\$fUrl =\" . \$2 . ({[ \$fMode ]}));\r\ + \n :onerror Err {\r\ + \n :set FetchString (\"/tool/fetch \" . \\\r\ + \n [\$IfThenElse ([\$fetchMethod] != \"false\") (\"http-method=\\\"\"\ + \_. \$fetchMethod . \"\\\" \")] . \\\r\ + \n \"check-certificate=\" . \$CheckCert . \" url=(\\\"\" . \$fetchUrl\ + \_. \"\\\") \" . \\\r\ + \n [\$IfThenElse ([\$fetchMode] != \"false\") (\"mode=\" . \$fetchMod\ + e . \" \")] . \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] }) as-va\ + lue);\r\ + \n :log warning (\"\\\$FetchSring = \" . \$FetchString);\r\ + \n :put [\$FetchString];\r\ + \n #:put [/tool/fetch \$fetchMode check-certificate=\$CheckCert url=(\$\ + fetchUrl) dst-path=(\$FileName) http-header-field=({ [ \$FetchUserAgentStr\ + \_\$ScriptName ] }) as-value];\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 \" . \$fetchUrl . \"\ + \_- \" . \$Err);\r\ + \n \$RmDir \$DirName;\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ \$WaitForFile \$FileName 5s ] = false) do={\r\ + \n \$LogPrint debug \$0 (\"The file downloaded from \" . \$fetchUrl . \ + \" did not show up.\");\r\ + \n :return false;\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 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={:set NotificationMessage (\$NotificationMessage . \"\\n\\nNe\ + ws and changes are not available.\")}\r\ + \n\r\ + \n :set GlobalConfChanges;\r\ + \n :set GlobalConfMigration;\r\ + \n }\r\ + \n} do={:global ExitOnError; \$ExitOnError \$0 \$Err}\r\ + \n}\r\ + \n\r\ + \n# Global Environment clear. Use: \"\$GlobalEnvRemove True;\".\r\ + \n:set GlobalEnvRemove do={\r\ + \n :local doRmEnv [ :tostr \$1 ];\r\ + \n :global GlobalScriptsUrl;\r\ + \n :local ScriptsUrl;\r\ + \n :global LogPrint;\r\ + \n :if (\$doRmEnv != \"True\") do={\r\ + \n \$LogPrint error \"GlobalEnvRemove\" (\"This script is needed \\\"T\ + rue\\\" for confirm to remove global environment variables!\");\r\ + \n :return [];\r\ + \n :error true; \r\ + \n } else={\r\ + \n :set ScriptsUrl \$GlobalScriptsUrl;\r\ + \n :delay 5;\r\ + \n :foreach var in=[/system/script/environment print as-value] do={/sy\ + stem/script/environment remove (\$var->\".id\")}\r\ + \n :delay 5;\r\ + \n :global GlobalScriptsUrl \$ScriptsUrl;\r\ + \n \$LogPrint warning \"GlobalEnvRemove\" (\"Done!\");\r\ + \n :return [];\r\ + \n :error false;\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 \"Setup Global Environment for scripts\";\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#:local Resource [ /system/resource/get ];\r\ + \n#:log info (\$ScriptName . \" Loaded on \" . \$Resource->\"board-name\" \ + . \" with RouterOS \" . \$Resource->\"version\" . \" and Architecture \" .\ + \".\");\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# signal we are ready\r\ + \n:set GlobalFuncReady true;\r\ + \n:set ExitOK true;\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} do={:global ExitOnError; \$ExitOnError \$0 \$Err;}\r\ + \n\r\ + \n#} do={:global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err}\r\ + \n# log the successful load of the script, or an error if it failed\r\ + \n#:if ([\$GlobalFuncReady] = true && [\$GlobalConfReady] = true) do={\r\ + \n" +add comment="Import ssh keys for public key authentication" \ + dont-require-permissions=no name=AM-SshKeysImport owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-SshKeysImport\r\ + \n# Script comment: Import ssh keys for public key authentication\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n#\r\ + \n:local ExitOK false;\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady; :global GlobalFuncReady;\r\ + \n :retry { :if (\$GlobalConfReady != true || \$GlobalFuncReady != true) \ + \\\r\ + \n do={ :error (\"Global configs or functions not ready.\"); }; } del\ + ay=500ms max=50;\r\ + \n :local ScriptName [ :jobname ];\r\ + \n\r\ + \n:global SSHKeysImport;\r\ + \n:global SSHKeysImportFile;\r\ + \n\r\ + \n# import single key passed as string\r\ + \n:set SSHKeysImport do={ :onerror Err {\r\ + \n :local Key [ :tostr \$1 ];\r\ + \n :local User [ :tostr \$2 ];\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global LogPrint;\r\ + \n :global MkDir;\r\ + \n :global RmDir;\r\ + \n :global WaitForFile;\r\ + \n :if ([ :len \$Key ] = 0 || [ :len \$User ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"Missing argument(s), please pass key and u\ + ser!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ :len [ /user/find where name=\$User ] ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"User '\" . \$User . \"' does not exist.\")\ + ;\r\ + \n :return false;\r\ + \n }\r\ + \n :local KeyVal ([ :deserialize \$Key delimiter=\" \" from=dsv options=d\ + sv.plain ]->0);\r\ + \n :if (!(\$KeyVal->0 = \"ssh-ed25519\" || \$KeyVal->0 = \"ssh-rsa\")) do\ + ={\r\ + \n \$LogPrint warning \$0 (\"SSH key of type '\" . \$KeyVal->0 . \"' is\ + \_not supported.\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local FingerPrintMD5 [ :convert from=base64 transform=md5 to=hex (\$K\ + eyVal->1) ];\r\ + \n :local RegEx (\"\\\\bmd5=\" . \$FingerPrintMD5 . \"\\\\b\");\r\ + \n :if ([ :len [ /user/ssh-keys/find where user=\$User \\\r\ + \n (key-owner~\$RegEx or info~\$RegEx) ] ] > 0) do={\r\ + \n \$LogPrint warning \$0 (\"The ssh public key (MD5:\" . \$FingerPrint\ + MD5 . \\\r\ + \n \") is already available for user '\" . \$User . \"'.\");\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ \$MkDir \"tmpfs/ssh-keys-import\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Creating directory 'tmpfs/ssh-keys-import'\ + \_failed!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local FileName (\"tmpfs/ssh-keys-import/key-\" . [ \$GetRandom20CharA\ + lNum 6 ] . \".pub\");\r\ + \n /file/add name=\$FileName contents=(\$Key . \", md5=\" . \$FingerPrint\ + MD5);\r\ + \n \$WaitForFile \$FileName;\r\ + \n :onerror Err {\r\ + \n /user/ssh-keys/import public-key-file=\$FileName user=\$User;\r\ + \n \$LogPrint info \$0 (\"Imported ssh public key (\" . \$KeyVal->2 . \ + \", \" . \$KeyVal->0 . \", \" . \\\r\ + \n \"MD5:\" . \$FingerPrintMD5 . \") for user '\" . \$User . \"'.\");\ + \r\ + \n \$RmDir \"tmpfs/ssh-keys-import\";\r\ + \n } do={\r\ + \n \$LogPrint warning \$0 (\"Failed importing key: \" . \$Err);\r\ + \n \$RmDir \"tmpfs/ssh-keys-import\";\r\ + \n :return false;\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n} }\r\ + \n\r\ + \n# import keys from a file\r\ + \n:set SSHKeysImportFile do={ :onerror Err {\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local User [ :tostr \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global FileExists;\r\ + \n :global LogPrint;\r\ + \n :global ParseKeyValueStore;\r\ + \n :global SSHKeysImport;\r\ + \n :if ([ :len \$FileName ] = 0 || [ :len \$User ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"Missing argument(s), please pass file name\ + \_and user!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ \$FileExists \$FileName ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"File '\" . \$FileName . \"' does not exist\ + .\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local Keys [ :tolf [ /file/get \$FileName contents ] ];\r\ + \n :foreach KeyVal in=[ :deserialize \$Keys delimiter=\" \" from=dsv opti\ + ons=dsv.plain ] do={\r\ + \n :local Continue false;\r\ + \n :if (\$KeyVal->0 = \"ssh-ed25519\" || \$KeyVal->0 = \"ssh-rsa\") do=\ + {\r\ + \n :if ([ \$SSHKeysImport (\$KeyVal->0 . \" \" . \$KeyVal->1 . \" \" \ + . \$KeyVal->2) \$User ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Failed importing key for user '\" . \$\ + User . \"'.\");\r\ + \n }\r\ + \n :set Continue true;\r\ + \n }\r\ + \n :if (\$Continue = false && \$KeyVal->0 = \"#\") do={\r\ + \n :set User [ \$EitherOr ([ \$ParseKeyValueStore (\$KeyVal->1) ]->\"\ + user\") \$User ];\r\ + \n :set Continue true;\r\ + \n }\r\ + \n :if (\$Continue = false && [ :len (\$KeyVal->0) ] > 0) do={\r\ + \n \$LogPrint warning \$0 (\"SSH key of type '\" . \$KeyVal->0 . \"' \ + is not supported.\");\r\ + \n }\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n} }\r\ + \n} do={:global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err}\r\ + \n" +add comment="Enable or disable ip addresses based on bridge port state" \ + dont-require-permissions=no name=mod/AM-IPbridge owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: mod/AM-IPbridge\r\ + \n# Script comment: Enable or disable ip addresses based on bridge port st\ + ate\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# Add this Script scheduler\r\ + \n:if ([ :len [ /system/scheduler/find where name=\$ScriptName ] ] = 0) do\ + ={\r\ + \n:log warning (\"SystemScheduler for script: \" . \$ScriptName . \" is NO\ + T SET! Fix It Now!\");\r\ + \n:local OnEvent \"/system/script/run \$ScriptName;\";\r\ + \n:local Comment \"Every Day Check For Fake Bridges\";\r\ + \n/system/scheduler/add name=\$ScriptName comment=\$Comment start-time=sta\ + rtup interval=1d on-event=\$OnEvent;\r\ + \n}\r\ + \n\r\ + \n:foreach Bridge in=[ /interface/bridge/find ] do={\r\ + \n :local BrName [ /interface/bridge/get \$Bridge name ];\r\ + \n :if ([ :len [ /interface/bridge/port/find where bridge=\$BrName ] ] > \ + 0) do={\r\ + \n :if ([ :len [ /interface/bridge/port/find where bridge=\$BrName and \ + inactive=no ] ] = 0) do={\r\ + \n /ip/address/disable [ find where !dynamic interface=\$BrName ];\r\ + \n } else={\r\ + \n /ip/address/enable [ find where !dynamic interface=\$BrName ];\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n" +add comment="Check for certificates validity" dont-require-permissions=no \ + name=AM-CheckCerts owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-CheckCerts\r\ + \n# Script comment: Check for certificates validity\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 ExitOK false;\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady; :global GlobalFuncReady;\r\ + \n :retry { :if (\$GlobalConfReady != true || \$GlobalFuncReady != true) \ + \\\r\ + \n do={ :error (\"Global config and/or functions not ready.\"); }; } \ + delay=500ms max=50;\r\ + \n :local ScriptName [ :jobname ];\r\ + \n\r\ + \n :global CertRenewTime;\r\ + \n :global CertRenewUrl;\r\ + \n :global CertWarnTime;\r\ + \n :global Identity;\r\ + \n\r\ + \n :global CertificateAvailable;\r\ + \n :global EscapeForRegEx;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global ParseKeyValueStore;\r\ + \n :global ScriptLock;\r\ + \n :global SendNotification2;\r\ + \n :global SymbolForNotification;\r\ + \n :global UrlEncode;\r\ + \n# :global WaitFullyConnected;\r\ + \n\r\ + \n# Add this Script scheduler\r\ + \n:if ([ :len [ /system/scheduler/find where name=\$ScriptName ] ] = 0) do\ + ={\r\ + \n:log warning (\"System Scheduler for script: \" . \$ScriptName . \" is N\ + OT SET! Fix It Now!\");\r\ + \n:local OnEvent \"/system/script/run \$ScriptName;\";\r\ + \n:local Comment \"Every Day Check For Renew Certificates\";\r\ + \n/system/scheduler/add name=\$ScriptName comment=\$Comment start-time=sta\ + rtup interval=1d on-event=\$OnEvent;\r\ + \n}\r\ + \n\r\ + \n\r\ + \n :local CheckCertificatesDownloadImport do={\r\ + \n :local ScriptName [ :tostr \$1 ];\r\ + \n :local CertName [ :tostr \$2 ];\r\ + \n :local FetchName [ :tostr \$3 ];\r\ + \n\r\ + \n :global CertRenewUrl;\r\ + \n :global CertRenewPass;\r\ + \n\r\ + \n :global CertificateNameByCN;\r\ + \n :global EscapeForRegEx;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global LogPrint;\r\ + \n :global RmFile;\r\ + \n :global UrlEncode;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :foreach Type in={ \"p12\"; \"pem\" } do={\r\ + \n :local CertFileName ([ \$UrlEncode \$FetchName ] . \".\" . \$Type)\ + ;\r\ + \n \$LogPrint debug \$ScriptName (\"Trying type '\" . \$Type . \"' fo\ + r '\" . \$CertName . \\\r\ + \n \"' (file '\" . \$CertFileName . \"')...\");\r\ + \n\r\ + \n :do {\r\ + \n :onerror Err {\r\ + \n /tool/fetch check-certificate=yes-without-crl \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] \ + }) \\\r\ + \n (\$CertRenewUrl . \$CertFileName) dst-path=\$CertFileName \ + as-value;\r\ + \n } do={\r\ + \n :if (!(\$Err ~ \"[Ss]tatus 404\")) do={\r\ + \n \$LogPrint warning \$0 (\"Failed fetching certificate: \" . \ + \$Err);\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n \$WaitForFile \$CertFileName; \r\ + \n\r\ + \n :local DecryptionFailed true;\r\ + \n :foreach I,PassPhrase in=\$CertRenewPass do={\r\ + \n :do {\r\ + \n \$LogPrint debug \$ScriptName (\"Trying \" . \$I . \". passp\ + hrase... \");\r\ + \n :local Result [ /certificate/import file-name=\$CertFileName\ + \_passphrase=\$PassPhrase as-value ];\r\ + \n :if (\$Result->\"decryption-failures\" = 0) do={\r\ + \n \$LogPrint debug \$ScriptName (\"Success!\");\r\ + \n :set DecryptionFailed false;\r\ + \n }\r\ + \n } on-error={ }\r\ + \n }\r\ + \n \$RmFile \$CertFileName;\r\ + \n\r\ + \n :if (\$DecryptionFailed = true) do={\r\ + \n \$LogPrint warning \$ScriptName (\"Decryption failed for certi\ + ficate file '\" . \$CertFileName . \"'.\");\r\ + \n }\r\ + \n\r\ + \n :foreach CertInChain in=[ /certificate/find where common-name!=\ + \$CertName !private-key \\\r\ + \n name~(\"^\" . [ \$EscapeForRegEx \$CertFileName ] . \"_[0-9]\ + +\\\$\") \\\r\ + \n !(subject-alt-name~(\"(^|\\\\W)(DNS|IP):\" . [ \$EscapeForRe\ + gEx \$CertName ] . \"(\\\\W|\\\$)\")) \\\r\ + \n !(common-name=[]) ] do={\r\ + \n \$CertificateNameByCN [ /certificate/get \$CertInChain common-\ + name ];\r\ + \n }\r\ + \n\r\ + \n :return true;\r\ + \n } on-error={\r\ + \n \$LogPrint debug \$ScriptName (\"Could not download certificate \ + file '\" . \$CertFileName . \"'.\");\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :local FormatInfo do={\r\ + \n :local Cert \$1;\r\ + \n\r\ + \n :global FormatLine;\r\ + \n :global FormatMultiLines;\r\ + \n :global IfThenElse;\r\ + \n\r\ + \n :local FormatExpire do={\r\ + \n :global CharacterReplace;\r\ + \n :return [ \$CharacterReplace [ \$CharacterReplace [ :tostr \$1 ] \ + \"w\" \"w \" ] \"d\" \"d \" ];\r\ + \n }\r\ + \n\r\ + \n :local FormatCertChain do={\r\ + \n :local Cert \$1;\r\ + \n\r\ + \n :global ParseKeyValueStore;\r\ + \n\r\ + \n :local CertVal [ /certificate/get \$Cert ];\r\ + \n\r\ + \n :if ([ :typeof (\$CertVal->\"issuer\") ] = \"nothing\") do={\r\ + \n :return \"self-signed\";\r\ + \n }\r\ + \n\r\ + \n :local Return \"\";\r\ + \n :for I from=0 to=5 do={\r\ + \n :set Return (\$Return . [ \$ParseKeyValueStore (\$CertVal->\"iss\ + uer\") ]->\"CN\");\r\ + \n :if ([ :len [ /certificate/builtin/find where skid=(\$CertVal->\ + \"akid\") ] ] > 0) do={\r\ + \n :return \$Return;\r\ + \n }\r\ + \n :do {\r\ + \n :set CertVal [ /certificate/get [ find where skid=(\$CertVal->\ + \"akid\") ] ];\r\ + \n } on-error={\r\ + \n :return (\$Return . \" (possibly incomplete!)\");\r\ + \n }\r\ + \n :if ((\$CertVal->\"akid\") = \"\" || (\$CertVal->\"akid\") = (\$\ + CertVal->\"skid\")) do={\r\ + \n :return \$Return;\r\ + \n }\r\ + \n :set Return (\$Return . \" -> \");\r\ + \n }\r\ + \n :return (\$Return . \"...\");\r\ + \n }\r\ + \n\r\ + \n :local CertVal [ /certificate/get \$Cert ];\r\ + \n\r\ + \n :return ( \\\r\ + \n [ \$FormatLine \"Name\" (\$CertVal->\"name\") ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$CertVal->\"common-name\") ] > 0) ([ \$Fo\ + rmatLine \"CommonName\" (\$CertVal->\"common-name\") ] . \"\\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$CertVal->\"subject-alt-name\") ] > 0) ([\ + \_\$FormatMultiLines \"SubjectAltNames\" (\$CertVal->\"subject-alt-name\")\ + \_] . \"\\n\") ] . \\\r\ + \n [ \$FormatLine \"Private key\" [ \$IfThenElse ((\$CertVal->\"priva\ + te-key\") = true) \"available\" \"missing\" ] ] . \"\\n\" . \\\r\ + \n [ \$FormatLine \"Fingerprint\" (\$CertVal->\"fingerprint\") ] . \"\ + \\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$CertVal->\"ca\") ] > 0) [ \$FormatLine \ + \"Issuer\" (\$CertVal->\"ca\") ] [ \$FormatLine \"Issuer chain\" [ \$Forma\ + tCertChain \$Cert ] ] ] . \"\\n\" . \\\r\ + \n \"Validity:\\n\" . \\\r\ + \n [ \$FormatLine \" days\" (\$CertVal->\"days-valid\") ] . \"\\n\ + \" . \\\r\ + \n [ \$FormatLine \" from\" (\$CertVal->\"invalid-before\") ] . \"\ + \\n\" . \\\r\ + \n [ \$FormatLine \" to\" (\$CertVal->\"invalid-after\") ] . \"\\n\ + \" . \\\r\ + \n [ \$FormatLine \" time left\" [ \$IfThenElse ((\$CertVal->\"exp\ + ired\") = true) \"expired\" [ \$FormatExpire (\$CertVal->\"expires-after\"\ + ) ] ] ]);\r\ + \n }\r\ + \n\r\ + \n :if ([ \$ScriptLock \$ScriptName ] = false) do={\r\ + \n :set ExitOK true;\r\ + \n :error false;\r\ + \n }\r\ + \n# \$WaitFullyConnected;\r\ + \n\r\ + \n :foreach Cert in=[ /certificate/find where !revoked !ca !scep-url expi\ + res-after<\$CertRenewTime ] do={\r\ + \n :local CertVal [ /certificate/get \$Cert ];\r\ + \n :local LastName;\r\ + \n :local FetchName;\r\ + \n\r\ + \n :do {\r\ + \n :if ([ :len \$CertRenewUrl ] = 0) do={\r\ + \n \$LogPrint info \$ScriptName (\"No CertRenewUrl given.\");\r\ + \n :error false;\r\ + \n }\r\ + \n \$LogPrint info \$ScriptName (\"Attempting to renew certificate '\ + \" . (\$CertVal->\"name\") . \"'.\");\r\ + \n\r\ + \n :local ImportSuccess false;\r\ + \n :if ([ :len (\$CertVal->\"common-name\") ] > 0) do={\r\ + \n :set LastName (\$CertVal->\"common-name\");\r\ + \n :set FetchName \$LastName;\r\ + \n :set ImportSuccess [ \$CheckCertificatesDownloadImport \$ScriptN\ + ame \$LastName \$FetchName ];\r\ + \n }\r\ + \n :foreach SAN in=(\$CertVal->\"subject-alt-name\") do={\r\ + \n :if (\$ImportSuccess = false) do={\r\ + \n :set LastName [ :pick \$SAN ([ :find \$SAN \":\" ] + 1) [ :len\ + \_\$SAN ] ];\r\ + \n :set FetchName \$LastName;\r\ + \n :set ImportSuccess [ \$CheckCertificatesDownloadImport \$Scrip\ + tName \$LastName \$FetchName ];\r\ + \n :if (\$ImportSuccess = false && [ :pick \$LastName 0 2 ] = \"*\ + .\") do={\r\ + \n :set FetchName (\"star.\" . [ :pick \$LastName 2 [ :len \$La\ + stName ] ]);\r\ + \n :set ImportSuccess [ \$CheckCertificatesDownloadImport \$Scr\ + iptName \$LastName \$FetchName ];\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n :if (\$ImportSuccess = false) do={ :error false; }\r\ + \n\r\ + \n :if ([ :len (\$CertVal->\"fingerprint\") ] > 0 && \$CertVal->\"fin\ + gerprint\" != [ /certificate/get \$Cert fingerprint ]) do={\r\ + \n \$LogPrint debug \$ScriptName (\"Certificate '\" . \$CertVal->\"\ + name\" . \"' was updated in place.\");\r\ + \n :set CertVal [ /certificate/get \$Cert ];\r\ + \n } else={\r\ + \n \$LogPrint debug \$ScriptName (\"Certificate '\" . \$CertVal->\"\ + name\" . \"' was not updated, but replaced.\");\r\ + \n\r\ + \n :local CertNew [ /certificate/find where name~(\"^\" . [ \$Escap\ + eForRegEx [ \$UrlEncode \$FetchName ] ] . \"\\\\.(p12|pem)_[0-9]+\\\$\") \ + \\\r\ + \n (common-name=(\$CertVal->\"common-name\") or subject-alt-name~\ + (\"(^|\\\\W)(DNS|IP):\" . [ \$EscapeForRegEx \$LastName ] . \"(\\\\W|\\\$)\ + \")) \\\r\ + \n fingerprint!=[ :tostr (\$CertVal->\"fingerprint\") ] ];\r\ + \n :local CertNewVal [ /certificate/get \$CertNew ];\r\ + \n\r\ + \n :if ((\$CertVal->\"expires-after\") > (\$CertNewVal->\"expires-a\ + fter\")) do={\r\ + \n /certificate/remove \$CertNew;\r\ + \n \$LogPrint warning \$ScriptName (\"Old certificate is newer th\ + an the new one. Aborting renew.\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ((\$CertVal->\"private-key\") = true && (\$CertVal->\"privat\ + e-key\") != (\$CertNewVal->\"private-key\")) do={\r\ + \n /certificate/remove \$CertNew;\r\ + \n \$LogPrint warning \$ScriptName (\"Old certificate '\" . (\$Ce\ + rtVal->\"name\") . \"' has a private key, new certificate does not. Aborti\ + ng renew.\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$CertificateAvailable ([ \$ParseKeyValueStore (\$CertNew\ + Val->\"issuer\") ]->\"CN\") \"fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$ScriptName (\"The certificate chain is no\ + t available!\");\r\ + \n }\r\ + \n\r\ + \n /ip/service/set certificate=(\$CertNewVal->\"name\") [ find wher\ + e certificate=(\$CertVal->\"name\") ];\r\ + \n\r\ + \n /ip/ipsec/identity/set certificate=(\$CertNewVal->\"name\") [ fi\ + nd where certificate=(\$CertVal->\"name\") ];\r\ + \n /ip/ipsec/identity/set remote-certificate=(\$CertNewVal->\"name\ + \") [ find where remote-certificate=(\$CertVal->\"name\") ];\r\ + \n\r\ + \n /ip/hotspot/profile/set ssl-certificate=(\$CertNewVal->\"name\")\ + \_[ find where ssl-certificate=(\$CertVal->\"name\") ];\r\ + \n\r\ + \n /certificate/remove \$Cert;\r\ + \n /certificate/set \$CertNew name=(\$CertVal->\"name\");\r\ + \n :set Cert \$CertNew;\r\ + \n :set CertVal [ /certificate/get \$CertNew ];\r\ + \n }\r\ + \n\r\ + \n \$SendNotification2 ({ origin=\$ScriptName; silent=true; \\\r\ + \n subject=([ \$SymbolForNotification \"lock-with-ink-pen\" ] . \"C\ + ertificate renewed: \" . (\$CertVal->\"name\")); \\\r\ + \n message=(\"A certificate on \" . \$Identity . \" has been renewe\ + d.\\n\\n\" . [ \$FormatInfo \$Cert ]) });\r\ + \n \$LogPrint info \$ScriptName (\"The certificate '\" . (\$CertVal->\ + \"name\") . \"' has been renewed.\");\r\ + \n } on-error={\r\ + \n \$LogPrint debug \$ScriptName (\"Could not renew certificate '\" .\ + \_(\$CertVal->\"name\") . \"'.\");\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach Cert in=[ /certificate/find where !revoked !scep-url !(expire\ + s-after=[]) \\\r\ + \n expires-after<\$CertWarnTime !(fingerprint=[]) ] do\ + ={\r\ + \n :local CertVal [ /certificate/get \$Cert ];\r\ + \n\r\ + \n :if ([ :len [ /certificate/scep-server/find where ca-cert=(\$CertVal\ + ->\"ca\") ] ] > 0) do={\r\ + \n \$LogPrint debug \$ScriptName (\"Certificate '\" . (\$CertVal->\"n\ + ame\") . \"' is handled by SCEP, skipping.\");\r\ + \n } else={\r\ + \n :local State [ \$IfThenElse ((\$CertVal->\"expired\") = true) \"ex\ + pired\" \"is about to expire\" ];\r\ + \n\r\ + \n \$SendNotification2 ({ origin=\$ScriptName; \\\r\ + \n subject=([ \$SymbolForNotification \"lock-with-ink-pen,warning-s\ + ign\" ] . \"Certificate warning: \" . (\$CertVal->\"name\")); \\\r\ + \n message=(\"A certificate on \" . \$Identity . \" \" . \$State . \ + \".\\n\\n\" . [ \$FormatInfo \$Cert ]) });\r\ + \n \$LogPrint info \$ScriptName (\"The certificate '\" . (\$CertVal->\ + \"name\") . \"' \" . \$State . \\\r\ + \n \", it is invalid after \" . (\$CertVal->\"invalid-after\") . \ + \".\");\r\ + \n }\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err;\r\ + \n}\r\ + \n" +add comment="Global Config Script" dont-require-permissions=no name=\ + AM-GlobalConfig owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\ + \n# RouterOS script: AM-GlobalConfig\ + \n# Script comment: Global Config Script\ + \n# Copyright (c) 2007-2026 Vados \ + \n#\ + \n#\ + \n# Warning: Dont touch this line!\ + \n:global GlobalConfReady false;\ + \n#\ + \n#\ + \n# Global Url For Amster scripts to fetch\ + \n# most be defined in AM-Init-Script or AM-setup scripts\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/\";\ + \n:global ScriptsUrlSuffix \"\";\ + \n:global CheckSumsVerify true;\ + \n\ + \n:global ScriptUpdatesCRLF true;\ + \n:global CommentsInScripts true;\ + \n\ + \n# Debug output:\ + \n:global PrintDebug true; #false;\ + \n\ + \n# Debug output for specific script:\ + \n:set (\$PrintDebugOverride->\"AM-GlobalFunc\") true;\ + \n\ + \n# Debug logs\ + \n# Other actions (disk, email, remote or support) can be used as well.\ + \n# I do not recommend using echo - use debug output instead (https://rsc.\ + eworm.de/main/DEBUG.html#debug-output).\ + \n#/system/logging/add topics=script,debug action=memory;\ + \n\ + \n:global MikrotikUpgradeUrl \"https://upgrade.mikrotik.com/routeros\";\ + \n:global Domain \"WORKGROUP\";\ + \n\ + \n:global EmailGeneralTo \"vados@vados.ru\";\ + \n#:global EmailGeneralCc \"\";\ + \n\ + \n# \$ScriptInstallUpdate mod/notification-telegram\ + \n:global TelegramTokenId \"8390868324:AAG3_d1hfVR2M6pGAgDK6ZvhOe4J97nyopw\ + \";\ + \n:global TelegramChatId \"-1003631309063\"; #\"454403445\";\ + \n# Use this to send notifications to a specific topic in group.\ + \n#:global TelegramThreadId \"30\";\ + \n# Using telegram-chat you have to define trusted chat ids (not group ids\ + !)\ + \n# or user names. Groups allow to chat with devices simultaneously.\ + \n:global TelegramChatIdsTrusted {\ + \n \"454403445\"\ + \n \"-1003631309063\"\ + \n \"-5124482807\"\ + \n \"1087968824\";\ + \n};\ + \n# \"-5294757340\";\ + \n\ + \n:global TelegramChatGroups \"(all)\";\ + \n#:global TelegramChatGroups \"(all|home|office)\";\ + \n\ + \n:global NotificationFunctions {\ + \n \"email\"\ + \n \"telegram\";\ + \n};\ + \n# Toggle this to disable symbols in notifications.\ + \n:global NotificationsWithSymbols true;\ + \n:global TerminalColorOutput true;\ + \n\ + \n:global DetectIpAddrDefault \"https://ipv4.mikrotik.ovh/\";\ + \n:global DetectIpAddrFallback \"https://api.ipify.org/\";\ + \n\ + \n## Update channel. Possible values: stable, long-term, testing, developm\ + ent\ + \n:global updateChannel \"stable\";\ + \n\ + \n:global CertRenewUrl (\$GlobalScriptsUrl . \"certs/\");\ + \n:global CertRenewTime 2w;\ + \n:global CertRenewPass {\ + \n \"\";\ + \n# \"v3ry-s3cr3t\";\ + \n# \"4n0th3r-s3cr3t\";\ + \n};\ + \n:global CertWarnTime 1w;\ + \n:global CertIssuedExportPass {\ + \n \"\";\ + \n# \"cert1-cn\"=\"v3ry-s3cr3t\";\ + \n# \"cert2-cn\"=\"4n0th3r-s3cr3t\";\ + \n};\ + \n\ + \n# Script BackupAndUpdate mode, possible values: backup,\ + \n# updateOnce - Update once as \"osnotify\" and back \"osnotify\" mode (i\ + n terminal run :set OSUpdateMode updateOnce; \$OSUpdateMode;). \ + \n# osupdate - Update if available and creates backups before/after update\ + \_(ignores `forceBackup`)\ + \n# Set `forceBackup` to true to always create backups, even\ + \_without updates\ + \n# osnotify - Set `forceBackup` to always create backups on every run\ + \n:global DevInfoIncludeIP true;\ + \n:global BackupAndUpdateMode \"osnotify\"\ + \n\ + \n:global forceBackup true;\ + \n:global BackupPassword \"Peskar55\";\ + \n\ + \n# SFTP Backup Variables\ + \n:global BackupRandomDelay 0;\ + \n:global BackupUploadUrl \"sftp://amster.vados.ru/upload/\";\ + \n:global BackupUploadUser \$Identity;\ + \n:global BackupUploadPass \"root.mnuc.backuper\";\ + \n\ + \n:global BackupSendBinary true;\ + \n:global BackupSendExport true;\ + \n:global BackupSendGlobalConfig true;\ + \n:global BackupSendScripts true;\ + \n\ + \n# Remove local file after uploading if no errors\ + \n:global BackupRmLocal true;\ + \n\ + \n# Local Backups Root Directory \ + \n:global BackupLocalRoot \"tmpfs\";\ + \n\ + \n# Encrypt Backup\ + \n:global BackupEncrypt true;\ + \n\ + \n# Sensitive information in Backups\ + \n:global BackupSens true;\ + \n\ + \n# User Export\ + \n:global BackupUser true;\ + \n\ + \n# License Export (not for CHR, will silently skip)\ + \n:global BackupLicense false;\ + \n\ + \n# SSH Keys\ + \n:global BackupSshKeys true;\ + \n\ + \n# Certificate Export\ + \n:global BackupCerts true;\ + \n\ + \n# Certificate Password\ + \n:global BackupCertsPasswd \"\";\ + \n\ + \n# User-Manager Export\ + \n:global BackupUserMan false;\ + \n\ + \n# The Dude Export\ + \n:global BackupDude false;\ + \n\ + \n# User Files to export, comma-separated string or array of strings\ + \n# User Files are not removed on backup\ + \n# Any directory paths will be removed (/ -> _) on remote file\ + \n# Nonpresent files are silently skipped\ + \n:global BackupUserList \"autosupout.rif,autosupout.old.rif\";\ + \n\ + \n# load functions and any custom scripts\ + \n# [ /system/script/find where name=\"global-config-ov\ + erlay\" ], \\\ + \n# [ /system/script/find where name~\"^global-config-o\ + verlay\\\\.d/.\" ]\ + \n#\ + \n#:foreach Script in=([ /system/script/find where name=\"Amster-TGglobalV\ + ars\" ], [ /system/script/find where name=\"Amster-TGglobalFunc\" ]) do={\ + \n# :onerror Err {\ + \n# /system/script/run \$Script;\ + \n# } do={\ + \n# :log error (\"Loading configuration from configs and functions\"\ + \_. [ /system/script/get \$Script name ] . \" failed: \" . \$Err);\ + \n# }\ + \n#}\ + \n#:log info \"\\ndevMode = \$devMode\";\ + \n#:log info \"\\ndevRunning = \$devRunning\";\ + \n:foreach Script in=[ /system/script/find where source~\"^#!rsc by Vados \ + GlobalRUN\\r\?\\n\" ] do={\ + \n :onerror Err {\ + \n /system/script/run \$Script;\ + \n } do={\ + \n :log error (\"Run script \" . [ /system/script/get \$Script name \ + ] . \" width marker \\\" GlobalRUN\\\" failed: \" . \$Err);\ + \n }\ + \n}\ + \n\ + \n# signal we are ready\ + \n:set GlobalConfReady true;\ + \n:while (\$GlobalConfReady != true) do={:delay 500ms};\ + \n" +add comment="Renew locally issued certificates" dont-require-permissions=no \ + name=AM-CertsRenew owner=AM-CertsRenew policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-CertsRenew\r\ + \n# Script comment: Renew locally issued certificates\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n#\r\ + \n:local ExitOK false;\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady; :global GlobalFuncReady;\r\ + \n :retry { :if (\$GlobalConfReady != true || \$GlobalFuncReady != true) \ + \\\r\ + \n do={ :error (\"Global config and/or functions not ready.\"); }; } \ + delay=500ms max=50;\r\ + \n :local ScriptName [ :jobname ];\r\ + \n\r\ + \n :global CertIssuedExportPass;\r\ + \n\r\ + \n :global LogPrint;\r\ + \n :global MkDir;\r\ + \n :global ScriptLock;\r\ + \n\r\ + \n# Add this Script scheduler\r\ + \n:if ([ :len [ /system/scheduler/find where name=\$ScriptName ] ] = 0) do\ + ={\r\ + \n:log warning (\"System Scheduler for script: \" . \$ScriptName . \" is N\ + OT SET! Fix It Now!\");\r\ + \n:local OnEvent \"/system/script/run \$ScriptName;\";\r\ + \n:local Comment \"Every Day Check For Update Local Issued Certificates.\"\ + ;\r\ + \n#/system/scheduler/add name=\$ScriptName comment=\$Comment start-time=st\ + artup interval=1d on-event=\$OnEvent;\r\ + \n}\r\ + \n\r\ + \n :if ([ \$ScriptLock \$ScriptName ] = false) do={\r\ + \n :set ExitOK true;\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :foreach Cert in=[ /certificate/find where issued expires-after<3w ] d\ + o={\r\ + \n :local CertVal [ /certificate/get \$Cert ];\r\ + \n /certificate/issued-revoke \$Cert;\r\ + \n /certificate/set name=(\$CertVal->\"name\" . \"-revoked-\" . [ /syst\ + em/clock/get date ]) \$Cert;\r\ + \n /certificate/add name=(\$CertVal->\"name\") common-name=(\$CertVal->\ + \"common-name\") \\\r\ + \n key-usage=(\$CertVal->\"key-usage\") subject-alt-name=(\$CertVal\ + ->\"subject-alt-name\");\r\ + \n /certificate/sign (\$CertVal->\"name\") ca=(\$CertVal->\"ca\");\r\ + \n :if ([ :typeof (\$CertIssuedExportPass->(\$CertVal->\"common-name\")\ + ) ] = \"str\") do={\r\ + \n :if ([ \$MkDir \"cert-issued\" ] = true) do={\r\ + \n /certificate/export-certificate (\$CertVal->\"name\") type=pkcs1\ + 2 \\\r\ + \n file-name=(\"cert-issued/\" . \$CertVal->\"common-name\") \\\ + \r\ + \n export-passphrase=(\$CertIssuedExportPass->(\$CertVal->\"com\ + mon-name\"));\r\ + \n \$LogPrint info \$ScriptName (\"Issued a new certificate for '\"\ + \_. \$CertVal->\"common-name\" . \\\r\ + \n \"', exported to 'cert-issued/\" . \$CertVal->\"common-name\" \ + . \".p12'.\");\r\ + \n } else={\r\ + \n \$LogPrint warning \$ScriptName (\"Failed creating directory, no\ + t exporting certificate.\");\r\ + \n }\r\ + \n } else={\r\ + \n \$LogPrint info \$ScriptName (\"Issued a new certificate for '\" .\ + \_\$CertVal->\"common-name\" . \"'.\");\r\ + \n }\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err;\r\ + \n}\r\ + \n" +add comment="Update and Backup send notification to EMail" \ + dont-require-permissions=no name=AM-Backup-UpdateEmail owner=\ + AM-Backup-UpdateEmail policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-Backup-UpdateEmail\r\ + \n# Script comment: Update and Backup send notification to EMail\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n# requires RouterOS, version>=6.43.7\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n# Updated: 15/04/2025\r\ + \n# Website: https://github.com/beeyev\r\ + \n# Notification e-mail (Make sure you have configured Email settings in T\ + ools -> Email)\r\ + \n:local ExitOK false;\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady; :global GlobalFuncReady;\r\ + \n :retry { :if (\$GlobalConfReady != true || \$GlobalFuncReady != true) \ + \\\r\ + \n do={ :error (\"Global config and/or functions not ready.\"); }; } \ + delay=500ms max=50;\r\ + \n :local ScriptName [ :jobname ];\r\ + \n\r\ + \n:local IfThenElse do={:if ([ :tostr \$1 ] = \"true\" || [ :tobool \$1 ] \ + = true) do={:return \$2}; :return \$3;}\r\ + \n:local EitherOr do={\r\ + \n :if ([ :typeof \$1 ] = \"num\") do={:if ((\$1 != 0) = true) do={:retur\ + n \$1} else={:return \$2};}\r\ + \n :if ([ :typeof \$1 ] = \"time\") do={:if ((\$1 > 0s) = true) do={:retu\ + rn \$1} else={:return \$2};}\r\ + \n :if ([ :len [ :tostr \$1 ] ] > 0) do={:return \$1} else={:return \$2};\ + \r\ + \n}\r\ + \n:local ExitError do={\r\ + \n :local ExitOK [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Error [ :tostr \$3 ];\r\ + \n :if (\$ExitOK = \"false\") do={:log error (\$Name [ \$IfThenElse ([ :p\ + ick \$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:global LogPrint;\r\ + \n:global EditSchedulers;\r\ + \n:global DevInfoIncludeIP;\r\ + \n\r\ + \n:local SchedInterval \"7d\";\r\ + \n:local SchedStartTime \"03:41:27\";\r\ + \n:local SchedComment \"Every 7 Day Check For Update and Backup send notif\ + ication to EMail.\";\r\ + \n\r\ + \n# Function to add or edit schedulers for scripts, to ensure they are set\ + \_up correctly\r\ + \n# How to use:\r\ + \n# Call this function with the following parameters:\r\ + \n# 1. \$1 - Scheduler name (usually same as script name) [*]\r\ + \n# 2. \$2 - Interval (e.g. \"1d\" (default is \"1d\")) [**]\r\ + \n# 3. \$3 - Start Time (e.g. \"00:00:00\", default is current time) [**]\ + \r\ + \n# 4. \$4 - Comment (optional, default: \"Scheduler for script: \")\ + \_[**]\r\ + \n# 5. \$5 - On Event command (e.g. \"/system/script { run ; }\" (de\ + fault is \"/system/script { run \$SchedName; }\")) [**]\r\ + \n# 6. \$6 - Policy (e.g. \"ftp,reboot,read,write,policy,test,password,sni\ + ff,sensitive,romon\" (default is the same)) [**]\r\ + \n# 7. \$7 - Start Date (e.g. \"jan/01/1970\", default is current date) [*\ + *]\r\ + \n# Notes:\r\ + \n# * - Scheduler name is required, and is used to identify the scheduler\ + \_to create or edit. It is usually the same as the script name (\$ScriptNa\ + me).\r\ + \n# ** - If optional parameters are not provided, default values will be u\ + sed.\r\ + \n# This allows for quick setup with minimal parameters, while still \ + providing flexibility for customization.\r\ + \n# Example usage:\r\ + \n# :if ([ \$EditSchedulers \"my-script\" ] = false) do={:set ExitOK false\ + ; :error true;}\r\ + \n# :if ([ \$EditSchedulers \"my-script\" \"1d\" \"03:41:27\" \"My custom \ + scheduler comment\" false false \"jan/01/1970\" ] = false) do={:set ExitOK\ + \_false; :error true;}\r\ + \n\r\ + \n:set EditSchedulers do={\r\ + \n :local SchedName [ :tostr \$1 ];\r\ + \n :if ([ :len \$SchedName ] = 0) do={ :return false; }\r\ + \n :local Interval [ :tostr \$2 ];\r\ + \n :if ([ :len \$Interval ] = 0) do={ :set Interval \"1d\"; }\r\ + \n :local StartTime [ :tostr \$3 ];\r\ + \n :if ([ :len \$StartTime ] = 0) do={ :set StartTime [/system/clock/get \ + time]; }\r\ + \n :local Comment [ :tostr \$4 ];\r\ + \n :if ([ :len \$Comment ] = 0) do={ :set Comment \"Scheduler for script:\ + \_\$SchedName\"; }\r\ + \n :local OnEvent [ :tostr \$5 ];\r\ + \n :if ([ :len \$OnEvent ] = 0) do={ :set OnEvent \"/system/script { run \ + \$SchedName; }\"; }\r\ + \n :local Policy [ :tostr \$6 ];\r\ + \n :if ([ :len \$Policy ] = 0) do={ :set Policy \"ftp,reboot,read,write,p\ + olicy,test,password,sniff,sensitive,romon\"; }\r\ + \n :local StartDate [ :tostr \$7 ];\r\ + \n :if ([ :len \$StartDate ] = 0) do={ :set StartDate [/system/clock/get \ + date]; }\r\ + \n\r\ + \n :onerror Err {\r\ + \n # Check if scheduler exists, if not - create it\r\ + \n :if ([ :len [ /system/scheduler/find where name=\$SchedName ] ] = 0)\ + \_do={\r\ + \n :log warning (\$SchedName . \"System Scheduler for script: \" . \$\ + SchedName . \" is NOT SET! Fix It Now!\");\r\ + \n /system/scheduler/add comment=\$Comment interval=\$Interval name=\ + \$SchedName on-event=\$OnEvent policy=\$Policy start-date=\$StartDate star\ + t-time=\$StartTime;\r\ + \n }\r\ + \n # Check if scheduler parameters are correct, if not - fix them\r\ + \n :if ([ /system/scheduler/get \$SchedName comment ] != \$Comment) do=\ + {\r\ + \n /system/scheduler/set \$SchedName comment=\$Comment;\r\ + \n }\r\ + \n :if ([ /system/scheduler/get \$SchedName interval ] != \$Interval) d\ + o={\r\ + \n /system/scheduler/set \$SchedName interval=\$Interval;\r\ + \n }\r\ + \n :if ([ /system/scheduler/get \$SchedName on-event ] != \$OnEvent) do\ + ={\r\ + \n /system/scheduler/set \$SchedName on-event=\$OnEvent;\r\ + \n }\r\ + \n :if ([ /system/scheduler/get \$SchedName policy ] != \$Policy) do={\ + \r\ + \n /system/scheduler/set \$SchedName policy=\$Policy;\r\ + \n }\r\ + \n :if ([ /system/scheduler/get \$SchedName start-date ] != \$StartDate\ + ) do={\r\ + \n /system/scheduler/set \$SchedName start-date=\$StartDate;\r\ + \n }\r\ + \n :if ([ /system/scheduler/get \$SchedName start-time ] != \$StartTime\ + ) do={\r\ + \n /system/scheduler/set \$SchedName start-time=\$StartTime;\r\ + \n }\r\ + \n } do={:log error (\$SchedName . \"Failed to add/modify scheduler for '\ + \" . \$SchedName . \"' failed: \" . \$Err); :return false};\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:if ([ \$EditSchedulers \$ScriptName \$SchedInterval \$SchedStartTime \$\ + SchedComment ] = false) do={\r\ + \n :log error (\$ScriptName . \"Failed to add/modify scheduler for \" . \ + \$ScriptName . \"!\");\r\ + \n :set ExitOK true;\r\ + \n :error true;\r\ + \n}\r\ + \n\r\ + \n# Local Function CheckOSUpdateMode\r\ + \n:local CheckOSUpdateMode;\r\ + \n:set CheckOSUpdateMode do={\r\ + \n :local NewMode [ :tostr \$1 ];\r\ + \n :if ([ :len \$NewMode ] = 0) do={\r\ + \n :log error (\$0 . \"/nFunction /\$CheckOSUpdateMode received empty v\ + alue!\");\r\ + \n :return false;\r\ + \n :error true;\r\ + \n }\r\ + \n\r\ + \n :global BackupAndUpdateMode;\r\ + \n :global OldMode [ :tostr \$BackupAndUpdateMode ];\r\ + \n :if (\$NewMode != \$BackupAndUpdateMode && \$NewMode = \"updateOnce\")\ + \_do={\r\ + \n :set BackupAndUpdateMode [ :tostr \$NewMode ];\r\ + \n :log info (\$0 . \"/nOk. /\$BackupAndUpdateMode set to: '\" . \$NewM\ + ode . \"'.\\nYou're a good boy! ))\\nI'm launching the update in 5 seconds\ + .\");\r\ + \n :delay 5;\r\ + \n /system/script { run \$ScriptName; };\r\ + \n } else={\r\ + \n :log warning (\$0 . \"/nFunction /\$CheckOSUpdateMode received value: \ + '\" . \$NewMode . \"', but is may be only \\\"updateOnce\\\"!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n :error false;\r\ + \n}\r\ + \n\r\ + \n# :if ([ :len [ /system/scheduler/find where name=\"running-from-backup\ + -partition\" ] ] > 0) do={\r\ + \n# \$LogPrint warning \$ScriptName (\"Running from backup partition, r\ + efusing to act.\");\r\ + \n# :set ExitOK true;\r\ + \n# :error false;\r\ + \n# }\r\ + \n\r\ + \n:global EmailGeneralTo;\r\ + \n:global BackupAndUpdateMode;\r\ + \n:global forceBackup;\r\ + \n:global BackupPassword;\r\ + \n:global BackupSens;\r\ + \n:global updateChannel;\r\ + \n\r\ + \n:global DevInfoIncludeIP;\r\ + \n\r\ + \n# Installs patch updates only (BackupAndUpdateMode = \"osupdate\").\r\ + \n# Works for `stable` and `long-term` channels.\r\ + \n# Updates only if MAJOR.MINOR match (e.g. 6.43.2 > 6.43.6 allowed, 6.44.\ + 1 skipped).\r\ + \n# Sends info if a newer (non-patch) version is found.\r\ + \n:local installOnlyPatchUpdates false;\r\ + \n:local scriptVersion \"26.04.30\";\r\ + \n:local copyrightUrl \"https://www.github.com/vados-dev/\";\r\ + \n#Script messages prefix\r\ + \n:local SMP \"BkpAndUpdate:\";\r\ + \n\r\ + \n:local exitErrorMessage \"\$SMP script stopped due to an error. Please c\ + heck logs for more details.\";\r\ + \n:log info \"\\n\\n\$SMP Script \\\"Mikrotik RouterOS automatic backup & \ + update\\\" v.\$scriptVersion started.\";\r\ + \n:log info \"\$SMP Script Mode: `\$BackupAndUpdateMode`, Update channel: \ + `\$updateChannel`, Force backup: `\$forceBackup`, Install only patch updat\ + es: `\$installOnlyPatchUpdates`\";\r\ + \n\r\ + \n## vv FUNCTIONS vv ##\r\ + \n:global WaitCheckUpdates; \$WaitCheckUpdates;\r\ + \n:global MiniDateTimeStamp;\r\ + \n:local MDTSFix [\$MiniDateTimeStamp];\r\ + \n:global Identity;\r\ + \n:global IdentityShort;\r\ + \n:global devBoardName;\r\ + \n:global runningVersion;\r\ + \n:global runningChannel;\r\ + \n:global devModel;\r\ + \n:global devRbSerialNumber;\r\ + \n:global ROsVerAvail;\r\ + \n:global PkgUpdStatus;\r\ + \n\r\ + \n# Checks if two RouterOS version strings differ only by the patch versio\ + n\r\ + \n# :put [\$FuncIsPatchUpdateOnly \"6.2.1\" \"6.2.4\"] # Output: true\r\ + \n# :put [\$FuncIsPatchUpdateOnly \"6.2.1\" \"6.3.1\"] # Output: false\r\ + \n:local FuncIsPatchUpdateOnly do={\r\ + \n :local ver1 \$1;\r\ + \n :local ver2 \$2;\r\ + \n # Extract the major and minor components from a version\r\ + \n :local extractMajorMinor do={\r\ + \n :local ver \$1;\r\ + \n :local dot1 [:find \$ver \".\"];\r\ + \n :if (\$dot1 = -1) do={:return \$ver}\r\ + \n :local major [:pick \$ver 0 \$dot1];\r\ + \n :local rest [:pick \$ver (\$dot1 + 1) [:len \$ver]];\r\ + \n :local dot2 [:find \$rest \".\"];\r\ + \n :local minor \$rest;\r\ + \n :if (\$dot2 >= 0) do={:set minor [:pick \$rest 0 \$dot2]}\r\ + \n :return (\$major . \".\" . \$minor);\r\ + \n }\r\ + \n\r\ + \n# Compare the major and minor components of both version strings\r\ + \n:if ([\$extractMajorMinor \$ver1] = [\$extractMajorMinor \$ver2]) do={:r\ + eturn true}\r\ + \n :return false;\r\ + \n}\r\ + \n# Creates backups and returns array of names\r\ + \n# Possible arguments:\r\ + \n# \$1 - file name, without extension\r\ + \n# \$2 - password (optional)\r\ + \n# \$3 - sensitive data in config (optional, default: false)\r\ + \n# Example:\r\ + \n#:put [\$FuncCreateBackups \$backupName]\r\ + \n:local FuncCreateBackups do={\r\ + \n :local backupName [ :tostr \$1 ];\r\ + \n :local BackPass \$2;\r\ + \n :local BackSens \$3;\r\ + \n\r\ + \n #Script messages prefix\r\ + \n :local SMP \"BkpAndUpdate:\";\r\ + \n :local exitErrorMessage \"\$SMP script stopped due to an error. Please\ + \_check logs for more details.\";\r\ + \n :log info (\"\$SMP global function `FuncCreateBackups` started, input:\ + \_`\$backupName`\");\r\ + \n\r\ + \n # validate required parameter: backupName\r\ + \n :if ([:typeof \$backupName] != \"str\" or [:len \$backupName] = 0) do=\ + {\r\ + \n :log error \"\$SMP parameter 'backupName' is required and must be a \ + non-empty string\";\r\ + \n# :log warning \"\$SMP parameter '\\\$backupName' is required and mus\ + t be a non-empty string.\\nI set '\\\$backupName' to 'default-backup'\";\r\ + \n# :set \$backupName \"default-backup\";\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n\r\ + \n :local backupFileSys \"\$backupName.backup\";\r\ + \n :local backupFileConfig \"\$backupName.rsc\";\r\ + \n :local backupNames {\$backupFileSys;\$backupFileConfig};\r\ + \n\r\ + \n ## Perform system backup\r\ + \n :if ([:len \$BackPass] = 0) do={\r\ + \n :log info (\"\$SMP starting backup without password, backup name: `\ + \$backupName`\");\r\ + \n /system backup save dont-encrypt=yes name=\$backupName;\r\ + \n } else={\r\ + \n :log info (\"\$SMP starting backup with password, backup name: `\$ba\ + ckupName`\");\r\ + \n /system backup save password=\$BackPass name=\$backupName;\r\ + \n }\r\ + \n :log info (\"\$SMP system backup created: `\$backupFileSys`\");\r\ + \n ## Export config file\r\ + \n :if (\$BackSens = true) do={\r\ + \n :log info (\"\$SMP starting export config with sensitive data, backu\ + p name: `\$backupName`\");\r\ + \n # Since RouterOS v7 it needs to be explicitly set that we want to ex\ + port sensitive data\r\ + \n :if ([:pick [/system resource get version] 0 1] < 7) do={\r\ + \n :execute \"/export compact terse file=\$backupName\";\r\ + \n } else={\r\ + \n :execute \"/export compact show-sensitive terse file=\$backupName\ + \";\r\ + \n }\r\ + \n } else={\r\ + \n :log info (\"\$SMP starting export config without sensitive data, ba\ + ckup name: `\$backupName`\");\r\ + \n /export compact hide-sensitive terse file=\$backupName;\r\ + \n }\r\ + \n :log info (\"\$SMP Config export complete: `\$backupFileConfig`\");\r\ + \n :log info (\"\$SMP Waiting a little to ensure backup files are written\ + \");\r\ + \n :delay 20;\r\ + \n :if ([:len [/file find name=\$backupFileSys]] > 0) do={\r\ + \n :log info (\"\$SMP system backup file successfully saved to the file\ + \_system: `\$backupFileSys`\");\r\ + \n } else={\r\ + \n :log error (\"\$SMP system backup was not created, file does not exi\ + st: `\$backupFileSys`\");\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n :if ([:len [/file find name=\$backupFileConfig]] > 0) do={\r\ + \n :log info (\"\$SMP config backup file successfully saved to the file\ + \_system: `\$backupFileConfig`\");\r\ + \n } else={\r\ + \n :log error (\"\$SMP config backup was not created, file does not exi\ + st: `\$backupFileConfig`\");\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n :log info (\"\$SMP global function `FuncCreateBackups` finished. Creat\ + ed backups, system: `\$backupFileSys`, config: `\$backupFileConfig`\")\r\ + \n :return \$backupNames;\r\ + \n}\r\ + \n# Sends an email\r\ + \n# Parameters:\r\ + \n# \$1 - to (email address)\r\ + \n# \$2 - subject\r\ + \n# \$3 - body\r\ + \n# \$4 - file attachments (optional; pass \"\" if not needed)\r\ + \n#\r\ + \n# Example:\r\ + \n# \$FuncSendEmailSafe \"admin@domain.com\" \"Backup Done\" \"Backup comp\ + lete.\" \"backup1.backup\"\r\ + \n:local FuncSendEmailSafe do={\r\ + \n :global EmailGeneralTo;\r\ + \n :local emailSubject \$2;\r\ + \n :local emailBody \$3;\r\ + \n :local emailAttachments \$4;\r\ + \n :local SMP \"Bkp&Upd:\";\r\ + \n :local exitErrorMessage \"\$SMP script stopped due to an error. Please\ + \_check logs for more details.\";\r\ + \n :log info \"\$SMP Attempting to send email to `\$EmailGeneralTo`\";\r\ + \n # SAFETY: wait for any previously queued email to finish\r\ + \n :local waitTimeoutPre 60;\r\ + \n :local waitCounterPre 0;\r\ + \n :while (([/tool e-mail get last-status] = \"resolving-dns\" or [/tool \ + e-mail get last-status] = \"in-progress\")) do={\r\ + \n :if (\$waitCounterPre >= \$waitTimeoutPre) do={\r\ + \n :log error \"\$SMP Email send aborted: previous send did not compl\ + ete after \$waitTimeoutPre seconds\";\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n :log info \"\$SMP Waiting for previous email to finish (status: \$[/\ + tool e-mail get last-status])...\";\r\ + \n :delay 1; \r\ + \n :set waitCounterPre (\$waitCounterPre + 1);\r\ + \n }\r\ + \n # Send the email\r\ + \n :do {\r\ + \n /tool e-mail send to=\$EmailGeneralTo subject=\$emailSubject body=\$\ + emailBody file=\$emailAttachments;\r\ + \n } on-error={\r\ + \n :log error \"\$SMP Email send command failed to execute. Check logs \ + and verify email settings.\";\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n # Wait for send status to change from \"in-progress\" / \"resolving-dn\ + s\"\r\ + \n :local waitTimeout 60;\r\ + \n :local waitCounter 0;\r\ + \n :local emailStatus \"\";\r\ + \n :log info \"\$SMP Waiting for email to be sent, timeout in `\$waitTime\ + out` seconds...\";\r\ + \n :while (\$waitCounter < \$waitTimeout) do={\r\ + \n :set emailStatus [/tool e-mail get last-status];\r\ + \n :if (\$emailStatus != \"in-progress\" and \$emailStatus != \"resolvi\ + ng-dns\") do={\r\ + \n :log info \"\$SMP Email send status received: \$emailStatus\";\r\ + \n # exit loop\r\ + \n :set waitCounter \$waitTimeout;\r\ + \n } else={:delay 1; :set waitCounter (\$waitCounter + 1)}\r\ + \n }\r\ + \n # Final decision based on last status\r\ + \n :if (\$emailStatus = \"succeeded\") do={\r\ + \n :log info \"\$SMP Email successfully sent to `\$EmailGeneralTo`\";\ + \r\ + \n } else={\r\ + \n :log error \"\$SMP Email failed to send. Status: `\$emailStatus`. Ch\ + eck logs for more details and verify email settings.\";\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n}\r\ + \n# Global variable to track current update step\r\ + \n# They need to be initialized here first to be available in the script\r\ + \n:global buGlobalVarTargetOsVersion;\r\ + \n:global buGlobalVarScriptStep;\r\ + \n:local scriptStep \$buGlobalVarScriptStep;\r\ + \n:do {\r\ + \n /system/script/environment remove buGlobalVarScriptStep;\r\ + \n} on-error={}\r\ + \n:if ([:len \$scriptStep] = 0) do={\r\ + \n :set scriptStep 1;\r\ + \n}\r\ + \n## ^^ FUNCTIONS ^^ ##\r\ + \n#\r\ + \n# Initial validation\r\ + \n## Check email settings\r\ + \n:if ([:len \$EmailGeneralTo] < 3) do={\r\ + \n :log error (\"\$SMP Parameter `\\\$EmailGeneralTo` is not set, or cont\ + ains invalid value. Script stopped.\");\r\ + \n :error \$exitErrorMessage;\r\ + \n}\r\ + \n# Values will be defined later in the script\r\ + \n:local emailServer \"\";\r\ + \n:local emailFromAddress [/tool e-mail get from];\r\ + \n:log info \"\$SMP Validating email settings...\";\r\ + \n:do {\r\ + \n :set emailServer [/tool e-mail get server];\r\ + \n} on-error={\r\ + \n # This is a workaround for the RouterOS v7.12 and older versions\r\ + \n :set emailServer [/tool e-mail get address];\r\ + \n}\r\ + \n:if (\$emailServer = \"0.0.0.0\") do={\r\ + \n :log error (\"\$SMP Email server address is not correct: `\$emailServe\ + r`, check `Tools -> Email`. Script stopped.\");\r\ + \n :error \$exitErrorMessage;\r\ + \n}\r\ + \n:if ([:len \$emailFromAddress] < 3) do={\r\ + \n :log error (\"\$SMP Email configuration FROM address is not correct: `\ + \$emailFromAddress`, check `Tools -> Email`. Script stopped.\");\r\ + \n :error \$exitErrorMessage;\r\ + \n}\r\ + \n# Script mode validation\r\ + \n:if (\$BackupAndUpdateMode != \"backup\" and \$BackupAndUpdateMode != \"\ + osupdate\" and \$BackupAndUpdateMode != \"updateOnce\" and \$BackupAndUpda\ + teMode != \"osnotify\") do={\r\ + \n :log error (\"\$SMP Script parameter `\\\$BackupAndUpdateMode` is not \ + set, or contains invalid value: `\$BackupAndUpdateMode`. Script stopped.\"\ + );\r\ + \n :error \$exitErrorMessage;\r\ + \n}\r\ + \n# Update channel validation\r\ + \n:if (\$updateChannel != \"stable\" and \$updateChannel != \"long-term\" \ + and \$updateChannel != \"testing\" and \$updateChannel != \"development\")\ + \_do={\r\ + \n :log error (\"\$SMP Script parameter `\\\$updateChannel` is not set, o\ + r contains invalid value: `\$updateChannel`. Script stopped.\");\r\ + \n :error \$exitErrorMessage;\r\ + \n}\r\ + \n# Verify if script is set to install patch updates and if the update cha\ + nnel is valid\r\ + \n:if ((\$BackupAndUpdateMode = \"osupdate\" or \$BackupAndUpdateMode = \"\ + updateOnce\") and \$installOnlyPatchUpdates = true) do={\r\ + \n :if (\$updateChannel != \"stable\" and \$updateChannel != \"long-term\ + \") do={\r\ + \n :log error (\"\$SMP Patch-only updates enabled, but update channel `\ + \$updateChannel` is invalid. Only `stable` and `long-term` are supported. \ + Script stopped\");\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n \r\ + \n :if (\$runningChannel != \"stable\" and \$runningChannel != \"long-ter\ + m\") do={\r\ + \n :log error (\"\$SMP Script is set to install only patch updates, but\ + \_the installed RouterOS version is not from `stable` or `long-term` chann\ + el: `\$runningChannel`. Script stopped\");\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n}\r\ + \n#\r\ + \n\r\ + \n:local rawTime [/system clock get time];\r\ + \n:local rawDate [/system clock get date];\r\ + \n\r\ + \n:local deviceOsVerAndChannelRunning [/system/resource/get version];\r\ + \n\r\ + \n:local backupNameTemplate (\"backup_v\" . \$runningVersion . \"_\" .\ + \_\$runningChannel . \"_\" . \$MDTSFix);\r\ + \n:local backupNameBeforeUpdate (\$backupNameTemplate . \"_before_update\"\ + );\r\ + \n:local backupNameAfterUpdate (\$backupNameTemplate . \"_after_update\")\ + ;\r\ + \n\r\ + \n## Email body template\r\ + \n:local mailSubjectPrefix \"\$SMP Device - `\$IdentityShort`\";\r\ + \n:local mailBodyCopyright \"Mikrotik RouterOS automatic backup & update \ + (ver. \$scriptVersion) \\n\$copyrightUrl\";\r\ + \n:local changelogUrl \"Check RouterOS changelog: https://mikrotik.com\ + /download/changelogs/\";\r\ + \n:local mailBodyDeviceInfo \"\";\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"Device information:\")\ + ;\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\n-------------------\ + --\");\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nName: \$Identity\")\ + ;\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nModel: \$devModel\"\ + );\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nBoard: \$devBoardNa\ + me\");\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nSerial number: \$de\ + vRbSerialNumber\");\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nRouterOS version: v\ + \$deviceOsVerAndChannelRunning\");\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nBuild time: \$[/sys\ + tem/resource/get build-time]\");\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nRouterboard FW Avai\ + lable: \$ROsVerAvail\");\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nDevice date-time: \ + \$rawDate \$rawTime (\$[/system/clock/get time-zone-name ])\");\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nUptime: \$[/system/\ + resource/get uptime]\");\r\ + \n## IP address detection\r\ + \n:if ([ \$DevInfoIncludeIP ] = true) do={\r\ + \n :global GetPubIp;\r\ + \n :local PublicIpAddress [ \$GetPubIp ];\r\ + \n :set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nPublic IP address\ + : \" . \$PublicIpAddress . \".\");\r\ + \n :log info \"\$SMP Public IP address detected: \$PublicIpAddress\";\r\ + \n} \r\ + \n\r\ + \n:local mailAttachments [:toarray \"\"];\r\ + \n:if (\$scriptStep = 1 or \$scriptStep = 3) do={\r\ + \n :if (\$scriptStep = 3) do={\r\ + \n :log info (\"\$SMP Waiting for one minute before continuing to the f\ + inal step.\");\r\ + \n :delay 1m;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n## STEP 1: Create backups, check for new RouterOS, and send email\r\ + \n## Steps 2\C3\A23 run only if auto-update is enabled and a new version i\ + s available\r\ + \n:if (\$scriptStep = 1) do={\r\ + \n :global BackupPassword;\r\ + \n :global BackupSens;\r\ + \n :local isNewOsUpdateAvailable false;\r\ + \n :local isLatestOsAlreadyInstalled true;\r\ + \n :local isOsNeedsToBeUpdated false;\r\ + \n :local isUpdateCheckSucceeded false;\r\ + \n :local isEmailNeedsToBeSent false;\r\ + \n :local mailSubjectPartAction \"\";\r\ + \n :local mailPtBodyAction \"\";\r\ + \n :local mailPtSubjectBackup \"\";\r\ + \n :local mailPtBodyBackup \"\";\r\ + \n # Checking for new version\r\ + \n :if (\$BackupAndUpdateMode = \"osupdate\" or \$BackupAndUpdateMode = \ + \"osnotify\" or \$BackupAndUpdateMode = \"updateOnce\") do={\r\ + \n :log info (\"\$SMP Setting update channel to `\$updateChannel`\");\r\ + \n /system/package/update/set channel=\$updateChannel;\r\ + \n :log info (\"\$SMP Checking for new RouterOS version. Current instal\ + led version is: `\$runningVersion`\");\r\ + \n \$LogPrint debug \$ScriptName (\"Checking for updates...\");\r\ + \n \r\ + \n# /system/package/update/check-for-updates without-paging as-value;\ + \r\ + \n# /system/package/update check-for-updates;\r\ + \n :delay 5s;\r\ + \n :set PkgUpdStatus [ /system/package/update/get status ];\r\ + \n :if (\$PkgUpdStatus = \"New version is available\") do={\r\ + \n :set ROsVerAvail [/system/package/update/get latest-version];\r\ + \n }\r\ + \n\r\ + \n :if (\$PkgUpdStatus = \"New version is available\") do={\r\ + \n :log info (\"\$SMP New RouterOS version is available: `\$ROsVerAva\ + il`\");\r\ + \n :set isNewOsUpdateAvailable true;\r\ + \n :set isLatestOsAlreadyInstalled false;\r\ + \n :set isUpdateCheckSucceeded true;\r\ + \n :set isEmailNeedsToBeSent true;\r\ + \n :set mailSubjectPartAction \"New RouterOS available\";\r\ + \n :set mailPtBodyAction \"New RouterOS version is available, curren\ + t version: v\$runningVersion, new version: v\$ROsVerAvail. \\n\$changelogU\ + rl\";\r\ + \n } else={\r\ + \n :if (\$PkgUpdStatus = \"System is already up to date\") do={\r\ + \n :log info (\"\$SMP No new RouterOS version is available, the lat\ + est version is already installed: `v\$runningVersion`\");\r\ + \n :set isUpdateCheckSucceeded true;\r\ + \n :set mailSubjectPartAction \"No os update available\";\r\ + \n :set mailPtBodyAction \"No new RouterOS version is available, t\ + he latest version is already installed: `v\$runningVersion`\";\r\ + \n } else={\r\ + \n :log error (\"\$SMP Failed to check for new RouterOS version. Pa\ + ckage check status: `\$PkgUpdStatus`\");\r\ + \n :set isEmailNeedsToBeSent true;\r\ + \n :set mailSubjectPartAction \"Error unable to check new os versio\ + n\";\r\ + \n :set mailPtBodyAction \"An error occurred while checking for a \ + new RouterOS version.\\nStatus returned: `\$PkgUpdStatus`\\n\\nPlease revi\ + ew the logs on the device for more details and verify internet connectivit\ + y.\";\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n # Checking if the script needs to install new os version\r\ + \n :if ((\$BackupAndUpdateMode = \"osupdate\" or \$BackupAndUpdateMode = \ + \"updateOnce\") and \$isNewOsUpdateAvailable = true) do={\r\ + \n :if (\$installOnlyPatchUpdates = true) do={\r\ + \n :if ([\$FuncIsPatchUpdateOnly \$runningVersion \$ROsVerAvail] = tr\ + ue) do={\r\ + \n :log info \"\$SMP New RouterOS version is available, and it is a\ + \_patch update. Current version: v\$runningVersion, new version: v\$ROsVer\ + Avail\";\r\ + \n :set isOsNeedsToBeUpdated true;\r\ + \n } else={\r\ + \n :log info \"\$SMP The script will not install this update, becau\ + se it is not a patch update. Current version: v\$runningVersion, new versi\ + on: v\$ROsVerAvail\";\r\ + \n :set mailPtBodyAction (\$mailPtBodyAction . \"\\nThis update wil\ + l not be installed, because the script is set to install only patch update\ + s.\");\r\ + \n }\r\ + \n } else={\r\ + \n :set isOsNeedsToBeUpdated true;\r\ + \n }\r\ + \n }\r\ + \n # Checking If the script needs to create a backup\r\ + \n :if (\$forceBackup = true or \$BackupAndUpdateMode = \"backup\" or \$i\ + sOsNeedsToBeUpdated = true) do={\r\ + \n :log info (\"\$SMP Starting backup process.\");\r\ + \n :set isEmailNeedsToBeSent true;\r\ + \n :local backupName \$backupNameTemplate;\r\ + \n # This means it's the first step where we create a backup before the\ + \_update process\r\ + \n :if (\$isOsNeedsToBeUpdated = true) do={\r\ + \n :set backupName \$backupNameBeforeUpdate;\r\ + \n #Email body if the purpose of the script is to update the device\r\ + \n :set mailSubjectPartAction \"Update preparation\";\r\ + \n :set mailPtBodyAction (\$mailPtBodyAction . \"\\nThe update proces\ + s for device '\$Identity' is scheduled to upgrade RouterOS from version v.\ + \$runningVersion to version v.\$ROsVerAvail (Update channel: \$updateChann\ + el)\");\r\ + \n :set mailPtBodyAction (\$mailPtBodyAction . \"\\nPlease note: The \ + update will proceed only after a successful backup.\");\r\ + \n :set mailPtBodyAction (\$mailPtBodyAction . \"\\nA final report wi\ + th detailed information will be sent once the update process is completed.\ + \");\r\ + \n :set mailPtBodyAction (\$mailPtBodyAction . \"\\nIf you do not rec\ + eive a second email within the next 10 minutes, there may be an issue. Ple\ + ase check your device logs for further information.\");\r\ + \n }\r\ + \n :do {\r\ + \n :set mailAttachments [\$FuncCreateBackups \$backupName \$BackupPas\ + sword \$BackupSens];\r\ + \n :set mailPtSubjectBackup \"Backup created\";\r\ + \n :set mailPtBodyBackup \"System backups have been successfully crea\ + ted and attached to this email.\";\r\ + \n } on-error={\r\ + \n :set isOsNeedsToBeUpdated false;\r\ + \n :set mailPtSubjectBackup \"Backup failed\";\r\ + \n :set mailPtBodyBackup \"The script failed to create backups. Pleas\ + e check device logs for more details.\";\r\ + \n :log warning \"\$SMP Backup creation failed. Update process will b\ + e canceled if automatic update is enabled\";\r\ + \n }\r\ + \n }\r\ + \n :if (\$isEmailNeedsToBeSent = true) do={\r\ + \n :log info \"\$SMP Preparing to send email...\";\r\ + \n :local mailStep1Subject \$mailSubjectPrefix;\r\ + \n :local mailStep1Body \"\";\r\ + \n # subject\r\ + \n :if (\$mailSubjectPartAction != \"\") do={:set mailStep1Subject (\$\ + mailStep1Subject . \" - \" . \$mailSubjectPartAction)}\r\ + \n :if (\$mailPtSubjectBackup != \"\") do={:set mailStep1Subject (\$ma\ + ilStep1Subject . \" - \" . \$mailPtSubjectBackup)}\r\ + \n # body\r\ + \n :if (\$mailPtBodyAction != \"\") do={:set mailStep1Body (\$mailStep1\ + Body . \$mailPtBodyAction . \"\\n\\n\")}\r\ + \n :if (\$mailPtBodyBackup != \"\") do={:set mailStep1Body (\$mailStep1\ + Body . \$mailPtBodyBackup . \"\\n\\n\")}\r\ + \n :set mailStep1Body (\$mailStep1Body . \$mailBodyDeviceInfo . \"\\n__\ + ________\\n\" . \$mailBodyCopyright);\r\ + \n # Send email with backups\r\ + \n :do {\$FuncSendEmailSafe \$EmailGeneralTo \$mailStep1Subject \$mailS\ + tep1Body \$mailAttachments} on-error={\r\ + \n :set isOsNeedsToBeUpdated false;\r\ + \n :log error \"\$SMP The script will not proceed with the update pro\ + cess, because the email was not sent.\";\r\ + \n }\r\ + \n }\r\ + \n :if ([:len \$mailAttachments] > 0) do={\r\ + \n :log info \"\$SMP Cleaning up backup files from the file system...\"\ + ;\r\ + \n /file remove \$mailAttachments;\r\ + \n :delay 2s;\r\ + \n }\r\ + \n :if (\$isOsNeedsToBeUpdated = true) do={\r\ + \n :global OldMode;\r\ + \n :log info \"\$SMP everything is ready to install new RouterOS, going\ + \_to start the update process and reboot the device.\";\r\ + \n :do {\r\ + \n :local nextStep 2;\r\ + \n :if (\$isCloudHostedRouter = true) do={\r\ + \n :log info \"\$SMP The device is a cloud hosted router, the secon\ + d step updating the Routerboard firmware will be skipped.\";\r\ + \n :set nextStep 3;\r\ + \n }\r\ + \n :local scheduledCommand (\":delay 5s; /system/scheduler remove BKP\ + UPD-NEXT-BOOT-TASK; \\\r\ + \n :global buGlobalVarScriptStep \$nextStep; :global buGlobalVarTarg\ + etOsVersion \\\"\$ROsVerAvail\\\"; \\\r\ + \n :delay 10s; /system/script { run \$ScriptName; }\");\r\ + \n /system/scheduler add name=BKPUPD-NEXT-BOOT-TASK on-event=\$schedu\ + ledCommand start-time=startup interval=0;\r\ + \n /system/package/update install;\r\ + \n } on-error={\r\ + \n # Failed to install new os version, remove the task and variables\ + \r\ + \n :do {\r\ + \n /system/scheduler remove BKPUPD-NEXT-BOOT-TASK;\r\ + \n :set BackupAndUpdateMode \$OldMode;\r\ + \n :delay 2;\r\ + \n :do {\r\ + \n :global buGlobalVarTargetOsVersion (a);\r\ + \n } on-error={\r\ + \n :set \$mailSubjectPrefix (\$mailSubjectPrefix . \"ERROR Remove\ + \_global variable \\\$buGlobalVarTargetOsVersion failed!\");\r\ + \n }\r\ + \n# :if ([ :len \$OldMode ] > 0) do={\r\ + \n# :do {\r\ + \n# :global OldMode (a);\r\ + \n# } on-error={\r\ + \n# :set \$mailSubjectPrefix (\$mailSubjectPrefix . \" ERROR Re\ + move global variable \\\$OldMode failed!\");\r\ + \n# }\r\ + \n# }\r\ + \n } on-error={\r\ + \n :log error \"\$SMP Failed to install new RouterOS version. Pleas\ + e check device logs for more details. \\\r\ + \n \\nAnd Failed to remove task and variables! Check it!\";\r\ + \n :set \$mailSubjectPrefix (\$mailSubjectPrefix . \" ERROR Remove \ + task and global variables!\");\r\ + \n }\r\ + \n :log error \"\$SMP Failed to install new RouterOS version. Please \ + check device logs for more details.\";\r\ + \n :local mailUpdateErrorSubject (\$mailSubjectPrefix . \" - Update f\ + ailed\");\r\ + \n :local mailUpdateErrorBody \"The script was unable to install new \ + RouterOS version. Please check device logs for more details.\";\r\ + \n # Send email with error\r\ + \n \$FuncSendEmailSafe \$EmailGeneralTo \$mailUpdateErrorSubject \$ma\ + ilUpdateErrorBody \"\";\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n## STEP 2: (Post-reboot) Upgrade RouterBOARD firmware\r\ + \n## Runs only if auto-update is enabled and a new RouterOS version was fo\ + und\r\ + \n:if (\$scriptStep = 2) do={\r\ + \n :log info \"\$SMP The script is in the second step, updating Routerboa\ + rd firmware.\";\r\ + \n :log info \"\$SMP Upgrading routerboard firmware from v.\$deviceRbCurr\ + entFw to v.\$deviceRbUpgradeFw\";\r\ + \n /system routerboard upgrade;\r\ + \n :delay 2;\r\ + \n :log info \"\$SMP routerboard upgrade process was completed, going to \ + reboot in a moment!\";\r\ + \n ## Set task to send final report on the next boot\r\ + \n /system scheduler add name=BKPUPD-NEXT-BOOT-TASK on-event=\":delay 2; \ + :global buGlobalVarScriptStep 3; \\\r\ + \n :global buGlobalVarTargetOsVersion \\\"\$buGlobalVarTargetOsVersion\\\ + \"; :delay 10s; /system/script { run \$ScriptName; }; \\ \r\ + \n :delay 5s; /system/scheduler remove BKPUPD-NEXT-BOOT-TASK;\" start-ti\ + me=startup interval=0;\r\ + \n :delay 2;\r\ + \n /system reboot;\r\ + \n}\r\ + \n\r\ + \n## STEP 3: Final report (after second reboot, with delay).\r\ + \n## Runs only if auto-update is enabled and a new RouterOS version was fo\ + und.\r\ + \n:if (\$scriptStep = 3) do={\r\ + \n :log info (\"\$SMP The script is in the third step, sending final repo\ + rt.\");\r\ + \n :local targetOsVersion \$buGlobalVarTargetOsVersion;\r\ + \n :do {\r\ + \n# /system/script/environment remove [find name=\"buGlobalVarTargetOsV\ + ersion\"];\r\ + \n :global buGlobalVarTargetOsVersion (a);\r\ + \n } on-error={\r\ + \n :set \$mailSubjectPrefix (\$mailSubjectPrefix . \" ERROR Remove glob\ + al variable \\\$buGlobalVarTargetOsVersion failed!\");\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$OldMode ] != 0) do={\r\ + \n :do {\r\ + \n# /system/script/environment remove [find name=\"OldMode\"];\r\ + \n :global OldMode (a);\r\ + \n } on-error={\r\ + \n :set \$mailSubjectPrefix (\$mailSubjectPrefix . \" ERROR! Remove\ + \_global variable \\\$OldMode failed!\");\r\ + \n }\r\ + \n }\r\ + \n :if ([:len \$targetOsVersion] = 0) do={\r\ + \n :log warning \"\$SMP Something is wrong, the script was unable to ge\ + t the target updated OS version from the global variable.\";\r\ + \n }\r\ + \n :local mailStep3Subject \$mailSubjectPrefix;\r\ + \n :local mailStep3Body \"\";\r\ + \n :if (\$targetOsVersion = \$runningVersion) do={\r\ + \n :log info \"\$SMP Successfully verified new RouterOS version: target\ + : `\$targetOsVersion`, current: `\$runningVersion`\";\r\ + \n :set mailStep3Subject (\$mailStep3Subject . \" - Update completed - \ + Backup created\");\r\ + \n :set mailStep3Body (\$mailStep3Body . \"RouterOS and routerboard upg\ + rade process was completed\");\r\ + \n :set mailStep3Body (\$mailStep3Body . \"\\nNew RouterOS version: v.\ + \$targetOsVersion, routerboard firmware: v.\$deviceRbCurrentFw\");\r\ + \n :set mailStep3Body (\$mailStep3Body . \"\\n\$changelogUrl\\nBackups \ + of the upgraded system are in the attachment of this email.\\n\\n\$mailBod\ + yDeviceInfo\\n\\n\$mailBodyCopyright\");\r\ + \n :set mailAttachments [\$FuncCreateBackups \$backupNameAfterUpdate \$\ + BackupPassword \$BackupSens];\r\ + \n } else={\r\ + \n :log error \"\$SMP Failed to verify new RouterOS version: target: `\ + \$targetOsVersion`, current: `\$runningVersion`\";\r\ + \n :set mailStep3Subject (\$mailStep3Subject . \" - Update failed\");\r\ + \n :set mailStep3Body (\$mailStep3Body . \"The script was unable to ver\ + ify that the new RouterOS version was installed, target version: `\$target\ + OsVersion`, current version: `\$runningVersion`\\nCheck device logs for mo\ + re details.\\n\\n\$mailBodyDeviceInfo\\n\\n\$mailBodyCopyright\");\r\ + \n }\r\ + \n \$FuncSendEmailSafe \$EmailGeneralTo \$mailStep3Subject \$mailStep3Bod\ + y \$mailAttachments;\r\ + \n :if ([:len \$mailAttachments] > 0) do={\r\ + \n :log info \"\$SMP Cleaning up backup files from the file system...\"\ + ;\r\ + \n /file remove \$mailAttachments;\r\ + \n :delay 2;\r\ + \n }\r\ + \n :log info (\"\$SMP Final report email sent successfully, and the scrip\ + t has finished.\");\r\ + \n}\r\ + \n:log info (\"\$SMP the script has finished, script step: `\$scriptStep` \ + \\n\\n\");\r\ + \n\r\ + \n} do={:global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err}\r\ + \n" +/user group +add name=backup policy="telnet,ssh,ftp,read,write,policy,test,sniff,sensitive,\ + !local,!reboot,!winbox,!password,!web,!api,!romon,!rest-api" +/caps-man provisioning +add action=create-dynamic-enabled hw-supported-modes=gn master-configuration=\ + cfg-2ghz name-format=prefix-identity name-prefix=2ghz +add action=create-dynamic-enabled hw-supported-modes=ac master-configuration=\ + cfg-5ghz-ac name-format=prefix-identity name-prefix=5ghz-ac +add action=create-dynamic-enabled hw-supported-modes=an master-configuration=\ + cfg-5ghz-an name-format=prefix-identity name-prefix=5ghz-an +/certificate settings +set builtin-trust-store=fetch +/disk settings +set auto-media-interface=lo default-mount-point-template=usb1 +/ip smb +set comment=MikroVados domain=WORKGROUP enabled=yes interfaces=Bridge-LAN +/interface bridge port +add bridge=Bridge-LAN ingress-filtering=no interface=ether2 \ + internal-path-cost=10 path-cost=10 +add bridge=Bridge-LAN comment=LEN ingress-filtering=no interface=ether3 \ + internal-path-cost=10 path-cost=10 +add bridge=Bridge-LAN comment=NUC ingress-filtering=no interface=ether4 \ + internal-path-cost=10 path-cost=10 +add bridge=Bridge-LAN ingress-filtering=no interface=ether5 \ + internal-path-cost=10 path-cost=10 +/ip firewall connection tracking +set udp-timeout=10s +/ip neighbor discovery-settings +set discover-interface-list=LAN +/ip settings +set max-neighbor-entries=8192 secure-redirects=no +/ipv6 settings +set disable-ipv6=yes max-neighbor-entries=8192 +/interface detect-internet +set detect-interface-list=WAN internet-interface-list=WAN lan-interface-list=\ + LAN wan-interface-list=WAN +/interface l2tp-server server +set authentication=mschap2 use-ipsec=yes +/interface list member +add comment=WAN interface="ether1 - Unet" list=WAN +add interface=Bridge-LAN list=LAN +/interface ovpn-server server +add auth=sha1,md5 mac-address=FE:82:A5:78:8E:84 name=ovpn-server1 +/interface wifi cap +set caps-man-addresses=10.30.30.10 certificate=request discovery-interfaces=\ + wlan1,wlan2 lock-to-caps-man=no slaves-static=no +/interface wifi capsman +set package-path="" require-peer-certificate=no upgrade-policy=none +/interface wifi provisioning +add action=create-dynamic-enabled disabled=no master-configuration=2G-N \ + name-format=2G-%I slave-configurations=2G-G supported-bands=\ + 2ghz-n,2ghz-g,2ghz-g +add action=create-dynamic-enabled disabled=no master-configuration=5G-AC \ + name-format=5G-%I supported-bands=5ghz-ac,5ghz-ac +/interface wireguard peers +add allowed-address=10.8.0.2/32,0.0.0.0/0 client-allowed-address=0.0.0.0/0 \ + endpoint-address=89.110.101.17 endpoint-port=29185 interface=WG name=\ + MikroVados persistent-keepalive=10s public-key=\ + "64Y25EUZQQt8EIeAJYD8qWt+te8qvGEepnswdBgmzlY=" +/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 +/interface wireless sniffer +set file-name=24g +/ip address +add address=10.30.30.81/24 interface=Bridge-LAN network=10.30.30.0 +add address=10.8.0.2/24 interface=WG network=10.8.0.0 +/ip dhcp-client +add add-default-route=special-classless default-route-distance=2 \ + default-route-tables=main interface="ether1 - Unet" name="ether1 - Unet" \ + use-peer-dns=no +/ip dhcp-server config +set accounting=no +/ip dhcp-server lease +add address=10.30.30.101 client-id=1:48:8f:5a:8e:ee:a8 mac-address=\ + 48:8F:5A:8E:EE:A8 server=masterDHCP +add address=10.30.30.107 client-id=1:f0:de:f1:91:d:1e mac-address=\ + F0:DE:F1:91:0D:1E server=masterDHCP +add address=10.30.30.83 client-id=1:0:80:77:ec:43:86 mac-address=\ + 00:80:77:EC:43:86 server=masterDHCP +add address=10.30.30.70 dhcp-option=domain-search-list,HostName \ + dhcp-option-set=HP1505n mac-address=00:1E:0B:1A:88:8D server=masterDHCP +add address=10.30.30.50 client-id=1:4:7c:16:36:f5:37 mac-address=\ + 04:7C:16:36:F5:37 server=masterDHCP +add address=10.30.30.71 client-id=1:10:2d:41:2c:20:c2 mac-address=\ + 10:2D:41:2C:20:C2 server=masterDHCP +add address=10.30.30.61 client-id=1:10:8:c1:81:59:5f mac-address=\ + 10:08:C1:81:59:5F server=masterDHCP +add address=10.30.30.72 client-id=1:10:38:1f:d2:5f:13 mac-address=\ + 10:38:1F:D2:5F:13 server=masterDHCP +add address=10.30.30.99 client-id=1:10:b1:df:e9:d0:d5 mac-address=\ + 10:B1:DF:E9:D0:D5 server=masterDHCP +add address=10.30.30.111 client-id=1:fe:2:52:be:3f:16 mac-address=\ + FE:02:52:BE:3F:16 server=masterDHCP +add address=10.30.30.93 client-id=1:7e:8b:1e:cb:b8:cb mac-address=\ + CC:42:10:12:46:94 server=masterDHCP +add address=10.30.30.94 client-id=1:50:cc:f8:85:96:a mac-address=\ + 50:CC:F8:85:96:0A server=masterDHCP +add address=10.30.30.82 client-id=1:e4:18:6b:58:34:ab mac-address=\ + E4:18:6B:58:34:AB server=masterDHCP +add address=10.30.30.77 dhcp-option=HostName dhcp-option-set=StartLife1 \ + mac-address=C4:82:E1:03:49:10 server=masterDHCP +add address=10.30.30.73 client-id=1:10:38:1f:82:81:f2 mac-address=\ + 10:38:1F:82:81:F2 server=masterDHCP +add address=10.30.30.95 client-id=1:88:ae:dd:60:39:54 dhcp-option=HostName \ + dhcp-option-set=VADOS-NUC mac-address=88:AE:DD:60:39:54 server=masterDHCP +add address=10.30.30.98 client-id=1:c8:5b:76:d8:cc:bf dhcp-option=HostName \ + dhcp-option-set=VADOS-LEN mac-address=C8:5B:76:D8:CC:BF server=masterDHCP +add address=10.30.30.96 client-id=iPhone mac-address=4A:91:ED:0E:1F:39 \ + server=masterDHCP +add address=10.30.30.74 client-id=1:20:72:a9:d3:34:36 dhcp-option=HostName \ + dhcp-option-set=MiTV mac-address=20:72:A9:D3:34:36 server=masterDHCP \ + use-src-mac=yes +add address=10.30.30.30 dhcp-option=HostName dhcp-option-set=miller \ + mac-address=F0:75:5D:1E:5F:71 server=masterDHCP +add address=10.30.30.100 client-id=iVados dhcp-option=HostName \ + dhcp-option-set="=\"Client ID\"" mac-address=DE:4D:72:F3:1A:9F server=\ + masterDHCP +add address=10.30.30.86 dhcp-option=HostName dhcp-option-set=MikroYellow \ + mac-address=48:8F:5A:8E:1A:C2 server=masterDHCP +/ip dhcp-server network +add address=10.30.30.0/24 caps-manager=10.30.30.10 dhcp-option=\ + domain-search-list,HostName dhcp-option-set=domain-search-set dns-server=\ + 10.30.30.81 domain=WORKGROUP gateway=10.30.30.81 netmask=24 ntp-server=\ + 10.30.30.81,10.30.30.10 wins-server=10.30.30.95,10.30.30.98 +/ip dns +set allow-remote-requests=yes cache-max-ttl=1d doh-max-concurrent-queries=100 \ + doh-max-server-connections=20 servers=8.8.8.8,8.8.4.4 verify-doh-cert=yes +/ip dns static +add address=10.30.30.33 name=amster-nuc type=A +add address=10.30.30.33 comment=AMSTER name=amster.vados.ru type=A +add address=10.30.30.33 name=amster type=A +add address=10.30.30.33 name=amster-reg type=A +add address=10.30.30.33 name=mng.vados.ru type=A +add address=10.30.30.33 name=mgr.vados.ru type=A +add address=10.30.30.33 name=prt.vados.ru type=A +add address=10.30.30.33 name=git.vados.ru type=A +add address=10.30.30.33 name=reg.vados.ru type=A +add address=10.30.30.33 match-subdomain=yes name=ros.vados.ru type=A +add address=10.30.30.33 match-subdomain=yes name=mikrots.vados.ru type=A +add address=10.30.30.33 name=oxidized.vados.ru type=A +add address=8.8.4.4 comment="Google-dns IPv4 2" name=dns.google type=A +add address=8.8.8.8 comment="Google-dns IPv4 1" name=dns.google type=A +add address=10.30.30.30 comment=MILLER name=miller.vados.ru type=A +add address=10.30.30.30 name=MILLER-LEN type=A +add address=10.30.30.30 name=miller type=A +add address=1.1.1.1 comment="CloudFlare-doh IPv4 1" name=\ + security.cloudflare-dns.com type=A +add address=1.0.0.1 comment="CloudFlare-doh IPv4 2" name=\ + security.cloudflare-dns.com type=A +add address=9.9.9.9 comment="Cuad9-dns IPv4 1" disabled=yes name=\ + dns.quad9.net type=A +add address=149.112.112.112 comment="Cuad9-dns IPv4 2" disabled=yes name=\ + dns.quad9.net type=A +add address=91.192.189.2 comment=Unet-DNS disabled=yes name=ns1.unet.ws type=\ + A +add address=10.30.30.81 comment=LocalNet name=MikroVados type=A +add address=10.30.30.10 name=MikroNUC type=A +add address=10.30.30.86 name=MikroYellow type=A +add address=10.30.30.85 name=MikroMic type=A +add address=10.30.30.95 name=VADOS-NUC type=A +add address=10.30.30.98 name=VADOS-LEN type=A +add address=10.30.30.20 name=garage type=A +add address=2606:4700:4700::1111 disabled=yes name=\ + security.cloudflare-dns.com type=AAAA +add address=2606:4700:4700::1001 disabled=yes name=\ + security.cloudflare-dns.com type=AAAA +/ip firewall address-list +add address=91.215.120.206 list=TRUSTED +add address=185.71.70.78 disabled=yes list=TRUSTED +add address=176.53.203.171 disabled=yes list=TRUSTED +add address=176.53.203.170 disabled=yes list=TRUSTED +add address=176.53.202.194 disabled=yes list=TRUSTED +add address=10.30.30.100-255 list=KIDS +add address=8.8.4.0/24 list=YouTube +add address=8.8.8.0/24 list=YouTube +add address=8.34.208.0/20 list=YouTube +add address=8.35.192.0/20 list=YouTube +add address=23.236.48.0/20 list=YouTube +add address=23.251.128.0/19 list=YouTube +add address=34.0.0.0/15 list=YouTube +add address=34.2.0.0/16 list=YouTube +add address=34.3.0.0/23 list=YouTube +add address=34.3.3.0/24 list=YouTube +add address=34.3.4.0/24 list=YouTube +add address=34.3.8.0/21 list=YouTube +add address=34.3.16.0/20 list=YouTube +add address=34.3.32.0/19 list=YouTube +add address=34.3.64.0/18 list=YouTube +add address=34.4.0.0/14 list=YouTube +add address=34.8.0.0/13 list=YouTube +add address=34.16.0.0/12 list=YouTube +add address=34.32.0.0/11 list=YouTube +add address=34.64.0.0/10 list=YouTube +add address=34.128.0.0/10 list=YouTube +add address=35.184.0.0/13 list=YouTube +add address=35.192.0.0/14 list=YouTube +add address=35.196.0.0/15 list=YouTube +add address=35.198.0.0/16 list=YouTube +add address=35.199.0.0/17 list=YouTube +add address=35.199.128.0/18 list=YouTube +add address=35.200.0.0/13 list=YouTube +add address=35.208.0.0/12 list=YouTube +add address=35.224.0.0/12 list=YouTube +add address=35.240.0.0/13 list=YouTube +add address=57.140.192.0/18 list=YouTube +add address=64.15.112.0/20 list=YouTube +add address=64.233.160.0/19 list=YouTube +add address=66.22.228.0/23 list=YouTube +add address=66.102.0.0/20 list=YouTube +add address=66.249.64.0/19 list=YouTube +add address=70.32.128.0/19 list=YouTube +add address=72.14.192.0/18 list=YouTube +add address=74.125.0.0/16 list=YouTube +add address=104.154.0.0/15 list=YouTube +add address=104.196.0.0/14 list=YouTube +add address=104.237.160.0/19 list=YouTube +add address=107.167.160.0/19 list=YouTube +add address=107.178.192.0/18 list=YouTube +add address=108.59.80.0/20 list=YouTube +add address=108.170.192.0/18 list=YouTube +add address=108.177.0.0/17 list=YouTube +add address=130.211.0.0/16 list=YouTube +add address=136.22.160.0/20 list=YouTube +add address=136.22.176.0/21 list=YouTube +add address=136.22.184.0/23 list=YouTube +add address=136.22.186.0/24 list=YouTube +add address=142.250.0.0/15 list=YouTube +add address=146.148.0.0/17 list=YouTube +add address=152.65.208.0/22 list=YouTube +add address=152.65.214.0/23 list=YouTube +add address=152.65.218.0/23 list=YouTube +add address=152.65.222.0/23 list=YouTube +add address=152.65.224.0/19 list=YouTube +add address=162.120.128.0/17 list=YouTube +add address=162.216.148.0/22 list=YouTube +add address=162.222.176.0/21 list=YouTube +add address=172.110.32.0/21 list=YouTube +add address=172.217.0.0/16 list=YouTube +add address=172.253.0.0/16 list=YouTube +add address=173.194.0.0/16 list=YouTube +add address=173.255.112.0/20 list=YouTube +add address=192.158.28.0/22 list=YouTube +add address=192.178.0.0/15 list=YouTube +add address=193.186.4.0/24 list=YouTube +add address=199.36.154.0/23 list=YouTube +add address=199.36.156.0/24 list=YouTube +add address=199.192.112.0/22 list=YouTube +add address=199.223.232.0/21 list=YouTube +add address=207.223.160.0/20 list=YouTube +add address=208.65.152.0/22 list=YouTube +add address=208.68.108.0/22 list=YouTube +add address=208.81.188.0/22 list=YouTube +add address=208.117.224.0/19 list=YouTube +add address=209.85.128.0/17 list=YouTube +add address=216.58.192.0/19 list=YouTube +add address=216.73.80.0/20 list=YouTube +add address=216.239.32.0/19 list=YouTube +add address=2ip.ru list=Test +add address=157.240.247.174 list=Instagram +add address=46.53.178.107 list=Instagram +add address=179.60.195.174 list=Instagram +add address=157.240.205.174 list=Instagram +add address=31.13.24.0/21 list=Instagram +add address=31.13.64.0/18 list=Instagram +add address=45.64.40.0/22 list=Instagram +add address=66.220.144.0/20 list=Instagram +add address=69.63.176.0/20 list=Instagram +add address=69.171.224.0/19 list=Instagram +add address=74.119.76.0/22 list=Instagram +add address=103.4.96.0/22 list=Instagram +add address=129.134.0.0/16 list=Instagram +add address=157.240.0.0/16 list=Instagram +add address=173.252.64.0/18 list=Instagram +add address=179.60.192.0/22 list=Instagram +add address=185.60.216.0/22 list=Instagram +add address=204.15.20.0/22 list=Instagram +add address=157.240.200.63 list=Instagram +add address=185.60.219.63 list=Instagram +add address=129.134.31.12 list=Instagram +add address=66.81.203.132 list=Instagram +add address=185.89.218.12 list=Instagram +add address=31.13.66.63 list=Instagram +add address=84.15.65.162 list=Instagram +add address=68.66.224.28 list=Instagram +add address=157.240.253.63 list=Instagram +add address=83.174.11.224 list=Instagram +add address=157.240.9.52 list=Instagram +add address=157.240.252.174 list=Instagram +add address=157.240.195.63 list=Instagram +add address=31.13.71.52 list=Instagram +add address=57.144.110.192 list=Instagram +add address=157.240.252.17 list=Instagram +add address=84.15.66.97 list=Instagram +add address=217.168.6.33 list=Instagram +add address=31.13.83.52 list=Instagram +add address=157.240.241.63 list=Instagram +add address=129.134.30.12 list=Instagram +add address=185.89.219.12 list=Instagram +add address=157.240.252.10 list=Instagram +add address=157.240.201.63 list=Instagram +add address=66.81.203.197 list=Instagram +add address=179.60.195.52 list=Instagram +add address=66.81.203.7 list=Instagram +add address=216.40.34.41 list=Instagram +add address=157.240.202.63 list=Instagram +add address=157.240.229.63 list=Instagram +add address=157.240.252.63 list=Instagram +add address=31.13.72.53 list=Instagram +add address=124.108.16.224 list=Instagram +add address=157.240.205.63 list=Instagram +add address=92.46.37.96 list=Instagram +add address=157.240.247.63 list=Instagram +add address=157.240.234.63 list=Instagram +add address=157.240.235.63 list=Instagram +add address=87.245.208.97 list=Instagram +add address=216.58.192.0/19 list=Instagram +add address=209.85.128.0/17 list=Instagram +add address=198.105.240.0/20 list=Instagram +add address=173.194.0.0/16 list=Instagram +add address=172.217.0.0/16 list=Instagram +add address=142.250.0.0/15 list=Instagram +add address=108.177.0.0/17 list=Instagram +add address=87.245.197.140 list=Instagram +add address=74.125.0.0/16 list=Instagram +add address=64.233.160.0/19 list=Instagram +add address=157.240.0.1 list=Instagram +add address=157.240.238.63 list=Instagram +add address=157.240.238.174 list=Instagram +add address=157.240.0.63 list=Instagram +add address=157.240.224.63 list=Instagram +add address=157.240.224.174 list=Instagram +add address=157.240.251.36 list=Instagram +add address=157.240.253.12 list=Instagram +add address=157.240.253.35 list=Instagram +add address=157.240.238.13 list=Instagram +add address=157.240.238.56 list=Instagram +add address=157.240.238.175 list=Instagram +add address=57.144.112.141 list=Instagram +add address=157.240.251.60 list=Instagram +add address=157.240.251.128 list=Instagram +add address=157.240.238.5 list=Instagram +add address=157.240.253.13 list=Instagram +add address=157.240.253.5 list=Instagram +add address=157.240.238.2 list=Instagram +add address=157.240.238.37 list=Instagram +add address=157.240.251.5 list=Instagram +add address=157.240.251.34 list=Instagram +add address=57.144.112.1 list=Instagram +add address=157.240.238.54 list=Instagram +add address=129.134.26.123 list=Instagram +add address=157.240.252.3 list=Instagram +add address=31.13.84.4 list=Instagram +add address=157.240.224.12 list=Instagram +add address=157.240.238.4 list=Instagram +add address=157.240.0.13 list=Instagram +add address=3.33.139.32 list=Instagram +add address=157.240.0.35 list=Instagram +add address=157.240.238.14 list=Instagram +add address=157.240.238.60 list=Instagram +add address=57.144.112.145 list=Instagram +add address=157.240.251.35 list=Instagram +add address=151.101.84.159 list=Twitter +add address=pbs.twimg.com list=Twitter +add address=89.110.101.17 comment=VDSIna list=TRUSTED +add address=10.8.0.0/24 comment="WG VDSIna" list=TRUSTED +add address=ikus.pesc.ru comment=ikus.pesc.ru list=NoVdsina +add address=love.ru comment=love.ru list=NoVdsina +add address=gosuslugi.ru comment=gosuslugi.ru list=NoVdsina +add address=pochta.ru comment=pochta.ru list=NoVdsina +add address=vdsina.com list=NoVdsina +add address=vdsina.ru list=NoVdsina +add address=youla.ru list=NoVdsina +add address=kupiprodai.ru list=NoVdsina +add address=myip.ru list=Test +add address=geoip.co list=NoVdsina +add address=x.com list=Twitter +add address=facebook.com list=facebook +add address=fbcd.net list=facebook +add address=comp-lenta.ru list=NoVdsina +add address=128.85.102.70 comment=update.microsoft.com list=\ + windowsupdateslist +add address=wu-b-net.trafficmanager.net. comment=\ + ctldl.windowsupdate.com.delivery.microsoft.com list=windowsupdateslist +add address=ctldl.windowsupdate.com.delivery.microsoft.com. comment=\ + ctldl.windowsupdate.com list=windowsupdateslist +add address=redir.update.msft.com.trafficmanager.net. comment=\ + update.microsoft.com list=windowsupdateslist +add address=geo.prod.do.dsp.trafficmanager.net. comment=\ + geo.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=13.74.139.29 comment=array605.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e12437.d.akamaiedge.net. comment=\ + kv801.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=displaycatalog-rp.md.mp.microsoft.com.akadns.net. comment=\ + displaycatalog.mp.microsoft.com list=windowsupdateslist +add address=rp-consumer-prod-displaycatalog-geomap.trafficmanager.net. \ + comment=displaycatalog-rp.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=sls.update.microsoft.com. comment=slscr.update.microsoft.com \ + list=windowsupdateslist +add address=glb.sls.prod.dcat.dsp.trafficmanager.net. comment=\ + sls.update.microsoft.com list=windowsupdateslist +add address=fe3.delivery.mp.microsoft.com. comment=\ + fe3cr.delivery.mp.microsoft.com list=windowsupdateslist +add address=glb.cws.prod.dcat.dsp.trafficmanager.net. comment=\ + fe3.delivery.mp.microsoft.com list=windowsupdateslist +add address=fe2cr.update.msft.com.trafficmanager.net. comment=\ + fe2cr.update.microsoft.com list=windowsupdateslist +add address=download.windowsupdate.com.delivery.microsoft.com. comment=\ + download.windowsupdate.com list=windowsupdateslist +add address=wu-f-net.trafficmanager.net. comment=\ + download.windowsupdate.com.delivery.microsoft.com list=windowsupdateslist +add address=tsfe.trafficmanager.net. comment=\ + tsfe.trafficshaping.dsp.mp.microsoft.com list=windowsupdateslist +add address=edge.ds-c7110-microsoft.global.dns.qwilted-cds.cqloud.com. \ + comment=9.au.download.windowsupdate.com list=windowsupdateslist +add address=52.158.227.125 comment=array812.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=au.download.windowsupdate.com.delivery.microsoft.com. comment=\ + au.download.windowsupdate.com list=windowsupdateslist +add address=a767.dspw65.akamai.net. comment=\ + download.windowsupdate.com.edgesuite.net list=windowsupdateslist +add address=52.151.58.88 comment=array810.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=consumer-licensing-aks2aks.md.mp.microsoft.com.akadns.net. \ + comment=licensing.mp.microsoft.com list=windowsupdateslist +add address=licensing-prod-frontdoor-geomap.trafficmanager.net. comment=\ + consumer-licensing-aks2aks.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=star.f.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.f.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-nlu-net.trafficmanager.net. comment=\ + star.f.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=star.b.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.b.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-tlu-net.trafficmanager.net. comment=\ + star.b.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=storeedgefd.xbetservices.akadns.net. comment=\ + storeedgefd.dsx.mp.microsoft.com list=windowsupdateslist +add address=\ + storeedgefd.dsx.mp.microsoft.com.edgekey.net.globalredir.akadns.net. \ + comment=storeedgefd.dsx.mp.microsoft.com.edgekey.net list=\ + windowsupdateslist +add address=e16646.dscg.akamaiedge.net. comment=\ + storeedgefd.dsx.mp.microsoft.com.edgekey.net.globalredir.akadns.net list=\ + windowsupdateslist +add address=40.69.76.189 comment=array621.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=bg.microsoft.map.fastly.net. comment=\ + 3.au.download.windowsupdate.com list=windowsupdateslist +add list=windowsupdateslist +add address=40.69.75.33 comment=array613.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=star.sf.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedgeextensions.sf.tlu.dl.delivery.mp.microsoft.com list=\ + windowsupdateslist +add address=cdp-f-ssl-tlu-net.trafficmanager.net. comment=\ + star.sf.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a2033.dscd.akamai.net. comment=\ + star.sb.tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=13.74.138.242 comment=array602.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=dl.delivery.mp.microsoft.com.delivery.microsoft.com. comment=\ + dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-f-nlu-net.trafficmanager.net. comment=\ + dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=1d.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=1D.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-b-tlu-net.trafficmanager.net. comment=\ + 1d.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a122.dscg3.akamai.net. comment=\ + tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=windowsupdateslist +add address=geover.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + geover.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e10370.d.akamaiedge.net. comment=\ + geover.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=52.232.182.21 comment=array511.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.70.77.95 comment=array519.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=a1683.dscd.akamai.net. comment=\ + dl.delivery.mp.microsoft.com-c.edgesuite.net list=windowsupdateslist +add address=consumer-collections-aks2eap.md.mp.microsoft.com.akadns.net. \ + comment=collections.mp.microsoft.com list=windowsupdateslist +add address=a1847.dscd.akamai.net. comment=\ + wildcard.f.tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=13.74.142.6 comment=array607.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=au.download.windowsupdate.com.edgesuite.net. comment=\ + 2.au.download.windowsupdate.com list=windowsupdateslist +add address=a767.dscg3.akamai.net. comment=\ + au.download.windowsupdate.com.edgesuite.net list=windowsupdateslist +add address=52.156.123.84 comment=array818.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.78.254 comment=array610.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=4.au.download.windowsupdate.com.delivery.microsoft.com. comment=\ + 4.au.download.windowsupdate.com list=windowsupdateslist +add address=cl-glcb907925.gcdn.co. comment=\ + 4.au.download.windowsupdate.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.111 comment=array510.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.69.70.43 comment=array623.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=tsfe.trafficshaping.dsp.mp.microsoft.com.delivery.microsoft.com. \ + comment=tsfe.trafficshaping.dsp.mp.microsoft.com list=windowsupdateslist +add address=ts-frontend.trafficmanager.net. comment=\ + tsfe.trafficshaping.dsp.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=40.69.75.248 comment=array616.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.74.84 comment=array615.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=sds.trafficmanager.net. comment=software-download.microsoft.com \ + list=windowsupdateslist +add address=40.69.74.80 comment=array611.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.175.242.182 comment=array804.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=dlc-shim.trafficmanager.net. comment=download.microsoft.com list=\ + windowsupdateslist +add address=e12671.dscd.akamaiedge.net. comment=\ + download.microsoft.com.edgekey.net list=windowsupdateslist +add address=20.187.55.34 comment=array808.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.231 comment=array513.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=52.167.222.13 comment=array518.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e12358.d.akamaiedge.net. comment=\ + kv601.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. comment=\ + tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-f-tlu-net.trafficmanager.net. comment=\ + tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a1856.dspw65.akamai.net. comment=\ + tlu.dl.delivery.mp.microsoft.com-c.edgesuite.net list=windowsupdateslist +add address=52.167.164.252 comment=array506.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=13.74.137.54 comment=array601.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv501.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv501.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=collections-prod-frontdoor-geomap.trafficmanager.net. comment=\ + consumer-collections-aks2eap.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=52.167.160.173 comment=array509.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.70.77.148 comment=array516.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.200.126 comment=array507.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=52.167.167.59 comment=array508.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.76.172 comment=array620.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=82.202.162.184 comment=comp-lenta.ru list=NoWG +add address=smtp.mail.me.com.akadns.net. comment=smtp.mail.me.com list=NoWG +add address=17.57.155.37 comment=smtp.mail.me.com.akadns.net list=NoWG +add address=smtp.mail.me.com comment=smtp.mail.me.com list=NoVdsina +add address=40.70.76.5 comment=array514.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.186.119 comment=array618.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.177.176.186 comment=array520.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.70.76.27 comment=array515.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.160.43 comment=array503.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.110 comment=array817.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.142.8 comment=array614.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.138.254 comment=array603.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.96 comment=array501.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.76.215 comment=array622.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.143.200 comment=array606.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.111 comment=array818.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.112 comment=array819.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.137.53 comment=array608.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.98 comment=array805.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.96 comment=array803.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.104 comment=array811.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.101 comment=array808.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.99 comment=array806.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.17 comment=array802.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.97 comment=array804.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.103 comment=array810.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.16 comment=array801.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.70.77.177 comment=array517.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.164.84 comment=array512.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.105 comment=array812.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.107 comment=array814.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.232.161.82 comment=array502.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.108 comment=array815.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.161.91 comment=array505.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.102 comment=array809.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.109 comment=array816.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.106 comment=array813.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.117 comment=array622.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.107 comment=array612.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.108 comment=array613.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.105 comment=array610.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.113 comment=array618.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.116 comment=array621.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.98 comment=array603.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.114 comment=array619.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.111 comment=array616.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.97 comment=array602.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.106 comment=array611.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.110 comment=array615.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.119 comment=array624.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.135 comment=array514.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.97 comment=array503.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.99 comment=array604.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.61 comment=array504.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.131 comment=array510.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.132 comment=array511.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.96 comment=array601.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.104 comment=array609.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.138 comment=array517.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.60 comment=array501.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.139 comment=array518.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.118 comment=array623.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.113 comment=array820.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.103 comment=array608.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.100 comment=array807.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.129 comment=array508.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.134 comment=array513.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.62 comment=array505.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.137 comment=array516.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.101 comment=array606.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.96 comment=array502.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.130 comment=array509.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.112 comment=array617.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.100 comment=array605.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.115 comment=array620.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.136 comment=array515.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=purchase.md.mp.microsoft.com.akadns.net. comment=\ + purchase.mp.microsoft.com list=windowsupdateslist +add address=e110219.a.akamaiedge.net. comment=\ + purchase.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=72.153.5.140 comment=array519.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.141 list=windowsupdateslist +add address=72.153.5.63 comment=array506.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.128 comment=array507.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.102 comment=array607.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=storesdk.xbetservices.akadns.net. comment=\ + storesdk.dsx.mp.microsoft.com list=windowsupdateslist +add address=e16646.g.akamaiedge.net. comment=\ + storesdk.dsx.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=software-download.microsoft.com.delivery.microsoft.com. comment=\ + software-download.microsoft.com list=windowsupdateslist +add address=download.prss.microsoft.com.akamaized.net. comment=\ + software-download.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.109 comment=array614.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.133 comment=array512.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=213.180.192.0/19 comment=YandexDisk list=NoVdsina +add address=87.250.250.50 comment=YandexDisk list=NoVdsina +add address=consumer-prod-bcfd-v7-afd.trafficmanager.net. comment=\ + displaycatalog.mp.microsoft.com list=windowsupdateslist +add address=purchase-europeeap.md.mp.microsoft.com.akadns.net. comment=\ + purchase.md.mp.microsoft.com.akadns.net list=windowsupdateslist +add address=ne-az-conspurchase-mp.trafficmanager.net. comment=\ + purchase-europeeap.md.mp.microsoft.com.akadns.net list=windowsupdateslist +add address=storeedgefd.dsx.mp.microsoft.com.edgekey.net. comment=\ + cdn.storeedgefd.dsx.mp.microsoft.com list=windowsupdateslist +add address=star.f.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.f.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=a1996.dscd.akamai.net. comment=\ + wildcard.f.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=cp801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + cp801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=glb.tas02.sls-prod.dcat.dsp.mp.microsoft.com. comment=\ + tas02.sls.update.microsoft.com list=windowsupdateslist +add address=cp601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + cp601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=star.sb.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedgeextensions.sb.tlu.dl.delivery.mp.microsoft.com list=\ + windowsupdateslist +add address=star.sf.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.sf.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-ssl-nlu-net.trafficmanager.net. comment=\ + star.sf.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=tm-pifd-prod-gbl-weight.trafficmanager.net. comment=\ + paymentinstruments.mp.microsoft.com list=windowsupdateslist +add address=10.30.30.33 comment=amster-nuc disabled=yes list=NoWG +add address=10.30.30.11 comment=MikroNUC list=NoWG +add address=89.110.101.17 comment=!!!VDSINA!!!! list=NoWG +add address=89.110.101.17 list=VPN-Server +add address=80.85.244.9 list=TRUSTED +add address=8.8.8.8 list=TRUSTED +add address=8.8.4.4 list=TRUSTED +add address=disc801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + disc801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=10.30.30.95 comment=NUC list=NoWG +add address=glb.tas02.cws-prod.dcat.dsp.mp.microsoft.com. comment=\ + tas02.cws.update.microsoft.com list=windowsupdateslist +add address=glb.cwsapp.prod.dcat.dsp.trafficmanager.net. comment=\ + glb.tas01.cwsapp-prod.dcat.dsp.mp.microsoft.com list=windowsupdateslist +add address=glb.tas01.cwsapp-prod.dcat.dsp.mp.microsoft.com. comment=\ + tas01.cwsapp.update.microsoft.com list=windowsupdateslist +add address=disc601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + disc601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=api.telegram.org list=Telegram +/ip firewall filter +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=12h chain=input comment="block honeypot DNS" \ + connection-state=new dst-port=53 in-interface="ether1 - Unet" protocol=\ + udp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input connection-state=new dst-port=53 \ + in-interface="ether1 - Unet" protocol=tcp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment=\ + "block honeypot ssh rdp winbox" connection-state=new dst-port=\ + 22,8291,2222 in-interface="ether1 - Unet" protocol=tcp src-address-list=\ + !TRUSTED +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment="block honeypot asterisk" \ + connection-state=new dst-port=5060 in-interface="ether1 - Unet" protocol=\ + udp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=5d chain=input comment="block honeypot NTP" \ + connection-state=new dst-port=123 in-interface="ether1 - Unet" protocol=\ + udp src-address=!10.30.30.0/24 +add action=accept chain=input comment=\ + "accept NTP clients on local area network" dst-port=123 in-interface=\ + Bridge-LAN in-interface-list=LAN protocol=udp +add action=accept chain=input comment="accept WireGuard" dst-port=13231 \ + in-interface="ether1 - Unet" protocol=udp src-address-list=VPN-Server +add action=accept chain=input disabled=yes dst-port=443 in-interface=\ + "ether1 - Unet" protocol=tcp +add action=accept chain=output disabled=yes protocol=tcp src-port=443 +add action=fasttrack-connection chain=forward comment=\ + "FastTrack for non-VPN connections" connection-mark=!VPN_No_FastTrack \ + connection-state=established,related,new disabled=yes +add action=fasttrack-connection chain=forward comment="defconf: fasttrack" \ + connection-state=established,related,new disabled=yes routing-mark=\ + !To-VPN +add action=accept chain=input comment=\ + "defconf: accept established,related,untracked" connection-state=\ + established,related,untracked +add action=drop chain=input comment="defconf: drop invalid" connection-state=\ + invalid +add action=accept chain=input comment="defconf: accept ICMP" disabled=yes \ + protocol=icmp +add action=accept chain=input comment=\ + "defconf: accept to local loopback (for CAPsMAN)" disabled=yes \ + dst-address=127.0.0.1 +add action=accept chain=output disabled=yes src-address=127.0.0.1 +add action=accept chain=forward comment="defconf: accept in ipsec policy" \ + ipsec-policy=in,ipsec +add action=accept chain=forward comment="defconf: accept out ipsec policy" \ + ipsec-policy=out,ipsec +add action=accept chain=forward comment=\ + "defconf: accept established,related, untracked" connection-state=\ + established,related,untracked +add action=drop chain=forward comment="defconf: drop invalid" \ + connection-state=invalid disabled=yes +add action=drop chain=forward comment=\ + "defconf: drop all from WAN not DSTNATed" connection-nat-state=!dstnat \ + connection-state=new in-interface="ether1 - Unet" +add action=accept chain=input connection-state=established disabled=yes +add action=accept chain=input connection-state=related disabled=yes +add action=drop chain=input disabled=yes in-interface-list=!LAN +add action=drop chain=forward comment=\ + "Filter Rule to block FB address LIST : )" disabled=yes dst-address-list=\ + facebook +add action=drop chain=forward comment=\ + "Filter Rule to block YOUTUBE address LIST : )" disabled=yes \ + dst-address-list=YouTube +add action=fasttrack-connection chain=forward comment=\ + "FastTrack main traffic" connection-state=established,related disabled=\ + yes +/ip firewall mangle +add action=mark-connection chain=prerouting comment=\ + "Mark VPN connections to exclude from FastTrack" in-interface=WG \ + log-prefix=Mark-VPN-FT new-connection-mark=VPN_No_FastTrack +add action=mark-routing chain=prerouting comment="Test sites" disabled=yes \ + dst-address=!10.30.30.0/24 dst-address-list=Test new-routing-mark=To-VPN \ + passthrough=no src-address=10.30.30.0/24 +add action=mark-routing chain=prerouting comment=Instagram dst-address=\ + !10.30.30.0/24 dst-address-list=Instagram new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=Twitter dst-address=\ + !10.30.30.0/24 dst-address-list=Twitter new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=YouTube dst-address=\ + !10.30.30.0/24 dst-address-list=YouTube new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=facebook dst-address=\ + !10.30.30.0/24 dst-address-list=facebook new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment="VDSIna for All sites" \ + dst-address=!10.30.30.0/24 dst-address-list=!NoVdsina log-prefix=VPN-all \ + new-routing-mark=To-VPN src-address=10.30.30.0/24 src-address-list=!NoWG +add action=change-mss chain=forward comment="MSS on WG" new-mss=1380 \ + out-interface=WG protocol=tcp tcp-flags=syn tcp-mss=1381-65535 +add action=mark-routing chain=prerouting comment="VPN Network" dst-address=\ + 10.8.0.0/24 dst-address-list=!NoVdsina log=yes log-prefix=VPN-Net \ + new-routing-mark=To-VPN src-address=10.30.30.0/24 src-address-list=!NoWG +/ip firewall nat +add action=redirect chain=dstnat comment=\ + "FORCE DNS TO LOCAL MIKROTIK DNS SERVER" dst-port=53 protocol=tcp \ + src-address=10.30.30.0/24 to-ports=53 +add action=redirect chain=dstnat dst-port=53 protocol=udp src-address=\ + 10.30.30.0/24 to-ports=53 +add action=masquerade chain=srcnat comment="masquerade Default" ipsec-policy=\ + out,none out-interface="ether1 - Unet" routing-mark=!To-VPN +add action=masquerade chain=srcnat comment=WG dst-address-list=!NoVdsina \ + in-interface=Bridge-LAN log-prefix=WG-nat out-interface=WG routing-mark=\ + To-VPN +add action=dst-nat chain=dstnat comment=npm disabled=yes dst-port=81 \ + in-interface="ether1 - Unet" protocol=tcp to-addresses=10.30.30.33 \ + to-ports=81 +add action=dst-nat chain=dstnat comment=amster.vados.ruhttps disabled=yes \ + dst-port=443 in-interface="ether1 - Unet" protocol=tcp to-addresses=\ + 10.30.30.33 to-ports=443 +add action=dst-nat chain=dstnat comment="amster.vados.ru For Certbot HTTP" \ + disabled=yes dst-port=80 in-interface="ether1 - Unet" protocol=tcp \ + to-addresses=10.30.30.33 to-ports=80 +add action=dst-nat chain=dstnat disabled=yes dst-port=80 in-interface=\ + "ether1 - Unet" protocol=tcp to-addresses=10.30.30.33 to-ports=80 +add action=dst-nat chain=dstnat comment="Yandex.DNS Family" disabled=yes \ + dst-port=53 in-interface=Bridge-LAN protocol=udp src-address-list=KIDS \ + time=6h-15m,sun,mon,tue,wed,thu,fri,sat to-addresses=77.88.8.3 +add action=dst-nat chain=dstnat disabled=yes dst-port=53 in-interface=\ + Bridge-LAN protocol=tcp src-address-list=KIDS time=\ + 6h-15m,sun,mon,tue,wed,thu,fri,sat to-addresses=77.88.8.3 +add action=dst-nat chain=dstnat dst-address=146.120.64.211 dst-port=32000 \ + in-interface="ether1 - Unet" protocol=tcp to-addresses=10.30.30.95 \ + to-ports=32000 +add action=dst-nat chain=dstnat dst-address=146.120.64.211 dst-port=32000 \ + in-interface="ether1 - Unet" protocol=udp to-addresses=10.30.30.95 \ + to-ports=32000 +add action=dst-nat chain=dstnat dst-port=32000 protocol=tcp routing-mark=\ + To-VPN to-addresses=10.30.30.95 to-ports=32000 +add action=dst-nat chain=dstnat dst-port=32000 protocol=udp routing-mark=\ + To-VPN to-addresses=10.30.30.95 to-ports=32000 +/ip firewall raw +add action=drop chain=prerouting comment="Drop Honeypot Hackers" \ + in-interface="ether1 - Unet" src-address-list="Honeypot Hacker" +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + extras.getpagespeed.com content=extras.getpagespeed.com disabled=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=linux.duke.edu \ + content=linux.duke.edu disabled=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=vk.com \ + content=vk.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=ok.ru content=\ + ok.ru +add action=add-dst-to-address-list address-list=Instagram \ + address-list-timeout=none-dynamic chain=prerouting comment=Instagram \ + content=instagram.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting comment=Twitter content=twimg.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting content=x.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting content=twitter.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting comment=YouTube content=youtube.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googleapis.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=ggpht.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=youtu.be +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=ytimg.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googlevideo.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=gstatic.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googleusercontent.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=nhacmp3youtube.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=rutube.ru \ + content=rutube.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=me.com \ + content=me.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=icloud.com \ + content=icloud.com +add action=add-dst-to-address-list address-list=facebook \ + address-list-timeout=none-dynamic chain=prerouting comment=facebook \ + content=fbcd.net +add action=add-dst-to-address-list address-list=facebook \ + address-list-timeout=none-dynamic chain=prerouting content=facebook.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=comp-lenta.ru \ + content=comp-lenta.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + smtp.mail.me.com content=smtp.mail.me.com log=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=gov.ru \ + content=gov.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + r78.fssp.gov.ru content=r78.fssp.gov.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=api.db-ip.com \ + content=api.db-ip.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + api.telegram.org content=api.telegram.org +/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 +/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 disabled=no distance=3 dst-address=192.168.0.0/24 gateway=l2tp-vpn +add disabled=no distance=4 dst-address=192.168.5.0/24 gateway=l2tp-vpn +add disabled=no distance=3 dst-address=192.168.0.0/24 gateway=l2tp-vpn +add disabled=no distance=4 dst-address=192.168.5.0/24 gateway=l2tp-vpn +add disabled=no distance=1 dst-address=0.0.0.0/0 gateway=WG routing-table=\ + To-VPN scope=30 target-scope=10 +add disabled=yes distance=2 dst-address=0.0.0.0/0 gateway=146.120.64.209 \ + 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 +set www-ssl port=18443 +set www address=10.30.30.0/24 disabled=yes port=18880 +/ip service webserver +set acme-plain=no crl-plain=no graphs-plain=no graphs-secure=no index-plain=\ + no index-secure=no rest-plain=no rest-secure=no scep-plain=no \ + webfig-plain=no webfig-secure=no +/ip ssh +set forwarding-enabled=both publickey-authentication-options=verify-required \ + strong-crypto=yes +/ip upnp +set enabled=yes +/ip upnp interfaces +add interface=Bridge-LAN type=internal +add interface="ether1 - Unet" type=external +/ipv6 firewall address-list +add address=::/128 comment="defconf: unspecified address" list=bad_ipv6 +add address=::1/128 comment="defconf: lo" list=bad_ipv6 +add address=fec0::/10 comment="defconf: site-local" list=bad_ipv6 +add address=::ffff:0.0.0.0/96 comment="defconf: ipv4-mapped" list=bad_ipv6 +add address=::/96 comment="defconf: ipv4 compat" list=bad_ipv6 +add address=100::/64 comment="defconf: discard only " list=bad_ipv6 +add address=2001:db8::/32 comment="defconf: documentation" list=bad_ipv6 +add address=2001:10::/28 comment="defconf: ORCHID" list=bad_ipv6 +add address=3ffe::/16 comment="defconf: 6bone" list=bad_ipv6 +/ipv6 firewall filter +add action=add-src-to-address-list address-list=bad_ipv6 \ + address-list-timeout=none-dynamic chain=input comment=\ + "defconf: accept established,related,untracked" connection-state=\ + established,related,untracked in-interface=WG in-interface-list=WAN \ + src-address-list="" +add action=drop chain=input comment="defconf: drop invalid" connection-state=\ + invalid +add action=accept chain=input comment="defconf: accept ICMPv6" protocol=\ + icmpv6 +add action=accept chain=input comment="defconf: accept UDP traceroute" \ + dst-port=33434-33534 protocol=udp +add action=accept chain=input comment=\ + "defconf: accept DHCPv6-Client prefix delegation." dst-port=546 protocol=\ + udp src-address=fe80::/10 +add action=accept chain=input comment="defconf: accept IKE" dst-port=500,4500 \ + protocol=udp +add action=accept chain=input comment="defconf: accept ipsec AH" protocol=\ + ipsec-ah +add action=accept chain=input comment="defconf: accept ipsec ESP" protocol=\ + ipsec-esp +add action=accept chain=input comment=\ + "defconf: accept all that matches ipsec policy" ipsec-policy=in,ipsec +add action=drop chain=input comment=\ + "defconf: drop everything else not coming from LAN" in-interface-list=\ + !LAN +add action=accept chain=forward comment=\ + "defconf: accept established,related,untracked" connection-state=\ + established,related,untracked +add action=drop chain=forward comment="defconf: drop invalid" \ + connection-state=invalid +add action=drop chain=forward comment=\ + "defconf: drop packets with bad src ipv6" src-address-list=bad_ipv6 +add action=drop chain=forward comment=\ + "defconf: drop packets with bad dst ipv6" dst-address-list=bad_ipv6 +add action=drop chain=forward comment="defconf: rfc4890 drop hop-limit=1" \ + hop-limit=equal:1 protocol=icmpv6 +add action=accept chain=forward comment="defconf: accept ICMPv6" protocol=\ + icmpv6 +add action=accept chain=forward comment="defconf: accept HIP" protocol=139 +add action=accept chain=forward comment="defconf: accept IKE" dst-port=\ + 500,4500 protocol=udp +add action=accept chain=forward comment="defconf: accept ipsec AH" protocol=\ + ipsec-ah +add action=accept chain=forward comment="defconf: accept ipsec ESP" protocol=\ + ipsec-esp +add action=accept chain=forward comment=\ + "defconf: accept all that matches ipsec policy" ipsec-policy=in,ipsec +add action=drop chain=forward comment=\ + "defconf: drop everything else not coming from LAN" in-interface-list=\ + !LAN +/ipv6 nd +set [ find default=yes ] advertise-dns=yes +/ppp secret +add local-address=192.168.60.1 name=vados remote-address=192.168.60.2 \ + service=l2tp +/routing bfd configuration +add disabled=no +/snmp +set contact=@AmsterNL enabled=yes engine-id-suffix=MikroMaster location=NL \ + src-address=10.30.30.81 trap-interfaces=Bridge-LAN,WG trap-target=\ + 10.30.30.10 +/system clock +set time-zone-autodetect=no time-zone-name=Europe/Moscow +/system clock manual +set time-zone=+03:00 +/system identity +set name=MikroMaster +/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=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="Windows Update script" interval=2d5m name=WU-script-run-schedule \ + on-event=WU-add-to-list policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2014-02-11 start-time=00:00:00 +add comment="Backup Every Week" disabled=yes interval=1w name=BackupEveryWeek \ + on-event=BackupAndUpdate policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2025-07-07 start-time=03:41:27 +add comment="DoH Cache Flush" interval=1d name="DNS Cache Flush" on-event=\ + DNS_Flush_Cache policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2019-12-06 start-time=05:30:00 +add comment="Create mkdir function on startup" name=\ + create_mkdir_function_on_startup on-event=\ + "/system script run create_mkdir_function;" policy=read,write,policy,test \ + start-time=startup +add comment="Scheduler for Update Certificates CloudFlare Quad9" interval=1w \ + name="Update Certificates CloudFlare Quad9" on-event=\ + "/system/script { run Update-Certificates; }" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2025-11-28 start-time=05:45:40 +add comment="Setup Global Environment for scripts" name=AM-SetGlobalEnv \ + on-event="/system/script { run AM-GlobalConfig; run AM-GlobalFunc; }" \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Every Day Check For Update Scripts" interval=1d name=\ + AM-ScriptInstallUpdate on-event=\ + ":global ScriptInstallUpdate; \$ScriptInstallUpdate;" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Every Day Check For Fake Bridges" interval=1d name=\ + mod/AM-IPbridge on-event="/system/script/run mod/AM-IPbridge;" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Every Day Check For Renew Certificates" interval=1d name=\ + AM-CheckCerts on-event="/system/script/run AM-CheckCerts;" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Auto-update Cloudflare Root CA for DoH" interval=2w name=\ + AM-DOHCert on-event="/import AM-DOHCert.rsc" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2026-04-15 start-time=03:00:00 +add comment=\ + "Every 7 Day Check For Update and Backup send notification to EMail." \ + interval=1w name=AM-Backup-UpdateEmail on-event=\ + "/system/script { run AM-Backup-UpdateEmail; }" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2026-04-30 start-time=03:41:27 +/system watchdog +set watchdog-timer=no +/tool e-mail +set certificate-verification=no from=MikroVados port=587 \ + server=smtp.mail.me.com tls=starttls user=vadossio@icloud.com +/tool mac-server +set allowed-interface-list=LAN +/tool mac-server mac-winbox +set allowed-interface-list=LAN +/tool netwatch +add comment="doh, doh-url=https://security.cloudflare-dns.com/dns-query, notif\ + y, name=CloudFlare-doh IPv4 1" disabled=yes down-script="" host=1.1.1.1 \ + http-codes="" test-script="" type=simple up-script="" +add check-certificate=no comment="doh-fallback, doh-url=https://security.cloud\ + flare-dns.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=Cl\ + oudFlare-doh IPv4" disabled=yes down-script="" host=1.0.0.1 http-codes="" \ + port=443 test-script="" type=simple up-script="" +add comment="dns-fallback, notify, name=Google-DNS IPv4" disabled=yes \ + down-script="" host=8.8.8.8 http-codes="" test-script="" type=simple \ + up-script="" +add comment="doh-fallback, doh-url=https://dns.google/dns-query, doh-cert=GTS \ + Root R1, notify, name=Google-DOH IPv4" disabled=yes down-script="" host=\ + 8.8.4.4 http-codes="" test-script="" type=simple up-script="" +add comment="dns, notify, name=Cuad9-DOH IPv4" disabled=yes down-script="" \ + host=9.9.9.9 http-codes="" test-script="" type=simple up-script="" +add comment="doh-fallback, doh-url=https://dns.quad9.net/dns-query, name=Cuad9\ + -DOH IPv4" disabled=yes down-script="" host=149.112.112.112 http-codes="" \ + test-script="" type=simple up-script="" +add comment="dns-fallback, notify, name=ns1.unet.ws" disabled=yes \ + down-script="" host=91.192.189.2 http-codes="" test-script="" type=simple \ + up-script="" +/tool sniffer +set filter-interface=Bridge-LAN filter-src-ip-address=10.30.30.50/32 +/user aaa +set accounting=no diff --git a/MikroMaster/history/20260501/20260501014002-Diff-Config.rsc b/MikroMaster/history/20260501/20260501014002-Diff-Config.rsc new file mode 100644 index 0000000..b7c59da --- /dev/null +++ b/MikroMaster/history/20260501/20260501014002-Diff-Config.rsc @@ -0,0 +1,2 @@ +5115d5114 +< add address=api.telegram.org list=Telegram -- 2.52.0