From 1554ba7f560576775e8e319e62f8fed7a4efb1c2 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Wed, 6 May 2026 16:20:17 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at May 06 16:20:16. --- .../20260506/20260506162002-Binary.backup | Bin 0 -> 279058 bytes .../20260506/20260506162002-Config.rsc | 4677 +++++++++++++++++ .../20260506/20260506162002-Diff-Config.rsc | 7 + 3 files changed, 4684 insertions(+) create mode 100644 MikroMaster/20260506/20260506162002-Binary.backup create mode 100644 MikroMaster/20260506/20260506162002-Config.rsc create mode 100644 MikroMaster/history/20260506/20260506162002-Diff-Config.rsc diff --git a/MikroMaster/20260506/20260506162002-Binary.backup b/MikroMaster/20260506/20260506162002-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..2eb2774cb3ed62c387fd7a7597a92463771ec02e GIT binary patch literal 279058 zcmV+aKLEh*sF8CLLIePMMzIu000O80004Z`T(2&Lur`!%`W`q zQ1k&YAcAUJkDy1NTXUrn0t(5PY^^~t>{S`11+1DZ_Ue3g+$6N}f86{}WqFL;kGQZx zwW)uZw_wwjn^qO%L28CZ{Clf9yoN|rCb;~$_Mq*87xu&{wlF-@V@S!uYn@sfeqB^K zGd2#QlUoXltEVh=z*SNgP{Uqo_V1Ik>#7Vp_=ECIJ8U7zI0Mb&d2|!DZ_<}p^H0yBds*xoX2f4vBZlFBhYNqK!&Z#)7g*TbTz<}|# z)RiJ*y4@Eb)oj73n@1W11HF`lf+lY%s$!vX6MT{=O(>VV?=h)_DdX1OUUMjlhY48; z`Xm~vZOH1L$qpD@C%V;OMJZ^C(C2aUlNrml(r&tm;-vK^8!A|eef^0(zOjs?^ zpK}esw8%U(1?hl8tLpU4JCVLNx0l0@mYSH*}!n29=)o3-YZ#ZV(1cTN7dym!oOJ= zTy?v7kF(;M(!`^1gA$2yVAD0B@Q_OJlFA{C$rrT@j0(D(4Rr5BcHy(wa062h?ZfzFeKQ>x)l5{>!q#apjR4U&DKQ6)cIDPkDtonorqjUx({#4f z5>zFmq?^h}p^nnb)8FWW19>VHmoWg*zu5*fVep2K;drjrVFkZ^@}F1EY8}vL$xFaZ z(_+>%g!Z$cK~xALf#_G9BmDq-^zscpHlVjP&*}p_oK~?b0F^Z90;T#KpCW_Y3rM1j z=YQ$j)oNxIjS5?uo|*QYy}spGHtUt$k|vp16?}k$N&ivMy=o>k>um9(K-_95kWIC}Q7W^AL!+gxyg-g4yUZVsa}!F$SJJar;j{W~9VCC45wwyOn$kUdK66)~^O`LP;*O ziiAM2+2Yayq)hbOwK1}9rh#tReV!LJb@ZdqiebWLh*{Lubp-(g*q}*v^Z=8E`~(eYcQ(0JPlf+fFKyFsWyfoC6zH zR*FHf1uK3E9VX^7eB@=T=K;7RW@tjXzBRKTGQJw~SL&gSKtIj!75GjVXfz-3 z)ljbE%(X&#K6gss-+2(rUcrn)plknnk~=1ved6`q()any9nxTbob$VfPO+ms ztm-59C<~y8DM>q#y|U>w=SGH8u^V3AE@EJW=e!WaSGFLr_7i$|;h-vPJY`F6Dq;E{ zV0M}W;=CfHGrp^%H&>A}S5PbLbJtyp04o8FWnf~xvp|)r%!i(u0VZXl0mDLEfMF^l zKHQ7oROulfi_~{Jd0OW!Hfm|RvHQIxp?c9)cZH~5qp}nXq*6&J-G4-RG9lK`^&-1< zob~$A({w3m4L935@s?jAYxG}hiXT4TUmY}THotEa7^Hd7$;R~o49;hG>D z61~a~rOFq9Wy1XwknxRsF|gU2kc3EXN+mDw8F{!*LMBM0 z6hirrUu85dahs3j%z#Z(-AN|HG_vc zY*{YfY3de-Ktb2h)WB|USL7}Ekz+Hz%Qn=&{CgA(2oyZOYi&Lz>m4ny944e7Hqa0I z7T%Yhz8w|*O8ZMWtV3Y0O@Tg~@nw2*!T(LnWFo;;PBs_a6Wjr{xne=>uSy|5i@j4F zo*7p8OQ@CoV{6P#LwPgNR6UX1yxTTFsJyZtBm-bv#m`r%Kf%L1>pPLA4q0@vxG1~Oi0pows6-!Lk5zf+nX#VC z1`Gmt+9RBO@XS@nCg)F5%(Xx@Na=9y8TFHIqLbHE0%=3kU)_=vG4aQj?O=w*bjsjr z8*pP&t_31CpBGolq(ufWH!~iXmkM1pn%JW|m zbxLY}6|A$|-3zQquqDxGwOWIk!ci;mn6$soS^;944PWG}AiX|A(x=*;Z%52@uFe&M zzwvm}n&@vYv)tShb+&TwVgZJG zOJ2l-zK&VdK{s2?t&=tSaGj03aHQIw@_L`4hos2x-p9U!KOxr;^Ds^lm56AoCNBXoACVwsK{l7Z9O#c9Rx@rDAw(rIEdBVz$#C?L||n42QGP`L2> zPoHB9Bqfzmio2j?V?!#gpEts4Pr?DWrO$2{m1g_8IQJbBuXdv zhpA=4%I*J#!9FneeI@?-B=XsgVu;4P$dv)VYe%FFZ*tPh1ewhL{7(+YJ9@)e(s`by z**aNjEl(wzuYK{oS+2VnSj0vr{xXDDO3**ySh#ihp+Mn;d|tLXgpOM((UBTLA-B{P zdDgZkgnbI#r_LDpgPab(~U3Gs^7hf#^(&d5KbDf{V5@ER)sB!-|Ri&ot_ z^xS>i!qv9M-XHNXVpLf$_TjF_3ta+Ux@ z-u+eUxg#~YfQQ?1@p(j8U8r@kn1?jCu7xCk2Dy*O&xf{}A$-4Ne+=OLZU2N_a8)W8 zD4{!ys*D}+F;0bLFv|b4!Yilt!obNuF{E`d+m4+sX9Z$EA zfu;FGp0^+`=hm0H$JS-x>R^*|=L&}c2!?Z2)uN4c;^MC~1Gljj#M?K)+p!+@Q{6d# zpTV7RhQcVH4Sp*=`97t+fe3NSA;!_?VFxzOlMa>(;`yUTVx0`Lv>V_qDI2LUO9ntOS-mcwhL|x03 zz5ET`*;Mgi;%EHVs4B~W3dWnvB(VXcxjb-fNy$u9*<~3!lVpk?mfK0waBY^w`Spq+BLJ6EW(;7jE^L|a#58;@c(&4 zUbu*N*7dAa#3bCy_5$s7Oo>ehz;61wMd{|zi0KLTO&V{roySbMw0qw{ub;M|+}~h2A&q+jIGio5 z3<@~=cX-bgK(`p$eu2r(a?Xs&F)f_mhz5t$GvKZO3}_bG-(?VoN0tpY`yaonr<0{t zDrP0dtp2g!=O53VB2O`$H6BY{Y`QtGm9(y<5A}fdTEQ3x>!*swa!MMhS+wE0hT%Ff`yJ zKXx^k1(P9xhB$h@iR;sp!b@V-{;4^BG5YQr-1W=Xrivfz$iAEa4)?-I)Ueml1#HO#S@HR226J@#!pg;CngfzRaJ!wiRqtHo#|J)ve zxXhoJw6qaabB6QdX0mWbiPY)5fDps^#f~vs25nK6Fa$acCH5__u{A_d)x7v_0x=Wa zAl0+T4j8x>)N*QD>U#3S0N*EuKv?@#p41OQfViIc$t8>s?``&z$`hkk4%2?00jF&5 z|KmOf2lO9v0_YDcW$vTWZqNh!f11ah#!w*K0{L*Iht#k!HMLX8wpme$pD*l87P!l| z4-DYZCr<%ePr}+pZGxP%U~OQQQcD#uzR4ap@Z3x3b@=GAY){C#zC^uMwdWx zWjyk0fMCowfS0*G^k~UAUk|WqfEpE3C?YW|ggE*mB14xt{wajrwILhIafM=d~ z!E`l%7s$R?t=vt{zKQGSOhuKZd(h`OqNW~TF7*HGtkULEe~x&n&D)_E+1d1W0_1-T z?N8?d8PirJF(%g~%WEF@X&8 zXls^fle!7r%DlH`q)>MBj6^2JSM6l6v73y_1&>23cza}NxI3)})a`#+iSGGI=oH!z zoo17+C4x&eyyogFcdN5*bmOsQ?p4*I(rS}$2nyo`S9!z^k@Z|vPaQB9SflC$v>8V- zBV##eghg^Lrm5&_)3>v4eLZb@%)nI2t%y0yatmZ_8RF(>VJjFrp;M%yQlXA#u1HSf z)({Z(gUC!)nSL{lUY;0WeJuC}dD z;K=G!#!7Upe4H?o09t+09*kyXptqK1x@6=to-*1C_)6O9Z5RVzhtzwvf_2$jZa~rH zSOQh>pyLr!ebJ8*PRF^6GP#!n?+V5W)EP!Xg;eQ~aIk*vy8z3er#-dx_Xo~o69z*i zl^)H|Mb6hzq$z)wuv;}^KtwxVaU)I`k>4<+V0ELB-W;0Earbx-apf80ihQsw{+w-@>c1e%;upNn+r(G7xFG)SHE_=>RQrlXU%^k^6hcq@V~6OqMJWoC zdnzP*qq}Hby0^ocUOwL0jmsp0`Ss(p7rgo23u{|2Z^KPn$4CGv44lp9BIe@=VDcEVF(3=JVD-55g%rAk2LbE zl=Ga@QIkDz91fw^$2MKqkO#i(Bg5l0ouw2>p=N2s+YFng4L^INWmuK_sEz@lWkM(G zq4qdKK=arpi6UR-!`OnjfblbILGYa7B9=UWy6>^smmCGYA2H@G_W?^*E&mMHwC&ce zGK_}?|GqRugcQ&%K8VQLL??CX((2{LG=LR__WAoKt`jG%j+^$#~t^);{ z`ihMfSIxAvY!M#l%n-+%km2VLLrmp_5{#wmpi;7;%5cTexj-lIGq{BHkQx^LJNG%l zTE8@>9%M7cS*%Cvz- z!lS*I!QkATfbCR1p&Le~N0eofdpqTJ8zX#QDnq>_Z6Wk!HfHGY!k2L7Z5w@v;2@0~ zBsmfs=z%cD(M9F*;X0)`0&UOo34JsA0Dso|@eh0!d+?IJSKaltOxQT~sekl_^vv`q z1&n&vfeHnK6$RUj+i6wTy-gSbFIPD>D^pPL`^wq49w6Y8WL8x4kj7*Y!TY?5(bL{yw3D3)}oej_$0mMKL=L!q>4;2NJ zq#(kEe=&~OaV*D3=>PX;v?G(T+BE9d5PE&g`s#MsQP-HM?TA=@NXU&v#jWHqQhdiv z|9>EIY;k8us|;O{Q()>hK`C_t7nKtkUh?o*MxuZaR(*ST7yVlT&hw7IIvhZASK(!Y zdS@sI<=&}Np@KXVn!Lp&g=b4?sNpZB7H}pnI*}NWhw}yHtP&frUd*`M9gVFE+wIn8 z)^R`mJ?#|2V=d;<-&xh3-{hZ$K6^h~&*WxG^o0wZ>MP*F604E${9jAyFyiY?}#%&eaN&?L()vZ~(-H*p2{G9HeBR z_?|h4$;KE3?lTN>W!)iN_Ir(9sxy_!AM(a9WsXLy-9`L7Fzn$*dD|blAZQ8Zc z)u0vikRP`ri-maUNam(`I8#<^D1tn{RyES0(hM zg1(bSU2|$tHOF7HIV07CbwW5&z4hvLNe1fJ$g@C;W5n5%2A;_6EV2gBO;S)@o@@TP zzZ|l=pY8j`FU?n#?PWZ?rm*mWAx46MISnPAy1lw3aFNQv4h^}rH3(dZtPc^g08hy; z*WxA*|ESh~l}Kw9EmGp|?o|1=N=r=88JxVB0z#AP>A)yJE!5gDaw4wdQzgj^`jWwybm}o&4&_ zQ)AtO;|+h6KlB8n6#adgZ%MNmVflzN&TnXpt^kD~{LUhBVL$zt0R7f5NQ_0lg40Y5 zt-XmyGZM{)Ju}%MdB}1Y9BnuWt||y&*RL2UTWwNxxu&}IPgaF>x09h|qFWn_J&xh7 z4qqTI96=8Pe*5zk*Kp5V8*w>>P{xCA7F3=A<%PUGGGv^@XVQdk>G6pk7m2z7QwCx~ zS_m7qOS>sj6tbTb4WZvs(MM~88rhl7Se!apv?qr#QLuFO$ zg*6=8A7+$v%yCQQ`UW1VF{6alLs8C;F75T9gSJu9!J3DCIC>K9gof9pbs{un&90Jq z$Ec+-B&BRtafeUxAo_MK3El?#V0!i7vNM?e~k?9a)KvA&Q8fvRlxt zR9nV(AMU!?TCC-m*N3wwT0MU%Gx{LuZNm`iLkcG}HdJ`PoZWsp3G7J-5VnI`gB*2zRDf+ZC;Fy06XyB4eD+egId`0USF1W> zA%8Q}hhl@sDV9_iXiD(c?Kh#MR5&jQ#XTj=i~f<1v%Tu&1nI7G1|Ly-EyZxzckU5- z?mh`Y9&3rGM(qto<-YMtJSMUqy>B?;CmNs%f)q?gSHMRm$Z9wWeb2=xEahgAXa^C6 zXq;jf$3(43z^JI?z^~cZXn6+;zih|}OhCXQ9g0bTxrzJeuEEa%OitV83^k1{KTsE7 z4LQU_mx$bk^w+L!2T&Lg3Knz_u=ZP#INLFZnfJWpikCUHljmZEEf~!zF z{U}k$)28mt3V8l?eDL&{cTC0b9;M9Wy;a;}3ZszZf;HZ}PXpl}ydogsxOj{U#TmxH z%^{C-mNh4-)~#tTJBqMo$bM<>Bm(REI~Il7CT(In;R6*T-$V})(rG#a>KGdg@|pT`5sa_&DRA$820ZmnfN^VIc3&LxZ?auLe)KR3&r8yu|if*3(S$* zm8YQY#+Wi+1El*;nWO9}fUq%G10bvgrFYV?&PB+}BibC_?gOK3gOSFYv3e{@Y52Ke z%~(*3zSXos-I4O#$fAyBA`TV~*@E z4Kz~$n|NwsuCbySTO6t2)<{~Ee$n`mRsXFk9}!4DKsL=o79kyuEq!4hTBG(oOXWOY z=XGtuYIAy+G35}ZqrUn`bQ7X@v2y_MK{8jgE16PpBUVU?$_fFmpzKORlpiHlZk@=O z@;OU8UI9=iiK1=U+fol!BOLK8OK-44fKe$_uBG|*{vlU3zP^X1)McC@s6GJ=^CMlgjq9_a2VZIn6 zFRu+z$H`_9>YWI&t%oprL}XEDw_;hD(?gHxGR;muh_b?1Q}I2mGPZ zx4KNGW-?JaQgHOI%>S+eRii1xLjKA~R*JD@+rX7Jl3F7e6e}O1ne=jR#yQz_28b=o zroUF4@>`-WgJS!yCBtK`q64LB46-=JFpjJXFZg7R}WWuh~H;nMyL(UPwb?$Q6=u zHBj!aTd~xMb<%*aGo+<}@d3)dIH0zo0cG2k{5ZGeO!1;#Y@qo;>ebCZ*|HdYCW0TFbiuSbXjW@n*ZP}7#a`43}?|pwl-v*AF*5OB?!CzDCN)K61t3q^*@=`}{8mP{51Yc685y zt_v@9?Uz=0P#-a3ekz7IhtmksgJZpm5BA1t9tJ>I_LrjVpyL{m&!jSzMz2Fu(_)>C z==!=$O9t7EMndN0`4=8Xaf^^?@9$Nv1ib;Ba?w3u4!>UaD@LJmcmF0Aq z12Dtu70+`NeHR?Sp!!h1*xZx`Kkx+Vr+Su`wfd>WR@qF!i2`nv6;KnvA=Iw{OM=UeNQiWG1mNS0X~A zzjppB{Q=!UuZ5PJpp|6)YD||qQ+MgBGyy2Kg_pUMS;rTz%J9QI_T_u^I-?L zVPxz){9Mt|VlO=Sj?Tx(ak32;`=2Oiu-cL)=y;n7c|(B>*qdg|P~Fi&NyIMXG|hdV z^8dzWJyjefcgX=tU{YyNo2|u6H@Id*_m_ze`Pr0jd8UG7h34mi6Qy~(HKca5i}!iC zy05nkm95#rbW)blJF3V*CM|%L$Tg|Q4xv#YA|+93%F!6}in2Dw#k+`qc&b+V4!e!- z2pRWv(OM)E=M6}4TjpspE~_eYNL~}*h_1X99pDt$i7U=u=GnG7)<2bm;tp=D>H+Zj$~jZ6j-8&4yrjstzOcUgYyVuXLEGZr5 zuWd6Q3eR80h?QrF?zz;2i5QXjPfiyTic?TE{FShd*~^>e3#;{&mN|qm5MJGV8x9nZ zY?E^Zqia=~pm#zDMV5ExbR%_!vB-*L89?|R%a7N{0$sv+%)t$j0={NDP$oWYS~o{+*eM-7PeYpL#XRiY52Yj=-W98A(H|3UT5bH>jM8LC@Q+b`~j^ z6lq4C8cdUV_C3i{64D9h{|mp@Fw9NYG?wfIQ7iS+#^q>%BbM+3p?rW7m52WrHBXj| z?mpp36KqK==&M`vsg)N*{4Em3{G-|MBXvAx7R}HI$mw&k=icNOVsRBeqVjC(<%U_W zpgbcO1D!!m%(^wuD%g!W@YTN$34gM(a%9*8*l=+Cm)4dj<8dr8x4@bN7R)J2jWV-| z>L*U?w>H z40fv!atwUc;?mY0LXtWm9W}IkRp17g=_dUBz{eI`nhSIhL_1^aOiq2cZfw)z`9t&d z>yU%*W%5xL$At*c*3z{auJ^H)ewvN3clJ(}VcnuPPn*+&nY*|vOOv8qFe^eLP-YSO z@B#0rzqR=G0dyBM8%U8aY*yh4JHJSNx^) zgNJ0ER);Jc-n*;q)HB{$k9%)_F+sJmS1{OoA#E*7v=MVL0b|9rdKXkim>^0aLi$MQ z=zQMhI#tCl;d0I9c=7|dZqM+_FAlx@vJa+ir&|A5dBJnrzaACg_}MDsy83c6K{%~g zUk2@uxBN*2LujCZmo3zI#RX?kki5-Q-T8J6>v^T6{+Rv=jcl?{H=>-c=GQT2B=0o2 z2-#((&H_wwXQ4$LBYwAY_p9QYSco zb&mHo?|5+AcoVJB2}BoC%)4G2f+*CM;5;sNVpXFzdjigO;&fXd&SdMU{SL}+XQ5X! z(ke$GrtTO-wF9)%#oS{k`t7YrKJE#i8XcYmsB1G*CF zGyy81jc!&vvzd377ru)@o9NAqX&XVL3=6*EAXt!($lxIV!QNmit zCCCNyI*)yjaxZELWWI7h?$JSKFLVGgmLn!9K~`<^tyqSuxopmYwD>?)#(3@6CHRZD zr#z_U6;(83FN_o4snLH^^*uZGPqA{;7|>wRh(CP8>&sduN^6&SnLsCx+8M&;Ok=2Xk@6zbK(zvX+| z2xIOHmb}pqwNY$84Sows7kl=l17cJA&UR}aY3-dbNOuZ6wWyK%+V1&r5AA9m2 z2F7)IJ&WxBSe?tl#sSf(1J$q|+e_=kxMf2>j#!SYRk)+0Ss_`J{7)oK2r6#G`rLB3 z;cDX}5l>FUbKJiUZqG$avS6^wmtHD~rm~>rl~}S~{{!H7AtRWc)~XQ3cFt8;-QQiw zd#S?_IXv6V4wKQC!5KmhuE|ugY<$oEx)nh?w-fwh0}@50U~en*+6njvI+q|yp~5M- z#Pc|o)jME~tWyLnwK!8wWiYQ!!)`>yQ(uH(509aO35-tBkzZqe)!esYguG0B0j&^# zt~?BrM`l}>Z-F>kVB31|A15LJ1+-Mun(F=Yd=Up;tCX>#^Ji^6`p|x;fY+v4@VIQ; zrOH9@jOQc@=!lD)$%0@Xlelsgm{CbN?QQzU~qNT5FD&tvY#+pF(w(+dOTT&c# z`4NJ2xwwPfx~r=RpbFz%vng6*l2l!e^9{Ok^i8g(OQACPkiCEw4Hr?4l|q0av@Od4 zKOewI(gZqTZGn%ewFoJqO(V06Ln;~cLQ03lOe@ZdZ*}lk9%zN%%J%5j76N*p+hzLR zejAu~6wy_vHhLSqaT=|RBwo{ou{E~hEfUzd*}z@;7&d%vynWCI$$^Fe%!sx#*5!V0kv8Su@t6j3tUgcZCunq{(3vTsWf@)mFr?ijuEG;y!t_SExxOktR$VqY1t!HKcLeD6bv&}pLN{$qC0B-T2If1p#ngIB3LAoyF$<7ZZjFm?$slEOou6c6=G9^x*Dq{>Ca83j)LAxZ# zt*8`nRNaK=3vEbzOIJ|OK*_E;&o|h7pp$O|nE=kE95!U;P!wj;SkpvVIt)D|jKPwViI+9|KR5zGp{HkW-Mo_^0?W|wYKHY8+?;4@dkk(gC(h|bp zOgnqcyVLV&IG>)DNGs^B>k2#9mVx>S1+X(0p*;P%P0Jz{b(sVM&#ErHK`n4zBsqqN z^B3`TXUDo{MK(L z77~OR`Rj_(=U4|J@fz3!$S1iKY0TVmdQOnfn52ZVC~8}v@%Rc?MLPvn!FqTol>uMa zu57=XcNHl-zg`a_f(74EHhAJh`DyEFTcXrsJO>6^)%AJ&6d{j3Cj1Fdx?S{ykVZOI zvsRTSOsnMN%=fp!r!NK`Yy=y}E4G3vd?<@K>Kus$t;1-W=z%g^?C;1Gj_`Clr2l4E zZlw&VQ^kRp&6s`DklCEGc*KgB?_uDFn#OWf#)Y6e!#OF{Q*5B=fI$5qZHvi9sQE8~ zEDT#(#GT`l5rVvNFacIa&*Y_F=FO&Qnpx9-t zW}4oA*4_f0#yQ*4Hs22dO>||mq0Imf^MYTe!PhrsToV);PVE^Lyf7YwOy)y#kt_XK zs13zdVs6dxpXsLfV;CPdKx=|OLSVk5U)u(<5%Ak*mQ-9UGsDUxk{K$m$X`C!DUa{^ z#T(1lG&lV2txn`MsV}q;y&Tr46Q{=reWk~;-XjOWzSUOvcI#ne3GzYYU7;Aaf zsC0C!vcNlPa6olLa%YbL(DRPxWSN|L#aYu~BT!!Z0Q>QC%gMx1drj{12Z?}9aweLD z-KP@4rT#L53MU>qdnXQ=#hU`|()sbqYf!{NUiT+9Jt4jh5opSquknikiK9soZ+o9)(ZaZ+AA47YOIwXVz(A`cD=vKu?ld5Z7*GYo@ zW^VVC{H_LzvI@%%xA?I<6u1i31t#I4iIV8>%4(K~$hRz?E#W2V8;j;){KE_`3q%$e zH=3oS_Yj2)UpT#;-I1Rj@+tk`z>b65mUSs%n%XOI)WM$hkSzF@G~%`9ez$w|M);<^ zHc+Ug6odL@6FkY|5fNmctOPAU$$B9>;QXC7+(V+X)qt~PoV!oeiqtf z<)GFyWXslw{WYFZi`et4G@wu*cOLVKQL@^?)GM(?r;8<|RjJczKqxSGe>iYl5Iafxv8iWA&<>t(@T2-(%UVN=_(+HWlo zmqZdv`8#8Tw~(;mFHH;K1LaOv@G8PQLIge%#X2;cLAK=)k#b1k`1-rmrjr^xR0U>! zdPqiqfR8lI!0bTjgEk-BBQDV4XZV`WXO?u;?5910|*z^5I)q;`)9(PtUZtX8F;6=*yQ}qlU zaWIRfq|Qw_E!G6OS~*WelVN|0xqjW}MBI{o%d7JpkNm13Zz)u=$)F4lqQiHql%VyQ zTCL*b5G0V4dad8N_P(i7rq9Jf?x3#vRFq`Zsf%J?#e6LugkvtCw7EX@Hhdu>(gRkp zj?02gV0Dt>9u-uX0znF*7{w(b88YFoJ zZ05ttyqHa*NmI^~AaO-3!dNSqSj)wF-rUrZIJLlAez69!pGP7?DLsr44TY@g&hwTS z!cWFE2cp=@NBmAP(pb6Wp zzwDE25`D#!c1~j0OHrLs!r}u>696*O_7d-KjIv1y*zPyPP{(s|-M|$14w`hrW9VNl zAPBPC-)X{)vP^du?F_5fX z0&}KJIL_XC4=832CnaRAyP;r1dpvGU<*A;KkS-nT%u%c?n83i4?xW8QFv^D-%=U(VC{_a{5oND%6$x3cU(_^AZOgAy z!u?~0CIzg$=%q%cA>70f%r|RG4}bAuqQThMtIkJlQ6okMH#@|$%2f9o*#lfY{n>av z>j}Hq5WTW;f%IA+labB6Hd;i|bZE~t+T75^BGSwlNfv~=M53gjm+H4go*E!S(7)O5 zE@&VHm7$|Ys}T>#YU61~?j}d_hbp7U9rsg73%gZ)#)`Thh(ctPc^0ShRY)++M{t43 z=V9ZOOeh{Qi=*b4glZawlp)jkCJl z_CqeCGv#J|e}fPd@0sA-Wm9uMZ_^J`U~HXk5>;}Wx-7f#Cc79ukiJ7%Y#{jcb8yK^ z-b30P&(`@BZa&OQ>_^O!1T~f24dgG5e2{(!-G(qvj z`fO%3vz3_~Ea`qxZL2@lUA;>UELHN9rJ|WFYaYv%bc#c4Q1mUBV~^SaVd_xRKJ#JB z8j5=crNV_qy*?gC&Orx2Oj1wKftef%SToX_cH8b-l-_CfcTKQYS{$9otLD}0SnWm_ zke64Ry-ZOvljf6f)yh+)y@d@5CTu1BHe)g;igtj5!w{n5*tOk)q^`8fjnaniVRApWS-KH0u?~ zz)q*xw!q>eZJfO+pr2cgB|V9t_cE-T7-D1sr+bXP4v2oUUoIU$+*RJkg%LrM`<(Rc z^dWKi9`5?Y0BSX|#f@p1p&33Yz}yD|9W zU7L%c2~9y>%5>2a{3f+{MJ|kcoUe17rmP6)A`D>4;#Uv()UUZfs6TenHGRXC?Pi|Y z<3Qt@XmkcT-W+lx!{I8-gj<^UM#cc^HIF;|iE{CR6V9Uy17S4J>_I`QkBPOv7K`Q( zHqKp^LQ7b|MGH(rSt#^S#huGgjq&!UpmSMx*Ke@HTOGH=t$7`ECfcULsBkMIz!V0qqDge5WyDvz+ z6p&a*rp3W`iTMuy(%E(gJbzK4q@fJY)zWM-eb&B}&Ql%Up=ES(7RHSQgb2qnA8Jpz z3nt$L6v8jwpeIOZHEH`t0#vETk%T9M@V1~VZFO>)v6u_ z_3mo~uhT8W5BR_)G&xqxRZUNsM>W_s{bfG<+i_+g(&zidL?5g-JnUKRzpK6lAtKcf)=t^VJs zslFaU&&Dteo3!u&^vss=QjgTj?L0qT-!en7K`)?nLa*b zkWj;szIQ@|5U`8Xff^vN;-{9S3a|hPOiJO)+P*}X=3mjp8NP|#N}cT5JPrF&2SnHI z#9k=+G-=w*-zwy^V#3n@!`4JLO#zD)NUwS0=T%|k6ECcQW$?Im_PCFTOim$=A+L*g z=)4ykyRqtR=QMSsR0d&t2;x!G=sw#BcbPuI^G{wC_HydH51^NBV?j~Z5e=9%W}=C< zy0VRwV|o1Mxh|geX669WD+EIHciE>fqBQ34c+^Y9lRJ<)Qlb54hF>M5-a6c)hqQ<+ z1M~_rzWOEWnV$JROEDLz6>;A#+F|wgxf^Mb<658OW4N$YpL5a=np9BMl03T5xq>LIX?a#rt zcew*2G;zUe0}dXngvXc8h1Y;4~T zPfAAKLwK-{&2ldO=kNiOd6j6wfH7LgvjH;}@k^ZG7^0u*NWGxoKXdO1fJo2(;Lq}nCZVP%-@Fnp`_PlJteP1Gw^&%Dta5U|-S_u=d6mJp zrh&BbVTTlrfMQ>^IY?*eo7d(3Y-@Yqd@|nrtEa9blGmN-~(gHGE+wLjU^IaSfx*|IuS z4??C^?NJHTwD^W$*WR|aWT1GOq_E$(Q09h8G5WuvK}ye55^d6hi=m8@)C6P6hF|XA zNKr5wWiMCQ7cm}bb-Ba_m}*Lw(Jo5LVFpli=rm_clqD_w6fV^Z_}d|Sx0q1~N#=e&mZ{D<0^PWlW%}L-f1T8uQM}d}En{0Q>ldx=! z-nILv!C6EctH;JawpwP|T)?G}wU%x&w6h!_$=?ngEG%-udCx|S5YBp|QS!_HL~5cCj%KRp?#s=eDj-ZyMZg4_>bP9`wVh`B z>M}jo;}gfF4O;{{`w0PZgbszEp%K!h=EIrBeF_k#rGmXZ3EcUpsu}G;wV#xpo(yte zw1vKn$@RKm0Xk}4{Yw5l?5mfZ^>t5oGfVfecMXwrWQ{Bi(U>}Fe<2T*BKFNS`c1(A z(-ojw1zWbG69Ba2#m!0KU&i2Qw0?vLz|XlK(|gQkSGfvMSF5yPodYt7>SbPzDXw0x zhL%u|N=sD=MMdq*-h)XZSL_TV!j~X_Uc{!W)bp!KJ7-kA$TpX-uH2E)GCLzX@BQxE~fE7i(y+K+O zf~yV!Hhf9^dsCsZ;asrMTrfs9vumz;lud;80y0etV>Bx*D zGF^*&QZYG1j@>R4Q65wlm!>Qy0mi4V@M^vLQR;)sytVCk){46_>AVEJTxrm{M-+kw zPe!xWgF;rQ!0?x}b4fjGz1Wj>i%3k_gUK$J&0LHenXi6P&fDXz4zL*#i70`r2)I9R zzTvY8FZWw2N*JUxgf8LmASxxtrjU(X9p~aTHoXn9{8jc!IJ+wylJ!p8H2}bQJW5FyM~cwZ=_PF6<@)~snb_HGafNJPDV-Kn{e)rZ zdHvnrj!&J;@|K2UaGtJ}_nwf8<(kCUBdS3tTD!}a}bnAJ5o$b2o%G+)-lIg{q^Q`J?J0-SSZ zop^tdB5~VM7g=QB(LRvFLn?0cZ*zaoXr6%6O6m7S-G|M9AW@GL`EG8ai58LUZz;6;s8)Lw^b zlZym{Xa)GOktSyFgTgeLB5A{5Lki_{Qf8WvnaLVJY|6}RmfYsp_91glYL*^^;Hp@> z5ENN_Epjfr>*iCB88IS5P`+zFrs{w$2d4QkBT~KVG50raF6>VyJo2qYiK^Huz!;Vk z%qe;XdW_zL+<$?n&LuHu5iI1<8By#u`At1MHS^zd-qIjM9(Redj zhX?(N@~k{sjeS_@rjJlC=wRNwN`l3W6-pDgZMWdm}MuIUw(j7|9sTu<)W8y@trjyD^vE)C{6K-|!YbL=0Mv|n4VaNe2r z{6>ZFxug7-j9!nd#J$MoI#3Oi-Px%0hH17$5QcR`*aaI#1WW1{Ft>6UMCLHFKrap7 zZ(}_MURWdOt`{pakpxlkvbxUOitERv_Om04oYEDg`MR>nGDBQ z&ZHDJuIOuh%(NZE82f6)_e0A_kBMSnHYmGC$fc}QuF`CzPv>`r2G##K0>8viho9Mn zpQu)wZA29%cap6o;*J>TOHm0o6>zmRDhK>1yr%j|Ri-p6tk<=6)M+!{XYnMl`Sr`g z*}LT{Vhhz^-u+R!yCkU~gbhQEH~>fdNK^@Vfi#-tNbYIvTQ_OsJ-V=3vHNqf_=dhT zd+}r}I9ZgtZ=04ZAcG}6dYw539H@IL;!l!L5wK-9b-a9_Xx#2#^xxoA@py2keT$@5 z`$w8Qhwx-KyqjAtzf*&s(HDPE8RPI62e1$;S$oZ+vCoJfa(iuKAj{XTtv;@+$x)#k z_nmO0Q_Nud@VkJ!D^{~oWtQ`9`}UwlV&hkdVj%?YH=@&Ex!e_HxppGxzuG;68zD){ zge^X?C&Je%gNo`TqW}v18Jc-p`LW1f`LIidU{6lbVx+%aZU`K>zct-I=?g9%>kY-n zQ1jhVY6fr*3BETi%mjpS4HPJA-p*P!(6Yc!lEbEjPXq2H9{BiUks(CEPf7cbzE2Hj zrvNn+#tG$0XaNBqrA7K!=6VvgC^q};7aDjMY$XSq`&YosJ3t353NUYmzS0iC1bwe) zZNw2L*L1|{#mHrEB{#uv{RS2S$jN-->S?h~c2J?Zi?D>>y}{V1ov3WEb&EuZ-O*%U zj;P& zmWql$gQu5?Fhb#>7+PjO@Z(a-FFq^C;iU6oI9H>&-6xf?5GH{Fd%}~Dyb%eZnjBDp z%EifRa2J+Byr4VegREIg5F15h35&!mt;*4LOwqgBr#Pj zIhi}lnRP*JobUxSEKKayHk?}Fxe)4979?E&o7^XvXLICEgUt|^KuQq7b8Ay1HXZDc zmC9Fb66k}A@&+==RQY_$F}#9b3YxzhIqbw4WCvvW@nWkU*!!}~)S1=sgh2q8k5}H3 z_L}vF-EUD)N(d}lYu#J*oq@`t7nve&l@{60J`+e--)e~n^E$~KeibYK|1C*5TyORz z@{Sb!5kb#NmB@dHs|GW83y?=7a5aIJju=W15 zBp(fPKFKS87OC3=0&ymNMk(D9yV&wNgO4-&Qf(rj7Gi2*yFSua`7&XX1_T>+ zRVNTF`|%Iyu%eST5?niR&hMD∣EGsFpZ8uwYN?DamyEx_^V0bUJ3acz(z*h>Ss zO<`uMJ543X?XD^#D1TqQ=pU?QB7TgGN18EZQXTf0i_yG^iE%Ps-g{M{XoTZ`3&04= z(LIwwZmOM5@cGAG5o~GHB`}rkBudkMArDVs!#vJUMe%F_=2Jz!ti7BpeOItDNgLc@ zrSo)xeD`)oBk*xwu;)4mG4?yEG|s6T;%;_|pPBMRVG5B#AqArd%NL0+r<9%$7E+5m z-Ld5C2u|LJlyBk$2KVWPSiN<__m*^YE4(9t77z#EkUg%0 z2D^0q?i)~kWDPuc2$-Wf!q;5|RZ#C|fh6u{KlCTbFoN~N!Q%(l;swB!{AZJ9U%1W5 z@5$-N9q*QdV?*GmC#z)W&WR_2CtLf_&xV`Kc+N$zIW&VB>79NlnjTc^vLC$tlDeMI zNILCb!!c-Bd6Wm=ua-OpQ`of#hLS)}gdqAD3a_|aDLvWcD)*>Yr%?}c;x@V zo+*LuE=0I#Y!|vR*8E!21(nRT0clti*zy{lm-W#~Joe-(e9BZaK>dz{RN5B`g0-zu zWi{P{Vw!rCN#BK4WH^VsN)QOg{WfSKAt>P&OtIa3k?54;m)LVkr*%rf{Gl2hedDL5u1b^DshGF5)3J;)Ktn3UaZU(m5Oq}LM$&WN;JnlX-?F`CdQp&zj*K+p( z7D5y=BNldI1O>N51FI;-N;q#zC1ka)0UF=zLU~CmP!>TnCvR~;s&6A!d9d>G0F|9i znc5sbY9S}32>dr9fgFd-AxBXM0>=Aw0^?l`VBk>^a9^tHOwo+P+1F!$nywHJR?3EL z%|yZ<@#d^y!_<@Ob)3E69p$>5Pq?(w@6ro|m2W_dE9j&rK1seU*cn`eKDc&pY zzx=!fonBoTMKFNsaUY)B180QPxjlq2ks-m>8D7z}tD=0{^558baWFe&JAHd|9Awx= zbyhu;7vOPo#4!%o5DnT@Ogh<+}H|rZvoMG_y7*@4$FhIt;S9jQW%|-@;)S$ z|1d3YsGuK|Dp&~cq*_GBcREqXa%q$Ly!o*ma=roIOC`-c=gpYwsb0}~qpCV{&oV%dI0XRkVD*0@0Y9{UxM`P!$ ziZ9LcVbZ^S4MxIIPrC_g3&T?xy2)GAgG?ojCSLq>lbFTcs@JG})w`8D^?N>4^)R;+ z%eDNRZ(*`9*O^`N-ugUXOF51mBj168goclCRFg zi0F?QM@AmJ$R|92Ob?JmG<&gNk%%*8bM41tD;I7c_N)+t%MPReXv@thWR6rA)eFLI zU7#tzB*aSwYrI}go{<^y;k zlC8EauR=Y+RFhk9-8iJ~M~Ynx#<_|UC=@~M0hxkoB>tgxb3URU=~=`zMB@bN8_dkk z^{2hJinQ6J5_tgNQ8$H%n4i9QT7CGwh)yR9_)Ek#o*n7y&#d=tL_%V;h=2lhj4OuZ z84rO7H15Lcw_HSHJEk7<>V(?P3@*_D+Z*}pp+D#a(qWQ)7pAD>j8fsIcrcapB}*p$D;!l+9P@y2FUE1_NqVW zxv#W>F(I{hIshJN)#A#*;~IAD#l4E%;7hQW9Up_&lY{>PoW)Re7NA)TpXJT56krSD zJ#n(?ki2-Doacb`NrmV0#DqFwKr@TK_I?dZ0?)X?AmKKg96FzT(apgXn|c0*T>{DQ zwrwlvkixERdYty0*NZ@%jQTn4d&*}J_7+z)^0nINXE-IC6gU`&|3QV6#dBj1Xf>um z#wjjDkMtw{l1jaqQ6M(JbSHIL6AZ~P%*o`<>u)FzanCNjsQj=N``fDjV_hSl?8{<> zUeQs@h7{)v@_QO+7Wj$X=zOG6V!XrI3rf7a)0SaZb|D0>?toN028#^Ons>5yB z)v-Uv{}s-IS1)N3>#JS+bS&`o{o#&MTr_gIDL(0t%<8Vsx-bXJj6^{tx9v@`tsb=< z#_%XjNyy{=vww;u_cGwt&N&G5hW)w4UWF$T2E&aMZEI9*i~#Mr!N`G7>+vx5b(KixIi~{l^MyMpGQSwU{wc5`@JJP^Z*+K5_oVgzmOrD@WC45v zd}EWAzA^5kgDDJL)Vn9JP#nxbdvoEeM{Uxf5sXw3)q5l`xmPk8NnB5HE^u#`cIT%u z7i%3AFT_X2N_HZ1a7O1F(g~ke(yC!UQc!3)-8>?77H1`_7kWK>B~Ft#c?dgK#l838 z$b}BOjT=Do*mN<9XtbX0uzaT}P*76cYYtCJ4F5u_slK0{aTHKac*VX}K@XS*t2Mk| zsj~S@Z?X{wyRVCd-*(R{k7lF7;=*FQvqSYBx8m6!F8?XL5Na#iww|`u_{{GK`;AkN zG0Y*~$O+Y*>Vd4qDzRswWeoM^&|@=!KR)0T_edCmfi@mQIKjP~)}bFG5U8WgjwyvV zd?zqEY7R#{;MEY%Sf|afY;1e*t@3xJ7AAdhG(12_MH@zVxHF6=WK&Ka(da1on?LwVT^E+K7bYG@u8cMi<}kL_1X`f1oHjD}1sO+(Z2 zGC_4*vg61?TfVP`L!U-Y!z;*K48q|h`eSpM=K&a=9*-_=$O#h)V+P!yR?!7HPt9@{ z?6O)jg0taSM$G@31#*X5Aih zz`h%tovGVq`t_qjr!D_woI8gjHed*+#8)DYI(NGq=w9_pGQh8_QVlmbEzdl5s&0QI)|HW8sWVAYnz#Wim2_u?5-htxJKf%@9jR2Zh6_PfPal8k6Ck;hZCPV=erFkggI${ zYGA`WweLiQVeBHfGM2?e<~~92uHEwxnBBe$%Iro_N40e5tr}M9sll^ zS!VYcIk@)VwT5?UQ+Pycg~XmOSG2&2p5h z)Tsj(1h@U8{&5E}h{oWR*C-EfBVq#<2bCMHCAY9EIu=SsDgW`5{Ak#}z9jebklKV} zY7|f7jRml_x;e}jfClW`>b0<$FF+|PRVa&ryEKM2T9KDJI2Itev#JuN(TO(9Qgb(J2*K`##W3$nag38-#g(@Ht zbo62S9VSGo-j2_C71m!S77-UjBqTtxn)S$P5xdU}^^;>e+q6%ynP|PY6~P#j5;Ugj z4T=qfB??)q1GF-hPp}T(B?wOpwz(mw?>c5Pqm1l+!;?&AQwZ;&XYz2XEM61dNf;(? zDgFAr;<>zJ*RyJ=EiY6P#>q*G>0bjs49X|@An|I*=2Fmm8>^?(-U<7fOhaV-Qrm4o z&Jky36-1K_clK$^cq>As6r_^+pNaCY8@NW97w-5J(AmN^VkD;r-T_8&aVerL-L2S= z-ng#x9)TTo^yKKfEq=QrayBD^=L}d^z?$Y;iC@T|{g_5EaTyck$b1`>sQkoQB<`!7RSAC$<(z;ojicy8*9?dV&TV9MK{b;|{=2p?K!yms zp+LFku13I$CO;XJW_)NR@Mh{}^m{X4FWX;su28CIR)5%mQ?d9*dT6^zMgG`IMcDot zisrpBOuOTq3nS7HGq+Ui|1j$y>H8@K_TOguY+<)v#QG)V=SZ2wWf#0aT&h5iUX{Ym zX+v2(6eiVwO~<#i1{RGjNr5n&W6#POUV{)noPwb# zw&Z0lFK&_1ikB34N>Z|2pJmhnX){H@HB@Tme6FLHI~8&J7s1>wf2_=Z?tRj6qGlH~ z>G-t_fE_fU@NwiO>tGio2_}f7hDykvom;l5-om<$_!D z)rE|0-DLP9xZkS(lEM$X-M#JJf~iw2nSoRA(?wM=7j7=H<)XTqXa-`>*b(a zDgK-Vn?YG3(i$Ek4dwv35h2aCuWFu!eQGDhN5-2g^rzn>vA8feZ$A6EP=;MCqu8-A zsL(*n)XkZ}aTZ+lIxMxtJ*C$$9pw=#P+Ba@m)b7E8{8ZRVrVh}UF^-{G>>yctyG#g z3nej#=k*~HsLrAdaJ;h~xl%z-g#7CKwH0k%(7q>WMO$DR5ngEEgyNDq9SGZ?4~_Dh391b6nm5@4 zWVVt)Cz3k8<^Uz=6#cFBvuPL$e@ z2OxOlNIWWp=7ACl(0%=&vrh7#V;5VK%nD$hq0>t1aYU0|qZ!>8$6cAw^!cMW++HV% z_F|XpbO4DE$#y|r5y2L+l21b;b%e>ZtV^-mczI7VmZxJH_v;=S-k)OZT627UvGLFP z8j``8Gq4LC9Hp`&VlM9>*96MpLfqC{#5hdm!I{f=h{$O9?}b9QW5vY@V=HUyEP0jE zW4B3~+o1Mh`suY^-{kavv)ngSodm;IPCp>IeeM0b3XSP(TWvf4tTX26t|YIGJ&?f9 zO`xym+PcMV5mRYY6W+G+C`h}}%`4fK;}^B`eNuP<%WP5(OXu+U^Rsh#j1S-v{dJ!M z$&D-M8;!J({+Z^msWldG`Tby=_!gu*=kB((Rxlk2ur#Vi(rFFj-=YtdubckW&#pQT zw_W?L6}!*zRer!Wt61!nGmE{(;pf@$166rxoMvi$xD$^L`&UWnItu=xM{P(03hKss zXW2AI)jqIXuR|8fQav-)V8$n;q8K)Md=6Ft&k7F#uAKm_ao7`jS~b;?9baJfSBUD! z0hs%fHli1B)8{JTs!kfb%c0N;q}Tcfb*RGr^`#6TJA5*vC2Y}`c31FZv=ND~y3@q8 z4p7*AV1&3Rk288qy+>Ov&>ppox2RjbNg8Eo9YIZKIa}e&figz@ZnM4bKM*IT#0hL= z5XzLwKW~Gb=}+7fn+{d!_*;405h+CuGWq*y;#{RPsVVryXA)cR-fruSThTMRptfZ< zFnVblf624R^0y1J+2QoVSb0?Z*FjZPaGnnPHIW&$0Z)iBZul~4QBJWsYE{bz?Zr7l z_)o(Ta!>7{AS*;BnC*TY<{KL_MmHX{m1>?ey$p7^}nT4KXBe9h!&3%Gww>c*mP4%NL_rGyc#BhCjL zlp_`fBD%>KgS?BBR*khkTOSckYMcX*jxZIuyZ!4B@pSKJnHJ0dZF+li}z;>W(k) z2Nau_76-1wOr%sNbX20v=o!Ef{DyZHc%1n8O^}D3^`~8=Ec*0F`fZ9dfEEVqbgGgm zrsGvzW%$l#T$L6Caokqrh>l`DVHEMAqkS?siAfoYsldd&(@M2gwG^w!O&Hr?YTAfB zG^Tzh3Bi^0{Er)&&5$Nw~bI8*Q#<^54+iDcNyc#fwyrW`-^4dRp6m!ZHVr{l9Y z-UeSG+PR5zkzVSB4J;Z^69L2>o@rA^q-{iYMZEi7lPi$Cw=T9GDr}zGR#gF9v_x@t z=+`@`yI|PpQa0Y6tKM1sG_`1VTl!s{Qcnn=VLM1@Q|%F1h+`RZXu{jpL9ckB?AFhA zX&6l;^Ff*FF?z{K6PsTu`D0%}C@3)b%IyRVmL$@FKl7%wQAWT-8%B(XJvcd!)1BB5 z6q;|E8kG#dh#+n}OF7zQvk)KRZ+_TR{*b*(l-H=VivAWTtB4-oGUw&6+z0+^}1lKXNdbRCbQXMg7)wHd7ky{ z>mrMJR%A_ubiIEx%wbWJfK4Z`>OBXh0-}mFY~EA0>kZ0ioXJjf5OE6Q7Zfg&MU(eR ztwE?nzQ|12Qi0cQS0`_?nTKu0{_t^OWB2oKA7^Xnqb-_dPKqB3jTQQvAmGY^Jy;Gd zn|Gg{^Lu{XcVH68xlQci`-;Tl1P)0}bgV)X1#ytd@`^l+%2r_m*kqr@SSlqI-5W)I z4Z^`9i!@QM!|*$FmX5OTuua#!jA2tbo^-`klulYrv5*?Wk* z#lLi`*Lx_x$m>d#6Zg2XN7(fVUi57R$MrvNm^ljqOy~k}wWJ~t_~_rYk-QTe?@V1T z6YjQ?qZLN17uQYN51iq7qHhK|!&m2KurP<{x1Qj@1W$aKZ3vnK`=xSd__ev&-Z~E; zv{L=yBj~1Y{MuHifp?oCqCtYDVP=^W zV;#8iW7?;uFIWH89F9_G>eK;53u*^!xwiaSb~Mv*^QGu6%D<$L6;KiH^C-|%{*52r zY>x^fz2zT4wc###(6MGB(JuZ}ix69SMfYL5W@FZU5nZV))bnFPAh1cC^`CKoxgYbz z{hhXhtRMxMv{zw1A94jWZN;Iusm{T@*Hul+=`ya-Fn1KBWBx(qzwybQQ~LBx5c54} z2hL6RK1g(;PRgSYYlR=`zNI!iWV9O#X|o zk)rNy7*}T62u{voC5SKg?DxqWyc&O&9`%)5bzO8)FZx|kH;=dATlDiW#GHD!0(ecJ za7Ui=JB*ddM`D+G%_Y253Hj9y_h!5wkEPC&<^t|BCfDpwjuYKI8 zM(P(mY$VMvTa3ZqSOm2c68-qE2ZpX=Yp?h?T5+ImCTic?6qErKE~31RSh#7kNOg1< zF2tp?kVx1>F-bdd3R0NZ+=`%;^blZci!P2E$33pX3YRI(S0JUH@{`#Fu!~wV)?*IZ z0Txf=qPsm@`DL+xW*kUf#QE%r$E;0k0EVz>=uH6+1Jh@&IX0T{ZoSpJB5SFF2zGBy zZD_ZFXgURdS+wvXwu;M{*9*YbkJ%U$_uNQ7pTJ@rzkJicF6oRht|{HFulq{kYfo`6 z{I!N4!s;u+7(tvHtkeobe9EsRV>yxi=JPCW*GbUjl{j?ww#vVIj}q8DvA7bdUssL( zU82#U-R$^Q$K%JcER3DJIyDM)UqTEykYrb9CC3JLb=SXYPe`o0AV3;~B4(Z-LoVsI z<`f1X&T4>r;7sH4%eLOO0NK&h;1slRd0`xhNC>rJ@uLLn3fHlZ>Qmno+$Yi=hK?N2T~(5qtDvv`uI z5;q+E z&AL+~h}k*{Lrzm<&54Q85$vjav)4i>dzEMW#Nej~q$9f8qY+CibN*m9RehE2q-HY2 z?zw6M9>;=~O_PXBI6+8DRhR&dkE!kjp67Wp7F--6DRSGO{^4$h!%24UhuaBwy#m&~ z>i;H5<>XrvQC>v{2;J0!oO=vd>ne&k#W}w?k;X$JhhH^46>NpRbw!i+P2qyPq4v$# zNt6$YfY@olHp$tRhGq>?{3%-qsSy1!Zu3MsenOq{-Lbb)o4b$ZT0MW-O1TU;x)Orp zMUc9<*Q~z#^9G}1(X?EDE)q{v6O|zWd0=y@S!PumfvKZRi;*mdm}A|PuIH2Y`nEX? zE}6Lg=DY1FCbb&^-iF-By%on-(;0p>$h*v1R?J&WsJ~jKx(dZg-jXQjfwpX<)ujWI zn=Hj;G);`y{Xf15vtYtXk2?rc|0F`vm6z{qV&5VvQ&{cOqW3vdZuN29n)IXKZ31is z&u`8CSva9vi^p%TvF(F}2CDF%l$3etc%sE)O$mdl4?8i56Kg`gmQ;LB z`ZMfskOelb7rLPbKw?hsIoP&FBrkZ}RVc16ibs7DE|*s}E?*S0U<>r5(yaj1KBO&Y zD)edVTv*brQ?R%k>Qlxz31-3EfD%!RPmp~)W;HI++gI5Tt^i;5siXcYu8da@b#x~J zHw)Ywpp%@QN+Xga%E>bv)>T3RvD^@x2WRWm2N%??S;cwDa&}q8KhdVq{EUDI2B*uG zi{$Fo zwhViaUw`gQ2!*k#hUIwlz9?efF$i8eT5-PNdEu+I=;1Sc6DBvzZMhFWk(4=#!@E*h z;l^(zbhd%NBlyMJb4H_1s*Ri2^x+e&(6>$3&b``ru(U3spK(H*o&^^tGvqawPqC^k zgS|50u{j=21DM%G`QrLemiXVf*wjAjZeC|ycI_u0r&wm*MFH2$;18o@?pW18`K6m`w$g(NCA z5|p0$UO@^2{a639J`UM94vZ=Uv)9>bKGK)7THPrCW`;$n)(u7KL#;uWur|V>i&v=C zSz|Up-w-OPS%IMN9pUx2{pgCnZw3lr^tB{S$o%*>vd-rEV$aUx!Gtx0h)C%1fqrpf zn%X_)0id}lzxBL=+L$6Z`730b9gRlqG|lkk`{;z$WAaSiA20~qG30CEw%p%Ne6n2* zPo#+c%P!$MHK#;6aQn4c-Hpn%U14eJ68OYy%UoPc3qifU<+w z|H_VxT1X^If4{Szg>9wqVqggoYgymQ(C_J`0WSgn@X5)JZURk>63d&6x47C|qsGJ6 zzbTX0N-LV`lw)E~I8$WeeHPV;p&`MlnaQ=Bbh*Ql8MoVv0L8(nnu?qNrwA=!H!8S7 z+_B9$2E8XdTENcO`BYVxbJ7Zg^VrTHndF1F21d}}`&+|ikl)7S&5~j<0G4Oh-iULE zvty&FS2O#z79ihYoJqc6_73R#-(j&#o@_2*M3X;dks@pXn#8X69wGYho22w9AT2*V z`N!GNV1eWm81u3MU`q|Pnse;Hq!Js7n*GKU8`!-36h5c_)ZfRfn-_jIep3GHF?$g8C=DjKE z+B=?Z?3znU?{z_wkn6UaHMRM5&EjqA>He=|Q~aVL9dI3? z3TrYG2-0 z4)%nK(2uMjb{wfQH@p|=gxmWa**bVF(ncwpc2oCXZ;v+08oqGmHgZUmFU6-VrqV5m zD}|#Ei-G4|$d4nyI^v>z3fDBI3)9qCqBi`Zr8OLmH29gXcF=lrT46S+P1T36gWJBZ zc5UphcpZ_PMFR{m^}M!xDH2ES&ybj{`~E?k0t4Uc6}Tk{^MmplA;zc~8W@>~Oj{Nq z-g{3XnTR4O#@Eb78hIsmWUM=4as7z(WwKgC)BE!6Wh~f|vDZvZr)Bf#U?FV`B3Zj) zAF*1i*!kql{Ha2J!K1YJsFsw)YpF2R^4OIa*^?A0#bU^SP?o(kFZj_RM9+4y(dsMS zF~3BSV2ZD0Fb|d--7FfbC{=hp)4KI=$Ah`quk|uJBk+-{%a)><{=B8sewhfU5AT^? z9DDZ~fr3**e~V?)YP-M!RtH?IwDI$(lQG73NpO#clApr|wqs_7y~h>~W!84+r|MD- z1jBSSS%O%h2XZHs}=XWHq0KSFMcA zoOnXZ;9=zg125f%OhaCbi#Nz*q;X(NQVa}P?lOaXnWDtajTzUg!LWB5Uh})ue)A(N z&JZ80xf1thD?;QcIqP>Q(7|*TT7lVk!vyf?!dz9vE?NhY6t4=MXNidi6Q_hbO(}NH zmexHKw-8uy zhINz=Oq3cCfg7$6rQyY}M8EzY1v8+kX zZ_uXuU@6D10vW`&A24hbIiV?sS0B1)Ek1!N`yI@4>59ajd=Hpt9WmujvoDNma14!* z`qXR|QYLpZC3L-Z(qI&7jN?%To)vNTG{TxpG9_bZq3q^V1L_~c6)t!xx2D@S*fV0& zjj2xDN3fC(slY@6TOrMZGUu(<5fqizWS7sN%7suGkF5Kk6A{(%JoYOZ-C*ZM*Ziju zTegaUCRWW(_gt0O`q3aa8H?e|2b*@;m)YBfQrY|sxC1|99_YIZ==kZM=8mS;1)R>_ zRn&pS8hIGm=-C8T?JUs1r)Pt%fNe>UFF~*(^-1;caH$Ov!0_S+Fl!b*v6t$DX#LVU zO`+w3H@$=56JtJU?%j-zwCTH#HC+~B|CMwd%B=1N9v#Q$NfDG)wEYB1fgPUtmm@~< z-_H?rlYJD3mYG-S?r=bSRh7z!Z$W~HY{cBJljcYR=69u-ulJ7$!Q@6Gx2i!bbjd+B zyu>|m^Iacs8?~+tuqmrFg|s1;FcL>z=nDy7T5yQ7ibe(INU)>2jwhAT^}dLXG8IL{ zBeFUV5kw+0eTfYljC4RD72L8gHU6_3tpUUKZAwY^yYgEhMJzQp9%S_NBMMeO5h=kx zD{-p&0Glfe(TkUvw`qVgmDo(+p-^+RL~lO&8RSAcw`4PJ--M_Yrt{V-7oNN zVu>(LQBg{Xr`>>!m3~K% zE=tl&~^CtDB?3}NZqyi#WqX~kE>PURIQ#-4oqMWRFkY8RRu6KLHZW@R(5 zKSs`fhm9UL^rQ_>W$e?L+oQh;AAxc0k*lNepQ<8=$AJpTy>Livv;y*WXOyvejLOM3 z5CUyT;?1m04HH+|UXLJUzx0?TqD1WfhN;;sL6 zIYcFUUF)f{b2BN?>#iB;pWd}6A3&4i<dVrazpJH=fD3so8NQ`JbH&*1LG+>Rdv9f(-B#xJhHJM$3Sc3N-gdojXY+jfFY zw;wtvHLnjU$*B%g%J?M^*yz2|^F8{y>kckNES|I*7CE{o59jOUhwdBw&^>|{eNr*5 zqF54j`K2)AK5f@f*#AsMt3;N%)>J<$kB^zIWsDACv!*mhJF2;167}_QM);!jS2d=L zWk{9jR)SD?;bVKr0X943`GF%BOl8h;B{_%&mII23E)ZagIQm4%tOCfj41CV+D#xP) zT;%~O(TJzEx`xaBO#Q@C@qJb43Glnh-fq%;{1mRh9!>0St@l;L-8c>+)Kh7f>w=mV zftd|>%`N>&l?TJpntw#(;G>j zvUfX#TF#09lVS)vVCkXo)=b{bJq(Dhv*76xc z9{Z=}<$TzwGlkk)5Gc1jwFi&^<~{JF*vl05da667ykgTwXObs2ib#|DR;jflCOa_0 zEJ1xtg!6t+LoVrFW>7&ENII9S*F2sMl0KGDQ2MF(GRkf-H@M$b-`|2-+y zLB#{L(|W>JjSaHUI+=qudL%Q`j@h>LEDAV%s9h~k;);5Y_K}#e(o%I z4yqKJEG8sYYdyzTm8hC+ri3g!9pU1WF<8+ATma>kBb4hi8T=m@qthGNd@F3^6;^Vg zNoJOIUEtW4_nGbWK%QVP@R9%mK>fctX#t_%aH^J5_?Czmh=RL7hCyuanFr?;mArot zjckqrCC4QY=m&_EK6zq(uSu&TIhX`g(c<9d8D)@0YOfZz%g~iY=FLDj#$sxMVH|26zi)}7F|8$%JmrIiju-GX-qb%r+0aC`KBsEIqY%VXz9re{DD1D<`Ox?+V#@rmz+gS zS`z{&KyV7@x~hwJ+88FxZPcqpp3RcDvC2B| zJ;tt-*9?BDRCqWDY_-pfZ1Oqr9!}7o32_$0< zK1T(n7b|#;*5?FC*@51Q?H~1rxT6UnT5L=LphTLU^js zag%lD+yYz_awR-#LkrbL65Yhzh}(CER?@10$R(KJ&;;^?hNcHC2usv z6O+#~prDH!1BJ|3DAhjSD11z%NfI_- zlErCDa}kZA+65XcIs-H23GWX*`E?u%CuuaLplAPh!~k}+^63wkI7`Vli4TfG!^iTE zI_jjHK2KULU~~4{poG;FrOFgwGC%r$_IdsyKG|RL!s0}F>T``)e12U@d~1MMBeF1F zaNj+uY`=Yo%(xQ{aW=IH(i$U}`!rDUhF+`x&q-NnxUIghD2>sBd-wQ{T=#x8h+~{>iKBNz)DV=u7ER#Wk5NX~upGPu5nezXnHzf^L(t~a zC)PfN6onf)zg-X2qU!g+Vciwwt5`)-3uFE(QSFd-@!vhhvAsAFo^iC_Ync%c>VVC~ zwau-)2{(lHv0Wn22#c@|Le`)WyLxk#UJz3Ws9O09eG$6Z9*JPWI8n-ghMxZKZF}uQ z-N+^_M=mc#S@99KlV=qgZ*f!WHBJ(w=nM5~UxVV}dr!Wg%f6tL);>Y8^Cb3e#B?eR zyV!WqL}>arrr59ZJ4$zpQ)Z#{Pa7kl<^m<`**$?%a`douWB2wi3=!2+*%m_7JvQ{X z0TRIo>cSgDW|*Ak4v>xLdwo^J>#b=2ESK&xZQK^VLSGMSODAyfvsOnOjyR*iZdhsDUo#>tDY!hza*QbkYk@knF?VG@tG({m zLL4ZAO!cx5fWlg)77-m~%b)e}G`9|4JEzMVyVl;!(H#gS)uv0)Ag>`uCf`Qkc#7hw z7`M35P<~PJXKBi1i0L;)qFiUYilULdS;cJ)##?L?LE+l(JxPRJ)V-sU8=)6BpgY%o~UjoaJ)Fo2D?hvbLKyh)VxYC%|lT2 zR0-pD;4+>V%q8#G;^_04?i4fwng}NOWW*{BnQb6E!q8e7-<;^lQc#c88)K!fT|_^9 zJvviv{cn2qQofqrqZaiZ{#B;8B6%w*hK0I3n-@&b>_ej6!arwHqm2r640~aMy~aL0 zh}Y&IJq0J64u-+!i2x?^i~uz}39R=&=bXCV29P?Yw;Qc;IgF=f4NP5a`Xd98IJ)9s^Q z5B$&Smo78T6wN-VL39Xg!6O`ow|DR$o4i&wcuTlk*$3*P|&mnH$GvX}i>W8Kolr;-X+%UNWq)2d9>qQEMuzE1<@ z=coRs?#)cplJeJSqsoFH`(Tp}29DzXn5a>kPJLPb*?jU}6jWPJkJePymL?Fpj|eM{ zW1Yas3bFleGOVb znroWN#l-$;{|Am$izz`HsXOW^^(NPNDq=WM7N|aQl{6l}Ad?z;OpWi+x5xNLg479Yh4MY6ANViJl`5;j zl}J*e6#rBCG8CcKG05{%9dV>WFC5osJs5NHR$z6__{w%PS`#&pmUvoAPkbgTpwigo zJBd!uPV2`{d8Dxt(EaQlf(ZLGON`LCN0QHak!oT-IM_qe;JApNyn3w zXt^yi5kRMOBOT^XbG&jl1H^+^so-Y-+K84P=4n{?2*)1?Ia5UPY^cabMV%U4(*0lsXQ{^`;ZbbbaOO8?)(iAZPq*WGC zrkAtPXEXOMG3}L7iVh4_Cly0~zzc&;?L)LO*lzy5a@c6Vz}3OT4`QMMC*JOyD8_sx zgl{HG#5`8NaYwe_2^Gpty5;@q&%!JS9lmh^MA8-H2x#wv$wNa*$BFER8^L$&B0)d> zv4MTKLPiWpeJZVSmngd0yEN8=P&IP37j8D{+_Ra~UkYpGQQzG^GX5J*x`8U>Xmdu~ zAG@0%`ifu7G_D}|K9;)^K}jD|$q@81i7Fw;9ux&6#wm8lWbp@mKj_}2%LRODm3CtH zKG#C)c@bX{d7QDE3{(jxr$4dssls0I?JUHUUw1M8P_kgEA1d_T6v$;<24`1Y=H~p-nT-vuehD z5yFA$E_Zt6IpnI7niRx#H2dO^hUVbq1|Lr=g!o<#z!BMAj%F|fVkKuER>12z)(*|J zp4HlfJgCmMHlFDGJ!atNynP6Mm_hVC! z!;&Z~cr@MDjY(VSV2J=T$NU5{UC_cl#eOBkn&(;F`IT|`8Dcs{q~42{!XV|1{6;U=ycF=HUN1|A-MUV%N=-VkE<}QJu(Bx1fl9! zmX8L_pZJY*lbzAY8d@W)QSo*~=T4#hn1# zw{N>6)IBEhqEK{hP1ovyVX`5Cisi(@wu#oO(m%fASMxU)dK(AB)u^PuN;h7gse07( z9iuJN6U2mX$&37xh$^)gZj^vU@3wQW z>bDtkvl}EKGQx(eyEQa`o-U~w?lM;Fka_gt_D$aMiPUp9{ybH_JuiAVi#zdq*l2)O zU|MTK%iN}pj&g#(HQNO3-fx4%hHkZzAOhI=8i=#%sG*C}pn~yj%`%CqH+%Se)?sL9 ze2`%5y<{OA-1Rr4v=-gc#1#Q8!$Yx5Ul_D+Z6x)p0W|KWOfiPVz*g5gj6;YE$UgV` z$WW9@yV08qZ>z49qz~?tKF{$tKrKh9=7WMU#s)$*$taqc;Hlf%7Kq@$?>%%Qw5(if zWkc)^uS5&npe39!TiN!Kc02qa3Af*$UaWrdC#=>cs2o^ozkdRG%MUDDWZ4{s{kmNZ zi0Fz630>)PbC_XMpj@a@>2@&S&D8E;29$2>`wvb&`q4Wr7H_=hV#RkTn~!|4H+e}qdZI0bEP*H{Q2v-MaQ zs&VQdM)(l|@^&iR)3+-LD;XL}G}PBZ+^ouuR?_oq%8k?|jY%ZUkUl2tXh!m_JITrU zyeZJuFzR9N!)Rix7~Q&LlBes=C@yr)5b+ zX+;nSs8nO~T({Llh!=+;r`$1rlP2$xIp=tCGwOnCy z-nIenefVXu!rzoX+30eGm46={BgQG15!0*@m@KFox4(XLD;DN*h&QMy`O9a{J#I`S8jR zhn!Qr+IrWcpi9tRB)l(3=&dQH>xdw-Y#pH)KJ_`5#^IEe9wT!*BGJ1@6D&d3P^$ip z8azD|!F0A)LI(CTiN2WmNAI_b3Z2D6(HxI?r%jtSW9uD_vh>w#NfsHhN-&hzzzLpgDzy zEdo%ct!PRYp6XVE7#uHh2s%BFq8a;bMTQ0wM-2L)bt`{A=haXW9RX^Ox2GJmIj*IY z2QAB1it&8Lck_}O6vRp+l}q-Rx3wB3WxDRnDgu}>xmL23*|;nFo4kX>^}xnx5Hy0j z)%~?=XqpA3$dBi*_)-#s`ey4P6s7pL?pR;h&Jj~@bmvio3bBpJ-wRz027d@B*HTW& zW7PJ{3`AhL%J+dj-r;ylu^n*kpBZa$rG7qYcJ zhi_QLQS63hGiEZiI(L*BD~prg^4RE2C0k z0(>r|0rYV&w7${%Mh4G}V;)=nbQDiggbF?Xs(?Rt)LG}) zZzOk=N`!W+@;QMGXUJ;*przm2;XV<`Eu(A?ei+Kypnx5B3&ekITr*hn)0zP426$Dv zO1l5Sz+F*w3o=`YOP59V8#l%Gg?acR{6aKZWu*f{sDZsNGnG?TOIpmeZUI1UqY4RD zmRtV1%j$bIa>cvN0Lz7TCeS!wyYZqn+W}&clmJfBm*;Gs!k#-e%)KEoJ!DC$v`jwR z)f4Q0F*|3`0tw^kfUX6WZ>!5$U}ZE_(Y{SD>e_48z%!$gJBs_9lI;TGz>sS%iO1j? z8Aju8YHK=zEg1`PY$tTvO#1u@_s0T`4mDN+jS=&N+}M0iJ(9NLnTI2OyC=1Z4^b?q zGd3beLCLq^4;~^T9c*o9T2L=?AV7K!bF@Zo&2%?Jv2vwbD<(=Pt?c#NaiF@7(G!t= zOM@DG$>}Nq!j*7_lh#TafG2K$5lIyS6ojFUjKQSaX&7WnaRg*@W-b5dTs*0vzde)k zC6>uSVkp1Z-G?B$bwkyg{TM3 zX0K%ZJfsWcun`Xz(3xs!Q28+$7{X8etE)xB;z_1$rylb9jw_x6wa4Lw-l7m^IKzXo znd_xL{8(3(k{euLk~>vf8XYl<>~>+>TiO!T+IWHEPvFaxgxxL3V1sO@-}y>g=r5T;4+Azs(j z#pF4tgMOqC@A-BG>obo?b9T}kIb<@4Yd9V^_Qyy9x!3fktq4@$p=pxg%++XU&9AG3ZR9qy? z`F`nghHR!Ar@$8_Nz)St)Lr^Hr_B7vfM*Sd> z{AL4c_`B{D-6%Kxr;Qa$=5%hE%ro+=uqtQvzwS!3+1;eq7FV(PYw5k!$AR3~o6*%7 z>yt|@n1NgmympQQEnXbGKfYS%sEJOspc5yGg-w%ON$M)@gM1(EnTju(r5<)Bj?q7F~!~iODdLU%FLSP<*P>v+-^Fs?0Igdqekk+A&Sw(WlaFTWs{zW z9ogJ|+b8P!l%!?D_F^dKT(`vKA+VqXL?BEo;yAgzR(mkpziWoyrI=6AyuYg!q`r#k zx?uljFYOPDRCh|vR2D5_G&f@x;XqC6OtT6w1x~&-|78rXg!H@vL0V@7u*3|R=VYQc z{8XAJiSj{KvQ(Y-qYL~WHH`aEbSTV4H=U^`0&FzDbk5t)sQ^$=4npUQj)zb_X*CWD zqEbKM;LVGcT(lyZ@pQh-FKUM)BpD{X`EP#awJgP4KTd!WNH=qP$S!6nf}3Qd*yYLN zfH8KS`vQ{|9$?xsFA%7=Eoq-qbl6%4igX<>D<9P`W|afSQ0%l6XoB?4r)FBbPNOCf z#*RVwDo~1Tth>o6IaqI_Ssbj#!3XIOedzAO4R#Pw!10qfo%7Xm7UdOdbaf&%yultv zY>FU+oNPN`PQ1U=`C-Y=;AnTQ>R=1c2MO9@ja0GP(q5U>ad!{lbgbEqww zV}jB-dDdlA{jmju4B2V>T^khyNaj~GIyGhrAeWJWd#wJCvXx>q;`|%dJygo3&%Ty} zp990Hn$#QRXE&lxU=TFa;g61;(aN88HzRtDr=EdIDw8G@tFM@>vIW%eBt>vFuBND3 z=~fuX3HzyAkhfb)#z~De=hu=INwJuhZ@f~0{W-roDT-&zeC+fw)edFRvPSDjC+}_a zdlA0Oxf$4jVj>&26 zT$N$((f*@&D2muoUXpA=MDy&0`D~^Egjg`CGETVh2}Y8DR4K%eIVKtfy4jr1w#{4B zTxp$p3Y?&x7KZ_oSNn@cH`pyd=7CCTF@_qGRCAq^QI)ntW*r1CimCmQJwIBCsEay- zgH1Xn@YNTKpz4-B3EB4>ddj^)m6`W^r1*)~R;A7V!=+T;(qC4jk0GL_Gv{O1hyD>4 z-|xjJ?0=np&ek@L$z4I30Z+xKl#CFU_b260NZ(;GDz<85NUC=dE;BBV;o>pu-T$&yFdf^$Cm^ytTLqA%$o&kI0#ygFgI(p{(QhoKJuy5|IS`b6(? zb14z)uIPO|4e$lqXmyOQ;Ll|tFBd2Dw59lxdJVYQzo4(nf}2|hgCCo3u#KHgV0_4y zl$o(2`nNFjNZ~w%*7Oip2{v$5&Fe$$2WMUQi>ju`yFW`~!wPtXP9m$$=f3Ke!+`)C zN_J{-KTu<16&qRjG4`QIfIS)IfLTlKKr5C0Un|cEsN;g6e$Smx(OxgClxQ{)%5+;o zKd2H26L|`^!3Pn~&D|1HpqnH|StF5xz^Z}yX$=7(UgbwcM10g@d;T&mj^$5n3uUeaoPXd5s8yP;Y)h2_eUkYu=DE43d5FArWKrqTA-D=||4@{G^9%}*LuHgO zz=%?sy#Y+K^I(WCG<^GW7sZAM6ytL$VW;!2&W=h;--jfCXH&&A%DYwDy#%nZx!6H*5dKMOq>lx320^V@z|&K%D9SNGdKc51Sm zmZEK6`7!TnBj*rz+^K@g<7fs8(rp(_X7?$ND?vWC8@w#a)$MOp9xjA%oSLeI-pc9h zhIv@&EIO}W6rqKZRqSDy+Ts0Lh}<6ep8C0OVdcArTHh@1qJ$-ld`@kL2F3z_}A;G8pjrQr?r+y!kIwVca+S<3?)#c#O6rJ=Hw!gJd zh_C($gAcM7T@6j@F?T#FBKZHn!pJvPNG#n-plJW;SIp+XWV;L1A4Dt4r z0Ckk>WacE<#%muXI@~4oo4Y^CqAtjDy4Xyi-Cc=R11~Fg+{6_gI;IG5+NF1Bg8bayuy7Xj_e+>%`NEETRrZbUXxn}Hv4!(%o=AeVA4Xrj)yr46@ch8Bq}ZXEet<*^ z^s<;G-G;_`8fB}s43KDbNh(Ai0?PVd@^GjbRYvL&qnv!8xRy|_8l8t!NPx||3~BKeM?h$(wpumvhIE&eV8ALf;R16CWL!E zZm7lbaQ15zG>5;S?3}D1{fZ;`{%Mi~*FX*)(6ccCmEQjh$P*~lcY)3xv0=67Z4l;1 z$1ac}htN>2L~-^RR;533FxA2|7pX(46EC_M(r zu49iY-p@MkfI%THjoYSG{M{D@uI4CJQn9j>-QeD(xJnF!Qcu2O^x{WJ4bGH^SU54; zdU9XGJ$&Pnrw3`oUxo@;%PJnJf#ly7!#Q@KBPFO|g3;^qN>Z}xShajm+B$gpC1ILA>s z{rZCL@Mdx52JBIP;yy*^J?^90RR;q|34a=alE#h%3BnZN8x)IL=yF~~-8S?kE1nD@ zy#rNgY=k^i)az0GLkus0Mq0$J6?O%P<-FR#c%bKpu}aYK@K$Zq@|x-?X@*@{UbujG z!HrLq{s&P)JK?(2xxmEeS$5en?~-15MMH-{SFt(81&w7sA!J*hgIRN-aE!9<=9T5h zXiA7&^pjYpI1$i&by0G2;*01Jp^bS~GsuivNqp|<{lp=`*?UJnhEU0spg@#aXD z6(C$Yx>RWwXM}Zi5r}>BeO{B&#G-_q<&YaCcZH#9G^td@qZ(irr+5L5>yiNW%iq@l zLe*!%Eo#QtwhAhB+bcft5*lh~8S}wZ6_)?pIAOr@&glHi>pW!fHz@sa*h2_nB#^_B ze>4Oeo|dIMc?vyE?a%`f7Bln{m36|m!XFf_LWZyfS#?GFTlmT&MV#hARUb=7(pOZh zeSQSg`nWIDDqM@rLd#8X15vBZjLm*NWV}hxajXQrD^SY{_1NVwNpCl>Lt$$4G#%!T zbrl4f8}GMfT3dQ|Fpig8owbe1CFmwbD?}c-%&QH0FMg8%=CzrqjH@Q^s-#x-*c4C2$1t;(stiHF7mb^~@xgVml7 zHnv-=h>qaLtIolLCe|K0&pfLs$3=!%HqwZ`sGP(f8OBJnZdR{O=F3IUK^L8}IJ@Y% z8{+rnqlRr*4SH^N<>$H>9hlp3fP0VZcJlogKhorOc%6jmkyGvz#_km=Vg`=|J5XnK6!oUTe zr#Ith87{;nqhupdNT4_`ZbZ&!ahEF?8XWr;49W>fzJS^79@kMu2~1>QBae%c*=f(X zge%K)tbCCOc3+wtiOXhnifNG`^k?m|wujiUS|C)~UZUOti==@#_uzUebmH-1G8yG{ zEruGf@OU(B7`;tN#?7K=#)=+c?O+l-j-?G3ojs7iRrIi1``IAD8Gxg@8e33oUX?iu zQ_ILo8KUarR`5!i%SkHfLp+216E{ZGatZI%M=(Zfpd!u`XEypL26Uuq^c|%@0-j&8 z;|+y>(Z=@ZQ0tG2$2_NGW(n=SnCPnsO$t-NGg6_4rqo+oJ5yRl|N7#GODiB-vobka zQjMi(WfO`mMpFJ?M|2Of{*@hcd{N%*gU|2DB9DsDJZLkzxS8_{h+-4P5(lnMV&VG-c|6cSzTsOd3j#Xe%X z(Lf_#O?j=$2I=f!TQjM~_6Y=-dj(<8m9xbgYUulFB<$U~{yBYL94G-_A^omooQlnx zKm?A)HT8S_XK_)`5myhFE4yCKt>V(YJhGJub)4fWeYTvZU?}ulqp#kd5RUveh(KUO zBsbnEqA|oPLqiFwvy8s#bxcob2(v4_u#9SQb#ZKijo{0cq2H(p3nwVwpF569>KX-!oQ2a z6EiyH4un^>u3v4C;PSKc9JI;z1{D)Cb9x|e{F%1&Vo;eZEc<)ogiJbTybA<&(s>Lp6!2;vYfUbaA%nJLLa zRYvv{Da7zS?)JWv#ARn`*-7Dr0z1I*E2=4XXh#q|QO)##3 zahaHiR;xL&0uXld?HkeN;z2KU*}x=C1x~uaejHab3SquQU&@4jv*Xq+f2vc;pKNRZ zvmn7zTQ<~Rny=6kN!>2IX!6r>voPB94U03~8Y$B8#gJbzuujH!yNfRpV}(95h@5k0 zWPtvIph>GQsmvP5F{M5o{>b?}c5zCs^Uoa)Z!lE;@Avt}DL)U)EcnDtDxwSM6zl62 zQ!eQ!98)Yghi2LEGqVa;fn1#QL(nx{#3KW7;`ygFyLaFniE&Ln91iPRZfDExYFWwA z@jUayG<-3kn`uz5(;88bM;KhEwd$5MiTf+s=RY3f7it&ZKZ;#gSo?ZHO{rNv@3s(6 z2FfvamSdTmw$#GePum{ylubD2j-a=pyUk-oX_{Qkp{ z8?sBvN_z?o;*gY+Dyq82ORmwIbIOgWdQtlakDV75(0JU2vVT)CVW!U_T%q*oYuSm@ zpLDyOJxkl0CU!wxE#D?7s`s{^}n5wi8Z0J=nYN%~srn;s!4#aA< zM&Cgza1ds(WO$eh#&O%4Y(j3;ga>F;o^!KQU@++;|ZC;XInpM5FN4Q$V*F!t(!g*ly{;MacdLdHJa9=IDBg}sMuU! zs`S1XaWp({(gk4n_Oq}tPiLz6UNUc zN8#Qg`nliuf3vWKve%x-OWz)cx39t%f3;bJv&~lXteI6?7*beP-Mi#%A5XnOlj?Q# z7Pz&A9gILXAmAc-+!jo?M;oWY#BAnS6cg#zijrN40~7^!V9>FLnu6;^g8YJES(z_w z@W*EH_jh$Fn3!&)R5~Fnt<;G}lro?G1zq~Et=Sk3w>wL~{z8<1Rf+HxE@3UwbN(fa zr_x%T(V$~_2<;Cy z*ba25-GT+u&MoQxAI-c#eID*SzQ^GNwcG6kVNi~Or$Z`;;WKe+L0;f>cZpymEcW+1 z3w{@PefwH1AT`m*vWbhc#q-&IrV%cNumAvmsJu z{fg(2oC1TT7!S`n^E+_3@RS~_2R?zA2qm4jM-$u-iOLG`oBfVh&>2XOiBt=S%f9Lb zhu$+|4LI{X$AW_8OrtFC0sI+i%a}GX9bi2E6zPvEQV)o3s+m4ucG-BcX~AJY-aJjs6=vd_d!;fg^OdL+|A=AW;UKtB?%GF-k!wjlGB#B?o;4{+4~HXaLbwn zeM9oQ6mwZvF-;U3_XR<-ZgTv5+1?9QTdc`@YmkeXP(EK!^?nrDKWiNGkkssj`8I&Yjlj#kCttM%aAHP38vg8h>+uN2Jy~)2 z{Z`1Nm(0T9S`c|(d8fNgU)1190zr5IS7?ayjX`Pp@3?e-pxLp!{RIjq z-nV=ynxm$D4FQ3@4#+*;!+irb$_8#ghtkOsscIe5ZiC8QV!)?XJz+`*E*V;87F2KP z5soFwJGZPJy?K|Lp*$9uXu+LbinsR-gzsfgqRHg+16@GD8&Kr(2Os;XI z@-BZMG^0)t(i5Xiz9KbGjXviP4C2FS*+EJR#NoZ88=w!^L}ENsf?_vE4mO6|>$J{~&4L&5F7^YVn0Qz!!kzv=Qs z)y2<>tyS*Swsreu>kFo6W1Z*!Fh_A?76EwJZPOo0{Zx_7hm^@|5 z@r$=lHy@6V{jcTMy-n$5A+G~~L84aXbK>=@RyOjSs!^K4VDw5_ms{cfV80z_eP6+o zBqJ9j8|Lz@l|OHW7PgfOV|3iRAwdNvIZTb6iza!y}44Np{N zyePJ&>^1%nP?YE?9hAANE>>w9uG7oWs~%r=7M6E2%4BZ>{}jcZY;pvFiC}*!>bm5Y z?y4zmNY-57bFJE`WH4~3iCpUhBa*m6TzK5b%Euqx7?th z;pj_a*tp=Oks2e(_c#1PvhW!0S?!MbcG*um`GSpA^t;hJ8>f@Pc^TJK8n)2Jw)Fcw zpc15TNX2l)*!1u`k|I;Of!&O> z-T*63eA^yfw{)6DCLWS8PH)M0Y62iC6(og=pQ1-cEwh9HBfzL)r+osy#d@rOGW>D= z!%8Y9SfbtGiQhC$q44@4;sup0a?S-(r*R3Y>&wP35gNKLqSw8qXM}H37Im1OLYmP3 zafQ1}(G{2cRPpWnL79Q_+S$c1IMWpaa37IF)_~0;bm-_pqbjE*f#+*q1S%=aVh`l{ z%9bkZD3IXqHfbN+eiOSFJpks#b1Ju+DL|2wEmjgR>oR_DeL~@b=_fA0U=Cs ziLjHW28D!i!z6me9#U6RfAUJnwN>gYg=3R)8{>ClmT5sA9jy4Tqf;FK>QZj3Kd*qW3X7mE^{GezO#1l~-6zX+}`HDMrPkIQYJwGo}L$~{f8eOA&zCTvr&XomC z(lL`H?NA^BI1cd1@*ZzbEP|aNbko>bZ6()h?$WbkRT1e4V2kC5!ZUbt@#E+`3}rYM zz#Wd_{;WDkGvEGttmptd06fH^EOg!ei0D=dMcqa;N9G>S_H|&>P9%0jm{e<%^tR?_ z31^_zan%})(&ZDOJN}_PT-wR*N8!nigGF=$5`;|dcc#9_t{q_v z$BRZt1x?}w=q_jt&-4O-%&mGh@DeNMfX(fZ0BVrzVuFhC<6AM{c>$f^#U;(|z`&DR z7MMBhk-Z#_S$z|@3Z;`LvXu}SIS=;NgKs*;L%O|JbS_P69B5_V=dv8yT?)u@J)^#^ zBokz{0})x11oV=vd9XwFB#%X_XH-XCeAvz`M`_^+iAl7D6NttgNdJHg>s1(CgG?RnW#! z(_TWhXViXMWbA|hFgxVnv{xLsgs)1#IdK5{+M+9N0`B9A^-g`NaH~D{Zfqota^lyt z3}22fx=k#x*I2TOm5In)1hC%hf87TycfB$*meUnbAbi*jSsv`x;`x~4ZhAk;+*{bN zp`+=4FbAXh@@AR(I;ZaZ_A7JRSF0O>lW=ioA=g@s1ilv1amB%JYt#Wiy3~@?kY=y05lgi}6jVhNZ*&_o`yhA_RE7^-6Gv1_t+a5KHeF{tnAJW|s4l5Z+at zVR-zrDarAcU()InJ5E-}lp8kJRewcYiv4t_|E?*}6$nRm&^!g~XH+;{{or!gFV8WU z<2^jL<=XmC$jn(#(tXQ2(^W#+1;z(P_Drkn&0A%B9gW~(6v)#AYkhLsRyYxW=Qsa=xri;`BmQs$vfrK=vtlmTjSc6vorgSTmU>)8#D-@ z!5-`Xw_poLcJK&k)g5|dSJ_xs;b|yX3PQ$?+NyUru9jwAWhRS}b#u4rO+Pxph5u#3 z9WFik%Kmwp)t7t?kYTi0WDs-4(hA4&U}8};U^E#iOgKbaG)!orP7OJOiVLl z(v@7S6&@=rp00x3Ix_C$n<*Rdggz%;H#IhWr}dhdQ_#GxtR^AOeB)ie4T-Dks6VKx zCOq>mZ-E|D_(|>qTKMdfUf7Nc!p`nU_B__?YteN!&A?fx_tR`a=t?A!BQiU&7sf%h z(&9}x;o0hZ{C<-fiy2PQbtgP?P8_Ge=RlX`;u!c21W_mIfe{Y7U^4IEd)(KGftcl- z8GEDY_w@hq(Vu*BpMRUSWCDSCOQ{zl+KqNo-1^;>+tf36_BA&d^96$l-2lv^XQC(* zmeEi38@KJ6Cdm@emM*Nc0>W$N(eZG_@Ud7u8!Ax`WwuK6|6s(!8j9A>hokY!OxyZ5 zgh}G$dI;R0Pfc-!SyBT72f+}xUpB!GZ5Yhe2(CxxAoq~DB<23f35*98nfg#em1*^<1R(d74)g!x>O0 z>k9Y8#XC_<{7{-_kvN3Ct6y56E4GMs@`PQhJpJ`s=_?nibA18n{ZO4~0P zv9;bJ4=B)nI6o{8oU?0O0kdtEe)eihJ#?O?o3Vk2pia)k962c&iD_vT)qjp#|IOI9 zOPEm(uOvA8-Rc47ig#RCBOsA&CyTg_8_6CH5TD_E!gMubF@LyQj0h81^0~bUH0@r+ zQ(W!`pg@MU9n;28hKMRX!kE~+!Y0-_*l-#zZ(&6a;RbtHh_x~KfEGHKgQqG29&C62 z{V7S>FZ;Uv7ytSX(*lZm(Z-{8AIIpKV8hQs0?N!z) ze*$v{idy$mLMpZJ{M$n+dZeABzHOIXk*xC2K^)PAZ0WF~`~WRR;=L1G5}Dx1%?~YT z8MVRD{4-&2o((%_(GJ2#>9MwySuTbRoCG}-0(-nnVRc3$ zF{}Ul)=FPoYY~iQZ-MxeCk-F|Gv%>Y+&YxAVB(VT6MFZq&s0q_FQhf{*k(l5wyN$i zC~O5tpb0J3!(GSri2Vvx-+F@o z+5Y7z2*`0;*GJA6^7|I5r~(QqwoW*Xk_SG6wBv0T^^;-}8gh`DX_-axQ|gj+M`g4E zfE0f$XBMvNJljx8C_C6JjQYArxnjJa#*HtiQH$5GqLPdg`MWYd4cKv^IRd4Ur1!*a zU&`&6IHPc{*(kT)OCY3+DJeC0`pd8=D2F8d+mMSsLm$lEmAtsp2ARn0%raO!v&{4Z z>n6DyI|=iQKo$qF&Sd3o4A|^eKmz~j(wu!OfJgM(3%k{}1e?po1)tl{foTzjA!`m? z?+&kpsNpohoKFzjPU+m&5>H0^{bK0gD9^vyB>6*#=lUNVc2+q)fPfxto{~23F=Dg& zNvQPPf#mO#HRfr4IWg9`+4Nm__-XSuNEYz&#@s4Ajm*10CGKfN6fmoRrp+)OefP~MEt;Z_#2!zv;V!|rBx#|jt@~{K zwUPB^mpu$D07vXPM!k+W3FD^QdvfFTS)W|`V9EZn8Y_Pi~rrQq;+j)g=!6K1rz`}4#Zu>Yml#OF070&=c_8`-B%dcqN`JV z?hxJo{LC#61Y3uXJ|U%9C|~BSu&`f9g@<{1Bpsbt^eBZxv_I!i(+ytmot18crk^zo za_W)4!An1-Ky@LjDAnF=kZX;5$$6n8K26VnS)*3Y``;Z`8n!S@>4C(;rfk$K&d!kS z74llDh}_~h>`+Ym zA2&F(eza2S=eQONAr8HlNc zs3T*mKh;XLBR5s+_SE*|-x-}}?M@1rNO7zaWGT7RR94^U@Bh5_qH_9xR8Q4oXs9;y zt{K`2GNk~y0|60#;8WQ{I2w8)wJHfmvesGlkxA=uCgDChd?H23H?Td&7JRf_Owk3NXz>6xb$+L-=IO?p;B+RVkzF)7+CZCrBfoe8q z>DPoLBbqF^kDZEgO^YdVlBEYR-V+$`v67qmaKR3wz$`9fzI_~X^Jw1ktKql>XVa^ z0K-$U-s>KfML0N{OL8P{J3kn~{Eu~Kx2ek9&L`sQkCu@_uKDCgj~j%I@+DYOwrcTW-#5XRvy^ySa?x_qYxc#Ke9SHhftPio<|brO z+r?rg=(+G6{pjUS5E%Gkt=r7cENnFUtl5AcJ~6fr*dKIx8AtS>hvj}L?gPiUA#=gq zf-}X82hrM~T!+;1J6$%i5JclRx9**MH9oA(+ggU%Upb^0C!c2Yf`7{-Tp0j%&N}ty z2xG3u1xkKUtm%XwME33u_~;4o&`c6Nv8w!;Xja|08^{1L>`=TaDC}H=rYN95;Vt#Rc0o#? z7~;d1Si5osE=?jY%z?5MZL~^z6qA;janm&6l{RxSKjS4{68oGd73#-S%*U7D)v%cl zKuqGwCN&xGTR*B~+x!+K^{5x=OInnVp;pXKEDk60(J4x+S$WR(DG#LJ zS7L;Ibnlx)i!!(J`MQ#FMTpcCTk1NGwE!~u3?Uc8Nh%=rMNqmSj3A8HYt0E`7L9&Y z=B3@|1Y)x;+>lL^?V&*rSwjUBnx64U<${9J2l}_o69fZzCHJ~gjdWN-{F6ajBft<8 zi`O^d^AX<&Ee6#!`Ol9;oM00$NB9i*?R%_I1c(fD-S{RP9)1Y~Hi)slSfi5khGO||MYNzp3x`dPSU}eZ4={43CVT(wmKFN=P zuf*`F0b8#Y63hvPh?vDD5HDY~Y#U>kx|ookhv_O<+U6N>o;G!)Pg$yJd~-R|gfs#5 z#|`d?TmC~IC^FNX7lGxiQm$a|J-~4{)fpGkBb8ItT}P7Gwt))2r_F99k&$tra$sUR z%MqYech-{np7)$fKVz&%tka<8c%It({;JjStB@KDC;HL- z`$Cp&bE6oCO_Emm)W9^IuxADK`Df@C#bDHA4ut3Wd+UX-%A?$W!19QjrmVoRRFHf+ zxx4XkQ!Zz;voW!}q<^-D+lhO6QLjB3?Ao)n`{KS+fPOO%J@bK<%;atP-RG(P4 zKtZyM1~hb4D5+~s!XHRbqaD${_u+Z95)H%~yYvGt8dW*)Uc*xPbabr2^ioa6;66r~ zeR3EjPo<9(RPf4s*woiAN&l?8@o24x{a16{24ga02(su@~fr_Tm>PW)t))v89D6Z+3~C+5 zc%;bZXBWbdou-4QIyJ|`iQk$S0=OyG35>91W2jdfSG4ZSG?)C^>Gfi6j&j2y zn^{CAtm-uJA&k3d5tT>E^o_}#FgBvrgAO4&yJ1LjRMpB6rN%)jVGEQfzCLts&NcP5 z_R=?d#+?hK2}clr&8&~!HD@u_cLaFPjRpSB@f#Z#2cQ-lP;$EPj`rt@!!pXrsCig5 z(b@Z+hSF!{1KPbk_T9J9n7V#wkZmd%mpMe+zXF8xDQh58`ghV9(QdsGhmN_eXRYJ) z3PEWS%zo81hcqV4ra5szF<$Aw#s}*$(Z}*6!w|N-q@qmY0Q=_K_qE_yR$~&x;=5hCRBx)ay)Zgh1SJU`t0%K2M9^{vV7L+Jif}RtcbxYQTKxO=K$2 znSHwR{?8t$C58+92{2Yf?i>Hvub(8!sG_WRvrf#H#i_C-c4Zzq&*>sN}#6$MUDp;>*sj1)Ta|nkyY)>U3XUgdNLY^ zADav^B&>cS7=Ds@qWhF1>H%@W%fP7uxm}q1bdX4+LflH6=*4oQgCS&*N<`R+TnF63 zAUs>cXz$-i|71}&kz=5_T7Dt46F$s|3EqW$7bF?S9b6woBjDUjhOMACmp(j%W8#$T z*z>=rGq3y<*V@Cu0H)170u)lT+9nles?2`B#C{r*vLzSa=mZBmhm| zgK+B&Q=#IKc|lL0i=J6KbiywGP=fQvZDVG~DnNTFYb2m-HM7ZUH^7VTs&RjUWSd5n zR7H>7nldbxk4+E*6Bds=FvlxN=nPtM{_xSWM?Sh~mtw=-gVY&r( z(5a4ia^ZvMEn~Shr12qKK6FT(v-1!InM(;}2S9w?rg+`RSo3x7M@GG)dJpRrom+T& z#)87gH+;T=#G8lEf&E(-5NA7${~fYe-MzHIfSKM-*v4;`#Jga49%H2^&q_FR(L@_WMf0rEURe}F;5sD^wwo5J{#GO1q#p)nCbz>mp$ zE*yWFQB5UyUE8v1AV|ZHwO4^mM^`8Hu#UxZWyA_=a$BbC$d6r$MOszOqF2N`#n)u$ z;@@i)EXjCV^;g|im6mbq9$?|Ms@%SphY~)<+-$Y_36^uI#Xevz=$r>K5)jWu>Xf$S8AsUDTHs4oy~&!|kLP8CALS zrSWF}f0k`-z1*Z8i08ym1p@*9nt5OU;zaT_%yngtkF>&FB4&2Sd38Ll+P8EhM)99R z;`oiAI8tvdzl3zB7&0~4z}>R3Kn}<$Dpn>!_FPWHeL4(yavTjrxGR4Y6Up4l8AI-c zy-rDSQjW?QEp=0cdu2f$VvcQd#ewO!+muhw;gX^ zt+J>a;8l3)Gu*BZ^U$LR1NDc18?Mj{hS@?qQB-#hv*Hs*bXLl*bc1kCJQi6>9DoFN zk2)T2zgO`FLGFwplycp3gv?Rie=QeNlbYE(b#E1;0Vg>^k5t$-ihhhUU19n^GImkb zb2T)h$ZAgwKbI(?=8&e$ilz&Xu^}pRe^7XLF(vS6KkCMK!dL+Ophi;C5M>LwW=6*h zEhaG~pi@Ae()Ps@6s}}W`reFT}Trg`WY4iN(oB?-G0d-?iOb9!RUG0Pk zczD@?FHQF|5X;BpwJ=lWT|9y|9-0Zfg116BzTlP?!%7oJEkj&$04suEiJF-^5RB}f z9n`F5F~>m)6BQsgAJb7?EHF{O5a08adSU$MLxZPW5bIr=todFzq$VNd*Shk&W;3;!Pw0tWC;5B%mC4)l@(QgX+bvh9V)35 zjc{uou4iUa|75+5rkw+9m{Ai#|-7#bgQamfft~Pu=e_)vq@t$;y z!C|VMIAM<3e8tL92F*sxby=FkRt($cDw`01#-sfTB%-> zRSF5t7X&gh34SXfe>p>$)wh;pF`4jkTf|o_WLVaT8?x_c`Q19n)p1089rN6DS1H0> z`{_cAeFV^g^w-;SXMC{))JAJZIvneWyj_m=oRJ)1BZKGERs>W-9KU+!b(gT5GoR7Q z?kXmb8lktv+r#Ql?il-Z$<+7zo(s9<_~&BgfTfYSyRZKD%tJUX#{lLzgyCX_m%JqC zK|mZ;sLA4n?j|O1&E0QtM9-%%6i7+F3OvtU^Rh16-ShEEqN!;c?GM zt}^U$EYh8O?G01VSVI!6fQ2O}?qHe&>qW_lJl8J*gv)=7532IrzYJltbF@*U*e zXIT%#EA?s+8OTG5Uu9)=$=Kt}$8}h?OV6+o_Kw0RoaQP6DmF0p<#DLMApaeGPUyyu z1vB1-otcQ%(Wk~!deJ|NJh5|qrv?*4$mr*?Q;a{$D-Ol)=1tx%el%^hZN7ROXe;1; zxEKI1G|sLdEqD|*1>`O?4gFUJl>^Zwhcmd>#-Zj46o5Bh*kY^~+vd_Lv_vNtQZr*P zUhbrLJw9Dat}s#T#dZXhz7@Z6f#4f~W21!kwa}x*Kva_U02$Nqpw)`9Sc=5|1b0w_ zK&C2*w|+{t|N5)pYIEXe#)jVafM5fEt;74tM{*GJJReYsGBshXlEA*$(>}gYp=-2S zE-@Gl68cJ&`zh$=SlfKu(frm~3P-oUFLPE{gyz(fbx^1DYE(oHy5Bt3)0Vy~3r$cs z27xI?Plot>rsW?o6^;ZvB?s?E_>`uC<_!T6pEs$jvok8=i;w~QDGl0T`=lAlDRE&| zkS~{Em>&CA?i)=`2YRr>utqa`s3xC$tTSW*MEzU&$W#z_{r`^*ngT2 zKEv)T7`D|tmuE1=ByiL$ zpSlV4?ptYge4Yn*jmKP))q$Cfa zJ9!(myWDBDHGenzZ1AA5Gfe^qNg+0ypNpwOia=^QdIop+O9D+cYvbje~IXADf|5)??{BBlpHhdks=e&Jik^fd(I6VaVloF z!0*@Al%F61e<<;cjor3`gW`r1f?3{g6n(NL%nyTpIbJ&F@D2%XPUDGznyy3o=$ko( zp#JauB1=m7o(%wq^86Uw+~EJC|E8JPeJM4!*1!)8#T<0pPxn-Lc#|BemRLm4u_S(b z8#D>@erP1AtF&P#6qys&JjW2uX&@06%KRI|A=vS3(~?T9-ISg1w6#8g`!=5%>ajyhd}*36k7&y;Y5&w6lyPBy-f2*@zcz{wt^uv%BSVy`%;3=RKKRH>cp$&BMfz#j+D>(U{K%?k+NJ zjzf8Yk%A$N3>c`cq??f6FJ4L zwPc6H-`KlJ0@MVG+Sk`*Y*POh*nMrMPqkN1ZWxCSJP=0MynqbG@u;gRD<@$#tq;6Wi?R~*iUC{ z%bi4q`Go2b7C38i=H16IG)W&62PLzK^_NfXI2h#W)@A!v_!QzwumvG9b(Q0-Y*#?{f1~_g_7DB ze=oB&U_+|-3jsqG+#haAMnp;ARoQaF#LEDT-mNYJm1cTL*$ebT+A4>k<5Z-XA+m`t z;=u?}&hzshYH8*&(9@l<)YOw#SasK$ zv{}0RD>80}N3Y#UV%!Wx@5k2biL~EMcX(4R3CeapsP7XH4Hvl)@nY8DTb6hSK38Ui z3vTD(ITm|9FCtesK^-;Nc!+*Lk@7qB)LkK?Af-jcv!|g3n61=6C>!1Q7bAaN)_Zxd z@wJYS4Q@5b_M#5C7C#D*mm%(ua-Hz??s1p}0Y#9nM6R3{-)j_6Q$WGYHCeaHm_o|B z6%gj-&0kK6PrwDdt&>-4Jz_O|(WT8o$(6 z&z_^6iNyG9(_{dBinJQxr7xQkL-HT9&bL_1nvy*8bglYpv;dZtfKEF~jPJIZh7Q2W z;e-_2K!RQ&9e;UAK(Mi_mGj3RzIv zNG<=o8k)N%#;EY*gbZd|afqj+emQ^qQ#FO=Mv`t8R=-dwh}wnP`;fimZFIpPT_AAVd>nX%RG= zB55cbL3`>h&a+gEiTiO9^6acO2U(Q~JjAQ$W+d^+>HCp}0x4=62q-kxdZQM8$570) zAMzn$p*MQWdXi2Vlo0W@HB1_!yI@7HUDQnoWVt(kaXbs9eRr9$YBZs%nR)%j`>5}6 z>>lr-IUtS=X1^V==?#!oC?P~bnu=Eankxrf#jiEsXbm$xX=cq(>xV=Qi?o8OZfemFCKHd8m_ z%qyduE8bc8C8g4TdPqSxF0YeKVco?w8bV+jwA@HWGH14%K}5pvBb9kR95C1mDQAmI z5{FZ?e8>Kx8Oo+iw+xcqRRFVf8qmcl(JE9L_dp#h+L%OG&H7`WIbv1OHe0-~WWXW) z!W@E;KZ5wjYMd361@NH3&2)gRjm|8s9!!cxP`;iKjL>y0p>icPu&q+El%D;W5C-tr z-R1-0g(5OuCQV9+a^v$J-JAioPIp%9rla(_r0>lY4tlt5{fLKo4Kkf(-K_SZ3%m<$yK#Z_x;ReQ#?fTmqhiR>QyD-zVIIA$3 zs^6pQd*d8D)D{7hkvzpKH|(IR3;4tkyP5jrvIA?mIBZe5B~(q?;`!_^aeAR@4A)FX zoKO}L$cEg<_Y4|^|Jym)jzTbdcva$IS(k3&+7g0(27*?95W6(i=I3mULa}R(096{x zRNT?LX+JzHcq5i6>seqkP?`Z2{s zSxbGE$K<4OAw3O${0=z58{Q+T=jPhs)Miqqo!4+41r#p}hKTf|e6cuT4-(PMt~E6h zkZG<(m+-YwK|)Gp+fx#fp15||Qr_H9%cj5ny+!@lX1T;+-yrraSrg^ zh5)hM2}`0>&c$&z#F89$8eNe?>rI!KAc$b1sU0iPNjOM|d{en%t)1BIFs60sMHy;8^-=gPZ zefasm4svbQbm}(t^sobXu|wAVyg6be1+-~hMrSgb2=a!=y-*)r&Oi3iaGoI3l~jJf!c zZkSoMF1g9ViNpMcBY!J;A;P5HD%Sa%x(G0(wtM-Qc=iR}XMlepa@v=ljzk5(qwfFx zq`cs&jKV8$cky%T)f60<0c~6np?a}pttofB$xa7*%WLzc6m8T5r0`FXs9)aZxdu+&I8lZ@kQ*e4XU>UcV}uyE;1Hty^Gu7! z2c&jmrm zoKW%8{|Xxt+%@ghXoX}xi{C8&yJ@hz(Gz^tM^;PEOU!8&J!-9n4?-T#QZ|pgC5)ip z2DV%Gbq3s?ggK?ID6{)Uj?Eq{%=>ob7`!-akBDTt4PX(vN`tj{SI@!HR7c9gnf2|> z(*PrW!97mj_$v{%FP_yLSCYPEZ8>_j1^8dIvu->kaR{<}fIwD4Ul9iMwv2T9L6K;a>G!nFd5qF zNa>Xe^`J)USQoy;qil)wT8(SQH#BNKRshyJr$Li0@`p+mQ2GI5{*;g>1#?ygDkIPYyjmE`t=hk*0 z5+1w-|Mp#Qac8IzTo2E`f z4K*}xQGKwaAc*9&C@4Qr5g^N*9R>*ab?c}$)P_vXe%a#lq_-|(yMuab0ys!pv#^r< zoeYrf1)cR^9Kz$=l)ngk;tT+41@xm+z`JjK?g3i3l1Y0(FEhq!UcU zjVfiLA0xit3^buI>d=av>ppkNg3US-fw>+VZ+}!lu3X9`MA=im zdYq2FAPGq29|3$bL{w8tpI}1MrRY*{I2#{Wp2_nBBmG_x()$#@WDfn-dg7X7uMg1K zB&aRUk(upQ$J(^A;mcO-5&u2E^#W618H&xGN4pqMKFL&nbiDxkzUR*`;6?Ci^x<;^ z>r}2OiJif73Y%d58Umq+c3|Xcl-oVI#RC?F?zG8Bb|N@gvCd4`dG)FXgY->0>Ub&3 zOM%v|l;cVb`8{#7{d{PGkVH244|1AJbO#3A0mSfDC?91ccVD?6*qxi0(p1*9nN#V2 zK)yl;&js_-mo>?X5Qz#B63s|JHmcaB8U7(0NG!!y$_8bsWg=9-y%?B zU8pmER&7b!@k&!2n|`_sdzha?Jg}%_VKw}`yD!R^v>_E!T z!@KFN|Hmi&cC)-?tgCMd=Q?%gk5S_(6CG-^gX*xAm^yO8+JZ1q?krdsm|!FoT#ziYrO ztOt5yxfo6}#Oru2)UA;;xo8adM5(7yMI>DhyE6I@|B{77&^5n&|I&pk(%pN0>y78$ zP1mh9iFHCzgbln0;5L%8sU^Olsj6Vq)0JWn%ogPw;j9)?#e)Kz9o0m}QM-%McALNa z;gmu1L*DjeA_UQdIFiY=NC>jc z&QPgvP36hKbvVE5sVmynkSYxD_`{nj3tm)d93UK7fJo3VROaD9c{Nv?tV8{8x^_8} zV2+b%iWQZv(toY3Pa5;}+0hXSNxt988+*2?t|DPwmAIkk;6ix5CgWZy(CE0HJ7EqU zne>YNvplB&q4$o*kOpw()1!@Z-vNXTs?Dt_IpyqzH{M$hsqP#S(yH^KGf$F-V z9gj1?1v1;cWVZi6i5ke#{PYAgUY{_JXYa?%@k6MjiQ)d#4Qzoru^T{900dH4H57Jv z%&Kw>x}WXNUXW0e2^kBt=amq2g>}<^B2u1bNkCPH?Gi~BOd$xun-s!QCG68wxiWV~p zA*HVCR#di!Fst;f#pUxKe1pBkOZe591AOn>bu#s1yD?MXrj(AT7HoT2a>`l$_NFbd z$_Q|`-!uP6f~Vr-g=@$7Myx6xcXLzQ(1O@9*n}mjpaCEVHoa>3z0$^Vm$I&>_C_i@ zM`3c#Ue1V}4($1>-nh)ygCsm@UeZ}(2A*f8Ug3;LveA3Cb5KTtohpKAUzqh);AB}I zRr2}TkAjG+XIINsPFkHr9Ezmgn%^nQy&BGo9am{UZh)6T0cT~Yaxa*JK7_P)u#{j@i^ zVAoenO`q{T#linS?<-VOpms}-+Zkstxyye{qc>=rHBY}mYb?s*?}{7sXI9UbfGe=h z>4P;XL}OE=?q|j*%R6dMDRuWaZ~NH(oxgGsrdadT6yV=`wOOWk`P4Du z$xsLU^CLWcN5&ZO0CNlNoI;d%O|HF4zZz)44Te&J`~Hj@Ei3;fi~x3xTC?RM=`Z zGvl)4UDiNogF$6QWJqc5wNcaf{C;*a8i}Ki=z+qq?nY|o$)WOz1@)ak!Ru7R`=W;V z#Py;ec@rM>8u%d|aT00PWjel%<8|Ph^ZgutoE*?dpKOCei1Aip!5{EN^A&kt$U)p_Aq7&NGp9v={ zgjT(}ckdhjO6yLXPFEecf3eq>a%=0&``jSbtcB7!tYZEO7$(pP>8t%(*?za@=23Lx7eeX2zlON;qJTrG~qXv__ReJUNn!LAD z*G>%^8$TT@%7@a}q8txHf${sy%F^W@SiB{}84jrWN%TcPDh`kCFAA5O7!8aCxD-s( zG;yy&vick<#5i@>uNWE^5n zbz0GKmVYjvs3UtLNE~w%aoN->1DM@wQGf(Ucm^uD(^Y?(DD?3AN`u(R9b_bP#LITZ zN(-)ZJ7(|y>$gusw{lRPX7o*=*nz&{bcEAt#X^cb8s=M{T_Ydwz`uSwrDVKPpbJ}5 zo z6P3Pc+-NAHV;q6R{Ur0wOOI7P<7vvX&2|cbM-T7E4DiJT?g_aI*!gqvutI-QFX-j_ z%GM+XPFA=3YUsI$+zBs2mLUdmKQ^S2Q)pE6ga1QYZz+U^s8eB@$_Af}cdj$V^GL%Yo`|%lm%RVXzebY32s!oQju?s1yrV(p(&RRN$w|w=BE|Ks3?A}uZ7Ka zeuCa$1CM|Q&sia|_RAh}R=BOUYAy1y@9~s2O(N<%-7$T_VhdGX4x57lQ!ph@H=|d@ zG?W<_MTaen#uGG%&0E_;sDc{e{sJfIWQ)FXehv^zJH?nv!9}7VTj06 z@o7I0`O&`xCKlV)yQ(FsXo!zum23RHzE1#nLN{mR0#ZD7}vwoS5y8ot7)!J{}SQ z)}QFi0#qKQwn0K~&BH8ThyP_HlzAeArBTQqsyNYUJ8!OpwNbwdK>U#``pgd3Jp@k` z+9PQ`8x`5K6eaIkEeA^2S9RTyOdtJ`cDKW2`)U};uuP`a_CmU?)L{RJB)Li^KuG*% zZbbvsoumL91ZZuuP(0Y}Uv*v|+cAc_gm1}&VURv@g|<#TZqI6kQ%L*x6Dx-sy}pgS z@US_X%n!5|v>pS2>YGE=bX=~ssKopYTm+PC$@EMnf)i|G=&$vg;NXxUuj(oL#EDwfdw9t5}9AVzGQnK_0jzO+6~_P@{wt z)Fq(Js*(qP9xB;E!O`sIU>h09N7|PB;1?cKHWeyWV7|;3{Gwivjfo#(9y?%M0&^apGJAksy=35>M=gD1=lEZ4e$e!}pCoBDhWZC93;~L@*ZTm{fc8=C7<>i*!Sfy|X zzX{St3ERq8uqOW>nHYb#cO`6K3ii?iBJdn&T4>}iKJaq66j5M^vw#Y!fivRzW?$ZA zp_4#B42I*!l~5jO7!R;N6*>YG-!)EGo>Cp{7c&q@3_%$oc}Q={Ot_uDMJ=u zQW^}Ar9!kzS8=hKe1p}8^s?0QUst};#*CSy>`yqDN!xYy-zM}_8UjPj2DWXO@imb> z?goC`7AQv})8XmG8FrF!4HdD08O~B}^r#GQaiPP4p5VbUS}^;1OIrDVJ8q!W5K;M< z#RaC9o2!Rivny+o*$*rZR5zo!8j7%TV(#XvLUYwuJtj(Q@?$9CP^#8$#3LTLhoFNg(B_q{P1&^Tozfs0}Gob zb9))=L@PwfK`M6jX2m)F*5AmsPAQO^g*eTpgNduFo<(p6lYS;i{hu9qlRTtBUIngi zl?80%n$@|+1t)USP1e?0(Lif2JDf-JhaF_0z|26+W+c-6mDfv)jg9_>YW*3>*w+MH zn7#wsA>Z+{PcU0A&47R*x^zfWKvr**T6|qe^sxRm?!3N85p+SN%};u-?Y zPiTK;3}K10(x6nnu+y$yQyziNoq0fWe)E!Q;yht<4ITiD7$w@1^LPFWcerI|5KJvh zCV@kU5(UQ6gT>LoJzu_3OQ+Q4?@p-g28^^M&9*TWIOu`O7lZG7Zy8?DsW4RC3a5UT z&C@1Cj&X%my?*%&5i9%__za&EPW`xiOWIj=>mqkg2(5UMbgrs<3q7_f5?kqA13S54 z=+tA)=qUYT@aw*edLMfDkg4*$l4*}Q?>KH(@fGS15)=yUH2Y0Ln$f7stdV2KaQ9b( zfHvKkb1Q;zBi7}`>OcG~Hs%VQR(+(CR}dNF`o1&KP{HC+rc*JFgtfSuQ##0^70BI)%!&gQdge^PBQXz zWll&aFm+>dlh(Hzp8&uj=y&t<n)kD(zbMouwbkuzNvYUutjxYa zyKNE&Zedf>KjxuRNN*$4VKfdZV8y0C4WMFNvei|pqcieM&=+eeOVvy#ANz;xSI;{6 zeoYuwgjoT^VVu9Q)V8B&cf~-annilzcd3FJfycCRTfc=DRtB1u`^+iUP>sH|?kX62 zJ6Lw*k%-^y@1C7MyU>KGzRCMrv&XCbZ38g_e?@2AJ=M`3T5_G|*}C_Y`4}f9P_hB- z`o(Wu){67hKarDhNS)(^QSbKUTCm3%hS~A#o`D~!`Wkvvjal&Od{mG@VfAj4s$(tGb5EmRlWGHX$aj(EY9xf#SX#LQ4RGr5SpJ;q|@EWEI>6;kRabb(y&Bfyrdv!xjfI&MNm zhrlG)_Uva~w+D;ft_!2%)Ns=wa!wj5B*p_FIa_kJ6OY8|z$OVf(G5+0`{(~uXW{H#?F$D9 zf#C&x_|06v#CfG@JC?V*jrpE3l59EVKimOllb!iog;xESLsx1L&of9`qhU|!`T+kw0Klc#2KHkfcA8Y4 zOo_n>t%o0K${OmdvFfM1j0Bx*pj+cKKk=ec0Vx;I9+jxoo%x+fe&X&>=e86OUoP*k zohhI-HJiI~<*k}l8~thevu(_~ z;~_J^h0q*AK>IUJY$cEIIyxN0*Xd{%!$xJNO04ssc`c8fsi)um5ZVhMu&EP=Lf|$q znDSfA0qoX0)OAI};{^|Z6?u$0BZOF`rHp7EM z3zw{&R8N`AO(3|iiP#TY_Hr<&K%QE2tQLA{ofW-GB;ra`)&6dXM-XP1j^Spe40sGyRp5> zk?ga{bYNUOsIyqr19s_w9i`o2mdLB0KjpI~n!PK^ntUd%3)8klE51b5VppCbR&c|2 zWTh@8`nWqf40PxQU}_ePfPc@!o@*Tc?W&3tb3XBaW{+_)^6Y8E4T*S&=XYna-gm@6 zp*R%7JtfZhd_=-hrjJ<7Xldz(oS8ZI0ktW3Tec|T+0ijuV?vArqZBYi4zW7TEgvJ6 zG5V+~cU*XEr=*ayg)?5~3V`T!_G7@jK((hEDU{Zx>R~x(a1tU)<7AnKi7sFX`r|{2a^<+UTD~?+Dtg zG_w&qwqp(}ca`gU@HhnNi`9dz$(RB`lmD~6aE6>2oE|d7(*;wO_egSGk*le4FU{6M zmCgiYEM<^=)R&_=-B12_XBq0yKl&Nw{$Fhs8@5k}!Lex&>r}TGr-)YpMLkM?n;Sr_ z#3R9hXm#6=Hio>7L#v*ExyLctDZ}~7NEDLRXCn}4f=JisW+~uBl>j{8-sx>(my)zo zyki7n$qPhk0;bJ}Ud3!G#oET$|8r)=>+(nnTW1wI^$wY*h^LBUG5)D`bD|e15uziC zU*Vc)!={Iqhy@sQ2(sBG(_~3^BzsGrF5?CcEo=7q8lnPdCuv1k{N+Oos~Zq9B;68{ z=)cCokX$~uzKed=7EEiE70#UU%3N~~0RT$Nx6@sFU65h%LQPZcb7JD#-xt zrm>jyjxB+Z`wENV=#ak;%4~(dw=grOIR4drB&h$`7?i(2OE?V&x`W8My;)*frIw*d zIX>A~(Zr`e=9#``>Z?^qZ@zxyF?1HBgxjy&{G1{v@nuz*9KTxR2Io2@*MF*^$!44$ z*lav0WABF0NIObFe9kNO)^O z(s4O~;(VvDXDv)Z(K5VzA?Z+Tua~OCk@F{IurR}g+zW4qo(_ZL2X=ln++iC%Qlq~; zN}XTTtsB<$!yxk8RtVeFVwi@atN-R<9^ldEs4&M_gZ8(0hug=^ocNT0!eX8=(yJ00 zNB&bBJKD@+X9U@%@S*7*&Hini%jobxn7|;Zk0D;dzU98PCVxZI(DW%62L#NzXV$XG zaP&&_2^>!NOtl%Ab|#e~lCib8v)?1&i-dNQ-l@QqnUE+AbzIyBC(y%2sWT8TIviSI zb?GS7h+d<)L3iz0R~z_VHUE}%1y3b=&7@$=ob$g=vPWo~BD&2XO0`=8CY!|q!7bqr&N0;4GOox) zFVohot;Rwv)?a#x)DpkLo`JWe??96JQvqW#zbF)pdgf|%Q0g22lmJ@QiZN0DBxd6d zN`DCm=T3=&80~5^Mj14dUjl9CgQHP@1d6kNn&LtQmHW~-CTC^G7$XtdL99EG{$eD2 z+5a#~6dw!_{(|kJ^V`(!VWg?F+GBkz`D$~;xR-%3oxDH1TL9$PziL=1FuFcTAh&SD z&N=TsUnQ7$spVc^U>tQzsUfFqqfMY`;{RzVDUOO2H#l~KM+AZ?oE7$6Bz(wNpIFgn z+zBh`UuQD4=e^<-BE=05AlIVq65a5i)Boe84gQuAE6BU$_#@^)bv*;d1|TKsr>;u8 zuNuepM7pxrKNGd*fB!1|lgRcQ5&%Nr1)@6sVd*USOhAzGTC91GSluMB1tZ2#uu*M= z2ZvaZX}czWI*C;?#S3)K&I+`AaFxcifV>{~D5qFZ7@22dRki~~Ki8Pq0&0#1;772K z*M;qi@JXC#Uv-dG;p(^Ma_fQdFRZ-m|JY)1__H;_=Z5=cD`uK4{T+JeKk_FDF3n_* ziO>1%*jc|}g&Apns^keuY|wlvJT;K|aX4iU-RZ-7VQka~=y$N*hl8cmZFhpL1Jlac zm5OVx)#Rgg+3!LtDuY9oSM&15sD!qUKOI9{FPu_G!B#s~S$_%rTykuyC_Hpg8sVxM zu1g=swH>h&aK0qBtix<0vtxK!yI}5X|86ZW<$G#F-{JW9Qe&P2o&Q8=yf9KBzR*yQ z$sG61a@HVYJ<~z-d%akibNDWT8bWZ?4Shi?LQ<5+CfDtaKQ8TH?V^SWqAgCR`B3BH znQAE$vU^r8+c)pu#mq;IhJYD+XF@Z{(re3ykAbRAF5vuK%JF|9`x7^75;Cd7z#VcC zq$(;sn+E;#Ale%fN3nU}ev?_Xjq8;QIaGi6FI2O;OzAjl*5i~LXvu4o5lcuNui6+} zB%Zzi67Ep!-|=IGa~Q)j{tRG8k#3nUuhugVqh&RuO!j~@$ECG5VMVgL$K)^FCg@4b zbC*97>11$Vg@cDEft1V-r|wS#B3j_wBKD*;9>#JYE(TD5$-fh z1Yw^Nosu#4Pm8Vxt#Kk? z#~yM<#J35j7JaAN;iXZnv<;q;ASP?Wu%%vWor&ODiS%|*574+T;epCjpMMFX);>Bn z*@2(fCkYY{fp;#mz(o1`=Rgtu&ug(zSm-TW-U%!4CQ;9fl(w6B5U=LZXks!9#Rnz4{Hk+{0+BnE=+WrArV9rhU(E%rY+{2BI`K z1!-+(*5hV8_kJsm(fQt99=gIE%cBTXMF4cN$h#4IO zG3<_@Abmv9c!a?|J`_vTw#=5TC{^k`X0S?jhf(s*;pMv_r>hU>q&ZGh6fWYWrO?u5|!aQXx(#XBY+9l`PSc(MIQ%tuO8PXrE=<4Pvt7df;c?V;_i9$^hcFU zCa*9F8v$J3P#b99o5W$OUE=YQw=n$GX3>^HylVC=l60r~C>)ePldINhuqd+|*I&L9 z@*OBToTyp}cTq?cD0KB=Ik!s&xKoX(6d+`w#`symz{-Oe!Sg{4Y3x|soP0YgFjwyb zdhwQfdKLv2ZWj(+H;2A2s;Te93P)6v1%|or3E$p1tZM;ttj~vhh+`!sbgAz0n=A}o z{v(92wcRbKzMB>OF~vTUNSS-5zB@DVr!LPk} zeE-)91izp)o7;(tXa&td24uKD9)aTCM1l)y|0QOhX|X220~v4r&33@o{(JrA@NbT& zB5(tjKw<`)-~Te5hPeOWUZJw>OZ;iPp>jY@(FN|!(p3;RmvQ=n>ZQ1=~n{4i1^bQ9pKt&Sj`KsGC@W+}7|_h{g^ z^b`>f;5NGv2FqJ0J1s|sdKI6>AVB81FUFo7BCMUr8y?$);86vxjBuRc7|7s#Ydo&p zAN`my<4xc9qlwiBUnf&BB*?4c`eKfE^=t5I)TeiCXeu+eR)IxCyhdvN^psinQ{=U# zTX6C+-R`9>+nazA?_PT@<4+u@^N`rQ z^=r%0XFN{TD;yF6B&4~QHP@^MLFY&mb1A+qD9aPT7jvZv{VU?{oM<_pR^q%F;l=5v zf#(-d;Sl_U0=2zsjwO2*Qm@5f9idiv0D0YgZAdfeJ_F7k4DNAuMkGs#jfW#>6&bGJ zZX-Lu4VQ`LsIl3naT3c@rCB6PVzmgW_AR{MNNoTNXlt65jt$}cB;anF#P{3OD^%>t zB!Ov&+0{=oR5a`c4KB&Y34CJDL09=yr@5n?=B|U+`oWmX#h9{d%K3M8xp+4Ya<(5_ z4OiH|t_0sBwJ#)$YwKxF3Y-o1Fu`s!xEnIrZ}(am8rARpq_>{)^hp@5Raoj<3KOkS zFXbKX6-2_^Wp?;nl6i>@=Z%uB%}Aik19unc1}EUt38(1g5xH75O^C!0rd%5ZR5N<{ zf&L^Yv%I$20X3RI^M)dB<;mHlwo#-DhEg6kl`A2^eHkqfB}za@WTlt?5<#rBA0(Y1 z&2=u=pB<-yI~5`eQh1v7sDe4&cm876WNZ^`{MPMeM;FSUyOb{>V;FE9sdJcwX{(1z z)#WlI*;#LvjugQaN8zq_u`~CWfWU22!1CNuaBik(=i?<)VGyeuajw`nL1xBWQS%~@ z^lK@G&A(EM@8vpfG!n!7vv|g3oBs-fVO0=)rFsK)r_a3oFvk^Hf^q*jv01&?ya2AC zaopSYHQWkzfhv0Eo#ggj0%n4fZ-&&j{+^WZ!LV+pffL-p++1J8!K?#t^iV*Aff?y0 zUvvJYg6KTDaQa0Fv=KT-vOMpXaSM$%=;;?eVUonJ{~20SFY(9kAn^BRfawseej$Bj zc0f%e*t{f7lC{Cv^FEYkuqgr}@C-kP7;NLbCOXNp%&$DhcKhw+ckuO~K@geD!LO{z zMZNV410*zZ?J~h_;fMA2+!~G|;YK%UxA_!}jYXsp{QRr7GD^SyQ%ZCP81z!HmOzgk z1ogAU>r*K|lazsj%h~1T+^NUQq(M=60cMV1Vz|=z$+*2L&Ic;|g2e8Zo&;WSFV(L$ z0Vuztp?AtA&TF{)KPSo4grQVrx6wCGNdFKC4<<5vTCVFfu~4SQy!^?nEYBVw^W52P z3$i03Dzlu)^#y;zz>a$K@U{u~7VHxjzkgg}=>i1GNYqGSl5K@*PEH<#nseMxNC@BlIFe8=0DRSZKvp61z9*_QnpvI*F z{g-qB;>md4fyH)A(|5y4Kfxqd`ZLeS8>W&hUnjXZ#aghL^5+IZTzQr(L*EX@VjT`> zyEWta(OEzb7KS2D47A~#9`O*92W(@P?s`GrD}2JM+4RTXG zE*hgA%vKyHeUCe9CkAI>0EYY*=5^nKq|(0maoU2SPb}A!NvHu=bX75YyVm-id}`lpdy)(u z@YFHd>7trtxs7hB2IkiihT;h=NARo}>;PbMzj$LHT*&mKb^nC!Y)bO=&uTvNt#TFZ#atM7g zKL1TY(x*wUPq6nTJliy!4jXkHL!~`3&~y5w7<`Gg9%rfarsmhp_QPb2%yz~YDztV9 zbevsKi|zG03QwMpYP#YFuWv(_6Ncn3+{S?>7*%h*Pa@DD(GCJ%#7XmmLtY6AF-&R> z5dcMIq80IU!D;+?2EQ8Hl%wB?-lr(A&QPPy$8(hlHY?@G`-dd!=r(Hx?n|N8d>hP* zp*=U$(_7u>&9=X;8!hm*ba?FdtrGXtXX8zz3W8Dshe!%qdr9?b`!Owb<+xq!^4|;2 z|Dr#45XcA@uYiUq7tTu%jP{I(s3|YiY^ifgiBf|1%k9pYD}iWT7L4`Opdp+GT73!? zQoe=hE`Gst5eTf3%pw5SbQQYG3#hk^xq7*J0=zV*#6 z6;y0RQjcP2(bLs3zSjkP!S^F3N)OGKrarM0H&A)>VCibRc1*W`5RoN#PK*AxPZE7b0uL_aPMT6ac;#2!v78Hs$ zXGH>U2o=j#-3V=Jq@DK+zr%PNNFA3x7{b_mU94J|DT4IJP8^B6oR`$8m)pWo4nb*) zyG3psW^41rKM816rR&M%-QwLEo3#>Itj*vXWopzf!MX~!8>oZx!kFTBG@w_Oi`@BC zGMQ*_D0!z1sWia^fvwPnRJCl?4JE=kL+2a>F>Z2P%{X|_DszXUxSot2P!62kk3TKO zCtfR;DcNSsS+caM>7hg zEw6&#Ph5d^9!Fu>wtPq+BR^Q~a0Jjl_Yf7cKw9PEauj)0BYaTM5H$^RJZ#|@k?i`+ z!;H_0zIN!PEVaDd4RpIx;-CzyN?tGv;5u$0{?6?dXgngquOs>&ERmwkXGRW>l?hge z;e)RD1@kmJq4zyL`i4!>H|k1$m{F03J$**DrX?s^P$=5_$q?5Mp+CWwIN z8r%4zvlHdz5BD)~N;+DboDg5}Kq|X681|v*y0}@jQbx%qw7lXph!hd?FZPUwoyKm=lE-DKDlY`PU*f|IXelf+ z;DYUmBy&bUAUDS(B@&u6HHA@vI$NUzK~d`M24F-qEpPY|u+1MP!nA)>!acqY$21$=j0DL)xG#1)I#Yq#dDLq?uN!pQ!MTz}T0Ay@8m z!Yr+eY^XEDWfqy)**k{Ed*w{|yNa zYw`Foh%?p@%8H;cBs7`9t?I5-0tiUh=?EeghrEW^jsB~*z}B>h`6c88n%)i8v5fUT z8?Vx;oU?MhjyiaSein_GwB%*E6lh_6rb?;0bo zBPTXq3g_x`1xI6IPjBC95)6F`|10Y8IJJ}v=KaA_*)lEP6`9wiGc#gwUh{bON#;fc z>p&V$Tp0g*Oq8PYC9^I(fZJf)*RsC=(hY2I+w9}i@Qa+Z;6UtLZOsW*mWsa;7gS>- zI6zzlus~(r_uEqaWBj^Xm)p>*3VL~mw$7qCzSu>~dsa@MHL2Bm`Lxk5|KQMZ08x=2 z6p`fz>g}@sb-Ws!OLm5-C|Wd4I<^kYOiI%WtiPyIg$^4b8Y#ftH`EtSeEL5~dgs_R z#4SZ{9@oq45^cxnHU{Hd`}y@lhylPxJbsbA)3)Qp1L@Kh*zPqF6n5prII#o$B<%8i zYBM=Ia({QS@$+je2E4U23M$-XP@bzA6Cad;n>idFYjq);*th-p?MiY$D2L!ST5P@3K`BP z-6ghKs3tyts%T9Sf0+2!{dU9h75jx4xG9q9F%1QbA93{e`!oOr7kE?C5bNR zS*b|zuRL0=0N|yBgbPAx{JSgSyfsZ-ZSD!;yOXF#o}_Rc1+YI-Aa}?cE|(&D=k3N= zN&zBm(LN@d?nb?-wE@1aNXC!f4}o@)S4e$a%|kFEg|(7XaZiPuFE!ogr8`t%tYhE# z%=7!*)dNIO8QEmP^f(jGvL_0TV9?ii?gdko7xE_Jb@#n8Sim|FBx#LrIixN1s2JJbawd~^T?g?=v;lxTZLFe45>ZOG{Ps(Je-31Zd(@G<6 zl-(0z*>jcFFQ>+>Lg_wx?B6ZW>IM zkfO(LSM$p7JR$vdn)<%I-)Kr<)2#W%BtVqJGKEmsLIAV`$o*kJxAUE~AJ@??fv_^m*|*Sf1GJV$f1CaoOG z{StsT`%C0gQ3q;_5PxQ~_npTzSU=VQk);J5EZFwO5v!WmZC=mr}Bb(;Ugq4xWu z$ca)p@nxEtQ&e3+QR(`H!!}j++a&Bzvyclm)!W_6@&%D)EUmQcdsb4`22;}c;*gas zaWK9pxLmltK}*c&^SVkggT)~LQlo=s4$c@g&Vu9M^66zHFMP(b<&x*PY**JU^lI24 zh++nYi;_3NZe@k5=Xiq=&*|)eo3JDz+t_hh`J%gJn)<(Mjabo#Ai348VjzCTPR+-B za0e72U1)v$s-`&&n^Jgm3Mv)s=&;lgKSK?A%2vfw$(U?^!|5-SV))(}xfUB*%+`bX zw>`SEJ}`|>AF@h>!-?Z?ut zK^2TasfLeBEO4SIc^5B3V>dH+kJVA;G6pREs>Ea?p?X>sKZ@_0+UA4w!_)iHnHM2> zl+r!}II5V);B+{7_qby3G~)~ndOjb=1rA7rLd>g-eO#PxNNvKxSV1~CzI8J#&-znm zx0)R|?gI@woDnJUKMJKmfeAO$31K!zfrxXvUp1SR1t;}j)cZmueu3sF#H~bx8g$fz z_Bdrb6|99K3bYc$+YZ>9w0%|Mj1Qst$%^Na*Pg%@mkc&wF+-lKNeqWwO#}l$taz1- z^Q;*C%U1aYBvHVWj95#^XewMiE&|P-iK!!5lX2eMo6(HeRd<1f=9yiR7H7Kz?h2<{>9 zh7zaNr!_7Xerp+?lU@niu;M;SSQ_Z&*D1ds@ni$!Iv7+NPvrwc@J^b zBPgmVHCJKt`24Fb?5eA2prgv~AvN`_51Er_efGPz41^vOz?laZcj};a!^~-&;kaDZV%E9S)+lIUyg{BBPh_3yF5yizb}sevlH` zV?lKLyF=+ySDQd8UZ%x7Nux`Uqfv{?eoOh$C~YNIH$5q$?|l;)TwAfp#f;g^Dl&l{ z?e`o@7Norlo-h#(H39V_f4W+a6OV^ZA4-v=Z{PNjywPAcAhw07_3&$}=zK~ZgjVdt z#E*W`Tcd(2P!XduBXZ@Sm+MFm%I5qjyf(dM^QeOy1zp1525Vr(GLCb$8dO9IkEBw& zD%8vjYvkVxJ`CoZdm4uB!n-ZV5?&?d&qM@WC-H}TP%z#gI1X|MR!PYQH}9}uDWz$u zrX@|7Mii}fQ@Y;x(IzQGfDLGJtYE|CiG4SS1vOX8T|v^TM%0>gIW4wLah!p?1F2LjLIj{7uN3L zOmk5jMAj`q358&`O(qvkf1)O~wVeTM7fF)%y$!A+bHwl$gDeqgms1j%`Zg0e-|)tf4d3FB2(c0X`i#!}`ybJki9nAyP&LpoLA(OTqXrtm>P> zFQKm8kh7%s5j_%4Z(COA?hoiZ#%n%u^G?#d2@M?|oDgK*C{utquA>0Stj2h0Nq+lt zFj7YbyGVEd(_g%+79OF5&_7@Rcqw9Xpo$|iiL(Rfn8QJPp0$W!4k$QCIP%zWCRJrV zZ99M_EHaMNwffyda$1L5E!HzOHy$lPI8)J73#&5d_?u!_orC+0wwpqWgXYa1pCPSZ zM!+L@Np+&jOfsiLYFlT>8OnVy-KKvdriXReys>2OUp?UiZWq_)HQ&Dzqap}jNKFs< zg^y_MVqr@um*tXm@?g+T-_4wn_dgBhmKy>Y$j5Gx=Wxj@M6_6ATk3L|w3!Y?+F6cXi`7&Z;l&Hh_4NV@?m-_TgU0WS*fKk&{4wQsP?Ve7 zmvI#@sC1LfMlT!45(;`-xCmmnF9B@h0EgJ34_uPX+G5R>r)`u+5HD5$TRW1Nx@R)) zQw42h<-Cti1JGP} z-1z)$dAskaUBZW@Lp+nc7lz{T(*yZobL(fof4?*5i8gC>h{y~kb%l*u6!!-T(3YX| z+Ub%^c$R-%Q4`|Af5ervL8T)+Y^(M~?NMSm#p*De&n*wFjFdJci2bzdtCc_Az$4#g zVJd;-TBKJ0!v00n+cXHBI3)v4D5U{TRaIO!?zna{4NN@MjV^KCcLnOB;pRqciz0~v zS2$$8oVLrzHk=r!YN&0G?E6D*rI|}C(^|65LhEcV90d7&XGiD{b(?}B-Z=#+q+R;6 zl6tli=XTHAmsXg2uR|M4#g}2wCnSr(u8@wOnOU;?I0((93CpYE;QHJt@8G$oV9V!t zAysEK9dbgRHUR17rU{8CB_#tq?E|3qU8c{lsA+QWm>vC2q$pPwLhho>t)2q0X4_@*a2hwZ&-hVMG}DcF&ls!dAUWuO+kP@=%V z0=IjdxK?%SP7Qf}*Fklq6?9NCa?xmff%<$wyHms}W(Q+n ziLrfqBj!E8cx5pF+Bx$A8xw^vxjl8l!X#1Qw={{LKea~^NdC;q%iqEf16>iCKCO-Wm4pdj$v`B zs*upJdKL<@4Tk4-7tkS{v9WAzcd94wa~0to$<_Uz`-p>p$X{TgDFJ?YSA+k{okU22 zNE^-dgw2SF)$hSc+Rrl8xdV|4K1`!xfK3!ZG!zKDC~2*%(h#$Z=c(#cwF2OTp6+11 z&znd9?KdYRB>Wedq7z=WiA&VKD3Oze&9J#?QO|-*MMFw_yM`n(`@d4hcgGDV4$2t1 zm$3aufEfv;*Hqxa3;zzAFu}cw;R^19q@fqp@#snU3dT*=aBR0*=<`opbkl`d?RNwk z=wUDHf@)F;7POMc0QU7?rURml4Gw>03b}EEw@uJGmi2`|?fea>g}_J1RtUBPT5753 zcovk71dak5*!k1t(0?S^5rZgH{3n%SfJbF1-1ajrz;PDQr4e(g^4>y~ry>=xw1gA} z2nVwzGfv58mE`LE){t0Of4a5agetV;D9hWNY$WuP4 zrdTF`S=|Uh;OE z*fdhT+KHWv#-1bx^SyZmY~==X^*q5+9<~-Z4cshOLp8}gfVMMNx(-b5OLz^ziDHpr zWABL=Gu;WNj2R%dOU+*}l)IvasDBQ@En)~>pPW2B!t?gMw=!L8nZfuYhC#b7DD%zB zbs-~%`XTJ$D~Qewn!XDSc>0(hcwG0Pl(|<2=yh7|oaZ=V#jD0MWw$g2BtEh6u zS>W9IbQj!ppN{vbe6J4$%`zR1k-ZS|Lml;?piNO6C~6~qWwB+;$ah8kZF=i zwn;0Q`ILO5cjgy}QG|P?u_#X24JXnnhG)`&S3;21zp_#uPqKD^?&8kid zt%h{@J(Uv&uH5yZSqGkp_d}(Jn@8>wY#coQCv@B>PcH~f2qR^aMo`31S7z*AZ)JgY&pEK+bJoF=R8cf2rrTYq=kcq5%e{?fo#YY-6FlJ z%vzr2EfWTG=h6uKptuDf7BkO#_L|lkGJFY2yi2FIo$&2z;oQ4X2L1LkTXr;4CEz7y zRq6lokX-coT+~`@_Z)|BuH-Y#^7qc{VH;~-f5;M$ke9NyYI2W!<4@YV!@R5_h*ZA5 zZY0t<%gf=DKzGI>^Sf4aH!(a6kT7aR39%1a9Je$cp$SLaM|RU(N|~P z>5ZPqmz*x(4E-o?0Y%X@Rj2@$ML*5djf^YC$%2Sb9w_&_foIVz#=jpBl7&jZmje16 zQt=}UW?%s#U4g6I(x&Nt)<6l-ZTqIiO;1CAlfo&*RSZX1AZz~^TrDw4(P>j#YpC48 zr^{N{^H|=oL2{)@j`70~4VU#dWxGzWZEfWi;48#ps%-*FIBC?L^nEq|xnOlX46EL-!s)yJ z3s`YIXz#(0bUbu@vfFI=WZr3-gu-f)OUOagFXHz{;gc|O0|2DKkB4VX-yIb(S4swI z%>9mW*rHTry5-L;0#x*D0C7c*ofclD7lnLj`r>eJ_fpG@yY1##$d6;EiBV>JJYk&G zc6&1**|O49w(0RH`dKe`u2`F*5gJWmFxR}P*WD`=$^=_!OB~~9Ah^OcuhYPHfej($ z*xGr-`ZBJ=-oj^VlJYv^e)gr*l+S-f65arb^y|zWhyoE#1_1B$1yIIGtu$NAQ&qu1 zop>?$9kp5KsI{$3{;}m;&}n>olAZ4uH%UL{*DM_5XdX8@>s*!8a&^fdt{^ug;{;zl zUXOsLpO=yQuk4eZkqCdpU-$pIqFjPOfnl`8+EpLtTNHvo%Kr+o7Hm3(4rSOWxrq4riP%hX&8w^`aOzyOOAcPg0g>86?5M z(6)nepd0}BeHW`)_+MSgp*~arP-SZvP?{Z!5Qvt{nZkJ=*Br1vnX1C-**OjZ{syjg zpJG>plhOBi7jZK)nI$v2`kZ3`Tqzy$%Ps$bexvL9?$tIxUx1H(x|0gmDQiE9{3?An zkOSDO5oNa370srhzRsMxS3+u%wLobr>Ol3pNYJ=rb0keK_^XXaIBewMhkv|vnY8c~ zlm2KoRvKE&{o^?39kt(~Im;{!`WMi6ZHXj(z`o@=p$YfAZ0*v6ZwXfa<0RNly{l*7 zVv_ejU$fB9Ku?r}r-3V|TbF7m&6nvQ9DTe+db14$-f(ypPYCmEQl3N5K42E(-olYp zdPldNt`qa>1p|AE`!Ez+^myUWJA2*)p#1=6KlaR6~$Q7H> z*eKC&D+T_@TrcMmYW(0WZ}rLk>0=rsGRrF`sa=zRlul-hhBo=(RjoF9c`naP+!no=LVC9ib`vtpe2*RxZ>OOceohJCSATik!l zTEu*S=nVHGa~~54N5zUlr?#J7vh#7k;}w$HF|O=k%=NbjOV(X-xn-$i1eeg~4WZBo zz(R}4#JxzTp_jpMOVJE&a7di$T-gA;&j?eN-jyD8p&X>hPhir(%~*Y9>v+iNd?ZBj zrnz8D0@m*79W<>KB8}G-_lLrFe?_q^HiAuY)VyhE0tiE~<*Uk>sknDnv*tM3V8{i{ z3b*iJD`PJmQg|>3rbVmD$_2^V*D6#v#_1j0aWgPfy+#CjEP4jtaX`;pgX2G>(0{=I zToC>Qx<#l9ud;FJFLIk#h$f|`bH5LHN7Li)vd-}UH1(}aT>+m~M=awg59_iI=g^`K zqv$)fVi<)k+qGx58$mqe#m+UE#I?EIDxn=}M=nC8I=%n^;a;{{fmp@)w62-53%5Vu z>O?yUwTGAKexd+Zb=CP)Mdv=!tULy_o~Z43mSkyHaz^(8cpn!6Zm)w)kR`*8ybe3e zRmzF-TO*b$nwQq@mAWrRaVfqOArIYq9QBlhAwId#W)*dB{0+jp)qgS%H5ZB?+6oy- zgp9+y1Li*H+UL>H>n^gklBN)c<%Pgey}e9_fmX=Wt&C;GI%)}=Tnp~#fdDHxtw3Wb z_6OQ<7!{I_&`%o52n<%W?|`uFE2Ck`<*cVmN&#iJ3|@E~ypdzTG^(7zq4X5POi zRqN^a-oI37RCEk>-g5*HO9C;SXASWd9m}zW6Bg_a@Y)@_b|@#U`$utdy#F^?DkXq3 zy~h=EAen79f2Y;>{{HITajQw0`1IKP#BvD?C`_B(2o3M{({KM&L23kI4di z#00z@Q}kfD`}4LCC3;8ld!Z#mS{i=C*OR-<1J$?b8uEsCpY zZQf)ZmZyra%DmKl7l`oZDs$cj3jbtLV>_>vRJVbeU(6h0`(lGK5 zN$rk(E0YiR`t*T&shIS-Zj!giOh*#8IP8+(UvL_Fp!Fox9hpt%Q@)^WIR!pt2K7M@1~&vN;u2?TH>SDAs~o1 ztlRg>XFg4#Zrx$Ha#6Ccp9|Nno2c*GQ@17V(rO>X`&2^Fyu1a*tH`Pgrj~6BF3TJI zCImu{@psPbvHUX?cUR9a>w+G>8afZ~_)IWp6@>U$M&rTX(2z`?EweE%Ikx`xXcSvR z-@Qfs=Q#2x#nR0$c24kzpiE5C7)`gai9xT`*foqLN zS*tMqcB?^N>Om-I&PiAephG;&@Z)VyKPKR#^+qAVhJ0y)8HB#zA9*g&VQkE+ET<2L zLDfWAK8U;Yd$}38R;=7%gd-d>kN9F1*-muJULLso3koyAd_N%^CZe~IpXeS!7qLGO za32Anj1)`t+jQ?lYE2z2b4H6|Aw#4sZdwaSJU@6%49-$#ctqA=;qPDapkR_e5j=aB z%xRKn-bX8 zEM8plo^G#dFI24)Cepi`S1i0Xsr7uTN;Q9GKgak0 z92m)0+sOcEB2{mLTZw=>|`=b?a0I!QW;uR;uz80R1(@~M0 zWaO9QFPg4C*=6AR(v17=X|^h~M9L1<{*GL==b8ew-2O>1+RB57ixotYfVskBwGE>t zMIJB$Frg!hB`oA11E(_$Nq7}rb8?d&G^n0Qm091%syBsP@?$df2WXgc;6-ca0OBZN zW3$0cOg#ENwJ-iS%m1ufb1PqHdV#3L`WrS5c;dr%y1`TlcN0Y_2~PHV<_Lxm`@2rn zR&T173yY1^e||CF#@m1%m1{*I>MCfU<;KMvs9JQ>XeorD%VM}e!%Jn{%%SjABAwRc z`72EzVIAf)wRP}U=k0K{(*(cae>URkd>2|2lT;Tvmk&`r{;oPK&$Wes5kwY+IvroD zRLU%g2w+7#I+BpN@_Rf}BQ7^)ky0z3r)mAPKa`o8{6|;$&CUAFTIi95(NwtJ8sOuZ zmLu*nZ`mY6w)CEYX}FSn(1vgXPY;RbSJ>miQQ}{dxBsC7Pwy}G*Se%l28KeOXr$Vs}Gn!NB>)Dgdh>J@T1wU!`ywqYf7$9OeRfEJXv7#TXXEs_C;i| zCSLx~#tRe&T}GU59Wu(B0GQ7VQ2>t9#O@~%qc%!M2Tgi*e-NHsbUe+~Una(0aVt$Q z4WSFsqwH#wkS$t)onpP!Y|_l8tBUDTFxjD;yIbkv+u0bTQLwbr+s$4%9*Ic5?OINV z=}JmSFt)Ho5Z1U2xq7C*s`~-Nt6J-1_~ONcZ~>IHc*qE@h#l@rsTOt$k;?P9 zrSMx0^C>bzZUO7ea(3BqBsQS)OkC?Lv_>_rEe`^lIVAD7Y zBD5Sop=L&`oEU(db>kgsLIp;t7gtVNTq`J*9>AIn5}Fxp@RFB+wXj0sMDpAyqbm^#~BnXi!!ZYm*JZ_84`! zp48sj5^r7;%H$))eaW$C^t7NQ*?LU63F3)z#v~)RCu&n0W!Wev`gAZ`Vit9Omuew@H4)f z<$sT+&7s6$a#STXBrPCMBC;@*^r}1?t zi_aGezefTP`} zaqQX0i3fcD{m;*^>Vg!l;9EXIge5B-=u`xU{YVgZG8kt06O#Q3zgMnN(g6QI0Kn*| zp}6OQkTZsGh(oE7e2r6xUedNqOpyV6ut<4}~F{?&lrpMZ#Af!;GGsjG+cC~6AOZPb(U%I*t^wF^tQexFS_St%@ zNxu>$vVBPIp!M)27_9#K3+{8C&dY3pGFk)Ld}*pgw$&ht@?L{#xGQjHYxWgCM|0=o zU$L`ifpL!@_dK{@+h2=4kxW^npZgXy0qZe1QB|2FB1G%}tlWDD@)R~!fwxpi;DtrE z=7f@Xb+*b&rRg8c%Xzf~ZU4-bTTlyoHS*8DVUv=nF;SPt96+wU&?+>-G&?pHO#)R- z3r0~9Lqo3m{m01yCVA<0Y$X#iorPu=^Xp4vs@03ppq%w#H9rZBspBpRGj%rc{eFE@-s>5$yWj@oR7$e=!*{h<BG^Thb7Z_5Ur@p zh@C?@@Yu2SvE`KZ-v-+Cn&*Yqg$(vP&JKcc7J8`z&*c}7C+XR#Q{0ix+<~bN6Mw&l zqIHqOIDln*c?s|EfV4!&EfPn`u$3#Uq>5EBfCZqRp=2mw8ZRfD zwOW3?WO#Y_9ZglWns(a9DR{d`Xs8xY{-%fcyln9}paZvl7qbIz&YZ|DX2Ozlg2+Kh zsq+8rXdiM1e~thD1SX3gWSVSKbp>9dla$r`4cE|45+GqN-^$V-N>}Z;$3ERQ*k`iV zv6oq3rM~I~C=o{5pf<>uerfSEIWNk=uzs<`0WUFX>zPS`@P#1Lv)F)lK8eldvXjLj zqA|aYnlKHR5JSvzy)}QIzg%)ls&C>syqv8?Z6eF6xob#I+-tc0avCMv-@O8DBPKN= zEzSq4^m$mEwa$Q63T8XzB{?65dGKo*8QezU0pWvzOKh3bbRa*9RvgEHI5Mco#*(t! zfLmId$AK8xpxsC&S~gvp5D|<-IVp&pA6=MpvI#Bh`llK;vSL))zjU%{v>}Qos&?_y z@t(GmweDfg?DqIyr?rUoQnQk#FNrzN^Y4+X>|Jh?{kVm3u-%*fw00|Q@&Mq{hWnX% z&s5rcD+}xc%+$#5*b|sXbjErL!=mUcjf$&%Yl#$U8?)1iM)pPtAxiD>o2Rc zVyLR=CH()`QT(5)E+PYFD)1g)5Ze<;P)Di7^))BhQnBYS5eO+Zii+jZT0Sw&*sPbg zVauKNO=D=*cf>4Omc{95M;`ZeqY;{dUz~k@NF`b}xXCe0Y*(_3gA;*Id)7UUQlyFS;d^P zrQiaxGPB?qO%X&BU9-eUqhcmF?8D+2*Q+(5l=y+Hx-ngnSgr3qC{|hVGIAo@a1l>R z8=Y?ri-3Ik@}q2bpOUl%zILbjZT;3<_yid-OJMLz2a?K2%6=WFuDo;Qv)(K&^ zK_T6}2@zHkwCjH!ql!W4$gpvFqK4nDd;YKzc+ldAS&~4;aZLmSZo5UuM(l#Pw%}A4Y$);wSdr=;4*>??$IfapZ9>;Sv}foIR)_1zD)z3WdH6*!{}$8DDIqqp>Z&ufV+ z%sLZ%$Rcn_1}yGD?COaKzFnl@YN~o=Uo>ufNBprsZ-5awH0cBf+{|xaB z8+6hY=jqYgVNvZCH4dGv+AnH&M`Q8c5CJDb@%L^ZASK6bpd+7xUInp8&1M2B;4S{} zQYnjz3!iSo#?P3#w)?IcUqy^}!oZOhcd-%5(=qlnLo-pf4Ie+KFh*&mPZ;kEX~ITP zH35Mvs~~9P;96wNAxeh7j!|NPLWq+JZ4@SzvMf(`i^B{z@I833ly|w}U*w6)XhOKE zE(S~dUETJ8QHMDQq~GJdymBA3^sxOr2kXlw16G} z>2>FCgS6_h4_hi_A{-#8wQK=mVn87eNx3hu3(9_lUX%YUK!q8T;K5l4NS%q6T|dLW z9+g|^77Ey3L?cm(cf&i!2oXH209A}~u3q_T28XWnP=mLL!MXA>H2yLkied^_eX-jr z8&bx9a?bn({WqcPHvir;eJ7ScFGdp{T3c>#{I|gqINbDaArXEAJIw&-P~xXzY+^Z! z^mrfyEX*%Py9*ZWZk~kk;bY=WMk0kN#NwFL!@%D^Y_-CR07 z{O(6&m#mjfNBXgtip#mslGA!+%YzFarNapgW0ufKhi*$VWA-idaT$@^%d@V&1j))V zLwIL3pZG`Pi7KB!U0zCLcHSWx$$OsY?*I+Rv`4)0Q|oQJO7~u&H=Dvu2F&;fIhy(J z;yqg+RZesByLlFmgozR#olfT^4uSC!kT?=e9Q0jcY=VY5lLCh`q;#U^=#j1$dNs?G zEYSyrgbdJB=f|2^=|=M;tV6q5_FW}{(n|!Spp$WBmyM>D$+#o4xIz!RfL(z_I{9;c z)_x;}k2E>eWXFb!$S}-eS65^N%?r-gSbi(5v}-1UBRX5k zvS6w-k`=d&oynCd_r|KLhN{gHO)MI307nyyezwJ)usI7&a<`do1d$5$KE%uFZ(Gqj z;Y}V(vGk%iYP_31Y=$y-C<>7v>Jo^c1))0hfeqC(KOcaA7ay5Z=qH+E7 z8Oggl0qeOHKh_7T#^P{VGyqL48L0^aT$jT=vL5r~rc^Vr8qI|N1W(*tV=WPXDm9Hz zK6L}zM}|@I34e9eB#;3?L`Q>kzL2qg9Jq}n(tGFfGqV4dmV1$Rp1A{;ZRKwbraP&i#3#8jz+i?;<`fM21A=JK3ssJX(@Vg z7pOqlu6wj#$C0NrD%{!yIZRLJTG{GV$}@dc8M^B`a94DT{oX&_gNwIej8VCz+uA}* zV;QwSc-0-Y=-fZ5)Rgj+pk)vWo+-6#`;4AIYuwo>NXZ-t}{bI!_-V!L}q%7<| zb@vZ*A@5VM$1cYE+?!;)kvts;w?Xzt{Q>)uM0U&qxhZ9qqZV*Kgf#k)+TlvUXS-y= zmd_&-5B@3PAh7_41LiC(`dG3JGfbpDc2tE9-W_74kPe%iU`ji6+(X9WN+XACPPNgb zk5xhYYsSlXJ#BNK44`iDL2SdW-oIMRa^koDp!0ihQd<*PvAj#G*>*Q z@3*ZAmP}Wb5@Bx*s8`NNo~VBWT4(Uy9HdG=?Os$zG36Z|6}s#pL9A-`kDEZUvlD5D z-wt#MKNF@VW0a}9u#u!-cd&9UcWb-nd4@Ax-ld`FuBzK5sQ3G7N+K5sQvtEi{5+l;50o&X@9@C z@(}l1;Muhl9sLPzR}Ytg;ZmYW!g-DCh{`kWz?9wJWn-xJir7lFfa&Sz;kN^+ywd+3v zRN5{3@`wrma?y)3_DD5ne`DWj_wlP(cJ$ys6?PbsJL|CGDzqJ zxAt>LLsRye)mL{K@B$DxsCsIqH-j=LdFtN)mrhN_!Rh=|%dp}LqZS;AcEqA%y7YeH zm37uFX;^0Y18>6t>A`B=U`f_8qEa!GttahFIb7YrP#f7FET`M%+H_c5h`jGwUYXkk#G=WHIG|!GGUFJj8xa96x9zs zSv-eXLatzuejA;*S+y@ato%hLX;vCN$1CK%N$MQ7_RZzWoL zW%6%~rX7%W1w)%RyJ5bryi=OALwYB?Oi`S`&bZ;}OhMD@D7Iyi8C!eDx8gm;U!(yK zRm!7e5bq4{o^^sCHxq`Sh@v%zQ$eit&%h9_Ru_bBhn;PL%4eTV!q)I?3JA;m5&gFc zkP7C{0SJ-0ZGJ0J!NY1TLx0RXx}fIwnIS!6^duPEE&RH0MK5l7nMYtG(tDW^LfA9L z&mN0te5>-TMGH*TuOArNxsnb zs9KrQcJ}iKx1XE1?Jv9@pG~9d1qJ}9_on-bHpXC3%SFd0`2vcDSW+wwv?aF3R1nza zHPPCs?akn<&?O&F%z2r1qOR@k3K1G1H2TH$Fy*T(eQdG<89-=5)-y&to{~yNv|2{a zHa3cb3?9FT^CtCdNtW{?lwHW&^O+nJg(0{k z?@F|sz=NaR>q^ScT|}lPp6;5w^X<CKT8W|7lV*op#-RPE%`Iqe-=_qef-85mDZ`(jutC(rMRhEsH|Ex0Yh)oxhkE-IV zmbKA#=OTk#?>0<}W+QMTZ;C;Y^Z7ao!RjpB)y!jh$aUwLrcPDq6)9gT=LA8FsdUeq zZSfKpG=m+pm$)zwU|86!?p9O~urKyPI6KmPn0cJ4GC6|}wOZ$-+l>X%r1B*pl6VIu zXJIk3kPP?Ln;{j-+i^W?v$TxI+i|ntT=~UDSRhp%U$@G*yH10P1 zSXX6xIkRD;di;Pf77vo1_ZXOf1gCbA|LTGNGcYBRjD2H!x$1{~UCs}#Ohq#Ql23D4 z5*CN&IgsH_yI1ylY-60uRB4L>G?RoLw5nNdg}?qb%2|^Gh}GBS$&J?|VNq*jXW7UK zEd8GJGlabvuoSmuHlBn94c~f94y8fXx+K7o;uJlGUHH({<^r52I1d8tzGuX`z&6^zXBgw zmM9l*Ib-wrw;!(zV;f12@F}F-;OiwC6pvI%e;Ii!&mfz8g5PEl=UK5ykdABNtz)Am zN`5xH@pn8*I%53iIh$D;x7Z37p8$3coV%Bs<@nneY@)7KgiTeomY9rRuAQk+Od7xX-nHotS!>=q z1d-4zOc{h{S862egoTQW%b~cXz+n1qu(>}G+zzl!a0aCrh^Rf`K$QhN7w^Qk%m#_m z7&w02N|6Lpz0Eq2`YCFr26Zv+Q}kpt%Zwq$46fO6d;f3~c+GxZpUK ztQG-oJ7-_v>9o3|-ZHQJK4Nad?CmOJ45)M3+LH)GAG^=bm!uRRBZFQf!Dk-y_mR|+ ztxq|PCm5bbVx66o$#e=B_6>c>qk5*Z7wn)3jl$6`(~)u`Njtx=>AR9pQmm_H&DRLCSaeUuT)z%91?8ZOAB(5@c7rfjlbaZP*h7uULaLK@;VK@7m zsJWjdT{dv2CRV$l=|249j>d2k{9hI<4gtuFQoEE-y;8;w<=3Zinr2{_NeDCI9}ccb z&L-Vm)+Pk`$*@(i^{=qCVeC4~sI6}xuq?X+EY?jKJIOD*Zwo_1f($=3nc$lHwI33z zb*vu3OQU{k^qP$KlYZ9si1zR3_I&cI` z%x-N$byLS_uRM**tH&OfXw?y%!U%)lNLWAU%&>(zh}G2t9DPW zd0tVAsh=aLiI07!w~fa~%ZFmrX*^fS&)q`E5nTPv1I(0pYnktVZLYh?flOi(@LEvp zoJ9DJ!9xtN5Rvht48Q5pD;EZJ+UpU6a1<&5fVP9erFf+mJh~>i`GF5#?i$~k$u?o( zD1j(v$a}}W##&ZO_k2Xs-_){FBy}vE4Ec2;?3B$7vK9%~TBZMn^w&a(9 z{cl-4|NK>{MLw|y^MhvP3|&zutnEywmz5tRT$QPaTq~vr!i^`BH3tB&XQ!4vw!>Gg zv5pYd!W2qEw@DBP=leljGiX~o+9Q=s&pX)Ws5ar6?^XJx_o#$w@c#9sUYShRTb3v> z63=3{3=eTA)uVFUg{;P;-^U4!&sC$xpx59?F13Q5sc@dos|N|IKw{|C53lKKwRL>y zX=@WpluvszEIGFMchC`=(El)zMQ*q8o3iR9708!Cx*oyb|ya59^;sk@Nhjw znB+xaVizR0k!&OabRAnI0>XJ^Z3mEwYT9u4%AmH?m9o2~zz-g6va417>;JhY%)+DJ z1-3)y*2uIVt*F%jgAFj^rFeI_dj-9H4gnaS_~W8z3*BB8A#Pvcj#>3uVa^@mYh7$4 z;6T~Bd&~ng_-mcHjP|o4*xJh@bP;&4gAl3h+M>2p zP%%eJn!|mT*XtIwmfi}jvJ?>0E|w{aDomeRJ!7IM1-xsI)KBhO7TAvaWJhrKER1mcq_JJ0f1-aal% zl^vY7M}*Lk`K18nV%f6PK0c|y)pb|`d}RSEJ|=>wK>mHtU}R_PRu9KhJvhdUlmk^l|A*SvOk3JGH=a}m8=)W#^JPO!wropQ z1lKZQiO@W*T7mCi#Y4cd>DfX3$XItEXbBkcLTDQp>Iopi! znkM@v7gU6{K?Qfq^*VOfxW1P|g8xMGQ4d-0SN)zZVPE$~nozAl$Mv)sYqIHA~=&W~nAGYB2B zZHe$a8E07T((`W}CGTcN**2p1SR{8!Yx=S>QPO1D3Rhxx-|&s34FE|He<~ z@Yb9w%P}8fac&|g5(!0p82m5O;#A;e*<;AnC2fbHJ7uX+NnpF0I3TSNbTgr0W!;SP zL=1Yp1vL&=@iI^#ri!=at0ofj<(ldUl@3$gg}lKXu{;y2=tvuRAyK=bFV?c;$>5=Y zpVs~aC3=XJYF^Q#0c=m&(#XfwWl3|(C)5NvL})d7iP+X>)$yIRY6@~KF9iVPDy6n) z(t=Au>|Lg%1;0PGZCHn}655!b?eXe&RiCtdVJ)&!(Qy$;LYHN@peG9K^1Oa4&tbdM zD;Vy?95p#eiyoC^+-CVm`jCs(r!1@NNtJU2m3e=kx(Na^(@7@o@tCMcZP{pVyF_)X ziM1*q2IZ=VtYOKRsG-IMD9edvV|wYBd*#qU$281GrY1jPQH+!7K#2kLR{cBMU zWR%|Y71G4?@b>s^Yjpy1BG(RN2wcjmJFqFE6oF#N8WWaklL7_cGK9hB@ZcU90)>LHeczw`AAP2DHI zsR%*P+TJe7ovs0nIo9qOfn%Quk5H8YG1lBTNt$=i!w9=aJOBNIH!d5h&m4KCW}#=Z z>k|Js1lv1<$*wDr@&kP9M@1+?rtNMe(NPg?M#;6MhNfh-HE2z$qLi05zYrA@dOZ2e zqci)!S}<3k*uo{(KHK`6uNZrY>Z-uHZQmrx_Mm~yyS;v`M?tABRMOwH7dYtZsU!{w zj~ZO8uG6UjZbO40IIq#Go0hc?zxXO?EX(>&aSjwe+bcw#;8J_!V;~`&1Rff6>vCVL z20I&cvZSQHC>#N(LcjX-Hz|TEM{s^YY^a{BV;J^2q<+`;gLmU0W$_dgofP#-iPrVn zxK$o8vC6Y4@ikalAx`XUep{_(`aWXK9LOoKN0zhm_Y5t2yToiD72wFcGc}~Sq|@4< zGZI%ZaKKIg5}@I#9J)izvJps%*ZY!Q3g3_20z;L#`jaf@DYLs1!E7!S)Gj)s&?9&Lb&5Y4t{iaHm5GL&tEeJ+ivGD#106TgQR zaFGlt8M56D@3OaJ2y{W6Kn+wGC~J8eel}$WO8M%|pbixV?WIy%d!c=k;Lsj`CvmR9 zBxQe?NnKKOqwX|*k58z)dIX*ugN5uN{En7uTseL;Bt)t9bLHn(vhLxEma-p`>X`T( zYdB+%*dJ;~Ql_8pE-MPW<1z&$fj#ZOBR`|qdG!moh{TT2=rGUN%vy;GujREcitUj& z7jkz+13kR~{j}djuBWO?$U7_rb1*8hq$I+c(&XG0ALUGn)8 z{W~{+3Q$blo%$OS^En(EY<@)L7Pc;Q$wtgnn9>+O*$>k%wp-N6_Wa2>fsGydC|LXG zDa-;%`DO@mC)7pOA+aqGh--cEX#ba?+eW?~Y$bP7%c+?U-MVxe`KWOC&ePE7U19($jx!IHs zh1V|%{d=vz2W}P#rz(|~i_-?+B)UGFKF%;%)`P09K$8^R3Dc~(KBO&%4tIejvA!+j zllJ8q=LPt1$b-4S1==$&muXW=%*or-QY}qRBpbK1&I^tB_@mykpU$>Z!0$!}BOC#5 z|Bguhzp(L`Ow?VrZF4(gD}$v7-qqX*$-P8QPI?&?8c7g0YaJbAINxIREgE8xKXwR6 zdKn=*hYKwy?(n{F1F};JTgm^6=vp>-aV+o`#mk#NO(k$KZ|j?tSd@~f7LfpBbY-p+ z-f5Zq;EtsV2hIY`?f0S514KqQ{n#@Go56H4Q@y= z!Yf%wkaI!a9?n#?lEnW(_s$;=lO=DnI#9E$UXE< zd@~pNyZML6?J}HBp94<>#DA~zZt#KO^-y7~WFBS=v%yiM$Fe25- z(eOcZye&-ngA>{?qE^)XtEgKD5i7F7MreKHqVn;JVgxa)vX3(@N)oUpjh1Nnkn7+y z`?l2?Qmt=1gHG~f$40V;9C0bplmwmY{!O5jG;zj)Fzp%A!P-6kg=|;x6wt`2UH|^Q z7Ca>emNX0LMpst3uJg^cr<(m*vSy%Pe$XWH!9o{jmv!Zms2DK)e2OlOTzg~!>#j}j zDhKEg#c%f(bvDp0Md1b?-I6~u>zeyExx`7;p+z{Bv3va>tnBp*i-pvwaa+IOtZT!N z{gaQSbCxpmhVF`jTlZt#g&A~6Gctrdhqa}t;(tYeK!R}g=Esx!-#n{w?Q;;|(d3;q z7pIBD4Q2cj-VOyGfIjmCF7ML8GK+dx_s>4~k!@u9pq;WquTB0_LRxu`(aih8!P(*XD(NerbZ`*wBBW!sW;{`l%+CrZjP$`M1MV+2}3{pt+@+gqr6NEU!Mp% z*BXyG)poQzD8tPCb!JS`uNfYW@Bbspve_#II^l&1q#(nLO6Q*%loO~O;ZCXd-YKgN z@fm3{7YUsB)PYX9wo6WJP}~92=;cmuFK*Ma5pZC#X&U17V&yjc%<-R-3dz*>b>U83 zi?5PV7J8uj=)PT!ebT&v-=|8o0R-Eej}rQ3;0H>w6UsH+ zZ#n=b27|nl5$-ytEw6{#J+_2oCSc@qgI$6GeCuMgMeCdV6DC)P0-^tVulz{&tGRze zyBd~R%pQe1lGYUHU1RJwZv}*nMqTsStgY++Gb0i1Of`1t8O$I+Q<9TV(=u^2AgZU32rC=jX)jWZ~2;0A#I&c=x#K)iAz65);xwjkA#L2W#C0 ztp7-Z;YH!S;!N(kYyY-%oU5XYbmrcHXC;C%oKS{&=qVGJR|^%3wi|rh*wM4oy+=?& zW^?KjQdbj4To3Luat;`Faj{~)RDyEe%?5BQ17P2IAFV!H|E@ywF3U74e`dqebNSct zWnBxN{=JvjdL#I~qM@mZ|wX+7*F)~{P)2CV7L3Nw(2t~i& zKwZ^Na_wkf+J||ZO?_Q-^WXzzxQs3wfEAqxrv#A>D(A=iX0y7$ykBSH9xB0+!W zeD}lrQzejdj>c{GEL>)<7_}_f>bj8WnZzHngyk0)>fNY;MGw5nd#e{e?H=EaLUhN! z-qTxMWsouiuwL!D`KiLemtx46AxVP}tJGwVd<@;I1<2b5=v?*>X_BelYc7mM`)qu< z9LifP*>VF#e90qetT4O6kSnyzlA~n>I?;tY$y6X7qmEgqDT@UUj2?J8p`f02Xlo)= zQ);Zi%7>2FyavzUJ>};qD|{v1>-DRDoK;$@e!91RFojvo4Yt8~2q_X*3zY%N!l=sR znIKs7G9YVOav6&t^+_v~fn(ST-P0EQqPByqT}J?)1C(QN=@~1xxdm7tP?aXTWYXDmC(=-M0wqL zne33+YFBWr_?mK3-I5=shR5Bj?|?xe%%@Zns0eZeyibP+Jq^ZDq;nEmd*#43G%N+q zA>OJ-HjO=&6k&#kO>$qG>RlyzE1@W0zj#6Ad|Ff&>$7PPl|YXk!vx+rErSWIL)R0_ z#Hhx{!n9qq2s_j4kYr2)9#UOZ{Gx^EV-dxBBO%-<%vTLbotO<5F=QlLwO(8VppI*w zp6Z?Jt!&x$W6d5F$gsqy5n=rm?FYW&vjIFpR8YkTLlZLmHE_hKiVLgF?M zlHQ$hQgvbKav+9l%a-E?3@>$pbU=qv{2D_&veF&@+y~AkuCYGy0dsBp3Eh>tswvc4 z<58dno4%=WT$h)SA=47E4Q?I)F8M!~WGU$YIH9}>IW>0$1xQ`#Lu!X*7@$^_PsB66 z9#h~GkpkQ_n(+Zg!Cx!^v{F1CHUkVn8+3BF@A0@Q1I$bp>!+4FE74Ch#i7~HKYfs(`ivrUAbhHeN-MU{#KIs1gvLo;@%I+v8E1vZ1+pY#SJsUVF_v+Mu=QWZc zVBZ2; ztN3dsOQEiPKE%F@XGZ5jhq9?f`<{n-$MD!Yf`g?8=fm`>DIXRoeKw>s+LQ7C*)@09 zgSw<#s+jD}4>3dy7BftrtA7RQEGpNVAC)i<*>9|w;lxXs!^Ue6h{xx*nR?!>=%SiN zARPwjiR_JUTb*k+p*Bx-53L1_QyoZmupnBYt(Mjvjr2-VHw@v)eQ%H}+G_+I=ZfvY z1&lwwhc6OnEd)!nsOO#{mSNPWsaFRL7( zyn#ITK^F&%dJ~LC*{rQCbmjd_<$+|ej}mrc9vb0UK18|lR$u0CQGaBy;T%7&C3GOg zb0GQ-MzM;8bPUALy$wPJUv7zYWQfP>o#HM&9Zq`N#W$*JM#gP<1t`W9J!1^OX9Gd3`dbnrj8R zx6qkj3i^N)s)2%9pwM1wtBDpKwt45}dFUe2$AqT9eqW>6GT<3b9D@8&zIg;DM~~yK zYu>W|8B;RDh+l)GL3pNAmUQOK zZn=}%I_xXVL*K@?ZZ8c)#qh^nJuB&dB^n@*Zn0w zRp(kl4YzSkNB<4>XN|R3I_k`C*^KLnR1Eby?v$w^Xs!!0#-d~z3~X=#HvH3-L(+gt z+=3$_f&xX{SS`@$#k3gv{ru~g{VhZ;n*n zsq`2L9VE1Ds^4ydh@DYFu39~h*KGOlipv;!Y_}M<%*&jDx+L6l09oKC_W(OIa5tPR zaxJu*UWwhJg$K)h7+2KG3qo^lgPF8_G9YKy7TH&i5z>q%McVU?FMSR*HV%1BAyy#cr$6Sm0d`=yEk{3Oj*t0ZbqK(9y}r3Ejka zfGKOnd3Iz$v|TrF4NfBtPiDO8rSMjNNgr&=V0@_@aQ?Dfv^B3 z_Qg)0_M10HUq{RB+RbEC9F~49pzQM*etnef3!e^+4d7*TBW{d8H_cC&DJXUJO8jdt z7Bom*m4_0fLbs&GPSW9ENdTF#ZXO6C)6+aI(wJHDJz<=M-OTntH5Q+T=;03W9StLB zU+;qZ1MvA8!Af0)7isTWZ8kinG9=7=$=@8rxBH>m;1@(N@FR!C9{#=P4AJ2(HLeGk zo2Qy(rO)kKyziLzdt6oSZ$i%-J)`u<>A>kyjycPh@OunF%gI1C>=EZKCkI0r;AWp3OMp9~DEEpCt5Md{}7Y||BrL4nWQ zBZX_D>+jZ8GX7T`J9mpr+@6WcDA1-yrN7f$yd3h5%nIA!0c|NE#3xkUBi3cG?5Jb1 zgRvKS2qx_dj#w?9kFm;W21~g1xMm2cMz~*T2pF87t>H{GZK-c^m%3iK7{GMKZy5mA zNaXl=2i}n?9Dpfzymd>lX?>|h7cV(C(P;5?@G4@hcZkyeCP{`tR5O6$i&EJLm$?Q+ z9&Y+o0rjsrxL1R-mv-_IE!asQmC}gK)T!WQHS;ZkIAoF4CS99l$$)x4!{5yQJz4^DB-u6 z_NO{xo6VA7?3ItoO!eyJYLq=Rc2`y~9q<}t{yEhkh zzFTRjTe%-#(!tq!|3B@xAF|oOZijLmh8jPV&NV1AL#jUeldX8ZHfO}Xba}0y2-{Yc zEbuAc_qZetX)BOFy2aBSjL{FjTs&|97VQ}I!LFX;iH5+uay z@bC-w=Yn@%f(#4&6tgh4d{&(n8&T@KmD#4K{pgcXA!%drS=+fqxnAI|(t;uqsvA7E2b%A;PlhG@^elw@E$&?tg8 zjP3o5g^NieuI+3xD=^P>C#O#P-<5C#zq=!Avr0seRxaBqiemQrIbrQgoo3K$DnTN0 zKbZV5kQqFKZ{VRFD_8L~+w@TpD5`4s5xRiO(Ir3?ngzF0uRg zd{^LI3tT7El1Wsq>oqmH{H(-FhC)_YodkFbbyBTO`Ln`bTM-CwmlBOP$nzXCfsTEo| z)%<$az9s1baEV%|Y6r)(pepn{w?xoGy;5!p$G6CIP}>qnoH-%d=)x)}t7p{_6D|}! zCT8qdWNz~BMTBAtDEoNSx)Tt=hnuSpYy`q1Zt>o5x!9Y|gK{89#DyLE$SCLvSRuj9 z3!~}CTp*k?*{0Sm*vRg7b2A`B70h(M<2{f+e`*wL9QgnlvZpbqEG&zK32p(Jg~r(% z%6pkYOU-_wE4ufE#fE{pD1GchOxO)TT;nxb*Jc)LnyB^cPbrxhA>SErN_jNXa$R=5 zE>-qGoyCwtsK>5UTCpuR9FxftY<+7t$#i1n%%|760b@fpLcwe6I@-jsfe*B6-_UfC zFAqMenm?E-GEmccbAcA@q%Hz1f7&JH{OA}~{ER=&M8>&`>*Vqgu-bpijdN`RhT^Qgw(BA#uxr}CDQe|F)Vhu9 z2BKyI_ykkb=<2e}fs9ASzztn&i*B%8GZ~XP&wdvxkhT~8o-LIVC{lCS1`Z0u`ZSY9r7$L#(yAZfYCir|PXZP+U9zn4N;a}=5th;3(OAF~VgMbVs zZV(IjJtJ$0iehmqyCH>or!KYf1(uwfFd$zeporBLI2sgYp2pXf{CEmuN0i>A$*cul zAC)RmYRM%$4WGQM(L5IHVDato>TZJ1_qI_-Iv^ZbbenLk7!yvf_)uxMYfvFzxc1j(BLe0RWqzH1{)aCatdE8r1*d z6gppL2$#bbVPfN4q_4Z6gYD0Wxi&Jvsxq+MLx}7KUhcBA;yxV{!(a}o_OWTl?}!D! z&Emz;_ej| zvXZ9$>a>^7Ib^oMDmmp&r{0#HG1?zC2N(>7m3#U0y1ln=N)F=_3ex4#Avthu$Xa>P z2(?~Vp}GTVh6BF?;FrRn&5mNMQwf`VhsL*Zi7e(|CaUw2;Z*@Muo!v2KGT`7m51kLs)F8Zq2B_(lbshLDH?TDG#GfGwBo(t@N<$jmi&BTW zNpe+lleJPt$3gdvTodRz(vL~GvJS!FE5~phGvyfefKy~VTen&#d zN&334=jQuuos-J#)ELquHZmuhFb<+by|?JY(~wgE^n3AiVstp~O$I0Jb$bHk>ezMQ zaV?pvunvY&k(8~c*nN^Qh#+<5v`p^JEZ{w+Q!S7B>Ds2FDbKP8oO`QW^~*q$fA(1* z%x0XJa7A~*48lEs^)`|X@MNmWY*u&qpfqdXvPjW;QfHQdh_xg3f%Su7_mTa|liBfAoBnWh6MQcZD zkA5)7x`8wyF_MTjGJH`+e3G%P7)_{PqWU4*!@ICDAC!)Gpm@{!zs-ma(GErnJ(*U< zt+Ob60Fu1&0lH@=$VAAstWMDwN2cPp+}~pI^g-Go0&|^B3QFx0+ct*xF>^@&rOUsi z>%d%?t8c^TKXC)T)Zh?IFXx2N46lk=tr)KX4N{@={XFx=a>Uh_%*_@RBDcR$^o^HI9V>{Se3Ns8FmVotc}#Q( zM{7G5MSgu`>JH<{sG-HFa9TmV)--cn+J@Jb!vyADDB^=VQW7ia6ln`4t^4K7fHe$X zYadV^;a+njnmSB`_MUEQ*u(LgQ137z^@PZMTV3I?Co_)py9V4)#ySzbNf@P?TK#nu zu3PV;VEGNf@`sY9pVvwYzN2PMxfFCe^UZvM%GC*dv0%7o==gDjfe+eZ?0S(!<}$>@ z75sEf%ECVcAk;kjml(YoeaQ*rHkaA`(4+hfRPuFqItdsC7owpX5#6MB+(d3toc{k|Fq^==Tv;A0qhkhwP>RV3LkD@R$Vh?BKNR7Fel(juEcOO@L~ z+9d|BIw91auIyqT9UaNxJJqsGmhs~jj<_z(NYECs2Zy_t+Xml4HG9Yf4OTShb05($ zAA;Tyn+)d^JgZedaa>=(xn_Zr)bCW);QElzUthR38yS`(?s){jW}a9*QEF?naaUXt zyyJkC^P?vvRr&Bt!t}IoJ9^3qNh#crtCaO;$lK5}STb)wLpU>Uzm%Yk_=Bu#;j>g` z+ z0P7|zWr;ytXiL#iX3*AAAZfh!QpQ&}o#U|yb(1GuD0<5zuqTiAav}t(vhXtw z+_A&O7zd$zapWP>b?)t(0^6auUD$2&s0k0{0N7S9bMk5^V3hWIt4BzWDuPA=ywX_) z$oy|@(wo+c$1D4YX{%)b#J|rQyC9S>M6fmG@}Md~L~Sr#vGzVpMboijUPvtvl4-C+>!V*7KhT%(l$D?vbE@I~E>>fGwv%fXxZ56_cW~-cN^QaD!yY zQdqNBVje~vPS;*Dcyt1@s}B8`!)Ya1q6XPd0O!qRVLwx;Q;WBj(-|WYn2Ht8gxj?sOqsD(m0{M7 zwqTSW3}tc!YcAAl7`RCx|1T=PB?IcJ_Bf|R)i_#pLfc|a8^Z}auzz>C!HSrLf^G{3 zKfN@@vUiyinu?AaXu-`0DTMG2<4EhxLQ|?{!Du2VHdkheGkTlwf4v ze<$h#AB@w_#)$1-9=06=6c`55f%cxRpLS@RoWy)3wUe0k5CJ!HS2EJlgy2Vo1)o zT~)=rh8o`2m!(=Te3)21oD#yd)l~T=r(82$0D{0=z)JaNxE}X7{?=@7YpY6Zxt{LO zdvh1CjpfyB$pwi&G9_Hnz?ErwAj1TWP~-)NXrA0M88)puQdvql zSqxq4AQ6b2ty%80g}qH>j7t7ZpdI;fx&AE9|7puz1aWvDx4@^%bOhA9s)<9m7M)$E zWm|{x^a#$eNr^O!D$LDCSjIj#a7*^gaIy8vx(k_!3CiJe2gb2hyMC=-=JzMZIA#1w zhs`{bThJw*h6~2f4`Kkq(YYel)2i$oaGyP+Z9&eo1~Au&P714KM(W}+mQ*u{%`Oxv zbfq(fwo=hD&v>INrvV2>QJVwU4$Xo_08Lir?jZH>FASiz9ZB1+1=Y)_GvAK2@19%$ zkiD(}QV2W07T4^p*2nwXCOox8T64~LX;P|oX;T!Li)D(}y+B-_3h)YJi~5D*x8TXNUm$ph|qPjg+szn>m<%B6PEXiZib_ zDms`CvyFc!-QkDzO`s!tLn9LAt7i`gDpDX-baI%nZI~6MLXii5q-wrs-&nr8QGZV# zh@0L3;Es}{g`SrKR9jx3RP|S0erheYetgZWV5P6rmK2&^Q0mRF1pBJ&KzjdQe)5Ix zgEN2#Qn0A&KB)&e^jW!pV=Xe#O@F24L4(LZ)y?*Sp7Tj7G(Bdj(rMz?ZNNQ*RZB2J z8_#45Qlb9xMm}hjfV@<6CGQ^;EUSV=Rk-vdQA2dU8^@b_jag_|&ORx7P}X91Z~5Ax zGL#MG7zg~r%1*z$0S@HbJrLP;UE`VhWOuJORyXQOAyCER9fCXupTU4Hq$H$>UZGMH z!0?{uHo1&bw}x0{4G+m(h`%_{*P3trlm#yM7jc;V%In-oWgvnF3vIDa8z zI|EucYPLkJn6HLl3m7^1b`Bw$sBLA~pV{&(ii4@D3XQGm0<3x~DX4+zCXKZGF3&HLdx?quF(@5z0kQrV6?p*+ksum1yx~*Ew56T0U z^M7_s+QuN18k~B1=`S<$`&X%+X#*k!6n*JqZV2|7rNHWk4M*}NCk*f%z|B@kKVPpM z@{(UnV`&jC>@%Nf;yNV=aoW*O6@4fTxHXF?e7FC2ATCpQwTu7}QE&5~!Z*|Qh{(!J z>(=HdvP5re@WQ8SB3_RM;I(;giB}~FvIJ7ce;nB3Up@^wa|P%}=>gF00<)Rj-l+Sv zr-2~qa+S6{_B6l3N%KQ--06G6eEiVJ;Dh76;iBFrE{}4-_FX!3=`n&h(Rbk8brk3M zwTb_9*xYxOiY8CJz^UJ*!|->NlD(xQ7xU(>A?JcmXcDQDp+ z&G`|iSMt%_7TcHLs)%*N40hyT-0S~1e z&yf&3>9bjFne>c;#CQ|Z0Jp)?A>Nln5bpp9gnG;@hnW*hn4>oPf-my)bsS-~G!-t^ zSLt)6+xi0NLZbF_rx3os;3Bbn@2ecp3+^uS=XV~sG)qk2rgQ|!?lI#HD zA>Px$hlGT@-ilkpKC&o4BW@vMe^j3`oLm`?fRzCoBV3=SbV?s-DLhA0_|4_4tqM64 zVo($#Eo6honJz(yj$j)4nKi^me2LfagO1-agGU*yAv@mt7Ur$YiuWsChs#~(#&`7} z-+sBZ_C{@9x&-{}H9U8CL;@rb=@(s~8O-3Z%Owj8zepoY!|Qd|+{Ba_0yKuI*VAvKAC~9%aM_%0fj-GYlBk<) zQBh|ngw#kM=H9KuFn=C$g}f?@0!X!?p-GD7FHphuLmj8A3}j$FZJw@(n(PHY|DHbK zi$T~?Q?nEDQ^tufK}18H4>mGlVJGJJ{-#b=H}6g&lZo0x^@t37h8*n!0IvhaPH*C1Z66DEuMTkP&AD_K?9sj$PIp4C9dA8HFd3a9R$3;gTrM^*SX zg~b;OPsdGb(6IawuKL)h`Ejq9c|SVuS;9Kh`jnlT=kmq>!GyP!)1g1W@kw?zD8t`A zM+Y&0H%MQ0-m{%q5S zm%I8l3*ORG$XT;j|1Gi$7-kgla|8S}(83`{5lm*%<&|4TuT1KSq^wUrMolQ;+;H3W zl#YFAS|Rj4-OV_b%BZ5?SWw+Yefa3%A4txf(__G)U2FawMzK=p>SR0|)r*~WTuw6L z3O^m4BITD+;yEp10j22Qfb>`2s%e8m0>Qj!@Z8HHZ7aTNoN>B51}~ee$BC$EH8(?v zF`^&aGj|TBd;es;qaDUD7tfzLfMaImO4P$IpwTig@zgXGT(v6wyX=ZFtu3-kM^>gf;aNHoZM~xB+y75IHF-_}BTY{WCZgF}0XA*s}E3(a_ z1ol$UXGa(W@O))&50dEqtt?Cc2D)~Itd1_;#KiGo)q1~sm0~h5lRKx?3{(x0*HFsS zDiy3+;tefq-84-a>Hd{nD46)~j9ch2+x+k_yXWLMcJ z-~y4;e5QqI`69x14K38Yl0d;xNN=vrZ9}2Oal2#^;Je`xq@Q1Q<3S#$d`y%=T|psG zMgcO|DI#ZD1wD(Akk`mNp9H(~mVSF~lR4l-Uo<%8!&D^mN5MgB_3lY9?_AuZ)+JkY zL93VL(1uHu>Q2^QHAbtnx{0FvxrlkyA-=lt*2)zLkU<82iFTt7)g1ixHf0Yc(_6R@ z2@N$}b}f~2HAE#f!zb`2CIra`rhZ5Btd(x!QrM`c;qJo=58BY(W}Eug;_T9M+kUVAcA{NNJS8Da{Oe& zpH^sDMuQ|AB1~o4Ct@bnfymp5hkqjN4pSFYuSF~0L{(Bm0%_RMmenxKhCRcGF;fv* zH(;AG&j3j!f}tTm+>*WHc(}SG#rj9nT=S0(FrVno$(=2by~M8DmM@Yrbxp(S-EjZ7 zddcd;qhTX*K{vl)a%-xVJm*gJPa5O8hULwcSkyUVF6qJIzm^q>I#IB)`*w0(8gp~Q zKF=)r=3bu{3U8BE{w3`M%4<(&^duDY8P*6{V5FN7#M@lfQMqQcrD7Z{^V(6rVnJjs zH!vF^s&cZA1j<4LFb|llvTjptaU}{5+*wIPx+hFT!(Ol+^KWkLG#_~U&_1n$c;-EM_D0j z|M^Xovv71?wzU~VG1}wq+)ob;u=L-|3{f4(<5IPz82>s>Gn96XlIAjg9tanI1mX?2 zs83;jvT^JHyfIC)@-#xM53T07EuwHXZ2g&nG0uKKpJC%rih#=et^c zbUXKI<12*r#-K=6h4Ly+j?W(wuV9qgDx;Q?r5n2dTJg&#kop8ABGTj$MVl%A&=E#U~7>_;!86=GVyL+9KN&@&c zWTnp67=!C^rU-N%o$ryH5qJW=U07&l>j(~ktR@bwclmc`ke`YZ!G6#lhI~9jcpOvu z8}u*l9dFZGwj?f@an;ny(&d0U=eVEYuTTxX%&`M_Ufu2rLQYO2xj6|Gz7rX zzPF6L{XNjBTf80_q)yH>_l+(`_XQgy+qk%5lOq8;sT@?<#}}3)e1c$xv42;SI?>^+$!}}XaVQTj zxmmGP4Sw3W(TIJKC4|dw>{P;19}AO^RH19aB(Vc zGV8Q|KCp&0n-F8a^tXTYWFG?V1*Zx7{9sO64!+A2l6juchJx~tNe5Z+?x@?Ac4(Wr zyHm({;RkI&>+HpS{6WTnrSP_AP4C%kCAHI}!0(0L`IFFtY3@OZCW@FKJQ14x&Pb}a z|Llg7K~yAg{KeG`eP&%hF{5f5rkwP}@5B7p%3tZt2$6hwKs*~I+R0^ADs*0egTIJP zDt8xqkTJdcKd1LXh{4WLoIDx8LqnU;Y_nsXKAf*$En}XXB{?%{&%D;!WpTwqoma9R2BYK zBfr_x69`3Y+#cGn{<){oTeg$oFj$e((U2-d+c*hVMAOLY30a-E;Y-SjBoLOFigy`c z&x-^zZs)TfRiV>9W8~h)rgwJ}2d9K(&{nN%JJ)i(jruh7lJGtZT>=#vaCiOEgzU%k zY^BJd3JPb7L|l8vT2ySsgDnvW;lpW*sKnfL5dQKY%t*Ngm$Y-dkh1xYJ@@uIE$jT= z@5mq0XWlL`VSB?NvpDz3#FfTsV*O)z+$%>U5$d#Ygz{b8D_zhZFOTbZlJYL^3x2F#xG? z&8wAs3ar#qZw}6zk^`l-xIpn-hR0D&Sf;?KSW3N`ADHH%lfUe0D#N0Y=#)Q}Nbqn! zcmaJ{>(87AxnfwV0r|yqa~Z?O6ohF)7y!XJ>=QR`?E~ z|GIVF%oJPi5jO;ai{~au&HKWiQ?gNG)~e7xi5i@Ja^4)xEXOwRbFi~2Jn!jt0DgXJ zz%FICd`JGJkD`Yj;=tj^`OT8xvfn-m!5Ro$Kz9VrprhQlB4;#bAoWPPD?X$*UuGU> zz9%}5UepTul=8Ag#~g5Gy#k~XIa`IBqH&wRJGiKv!e|&@v}&j9uokUSL9?-@ zr7>=dRu@^>C=u5`3Y+s9jvNoEK&5~{2K*-ea$NM>B81K;Iw8(a?PoI8s$q^%AoA&g zqv9m}HntzS0TNP*MH~ZRL3$SnTczYs7_QAz>HcVg)n-K4WAwA7*5UN<%rNF*uB2+7 z%o%0l>Ywg7w%6irZrrBHzooENCa51#~<&Cfxp|#Lx~z z%K$ef(DoqQ4x^~S&UDgD(KGjLRr>Lzvlr(%sL9)_AkO%1=eSF@SDO>!bNxr)xJw6*4Wuj_16_x?u_Pa;0UK98M_7(z%Y5QF*d{_?4piyF@qe zMom_3vammuq9$;&o~7^_^v-vHBeVBp1CL11AN6&gbwhg9T^gJExBCaut_Sj(+eJ0f z-dE;otkqCF&wB=*1F4p^e-{;l-4%4|G6N3Vo)~kegzQVHzyb#{@i4SC$fMX>e}XSa zyc|iy3qYWG^8Ba4IOpe{E$PDlcqIBwTCt{?FRrNM{!L~F*dBO0p@*GJ1n~QZ-BL#O zifu6OH?hh_FQOJX8ZvrCtPyz`wybOfF08y}c7*+H9N>wyJ?5f|@%YIJ&K$vWsFi-v zyf~zu@IXl)wy5jpuvqc8Nha%N7MXLCCHAc>DgDbaGU?>LMvIJhd7DLgnHlee5(Ud& zyxp1pPy&c?n_3nX*9OaB#eK=rdu|mt2T2GZ3KkBzqNwoALIsZe9e1mLW1NJC60_Ld z~PQY99CzI7IRpRIn5*tQ1W_?WeU-x6$X24 z4w=a0JlpmtP*q7= zd@yt=h(G8(h>gg|FlsQtfUGoFz&_l~gR!iciC+?@i7jV}+x#*K@EB;{e`)Xj9U~nZ z*CJLrV{6B&;4!ud&$JOXCv7N(PzMNm0&+xP7u8m@Xq6d=tQc3G-(7K*^eqJg^7dz$ zRuG*jF)Bikr=;Wil2i@|n{)oY6E0)syXCfO`79{@C8GGnoRA?pRJS}ky!o)>js1k$ zZkz997o6-1LANZ36KNc$cO3^^t z3V)%u(!d3ZJD3IX@H>RW{bUQC8rUf;U^%zsr!Buht80qhLn{veytZ-F&l)Zzd7SZvRc}@PPl14ZQEoA(&xUJ}F<|UcBfZbJLh*i- zkngK@Sj)&6Fb^hNXIb%7bmyI|OrGZXKjT^E&6>BNszUR^V$wiXQyF8(sk)-A>0QHl z9Y-68=me^@=~uAv{G^&+{a$%3peg)&+30oL2!VvmI!c+2dOhr*sPNeLXdrsKe34=h z%VfjM0q!zTx7n2)RjDXB8hM-Y8)5gt4`@1naDS9~L@4(qcsn4$=Nu6b zRRq--RcfCfA#9%a*+w$9sT!CtbHcEg*vz=9y=^-BF^Rw4rk6y#4s8kfuwK@Qv#0w) zf*uT8ER@Ul8|uio9SW4ce?!uFLGQGP{|(h^#r9171Lb6i9H@V7Ovefu!ZW;}OOsnm?1BiK4L-2Le^mh{md@ zYvYRx!u0ltZ_ER$11y@Mgf}uPeyE~Z49M7A&a@1Jx6BykVf$$E({8~Sahmd1H!1p9 zUX66=LxlRSQ{ z<%cv&gV6~E*0LACTy}cC)+t4LaIa)xB=l|;XoxSCtkk%5FSx*z2TU@4d>08L^cw83 zK+|?S8h2cnQ4%AEtj6yhA(u@JNxCZ`R~5p;6U3I#NY5FjEJ%UsjdVLmc?Uf)_Q%+p zqr{%}*?wqKu!)pYLgAP2(31)?GX?4M0T|M9F2qotw4?`@UVb@J=~n*Y;hfdO`|`>6 zU^?40R9qJ$d=M4CWXLa#TkvWi`VY3A5~3Zgf4*mSt`Fh zlBcljG{k7EvcuD?4Lh91_RJb|z#A3vtyq`;_Slfx;~QoJ1%?1i>6xr?t4r{-y*7M5 z0MWJ*C)ysI3Wi>=euthHbbCvUDR=<*V!>6UL!e<+4+4y^0FG#tSRhcR;ak`e0@9u( z)wPXMIrm>>WS%kO)#|%<+n$kSd7NNT?Z=w&J9)kHdclf@9$G?t^7nh0K2;@;{tzNdnQ=B=-Caob(LIes>MicZNMB!sg4L`I`I$ z2&tbt-+nYILjQ58e8Hvxm5izGF?q{u{Z)U~#k*$kjlL&o;o#m9ZTj;gT14>m36CPF5dJ9#w@9q`!xjkk@S z(X4u$P&c0Ne*)Aj0C38S8zGr+fSB}9q4?Q zZwdTNhH}ATP0O&fjohru0pehAt+YcJo3A@DZ8z67k04ur(`nTaP_TcS=7d4>8(=3K zPzy#JPcMQd#lR9R#6-uWF8_gyxAJOMVgJBDj5I1}*vSFzigCRFb0qWP*lJ*>YIfu# z!1M6C`nJaH;vd3mfm0(7qCt+WDDz+h7a#rBt^7z)MonioT^9 zASlR!lsA$Y4vL4Ju+=OQZP|;)BE7`;2OdGUeB@a#V&r>!3ik}oogp<1GJB?OL*#WG z3HL*l#S<8yW~|n>9fKpywd)|&#|nH`V$*b#I!30T64xt#L4x)w74bPiUVV)@J4i=L zIxjbU{AN?k3JNT!qU$Q?HBP!NbKV`q_zj%%0ga*g3JEk!Phd1`K7z-vO?jE$gzsJ93xOAU z)b8ylM#_kN|{ObB>vomqj_ zHLKBq{NL2U6-mnH-pG0&CBc7su*BvJa!mIjgfL3e@fi?q@H|fNqmZbVD$0_7WZ*ql zi!Ec8@!6VX(K%)h>~O6-%StGE>!&cUAd8v==sfCj?D$n#G>%gDFHw(W!8V(wtQ1-8 zQR{WkP}GCs=M;9sw{}&09$djD{iQ-R(?y|Pl(d2_LeOU64dNF4%1i?h24u3{K)v(T~ zZpYX=48@zqQXO7{y*#LB<7%(-!}{xh3ny0z<~P=~cVKA9XIuhu4en@nA+u_|%KhoL z5t!^5#~kT9;^vv8$TCh$tPRpjLI|4@fQ0g!n3r9*fjam3%)yogPbftyS+S6pCk0_4 zQd`uKc%*5vYtcmlin{|%KGD!nwdx3KZj`X*_Spd|&>V{I8Ua?meuko6ZauO?pN(IXb zUF5N;wL{z8U%ypaXHwFcseUFJ{ACRr;vz+dNe$Hupv`9IoXFTSO*pc2a}zX(9e=fD zWBUC}G@L@nl|5PknF0Y{ zQ!q=d6@J{ zuo$MMc1Ndw!+XhX{cd!@=A~Te*yA+z62` z_Se7j(OwIq_34sZlUZDwz9WD}l(f(esQY4RSAG${qf<0TCk@@As2zOv0fT!N`82qG zEBr#S2MKBIYuR}#UE_4GU+%6)%g2hYzy$q%&7L$#IZ%hky~i|AZY847nUhi=WaTF) zJ@>9l(mqvoZBgUR^T9`spyDmAlA6wc6H=e^RBN7HB1Blic7F033H4?K0149}j`R0} zKRc9_TIQKFfy&dwh@M;fhxoqf;`PqbX#G+nWyXDQ2yfUnitQJHjT|ii?{VUZ&HgVW$?y1+D#bOd{zkV6Z3(*Xn2k%6RZHg3Lfxw znI%^$RQO-$!&a4zgLgH<)u@JP6TdGbN0wH!vRM55=Ji>G%{9qYi^>WM-kVfrp z9zQ^P?qG^(t|+PREjJRWq2M~|5-!CoH|FgbOg3_-S;Zqshe zeu;A*K;4~8$wdF@R{8X1BpuI8cW#Z;F{S(xOXK5XU&lNGEWj$=Y>mEnz3jB)z;k|xb>5v-GSl=IK za?FWy=A%eO1WW9Qp(AK^yTxvN34a#9RciROO62U1>ziORRnb^Ux+gYQ8}2b9L@}{+ z#{ja0#-~RmD%BxK(EWVQ`}fD1=WLGz()ko~$Q$SKTMtY6x7c!GDeL1nHuM3M<;asU z8@rLhu<_xRWlOp3Je%o@&1vtd9i@sB_EdQ5Ci;iBi#MJwh{ZkFVx)1b6BE%c5f zmMef~OJ01s0`rabvP)5WvdODqZw5DkNutj&QfjIT@pQ2edd?vQnjVRw7jDrg#r@@D zi1aL_k2CQ22fYKiYq@C@sw%?yDszg>^@~*M*S?jSd5|x=+V@VsUYFYHp;R;zf)Gfo zGpg~b83ztSkjnznd6#T3C3>fo8%#0#E`Cd7_zXB?4+@ZK zNJV*xLM^JaQV~w1ylPLHU#q9Rq?!U36N23x_5Q5dK`Ou+RcP1J0pONs!toJZ5)Fe%EH7Ggh zQ_@wHDU>%E=I-MN)0)!2UB8U+=+%9rMqCd_1o+g+M5@rm3%(`Wx}lM}B)ohZtwIR1I7?rt^>* zW&4-|EUWup7cP(wwvLF>;L7iY!f$DTN-8fjE%2B;Cp_A?CFgGaxR{(%VL>-I7Z*Ar zo`l<}9L`{9$DHeztG%6BD~BEbqDAxym1yN+J>li2842 zhiw3wh6TaF)k)-SOz3v4pHGk7)mOs-B%%eJ+`67)l_p(Z0K8?y2nQ`<0U&Zlru|{s z8hsI5V``6@eR?t0%Vcg};sF1KHvwz-#(J+;A>&MRnYc2-lWIZ7MK z7QV8!&a!EdaSrx=OJ1mRld~7q_9AnU|>ajJ0AVRlk7U zc>4eYHBJ#M{BRZIl~(jjvaeWfu3*N!)kJu4K9eiQHrcaB9M9}YN4KPOLh0`LDESSn zydP}2`rvA-9WWhCxA##(e#i_N2*=d3WYwieAB`dTj$p>Rt)k-fAyWb|5!7R${<;Z<#|(OH>0;HFbQon z3PJy6kJj#|d&U`DMxd?7#SIwpqLZ7>TzawOu888>@8CbZh%K`W)kYw{xyO1$z4M*N z_z<#Z^?NC26bZBL^{CLuUn|R@Xi)`pfb^JqG7BN&T0a~h;lwdb6;;V<31Vc4J72aK z6Xl;ysEN%JU4&(*Y=EImAP2jMLf~}PG`4ioM}1+_Kz+~?dFQnGb_KWhrV@P8DX@oB z6omQIL2d@RN;qsKVFHJ<^ZV+?le?Sare&Yr4!D2KF(x#p5{=uF20c`*!f)Y@&;032 zA^A0IN*X(9L_+0A)B`?dPEG0ch_^cBP*nj3nVG2QHncE`Amki`#Ty+_SZp*jea zX9(Q6`+@GBs3aDU?uz&6qZeom+u0*K>%^GXDtUqEjbrWb@bkMcnDFQFeGUu`9)jTX z^U9wx;YKSqFdoI0CI)pkShO8Fa+i%^4C8CS2enI$NoA$G#qASD@WTi@r~lya|bh2m~7_7$tPzU zu6pzf9Ie2;%P8so+P#0pGE7;d8tKiqCk}wOe(LI5xDlSsBY@S3DHWjiaZwEKLMDi* zxnr_ep3nFv1`9b_Kg@~wqmwS(jpdV0@O|Cw#Vp1nSw}6F+fX+6W)SLGPhmB8l*ic&Xty%74 z&*S>x#3i*Z*o_QEY*3nf%wzCh37m-fW37!uKO#Xj;`zFjcmEynx}a}56#hWBf?%0& zr0p~0-!V~dSxy|BMoLTWWP3r!Fr*SvUG|xWV;)}P&TPTJyAqCn8cHE{H}zD03f)B& zqf*m|lfj9!E|Nrr-LLNAC1vZkr2B4=cv#|?isy%uS)zkt^dfi$L1^IA*Wkmbg-MWC zgc0s_ZIs7x+fsyn(B4G#KzR7SFI`<@X2Le7>{>)*OYXUW(&wMpgP0s1Ho3;YZtns5 z)0^$d$m6EJAzn0Bks(nu0VS@^1Y0?w8K7f8F65+EYM|vFY$XEy`G-O;Tkc`eLh^|r zUFEmNYX5%MoMBILapQ+f;#9pvL&Md_JG{m@BCH>?oODmKm}Pf5W(>89N&=~dM9qDaB-Q*aMsbLD>;%Cay0 zTV)LgAT7HN0=Z*aQb`~Q*L9}9?;l~p)ip zWrrV9Cys54F46Pl{;gSUhQ_q?qTbgzA0+SJJ(ff_Zd{kcQf!LS13qXb*HifTMvmWr zA|bBTAdKD)f-Hk6|@Zh7nTMI#8>5$dNFu_oRFeCrMr;T#r?CQ&5_c9zaA;VNWF#!4XQ6p;3@q z4ArJr>A;aWkED@jFB8m2#l#Ap`{xf~t%*<*8txcELKpUD5(czj zrkba_W?T0C^s)pZTB%Cxsdhu(a}Bqxw*;TGpn_f>wZ_~INZSFx^~SAK1U|p8^UoT zI&%@PQ%`1e3^=Bz1(H?u2gmobjv?>*jsW=bO9`MaS8Fh6UKe@rb$oa{4l;~`BEtpR zGHK9K7mMUcql6rC0RKM#z#4lUG^$h`%?~1YYQ{W-w$e1mbq1h8IBU$G!7Asg0pQ&= z+mLsuGOislC%(_GDeol`HkT0G>xzUccNC*LpTG)9>w`fk1^9fmfpP(ZNHUxaWp&06 zgv~m$MlknP<0sAb@$*l`ZQ$#OCU^udbL-Adu|SGt_9ag9p~k^N(;AYdb_Ww%Hr?_Z%&R`Rz!{iq{Gizo%f8iJ*R;TJ#f>uqB zq(^_id};b2g5i~Qe_{FB!ja@tU&wn1g5;-@wA_$e*Rfu0&yPMCfy2k!n;-}&h-)~6 zYPq7r-ARuwPMlH0g%_CRFYDH80z>{=w+c+LAqZ-7Umj1@T58zuLIG&-yu>6CIug|Q zqAZ^)7lpuQ?;n^~=1Z1e`h*3(VVg!G#BGSd(%!=REcn1jqTD+}JzzYmNxlp|Rmf~E z)uUB$oZ_ib_zbZTAf|MY)re1EWU=r}61=bfwK2EB@Cq8xF5NuSg5_q@+`CliKGyc`2pQR#=CZ=&;76nnT#gDgiwk z2(S+lKw)KY{DMmAZ-vAZuyCv(5A{D54`krlh}-yNoo$eAi!^lcm=){Oo)Q9va$aA~ zhYr#|#Ww6l7q7~jkrP@ehZ|f<^riWPMa=TjWACQKcm-F6#a5cPmBj89R>W!I2oI5YnOj^{r?l{8&HU}7{AIvw)O#OZ(UEK5XW*6Y==QL zEbBc02h=7M+~=R*rAd6WD6$%$ZH#^ZUf;w=>|BV<^oA0h zD{c)1OTpY16Nsj1DGAS9sr0{=tz>!f&I{ zlsua{H_04R20i1z$eJ#OA4{;i(nRRUn!r5KF(7>veB7JOoc>Gw@bclXRT^lU`e~{2 zxiV47RJ1ha%n3FC&!_qIp~61jxGihf83OzUd7}d1LYh;fByMv8kXOTCf{kg7Q>UL= ziXN5=m5>w3DTKPEe+r%XH`P7i9kIto!i&1$hL?c=0PhW;L4)#h@H3uTL=htN%Vyv` z_y|B?O%U-ReeN^>c56I*zX`G5!_fca$RVvdXy1EKZBtnvlTrhW2-+JKaM)nsm%f+0 z!jT&A$XQGrAr>%ytGtBGA;YJMC6I7fZPwM2cnR>443Qsd z{Sgypn|$#93j7WUmLN$IjGnJ5J8OV+_s%CUeq@jd7bk^m^a7WiEGj=H@EDnR zQRe9zex+F6A4&5S`4Gkp+A4=?-$ZVjKJ=u}W-_?j2k59Moo!j}nq2<|HdK?7%1Hy7 zXMYQJ?`iRIV`}yA|CJ%#~-vn<#%lEiuO6C{temsKYoxHZzp^x(FG|%nlkg? z^;Vb){-e-~z#Iq%Q5hX`NCAXj!9o{(8*A> zrmX6-6L*$+qA;Pn2jJ*YZ?%67>m!9XJzvzt8L<^r>Ysd zdPfp`vx)(4hFIM29DLn$vh#Bc^3hYD9|Jueeq9*gg)H$LetaFSead5#aF3yVV{V5&WwVvPS*NhNHQh}_@Znbg~=G}lWFJ<)o_%6)(0UPq7pl?VqyV;z+6j9dL(n;J%?|6b+$8rClH@* z5l;-LTB)f&E&ngr3+jSPIQn-Vy3Pa$2G67Kv1=i&d)FpZ^f!;i{g_6?oLI^D!{@TZ z71*aZi@KBHzBpz4pFxk<@Pf^Z_8!Oqp{n&1g!X(;+^lTK+;pGEMCjuYI$lJ@LB^m* zyr7qTCO^^RedYo!*cTLl9oY_3UM-qblyNSt;k}q`wy$(7rvqxeP;pk(zkr?u0)m#Q zp1%FIy87P4r4ZqZ91O4QJ>KWR_9>2v@vIy`93Y&=H+wWxDX43ZdDs246&Zt2o;R_3 zRb}O1nXfl0VpwZ})$EB1KQIPxsDNn5*vHzz25d`GhjZH*V{O0yhBhtKK5YMWvj0C1 z1}}P|ZM-qFRK8q)3R?IH{>A)pKLL1hOojIHo53~Ja{9zKMyV8PnkH=_agZgFD_TBj zS_NjaC(*yF98Q zV{hd-Bt!N;7Xnp%qBoD+?Bn+r@3J#M${M#q%l-v zl|H^kU@5AIws3r_@SX=f>iox81)o|kRD4msv(BkFYse0?%*>U)Sl5#Y2SNtPB%x=0QZMV4bSUE5}k_C{eodfYPRL+V`KL)sbV>Z(Ph^}+4u zbYKrpTp>|VFdg=F$_DR&Sb2q1n`ibVuk6352=D{-O9v6Eq66)D#bikY+Ykx1UM}`k z*J)|8u2L3`&x(!TY6CoZfko@wS zXuM62QBktg5ey}*?Q`{RH1`bo2`POpKD(*YXv-<2eIFDWDYnGP%{8M^m%tI=2|OS= z){$6tMXF59v_)Ku!NkbFF`9WQ+N;Ucxo549zoRC#>uLm3cb>Fb$e`{>F=W0OC3G2) zUfD@udMCMC5F`s5@!p4qGtp0y0Pz|QedKBN4ir~x&Wsu6ygu#n<}0K(XDdckAVA;1 zFF18l_iUx|TJ3F9u7{rg0_lsLn&)jyOS{L!(0fu*CE5`T+deRH3o8rZag zFJ}-tEkqnpD?$oDOn}`}&&T<6=1hLu&`~^if1ZnasT=dAuDC@yS_){bzX86s4GMJm zAW*)p>zTTfMdgM`t>|33KI_MB-ut%K1WfOt_sb`XyUJREJm!Gq8w&nyRJc=Y?bkDp zwkCa}=V3b*%0M;4{eYgHku30ZV?ID=7~O8Dl4>?LPU!k>0@>JmVN+q2c-z7H?#uQP zHK7hqf9-?OA4dG9(P}@fSwSF~8z`*76-3ne3t@1$Cx#7#!49dIU5w4@d1sQ|$sh-^_?-r3tZ8;nu~=$F@sW`#DYO9*Dvs>r3Ioxm5+ zTB@GA=ai$l2i$N5v+WPNvf zrBvag*>+;uAP~o+sYMzrF6q#;8pWt4!9kP!GM%G-aJ=d3z{`I8jqQG z2acdr%(#kp^l01U*wol1Pzg9)w}t!xqUh)Cs*2qJ-SPABN0#b~fWLRwc6>PFzhUC) zi*Ar9_y^;nBCtz=(GkQX_r`;a4@AEgcV=F+pRx6YSbYci0qUkI=~=*L97eR#-7RmE zq3p_VFl=T~+Jlnp)(-hMq;M6-Zjj^Sa$Fd0$xdOLSm+y`u-aDjV4hd9liym7fhk`d z^*B}-bz8W=W`gm!_(#XUtYiwhCpVF6f5B%UoItafStc!2JnJw&Xkl=Wbg@A?DET}? zDgAFz?VO=$^r7qEU>`wlBV(~&5r3;@qp|(HNES-TFXUZ?)3ngpPE#tIJ|yAW?3+xV z#7@*yS+{r>YlaZ?uaaIDN9r|Dt3Ow2ATjR0Nu%O08_Tkz+d){PO)P6%k$B(gR?i>j zgr}ShS9Bw`_a(k);~i@uTgi0USwPU}9KnQoqvQ?1vujSFhfSK+6of>u*|?W(GH4|k z$XsLnw><|8uj!&NV7MyLLb0eC=}nmbm_T52Ht69^vG}PC3;qlNd<(1Z%~GJ6v?Z0! zg0Ri+o8i4h2`?BugyVFiKu{jXw_{nGC-<5*(<_#ao3!RF&Ml{mmh_ZX84r`H?Krag zQ<-BvwZ@+R3VB}csOOcW-sCZT@gsSv4_Zr$xISu0xqEZ)pk&Cpq!O|8xvr-1NS5T! zD_g?vYJ!*(`@ksrAs^g*a(Wqj5_4&#OsFi|Yt}_qJ z6jVH|v^{ZX3x?i%=&81kKVnvj!r5Py)5A`WU5;CwFc*>&rR9GC?gi$b~Q5H24_Et zlh|M9Q`^v!t}e~5dt@C2(-fil*z|*&SWhTa73#>>9cXgT$10pA4Ox`w3(zy4Qu}sr zsQnl7EFDxr)i7tN7)5m1JCK{wBW>hby&g0)_%j4C#u{ZvptD-}78ixD6|a2m`C5J zMNmptN06z?Gw}?1xBeGx@Vq$@f5UAXfNgBOy>jj(UM{>xhLVnzt z>tkPLTbzyP-4YtJN^DC{gXBw@0^LfG*?UomVuL9t{1h%Zx%oGw)GsFqUw*rbr2+P> zz$}-vJIDk+>ovY|RVKv_d-%?z=-+>&RUZAVL;7h#7u+-?Ax?~Bq3>|1*;RBi&I_ZP zLd4fBlyZN}7_HkQBR)p=i`lG= znRzsffyD;#1Yv9;nxzTG^=~&|%r(CyAFKbT{%o!5bv%TmE$|!u_QL%LRS16$Lp&eP zJ+Bc#8=t_+o^3Qq;1pU4khu7RbcP+{V#tZv$qt)okzhvDCRpD2$ zaGv6+uvQ}wupCTthwgaEIjo3%{aX-tG zQ*^NY$I3R$y7uPYeMi@{TeFGc3DaUUvF)@XAxlw#$jCv&XnjkLJ``?eD-dwBD@Ykt zWf>540RE{fZ3a?xEoO&de!n=0;h{4A2{}8XCq(@{iV&^!&|=A#8OOc8hg-N^E=fPa zq~UprXPcVSmO0cP8Yi1?nT!f$#9MfXCV{@&0VgvDj~fi^*nv>SM-Egc?@X)x*hP$~ zjOWbS!ktZ9ZRojg-!hDiPU`HjhrKB)L7w?xX2-;nReeC&&QaHZ>QkDOc2uFM@w3oD zjfY?X|97cXdO7ZdH^X&_Y_(!B)Ckvci5ih*R`+VLhSAH&Sr;Px*%so%AHqvX@KUG= zIP$=ug|my_PZ_8x*L7^Cwnn}bi9X33UemX@Kf; zb08p<&I;Vtoc?uC7^8+Kc04uhJOTCD!nOoKYxT|haqEc~sqvcaJ9Wgc=-s(oM{l(= zEEuqnX zybyADWE3BmDv%`hoZZ*LqOk5rYbSS&`PAsNlEYL*09z>p#r!fgsvB&`ls2Cp0#MYP zUL6{KL;Rw6UK=au>IWqA6=)Z~hmQiH2vNL(hrhrA4ophuF=HxIEt3Ts{aq{RzPfSK zN`(Ffh}N0}S5P#_6U~$MiXh?A$xx0Bcis{tf(8? z&XTxb7^eb=ZiKy~Yf%XYTOC~A3C3CPT=-Jgly>xXm6kS_FskCtOW{&bRE8(H4(G<@ zJ3d<36BStBKuXw*&}a@M?!JcUIM@fMV3DHd&JB{MB|&{YnagihaV(i9Zg~VaMc)GM z#8S6B5=_D=XYQ(ed^*^5LFek5t+<91NWi_Rw;$77C8OiZB`Glm$!tfQWvo%*K6bkS zzR`h0&0RK0S&ek%{dC8P+~^MLnTB)$5E8c9kQRxl5F)nU+r?cP`=g*ItPxx@ShaLdaeSU!NsN`01$|1ZuZHDq=3 zpbHKKD%#1b8KEahiL3of*D{=ps$$-Gg}dxCa+#ckhZLB{odptImw9}6=?%2yaXfFQ z5$`i#$5dU3z`^{!5`uk4wgTSVm;0l>a>7%Wvr=b`!l%8D)ZkRSC!|wrQie;3FJHu&X=sPGINI6J2sm2KVS6jetWz z%WBL+&iEBSl)nS1VNKx$j;@A4-~vbOFa=Kjx-_ za5UpoVB2HBttISQ3*^=?eSk!LQ@oXnV9!tiY%Asrf>+Sz#+#kJDtG8SCcksoi8g#u zVjv>|*9NY3WP13l>b{OA3HiP-&j#AM~+;DxRK!#1>%qX+CB0r!d7a=Q>kjRq%hx3cdV% zR$joX)$bca9e;ZhvlqdW++9h~Jto;Vb5*x*5WJC~IUd+4a_Sx`wCkM5%=QL>^f8m_hmQ-<7co8pzc`@ehdx$E|&?EH|kgQsb-caD-#>xf1ihmU`b zYuwD`(Xe+GwwC){R+wiE7*hTE%Js&h{2Jv>G-v%}w#lfG-be?w2k}QeO>88qW4aYb z>%UL((Q%_*`0B+i#pr_@mTb~2T@VH*-HB|iqe@Ls+_elYst2_tbs)e1qbno7EH_L* zNuIz|`?9t?G|4W2el+Dw4_X|W+M=&l6KU=-UnTL9=o`|2mf(L2J4J*S($~{QFPEM3 z!0x(lJA|^1FA+LY;OqEFx_!X(XFJ$hd+_@F6#8bNUP$HAV6J;t;0UL<1#ZTea1Dt> zm(IP{p9*?=e7tfQ*8z$r%W4!)t5hOH&~(5Phuyr;h8w6(87;t4&hZ$3WG@~IWPhuD z$g|Y(FDVNBPF;Ew#ntta^w~Dl{hee}aD@#aLFy*K0_uv@mw@ve)+{#BL404LtkPlj zza>`@8EA}`LOeM&n0;TFh|mmALe=?{SVU0eS6WhQ0Lrc0=Se=TN&nZbpn_WyIFVeW z!wG|~@E=WPJfKJ;uZu>ev@jjvuqYw$mGcbffrr7HSVNXpBN)HRDh>1tW7e^RsY=5o zpK~?lPNK}x{kBtBgAPOy=G83L zTM+oY{RW4I*CupqQRE@E6P=awWBVXr`}Px(DvpZHtr1l$BrB}SZ7?3zn*V7OfB`)M zt^YO0FrO9VS8PH6e*q~%*~h-YY&DT!dFCcUnkm(&2GrYYJ;Ph^>7Ucj#CCO{EwJQp z{)4dho40N1v1qW015M4K$RKN2^C*Ls!0y* zbwu?4R`9)(K8{puCK7we7&G1L{jg21@X=+3cPHQHWcB|Cb{^n**3>an@6X3npTdA< z-Ek+dl^j9E9n}J(bJjUIg6o7*##7$MX0Qhq!O%QyZbWIKV1>6jcpe=ImEDj{i7yyZ z_{;-3I~51yHQX$CVxYz%g3^E0zL3`){p}A zdH(WM`>RR5SRP(_sj%`2l?S$wFV7TrW-rtZp!!b#|4htc3oyQ^sj$J2T&#&;is`TK z7K3S6{W4%@2}4*mb2I3Bz$2G(6n_N>s)ne#WHAb$+{AI&_=0k`q5tv~_H;S+MFAqy zsg}}+9%X6Ha4KjBjyL9~mo;J{+X~=Em6LrGUNd`c!uH9-T`b@63WPIIzgn0F;sc#A zT_yaGZY&o7<-B~ADB~WY z8siyS`Upa~c^d(Z$OV>Do=jfSaUAv4`jyXhxr<{-(ilzoEaOgpSm#fojVET2y@QMN zkT6u^l(uNxHIbwI#$`S^!=%Fe-*L;U@k8c&s^y)kQEi)6R^bu$Enoc#?ClIG9kYM{ zwJdR)Za`kp{U*Ui zEVZ?tB+{e||MN0*MEv{WaHWcG?#$`yK5yzAnRuifZ7&+6)d^pgAVnCaQ!VUl zjK7ja91iHup^UQpEq*UPLvA#In;Wkixv5lIOsEN7^?*uFQlvd~3e$U_55uo=d6)p| zI9nT=EG?^% zty_X)eBf^jS@<8YQ#itzC{i6qsU?wkGJU8#HnE8dt8OxQVPV5e`VN-!t%JytO2HEx zUP<2^)75#g-{BzUTTy_H8w>s$FhxMVcDOX~>|oVU-v3twDk}OFVXG@nhsLl)C7Gy{ zDT?^-@L3+Xr=;tA$N{N(@h5P*Caj|FsUc_2mARC*-X+=**bv8%;e273RPf!n-`e#5 zNp>jdoZ6bHyvN}Qf5>`thUB-!6UrQ(E}HOLZf?uRK;Ow~yav!aZb4FJ_PLCTPx$R+^)p2T~s%ViG2!4)c?hZtCd22^47bFT=9X6?=CUkzOUAY^t#F4oTk!tXzhPV@Y~kX&vy-gYO)= zBp`~6ft`PI{U_KH^UTUfOy14?e&5!fIk@500hWA-yQy6~#lV#$ zKBQC#K~v8S2JmX1xvA4O)$4}Z5T5gAV@HfZOp`Xu@Wl77lK+5@5zv!9W%$IyF$dUCKH-5xbGJ~uShK+U@-S;4QMC<=Q1`nn`<7?7 zJ?x)NY41jHYG5S}>yITrAT2vf@Zkcg;Y_V-*>oVSruicIVqoB-$f){fZnxWMXOXf} zQTq3}Veu?Ur-@ZlvsaFd<4IIEX1^>)3akCYxRtcI8L-^lKYcH@_^`8bnpJ`2FCq<| z6Dh?Mg=R07<-*(2D*zp`=t2utAx_mF|o<*+Z|KsOz?t1q8xbWzvWm z=m|>Oc+FM4qDZK-xPwE;HbbGx=t|R1=`XtBsttdk#M9Jqw+Nbv9}!;>ibgJ=FKI(!0PFH1nri%EBJZ*W~in#^X1|wnNpT?1Vn^%ZgT` zS04e6oT;GzCRmAxKBFW*j6g3P4~te@DEsY}z`1HB=HMLW_Zn~idMF4L^aQ2@tdfLAW$$QM#GohXSlz@zkaoO|UI5}6 z!^}5WF1kB@&eg(;P*ccO--k``1X2anyfY-ar%<~`6$CT#??0NUm#Y6&f{AA z#SGMLbiP8&{L+qbwu2V$+x3N1q-gd&60z*Qa1l{-f9uDV{!%m$IzU}PW}#6o8+IqZdf_Z<#w-f?*r~R zmMrq-6P|-m{TenR6EbB?rFm@uTb6kewJS%dz;N_TcSJ1X#li~IMJ@)oUBKooJ!`G| z5T1M`ZpED^bf)FNiC%5HEFONpTU5I5B2u8MIqRAb&o-?QmN|NpaO0$>imq`juJHSK zyHQ?hS=6|uJ;F95`)g!z8carD2cUm?s7$h&c2%GYu&^0UfPBmu_s<|s0(hj%E?=Tj23t$vA4j%%Z{AugUC z7g>V5YH7$T7H011OQ}3XdFzBn?_5J8S8}QwO)5Bh^I=?>b}%zR6+m2Qc;!RJTPVEB zLn-S9casTuf`8+rgsoqlpEez6#4BtwyU7G&OpExOuaoi|2nH;K^}RI6uhD_)rGtl^ z&O;Ts`)gH)BoKtoYb2T0SeN+(BHL7h7h)IyVmD~PwHN%a$%4->bz5lY8S1IuK9B=Db8ncBIxif9QQiYK`xDmwb?0HaI``7!hhVYpDE%!t0mipPTq2xK8qpcf9 zH)duI%Et=_iIW=iqb zD*mUqQBw|?l24uIe5puJuvLeF4v0-aGj=&6=yB_aLUMB*bD<*>-668tT59qrV8iu* z7xKf?{C^xvQ4o3)yZo3UElkMTkS;a+`2QJr2a!g3|DI^G;kou$KS6BM<*5bTS9)|R zW<*10^j&9`OQ#2j3u+smDD`S#jte(MBbmwy?gBWk^k>%w`g#lVVs}TK(Oe9j4q<(@ zPDe({_bfpx#_{0&nRl;Xz**Q+=g=na)k)@Q;~E{L$7s_Ay}98bAyKTav!~*Hr{T<` zYd3w}&}AMHRS;0B@Q3WBB#_M&7oeHOTh8tOu{R;44|52oeIYZRuJ#0`tZ z^j6gEIWg6l&Xh=32Y(4`SI||mg_Xdx))Z;6RVtHirxEX5qW8z~N0!18TFE zU17?=b5mT;04WDhrZyvnyu9o-={AjF+W`acPW^7)&l{l6>;6+GWTEh<&zj(exv_&3c>frvPsXSBMw9F`s2b z7<&rr^boHH)?r=^sb=RIS*=BjT?amSHn{$s9YZ=yIor$QWS z#!k@4bUw(oF0mEA{NcRla$DXoagJc=708E34#=9-KMFs-dI6xJ6Aje}(v`7_Q=xd5 z=7o_m9MiLPI&&wsU}n7u{r&&~oRNzeXW)idQG1TfrV*pb+83}mF7(Yj@O7;1ZLLAG z{NQVU>LG_j9`qe7>WnjM=<4a9+&9}nG1{%K8&Un?}VWqTLgg?&O)QEZ{q~p zRjoYLUR?Km{FIU9Tx&8}OCTEAr4){cd%w#m7ugiQjn9~MnW5v5O2EWgUrCM&-v^y5)6}-nGq~rvQJH9-_W(p*DwyJHrt7ImDkxhWnQ&#)4-Iq&+BkTXZXFqX&sCzD{cdlyYwbK=QyX-O-U>2sg#+}EazxlSz0 zbtR+)zy&qk=hmI^dM;aP6~yd#=DZ|q3@@q}#P5a%Fhpy={_hOr)wa5D_iWq-y7q zRvIk{5X7yncM=U@PaKEr!AXK$l&KcJC&EPcZs8^oRh9`u>5jQr?mX?_Fl zS{OPeUb*pG3--m2O_SPNN+EgAx9*AD3)z|dkj3*{||C>E@2!;eKTd@Ljjl~4D zUdxcchNJU{vs&?Ie(_B_rmm?b_NJ}Y9F}l$%YJ`^-7T*zMyPa?yW-1{TA+T9PsVHP z?rHbPf{eUYne(?+<}pW<36K^mxLu!x3$WW!!o<5`*|w2{ME#OKxiUHxVmO7s8wfiD>w&Xq)k zR4f#@Ti=zu;kJtmga)c!a}bpHJkdz!xFnLbjt6D7Xm1*Hf6=Tw12u5;LXw?Ruz6)P zzyazsizg2Ywc!Bqiokg&71iCV6HUGSLOT~P#s4%pNwL6^EfbO~3chG7T`kcDGu+A4 z^WCmz+*tKs>k#Ou&KzEDPNN}$Bk6k>QfY5)P*DoE+WNgEnWDiCQ_Ig405p4IAY8B* z_@L1+z7?M(VUDC|1Mj^cXpN{VZuuqWb*OW(XQzYApFE1R${IpVVNY5c`GW5`Q`=l6 zXQpCX$6|)!7{|cL+BDtG_Q=A=DR0$E>vja@_FK#ZCU=h=Ae-{Eb<-KaCapfPJX9wR z`9|CP7+6o3zHjs!FLNC7FZzEKnCbtVfB~5wc$V}rJoCBrF8>*;nl3^vf9*lJ66MwO z79lG@%RF~{l_)NL4a~lastD}!uTsu3s~W@R5c(YETY*jjHByTtaJ@USS!Iq48Whn@ z8K=}c;m)-9cAtEW;drMCKIQpD03;PsPg#q+#spVxV(+nCj=~u76b2s_8J->+GNHI` z4Z*_d1+d;Lc3^CnBuqZ+T;N9<+tvV2SWSX2W5H-k^b+xMM4J zvw}l@9kpeF*e55GQuIXDcuTmyISrg<84Q1PBb^@2NDFs;QG^M~oTBYE`5H>|&3i*W z6gel5v^Fx)(Ug)F?i#Jg&Bxu|IihoUf1!ipR|uiu&{ExXE2_3a^}|#p{pOq2x0)SY zGIcpU+m;zhviN&YvbX5C8t1!=TTT{G$1mSw7S%ZytuwA#v;_{(fcd|mlLYpMMSRNE zfO8&^B7t(rlCL>|tOocG_|9*!XF_&o<0(SOmR&uJo4q-0{(K6T5_|Jti);#bT`hpS zj+RSvZ}7X!%(I6~N552*{UH`);&$6IU*kaaUxdFYykGDQqLI`EMCD(~HJEC({-Ll< z=kjzbrICz;q1I=uh|#a0if$g#4YiW}7?B@l4zM%SyWv$;#PJOM{z-|bz5~cZJ#++V z(tVVk0K<@norSQuZvF34L@y?vqCXDGmQk@q)6OfUw4&Nf`ErVAk_LuUyYyXuk z+Z}25m`u^>S5gE6d3!)IM#mG$%1GIs&LSZ87BRQh1=q`NPuJ|mDkX=E#*WNOI%aFD z3Ud^5aOx_3;mxVB=VoJQ2(2hASU^k_K@=+%mnWEW5XXia?t)(+;?l)^!-gG>NaWPPCMq#9JyU6 z7;txFv_1fQKF0Ss*r~VsUgFjO>YI>c#j9ilrtX4|QROoNK}9 zTL0ZTvn0n1rsDK(sb*8k3RIEXU70e0(8qynJo$=nT2V1X$=FXl?wm+ePCIUgu@Mx? z{Pl9{nPfI5{CC(zw)Ua6ichQjj#k+rC$=rrqKZj6b+&+Uv@{8qdFvHEmS!57Fw|NYd0zU~q3#Fhyg5)T5YzTrDGUioXf^T}bc;kP3kJHH<_2f+Vm)+$BQIRqY1eMasaJi|@4D&J+kh>#UfYK)Ll zTVr?`5&3g`Zm3AlE)PcAFL7qLEH3z?^@GrYM?Z_nLZ-6k>i>1b84{9<{n@Q2ghz6k z9EpH~Wot5>K$6K!PxGmr9H>^;t-rDn?wtGtqH1{R*1#M~kr)2yRwQV^B+@##y6pW~ z&F+n6MUq#cfU5!hLT~Hg(cA0kwt8CM9G@7La{>!6YlLCz_Fq2KeGwcuo$agj8y}OP zUj?aCdvRV+SNqLdF=jno{(*~7{6{=ZZ*Ru};>noW-dEHjbF${$mm<38U?y!bJivP@ zF+FmDtoGjP7l=8Qt2&Vl_G*MwrvA|R3l`7Ev&mRrrBGMwV$U3lf2Zg0l%xM?_Nq;r zs#$r!p#2YQn9QXZlpR__TOM%kdQV$9E~;S)(lMX;5Gj5kwB;gx(f9V|5u~Wo;%O6l zz(|;Mq&R?hAAV$l5EI&2+b|SS6x~V+NTitw7%HRNSf6q2aw|PY1l*}N`yk*y@%#%B ziQmO;$$m<)4HSpEnQq}UjcfJE{k|Nn-pe#!Fmbfb`B=3hBt){a`oc!E`KHVY9Xw=9 z=gXn~M;SCh+zz7Iom~>bmY?;G=hQ%v5?a78vZAl=|Y&WWD!az@6~jd<62JvG)y zNb}?1#}(D!DpYAEEm)kBUWRK0gQBwXaE-RJ&S9OM+&6y>Y)Ad&-^QK_G-e&1OECiR z&1xm{2<52LnlmW5v~WxbGKlqh)sD{_h-vN$DLztMQ({t5$#{GUSYFu#h%k4XH`?${ zO37~=k5<~G9^r_%n*r_7=G%x!2ZzUq77%{&4zEO}FkC0)=k~ zYtvO^N{F2#VkH;e+_)^X@C#vl7UWG|m`sci{NBceS0sUrWJd-V+;r|4w2=$Pb_{$| zH@%AQBjz%z&A=L1sk;91n2T!GZ|G-pu$W@_2nDB9<;k`xZ*yD?BUysUJ>2$D~A7s{GI@T zH|flpI>Zlh^yKcD+Vrdp@j`HRgAa?QPUlc=bgp=<5-uNC!j%*sm`_qAp1Y;LRbJ(D z)0OH{)W|-o&N7uSNjRu5S7*r2{Sg=Ftgr1=>jt>Dwq8X!Lt3bHGB>$U-M!3WS3#GM zTqakKV(TMg**WI_#ojIq?=x%T5VZG48`MM8OJRptPFkwF!BH(p5Br~ROeg_wPc&4E z&!x~!n(u#`dApr5#vnlCIo!j(`icmE;nh%1k#0Mu_xhqdeRo`*53k_ zh^aKl6Y?P$_PDpIaNn$IW6RLOe3nsYt~Aig)yeJ{sBXP6j$tTWjaqd+3K(=ZPVEdg zF&+W0uB7ez2|S_`pOKVO2Rr~pK)oJvIqg)1d@Bp_vwdSS@ku22Rug<;FMug*F@2nn)D}TT{gWYH`E`&!_gifV zq>{$YGBAmg)uy`dN%*(AUI~IH%9K5ujI?{F-0TKslZQ}>a2eV?&A-AG?Li_eC*B*+ z#A0wUp!2^x$dy!Ow8^5lTTU`SX`l%LPThM2(Y_^{7F%j(}|(j{DG)KX>t z@bCJ#CowIwFkCO-Nvg;yekFNR0#rV<5C*)77()2BtJ4DbRNafypHbiyNT2M?gK2aw znF={6!H3JcFMJt4>L8e+iPk_m)GMbA>hq>dFP7}3BzQ<|9>x_iVGH9*_64D74!u61 z!>*+o;wv8>7UTQwwdK$z-!kps^atr);cnCKK1(5mI%o$s~a+Y?%o zO}>A*4xm?I_c}JFCUA%%J2xt#TKE6au!zSD^?!M4b}Mf&$#*_b$!crlr4=h#Hd)L+ncdg5ISv^~1=) z^kUz_Z25VZAnAZ#viV)8q_m!(I<kfE=1>STTmeq78am1KD#V`_SnRKbt)FdZj~7< z>9(oie}dnEzN^!Z-UwA5t^d`jsgb^UGH=s*{pOM@T~_|K5MXSko;Uep&Y73X?Bw_idZ1 z!l6;-!0$R}W$k4X`h@U!gVGH20RKM#z%U|F*nc7P+@nsuE0=(aAHI1Bm6u)GZU_nE zRM8?6dSC6u=?%}ng7cz^+XF=G+iKOp$FX4n+q@%g3E>?cr%6jGSCOFy)HxPkC)*)+ z*v`kZgftxCP^=-FYlehBo#=7chsnT4D}JM$W<(HDpMB3^qvt_<4X7QD#4l7EM_6P+ zs!AXHOsBMj0#|Z#l*k$Cp>vK!5xNL%+>j1O(^FK~U&01n(3cm!2Jp z<2Hk8|8QL=*8@U_@}Hw*JdHuC4piQ`fD|swa&M*ttDKtpIX4COIq9J7vOhACmf1_; z10Ui-hHzlLH%%<)*YwZ{2Cy`GQdv_>AJR1+uZ@=wV~2Z#HW98zh=Onnwl!xKwFdK5 zO>d6s#S|b&)4f^M*5E8Xj?<-rb~Ar_7dYvK6ch-)YZZ$xE^0SlrBH)XbaO9&z#INq z1=NnZ%=`i;v>J(pMm~wb=yLsaASfX$Ed2^OJ!MrR7y$c7^!pXXE*H~E`gvz+6{>F* zWAbq?6SugDTClr=T8!d-hrho~XRi&vOf|Phum!?^*OZ8AB%xzv@(|zsXeL{~Q`3aP zvqJ$+*x0yV>M@(VVYpSU32Tm}G5lWQ=Q^gU$h#VD- zD86!E^ozoBt8@31k75BwY@^EhR_zFAFbi7!zI5;KeLP>i%6ZyV!gugRL9QYqFI*9q z*8vs-m%^!L(3e+Wh8|TjHf`t>5#6^)ILMqnFynh6e)}% z7AXYz(1YW48RZj@+@|4uUO`qHy;u~c;E$PE`scwf%3qexlf%-vQ#-Y#l7HKx<%Y}P zC&adr03yd6i`+ba-Qr=5s7_Pz9tN6Ga(!IhE~Rf!Rl+|ap7F(Wy-9@00BxeH$w}}N*Ai&zWUNrNm|sqWRLB3UHGc{_)kXg z($OW6BqEF1!2ER>ET~9bx8Bk^!u%Fm$4#-43NQog04c7l2psW6;9K5_;%Jr~1pg?a z4xA{RFv@{4_GvnBs4gW4#|o;;eaE}mV=rX(JsS@@P6Sg7?&LSHg7J|^?BS4%6BABS z?V`M$CCoWL>t=UPf9SLxfb0e*;Y6qxE)pkVCmpU=M8K{I9)RnZv@s^2z}Qv`;WqWO z$#li1*0H(lV0v%})W!@d;GTAOKCOX%U~(A~M}n{xi;{kDnrRzS1OI@z3$vwI72RRE z5iDtVLrquW7ak&i@Gi`ksILLlr-sY}%ADY>e#Mi?RwFhkC1Yn?s*x@JoD_6EDNM*B zp4g6M-R!KkS;2m0z93$zSx#`xh&lFCUX$Y)Kw9A6!^zQ-0Sb|N9E6DsBIontYtxs=euVx~11Vw+`DK#XFG++Yy@#)b0ouo6*Q1d=^ z4ryO=I_zj?-ba09>-2GR75oRH3RyEr9fp^P&l#=THM05Q`MD-qm__LckJzc<=8^Dsqn603Hu*gmr9r5Y=-r=}u0)?n zN_>$4TH@_|Aj+15k+Ioz-`tF0S|5|Xbbz%c#_1>-NrzT*$!bA`sQc{4bs#^6@@263^A2xiMOWu8!347`l1MCw>0P z=Y3?nLDVc`jo5zZvQV;WW~+mj=z zGOM80Eus~FND%=x;S((hWUdN*n-;X+`b*;n>$mp&%&z!qaoR)h1_V8oJwHxW&}~-l z9ft~GbM-}PtYsy|!ky1-R4M~*)AR(BUWwKeNlIw&gq^zImbNvXU=Zi-*F}4RfxRHN zB@vDRPTGB%ni@4eb9J+BQpO5Xk5Av;rHn%~8o@?GE7M0{rCgSnTU_L5AC+Toi%O!a zW3B>RW)XSxDKWxB;rB9SeS=GC);*H~9oTg0xh*}_cM7lU%qJDZ*6peA&s=6jzvuKM zR4DV}0_yA5)PZt4C`AjRSER|?6YN;C)|i{f>|200L$PnL%{F5diS93%v!3sQ*QyYx zUt}flyrWe@>)t%>$BA&#|Fg~p7;q{Ms`7q9_Ph0)v8x(`*yqH^iCszn`G}YjqBT_6 zsH6_dG#f5gK7zQ{j{nZ29c|PWu1S4rSjo@*u_T!ljs@DH(1H(8JjOk#j64^Y$}lMf zgo`Uj>2N|-G{xA=$?Iwm-A@j^wj^GM)nRsUuFQeucK$?UFN8)TubwM_@qHtMe|6T~ zEX^@jmORD`m3?abgVXuHa!g%L@rX8vRnY9J1<7K%u6!)c4kmT|sm)XGMvq1)K>~2f zV3Ip6%G1Q9BZFv5p6A5F0|dWs@g32<^R{|&+J1|@HwHOMIo^?Rf;$Y!nP+p$_;yZa z7EGui<fwaYH%susaU1@N z=H&l_?4C038YRpOU`BXC>j3H& zNCv$aSXi|808Qtew-z^Lv;9Uiv3u5}-3A{j0VBN0D+&wclp_OKk#6ylCM{$@q;P(- z@K>KQ0#YexfypOpOjFE};T$G!4^<`7zBX_E?^IEjh6Dv>Wf{md9X-@3M5M2@EQ97D zRa$@C$XYxL=lTMYkt%>|C`FjQcS&e-E+Ia)xsJ4okA4f9E(p(O?l=y?@DWsPQW(uy z8q1>AQGSFaw!<=ytrXC)#urIbL0QDNYuLtH^t7s;|0X>vAtHwu-K2@RLLI6y_R99z zj*Y1rB$y>uZ-`0AZKacZf&0f9%>}&VVj|3i7ESusW2YhQkS)r93Yczc@L$5o3C}!_ z3C87D=`&Yaai^7EsX!BVrazzP#3cTRUS87|s&&4ge=f0m(blO> z*ja`I*mMmJu>7li?quu3&$_R@UAOOqe9(5j^;ED1K&ObFz8%0{#@WS#4%pGeai12; zxYr`@R!q)qqviR+Bc)2!Z^k=fYjomqQIQu)~fZc8(3wf~;=SDeMU!>D@9dldT zH1*0rPuhODlpAmtW#O@ORnUo_Lq#lpA20rhl0`CIN>SEvef{4MceK2LrEYNRYcB7b zYQSEx%&S~jJTg(`AU~qG%Fo}E^Y!z9gf9HKHrt~M>g~iU*Z8r7AcY&)vT4ww6D2Xu z9TTnlT8GG9f;updAKN`14yjC;;}SCh@BAln5x@HI1iJvd+j~pIiNQ^zLfj@Fpq7-M z{@yO9uwrt`A6Z+awGfn$wv;UHo$FE0%s{Jso4Kx5Z#9;dcNrPKLNDxywtHLt<_#+! zqPE5JizJ?)g4VR3r$tVrb(bD07W(QR9Q2(NtgVK*RWpOYa7#!hEv(E?TW~@GR`~f4 z5na(IE?!xVuVp?diZ-Nj9>#C+Y<{K=eaEe-Qp2N<6%@DP3G>)tlGD+t+t^=Ky6eHk z7qiE+&TMB*K$1>>D{7^8=T8tGH_jRjb-t&hm8_=fj zWrP5!^F)lG5-6jggJ}|z}5L}{~>ji*RcQ8H-U@Qsm)5uiWOShAK#2( z)(_)2kWMny(+epsyt5CDRp~H?(PMsd(d|I2Xj8f7;;p8~h;x$zpCH8MinjhYFHqS? zZro>Taj5POffX-wLpEL2acQI+^x|{kQHZ<*n^_)wuGdTVpgVzu9~GXSU|sep(V*t9 zK1JN5q-GJdp z$y;G5VnI=)zjH(5zk5;*6L*lyxuIgNv!yyY!gcnwDsCnwgNSq4`fWzTisiTOp#Zj6 zBgC-Twt4PU+(xU~3^hS7xEWKfkljX*E&0nr?iVaJ?Fi@S%+MY>UA|#Z3G-P5IRJyO zm??`t(G8sNxe+fj#V2K&x0KzdLuG(2k?7e2M_2ehgJcXmuAFfx5aw22^9R5fka|9P zxqbpM?>9j?n5Eh1oE@d5z0Yx0SgFXB!XWzJ(z>p@Yj^=Z6AuTw>u3nsgS@m)ZnFV% z4(Vs8NTLXn8SR4H+PC~64MN+-d0Wu8g~^X22vO&H+Flko(7V1;5}+)1N$zV{kEjCB zAvXK~Hfk2ti2veiRz+}VJg zUJSUYHn|n*WMaS74_09)wV&9IzTMgj*Zk!WNS${;F{OPQ!-_BEG-PPVnwEbKsJ}K8s+-S1WFwuIS>+Syw)FP@punSt@2LvT80G<{`gHYA4!xx0pj01- zI|C8oCBG`;zz0!9{nH8D9IrtBkS^jXfv4EeL(pw5i3TZePf{eJJ}HYIAxx)dcC%O* zrMbMsunT?<-^H^{&rQ|%x}(MJ1C^K8?+c((*#xs@n4m8G2MXE_4Kij7p_jGsQ3 zUQ<>X^(r(mN=S+C%M85A|0h0+#b%JKZ)mH#G(m|h%;D>d2^B5rt?Fw}?$5wd@3mul zX3T8KU+2&mc<oKao)uHNjmi~8gV|cL;U!^O>1W3F!W@9ZIWZd*o~_;lB~O$#A_gaJdVbwm$+Rn znnT|e6Yz`YUO_%Ft{JEG0 z-Gwdjuc-7qE!ZS_nnD}_G@h=TFZc5a@j~^HnnBuogYT9YdnW%PsUQwQ%BKd=*L3PZ zn(x`!eHM1Sjash)=RYTT&&MQ94Gb3QjNad#UGd9nT$9}N!~sLz2`!dMT(VNbgQV0s zfYwZ-x?}~l=A>0HP{Y31pki&5M1Pn}=oi!eFQt_A61iPCPz%bIc8;17rH`va;Vt#* z8wM}%eF7vL(kW)edFMBRq5XdEWUv>@l6SySMpW(XN%UpGM_Xg>Iy8?X&~$G z{518!Mj7Y^lkC{`2*;{<%iX?&)A?vjtw2)iDs4<>Z>I@U2V@^!er5s4oU=;%v-0c& zE9$Nrf5A}f?uL_)=LPl#ix8&Ozv@qoAzio`y-t+;V)U6*lM=GqHkbKTy z47vz@)hnr`5>T?vO3tuk{fo{21Vm95bSUAvzK*OE&t+~AmU)Bnxz;2-ZXO)Dw@x4b zK~r8wfANbJ0MF|M<{oM3w3zWMV?ZxCQ*D!f3%OeJ6-5GZ1qQu@UggTJ!%k|uxJX>q{I)pkUE z;jDE8XdHZkeZL6Y-Y@ha^l3k(hd4AeO)+Alx+~({deOIy@StwUhv3vG+g*5#j)4ns z{F2M1?QoSOH$*sJ6ssm0oqXxom1b;-#QKBR)8-6lUKKK-1Rja}h#HCiq!v*HVX0^U z%3=(2i5(J-FyO;pbVQy7p2Oyw>d`? zQ9veiycWty{8!MFKPnf&!aC>&kJ5}HH znuNWBiU194I7-dRzrwKV!zO&fjljuR{HeQN_r4JDNaiF^*S2VaG+*g+5hA1N|6yWh zzJeEAJ*A)r=;8;lQkhSBs*+s*C^yD$MuIewnNwMO&P+u#`Tki1^gPA7R)9$2BFm_9 zILBO0SRrsqx_TySh~ihZZ%Q4}cS4jZRZxA3kKwHU=Wwr!28q@?ZbU!vv1g?= zNZxoRPIuiCk}i6XWKv{mBeQL=mE4Z4Ku&s*Fbr2Ft3?^*gZoXpbo{tzpsZVl_sL|N`7l+v*@81nk&Byy~C z>BGJDgWLW%gZEd4GfD;J5|R0jnU3W-?s2nfjb?G`af$4BC^tZBIOU1Zlx=k+7#HGl zJ!Iv`vv(V53secphu1y87mqj?{`}OnaIhy>c}Woy_ZiAW}}~hos)l~kpEyo zK8&NHIlna1h>U*_P}aVsVVp-z?#TkJWIPp@7Ne>QChJO{g1TVg-pWCyd(5(CI6U*# z30g!U87st0KJU%O=|ZpER#XWiuZZEoxjgjMQv`9;OFI1Z9ew9qKQG)L7I`tz29gvG zVCjnir;|!9abI_?dTxUTW@Bj$K@ zOBv2IrNKCLirtKb2iIQ9c%1s9uvL9W59zaC646Lkh@u&TeT>=_D)VM(WbJEzS4Duc2SI87i zb(jmh#u}#4_lw_V6~2NfC%A}<&jIc3ExVN#K4C=Y@5YjmbJguG?Sg@cbieYy2)&XJ zd4X;pdIX4Xgm7sU-U$M6MYFDNjE72o@QNKPV90_X2(p_ikU!Vh7;bBDeCiDRNC3aD^7swSO_GBemSuJzW4 zips4e#$cH=d2dnZsFzNlfMn#@M&6h8PJsGesVol|M)D zo-jOeouqH!*zPmST#OL~zK%21q}*twSpj5p5h9ucj~VGYKbxPKj2Bd^^m@p$R5#@$ z!EaJJ5!TMa;s)JpEr4r+H+00VBPzuP;Je;xCc9^mjc&b)8g&x4xFDm)Zi{cZU{D=A z$)K0{6_9UkB|8$9zY>M2Qb?L5_V?&+`3(nu*I|>PCG%XqbE6BcYt!9EED-o&M8CtT z*?h?Rk#M}|)!uSLiMyopM27XN)x$~ygHwOMALIrJ@AAdc6AGtE_a4P`HQOt>0bFzl zUg_-6NTnfqXb06?FnDSqrJ}zLxsOtPMCa6JUn(7!#!!dqTHSa<^ce=a{f~;YBuQiB zod}sodd9b@<-#D;W2wzyUpvXQPj7p14-I~PxetErmFK?t$sI0{I`!Don*H8f`WkNR z(|yz2U||z-`yl#UX~QH4#+J*@-)~19LfQgFPR61`KBvdZc(T7#n9npoumGToaVgtPEz#6FdtnoC#&m*s3iluuepk469By!~&Kh!c#ozIfBVwrCiUekjT6{@nFx zn*Xk>#|?rz_2(Q~NEH%ygKg&2e#uYNG=;s_h!KPXHx`ky3neW3tdcY=r(GKYLtd%o zZp51U<)H0Ma2D@sw-2q-#68ZHnB>db;;D_?-_@0+^b>2Dj#yXYWkIomNqDml%ppLG z$d+Btzc3k)y8p83q!Z<2?kP7pbG+yHyuVi;NNq27gAslMxhNDeH9n}e%UmghxddA{ zbb64ryX1mo0ghg;yBnKt!S$%p(&)l(DvzP-=gS1XSMB(_LyEf7ENV5sYnoV*&c%Ir@N~*&6U2NEB$k6;uNOHD6v~C-05>-IzgOyK3fc zm-TIZx89>sCk1ck1BhIa0`lFV_iPhtw!qd>BR@;I!3w@$P(&Bj0HAVJ#`aOYN!;jI zFTM5Tf-X?AP3oQeI0WOEOdOpvXeVi-vv@X}7U!jo^+IMJ%~l!SMci~FF+XK31(s8I=WHB9)(K`*#?S}2D{XcDM2^2h0pEgoR6(Sx`k2jOS}&$Gg__OISak?~Y6 z+V>pG{cd-K_(4?1?$a_R=i6;a8gcwhLZS9(TKRrXJUa*|AOn0rZG$ENRGlv=>^k>M z09r4p-w&(hzN*BII58javQizX7KiXGrVvvUzdeJoH_g}Hpi+BcWt2cABZgh)Lv+AZ zFcX|GRP-;`d;ao=axQ{ilJ_NSzRa#0}h_?q#p48$?jgr0#`<-b_VuG^W=v6 z>|OmPE0E|0g3@-Q9}l+v%uXZJ0BA*c*&5{AVyw7Nh&lLs&8{aYq8XqHA<~s^=ra^y zR#8=lO=06mhc4YvV)g!gq@L(@U!6K1S5bxWHeLop1vekFFP;g^Y+in#VDUv%YVnR# z0rhqB;|+nhaG?c!I2W6Hpw@mPGa0V71!fy2u5&d6UW5I)%99QaN2JE7w1^IA_-kRB zQ#4?eq=ZoszW@@FH>^^-sktU?rbvr(xg*K-t2a{*nJ%h8FQdySfZXjwX?i&*@?onL zqo!hYn(GP%Zn;Fy`zHS4Qqf;a>(_B?Fa@d5G7j-NK2*NZlvY2wP@G3*!;GAqQUc=N zDr;q3L^snq-!Rl%Uir=m@xicp0kl3ivntvf9YDYtB3FYNcO66nK5vrYq!qJ1mNU*+ zERYH>GqYi?>j|a#c=b6jy_f(lf%iRegk=^2N-RBwE2aY(>>xn3O_q_o@`irx^^~bN zkhY_oKfoey6v#LRTN139AAM_j&ezWR#pbP7CO14b0BKf%YsmG`@^9` zGKZW0E!%*vIgDVxv!Uo8G+%JkK}k6UwW(f8THAA7O#}+JaO7{_4D9&W?~vEuce_Lv za|Iiv#c=JqL6P9nsA^tetfIQ`?a@FV3MEoez!AVl2I*A%OYQWT5782lRmRejcFNc( zVtssWZ7KP|Im~s4emO404n-uHc#rtGShBrwxDQsTA?ows<4bgiWhIct&5_7ZnQUYs zbe4m_1-4XTrG3h&d?zYN(<(a0Ov=fA*d}v?HT(bXGJH=x5Pj%sDbd1-2j%d-MmL&Sb2`>Qr!oPX!0R6C~$Rgqk*@I zPW{jzcoGj*ff8Eef$fz=h_xUJ%hv3%2QFN^2MiK?HrV}}-iWT%*zq2x57&ErxlYON zxDZX}IYVX9ikLzo+u#E3nx1nFbP)H?rWdmcTd0$MFu6mpX=gJ&62Yf7M8)P>;J_RCi1!JXE!HY;f#N)>_hEqKpPe8Jxl2(6Frnhm$cq^On{yT*6eal88g$pJ$Dh%o=Ph()otw4&AeNzNA60NLp3sea^ z$ROb%TVpzh!*Y*%`OjxeU7_>(jk zCL7N&r{gib%3nfReBykPqos{$n2UTZ^f2JHh2wWTKG2Hsj)GXS?k4~pS1)+4P<`>Z zA}6PI>w}5r#^vn-;*~U7W2us!s&u}qKq#*!6!tcv)f$#FW7c%0XV&=VtiKv=W*ip6 zK&c#VD&SkAD3neUpB<$)*0&1Q;(pF8KOH$B;bIQ_Nk@gyVm8a#)~wm}DHxqqQ-XSl zvD$~YRPWLw0cC4BFX_8^1$ATqmC*-M|nT%$PQ5Ls!o z0)XpFiza9`p;Ym^~nyG211bSF`xk!JQw}{8s%(8O{h!eaT`m4 zHpmO=8SC2ulB6Wef&GZ+mX**8J8@$kMT-+PvQ+$TAdO3N8XM+gY`anxneD{?} z)_5F`PA#+U;B&5Kv0bS4hJ*$my!=MBGnF-|NWxXa_h2uC=-?HA65TrylQV@3JDGQL zj;^(thY^hqe|Rgk+U~FD3EJndT$`W_9xve|2HE)|H~Owe;5Kfh&4wdg-Efz|F-B}; zO!8jZJ!VsKLz2VLQ?@P6qrxAe>O6ORDEyEvMtS`+LwS3f*g-z}F%RShh#lzm0+T7I zzwFUIDG>WUXNZ5$NZaWZ^r#*3Ovu}L;G%+W%J#l$r#Wb+67INcZr9**cZaEn2O?7S zzfQTEp4*r=kjCE0s6d@`+Hn*(>T5U1IJvw0&Bs$V30;K*_*tFBKGSZQR+NR6N{^w zrL-ZOZDb&k1-|6gd%OGW>o<@4cq%*MxD%&%QTo@vkE3nB2RsANKePBa$t$Y|t9Mr0 zx^OE+OgGmqs-=AY=qzA>6EBQb;{V|duj?<7dVlRg(>o%euCyAm*g-7if#pC=%$=RJ zPDXjNoF4^F3^%Sc{$4zq0rvrQioKd-yK@FQrefK3PfNur4A_+qm~B`mzW=HK^V|I~ zoE@Wtj$*>93`=R!^CXcub8MLPR3Ro6xmxG zV)ulO@CbRE8BazTbfYy;YJHiiO{4JTFp5x&?uA#=#fqh_a*6WgixBdw8h^->)UkyfpYAf0PEt1CyC)}737fboYEQXHe6xj< z+kC4!@2F1Ri1rr)IcO)JiN++BLBlFE4_oMeb z=F`>=Vk~}xDjdLUCRv*@>D&D}bUB2u{v@xhP&_y{Q=1NHm=u#0iS*zhR74jL0K~$F zY-U8X+>iNrTigk0l@6MU^3KwQeEV6IW|0=T=3taM^|pBSp-Kbilp6bi0#vg=^iM>> zx%?KjDR=7&48HF>wq_D~jQ(*lk2SEy>@bR{$O5bcFsT#n7OTiodsJU$U+SiJ{7zy7 z%}IIj7^4wbfa?CQ^{xYbd!@9(HVrsvCKyyAN%N36ck0|1oYn^uz%LuuEEs|7?)SXc zu`DWvi{C?63(|BIc#t_BbJ{TWIEmO}CD~{KN8i^8<)l{=3_7Bj>zGu>rHf=-4Y3nD zq?9Tm#M5f{)^MmdR#v8GYi-yit;~^~hmTJ}(@VqI+7L7^YN->0!w5Bhr&Bz>{_p8D zPv{uy${w39FdWVp9KNkl)p?M`d3R@N2(RM`;qvOme6*5X?YR8GwGUcWJFeo3mu?s~ zO}e{i=!-1@^I!YsQ3gsMGOfJea=0}Jb#9pBQbgT6-jN>stp)13I0(<>KKMd-CK}*p zuAuuH_`vLc4D@iE4vD}|OJ#*CK&?q;7(nx3o8va!I#`lZ9dw3J zc7khkiPCTklDX}}8Y{xVI)S&Lykh5CaA5R2&C_sd4&Q378OwTn*ahEfhXR}=$?g|$ zdZjz8T~b2&XtFg}0kY(Yl&k)e^~+v0O_5{Cu-;Sz zP{uO%p=JsydF3-scFTQT@0_{oFT;dm=VJGIB@_nMuVO+Ih;DP2px`8do(0hyRgDsu z#RR5>V(35z>o^jtjpRXP_nlRX1BFkU%Y%Ah)vg~Lxpj10qe<5@36}L**OnU~kr1^U zuNa9pi8U@DV3QvDoLA8bt6_#_T(>NEtPt)AXn71BXP}f-Rb+GWGZx_>3RSQJ7`h3*dfy1}jTc7?w^$+AJV$V1QrOJ;n|7_27>*DVhb4A9{yx z1n8fMP&_BlY4VFwcf4Q`Uc_2ZWYcw$%R7q_?UvG(ZE@PNfpAw8Y|0s%@MhvbkejQlHs@8i@mTe zqP`20^(6ikXrmv2#ET0N|7!Wa+YH4ym%$6^r+;IU*&`YTj@*mL zmY;pExCPH{mPxX+I1o z_9c_ve(XX6{&rs1&083o6&${#rk&!@0$Zg!jPZDk&ObxU@JssU6Y+*3J1J7|RN6Qk zz|&!1jg?N5z7*dXNx9`HTZ-z``LRw*?56_@k-I4Hn6pZYX6b98z7cNVH`q*?rO--s zocCxJxKUqo?1*S-52^<~e<8vWz<-amP|h%z~+fHR{bf z;8U5FgGOk(IDYu!?ejihMfe^L4{*7OZfE1~^NbP+VJ_wZ$IM!Z=zxAw`+bEETcZ~~ z=!;{@T^5{p!GyC}Sb;m&k+kalr)yttG#SK+fQ@qNLK1>vu{?cVbwL=KP}>R1QrDpB zlzC>}V|EbtQDZ-eb#xz*Qp2u;bLpN1@}xY5(XTWDwux z0d-1SKoF=Px=}y#9`^w<@%)~#cyGJxW7u~SFvB`w8By|I2;!y966W3=4Eh>S)Sl$B zumuBh1%SG63nu7sQUbh-qZ`fgh%T>Ar9w-L#1C{j84Apc;DDuDvXb`H-$toCjEV5; z7AZ7Jiht7(5!Y5sB-fauR;_Q0UpX;40<6{oft2yx=6h+4H1r zRlTtq*|qkNmf57=2Aw@6eh94ZFt18{PP_;|GLkcE3ofr2`?O{Jl|!MpBx68Jhs?I$ z!J8FXUe^L;WO;-ey)KTSLkXs0Gi4?5f0Xp0W=u|-uDETq^K5*b8L#B%@mV)AlJNMA z!En(%{J|+T4$I?u0JLf-u-Hrbaj9yGCfe(lo^mmC&r|Sg{_|nBJ-DuP3gzRT)JlumXC0>K z7NydQn7g)m zK74uM9pz25MC2oIjvZk!yorue8UY_5Ckj!{EHYqtH*XYxHdCw(Ah|W>B8851>ju~0 z{cmPjS3Mckhe4=~rVrA(ReK7L!-MwY$WzX|cPq$?@w}p7;4+F!f60DlN-?I;%;OE^ zWJvX&p(pDR`}ei#(M}(CTHm~kM5)2Y>8=nrxY5&|B_u9aTbHKteT2HERJ?@M-D;~z zk`28mZ=f#CRoDC${S~t|o(;~KGcz3mWUQ6z&WN3K140G+SK1zQcLE)I41KjP^w$+0 zKPpF6#jn70rtpLssooOT5*ztD<=F%iY?I_!GarA zQ`#x87E@jb3{mGbzc^Eemj#@tTvRc^FNr-B633vm(#a>Mfedr-@*`~a|m2RbLlqdk!O z;z5{th3eE1m+-T^4#2zu2!#a#A#BZWOr=U$pSrTQjE;rsoSfx^fA;^uhp`&&qcL$O zswzg_?8cxX#Rk@Xx;QB8nehSG z;y+{uxO!j_Zgz|FKJBZyL)qN#T~*LV5nV7S4tc5){C@kUcg%n>#m9fSaoK573yqkp zI`6Az6OFt4`j|o_G0pMd>=;`VRn-pn!;fvb|KSjv7VgK#LU~OiY>F8X7A0++aOjM0 zJ0@{^U@&e;PSq`?Mo1R&yR!B@03*K>Iuo;@`?8*yUtjDU9L?B%x4Zv2rzvP`gy=Ms zSqTXO3FKWS^+w$6L>7WimN(iu4-VVM|KYD}ZvEd7}|mGr46k z!p(dl!nA5yU=Xni%2R?ZGhe`&d(v_w#tViLUO5Yrt&`?rJbmIQQAd(lO|-t{EYor{ zjS)C}-9K9h-1rNwGoBg-iY#EiNnVxnMYx-y_J*iR+cW(Msq5DM8w*3Cy@FdR7Ej%3 zk*s0mr07?>f=emIyJ<=}yzLWd8bZP;GikpRLoI)$sJA3+w`>WOs&EGI+RF?`v06r{ z%lbCzLF4T7JsE^1oBUZ!@FToi==E}>jX**#YCRQ`V}Biv|90ax0H5>qTF(c_zw(AD zB|_41$>;L>I6ly7tz)*C4HpoOW4%u?&gA+gxpi92?XlG#{Tf~r_A}9FF6??4_lU!r zTLXmzeEC7qdpGaYy#6Ydc0b9jQW6mXAb}1tcE$dCOvts!1o~W3*?-96S;eSVzu%gx zw7_LkBuWUzj@Hg;M|hBD5QV|1@ofmPsE+DU&NY6ZNX)Jeh;rD9H{Ob2Y6=am)7!vq zJ7}&k#w_8=MmYkU(Jv|#xt%zogsJ8gqhekCu&7~D{nv*D9fb|L~iOou$fsEar z7y0VV-N6eIPJKx#ElfOv?P?l(4Ca3;GIz-iXV*fM{Bv(=cT+;`&H0Cfilgd$rMt4o z4@!hTn=m^`mubf@Rh8WBGW0M|Z8nLWB)f=S3knaQ2hTnxCxz5co9!moYMLmW$<1F& zRrukJ`*`B|?yF}OL>kh%EdbT&3?h%@zuK63%+}Yct|v^fsKq3QxtZE}#6_iR7k?{V zO+JNTZEMsZyQ`ZqS&1;7o)_xR7x(S4DJ67FIMaNMV_nWBPOxBLw;MP#oV~V;JPvY4UZB);L{F>ct4%its z3Fi5XwP0fO*uLAc(|1HiVfJ28;q^VJ@E;dS@V5P_@04H+$noi z_FwUH!|vN=nt1oiCsTwG}m`N*3>+zx2kK}DI$ z#U~?Ffi5tRfbhV+3pX5l%4oA21ji0#Gh6AYX*+v(#e#oBf={$$*U81HTg8k@wH3bq zAf`~apQbK}WuxzbEoTiB=;rk@f^0(p0)BJ4?rdMBHPM;X;hWr7?ozwd^21ema#6i2 znd|EjWVdo4x%;ThuHa9gVlMx6yRyfkz)N_<$>mGQ$3z4 z#{$cWiSb$gEHTmQgc3Hx#xDiuY(EG*{9}R(t(N=8dPJ11v*^ef%Y|f(*_L5GOY=Pl zy3R<-NkUXu2_xUR*h>`6Gei@vgV^^M8W9;CLpA(S=7q1<(uiK_EZ}zkn9XbOqNI1I3`y$; zi}eHx!QSOFdnP2}`&r?iCGiPATFD0Ulo5 zRqnY$^~63VtYS19iQ}6b0YLaJzcmBqcN|rhvwb`5s{FjtttlEOPs%txFvS)*eQQ_y zNs{l1N=#lIH!7oPT9WOT-nSQw8jr(Ts`@hhkQ~4wv1?KY5xP9V_b8sULt8zRMf4qBf-b_NyMuWP$eLxU)wX?%yb*#qT?E9Ac?+9xx~)g(+SLDcg?>T~cVVu9rgivzMJ znyb#J#^!AA-PTfud{TEei2c>kuk@k^8vKzN7e3enO&CS&a5jY2y^|e#KG(RTW>J|Q z`;FYObnEn zzJjOk0$`>+Iw%O-?lF=!f$pt7LlCe~Wv<^Wq~IJkxKKiFN*=MUD}HT)@5gg33t=KEZK5}+r!-R>7zlD8n=k#`i>Tym(S zts!+lk6?UqbA`%~+bB7Lh*@r2yD&teWUwtwH>!jsQHOK0(*%X?f{lM(QdRK2{;3G{ z#oN{bvD6X|ex`0=Rt{Nbb2=JYOoj0|KU@0>id!!}oJL}dC^;iYZz(C7na9Bevy1Fp z;X@u@hQnR2mQ$Ybe>q|p1)!{Z??6u^FEW&k0RKM#z(5umHt?0$#3p+`*a->b#r2+Z zCXK4wS(QtPbJB6h#pImK=2R1-`UjrpDB1U?*X*E)wERO0yyvsk0e?>AUXkrw;J7U2 zoX4sU^=BwB%6HtWp$$b^;wH%^SRm>1xpIApkR`3mPTPey9!|~>(TFP)2s(iO-&E9$ z5gc%6A(1hs5KV{Vi3E~k77-JQklZQGMs z5k;e$je?HCYbembXbSU3#-9p0cX51jEkQ^Jh}uR)lS!neJCnLXVC46-$CTWwqGwpC`#0RaaaLBnKv%}(TEmaa;4l6{<=BW@) z-TGYr&Iqz*Z|~UB@T*wa$VbWjqaaoDM4&4LXteDf-9q&_*R6Ci@~y>o@v-;G@b^n6 zqJEz}O0M(FE>jzhxyX?L8~de-SBO;a#>1!W@ZGY>ARS~RO@2&JQ@peV4bL9m8V|NZ zBQ7{DN8M$fPD8UX4vMIvRFyb8E*eAsgnd&Qtb}K2F#n{vUVd_RxKd9m9BTJSU9R-n z7c(G7p5QmX8ksL@o$ZOWK!dH~Yb$KoDEt}0l+gDHJi6W)L9XUH8zBI$ep(mKl0+xB zDWfx`?Z}*KDf0<%BBJG>dQAH@CBz$d`T$7OVE;QVBW;wUE6Veo@?5=-BF$|ui3)j| zfZ3rooXUOH@6s!-wX`EXv+oxT(SS&Ws>`I-Zw9-M;X87;GgdBy3sq8!#PNoV3f~hE zrWPv;%xgI(MJ*lpi!@(h$PJP%^L&G`0>og$oHPl>Ys- zwkXz=68S!ywIGr|OBQfMWCF?J%0a~)2p4>Nc=Eyy$d-Cw-VZg6(>CfPw*>%e|L|*U z+sN)jQ4IWHYzkBLJp;TKo|BPf!0>A_qSdSI_JRJ>D6(ju=CppyLpv*X%=?}fQwnNP_#$piw!iYU#*MEDKWJE8UO+SP%`PcLmyPgk3L`mny}Z$QU9c6~9WVIty;~qWrIJodvt>bU z@je_vx1Y6|d(6_Ms_8z+0v^R$H*NPaO&#bYM)3=8w4bwO%(zcVcn~Z%SvP-|I&pB zr3imyptKZO+Ma>fb5Mr3+M2t5E^=i6=MQuRbn+~Abzlp-ehCAC#pqDo;!IkOvU?!4 zVrK5ykqk5EW5z?2^!RUwTWxt{v<${?W;#(pu1zSwQUeH25joFMnIjh2g!X_FQyUflN9jDv5s*T zH?s_gGpp>7VPvn79Ebqpfwx9JxkuNeg!fK1;R}(O&fRY1BllYASQb}@UrPjCBeTUj zYtK-~k~K^qqzfld^Gqj(O)YhEER?@-MdPAgb1)cn&KxQI0X{l)h!c=;S0 z(4g{po`Ap?S)#8%upBW8JaZ9lDBBU@W1o8>XDuP_MFo+#MyK(;0`N2ld;2@V(o$3b z>4+$YP}~?=O}t6FMYftGG2Tk(NqM4Gj(itdx2XhGuxvbO{B!K|5G)T)Q$oXkjcE}X zmqlm&$9{xSy%;2>Pk+?>rx>X+sLfrWsI^>!ntd#HQOad%T^qTe46B0hB_Ln!Eo!m- zmcR-lA_nB0i~tFQzDfRJjwpz@?qg#z)mS zjHjY9O4dK%j{haoSIzeY>7R#A6DenooYXyE9IEfh>l{rN*TvTq7yqNYYnJV3q1SqL zCM54VvpzwF(7G|D@_nA!L*gk&k;TzO175DhL=otNr!Im@-|>EQpK*dan%74#F1_wx z%~ffqDl3S->fQOBD2Tg}};a2Q}WJ>6%_WXo;KBqOeLgoW(yZ=yu^fN+h7kFWRaY zi;Jr5nc~4>CE?s_@uK|@fGF~d*V>nv6|9+{RFI~w206))#sgi6eLZtZzQ9kp)Pe7C z4oTiu;+jE54WDwT;dWLw3pOM1ZrCw%ju88&hyg<=HrdbygVT^Sm3 z6ZeYNzw>{{3!Aj%PZWPukjC_cOu(YBgg8Xf$O_SLl&|d7AN@(t01^T4kY6GL(F~W(Y60Y5K>WUz)xH-Uj=Q~zh0SnQN0G<#_ zr-lAij4A8KR%R&3lPmckZ$f6)+C)DMsNyp)(4SJ8ro0-Z zJw_6Dh2S8pD?=fAeSNZ3#Z$D@>R@9H9ZklugH!!TXq69TTVM87@fWD{CMP#nTSK8~ zB)>4GC&#d9SlBE_BO!kgXiC}&^p!pky7=IK1ngEeT>Rp1L#*N_o-dNUM%%$5(pChy zk#^2yxKd#G>`Mu>^k9z?SkX0zF%_oNKxveqdNx>fENKxuJ!7w(!OVq*6BVJE4qR>ATi5=? z?BvIK_I|S2LSAdk9^?A6PnvYm{+gGAJCQ$dV(}xl8U^}eDf3;_N@{%~2Jk@o1Z>N$ zwWQ58+`|4n?GsSv&wx!TK6y+u5VFxDAh88(FR!+$m)=)j)(QU6mzLcgL2NVkz(JnB zl|ic*zX4niRAG5_Bj{RTJ!qZ5S98VWZWwQ`}2b~zLJ&BiHl6E;U;T$1~NHbasUqQraw5G=nk_0#8Jr(uYLPnl@UZa1dq+Z7bDx<~?xpReuo=aFjl4PP*D)m~z z-)DjIR|X&EUP~iH(GBt~Q$n^<#BuMWFA2cAfRCo(ykrD;K=|Gwd9@|mj8eUR?Pew! zkqq-N*3~YF@^DUkm;DGOLVA$Lp!rkpl8>T9^WCaa-7Z5UlmC6)FNRoN}x{^4z|Mclx#N9h9ICbiq z=lei5266w`vfpbvX6l$!#+={6YKklx(rFm5!O1h;1i3L}uzYv=fw2wWfWVCf*PnP9~Y zsXwL%(S&l$n`ia_h10OB)q$k28&8fB=e=FAyM8c9fR||b+9a3RUpkZQ@V;&cpw+3a zu^`dWs&)eui1}j_Gx~$Ryeura4*6t{0xONF7c{L+FaQtQ9|j8qCTzxLDsf)d13uA} z?1_=Nr8lc$#K3`!`y>4%ItDL~Kt(UZZ{TCe>3XL_Oz}fCTKAk=o@C`29EYB-a*KWh zL7n0kiciAw3|^9rp79UNY*LYqBVJo5L<->x{u5@lA$H%R`|n$us7f zV+V|wX?f05k$f4i#&a^8E(M;DPUz$j1Dk+y(l@TCE@kKRwlB5^z{>wf;?&39l9{c1 zzukL)NK|xcTsiPK5lrYA`?k8>1cXLRF?uuvQ4uuaS(ZrJ37xjhusX|BD>Xs~u;znY{};a`dFe_(#Y52J0QwA!%XT789D3 z!m|VavVrG(=vX~M*uTy?HTOitI{H`Nwj~ABcT<4L5LgWGZNVy$!`sHI(68^G?f=Ad zjh8m|gF2P9PwA=*5S{bcnLW37&~_hp(-I{&Ngogs*l^b!Nf+1>DJ`Gp z(v4?T`lKCCj#%`tea*c87eR_a*`J#i$bYK)KT#qAL&P9vlB51_XywTmG->}HkYj$W zJ#0;7`#CB#H3yegha1+E)|24u$wwi%`jg;$k*Epw=sMCQ5M1;CtQ$O5t4I$Us5tp7 zXzpBdM8AQCODqimFT}l5u!{qUuE-DrTt?{?> zIOw4X{DQ5%g_lZ`W1zw=#wwsCd{d@?X}0-wd)m|uev~T>Ey)q_-^%tmSOLQ z3AhTrdN+86e=lDIGwTD&k;B18;Awo5Bu(Q60M@jp6}$Dky-Ba6S5DhlF70z!u8?G8 zc2)flvvVcgZ;i4-w~VmEydxDV3^oHICRLP!(%Ux(T=p3S9*2QH#sw1o|TJl2|$LvJY?c%GIHMrfyCcc=*FC{r+xzdS;s z`B-y)iyUGbBZG+1{J{lOM-aMLN?dNc;k-5K)-?UFJRxC*kIe;NREvsEMaJJvaee501eWdB!KL}E5S{ncR*W#MwLc~*5 zM5+T9pa$32h_o#!hchI5wPXvc`*&3Y)ja zaP@51=rmB<&2p71L1gxK-=X~cD|q-mvz~~kLseBwx3UNy{sDk1d+ity=kFzOVpkg1 zun8a(nX=;smY9{cNE55JllQ5u6?@fe#KjSKL0B=Pp!Z^D`Prs&0Kw^K+E+a0BhtW+ zMY=D+XO@>xN?8{HK$8JeoBk@|M_ROdE-|7SvrRj_0=_E#=#TdF%+tM9`PtbN{wlE; z2;7OHyz!c`fBX}HIIC}Ta4>T!g;-f5V7I)&Jgy?6UV7cT=AzCZ^S#f=1St@rWw^f5n-nbhWNOw5gi69kn zl(G@{2oz^9L^Ww`+|68X`ZgVBkpJfwDFghrR4Y8+VZB_*t6Z@SGQ#DEXhNcwh8PYl zXcX+u^GeE(p0#MQb49Tvl(aUCbl1NHUf3#!8m`Hbm3B;yhNd0; zSeqcSsBu-Op=2Lo7X|DHc7U=A8Thd`_akdGyT7a@dw5KJ&7U&@h+?x#F6vm9=wR0D z*eEoV=0XVgS9g_=x@(A65DhJ}I=_E1cAYe+#e})`fLZ;+@p5W3sfm{Fc_gtM$o zuV*i;V#XjsX(1PxFuPKVc3>H(&l8e`|J{N+f(m`(Cn$8Wi!zio--xZFsx!1e=rw|k z;TKVq<`Vr_?+9yVGS1doMk0YP`|na;x*o2 z+Gu0N7Dhpw12Ctq1W_W^07#my_AsC5`~g&oP#W&~^r=YO6{J;4ns^ZPyLX$#hb=*gQn(ex&pMD{makpn z2pb_=Y`nGc+3*IHb1|?Hv;|QIeFXy(+}?%{U@RiaK3OsYC~vhNuj3JR_5Ff7!{|f} zsUV)W8@gK-C)f({4`ACcUS1U&(Ju)WdWn-t1lBWvC53auosQb3X1*r!?#pIEExX>z zVvuz(0tiiFifJ87H9vbzx#&e9rr4ZgH}FZnm-ObmVEc{K{k7J={XJx6McsZzt#23Uq0|XzKD-4%+;ku#0HMYoR z8wyOYC!?T&tM|WWE=>9vwig!?ruUE0vRlb5mkwGjDeU0CTzQ%SE%-5ualF){=T7}y zU2=ir;1=>sx)y=b-)l~1q(~U$%b{;*=UYGg8{27kKknF>r$mZjdFK7Lo#8lkYx=Kt ziCY3~jS!+_ajs10X51@63s`B)7Pc|Rhh(p|Akt7JXZFgE6M&gq@0@OnOyH)7G;JlSw@AdJ_CUPSb{W zpcgs?1mxs6Awah;o_r0QJU@#Bf#y^lC*4tdE>=o0idu^v+4axJIH%hKMO+?tCt*S# z?X_}GLIsuW9^B*}p?->!0jS_7ROO2#VX5~SltN3G0ZZ*qthc9sj4mn*BYipiO&}+u zf%6}-UETEWNDn6Ypse~v2utn#vIMk1z7H4bjnnv?yp)3TlTJ-nL*gns_NTrlfy;hz z^nXq*-rpm@cLQF5+(r5}8bq%+mpb44xvBlZS3vOlWq|$2`^~WHcON_(j+Fw4#!0>SW&i@7^SO&Ylh>g^i9&jj#Y90O zai#Nk3uFbWN{)H65CWWdZXLUB{hd-%lDs5n|8|m*&XENpW7k=yFl~APVLj%1c=H@M zVMq3f=NfF&U4wu4?WEl<)_X*UbhFI&RZ&V7okSZ~*ftX;-y-m!^;B2?guQ7s4W}@n znrKZvV7aZ~T8GV53B51r+qCDduPf$nrdR|M3}vCtMMXg2BMi_E-eK2{$@6Icc$jJ z<6g^)OUj8b7q&|)uojE-Lxxd-`dncX*9szpZ5;3-7S@g zOxd0t6G#X02M_|^(=HjbKxB(5agDI5X>Ek%BkIkt#q6l#>?Z}gcTFk7KYG17ls5h4eF(qW0@UIiUb{u$dZr44yXoYqGD<& zK=pmsgL7%UF(mVP@dD=+G=}L6xm~Er+Vng9gD>Xj%pR6i(9Bo?->TB|_zu*^;GT3* zP+RVe(>R(2hf`rLhV~O1iylD1Iz8lpzS9GXF2IR?@1bf`1*`@=dvVCLwOZqD=pQ_} z@a&5f!+~MDzzg0PM@TeC1*0^KbzbjESK+!3LS;nFK|;K}-iVRMe`29n-aKPQ4EMcv zFT{R=!%h;F#nxsZF~A_`5{YF>E6nBN~;Cf&Bng91S z!dI5C*NGtZ2YCC{ThfBtq#R=8@t9PrerKcTXnWWOIa?V0lsDv5~jdf5$Ukr)4d6Xl5w%ops>)WIonApbU3ME|(3OFvZuGcNw>O2}?o2jhZ z=!;!#hiDFfI%PJ*(E#NicQV&ZfhRQ29|}4y&e{C2dafgn!1UI> zeia2#JRIK6Db_cJvo9_M7M_r(X>mA!+%%4vULz}4a%3I%L6eY_jY2v+L)FXPZcTPKOvkc ztegeA6$Q0=@>7pWk+g`!ZjY>ikoVwbF@T7;ew)(_R()Z|CMh%VWq!XSNr!Dnq?Lpp z@y2Nr%PEQxEjOIWnXNV{P_xWoe1&mKdkQZx1!^*QUC6l@4ppJi`(Qe0_#19Yn3MU; zV>i)0Eaf-0WfcGJT#63!xLr&Pm1bexGlJdqB(JHAU4FN3G(x1A@$#W*W4;@Z{4`E? z+#jV|81=e9gu5z<#F3;{F~xvLpR669>3I2zHi+ZLP<|Rg7Oz z4FZ+}OT5Av>gFn3S4cz^2SO%ns8ADG`llQuJcQCeTnzn~uANoM7?^@eO0NwZnwUl_ zqsWXUV`6E|ynt`yfZbzr8OpNs%TRxL5ds;_4AlA6S-yp{pT+kT5yJsUkZ;A=()7jk zB0kg_5M`s>W=Er(oMNXK_;^ws32Hu}wWdfylx1PdjX1~BWK=D5tz@(*>YxsutoheP zA(qzC&BqMfd&O0iv0)DMo6rGGvDoyvLY3KT>~g)F)JIzIYr}Yh`@J(mYa~hcRNozE z80vTrhVwB_SGe(AxIpQOw3sT>p&9VPEjrc3rofof)mcq|rDj&AuQa?K9M%do0|L|I z==QG4``xc34*aFkWtXtXy;DG25>>Ixxhm~iHq)329;D*Bh;K69P%XFEvgme?d*{RQ zNpiB0@}x5&5HdhKV$?^x6`e|uCYzkAG*E-O$=z1mp1q$u$DEu94u>jbwN6bAsdeqLcH@;q{e)#T-l*=Kb}oDF3ubr&SzyF!{6 zjcpn#w56nw-9R*b0hO_B(DMkA<({U*&hTx+Qy%cFQ$;d}@mSOnfjm#cWmZaP4ulk- z6$eOhZ;^&$7RIXG>o_cWjtWY*h4fmgi}E(lJ6;>hw=u5ERQyrJR2(LuOg~A9SlCur zZr2rp1VcA>ZX9XPhcBhx5OE1U<@?DV)}u<)o>Vm}sw8}}y>U6o&pdBX!YpO5Oc)=~ zv4`EDB-}t1`Bzwf>Ok#$RZ7O|zNVF9N0O|7tW1f#~e6byIRjOKY{O z)dL!peR_;92C8rPk0A5uD)@QFAbrIuK=OdDX*6iI^L05}PdMI>(Sr%03%?1oA47cMw;t4U9PtBJ064F*#$7n91^(=e`c z!>g8IXir{4_5hjU3{l%d^E0M+0C|W&_z-7TRTMB8Q_#G(F&o{<6oHuqDqhbk=RB%k zqyqD8_N!(!`f}9mPDNB1@;?VXl9KH*WfOdaEBtUNm&Lax!7_n>dWyAH$T- z&#S-E0rPVoVY_{YA-xU%&-xBFwqPMARk zt4BBc*fz2^pG|{8{zV7+gC+Gy?GcnlM}>}6tR6c{sEKY|@D0>|^{4+I8KI}dY9x+E z&jF~ZZv7{U{Vl_!D%C)kR9zF;DLxC-4+d<+Os0)0-el1kcF%-7D)W@#Z3k9$DRPhb zyVKBz!0n?ZB19cTf}!T{)IqybR5MA}UJOF`*%Q>YP;PsbE#S)P-rc1W3yHK_nLUIxvSV@qu@{w1mWWq~fH`|HA%8NWA)ZaA zG21AFgZ}|9!8V3-7b{<7S$H<01)}@rrLsHSIbYP>EM_yZ8(`3h@w>>CUn#NT9GJ+->34oJ@Yf?M;d^!q1K@2zXftTF^oh0<5)`3>GLthkAnD! zj7XWCHR=Wcc&bjG>Nb~wHzDZ%8g6JqIwRPwWe$F zno&C?lYMN!m~d*Ec6wcv^O_MV=DpI62bKfK z37Ec-~e(9dYCh#p*Fy0${mH^k*4g=Vv_&UXGFr~Nv9A^@{u?g{Y!+tXV&V5>Ib^xkB*|L2#3%p$V_2%{u%R23Hi9P8!*P^ zhz7%7xrV$+B5J92l6&yV#d=_y=da4VN~raaWZp^=Zi9lQ>;^s%Y{Pvlbm+Wnv0I%{ zr_ViH234ZPgeJ-??HK{x@IRA)R`K0St4}G1w?rw=D;MtZbUn=`CFuiaNf9MvyPl#Z z0xV!(m0kwj?^btUrlhZ~a^3b4u4#hQ>L*yDgRX5G)qtAdZ4DDiy(CSCYD5qe40Ad<$vy4?=DiVV`0|{?EcP!mXf_u-d77rC z3_nRfOaLC!<^c|+!zz^85Be`#ic3@oR}`hgHR(A zd|CY&1Kp$xckM7i)_i!B9HbF;AgeVE8*(L|`WPdA@l8~~Yr?cfRjd7f$tAdW$T#@K zs#|fHZwSFNKFrTf#i^p3?k(nwRAt);^5oarCIxID-xM54ib+keocIhsB0QARUAAe; zo@FG=APu^f>(LW3ejdCcQc(=bhe##+J80IsC!ocSUNM%4sDTi`0;Co^&k8b7_TE%_ zjbiwMM8!CwXKFWvR=V?XI6g(y&H|5S5fxAp;C-2B4C{G7M~DALvq?Gqx}UK<&gz5j zeo(d^hF!nGk@b}R<<~BE3J==l8x|9>e74uNBi65T|7qy$R*~)Jt zZ11R;DG?8v8VwTvhbTwal*A=SZu99zf9p7`wrQEorqq0nEv@)jVE>As>Ov=vE~wH5 zH7_VMrC*!hAs}2vqtje)GEA_=_f?8_X21K(AVtGk6YdJcE*eB*#2;$@;X!K1fXCxq zd-?U0qP)t+Y1xb~3$F#SIYLhI&QopT`t;nIX;^mtn-%1YC0(i1=&OuhFU0`xXE{xq zynWFE9MFxtqu0*LUT*%I8!I#EKSc&wMh2b@sLlLg^JA3Nv+t!FA_O6n+plNXiKl3akZ`zR)GAO2qx!b| zYoLAgxj`sYhMaI~1vn_I5y_8&jj_fev_9<`qXb(_lmJ(x85Lt-MfGKipj{h!3@>YIY)X{6tawY1NQ}-(iyYcz* zH=6K_*(C{cQtEt_6<9(R&<4sO!{Hq7&F!71=gJgaYba*sLp+*B75p#;jU2;u>K;*m zr7Umr@D1%g3RVUVB8pgWfYjp9ai~sELk6ES1h%>wqpDhe_sk}Tbp^@XOO3oQ1fpXI{6y^^)cnvU`;?%AmL-k4wCQ;(Nxh0-@5P>|1zsf)W(5gemUQw66i z{tlnY9mp}lV`UL6z(U1D39jn<^A;AT?y0Z73#hvpo|N;^Qk-X8jLqU&Hi(AUn^tv4 zP|g{Nle(c zm-i=?9|lo4u%>{(`C1Y}+e^^O2)|>Z>>p2I+)K6WFl=IZU)m>wMfNRbSv6kP&DQ@# z6Ze7fU1*Yd+{-(UFDt^>rOL@8+X@Vi80H)rjWt$Sk^6k%zXIRqaeKIY=o82H%mD!uITBHoRYL6!N*mmJgV*O z@}!p7Fz4>s^ebWll`)Naj4Ueu3(;cIeGhm$oZ|-)NxI)i*K&PcL9ScTCaId+>(2*C zBh?Esmz>DAAcU>|M`(p9^lHPBw;%M|&h4|Kw`=LtgdOa11T)IPLdvaiK;{C7-Ao<$ zlLx?)c>_ffObg2Z?++wM!9h(IN6G{2!DON?03sbtr@QY*B#hPoJNN4Pe*sG2y@lU{iMyrq~A<&gA_c3Ufm2Ku@K;a5zeBbj@YM zmqmifqxvCq_>4F&5MU@3uilRf_o{(x2u?4(prHp51ZS-Fb%mBk`1LCFaqLHBR=jO1phqUYNl22Rz3)yC!RpMfUhxkRLhq+tx z*7krEY;W&#VcdUC#7L-zCmLp*ouW+bs4mj;PZ2Zen|Gi<%oAAVa;P^LH*yw^niJ4V zQ;HX7=Nz$~1l#`4p}Wj#o9LX=lvr}moH>-}JGYv}Lt*c6=3xf`7UJp@a@+GWQq;i? zzZ@#5wGL<@I`7t2$GtAre7fh9at(*ghr?7odI$_nO3YL9)CA0>yRrJ3U0 zAywe_%A}ARd)=3VY|;LD3UI+^gbDF{CXsZ1FfwRB7d!RPP>6PW4hq=WKm2{LJZJJl z71I1SqL<=xyj?(VpPlLmNt`i_?l$MyRwiords`36qKueb)=6Yl7142Qh;-~lO(=6f zyb!3Y5Flcx6mEAsW0b+FsW5^Uiw>3vk z``yW!Da@>AFYFsezQSuA&99&%Quc`)A7LWIbJy{cfp(?VgAQf`?7gXI=unw9&cSphi1i#BX0pRX- zsQy3<2^icJ1n1egKXH zsbot`gS{RxM4VjPrs+A#37QDG7Oq+Gx$Fzt1ZjK$dI z37AfQof+AC*ku&{sx)qK73urM>dAWIMR1K=@j%9#9mU$$#Nz*`yv4Hjs|=D9sd_*l z^TP5)jAQh*Bw##bz!-uDr%Tk#SY)et?;~o4b2lmTK049#AgHV8x1>vI+#hWBZiW*E z4SV9GTv~EcTk}Tt)N0bYAoX3lVEeXD2#>7M_k*KnXm|>Y)K>rD`uAjp z_IbT;U3@6R{Y#7=dMwlUCcT}A*%>B&z+K|Q6ihaf05z^X`qc3{e4D2Iw!Zc1LC3DT zpcVVs46uMt4nIWPtkkXfG#L%C1VyKXcB|#DFnmWAA<_9nt6afD*DUNF%ZZbS29h8M zW@g%d@(#U_FM=;2=5FThQEkUmA9R@Ds&aW?j8CGbZ`__N zPVZUMPW{taE|)cGntl#C z?h-@rDs^{y6dmIQz>|9JeEiqdr%*uTW|?;DuZfz+2PcwJax@`kq>x3p6|PO!CqX{&MCrG*`oMu zqr{AAclxcFTs7I-Wa|j9&tG2{7tJq_)hmdja5!Sm^~5gITv&1ofqHwg6hrz`+wo@& zAYr$W(XcnONjfpNs01$r`8e+{neeQp~YQ}Z zNPXRZFdVqW&$++_fEJDU9uS`w<#gNj`0BI6;4|U$Yin6>Q}YzqpXLQ4#&y@32u~!) zYa0RaF_PC`T^IsIWbZF~2l1_!{nmqWspV)Q#}`OnMFj%Dn2qzB0xB`dcbQXXd|Bxs zqJ%X4qoB%`^4G)2rDa_s0glaKbW7!&rz4t&PX8F}+o!A?-V@=yg0?=jGdEc=E0ot39$hEbzM83TlZ_|I=3pW`XTBkVgMa^M&Qxu~|;ehBL& zxhXy=Pn0N&=6l5VUuEIwHB53b$y20CyBy zbrj`HP4AeX^+0-)#G9fL#rZ8Kl>{>TV(3erF0yjP#c5B$IalbLiRlT+#y({{Q)#pv z4?PE5Pq=ASiCw_ttSq?1l1U)7tAB|8fCWo>P2BG5<<;l;p!<*XMC|(QGy3Je+~~Ww*i58y$@=#r zEIapXA}V53Rz=TGYgutT-H}UyRL7N-&I<01E47Jj34?)~P;q(p{yrS(dZbYjDrA?RkkxBl?EnZJ z;j*3I7{nmKi+y+!h{!-jcK~tl2<0`cQ$VHaW@$n{R()kLppN(0in-~rK%t(+abn9u z|3KGM=IdR^)Sa~7VSm=OQ>Ruq+V!Z%ECF?VUF~0xBnqPHy;|UEZU>3Rne$RvYU->e z6@8|t0&F)wDiwfE!~Pog&WC|&Ir+8%vmn%KIePP6=mEQYqg#{iBUZl8uvcQ~wty~< zE2#CpnAeZkb|I(^bes#f2)z;OfuI-~JNO;a=Gr2#-oJ~t0RKM#z&|9wXpT!~;h`j~?QX>n|p~Q6%29KhNt9@KNDwPREhkxN>zi!K>*1`c%pZkKZW_=7Djh%_Kb22i*vx}S%&}Bm%#?&8>EdlD?=2v zZw#js#ZbkkT)mut&Sk5hZ;%8radEDqetw0`oH@}~HLbtt< z;|IPiKSyMq=|lNs#p^F8O~vuX8E3EE>?=r$FUQ#7QTzljrRwQdL3v02iJ=^<5^Brx z)&4(v%D1haFv@%&HOqu7$-#UH8OBp}uK-WbLM1$M2OZ$@&rT$r2tx0qOt3h{rta+V z*;AWPTQx68{2{X_0= zqSO`*{MLCmoaQ@$_+rWO0xh+0u^H*GisIvQ_gN1F-PSWGz!DO`X_-!T*39kvy74sr zAQ{^%3CL9}Q}xe1MTrYJ7aY?scqIs@K+Kf2l+NvU4Zry6mJJr^h&V9bReuQ&p%5$Jx+& zHgwQW2s}Jgs8;qFLge zrtPC=rQz8#3hD|7UkZx!|7UKDw#2~!z`e{zVsf#ElWr_mF7?=fhicQVYxUQ{nXARz z7FIwyLlEqmqGp*qI8hC}ye{OuDR1VFlFR_&IpwgErh7~{TMCWP5@*;G#=znREX9{W zBpzP1f56>LLqbLcztMBToV%zpC*;_zG5`&Lpv6(@e!YsWcej?yP|%p|(ZxRUpg6uN z?{I}W>7VIR6QbbP=iM=PQ+WxV_~N7)c=n#Qv7tRf^Y7qfRzGV?GKAEmrByv39kc>Z z|7_m5E@-o!RxaV*d4$L9>i^BZCKWkFOsara*{Yb7zx=Ckox1TVa12$mS zl9{G_jIT6Etx^&$o%P=ATXQY@|VuoTtoKVltR>R)j^uWniBwJ`MLac|K%i2 zzw+rS_-XR_zUiiUTxQeu%+jZApn{r!r${Lmp%{)`>*yANH&zlo*CWYyN>q@?3ts6G zxrk%LszKQVXfRS6e?a=s98s&<%`?-_gQFzYuZV@~e?7YA(|@ak64~5b!m;SJg#h%9)8=;Ua#Fu%}rhV?(0BMK z%Z8}&n>GwnBCD}J-G;L|VU{Eo>P&{q`4cB5_2{y9Qqtl(@mW>=N+oo08WN~ahRGgrN490@OGiT*~%H3*4q^=FeJ91om+Cv01(s7~jf#a47^_t$5e1J_G=cVNXsMmkQ*ZM?4wd-sYI z&jc~0(aB!Ae-q9r;GC#0KEPdC4W7UIm9uFJF?golG>Rd0piukP%vW`AEsM5}SCxmY zc$Qs=pw(kgbN!jum-wbsE3L(cg}|Z86>-lqpG-(&sZlH>KAzL+4S;h&`rWrLj)SnK zg9N%Dp^sn^jWqBA6pyC*7w@i2#?RPf8=c+<28z$0(%d!fua$DUUsp;|)K4H0T<$Gl zBX^(FY;S`U8|u@NeEuxR1?X`6&i-WkV;z<+!Qw{OuiEDgpZrW_J=IM8Y=og7R@7Aexs8NdG+oy8El#6C$V`1+Qd0+@cr z(+lDfaoSC^CoJk;9jc76Q)5+rZ26EmA8qbd#JlHEU>eqY3_S{?zBns_a8F_D zEhBXgrq+;Nm5~zXZ?jjmsc`r+kF;qE#*PL?yvA0Xsv_MLNCyYQFqPED-N)M7AB&pl zLy(`>s;<>UWAsKM?uq}|ms{38MU;dumI#h+WIV-Y6z&bC%RyLgD&zlXU)}j=d?B}r z6&O!U3&hN-8fnqBA9QU90G8VU@gqa6iN(r>GkQE;IQ?`(pli=DXTFh82qI*++v+vv zpXb9uKnZAVsrre1l||GDUYFithmq0PhJ9)MYANr)vu9wZ5VCR534bR)s`ZIDTTa#? zII^CYD4C)T|EQV482)r>rjHYY@4%C)gwVG+hhW+%_#1K?DPeCFHEO>?hDF2ue zo&F&%9SikC=0#@+9ZzJA1SIDjsYs#l5l&zU=vbiTZ}85u3RtLo_uw>_W+r2}jACma zBW@p{fJsO9=We8lj4fx8QM8V#&|dq%@)=gPP{GPi z+H7(+;a>^}sz%lE_=?C#SBwiIT*`O&=J1xH=e?|lH{)$dq2O6qeepLCRJm$3oamv3 zO(N&=K*=ya@wIdilrlO`Z#6)otuvaDQ?9H4&luaK!q*Fe1*ase2W+~AJbMnPNLTX& zsoXgI9WrHZxZR1{1Djm-z~lxIz{ttd>o|yrd=PVp(n2 z3F^aiM@bufx9^sCJO`fc>zi8);z@*Ju4a1LA{qj4$wl0U&Qr(Pk9Kx&!MkDsrWA^%#CX1rA*hC`LRe|MzrGv4tWmY7wzd|4s=O5 zg+mr(Mw?)&_zJ90?)xM&q&IhXoLhw#^fnI)E^x#qhTIDYLBUdLmcVFM?ztlCJZ(rW zf9kS8=ErsFT7vqx=qZ1%BN zDx1%E`UX!SBSewV!bq#KGo;l5T~}9*%9zh60VJ%lE9WfuS*D7!I^tzLRjdUnHL##E z8(OtDCp=kWu!V${X_JIXU8)qTrp|7W zK^VLx-vtUjlq1S(&t(Bcw?^~sEx~*Le4PC{2=VVY@(01u&$i5^Uc^>v6NLrh(JFgn`r{)#T4Zks*((8?#=xrm6D_ zWf7-;&L{#{hPqIuE$n(-pOoYl(<_E4QXT+QqtWfsp*zJl#Dlke`&9BzWY%;p)(lNs zYbNvFwHJqOkh?{6;kCLBn26-$&O~@kf?kebR!}G$O^a^V_{j7QsWtOMX!0TAlQ+`E zbN$=my1M4Xmi2=(?S@6G_f2H;HZ#2&t%|NLU$>_YdqmZWGdF1G_?_UV_H*&rQlmah zOiZYaF=dSw|FmLvUfs{(VZg@A4=fTrla9*Vwxl90rh7u$eoD?yElNuKE?QUVzbhKI zxmxOpHxBV4l=mZfwRTWy;kt*@G0zzy@7z91cnOnhRIMEJlIK1LRTVJ4&~QP&lM$>; zF(QPZI$8(`_ZemY~G_aVzBi!F=&Y6T+8?w+ly zct8C0#gw^WRQR(2K6rXw#k3!8t(Byl?VT&ma{6&wT17Z@AhDpTzO2wf;I(frX{0Ub z^?4X$p47h!{j7DWk9E$SYZ%S|b!Mhe1gI|C*uH&(SaCDpUfZ`j8m(U5C6YzC-AaK{ zH{-iNdp%s7uX?+nJ>gvRMjybkU$>auo;-u=BHYe5=uAn!hwAY#TUDUa65A97FAWW!{U#o zQn~Zz-)bhISXpvKdiRZAN*xoum0BCr^uJaq>grWAX8}$dd|YV#u~b}-eP_P&Wr);v z!Z(eEZE{#VIT5vL{1$HyBdlDwYMl`CuzDpEnzMh~D|~>5RK%?duVpbR_^8gqC3>=N z!he-J3I|lZIAk?H@jo zblfEAOZ!Hm-NHZ)lKfWgWX{((1GOZ z?j^9?&ITBC)=W~``l9(h&xmBjg8NL6X?70epk2@>8s=r@i?8Tj30n%Q4e{LL&R3~W z+{scKQ>B>;5^p}8lE)MGs67&?$x?p;v1=D_($^uXSar8GPH>GDJaSY)Gw-;Q2@P9s z$2zZ7XT!~pD|d-nic#5dO~n_>Akr&?4=3PfGnw13zOnoGy*ozpVC)RExPT^I=k-)h zn*s8p64Y{Sfiu`6Ir>+UHpgD#c97%B)KWE`#w`f%$0yoA()AKXW>y0~1l{xxkug&A zyVPa``|$6;W4PNl$F)8RCxx!ZFiUS(E=%uF?CkX6_rVyza7 zO=E}28XzbE6{s!H5x<`k^*oxKuUXkG;K4N8%mkfV9HK~MfiulhkfUWzicyB+wD5El~{gis@oZZAO zoY!js_^t4tjNrh0Dg$h>I=YjJx96jx6i@1yKRPKqs|H+Z{5lp+>Y==ID!DuInj9#q zKm~JRC(jr9115Xy4b8&yf8N9t4f!w}Sdm-@{RA3_UDOhnw>E#Z>&k9eQp|xLS?yA9 z;?BsWzp3cSKTN+N_qYQA*;g&LdBL4*e%txPJj|}x;1>pO3h>7}E%ujZ@;Q+qO3G(e zA3NBd1a(c{t@PbhF*|$CG&c9?BTsE%e29Eh(@z5W&Wr5(!d&mqmw5$>h=4x5ICEiT zz}Cx!((~D&;6e~$&EjQ3qCBYtM~q`%fZBDC{NYk0gY^V|U@K6iC7G_qeq6IZp2M$b z3Bq9?6&Dxx3o)Vo*CAa?d63VnCSn{euRWu=z(zK8)hGxK%1l{R@h`g$hYxUgqeEap zfMgxiFMZrxzF)lQ27h5I?5pUBOcBcxa+e-&E7fSE#19Q9zO138dbP|^e8t> zLp+|{y^K7io*P|8I-c6kjHaSb``PA&;)j!lYnzQlhXO27T3DYcl_KvAX~#hAvp1fg zGtFBEe!WVXUc2#Cph?eGW1X8o=OgEE5TYB$F(H&4UdR`d2yb9*{`#uiiq1!@VV5i* zB#N&~jKk~QY8VA&kuW1R=KZY*iR--8<%&RZGu)69OmSJjt7RwZDtX~wN*P*lzKp(6VQZPX?P~iX{ICupMxkj79LbwSSCatk=%HhnBoZj2 z!Ddn`wq;j`Nk!$wM_)TxkSB2=+-C2U@+}QHg4Y;Yjof*8&;0?{c{YzN)oen7Gto9C zos{4aExmd(lye{XAE<@WLp`pq_0Q5clPDs~D0A5w`}VP}TEtQMG_iwG=Qak0@bUCVNY_+JhPyN>_PjlQqJJFJ^pZjk|> zj3wJvBta$5%9jUJ!)92@P)dy6A%}CtC!nH0n=SY-gahkx#+t2>OYNGyt8iW6#buGu^5IOA;nc2U1W`&@A zWtG;bT&k{ghUSHk`}G}8&ura}Q3py);p3D=*!HM5_2m zkN8A+LC~;}&$)AaaU^Eob$h&>Sx=$vr^VQR4JLQDnj6^YvPer<%J7Dbeuh7H*Ared zuU7}uai*#b!EGYT6z!m5KMo6M5 zNC_zjm54iDW*R=SNz2bomxyw>6#h-<=V5}LztZ=64zzQ5hPREFa(AO#N=uW?&-Ap6 z0`-2w+ODD3lRD3E1ax0#Usz`tK+rQ;kok=1IWQ&I2FR1PGX+*H zPYa}yR&L*5WW;3yJK>!ia8GfV%QLE3Va&DnHvdU53dJLtbHm`+fQM*1+TvmRjuXmT z`sh`1?z7KgLVPjD5e+>jjCWY#-sKS*QkNm1AH&l}z?WNS|8M2Uuw^+kKEn_sEZ_T& zUg9A733dDM1#~b|TXT`>)`B(-yI|-|VOuXEx7w!oBc$MQn6;pwpB|aGoL>Xv=1iOE zSSCb-L1vO!4o>oMO1AIFpyITQBEg7LK#?87a<@Z|&t?hI@dehVFgLWvB;pYWQwiyLOm;%|hNUeouy=D-f`(PqZrt^Hp<1wCMWj zjyux6^fRH&J$ZPlq2mRfaTeoma&~_=!N)UY=ZA~I;n^=}7Oib_` zuR+`n|6pgRw(b*|C|ewf_}0}aA9uR5U?d$x?)x1^O8l?$ktxbaGp7|Nq?#w_+_#GK zWg;34A#El&VLrbp(;xfS#{VN-{U>|D@l~amtK3n=5X|;*2N+ zfoj}eC;_ANmy8l4Pv64!r`a7LV%{#aMGbeALK~w=U;SFBNbvK&{nV&xw2a(Uq-lY@ z>5Q>k=9C-G%h6je2F|-SVB_XBl}J2qcA33vO1jbTrT7AnM!l>Rl@JrySYL%zWZvN6 zt&0#SEAy;XrwGZ963|46Wa_HFbBfD#IUbyIl8#IMz2MLuIFon8(by17aBBrEdA#Tu z6xBy<*W#J)#OIw z{)@Src)0T}CGOUKU2m8~+b@1$Jd!QUY_Rv>5Ycm%t?U-y3W!6#Rq1UTy<}?szh^SR zOAHCVT^CqdRBR7Vkveq~dRZFZbFJ;Y_bg#7`v&NU-BW3m;d#OvoE%QMR&Riu?Nc9B zP2BRNxstxh0{2NWPbE@YU()D(dc${!7V`~Td*K(V`xShiNkl)aRC=?ReDzPlM&Enc z_)>D1%ZyH(zB-wx%)Utn61Mn4RH{K}-BdvP+ymBDuzyT9U$js-uF^c+pp6y(86A;O z-NiT8X9Dgfj{@pCa#;Bju7-oU!GODXm)YcEi=3L%Z0c?nEKL0llb0DF5%DZ0&F{5s ziDeqW2YLxCe)||T&Ix4K+v`KuyO?kkE`R)ddH||}>F1#`=2A;iuC!0HgrusNW|&}Wd+DN}|h&zA4e!~a(jV60n04eE+`PiLn#yE3Tg+x$bG)yeaVq9I^#fnij(MDyWEBo3C6$ykDWi)o&SCuKxRXz?;1poGy*)je5Q9G)V!xW5&RPeUd>W20*yR@6X;7W|M)c zH)1hj#0di4*$iw;(m>xOUN=kKIMMSz7byy8YnjCNX;zKPH6uqElhGuxaFj?>401si zBXGIcAToY-R<^Cm%FEcuE6@evVDAg4c<>JLPt`i|QygNBMW~uR4&Mh}awzVInMTi* zID3t|nicjSX0M9JWYPDzcIFM$71r8PYqV_=CUpsTz1FEP9EM9OHTm@z6Xyg{5~EaP zOZ%bGRpu*+iWVK;fA#lY$)Hc{5PtFzce+({ItP64z;I_u>YYf^%`QZKe9APoCj#;$ zfn@(vapjM&P>Sg0+W7G3K4OLlRlZPlnpJ6y;UmIg~KH|HE7?qGLYJ_?(3<6OD z$tUBw0@tB-5m{U%y6{xR+nxyv1TmgM2;mnxX9*-m>l@7idp0d!JIVLh!S2|L%bm%D zl_`!m_kHnD&nC%=aYXsPDLEXpz$6i7*!(hr2ZWTj^p^dSNMUero z$>?TxyJ33Mtw>y_OA@iPSCwh%cr>A?VA0jiueXXSdC~_(#tHZm1BC^x=b|C}qNWt3 zGPMegWOUM{9{M`!?`@)@gn$ErmfvL~9NMNxQZA(F;#-wG{`Zhs*W@s{w1{(GR>|X; zf8t=sPWRV5<;4iQf zK!C}iMjQk(x`{O>uNjv&Z0Jr#Vm=Dr# z72ah=@Y^4r_)Q)iS67cP$(8BE=z5^{bsfOateP;L!+;m8?#U^nTJ{{v^ax@|yj1`7 zl3Zse96Mm>m;U!pq{kYNcFFi2A7*VE$=A(6nKop`r;|~@Zy=I%IUy?v?4!3pSUctu z0m^E(GIWY4uVtx1%tZ3{C9KA;Z1xOcIre6?5ZIO%pmG0ln_E?*dd%r6}0PU_3_ zL5>lg8#oz1Rdm)_0A9J=m!C;?oPDy;xwEd+Gj5-TqnbOxQ&Q{}n^vx>LLI!XkN%h3 zj%J~3BP9jS(UB;3<1J>x$0c4>_!*4TVq!h)G86S3%+z5oTUieOl~?cH8*hY(DHMZR zg{X7T5q#9LWFYS>GTsD(?u`a%E9ObHDc=Pc<^AM%SsZSeD}fh+GOYNHot)0ulz>6B zbwA@xo=7;U4mNS`!k3=|(3VKSbzI?6CuSZpV?g(o86|rMZZUNk^a1?^{7olKA~M)8=V*UblH>5 z7OO&H;8k)|pVmp79BJ<7Va_Ih5D8djL3r@a@L&(QS&&w)TCbW3*u^Pp@K+*XqW<0( zc9c;s2m%>Nl>Mmm&{gb5JF~6hxvxjJaooZ_(7n8}Fm~HJ1bQ6|2{u-}1QSLBOX9cs zs$+P^0MGAlD={GV3Z6z*X5jkO@t)7t_(Y~;Pz9mBto8IuFR^m|{^dB0+|O7j|RD!H&uappYO5CvPoZ>wKa zC%$4Qo;Dn34a%<~qx9u|0Ru3AMGlT;lr;!^I@xT{fk2dnPwK>^#-e@$Kxj?65l;zL zNTF3BB<)DJ>xI?*L%%@Bx@h(uu$6%P>`eB5RqVoOinB{c6&t%TqO<$_4sU>E;RLLt zaz&4vC16YvM%SZN%um)&7WKHH_*aQj{A{^4aDSVyaao;mUFoY5QMmC~xQ_1-o#@k0rr*wmC3gC1f10xoQx$$rMD^I8Q`eSz2(zrk>X z>fZ=2oDtq66*o4zX4L@vP(E#9G6vk^&Zw@ zC44nk$|v@j^@gk9&s7;Li=al&g%JsSKJr{mJwS4*rP%=u`4W#rBp8)gnzO5EyQ)QO zF1n3<^nGgt)fIN9AIaL>&V;AN1M((pZIpN|iP09FJY$hRv#~k7TfEqvNVm?8kl9NQ zzJ2m@-kJsT_vzE&+h7RYfVn^|(WwZ8AR4`1_s-c{=1wvW*^#+qC!THPsT5*{p;wST zQc+)nNc#yaciU4Wy*=lfc`Q}&m6WVfWJg>cq;l}OqSSntcQoHr9-0QbH#}g!l2y(< zFrhL}{CbP3FPlZcP;nNM&}MXMJ~875B9LMomJ{wT+7Jz<_~wL8aifokb# zt=PS&(`8w9n)03mz*fh{0gcbp{t&X2Wg%?unSBo3urgDqa6feUK8XpR*s_jY?%L^5 z3q^3#Eax^gne(xuutxVld9*jLkI_)z5J&nma5|E9Wf%@AAF}6m-pCt9Gf+BGs$aw} zhymLr|1PFiU>2m4Up&}LD`V#O>SE+6!ma*i#<-Ti@sOX9Jw>6{!dZmPGDtNgH+oLxl$Y64`P%Jb#7y_5WWKhAmV(zu1B4v z*fSYi0+isCbw{*7jz>GvB_+(%QXH>caGZECrDVaHx5wfV(h-N%eS2^I^t5XGJWn!d z9|B~Ttcr9+_#|yWSL3vFc+ZdAg3#XePi35ExGO)f$*1+<#8magg3?x3uYeq}-h<(n zz6=fs=76{#I&qjZcx3A!b==|fJ|=Gql@b}=HyVPgR1O<+5JMye{6 zNUfTnmG!usSdh2S@C!-_RxRb#IQ zmxb#$7_8Wo!kqa?NfY)E=dm#d7)BPz%}^9)ilSE?L%nLI?mKmwe0PMjwl2g2u+XNX1ny9DOfy`m*L?$+KwuGQC0SJ;w5s6x@u%B`KVs6e|3=6*B^WXLM)4!iwxbj&#I6J z2x%8jqSnZhzVgI+b~Si3OuLW`FQJqs*tKwUf4F+31-yPl}xr{HqPY!t}uH4ul6ZM@RG*4Iu**XNY$Q87kY%Cu#A&0nBOI z^vn8BSZC)7@r{@~ewQjqC4MKx#MhI#H;dWi`k+M8FscHrn8S~ny4SUKe5|{(mgbp%@>^w zY|J}ZwCFGxHX+AI`3(o^bCFEXF6{1ZPk8@6z3_Bodfptl(LB$GD3}~6pN{XbPA@gk zEyuPyt%EQ;!&+Z#O-Cgp(Ji*x;&5XB@xbusCFKjq;*zsco9#e zfbG`OmK*hnXKGKV$bFr4i}z>w6?sfmjU=FZa%n?V9yf&tOJDcB_^c*PVuKWHI-^H7 zOb$AW(%`1D5tBzsn8}5RA+*(Tqg2Pw}{TRzDdo?DuR z`iwo1B+tT^g=L}A%zTR52Y^ii$XH?(T>Nj$;&qe8jf)w7kEj(##dy?Mq zQQ*LRwkkkG@#}J2Gy1(vSPpMk)!wab*}n)l*c*UzN`$>itFM(!>@qEPw_2CZ#-nga zaj|t4X3yi>*~T{EAdQIcE4t31G9P{O$n`(nZ$vV+*Dhj|tHe}GsHqQE1G4LE(xvUE zx~#a%?BV%(&!INF7u(xS@S+ths;&(jCd~##s+JHz%JhMp@xL#w)Y@C0ya>jz+rO@O zaCxbw{J|C&Z>1alGPrxCS01RM z@6w%f#cBkQ!M z?7fuc!BzHhY-g7Y(KWNZr}&yZrMHk+rjgP>XkU$dz=iweH07kSCofmy3eaJ6Q()_7 z_)XFH)y=-{gJpouFV5-953so_^6;_LXU$QZcJUUSCiuJK{rIX2O-q^hL3kOkH42MR z5uwctA!@6I&Ezv%uNU9+I#g{1NXTHksK_gcNCPU?ONcC7nEaUL?%~#savz7&Fm8 zx2&`o0EhLn%Nz2u_!3RWTrS60MuGdjH!(O@)ngxcCBN6Ol z#w1H40EH6;<9^VZFRJJV8ZbN@$I&C{rTb5XtBGwPB;YQMkRyC|4s?1bI$d%*rwL1C zVhkJqe6UdnElI3u(99aM-v*9aC<8TA}%AKlgUGTX96EpELJ&_?Du71PPiMBtt{k zGVMkgOf|Vy)cwCMHTUHbC6}7~fYg)l7-5t|@nX4cKLIm`24Pdn!u*3azw>uHkB-i7 zK#F5eSBYyZ#)n`?KfmO%xa-2+}WJvFEnm<3z zMCU|p3t}*CG!$74?K#;d7F(a;FrMLACal2nk}!m7nl8gCPgxir=rb{S@GV8Ebvp~t zR6FqmU#6?SIu6WTc;$r*8w3(N6bBgpn1ZLa_{C*9^6Z8L6^0zJW}H~ zCdEibw4g|`9$2K#1GGRTvPj{+jDz2$EJDC%%ECyHC=Cy{#>3k+`jRbXhwTEk_W4UWYo!;DwR%5J_G=fOZ`V8ClP#XcMWSJ zgmd`__ms$r;oyG&tEFHlD#Su8o6A@VFaG_Yi#baF%s1Dj3J;QAF zDDQVV6~1isq2mr1*uvX3f$(NzvDW(rtj+8+1!K${QGGs8`GJ?A#%>!OxhS5C@{jsN zA>C{{S#u%cXQSPAmfGmtb%;PxepjvVNiAElp)Jeo6}7{_x6>2n<>Z{Q8x67Qo%XTz zK5F*Ae@8J)$^@OMM;*aNo)(WY$C2fM?u*4!*)i3`pJ;;N*O@B?wX{??{Msk(uOnsn9(#avOlVG@5 zC-fH<=ia5<=lf@SzqyW}wHXp1m8U1)-0D1$g}fR`6_0L?B?tz>6pKg+Z^hboCOrv{+n!@Dp9Q^}s2 zaB2<7XmkQH9TX_1O%oyr-D!5D+QZRh!| z52?nv7QtkSR%-6!)Z1tVLsQ`L!?00YyNINh)jE1=bt@`eGl%T;X3KI8PSp42IRqwf zkMbYI8+FDgWL4oh_*GwUA^bD*$r8 zMKTf@npTAQF)!jbNy{wXG^kmtmRKxG zHJ-Yy@88Sm*Ny?PR^Gno{Mh4 z{JQk``cY%A1;a5BMw1dqbi>C6ZwH%6D5un8;z9V4oR?ncRnydrkKA!~xly8fZ3=~D z6KE&YmA{J!Gdih`z-pHHyjn9KH?=XpRlCQz%k=3qM_1Q>`hBiyAk>~`QyXdd>YW*jC%cmEGX z1zLVR@bb05eFn5*bYe{eef?+q6r~imG^BA`n7MdCBQ521+Dm_59Na-L>C<&L1-0CK zMUP+Dec$Dnwmp<5ZoZiqu&`UnhBROM2Ywl;*qck{vRY@HqXsi0#owp0@Y=`SD!Q;o(8sjR63)pa{ljBpgh8%_i2 zO}^k7_C2X*GN7~1mE+Z6X62&|&i%gw2x?Z!us%V?T>-pnY`Oc;X0FH+!$-7;A{2N8 zSopxn<;Gl8?&tK@mc-ve!H{H7@zK+x&vk-YJehGYFz+Gibub1*=O10crqUS4EBAgwrjAeo~D-uPMg3fns#E-tY8SJ+#{Z@XrgAb>nlRJ} zg@*~YBFcTVq4X3_Ur$n24S8W-BAtY(xpbt;LC5S%o5rT4pa75jhW$9F&v0Z-jK6g& zM5|$)PMmlFWza7jw37u;ZK^O&;~JI}U(-#h*odGn#H>cE6yfff%1hlfs_-;c9s3!+ zC%+n#x5jp@tYrDDw_;m?U{sR*frX`7_)^@8u(~#>;_Z5=YZs;?^<6S}<{YO5KY`Xy z^4Ac3IF=XD+|Q<8fYbF8f5@wm6$g`6dBMp&z9@1bz~j-(avfl+v{5quQx=FxZl?2^ ze7h07qx)y;!53Px@iWvymeSQ3uC3z7T$ypo8uX1oFS3bpx&`AY2%f$%;kgZUH z*AJ3cx-)bK^ow18o~+&_A2kjlSlEDpv%X15G+29x4;b7gN zu_{9#h#F7KD^XZn8?Mlt0a__r{B3P>rn_uHx@hf;Py5TI9sNyE12tS4YY=*> zdJKN|&6(-@rqDCAAWQJ}EkR6)2A40jzJyORL@pA=5(1Zx7|V|{2cVI|6=s?Z`0XV6 zv)Z7oBlJd1mxZJZpV3TK;VF}ZnyHi6yJ9 zi-eFA#$R(5X?{f1_8&KuO7^Ok-Dy?ld^ng@}rw9h)hvW&k<+i1_9xt&( z@Io%Em6;=@wEd+@%k7v9NG|hqk&p+8HwPW+$RqObd;kEv)m3Z7oP1J;1-z_6Kcs)Q z%-O$cBtc}8K}`p{cS*!gf_1$_RmZ6cAnNN?wfW1RMRfGiWuxp)aG^o}f*sZ@b*6g; z)94``$^Mhbmi<@m!kb8?!U5n>oJ#j~MBC~x@$>4~M;$ych8=zx(n3k>sJ`vo(S$mv zHi-Drz0%iemvMi>x`;Vb7Rz}p;)cE{diGdgPWQO;%>}pR)Nholmu?W+TnTV3s@%^r zlqZ=d3EI`?sLR>mPUVKdBV^7UfK#3gRh?RFcYFw{MSL+0C9+<4(MT64dEd^m>~u9m z0;1V+)MB;hv(I0zenetcD#0%T=Q!*fDBplSgqE(S$aC(lx9HsK3V3v zfpYHdS68)Y_r|w%G3c5ZGTM5oJm9olh`mt~WgpJ&ei%hRgdT2QVLN&6HuSo5oW6}3 zh1$AkWn)ax6&L28O~Fdr+vCUt=h2;lN{s5O!LrkTxz(uK(J4!HK=lfe>YQPxi zK$cEv!}R+pv?BT|6nX_YM_=dUR&a-yj%^L;-blgAH=bo!aD8FkthOfv6C@Oa?*=VO;_a3a?0RKM#!2h+w zyxoG0S;qxlmh7|G`yei4Bw#R|Iuz4S z(;edhcjV__f?yvI5gwH#%DO&$MVU$xfqHB_f|E&-fwI{zrWEU77I6C0hHAe0YeUQk zf-x}5tU6+t8kBButma?k{|&2bPu$8r+0G@MV^A=}wLW5NA2%9YGCq$I`gD4#?Y&gd zfV3(#(uIpLPwoV0R_Y&gREmv95k+w@AT~MAit|8= z=1POZ@{M?)3h~O0N4G{D#zW|e4~7^gKa0|YBi;B-6U~l{X5@)0Rj6O^P&C#H*qKYX z75#Vw5CeKi0wGJEhxN=|@H^|!;cSJd_&Pj!VqzyT%c9G$qMkEv&_x(dwI0sZ7j~Iyw72-GKkIaHWUmR18zKw~ z6uPx>=>B?dPI$S}4ELtlizYk*w^QL=2Ol!!d)b|ZN{-N$&@T?ylx_$4P%wOrjdxKF z#*M#C0ubzC-(!2e&=@}U3h=Oqvc9s5nGtv!MQ&iYFl?M*OamDJ`7NuPjC@|0x29AF zTOMXh+C0{yC<~X?O0Z)=_utWp&Jbnf-F~nY-4zE^oFzG!>^D9S-A4K8k6&xZ+pL&{ z1k5V4-ZIglaVKndzooE`9X;sUg0ySFoWB&uZ8%Z|u(+$ivj(W6mTN9AY=f=gq<1r^ z_p=!^^pgEDxlYkL6l5E@ISzeowElx76t9>0J~o9|iDAcImEhj9MixTh3pC&hI}H;| zC5!0f6c)}5pGw;I1?H)k>ICIA>!imwSsl#E>^c^vj!(z4GR z0=9h~@2X0ca4?wq-IhKIdT<;sGl!_5e^K=-qse1%ag02SrRD2C@h){`;93@?lvN}t zY_R_u`=~JE$r|tM=H04+Vu(}luA0!8vDc1PsNk;_pfftr5S4pp7dgGE=P=|&vo0(u zq`>aeGMt+fUUHU&()VUts!gIAfr{^mn<{9@F*vhmT;s#L)B9FpKg9VJ0rn;vH1qm1U}DREK3pLn^+4TAO&B$qGtigb$>nx#v|?Jt4LS=33EVO^WQPmW!d zPaeV47mR&{mva<#n-hWWC|L6MEiP5!6D!^wq>BBZTnq*&6};<{gWm#B@JVqsapNrU@zX$tEqV7KjEL8V-lW4wNO%=G zwXssRqT>-(xLOWrYunAyks%c!JUCxpVcvnxZIW?STK}h`S9*3uIpe5^WWF*q=w4Bk zE3l$w*)Siw72^G{8TuS*Ls26N25s)vaKIAMMt{tm+>_%u`AR=r4wk$Z)lawoswpTy zfCaeVo-iQ~Ad_Foh8iA==a-z_LZ*>BWh_0nfeN$l;_86N8D+$5R0|MQrnab z4pFH#F&bEwV$gg&TZQXyT1}Z;X{33BWwEl3fo}w0T$HUxe%XO9)49)C<44$;4$@=h z8B(x;>rt$J5(5`PV$gk9b>~RQ>fpuiaH3092}IjQr*biXr+0gGp!djb7cHapN!hXU zFwbutAM1|xiGcg!6aG`s056&;ARWlc`WF89X-1J(+Mr?gEh3cxHwD;JIbJWBK~mH0 zROyQ0{3J9U^l*(tYQbb;ly2M1>73=MA_m%KKZ>T+Sd? zM~JVpun2~VJ6LQKU9|Fg(iwgiYqEhrm-3w38_jlNsQJ#g0Q$qfdMTmJUHz7;qagHs zZURbegIhuTyKozwtk!j!X&sHCTN}%9xdre(n$cPWkZ3E7sh-&5?jBh-Vi>o(C--~1 zH}S9g&y}YkzccEN6+K}14f)xZ{30TFAfeS_mk$bL8X7%dw+UPG$2b>y8gR`c&~QB< zy?bj7LUbboD6nX870oI;7w9UBAhh*S@$`~;Vn|5mXPYOa<0D)$$1Bg9Z}gXPtgiwn zxKt=!(@OgH3e+PNE(U7bcRewG{*aHqZbjS;#)6ptJ#*gDXO+$DwFvv@L{qlnba~w7 zkaLefXWCo7CoYsM7T|apwV7uF4TDItSH26BTHl)V;Z0Wi-6^!o>Q>H8SIjjNnz6p?B=b64Z7NGEbN%j3u6Je+LJjY>J(@dv1DhaXi{5F8&&=Y|2=?HQ z6<0;4CeX0?RQF3w_&4F;y+_}21KE3f62!JeaKKBNGpEu4yzVuCo^$d8yP%3C5EcXn~afr z@m$T!ZvS@70zq+WHZLP)gd#nKMwh2KzQw5N?Zm#8G@d!R>hH zsRsXB*2y+Dv@2CQLY2&vF9L=;jkT7IZ#%c#;D?65k^;w*JR#_ZVU>pyMq<|=9_N?X zIC84`lvpq(oCh2^c(BYE-W!${*sJjcTMlX;3AG|UcEn`7U}+bjTchLk{+F?9l1|q- z)G#?nx+7q3TNC}%DnezL#qD342P+8ShwYX002hC+FYL;IN+PS&=?J(!292zz0n(?# zL_02R%w?xi;U%8$@JSMrOs-=O=3fTHJ-v<>?NwE1ZyP%i-MQ;~=F8pp=9wTZNQlrY zS%qqiyMoKNi;5n2x3^Vwg34_S%ErZY*9Bs-Sd7ukm`trjNagZD2wsCfhK1*vIn0mb zcwzwc5Z}uFLI}^mLK~*|ro;|9j6eE}|0S%wQ%~b0#RKZZ+JeDCF2Ey<*lia#^4TyM-D?%3f*pfF$f+LD4uqA4b@k% zgTra%=9!PS*9{=1Bh$R?;Oy8{rYtjwVHrf^79D;}vN2ra?swcERo8RZ?RB54o!-Qr zz-&l-MCnc{Pb7=o{Q*N;zNrhi5)uyYt4aumj6hiK@-FM(m%Y&z|M~=9G1fJ1~d&7=}w*kBhPpApXbRm;~E{Bf`!Yh?0KGb{b(>o|xDW8)> z%O2-;s%TYf8($I=#U>^VpeY{mM_|Rufp`N&0ngf|W!<~HPqq|z2ZU{8n~C^fheBHW z&^nfX)O$@t`RXcL)TRQkopTLNM|UnTK4-__JtvYX(>HYOo%&MWniZO0v3Kz2aa8f! zf=kr-i#s_J!L(x!QBsVOBk}68Ha)QpYU)slc#@@0p0f7|i!P~_+DM=?%^Lq+JWjIJ zcNs|pO8)?BJasVF?Pr?Kb5_U5m-sJR?f<0c?ea;mn|xzG1+7BVu-+T=?=MtgxgNR$ z!j!M%0Dx#rl*VUft=jf!sC(r&I;=A7*7R;71G7Z1>*vmHhiNSAY0AAk{;;tZQv$}NN zpdi^Ld3{}%pgxe4R&Y2-C*c93kK%Xy$ERntxwD>Gy!f;SA}UORn$`D)WdC*gR38B) zndOz+trMBDKISw1aIw+8x3MaG!r9_DoB`NZWdo70+dOAVJqy2Sj0m4+VopvkgpJME zO`F^UiVz@z0TE!9K^w4rdlR<71J7PtYF|oeHF#j!lxT#k2`i$1Ls^?;Rw||t?Q_jH zgEb-Y8Ref6QcHWq3>zV^C9k7%d`T%^y!8@OAg$bjj)P=c7d<~LH*66dSU87Z+$&}z z)6m#w+7DuK$ol%R6nOlJcGYfvA@Wuo-BwO?fYf$jSZ zO_bqy)yTN_lM@=5OSS=3r}W>$(Cs7c1ucF9MO%dyYv3POj+#gAc4?7B5L#W(5Y*L! zcos;6o#%-Be54WNR9E&@`9=PmJ1weX;c#ZsP!;JMXI33Xl^G~M^{!QNdtx7FbXj5V zKeCH;TK|*!gz;4r1)?L(?5ktjgtO=t=srTBlEdAD6#(@mHMus6$%R5E&f|kE{kQln zSVJs+F^&umo;3iY1}ql%tcqEszs7;dG@=;I)8zgP9=!4}lU=KCOp=M{mKNH*8 zFou*4Hq9W9`p!%OUiA>zNwA5GN~Q>4Vi=o4c$!di*o)!%;uOwpOeTjC@r`#3`3#I6 zbZvXAVY5kcmpUrOI+|Qs9^@nSM+hu*LrpH$vV1CSEj+jwd8!nSB!+)jvyj;Vs;alk z?q&=?M~VlUOOdSzk7PgU_38*-po!?xA1Z3RDCDwc7OtXJPpAsCQ!hzL9xwhLm?XxI z(g;E&>@L9ZQ?aKjC}2^zgJesm>3i5s4TJql5AsZN-}N9R|1tXj=d6g~s*s?EcrJcb z>(Dw9r&TweF8gKY3y%$#N9-fu2Uiakg19|q6TeHA$jJj_Vg6NEaZmixgCv{&%e+50 zHa5WWsG?otRH2631{Bbh--nBUFN`1IdVVWu2-%be``jFL-4ntykEqspXtAkQZtT?d zj)t#YFckb{>+eO~#ZPlaf-UC>AY4R@Ww&A^cM68EiWDfxLnfnGJgsO;wsl7~aKdmfqdb&tHVA`Vnvk|(fT7u#h z>(ffW5#@Anx9#W_BN`dLQ1cE>(!2GESOWJ8zW6QLG!1h;r=)Ad*S9$L00qnZ3U?xK z)t_T)*0_WtnQl~QT{iPC9cp}HSS+YxKH#1K&XQZ1;3NAiJRPH5y&HErMn3ePsbC_4-BP{nP3tz0_WWkzp$ zQ6@4PlKKA4tD$g3Sl>6q~cEiw7}<@@>DM zC%kK4RKE@Ahdc}!#|Qm3AoJN1=(evRquDE^{&+$BY7@SON5Cms(}zM>!xzPK+<#Wb4_H3lDoV{?l31g_D zxwlGQ67`N0Po?Aby}x_z)Ifuf4H~JFe8qIc3zez}cjr$n|J>O`38k152(P%mg5SF^aYF zd^G=jX$F$d6suSlc=wp(_?ROxtYu7+&B(jxyTU0DN0LRDLGl?}nmfr!YHqAe6PCJM z>0_VHqyLQ5(udixs3A48YL)0Q5)07Uj5J)6+u3pgTwdw1R@XL#z69hON&lqi{*(+c zQJ~!GyRr(8#9NAPT14t%&(MW8c{qOcsT?-~|-B@+x%HNZ24ZUU`j3 zU_&NR-M(&x=&)@5Z zcT0md&UoF_7HvI8Y8;w0$1z59Ii z0fwfkA|EGozqh>;?kSvg`eg2>^=>&)<$uL@H-bZ%~gkNAV)jn{h&_yLB`) zQ@E-?6_wJ2C*eU1%@f~Kzzwn=@c9(v$2h_)^0jm0bG> zc_nRw7#`OyVP8L%UE$^+Mb1OetqVS`ma#L|Cc(2#5nuY6^qVkZ%CU)2#Umf6G&a zYvsYbIjAnLGEKgvJfD{!T_G@pPV-C`GC_7O{D%CRP1=los3;RSZ|kfAX1~Pth*Q?a zEx`-L#t@gUkWLPAP)OYlXY8&m2R<9K!t{l>s10dDpZ=?P{m=~)PNKrGo#;U#*BXc| znTHyu#R9#6siw!*s>1$uILm&pw&t|CyH*ZWd!j<6V7(B}vo*F)Lw$q>|ID|1D61|P z?f^FaBOU2~88;BCqBES_>+FBEq#~VUX(>XkV`c*{dsGLZf1R+9FE6Lr+sc`Ye|2rb z2+C?m*>#c{`jO=WzM=67>3;L24nki6*rEV2}x$=dJN~UauGq!r}5D z-fTxP-g6=9Un|U;p>Rd7b_J7OVB&ir5) zY3wtWR)ky1=>=j$v57WWB8-p}&Z&PiQh0rmQYTQl_y-=SD(IVS1K>5y4BbGpu7~qr z+P|@s5z`t#8V7)W^6>)@%Tqpk*RH1^Cj(2(rD$>L(UufoS$|W&?h2{+>v*c}J#wk6 zb&B(hL1K?D5Yj+oa5m9GTcG09=%B>YUdE6q*3?V_9o{_NKPA!ZFEdsx?#p@LS)$tSDEwRgFPnOKS_009K&5&ykXM~YvM5i*v9IM1+UW9=Z5HdB9sALcxrPoZuvcf5t zhVK%_G@FH`ruufYE0+QEpJD1NMv?CnIO4BUWaJfR71fI&TdIR~cLtE!Hx4G*!yuUa z%ehI9z&F%QCMRnCq#aehW?)@AS7P7iaO8TJ0Hafb{ag%`ud0PFk^Xm$&y;y04+oJ= z-I&gy0psc~_tpRyr9rp{I+3cJ%T*&8k!Kx}T%3WGc)wt#TPeWA5jtlNmU`mREeUBI4=xj;FkTT8a*dAOVV)QPYt0)ap+grK*tDuC~>Dh=^I z)O8YD*40ChVra?4{q9#*kp5T3yWMloxu^Ji_$L#yEs!7QfR@XMVeO&Zyb~5~*)l$*){3yjK8NfwcK5F_APO<~9p*j+56WaYqZT zx$blwhaGwp{zuh$;~L#^qYCqIh82d_V@l1Sy%Fk;FpBVItO!v8p6y>*TiqR)O`hA3 z4M}tqDdv-GOO^DQmP-*0*7Lb1&N>Ew1VY_lvQDAkIQRoyo+f0jnb9G{L8O6I+@_&M zvdQr&`SBiIOT*Z+hL1)$x)*lG<^n?&Gyd5fB(K*?Srx(Xx$?glPx18qKySuNA6EFW zgIT0)4?HL((8Et$xtD7A})l(*W>WxDfach|D zZK(+?7^r-5^eepejMSUb0wMTgtBP;PucP0Ns;n@p{Gkht*yax4B|mzRe?D`2!j}5( zCAcW*z(N2<#L16Du_a5QAIMt&{@za@>-gTa1*5?LVWI@Nv;Z+1Un3SYZ4A>kbR05nFGnJb` zkH+rz^o7T<(m%-xBo!zS(V^zjKfZTo)qzeH?AhH4{`r;l2>9Tk zsf$azOM_R7!DV~HWWzQBV2hu`B0a%=<9ixSqwOmmylWN9YRIfo|BCveLG$ZhZ@)Cn zSXs<%5|T;%QztTAqd8jr1qT&e84G*yIvdhUs@wZp#d~iN-P=F2Zl38>c4|X06YrZC z0{io-NV?O!j3x>Ev~`$ypx~Sses$FMFq<4s!^P9%Zy+H=c-4{xP|1YhjudIq=AYRH z|MAQE|M=n{1RhS{)oG96<)$Kg?+X$;hup4JOm%|-s>C?20GVSr3T|l@m+%n-H`&R{ z3R1)c@R6YzzZ{}UoudQk0*x>UmrR5AbE_y9PVr)9s2x*AVBX$}6rCyx-U^}?$XKLk z61a&tj(z2qa1UzyYdS}d%Csk2-P*16X7~t92ILN*{Vy;y;j&L<3t`gSmFfD8b~fI? zY8gEmW>j>{jL^9$5x*S=`jpVqbwEFTx$B9Nln}^u!tpE`%i%L@t4dn&#;eXsh9DLMDMxkwJB$zm> zBR?Yv#LHmG(~bXYXxr6+v^_I73mEHI`SEaD3icT9HHqAPb^6;r+vV+Qz*!9@uGs*NmQ~|S&6?22x+muGWh4-- z)MFIf2X$GcL~as8$t2YuJ@0L;g@iFtTIuv@x#A5!8bNYN`}4kn>^vzVd2d7-+o+r+ z6N{xUFyAfW*I+dUN`d_juCG}6EhKL+hr|ew1@(d+h0!uUa=$Vq?05_6XgX$AvN>JZ zjgrR1h&pAh4kkfYm2=|BmMVYMb;8CFH+^uV{R`$J60b3>vI7V#Y>H*&m=Gw$pg@PNyY^AW z6+y8U72VCs2H?GU16}Lw&-omGBJeF{>Fe4`{FtmY)~--dI%`>0!0W(g1)yUA(q0k? zS8m!Vs2MQ=%1GLUv=_w5Sm4q@q=y z!8tCGQC}xjrS8|SvBC&*A+`sLHrjIsg%LB^n9m9uTHJ-g62T2<57B#pC;CtF$fcK$ z(pRzXsmef!VXRebdrO$vNLsLV=W@j<))C0wvQ?YyeLPNx?RkZul~BUM7~4^mB4**q zQPIn7sCK>nJe<#}7KNh7-zX3Gr>xM0w11W;WjiqQKHjwv@g7UoN+yquK0-H4O50p6 z@I5<)&Y(4wOxj_n*M-*S;skC7R}0M@10pgQXcjPWyajY&SduHjGM_iSTC^1bOPB7B*}&_n=+SKSz;$gE*_v z8cKJ}23QZ=v$@N?)_ zl0|+5;`{x8+yP^Rt>I%YbB|6kuZ|}$trZurdVXjvC*1O`J9$WlnbgzmWq4AmNo_Eq z05C?rMwOd`cOdyZhK?zC6HZtWWBH0!XbSwPtT^;iij_4A3*byG5hMUtZYf^YW;ph)dblEVUEe0~Yv+R@LEAkprkt8w9R zMVC`;M$=L#Uyn0Z;NoLt*$dW2Iw2Qn^uw8sx0+ubU{`aB*{;UMGqo2SAamhc==4!W z8Pk!fMZ0-JRvhd6~hYmfwi(NG2{rrT2*i!KHJopPxE2*O~n@q)u0&#F_Lmc za{LXM%jqU1T*?@26P$(gjlSVh44g$;^OQT21nPsP6G8-kp!wG+#{e;&olZL5Wc%`V z$+0Fk@WYjfK1X<#Ce*l*#dU_8JD|4pr>F#9q<{5tTVBStB58ur8o#}i#)bLXvwQs^ zorAfPTj)ZeoVheVZKhfkXc*i=*E`rha#?WEBh1icc{YdE82) zr`j+2kv~f?!A#M|^4I2L{DK9SELG;qz^FlQ$L{2EXMtZ&!|dJ+;3$n((Z&<3>Elir z`U5N3oPc4=rZ68;+=P}_!Id1;U*{ULLstAy=P<-i;z6C&@pWa-fVcLO1$6;-MSMB% z0pt3NfUmC*QyOWOG}aRs72LJ8#pg5cD?xqNvX`@v3Hgj>1pxd3QKl zz}igEB_P<(`S1?p+>$fjk+mA?ndmAl!S7;|eM(Cc} zl(*g8O=m*)ycu#|P9Tv?`e2L?>cmIizXhKe`yUx=F6>kH@1L6mwCt}i1NWcyL90+V zn*)3^>wV?(0czk}whdGYd^0M+=!;FD__Q4aK-&Z*;?wHhpPvf|ttJ?6L+t$RYLRX` zmr%^yVs}weyRgbI&TzvqUjwq1spl1!V)l_GSgCOn&D7=g_!`7Q*s{>z^!W)U z>HmUZlYULVeyF+0&;JwWEviXKq2_s+NyJEznCpf2)hENrW(n0%gqv7xevJut7k>t1 zHMt!qdjexn*PLgI*y{VvENhKRZ zDQ>A>5*ZrUPvqa&gC%u*SK{jkP~*5u!wI8Vx|z)|Qjz=E$lyOpDX9P9%3B%by)H(t zPtz{VF_l!f#Gd9PFeeoSsG9Pw*s-&YoT~7nzV|p+7$NBiEM5MpRLIx2R{;y~R=;_1 zO$(986l*y=M^S>RI$8Jf#5zt9KyO+@v~4~`-U)sk!)R04jZ;TwymlF1+_Dq&wixI{ z43b^m?X20TP2fJRWGNYJz*-O+e%m~$QpuD?J-^UbbF_iiV-)qT0nC>|+_1Iu*%10u zj$D$2GB=ZfG3zu^l|s1}raKMprum=3?(I^y0rsv|Z7@+yE`eOc^br z(A$wbYIRtS#(h1&2Cze<@pywY?^pRFXw`=p+XOcIj=AWbg9~CJILH|ggTKs_y1%As z`L7k~2kK#didQXB9;2X)7t?}#(jK{RbB33lSL zu+ov5=p)}&2zCk@Si6k(l+I%AIQXtI6 z=7+{$W?f!pI>{a!8KLkehbTuy{b`XR^a(}u!v^Ewc;Y8R!6hEiFYu)l359HThq$k6 zz%rfC1rLz?P6Y3{GDJ6)A3`-@rEb80e*`ifXG0+M&3LDYXoA&USovy&5#GJq&GKLq zOhSz46k<%mJ(ca$Mss{3u8Li;Vou=~b!UNr4Y+prG^Je;|2W4zq0a$U+@-pf!7M<& z0yg7eIeQeVchUp*inkv+sU*&8m$$#(qGTiJn}c{r96GCjy-!!-{SLmLP}6Xa94tOG zKz5NjirH~9*i%!}-!n87WK_5M?UNB1@#to>Aa4sIYZ05cuVA-VB&ybGIgTxy9%<8q zy*;q@u9Eh|ecre7^jhwR^J~p~xJ!|o=)+wh=@^PXH>LzhU>gbI+Hs_T)=_U>N+KK) zV53+y2h{OtbG?lFq$oL0YP7atLIJD29e5MnyeBlDu)6IBFBm1n*<(!^uuSVLJ;gw| z-s6q{t-doZOft*?ftQv@js&k*=%;=R*GtShC6bb#4p}oPT+rsqf%C{cK8rR8){J4}zi_?vG%&k4XqI!?8AblJuz7@5(^nq6*pa~WtBfIA zT7Nu79LVq@C&u)H9`ehKzWqi+zOJ)i;DF%GreC>B`S9(CvBx;GsFI)r?zVL2J1t+kKtwt@tAZx?(SeyCoYw51tmSYWN&*i~ z&(H~OXzQ21c*4DcPKPC-@sOn};0jFD5~ z#+de4_njWDabCx)j<#!{(-`jY-|D2G;qOb4GF=%+w>lbrw-urh;+8Jdu@wXTsCrrg zQp!ASgWV2fO`8H~Ka!fvhD4doB9M-V-6HutM^ImNp+G9`eThgk#hHSiK5y|t)I8$5 zhS>L0DC-uu!U7Vx>lcpdBqPI+yD96h&a<&8@?GhnmCx>Acl9f+96xDffTiaxX--zf z1u}a}L$2>B4IyzoL*gfuw!67nHz}v9y;rXfXWW%5I%37?^BRWR^_JO_vYBK~>&_PJ zShlF?qKNxLahSmOf!46JS>H9$nJ}<8)olZFtNVr{cTKrEvm5eXmEq0Lf35+@#c3A} zHN3qrXs*Iwk$#0zoBp07@BvK7G#OLLZM?L%d?P){G~K-`2jp?Q8p}E>QvA{%uKv61 zDs@Xdvc=awKrhDWt3tY-F<&ErM+M(NJBg2sLPu;lvsU(sJ|fzK6URUxfjjPmK!kDB zuK+53sV*(T&oBkh?Cu`WI?=`9!pJo7>|I4_YLUHiGyjQOYa4RW%GEyOJ31wo-LvQS zcohwFvlzU!vi@b7K^Q(Wy*Fsv5+E66;pr#M#UrPK?hV#ne~g=M_IVIW4Jq`|Gf5{3 zf#D>3MW7!}4(4L%YvNDz*>T$m1>ZRp<;ynu5q*V_I zg6F}od+}eaX+vobOI|gg1Q+%aYNsNZvvmBbG>pKAUnGCDidO;xsnsvKwncSVJ?mf7 zZ2cNmA+D)liWbW;G7+e?i=jcpsGYTkvOxm|P6idqb6T49faP-`lF2|L3K>rYm`G*?eO2I-Rk*&lrnsgc9@ zE%QQ1_u6}pcM!+i47 z`7Jshl0+Z^@mZFF1Dk($J4;GtIm*;#1p}~-vZK&;!HIuoMDLtDO}4PPz4?YS4~)J% z9(Dd`0IEQZ0>Zq(DbmbO!_2IuTK@Q?)$@Dw-Y4;O!F;a>YZ#vq6gAbAekpJ6pobJWgLi6OMjNI}JG{79} z@2?zyjEB>_HfW=}$bn*meM^G!e}ubZR32k`>cH-C{8~jRh`;`9D&F*eFun_$O#;Wr z9Zy51gX->~VmQ9eQNRMv(S#M#m$J9+n&)B&n;AX`8)2x(^Ilb78Lfh(a`*e6RCwOs z27w4b-)Tis1_x`3egj_qD8NiuoIREZY(cg$l3jcg9x*EPfNkLzX57ECo9G6Qh{Gm& zeOPqOWdi{_u*1Ty*RSq>Aky@P2i`*7BFdcYWKVxfL?1`Dr(Y z?;NYpKnalnw5QafZ$~g_aE@?r5kHs*-;F=8us;BrZV3=TY6iCaeFk%6OEJgy(!SNv zxvFLXO~_s0k*B{<#1CWr5Sh6fk1A(>vTuBjGK;4o6YBFBu%+w_AdXl@?B-+{v_!nX z6C#clY`^TeV+ZY<17rt0QI>}$hI`7>B*@#+SKS{*$FpgPO`ofIxP7z-j11RsMPcIK z!F-|nSJ3)6ROqKHHkXbl1<%eb*Vxe{EZ1kfk!)lN zF>1ng(QX)61mvBD+dN{8q&dh}9_=Vh^y5Ck5X)tHS^A z)8>?&nATxD)nx3I(D+ufHW5GQY`#!EXv=h9v`Iu#*qAh`JRc*dxPDfah-o83H$B<- zT5qGZm8h;R@+2UZu~pyB(iR!rpP6`r&UaCIgS0t`ABs%m!IK07PyST>Zq*`9n9-O1~+vT;~=O8~RXO znoXyoXp?H>HAtVF4NWu0YtI<%c05pm5?1>@^h@tEI2)^6Q|+%e2bJUnPnsXkZ4|rR$s*k?06t5Q1)63eju)R^MrYv^kT7bPFJdMmT_N zn{QLUA)BPxku?SQqi(~OEX&WW*sbC( zgd^^ov2~ImJ_<`_W-%{6lwQDzya%1W-_yLbf`+;Hg$Q+miURJ=>Dh7l6#~-^iJt`AA-Z4(uSvddAo~MR?CV}K@`3yMldX25RzvTmrz6pVgqE;-P(RPy~E??+S*$Q*hP zonoHWIhAn-=SclMcmYY)^3PlOgj%~Ju$^G9S%>C0p=So*KG?hG_KfYg?AcHQ!pSA{sbkWW~pt;c<>PCfxznGd<60j=t#Gfp|8@+=7 z)g!i?ZP{#S%I0%AeX~G-3M>u^{R&4CK!_B9(zm4aLBxIOq%MFiTUA(d(TiFs1;jv^ zgycr8H7C*Y<6ld+P9#3NrEu2>m&@t*-luqbp1HKVF19V+1VABsy1_GIp&XLWCu^TECoE8RBN z)06oRjv6G^?#}+lkW^9K+Y&#%1U?ujK)2QbcW~*c*?csK!cQy=r627~9vXij(%ZR+ z^5hHLLS!o9p0BavV}2++{GkRV&$V#soxqBY2TI-)59gi|^;-FY{wZXu;U{Ex{2jNF z0b2PF*wO;~^Xq;OZrIo%)nTK5KY#}E)JB-7ensnLn4}ZuL0GjQfg+!$Ki(RL zt-H8;^;ZS--Fb;ppcsq)(5o`nl1EBpW5J;y#oLqq$;-gm1%b$#g}Jt0O>H{^7z}=F zXZkfUaiXa|_-mxyT8ABz|JGL}Y~qgkKBi?D3`Wa^Woehn*r=JamW-U}oP$aDi<`+U zn8o8GnB56~+nFRz<%*71S+*JNeFM1z?!&%`@LxLizoq$jJWwi?|EOqU4k7o#^Y5tk|f&!YJL( z!*hFs^cpU6oid_(`oN3mfda({w7a`u_3Zylvhnk72Xy1x(y(KPwf90%s+XHd7N;OM<-QWcz*NO zO-`d+-zKSTOY~Y<+gyq1V1`cI!t!}ys$zmhZlmM2g%N13Er$c^Qrx0!2OlUZXHXm# zW$J%$z56$7`s(Gr630jvUZ@r0l5#)lktX6%6Un&t#r#lht+fS$KU8sQNejxuk@u=P z3SGFa)oNt7F;CUyNha-wiJ=#a-Dq7N;S&VjSRIVN1m*I|ZMRG^CfiDa8&MOqOPmEo zf%UbB;MSsOwZO?kwV5ZIM0-%9}mrIo0VGP<>I5Vu_Y7Kp+M7K#+V-7 zpS?!)cO@VS=|AR}B04|QR@4LM>8mz?ntv+R61QMJ`bp)}K^YHV?ESW$-K%PSJS(+e z_}S8(-UkY#B`!p>%`Xu`vUD9-L)yOd08q_WepE)*V0J^R@E=*MS0`b1tY!F)4?yEQ zIS!UHsC>LPKPRs$P@%@b+t#v&H(vJ42uH z*e&_13_ZN^N)pw3x;etwg%jb*FDRp}yOY3i$^e16>xZ^e0w005IM4q z|UWusqXI^=Qr9}!E8mIABBWtVG)w6!6{(=k(A<_r@uXPm_CMjw-MTUbO-f+LSitxQ-wTWWDL|24jP`l^h;)4KR8W~P;L-y=VKPo(AabmZP-My=nk#RAc@}hi-LgNoKrmbYuaCn} zln{)0^xP=~*~)rN)M7Sr2J9oHHU;bd0scO4RUG~mDBww7!*D2wsGgY)jaWXXd?n&H zldSn^z-~{S4n_d_YIgyYd{WNbFQd zh^dbZb}F_yh+oHzQ6z= z!XNOlX6xK%+sE4KvP}O3guyKDdBNffEKeVab%+w`L90BjbnHX8;;Kqv+dn+d-~_i% z`&}6T_(M_-+}xl}Skn%1FeO>)extr+qy~#^l5SjHrwcA+ioPMkl2c$*EqDcQ+0AZn zT}ANE@wszLx;DKwLVd0>ux|5<+6yYKKUK~v_TO}70yk7ijeUrD=~6-L;@IhaOI5f; zNqs3f6QJ80cPJC`$=S2@!m1@4J!{Pv)P{E*c^oycb zXg$|&c1g*FZsf|?!QDnau+$DSuD#TD&zLhI^ge^9OLJUkBTD>pNWF2;uaPXJ*fe1{ zpdQ;f>z6XTuo}<20Ne7+fy6P*=2C>Nke-QK00L5VS{h%1XSk0ZScxMIP^jltV+bix z1+yC%GzXW~2@-&T2}DPNSd|eqP!R2c@}xN=bUq|5w7O_BJS)Tlc^MU23n%$iF!}V~ zhY$L2dgvR&-$AJRy)Is5KxT z6ZKc8gFI8P4t8o}$TAPvx{3{RnKK8^ZNt*wQG?pMwroW6XUv;;kty_J6X_n359&C5 zzJKjPA<&+m3AKR_Dt9L7PJYv6d0zd#Jge@X*%;!*yA>qVADKF4#atY2RAa2S6<-bA z!<{Rm>Ko*Ix4&ac~`Ht-Kddg@)rbm{8Q$po{C`@EFlz6di zkm4an*bS=QW`Xr9XQ$Tm&Rq5TpFsE?AEo8a)1KY`G0s@x_~NGy`VWuTXYCC+srQwk zocumAsTfhUofQfiJr!_BK)9@=c;qQ>#~J;WD%#R%!FlnXu8F%_dff76Ac;Ei$ZX3m zfU+egb391-2ZMPW;tU=Gs-GBzC!t-9nLcW-WE<4y|AQDZg_4iA(8C7aVMPMIp^n{) z#Z%^o&?{X(PI2Dq9;5(+*-Me$iJq1-@;-G^%H%!LB@fw@=D-n|hzr9@I7mK$=TfF6 zmy(R0!g`(-WWK?AYY^En(-5m@_4d&`J5m-Sc`i^Slt9HX*G6So!l+Yn5P->_LbCI$ zLgOo+&so{Pm{U7hnrh#;^w)De>`sCjhCJH5M^P|!L~F*;I7R^bS)m)*(ST)u3wbL% zBt49bA*6y+vH`xmB0K7n%COdE_s>{xj8T{TnHLQ=iqY@z{%46zOTwtHCs&*7dE)Dq z3#0+t0$iA6M|8|KYVJnY@qjk0A&!>ENms{Br6xLH-)&NRBGickx0YzCbyWIh$IHTdb!Jd|b!6bM|YPUA!A z@YNcuTosQ7n7}x$c9$!%hfvI3?sf%iGYAc9w+FZ`kFRMYo|SeB+Bce#GA7xkiwU9U z(?1#jH%%R*u@WpyQ=;HBAR4)#EIgkThNhEO0Y>hp>T}68E!manXb_K*#|M6dQC}cDFcEUt|9uXfIO>oHbYR*lVFq5*R{(1lyZRgviJBq%hw3uEG1~3 z_hK}OT>qn;1h~U^88l^ag6I&i&VsE6D1DHR+YZ6k0F_D(b8=kt??1TAQ2CqI=ruY= zID{YdTk`=;34;g# zy+i7A5TB`NN@XVY6&K{z(WN39j2MYq`%fyQ;pm|AkdKHqLZ ziwI5i9(ZVRl$#ppudjfzOVNYThDY_7=88`7?0y0H==C+EAdVoM@$C?|Ur_lMbXn16 zasI~I#&#tspN zaX0X_Ww=>|0c8UjB6L(gz8#pfC>HQ^C)2u3>T@yk5aqtI3`2_`uG?c zly4xW(7+fs(65S(S*6>GP%l@UVMck82&PHu;T^F;1Ph!UHbz6Zjk+B-h<%TZ=>)3j zKj1s=S$G?SZyxmHByYxtG-bz!&N_f7s;LR)xxzxKJgz)1 zms_aGH{;FCB}vMkn0Zy-MQ6pDAylo+G3rPBpJ&scwOUI{ETG>H3^SvCny>*v6)B_{ z;xeNZ+LIlw^sYK=*qp2XQd}0(UuU?63GB@#PGgESz=vicdi!HMVlgR*o02d(gYfXG ze*ET>`w7+OQrV)(%QskhIMsPzt|xpL8Z8##1e)I!*SNFPCil1L4!mRUeM|@DJG^6S zlkE%!U87SBtz@H4=aHAV`$FlVUWB~-8Gp`eQ-226W-g6u{IyZ05t`om8+15O>>77? zR!fY1zc^Q|JpPybc;|k7i+>`65+tB<8NevIgafUpF0LrfbM9eVJvbs-ud{B>XDSCb z6>V1NKh0r&vfwQm zpt&I*t4#lN=Q%GE3h7M4fmI-7H(pYVCY&#f`Yj;Hpy7KjJph6J_2fOSh>zJk2}uqjq__iTQZIRD*B#hlhdZY@Ba6y zjqAg^lO!n(dn&bPSRfvfd+kbLy#SE|PUfOj|3zTU}Jubmkf2oTr%04!TuV$NlR1PXajubiD>1xrUkZQJ{fByBO zNvE>ffu!k}|0`Bc;|rRwS(65s)RBnHTeXLDko7N%)11e!I&2`FFe^RXba z-tN}BDz*z+xM*2z>*S$f{pKJFWoy5|2MSr)-=>2?I9P&jY>T!@@)Ejq82SN1RN0Ss zIrjY>T$yxlyi^geH==W67Y5y}ydQs`2)BHqxDuss^X}uA87M}&it>Y>|E|GRkR)wM zz)^n3PR^e}3=M+yXE9vkQtGSkQRU+!oN7>nH! zTad1zUo(lvqM-(`t33H88J1uG;qjsMnOQaj}+XpjY$ZBH}WO<8STY@@a7~MCFMeX*?sbGn);F|YY=`k z${gx-7C=v$Hv9i^ij;Ftf{fP+S>4(7f`uNxmB#7_H(sXtDPqdx%NcwIm$M{%A#S(Z9 zPVf-}Ag!N=&g*gCt%;H1dThZc&NdwpE^mcC$L=#F&E<_??Qlb*VZ>JZGvSPo@OfSI zR#~Txh;#;l>dLO&;QM%RSwr19=WNTCf5x~{q5)I#)oB+`l@L)oOg#!IPQ$9ZM7C=fju+17E4^Ce!goE9>&dv2LGSAig z22-xbSTqfu70K18wE7gKfw=zy<{C@W!%1>5qr@!E_%)FBd0Vrj6+Kjnuj$j3V(&P5 znWGA`=>wa#jipANXNlFK-MQt@G3?V&hg(gCmQ{?Qmm41h+x}f|w1L9>FK?oblrA7- zGF>a=rBj78>#Mjob^4M!xk+Lmmtd*Bg<2W)&@5=N>?52|oc{uA)T+RRjK=$FL!v)v zHeXO=@PEZ3$wWFqHN`L=u!u&Ge)7115N1k1v4p2)HcCnF!@qxTJC9;?n3CjLK|$oB zqcsn-!i*u%gujJG*Kqmzz#H=R`tTG)zVAZTUr@{*?O6$3)~?28j8GA+3d zab$@7MzS`4#BA@n56GR+^5gC?l=|&@=uIsP)viEivWo+Ey}H6Pt>`umHaQUjVpk?e zuq_M1gRBJizfjVo76Zv@A+InN5<}~xruCvBF^A|Kd82jXVyjl?X>+8@DpcbIezf;y zg2hiu7utW-at9=oZG>aEC(^VtHdhXmKB{w849xvOmb)NW-5xd) zUS<8IR-W^xnAdJYCf)B(p>x?-`anT~z=I zjdK-wq;c}bUXWYj{1%ANzc6(Y0@^STH!*B<7Eh!7-@f7=68H@%UT@13E`I%v6EsX8 z3MEh@Xy>jI=JoGw>KW<0^X<7A7zVza7Wni9g3vNwMb6eXvy*52TC{oMFKJPGm^cuR-Xl+W+zd5zt5XK8RSd;?6mXV00hhkz=#9YNInj3<+)oBJLaf)6F z>*5yp%`wSCZN~c6^7(%I9yq)z3Ff%n{2=WyM9p6vTzgFN2o*a*xK}3iCr@6m?6=jD zY<~QWVL2Np8H$C}zU4oVdlz>*CmgWo9n|GMX}O^fLW1Fh0q#b(G(%vn=&~Cd#aiK` zEQ{JM4|1HSP zRP`_r?z4>O&;TNTeMBnIIs3@sd<~4e|3L8>#VrhZS7L@>^Kx=KyEhf?OqAuesMaL| zkfEvR-dF)Cllfx=b@=R|)~Qj3f{T_^6W0g$D|||^<$wc>b34B>5n&U$U>wT7o0Y!%y~yGKkEDHxR;?*L~1l zbJY_7TCyoZjB4pD7h|b6>G?t&op>=d=;!T%UZ#LxfuZ*DXZn@CgJDCM;8(<<{7~oX zhl&*LH>EIJ*!Mt4Leo0OiDP-{$7JIbDw6e7T9dVM$ z-?V(^CNixBx;E>orbd#8a%Z_TOC1BEiCAZP{X#waKm?qE`}Hj!S5LLx<>g{s>zxG{ zoTh+m)ym2AcA8~#2&2dmc%t(bA@(mxk6mYo&Ldk{z`q{Go>5s>AAhMS1IM|;_1>FW z&}?Q`RP1pl1|^dfEWV;$7tLvP9yR7bzMHn`*BOU&E#yHxH7}tx2X=tk($?i~CP|Ek5FE<)0Z?P7BOI2FOAb2?$9pak^s4MoE)+kQ5rFBuk z8v}hk)emg|GQ&5l7r8WI<}+hu4nO=lRzv&d)afWG5uN)E6MrtJHOi+oA;_||E0^qd zJ9vyDg?UWEEtQ4d=AZQO<`61RWVHN9GqYEG8GpyFAkejstiC#(>V#|1_$&<+jW`}awPPhj z4C)~ne=&bp_kU+8(>d}%?fq^+>6P@~**?kc6RJz6THWP#!23U9#SA)OjZWn3;6oXH4)=CQ8sQ-q)ch&ABY4 zv^K}rB9|scqSVngd{tAkr;{RrtWG;i( zx=TB|+~8e{rpL5xx|t^)&`iaLZvcq`pUVRo;LBml`iUkr3c{wVXMe0!7FwplU(xe{Ja@GJBk{r(BcV;wEPqwc4#6?BpsQi*Ndd5D(LC;r&ir^TM znCq~2WXA`zmVg#tZ9)-u@A&*#>Hi&`e}A~GC9jIh9`x;L9&Fl=PC%oq%Edo6l?f@~ z^%87tzX2UPe1u^5)5j5+k8Q5A(G6{4gb#seEE+Bdz4r?Trl$5=;@q^vYcKaMO9?($1F0ns zyw5?fdh$ai4E0w)YxOWjaah>!+!fhxxgdorfyE}a*}VCl*Lm2K*@gSz`+40skwrh9s8_FA7lD67Aqiw-Yq~-7b~#^8G&`+D{ugcQRLUtaVnLuIW_d!ZHao-ft_6#< z7YSwdAen2^(|zh8RKb5U#jZV9@tRBowONY^CPg07Qj%<1=^iqD^f5nsnfTw%L;D?g z-PYMCFCACPMys&Jo+-+2L@l0)z-M(ccZ$7`M&N%AUTF0W%B%^Rm?d$#!B`Ikx~dBk zDaa}u`YR11wq1N)_#2! z=Pvz|Tw6BYq6qO_-rdFMynPkQ!poV|56xzNj%oR766Uav^txUU2z=oTjt@)Q$yl#F zlp`hDx~Vk7@!T`U7Dhe}B`$?=Onq3T5j8kDwGW6C*Mq0GdjQsa*pT1|mbkYo|7I2U zoJZ5tJK~rUYJ{OtF}v*=6BIvXh{691mVBU$>hP4CQZ_krPks??pi%_SSx9mP-C+Ay zCmhs720DtjHx7~(zW;0|&#HIV-S51ElC(jmLe%rU^y)Q#v$Srpjya0v4coj`ouf%9YWy-%REqFvJIw;*3>Hqvv)%-7 zh-@c6o_Yrk;@ZNq)q;)grR~@j8m}40p5o_Doavh*HGL=)IgS3eF=bZ1A(7l7-59PmswmE^l-{_dTK2y9Y7`?(l}0id<1W+OMW@PHK4e zMX;o4{3&j<#hc%1Mp%sjVrh7Bv^=~&BTQSN{Y)O$=re2r?*sD=wMVWq*u@TS-Jnz2EStl|T7 zev1pOj|CbkzZ~3^*Izs0)O4s2x+~x31ABp~pm%6yD`=c0=^KI#3(#;7gMc%gcKvun zo|@bXXL%ZN{@ey(6Ori+z3>f5vt+?3f))QeW@PlfSu`(vN~i1Gh^UW(3mYNFI7 zzZnAO++9!$ZpB(+%;|_#T%Lx_@5XB#<>kC>N-yEZVmmD0w#nM&-U(Q0MG4nYwUAel zPLr1k;L8_2i-e?v|HMf}sSA9y9o;+rRjdo5Xue2*0 z)7?hdULs!(IZTybG0!p5FR;{(uzW_mCXoY~Gj!2u&j4H=((U>@rsd-G;nHGWGjHw5 zrbV)5f&DhD?=Cju}4W@ zHbOEr=8@fR&|m0jq{@5pJHfLvLmBAh}zehuwUHSW0;^o@{(ZY6g=@BQd=J!M7->5|lhO|@`es0s zx8w-R=9Zv`!*R~IEIE!haj_OK;_27SAqwAjP?q;$3U+|jHP`lI-iH==<3$9-W2&tf zGMoO2;65;@byy6yZv7*-dlYCsfNa!AW_|=E9A=u9<*8g=e9$ke@q-VjC^N$8!c`!G zIbPYx)U-UW%;((*MP*$QqaG6xgW|puE*z6dMLpu;YNLD!uVBKyKea6&wiUsCVdjqg z!TUvBMc#&i3QI0Gp+ZqB5J2K{+i}B)pfqqq|B;&f0}(V2iiR8e@|`Aia|kYpzcL1m zZSo-A;YM)*yen-OcdCtI~~ z&KZB-7dZiqAxbM@PvxJQSO8U); z%X;qXFY$>82d7r&;t&8y?4q2y1%YRGY+y;Em%>M4+(e9%(a!@TjfP>rcEm>6;;8B6 z(7|?bgIYaln=X@^qVd@=MTp<8b>JUPQ3b5Q$~BFrGDM|jDbzvG^7lEkmD(_rSoJJo z%tih?`(-{xB@<@j4mFbku%^~V%fCW6CeQEo;9`Lm+RQ_eN2s@vjvQ`v(LYgp zwI4Ivka22ALO&JIq9?e_ljOl2_W(_AVwfICiawJX${-Y6&uf`9Hs3b>I<$r6K9*$X z9*>_6y=d}^l(pken>P)Ieh>ZtUmW>7SqK0(G6Y+&U$Cz

;Mqxk62%X`MDiPv9tnrYcNPIxqssS-_~N)zxuxHx+FS z0{IL+kf8{5>JDYJFd#v?GENxXR8p@~7#`+TSHfw_9Hlk+N2DS0iV6wP-a7807j=>^ z!tSDc`RfL~b)|h>&L9mnp8MRz+^#~NHog@%j+(($j_typ9|{CGU$)&?>lIuy}>2!QNv)a<{BdlXDrLxHCabRXxjWA;tJKG;}bax?}YHd~r z&rFU{nUjH_cK!DPq4e$5d_SvqU+h-^jYEx{fRcZ{3p~+l(?*>~N+Z`_W;v8N=TYv%iR%4R=37NUql*)aV1s_ zLHy`Ow<{@fzR9)Arr_@E%<+8cW|-53*s?u+zvL|8MZjxQwxY8xzfNJvxgm}ZVW>Kg zw3phH^0wu+?O$wJMw&QlK{;@9NEetx)i#V}`hf|{UVv(9{L2(h$nT%72j})&iudbzM3f|0kSoA^=eBwLH?vla z=aeqZqZ$m?JYbvx`Pw+rTE~W*#Vh`KF=)pRLBv#4zZhEV0#Ivqn3Eg%zhbc)N(pE= z=Qq7p$es0bKG<$ z<^v)zcek8szEkxC>$v(!`f8%YT(Z@qia^vGs^_0?T-mSGK9NwWVq0+v5z>x;KQc*-r|(;P=i;=Bk^@pgZM;R= zfz3v{?G7WMbIq^g{yRT@%Xr+;FPli=wOOCKc%sB78N5yf#^nL_fgXQ#yUz3X6GWXQ zVSQ9dB)$JPfpgNvwBV>-JpzhP$k^d;+mLd^~mh2EG;sCbk*u z*K&vqZrP@-H~Fd1+OxS%3^Qwh;g$d>exhjnVQ;}B7yQqCcr&*r_1e`Kh{i=5QYdtX z9!RaZv;SMaS`=?6_e?`2^{-I_5>yxqPavWT2f4W45PnW}mVaAL!_P|{QL6+uC^xN4 zOsyii&R>11g&~s3Jl=BiBjDnUMaw!LKVlyt3()Xt0@9E0(d)25`gvT-CJ&I{W@3Do z#^ZIo{IKO~OX#SD#!zVlv_N ztmMD8r_)rGef`nz#*zksOa)=Z-NT+S(DiKRR2p4PmKWRO@n^uf_bBlVu49z|kLi@}CiDFutxCzF+u}i? zc+s$`Tdc1V?8W7tIR&S_J_3V~)7gk1lYlFEhE0LOOV1};NB76e%^i-Pm-lI!VvOm9 zM8np^YZrU7V=v$jNb!ApC|R06ef{%q+|%aKaR8&)pqXve!fD{DAf8QjZrjTIbX6N1RoIT}R*(kGTtKO-^43h8d}4th2DLl9JHI)J z)%R&o2GsD>#bK1RNZ5RDhT)3jm=#?Kf;Ghq>t4mLSPP4NkZ&G&CblGD-*Z>P5M-IyKW*=G%}1&;o`qlH z{9nI3#*=*g_?x=-VOG13@85to*z5eM>YY4=^^&joEZ%{`jow5LqUvGICo{KeDk`09If4=o9)# zyo9XMLBdy{6umF>Ok;jihH&xs_ATqmNG_DAKO+2qh7jQ}&MHS+p!?NYvK>$6;ba4P%w^1 z)w@m_^Qf(vNHL#=wa7)>Xfu*Xnu=C3|23t&w^yQtz;;`oLt=;CuGs&;NW2yZXLQJ% zz@oGD?n7zIkwDrwFuv)s{*j{+p+c^g8t6HxmZ1!7UBBqOr)sLBG686jl!6auPxg3M z=PFX_x(?l}8DG8L9W6p!tKf`WZuD!CBcIi%@0xE22gZk7F2vzZI+O)%)$tE1iN1UV z#r#ia8951Fb(-g_)4VIJl=eIiE>bKMeBU|2f$cSU3u7VxLT-aRVm4#^p?t16`^H4q)>j|(jM{C{zhx?A4XdZyo{!C~F;Rm}+~mhc--lRv z5uR-$F0ReJfPqhqy32(wx_jaLufthtzs*sAqR324a%XBZu+p3D1!i^3YBxh;H|xqG zq^8v{twq0XGlCe(Y=k`4X>-^|roc#gL<!jJ;c1>OrHVkr;ALfI*CvI<6u0CYXBw8@@~@3(j^X zP!Cd?{H(^Y+VT{i%fc39rrx&#MiHTb*(b0#z$i)=0D1#olDBw=KVN^|BDOHJCZ@rJ zH1PNMk7FpqWwvpJ>uA*Dx4#$~D$RW?b_ozdcpo_fM3^nT+HWo+h_2K|7^;J7P&3B$ zAU71PGq=qYA-zLijUtkUPG;0N2nsw`rKImL**W*sB|3J9!_H8Z|3GRLz?e%rUz8Ok zdH)ZxF`1S%gdODUg66fO*q-foNq$27w3TDVo1Jz0x8s@ux>m$oR!1>_`hueb?pmxy z_lkelfPYXll%Y2lQb2GD=qW^|Fd1V4gw{d419pfg*-sy$w%-ib)}6ZCn~j-RxRX|HJTQ3E-v zuv#nss}8fpmebvg`r78UE$1bSz-Mz+>+NRudKrF?@s1|hw$izAlXu{w4!!H5bs~G zly0oxKLjwr;hjnMpaaH$f2B&lK_1yn=xiYWh^W~*JbA?u7uP|e!mL8A#-t*LL1{mY(+p&h7l*7W>Ph+=XJrQVfVlQqeTLw#i9wcgC9V1l zL^#kPc@I+&@_0wBXL8@qriBKNP>j<>U_nqgfoKXbrY+OCL?dwcw04GknA>ZU4 z^0n))I#q97y#WJN`6@J}1pa!@*hHsDhv2Ri`oyr&#U<%0AUC3XTW;TE@U{8Bvo?TCmpAlB#)rn3o~zCrY|bqdnRc4}kXle|lS#5k~@$M2EwoV0); zpU*$ydkW*cO^|;6o=s8+$YCO{PXr{#oMiy?ZE~$Jg-Z1)E{LF1aA>?99NE6)K6r|S%<*#1>^IYP5^oaK zN!R9)>@2i2LbO67DuR7njF9g6I@sg(HMK?6xC)o}TMIc&tk!`rw34gO1BHs&s(Et1 z7m$rOkaF&^82D}hh3K{s^gR_T!K3^SXv!9bk|-IaPy+WB(inowUi_ai!9V1$=9+54 zSFP7ssVIwEj!=UI_nwTA*QD;@t-&0S$3yi6REPa zk^mUCF1AQh9)Kc&lqeaP$| z-7g!r19L-(l$XIfNHz4)EPL5X2t|nEbqXwNhG%It0ZGmsX2s_*hDquUBaQPg9#X^; zrC$R-XO>)l$B#@@wS?RHq7AwZdGgUt*>{QM*eh7sSx-7qY$zUK=}i3%5!O@h9ZDCI zjcglv23kIf3j_(Q9#D>KL45Mnm>DnDlECVd0F$w80HGS}P26Hdz$`TUcIgb~`|LPb zCSqdf;sqO2eBL?XD3~hVyYN2W zt#7i$8$(HvVv+V<3MUv)IM6`r%wxr037Rj&?r4Xr=m2eEPtSsp}(#mLj zHwQAiuA_4%GY@xI55ZflE7ErFY(E!0B7e%dIj+n^%fWLW<$Y1`W&_Kztx3HM^qJ<9 zzOnTk3%%NXAePI5^5)U4V)I3PMMj;M1GVBT!lg~aJWmEJXR-^Jvz58R4pdB|6!`Is!L)XPkmMjQ z!P;S3?@bD~U2n_q?#tS^u)phUkdEG0@3Zem=qHco8TSULqzB5ROnAKgC~SB&eRNzF z9WqdA(1Ck1$G|`5h@4a9;?KU=b@Y>XoI!RA%=nNg^3UKCU4nY{3S2{q17F}&m#j_( zvL(X^pY{b0i`R#PeOO!jdvUFuxTrsvOgs~^t;ESb?k+wtI`2X&|I_>QWx3Z+%us9l zGs(?fg3FT(Y$f&)+4W@_Zf$9yu^i$Hf?lfHf1AlM&b#oQR=vbs7qC8mqL*_>C}O!3 zkn%UTfP^;|UB9D3+Zv;;)X1#l@-+FAp6Y;h&`c45rvz_R&GlWeQVvL)QUVg~lG(ge)Q@uvBEA9D*MJpJX zdHkfllZB*&?GU;XTO$4rlMW6|2(zt}@Egx{J9}3>XT^hb@7$+dEz-9pOsaqDY*xdq zi5*bozMqEziL!Ms<|zQp!1`fy+ePJj3esLo?J*TH(gnJYu0zdRr0IExTiRd}G|C}d zNl(EdV^CZL6WOjcaYEO{ck;t*>3hXN5@O+q6aY$#DQRSEWLH`DGt>sdV$r_0CtU~c zSQ29$@IZO4@6+i;URo*K30;oAGuDr}*1(8j`3ZG@vs zG`TZ^_XUh(9p^sLnA_h-3WFR29ufQ*Jkz!sIFjd#0Dqw_mxHhsoD-M>WE_R`$?Xxd z3(}}WhZaxI$j^SKemK|YJY2NYF6pM*n{jXlZ4>X|KdkAaP2dQ zJEu(4v8f_0%cv8ekV>HVCFc~9H26rW+&if$F2QdKRL zwEpA%^ftJu&d~*#Iuoy_HVsi}iGT$FZ=je>z6)kJqCJM*l-sL<0l!mNj;)e0O@11c zS}IUL$GWhNZk$pgp}B3n;({!Bm@W}Ch^)m`d^m3cdk>s%tM7Ix9M?c^Zj`KsZd@H0 z^;WB=^11{@lzqfvw+su6TWhJl^X7#Z^)Qi2DQn7aQM>3PlnQjI#RH)o)Yx=gw*U1wY)|LCHrC7Sz#qe6RdbW;6)0J_k zNE9lQmCX-XAuLPk6(buw9(ClVlr|p)pkN0EjBm%(j2*ksxOk@6fzsqv*WmaKi#&Z- zo8zGlPf3Ow{TMNnjeZGb8hJSnS$9oB>IR7~=5+bnVRVnV zcr@)Do0wSHU@8e%jOC^7k6bH3=LFhotq+|JLB0`~Q?&BZyn>{;+l`#Y^qQRV4jjLv z){o37fhp{i&EBDlfw^8^tbiE%x7l7!pX}!WTw9I2 zHO?5O0ve1J8U{>vh7cYjFcW)rct-R{Z<%pbhy5N|f4mjLR9Z1(vyfEAB-&kGw9Jw; zwHS@p<%xr;*1PN_RTV{d=gf`VC#=8}SB4UxS*y;Jq?nF1+iITcC3nk((L7Ajs0697 z7WYyBK+mL0Lhee<{*}HaN?Ny!0-&T5ysZgz;m#h#s#xt$sye_VAw zmM%$thO)?3rz8=pA|whC>n*nbGW=BAzv5D@yTO>;$<%dXQ)EI1LII||$ZBorEBoQU z=~<8lI?5u*J3Xdoibu2{9c}(3AG4ZO6G@Iy_7;Pe2n?xbz1nC`Vh75F858zUW|`lR zMpe+sxNwl}X!G8i&E>4I0u8A0wXT}vY~^skm_P(Xq@S{Hxk=a&_-kAg5Ag(gIgC;AcrJ(aJAhppK=qk z^KYJl01`$Ox9yt|;tRij3R|8k;dTJk-6WJlCjb8zRGRB+AmT*Q?2^KxIKS}Lh>Hh? zttC=BCQbtPXdtVLBH)^JSS-8Ap}AG;P0+f?hyWd*jjqK`f}vfhB5#|=yj z>%5UA>H;xIj)~Rp>R>t-h4vK1aM`D627J1&#X+9D8GwOpTHj_Ij31;qS#<)|VFSAR z2SqrDtRxqL7u$B~ZnV8e36N3kvQ#QpOhh^Ly9{ z=519ljG?qAW0Vj3%WU5$U)K`3l`vkl!bzO`ICVz>B=g3b)<;rN#*0Y}q#UuN;`uE> zIdEPJ)R)@vj>-xqZvOsc1Jk_-)0W}-Paa5EzMC`h$Uk7i+7FT&rTiC?&`&QH|P(*3eL&!W~d+N-V zMmDQy<+?lV3dsL_Ndq2-v^I{LBdS;MMPhNqvpmZ}P_M-)AFgDhBCN^G@$?C04T?WK2niMg9Hns5Y@l9V-UW48KBAVol=~`iS%)lgO$;Zd5xm zANzas-{}ZQe%|%=zRL)w*za%S`addJ0xD&3r=k* z$XETtR66|{iVE!qEa`RGAV%5f%B1)AY-+r^BLjRnG77~7hD zjXHY(m$5Ifu5N1n@Cit|ddL^q4NY>{-;oHeu}JL3^p5AE5IKEU2mq@h(%Gy+`6-KB zhN1C&gE2)Q?o|`-6xtvL%f9M?2pG?GvO8#fV}mc}S3pPwJ>|PG^)XK-3xxE%I&Yua zl-R)8qtE#I4Tjh;#f@Q>3tU?7!;sEE`YZsJ#HSYSK+nfZ)|? z1^eY<2w)LB@5JgC!zCpe_fIGXj5^?Ey?1i@052!QE zM;J$PMKyqZfI2s>Dl@Sr+gwlWDMFlLOIb&l7!5j{yJYYo8GTKoZVg$AIG4;8@3GG76*7x``~>i0|*jQ z;WDDg3*1$|JcWiAQolf_-@@JB&*7Rp)(S$gnz9hz2N2sLyKJw4mkmwFc#b8bjeb~G zT0rF<_bS>%p~nYb zAy(cB6=kBJTrv;xF_cqqlc0lqKp~O2J(~iI$)zD;{dCfCrIU5$f3JYY2zVa?k$^d4 zij6+|VKRJ`9iYnj;BH1cT9Qx3&|*xE=Ve91SIOEAR_*D~BBWb7SzyXxfgr?l4P*X8 zSTQxEN6~rKK-G3?u3taxm*2s@z%qQk>#iEfC|hb&Pm@}s+^7g_C3+e2Ru_hpa3g?f zSpzAHhfv8V224xj8IRO;oO(}E}4k;_#M*JeF{l!9jclZSMpwwls!)EwUd-MIS`akV-sbJ zn8H_E&hGAE_uYvcgTSJTamCyrLc+u?gsWCd=-#~bj8&NKV*q9x24|@Om7_ydXaEhK zC6oPS(JQbh&(7JC)(UvGt_$9k$bH1vqq?39rqUB?*%2a$yb}ZySTjbmJc*bjoQ%PW1an zk4@1zv|sf8LKUvKcN_aM{cLt+2)Tscg~>TDOJhYvZB?EjMB{qGfjfz`3irn~2_r&g z;5y%D0+tK2l72N0GnetF$Aw}sQietzbt!0<&SH#7t3Mpcn9cCS|6R%SOv7Z7>M!lc zMq8P+*+&y$rvy~zv{LD6Wy;;1UtKI8XIWj^h_x^Efh6&fX(9M@eJft=UNGpv3JM{W|%pr>`a z-h{1U2=F@T51{tR>L4JZ;r9MdM=sJ#3xhXp^Ag_~1%Jb!#O)dY48?72%Wq0x@2 z$aAywrZj91PcgMAnCiqNaF1BWW;DUe`oX5p+Mw=xJ)Hu)`rK^bFeBvP zgZ~&A>5eJx+PkqH1}6$Ooq?kMl}s~H)5!}(|E&29gtA-PH|%uAL;Na zfUPFIjuc|}oxz>|gVL2|(zJg%>@_kTh~iA~CRDT&C4ub;Zk^Kt(~LRvST3|u16sJ) zr8dVe1p?Ui!RNm&(j|BG!wn>PTS?f0tErja20{hxh~2TShM8qK{Tj_Y`MwJU{)XI4 zKGEB6XPBE91UnNZX=hcz!!mY)C~#QiW#9lgf#-)$w16R_SIY%ikikq|lA7H`k`0-r zMl%;_yhuqQ`@B0J`~fa3KZFu81HCmhkHX%&-rc6n&0WQ=1Qz%ul<~yxO%Jd_a#PK* z`qQAZ*mmY-wt;4hC0(-i`mlWz9bN9Hj%9$=3YpblQuHNpz88e4A6Vn64#^dBv)<)H;uVcpA0wTZ8_9Iuh zzOj1H3=(|mvp#lz^428UL}go!ih!R>t-A@p)29) zLq84oh!GqfW%3v?(vkN+g5QpdbcTZC%<+BWyajSU8=`)5;v^--c3`hI<84x0UwH$5 zAe?y5>3Rp5xg>ix-51uX=$x!fjt5N&UEW=9CrxX))@TE1-G!*qG8Gm=_q91^!d5f7 zRkfv7G-2jaljEY3zCK z?miM{f{_-q637coDsoVw>!x3n>%Be^myiswtdu(2-xI}8yni-xt_tXD>4Q=CJ_+QE zhr;tOEebQ|TjW3;8!rVczb>V^dH|MT4mN(>GVwiV?woHOkfcc;Dr(%o2*mxCUP^e z&_nQ3*3L%J)88XD4#MBa7%fWYto09PoZVr#W`T2dHG>3RBORPe2&prs?943YFjfz!c)N(#0;^ii8p_CW%i9(#NG}=-@Xbk0aRCT{KG1HlJG+ zL`RgWIq@dgRcmrEMSx>h3K>&e>Ff9^fGs~j2U(2OO{;3118e3#sH>${Ueq1kV}v** z7<4^5P5v)@O@jPqGs=VR$DaBzub{9;o8srRqO3W0YD<{w(L8_7c*T8@nCPDk^F4xw zHWZ&*LY4XpLLDS7ZwChGYz-LLsguUN8@~Wio*#q^w7jmy!1`}hKdE4kz8$44mZy{) z&G@cvBT&&rhUq8|-QRuZROqk7YjCw0olGJml~b}H4EwV?26(qITtVMSj65>{qXiWlQZ9w~fj0HuY?>iOv>yg=ol6 z@!pSiQNTp`zeDS(@3B^DJ#Jy+AJ6YJu)*C!X0cy15If&@^O?KW)A_T2MOkB z{bvYM-C&Kho2&WQ6vCQ#o0Gp4JE4`h;@n*^LW)8T!%YfaR|K78p}AUi@kV$uwObJ{lWT1j*G|AHO;(edakxhW zIjZy}46N>KD6(H}DU>x<`TK7r^lpsF#BhMVPT(!WqDWfZu`BoiPT9&Cx0lN1961tD zRuNmm(a5WH*~zKA016oguln%@xU1^K%!{&Z_{gLAme_|g4FZ$)fxK}>ot;NHE)I_l zU^=H>-JoM4c?$xQ`nCtIl?O>N{5R7qNW{t|Ua4ihRXZvw9@;Ipul5MiM)cdTcke*u z(>2?&^Vm-S>FG_4YYgcRTa&@nj&Z*;XfLZu$VS4`12-)4;AWhoWdFOj{udmG`P`nx zSL|u{>moklNNhqv8GsDhlfPVIaP4+xt{x+o8ebK3#A>&0MV09Ms>=Sp?y0+jSlt5yf8WY`{B}<#@9Cg_bZu&W7 zM+B`sMUpxO8(nJoMkgVWCzGQt8po^?2#P~sk$uIwv*F+u??F;Li58vfUjQ`ZFmD^2 z!W(&u)VvyDAJCii-@)Zvz!|4YT33FHGS znOrBIi?N3DoZm1D-)gpp-4ppD+Qx;WZRl67Go5xz`9K9(g4E-oo$x;?LJP25abq-j`DFYji(X#`JC~ z9E46oHc(-Se!atuN=z@ZD=#4>cuGk~p{nQbV9uecc_qDbBnB?^f;p1IJhHJ#k8wJS z89VlBU(1H@&PA||iz82MAO$R)C=1dL9#@stHn}i+vD@2^0DMIFl=Zil?H4e*&8e%Q{XCo-j3jiB%dAH*t2{G1dVL@VZ&8KJ zTMMx-Y8CuEVJrTdVCiQ7>o;W5F^8ONUd>vHz_+Gr<$$#u9n}n8oM;5}^0!jm%Ir!| zDqk0~T;JP}rFw-9Of_hpc<=(fdM0j)WwQ#kh@M(%;80y%X^rYA!Gk2e_GiiX48bZ5 z6{F@#mb~j^#JBBw8%!44YPCQ!j7dy`?ucRyc8s1oey&e!nO0e-jF8`fLOMtjE4UO< zihK7>-EP0~d*mK%WfMvn2~yd)VJ)d(>V>}+xY!YS{lKK_s*vmp6aY*Sn+1qV7B{#4 ztZID?$TY{$)`DZforovioUm$R-5c4VAQAdx^lV*sB!&Ul7>Y`bo+= zGMsq&*?%}>pOD7SRcwF_`JXpiF&R zr(9iSc600#EB`vS^d{1tVNSihty%{WjO;VkWimsIgWo}kP(2NtsFwz}RH=}gs&FyQ z3qi)gTaEPl4!=Fp$9tij!1CSAGFAp{JtYz2za#lQh5iZHH1`TQ`RYSX=qi|A9jv0* zaXEu0OluH!PPm%)eH{X;1{3$4ml-gr!HkprXv)!s^FofvU@#>$!a4BqJ;jaHpjDcF zuKEwpc4{H(c!q<59AEa9kper^f^q)63BNUV;pO1iHgF_KCgYNxMxUMEQi5Wsg84q#Hke>_lcLrLVGI>e!vP zH4i(;9b?p}+1nyCz*DIpS-W+$I7r*3jv~IP!7HYK`n_hT?38(NNv+K~a~*Q5jC3x% zQGxn90UFcSsZR^K>92-mv@Zr^4;MKxA%j*6RQx;<^D_q}= ziDGvFDD5d5Qcc&%eScv*%Z*$=1kRo~3BNUg=AyR~Nz;9Cgh8+&6aQ0U1mbbrmWqQ= zX-Tgf1bu(|Ib(otpBU5>!S7Coxx}ACD(Km^WAez0Jj8M5oAf20t+NS}z|~`zBLKQ3 zRUt)!%!5v0>YKhz5^vXp?Jz|$hwqeK*-jBI`3`7nA!Dm~7UnB|Jnp-Fk6UGluId1; zl$r3E$;Byui!AyOObgFewP&-8iH4D zW6BKtS7+0@+CWe5=hF*bwDuLk!SPq?m8Bba)}cHOu;@;0+FYu*ig&c9-bdjgd^drc z*!&=0eo;IZqTMY{!!Gv8?^49~ zjl*jJzr6{k*4s=ECL2jL6n(y*$?vMkFqy<4b#;wWtZ^;tTyT}qtTwOg@1Z>k)XZ7< z5^)7)Oo>)0H%7iMPELs;!UU6x-hyq3P==c&B!eY92-|}RuQ)VC_)I@ctQvbO1;Ll> zki8+~8$RYiFBFtbya;<((tscg&em{Pkt{f&3~8Y`MH z`3{ITQd~i_a>_!;Ol>1W32!vJIqBuDb*aUUbci4Zb&vPc*-wNLB?$GXQ<#HMm3uX_ zjfi$dGeBtTEaO>uBbI!ELIn~g6A~NRjQ9g)JgVaeWb~!RkB*bGt*126rTLxkmQJ`a0*Q40K-*HY>8ikEtrpnR0DelLU z)7K{CFI?5k#l{sPNSJH10Kb%1Il&_OY~QD5O=X;ZrhnQSRa(H%c9J^!P)-itt@^#RGDHgks6g5F{X{LYU){v7q+l)96isdC)$TD0b8BOC_ z8?&N!!$;)r=>r;H-~#s&f@z?zV8Jc|ZC!YCfo)&)k#A2`?%3gS6l!oZugUImItdL3 z67^%HGPK}Wi7fE>(I%-v-+jf^hX_#m@n}Pewy&ZV z#(#A)x>9lt>R+xDAy?#zD2pBysEB@gFu#6Dei3I+O4im4A^X+ z5Vj>q=%ZkgywP@eMNWgR8?KDTbq~@~;zH=JY#7cdljZ!kYvnntM%akn!i9L&5mtlv zte3tHV<+&k!IS&hlziSE*e0p;t$x7xuR8nJadzf6cDpT3lSARKDBVjBY7${Q4He=1 zyJy)JP~f-x1<*0_A&D0C3nY0fEJ_eTbm-31!r6>hxgBZ2mc!ViWu?>k=v>2|obnf0 zD0kyoWZ&_dKB*Z!%L%n5B^VH4`l|-Dg#L>J$b{-}k=yb(nc#m65hp2?-Tm|s{ z0%jH-HU{y3K)q{U6#wZ&uMLoq7xGmSm`{+Ln zgvpX#r4Na28;ov2^pGIV{^IM}NqKp0CoJM{MWdWU4b6N~amP$1>rO{`^enC`KXn#K z;r4HWsFC(4!q;kU8||=nh^8H2L z0}-fBcv&t8^<(_ zVf_;*K-O$@@(ZuysJmgs7zbF1`AMz>mtgwD-*oJB<7aWMBB>j)fT3K{1PI5QrV&y} zW@zfUUSb|^+7@46FRxkDN40tM@%$+;Y*)3Sovm#6J&@`Z9L&JWS!UkRw%)A9RJe>& z&(E=c9M!E}P3<(c1iQfRy?*RmewfvKS(R`ndOVxeG~uit1PGETiaQz?A*-P=OrQ!s zXRe@lvY~!1gk@pw;Tn7+2ebAH^=2_|^J2lxWO1spS1R|lu9&o=uW|I^eRZYD`F4cP z*MO^_sC~~gi#y^q$xMafmO2^%pAu;uivZ3F7BNXJiC9Lbdfs(%+JfdPPq(Leo zr`(%MPSXJaxfw!9CCf;06|u-dNgsLh%AQRyY(#2n0dU4sk$!vq;GOxT7bP0KvkC5X zm6X3JL?@#s2XkaEVJXcr>w-FP&e89ZbEoBD_X=lBJRXhA%^s8~he*S>O{_r+g11|d z6vbXuvGTtdzpC(Z0Vefgk8R@3>+Ah~sZ;IelV^lc6VzvF2^uX#<&{E-0c)O=rv(o8 z>&&`Y7@tWS9@;N5d1;QY{n|3FqJbZ5?MB7qkk??2T6X(s2C=megvmEFS z!1`lle;lI)#;ugv!(F7bmrt3vM&nX!dTjTcc5S^({aaya;YZjy^E9)J_O| z(!p-+ox#TvGy|n>hr<^|v7x|OXxN3xMJ+g+*Su567@nleg^i;2!AtS^*J2#oaU4l* zMRD3~0Zi;2YV3CPlcCFPB+p2&rnS>J5&AtW5-kY)Bg_72830@#^xhpywM`@$;_W2d z%asCnv(}B_r0@Z}iLGY-L*5X(!dID^Pr$I!6X~UgQUQX|KLPQtAPs^Zg576{5FGZF zz_UG%?;Q(wGULiTKzZ7I?xMx^PzPdMs!#$|2f^23! z#t}qVS%Ss6_kxQbPP{w>cSi@k7#yIpn;F9@(20PrQG&p40 zZdW# zdgv7DL6Goh)8=xcN_RUalys725uoZ+176D73%~cHZICqX?*v;LJT;;TJ=#w|@f!}Q zLoieUp%M`(lC!S9G!vO0U;^n)U7rt8!Sq&=MlLI}8RFt56;@|me)=zCfX9Tsq80@l zAH?okRT0t$4>)iEWP*0Z%_8Rb4Nyo2!{Qg+Z1YPybn*?VKTuF#C&h&^eO$!n5k(2^ ze{aHrV{W1Yg8jv9^;3fFhqeMn<60_Cdxto21Bc|98}Ud$GX#A zqB3;l?@#itFp0UEG7Oep8Jzfl_XX_a7h=up(f_^7aMJnuNe22q)# z$(v<7&xVgL=KR5?P|q&C>~gEXBko2CI&+08^^{zary#c`-)@AH`+^JY!`m*Yp;qq8 zS|mO-;yido+ea!$Y1%@i+@{iM?iS>)zC`)=gpcguu@m>&uqDVt7ARMaffExX$8$22 zi(DYmns!xa7CNtXo2NYS0=jen3XGRt;m%7g=*>B)lX)@H1dzzu_jwK}nS5{z6qhcIXA{Aw8|HSGl8oPFdJ;AVt( zicnD3&i0NwB0pn9re%~;jq?*Jn~-ESKW?3Rzz#!7L+GGo)>9lix&Mwn3LOqaD=aLA zGOEQ5_x?d7Olq<~G#OX>Q0D9_pEm8@5P?A0ksOa1?26KqEkdhi>g`QK)@LTpkKqgM zl*AB~xw7kaS^UZbYpCk{@69Zyf?{MLHa8t#|0$C1N?n26EyDd%ffUn&J%b&Y8yrN)g~%ds+iGzAaxms^w?puygR_om?auUr!Z+tochdbhpzn! z)9)G`;>n|GXNah3AzQY;i?2zNApOvSe{<hD1TM3-=dYI|*zw*M{s zrjE*V<(t&*m`vPaD=h^W4PKKe)(rO?7}Li+XKAyYP61e`(jHk<4p5$xdTB`RC{EDG zR5pJsSpaP){X>OIMhD!B8)<(ttlTY0_YdM)-Ae6K^DHgtxP;MKy~YoHG_b! ztlqqLyBPpNQ7f~k0_djg=y001*kJ-VL~ngrF~IZT3^((xkQjn;nC34r5@qvBb-EEbQ~saU(qK?ZEe} zP9luW?7zXj18xo%)xn1%D1!`4puXzsW6fY!NQyL=vdJUr<5YNR&XVoo;-#QFEB-ep zy3_d|E7kFv)DbKpP7N2`fn}GYzCY^e)vHCp9y~FmPgB=+RX_keSh3SIDBnPtPDp@zpelu^N7jjqXASRYP@}2(ZXbciZP2eC(c_6q z|I4+c4S%2u*eNcdy}=tA;tS0F3X)qoGjsi;&!3T#yCapbdNxp#6qsJ>QA?G)w=9gM zqUa6?F*LsjG0HJ0%x5c|6#`ZBHKDLAy3enzO~!2odDWd$gbfhII|zs!i-aaevHyz> zaohGv)m=A7d;alp1&(hartn>}D!of^(19OtAWnR&F=P zV)UXLaMiicTNb&%mTmVRIXzqh8ZXA#qe`n*pSLs4CMYLBgTg-;wRQ_qfW`B}l!T)b z+jkpn|)XF`*mAhcym3FaCy=FAc1_fv_Dz#sT6V0?Js2}>E)Pe9Xg4* zV$SgBGD2{2;(9VltkBtHe{F-O6czdE_}P?!At?KW2NFQy!^SQah9QN;^l&DS4qTLZ zT0N)He$UY8V}Z=oqW_f8NPLQ@7E#mla!DT}qe7_rBb2t1vDrw>vojRuy2h}zo(#2(*oC##{UD$22J&( zQt%1hm85BQ{-7=A3*ab&6}HOKV%or0azq||J?V}|G|rMsBT{@aR~-GX93c@>^g8j! zjW*x}?cU(%{GD4{BUSk6&;;MF9IX@3pnwKJY7$6Z`>jK^{AO{e(%5`_h5xqK8e1{l z-v)%5FZG{&g~h|nsSl4$MpEp-iV`XK+~hETehm)-gjwf6D~slZ`iS{kJ;2z%0o)C% z-ZFQ*!TM{S|6%3<_1bbKqk*H%OlIu0zC1;~ddCjE{2L{lX%;+6!(p83V(;8gu+v?T z2t{^djGr|Yb|*fV@K_sv1xu-5u<_enOntJRr6o912xK_ZkEqf?#ein(qHc09KP9)@Zu zaTEiNdQD6?na27Qmq^eXjyu%KCjAvR(<4_PkTCEgB`bC6jWXB5#mF))LqAcl#pA^p zT(`q~Y}&{Ffj_iUX(vD-4F2y|!DpApya( zb$ClF+{CKY_mu>OIAa3QwJ2?m7r&pn1T&ku{i`LPLV>XSfAFs2S3`~s18YTecRF9^ zMCBM2=F~Fu(*H;h7Q@+J+7VE~B53=WMnFs43#J!`Ra%oBMd5%JH27Q+|Kl!;JCpp= zN(>>eK(jpV+#@9h@5-qE0IlP;zp8pxT0jqW1D-WOjZR=k89xTYs1~qBTht*Np{)$g zYmb7Y7r{|~jR8n5V>K!cU}Rf33u8l#-fCky#2&{Q z1kWO}5YzxYZnwXxL#``&OUeBLGeBp(h-d7plzzc1bt_hEE?w<(6}K-BU7>^me*D=7 zfSbyomdWk{n3ifZIL@pf1r6&YqD{T5&_x&#WDRev`53R{wU_bt|8F|3N3NuTTa(%R zW<*#U3x9375B0lQULL9{CZ*_p--#HY?7#}|T9Rb2uRiud$WZu**jYMv@EtH{{QgT^ zu9SgxILWN8F^g*!n*UPkv%=;lhh;Z&9NDSa=aJr7_*-gONcS_5o1`oQbZa-wZ`h$J zO21%GLN~X8BQoxW+);yvzim>ljIHwa-0WWL#9Zpdl3!S+G7Od*bOJgF8DsN7e)WGj zl%5Y~T5{~sE{2hCw}806lwpn>uDb&%alPORaPy$-1}T3MXKc!nUf+dAeHwRjVm@LQ zpU6`Gb?9mdtnQ^G%V?Op2;4`2s>u8E2kA)34{_`K-3kT1ZVtSRl(8B7*{~Q9L#D|$ zhgPiA68fc^n+z^PR8^+gkH+Je>*LewWWrMmYG-jR(-otZ-u1=6Wy^@fQib+rOA?S3No3B8hd9GgeXF$eG<7SclbG;76Jm-H*)JRC|po&`#<~9 z81=uX<{AMA`sJg`t>{Qs+f~wBAHz8O5x( zym#E=2~oKpf&8l?8J9QO&dJ%@6vY=~v#g zKPCOdX;cC%#0qKUH(~>m(7o|P&H9!%{{}H4P)--Ap|&^y9po$vbuA3JLhK}XH@K#2 zu@=-K>RHC!Cl7p@z&S$C0o95wEvv#6W1NB)EhnfA+N^4lF>(&~kywKTdDm}p-49dD zy#R8L8x~Y{&Cbp&e;6LXmScCL@js(_R6?M#k7GkXARxI92IQ}9=T07O29E~p#N?nc z4kQK1SgT!sAF(o0^J@tPXB#owHM%t*+pN*f8TIDAk9+g8r&LUlbaGNAIb)25z8RvO zC`QyTn1K$umS8iMBx0*&WO7G3y)b3n8#jj+!8sg{> zVb7w4xn-<2vi|%QSZlADe4#aNI6!sXo2LM(koaOD9zT)NgT!t;JoQQ7)+zn>>D!ur zDBz(0Orrq?`N`;G<0wG=_$!6}5Wz#w5r(Wi{{0;^jX&1|6VFi=JHR(teXvilRC8@n z!VdONDu-ARiprNmPrh2fQNKi)`OPSh*^!N>d++E;MG1dNU=8)|__z+ro%j&xQRBb4 z;TL`iPj73OfKuw|>COOB>1RO|Nw4GT%~J~R9l*E|pwO7~aldFvRQZhIZ^C-W{Axz$ zYN~w7`Kds;B=%&D4^8}V>qKjN84s9=^gKlrsduou8h>@4i4F{T&POi{F^!3E;$iii zMUEJ+%pMPcK0X89UKSD^^1Z+aiZcVcDMbTsOS!V6A;rs&FiX%e%CVqtCzwU&h**`8 zJT@8OtbieBgI{YrNVGhtCD;7;6s{9mW~6WaKPGAn0f;6q&jnc$OXt?iyDd0VQ}z&Z zJ0+2tvTBng`07bq-Q9O~5QS+=VF#BP3YnvRlmfWz&_q-ZywuYgRW$3;o({P$2-eu% zi;)q_99n;;!`)*dSCp%4%NfSi+ygbV1kANEVoWiC^nGYCDb7$jOyzwtZpUZB`huO8 zbVi|9lUQti{Fti?YtqWJ#*z4@SWq5i1OKV813NyZ4GjP1<2vrqs2qd4F@MWp*G6cu zR|JSy7E0{r?8E-G(!@W>IZU3w-PL?t($*;JYlU9L&k!H5B20%^fY(&i)&AX8xnowN&dn?l$HUD( z?OuF0Nj6aL;F(Y>h=EaV(FDjbFxn-{s%*F-))cRAx9mlDFrQXdbQl;pcI4-U2$1Y{ zr*Ebn@YrjJ$gq`V0w7{oY@^AnsLnn=v6TZ_b2qPlDqs4WZcVpEyn_NIU^@s}9o=yo zr5{#KpJR03T~WXO|EFVb_JLlZOa-Uu?#@0r((nbMN7;RW*bfAa;G1z ztPJ&Dj@-CHi7nxxovF(9c>;5@9r;OnWR^=XV10=_=+0RG|D|3-N#mWYA135(6+k#$ zjWoX^dR=VKZ-gvoAuhnnO@7^@Hx3nd)qR5eWe;u$POl5-cg@p z(~(J0PKiocUL;538)0*&)x$HFD+r;Rq5~Q8_}5#xawXseB!+zBTr|n6X2QGj$>}*^ zen*e{QhLKgbflyEuFZD7gg!jlKVF}MMe?dKWF7J5IR&gGpiW8K>>g%rw`5dpb!F&> z@&qdLB^yad<3<8$oSGhS?Z^VMx6#qKfJ{9e2#3H%w<$)VKCFOxz~&HzjF3VBiU7;jD-NosLWXKrUIUJO zcesX?PdqECpX+IAt4hKS;G^l8E_AvDtex&jN@Cc+AG#xy z05NMjsDz_#IoecfmEdd-6{O9&l?lwy-aNXz`giOP!uVeirJNpeCdV@O9A4E@ihaM# zM0oWUF@{4^rUsSkg&CXXVOT=7>(0`MM9rA)!x@-oTy~>>x{$qaENuNq7S4-SppqXL zr=9S&!41K<+TGlYAV$6>OFD@qx%S?;PvZPfzRN6YjZ@eX@cQ@$vm_;tT-|UE|Dpea zFBaaJhmc#xqP1RkQ#9@kS!<{aEo^BO9#UbLhQ^zt?Yp}hlX2JQX`(>=c)SgvpvJ3d z9|u&wdfTs<#tTgdBb1PUa-Dzr#(5V%tl3V{m9sTbY)4X`eTem=S(Xm< z%BL&2^ovecnJn_DzZ_eg&*lz3g}Gr-8qz6B(5<^JjbO^ETa4~+b2UEu6?raR^i#5W^eEM=p5JrL9mT$rUM22evGNjsHVc1Y z4+4@H0qwbnin)+YlmWSIgvb-k;%E+9U~yQI;{TR%45*bIvO5(zb{+(v1UTa*sIywF zQ?p0wlBPE%P?3~u$wq&z^1KuKHWX7aK# zMs$SLF6(eJQv@hbQ%Hk}DQCsF;c)hg1*H~ZfbW1!jzL6;`Axw@9iCLWBHDUusCu38 zVpD_vgyhdMF3|!7s1ThBH%zjmILk?P@VPsbc@I}W{d$}=&o74VD8sM!7)a`(q<_>~ z>1Rc^11|Ow&K3-C&YqyGQcD4FjE~iMcxRSRp~A^NW4__ffp9jfppRXs^6!@i0z-g% ze(QzIRt9|Ngm5UP3dazNH*!8&dl31@2XB3s)JR>RxT#4jXM(}$e*p=%oZaTh$kbYO z;?PY|V#Ne`opsF)0BcNSxq7O#Ok>4;BcT6CLoHY6BBmzX1}tzzZN7w?O&a0WtDiWQ zL#6)IvzITxR7$HTJ!E1TZ=K*lQ~Gh@k76O5NkblgIE1sm2u&DxoYRn80vSF#rzsc8 z+WZ;HujJZg-dhn9z3VTHz%@5_!KbqAUe##{62a&2IfOH8W+9Q=f*WkwcyYM z);0ebXm6DRVH&*Q_`W&2=GbwJb`*nm@v+fCmnE}t=@kFY8E>hyKXVB-wy+g}Abo%P z^+c6UfcD^9|JTVuqU}(od$I)!pt@lbicuU7zf|4!;f*Jp=qud)5Fgm<2+KooRv5s9 z9Qd8%tr3X=xd;JzcY871C`IG-!hHfsxkRa4r>sUH)koAHQR_+>oW9H*>=FaB`B|rv=+@BeX)!9j@tV*wTh0!lr4{>Te`j^>^n-N9wx(zz&eg$Bk1HJ^ zN>{d0oDoQb`(5aw8AYB~JPdU(n|4i6)dg#c`yDyrxy>Ux@d_0fpR+N6#j0E+>z}l< z{k8G2(f)e$WSZw_xn3|5sp$t$04X&&iucXT`q-0*!I872J6=?|-XEq#9|`Mz;C3Es zId7qHa53$#qknxcw!kEUgUU8?r{DRyeKZ{fz$IO2geS~;f zecU244V2n0riQc5THGWal&&!U3a`w)Pc{c=OKy1W>FJ?GXxOK5>#`wmP9&+#B)(($ zgv-p@;e^jO@^6ewD2wBN`K3)V9;XQ9H@^7F~{*EU_4<) zn-@Dbq)}TVf^(2!B6EHMhttses$}vCYpI+jyD?pXTA{ryJI?eH#k39fzerISA$Y}h zGVXS`6|Ftq<7+7bf*PPJ&~_q>P=9L5)AQux$!rbfku^UgtFnYK&<6OgSF#n5(FaJy zwgYJ5tY7O#nBLIgSZ$0Q-W-T&dvVd)ibO_(9Zgbs&ww#q6CK2hGYwqhnR_Fz~5WQ(dg#zDy~ zc|lI22GYiii{qe!ni%_sFc`Mg5Xea*bA7)0sOF6q}sF(BrGqS^m^K?Ng0X=U>q! ziKmEyM_lS&+N*BBzKheIAtf?mBZWVZe$tqdzlT%Mn^$TW26bVWi*f;jq>$Hdp-AE0 ziwaH%KPC;^eW<|WbF)HLq0^}A+4;fEqWJCyJ*oDKlKPY^XgC?tDMMpP4vqhUFV;y` z9TO8(sC&lhE|Fj;9(w~xnzA+hfQR`1mwqVglh6igWtI6_YLO2>24;kfqaRs;_iYOx zCm97}N0@|LW7Ye~TB>MNIl}`n7Mx@KDS87&*)|hJ_pbU~ejo$+nhedBtH-rX1)_mr zPlLuBasZE6DaQNxz8v9^`wP^YaV{0O-8T|grJa3PaaAVJ!B2h0M$r*U=} z`Q?7416fw<4f6|X>jyoVnB3UZ=aM2yTna2A3NoIERP_yxLp73u+T_&$gv|GdMtHa#| z{cv(fwMGhNu+jd5o@Qda(ax|JyyDI_TD37~u@G1;kzbIcH%=q%T~KwT%A8sSTFca)w z-pFUfVB&z9`N<_XZCDE-J&C@=W$F20i4KsGWj_9yUE++(yPTWT=Zme{aJ;qcGNPBe zq^h9(U%vTcu%#*lu_IK(8<;P=5IompMi#FVNX-5`jU>?TcI3kp46M@B&SXYfIhoJg z8r)BoJw^FiiKx8!q9AT}mc1hP$?HLlm>=T8sRcHhYxtisQ_)1MII+|adbpebqkK8( z=LgiS4Y-^WXJq_WP#?3rIgarIUTEOtZIivslUP!@9T+QBn+X-Y%B+%?nTHf8DW3yl5^Ux%rW2js0)D&>ztBHOF~#5Q?gsz;Ga4yCsQN5Il>q`YVTmz>Xx;=w8r*p;ob{als)A6< z_5n|u53@d25ukY6?gD2#(g^9uO$9d!+BNcgH z!pmL47o)5eoj;b}mh}34HFOxzh4h-D*)ldW2x84mVwdG(s4n3fG<@IA(t!v?s(2o!hYtU`t#>oTLj_a&<-DMk9#b+S& z#x3Nz1E;Z&PnAsrO#IY9@cV-B#8o&{_@ZA^DhAYAY*rJ#0h!+VbB75Ow&x<0W1hPf za*H&xYvw1U(&^>4&K3sxiMKJbiV$sSPR+@D^>~G2jS)gY3(Ai?{) zFTl*OyB$9B`+7U%WYKCf1DZvIPoZoH&AQHKZy58;c$Ckyt=Yp+*D@S@{8gR)(O4T} zy+;EAGHfU%e6IyMXqry`$q04%#cFvPQ>*y*)Sh>QgA2VEdC6UYA{3=fvVeFK!y3_2 zPp_NG>+Phydz6e5iP8Y#R1K28ohxT9itU@UBYrQU*$BeXrnWDpdv;KDs&oh+Nw)Rh zTXrq{Cb9T|;Dr%U(-zAWbvDw+u#kjTWPmUqbbISmbE9}%vwxwLl&fP;i9z>AqD^F7 zFd!J~AwrgBt$KP_X41XvV)!BM881VHiAX*Of4aApmnayhPH{I+SJ`0lrm9F@z`tNf zw=9#sBDAiYcq`;5%VG}j?R`o~S^9XIAIqVz(K`8HeVaU<}{-~ik4*7nzm(VNsB(AiA zKKZyUjd{K3RJ^VA@W>({T&6DWAAhW4ZBX!0rTHc(RVDX4;bLTA;qnO2*)HB}>pE->{u3=-eJ)IHfd~(Py3cR`ju-1!9A&U^rpONsCob znget@Q;TDeB8{S%oF#HsbnOr^JxV(Z+L_7jx)h&8+U!>ObJUrE&ov)zV4Em|K5{Dx z%WJJAIk9)3z8pGNgj4BOOOy2!6QT$?JkWZ7mL<9V1#HR_EhR9A5RFgA$IzaUpY`u! z@;*gMXtEbJ`NEC+%^L0%BiG{m5p-R?yOG_w_^2}rFFN-baC=%>fc3*$j9El^CrR8k zTHd5b<2xFnnt#ta+-y$)(ZsVfP=u~9Ni3#;#fg{ zqnC}NJnV8OWC*i8YEPNty-A)cw6lI5+AaaFI=>ioc=-FgkhdbH!qXsw#Fov{$K64s zGe%H*vfY*y%ba+18DJ=^S6K*8$lL!>hKVNA@rfZ5s?@pfs;Mc!=w5t*VNC&L34vm|b<~X- ziKf5#6OR4~@iK&+lTgkq;`JDv(c+(XoL;eS_a zl$zDWDVBcwk|8<(n!}aMY>rv)qgn%SQ^f z(zuQ=7*VT85{bgxO`Wvtn_FqTv zzv2p3M(b1v0RRVl_`OZr8q-U1ae^grr4(8|#qRqVh&Dx-%rS5JgG7>K0%(&@u{PLUQJv4WCchnSoZH~#1HK7ig$_D!%Djowps zNqby-XT{8HBu#Gxwe`g$r+I05TYUAi$T4WaNRD>le>AIkmumV)}-~9s)nCd@#sT$5=5d@A_CCiC_2;=JN@346Opu#pAS83Yv zzpR_;LfZ6z5uvjj*7LaLW0!d462XLSR6J?DxN58Z16KZxO;dS^@M@Y{;P+If1zkIx z8dfP4s^I5}S%v`t5`3R7c;9vurm=K72m|~Z)$NWRF+NwtO?j~!gRoXz1VO6^5D zfaA;s`uV9v!-zB`U~!`do`?>_T?PXOI4c}K@lLcTps&%RclEqy;kzkKnhG6N9;r%1 zBLLJ$E?A#hMKgw=i4e4DV?boV{io}xTZC+|X_~GFzWJHw-|W|49?oOB=5ykz?Bfh# z_m%oDH&teSPOCMK4EbZ@DrwK%$kFZksAMA^c~e1|+JJvtR3FD;-xI zmx=)@oO;OvNr9AGR4TFLisQF^IAMIuD2gW26rz|qztNk&#>}X{Rn2aF7pB6PBL6&V3=6d(d(DEiR4rP3fEW%9Y`0w7itZI(`Ozj_8 z&V8@`xGcd3m$=d!b2xyxbZ$MrHHnb#Ov&XCxN_ezzR%`r;9xK9@9FeXBH&W_;o#Y= z#)r0mBd%R+9BL5!&dDRcMa9nAwmU7G7Hy38dM`F&5Q&qs!rdkL$T>vC58k7VmL*~a zClq;;zCcMD_omHrZlM$1&{w$dJI2canq7pzghC9VvKw)2_fA*ObR=a2uNC1SeYI~ElDMo+_$V!x|2?# z1-P51o4itXpmoOuZCUu3f%a05-4Kb42qp?IfgL0~!q*rksw|^pXq#}#2j7q2&bpm^ zAwnjIcBHxN1!VNXyyerfTeAvr(De#^9;TQQALZb1-sbH?d7Fm5`%rOZ)|{3@XJvOS zmIwE}YGenD&!h5rUpr3)C($DPFMR^;JZLE7YfP#Wt^`>kD2pzy?c{4#^DL!aJ(CDJ zJQMLcl!p|kEAXMfRJ>=kD)E?*V{YSpb37=VOOC#G0-(cOd@~lMl`b`wXD!r{3OV+l zXil*~Gg#AX&de8zI0S4iHSzJcCWm}LLkYL!@W|y6$XkT!i#f!k3n&<%J#L3$8vVFG zE);sLaX9Vp&siE;6zv|^lWX38*aZd__}0g!4ye3_9`%O-YHDB~WDACS`||Nrt8rXhcK){%0SZ{GvB$;t_7FmgNTEfFFQE zsQh<%Fjtlg3^#2kQ+piOU)&A_0}|DbXI5o|Vo3bHb)@m$!(*_MWi!jJTu$W($tx!&>oDW z5vQL=hI$Ua_9R*}`2*m#kTCaLrc5in9e^+&pn!~lzu(_!67?AX`L-#u_D#8e51CWB}8%$l)l5VV@9 zMR*~S24Tc-z{rmZEa1(CR%V_nAS)y1WC``Dh`bGCIll9G3y%gHhWW~)o@KZjy%$1$ ziAEyHeqKb_zSz-ZdZNV*Ta6G0Tv`IT_P_@xnbjH7?1CI9GvX{dKx{fDC4wzfvlX}& zB3oB^tnzF-7l6p0?Jo_)Z)LV%HZ#AD*b=cdWceW&t{KDoIJ`~w+b*5(zEX8HX$8i= zEfE1I#9z;N!FM0xl$!n;NKEBD@3=4!HmublO@-KUYL|DE6UXb|8*#878YC*;EA2T9vgjBVj zI9c3hYQP+B9QXv5xU~_+%vs#)%#G@1w&p&X%u()yZ-rUTyik;B8+!gAv&vdIyVVOwPk`km zRge6SMN<98njTYN2zgY|b97;;*%^<~bIkA-hcr3Yg&Q9VgOF za*YvL=_3WKeA2@l;mXF9koIE4w*Hdk1bG5w^bkiqpNitj7&?Kg5Wqyv<%!T&qgSn2 zXv<12H@>bmMWY}t3GscGpoylHxr(0n%=Rbkt?h=-yp8~D!9SYXXHFUmU&^M~#k{-k zs<1e#8l6$x%HKA$n5^MPD$a`KNArG0C7G>Hwk}xHIJ!~1Q=j&ZW}$IW0fTtYutPG zg_xL_lkXFD*2^$SIZdw>IEnHc=ON+MtNN(QmP?0o@g4!ed( zGneWW(T?i31@O)6`Cm4+l=7Ibnc`9PGe$`J(;fVwJkTp+1DdEuTtd ztIEPD<7UuDTYxKvrfmol591jl&qjwKK-#BJ94-|b@CZi&<``>u@o=0s2sam*EuihO z7V9st&kj$#=_vI@AOy1>_dLtJMuva)sDLmGj?5}7^3Uu23R|0tCV8cwkkNHVA70x_U229ZY zWgFxE-@ue!`x3bfcDU%xB7&QTGeDGUKeF?7uP(GpT6eRN(?)kEIvBwDivnv(s|Tk4 ze4g4pv6^6Z&01$=dY^Yx?-RuYf}IG>!iaX<#k?;YUeAmHigOu?|o!Ih3H zh9!lCMd47{CYT<*dKNv7CA{pR^cS;RD32Wg5Y(Bz;r-3x;7eCjXdtUzY}plCvTmE6v7gM%hlbAK4Ji+TOCKYJ4vOWLPm zg!`U0o-F=sb;8?(JR~JYFYv|1DXdi0Ys26&-%p%%ntow@a3!C7P~jG zSV(QINtT}bX~4UEs(+J1+vIJ@#kKr zspK+}fFN~Mn}M;u{v+(jS*G#jLSZk_r*^gA1p9ddfyc_5bU(KL0$>n<5Se@bF z!NJchbj2>}8Ol^dHm|mBP8>}ASVJ0>=i(v;8-7A)k1}#6iA^>E(L&-K0|=)or|V}) z8C#d(+CINC=(d6!m$WC=ZLIN<0)Mn*$gmry6v2?GkY`M{j>dhaSVBg^sw~yk+}tx ze_n?q{u=<@Eqdc5iWjcPK7Os%9`y!(&jsft8j7RU+6!7?Wu63KT?Ez?R;!DIsRq~x zbq<0!m)kbJ^){2Qic{`$lc@b4e@pt;oXtD0TyY3D^%bqwLe&?vkrk0Jnajc-t4xw* z*r;T~SUk1cNxb905<|&6!s!Pa(DjAGISN6MYel$Sf8`sP2wa_2fk^rD-4@?918HrD_l#LgCkDDO+cKU@WtIS6S zW8LeZgfmS4A7cf<|2$5vrwmMuvK4%7BB9f|aWm+A{QrV!n?f3Wogb!I08ev=97XR+ zI`_*L;{-2*SFh>D`u~%9{3|e7JwHLRAnz9A!$kS$KzRXyt>t*5oMd+-STP69@nUV) zw5=1A(ma4ikN=V)HK-MojzgJbr@d!YCb0B^(X&5KIV1{5K-YWjpJcaiIVwbbvH1X9 zHw`jg^w;XrzWNSs^2Ms&;E7<5{iLb*N#Hd=bQ zQ7%kL+C0)Iu!x5RLGzIN5+n+%xbZb@(!yyndB)|Qwb=>COXpoEV)t5<*78$S$D|Im zd^EjP7T0X@!x(O~ot#959b1YJrkF;tp}&tDE0QW|quE^1HKxS&`yGALYbMSd7Nt2D zAERC0_Op*JEO|)I>Hu9hcv2=2S)p8O!^wK%5INSc66e~A8M8!>16VtryQGrtfffT> z!G8{7A*eHr_V@T65bQ@UDW73=yu9qdr3U%)uG))L`lQcnLL*?dpR6tpVosd!FJGR5 z#(&PEBDavmF$Z&J1{tkjC;^ipW((PRZ%aiisrBLRW&IXvgj~F+YbrbPg_o@;RvfHI z-i-$u*Ni+|ag5=48LDo|lqC~YUoKhlQe*kghkg;_+~*OnCq5W&P#NOaK0!f3GUIFV z=^&!WDWf826rz>;Xg@Hft?0iDdDq(nXW}Moh2=rYeVZOP9&}!+E`aGa&_uSHZUoYM zuE60~UJUudXGb?Hx%>Sg>m31vh0wjg*Rm>OAqLxn;WAX82Tullo-$;*C;WFkDKYY~ z8f%0qo#ho*YrQrLccb1U0c?Cud}JsLC`)e{W2o8$AFCCkk)pdd0_BGJCeID+*4;zL z9;KGfVX6K3VCbcu@z8&wy%!$#eqa|aXhO8nl8{pcQ|0JLKTk`Ri7F2S|F&8IC^K0Z zo%QhjlO45R3ctx`#|}Uz=&y&0`$yjmN&^}yrhSOAgEz2jIB7}#fmA< z`&~1)qlgq;SXNw3Byz9QKqeZVa$YAi$=4Jk!N3Qg#UBq)(j3=yfF9C@^-Ke-_r&C6 zDHIog|LRf*b2RoCZL^Kk7NR9|TFDM10scLv2G>`~;smq&NUde@ zOVe%T=Y*QVvv~>%Qbd*myP3l7+ohl&Z26QOVh|p|T$k^F*(!OmkHAw>;c^c!KxZkv zw_|wC`_r9+{1nca_HZYkxT)L3eY22W)sATCcQ5MuLZMtIzW>ik$^go02m#pU_LKL=WcHJg*pWD#^g@U0lX8PC}~G+a+Q!l$|T$B zqBbj|(1uyhTbR;aM#%Fq-B$JBT@TB0C5+rU@wNnHqyE;jq}(G{l~gy zvRd2SUs7S8U$~}uTYnzB!c`!oQYpUWq6ItpGf`r@rB4^!y$=)ym@B_P&KHS67Dq+L zIg{q)8aroM`fA@0f898F_^D*wPn|7O!|S4IaK?rjhe{2EjJr^{;5qEwd#yNNh4Skp z^mT#okTZ8HOk($_aW}IHWunOL(A`tXDv8#8K~NffZeTj895zht4v2^n_2{6(F1&*_ zZ0{&(m|1MsH1b+_3c&FRnLx@vk^(dX_)iNMbSIh(ifT(Dk_W?AG$T^HA%*dbCZAZh~k5$FyC72Gf$bm-pj)^9z z8Km41*m={w<(+{(eA(r&&?TV58vTY{E-9F-eCV5GU|$t6RlBUZjxyWbd-g+xOhHKS zFzBQdt+&^l%iJ^LC;Db2;7uK|Dgzk+v|A~Bb_fWDa?J(<5^sFttF|40G!!v(#QA%# z2J??PK#=VmZ=iwqS#kVVxUwq{bs&FLg|rJ>es68m|GKVRP4-U=QdL5`RS4Qe5ohVu zH3^y?$tV==ZWIg-C4JRnBA;e$W3#sH`aH)*3B{GS!XG9SC$zu0Zce{tVH@#qPgk4K zT(AWE!Awa)@jkPHpNG8Gen0<}9Is#~>oQzuy|9zMJ~vZkaa+fujJuMX9|KMn;N+hs zeB`-xhJ*@a;0}m@SUD%MuFltwHpw4f?t8#|qwY46LUad@C#CJ=b;X?ux7 zg1}mLt%44?ZX7k%(GuokuSebf4>;@&|I#Tz46K8CLTp*BL3F1!)?+1-xoft%=|2Y^ z-oK{j4D)PnJ0;`Vt(3ZL58Z06_s!ZF?MW4G-*67$8r6D0CpDF4hy+x-g7TTZ8CKIM zG$%bIU+Z}Q9izEb!II}@v}VB{fthePzI>Exy@8Bfid&BPzDLM-`|vU%ekgQgpu|PB z=(gS2{cn!J(X2)!$-GnTrR2=+DTRAmsOubjZ*<5ecfV7qG=NzPL{X*Mk@=BJZpv@-DCkhj?LwKZA-}qER(6|LLp@n)iSHW;a^?ZaI z4d37UsI?Og<2l6#uVqxS{E{#Imj3M@a(hmT{3}5O1>|Y3ZUN9Pv1$JK&(?zwq^LCA zN`W1YgTdqGAm7ar6ac{Ytm6JO1+NYEd4c1}LUViiNTvfJ)uTXa^5?a0Wg7Ym?jKnv_R=MJ#mH;z`fH0S85C5lkvAz#UdHf#YiB^k*=WPQy` ziMUI8dGn;g2Mz9Y))ds=_%L_5vRuA}@D!*J;oz=7@MnBfR}fClLb~3`0yIb6i&~}- zL*AO26%ME+qhrdRzRs%>r*b~5Tlk@T+W_^qkEYB+yg^4~@qN5HAIxtoHvyBD^(pF8 zdp*ZA`1oGzMnnO;riIj~p+B8|&5!aaJz8-y=yXVDEHs?(=V=z2UBN24iJGu{LiG$( zs*3q*A?X@!j;TSHgneZ)a?{R?2EDKqrtS{Db(;hhO9l3S;Es}#F4RbXJCNaT?&wq# zR@H!7+7f}+IGqb;iq&NzJ-IT>A?--$W790&h58kX{Pxb&w}K7M3%B$COw*}{^u0h! zGpzXgs_%`qO~6bX9`yB4ihrHHgv-F?^S^E!y%nY(mfw;5k(p6!i_K(XKU1(I$<`qwD=H9d6`$*k^EF!4 zQKnsF)P9LK(4GZTOQ)07;djesbp0CF&%;dk=+gmJ+va}7^$yyq_#~|tj0_?7gXxMf z?|Ed>u{}co91(zM-bM0cbu+V5q9f)gF1rsp z__H06oKz*`N?Hy3q5uKU zX_@#gzJN$8UG*mg`;)0SOi4l?AtZd2?@X=Vp^iaYAe0TM&JY!plTxBl=3bLnoPB;2jlc(2U~kUT+O+5>J8&h7Zwo$4cK1REf7SY3=5Le!YgZw+10cqWTM>X{a0%?J*Ku`{t_Kuc3{2H zC+v=O_1}DNRrhjzuMtA=2)u2~zGtF0YCk?x@@u@=hEu)`^~9jy8oo@@yHT_60PvNm zuM+UQg6pR(i7Vs>NGRbI$;xW=leT>b^ zohy8%+x-QEs{041Izrx*x?VS#jfsrP7p5f`{R#)b^Y=yw$W7<_eX9{mVrWZBQGVZh z`I$6H=AQb+`GG**$?SeFOc_zwzM2A!N%m(|#44UY6>2Sd5{~I-=o6Ow8gY;gVFV4W z{Tk1Bb|%;jUMXIU-&1kESP!%4%)7=|`u8CP1E?zO!6e;LOM}}f!X5I`+;4aU1K!6v zhR+?imx~Bd#@b_h!)T~sT!@~~1a);$PQ2zE)?kt$14veAzPf4|CuBR_(Ik;@BH#u2 zBR+N;AT5uM=?4)*uS16Y*g~5z4hb%+7QJb6^r_Re$pad?b8?L~9|E$kI3wP?d~|x< ziOE$K3^|AJotgl#qPhT)w$wQI2(nh5?LF0%63p`NPgt&siMM)36@Dy>gQEF~yeEwQ z#@vZ+EafFrm;Kb%xBS&n$-9t-|3UyH#;QxZsctH$}BO?2@hy8E$kv%zgYgm;AES$p>o z)g(*c7v=zBYGzb_e+LrW9?Wa)ylebW@K;2b(wfX*tWC2~y+;$Krpggf*eeK~+npdo z@5(4($S9;Ffu#=P(sHjCWoeU(@`CQdwWiUq{ zW+ElQckZ0kg4SU=(HGNqP>8b(rnto$C=G}btjZ>dC3Bea8Y$rb{)M3TC$lrVX<4bwUN$L7QujnbQInQs0WC4v7K+^(TNmr zaIa#hTb9VPoE4@zsS@bwT>V|NtsUXTF67Ncc@Pse=9ch{X^I^EUZHg6741n z*eg{9!0;c`dFmu95VWc@MT1FV$LD?1@Uv&TJ1T{s zh$~O~PV2wh68Bm?q)0bmN}$n})3b`q7B#S_u~OaBS)B{FD97q`baPE43g--cq(qZA zwXC4<lL_>m) z;-~0+g%C{=y=>4JUkJKtf$o){fPP=)V)=&>V=-_c$~s6AN`0g1iERdvgkrL@LhG}i zO>g{kmwoo_p6GQS>hiqvIcJ(2ICEm@0~+f^FxhMh8s%pbA&84|QnxvwqK>O4UBJm5 zn<~8u?{1Asa|cjiaiG&lHF)lU7^eIJQ8*JGZm@|yji`t9W=&V0B7FQY^eT6WB)sbS zq5o>#R3Rr{0al+qapD^W%CCB@18w*8em=X6SmT0oLM(+kYrU-0!mD*$UW0j@P=8>x z(%9zcm3wZfd_B0Zh-`8X;dB_*aj-iCW0e7iDKDfpnS_gY1oQfZ!t)caQ;7dVw*0}O z`q5??S~T2bpbDj1*Hp@WD7;^{1hj0zEf-PdB+G&`n0n@~cWZJ=g8H6Tz6rL!Z-Nns zqs+V1_$Av~(U#Z*O|s%H#@@f(&@wJrRq#d#JR6l4EnGiKleJ+!Np{QO1^ z;37?SvCQitHlD}V^#Vx6saBQMH6D%_+Q^G^!5oLm-N*M`iG|JyW>qyb@xr|~$155H zG-GrzhQ6eAe}RZrwd~l+fZu=5!~GIb#vbstHNyC~!b_s*?N2hgr0`EW>$fcpYAvv) zkQAPgTZ-Iicm-qh28EP}lw{$smIHXdXNnrz<8Y}AAj48@+2?U6L}L#XY7 zy2_v>1gh{*+LvgtD&z6z>lGPu66E7hoe@T&n%bm_gP##e9<@JEF_}~WS`JV>mHHW` zgN?X5Ca_^z5?&x2hrO+@ar3e*7z9~~8WqdrskSS2K{Vcp#B8k+uus6{`D$vz=dEFl z3N(XY*Ta&P2sz^)y{1Wh6vGWmG8(2opO}n&kzmwj+TO`8Taifb!#gQ&WY<7E=l27` zSIh)Pn>=^xHrswOcyLE1W#m=C!KQ~^oP&%V6`+Pi*AN0{)H1gaN;Bn$E>r?x%-sJ~ zQ2a5I1At$^=!=YL!A?m$$a{jrV=Ecx9pv_c75!Xk-SU?8g|E(1kv;FcGD%BTkWTxn z4B`hia2^6*Dc1vY^nwP}Wtme~yNc@2jMrD2S?eIW%X>x!B>k-*tu}AJX&vya&XNwK z6wM&nSLU)jXv;wqKgQrsk##J>_=CccC4k$wn=5+MS1CEr^kesO)zjf z9Stg{iyre zd{R6;Nj^XnWvG+|T49qv)R(J6=>>7g4X+;OBn{NmGBe-R6^eZc$Q>x z{N{)Q;5-$`n`rjMTZHao08?&+ljs7e;N0_4RxPjmQy>; z^;i+2a?K+?e>nIK8*+y-Tx=(yV-M3;yA{>vR(=y_qem6o-XN=PBlH3&$_MBSo*q!Y z#0bAHTG=~J;|B`*Q>6sm(35vRJKb8>I!SiQ@K{c84aTJ8`^zZ%lRK6CQ>i8p(Jbi5 zV1|73zBZTWqKuz2put}qU^9afj_r|CYt|_Q$lI=nZ~-q7v~Z!Dns0N1zo|gC`Tk(l zlcCxCCq|^x)nk5SxTZ0wM~|~Lq^+RgUirC=LBKX1!vPg{hvE3(2HDOu{~dwAg;!dS zv-7lr&IzMuz;|>S-0FLJZz`9CE7--P8v+$oYM;d$r}`_cXHU{O%R6pY?~3WHGb?#@ zn{vT@Q(yYl9*FeBDdKre%n9zkdrjL{Pcq~>p?EJg;&-$rT*5*6{Lk0Lx<=Lvst+nRwd#F z>+Psb6sxm>bROqgR>c^@^_h+Sk}}vp3n9L>u>aS7?i$ndj^)jhzRya0WykhWk5q;w zC;UC8|Id%z_|nttO4|-%1B(4=_>LIj)-N;6}evtny~L`SE%1c$h3FN#D-d z6ZaEG*2e8%c&anLmafMk)l#I4 zZUPiT4i0UTi%ftKh%wZ`I1F^5E8wNIA{zzACfdcWq_Ff>$B-)Pw0SLq4+cmd7Psc~ zySCQ@7Bi|Ma%qw+&*0hk7AEjiw7yp@2WI{lP~|+@42uRJhW{~7FOEZm!cS6)o1!Qx zL_!y_h|?S^TogcR7Jt*v&5JqtwYW+p!Vr9>ZDb@*!T;(Gbq3e#!|+L1UK$vin(*K1dN;kyAl13jIOhpVo%Nm2rk^U8_4Qw*@(7R%%Il zmDet6){ZDc`9bPkLW5_=IiU!9-5F@3Fmd3g1rqbw*MAQt*|q|9?4R+9AGJ@dY96?$ zpD))MgdG_`MO^qlPOTc)OugA_mR2r^(?p7%P#8V-DmdQ$wIo2tRttQeTWVmTk)CI{ z50piSIkg|e|9RnJ$Jv3;62KFFNUn7?z+>CSU{FdZz;C%|L~ zi85B8yd^*JU)m4J6yu!6foqMqZG-y@>DaIo)q+DVOUn<;Ye7RSm!p=OcCh{*D)`{s zsvIWm2Q;NA+P3iTxIn@WuquW^MlhNOi?HkQslaTuO!gRU;#AG_q!kR*BY9_{l9ibr zH(YvvuRd<`NJ=&24V?aAzwYIVm`1#P2G)ZjQ!~N|QmYb5`GB^#4@2YbOqdpyq&r&M zP4l2wqi!%l z6Pq8!VbAZtDdp{FsU8HJ^mz&@A83)n7-MVcJZj@H0)3lu1;^%zEfh?q6^)6zbrt?z zd)Yff$?PZ;CLOkk?a*#`4R$qi>he`CHs=E&pu|g3U3Cy1Y4`bg@5%G2Ar(EY>x9E;Mi24b>bBiXD?7hmoF9C9t+pA@55;(WNP^ zk%NZX8e;GaW}JC6NN;w`anz)3eW%H z@f}v03qGTJ9Oj*)Bgg^|T2Y|2C0e`g{hsZ41K6-~_F_Beka=Q;;zC)wY!;^~jU?RK z&4C>|Z^qn|#C3E)?!^|fyuevjMuFBmyGr2xqb!i#81I-aI?jR^oNrcB2k0M%(g`pZ z4Sz)KkJ$Ay2d&S{01go>V1O}(x8odQkCs;qid%<~HDAy}+lD-=Q%zmyL_wo%Z~j4H zvc2Kj7+DVu5{L^Bzco;M=s!X5XS#JbMV52yaR6L}I@Qc}LIZ^?!p&z@ z?qs5?W}ZE!Pj#b%!GpueNPr`LLO0Iuy8N4hRHS<$>87lj>}}i->uv+uI)mD#y0sCJ zln%L+wg6VxYw3rByW}p-`W=(w=Bfy^AlZSlkL3j@w?JvcME7yhRVb4O!8J1b9)Z}q zvfeLp9V6NP0raKvF{80p!5xeALHmLQcp~=G#S6Mg=9STdatECN+9T}NOKnHxK`(OG z%~|i{t7&2E{AI4;dJ<*zXTYsOqw~}=9jafj5ZK4c8QUKi8$i1FT1{igJJergC=mB( z(_`o!pmKO@8n*pSN5&&H?pNuuI{Ibp zL_XBAn5AW(d7L?mDOOk^ewA=_0G;3I-prM09p^+eFhJB5i+pPZj_huWh9Qo{u6ntJ zyxW*q3_tG`(lD=%0#_MQczq^AqrfQ57$DldS5+S_rq5c4Lg>WFq1IGcI%&=s9TKwP@|Q~9@|(bnp&vpCo|_!V;#5Xk@WMdY^DN~l4D{U6ulr& zw}0|$-1;LZXv4|WgWS?Notr29RkyI8FjYaE&UvE2r^5(0(TPQs5G=^%g#b=ZR)umA zqm+)-=NZN5QL2;nBofKJu7`b$F%6mNKnJkJ`dxlsR&m^wGe`?gVVquyJU84^f1h(B zT@WekR2TBw!wd*u`}cRN+hGeT2upl8?c&L8yVR(@U1lu?h?m%oY#B3|`lH*HIXQoc)>EPBwj;p7$49>V{ltLYC5ZoL+22Xi0 z1O-fbDYZdm6O@;19zCmYj1e1HhQ+8{6SI$c0{AD1fIX%#?u+4i&WV5mgu<2*8s%*D zAPAgq)FnxZ9&3GTftS4RcU-lLIaP6kK{hU1q6JA3H@&>|pth9&VrJ{{eg)WVQoMQaAuD7UP=d>j_ zrQj@T+zBbELRWRgdP#fymW;Nnbu1qH0z#+tUl9asg^#+Jp@PQ!;!5Lcwti9KRX4yT zCP~~};Qk(|rgS(qTHSH{4oa3TJ>4D~TY%ZrJoKDermr&d%Zh|U3`4Ikj)7~7=Rc{K z!Wn^1-jc+6A;W7eveh+Gr#}dGgUHBI4u|ez%dy_xnA)ZCCuc{ZjtM&>`qvEP*0+USy*+~p{+QQ zOsU8G+W&xU^Qt}72x>gZo{iQ0e7H)LYh9e7^c~&qC3O|dl9n#f+0^MhDTy5cxfW)0k`}( zA;h;CBeZmZ;Wt*Enr}~~2jp-X9U=CFaEWmD;4bWts&AXx=q0+?uQaKHZz&9kFdGc3 z3bqJQ3cmTU@6gOgV&MFU3@)U~bN4ux{VMYSB*VhdtajJ>EOGBqGH-NLUUaTvhA&FX z++0oIWTLVYmwjao>!%@c@dA;|vMq-5GS~vRWW$X7M$yrczQTYZ!*wwzL4X-DITSlT z6jgKBTg3?2e1C2wq?ztB>%ngVJfypA9(91M>Q_!SWoBjYuNnWBP@MP)e1;IMYbA7h z|7(yHRy?r5Y=mQ4Np=&W8N<1^=i^k_O48|Cp_Bnx#|%AD>Ku4qVZ8$at9dfyULw^>DPE$AI^UwCA!S;|r;lK=SN7%;fgaRytc1||q-FR0 z0UK7rX$B^w-OV@}chQvWk zy`{cUN)r1?3`p}cnUek`&aNf6Br+SSVRx0gMyYl4VU_(v&4!RA_Pr1}CCht-32f|J zHeyV$vx-i+UpOz6R`>BR>v`4=P->Bfq(aDhIPd;Ge_Z$*B$jv>37fw}% zb(AwY@|IkwjAa&UG`nNDh^Jx9h#j_Lgz}D1uCl%qc{@&jU9N$bmATF|yI&E)GG}T8 zN?-KN>$$oUKT;(VW5@xNHJi_gzH5178;0nk-X(^_Vm>>U2oP?Wzpr|{JumqX3rzUR z5$~Nrs@DIisvsXu%H_ARlV{{DOl`-S{DJj?Q${}|-Z^(2a9^vQRJY8ATM|J005HdZ z6>e9N{nhou7{fgp>==dhH{;C8yN_7&ad%)BCX72l!mDfbdDKrf1z}`E2^&l@^>@AA z0E2cvjOP}hJ)4)v&mic3g9Dpk{E4SOdC77;pNBToJ~NW6dl?_Z=}`x=B8G@>N2`W1 z%+nM^d#X!-u*@jIx`TB|tcq6c%=ETJ0Yi8&lD0qUND$rjvVl;=^2x2>P@o95V}{Ib z6=3?WfFs6aan9-{!}578Ew(@z&X=3*oQqf3K!cx;+XR9CZ$a%>4`C38cEl_ueaNTy z?v6L1o56!3%_!ZCdmFtfiOuBH)6X(L9d{Tbdau`7@EGz@J580lIcEc`6i_rahj(LB)pKp!MUInXA%B-1YRSQ};hAgd~$NY?RiUw`eFO7tkw!x-)MZGU_iH~JW2A90?Ee=I^yE!h;8b*(skIP0Fzg^1 zZayvQBZP$Xx~xaJo_ohNngG)sxuGNgl*eFW%M6J){#7=YN4HdYf55cpm7zpW5D?7K z3R-1h$O$c(9l|zf^y}c=~ZM^{x zkEoQ^Gf262tc}UBs}d9ltdYDo{q7UnGbglj&+ss6xqlkGr8iP50-om0J{umvY`^ zS9vTgZGkpvD+)u>^GR(rzQTigb`U-Yq0bq*!?J;G9l~W6e@%R_&T00aV>MY#99S>& zRD}1k@D}DhXw@Gl1a0f0SP82a`|~fcbRZhR=RWj&G<8QUMq&h3rELgn4c zm)%ahx`k^CIYl8y4Gtl(W>O}qujN*o@ix6*UuUIXcc*$r`h=SE!Tgx(S>V8gW^k`4 z=s_*=1QKIRnw$=lw=FuIKc+R8aT!+o#q}O>R5>t&Sf6Z)lD)X7gP}>6t`a8Lk66=$ z3vx(0`?kfK*x5X(Q)^)oH0s-Af{Cd|vzRXjvo&2FeS(HZ<6QvpDpn4g7FNT&`Otod ztAK8D*Meaohd5Ejy5FqFGX8nT3)bmV~%N8-y>O7w5h6u^yho&rT_?0MrfYm=YB)mwP4`JI@}8u z!J;a^QL6h3WuK$l4`7+kKp5LW6yB<~KgB2+WLBMej3!5S8L$tD8h_@Nuid*yJR~p^ zI`%K^)&lYhoa@xULh;gmqtddEA#|EML)9*usZms}G))t&wm6hlP&8r>uE;Wz%?Zjb zpTlDMw81%-{0DCB&VjW-wh)Wc8muomaHRnv2z7@e+!+_UC>VuJqBB{Q*5!0wRh2c5 z-9EBemPZBDsZ5fY)zg%ERQUS>ER>tF^CNe`^(Y`Q6C{9rA_)%Is!I3cy2nE*UwgJu1q_UmW0s4gzm+_PwjY}@hBW!=`{ujMmOR2@ zd-+Ni>G$&SwI+YEF&w+bOim_jBo?|`;GyTW>nRI(@^ndh03E6ip<)=S@K7T9!J;iz z?N5z#wz{LVPQ@%f&f~hSS0yCJ0y76(3HY{Mn?nKQ3Kk9?6C2`KLR8f-*rXi9?#RzSSZ^&WWyN^m_wIScH&t$tJOS^y9vfVLh}JAna(M^ zB4IB+FQD@+fmUIyz4%y%3o(xC2$yU&?WWX?*0T@;J8n`t{!7R`E9HcP7-7@D4rg^fkMMlDSIDs zazD9X;?9WVcEa)IR`@~4cpXCC;)M^+78jJ6{rQHkydAVdyh9%scYG-m#;S>ZdZVjY?h%$Z}4v=N`E zEU_dz@er(V;ZCK=s$qo|0a&Pd_M-%S{zCG^sPHb<7-ZrV^`~kGsgYE-w8b*qGVe`d zR*%ucU6qLKc^%1Jy{K*Y;3rC_x^Hk+{*K0E5}b`A)&0nptRf>6__jtnTYmd;o9I0t zW;0l!Q_kM@k~Ppn%+bnOf50M7{LAw_gXZk>lt?S(;B7$B?ofu-#%eXdY*&pcxdg+J zd@UJv*RpI~<X!A^HLv8Q9$|`w6VC3W~=6UDIQ1>S5&G&YK)8RfF2eiXq!uxrPij zj-;#Yd7X5am?x?QY7lpdBAzOLU0)M0&J7$6Nc}D&+hrVPxXbOLJK%pkCN-*{_rmo^ zaB)~3QkTDxyJsY%q~OLmC1!_SyU7#sB>5g==u>|gsO%K^|vF-zvg7oBpl0eFK^9VQd66Kj?yuZ{^-_;s@g+)B0< z#LIU(c7y|tmh(tzOJX~munpq|{na`&i(~zdn&9@Yw~9??^-aY6Ca|e1*8gyY2YvED zgc%{Az!dN%Sz43@n`o3n95)y1a_f42ls)ePxQVyfWJ?O%m3DRkr3V&Q!Z3E2!vE&- zY{0Y4=U!p^PJst7%RgVBCiBVXMcp8VEF^Z3bp-`l%%r}GohGEi>wI_)Y*Zbo^0Lz^ zpxf8dg3hz=hbCNTKxp@RFRM&z?qK^8wZU}WIu%|`tK!xniaH_*b?c&^v_{XN4{nf| zG>TnWlG=S$6~VHN{>Q~qEB3Vy;zI9xy|P4CBc%u0Xv8ozD0;zHKrAkVb8v4Dq-FC!2~k;qk~jq|{1mI*JNM2r4CrZri; znv|?Vd&CWFn|OMrwk2Z%5Pc>9?{>^2@rQ>&E{&bhv_c(_m7B!o9BI*LBST3l_G-s} zD~-f#@giZRPZ7_X@uk8hvn_33RFo)_KA}uM+!UOHdF3=7i1`9)5xZjW+la?O!e~cL zaKo4@Ne#E%rX~gISh%uufgz6!N&|0&fJBQ0oYj~NBix>iy9G2LjY%RWvp|7`OW?+J zHH@~}dC}uqIJ{;>REHq(NRDwn zZG3avUM#zc8!z3UQL^Hg))|=w4yHXfejlOX=f=a^-NJG1Oo;m##t^UfXMAQwhx*Dj z8yk>$u--!y3v{fkhe>Q6H(+FsY=Ns5QI8j|5mn#KC|*82hwInwM}GB5tiG?lmL)YC zH=Q%I%8w=T{~C0Fc<{4j#oFBIXlO!*>n68JG`hX0j8yAtnUOTDZ>`2n)ivHje1#ek zT6e2Z9&miH-uTnd5vZ8yI|DCN(9R7{A`%*>?R^mzK=*V@Z>PbxDz0WLWe zgFs`71T^S5X+FS)qT@|WR<@k5FI8}(UcrJN*&-$teO^c9`+Yy&iAYf;;UKKG+mZwX zvRDQBu}*K0v{U9T9t%AknwO(8bp3P4H0owAY2)+#QYbuJnb1bRq!fP-28j?SbOy#i(~& zs_1c@S8UT;f|zkX+I}~U0y(L50+}g{u$v{{lyE;5Wdi_5jBM%5jp>h)f<7*OO3|dh zZmnVp-e)%}y_s}mh#5#}p-7&rhjw%Z}oYkRQ4lnYBS6h-$ zP+HJEuLgI)k77d~&;5eKSMVJ|wDZamFj$h{b1J)TR$#byu&p|*9^^{OBZeYl<7BJ~41oMFkR^X4b=Bgd zmKyaPsax60=EZ0};n8$v1@4AtHI-4oeB|LD?U8A6WkG5Cb-~|dJ6CLHl8v(|>_+a{ zk9Gt@eF3Bpol*d=QDKtDLl*sN&m$gBZ0!6zJKnyCUXs0q-Qu!vW(I$3x|Z-I4S-dzo5zO00K}AB`SWYbR*b2AsV|;qAJS&h5f_w z1IJq->9t%9?b)Oa%_ya#KmC=@s=7k-3buMyH$bhM(+$e5Cb)Ck>XbtD9UA883$Rn# zNpFfZ<|Gaw4&NI0du@BE56$ar7SjxbjQaVaeZ~e6k&mDgvywe<->@>7abSme?$6PV zM#wnwz8dUsUU}2!sSMzPp;a3U+aP7dsGHYuHo5D*krBU7^q3`8K;;055t|oDUfILr zQGAL$-&&^vc+_VSC}xu?2GT`^^VS@HEqNd;{X!Xa%EtJq!w&GVXRMr81)XFyTr$|3 zeUtJPjLrowU7Xj!rD7u64^Z{pdIaQU%!En36zGYqQ(NoXZplunSvFLxIy2XRbjk18 zJ5!_`mU72)-I2x0Y03F={MR6@x$4CVWPmhZ7*!23w$(+@J+ipmtY%x-H-d_H3$Ej; zeVY}-fKa4oTMa+ma?NAar^-Ehq~Hb4Y>_w4R1^QWR`FEG3!5eLVU~D#t^U#&48Zy^ z%^qGWLH<*1Si6}BJ=o%19OD*?Y7c3ZZL$RheGpy`=!CUa-)ZxjykSp8=UUwx*1Z}6 zO-g(;Fo{o|C}s@mH5&}75_%|kw&sPnI?o@Q+DB!Z6nsz;5WYi$ODf5i_%Aixc#QRU zKo}?dx9j(WeY;Z7g@nZU82mf=fRoOuWl-vc8SCF70jPg)SYv z1JANA$PgO1%|fb~2}ji-3Lz~@y8k5Vwl_XpL8rjcXQopVzyT;+)BfHT9iGVxhTXHH zuVa$j2N^y}QIJmb1`!JB;p$CrR+` zL%BUh5eCYi!5W&Xa_^7;;Jnh|{u+(FoT`yD%3l@ZBQ#cA4)@$G_V9Mr$j);-HyOhj}2NLv^U$&NI;31wNIMBX4Nw)@Xz@P=&HqqR~sF_Gk4S+!`4pzW#4c= z7o!>6RjM|~&ZGxINva95KQnQR>22`TtM!K7?*@1=hxSxST;$ZHDr|QK4vTpCzst8D z7a#o;)l=O(-G9=A7hk#Z5OJ6_r&d^K5y6LV#bFxY}x7h>QN zx(}q)3XYbi8q+Duc6<{HczG@FlQmFeUy3A#wR3fMRx_<2R$vJ_nm-9;yA1(h^{ZFP z6l(kh6nTYLTjQqXtL*y{*9#g;IGhGHORL<6Y#)y;k!Beq^@b+n@+8e&G5zD5bm>hJm z6y%Viqf5w*GQ_yQM`jKg3>;4r$+e8Cp5S-Mxw)v|jA!k_-`ddsr#M^rlEDR#+wcUj z;gGa(C4B!%kW}nx%n+D9K>@$URlaHK{u#hO*I4O6g_BLSh~kSW!>s$mR@HI0(D`iH zj2fAay?KvCfc<@4 zlvA$Lb?O8Dc4|GE`5u*&!s&4u-flu`IteU#hC1?TQ9v-D{>X2c6d$Y&xRX$lXHYJR zzPQ{J80bh8^SWamw=uIQ0Qqv!X&fxbv3`na#kSX#Y1v7T_MrGvr**!VWvi*xu6b?9 z#{*L0^Q;XsaEfQs{NRtrQVtnCeH=0U@oC6DL$~N5pWk9PC!6HRF%jDC;4$I?mTCK2 zDr7lg6#wbK^=@Q>=oo8|Ll8$GZ%N?N8|;;lH9jypH2L6tL*M+;`@nQ1KZ zC1S@bmv|gR>)8H5{H~6iQx&~9CR&*eMC@9NL*m$s><(N+v>@>S1TW+(sl{r8QDh%l z3)&QeN7hnaZsLP}&VJn+>EWKU<8RVgVWtmHTfp9gVCcrd6Z4F8;cy^8Cbf9E>`-PD z&3z!z;95`cjmYVjQCNF5d0Ugt0lJ5#*y}^PMlTFqIrUYz!WVQ(A5)(?y8L`1zd8Y>CSPysMb?;!ubzc-g6?75NzPa+Xl?Xoaw zM#&YbZaXiL4FG^9xAGii!6Z$f`6UTNlC%G!CEv{wi76sri4V*3{&#$5DdMldS7|cJ z#RXOy^IePfgQe{D@S#Lg8Qe=IC7{dx2<6+pCTK$+m-pyoh#6!0ynI^3PSXJXnWvwB zv3C^b_D^QMpdYHf^|`vs`uxID5uN*#*xPaHX&u-lOcL%Nhx|PRDWB`72~+8r=h%+z zx9UW<{UqT{dwCYL)zS$tV(~#4A=;*6`tW-K{i_yB;E@n`6`ZdU8$zLLHlcEG1**FK zmR~hn>k!Rs2#<_Dg9sI{I-;xDt5?i=M+&dt&8tRRVPHMz51$X|(@V-JroV(*_|V_k zRwyGy7zZsqXW5yvV;7T~>QnO%0%-angcRr;*Unc~wX3*bB^w%o(Nj#6=q4N8X)tx| zC!D?3ON~EC_q2-ugn~dud;DNnY>hriaaGh-;?o&wS_^Nz+HH#AITrU*hQuDxh&71p zLnHeqnXuC}1Zkj|lApzwyYO#LqB?k)9puLaG9;Cg+G_x^VeisbpyHH*10&Y~NxB}q zQ$&dg2SncRr#ny9Lcc%`ZMU?mOP%V?M2nnVY;fd#coV4E?a8<+iTZ+O-9!=bzsR2Y z!JaLZYR=TxS6V{nWGOFVWH-%e8*=j8lSAcmIakZ>fXgWX;a?@bCzTAUAA*^2WwM`; zuO9$%;i3(7LC ztm90X)Y5~&2q*;vdF~Tp)Awy*v1#dffeXoCR+ZDu9~?IOdDF@S`zqIc*PH-MF!Ur| ze)zqadXaMTDIxZU8{7n^U$9tr?*-!x{RwX9Uhi2=4@PNn<=41dRD59VItF^B)oqlh zug^5Lm%Gx+^4X5)1I^A82lZH4I41&FZ4qy4>E!B?mIEjC9nTo>_wE6*<+K=a8x>aQEg6NZQwrkyZvH{LNDt&%Ua>MKC=>e;buOi`r0& zxIt{^46>WN#Z@nnbH73$kb7~#_DrY|%fJ+;&uWuiY#Day*~b^v8$JDp#&by9(Kv>) zr)*Ba`S|GEBonG0N?*{04x^Sf=P_2Jy@)&aWq4HqMWd>Lk89s`9##XQ30FFYn(!?= z8~|@paZ=R=Kyfsj8sHdYRulA9eDn9z&_kd$d0h_`w zqZsAx=yCUP9h|oSd46D`D27dQP}P>GjCL4I0R^T=f6beq#gU z?6*Ya(>fdMu-A=9m!U87(qVT-Lf>+%v=_~@_8jDyrTLLd3T*H|0-<##p>N8*=zwYb zK`o3+!UK!wb5uHSR8MP#o{m^`RDUIxQJEBlFEBiL7eJr7#8^^IiMuo-7 z!eKn){nK$nisdIl4z<(W(ANs1a887-6Kq|gxfC%uShv4!ZP!)9hLq8|(Y@dap6?8K zkvsI(qS7PF?FCaQVtkF|OJY(YuvUf)q3AiD)rtG0w09)sImp7kGLPo&^EZ>BX=Z`O z?@(6JLtnjx0Jr)W(+6foTTpPPe(l2)aR`b-ilOii5^TWTpmhHJZwxc7!O0aylxkxM zl3G3eoGbd(;IWhlPgIa%SqKl`j9$7}b(KX@RgxeEAx;BH!)elS^aRZvXfK#sw z54m!(6wqepCGlzX0t%{!ojEZ!k?nz8@SPgdoM%BP#w*3lA^jD| z2SWArM#szb0X_^9(L(A3P^ADnOxmIY&_8Cohpx385Y;WpfdimT^I}2p#jB8t^P=y% zVa8vHbfLzvSHRPF3W|qFi$i-`z-NILN3@5U6g~-6xQx&$x<%f=f{RC5FRbqDLah^bB3i78Wzv*sddnu%p8yFi>m($VeOJ*t@0`pL}f zTK=4s$BDuW=>Mg(U^mGZo>}%F81ssafrgHv=R6IOP^x~KE6_VhG7D-Tk6Q+O5tl(b zVS$uLwHFMKQoT!iutk#&WEV`EJ8;n8M=AQ7$y)~>`CBxv4PP9ClGom01D5))y77Y; zJH(mDcl&d?f0L$O9OTquh*e?UMZj~wnt$B4`vt_P)B|O=$!{#kNg~FN9eJkfN&b~_ zkV$I@8BGt5=u=d-NNDpzPy}@JDzg=A23n`Pkio3x^m=->Q{m3`Ads|&SlPpS8rW?l zm{bPConkC6GwSY6STwk+h4gHfJYm*{#t~4Ssx2n(B0u;u?f>fdaEqds{|mr>#}RE( zY_PkUf#%xls6L|(9%UJG=Z?(lPpDAh?wq)c#-qvMJ|{7`NV188Y5s{(I;dCa@vnAw zkK?H4EhrtEHhm)V+5fpTe8I5Hj-P%INA&V04@3Kp=4YVKleJQ_RsnKOeZ-?(#0=u+o~L`;W#F6G-6! zFTiGN%<9lC7QwwHu<>5r5QwYj?FQF2)Q2VwzeGN?^s4Mj-H3GF3-kreOfC3g z3N5KyVe0^>OQPPmbMkTO!G&>C#TzwonGYZ6^?R&_$TB&fGN+-yA0%jbRKX`qSRX&x zkNmljdk1n93Ap|qSiTV?Psi~?9bJ!TsCvxa>=%Xm$2J! zQ%coIs}-==+R9_bp9^1b6lhKN-O5hb1mp6PqBGgaU#o$ASIeaNAKdeb;$64FWq!aY zuw!P?Vi42XQC%y^Yq41$fvMRP9!A(nUqvlFJ?!FKw7d|jkWrZdyC)AKIhyd+yUJaE z;Mmcv)^SX7qeF8hXb26TE6c*h=}D}V2CoC%b+7;w|Ga6Wv%0NprImYmEEaxaGwb?M z?uPd`%ow)X3~VD(}kF;!1@`(1Sp>kD4`yQRaXS_ErKZwk~Y!N*YyOpp+R!B-o;;NavVSl6;eAcJ(8CojKlaX~CL`Y6%JXA<{qu@I(zFbR z6EPTzylG)!tsXZ*axOUnE9!@iYIEcHC-SS8&3C6Nx>wiVV$^dKA0i4I$wxM*6s#gJ zXfzleNINrc5heiK_iNwZ%hHcSJ|#q|3bYub$Qw`@H^E~~-UnUe8Y-;0hVcK{p}_>% zF|T(*JysL+ur#K<;%!r;qcKzb=-E~YTu=vgW&es7*r5TWV<)Db;dBcdhk2<17A^bmsZ^ zXN^PM^#5A|g?7gEpJN?nS$FXe_MoumWB&AXUH|{a($u3+aHucVjwgg*qo;Sg5*a@r z&|@}IVB_0wdO&PV55cSMGg%)aR#1!oE#(hPu?RZ!0Ohj%L8B7OBvhQ175)UeN31cA zo#}}ShdyHoLzOuPma>J$IT=)35?S%|^3@W$s1T5QA=@J3`qGO{?UPu`JU{-z`znGU z95v*E`&IM$)$WfTQb#*&p>ZN&)~H6sQ`kz|eilRTb=EBlW2=b$Y9P0O|87zqEs}oA zkU)S(bGv>B+9)2GX+Owa&{D?q>}r<7+I8BD)jDkZ(6i%UI(k7SA#ICB^7r?gSO-x_ zBU?^?D?z4G@FS$e8wVt4eCi^TBn8 z1b}MEx#M`4TkdJcpK<@Ud;{VmaVibqoD3~&osxjbCKE$;CfU7LNrOKL2imt?G|P)5 zO2+s-6V+DXfJY=yezLd@m9HqB0=zpsUH_#1@8Q9=(VdXj&^s&Ic?atuH z>Cu+?rVnlWMx3jxuM4nMKUOeFNV%^idMXz^T&}0?0*`skPGlr!2@*}mC?^br@pjD9MrBva5_>xGPhm}~?d&Rz zinCugORQsMy~?GaUGV|f_;GU7%DupwEB@Li)xo^BJOIi-8qek_w+VWCXc8!3wmTl{;!`*j!jz7g2cu<3ld=C#b1kUntvmKf$#AcGq*6|(139n9mXO?J1sQm9 zIQjZT03Ulr7X`lp!3KLZ4mYg(3O&St)2JNl3GGT8gz`fuu3~-6Q4K;T3()C6a*0nS z$%f-iD-Tl_MDAD@ydF8S%>^qCqZCkEt3gM+_~Mg*SkJj53wtsK!9yz|@wo(Sof{RW znmf5zi!R$E85~q%cqxZ<^)SgWy&S!laxXV*K-?bNyJs6nGFr$F3m}J6fi8-Ar|6hi z_REY$Ql3lhUc4=XgPI9*4|trxz%LQK-8&aTb#PcyY`cnu;Z}sGGk`Zmh?Ex)uEDnQD~P|H78dm)A4$znJvGZF z@%|;+76v9rSW1{!u){eKz#@QpSJ1j>KiLaB)HuwwWvO?JeE^!@F@Gs7>BwaL{=Dk? z#{X~?0XfrNw73q_vZhIPH=L3vfPpPJkXTj!2!;F?52Ug+9R?Z?KOS_}pqM8~6L7{Q z<1-hwTV{ON2Lf>wbzb!1XkHVGg6Lsi`^G&Naej)2guED5K@)n*`n59zgyw1 zW>wr4ZQi~7?o-8;tLNlxfV}U!RdvkYQ_w6T`qNN={%uxGy)!3Ma~7sN(S`xA(IVqj zk8}=CIl69M##iEv9rzmfg;GFVa|#ZUXuH6NddTeITTO0n;RrJ53=CeGxzoWOywrSl z?#D%=pN6g9Ccj%weOhcolKapjdhgw+n*;0trLj5X$ZqBpR9#$*P(-R&8}6bb)oc>B zdy&BwJ6$FMu^coPA*34hgJqL#7HR#Zm3R;(6p~N%b zS%8JoL!3<<2OBsjP(luR7(qG+sn~YFijXkX$Ra2RpL8myqSd7TKuVaZlEXf)cgMIh z4&)SGuo}Suqybh-XiEG%MKPGCiIq>*18=X&vuz|KkS9K<$VUWQ`td*d67Qxh#Q#EZzyb@nuTAJ1<#d+DL&!-9|85*>l(# zx#>kajXRwp$8&;q>F;6H!XSB1oog{%7iWScqOw!! zbkqO1A|5L*tkwlCCQ;o^i*Y|Z#(vnrAJDgfq~hs~KV*G__n+?M(5=&86fwBIUbt~S zg5*kN)m++vkZQ>X7Z4ABiKPfe!~t%V)n>%@aUr?{xqT@3N$eFeeaR<1{0*W#a|Po? zzVDuIrS;tmMF+gDl_(}sZ@}xoJ{rb^4UX>%O}qNcO9b&a?-QkG3pk#r;1h}YhK%4$ zNwKu&o9Ij9{L95jz506LQ&U@+9eTSs0#9(4DB@ss`Rt9xT%e*bpU5#mDWC9WarIVw z+DZ!fgkjYt(D$JVycTL(QjIDTK)Pw^0N4;uZ}ar`8RYZph?M0?|D!=eLy7%eId}OO zMUkqaN65cDG=kEA?DRPHrEjNXfc6%V&$_f{hV`)S`_rHy%V zO=|@*YOAn~`BYeq7g4+iElFwH(jlaofFYkemNNs)U7M4QAi*vxnT)n_k0u%^qaV{) z_k)GS2lw0sOrqM?_B8Jjkc`4`Y2XHWgq(K$CD@ufwat!WE&^j-e!uVC9~YltlYuEo z3ZW{PN>j(*C5YnL0FfeDt+{WW2N@P>$5Ru{M0|~Wl}!T`67+Se=R!?iJnge!(z?>R z$(4Q^fii(mqevwdnD8(qS7Ggci>UMb%iwf-(8+KgKVeBYp!z+Tvov`(R%QZC)`dmv zDm$#-lxH^@zRbuh9#P6tC-j&>a-)*8la|tCzhM(@tjz@uAcF;Y!^31pVf?nDACX)n z22p+qU707^!u=A0!0wDniN~jaEgJI`@<=*DI2=wDEmwp5s%Mq4K%FKF(*z53b)-JQ ze?(?N`VT|f>MZ|f&wJJU-acn#YWgg=sxt%5?{bl>jbE{rI^7`J+%210Tc`$IT@$ep z-4fvh1YLqs0ppYwP!}|v)kVrnpgQgigHEvAnrCw2hEqX|$Epfj&;uf3fQcp~9D2ol zt(<}A@htiO| zL8YZotqsl_pfy6_javO0EAksrGLSIQK#@)@vDuv@R#r5gy?fyUR6QKmoupiH(f88z z3I%+Ye`fFrxPFh)9xtb_j?bF0GMhoiBY$%bNHUY|r42v;w_hy`vv0^R=&>woP8Vnz z(vm>x*F6$@$s;k%HZ6wA=At<#{o!K;gZg?Erwux}{W0C2KWub~??d|K6*fvh?r&0a zd8|1pbXEM|axEh@?;RN^W08!#^3xoCyxrhZ{g`!ui}sE^ac6QM`I*%5iI4$cT?`MBX=5X0#mKwE4OI#_q8zeV?9(#zpw80mfA=yY_`|O# z&{!}DN=*>{x;|E5*Hl>|?BVCzLr7Mi>Gs7;=HMmO&5&-)YcHUbAuxDB-1LgcRq1F1 zCX#cVM-M}BsNOFrQX6XG*W^nbY?qXF!{|Wq#fkEWxHFoJIy&HC^uRBrEo zcy<0hZ(vC07IvL_R*B@DYisQK+kP;bzcQC2m=UdHd#@lUNljsFhx4XB>AoJ2m4V1% zo=Ed=nu%>qolqA7JK)zJ_q%09QB-ALU6$fpU0+{Jv?K`bSz^y)isT%r!mw8lDh6j6 zSoh~(b8>io1MdXGVeI1MWP; zaw9OzCOk1vjIjO|Nv3c`JSh@Hq8}mMB6zV^{UBV02&D7z=id7Ny~e46PwjKZMk5MA zc6K;18LdbAA?yR*5oHz192sn)#pf?>|2d19mnp3swk~o432xJN&kHNNuUMTwuq0MV zX+2p#wbENkvA1D;3?fG1$<((!sLm+hjz5xjWMCVGnF>bWuj9>MM1^INIj6w*kRRAJ z#(Oz44j8XNL~l?Mb<^fO`|g`Px<=Wrc6tkY*Fw8sv~eDFXLeGXQz=bpdmy=Mv1LX<4B};6 z^eGR7zh3Yrq9$S@ED@$;Gxgg(2u?Hc%*vTL{ppJT6!*5Od8?&(JJFH_4xEn1z97m$Vjr> zk~NBT?t9fcuv;|!dgMq8<; zLlOnFO!0a#y@p6Z_QZZDMc%@`Js($8(_)I2+%JUAYEOkWzrCAZVM9_%-Dgmo_`tA9-=^0t zen?LeJhy&pM>dn$7*hc7&=ZLUu%=eEnMg(_fs-Vw_$mv4Zg0i zaZBCs{$&B#j8t|Zoer4Qsw0VStTRLi!dWSlNe?*=E7s~YQ-7%)j;Ji#iRoq6`^d!o z!8RK|7-XEm3G|VQbJpwgZa>fWJK>D*i(I_y$&ZJK5`kh_)~au4iV}bgD)LXP#oC-qgYIK%3p4cORN0s6(58o37pf;1K>G&B2h~%8CqkT2kEws0q^4Y z(f;SrlXGzHQI}c0|Wjz#!CBJ)j`nVu@w8DO`1)+-f_su&aO8l+0)5~5c`33{# zGtQp|4+fR5-6u-DanDN0z;1L0R(G^_$*X`;^$L9~C5mJv}w9z{CUiFy&t$Q0RKM#z})^gQwbyxGEWKz7@kYj zlak3)&sv7@iHvl6rb0Pq(uqxCSN69zAT(ynl7Z%jV?QBN>fR$!pQ2&(_N^o*YU%T$ zkzzjm6)CemIw2oV4eI0qnV9z-F;h1gAB~z(oX+cYZhSb_68$)`lF^IW;2{HEP1D1o zi`y*$+pYb*D*HrFC{Zp5NH3bHfASeF>qfFF$}~*EiAp=2(-If_rlcbG;_KNx)^`!nx`bVw&p`n1-l* z5wTF550)$J(@Ya#EHqjPz(1Q`B$w*?d>|Tzj)M3QE@CaFGr~r^3BUEW4qS^3HyJO; z4P}InMpm)>c0okdjrIer0n}(|s-u;ygxS?;O2K)J;!{CYE;`h!`^EgrC?gi--HL5J zSKQ*#I0m*Z**B^tFblZ#Hk=2wtJ_g)a5#2dw){V7d3nk;9|wr3h* z$Do8)A&I`SroQ4yLt&3^eC=S`70a2{W-hW`#4pnY$!ZAI@_X_mqkSjZmqEh3LWhpE zAb9ho@sqdJ2SAi|luWqkY&|c|Ng_^$bKtvSt)5ABX7A`fZB#y_(Q=}~YgH)~$bGm6 zO9PxLwtcM)Hj*L%?L)?d7DkEXLti#u8DlkZOm<|7>WUW4G`-z zd!B|rQgy_7OMT_i%Gs+^`D8x9OAgROk!8pm(f4hj-4{!Xp-gWM#0xC7``DS9fyTbA z_v%*u?A!ceJ%kI(o1+~muvf--h$+aN`XE`U@OgE~5V#BnR9lkX@b<#VrQC+zE*F1Gfk7h5MT>}bD zvLF2H7DaNHC48~_jIy#oQ-J?qY12euH><4d=W*8*Z-f}C;9Rq-{BC;_>+0)?7cCe8;(4+Mypi|$-Dg^U-Eo{A1)qFZf3`uyylHi4DjWh zuCR~uZED-%JY|U&5)9C;F^dy8fCz?mJu+Px*gu5zXMWETDv{-o05c*}Q=2_R#Vq1f zqvXmpfY|V(k-sxehBX%xDa2#uIV*QJ8?--8&fgm07>m}5@9dZDv?(4%){CqeP4QC3 zP*t8D9bU8BYKwt3+hXfbO;$z=Q>g$`|GzoZncc*phubF+N5>x7x6#7vVbmch?WjV~ zZtAF!yYDI8mu1k^7*nb5$kUZ)Jai{=FEl!0e#K)b4~&x1v;H=n+h>^#0o-v=1Z}j@ z*08n*yDvtxU(&-7vpZWtAMaw9V$x<9iA!;jpyJPP#p)b7V0g@sqQmG()6T9(c_;$? z!!i}OS~;z0n1@sXRO77U2%PV7s|7NVr07uqh;^8+M+5UWPBNy;aX-(^>SyH}kjGWt z^!PjuiMqpyvmpf=6d$E8kM)kDr>SWr&Qo_#pIigJG+0K`fHZIj{*M)D2l#3SbT6~m zgw*UsfDzSfhCn{O# zJ_zgD5(IPG%lq*K+MaEVYZ9V(?!^3Csx!WDM;)e6&RCD6`oaF}NB8%2pe56CGpniS zE5*+x&*DM`8YrGAk5OiZiab>0(S$ahO&Ej@PUM?dDawzA6jcI*{(zclLr6Ra#Iau$X6)2}km!(uv6ZLuq)e<@>&Ai&hedK1PU zeZkJe?(1AYvjXLgkgJ=H+t-c}EzN}(!VeSVAW`R}DIw?j{|^PtNw7xez(}mk9_4e! zK%EatCcbbJc}&wl@L4Q7B>}A)9x<}Z9bQUmw_hngV6r?=Ykn0Ozw?Y72D1Eo?-`ct zB(5>@=T@0JTrfZT?g55&uLw5&hzE22bP=2~@8UlCczr{iZ^LFLP{8S^T2Hzp@aNAl z^XLWg?7?&ll9EHkFPzcl$9WwV3-(L$6a+b*uljd)qNu0Au=IWz~VgDUWEHE4;Bl%~4R z`sDWZnCYl0s@LJcvq7Ct2NEw20|q-N6j``!iC$|RcoVMh0FJCEo7#7aspKC7eDG}I zA)=9xZn8{~!@|o!RfUx$P_J71oT|&Z4Mz&rz^moOJhLCL*iL^6AmQ`<0d|9!=6A@6 zw`>gnDQ$PU79=CX&8rzcZHf<^vxoa`xutW+{jnpAr{*A_^hWMyqO*h&$ukeeqrS%p zL!DxU`5kP1Qw8$xvK+RKqaaZOX`w05TGne_y9RaT`}(}Lq_$tLI}V+>|IM7K)( znqMq_RwXFG*LT;7{#hx#(7bM*fz;Wi2bHH9Pt=ct_V#suAC~;STA z$pI^@yB>!(1)B<9zaUvRwVW0?y2kTEF zSf0Q8a8MGYQ6z_`_Gid9J~Ai;6;AesOb+uvBU0m7EZTRM*X4IrYM)(e^I1kQA;CbZ zUGiDT$bOYHlu_CazeN(#A$Dy#y~(+eq2K4xo&emtrGAW$O6AkE5gWR$s9r}9r_co% z?CeJ_9^KIZfA;2AbLRo0XEnwM4Qj}~ytP$W{<#)d5r+>siI(*)xQgjlcJ=adEmw}% zh&@|-WR{Uy3mA0HQHNymp%k)j*EsfkoWDU{#&wI4Cxd)c5|SMf78pEI>F^E4Yf4j2a!-VjGX@c z-mjG9N`C?pswOtqf$ocGFFcB;EVyypKG7BgU`iOZnuoZyU%Jrw&=n?ZzrHvQvj&EJ?bPsa{ciERA#hI{A01SX?kH*O@SN`zL$rQ!t?U^EigtX#0p z&Rc_@O+$G7y<)#2dTNnE4345dFTd1>EGUxKUxK;OrWbt5dac8`<5aW@#GsA06RRmY zX(Xu^Li>&YUKNb|D#Zo!v-3AmENwW0-JFwEPApT+az)s*>PLe~IAyTc-Bs%Reexb2NMi>=Jam&p9(ERq6yFuA1}s`{Pye}y;m zbgO5eu_(;Z!l4bxr+)`pvYRPG%0iCB~3=(B^Y&!!9>ju~zo}Ko;fJt*8Cz~gaFcXeA^w$pS|MK71i^si_P_CK%>-c-S+RcH0xU;6R* zj+(-x>T4J`4qLGjUYKjYM>-O=TNFs3zdqNElAGj0Qk$mc3x6fv3Z%Wa+5b4KbD&ki z6GIJ{a0pkHO&`zy_LqSuvMwSYX$bWOy9>(a+L^R>92hZQ3&BXn>5llSQvb0Vh-;j( zDeT5N6!Knt&YHW}k=ISYAf&z2HEBndyG5#Lk+=`tv_Ug)V)Qn7o2y0G4pl9n>AI5K z4952KXi}Y7=wU4_CBX34jv&>Fxp~{Tr$u~ZB9it6@EIZppya{Bu_egAa4gA@thoCh zxv0g@3@+UlO9-4=6ZoXt5NaztH0ZW6VP3F9j8i}gf0)d(q5W!jYx+-CLK8@^WISy)T3}zrOLy1VRJ_#VpXu7C+ zT2tEv(7mrF+4pG!S35yFq{@#YEi=gUhuwOog(g1 zh_+`$stZ@?VfNa^sg<*kuvNmEsb^Lwr-XGGXgX=_bV|8pHQ>U!f%Hi1#Y>&WiF#6J z_+pSy#@(7#H=$7bj^QB|5O-?JB2&oS^zi^!V;LdKRZsJd!T81qX5%4_a9ab6g!#eb zhT+BDmy>L$p$r!{;{dVHIkZP)i?1hjL9**E7B-rS?ke-^NH(MSs}ZD(3LbNSnHYNybqj(F2! z-8yH9ZTRT5f44fsAdkkgxjdKqRQ&$+ zzi1ffmMjAoSH$Yw@>;B6Ui_`{rt<|jSzM@EYZOS3#IMy?>}d>2LNr@u5ihu0vzxb{ zSkxq?p|37UGhO(R+q=n0`zA_p%Nxvjt zIqq?1O|dab*8LXNIwp;rb);KVCpQU3`IR{(kU%VQR~`N45?7%?q#^24HfUczg_n09^E)WPyuucNCPr)FOs=8A23O5`e0b1P>;@oyg3i2Z? zWG^2phE%6ek9SW0JDaU}U|H=_4N4e&KuM zckUOp*{FHhZnn;6vZ{PTgMdZE7}yexojqqFTLU(gR_PK$y@z|KJ>lr-eb8905-Grpf9opOfOgZOL;a>-uVkpA_4+_ziP**rFFd3b^DxP1ptuga%`_y%RX zUA}!~+QW_|!ow~cZ0FYtHoa(~#v6A>N&;@FYXZCzFz#g%lKYaIPjcha#!Gya#sfTg zZ9^Id)N41-@W{1Jpzq|fZQTq_p z+V^yQ!GN!6a4)b9mQJcF2FY0DszlSpt-`%0?r%ka6Q~_-_AV%i3`eC#9%KWo)yyJS zc7(VFdiwa-IT*>}I{%mS+QH(TOpt&L(iV}UAsAN?X^ToV|J_1=Rhe8r@k+L_pXv<# zl@(7aYRfuC-TiPfPDE&PiGu~?%oW1{bu1!2ctiFzZ%iv!WES0)T(oEWrzaK{Dwx`N z>ad79X`C|ssdEXWuS$;$v;Z*cpJoN|%{yV?fr~Z*TD;@eS(^ zz(Jvyxsd7pQQ{lsD%Kfx$$m3H=IX#h5|$B6pY94b!2fH zA@7gJROn~~8f`_TS`@%^^nNfkyCP_CMlUcBI~R@_l)VZL?Hr-pq50MpXWlM-xr_Mi zrn?1E;@Yp~AF0+VTo9lBj~>n+R9FER$16Y&qE#W*ALxV3jCF5(uQlYM6?#C#n_@;I zJWcfPclNN--P(yt>WS^0=N@qTEH!kjVMt2V+<$z|2A(y)9CDOK(vY}e@pv^&;sk#; zx!L~I@RTE=`a0erzx|_-xvavuJCl#^5+rxS8+3CvF8jFKv;l4P35~^EASx|F7kQ|!!Y1oW^@3u{ z9sMgdRYcC{&CXEqo%5OCH;f`MgeB^(-%er_zTicHvaHR z1Ro{xO|3QSuA%V2K+Srr+kdu_<&&~g5{Vs)AvSybzSPPYMHKoU=GAHGnltrQKSqXv zU~V=;2z9j-9XzlNPBYh!RvmK(PoRL=4Yp@g(tC)A?Zv zU6Pp-k6!_2KPo{tXwKGVRv=rG&0voa_BYNYa~Ru4HVwMb{Yv&63KV}ITKCzxqN=3d zUA^)7M!!B-CRjO(zu3W1S^f;5JKDsZ+KXbN#cxJzC17Jau(}B?s?k%96587jW2Cu& zj|~=^Ju7_gn+oV@2ey-s;a&gAlN3vj5zFBxD5)%pFYG;7sCwpl@i{7%RS|R}g|2!~Uig9H#T%(t!j%G%Re{XE(!P0piC907sj?fL%C(fBO{o|(=uSyM@ zW~#s+Nay?BNT?sxeDkixaNUgydQL7`8E^^pv*Mteb_z|ab@{~r*RE6ii>4On5dkG| zKLV96qmlFoe0Q+zDwPiPK&VpPHLtqGdgh!s(AO{Zr$r$y<5d{)AV4y&`4AL?2Q)?{ zbDE#>rdb0+K4Q?lO{WO~I)!X>9CfrJQY8piT9crRMQ=IimqW@9iR62iywsd>{nQMH zS}7X)=cD%vh53|{(aE>8X#=zTZ?pN!+_GPp3AGYkrv=-tE{&EHD@uRt0+O*OEOGo>&bypJPL>1;Zge%;Ae-K#PN*Jv;1p0fw2sHQ z;>m04R2nBg$cN8gyU+s zQc`YZ3u^2G z1g{>9*-GIcO&;_nehZ)4i3s}F0tU-RPpUtwMk(9AV8>{pc^((A%*xl=(XDR)#L{8U zZRq%179IMbPKy}TD*J~${7URttIHh(9+u%?^P4e4Y}pt9`!O&B$X zFoFB|QLK80e}H-ShA#j5@n9S9)$t2k^L+fVxVi=;^q7Gg&|ZWrKj;}Qi@sl?9SoD2 z?~$}eQE({tTerP+vjPz6 z)+GR-s|kvJ8F7W13X9{8x1&u+CQr{I8KXQ>#DtZqW%|z~9%8!tTP-77WiwQG;1gtj zVh=fPM*kFt5g}jN`0qD_-2_Xw7obwwTp~B0Upyqr0;gJXfwt`yII&L}^Zgf; zT5Ng)^n&;aN+{kRvj%ls%T20hlGlr(WTTfI0O^`HMR_FecX<< zXn#bS`!%KZcD`#8z0DCKmSiuQf(%2y@=Wht)BvJ8S}-m~E%+8>bw@0HKwEjFax21+ zTc^Xd91zX(y9*M?Cd_DU^Y+Pfizz`F zB^;`$I?>mz+(bDuzSk~MYBPYq-`YS1ld4EDp!5Q0-!1*;`hF=!0wjQ|EwlpUC3;z@ zR#ikC321uVoIMxdv)<)Nz!0K@bfrk=pyRFequ3-tmM&;$s*gLF0@ZRbiX%tQ4Wfma z>8@*JDi_IZB#r{h!-u{s3V@}eKKBJaW>tH>Z2rB$l4Wsz2Wu{>ke;Krb+7_(rSm3|)N33V zc{>OA-AKR?02F%BAb$S_{X$R|Z>U$;9hkcoNaQ&q?Z()b#xWV(fnbdG(gUN@z8ecX z)9ow!MC=`&zR(V-xBPr4ncUs5HLs~JkWWBo_B9PVRWHeaz6PPDJL?4%yi;Hdx<$?0 z9H_tRk~IZO@>Sn8l*cBr3dnTHcGQQLG}`s;T3Ifa&7e0t49-cLHsK2>CiY1c7HNzs zq2TK*{LT*x)`WJ_&B&s=g7^}$Pe9;}xrRJ7Q^)7njGj3B2sD)~ z5fHWCq)~9oKKa!4iphQpnnX7OmpQw!8oETn!#s+*Nsu1Dif`-7u3Xmqw2 zCkQvylYt&aY!!FGBVR8jc4wC?V4^X#6?b4kw%+pyPW3CpQv&{@0vlL)pUu8~2bVgmH>dEQS~uw;yTgl|IBXcO$_b?1 zs8I2CNl~P4gLXyaHGyFmT!nB(1v~RxL~5Q5w||N9a|ZY?mF})xJf-8CHl)J+Ke+0w zn_it#ns_qpCcu8!cEO3faOq6E2?nG}BQEi*xb`+RF2WCRp!e0L{W$%z!(smAm2)ik zFGrAmB{L-w+SIx)gG1CVJYETgY0n%oyb2Rxt`~o`sf9*vRK+*j`AfjC3G*J53b4{Y z`ZD|@@ZXdTZZSy^b<$nXE=(l{VXfaDs}?L9xXpMkt!}1cS;J8!jx@Ww-^HU8fCw3N z9xUUl<_i==>j_NP`%zneyV;TnyU31Pjapy zvAypgy%PWI@AoELN%2{VgO!_<@wy<#cag)WVp)a_*~-Lj^J=B=cnmUnXk%G|GZVp$ zOX%xwlZ}*;I3EU!xlNS>fs#CGl;W+$NGSe=o&EA{;9tYKi}{KC%B(1=}oyTC0~$f{fq4hv^z z=e5*TvWq&^FXqujj-E;C!=lIMynqe=X_rtoV35qX$a-=z>B66s1o55LT0}8wah!dQ z^_K9}&dtv9f|}1&xi4s9EyqO8;+RwwTldcK;R`Qp?!s8rwVKHSZLKzGqKeu!uk|5Q zQO8J@zIBamAuTf=b8t84L>1FO4J8)ugggZu9$Y8(K%fVH()5)#dR8(T`&N=HR2sEf zV;3z8x_3M59eI1@7%Sj{FUGJz;Vn?}=M5<~P-xn#KICYpmxp0% zG7>>$hy+aupq^Koyv zhK>DW(eaGpf9sm%`P4Zy6GxhpU4ouNr-;SdK^*g27nm`&DuB1SYd{;;O1!k8*O#AL z@<tg@?SMQfDOP%}#@@itSGn!w3x3-H2?f$TY5{rs;_^K~%K7BgR z?E8%_J*%7grPyY0zj9e1V9_$OM=l#w4G^QXAAMhj z^3Z>?u$~3=>Xj}0wlF1H8!sjxR^AdQ?lB_p+192`T23SVC7MW-Y}ZfU@zf#+-gu7q z6EahSH%@Q%Tg2Qmq4FRp0L+SjN3~4mzu&_O{oF#aSGs@j;9$ZYPXhpIgFV2f?)Kel zAp%8jeL`2k7pm1UA`tU6uch2Oya1MxpvD~lrlC4oSrs>T3OWqbld;LduG3InE+_&* zkGfq~w24DjZHPjE*;E&ruXKS3xdeiSM7Kn^Gpu204e!0%24eQTR|0KgELyR1LfJq8 z9ymg&U)$q`-z?meeAH$As(G@ZhB`cdq3gbMlQ+WGT8>mUe-K|rMWAXd!Gb zctrq;8+4$sWI{*?*LIFi=uOF27$MbevXeWZ9P_NM=6SM^U9GMIxzf@Pq9d8$e1 zXYO;WW_z7*3b`uuBB2v7-R^BO| zANXjqH2=K%67N~rd0L19zxxJvI^3fs;R2&1FvWzY-nF!1^>secs0~4)X$XKGIgA0y zIZ3Y1S2@UEcbjw}tt|lKis_}7ZMzOwL9#cQLpwK8s*E_Cvxa&&)Pvk3G2 z*IpS_s!b4bV7x=LeZ)Zz4a$>22TstEqGKCl;`V$?Z-G8N zZ7yxkAAN#T;hoiIXVRY9(IO??-L0WVY{!0XKj*%RXkC3-t-}J)S9HYn9p=Px)u9^I zJghi$j6W8zAdn8hqc&VYP!H5)w=*3Le!(FU!T!Edg@f3as~%nu!i0;rOzOFhTUn*A^!kdMuRE1@#{ zJLjqUdCb`+yM9sjdRt@+jn0Jsn#67t*) zh%HS+%8Q5ICzYVfs;R;XlR>_qzxI#!IA(q1YQTh!Ve9J=-)#A(8B>H&dvJw- z+-VM3+g_z8+f$eCpLDmed}c5HRv9VF1aH5!a7A&7FqwZ52~8XH^?Ei}hOxr9VUIr>H$=Q#`vtD*HF}P3RdSW1O5IcA} zf6B5P$$%KZ%Oe`?8qdZj%k{3XBx>gdB@hl=WQQ1XA*T zl-7fWgoJ*?wX)PxaaW8fRh#iPcB_vDskf!%HuV28x4p{Mycgtl+68Yrt5_VxWezpV zdKZqZgcjV!O}BIt-o|i}tkQI|%WfV={ns~`7^h?xxj8iDmLQeY$`ZPcm=p1fd=TLv zIIxWls~7XaV)ux_f;rqQNvEf=cQe-^%vblxTlxAvd^8fboTq5mqglOo%3{ z*ziF<`RB}#PZ%eU#Mu>LM~H$+J1a*Fm8(Om@{*`R7uYw9xg-@CttacW9EVnr|04hu$?jOVWnv{4E94HHSr69gytJrnKk;QMeV_x!69F9Z z2pxQI&2(_MU`E#pu@6t~W&FC%Tyc?qCN?B@IqP89&E7K!yMSO*gA|qoGe@fs1D zx{DS8I3u4B2^RO!lBjxhCsGO%b_$YI@#|`}LF4TX@(91sEH__g#u9OCWrT>*WwJO8 zE<;a*bjG{x183cam`ius&3k?RJzjH}DFJTve7%N57s_;EE`=uZ@tvB=6MT@CUkAqc& zo{j}FB@cuh=gk(aXO0xB6Aq-U(2yPakAZ>sk_xh#1q&bUNGDD{=JBx+*-b?up~V=Blx%Gg%Wla z2kZfn)}jXEVE#s8SukC?a8*Vf#G$S%!z6DxC-vSDrJDwBny$VLaeMWUCuY@8sl`){ zHe<0XSvk;#UTnJ2wBZKYcKc@VlLl4~`b#h^ejYjFD&NIsr>l$<#@+;&X>;p?ZiI7x z=NIu2&G|Z8u>uVmy>zTmmgH2CCRKK@Iwo>6}+I3kIO5XnsOr^Uo z{UfIg9J^GL3M3~D62ukw3?G-B8D0XP(|Of87Rv?xp`FRBqIZCVTV(X7 zl~o*i{0x-S3LF*y720P!Xu#Vosqwlk*?54We=w~pGrQeO8SK=#J0XtmZ8_m+=nGQI~ zgyzer`Ia?0Rce$aQ-hzuVR<~id%~^Vd+c=PxPc25ePU{xN=e?i{xaME_}Z}l3{y#0D@n@OO~@Oaxk4vDil)gw*$u$*Nn zJFexub|NeOIz_JV0-F4DryY56ake(<qATmXlFc=IJILWAmAtNQ!i3=$vgxv%CeCJ(`loJaQu|@kkBl`{lrxa`TRiTl5EW)fL#epj*MeJnStrU6M1NDjVz~dhyRkpM~MkBx6r$m zd{%n5WJF?qQ-dz!FYjv?Am+_y*Pk_2cQ_^C$DYfMN|AellM4~{K=&l z!636nP{^Yiu;nI9eR)RX3!)Zq!eZP@;)kW(qqJzcHfR=N`>FwDd!?iuISSvUvnON= zS4}uWb;g`vR;rQoHutAC`qpRfW$d=Q^rYkZG|~ON8LSn@4P6oNq~QK*#SwMfq(WVLGiJiSv%(1F-V*5 z3u^jqULh61sLjGY5d1gAJMycN*nLq1UX<`XV*2$aZm%SHHitpu+8|@}thfBxE??6) zl)_bx!euXVg1k??-2<1(uEqn6Of*t?u7joS1FIFRMj@qH=bpvC${4orJ(J|q@cr$8 zFo(RXc7|HHM6MIyg$0v?+uLgPP8s%ay^Oc% zaNE6M5Ab^NM;VLAfTyZ3#R2+_zV6&&35;+L zcq-w7$)>JlxoPD7Y*@4?(b{!(sq7oTlqZ(mjcq}nHT$bPbH zVF&#Ok1(qi$tplR2h3cD#4h8>Ap6dApHKgpk83ha+1aV~UeW(%sXfYU^adGFbwY3; zgBz-wXzljNDbpLYeB@A`l3%mME7HPyawv6W>*_iYLD26M;OQ)%G38DP3eF6K==cnu z?uFh`+O$?fv)Gx%`hIU{s;NDku+rX+YhcIg`D<#TNFT0Hx!(`;_3ES{b6CyJrv}~Q zNT7t0dj=MKtyHUZPsdadWfQa&eH7DldQOp}#<;_n@3Z^Cp@kU}?MUwy)4k^ zosywEDjug&XiQEA`$k9PJ+DI;7d8WZ~G8M+Cp#w6O}FffFU4K0u< zq7fBPUQdPFY^#m^A7p#4Tyi!(%`oxJRVl$*ihcxqJO){Yg=Fl-V2nKV_ABehzUxR! z1Q)hLZj&d6%?6#pK5JXb%WBG7_5>P8JyUU1CjSi>mn{+ja`ug3uhqYu#y%*kwj0gk zGeQv^<`h4qAWERoqmnmnwjy0^ez839e(k(=i%tk=)V;1{<84c4Fzy!{M)$hoIpBE0 z&K>HHl?#gt<&qxW%DM;|ODtPn#u1YH^GWFdVfkw`q_mh~cOXzmiHWw?AOE4TgYzqE zfc6uNGVS#Gk#mrhY0A`gfO3g~8`L;5E}-?*NXi!u0Ppbb{+xl$+_`GrK2`m&bd0+C z(NYwN-kf>DFHs{04rDX)_HoX>my$Zs=oy{Oxn4_iJQ)Y=X^!{ z!{WIoGPS4Mc3S?+_F&Y+))l=n&h&w02Ww=gV7mui1>GMHbn; zP#;{C78Q39h<1M``#E-hFeDG(*+h8IV#v!GXeoMUjoY6h-hf!tNufQZFo|jI=o=B#gTAX5Rtn zhm9SqxI*3@I%~bwuEU$t0)k1aTKkjTS-cpJhfq?#Gu&%8&>Z1dqZcP+q?-%$2g$4c-%Kg}H+Tuhsq4!s^Er)j51I1W z|5M~S-WhHnJPs^i_cq&uvw>9CYlq&49r`O^8z*A9gst2;4ysG)&b}k&R@Ll4iBaMAhtd?j z%}cKUayu^7b9{)FK>80m0TFtZNXmw}{zm8G|Jq$Z(E=Rm*A<-YBMJk7@(34{eD!I4 z+|!15ISQZ4AxG_x-*yE1q0EzVrnj)7+&yl$fiewxVr1`bJkdbZdYIw$Afu9&M#9$O z8kYnrc1~m-_WkhU?ax$3Fxu^~5(O0YY4WTO`zzxgDP!dH*8@f3t z86Ss!Oi}Lb_df-n#TXNT&w0DS>>!05BS8JP@xGYy2N_;5^FWONz9one~| zNH~EEd=Gjgmp}`n1_iTt{+4NnRZJ2;Aq=f(G|jl}Bv}a>YN~049e4ybBu_|m7hIA~ z=oGWpRfK^Ydv`w5UESw<6bH@TfW7MX@*M3fJfd}cMgBIhj~AZE66{-`W}PYBJ~B-h zKerSHz_NZv)*jnXlqA7y>v&Nj)6_|4W>Au`3hf^UohQR;r<9Y^nwrd-?dj!JQFXAz zLT0F}YxAF}#~93UgmbhUxd!T>hb9!*y7IBq0N~ex-~ef<&p}Fi?$0~s;}i|NkzJl& zmnpNx!oa2D5b3Tf14mJ|9{BC{weKWwU7xo&_HDdZLi&KI`g@(1StnfCcl^F;g z?^vOHbfP73e+%*>c^KQE)fRcA^3IxnRo(PS_E_BO51B)eQc*BuDmq!*vWsIsW^5b= z-G({|F%AsFvoir#Sy<_l>MKqOv%;Ia7j3I~g^mLHo|ulm)0H!E*!mKax>d$u@&_so zJ}yI^9{nGai4AID zFyjgt0>BXgS;=#}It8&wWgc;UH!GBO`X?sfkSAC)-->miIV9}7mK8o_73s$=VQDo7 zop5%1IMa;%e>y;H-i{aj>Zr*DIwB{f13m1t{m+@q$lW^`j>caSCd#pct%w-cJZV{a z(INU?C3kKVGx!%|%BK476PD-0J)p|9972iLUgovAa+Lorq;C^&nY%hyd7j$N%@FI{MN6HL6mm7-RKKqIY7!9HvvD?5BPtw zs{45T-M;5FM)C~0*>K>O{_z*WQ!Ic=Hl)#AEP3nR!?N;veRDoZIF5%KLnZ_v`)*+hB;( z(JvP42(LnfSdqIxkPn&)^Sp|rmlt}k(hP?ji3AX? zZi~LV;Z%0c>YPG?tYslf?|45-4;WEt@)F--n{$Cwy+YqLlk{N$s=nOpxy;aum%cC_ z?Gl8%P)Mw7f*Z8w>}+|K$RtZIP|75Gk0jUtsQjVmP4{R|Nae351eV-V6cf2ba+xFb zdYPIoA@J&O%9we)7Jr$BUjbr~ALwACW00KF@8PzAj%As?{jt(-0UZM3{q$ulL~g7; z8I;^!SX6XT;+4*VxsAI%gjLVr4x3n4V$dnC(}qdmq(Yz=qi~y=FlM}qU@h+*FAJbK z8Ev^X5^O5K_HGVWSbOgaNDZ+Zt&it~6qt!><9^NB2$otRpHiojC+?L*UYrzu%1!9a zQm<7v-ehK&qkdVEa0^eJb;|~VM2>PNrgW7ZemEFp5l6{h4>TUg<~Nql%8j))c-(Y& zyq6*-O_dwYuuNSOfLpyIT^Q9@tKCJaBXE^3t2 z@9XsU0l+uYnJy)HO7bhCgLvwTp7h1pGkl$V6I=&!&WDy{hK6o_65A6_x#vZ?0=69zi=8SGa$_cIQx4ToCWUuVy6=ICbU2*^v)r zuUQZ?CduMDc6EfP$eWDeBU3(%|3vP+FGvabgYGs2_@iVMwdq~^x%rJw>kq^z>z}sD zpNN>h-{=|9QS#HvhLZ5=G7eK>W6`Yi6;Do&jk!Q86 RJsc2vm?)ejz3zDN3h7Nn>bU>_ literal 0 HcmV?d00001 diff --git a/MikroMaster/20260506/20260506162002-Config.rsc b/MikroMaster/20260506/20260506162002-Config.rsc new file mode 100644 index 0000000..07e78a2 --- /dev/null +++ b/MikroMaster/20260506/20260506162002-Config.rsc @@ -0,0 +1,4677 @@ +# 2026-05-06 16:20:03 by RouterOS 7.22.1 +# software id = A8L5-07YF +# +# model = RB952Ui-5ac2nD +# serial number = D3D50CEDCD38 +/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 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 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 ssid=vados5g +/interface ethernet +set [ find default-name=ether1 ] comment="WAN - Unet" mac-address=\ + 48:8F:5A:8E:1A:C2 name="ether1 - Unet" +set [ find default-name=ether3 ] comment=LEN +set [ find default-name=ether4 ] comment=NUC +set [ find default-name=ether5 ] poe-out=off +/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 wireguard +add listen-port=13231 mtu=1280 name=WG +/disk +add slot=tmpfs tmpfs-max-size=22369621 type=tmpfs +/interface list +add name=WAN +add 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 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=5G-AX disabled=no mode=ap name=5G-AX security=sec5G security.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 ] supplicant-identity=MikroTik +/ip dhcp-server option +add code=12 name=HostName +add code=119 force=yes name=domain-search-list value="0x03'WORKGROUP'0x00" +/ip dhcp-server option sets +add name=HP1505n options=HostName +add name=StartLife1 options=HostName +add name=amsterDev options=HostName +add name=MiTV options=HostName +add name=miller options=HostName +add name=amster options=HostName +add name=garage options=HostName +add name=domain-search-set options=domain-search-list +add name=VADOS-LEN options=HostName +add name=VADOS-NUC options=HostName +add name=MikroNUC options=HostName +add name=master options=HostName +add name=MikroYellow options=HostName +add name="=\"Client ID\"" options=HostName +/ip dns forwarders +add 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 +/ip ipsec proposal +set [ find default=yes ] disabled=yes +/ip pool +add name=dhcp ranges=10.30.30.83-10.30.30.254 +/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 +/system logging action +add email-start-tls=yes email-to=vados@vados.ru name=email target=email +/system script +add dont-require-permissions=no name=fetchCustom owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + /tool/fetch mode=https url=(\$GlobalScriptsUrl . #\".bak/mikro_bak_rsa@10.\ + 30.30.86.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.86.pub\";\ + \n#:local Script AM-setup\ + \n#/system/script/add name=\$Script owner=\$Script source=([ /tool/fetch c\ + heck-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \".r\ + sc\") output=user as-value ]->\"data\");\ + \n#/usb1/mikro_bak_rsa.pub\ + \n\ + \n#\ + \n#/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@1\ + 0.30.30.10.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.10.pub\";\ + \n#\ + \n#root.mnuc.backuper\ + \n\ + \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\";\ + \n#:local Script AM-GlobalConfig;\ + \n#/system/script/add name=\$Script owner=\$Script source=([ /tool/fetch c\ + heck-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \".r\ + sc\") output=user as-value ]->\"data\");\ + \n#/usb1/mikro_bak_rsa.pub\ + \n#:local FetchFile AM-DOHCert.rsc\ + \n\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/tmp/\";\ + \n:global MkDir;\ + \n\ + \n:local FetchFile Binary.backup\ + \n:local localDir \"\";\ + \n\ + \n#\$MkDir \$localDir;\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \$FetchFile) dst-path=(\ + \$localDir . \$FetchFile);" +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 comment="Certificates CloudFlare, Quad9 " dont-require-permissions=no \ + name=Update-Certificates owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_CloudFlare\r\ + \n#/tool/fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobalR\ + ootCA.crt.pem;\r\ + \n#/certificate/import file-name=DigiCertGlobalRootCA.crt.pem passphrase=\ + \"\";\r\ + \n#/tool/ fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobal\ + G2TLSRSASHA2562020CA1-1.crt.pem;\r\ + \n#/certificate/import file-name=DigiCertGlobalG2TLSRSASHA2562020CA1-1.crt\ + .pem passphrase=\"\";\r\ + \n# Quad9\r\ + \n#/tool/fetch mode=https url=\"https://cacerts.digicert.com/DigiCertGloba\ + lG3TLSECCSHA3842020CA1-1.crt.pem\"\r\ + \n#/certificate/import file-name=DigiCertGlobalG3TLSECCSHA3842020CA1-1.crt\ + .pem passphrase=\"\";\r\ + \n\r\ + \n:global GlobalScriptsUrl;\r\ + \n#google\r\ + \n:local CertName \"DigiCert-Global-Root-CA.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-CA\" [ find where common-na\ + me=\"DigiCert Global Root CA\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-CA.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-CA\" [ find where commo\ + n-name=\"DigiCert Assured ID Root CA\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-G2\" [ find where commo\ + n-name=\"DigiCert Assured ID Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-G3.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-G3\" [ find where commo\ + n-name=\"DigiCert Assured ID Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-G2-TLS-RSA-SHA256-2020-CA1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-G2-TLS-RSA-SHA256-2020-CA1\" [ f\ + ind where common-name=\"DigiCert Global G2 TLS RSA SHA256 2020 CA1\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-G3-TLS-ECC-SHA384-2020-CA1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-G3-TLS-ECC-SHA384-2020-CA1\" [ f\ + ind where common-name=\"DigiCert Global G3 TLS ECC SHA384 2020 CA1\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-Root-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-G2\" [ find where common-na\ + me=\"DigiCert Global Root G2\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-Root-G3.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-G3\" [ find where common-na\ + me=\"DigiCert Global Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-TLS-ECC-P384-Root-G5.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-TLS-ECC-P384-Root-G5\" [ find where com\ + mon-name=\"DigiCert TLS ECC P384 Root G5\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-TLS-RSA4096-Root-G5.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-TLS-RSA4096-Root-G5\" [ find where comm\ + on-name=\"DigiCert TLS RSA4096 Root G5\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Trusted-Root-G4.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Trusted-Root-G4\" [ find where common-n\ + ame=\"DigiCert Trusted Root G4\" ];\r\ + \n\r\ + \n:set CertName \"GTS-Root-R4.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"GTS-Root-R4\" [ find where common-name=\"GTS Roo\ + t R4\" ];\r\ + \n\r\ + \n:set CertName \"Go-Daddy-Root-Certificate-Authority-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Go-Daddy-Root-Certificate-Authority-G2\" [ find \ + where common-name=\"Go Daddy Root Certificate Authority - G2\" ];\r\ + \n\r\ + \n:set CertName \"ISRG-Root-X1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"ISRG-Root-X1\" [ find where common-name=\"ISRG R\ + oot X1\" ];\r\ + \n\r\ + \n:set CertName \"Root-YE.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Root-YE\" [ find where common-name=\"Root YE\" ]\ + ;\r\ + \n\r\ + \n:set CertName \"Starfield-Root-Certificate-Authority-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Starfield-Root-Certificate-Authority-G2\" [ find\ + \_where common-name=\"Starfield Root Certificate Authority - G2\" ];\r\ + \n\r\ + \n:set CertName \"USERTrust-RSA-Certification-Authority.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"USERTrust-RSA-Certification-Authority\" [ find w\ + here common-name=\"USERTrust RSA Certification Authority\" ];\r\ + \n\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"GTS-Root-RX.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#internet\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"ISRG-Root-X2.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n\r\ + \n\r\ + \n#/ip/dns/set allow-remote-requests=yes doh-max-concurrent-queries=100 do\ + h-max-server-connections=20 use-doh-server=https://security.cloudflare-dns\ + .com/dns-query verify-doh-cert=yes;\r\ + \n#/ip/dns/static remove [find where address=1.1.1.1];\r\ + \n#/ip/dns/static add address=1.1.1.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 1\";\r\ + \n#/ip/dns/ static remove [find where address=1.0.0.1];\r\ + \n#/ip/dns/static add address=1.0.0.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 2\"\r\ + \n#/ip dns static add address=2606:4700:4700::1111 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip dns static add address=2606:4700:4700::1001 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip/dns set servers=\"1.0.0.1, 8.8.4.4\";\r\ + \n#/ip/dns set servers=\"\";" +add dont-require-permissions=no name=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 false;\r\ + \n\r\ + \n{\r\ + \n :local RmMe [:tobool \$1];\r\ + \n\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SetupScript;\r\ + \n :global RemoveMe;\r\ + \n :global InitSetup;\r\ + \n :global tmpfs;\r\ + \n \r\ + \n :local 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 ([ :len [ /certificate/find where fingerprint=\$CertFingerprint ] \ + ] != 1) do={\r\ + \n :error \"Something is wrong with your certificates!\";\r\ + \n } else={\r\ + \n :if (!(((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" ||\ + \_\\\r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \"fetch\" || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\r\ + \n [ :len [ /certificate/builtin/find where common-name=\$CertComm\ + onName ] ] > 0)) do={\r\ + \n :put \"Importing certificate...\";\r\ + \n /tool/fetch (\$GlobalScriptsUrl . \"certs/ipall/\" . \$CertFileN\ + ame) dst-path=\$CertFileName as-value;\r\ + \n :delay 1s;\r\ + \n /certificate/import file-name=\$CertFileName passphrase=\"\";\r\ + \n :delay 1s;\r\ + \n };\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 comment="Global Config Script" dont-require-permissions=no name=\ + AM-GlobalConfig owner=AM-GlobalConfig policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GlobalConfig\r\ + \n# Script comment: Global Config Script\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# Warning: Dont touch this line!\r\ + \n:global Identity [ /system identity get name ];\r\ + \n:global GlobalConfReady false;\r\ + \n#\r\ + \n#\r\ + \n# Global Url For Amster scripts to fetch\r\ + \n# most be defined in AM-Init-Script or AM-setup scripts\r\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n:global ScriptsUrlSuffix \"\";\r\ + \n:global CheckSumsVerify true;\r\ + \n\r\ + \n:global ScriptUpdatesCRLF true;\r\ + \n:global CommentsInScripts true;\r\ + \n\r\ + \n# Debug output:\r\ + \n:global PrintDebug true; #false;\r\ + \n\r\ + \n# Debug output for specific script:\r\ + \n#:set (\$PrintDebugOverride->\"AM-GlobalFunc\") true;\r\ + \n\r\ + \n# Debug logs\r\ + \n# Other actions (disk, email, remote or support) can be used as well.\r\ + \n# I do not recommend using echo - use debug output instead (https://rsc.\ + eworm.de/main/DEBUG.html#debug-output).\r\ + \n#/system/logging/add topics=script,debug action=memory;\r\ + \n\r\ + \n:global MikrotikUpgradeUrl \"https://upgrade.mikrotik.com/routeros\";\r\ + \n:global Domain \"WORKGROUP\";\r\ + \n\r\ + \n:global EmailGeneralTo \"vados@vados.ru\";\r\ + \n#:global EmailGeneralCc \"\";\r\ + \n\r\ + \n# \$ScriptInstallUpdate mod/notification-telegram\r\ + \n:global TelegramTokenId \"8390868324:AAG3_d1hfVR2M6pGAgDK6ZvhOe4J97nyopw\ + \";\r\ + \n:global TelegramChatId \"-1003631309063\"; #\"454403445\";\r\ + \n# Use this to send notifications to a specific topic in group.\r\ + \n#:global TelegramThreadId \"30\";\r\ + \n# Using telegram-chat you have to define trusted chat ids (not group ids\ + !)\r\ + \n# or user names. Groups allow to chat with devices simultaneously.\r\ + \n:global TelegramChatIdsTrusted {\r\ + \n \"454403445\"\r\ + \n \"-1003631309063\"\r\ + \n \"-5124482807\"\r\ + \n \"1087968824\";\r\ + \n};\r\ + \n# \"-5294757340\";\r\ + \n\r\ + \n:global TelegramChatGroups \"(all)\";\r\ + \n#:global TelegramChatGroups \"(all|home|office)\";\r\ + \n\r\ + \n:global NotificationFunctions {\r\ + \n \"email\"\r\ + \n \"telegram\";\r\ + \n};\r\ + \n# Toggle this to disable symbols in notifications.\r\ + \n:global NotificationsWithSymbols true;\r\ + \n:global TerminalColorOutput true;\r\ + \n\r\ + \n:global DetectIpAddrDefault \"https://ipv4.mikrotik.ovh/\";\r\ + \n:global DetectIpAddrFallback \"https://api.ipify.org/\";\r\ + \n\r\ + \n## Update channel. Possible values: stable, long-term, testing, developm\ + ent\r\ + \n:global updateChannel \"stable\";\r\ + \n\r\ + \n:global CertRenewUrl (\$GlobalScriptsUrl . \"certs/\" . \$Identity . \"/\ + \");\r\ + \n:global CertRenewTime 2w;\r\ + \n:global CertRenewPass {\r\ + \n \"\";\r\ + \n# \"v3ry-s3cr3t\";\r\ + \n# \"4n0th3r-s3cr3t\";\r\ + \n};\r\ + \n:global CertWarnTime 1w;\r\ + \n:global CertIssuedExportPass {\r\ + \n \"\";\r\ + \n# \"cert1-cn\"=\"v3ry-s3cr3t\";\r\ + \n# \"cert2-cn\"=\"4n0th3r-s3cr3t\";\r\ + \n};\r\ + \n\r\ + \n# Script BackupAndUpdate mode, possible values: backup,\r\ + \n# updateOnce - Update once as \"osnotify\" and back \"osnotify\" mode (i\ + n terminal run :set OSUpdateMode updateOnce; \$OSUpdateMode;). \r\ + \n# osupdate - Update if available and creates backups before/after update\ + \_(ignores `forceBackup`)\r\ + \n# Set `forceBackup` to true to always create backups, even\ + \_without updates\r\ + \n# osnotify - Set `forceBackup` to always create backups on every run\r\ + \n:global DevInfoIncludeIP true;\r\ + \n:global BackupAndUpdateMode \"osnotify\"\r\ + \n\r\ + \n:global forceBackup true;\r\ + \n:global BackupPassword \"Peskar55\";\r\ + \n\r\ + \n# SFTP Backup Variables\r\ + \n:global BackupRandomDelay 0;\r\ + \n:global BackupUploadUrl \"sftp://amster.vados.ru/upload/\";\r\ + \n:global BackupUploadUser \$Identity;\r\ + \n:global BackupUploadPass \"root.mnuc.backuper\";\r\ + \n\r\ + \n:global BackupSendBinary true;\r\ + \n:global BackupSendExport true;\r\ + \n:global BackupSendGlobalConfig true;\r\ + \n:global BackupSendScripts true;\r\ + \n\r\ + \n# Remove local file after uploading if no errors\r\ + \n:global BackupRmLocal true;\r\ + \n\r\ + \n# Local Backups Root Directory \r\ + \n:global BackupLocalRoot \"tmpfs\";\r\ + \n\r\ + \n# Encrypt Backup\r\ + \n:global BackupEncrypt true;\r\ + \n\r\ + \n# Sensitive information in Backups\r\ + \n:global BackupSens true;\r\ + \n\r\ + \n# User Export\r\ + \n:global BackupUser true;\r\ + \n\r\ + \n# License Export (not for CHR, will silently skip)\r\ + \n:global BackupLicense false;\r\ + \n\r\ + \n# SSH Keys\r\ + \n:global BackupSshKeys true;\r\ + \n\r\ + \n# Certificate Export\r\ + \n:global BackupCerts true;\r\ + \n\r\ + \n# Certificate Password\r\ + \n:global BackupCertsPasswd \"\";\r\ + \n\r\ + \n# User-Manager Export\r\ + \n:global BackupUserMan false;\r\ + \n\r\ + \n# The Dude Export\r\ + \n:global BackupDude false;\r\ + \n\r\ + \n# User Files to export, comma-separated string or array of strings\r\ + \n# User Files are not removed on backup\r\ + \n# Any directory paths will be removed (/ -> _) on remote file\r\ + \n# Nonpresent files are silently skipped\r\ + \n:global BackupUserList \"autosupout.rif,autosupout.old.rif\";\r\ + \n\r\ + \n# load functions and any custom scripts\r\ + \n# [ /system/script/find where name=\"global-config-ov\ + erlay\" ], \\\r\ + \n# [ /system/script/find where name~\"^global-config-o\ + verlay\\\\.d/.\" ]\r\ + \n#\r\ + \n#:foreach Script in=([ /system/script/find where name=\"Amster-TGglobalV\ + ars\" ], [ /system/script/find where name=\"Amster-TGglobalFunc\" ]) do={\ + \r\ + \n# :onerror Err {\r\ + \n# /system/script/run \$Script;\r\ + \n# } do={\r\ + \n# :log error (\"Loading configuration from configs and functions\"\ + \_. [ /system/script/get \$Script name ] . \" failed: \" . \$Err);\r\ + \n# }\r\ + \n#}\r\ + \n#:log info \"\\ndevMode = \$devMode\";\r\ + \n#:log info \"\\ndevRunning = \$devRunning\";\r\ + \n:foreach Script in=[ /system/script/find where source~\"^#!rsc by Vados \ + GlobalRUN\\r\?\\n\" ] do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n :log error (\"Run script \" . [ /system/script/get \$Script name \ + ] . \" width marker \\\" GlobalRUN\\\" failed: \" . \$Err);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# signal we are ready\r\ + \n:set GlobalConfReady true;\r\ + \n:while (\$GlobalConfReady != true) do={:delay 500ms};\r\ + \n" +add comment="Global functions" dont-require-permissions=no name=AM-GlobalFunc \ + owner=AM-GlobalFunc policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GglobalFunc\r\ + \n# Script comment: Global functions\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch, scheduler\r\ + \n:local ExitOK false;\r\ + \n:local ScriptName [ :jobname ];\r\ + \n#:global checkRunJob \$SriptName;\r\ + \n#:global fixCRLF;\r\ + \n#:if (\$fixCRLF != false) do={\r\ + \n#:foreach fixScript in=([ /system/script/find where name~\"*\" ]) do={/s\ + ystem/script/set source=[ :tocrlf [ get \$fixScript source ] ] \$fixScript\ + }\r\ + \n#:if (\$fixCRLF != \"LF\") do={ /system/script/set source=[ :tocrlf [ g\ + et \$fixScript source ] ] \$fixScript};};\r\ + \n#}\r\ + \n:global GlobalFuncReady false;\r\ + \n\r\ + \n# Git commit id & info, expected configuration version\r\ + \n:global CommitId \"main/614/a7992fc8\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 01:00:03 05.05.2026.\";\r\ + \n\r\ + \n# The variables are received right here.\r\ + \n:global GlobalConfVersion 140;\r\ + \n\r\ + \n:global SumsDirAndFileName \"tmp/checksums.json\";\r\ + \n\r\ + \n:global Identity [/system/identity/get name];\r\ + \n:global IdentityShort [:pick \$Identity 0 18];\r\ + \n\r\ + \n:global devBoardName [/system/resource/get board-name];\r\ + \n:global devMode [/system/device-mode/get mode];\r\ + \n:global devCurArch [/system/resource/get architecture-name];\r\ + \n:global devCurVersion [/system/resource/get version];\r\ + \n\r\ + \n# Variables defined in AM-GlobalConfig.rsc\r\ + \n:global TerminalColorOutput;\r\ + \n:global CommentsInScripts;\r\ + \n:global DetectIpAddrDefault;\r\ + \n:global DetectIpAddrFallback;\r\ + \n:global updateChannel;\r\ + \n:global Domain;\r\ + \n:global EmailGeneralTo;\r\ + \n:global BackupAndUpdateMode;\r\ + \n\r\ + \n# Single functions, without nested functions.\r\ + \n:global MiniDateTimeStamp;\r\ + \n:global MicroDateTimeStamp;\r\ + \n\r\ + \n# Include globals \$PrintDebug and \$PrintDebugOverride\r\ + \n:global LogPrint;\r\ + \n\r\ + \n# DeviceInfo and Updates\r\ + \n:global IsCheckUpdates;\r\ + \n:global WaitCheckUpdates;\r\ + \n:global GetPubIp;\r\ + \n\r\ + \n:global GetArrDeviceInfo;\r\ + \n:global WaitArrDeviceInfo;\r\ + \n\r\ + \n:global devModel;\r\ + \n:global devRunningMode;\r\ + \n\r\ + \n:global devRbRevision;\r\ + \n:global devRbSerialNumber;\r\ + \n:global devRbVerAvail;\r\ + \n\r\ + \n:global runningChannelVersion;\r\ + \n:global runningChannel;\r\ + \n:global runningVersion;\r\ + \n\r\ + \n:global devBuildTime;\r\ + \n:global ROsVerAvail;\r\ + \n:global PkgUpdStatus;\r\ + \n:global currentUpdateChannel;\r\ + \n\r\ + \n:global ScriptInstallUpdate;\r\ + \n\r\ + \n:global DeviceInfo;\r\ + \n\r\ + \n:global OldMode;\r\ + \n\r\ + \n:global ParseKeyValueStore;\r\ + \n:global RandomDelay;\r\ + \n:global GetRandomNumber;\r\ + \n:global EscapeForRegEx;\r\ + \n:global CharacterMultiply;\r\ + \n:global CharacterReplace;\r\ + \n:global CleanFilePath;\r\ + \n:global CleanName;\r\ + \n\r\ + \n:global CommitBrief;\r\ + \n\r\ + \n:global EitherOr;\r\ + \n:global FormatLine;\r\ + \n:global GetRandom20CharAlNum;\r\ + \n:global GetRandom20CharHex;\r\ + \n:global GetRandomNumber;\r\ + \n:global Grep;\r\ + \n:global IfThenElse;\r\ + \n:global MAX;\r\ + \n:global MIN;\r\ + \n:global HumanReadableNum;\r\ + \n\r\ + \n:global IsFullyConnected;\r\ + \n:global IsDNSResolving;\r\ + \n:global IsTimeSync;\r\ + \n:global IsTimeSyncCached;\r\ + \n:global IsTimeSyncResetNtp;\r\ + \n\r\ + \n:global 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 ExitError;\r\ + \n:global ExitOnError;\r\ + \n\r\ + \n:global FetchHugeFiles;\r\ + \n:global FetchUserAgentStr;\r\ + \n:global FileExists;\r\ + \n:global CertificateAvailable;\r\ + \n:global CertificateDownload;\r\ + \n:global CertificateNameByCN;\r\ + \n:global CharacterMultiply;\r\ + \n\r\ + \n:global InspectVar;\r\ + \n:global InspectVarRet;\r\ + \n:global ParseCustom;\r\ + \n\r\ + \n:set IsCheckUpdates do={\r\ + \n :local isInfo [:tobool \$1];\r\ + \n :global updateChannel;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n :log info (\$0 . \" \\\$isInfo = \" . \$isInfo); \r\ + \n :local CurrentChannel [ /system/package/update/get channel ];\r\ + \n :if ([ :len \$updateChannel ] > 0 && \$CurrentChannel != \$updateChann\ + el) do={\r\ + \n :retry command={/system/package/update set channel=\$updateChannel} \ + \_delay=300ms max=5 on-error={};\r\ + \n :log info (\$0 . \" Set updates channel to: \$updateChannel\");\r\ + \n }\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local Channel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set currentUpdateChannel \$Channel;\r\ + \n :log info (\$0 . \" Update Channel: \" . \$Channel . \".\");\r\ + \n :local StatusPkg \"undefined\";\r\ + \n :log info (\$0 . \" Checking for updates...\");\r\ + \n :retry command={:set \$StatusPkg ([/system/package/update/check-for-up\ + dates without-paging as-value]->\"status\")} \\\r\ + \n delay=300ms max=5 on-error={};\r\ + \n :log info (\$0 . \" \\\$StatusPkg = \" . \$StatusPkg);\r\ + \n :if (\$StatusPkg = \"New version is available\") do={ :set PkgUpdStatu\ + s true; } else={ :set PkgUpdStatus false; }\r\ + \n :set ROsVerAvail [ :tostr [ /system/package/update/get latest-version \ + ] ];\r\ + \n :log info (\$0 . \" \\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if (\$isInfo != false || \$PkgUpdStatus = true) do={\r\ + \n :log info (\$0 . \" \\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :retry command={:set (\$arrDeviceInfo->\"devUpdates\") [ /system/pac\ + kage/update/get ]} delay=500ms max=5 on-error={:log error (\"Error\")};\r\ + \n :return true;\r\ + \n } else={\r\ + \n :return \$PkgUpdStatus;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set WaitCheckUpdates do={\r\ + \n :global IsCheckUpdates;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n :local Status \"\";\r\ + \n :local Update;\r\ + \n :local WaitCount 0;\r\ + \n :if ([ \$IsCheckUpdates true ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n :while ((\$Status = \"\" || \$Status = \"finding out latest version...\ + \") && \$WaitCount < 60) do={\r\ + \n :delay 1s;\r\ + \n :set WaitCount (\$WaitCount + 1);\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n }\r\ + \n :set Update [ /system/package/update/get ];\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n :if ((\$Update->\"status\") = \"New version is available\") do={\r\ + \n :set PkgUpdStatus true;\r\ + \n } else={\r\ + \n :set PkgUpdStatus false;\r\ + \n }\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :set (\$arrDeviceInfo->\"devUpdates\") \$Update;\r\ + \n :if (\$Status = \"\" || \$Status = \"finding out latest version...\") \ + do={\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set WaitArrDeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :while ([ \$GetArrDeviceInfo ] = false) do={\r\ + \n :delay 1s;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set GetArrDeviceInfo do={\r\ + \n :global LogPrint;\r\ + \n :global arrDeviceInfo;\r\ + \n :global devBoardName;\r\ + \n :global devModel;\r\ + \n :global devRunning;\r\ + \n :global devCurArch;\r\ + \n :global devRbRevision;\r\ + \n :global devRbSerialNumber;\r\ + \n :global devBuildTime;\r\ + \n :global runningChannelVersion;\r\ + \n :global runningChannel;\r\ + \n :global runningVersion;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n\r\ + \n :local DeviceInfo;\r\ + \n :local Resource [/system/resource/get];\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local VersionString [ :tostr (\$Resource->\"version\") ];\r\ + \n :local ChannelStart [ :find \$VersionString \" (\" ];\r\ + \n :local RouterBoard;\r\ + \n :local IsRouterBoard false;\r\ + \n :local RunningMode \"\";\r\ + \n\r\ + \n :set devCurArch [ :tostr (\$Resource->\"architecture-name\") ];\r\ + \n :set devBuildTime [ :tostr (\$Resource->\"build-time\") ];\r\ + \n :set runningChannelVersion \$VersionString;\r\ + \n :set runningVersion \$VersionString;\r\ + \n :set runningChannel \"\";\r\ + \n\r\ + \n :if ([ :typeof \$ChannelStart ] = \"num\" && \$ChannelStart >= 0) do=\ + {\r\ + \n :set runningVersion [ :pick \$VersionString 0 \$ChannelStart ];\r\ + \n :local ChannelRest [ :pick \$VersionString (\$ChannelStart + 2) [ :\ + len \$VersionString ] ];\r\ + \n :local ChannelEnd [ :find \$ChannelRest \")\" ];\r\ + \n :if ([ :typeof \$ChannelEnd ] = \"num\" && \$ChannelEnd >= 0) do={\ + \r\ + \n :set runningChannel [ :pick \$ChannelRest 0 \$ChannelEnd ];\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([:pick \$devBoardName 0 3] != \"CHR\" or [:pick \$devBoardName 0\ + \_3] != \"x86\") do={\r\ + \n :do {\r\ + \n :set RouterBoard [[ :parse \"/system/routerboard/get\" ]];\r\ + \n# :set RouterBoard [ /system/routerboard/get ];\r\ + \n :if ((\$RouterBoard->\"routerboard\") = true) do={\r\ + \n :set IsRouterBoard true;\r\ + \n }\r\ + \n } on-error={}\r\ + \n }\r\ + \n\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get mode ];\r\ + \n } on-error={\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get running ];\r\ + \n } on-error={\r\ + \n :set RunningMode \"\";\r\ + \n }\r\ + \n }\r\ + \n :set devRunning \$RunningMode;\r\ + \n\r\ + \n :if (\$IsRouterBoard = true) do={\r\ + \n :set devModel [ :tostr (\$RouterBoard->\"model\") ];\r\ + \n :set devRbRevision [ :tostr (\$RouterBoard->\"revision\") ];\r\ + \n :set devRbSerialNumber [ :tostr (\$RouterBoard->\"serial-number\") \ + ];\r\ + \n } else={\r\ + \n :set devModel \$devBoardName;\r\ + \n :set devRbRevision \"\";\r\ + \n :set devRbSerialNumber \"\";\r\ + \n }\r\ + \n\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n\r\ + \n :set (\$DeviceInfo->\"board-name\") \$devBoardName;\r\ + \n :set (\$DeviceInfo->\"architecture-name\") \$devCurArch;\r\ + \n :set (\$DeviceInfo->\"model\") \$devModel;\r\ + \n :set (\$DeviceInfo->\"revision\") \$devRbRevision;\r\ + \n :set (\$DeviceInfo->\"serial-number\") \$devRbSerialNumber;\r\ + \n :set (\$DeviceInfo->\"running-mode\") \$devRunning;\r\ + \n :set (\$DeviceInfo->\"build-time\") \$devBuildTime;\r\ + \n :set (\$DeviceInfo->\"running-channel-version\") \$runningChannelVers\ + ion;\r\ + \n :set (\$DeviceInfo->\"running-version\") \$runningVersion;\r\ + \n :set (\$DeviceInfo->\"running-channel\") \$runningChannel;\r\ + \n :set (\$DeviceInfo->\"routerboard\") \$IsRouterBoard;\r\ + \n :set (\$DeviceInfo->\"current-firmware\") [ :tostr (\$RouterBoard->\"\ + current-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"upgrade-firmware\") [ :tostr (\$RouterBoard->\"\ + upgrade-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"package-channel\") \$currentUpdateChannel;\r\ + \n :set (\$DeviceInfo->\"installed-version\") [ :tostr (\$Update->\"inst\ + alled-version\") ];\r\ + \n :set (\$DeviceInfo->\"latest-version\") \$ROsVerAvail;\r\ + \n :set (\$DeviceInfo->\"update-status\") [ :tostr (\$Update->\"status\"\ + ) ];\r\ + \n\r\ + \n :set arrDeviceInfo \$DeviceInfo;\r\ + \n :return \$DeviceInfo;\r\ + \n}\r\ + \n\r\ + \n:set DeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global IfThenElse;\r\ + \n :global FormatLine;\r\ + \n :global CommitBrief;\r\ + \n\r\ + \n :local License [/system/license/get];\r\ + \n :local Snmp [ /snmp/get ];\r\ + \n :local Info [ \$GetArrDeviceInfo ];\r\ + \n\r\ + \n :if ([ :typeof \$Info ] != \"array\") do={\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :return ( \\\r\ + \n [ \$FormatLine \"Hostname\" \$Identity ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"location\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Location\" (\$Snmp->\"location\") ] . \"\\n\") ]\ + \_. \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"contact\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Contact\" (\$Snmp->\"contact\") ] . \"\\n\") ] .\ + \_\\\r\ + \n \"Hardware:\\n\" . \\\r\ + \n [ \$FormatLine \" Board\" (\$Info->\"board-name\") ] . \"\\n\" . \ + \\\r\ + \n [ \$FormatLine \" Arch\" (\$Info->\"architecture-name\") ] . \"\\\ + n\" . \\\r\ + \n [ \$FormatLine \" Model\" (\$Info->\"model\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"revision\") ] > 0) \\\r\ + \n (\" \" . (\$Info->\"revision\")) ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"serial-number\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Serial\" (\$Info->\"serial-number\") ] . \"\ + \\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"nlevel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"nlevel\ + \")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS:\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"level\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"level\ + \")) ] . \"\\n\") ] . \\\r\ + \n [ \$FormatLine \" Channel\" (\$Info->\"package-channel\") ] . \"\ + \\n\" . \\\r\ + \n [ \$FormatLine \" Installed\" (\$Info->\"installed-version\") ] .\ + \_\"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"running-channel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Running\" ((\$Info->\"running-version\") . \ + \" (\" . (\$Info->\"running-channel\") . \")\") ] . \"\\n\") \\\r\ + \n ([ \$FormatLine \" Running\" (\$Info->\"running-version\") ] . \ + \"\\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"latest-version\") ] > 0 && \\\r\ + \n (\$Info->\"installed-version\") != (\$Info->\"latest-version\"))\ + \_\\\r\ + \n ([ \$FormatLine \" Available\" (\$Info->\"latest-version\") ] .\ + \_\"\\n\") ] . \\\r\ + \n [ \$IfThenElse ((\$Info->\"routerboard\") = true && \\\r\ + \n (\$Info->\"current-firmware\") != (\$Info->\"upgrade-firmware\")\ + ) \\\r\ + \n ([ \$FormatLine \" Firmware\" ((\$Info->\"current-firmware\") .\ + \_\" -> \" . (\$Info->\"upgrade-firmware\")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS-Scripts:\\n\" . \\\r\ + \n [ \$FormatLine \" Commit\" [ \$CommitBrief ] ] . \"\\n\" . \\\r\ + \n [ \$FormatLine \" Version\" \$GlobalConfVersion ]);\r\ + \n}\r\ + \n\r\ + \n:if ([ :typeof \$NotificationFunctions ] != \"array\") do={:set Notifica\ + tionFunctions ({})}\r\ + \n\r\ + \n:set GetRandom20CharAlNum do={\r\ + \n :global EitherOr;\r\ + \n :return [ :rndstr length=[ \$EitherOr [ :tonum \$1 ] 20 ] from=\"ABCDE\ + FGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\" ];\r\ + \n}\r\ + \n\r\ + \n:set GetRandom20CharHex do={:global EitherOr; :return [ :rndstr length=[\ + \_\$EitherOr [ :tonum \$1 ] 20 ] from=\"0123456789abcdef\" ]; }\r\ + \n:set GetRandomNumber do={:global EitherOr; :return [ :rndnum from=0 to=[\ + \_\$EitherOr [ :tonum \$1 ] 4294967295 ] ]; }\r\ + \n\r\ + \n:global checkRunJob;\r\ + \n:set checkRunJob do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLock; \r\ + \n :if ([ \$ScriptLock \$Script ] = false) do={:return false}\r\ + \n :foreach Job in=[ /system/script/job/find where script=\$Script ] do={\ + :set Job [ /system/script/job/get \$Job ];\r\ + \n :while ([ :typeof (\$Job->\"parent\") ] = \"id\") do={:set Job [ /sy\ + stem/script/job/get [ find where .id=(\$Job->\"parent\") ] ]}\r\ + \n :if ((\$Job->\"type\") = \"login\") do={:return true};}; :return fa\ + lse; \r\ + \n}\r\ + \n\r\ + \n:set InspectVar do={\r\ + \n :global InspectVarRet;\r\ + \n :put [ :tocrlf [ \$InspectVarRet \$1 ] ];\r\ + \n}\r\ + \n\r\ + \n:set CommitBrief do={\r\ + \n :global CommitId;\r\ + \n :global CommitInfo;\r\ + \n :if (\$CommitId = \"unknown\") do={\r\ + \n :return \"unknown\";\r\ + \n }\r\ + \n :return (\$CommitInfo . \"/\" . [ :pick \$CommitId 0 8 ]);\r\ + \n}\r\ + \n\r\ + \n:set InspectVarRet do={\r\ + \n :local Input \$1;\r\ + \n :local Level (0 + [ :tonum \$2 ]);\r\ + \n :global CharacterReplace;\r\ + \n :global IfThenElse;\r\ + \n :global InspectVarRet;\r\ + \n :local IndentReturn do={\r\ + \n :local Prefix [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Level [ :tonum \$3 ];\r\ + \n :global CharacterMultiply;\r\ + \n :return ([ \$CharacterMultiply \" \" (\$Level * 2) ] . \"-\" . \$Pre\ + fix . \"-> \" . \$Value);\r\ + \n }\r\ + \n :local TypeOf [ :typeof \$Input ];\r\ + \n :local Len [ :len \$Input ];\r\ + \n :local Return [ \$IndentReturn \"type\" \$TypeOf \$Level ];\r\ + \n :if (\$TypeOf = \"array\") do={\r\ + \n :foreach Key,Value in=\$Input do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"key\" \$Key (\$Level + 1) ] . \"\\n\" . \\\r\ + \n [ \$InspectVarRet \$Value (\$Level + 2) ]);\r\ + \n }\r\ + \n } else={\r\ + \n :if (\$TypeOf = \"str\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"len\" \$Len \$Level ]);\r\ + \n :if ([ :typeof [ :find \$Input (\"\\r\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\r\") \"\" ];\r\ + \n }\r\ + \n :if ([ :typeof [ :find \$Input (\"\\n\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\n\") \" \" ];\r\ + \n }\r\ + \n }\r\ + \n :if (\$TypeOf != \"nothing\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"value\" [ \$IfThenElse ([ :len \$Input ] > 80)\ + \_\\\r\ + \n ([ :pick \$Input 0 77 ] . \"...\") \$Input ] \$Level ]);\r\ + \n }\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set GetPubIp do={\r\ + \n :global DetectIpAddrDefault;\r\ + \n :global DetectIpAddrFallback;\r\ + \n\r\ + \n :local PubIpAddr false;\r\ + \n :local Url \$DetectIpAddrDefault;\r\ + \n :local JobName [ :jobname ];\r\ + \n\r\ + \n :do {\r\ + \n :log debug (\$0 . \" Trying to detect public IP using default serv\ + ice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=50ms max=5 on-error={:log error (\$JobName . \" Failed to \ + detect public IP using default service: \" . \$Url . \".\")}\r\ + \n } on-error={\r\ + \n :log error (\$0 . \" Failed to detect public IP using default serv\ + ice: \" . \$Url . \".\");\r\ + \n :set Url \$DetectIpAddrFallBack;\r\ + \n :log debug (\$0 . \" Trying to detect public IP using fallback ser\ + vice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=200ms max=5 on-error={:log error (\$JobName . \" Failed to\ + \_detect public IP using fallback service: \" . \$Url . \".\")}\r\ + \n };\r\ + \n :local IpLen ([ :len \$PubIpAddr ] -1);\r\ + \n :if (\$PubIpAddr = false) do={:set PubIpAddr \"not-detected\"} else=\ + {:set PubIpAddr [:pick \$PubIpAddr 0 \$IpLen]}\r\ + \n :return \$PubIpAddr;\r\ + \n}\r\ + \n\r\ + \n:set FormatLine do={\r\ + \n :local Key [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Indent [ :tonum \$3 ];\r\ + \n :local Spaces;\r\ + \n :local Return \"\";\r\ + \n :global CharacterMultiply;\r\ + \n :global EitherOr;\r\ + \n :set Indent [ \$EitherOr \$Indent 16 ];\r\ + \n :local Spaces [ \$CharacterMultiply \" \" \$Indent ];\r\ + \n :if ([ :len \$Key ] > 0) do={ :set Return (\$Key . \":\")}\r\ + \n :if ([ :len \$Key ] > (\$Indent - 2)) do={:set Return (\$Return . \"\\\ + n\" . [ :pick \$Spaces 0 \$Indent ] . \$Value);\r\ + \n } else={:set Return (\$Return . [ :pick \$Spaces 0 (\$Indent - [ :len \ + \$Return ]) ] . \$Value)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ParseCustom do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Start [:find [ \$Str ] [:tostr \$2]];\r\ + \n :local End [ :tostr \$3 ];\r\ + \n :local Num [ :tonum \$4 ];\r\ + \n :local Return;\r\ + \n :if ([:len \$Num] = 0) do={:set Num \"0\"}\r\ + \n :local rest [:pick \$Str (\$Start+\$Num) [:len \$Str]]; \r\ + \n :if ([:len \$End ] = 0) do={:set Return [:pick \$Str \$Num \$Start]} e\ + lse={\r\ + \n :set End [:find \$rest \$End];\r\ + \n :set Return [:pick \$rest 0 \$End];\r\ + \n }\r\ + \n:return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set LogPrint do={\r\ + \n :local Severity [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Message [ :tostr \$3 ];\r\ + \n :global PrintDebug;\r\ + \n :global PrintDebugOverride;\r\ + \n :global EitherOr;\r\ + \n :local Debug [ \$EitherOr (\$PrintDebugOverride->\$Name) \$PrintDebug \ + ];\r\ + \n :local PrintSeverity do={\r\ + \n :global TerminalColorOutput;\r\ + \n :if (\$TerminalColorOutput != true) do={:return \$1}\r\ + \n :local Color { debug=96; info=97; warning=93; error=91 };\r\ + \n :return (\"\\1B[\" . \$Color->\$1 . \"m\" . \$1 . \"\\1B[0m\");\r\ + \n}\r\ + \n :local Log ([ \$EitherOr \$Name \"\" ] . \": \" . \$Message);\ + \r\ + \n :if (\$Severity ~ (\"^(custom|debug|error|info)\\\$\")) do={\r\ + \n :if (\$Severity = \"debug\") do={:log debug \$Log}\r\ + \n :if (\$Severity = \"error\") do={:log error \$Log}\r\ + \n :if (\$Severity = \"info\" ) do={:log info \$Log}\r\ + \n } else={:log warning \$Log; :set Severity \"warning\"}\r\ + \n :if (\$Severity != \"debug\" || \$Debug = true) do={:put ([ \$PrintSev\ + erity \$Severity ] . \": \" . \$Message)}\r\ + \n}\r\ + \n\r\ + \n:set CertificateAvailable do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :local UseFor [ :tostr \$2 ];\r\ + \n\r\ + \n :global CertificateDownload;\r\ + \n :global ParseKeyValueStore;\r\ + \n\r\ + \n :if ([ :len \$UseFor ] = 0) do={\r\ + \n :log warning (\$0 . \"The intended use is undefined!\");\r\ + \n :set UseFor \"undefined\";\r\ + \n }\r\ + \n :if ([ /system/resource/get free-hdd-space ] < 8388608 && \\\r\ + \n [ /certificate/settings/get crl-download ] = true && \\\r\ + \n [ /certificate/settings/get crl-store ] = \"system\") do={\r\ + \n :log warning (\$0 . \"This system has low free flash space but \" . \ + \\\r\ + \n \"is configured to download certificate CRLs to system!\");\r\ + \n }\r\ + \n :if ([ :len \$CommonName ] = 0) do={\r\ + \n :log warning (\$0 . \"No CommonName given!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if (((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" || \\\ + \r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \$UseFor || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\r\ + \n [ :len [ /certificate/builtin/find where common-name=\$CommonName\ + \_] ] > 0) do={\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n :log info (\$0 . \"Certificate with CommonName '\" . \$CommonName . \ + \"' not available.\");\r\ + \n :if ([ \$CertificateDownload \$CommonName ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] > 1\ + ) do={\r\ + \n :log info (\$0 . \"There are \" . \$CertCount . \" Certificates with\ + \_CommonName '\" . \$CommonName . \"'. Should be ok.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :local CertVal [ /certificate/get [ find where common-name=\$CommonNam\ + e ] ];\r\ + \n :while ((\$CertVal->\"akid\") != \"\" && (\$CertVal->\"akid\") != (\$C\ + ertVal->\"skid\")) do={\r\ + \n :if ([ :len [ /certificate/find where skid=(\$CertVal->\"akid\") ] ]\ + \_= 0) do={\r\ + \n :local IssuerCN ([ \$ParseKeyValueStore (\$CertVal->\"issuer\") ]-\ + >\"CN\");\r\ + \n :log info (\$0 . \"Certificate chain for '\" . \$CommonName . \"' \ + is incomplete, missing '\" . \$IssuerCN . \"'.\");\r\ + \n :if ([ \$CertificateDownload \$IssuerCN ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :set CertVal [ /certificate/get [ find where skid=(\$CertVal->\"akid\ + \") ] ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateDownload do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :global ScriptUpdatesBaseUrl;\r\ + \n :global ScriptUpdatesUrlSuffix;\r\ + \n :global CertificateNameByCN;\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :log info (\$0 . \"Downloading and importing certificate with \" . \\\ + \r\ + \n \"CommonName '\" . \$CommonName . \"'.\");\r\ + \n :local FileName ([ \$CleanName \$CommonName ] . \".pem\");\r\ + \n :do {\r\ + \n /tool/fetch check-certificate=yes-without-crl mode=https http-header\ + -field=({ [ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n (\$ScriptUpdatesBaseUrl . \"certs/\" . \$FileName . \$ScriptUpdate\ + sUrlSuffix) \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n } on-error={\r\ + \n :log warning (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \\\r\ + \n \"' from repository! Trying fallback to mkcert.org...\");\r\ + \n :do {\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if ([ :len [ /certificate/find where common-name=\"ISRG Root X1\"\ + \_] ] = 0 && \\\r\ + \n !(((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" \ + || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \"fetch\" || \ + \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\ + \r\ + \n [ :len [ /certificate/builtin/find where common-name=\"ISRG\ + \_Root X1\" ] ] > 0)) do={\r\ + \n :log error (\$0 . \" Required certificate is not available.\");\ + \r\ + \n :return false;\r\ + \n }\r\ + \n /tool/fetch check-certificate=yes-without-crl mode=https http-head\ + er-field=({ [ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n url=\"https://mkcert.org/generate/\" http-data=[ :serialize to=jso\ + n ({ \$CommonName }) ] \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n :if ([ /file/get \$FileName size ] = 0) do={\r\ + \n \$RmFile \$FileName;\r\ + \n :error false;\r\ + \n }\r\ + \n } on-error={\r\ + \n :log error (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \"'!\");\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n /certificate/import file-name=\$FileName passphrase=\"\" as-value;\r\ + \n :delay 1s;\r\ + \n \$RmFile \$FileName;\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n /certificate/remove [ find where name~(\"^\" . \$FileName . \"_[0-9]\ + +\\\$\") ];\r\ + \n :log warning (\$0 . \" Certificate with CommonName '\" . \$CommonNam\ + e . \"' still unavailable!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :foreach Cert in=[ /certificate/find where name~(\"^\" . \$FileName . \ + \"_[0-9]+\\\$\") ] do={\r\ + \n \$CertificateNameByCN [ /certificate/get \$Cert common-name ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateNameByCN do={\r\ + \n :local Match [ :tostr \$1 ];\r\ + \n :global CleanName;\r\ + \n :local Cert ([ /certificate/find where (common-name=\$Match or fingerp\ + rint=\$Match or name=\$Match) ]->0);\r\ + \n :if ([ :len \$Cert ] = 0) do={\r\ + \n :log warning (\$0 .\" No matching certificate found.\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CommonName [ /certificate/get \$Cert common-name ];\r\ + \n /certificate/set \$Cert name=[ \$CleanName \$CommonName ];\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set FileExists do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local Type [ :tostr \$2 ];\r\ + \n :global FileGet;\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={ :return false; }\r\ + \n :if ([ :len (\$FileVal->\"size\") ] = 0) do={ :return false; }\r\ + \n :if ([ :len \$Type ] = 0 || \$FileVal->\"type\" = \$Type) do={ :return\ + \_true; }\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set Grep do={\r\ + \n :local Input ([ :tostr \$1 ] . \"\\n\");\r\ + \n :local Pattern [ :tostr \$2 ];\r\ + \n :if ([ :typeof [ :find \$Input \$Pattern ] ] = \"nil\") do={:return []\ + }\r\ + \n :do {\r\ + \n :local Line [ :pick \$Input 0 [ :find \$Input \"\\n\" ] ];\r\ + \n :if ([ :typeof [ :find \$Line \$Pattern ] ] = \"num\") do={:return \ + \$Line}\r\ + \n :set Input [ :pick \$Input ([ :find \$Input \"\\n\" ] + 1) [ :len \$\ + Input ] ];\r\ + \n } while=([ :len \$Input ] > 0);\r\ + \n :return [];\r\ + \n}\r\ + \n\r\ + \n:set HumanReadableNum do={\r\ + \n :local Input [ :tonum \$1 ];\r\ + \n :local Base [ :tonum \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global IfThenElse;\r\ + \n :local Prefix \"kMGTPE\";\r\ + \n :local Pow 1;\r\ + \n :set Base [ \$EitherOr \$Base 1024 ];\r\ + \n :local Bin [ \$IfThenElse (\$Base = 1024) \"i\" \"\" ];\r\ + \n :if (\$Input < \$Base) do={:return \$Input}\r\ + \n :for I from=0 to=[ :len \$Prefix ] do={\r\ + \n :set Pow (\$Pow * \$Base);\r\ + \n :if (\$Input / \$Base < \$Pow) do={\r\ + \n :set Prefix [ :pick \$Prefix \$I ];\r\ + \n :local Tmp1 (\$Input * 100 / \$Pow);\r\ + \n :local Tmp2 (\$Tmp1 / 100);\r\ + \n :if (\$Tmp2 >= 100) do={:return (\$Tmp2 . \$Prefix . \$Bin)}\r\ + \n :return (\$Tmp2 . \".\" . \\\r\ + \n [ :pick \$Tmp1 [ :len \$Tmp2 ] ([ :len \$Tmp1 ] - [ :len \$Tmp\ + 2 ] + 1) ] . \\\r\ + \n \$Prefix . \$Bin);\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set CleanFilePath do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CharacterReplace;\r\ + \n :while (\$Path ~ \"//\") do={ :set \$Path [ \$CharacterReplace \$Path \ + \"//\" \"/\" ]; }\r\ + \n :if ([ :pick \$Path 0 ] = \"/\") do={ :set Path [ :pick \$Path 1 [ :le\ + n \$Path ] ]; }\r\ + \n :if ([ :pick \$Path ([ :len \$Path ] - 1) ] = \"/\") do={ :set Path [ \ + :pick \$Path 0 ([ :len \$Path ] - 1) ]; }\r\ + \n :return \$Path;\r\ + \n}\r\ + \n\r\ + \n:set CleanName do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Return \"\";\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :typeof [ find \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqr\ + stuvwxyz0123456789\" \$Char ] ] = \"nil\") do={\r\ + \n :do {:if ([ :len \$Return ] = 0) do={:error true};\r\ + \n :if ([ :pick \$Return ([ :len \$Return ] - 1) ] = \"-\") do={:er\ + ror true}; :set Char \"-\"} on-error={:set Char \"\"}; \r\ + \n };\r\ + \n :set Return (\$Return . \$Char)};\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set RandomDelay do={\r\ + \n :local Time [ :tonum \$1 ];\r\ + \n :local Unit [ :tostr \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global GetRandomNumber;\r\ + \n :global MAX;\r\ + \n :if (\$Time = 0) do={:return false}\r\ + \n :delay ([ \$MAX 10 [ \$GetRandomNumber ([ :tonsec [ :totime (\$Time . \ + [ \$EitherOr \$Unit \"s\" ]) ] ] / 1000000) ] ] . \"ms\");\r\ + \n}\r\ + \n\r\ + \n:set EscapeForRegEx do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"^.[]\\\$()|*+\?{}\\\\\");\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :find \$Chars \$Char ]) do={:set Char (\"\\\\\" . \$Char)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ExitError do={\r\ + \n :local ExitOK [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Error [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :if (\$ExitOK = \"false\") do={\r\ + \n :log error (\$Name [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\\\$\") \ + \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with er\ + ror\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \ + \$Error) \".\" ]);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set ExitOnError do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :local Error [ :tostr \$2 ];\r\ + \n :global IfThenElse;\r\ + \n :log error (\$Name . \" \" . [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\ + \\\$\") \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with erro\ + r\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \$E\ + rror) \".\" ]);\r\ + \n}\r\ + \n\r\ + \n:set MiniDateTimeStamp do={\r\ + \n :local mikro [ :tobool \$1 ];\r\ + \n /system/clock;\r\ + \n :local vdate [get date];\r\ + \n :local vtime [get time];\r\ + \n :local vdoff [:toarray \"0,4,5,7,8,10\"];\r\ + \n :local MM [:pick \$vdate (\$vdoff->2) (\$vdoff->3)];\r\ + \n :local M [:tonum \$MM];\r\ + \n :if (\$vdate ~ \".../../....\") do={\r\ + \n :set vdoff [:toarray \"7,11,1,3,4,6\"];\r\ + \n :set M ([:find \"xxanebarprayunulugepctovecANEBARPRAYUNULUGE\ + PCTOVEC\" [:pick \$vdate (\$vdoff->2) (\$vdoff->3)] -1] / 2);\r\ + \n :if (\$M>12) do={:set M (\$M - 12)}\r\ + \n :set MM [:pick (100 + \$M) 1 3];\r\ + \n }\r\ + \n :local yyyy [:pick \$vdate (\$vdoff->0) (\$vdoff->1)];\r\ + \n :local dd [:pick \$vdate (\$vdoff->4) (\$vdoff->5)];\r\ + \n :local HH [:pick \$vtime 0 2];\r\ + \n :local mm [:pick \$vtime 3 5];\r\ + \n :local ss [:pick \$vtime 6 8];\r\ + \n :local Return;\r\ + \n :if (\$mikro = true) do={\r\ + \n :set Return ([:pick \$yyyy 2 4] . [:pick \$dd 0 1] . [:pick \$HH 0\ + \_1] . [:pick \$mm 3 4] . [:pick \$ss 6 7]);\r\ + \n } else={\r\ + \n :set Return ([\$yyyy] . [\$MM] . [\$dd] . [\$HH] . [\$mm] . [\$ss]);\ + \r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set WaitForFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local WaitTime [ :totime \$2 ];\r\ + \n :global CleanFilePath;\r\ + \n :global EitherOr;\r\ + \n :global MAX;\r\ + \n :set FileName [ \$CleanFilePath \$FileName ];\r\ + \n :local Delay ([ \$MAX [ \$EitherOr \$WaitTime 2s ] 100ms ] / 9);\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } delay=\$Delay max=10;\r\ + \n } on-error={ }\r\ + \n :while ([ :len [ /file/find where name=\$FileName ] ] > 0) do={\r\ + \n :do {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } on-error={ }\r\ + \n :delay \$Delay;\r\ + \n :set Delay (\$Delay * 3 / 2);\r\ + \n }\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set FileGet do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global WaitForFile;\r\ + \n :if ([ \$WaitForFile \$FileName 0s ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n :local FileVal false;\r\ + \n :do {\r\ + \n :set FileVal [ /file/get \$FileName ];\r\ + \n } on-error={ }\r\ + \n :return \$FileVal;\r\ + \n}\r\ + \n\r\ + \n:set RmDir do={\r\ + \n :local DirName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :log debug (\$0 . \" Removing directory: \". \$DirName);\r\ + \n :local DirVal [ \$FileGet \$DirName ];\r\ + \n :if (\$DirVal = false) do={\r\ + \n :log debug (\$0 . \" ... which does not exist.\");\r\ + \n :return true;\r\ + \n };\r\ + \n :if (\$DirVal->\"type\" != \"directory\") do={\r\ + \n :log error (\$0 . \" Directory '\" . \$DirName . \"' is not a direct\ + ory.\");\r\ + \n :return false;\r\ + \n };\r\ + \n :onerror Err {\r\ + \n /file/remove \$DirName;\r\ + \n } do={\r\ + \n :log error (\$0 . \" Removing directory '\" . \$DirName . \"' failed\ + : \" . \$Err);\r\ + \n :return false;\r\ + \n };\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set RmFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :log debug (\$0 . \" Removing file: \". \$FileName);\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={\r\ + \n :log debug (\$0 . \" ... which does not exist.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :if (\$FileVal->\"type\" = \"directory\" || \$FileVal->\"type\" = \"di\ + sk\") do={\r\ + \n :log error (\$0 . \" File '\" . \$FileName . \"' is not a file.\");\ + \r\ + \n :return false;\r\ + \n }\r\ + \n :onerror Err {\r\ + \n /file/remove \$FileName;\r\ + \n } do={\r\ + \n :log error (\$0 . \" Removing file '\" . \$FileName . \"' failed: \"\ + \_. \$Err); :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MkDir do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CleanFilePath;\r\ + \n :global FileGet;\r\ + \n :global RmDir;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :local MkTmpfs do={\r\ + \n :global WaitForFile;\r\ + \n :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\r\ + \n :if ([ :len \$TmpFs ] = 1) do={\r\ + \n :if ([ /disk/get \$TmpFs disabled ] = true) do={\r\ + \n :log info (\$0 . \" The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :log info (\$0 . \" Creating disk of type tmpfs.\");\r\ + \n \$RmDir \"tmpfs\";\r\ + \n :onerror Err {\r\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource\ + /get total-memory ] / 3);\r\ + \n \$WaitForFile \"tmpfs\";\r\ + \n } do={\r\ + \n :log warning (\$0 . \" Creating disk of type tmpfs failed: \" . \$\ + Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :set Path [ \$CleanFilePath \$Path ];\r\ + \n :if (\$Path = \"\") do={\r\ + \n :return true;\r\ + \n }\r\ + \n :log debug (\$0 . \" Making directory: \" . \$Path);\r\ + \n :local PathVal [ \$FileGet \$Path ];\r\ + \n :if (\$PathVal->\"type\" = \"directory\") do={\r\ + \n :log debug (\$0 . \" ... which already exists.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :pick \$Path 0 5 ] = \"tmpfs\") do={\r\ + \n :if ([ \$MkTmpfs ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n /file/add type=\"directory\" name=\$Path;\r\ + \n \$WaitForFile \$Path;\r\ + \n } do={\r\ + \n :log warning (\$0 . \" Making directory '\" . \$Path . \"' failed: \ + \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MAX do={:if (\$1 > \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n:set MIN do={:if (\$1 < \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set CharacterReplace do={\r\ + \n :local String [ :tostr \$1 ];\r\ + \n :local ReplaceFrom [ :tostr \$2 ];\r\ + \n :local ReplaceWith [ :tostr \$3 ];\r\ + \n :local Return \"\";\r\ + \n :if (\$ReplaceFrom = \"\") do={:return \$String}\r\ + \n :while ([ :typeof [ :find \$String \$ReplaceFrom ] ] != \"nil\") do={\ + \r\ + \n :local Pos [ :find \$String \$ReplaceFrom ];\r\ + \n :set Return (\$Return . [ :pick \$String 0 \$Pos ] . \$ReplaceWith);\ + \r\ + \n :set String [ :pick \$String (\$Pos + [ :len \$ReplaceFrom ]) [ :len\ + \_\$String ] ];\r\ + \n }\r\ + \n :return (\$Return . \$String);\r\ + \n}\r\ + \n\r\ + \n:set IfThenElse do={\r\ + \n :if ([ :tostr \$1 ] = \"true\" || [ :tobool \$1 ] = true) do={:return \ + \$2};\r\ + \n :return \$3;\r\ + \n}\r\ + \n\r\ + \n:set EitherOr do={\r\ + \n :global IfThenElse;\r\ + \n :if ([ :typeof \$1 ] = \"num\") do={:return [ \$IfThenElse (\$1 != 0) \ + \$1 \$2 ]}\r\ + \n :if ([ :typeof \$1 ] = \"time\") do={:return [ \$IfThenElse (\$1 > 0s)\ + \_\$1 \$2 ]}\r\ + \n# this works for boolean values, literal ones with parentheses\r\ + \n :return [ \$IfThenElse ([ :len [ :tostr \$1 ] ] > 0) \$1 \$2 ];\r\ + \n}\r\ + \n\r\ + \n:set ParseKeyValueStore do={\r\ + \n :local Source \$1;\r\ + \n :if ([ :pick \$Source 0 1 ] = \"{\") do={\r\ + \n :do {\r\ + \n :return [ :deserialize from=json \$Source ];\r\ + \n } on-error={ }\r\ + \n } \r\ + \n :if ([ :typeof \$Source ] != \"array\") do={:set Source [ :tostr \$1 ]\ + }\r\ + \n :local Result ({});\r\ + \n :foreach KeyValue in=[ :toarray \$Source ] do={\r\ + \n :if ([ :find \$KeyValue \"=\" ]) do={\r\ + \n :local Key [ :pick \$KeyValue 0 [ :find \$KeyValue \"=\" ] ];\r\ + \n :local Value [ :pick \$KeyValue ([ :find \$KeyValue \"=\" ] + 1) [\ + \_:len \$KeyValue ] ];\r\ + \n :if (\$Value=\"true\") do={:set Value true}\r\ + \n :if (\$Value=\"false\") do={:set Value false}\r\ + \n :set (\$Result->\$Key) \$Value;\r\ + \n } else={:set (\$Result->\$KeyValue) true}\r\ + \n }\r\ + \n :return \$Result;\r\ + \n}\r\ + \n:set RequiredRouterOS do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :local Required [ :tostr \$2 ];\r\ + \n :local Warn [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :global VersionToNum;\r\ + \n :if (!(\$Required ~ \"^\\\\d+\\\\.\\\\d+((alpha|beta|rc|\\\\.)\\\\d+|)\ + \\\$\")) do={\r\ + \n :log error (\$0 . \" No valid RouterOS version: \" . \$Required);\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ \$VersionToNum \$Required ] > [ \$VersionToNum [ /system/packag\ + e/update/get installed-version ] ]) do={\r\ + \n :if (\$Warn = \"true\") do={\r\ + \n :log warning (\$0 . \" This \" . [ \$IfThenElse ([ :pick \$Caller \ + 0 ] = (\"\\\$\")) \"function\" \"script\" ] . \\\r\ + \n \" '\" . \$Caller . \"' (at least specific functionality) requir\ + es RouterOS \" . \$Required . \". Please update!\");\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set ValidateSyntax do={\r\ + \n :local Code [ :tostr \$1 ];\r\ + \n :global LogPrint;\r\ + \n :onerror Err {\r\ + \n [ :parse (\":local Validate do={\\n\" . \$Code . \"\\n}\") ];\r\ + \n } do={\r\ + \n \$LogPrint debug \$0 (\"Valdation failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set VersionToNum do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Multi 0x1000000;\r\ + \n :local Return 0;\r\ + \n :global CharacterReplace;\r\ + \n :set Input [ \$CharacterReplace \$Input \".\" \",\" ];\r\ + \n :foreach I in={ \"zero\"; \"alpha\"; \"beta\"; \"rc\" } do={\r\ + \n :set Input [ \$CharacterReplace \$Input \$I (\",\" . \$I . \",\") ];\ + \r\ + \n }\r\ + \n :foreach Value in=([ :toarray \$Input ], 0) do={\r\ + \n :local Num [ :tonum \$Value ];\r\ + \n :if (\$Multi = 0x100) do={\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={\r\ + \n :set Return (\$Return + 0xff00);\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n } else={\r\ + \n :if (\$Value = \"zero\") do={ }\r\ + \n :if (\$Value = \"alpha\") do={ :set Return (\$Return + 0x3f00); \ + }\r\ + \n :if (\$Value = \"beta\") do={ :set Return (\$Return + 0x5f00); }\ + \r\ + \n :if (\$Value = \"rc\") do={ :set Return (\$Return + 0x7f00); }\r\ + \n }\r\ + \n }\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={ :set Return (\$Return + (\$Va\ + lue * \$Multi)); }\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ScriptLock do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local WaitMax [ :totime \$2 ];\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global ScriptLockOrder;\r\ + \n :if ([ :typeof \$ScriptLockOrder ] = \"nothing\") do={\r\ + \n :set ScriptLockOrder ({});\r\ + \n }\r\ + \n :if ([ :typeof (\$ScriptLockOrder->\$Script) ] = \"nothing\") do={\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :local JobCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :return [ :len [ /system/script/job/find where script=\$Script ] ];\ + \r\ + \n }\r\ + \n :local TicketCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :local Count 0;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:set Count (\$Count \ + + 1)}\r\ + \n }\r\ + \n :return \$Count;\r\ + \n }\r\ + \n :local IsFirstTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Check [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if (\$Ticket = \$Check) do={:return true}\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\" && \$Ticket != \$Check) d\ + o={:return false}\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :local AddTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Add [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :while (true) do={\r\ + \n :local Pos [ :len (\$ScriptLockOrder->\$Script) ];\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Pos) \$Add;\r\ + \n :delay 10ms;\r\ + \n :if ((\$ScriptLockOrder->\$Script->\$Pos) = \$Add) do={:return tru\ + e}\r\ + \n }\r\ + \n }\r\ + \n :local RemoveTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Remove [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Id,Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :while ((\$ScriptLockOrder->\$Script->\$Id) = \$Remove) do={\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Id);\r\ + \n :delay 10ms;\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n :local CleanupTickets do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:return false}\r\ + \n }\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :if ([ :typeof \$WaitMax ] = \"nil\" ) do={:set WaitMax 0s}\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\r\ + \n :log error (\$0 . \" A script named '\" . \$Script . \"' does not ex\ + ist!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$JobCount \$Script ] = 0) do={\r\ + \n \$LogPrint error \$0 (\"No script '\" . \$Script . \"' is running!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$TicketCount \$Script ] >= [ \$JobCount \$Script ]) do={\r\ + \n :log error (\$0 . \" More tickets than running scripts '\" . \$Scrip\ + t . \"', resetting!\");\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n /system/script/job/remove [ find where script=\$Script ];\r\ + \n }\r\ + \n :local MyTicket [ \$GetRandom20CharAlNum 6 ];\r\ + \n \$AddTicket \$Script \$MyTicket;\r\ + \n :local WaitInterval (\$WaitMax / 20);\r\ + \n :local WaitTime \$WaitMax;\r\ + \n :while (\$WaitTime > 0 && \\\r\ + \n ([ \$IsFirstTicket \$Script \$MyTicket ] = false || \\\r\ + \n [ \$TicketCount \$Script ] < [ \$JobCount \$Script ])) do={\r\ + \n :set WaitTime (\$WaitTime - \$WaitInterval);\r\ + \n :delay \$WaitInterval;\r\ + \n }\r\ + \n :if ([ \$IsFirstTicket \$Script \$MyTicket ] = true && \\\r\ + \n [ \$TicketCount \$Script ] = [ \$JobCount \$Script ]) do={\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$CleanupTickets \$Script;\r\ + \n :return true;\r\ + \n }\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$LogPrint debug \$0 (\"Script '\" . \$Script . \"' started more than \ + once\" . \\\r\ + \n [ \$IfThenElse (\$WaitTime < \$WaitMax) \" and timed out waiting for\ + \_lock\" \"\" ] . \"...\");\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set SendNotification do={ :onerror Err {\r\ + \n :global SendNotification2;\r\ + \n \$SendNotification2 ({ origin=\$0; subject=\$1; message=\$2; link=\$3;\ + \_silent=\$4 });\r\ + \n} do={:global ExitOnError; \$ExitOnError \$0 \$Err}\r\ + \n}\r\ + \n\r\ + \n:set SendNotification2 do={\r\ + \n :local Notification \$1;\r\ + \n :global NotificationFunctions;\r\ + \n :foreach FunctionName,Discard in=\$NotificationFunctions do={\r\ + \n (\$NotificationFunctions->\$FunctionName) (\"\\\$NotificationFunctio\ + ns->\\\"\" . \$FunctionName . \"\\\"\") \$Notification;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set SymbolByUnicodeName do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :global EitherOr;\r\ + \n :global SymbolsExtra;\r\ + \n :local Symbols ({\r\ + \n \"abacus\"=\"\\F0\\9F\\A7\\AE\";\r\ + \n \"alarm-clock\"=\"\\E2\\8F\\B0\";\r\ + \n \"arrow-down\"=\"\\E2\\AC\\87\";\r\ + \n \"arrow-up\"=\"\\E2\\AC\\86\";\r\ + \n \"calendar\"=\"\\F0\\9F\\93\\85\";\r\ + \n \"card-file-box\"=\"\\F0\\9F\\97\\83\";\r\ + \n \"chart-decreasing\"=\"\\F0\\9F\\93\\89\";\r\ + \n \"chart-increasing\"=\"\\F0\\9F\\93\\88\";\r\ + \n \"cloud\"=\"\\E2\\98\\81\";\r\ + \n \"cross-mark\"=\"\\E2\\9D\\8C\";\r\ + \n \"earth\"=\"\\F0\\9F\\8C\\8D\";\r\ + \n \"fire\"=\"\\F0\\9F\\94\\A5\";\r\ + \n \"floppy-disk\"=\"\\F0\\9F\\92\\BE\";\r\ + \n \"gear\"=\"\\E2\\9A\\99\";\r\ + \n \"heart\"=\"\\E2\\99\\A5\";\r\ + \n \"high-voltage-sign\"=\"\\E2\\9A\\A1\";\r\ + \n \"incoming-envelope\"=\"\\F0\\9F\\93\\A8\";\r\ + \n \"information\"=\"\\E2\\84\\B9\";\r\ + \n \"large-orange-circle\"=\"\\F0\\9F\\9F\\A0\";\r\ + \n \"large-red-circle\"=\"\\F0\\9F\\94\\B4\";\r\ + \n \"link\"=\"\\F0\\9F\\94\\97\";\r\ + \n \"lock-with-ink-pen\"=\"\\F0\\9F\\94\\8F\";\r\ + \n \"memo\"=\"\\F0\\9F\\93\\9D\";\r\ + \n \"mobile-phone\"=\"\\F0\\9F\\93\\B1\";\r\ + \n \"pushpin\"=\"\\F0\\9F\\93\\8C\";\r\ + \n \"scissors\"=\"\\E2\\9C\\82\";\r\ + \n \"scroll\"=\"\\F0\\9F\\93\\9C\";\r\ + \n \"smiley-partying-face\"=\"\\F0\\9F\\A5\\B3\";\r\ + \n \"smiley-smiling-face\"=\"\\E2\\98\\BA\";\r\ + \n \"smiley-winking-face-with-tongue\"=\"\\F0\\9F\\98\\9C\";\r\ + \n \"sparkles\"=\"\\E2\\9C\\A8\";\r\ + \n \"speech-balloon\"=\"\\F0\\9F\\92\\AC\";\r\ + \n \"star\"=\"\\E2\\AD\\90\";\r\ + \n \"warning-sign\"=\"\\E2\\9A\\A0\";\r\ + \n \"white-heavy-check-mark\"=\"\\E2\\9C\\85\"\r\ + \n }, \$SymbolsExtra);\r\ + \n :local Magic [ :pick [ /system/clock/get date ] 4 10 ];\r\ + \n :local Special {\r\ + \n \"information-04-01\"=\"\\F0\\9F\\9A\\BB\";\r\ + \n \"large-orange-circle-04-01\"=\"\\F0\\9F\\8D\\8A\";\r\ + \n \"large-orange-circle-10-31\"=\"\\F0\\9F\\8E\\83\";\r\ + \n \"large-red-circle-04-01\"=\"\\F0\\9F\\8D\\92\" };\r\ + \n :if ([ :len (\$Symbols->\$Name) ] = 0) do={\r\ + \n :log warning (\$0 . \"No symbol available for name '\" . \$Name . \"\ + '!\");\r\ + \n :return \"\";\r\ + \n }\r\ + \n :return ([ \$EitherOr (\$Special->(\$Name . \$Magic)) (\$Symbols->\$Na\ + me) ] . \"\\EF\\B8\\8F\");\r\ + \n}\r\ + \n\r\ + \n:set SymbolForNotification do={\r\ + \n :global NotificationsWithSymbols;\r\ + \n :global SymbolByUnicodeName;\r\ + \n :global IfThenElse;\r\ + \n :if (\$NotificationsWithSymbols != true) do={:return [ \$IfThenElse ([\ + \_:len \$2 ] > 0) ([ :tostr \$2 ] . \" \") \"\" ]}\r\ + \n :local Return \"\";\r\ + \n :foreach Symbol in=[ :toarray \$1 ] do={:set Return (\$Return . [ \$Sy\ + mbolByUnicodeName \$Symbol ])}\r\ + \n :return (\$Return . \" \");\r\ + \n}\r\ + \n\r\ + \n:set Unix2Dos do={:return [ :tocrlf [ :tostr \$1 ] ]}\r\ + \n:set UrlEncode do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"\\n\\r !\\\"#\\\$%&'()*+,:;<=>\?@[\\\\]^`{|}~\");\r\ + \n :local Subs { \"%0A\"; \"%0D\"; \"%20\"; \"%21\"; \"%22\"; \"%23\"; \"\ + %24\"; \"%25\"; \"%26\"; \"%27\";\r\ + \n \"%28\"; \"%29\"; \"%2A\"; \"%2B\"; \"%2C\"; \"%3A\"; \"%3B\"; \ + \"%3C\"; \"%3D\"; \"%3E\"; \"%3F\";\r\ + \n \"%40\"; \"%5B\"; \"%5C\"; \"%5D\"; \"%5E\"; \"%60\"; \"%7B\"; \ + \"%7C\"; \"%7D\"; \"%7E\" };\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :local Replace [ :find \$Chars \$Char ];\r\ + \n :if ([ :typeof \$Replace ] = \"num\") do={:set Char (\$Subs->\$Repla\ + ce)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set IsDNSResolving do={\r\ + \n :do {:resolve \"api.telegram.org\"} on-error={:return false}\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set IsFullyConnected do={\r\ + \n :global IsDNSResolving;\r\ + \n :global IsTimeSync;\r\ + \n :if ([ \$IsDNSResolving ] = false) do={:return false};\r\ + \n :if ([ \$IsTimeSync ] = false) do={:return false};\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set IsTimeSync do={\r\ + \n :global IsTimeSyncCached;\r\ + \n :global IsTimeSyncResetNtp;\r\ + \n :if (\$IsTimeSyncCached = true) do={:return true}\r\ + \n :if ([ /system/ntp/client/get enabled ] = true) do={\r\ + \n :if ([ /system/ntp/client/get status ] = \"synchronized\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :local Uptime [ /system/resource/get uptime ];\r\ + \n :if ([ :typeof \$IsTimeSyncResetNtp ] = \"nothing\") do={\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n }\r\ + \n :if (\$Uptime - \$IsTimeSyncResetNtp < 3m) do={:return false}\r\ + \n :log warning \"\$0 The ntp client is configured, but did not sync.\"\ + ;\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n /system/ntp/client/set enabled=no;\r\ + \n :delay 20ms;\r\ + \n /system/ntp/client/set enabled=yes;\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ /system/license/get ]->\"level\" = \"free\" || \\\r\ + \n [ /system/resource/get ]->\"board-name\" = \"x86\") do={\r\ + \n :log debug \"\$0 No ntp client configured, relying on RTC for CHR fr\ + ee license and x86.\";\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ /ip/cloud/get update-time ] = true) do={\r\ + \n :if ([ :typeof [ /ip/cloud/get public-address ] ] = \"ip\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :log debug \"\$0 No time source configured! Returning gracefully...\";\ + \r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n# read parts of a large file\r\ + \n# Description of parameters:\r\ + \n# \$1 - script name for logging and user agent\r\ + \n# \$2 - url to fetch from\r\ + \n# \$3 - check-certificate value for /tool/fetch (true/false)\r\ + \n# \$4 - mode value for /tool/fetch (optional, e.g. \"keep-broken\", \"ht\ + tps-only\", \"http-only\"\r\ + \n# \"no-redirects\", \"background\", \"background-and-keep-broken\",\ + \_\"background-and-https-only\",\r\ + \n# \"background-and-http-only\", \"background-and-no-redirects\", \"\ + background-and-keep-broken-and-https-only\", \"background-and-keep-broken-\ + and-http-only\",\r\ + \n# \"background-and-keep-broken-and-no-redirects\")\r\ + \n# \$5 - fetch method for /tool/fetch (optional, e.g. \"get\", \"head\", \ + \"post\", \"put\", \"patch\", \"delete\")\r\ + \n#:set FetchLargeFiles do={\r\ + \n# :local RunName [:tostr \$1];\r\ + \n# :local fetchUrl [:tostr \$2];\r\ + \n# :local fetchFile [:tostr \$3];\r\ + \n# :local CheckCert [:tostr \$4];\r\ + \n# :local fetchMode [:tostr \$5];\r\ + \n# :local fetchMethod [:tostr \$6];\r\ + \n# :local tmpName;\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-\ + without-crl\" ];\r\ + \n#\r\ + \n# :set tmpName (\$CleanName \"tmp-\" . [ \$GetRandom20CharAlNum 6 ]);\r\ + \n# :local DirName (\"tmpfs/\" . \$tmpName);\r\ + \n# :if ([ \$MkDir \$DirName ] = false) do={\r\ + \n# :log error (\$RunName . \" Failed creating directory: \" . \$DirNam\ + e . \"!\");\r\ + \n# :return false;\r\ + \n# }\r\ + \n#\r\ + \n# :local FileName (\$DirName . \"/\" . [ \$CleanName \$fetchFile ] . \"\ + -\" . [ \$GetRandom20CharAlNum 5 ]);\r\ + \n# :local Url (\$fetchUrl . \$fetchFile);\r\ + \n# :onerror Err {\r\ + \n# /tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName\ + \_\\\r\ + \n# http-header-field=({ [ \$FetchUserAgentStr \$RunName ] }) as-valu\ + e;\r\ + \n# } do={\r\ + \n# :if ([ \$WaitForFile \$FileName 500ms ] = true) do={\r\ + \n# \$RmFile \$FileName;\r\ + \n# }\r\ + \n# :log error (\$RunName . \" Failed downloading from '\" . \$Url . \"\ + ' - \" . \$Err);\r\ + \n# \$RmDir \$DirName;\r\ + \n# :return false;\r\ + \n# }\r\ + \n#\r\ + \n# :if ([ \$WaitForFile \$FileName 5s ] = false) do={\r\ + \n# :log error (\$RunName . \" The file downloaded from '\" . \$Url . \ + \"' did not show up.\");\r\ + \n# :return false;\r\ + \n# }\r\ + \n# \r\ + \n# :local FileSize [ /file/get \$FileName size ];\r\ + \n# :local Return \"\";\r\ + \n# :local VarSize 0;\r\ + \n# :while (\$VarSize != \$FileSize) do={\r\ + \n# :set Return (\$Return . ([ /file/read offset=\$VarSize chunk-size=3\ + 2768 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## \$RmFile \$FileName;\r\ + \n# \$RmDir \$DirName;\r\ + \n# :return \$Return;\r\ + \n#}\r\ + \n\r\ + \n:set FetchHugeFiles do={\r\ + \n :local ScriptName [ :tostr \$1 ];\r\ + \n :local Url [ :tostr \$2 ];\r\ + \n :local CheckCert [ :tostr \$3 ];\r\ + \n\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global MkDir;\r\ + \n :global RmDir;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :set CheckCert [ \$IfThenElse (\$CheckCert = \"false\") \"no\" \"yes-w\ + ithout-crl\" ];\r\ + \n\r\ + \n :local DirName (\"tmpfs/\" . [ \$CleanName \$ScriptName ]);\r\ + \n :if ([ \$MkDir \$DirName ] = false) do={\r\ + \n \$LogPrint error \$0 (\"Failed creating directory!\");\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :local FileName (\$DirName . \"/\" . [ \$CleanName \$0 ] . \"-\" . [ \ + \$GetRandom20CharAlNum ]);\r\ + \n :onerror Err {\r\ + \n /tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName \ + \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] }) as-va\ + lue;\r\ + \n } do={\r\ + \n :if ([ \$WaitForFile \$FileName 500ms ] = true) do={\r\ + \n \$RmFile \$FileName;\r\ + \n }\r\ + \n \$LogPrint debug \$0 (\"Failed downloading from \" . \$Url . \" - \"\ + \_. \$Err);\r\ + \n \$RmDir \$DirName;\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$WaitForFile \$FileName 5s ] = false) do={\r\ + \n \$LogPrint debug \$0 (\"The file downloaded from \" . \$Url . \" did\ + \_not show up.\");\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :local FileSize [ /file/get \$FileName size ];\r\ + \n :local Return \"\";\r\ + \n :local VarSize 0;\r\ + \n :while (\$VarSize != \$FileSize) do={\r\ + \n :set Return (\$Return . ([ /file/read offset=\$VarSize chunk-size=32\ + 768 file=\$FileName as-value ]->\"data\"));\r\ + \n :set FileSize [ /file/get \$FileName size ];\r\ + \n :set VarSize [ :len \$Return ];\r\ + \n :if (\$VarSize > \$FileSize) do={\r\ + \n :delay 100ms;\r\ + \n }\r\ + \n }\r\ + \n \$RmDir \$DirName;\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set FetchUserAgentStr do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global CommitBrief;\r\ + \n :global IfThenElse;\r\ + \n :local Resource [ /system/resource/get ];\r\ + \n :return (\"User-Agent: Mikrotik/\" . \$Resource->\"version\" . \" \" .\ + \_\$Resource->\"architecture-name\" . \\\r\ + \n \" \" . \$Caller . \"/Fetch (\" . \$GlobalScriptsUrl . \"; \" . [ \$\ + CommitBrief ] . \")\");\r\ + \n}\r\ + \n\r\ + \n:set ScriptInstallUpdate do={ :onerror Err {\r\ + \n :local Scripts [ :toarray \$1 ];\r\ + \n :local NewComment [ :tostr \$2 ];\r\ + \n :global InitSetup;\r\ + \n\r\ + \n :global CommitId;\r\ + \n :global ScriptUpdatesCRLF;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global CertificateAvailable;\r\ + \n :global CheckSumsVerify;\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SumsDirAndFileName;\r\ + \n :global GlobalScriptsUrlSuffix;\r\ + \n :global EitherOr;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global Grep;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global ParseKeyValueStore;\r\ + \n :global RequiredRouterOS;\r\ + \n :global SendNotification2;\r\ + \n :global SymbolForNotification;\r\ + \n :global ValidateSyntax;\r\ + \n :global CommentsInScripts;\r\ + \n\r\ + \n :if ([ \$CertificateAvailable \"Root YE\" \"fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, trying wit\ + hout.\");\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=\$Scripts do={\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\ + \r\ + \n \$LogPrint info \$0 (\"Adding new script: \" . \$Script);\r\ + \n /system/script/add name=\$Script owner=\$Script source=\"#!rsc by \ + Vados\\n\" comment=\$NewComment;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :local CommitIdBefore \$CommitId;\r\ + \n :local GlobalConfVersionBefore \$GlobalConfVersion;\r\ + \n :local ReloadGlobal false;\r\ + \n :local DeviceMode [ /system/device-mode/get ];\r\ + \n\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSums ({});\r\ + \n :do {\r\ + \n :local Url (\$GlobalScriptsUrl . \$SumsDirAndFileName . \$GlobalScr\ + iptsUrlSuffix);\r\ + \n \$LogPrint debug \$0 (\"Fetching checksums from url: \" . \$Url);\ + \r\ + \n :set CheckSums [ :deserialize from=json ([ /tool/fetch check-certi\ + ficate=yes-without-crl \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url output\ + =user as-value ]->\"data\") ];\r\ + \n } on-error={ \$LogPrint warning \$0 (\"Err = \" . \$Err); }\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vado\ + s\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :local ScriptInfo [ \$ParseKeyValueStore (\$ScriptVal->\"comment\") \ + ];\r\ + \n :local SourceNew;\r\ + \n\r\ + \n :foreach Scheduler in=[ /system/scheduler/find where on-event~(\"\\\ + \\b\" . \$ScriptVal->\"name\" . \"\\\\b\") ] do={\r\ + \n :local SchedulerVal [ /system/scheduler/get \$Scheduler ];\r\ + \n :if (\$ScriptVal->\"policy\" != \$SchedulerVal->\"policy\") do={\r\ + \n \$LogPrint warning \$0 (\"Policies differ for script '\" . \$Scr\ + iptVal->\"name\" . \"' and its scheduler '\" . \$SchedulerVal->\"name\" . \ + \"'!\");\r\ + \n }\r\ + \n }\r\ + \n :do {\r\ + \n :if (\$ScriptInfo->\"ignore\" = true) do={\r\ + \n \$LogPrint debug \$0 (\"Ignoring script '\" . \$ScriptVal->\"nam\ + e\" . \"', as requested.\");\r\ + \n :error true;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSum (\$CheckSums->(\$ScriptVal->\"name\"));\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Scri\ + ptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :convert transform=md5 to=hex [ :tolf (\$ScriptVal->\"sou\ + rce\") ] ] = \$CheckSum) do={\r\ + \n \$LogPrint debug \$0 (\"Checksum for script '\" . \$ScriptVal-\ + >\"name\" . \"' matches, ignoring.\");\r\ + \n :error true;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len (\$ScriptInfo->\"certificate\") ] > 0) do={\r\ + \n :if ([ \$CertificateAvailable (\$ScriptInfo->\"certificate\") \"\ + fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, tryi\ + ng without.\");\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n :local BaseUrl [ \$EitherOr (\$ScriptInfo->\"base-url\") \$Globa\ + lScriptsUrl ];\r\ + \n :local UrlSuffix [ \$EitherOr (\$ScriptInfo->\"url-suffix\") \$G\ + lobalScriptsUrlSuffix ];\r\ + \n :local Url (\$BaseUrl . \$ScriptVal->\"name\" . \".rsc\" . \$Url\ + Suffix);\r\ + \n \$LogPrint warning \$0 (\"Fetching script '\" . (\$ScriptVal->\"\ + name\") . \"' from url: \" . \$Url);\r\ + \n :local Result [ /tool/fetch check-certificate=yes-without-crl \\\ + \r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url outp\ + ut=user as-value ];\r\ + \n :if (\$Result->\"status\" = \"finished\") do={\r\ + \n :set SourceNew [ :tolf (\$Result->\"data\") ];\r\ + \n } \r\ + \n } do={\r\ + \n \$LogPrint warning \$0 (\"Failed fetching script '\" . \$ScriptV\ + al->\"name\" . \"': \" . \$Err);\r\ + \n :if (\$Err != \"Fetch failed with status 404\") do={\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$ScriptVal->\"source\" = \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Removing dummy. Typo on installation\ + \?\");\r\ + \n /system/script/remove \$Script;\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Sc\ + riptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :len \$CheckSum ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"Added the script manually\? Skip u\ + pdates with 'ignore=true' in comment.\");\r\ + \n }\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$SourceNew ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"No update for script '\" . (\$ScriptVal-\ + >\"name\") . \"'.\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :local SourceCRLF [ :tocrlf \$SourceNew ];\r\ + \n :if (\$InitSetup != true && ((\$ScriptVal->\"name\") != \"AM-Globa\ + lConfig\" || (\$ScriptVal->\"name\") != \"AM-GlobalFunc\")) do={\r\ + \n :if (\$SourceNew = (\$ScriptVal->\"source\") || \$SourceCRLF = (\ + \$ScriptVal->\"source\")) do={\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\") \ + . \"' source did not change. End of lines set to CRLF.\");\r\ + \n if (\$ScriptUpdatesCRLF = false) do={\r\ + \n :put [ :tolf \$SourceNew ];\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\"\ + ) . \"' source update end of lines to LF.\");\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([ :pick \$SourceNew 0 14 ] != \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Looks like new script '\" . \$ScriptVa\ + l->\"name\" . \"' is not valid (missing shebang = '\$shebang') Ignoring!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if (\$CommentsInScripts = true) do={\r\ + \n :local CommentLine [ \$Grep \$SourceNew (\"\\23 Script comment:\ + \_\") ];\r\ + \n :if ([ :len \$CommentLine ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"The search in new script '\" . (\$Scr\ + iptVal->\"name\") . \"' for comment in script body, is not found result Ig\ + noring!\");\r\ + \n :error false;\r\ + \n } else={\r\ + \n :if ([ :len (\$ScriptVal->\"comment\")] = 0 || [ :len (\$Scri\ + ptVal->\"comment\")] != [ :pick \$CommentLine ([ :find \$CommentLine \":\"\ + ] + 2) [ :len \$CommentLine] ]) do={\r\ + \n \$LogPrint debug \$0 (\"Exsiting comment for script '\" . (\ + \$ScriptVal->\"name\") . \"' is '\" . (\$ScriptVal->\"comment\") . \"'.\")\ + ;\r\ + \n :set (\$ScriptVal->\"comment\") [ :pick \$CommentLine ([ :f\ + ind \$CommentLine \":\"] + 2) [ :len \$CommentLine] ];\r\ + \n \$LogPrint debug \$0 (\"New comment (\" . (\$ScriptVal->\"c\ + omment\") . \") for script '\" . (\$ScriptVal->\"name\") . \"' has been ad\ + ded!\");\r\ + \n } else={\r\ + \n \$LogPrint debug \$0 (\"Comment for script '\" . (\$ScriptV\ + al->\"name\") . \"' did not change.\");\r\ + \n :error false;\r\ + \n }\r\ + \n } \r\ + \n }\r\ + \n\r\ + \n :local RequiredROS ([ \$ParseKeyValueStore [ \$Grep \$SourceNew (\ + \"\\23 requires RouterOS, \") ] ]->version);\r\ + \n :if ([ \$RequiredRouterOS \$0 [ \$EitherOr \$RequiredROS \"0.0\" ]\ + \_false ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires RouterOS \" . \\\r\ + \n \$RequiredROS . \", which is not met by your installation. I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :local RequiredDM [ \$ParseKeyValueStore [ \$Grep \$SourceNew (\"\ + \\23 requires device-mode, \") ] ];\r\ + \n :local MissingDM ({});\r\ + \n :foreach Feature,Value in=\$RequiredDM do={\r\ + \n :if ([ :typeof (\$DeviceMode->\$Feature) ] = \"bool\" && (\$Devi\ + ceMode->\$Feature) = false) do={\r\ + \n :set MissingDM (\$MissingDM, \$Feature);\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len \$MissingDM ] > 0) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires disabled \" . \\\r\ + \n \"device-mode features (\" . [ :tostr \$MissingDM ] . \"). I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$ValidateSyntax \$SourceNew ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Syntax validation for script '\" . (\$\ + ScriptVal->\"name\") . \"' failed! Ignoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n \r\ + \n :log info (\"Updating script: \" . (\$ScriptVal->\"name\") . \" Sc\ + ript comment: \" . (\$ScriptVal->\"comment\"));\r\ + \n\r\ + \n /system/script/set owner=(\$ScriptVal->\"name\") comment=(\$Script\ + Val->\"comment\") \\\r\ + \n source=[ \$IfThenElse (\$ScriptUpdatesCRLF = true) \$SourceCRL\ + F \$SourceNew ] \$Script;\r\ + \n :if (\$ScriptVal->\"name\" = \"AM-GlobalConfig\" || \\\r\ + \n \$ScriptVal->\"name\" = \"AM-GlobalFunc\" || \\\r\ + \n \$ScriptVal->\"name\" ~ (\"^(AM-GlobalFunc\\\\.d|mod)/.\")) d\ + o={\r\ + \n :set ReloadGlobal true;\r\ + \n }\r\ + \n } on-error={ }\r\ + \n }\r\ + \n :if (\$ReloadGlobal = true) do={\r\ + \n \$LogPrint info \$0 (\"Reloading global configuration and functions.\ + \");\r\ + \n :onerror Err {\r\ + \n :global InitSetup (a);\r\ + \n /system/script {run AM-GlobalConfig; run AM-GlobalFunc;};\r\ + \n } do={\$LogPrint error \$0 (\"Reloading global configuration and fun\ + ctions failed! \" . \$Err)}\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore > \$GlobalConfVersion) do={\r\ + \n \$LogPrint warning \$0 (\"The configuration version decreased from \ + \" . \\\r\ + \n \$GlobalConfVersionBefore . \" to \" . \$GlobalConfVersion . \\\r\ + \n \". Installed an older version\?\");\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore < \$GlobalConfVersion) do={\r\ + \n :global GlobalConfChanges;\r\ + \n :global GlobalConfMigration;\r\ + \n :local ChangeLogCode;\r\ + \n :if ([ :len \$ChangeLogCode ] > 0) do={\r\ + \n :if ([ \$ValidateSyntax \$ChangeLogCode ] = true) do={\r\ + \n :onerror Err {\r\ + \n [ :parse \$ChangeLogCode ];\r\ + \n } do={\$LogPrint warning \$0 (\"The changelog failed to run: \" \ + . \$Err)}\r\ + \n } else={\$LogPrint warning \$0 (\"The changelog failed syntax vali\ + dation!\")}\r\ + \n }\r\ + \n :if ([ :len \$GlobalConfMigration ] > 0) do={\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Migration (\$GlobalConfMigration->[ :tostr \$I ]);\r\ + \n :do {\r\ + \n :if ([ :typeof \$Migration ] != \"str\") do={\r\ + \n \$LogPrint debug \$0 (\"Migration code for change \" . \$I .\ + \_\" is not available.\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$ValidateSyntax \$Migration ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Migration code for change \" . \$I\ + \_. \" failed syntax validation!\");\r\ + \n :error false}\r\ + \n \$LogPrint info \$0 (\"Applying migration for change \" . \$I \ + . \": \" . \$Migration);\r\ + \n :onerror Err {\r\ + \n [ :parse \$Migration ];\r\ + \n } do={\$LogPrint warning \$0 (\"Migration code for change \" .\ + \_\$I . \" failed to run: \" . \$Err)}\r\ + \n } on-error={ }\r\ + \n }\r\ + \n }\r\ + \n :local NotificationMessage (\"The configuration version on \" . \$Id\ + entity . \" increased \" . \\\r\ + \n \"to \" . \$GlobalConfVersion . \", current configuration may nee\ + d modification. \" . \\\r\ + \n \"Please review and update global-config-overlay, then re-run glo\ + bal-config.\");\r\ + \n \$LogPrint info \$0 (\$NotificationMessage);\r\ + \n :if ([ :len \$GlobalConfChanges ] > 0) do={\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n\\nChanges:\ + \");\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Change (\$GlobalConfChanges->[ :tostr \$I ]);\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n \" . \\\ + \r\ + \n [ \$SymbolForNotification \"pushpin\" \"*\" ] . \$Change);\r\ + \n \$LogPrint info \$0 (\"Change \" . \$I . \": \" . \$Change);\r\ + \n }\r\ + \n } else={: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={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n} }\r\ + \n\r\ + \n# load modules\r\ + \n:foreach Script in=[ /system/script/find where name ~ \"^(global-functio\ + ns\\\\.d|mod)/.\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :if ([ \$ValidateSyntax (\$ScriptVal->\"source\") ] = true) do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' f\ + ailed to run: \" . \$Err);\r\ + \n }\r\ + \n } else={\r\ + \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' fai\ + led syntax validation, skipping.\");\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# Add and fix global scheduler\r\ + \n:put \"Add or/and fix Global scheduler...\";\r\ + \n:local OnEvent \"/system/script { run AM-GlobalConfig; run AM-GlobalFunc\ + ; }\";\r\ + \n:local Comment \"Every Day Set Global Environment Variables\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-SetGlobalEnv\" ] ] \ + = 0) do={\r\ + \n /system/scheduler/add name=\"AM-SetGlobalEnv\" comment=\$Comment on-ev\ + ent=\$OnEvent start-time=startup;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" comment ] != \$Comment)\ + \_do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" comment=\$Comment;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" on-event ] != \$OnEvent\ + ) do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" on-event=\$OnEvent;\r\ + \n}\r\ + \n# Add Update Script scheduler\r\ + \n:put \"Add or/and fix Update Script scheduler\";\r\ + \n:set OnEvent \":global ScriptInstallUpdate; \\\$ScriptInstallUpdate;\";\ + \r\ + \n:set Comment \"Every Day Check For Update Scripts\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-ScriptInstallUpdate\ + \" ] ] = 0) do={\r\ + \n/system/scheduler/add name=\"AM-ScriptInstallUpdate\" comment=\$Comment \ + start-time=startup interval=1d on-event=\$OnEvent;\r\ + \n}\r\ + \n\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady;\r\ + \n :retry { :if (\$GlobalConfReady != true) do={ :error (\"Global configs\ + \_not ready.\"); }; } delay=100ms max=5;\r\ + \n\r\ + \n:log warning (\"This script \$ScriptName Loaded \" . \\\r\ + \n [ \$IfThenElse (\$CommitId != \"unknown\") ([ \$CommitBrief ] . \" \ + \") ] . \\\r\ + \n \"on \" . \$devBoardName . \"\\nRouterOS: \" . \$devCurVersion . \"\ + \\nArchitecture: \" . \$devCurArch . \"\\nIdentity: \" . \$Identity);\r\ + \n # signal we are ready\r\ + \n:set GlobalFuncReady true;\r\ + \n:set ExitOK true;\r\ + \n\r\ + \n:log info (\$0 . \"Global configs ready!\");\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n}\r\ + \n" +add comment="download, import and update firewall address-lists" \ + dont-require-permissions=no name=AM-FwAddrLists owner=AM-FwAddrLists \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + source="#!rsc by Vados\r\ + \n# RouterOS script: AM-FwAddrLists\r\ + \n# Script comment: download, import and update firewall address-lists\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# https://ros.vados.ru/doc/fw-addr-lists.md\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 GlobalScriptsUrl;\r\ + \n :local ListsDirName (\"fw-addr-lists.d/\" . [ /system identity get nam\ + e ] . \"/\");\r\ + \n :local ListsUrl (\$GlobalScriptsUrl . \$ListsDirName);\r\ + \n :local ListsIndex \"index.lst\";\r\ + \n :local AddrListsTimeOut 1d;\r\ + \n :local CheckCerts false;\r\ + \n\r\ + \n :global CertificateAvailable;\r\ + \n :global EitherOr;\r\ + \n :global FetchHugeFiles;\r\ + \n :global HumanReadableNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global NetMask4;\r\ + \n :global NetMask6;\r\ + \n :global ScriptLock;\r\ + \n \r\ + \n :local FindDelim do={\r\ + \n :local ValidChars \"0123456789.:/ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghi\ + jklmnopqrstuvwxyz-\";\r\ + \n :for I from=0 to=[ :len \$1 ] do={\r\ + \n :if ([ :typeof [ :find \$ValidChars [ :pick (\$1 . \" \") \$I ] ] \ + ] != \"num\") do={\r\ + \n :return \$I;\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :local GetBranch do={\r\ + \n :global EitherOr;\r\ + \n :return [ :pick [ :convert transform=md5 to=hex [ :pick \$1 0 [ \$Ei\ + therOr [ :find \$1 \"/\" ] [ :len \$1 ] ] ] ] 0 2 ];\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 :local ListComment (\"managed by \" . \$ScriptName);\r\ + \n :local Url (\$ListsUrl . \$ListsIndex);\r\ + \n :local tmpIndex false;\r\ + \n\r\ + \n :for I from=1 to=5 do={\r\ + \n :if (\$tmpIndex = false) do={\r\ + \n :set tmpIndex [ :tolf [ \$FetchHugeFiles \$ScriptName \$Url \$Chec\ + kCerts ] ];\r\ + \n :if (\$tmpIndex = false && \$I < 5) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading address-list \ + index, \" . \$I . \". try from: \" . \$Url);\r\ + \n :delay ((\$I * \$I) . \"s\");\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n :if (\$tmpIndex = false) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading address-list inde\ + x from: \" . \$Url);\r\ + \n :set tmpIndex \"\";\r\ + \n }\r\ + \n :local ReadFile (\"tmpfs/\" .\$tmpIndex);\r\ + \n :local filebody [/file/get \$ReadFile contents];\r\ + \n:foreach fwList in=[:deserialize \$ReadFile delimiter=\"\\n\" from=dsv o\ + ptions=dsv.plain] do={\r\ + \n :log error \$fwList;\r\ + \n}\r\ + \n\r\ + \n\r\ + \n :foreach List in=[ :deserialize \$tmpIndex delimiter=\"\\n\" from=dsv \ + options=dsv.plain ] do={\r\ + \n :set List (\$List->0);\r\ + \n :local ListName;\r\ + \n :local Delim [ \$FindDelim \$List ];\r\ + \n :if (\$Delim = 0) do={ :set List \"\"; };\r\ + \n :log warning (\$ScriptName . \" Parsing address-list index entry: \"\ + \_. \$List);\r\ + \n :if ([ :len \$List ] = 0) do={\r\ + \n :log error (\$ScriptName . \" Failed parsing address-list index en\ + try: \" . \$List);\r\ + \n } else={\r\ + \n :set ListName [ :pick \$List 0 \$Delim ];\r\ + \n }\r\ + \n :log warning (\$ScriptName . \" Parsing address-list index entry: \"\ + \_. \$ListName . \" - Ok.\");\r\ + \n :local ListUrl (\$ListsUrl . \$ListName);\r\ + \n :local CntAdd 0;\r\ + \n :local CntRenew 0;\r\ + \n :local CntRemove 0;\r\ + \n :local IPv4Addresses ({});\r\ + \n :local IPv6Addresses ({});\r\ + \n :local Failure false;\r\ + \n :local Data false;\r\ + \n :local TimeOut \$AddrListTimeOut;\r\ + \n\r\ + \n :for I from=1 to=5 do={\r\ + \n :if (\$Data = false) do={\r\ + \n :set Data [ :tolf [ \$FetchHugeFiles \$ScriptName \$ListUrl \$Ch\ + eckCerts ] ];\r\ + \n :if (\$Data = false && \$I < 5) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading for list '\ + \" . \$ListName . \"', \" . \$I . \". try from: \" . \$ListUrl);\r\ + \n :delay ((\$I * \$I) . \"s\");\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if (\$Data = false) do={\r\ + \n :set Data \"\";\r\ + \n :set Failure true;\r\ + \n :log warning (\$ScriptName . \" Failed downloading for list '\" . \ + \$ListName . \"' from: \" . \$ListUrl);\r\ + \n } else={\r\ + \n :log debug (\$ScriptName . \" Downloaded \" . [ \$HumanReadableNum\ + \_[ :len \$Data ] 1024 ] . \"B for list '\" . \$ListName . \"' from: \" . \ + \$ListUrl);\r\ + \n }\r\ + \n\r\ + \n :foreach Line in=[ :deserialize \$Data delimiter=\"\\n\" from=dsv op\ + tions=dsv.plain ] do={\r\ + \n :set Line (\$Line->0);\r\ + \n :local Address;\r\ + \n :if ([ :pick \$Line 0 1 ] = \"{\" && [ :pick \$Line ([ :len \$Line\ + \_] - 1) ] = \"}\") do={\r\ + \n :do {\r\ + \n :set Address [ :tostr ([ :deserialize from=json \$Line ]->\"ci\ + dr\") ];\r\ + \n } on-error={ }\r\ + \n } else={\r\ + \n :set Address ([ :pick \$Line 0 [ \$FindDelim \$Line ] ] . (\$L\ + ist->\"cidr\"));\r\ + \n }\r\ + \n :do {\r\ + \n :local Branch;\r\ + \n :if (\$Address ~ \"^[0-9]{1,3}\\\\.[0-9]{1,3}\\\\.[0-9]{1,3}\\\\\ + .[0-9]{1,3}(/[0-9]{1,2})\?\\\$\") do={\r\ + \n :local Net \$Address;\r\ + \n :local CIDR 32;\r\ + \n :local Slash [ :find \$Address \"/\" ];\r\ + \n :if ([ :typeof \$Slash ] = \"num\") do={\r\ + \n :set Net [ :toip [ :pick \$Address 0 \$Slash ] ]\r\ + \n :set CIDR [ :pick \$Address (\$Slash + 1) [ :len \$Address ]\ + \_];\r\ + \n :set Address [ :tostr (([ :toip \$Net ] & [ \$NetMask4 \$CID\ + R ]) . [ \$IfThenElse (\$CIDR < 32) (\"/\" . \$CIDR) ]) ];\r\ + \n }\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n }\r\ + \n :if (\$Address ~ \"^[0-9a-zA-Z]*:[0-9a-zA-Z:\\\\.]+(/[0-9]{1,3})\ + \?\\\$\") do={\r\ + \n :local Net \$Address;\r\ + \n :local CIDR 128;\r\ + \n :local Slash [ :find \$Address \"/\" ];\r\ + \n :if ([ :typeof \$Slash ] = \"num\") do={\r\ + \n :set Net [ :toip6 [ :pick \$Address 0 \$Slash ] ]\r\ + \n :set CIDR [ :pick \$Address (\$Slash + 1) [ :len \$Address ]\ + \_];\r\ + \n }\r\ + \n :set Address (([ :toip6 \$Net ] & [ \$NetMask6 \$CIDR ]) . \"/\ + \" . \$CIDR);\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n }\r\ + \n :if (\$Address ~ \"^[\\\\.a-zA-Z0-9-]+\\\\.[a-zA-Z]{2,}\\\$\") d\ + o={\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n }\r\ + \n } on-error={ }\r\ + \n }\r\ + \n \r\ + \n\r\ + \n :foreach Entry in=[ /ip/firewall/address-list/find where \\\r\ + \n list=\$ListName comment=\$ListComment ] do={\r\ + \n :local Address [ /ip/firewall/address-list/get \$Entry address ];\ + \r\ + \n :local Branch [ \$GetBranch \$Address ];\r\ + \n :local TimeOut (\$IPv4Addresses->\$Branch->\$Address);\r\ + \n :if ([ :typeof \$TimeOut ] = \"time\") do={\r\ + \n :log warning (\$ScriptName . \" Renewing IPv4 address \" . \$Add\ + ress . \\\r\ + \n \" in list '\" . \$ListName . \"' with \" . \$TimeOut . \".\ + \");\r\ + \n /ip/firewall/address-list/set \$Entry timeout=\$TimeOut;\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address);\r\ + \n :set CntRenew (\$CntRenew + 1);\r\ + \n } else={\r\ + \n :if (\$Failure = false) do={\r\ + \n :log warning (\$ScriptName . \" Removing IPv4 address \" . \$A\ + ddress . \\\r\ + \n \" from list '\" . \$ListName . \".\");\r\ + \n /ip/firewall/address-list/remove \$Entry;\r\ + \n :set CntRemove (\$CntRemove + 1);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach Entry in=[ /ipv6/firewall/address-list/find where \\\r\ + \n list=\$ListName comment=\$ListComment ] do={\r\ + \n :local Address [ /ipv6/firewall/address-list/get \$Entry address ]\ + ;\r\ + \n :local Branch [ \$GetBranch \$Address ];\r\ + \n :local TimeOut (\$IPv6Addresses->\$Branch->\$Address);\r\ + \n :if ([ :typeof \$TimeOut ] = \"time\") do={\r\ + \n :log warning (\$ScriptName . \" Renewing IPv6 address \" . \$Add\ + ress . \\\r\ + \n \" in list '\" . \$ListName . \"' with \" . \$TimeOut . \".\ + \");\r\ + \n /ipv6/firewall/address-list/set \$Entry timeout=\$TimeOut;\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address);\r\ + \n :set CntRenew (\$CntRenew + 1);\r\ + \n } else={\r\ + \n :if (\$Failure = false) do={\r\ + \n :log warning (\$ScriptName . \" Removing IPv6 address \" . \$A\ + ddress . \\\r\ + \n \" from list '\" . \$ListName . \".\");\r\ + \n /ipv6/firewall/address-list/remove \$Entry;\r\ + \n :set CntRemove (\$CntRemove + 1);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach BranchName,Branch in=\$IPv4Addresses do={\r\ + \n :log warning (\$ScriptName . \" Handling branch: \" . \$BranchName\ + );\r\ + \n :foreach Address,Timeout in=\$Branch do={\r\ + \n :log warning (\$ScriptName . \" Adding IPv4 address \" . \$Addre\ + ss . \\\r\ + \n \" to list '\" . \$ListName . \"' with \" . \$Timeout . \".\ + \");\r\ + \n :onerror Err {\r\ + \n /ip/firewall/address-list/add list=\$ListName comment=\$ListCo\ + mment \\\r\ + \n address=\$Address timeout=\$Timeout;\r\ + \n :set CntAdd (\$CntAdd + 1);\r\ + \n } do={\r\ + \n :log warning (\$ScriptName . \" Failed to add IPv4 address \" \ + . \$Address . \\\r\ + \n \" to list '\" . \$ListName . \"': \" . \$Err);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach BranchName,Branch in=\$IPv6Addresses do={\r\ + \n :log warning (\$ScriptName . \" Handling branch: \" . \$BranchName\ + );\r\ + \n :foreach Address,Timeout in=\$Branch do={\r\ + \n :log warning (\$ScriptName . \" Adding IPv6 address \" . \$Addre\ + ss . \\\r\ + \n \" to list '\" . \$ListName . \"' with \" . \$Timeout . \".\ + \");\r\ + \n :onerror Err {\r\ + \n /ipv6/firewall/address-list/add list=\$ListName comment=\$List\ + Comment \\\r\ + \n address=\$Address timeout=\$Timeout;\r\ + \n :set CntAdd (\$CntAdd + 1);\r\ + \n } do={\r\ + \n :log warning (\$ScriptName . \" Failed to add IPv6 address \" \ + . \$Address . \\\r\ + \n \" to list '\" . \$ListName . \"': \" . \$Err);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :log info (\$ScriptName . \" list: \" . \$ListName . \\\r\ + \n \" (\" . [ \$HumanReadableNum (\$CntAdd + \$CntRenew) 1000 ] . \ + \")\" . \\\r\ + \n \" -- added: \" . [ \$HumanReadableNum \$CntAdd 1000 ] . \\\r\ + \n \" - renewed: \" . [ \$HumanReadableNum \$CntRenew 1000 ] . \\\r\ + \n \" - removed: \" . [ \$HumanReadableNum \$CntRemove 1000 ]);\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err;\r\ + \n}\r\ + \n" +add comment=\ + "Lookup IP addresses for RKN list and add them to firewall address-list" \ + dont-require-permissions=no name=AM-RKN-dnsLookup owner=AM-RKN-dnsLookup \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + source="#!rsc by Vados\r\ + \n# RouterOS script: AM-RKN-dnsLookup\r\ + \n# Script comment: Lookup IP addresses for RKN list and add them to firew\ + all address-list\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n# Script description: This script is intended to be run periodically, e.\ + g. once a day, to update the IP addresses in the firewall address-list bas\ + ed on the RKN list.\r\ + \n# It resolves the domain names in the RKN list and a\ + dds the corresponding IP addresses to the specified firewall address-list.\ + \r\ + \n# The script also handles CNAME records by following\ + \_them until it finds A records.\r\ + \n# Usage:\r\ + \n# /system/script { run AM-RKN-dnsLookup; }\r\ + \n:local ScriptName [ :jobname ];\r\ + \n\r\ + \n:global dnsLookupReady false;\r\ + \n:if ([:typeof \$dnsLookupReady] != \"boolean\") do={ :set dnsLookupReady\ + \_true; }\r\ + \nwhile (!\$dnsLookupReady) do={ :nothing; }\r\ + \n:set dnsLookupReady false;\r\ + \n\r\ + \n:local arrRKN {\r\ + \n \"telegra.ph\"\r\ + \n \"grani.ru\"\r\ + \n \"xhamster.com\"\r\ + \n \"kasparov.ru\"\r\ + \n \"lostfilm.tv\"\r\ + \n \"rutracker.org\"\r\ + \n \"lurkmore.to\"\r\ + \n \"dou.ua\"\r\ + \n \"youporn.com\"\r\ + \n \"pornolab.net\"\r\ + \n \"crimerussia.com\"\r\ + \n \"telegram.org\"\r\ + \n \"api.telegram.org\"\r\ + \n \"telegram.me\"\r\ + \n \"t.me\";}\r\ + \n\r\ + \n:local ListRKN \"FuckRKN\";\r\ + \n:local ListComment (\"ListRKN managed by \" . \$ScriptName);\r\ + \n:foreach aListItem in=[/ip/firewall/address-list find list=\$ListRKN] do\ + ={\r\ + \n /ip firewall address-list remove \$aListItem;\r\ + \n}\r\ + \n:foreach aItem in=\$arrRKN do={\r\ + \n :do {\r\ + \n :resolve \$aItem;\r\ + \n } on-error={\r\ + \n :log error \"dns resolve failure [ ip - resolve ip ]\";\r\ + \n }\r\ + \n :foreach dnsRecord in=[/ip dns cache all find where (name=\$aItem)] \ + do={\r\ + \n :if ([/ip dns cache all get \$dnsRecord type]=\"A\") do={\r\ + \n :local newAddress [/ip dns cache all get \$dnsRecord data];\ + \r\ + \n :do {\r\ + \n /ip firewall address-list add list=\$ListRKN address=\$n\ + ewAddress comment=\$aItem;\r\ + \n } on-error={\r\ + \n :log error \"error when adding ip to list: \$newAddress\ + \";\r\ + \n }\r\ + \n }\r\ + \n :if ([/ip dns cache all get \$dnsRecord type]=\"CNAME\") do={\r\ + \n :local cname;\r\ + \n :local nextCname;\r\ + \n :set cname [/ip dns cache all find where (name=\$aItem && ty\ + pe=\"CNAME\")];\r\ + \n :set nextCname [/ip dns cache all find where (name=[/ip dns \ + cache all get \$cname data] && type=\"CNAME\")];\r\ + \n :while (\$nextCname != \"\") do={\r\ + \n :set cname \$nextCname;\r\ + \n :set nextCname [/ip dns cache all find where (name=[/ip \ + dns cache all get \$cname data] && type=\"CNAME\")];\r\ + \n }\r\ + \n :foreach aRecord in=[/ip dns cache all find where (name=[/ip\ + \_dns cache all get \$cname data] && type=\"A\")] do={\r\ + \n :do {\r\ + \n /ip firewall address-list add list=\$ListRKN address\ + =[/ip dns cache all get \$aRecord data] comment=\$aItem;\r\ + \n } on-error={\r\ + \n :log error \"error when adding ip to list: \$newAddr\ + ess\";\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:if ([ :len [ /system/scheduler/find where name=\$ScriptName ] ] = 0) do\ + ={\r\ + \n :log error (\$ScriptName . \"System Scheduler for script: \" . \$Scri\ + ptName . \" is NOT SET! Fix It Now!\");\r\ + \n /system/scheduler/add name=\$ScriptName on-event=\"/system/script { \ + run \$ScriptName; }\" comment=\"Update RKN DNS Looup\" interval=00:20:00 p\ + olicy=\"ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon\"\ + \_start-time=startup;\r\ + \n }\r\ + \n:set dnsLookupReady true;\r\ + \ndelay 5s; \r\ + \n:global dnsLookupReady (a);\r\ + \n" +add dont-require-permissions=no name=dnsForwarders owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-dnsForwarders\r\ + \n# Script comment: DNS Forwarders and DOH Servers | by @xmrdenb43\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# \r\ + \n# tested on hap ac lite tc/hap ax3, RoS 7.18.2+\r\ + \n\r\ + \n\r\ + \n/ip/dns/set allow-remote-requests=yes doh-max-concurrent-queries=100 doh\ + -max-server-connections=20 use-doh-server=https://security.cloudflare-dns.\ + com/dns-query verify-doh-cert=no;\r\ + \n\r\ + \n/ip dns static\r\ + \n:do {\r\ + \nadd address=8.8.8.8 comment=\"DNS Google\" name=dns.google type=A\r\ + \nadd address=8.8.4.4 comment=\"DNS Google\" name=dns.google type=A\r\ + \nadd address=9.9.9.9 comment=\"DNS Quad9\" name=dns.quad9.net type=A\r\ + \nadd address=149.112.112.112 comment=\"DNS Quad9\" name=dns.quad9.net typ\ + e=A\r\ + \nadd address=195.133.25.16 comment=\"DNS Comss\" name=dns.comss.one type=\ + A\r\ + \n\r\ + \n/ip dns forwarders\r\ + \nadd doh-servers=https://cloudflare-dns.com/dns-query name=\"CloudFlare D\ + oH\"\r\ + \nadd doh-servers=https://secure.cloudflare-dns.com/dns-query name=\"Cloud\ + Flare Secure DoH\"\r\ + \nadd disabled=yes doh-servers=https://dns.quad9.net/dns-query name=\"Quad\ + 9 Default\" verify-doh-cert=no\r\ + \nadd doh-servers=https://dns.google/dns-query name=\"Google DoH\"\r\ + \nadd dns-servers=dns.comss.one doh-servers=https://dns.comss.one/mikrotik\ + \_name=\"Comss DoH\" verify-doh-cert=no\r\ + \nadd doh-servers=https://cloudflare-dns.com/dns-query,https://dns.google/\ + dns-query name=\"CF & Google DoH\"\r\ + \nadd dns-servers=1.0.0.1,8.8.4.4,1.1.1.1,8.8.8.8,77.88.8.1,77.88.8.8 name\ + =\"CF & G & Ya IPv4\" verify-doh-cert=no\r\ + \n} on-error={ }\r\ + \n\r\ + \n" +add dont-require-permissions=no name=AM-ADguardHome-container owner=vados \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + source="#!rsc by Vados\r\ + \n# RouterOS script: AM-ADguardHome-container\r\ + \n# Script comment: ADguardHome-container to container | by @xdenb43\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# \r\ + \n# tested on hap ac lite tc/hap ax3, RoS 7.18.2+\r\ + \n# tested on hap ax3/RoS 7.17.2+\r\ + \n\r\ + \n# enable containers, follow https://help.mikrotik.com/docs/spaces/ROS/pa\ + ges/84901929/Container\r\ + \n#/system/device-mode/update container=yes\r\ + \n\r\ + \n# MAIN PART STARTS HERE\r\ + \n/interface veth\r\ + \nadd address=192.168.254.5/24 gateway=192.168.254.1 name=ADGUARD-HOME\r\ + \n\r\ + \n/interface bridge\r\ + \nadd name=Bridge-Docker port-cost-mode=short\r\ + \n/interface bridge port\r\ + \nadd bridge=Bridge-Docker interface=ADGUARD-HOME\r\ + \n/ip address\r\ + \nadd address=192.168.254.1/24 interface=Bridge-Docker network=192.168.254\ + .0\r\ + \n\r\ + \n/ip firewall nat\r\ + \nadd action=masquerade chain=srcnat comment=AdGuardHome src-address=192.1\ + 68.254.5\r\ + \n\r\ + \n# USB flash drive, FS ext4\r\ + \n/container config\r\ + \nset ram-high=200.0MiB registry-url=https://registry-1.docker.io tmpdir=/\ + usb1/docker/pull\r\ + \n\r\ + \n/container mounts\r\ + \nadd dst=/opt/adguardhome/conf name=adguard_home_conf src=/usb1/docker_co\ + nfigs/adguard_home\r\ + \n\r\ + \n/container\r\ + \nadd cmd=\"-c /opt/adguardhome/conf/AdGuardHome.yaml -h 0.0.0.0 -w /opt/a\ + dguardhome/work\" entrypoint=/opt/adguardhome/AdGuardHome interface=ADGUAR\ + D-HOME logging=yes mounts=\\\r\ + \n adguard_home_conf root-dir=/usb1/docker/adguard_home workdir=/opt/ad\ + guardhome/work remote-image=adguard/adguardhome:latest\r\ + \n\r\ + \n/container/start [find where interface=ADGUARD-HOME]\r\ + \n\r\ + \n# ADH available on http://192.168.254.5:300 , configure before use\r\ + \n# Choose one of the options below\r\ + \n# uncomment lines before copying to terminal\r\ + \n\r\ + \n# OPTION 1\r\ + \n# Just set AGH ip as DNS server.\r\ + \n# /!\\ DNS FWD will work.\r\ + \n# /!\\ No device-related stats will be gathered (all dns requests are co\ + ming from mikrotik)\r\ + \n#/ip dns\r\ + \n#set allow-remote-requests=yes servers=192.168.254.5\r\ + \n#/ip firewall nat\r\ + \n#add action=redirect chain=dstnat comment=\"Incoming DNS redirect\" dst-\ + address-type=!local dst-port=53 in-interface-list=LAN protocol=udp\r\ + \n#add action=redirect chain=dstnat comment=\"Incoming DNS redirect\" dst-\ + address-type=!local dst-port=53 in-interface-list=LAN protocol=tcp\r\ + \n\r\ + \n\r\ + \n# OPTION 2\r\ + \n# Forward all DNS requests to ADH\r\ + \n# /!\\ DNS FWD will NOT work\r\ + \n# /!\\ WILL SHOW stats for every LAN device\r\ + \n#/ip firewall nat\r\ + \n#add action=dst-nat chain=dstnat comment=\"local AdGuard udp - NO NAT L\ + oopback / local addresses only!\" dst-port=53 in-interface-list=LAN protoc\ + ol=udp src-address=\\\r\ + \n# 192.168.88.0/24 to-addresses=192.168.254.5 to-ports=53\r\ + \n#add action=dst-nat chain=dstnat comment=\"local AdGuard tcp\" dst-port=\ + 53 in-interface-list=LAN protocol=tcp src-address=192.168.88.0/24 to-addre\ + sses=192.168.254.5 to-ports=53\r\ + \n# cat adguardhome_container.rsc\r\ + \n# adguard home to container | by @xdenb43\r\ + \n# tested on hap ax3/RoS 7.17.2+\r\ + \n\r\ + \n# enable containers, follow https://help.mikrotik.com/docs/spaces/ROS/pa\ + ges/84901929/Container\r\ + \n/system/device-mode/update container=yes\r\ + \n\r\ + \n# MAIN PART STARTS HERE\r\ + \n/interface veth\r\ + \nadd address=192.168.254.5/24 gateway=192.168.254.1 name=ADGUARD-HOME\r\ + \n\r\ + \n/interface bridge\r\ + \nadd name=Bridge-Docker port-cost-mode=short\r\ + \n/interface bridge port\r\ + \nadd bridge=Bridge-Docker interface=ADGUARD-HOME\r\ + \n/ip address\r\ + \nadd address=192.168.254.1/24 interface=Bridge-Docker network=192.168.254\ + .0\r\ + \n\r\ + \n/ip firewall nat\r\ + \nadd action=masquerade chain=srcnat comment=AdGuardHome src-address=192.1\ + 68.254.5\r\ + \n\r\ + \n# USB flash drive, FS ext4\r\ + \n/container config\r\ + \nset ram-high=200.0MiB registry-url=https://registry-1.docker.io tmpdir=/\ + usb1/docker/pull\r\ + \n\r\ + \n/container mounts\r\ + \nadd dst=/opt/adguardhome/conf name=adguard_home_conf src=/usb1/docker_co\ + nfigs/adguard_home\r\ + \n\r\ + \n/container\r\ + \nadd cmd=\"-c /opt/adguardhome/conf/AdGuardHome.yaml -h 0.0.0.0 -w /opt/a\ + dguardhome/work\" entrypoint=/opt/adguardhome/AdGuardHome interface=ADGUAR\ + D-HOME logging=yes mounts=\\\r\ + \n adguard_home_conf root-dir=/usb1/docker/adguard_home workdir=/opt/ad\ + guardhome/work remote-image=adguard/adguardhome:latest\r\ + \n\r\ + \n/container/start [find where interface=ADGUARD-HOME]\r\ + \n\r\ + \n# ADH available on http://192.168.254.5:300 , configure before use\r\ + \n# Choose one of the options below\r\ + \n# uncomment lines before copying to terminal\r\ + \n\r\ + \n# OPTION 1\r\ + \n# Just set AGH ip as DNS server.\r\ + \n# /!\\ DNS FWD will work.\r\ + \n# /!\\ No device-related stats will be gathered (all dns requests are co\ + ming from mikrotik)\r\ + \n#/ip dns\r\ + \n#set allow-remote-requests=yes servers=192.168.254.5\r\ + \n#/ip firewall nat\r\ + \n#add action=redirect chain=dstnat comment=\"Incoming DNS redirect\" dst-\ + address-type=!local dst-port=53 in-interface-list=LAN protocol=udp\r\ + \n#add action=redirect chain=dstnat comment=\"Incoming DNS redirect\" dst-\ + address-type=!local dst-port=53 in-interface-list=LAN protocol=tcp\r\ + \n\r\ + \n\r\ + \n# OPTION 2\r\ + \n# Forward all DNS requests to ADH\r\ + \n# /!\\ DNS FWD will NOT work\r\ + \n# /!\\ WILL SHOW stats for every LAN device\r\ + \n#/ip firewall nat\r\ + \n#add action=dst-nat chain=dstnat comment=\"local AdGuard udp - NO NAT L\ + oopback / local addresses only!\" dst-port=53 in-interface-list=LAN protoc\ + ol=udp src-address=\\\r\ + \n# 192.168.88.0/24 to-addresses=192.168.254.5 to-ports=53\r\ + \n#add action=dst-nat chain=dstnat comment=\"local AdGuard tcp\" dst-port=\ + 53 in-interface-list=LAN protocol=tcp src-address=192.168.88.0/24 to-addre\ + sses=192.168.254.5 to-ports=53" +/user group +add name=backup policy="telnet,ssh,ftp,read,write,policy,test,sniff,sensitive,\ + !local,!reboot,!winbox,!password,!web,!api,!romon,!rest-api" +/interface bridge +add admin-mac=48:8F:5A:8E:1A:BC auto-mac=no mlag-peer-port="ether1 - Unet" \ + name=Bridge-LAN port-cost-mode=short +/interface wireless +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 \ + wds-default-bridge=Bridge-LAN wds-mode=dynamic-mesh wireless-protocol=\ + 802.11 wmm-support=enabled wps-mode=disabled +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 wds-default-bridge=Bridge-LAN \ + wds-mode=dynamic-mesh wireless-protocol=802.11 wmm-support=enabled \ + wps-mode=disabled +/interface wireless nstreme +set wlan1 enable-nstreme=yes +set wlan2 enable-nstreme=yes +/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="ipsec,wpa-eap,capsman,fetch,sstp,ovpn,radius,userman,\ + openflow,tr069,dot1x,www,api,reverse-proxy" crl-download=yes crl-store=\ + system crl-use=yes +/interface bridge port +add bridge=Bridge-LAN disabled=yes interface="ether1 - Unet" +add bridge=Bridge-LAN interface=ether2 +add bridge=Bridge-LAN interface=ether3 +add bridge=Bridge-LAN interface=ether4 +add bridge=Bridge-LAN interface=ether5 +add bridge=Bridge-LAN interface=wlan2 +add bridge=Bridge-LAN interface=wlan1 +/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 allow-fast-path=no disable-ipv6=yes disable-link-local-address=yes \ + forward=no 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 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 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-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 +/interface wifi datapath +add bridge=Bridge-LAN disabled=no interface-list=all name=xs-DataPath +/interface wireguard peers +add allowed-address=10.8.0.2/32,0.0.0.0/0 client-allowed-address=::/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-488F5A8E1ABC discovery-interfaces=ether2 interfaces=wlan1,wlan2 \ + lock-to-caps-man=yes +/ip address +add address=10.30.30.81/24 interface=Bridge-LAN network=10.30.30.0 +add address=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 dhcp-options=clientid,clientid_duid interface=\ + "ether1 - Unet" name=client1 use-peer-dns=no use-peer-ntp=no +/ip dhcp-server +add add-arp=yes address-pool=dhcp always-broadcast=yes bootp-support=none \ + dhcp-option-set=domain-search-set interface=Bridge-LAN lease-time=10m \ + name=masterDHCP server-address=10.30.30.81 +/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.92 client-id=1:d4:6d:6d:fd:e5:49 mac-address=\ + D4:6D:6D:FD:E5:49 server=masterDHCP +add address=10.30.30.93 client-id=1:7e:8b:1e:cb:b8:cb mac-address=\ + CC:42:10:12:46:94 server=masterDHCP +add address=10.30.30.94 client-id=1:50:cc:f8:85:96:a mac-address=\ + 50:CC:F8:85:96:0A server=masterDHCP +add address=10.30.30.82 client-id=1:e4:18:6b:58:34:ab mac-address=\ + E4:18:6B:58:34:AB server=masterDHCP +add address=10.30.30.75 client-id=1:0:27:15:41:97:a9 mac-address=\ + 00:27:15:41:97:A9 server=masterDHCP +add address=10.30.30.77 dhcp-option=HostName dhcp-option-set=StartLife1 \ + mac-address=C4:82:E1:03:49:10 server=masterDHCP +add address=10.30.30.73 client-id=1:10:38:1f:82:81:f2 mac-address=\ + 10:38:1F:82:81:F2 server=masterDHCP +add address=10.30.30.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=MiTV dhcp-option=HostName dhcp-option-set=\ + MiTV mac-address=20:72:A9:D3:34:36 server=masterDHCP +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 +/ip dhcp-server network +add address=10.30.30.0/24 caps-manager=10.30.30.10 dhcp-option=\ + domain-search-list dhcp-option-set=domain-search-set dns-server=\ + 10.30.30.81 domain=WORKGROUP gateway=10.30.30.81 netmask=24 ntp-server=\ + 10.30.30.81,10.30.30.10 wins-server=10.30.30.95,10.30.30.98 +/ip dns +set allow-remote-requests=yes cache-max-ttl=1d doh-max-concurrent-queries=100 \ + doh-max-server-connections=20 servers=1.0.0.1,8.8.8.8 use-doh-server=\ + https://security.cloudflare-dns.com/dns-query +/ip dns static +add address=10.30.30.33 name=ros.vados.ru type=A +add address=10.30.30.95 name=vados-nuc type=A +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=reg.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.0.0.1 comment="CloudFlare-doh IPv4 2" name=\ + security.cloudflare-dns.com type=A +add address=1.1.1.1 comment="CloudFlare-doh IPv4 1" name=\ + security.cloudflare-dns.com type=A +add address=149.112.112.112 comment="Cuad9-dns IPv4 2" name=dns.quad9.net \ + type=A +add address=9.9.9.9 comment="Cuad9-dns IPv4 1" 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=91.192.189.2 comment=Unet-DNS disabled=yes name=ns1.unet.ws type=\ + A +/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=NUC list=NoWG +add address=10.30.30.10 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=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=89.110.101.17 comment="!!!VDSina Server!!!" disabled=yes list=\ + NoVdsina +/ip firewall filter +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=12h chain=input comment="block honeypot DNS" \ + 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 +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 +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 +/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=WG dst-address-list=!NoVdsina \ + in-interface=Bridge-LAN log-prefix=WG-nat out-interface=WG routing-mark=\ + To-VPN +add action=masquerade chain=srcnat comment="masquerade Default" ipsec-policy=\ + out,none out-interface="ether1 - Unet" routing-mark=!To-VPN +add action=dst-nat chain=dstnat comment=npm 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 dst-port=443 \ + in-interface="ether1 - Unet" protocol=tcp to-addresses=10.30.30.33 \ + to-ports=443 +add action=dst-nat chain=dstnat disabled=yes dst-port=22 in-interface=\ + "ether1 - Unet" protocol=tcp to-addresses=10.30.30.33 to-ports=22 +add action=dst-nat chain=dstnat comment="amster.vados.ru For Certbot HTTP" \ + dst-port=80 in-interface="ether1 - Unet" protocol=tcp to-addresses=\ + 10.30.30.33 to-ports=80 +add action=dst-nat chain=dstnat 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 +/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 user profile +set [ find default=yes ] address-pool=dhcp +/ip hotspot walled-garden +add server=*1 +add server=*1 +/ip ipsec settings +set accounting=no +/ip ipsec policy +set 0 disabled=yes dst-address=0.0.0.0/0 src-address=0.0.0.0/0 +/ip ipsec profile +set [ find default=yes ] dpd-interval=2m dpd-maximum-failures=5 +/ip proxy +set cache-administrator="" max-cache-size=none port=80,443 src-address=\ + 0.0.0.0 +/ip route +add 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 +/ip service +set ftp disabled=yes +set telnet disabled=yes +set reverse-proxy disabled=yes +set ssh address=10.30.30.0/24 port=2222 +set winbox address=10.30.30.0/24 +set api address=10.30.30.0/24 disabled=yes +set api-ssl address=10.30.30.0/24 disabled=yes +set www-ssl port=18443 +set www address=10.30.30.0/24 disabled=yes port=18880 +/ip service webserver +set 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 +add interface=WG type=external +add interface=wlan2 type=internal +/snmp community +set [ find default=yes ] addresses=10.30.30.0/24 read-access=no security=\ + private +/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 note +set show-at-login=no +/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="Scheduler for Update Certificates CloudFlare Quad9" disabled=yes \ + 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="Every Day Set Global Environment Variables" name=AM-SetGlobalEnv \ + on-event="/system/script { run AM-GlobalConfig; run AM-GlobalFunc; }" \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Every Day Check For Update Scripts" interval=1d name=\ + AM-ScriptInstallUpdate on-event=\ + ":global ScriptInstallUpdate; \$ScriptInstallUpdate;" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Update RKN DNS Looup" disabled=yes interval=20m name=\ + AM-RKN-dnsLookup on-event="/system/script { run AM-RKN-dnsLookup; }" \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +/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/20260506/20260506162002-Diff-Config.rsc b/MikroMaster/history/20260506/20260506162002-Diff-Config.rsc new file mode 100644 index 0000000..38c8906 --- /dev/null +++ b/MikroMaster/history/20260506/20260506162002-Diff-Config.rsc @@ -0,0 +1,7 @@ +4438,4439c4438,4440 +< 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 +--- +> disabled=yes 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 -- 2.52.0