From db439ac034ebb48e107eb8de09c1b42e91a266e5 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Tue, 5 May 2026 06:20:54 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at May 05 06:20:54. --- .../20260505/20260505062002-Binary.backup | Bin 0 -> 270775 bytes .../20260505/20260505062002-Config.rsc | 4506 +++++++++++++++++ .../20260505/20260505062002-Diff-Config.rsc | 12 + 3 files changed, 4518 insertions(+) create mode 100644 MikroMaster/20260505/20260505062002-Binary.backup create mode 100644 MikroMaster/20260505/20260505062002-Config.rsc create mode 100644 MikroMaster/history/20260505/20260505062002-Diff-Config.rsc diff --git a/MikroMaster/20260505/20260505062002-Binary.backup b/MikroMaster/20260505/20260505062002-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..c5de8053a3249e03c6ccea45e6fbf14071f08d87 GIT binary patch literal 270775 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�E`@e4k^CEltXEf_YILznSnNYsjrywsak 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

V}G!8iRWNA3T)2%58$=VymtV+ zgMR;m(I$wtUYH3SmV@Vmb@)-`l{18>AYW=!X|UF@b!cQ`K69rm_c&CIR-t|{5(+0D zr`BfY67T5M`nc03(($bW)-0o}fZ+|)v{j`gsoxIw8EglZGDS>N{DH0E_iDtBdT^#GCiSw4ci#^ zrC(gH_BVc38=Lc;YtMXLWMG!2v8(~GILPXg8+2UWSP;N4Rh(DJDfv9cR~&RGc*no( zS&E{DnGm1Rps*ZHuU9TI^30GCxwWj+Mzx6-IFQaG6taQ~c`eAH$=|NakjQf;%>A}; z>I^&iPDlg}w!^O^kg&}-uAsu=AhpP3*tz|&H&4VH2u)cf$jWihc+l#>bLNs;qHWvf zsoeBpeUtt%ifg3?|03ta7C_wPf;i5{*T!`%dSXwD}#w;*=_E=t6AY#$TV$$Kr@g}y!625!(R&&v*! z&(HjbaHCL=KUiJ~cnXahb_q(HIlicVq}~;tXJ@8t7VkfC{6?~?93n~?X%|wZ0rz{t zymb25ROGkK7IXpE8qCaRB#SJ5y5*wT>9DIlJRU~*f#{PyUhvCz7vl=5w%WI-QONYy zrv?fYh30eDyBl`G2Cd(jsk81{*Yj3m`Ur=PV@fQ~KtVZ7Ei5TmMW=4{vV!3Yuof*r zHhoWIWWXg3tOCm^!VE!2=EsgIjc3M$qyOqsV1RKi2FYU3|_FtSP!3=vghxj(r46G zks*vw^Hk?wSJaZ~V($D@IX+k|Ty&5D(gkn!xCoEF@R8feLd8iK` zpLFpmVo0T&x7-c7jWJFAz8mw({dYZ*-VwoRFFZ6O_@uND8U*V5{DL>YhJw+zquZEc z#m$`#r0GnYb~a)p7Lt=KtE<*72C!Y67d|0=C^o3ml0d9il&it)Kp-vO3>Wm$-r`-? zdnip&75Vs%Ck}8fOV|8T|?;Hae$Q)*v79 zp%z*`Sh~ttpfEYOA9lj6qT*A#bwVQr5Yjcm|Hsz;Ekb7zKlUvgJpQ2!UPDImAAxeT z&T#eDk*kdBjNK-2yw&Y|ja_x%=ZASu`ICCFG2vmd6Yq{rxTYg4

r$yF`{Fw}Lpn z#Q}H&If5XZazG#k%|*!{$*AJ7kzfH1GMGJ0;h`TQu0ZqCOu9siCGYz{44K6^I*gXy zWm?+c5n&32bqcRmW(3lgC)AX(D!ZY?3Ex+jC+5_O!W`1L-Db5k$Rmu`%$M~7n;yEu zw)!n*T!QynlO8|h2%Bzt1=VpAB^{BMgtPOubnTg8I<5+9*Xs=day_@tWo;K*DHic9 zLKan}^(07Q@j$FyZGNzHhK#3%#P|2XwpbPW)ZMS!AWH zEB-xA9bI)-6wn&IA#|UUckDVIkNE1gJL8|uKdQ{0C^s$aS?Jmge{jY*Vl^K$RfI7m zdG8ci#n4kyeW<=Wc|8Gz@dR^8vy}nw0~ghFC&;5o6Ljldn7gPa3fyRZ0BmN4);6g4 zgz2=Def0M8(#7coE?yRtURK~0iz9+o&d@6yJHwNy1>3#ktL*W@eDz(ES2s^fScQ;# zsdmVpp+6YbYKdRV0G=ibF;{Z{+*7VWgm2U@>&^#abT!Kt8gGXyGSKrRSSlj+@haM9 zv{FQKB2WI=+ZDItL1tjE&dM1oSjjF$P`-W^@o)e({g<(jJ4U*9@zProxPyTWQ#^X! zDO9?>-FpQVA^y^r9-1qgy~Q$S+LJ7F&?0p4TMVV9mbV?qU{fEjA zPvm6T+1IJ8`Pp5YO$e+t%S$R2)b)&BNrbe#*p&mVC&RGu1v90A!j|9FCXb88&QZ?o zT+@*{**4P%+5Wl)#+-1dRQJvs2el1Rte@A!P679Ww8hX0Imu(8*G5(?TPZW8w*7cW zSmdd+eT%z0j0()aeQXU$Lv8vK6^>OQ)2}P{Yn`S10?pwCTeWYMovPwVv`K4lwO7TmPPhK3v@EM3i z^>-67j({C0NC{}34~&VxZ5Q&9M=jyFH-`-x6w|x~?{on8(VpG$@!NJc4mVa78TROG zv-0}y$vzG!CbwaO1?PyV7-9yhM;uc|u_>+?Rs^1w6aoMYv3=_K)!vjjEAj;`d$ zH2UqvEr_L#LWRbDWPRjB_k1pl8xfF#EBhCZZy%KSO20--Z*fqg9t#0Z{vAy@xqT35 zcT?bY2sJ0hkl~YP>gC|GCD?mkw_o>#_^?uRQ~8Sc=)xi^GMAV`&&9bJXJ)!gFaNA> z{mMN)e5CORcA|nK#hVAlrUt9Jr6m6d8h0@Obn6}IpS&3|VYmP20C!|B!rLbTSmv^< zLuwd%L@y;UVgCertYu`v5mpPczjfD&o4-jW$*^oH-ieg?@91%AD%Z9aNVLOD-}h!~ zUEt{Zl?B-r>5g3TeH(S2w`;EAQRoB$jC{qo<>(mRYR&9WcJ)K>xkWVqiS?biv0O&x zWtN~%Nhb9a+DDlc_Lw{ccMdE1MM$YJ$oB@9smy0Y*7(QhK8Z}QmWjQ8{j6Z=m@MVQ zrEX|**4dlr3rsfBuTHIK($P-49MacXYbl(liD{o%dKhmcdY-3d+{M*}NIiA2iNIg*jlo=ttwak9;JJbS|2k!nxN;GAtJLqMd#~X+>c4m7 z^KZS}2Lt9st{f^V7q8Z1a)%(AXxyrl!NMEkHp8;5GDO$VyA@7n$vK^E9^z_fzACAA zzQvOGkFI))a3w5cnrG&FX&dQJ0(#3-QK4@A4Ue!xyY{OM({}{MXKbZZR0o`aGCtQ? zN{3@9=Fz_KTVV5|^=^On*;MA*;yo^wQ@~?kX6fBP9b}B1&qVePP1SB0bkX`2}=HgI+-|rMU0nY!ld@}R!*js1AV`b6g^CwTy@U7F_ z9()}gk!v=v>DU_?JZtCriSyp^GgzkYfu20j(M@IG-STA=(tC*i&Q0Q?B3Tg3nVV3 zp!-=^5j+vOYsMfLSyzW)`)Gr{CLP|q-C~<50mdlYZnzYsf4VA<6LR@oMA09dWxuCc z?WyrMZ8M-Dmr2=_AFz-xMKpGqtT@8VR_vD;YF+I;-GuFT(l)>Jb9_Ob(79b0ixjrU=ViOA#mdA_F)o&IJd<93FL8A?Bu?fAh_?SVNt@I5NLyQa zC^dgL?OgZGYHpti4jMFE!>Kp!;9eT9=3M%v>z~OBqW`UwHs-{;zUq$0YZEJZ17te~ z`~pe-G!C0Mq2jIF&zILwYh;lpzk0HRUBwIp&j(#~cC6;%kA(;GCOL6k;nH3_NXQFNhP68?vIA3$sU9QLQ8WtVlb9!IHb1L}z_1b{7@N46~LVr@Wui z^40-5m5;otgxNNE-UY;cH+(*mrrSdbZ8L(QCuYc&_UCNvL+RF`aVQ;SjWuI%PIwuN zWVe9FdpYgWiouV3pxvS3*efbVf_;Mp?DgaHyqiLAIf5`JeQK+WV`L9!peJs(bQ`)>$dtLzTFJuC;_zzZZ0i~ec;2+$M_^}60`FG?y%mP<*=+gg-9ND zXgJdXI3M=KaGQbwHXVGElavEMXb9OsObWL0HF+xLyX^U@tC|p&odv>MbO2LzQ(aai zNIh-!kg_aPXa_Y?&_tbQ)J={Ruq{0|;k71Eb{BChMhB^SWtl1#H&*zDvfI-6flG(_ zsD=`vHLCk-RDsD*(M^KAqaX8TK7T*Q24hD+gZp+SYi(DKWzN zJEgTNct>HTdua`flJ(^d0Y7f;JAIntv8!XOMij$CI5;&^fo|MFpS0tTMP$=p?IP1R zGZz{(TwnCKgMcm17ueu)J;ZgyebfR*!MoKaN=<5kMH3HDd=}o|oZU7;5q@I?kXA@e zN+pwqsip~p!oj3blusL;iSbtRv}H7@*QsAo9gRhD_ZVm1AT$Lw#mFADuvhKM+9IQ* zC|}V^3oRWdAJ0yQKy6y+(I`k#2!F&Z_Ikf{()6gPCJ*72R_Dpm@zI_NDoZO`<3V#y z_?A$KEwx}P8rRUFjcv=FZ3UR%2d)utXrlOVDM;z>l@0{}5JHcYZsqb)7|3Q%maQG3 zog2_=Y=X=i^k5u$%t{)7u>0|}EzSIPIt&#oM2|iUF;DXgpa&%FC@!AKW*uoY1#_Ix zD2hH4F7Y7DLnZ>1&s_9jSjUVf<`Hiq(El94eGM9<`ay<-9MaL8*HmrT%Im7v26YPl zGu=aT7ZqS*)r#dgQUC&^=9n{MM)lNaIzGm z(P0V0o;yHmoRzy-6-OTbUYK82D{$>cXTr7g%l26s(WUy%@A26vHt|Ya=gzfy*(n1l zsXNiOsAVz3<)7c6X>TyE|3tMvfy1WmDm>R>F7z9F5yv9H8VO*bf>3Gt|CI|G8bi>k zI5=mRBycWA!>P$p4u|Fta@C3_gpee-z^{6_*<%+`TF2||nOK^Z*sfe`mArp=qNXF* z1LHT42UIqMdEa9CfEJxfZZv3u_XoK5MW)!XcAKL(6k=!|+Gu6YW>y!uKOpKL+n46! z(0U^bZL;P@{7qY$V8?iPLI7zzO}@YZ}8CM783)29V~el<7EP6EQZ;JY33q~*y9%4Cacymu7H-65Jx z*k|-|n+MaoT0c)9t7rPb_?D$#@Z(hIP1eMDqh>SkMA7wKnKe(@QnEZGr;tG2yB9#C zgJ$lO^A;Tpe|BQ4LOAF=^SPh+0hYD+dN=^y|CX8IfS8Hm`~#`|BVy>$(zxGe)QFKh#=bId663^H0@v0E&Zjv zkkW(^gLJ`uuf8=meyPd!_&hQrfInjcU{W&MqnkMLkyY9K@KVRI^VjTt7iPn26v z%ZHv4hkdt?b5C<#{X79{uN9TLs^~->Rg6q*#JlfdS`?eBK9vkV-qY;+)~*TsN>)D7 ztXqq9d)K4J!`gUDnwzZ$Cv23)0$eTW&7>QZbo~YD9e5N#=%h&RN4F=87^GJ?!O&w} zu-Oh`SG-6y&g-Y<pPPNRewYC!T9nLAA6_dJFyAcj} zTuN2c<&pkvms-ufm^PG>r29L2Z#pMi?l?m=hVe%c13H!l|mzH&8(SIoH|o|6Ai(W7)lfrygf(B3jT z0TTp+jaa3k!svsP_4Pv4oc_j`L+*PJ87Ng|G(16aG4B;UM8X`*?F2;$si4nv!YIWX zj^czoLZT2RRs*H{&-jC@oa5k#tE~ordawN&;aq+lP6L4Csn26t>e0;U|97!tQ&$-= zpjOj{u7~imb~$&^htgy9r^NoAFEfgO_BOAUquUEL)QGZQirM%r6hF5qK;-&y3%fQK z>@3B(ziTEdFl_7u0Ft_jy;U;32${PFTI)g7iL}>Dr~E0#_q*?DTOhb>bfB-K?5=Zq z5&D*x7x?N)7W!r2Z>B5HYJKi+D(${+10SSphs&TyB7LDQ<0WnKeCTJ=25T>`0x;6@bAns<>cXwGFQNr_jDnh+minsSP<+A69^>v|BvP;M9Scwt1tD1bsmgmu@AAF8J3n8sBtULo36>Je?WiRU`$)yhs=T_!Rl z5a=k&v$cbMTyQ@5dpN*H06}&OcnJ4*fQbXJRJy8FaQe(`=&!zFQ&F^-40F9G{u&11 z5P_O*u%DIQ+Z6!6D@p8jUROF0^JCLT+v#c9;buzHdh>tcH#gD(&Y9z5R+(S2tYJWJ zb(gLInSE^Wz2^7cO~GJXXtGnftUzh8TAm0Wf*7-GeiKc+o;ef{sx@PNOe}u{sqpO8oFRklk*qQjo#71 z@9JQFEAOH*A5jb3k_L3@?hJs_@7D#>;ewOLv#SADY@syJ1^Jv9`Jqp!q)w_9Wf}iS ze4_qNx#EPSWA$sfF#OsQR;CZT%4{xyQU-suCnuEVCmzN|_WIedzv_;c$R$5JKfIRq zo@;uPhF{u!UB%(=vGZdnH1Ll~t<)S!;H$mK1X?zrN8*Y5EGO{sQlkH9Cip@917k~m6o`jK=}4QkK=U~zrBN%koX&NEXwkD4 zD|PhnMbBb7erp1*{k|waa!wLSsOQhtE^p7cvyN=)LggqNW1$T>+HTZaZen_cIA^h| z9Dxh9eH9Bb&_*V11jwJD{_s7k==-phVpbJ7$#bwB|LHF(5*gs37hdb95YqVP%O1&3 ztG9T*a8ED*{{mrWZ6-QO>@|47fOsr}4ElI9h0r`9)0@Adx0Pd5-tgpz@eT2Gy__wH z$ni}siDR|YAx0{*y>~1K6iWvja0VMh_L!-xkSr#tgvs%lX+3a+WFzb(>o^K?(sjh? z+RlV;A!LkserXl7MaZR(4W5Mh39w*h;wFxO7MnNf6c(!G)F*^%N?d3g*)l!B4RGD) z2+#_ugEprM*#0n6Skd$4gA>rUG~!=D^z<8OTZZ+4F?fZ^4*)hM{%=pAiUGyH2D|BA zMYbzKr8nQpI4raul%qmhySFo?N~cFn8Yf2i%|QIAB8Uv_MA zplnnWvkcX~yECn?v%2#Ug~#0ldL9xpuD6k4C)KhOJ5|>WxlT#Ej|>1j%yLa@>s0Wx zDYkAA+VSUYVzxtbinaf?(_&Np=Iti4p#a;d+7&osA);93cSjuC#N1Sg6#SAREt(NT z5_LWS;in6ErgYx1ezoAcbzwGPzq$d0@ZYq_39(*z(g(i$7$01*UtT!FdEzl@)aTw( zUP=lFR#IU!S|23GFR%%J6sfVoU_^K|p|%)(PFwhtY)a#@z5av-zkLrkbK>W z1_45b{u8K=q-S1B!fTL1_EHv537+5Gw$b62Bx$hhpQ*#?NC6zCAh?pJp)k8ThY}#F zlh+^q4Y~rUF_v!$GS*LmQ1r&-@0rR%a_WcSQlV?B;hOo?Xf<#s<$6fBcFpSeKRjg# zPQ3R~`q>WSs>Im1@HYbe6ay(y#7SDB=-Y?-PGk{E(?Y4ocx`_EMO$N+SXoKqQKwD> zzd-%&13e8@+|CWv*(4w>FGx{udBq|=1FL@e^eBNH4nZ3D=p3CEj+DM#ZnCq_Td0_F z6bK!K%7rEWY?e6wWo94jlcFQsP;5mb1$0M3VTp_546uC zaCyYovE^2d?obKT>JYHIAo|xbjIhbw5zp2-3@}iX7(|{u##EprD8Ac{E$ty#kqq4J z%>J^)hE~r>#TRV(N}83Z9+O%B5zZ+!d%#MLJEeGvd=%80M;w!keMYTivebE+sSXAi zWGzDOCQFL^_`JPmK{|$7ngYtz0mVjG+65DXtX3nj$BGjx6(>jxHrg?JiF7gEu*9W!|d}S(t zKU4r$XC|^5*~ey9Tzl*<+9*D(`E;Upkp9k8soM1#P+Meo23tvxvgEJorrEGC91CFm$Ab;!MOeET?F4SM1t>P*!$ zVUjo}4tI=|eb(k51p|oEaqt$x!oV@2sS~)t)R$ z;MMz%aPX-*^^h@dU4Nvw!xrGBoVD0Rb+;Q|Ze-c{K_(9t-My4uX&`DChFsz4X;Rx~ z`Qvm^$me|Ng&Z^Vlt>(K; z4gY|nUKkpw&W7=<954*0uwYlfZ2!$v#MMtLc_*S>O1eb1Y7U&!Xb%bheAsu^3bbMN z*2d#X9T$~>U_u@)&!@&QtS3Fie1q(T6`t!80@|r@`Gg0Nb4Rj3zDAVyrno*9sfFX} zlmIHZ98=*z;C3KAC%8s*aoIz|ZDAQIDd#zh#B7E1R*uI)=SjE6Mq71RRc)V5{$=I7 zQjapdWFYVMH&8!*r)12EGK4s~OXMK=M0G}$0~(fH5RWBoJ0l=c7IoBskUUlVh%OCnR8dR|9QvSh+r$cb=e&;T#}JbqQ;81fA2=)K;^MF-=}jhxHxt636%0~r20;loK@9B)^o%dkkYgl}<&5D`;?g0E zA;6f^7O4TQgk*kv=QA(g*cau!pK?wYkdY5QGWMdNtpvG4uR~wH2!w9yZYm+B4FjJ1 zW#+b5!eh@P3@hM!(jTFg6z`;#F9enGNtA&7!h?AKntI#Tv23{Yk4!~sZ)Upq}8mB6#Xc{0Rqy5j~~7out7OIeg8Un`J7XmmIcTAuMQ_QTP3X4 zL-U03#C2!0`iwZ_2%6Jg_x5touZW(q%5iDw`=Cg! zH!FRyFzaw!axr+%vs`J(!X2iSMU=s?*Wlt68pz6m)ip zy?B71eSBv$T7u0F+c*-Z`B3Vdi*@)&atW~psLs6h;_BovX77mq@aa79+BhV0QgsKBwmd95pDvG-ZvD+kqpTpD ziYs`iW#UYM1;R&|sesA5wCWp%L?v6L=L`X7}UZ2Tq+O!Q!2 zdUb{f5%5!rGnCS2N(2|bJV>`xG` z=m&2G79&$6(cB40icqiK^EjRskg6<_=>r_ ztR}|P*AQakn#%&6=V;Tl5{bQ?tWBi^Gqnn$zYkQxDJq=0XIwkl2sz=QMlM~`#{)ka zN7N0$uFSpRTxAV>F`NHQ^1AAA!mM5WMXCc1AU`uL3g)*Eo5H1>8v6TSK-X)&L@rw# za;d+Hr`NFF$*@(GQ2Q)+j3=I+&D6SmB!hQEca=k+)*rV^dXz*0WjY3K<)dQiDiz?p zhMgH}z8r0#+0qg2ZbM5axPf0s+0Eg(`xDj9B+t@qcQzMgEjFd)P8pzSRB8ql(9FY1 zgK*+bFuV}D8f87L<`Lh@Gop-F?9)70R)V)KjF+b%{(N<;K6- zbvXlSP5D#-Z^*q@)kS9#<6t!QQmF`Q4Zv=t?+XcE+~~(gx~Ol9MMh8$E=s6$R>%7x zr#)gk{Ca{;cj1|EkBIjDMLW=07iV?`+}_7voth1SKug)0HRV-C^A@2hIz4%P@B18^zDj6x(k?m4X}LMnf=#&OMGs%Y z+s4_CYD{Nw)^=OtK=a!=jX9nUh6<|zqmfQb#*eR@`w4g&54RYTMj#ikDGSt$1s|)j zy?W>FxQO-PQs+XGkV&6I%GgxH$G=?OY2mk4Fo#D~$E(=s_XT^C% zi9pwusy?RxvflA4=>-~F3%K2a$Ci|>8~K<4_*jF4L}DtWG%|d(JcT2JC&MI@#qb1S z?QStqwRgJG{x$kg%dZa+tPbk~4(oucD6pnpE)0A49#)$I&LO*nHA@;7`kC~>M|E?7 z#XWt}s0#mBRdzm-bh1cqjkG_{h6RZ2KlqCo!VDTU5*foi4af!Gxk=WLGLzu2Eum@>agW1 zn?>^7ZZ6?3tZCAtnWm5Q@@q3&Lclj&6`O%kX+ za7#O^KeF$nEdp-CvF~RLN)GgqV@3cQyYUmQS78 zJkWN314+M*b?Og9X|)bSbeqB3?aI1D2lCjuZ~zgrPm#H6Z=1ug6FE$qCDap_xEQJ{ zG~c4G+t0s{)M4mU%} z=oy{4X5*S3`G;YTMkml-O6P*_Oh_5gEQfH1=LF}6S~VC83KDmRXe?bLZpcqrZe?s;cu@{>f)m8QeG|QM&S$`%)a7U^x05Q7}u`odQ zeo*%p;CWp|^iP@}kKxu-6nI|;QFI|pVxU@!T>Kd3r46hI>>x~ep~g#P8;|A&6)o~<UlV{wTm1PTQW(X!O!X`Ousa;W7q8gpB?p-(0j} z3&Y&_VYxcy{kH;EnvU#8QtNdWjFB3+E-%v0(9MH?2wz=!e^erej5BxUiZNWB_U$xB zoYrb(+I7TDj>I?WgfHBZ#wUa6!jOJmS6aj)opvbBcBVgsi1c>CJAR-W5sqWYhzZeWRS)OO&w3P z@g2H+nvQR*LrP!OY_D3@Twl1R6oD1-OenJ;D2-+cm(v`(F~Z*LRR^CZl)AD>J9}7I z{d7bB*En>K0f#_kaOVb-O+Nk=DR)-L=f*pxGV~zxDiY;~JyP%T-4@y0qEIU_rhIEZ z!G#?<;vrlXU6$@P9je zjc%`i?3Ve_7WwtTd|h06-~WgGG?{HLy~zJ?)c+)1g!(M^KDwLRY`mQfG!f@q0YrK~Sqr#0H)p~YX-Rja3?@(TNExrkep)Ra(h*_-ROzI}5gHB6yy& zatPO-5e~lXFY27-4lgd2m&_}}G`EtjfFr-yIWQ@M=Xj%I;Vf{EaHIR5ok=_;lIOaY0M(!O0nO;xJg6!GM z$S^YvTDBsZuOzd!pme?iOlDV!1I zXs;XzuJ@+06ppgL;=`e)_2y5&2^IpFY~2NRDo!RM&LF~-;GV07tmLYa;SkgXyKYkD z1Vu*IG) zbj@3LnvJ+0%J!3or}-0zq?lr8OyiB;EzfMlSli>Z`$_qpK7N}+|>9BHFIwK{o)aUTE^@B=Rf3k zUaWXfd2KdWSy8ACYtM3c*BZJqFc`?z#M#@4zErzt8cq~>pkKvpJq2C@zeF$qgG~T~ zj&|YlE|ZwmtmSIsv@NmkxMY8_V5gAOw6>ugf<|K3O=dB>d=qk{F0qv`T)*s{v;T;g z=a!}4>_<*yeDum$GjXX$BC9~QgZYdPOA~%YL4b{jCXrD`-Ks&;d?BS0?0W3xDmC4g z02W?i&(JdgR0{p)Ea2eqlPF!PUR`G~h{XVl3}bVa43 zGd2R+B_Qut-RP@6xq3rX66D*^U%%lfKm%P5G#sc@hchI_gCx><2A#LFj;Dx<)?2tb z#ezv>C`qYR9vJ}p`;(xAvdak7gODyV(_RO|5i+hEM@=g@6ZctC84J!VlX_Q_G2Rz^ z(~)f@=!oUeD)bM6T2uQ|SXUq<=>F8tq*oU2*b+g*QN?eQ?$`|jtr-(*|y#KLrXWgD7i$MpAnfC3SWbim~{ zm)GuYrGg(@K304s`@um|;;-TDB8{J6t)`K(LdcXvw@ct;uTRD+;Xyik>4eM9jF^n2 z&-ZEFUZQa0cA`o|-f2){5SOvdz3hdTo5Q}k6#=5>BP~zz`6~w~@gy;SCtvKVW`&Rg zg}!Cx&PnBwfd+!FsT~?P{sN;{b^fr31E}YLYrT37Y_+mR2R?pU-6SMHHK_PPl_zdq{n`ps1-_ghG zCiUV;eCjAjs8z&#NT5JnoBF$5>N4GparId_Kva4uduuIxNt_7t4M}fvpC8$IRF5Sf zh`R28Scxn_BD7<`vI=M$S6dLqkKwz%!!3$l2Iq``U7fe*ze_SJ@$RtH!>~9Kh=x|6 zxLXqArJ8)w?wb3lh$}XXf`y_O9nQ=c6300w+3OPb(Ql<$#NOHM84amJ1gwzQ*X}Xg zklkG#$x~*Qeg5@}>l7trRt-u(ik_>$icHNdt=W+VPw{ic)7B?XFV!?=_Rh>MX(aym z6@qjtwr3pL?Jm}*I8L;hL%ekvp-&Q0kB&MC$nxl(yGMEqFUM4_K2dQT9QN}2sCD%z z_w*vb+7OsurzSZkUJ0-`Q~LG^{e%ivT3kH?(A{LS#p!K+Vlc8L=a~p*cH&fTe1;u? zL5PFEl)IXJrMlzXdCnpCi85^wj6x$40$oHzGfFavF*LkSp^ zqzGr|Dbr@+ZqFp@e?^SDPVJ8_0t&b3KVZnPTwPC3!#T~oW~oqMjJ+~20S?&^x}VgB z#+Mb#veCD4PpZ}fTzBFMUaYO?6@X!I{P$p}ZE;owOk4o}KLEfV3N*%3%bxdvdEIaV zQFR81ASbG2R(n317lrx%^Rh1U!iN}LnLpzox znclBc*Zn~$zn?D(IFMT%TZO&Di$T$wfH_Zef+=Rne@LLtUMZfTwg~b^lNm6vfJ2HE zepm8pX!;|*nhGM&#T3o62Y}|A8Bok>|7%Rf{T=1_)lDmVRnM7z@nU-Y)PjIL20j1w z=8Ev|>AldI`*dR!Zb?|`S6cyRbO$u=^=poFbjZmRGZ6NtJYm%4pZ zNTSaBR8WC-g_c`}n#f+FEyQ9&I}0%!J`M`3fvns#Tui<2NMS)M?(rP$eGtPhM&iko z(RYvbA*@=l{7b@+1!|9*1P~?9A=dfNeMD`>3;h>X2%Iyi0pY#WZ=Z`Fzf(|+v4A{C zZFg#PIqlwEW)QpF=#ew3A)!z@)@a?>=7!G7pj3gwg2b|+SU1Z8D>j$YbjiJ0W0yN$ z^9Rw|Hjhw{Ej^kiuw#_?_tp?e!6fv6Yo??7R(@iCmCO;6FQpp{j2D?mnmdY&b)N)wRq<5p_r>x;MkznU+9T^h~5CMsTdb&vlZ%^?hNMa7YSMNXn|i7 zGqGfnX>@l!sA5@|3L>lOBK{h}WE|Rw^)dY(QD%p=SdPZ-XSu$2(-?4|rx?fJPwYcHoD|-wsW-9V$>nf}v(v^yc)0Qz>g$Dre$$2&!Na zJ&S!6J4=A00L6NWdGd^HdkDD%S6Ss=Ab4HQ{s9<)S^vJJbPOshXDOzRHr0$5iEgnO zo$WB4V-#14t&jl<^2(g&Z_8^IBtQ63x_&GIDkMj)-lTNYRCeG#1)*dBcJ85vtoFZT zIsEcvZH5&m_2AUdNg*g8dS4$qp854b(j-ZkYH5?w)ce>!*M6@#_QQ8_x3)a`6oQjB z1>eZzq%A!bUG7ES+|EWdQB}HF@g!m?TJzqVI4h@^vdayW@blFB1dVwT7T&@)3D1+> zEo(F|NfH)D@)Od#UYzVUX`|ZG&nBoUc&wa^uFrd;tgy^2w(_@g)ev=&j4k5?>3g1r zx0ia`*ddna93-Y+iuTKBU~+V--?E5HERTu$Ri|2VhLJN8|P074+5 zs92(Or|AE)&KujzyZ%XG{lWBMbV<|7hes*tzCV7{+~FEixsGz*ja znu+|p%Wp`86-{|?86J)Mb=0EW-f+rj>Qq)}GOtgFvM=r~h z2V%V0n%xy0?`nR0^c9WRuR;$F>2#f>^!Eg9`d{l;jgYA{bc*Y9b!l65|NF-afhB83 zbDf`jxEaR_*f-hWfBYu$YnC|&Dzj*2Wh z?da$-bL)13Jz##p2XZTSX<6Bzzm>=NiL0&5-+r*`!ViKEtLR1bpkH0Z%`-J%ehNSKf|ytjwoel? z3AML6x-88%C?1sGyPb5dc%bmBZF|#-urx37)2MhZSS0zVaMBd0t)O6Fs_m z4Hd@7AZ+0Dh5d+%@p2L+Q3%>|^ zt8r1mQi7fVUx2>y-N#I3>b@a&mVi*h#l{hb8uD#kYL-#q<>dv!5@mMTUI&Ip`J88j zcDmK}5>*dEivkKxcP|mFJuW$N7k3j#zOvZrPyL^Hl@fcU;@E;x=Q6?9r0f zcxqC?E&&jE*bRd^zCTQ1DT)9~=Rp9%()fC!LIeOsE7>a{nG9yQJAhQDq@qNG zJbEB+23qiNv6GN@DD_rgx3;GWx!`*+P;$#VmdrVv+Q%?J0lq8eFbb9W;@R@(qP_R@ zRj_<@c^}UmTL7()q1^3trU2$?I0(AQD*EwAw=$Dn`QuYRpydbpQ9|kU;2Z4~rbg8{ zK>G3Mm*qf@qmy4Spd!3!PZz(7dt1|Ky9}Q^I-kmZBw6T{a^y4-{jw>!ZB=#IW^`U? znx@|6OT+*~F}*g6%v+2Wt4>$H8rB-H?9>OJZ~n1*he#wxhQalyB@J>MN?hgzw(7X> zq=+AXIlw@O(eBC}OtZ}BcdYTG1g;XCxO+l^I_;YBK7U_UK!?NPkP?SF9qtkkt+Kq_ z`h~`6V(*LzrdGy2lRRFXc5~?a<4*MrOZ@{)J1t`bBITzsCQ+)KV*N6VY6O7In-JN# zmZUVFS53nj@C;_7Obt$J|5F*o80#Cw4n^t^52dzQEkku?);?E+WSHz90TMBxByEUA zo-dkVtCCeT@4JN4Rn)phAR701>&V3{@v;3Rk(IWYM0d8{h=@|lAhn9g-boGQC@n0c=9IxKFy!f$j`$` z9v(q$oMXTz;$3uM{coiOGgt}bTC;iimCvT~fEKq(Bg10A6WFvL&NGB0r{cgw=^#Ai ztP&0pP*cy>+*b&n9&=PU5AL0$dr6v31S9+*YWdFAq~B-Q$jjQ5mzd9&$$|k0Ny}g#g3_~@vM0ziEk9pV@tquW>!WYZ%8!)u}OQ;RUfDDq8qQL|4mws zFplRYSEePu|P|A1h zy%JxetJ8!~ufcYo&oZTRu*gc*5-go;6}qO3QJUb9Qp>`B{ifXUw+0CwFV5T(-wqsY zFgrtvXk1^HWE^*=0yyEmJW(!QL57!qGb3;3!ziAY9o%io$Q@L(x9a*A6}%@W{YPyw zk#luXs`Qbqm##y5^+6~oEND57EK-L12Hd?_~^h0d{pe=E-`)bS`>?9 z_$F;SX3|VKYQY$7>y<@$oc53Q37y3njdw8sz%i+ycZaNZ&3HBseWjG~YNS39&mqY0 zjcQez#OS=@3DG#*ND^yvExL~Fyiu&t#8y}*^ajCPGQi$EG5jc|giTHjXDinj>Yb>o zH4gRuDXoNt^>@9Ax+=%_){94Ly=avTw_F?>OsY=2!P!)f>=veGA2yI{p;F7LUz9_+ za|qe=(C>@ny50(zM}E`(#>+p{@ug^Y7_7x z6PHvjVB>#`yK70y?2&>I+md$G|Gb=hkG0Lz7lG)Gk?^rB;?o#XpQ_d-EWs{i8GFI` z;f>G$T?GHp0jM0G4)?YJh` z8WOZnt=sin>412VQ{2etymhO=b`^567FZ3|D~cOoM{YyL3CBEJq%mSjM5^#m;jlYA z(PdeZ@MU?S3?TuexyqNtnBXDdX{(*}c=wAY#n)K@*AWH4i0KWr3c_z8+fh76g-rDO zPffw7cp9I17`X$rq6VHnMbsnY=t}&s(spmh_?PrzYlG(6Kuwf|@$fTl99=@j*i$wG1ufis;bk3~U2$*@?n*uHX1qws*^KPgj-ft;Hpx844gdK`zQ$UD!^ z4_D=Obo&cZ!;f%QS5f~W#jHhiTD%xwt520T5|GiRbkxte(?G3RVfm-X;iiDsLm46Q zhrQ4a_&JpQa;AjFM9m%+UU`QPOT+wcmm{D#>%@O4djYVm7n*jlxE(uBCFBl8jL`>i ztYy>53CfDwK|11HI=FuQp82W&~sz`dA!z&vf z@o)95^us+!u7gYZ4_~Sq`GrA~rMKPC3LsoNoMN$(S(@Gw?KYC`oL6TkyZEdmPgb}% zjFeISEbR72dYlJ@=B+>dB>;DGPH*GAD#2@E1UAWq&2tewHp2S8}Q7&s;z`^^5ALSczq9x=$Fc>OF zO8NsHac3Hc0g@vL?dxu8=ETau&rx{t!(Yu7uS}7t4{LbmC4sCEI+#U!EVuLjHp8H8LA^@u|>%-){5-CkZ=F1;?yRO;-R!r;Ltq7E1)w{<5MJdkk zb64+~Eo*R@;V2`?NAz{e#zXSSehyl)18w;KPKEge0VdA$E_PGJc=jq92Y9qkZDgX} zuu7gO&LY^#1NT$#Ur_YhMOatm!dsR-1w-*Z!*P;q$rt5JK{@3xiy=eQ&3Y_aA?r6I z&uV}u3C?R62l5WKWwl{gDiPr8}+65uc7?x{9o_HG1m*DRqNx(%hp0ReD|w zbVCost@;1P>%N3edDOXeW}0Z6xyPW=rGbmOslJ?W%u510!$A4Wx&eI~+mQ9?lk@dL zZA=*R&CpHskmhxqSbK6#AQiyp<*Q1qJI-lvbwNRL7%f{X!2MkY%y&oXmVcDWLeY4kkV&8iy$A(sw7~68fciToMRAVqy?on87?k} z=c*fp9+u3oKWh??efo~+D+-~`o!Pwwg06=K;2{|;CaOo5QTVi?;{1!25bH@ zD^DJ%EZge>>XT9^%Z_t8xEvJGZ6jJ3_ zJA|v&=nK$=vKvwzQ-jl)@x@S@IE4bx){-887*pZ~$}X3ylO zXJaG%8D^T`A&xQvwkx)VWOgJ|xO2F6^XcPbCFH+4h&4Vz@zp)v<(7iOU|qy5y}WQ# zWFCsDhs?`|E{s$+-uj2>M=<)ZA$B(iFHfbWm0lf*qylS^iz`^h9ODB)Q_^Bq98dRq z4#fk_8=7#HN}MCPmATU#isBE&0}=a}4E_y*t1HT82;k@RA?DcjA&bGWvBU!WMRPhd zZLtk)lVppC2mpf@)L^-6qKiN|Vsq+&#j~dRkzZ-3{VPgmaTh-_<5I=NXo*ng_&m-4 z$u(kFyW%2qE@&MEcj?gty?z-&WMDdoY}|rMQAF$7z>$oNGGMvGq|BUok(o2?DS;!% z;VeMNmUk#6<}hCesZo?38KjQvg@Vj2-LnaN17kFPR>q`HFjWJYRJ;}RPc5>8WBeZ`F@nTzxH480OyMxx*@rX})1-!nUeiq_XPzCCQA2JIAH)AMtrA!nHpkfrouaFZ% zAk5=GMX$(;OS{P~@pxDj$V{OxdMOuQ&@z6rz)b|;-TrE^Ag=mc?hCtG4^#{;`YOnn z6d~_N!%g#1ov`4tI@@e3wl=&lrK%RvP&v%p8*MWj0%lI@UVpLSNTx8)Q-d<=$Ml-cU6CB$N4n4}s5mal(F*d;c3Sr6Z|aEaE{@dn6(JWX?A`Uw1-@vgY#x;gm$?t~jl-D9)k zJk&Z+PM!qch{*5v%-@dM9aTgR^+j{sxSf|B^#9n#zwJRwo1SBLP*ao5yALoZTq7r^sF_BJf|5h}Bn~POABap71;4B+N%cSD9aI%5j5lq5hEAhx5b<0Al^EvZK7etQ^qH3 z&)kzY8QxQa`a`f=z)lEmi;V^kNH;fTKdHUYZ>|U}K)&g%oV@mt=ffP8Lr4(KM4JP$ zBTHBR+E4P!i$P8MKH0Ncj_Y4ZUmFlaT0@>c#ocn zF)jhMh2|lBMgK5-Fdg>-jUI&yR-fx08F3bd0nvXOx#~nUZVOP@fB)$w=A(dZ=jf~Q*ah4b5Vra^ zhJYrKYL3B4HMJPRvQK;r3f_3-mTfRQXN5f>5XM}}=W_H5N0hckQ5?<+92Uy@^Ry5q z^5f-;IJ0^R5#oxUo-3ijC5H4mgMbmbE=y|5w(7cCMU77gmZRi+F1*S(T0xV43dwwD z#}r`^5`~Mi7!-^UKUBBw-$y2|x+OK+@x|28G?3?$#jx3cc=7HhgvrUl6dP|Kdh~rh zAe;lYDJr{{(TDx=n6jtZjKFLeo-hYamuW$Wms-1MxcDz1rE z5|s>#y9qzBdXNRpx*wLNiN_^+5!uO)7nDWJ_Ft3)7LlIwk=eaJn8LHF&Zc*7q8efg z+y_x}vTDE#-SXLbohc22fi#vgjTm(ngGx?($m6am+Wmi4fHvY870-s`uW8eSyg!{v zM|#}r(i=A19>^->oLXv8*l=}=FtQJnzFS82J#*fbd-^r5a@rzKlLL-R?3T&Cya&VK znNTDfohPySvG5p60{0m9er?l5N3#7+or=J&Y-Fcd5*^pYFZ?jvUDq3hKTYURn|=ir zsA7UPjR7P6b2e84BK3udpfV3cuDpq;kgEBz64v;*u zG8bkn=kYp9XnFK-aisdF6E*@?4jqf9g&G79ajN&KZ+*_$UK~9c1 zAxKZ!zC>KSsMLn5-=--3kS!$JiG?aJJslzfBP@Xyuus=7H@ zIU#Eis-mn%(-j|ZM75wl+!}n!RmK(ibwJ>@Cx`8dB)d?a`myf|%+0{&5E!Mepd$J_JOq+AvTt=Zcwx+hx9XW^Nzw zd#3rT=(a!F7QFxKenk|6oM*_swgM{$L;2h;XhodDEciIkLQAwB)7e?Oim}iZR;_f- zFz#6l))&G*saLQ@Rg^6kN{x2@Uq2oXLi!qh6*lKi-w;2t@umx6nmKqMIqbz@7>&mbO&m;4+3Ka}g)pIvCWd$5O(E zN8zJ%?u=GiTxt-3A@vy;WHC6rLeOSX7f?)7#(! z;^dt5a;>tnzi&jITG`%@%8d#X-KVpcuo;WC?0at#Re!_xgCocBI`F1`&l&U5ng~J8 zQ4aZ2XaEuO@jJ}vmB{=tfp_(3w<}mwovWns@Y}tyIJh;M2%P0Ws|eq$P_Ab%lPcRO zPIe(DVRgl)FzeoJh%Ajyj;iFj+QU2&eX})Ea--bmE%^|ajx#_%gq>FSir0(am zmmD$uE>SSfzKeqaq{$-u$PnA_0WJ}$(wNl_y6$AYRAl6>d;5+=|DnBJ?@2&I%m&ikbnEfe=nI==cKu zhSA(;=nwY>0*14xhuobuWh7?u>X^rI)1Mtz*3oe98$Ce7c)*l@ke-FTfP$M%(N;w? zWzf8zT$ozFS)2mgB&_gSdmXV}_v8~JOnlp3FWQ8)X(R2~?CytT{2D!{R=tL?Bk)-j zoQ{=u#5(746w3&nn~1MH=EVon)n1l#mb*gZR+eM6KC|}y=Vu)EN-bGK#i=S{Jpxv9 zKV(%b{}vFWWI)(aFtp{l7~GP-*^J%v$-eQBXpUk;au<*sz|xVvB;-pd)jpC$?zJrK?Xp!enc`0D>8##9tn9yLg_ti6Fm93q=lr z<91dzoaKgdMvWR=;wu=LlaN)o+dG=0mI_U(hkMg9RH1Fe#E)3} zC+Uu|fW$G4s9mF_j<^-Sq%!R%%Zm0>>w|fFK&^yRH$=9}5YTu5%y?D8uPzg&P z7~dkW!lP7&>JN+`xnK?=whmga1m(WH|J!zNLQ{Ut^z;FQ4Qyc||5SCeil62gw71O{`A*`1p& zm*=7B?N>>ED@GU+;bY!%GU$q@{iku0b$VS2ojb5SJ+gO!3B}PIM-(6KdYhasb5ezI z3Hk@wi8^6T%(3j;qev0tINd{umA7We+s_u90|L{+Ywh=dOF&-z`nFCb=Y~^KrO`}E z{tkF~e_*mPuWtkpjC)=*jlP1exRRu$W4{d(#Fz?#^(l9%{hw@v60t0~!)`A$l?6Ks zMP)(Raw+1*Hskb4BCoB|2vt8sDe}5pB}!(LA$Xpb;zeROv_L z@>nsnT=whBJZEsfmR|DXH@;BBF6JJS%J9y<8+ z^|z9G2q+n~NBHShz*eJ3Os>0%aD`HPpz|23WJXyXK9|?^jfHrT8Id9)|8+KIcnSE5 zifKS(rctW zSu@l4$^TClO#J^DU?CzZDb1K^C2*9}5>Sg-oc-Ya;r2o8E*hhiD40rja#U~UB*Bp_9ScG!c0MuC{|Wd-q0CHR++%dTANcrrptqZ;Q)4is*Z zZe-TNF!sk2hyC0T7^l0bK{sJ@^A#;+SD$+x3d)JS!&L4^G8&f zXyi=&^b!&$QIOW2ml$Ln-oF*z(t-6vdZ&;=K96f3d4U;&V>iJDm`t{cGd8wkp$8q< zo7|sTIMAeM`2<(UsLl0Sjf{Tw(TdxmG;GsoU#TkpSgc>u?IsA=Ci*00bvH-(-~Veb zs%z0TF_Py`&X6_`PhX6=DjtJp=ACX8!36~c7gfusR-8e6kyBT)P6}+hS6KG#$^_)L zE*&PA36)&hX8+*z$}f&NGrUMFlE6X{UgNam6e)PBFZqkHcW@gbU4aC*O3d3)#&iA=!jfUF?J~1jx^%mEX)`FHzw6D}E8uZ3T?g z1@~J#=q1AoXpLY6nAPu*8u>Oerd0J+^FWcZ5Q?3J0s*?@|MePm zHX$Nel80b7d2*$W>ZKFlF{l z-#Ap4lftoHgZi`su2qgV#)Lvl@LV`{s=bu%4pRXf}u|s`VFmn371rq?bM_1Tlju z^*m9!8Slf;gV7(2Ty2>%i>kV5>Pga9hcp=ktaZWs_5s4F!{3t(?e_)3$t;48L;>jG zxTayTJ@0ItKa=jjBlbdChs8jv7|43<#N90bSK@+ap%J`g&8}_XFyMFNyozGd!^jMl1~i@aoyjDxNYIssTx*c>u281!K^{58SUDdaNNIm> z#v$ga{qTn zmSf8C4gUBfOm{t7ibVATQFqX%s`4Ca`-ShqEu9f4=cAH;Eb{u6Scytq%*)my7viiV za528y4Rc0h@SKE)Hly43Bl2b?<)ByIl0DrI=_E*1@SggBH^#3@dPCTg{!skh*sa0DaddenFoL|h16 z>9s)m^pJyX6xS0scSfiN9HYW&8PJ7M76^#HfJ%Q zLFpSjJ>lv+LI^w_7!`{#vX&Z94JDKN4t{Mgkk{hVs%ijKb?DR`1+4~83* z0|Ab3PStu^Y$iWv!J8rY!V#}_GH9!~)7#By&g`&obJs_i zU%*UGn{I8X0uHetE3wiS8ie-89Gi=mmxA*dkCvO?AZqCS`h(O+Y5$|o`dI9Gee}ZN zrzg*Lqn3KJ>KWKl7@KCM*;(8(Pr7E3J^FpR^NH0GOpzl|VJ@gmz<7B5@sw9?ditza zlcmAT-u;HW@ty*hp42c9W}#J{`n5#gvQ>ytgaP=>HyW~gpD+D{oREJp@5i$8 zwN;qEJJ2ZuY^yY{5w2_THNS?zTt^y6BjgK59rUwR7+AJJDmNs0@5lm>9tF^RzdbJ} zA&8D&^Vs18Uim2Lt_7L@U$L947pvk9tE;0-LsPm5E0{GrlCU%4NXWddhF=*4Xv)1f z&K#CT{$>)wFWi?`a{~RZl)N9;kNHT%D=?ONcGWyjCWOBC7T$%}#8RaagmClZi-hh0K9`?!QCH&|86REE1YZq} zl$|&lVRrAJ11gL%hw_qoTB|GhAj;0bus200!szJ$RlMIDfj2!&uQ}#1V%4j9#swnt zb#z|~nH7jnFLbk1($=v&rtVqv-4%Ea!OA4GL0dX77b-&fe7$R%mi=v~x<^f~`hOVa%gz21BK z__n~T%(pE1Qm`J9^iS|?a?e4#%RB{UMbwcXgK$nsV5gfk`j>MMjs_UBvu8}L+pduk zJ6`?(Ve%<8G7BVA5Rw~1ONDEp24?Y4uONyfFizV+!lR`Uu$rp@X~=~Qii84s{ZWh) z0-m(RBs3Odn60=`QeO7kd@c!l;aQ}D7z!0cfN?*!qJs63^ z`I4?CxqJ2Ss19-;KqeS4BaD1}Fd0l5FW()>uZ~P~A#N-mnrNeZv~4Y^4=lnzW4P$u zbz0Nwl(R)D;Pku#+s;d)Dr`de2n)uN564ws2#4&>X~Dy%wv5d)&Vc~%146>|HqyDR0OAq+jPg<}ei5Na ziA8-AE>L`i9T!|tqe=AE;g#*}5o`qy)iU|W@qOs{H$9(64c~(T>|=@ll08%$G6zEL z{+Lj9U>|L25=hLE{{kwUAh2^~Hml3{#{p(Eoc5!+KvV}%)Cd34l|+b6Jt>G-sxVTT z$-{H5!KHdoMqp*yTBIr0Kodf1>BlTLsbWkTOwS5l2s^6|U(4(st@6#yCC6N(?@+)ah^a=RG2ZINla6cAR6>$Et|G_$S98-#0iQ?P#{n+ z&!(L%u`*ShF4RnbcR1Bz-%b`ZBlR(5Hh(b=CZUZG*M=DFumQmi3fYU^%Yr;7PY!;B zT*l=mJ27618U*?K>Wr|E zmTK2jBJ(DE$6|HR7}-AYa$<7W+k|et!pO)`^a2@Bp1R^B!P{~ClN*)Ov$fG0O0(U_ z1ma(?(R=?}O9B{wMZy;xUf&igJ+<;gGyo6d2{g@4uU18UZ&s&5{gXCcK5sW(NZ;3u zO28ly+Vqu`-kp)G)S~lx{Zi#YSQ4F+K0nHGf;^^8&VokYwrxz?C(&+b&MOCHfp6^m z-sOph;D#*Dg%_>k4h2zrT+{A@>tl62oa-kO%MTzNwQ z{>X>v7}0+v%TFJ29A&HTQOhmKLT{Kaht)rK$Nzjk3_0Sm?)yk8bL~ zl~R#}-VMUesrY@rD41$EU7Qmu*81tOm%!jAPa+xIvRszxulX~Mt?_42m!q<_k~7;SjG+!-VT z8iA+Ply)Yn+xd}0Bj;LlfJ3c1>TIcbw&$rpjhM;*&3TrnZg50~v9_X0MG3={6X*BO zegoNypJ{xNSr+)^l3opFDV#KL{~mqB)SP`5XBCf7a|{2C9=Zcw0d+84_{{gU#vg$= zy>Y!I4LUMR75uKgO0i%`J=a5*%qk6h+w;$8oV_DT?6pSZ}!r*x&{WOM#3?(Z~S zcT6E2=>tMjSjaa9cYJ!40zzObCvA@VZ_|MkWOiHy6iw%&L>v)KuVg+ZX3~o9a@Irh zlPV(F7*8!raN(T)f*^WX)p4Hm{meWxlgb{`4?V9`bAATfTNVRGuqiTKi?;r=-&I$orHLl+xyHnBDf74D7 z(87dFNN-rS-agI|2v-K2kC7hC;U*aLU+?D2k95PetE@*xl;KnKUg;imjp|-$J`QJr zN~U@r$EP<_)h>F&fy&(=>Iv)BlYv8n+uiIJhgr;LoEaJT0Pf}Pl=wFLrh{me@%cZO zI1Y7AZU}rzvbMnzO96%YXS5T@Ng2`Jo6toYkF!*%q<5ZCwPIc zO=P%Jxft<+%+FkoFxjer$d|WXL6HQ#f^gC$-!AvxnfVYGTVb`luOFsxB;{g{BmVJO zrff^wdg0tOCNV~Mm+#z^lW|k!O}c6eCHagLU5HRY_*=L44>EWQk);_W9A2G3-~!BF z@#TV{N^T&`MjjnWcxsxj%;j4xJZ@d2X*k#EpJ!&=Xiwh}-wSKo5IhdJlt82T zU5Gw+7^z`^hT#Q*GFl-$jooQ<@aG(7Gq8|UTBZ4Rq!kPRQFsAa5qN4)cjKmty*pF` zCkjI9(+#gIC&J`9`w@GN=SzY2yh`5Y!rOWZ;9^9%Uh~-3^mCsazx&`$`%Mc_vG#qK zy%dEa=@$dZHjQ-AtW^v1jwa6B7Pn^n@2~0cADg%Ktuj*7^Xr0mUh3y+4K029D+U+l zBLpIX-7YybK|@-W1qdT%%=hh^nLY)W80Ryu*XFZV%s*J`5i7CO4T1QvcF2R+DFoR*JS~N|^X>!?J+f zw#Y`$lw(xGi;01NO8N^RISW^YD?uoow6l-2kcd+xng1fAJT4I7QjD2_QcfD;Cf?2P}i--fR#DI8(5zS$A^pq<&TS-EgtYn&BN0UfeR=M2OsI z>YhH8@lvsz<~dbNa7!+SDXsJGOH0Ev|9U9qOZz8v3Yp>Ea7K#gt^l{6tWMNFythOR zQU`gxq3O+3lI3@v&>s6E5Vau=4<{aJMhfr0_7UEFWOC>QZ36mZtGHvj=;d(rIs7A3 z-S<{YT8zWt^k}H{w;zWP)c2z6f&(nH`BlrQe>X`cOW?%iKQf0+j*rF>uj01VH5;t7VlgHdVb*<_ z26MJU-3hBPc7?N|UVt2Ie>>Y~9Op~QD8dH<@Ucu*>kQz;MWM3Uhb{nWI`{PAk+;qh`zPM-R-+J-@K?gS~XFK!xq2bv?AKl}_Gj0i{#wH6Pw=ot^KSj(N;cQ@ zFKtv>g7gcDqN|mvafq;H;DuDL3C)+}0tYctwUo#GtJ^2GNjx)>1-@{CM1z$vcnZN= zx*h|TyH``^FKPP^^abPm2IU%}ZLq0qSa29a6gG^HR7D-E;%!U%IdqhRS5Xu}#Ov4N za=!TB_Wo>TF36p+^HJQuZ#8b6{tL49zjku^d#cCVlKEQ_V^{~U6w z!sB%uRkbaY2lkG2J((6$x9S(Q#~I>wm}}!#feUnl9YT_@HL2yO*GFG|*pXl9vujSn zW{k@11Po%b%e%vk!Z@Ef9Iq>LM=4c+<~R&;IbT`+beOWO)=ItWR|19^?vM{tW5$>wBvOk#31<-@0(-ABj2Cs`ggOe0M)n+0yd&CZ zqVHs=ZU4jxZfb!($YS5~x{~IgFL2&)f>cI9P_Ys_15vfML~x9`LhzZ}kug~p!`VUM z*Ke`c%s3eig@F$xSWeGm04xraWvDb_GNc#FkFp#4b?`{2xb+;^;z|oKn|@9RA9y07nthySo!fZJd zMay0*>$!C#PGBnh#@6>~9btmf!jnvoa1pugvrOtDKf93JkH5Kv>jFDgM?znpVX*rY zow3loc4jEFV{{oh$v3-1a==b+l&b}Ab37b`#zGdzL^-cd@%9d#-0$bKeWHpsX)$H8 zjPP?F!Gcj!_w{KVIBXS>1bgr4pLPiK(5}1obSLZpgr{*4X8j_iMKX%CTZBXKu!i}K z!|(8`Es@h(=`DBbsO8ae;2@mHCvTvQ@k!4S)d0!~;s|UYW%XcQ2Hn2h?q<`9)+=S} z8u3+TSm}0QsNVa9Ak^PfG{VN3d5>1y+?vZ!e3DHFN8~2@964icH zbOdEICkqBFwVBjHDL|EbfeNL_{NQ<}oBsk%hHC(;eL16b___{DQNwOcT43(;Va*&C zU(A+i2x3{XvjTEAl#lFd!N0ZEfT=?RsX=NaMAoTC?V#-pB)d2p_i+||V~X+yE5qlX zkLzhRC6Ww|PESwGT(!@l%uUA;^acXSj8;zNB{<)j>QezAXa#ak#)+O-h#kPI9tve$ z+OHMh0AiqO(MX!NJjejAXG0BP`0yZ<0~?I&0`^0WbLPx+txsJ-)e8vn*ddLx4{vjE z(7y3oc*>2qa|V2D0?_9BC+_|6|C*d*I~JhBFd*?aj|6QyFPn9CAM~^o`)9XzQ_cHF zod&P`DiSYKLE;M4(4q@?DJpaodycWcd#HzOegP#>@n_m;rLs2j_kNvpJc{8EcXt|V zh)0LP+c9CRJuxu2n~l42)85(LW09+g70qlc+j>2=Oli)*X#UsxJimb~?BPj!Gs0tEOZI|tfkVR03 z(;Nnbb$pbsAInZm?e(CJ6x4%|eReQ?*eSD^Q^H#R2QRun2{UA_!R}5!y&3HP`U={U zq0&-_o_AC6cg1WW>i(`uymGhQuAOd_+5!jLoDCJk)%4Akd+w!JYx#RVdqzvWpe%`j z9vPyb(t6LnFd3B~pq2G~Iq-8sYSvMi|IYiSzUw&aly!3ApiHn|Bj>nDT{tC+6bcq_ zlah4$n* z0zpz8F#$z;Nr%i+BTNb?T#I-|>2pLCD}#gI`qr>B6OWp;!`gn~HZeagNwx=2DT|B5 zJkeX83jV6DS_|6wR z%PVdr7CBIfNcKebZPTamT$lEx%~9qPkYbVbc3G zBHdt3U1PY#Zp$LtRw52wBsMH(^lQ<}$~6cAh@0Y}D#OqS&Z)oYqml)vu*jYMdwkJw z$GVUT_||q&4jjV;#P_-V)CK?N<;4You9oJh19^sZ)Y1DP`|~>l-Mal~Z$I zaOUeDet#y|DKxeC9MQsFkW{`xPjD3>=DfEicx$Qxt;z-uP&w|{bcamdG}38*qVBO) zi#3A?;}ia#m!`xu;7|oN`ON?s($(AS^}556Z=kI-SJ5vC3N*FrZCAUv{m(qi7NM*h z=wi%L$GW%Rh0XO+HS3-;@UOxDRWE17shUmCi&n#r(rHc9d_c=Hig81Nr>;(MT~uoJ z>EKRsE>EynB9pjIG8?mD8!B-rYv1E}um;)q^Lg09BG+t#w@motT~`5jc-z3}Zm1Et zHE#5Jdkdt6oi^p4-%EWUnGP^)aqw^SfY8v;OZZ)91qjqa^V;x?CYfD38Rj7KLmKDm z5!J57j^yXmpC}&`8h^{egLtRJ&*G#cVRBoiJLTHT>>My>6nTwcsqT%Y?QGQP&C0Q) zxv%ex4BjrS>g|@4DgI?FJc4_C12MEewLpXOE}xSbs`#ut#fTX<26yrz-QMFoSffIk zv~1P2HiM(!YxW82d9;w#L8pvXX|uw$ga#mz`B`p6n!@KWJeK~b6mJ$j-UNUP2Nrt2 z4ANV4E#{ViA+75c#yiT@0e~f<8RQ94EypZk9co23XAEt=_#zRSO20A0Br@A|Kw66h z7Go1kb}i;XXr}gM4+R-#lQxGDC4z92Lk>m7<-N@LrH6@t_qrYZ@S=wOYhmcfD58=H zWp}pC7+H^4*uYZ&AMqleU5xIKPQUs+^v`e7B?s=}i7GeQtSmgj+PDNW&=Amut0af8 z3g|0?GQ(aZ3v1)A^(;%as^X?P(Icq&0|{b~?teyI-t^3+W*7m?F3^9TmrlM&xcpRK*JHEGFceCx+Zmpduw8hbo;q)XPL-WtUlbGsD&g zqh#}v$KjyArqjWyk!4eh8q-7*?cFM4*lvzP$q4zq^~nGQW^+}g?xuLB*MO4d?YS}W z_HRjB4$L!YW!+!LE1@yMgl!IV(VFaH2-K~R#76jEx3uz zOshLH2aXfLayyfm#ozc5n0pg?x7~gu%Xh(0VAze-bh^&U$6;Be!weU#lQMK!tPyO- zd0dowGB?V@>|$b_+y+d&TS$>@ov{?(6ykQYzqT@aLD*TJG>k7j;S3*!uclN!dBovO zli!?Mgm&h}z1wz}eI*g|8YS{wijJENHQ6`78PPv8q@6onCU2Z&%|lvWd%8g3A|GX{ z>&yk}7OXqmKbItWA_7dRpVL%xquP?ZWy<^-JUtS#fZS}7RK|NIKFjHFSkV3vA31x% znT=!n1jkmPG}Vp*{qIPMf)ni${iXaV_pnmX#7(Z4U0C|LNbP~zuwI?0Ii1q?a@E@T zN}bK3b!VAQSz8{dVT({wN$cSw>Dv8@6)2t7@9P?u*K5lFV$Yt`Wo3_9EcIv5>#kw> z!D12EyatOEVI%&6Lk!G(R*6WJ)+>(lstH|1!$^R>DLVQs2p7hnpP4=5h!BH-L7fYZ zlG*isgKA@xb)TiFo47SyG!*RDjIVafxH0O9Bq*3z{O~FHaJrdsD?EU}6a+fTU5#fl ziWoXOC`O8SfxT_)Vl>N05+>Xy8m3WeA@y>86)7=iQv6Nk1}g(nv)w1xaQs@^F*Q7<{W2 zvtmsfcY2ikwAxb76~$=@SRA~IP)t0A&@xsKnf5~py2B`jbd*?Iy0kuwoHs;uW}0f> zDz$k%DHO6TL*gsHfi_IMhiJC%X9P?!>z}-V3s&P1O^Kjxr7a-j z+&8_x6$~TWo8%tLziw?2r)13wM5QmjLGZ+KHkox=TD8_P8)D(P5XrRty@Yiz{~!1R z7o(OI+i9O_GTv|kxF_1c|6BeivZ#{+7pGySX;jMRJEWKoY63+=ZtT8tXNNmECz%oHY%u<3d1qWKTpcDo$JTp0#G007GkW5&f355FR zIs)a0asrWpzZk55(iHD_Rb zZ+BK1ye&l}KVI1!o&fAE z=(kva;?Hx9D1TDQh(|F3HiGKuy9_P5x0^V1on;dDc7f&(#PcuH9(lSo&t9mlEL5?x z-RIIgQPa0Dg!w%}EDHjY{;g_qklH$o)Dd1H<(AeM^*s~!PZ#^HE!!F7IKfnT%WJ;0 zlsLTMyQ});VDM+KlhMQ>Qtz}Y%rlvGoWotk76Ca8yB2Ok-xJv#N80xl#hG6XZ`*X( zbaqKBvi(LoWek1l^LC2hMWGJ!P%n2hRvK>EeO$YBeU|}$6e69OIUgQ0?tDr7-&s}b;-U1tgWF(w;3{`olgoT83y_)O#d+j ze$YG@Mu8X;O;u?2&YROG9YZQEzeQTB`0@8ZU)5kpkg;> zOD4XvO6Zm|7+!kao5d477o6via}Z3bnFZ&Rk4i!=$!y=x*t+uVv*4-%d`HPWo`9r) zpb%7gwW}JstV)CC#Q}G^*R5`3R+ZEMUwr9;p=cqmeNT?M9iQtod#37ICv^k(YPiQk z@JuyY?G_UV1l-6j^BX3W=UGe_mbfF(lau3{)skjAJwE89oVDOE|3DB+Q4hPtTe-)F z3l;hrNMtRUifs7mF0|lMH~|%C(dBO#VdnW{wfsNqcW?#Zh=#E>GQ{;*bU1Uxay7yQ zEwRZ-URu=3^Z9H1LyaMeUo^tOWU3XT1QYKC57eV5n>5-;P&-Q(g>R8})`_B~Zc#;X zI7I?;9`IB#SkaSv5d=hdJ}4i`*=xnze;QJq$uu_Q#Dd5Aq%-F0#2m1#U=r$c_QLP@ z`U}q?O93X+ac3pPIw?nRBbW!W0&{j);=a-}!Oe3)70OsiR~dvKFICcAEL_Ll^&Mz( z)}O|W;t1>xB*?ac=9db*GVL{O6;|}A4m&{Fz#65lsWIcjc=_Jt#1y2~x{6Oe2YX^6 zZumc!?0H3hCm2b_FGdeVmp<9 zU2T*0_OQha##~&b2TO}{J~SV8lLPJv0>!k5T!H%63KD$*3HHWFP zSl>ibE3Os#q0WTU0r`RQHWv(W&B0pGZ(~ch4ChI&Ypj?Q>p$H7+R@Y%YCz5cb~clR z5n_)?=S}aiXJiCOh^&()A58Y^h_h>_!M$%?*pje;`xh_Oj(!HDHUhTi|4fmfR>VX^ z`K~1KOACCCO1uRZZyFWS(_}K#&jEhny-L*|Z?sw5^G7qVi?*qFGs+WC|k8+0ND}9Sbm9X=rpD zde1#95Vo*cvR*1*OJ*n`*-PEuo@)g8>d$%_GkW(~!qk|SvUVH#j=3Ve25;&^y~UWf zN+tOOU2Ht*%OU=k%w%ihjD0APKrzZv3RtU|n*a;FydRF?>AZI#Q@{ zCF9%e7@#P5j@M***Q#h46c$?RW_e`bVeNbx#IM34h@6>VxC^P)=~UULcBq#UlRt>B9@&9K?nD@9IvvW?FiVSNN?CMy$q;o$zx+LLB7VJH>d4$+FKAi@bR7 zZcm>}5DV^Mhg!$=gJHL*F%~lM5{#j_f2i3YvIO6rwsR`C9m$fXSg~d zu+h8u<{z++pe>DsQiaD1SwvFdl?(((iWeYEMSE@az9ZH*)&W!LUu@99{MQHD9R}mh znD{8bms_I=qG-3Uw8@6gzm{u@_(*ykhgEg$9+6?i(}#yQ_2tgu`0OH!S%u8XRgc-> z@h&kp<)wkIMM&62=zVaDn?KLnRJvs9KIWX>zr?*TiH~9`XT}9W9P68A(iZ(@roUBlg;{mljANjGX&x9@CseZLY|d zlYt|24(KE@?3!GasN`m|{+;Z*roT;Wes|?L?^%{H&QyO6-_)hU>)*xE{_8T#Lzj}W z_9B$fCjtXon>dC+!*(lrD6~<-F9n0z2kAx>Et*vEC{2lL7gOk^9c84vhk0ll;uDUA zBj24;$doBXGD0Ac`s|u(`NU@>~sqn0YlTdW;sbj+)kBo z8vsg)tt1a_fVoGSLw%iUi6kGe;_d_rZ=9m1xlJuTUou#wTU0qjffGyhIvC87CV4xO zvT+^XWTX3|Xf-4ewk$?MU)g0Tg}5Eumuj8c)b@XzO}yUi67%xeYJeLg;SX=`M4?Y> zf>A1jT2H?U3k@RTM;0fQ5zjiz6q61qTWn*C6TNceYBsc%g~qxi;C~;)Ri=7+lDr;j zvE%IF)x~_$qJWl-jv($Ep5WkzCB?-c?x)Nc`2TzTZDQcPMvu|E60Ns z88Fn>{PBxxz4W_011w8R`XJSBPnWp^!(G(8%ZfV?03y-5=syXU&_3S3#EKsVn_X%6 z5cKrN+Mg!L$QVlC`!suPx%o{PhFpF?4=4_$K&DU{0g*W^Wp1g(n^1%Ss+IlRLKRUV zh)yh+cWS?EfCYiW&{;RVXW2ZgSaKd)Q_!2ZH)4E5liP2VU7dBGUcANXTbqIE9L*fo+&|93&E z8Xn|9FEM-=Q%QBlTyV;erY@x%pEBF0MtXOzvnw&m@HoXeP)>{}DP`S%>I!Nf@N76LGbxg1L1R*3y&G?>2xA`7p-y1GwX=9pw80@AGn~pAH_Br4lVWa zVl3!c4pxh)Ee-SMg2!*BXwvIK0dhDJeqj7yN5=dt^T5I& zK3$||iM&anZ?N0o;pm@gy{a^eT8-gzYVliC!V9l7>c&0U7*xRP5lbRQ;=x&2kMul} zNVt?K{fw<+DNVMB8l~;M8bJQ2bR6NEg@82*Ubm8VJkCqE0f(I+EKZL0^gEiZY95_6 zPBKN60##a_k7`js>OH&Z$glxmzG9!LYH!9Xs5<98qKQaJ`5P2tb`m@ks8=?#z>`67 zxKPW0nPUK}UaVFYYVBee92DztgQ->Qf$-Qt(-fqoMG}_Wt&w?@l)7A$^I}L6Xwq|6 zby>9|7|*G*mY3kGh{Ae})H?cKCno)k5FsVcAQD9|?Q7o2e7PPC8unB`kq8ODAVcW3 znETIA&hLPy9|8a@G#HUGCV1%e?YZ$8h~W|yhvzTS&l_o~M09+0x5IVJNAq!5!G8sl zG#4p2dLw*NOeQQcI|UaKmvzn7tDR(zg7kNFZtvw2T-aT6VpHvZt6Tbg&;VOF69 zW(X#kk?4D29{$L`#X5@;9fZ3;(p~;lO%{Jy7a<}Ndt-)2bI2ME5NogwL+~=EMLxT2 zMn`-!1q!4HA7bwW(PZ?C^;uAYi1Ty#JW)R(h}Hqbrd9|Bz20div%J6EbjVDGS( z7H!QN%U|Kx`{vu~zMF7C$mo4ymM>dOB#c7B1U&u^-Z4v!!8xJ&l; z>?<;_46Z@EI%?&CMa^3ULu5mP0upb@^3H`sy@!UD3K1P-)4PL4uV6IK6`J@w*3c?c z;LSpvB0e;BblWohCmPA2KPL?^6zU5F{}8IT%CD{nWU)38#)yqz71*LX z<~~*B>F99~k-$^AoIPs{r`Cyj?(j(6Q}aHpAVVD1&Uh90U1itoZ)d5968MyF5VTJ; zKYSJ__uw@mn%)*H$0`~qQbvZ_6i1_ij8Xa5&p>)(&<79hCz};hZhM28&C4K=H?zw^ z4V3i)gTVn;h$oC6P?Pd&TQk=2oB;W7(Fah%d*@s#P3T9M|Svt;3c}#FwAEc^v z<9L-dXI{aIn=SpJI~`lNUu}00??t}C77&p~)htmZC6`t)WZhAbB=e$XM%ZgADA8Sd z(00s9^Gik=T6l~eS?-tAlDJMAf?D}OJOXlv7vgwicZ@!w{LWi!@*WpuAQ(_f1pR}d zJ!)7!2e=!8tXsv>vObcvUBa`M&=Rdr>r0Dqn7AQ~aw^lw(_pYg{{@9#YzI*zHq}hH zb&O#)a|>xRyM<=w;ZoldlRsF081>jJ^LRWGoK`aIe2!nJ&c}{BeYqd)=PyHsELu0 zVJItJDGe19aesa0Pqg1b2aT4R>JreJ@fJd>M;dcizIxy1*4k8>Y_!69tVSfqaU*zH1yynH#w`PoG8sNVZggg(Dz51@cpjc zkJMKDN{y&C9Y-pP2-bA-lyHpnHB?AR*s1c|$#1fE$Ld*X{BLNMq_om8x9aN}T7FKZ zrT?r(9HY<1Ih*{Cf<6VJD&uK&d5j8LE-}Jl@bHK1l?}EqZ;veQF$ZV%tl^cp1-Q~8 zGYWVVA(DX9JZ=iJ6veX2@v?#Hi=Z$xaFCpD)8CS*6ZeAi35_!CgRK||GA8zKL$;FJ z9aV1?ij6#kDbE=&T9pv1?ukBNO%S;U4G?F{4D-X)OpfO}{;nY4J$8^7)$su46 z&VfXDi)oe=4cw`)z4Ju|t3P@Qnw^&bEEF_5WEv~ooa{|H2qU?uiqv%t4-sbyuv5T` ztg|s8O-M3GGtaCwfQ#~d9%iTS@e?KA zo1Q|`{kXxc58^$vAINbp6HV{)XgVAP1#t;kJ^O z_DDO!>8ZwI{NbGqj$a6MI2I08k{3k|%Dl%rtDV6%byE0Hl4T%gO<9!8JWDNCI&4CO z?@aPmP{&>xBr*Xvha?@I?sJ681{gBz*YrhbpBT6jM`0)JEaI@+E6)spFaut(Wojjz zn7VDN=I=8(IWn-&*gt&WK-qtt6eWQg9;X&ZTM#v3hY~Rxn!T;4P;YrOZZy|}x7`E& z@R=lPHbZ=vO3)eP84aLR5D4hN*M~Z9q-mqP*ecy%7u|EY`B=puMJIot5Q~W6GXI($ z-3q~RNCA8LI0gsG&7uIm%D_a6DOOg{*(5`Mg4*Dp%HhV8ZH+skq?b)c(FBJ=LZ$I# zEH(w$Drjt@BC3|+0z_*r2yDkoo@~0;X;{dmLdWZtH2c?}h1f_04dMN72c-o&Rg zu;3#L#v32@@?IETHan@~Le91Q*N&edCs5YQQ?t0;-JtQL(%DPmhrArPg}!Z$lW$Cx z;EWx?AL<+GPht7uN+j5x66?C?RGuFX?8Y4j_-E?W$pl|0*7=9wW){;wiGp=A#taA& zj%)JCWWdb6SsL&6TQ3DR`*2$z_IYW4)X2o612m3xlSnT_-ikM7miKA&Oa`HJII~Z* z(KU81^pN>XaP#W6RU_ws9Ry}O1=Li((YawvJ-`wqt0!wSDEvdx_~e#yNI^7Fys(G0 zh*?i-GJsrbA)5Zia-85%c;3oSoD=hsq=1Nc7>`z)$q0g`Hy)IIgg~2mDlXzZHw&F` z0HNq^Gachz+00cDPw~W5HbsEo82qtSjC_dXHAc2*K4V~z~$8|;vhZF1bPHXS;>hRGG4ngM`e0=ZY|;7Lc6WI2>Fb|GJ8 z*r%LX4Ra}FmhsU)A^9t`riWSX9=0Wy0?ny6)2JdT1^E5@chO2ZiJ#+>-75`@iq58R zw`P?yVSy2x4KNzUN8sN>mGqrsm4u`fYOT?^T7~8CaMOP#9pl=}fZ8;dx>|7f2#Xy# z+wzyIf(~5OaNn5dm%YtdV8X-snwA!gsy7Hhn*bOFoJ&0?>{z`v*?Y>V*p57}B2P`X zS^-8pQ-F0cyf_;tP_tlcb;HN2iX2M$iT~eZiw}^*Cu6{E9a3Jy0^U4n-s`aNkse#S zdYP1`-(sUQ=H0vkzLWjwRAIY}Qhud{TswM#FU|d<3{?c4tzQYD!F~3eaC4R}zI+}b z97Emgf&AgEemnfkPDjr=@5MvL?f zW{Z7eIaw9>thS2|;6)HcwXYXu#t}mjh+JXj339)YL1!7Y2bqawmoLKSSz~3?@^+_L zsh6S7=i||^`^&q6CCGzIuj|o^JbA|pYU}cd~xsXwbVbhg9dSYn#~H6Uh#8HSlK z5j2MO+j1}_Q>H~kfzfZfY@zVJRIxOO?P5US9D$fu#l9D-g0OU>;r)~o*NE&*F$)1s zM3bJ1z$@%H#htg1G%>I7lWan$#V+4{e* zD9kT};?K(LTN!D`k0?m`9!i9&Up#GADl&3naIqQ00i>VwqU7@J*|0g}FhEhNOIa}# zS>~`Y-sq^UR8`{%_cc|~_lHm+(b;i@3$EZqN1<1fuQuVz@>sGW-a?OFZ0`&r@(v}U z8qlu_l5FDQbw~-m>Cx&WomRUDXV#VZKAb4Hx3giCH`1Po7E)z7(`GT0m3>jgk271%H4;qporxzn_1`XHgl_;ksm6q_5M6pRwTPY`17juMYY^gHeUg++) zx&EiZ*7{8q#*M2{B_Y|KM?okrCNWY(hLbfz-o2N@2Qn_bR0B>TS9zK%Cz`K*t}`#T zK+#J1(W%yi4f#4I+$8<+YOK+G2zN&-c&z9whUnB23*@De?*JbC(l8~b@Be@7I|FJ{ zzTMr4kCuR%P;nWqFX-gE+wCPU%iFNiZ7(Z)S5gCp?p$Lk%Eb zVww+ai+*Dfesp4oOu(?LHe#g1KY)>@nsGgqFm^$nD>!;6(Z#T*987_wffs5ah}aqc zsLo~%!f9QEhQ;_`kWunT6SHTrgCtBRUYc?<&9W{RK~!@8Hkjz(m$e7Ockt1SUp1C2 z%)ecVwDU(Wk~_qJE9OC*aFH-XHzPn5vUI*odb|sAS*Y&qA4>dozGdowwcakTdW()* z+meT=$g<1t2lc*Lyv24hEiroPqfT;inrk`2V}3dgzS1}{(`_4n>e?$89?Y9L*K1pn zt?aXmnmFII%4Z>&IU3w4U{)RWvm;4u#juT(M~-5g1~amkrYf5mL_W1o9WlGrjaw}= z@6QVZGDv?{kVX^AF~q= zR4RXt859kje79Dq1J3qIM7dRyiF{9L@5s!s>fpar&WiwvuP)o9+GHuaX zxT53h*0F2t(LiV*sQ=9qgKpJ4H~TY@6BE-A5S~mGscut2YKpnZde9OpaJm_zevY*< zX`aV_{-$AeZ!Y4&@o#VL&JSW5h>6jPf6N97zUo3!hxfjI0}2er9awqTCN5uwcK(Ys z_!LJ+J&nsV^5KHK_9W)B(wZCfvd_6u4yS|&AH7GK2pxNq=Gc_XnWu>6#~A~<*u8!k zfuQP$gUjROo%&D3D3e=aJzt_1r<98nPW?1dR1TivfFumH9yy8Ei z2HU~hB`*e;SW=9TKf~|Q50oso1`a(v0)bJ#Kc>J{!glAQ)Gb?$lynEfb6x-8fG;$0 zHhKyDVNLYmYlRz$lgzX`rL#wDW^n;(G4FWo%%hCQij+%DKJ({Niq@J=KU9wn>UGNV zCG9$aAZ&*JJYk_`4s$xbhb7ZNa-_h?BXb0;?Z)0RCgsPAc37OurfZnqM;PBNVi&7< zpCTMRbIoqi$QlNW<^|0>eZ!UL#L8QUKLjHN5$I+T5^0=EH&wIa&vc}Bu{F}%K;9nZ zbqeY;N3OcDq-kKNIA-WfFUF2}i1><7Pv#b>&(RP8+m8LNV7ZDc91R@jVnzuByf$Yw zxMuE9g3!_o1CA`}Hz$G>TMu}v)$-J38l!T>D- zi+DRRdv}th(wCk;PqQR;e4BUQJ_7<9P^H??HD0K*g1d~+C@AsMZb`6-4-ojIyhRBB ziBV7D>6t9GD+cmmLGvzdtJK`our!fh?jVW{D5QzcEt10z{^8Jz!d6d#i0P1KCTS$P zbngZ8Nmr?W)SvF*&lgdK7jRI42eu$=Ly@Dp%O4ORF21RzwY1S4L54ki=IFo29J`|o zUB@Rd3ve6Wje-L&f)_{lvs74S&p$#RN9fmiaNhH#s(KuRED`Xxz!rm|CkboyR{y*ighCmdcp<< zVJyB-g4y@>dkz=T@xmK{@rHG(EgE(Da0k6 zl!C3)z54BV=5P)G!}h`3;RUv>r2qu3sB4ymx$pUuMP2ZUh2B|{i@xOIiZg0>kZ$^b zdN*2?vq)A36Q13z@E}1P$sI8&BuvWq>COVV49aY2=x&#LUa=1i1~0ue%CryRk`WVY zLjcP;^6ue&M`_4ygefi_#$m)QE|0=Qm64T!1fkm~E-B@7;!C-sV(?Y;gun?`A&R{65ElK&X3BxyC1i|e*07VUv_pm|?p1A$-B5|-#A zuST_J7J%21x||kQC0h7|h+D;$=gCsvxL#fSRl?D!?;Fj%tMm1|G2JIl$nuh1d6P>isZalI7uF z5cP*GRr$1a1lu9HPn#Ao;1+;#?(vWDAXSt;YgbnJ^15z8vLU7FsxA$LZh91Wk{!P- zb!^q;?b`pv_ni6&EgeYlfhAy&@$MqghEXWr)?r{~VW4!7M_g>;1j3~) zToL4=vXhLjfWk}SR5K}23-}!%TR#D5fnJfevuMb+Vx%;XykJy8#chPGMeXd#Mv(+2NC-eYWMu*|1b>P!tCtPie%!dBK=&Xl2lPbR>> zpib-dq)YMdNa7FOX5ikxhU`Xk@|^|N%kG@hx3hsxBmKeOFI+OcSc~0$8v*+KSBo5G zk-4sYQn5=@g$m*_w~fsuX%p;k{L5j-rDofcV;im{gA5oM$p%1=KdS6m5 zKsP-X?2fsNz+$zLM9f2Yc-c7$BjJ0_ED!2!bQKoPt<770f$319m4uf$A#j9q@xx~! zvbq|rRA0Pmbhkp+3Gi4IA~RtHReSmLLFd%xe!+{PcBXCY#nf#h?Eu#Rh2e_mWz#WQ zXS#rX$R4tM`P$N2SyUOH0EFp-Z_(-FBz*P70C<#Z{>%OToH8ltBEFjX`EmADECP?* zmZgBq(#2XPGOjrpzkxw1V-Jm914QKX>#REgN+&Jc<}l3HsT`LY;ZT%eFlyIbic@bn z-V(Wrfeh+Q7(HRc^}>V#07(-s9WXrHi-jA3gkT5HM=uvs&g(|IzqbO(ci0MKFdyg0aC4?uFsI^7GF5vysCD*< zc=A3fwa8K%E0jv2>dVDG1t*Q47Y#bIbq#h`j!rIoe#l->m7BCNjz_L{bROI|B(}LQ z_8DZ)0Zd!cIYxgD3_}-Ak8&HCU~*BNQkmt+zRx2as93~VmdFuuKQK?ZL5j^mC*CU; zUvx;!E}B@_rvgSlbfZ%DeYhB>nWgKxgh|4~A4gFz8TR?M{{_Fz1XHq(45-7K*fO>y z_fKz(smp)j_Bp3je!6d6LPR{#T`_) zuBVkR4iduvj5h*VE!M9noQi9D9(yq6n6t{}4ZG2)NlP0kfWuo1oU`GO#WU>*p5$~S z@kXyYmpoPbvl;Y}QEwY%KuQX~{AV~<%X~mZmHeUQkBnuQ$mzaP@#7*7zYbjpL6-o= zlwC2e(y?FJlQSv_O(ry!lcLLl4SDZjW2V{R&qmPnvtW^a2QHw2VeO@QZ~{lkC^k`O z^2{Q~Iq~;h4KLRfe~sUy_uAIH$lh5fN#MfeKz<)8!udp7F(co@%NhLtm*=W--uSx-9;=Uyj7be-U5d{x=(mAO zBB#n3q=Q6R(ODVXpfmhxT_;0nT7+-H4nruHCu;f4n$6IFyf`~jukk{$g6{jbTY1!4 zW-v!Q=kvF6jU}5F(A!sTi{Q?6?L34#+bRp@)S7$r4Irr&Y?pP*PmJO}TFr621woVObBF7x<1;tOn;I?)>(=>^(a z*>~5NAlnXL&o7P+m>6B`1-ZRCdc-JO>84#>RDDnoLS2<-dAu7uYp*|1U+<_RSlVD`R?mV;I?ez?%$^9 z67l$(24J%Pa2k!7grVaFe6`5NK#c~vkI?*;&xi7#0gYE!{^0GgJ$~Yw52q$_7OeW` zl;{Z7xiQbvU4g@a?N{&fb8NOfi$M^wJxid+{3#h2j3CUGQVH@V9w)qC?OKg&@)O3F zj0Jc3OE;zEJ{x4Cx^x#Ve(akc^;?|?4A{F`&A(T9R`d#(D2#zMZvXfC;ul0JFWe&$ zRDiw;7IiRM(n%qg``vQRFx~|Mz$cpORbhL;zrvRRAewhr z#+W?((^uj+vZ+S52(+WSUv=s8g^)?S(+6y$kOo=f>_;`%XVtZ<+J+Hosbvp~%Xzcx z?v2)tf~d@j>m)}{3oAuCMTV2XyldDecFH{J+(UZ@K@wp5iFC={G(dt+DHZ7rxZ`yG z2-J@)@#(RtGjyp=RL!`6<9TzOtzp(38wHaS@bnc;28T#?<-3ML`unTQKybysd)mz% zvJy-SbJeTV5e@YN+H`8)OGozm$b@JE^=u8hlc+u7lamAFEpcM~XV&a06C+sT0ng}0 zrM7i=Jm(6T51nVgQigsdakal?M+aB3&}mMsxCt#x!AF~46~qzFilzW+ZpoOQM=iBk zqYnQVTp`bEYgj>6()m-T5|P?rMB}u)K|r`HAQuE&*+{^m$CSNW7R8v%J#y)Xl*p>@ zGRB?sA=Hb&8d1h zqLGB0e#STFI43G(#UiLVE95Nrk86kH|A;a|A|+Hlj0LU~c40jcC2tIbP5uWSY&I ziO9yCZ$|E4EXz$j@`H*NI~Mx`emB@y|2vz}(AI091Wg5wvno9zEN*qp6rDGmZY&`^ zOd{&j{>k~^PY%){Qdn=Km>R{`J->FPtuWx*d$ND#c!^Bcd_M{jSm9HU{^Ge(hRN-M zXgIVh&yua|i&;jbOtg`?d^V$2599U?ji7k+b*5lWr8xhmMgRzbjPRroQX+6KDHV!m zn36$t^`W*sppSL;Axg}-J?b}_P;j52jg6t=4NbMp#lGIT&l-2`Yr<|tmed>F)0Bkx zs-Mp;Cd8R)XXj?f9Jf5A=iDL5_ezin1QfW_;|eZ!(3gT||Ry<3bJ?4Hse7xU@i4v9Da zh6Mm!%l`!GJ+v6i*GO-#6B+GZ^5R~^`td&xCHrNQ-`CKcGz#gh)SNF{t0j}%*^zy# z#!5mb{Fan7CPyAN@cW;sCyL7fha^5JeA$moE59}Jc~D*~;pt4u@l`kKLJQW~GMN&B z@<=@w3f5M9Y(K~{^WgKK?4c5U_}r(rs=^+I3nvBcmdx8y!$s-_F zUYnwvS_&>yXpa(qNH20>b;#s_9?z!Au2KqqZBCTh3mue+zqZKpmF5^X1F<`-CFnN_ zA;`{hV?Adv`EqBYW>`ylNW&uCOO+St>qAN&HxEDhQLxW{(Zxn}qkBk5gcQci2~ev~ z#Jue1t0jyfsLuu;DFqA$qpfiq8rqJ?IfugT?XGwZp-cPtw%F!hGnQ&c4_ zs|KiNSKzi`D!LbZlDf>ef#Q~3w6BkT)2sea3G|c0%BLt>ygMS1b;=7Wg(8U&xga5H zeNk^jFK;yw&0>7pV1Hn!w$ZbqW~qXq!P>g@pMs(?0HjA^i3VcUDM;r0pgz`DzuERxp=vHQ}% znbJ&3cR;Gr91&Cx-BBiOk;r}bm=cf(B_M0kn4D6XMG%q0l3WEn_FV>|FloamH5EsN zG`5Z&=2V=Pn79&V0d(HTxHGN3m_OlSDr(q7MOo%{+Ith;(TEF~(3NM@M*Ll5J?%S7 zG$PBf0$O>~#`gM?1puM(35h;mwGXyMf>*MlViBk}DgU z+rN%!riED?eiNxT%1Yv99$qL-S;a`e7nP$}d$qu$gX!}gr$NPRph*{Y2 z^*&^W_TxQ`+hQg!`-P-7)E4k+-6dQrq0DCGw(b3QM(Z6P(LK6@GD%$R&^O+Lu7&!F z@tr*M9@E;lmExpg1z-@HZbuO;&M$kFr#m}MRuKIDeG`J9ByZ2n0fAY6<}$ashwB;G zxZ>@__57N7SeQra`ML8LR#Q7yYUen7&J=#lk?@%INEk|WcBjjEjUMud ziWrCN2fa(Z8|&$cf4d-LJ$?}!^KDzGtSwTN6E9pGbp zWCYn=^=Jfl`_DSjOUfxn(+7@>jm`0B`iN6Qy>9?b;1U_pHkPbjgmJx88Gk_B8hY$1 zM{U6L{eNoh>hYe}Q_xLG2XAz`WXPUkw^3&=HmJxvuo5;A6Z1U~w|IgCdbKQf zC&%6&6UYew42||#6X)255(8$o} zlPK1E)>vz^Nk#%QJhL=L_lPnk`LMg_>1sD2iM}yO&ufUHTNr1DCNks^v26@Th#M9m zjIae1t?ydkuh3q3!^<_wO@WC`>Zhha2?Uuvu1dE|U^9{U1Uo1`HCPl6jS%?mV9LX$ z43E%r8;vvb_5)ZO{kzV+wt5))2ML`zD^F58_gxUVNw1ORG2oQ3?6Zuy@^fkdPpn7~ zS(TB2zGsEim<4d-9#=GN0>*8htEcCF9V`Dg1!a+|B3h|YN?MaekVU~8xB?I&ABC6^ znj-!7C+Plz>~lZK^E7xjnXn5U@OjUb3poqv>R^-exThB3t?EH_s&%sIbfIiA=M3Wp zbXy`xRoY~pXvWKWllt$;dEbA^!zfLny<2OxjwTGe6!Q8|_SaCxK$DM!Z@k@?f)FPn z57$8?Lo4n%1DR~onsoeY+^GTHx!g~q@j&!2z047>z$2U&VYQWHdoS`O0<(%i=CESc zMaW<^9&Jzqu3VIk`8JwShu0Mt=2XKEK4&;T+>Khm%WZhXdtZ=P>M3x*=@QjnNTF%B zP!&tiLY?anxFE4wQv}J<7MHpbEr}N%(+e>zDU;{k7zI{wQK+EnqjvF<<+$vVr;Kro z{N{EleCGC%<4fl`6^BGFm>SjEbbVv(wTJ z1jVZJJI~0H`YAleF)g<8RlxIF=oXv5iS{-6k7m_kaIYha)CN67xXOxcwA6lT-p*Y* zsF9T7mA*$#TCgT2^(lPTWRfs11MD<0rT+>V89W2omx0JL#>LDv3Pn+u=J_YU;Au0(mqEmx;Z0udo6@zZN9t; z(E6IPc55daW6e5ptbaxd!i+m~L#Eto=l&n=H=RAomEz<(myI5idpX1p4(;L89TFth zWCedTC@eUQ6&bNdOSqh|#|#W5W~6S?4@c|M{pqrC(+IV)wcg+#A{vrp6b1^_+*%Dd zqiP-gsOA9TNPAI*D50o&#FD5-sK>ViOdtRg0|$9k6tGm(Gs8lnZp={*)ZD^Dy7dgS z_reb2$gH{41R6RC+lf?R}CvhZ|ukG8l zwuL=t{7F=;VhcJfEE0L@09h0WZ%dWqdsI#w<_9uTe@P62M&eF;vjqPDUCs+SIJNl1 zV_BNCzbzT@vt?9I(#I@Mb&>0$Su)aGI2XSBT#-Yb|^}V7u5Waion13VlXe z?K0%ykQTomD!VOpG7tqtdO4B#q3o8Iyr1ao)~qNo*^OrA>r0C-&_S^7r$(=gT`;s> z)gR(+oe(tJ7eWN1=$@dM@`n<}d?X`?Frfa6t?}nFewUAPFC{0m= zKp;XPedU(LFNrSC<+7BRvBhO!r^BI}Y^$GJ(H{MvaGsr6N_M%D*Ic;kqa@pt9aa`; zt%9i2b1)$MFY#>;!MgS?1jL~22UAQ%zXLm-#H4UtT5Lx5`-D)s!BU5R!1<#w3O>l) z$Fm{nit^;B;*+THPM2zF7MVquIKqq`os1ft;>x_I84^^W z1u17vR^GAIK~Xp=pxiH8>bSHOj5fU=_Op?J%j>=>*k84NCPV*fa5Msa%u1{Ve&^XD zv_0ltby;~4W6(O(NQx&~xhc?V+{jLvzexrx0smVNWs4e&3_1q%lcPn#JpdqdI|V_R zoxcJNhnEisl=MD<@z zT~{SQ0T{Sy<{XyQr$k2(%GFo9lk+it64e!CaXteY9t}|rZAlcNAX231R6<)H zV9muQHi91I6RRNtCyXS<0?QWX+GAe%jHZMW$%X9$K(m#D2E?pw_3-g0AA1vLp%M%w zBGN8CN%dA8g8C%L7<71qfFqIJf)=|7M~;GLHH^r{M#|0?5Xb*_ZgXb+^m6DN)zK%2L&+kWSiyf z)vJyLoaxW38B%@4>0o-iu7)=MNg>`ZPf$pyjzH1+a@?_z;QV)F{1Pqe*>kH-T%G!B zEuic*lYzYV!#p~N4^AOQt6$%qfnqkZ4A&O@>Z>1Y4e zc{60Yxr&Jt>kTiXFBQBXNJhOaTvER@m2rL$(|$&Doqm1L0MQg2(r`mfPn&SVcf{j>{tU<6GGobL7S$Z}XFEDO3M9kEEeMNAG^P&>p9B??=2)NfH#5Nd87S z|$eUPQM$u45 zB;#4-eH>A8bU}EB6f2bqx~hn6gk9GoYBiu_2uy=- zjVCv1`C`Ha{VZv8mqLQup)JKKRC5zWx|rxM{r)I#|{!E^nD3SsMuzA;grxdjHSa z6>0s+bg`tIndkFTw+ksvL8~31pinV#*_S(ayFw{9e}Y4FKu4Eg?fhUn(R7SPnD|^W z%vSG+c<=5%M2sHH7ahy*@fKCd%TU+qY_R)#+~rDp8o+0IM$~>N++GH2Pa&vPJE`~{ zVb3Fiki~c`TyJk^5j!MkC8ZochbrHY#^QrL* z+!*L6u`~)%@hR4V4_>Nu&2@p&4s+Y4W`D^l*yg~APvvL;xRJ(E|4~Bq;lQtUa2Ox= zZ8vS8iKkQ|rWlvO>CrJJc-Eh8@Q8OU9u(+XpiWpvt)JuRfuBT1%)mv0!au!^FyyTe z)9X_MhEE$@Mo_uuDl}nzW~8T_g$6?rcI7FbcJ_lJjy6QI+8OA!dTdFJ-S~8VC;Pff zwHGB`jcM~;AvX$GIh7`JE6FtC>@Q06N*|~E8giU@+sVXn2_Nw-LC^x|-p3_RPu#6e zK1P2FMrG64FBHexopAHyyHNN=$Gzo`0=A|q(lhG@AqoCz6*kz)B_A&mL@KwzAiFPo zD+k6DsTVF;iR+_j2v_hZX3M|K1|g;*wCKy?D%Y(nUE?x`q>6En&}LhgHZ7W*s#M)M zD^<9Nd`BU4zz9jbb=@xEz+C!OGjfnIrD@{X7}Y4h1?URQcORS+bMp*1pqBK#)tjbd zxPT7@bN$HBEv}}xx@B3m{Q^ELk!%(zvxPR0rPTS&xwu+F8n6CmZ}(}{TE7?zD`k<3 z40y@tr@)7Hh`N(`oBKnRUuvcoZK=>WEAy<)vzDDPbd)b4ujHxshi~Y!SwFK5&{SZs z#>5=llSf5JFms5UmKYO-b zK#+>gk_9JGl!JBPSj_1#OjtxCdIs5~<935N{#AgbeDD64)bckr=C25@99OU(q=WUE&dT5b?yuqy~qWs)0~+dQBiR^KF+Dj6O?3l}XtEv8{f zBy@z+?g3k-e+8&Bd9+AHKHvEzv0uoxW_?y}ya|fj?UL#pwI`sGQ0ZkWxdg1$O3=5xj=bsx+k8Ip(nd#7iKHMA zQVy-#y{fGwQ_gCR!TY~J9$K*4S{|daVqt@Oa%B$Dl6$2R2{VjTmt%k+@lSv7vl!<4 zmiUP^iEls39{~Ukgqr@1cKuG)JqUB$4#LOCLVs72fmU|k1F8pP9q>&uf+}F4_^qSJ zX8s|7sCtafkOFv~9P%$kYVmhLYIMlQa89vA)OH&rjnRqs+vqXyo=I@`eIl?)!k7fR zESl;WN53Rw_A|iugxu5B4)Il@no%CR3c6slU)T{G$t#PKj|k4-UM-61L_ue&CZ~vU z)B)NYi_{SAI{8Jo@Su-M_ga2jU#g?-YQ{(%p}$@c-|Y7LCcQ2*`ocU2ZIC5SCc_D{ z53wN2(j>q@GihObPsh^x8q%{1IQFJ;+v7Ryw`)g$u%Dj&$j7I$cbst+?fM!f` zk?gPTCkbQ?XIhm5-q#!VlZio4kgM@48#mL=Nm|gX(YTL<`Q$oT8i-u{(Oq~zIr$Yv z2tE7fk+A)rkksY?-eD>+eQuvL$Y(h4N8NF@ajS~;3^!kX@dqPhL0EU}L<>v-DLKk2 zk2U}5QR+Sb(TmhS;U|+h5Ml^TMq1pREUZW5?#)vJr6hIke@%@r7it0*E;VgFI{)I> zGrPLAK@_P~6}}}ZJy<$Q8v7jKTty5o9=Im2h~^)l+5CUQjoI}~jbrTLvXd0~jFz0b z8i^Gci<{&;0>wtqGbVr|c{5J)7>esTPAKdd!ZhS~sweuPiP~NS=@v1zEEPQ6#77ik z#?*1!oTD^+N)AOePfMx)v9@P+Un>O-z4v;%5C+he&T+*rVY|ZbH-YF1{Hxn<{q-Ts zippPTKdbpvP!%axFt5^{rNP2rq1Bz4DuBti{l!^tu@yjMX`A-A0#5FynS;T zWuWPqopiwBRcYY&mJH44OPv zxc_w(nN;rY8^AM-*s!W`6jznKjr|X&NP9F^s%n-OXcW942cWo7wkZE&zH7D+F}5v) zDgR5`i&vWt&&3Q9UZSllnD`zC=Q5%gP>Ni6Z8JGXceYq@ta;q;_GkbWBgOABpPC!f z##)t0UN#;a-qmA{BOFeH`~}aeuX-kUFJjB$@AHN;faVZ5=?uGF2TQm343Qtqd#HErDQyq1c0hp@*=QHnl z*N#dOL*+@bAilfz=2_j&yY#+hIy-%Pe2Us6(Yg4Hy^^s&bcf6(?$jcm7Ez@i_)LC} zw7l5C@!~aMXnvrzGT?sbTzd@n#Mwh*4agW6HH|9Ll8{g%h-j&X2~&=1G4%qS;S-jw z#CV*dN5W&|xI9}l?yYccn!3zp6mAC-++w6T8nds;4_qhFBB|MU14&brT zUexH%LPdcaHXb|x__jX)hO5~eeFl-2r@eZ4A@FaHy?ijO_V3RRj;`iPU?e<+Nvf$u z^f`BQ3C6VPLiyCpT!?-1%t9@QAt?%zhuBY6rQEEVbS}AxZKO8aSon~A+j6ItaX>S$ zP6I`L@KRgIwJbP(4A-;^`d7YFA(_);x(2!f)(D^q(z?fIk>?_5@qWwKd}miCB7-%> zH{YZ4!&tN$q)cj*spC<=c6l|s=vwsi<}3hrr{%}gWd(S@SfaFA6?WqHVmy!8%_hk| zKJ}m6;vBW(6vp^6nEyW`lf3+3=or3f6Trp=ns#^^@tS#JyRd|8UmQ!3d3X=mIGYY2 zU;W`vyBOswG~nT1ze!p4yY}3*-bmqjHO^h-18xc8V{rS9_Qf44bxQZE-9HT|`6B2o z-83Nrph%SUbiD6s$aM|R+{zY ztzE=Gh`d~dPL5~t{z=HCOha3Jyz5k}sBmO0*0Uo|*kek_x={_{=2bbWPlPCnWQqf9 zC_|EOVH9RT&&-7TW7F4sfv0<|Gjc1NmKpkpQ4ubw6QZLvEX9G&J~^{2L;A!LAE>Oa zk^x+CoctE(4s}(v+HQ3?_rs-Up4OK}3<%ckKL13|Tevo3U^{^%Hl{X_7xEz#n~1t= zM8Br>iYH}o5jY~+umK6vaV73@bNetuORfTK~0fy|)nbeC0r)SPbJ~z1Vi`sVWt;mVqI?)K#oHcA}%IQ19A+EVxwj-vjVQ2FV5MnyvSRA6Tk zG>$l*TPgF+G5o;?-pG=B)@B8~xGUrjW@f{~bxV&Te%V7~oOXBfBR*+O@n0cp_icqv z*ug~hHBq!n{kAZtwMqk~Rs7g2UF7BGSyq=36uEZ&>saY#M6v9y5-`;HfVb~a3}{io zoWS-;o>Gs3^i?s=OQ<2@g&v!8c$aUSD|deBF)}ePpim*5&0*1RTl8!BjdqCJUP%2< z1~XI;lW>BFx#}eC)OSdI?>x*!3Vs&tM6xq#+9=Q;epaFN{*!!|?h{)<)m#z5rUbgq zmL)ft46rJr^R3wR_(9f!OgQbScGyICVjiDt0LkS;6=Z{yCq=U6Fnu4-jTm1IzLKC0U@ z40kQ*Foh%-vsK-}p|t&vxz)Jfo*)lj@Si4dyW*4*D8&K0+M$+dwTb1ZDqA=`>W~eg zu_9$QySv0^P_@zuRfP7c2^v(k8<=DH)tdHkr7k{LDz>owi}|-~=ONA-97q8XvY?VY zO~0jCF$0U9gofg~-`zf9rt{Agvie-b6UI|phK6O!2OAS?q^3kYX-!G3RqE+kJUJaW zYD@v_HZoDw>KdP4){#9pE9TCrXiu?qr9CY8W%n;;@Du?j6;>j-EWDvT%7Ipy7jU_v z*Q1$+E&DiG=Fb}k-u8jx6!$F5PQt_S+E<2xGS&jHNLY0ZCT?TT@5~Yf+cwD;O$*xn zg7|MQ!mA3HdUkH!0pLn)Ojk0((5^v9>2;gjFx2EWt?Hk-Dec(pzF9;tbjQ{bF$}Z5 zyU3#l+2d(c-;naCW*fSOeAiGKN>%90O~McZH!q){=D(UWoVVFV$Ki&x2^++y-6vh_ z_sFLMS9XhQf(&=vLa7vTnWQz|w^vhjQX+(pmCBn{q2Bh zDw8z^i6X$ZsqNu|BuCDd-OSBCTQ?2297&UyhN;@n@ppm1W@Hxo*?(WJuaS}wSWgiJ zQ++df5<%fBWW&b&H!McavK4l3xnR#Tp{UR>@u4ED&lNGS>lw;L=2(wDP!?4{zeIM8r5C(cgQNqNqu9eyl%zqjV*{p?w^ zw9s^E*VZ)rNz|q+)kimhI-T=#)xfgu?zE1(bv|zLrnvpZyMMDnvlzu52mZmRoLC$Y z!}dp9+E6tt#VH(7l2fXD|L7#ATOO!6J`>DhzBy7#knv>X#J*?0<9Ox@J(eC&l8e2A z5PJY_Nw*t16Q7XM123uemg&zuMea0)h{idw2{c_LU<*U|@^U2e;$X2lSNJPkY@8l; zF+3RvjuzU$*yI*X+h$~ee6xY-0(c0t)V;lGx+P4=H7w2R0xV10nm){(?tn>k7c)Y3 z0BXy1n?nj;dYn(EuTELYNueZ&mqm8{}>;hN}ld zYklU_kL6GnZR=?)vS$8gDBSAAV7)8={H#Y83mGN)eLRi>ozEqouFJ!4GnS3rGA&XS z^U$0T7!>;2&)}+0i5T`>S1q)8UsPnpU$c8ij=Kd{>u?@41EU_o?Xbm$jowbzv~Iz{ zQOoTMo4Ov|g&#mVE(<=zZ@Wfw)1f+4>87I|yD5-_($&uH3mXf!T9Hy*37-7u;uVDf zf>5>!?KT;mxN;R{`#`~rm!YJE~ zV#c6NyxjnsJK>i>(*zeGPI8iyz-#6?{CnSj?HaQ!6g!ttK%6$1oRD!M2m6(=N}+Ac zw#r7gG{QL{YO*I5C(&VR>vllsvu>gpjGv^@ZJ|QC#+nmTQ9{(j>&}X7)kpgM&G84J zVUmTh*KmqSuS}pcp%Lx=A9-4nd$rIMm*?1`0>Y>Xf9W+oV&bE?KSWrSb0^?$MGTaj z`x~_3my|KPb603Ygg~HHQT;m7Jl}r|W>RVyq-$!8skd7<4iGK9XgpviEdmpvgS|;M zJ0-yW!)Ows>sl*NL>+SO|o=xK7sw6WZ6;r{|E7-qg72h_A605ha~Db44b@aJt#e!F#i*EIvNd zxNH;{Mg(NH6J+{S3~3Eqf2Ya^t(_^Xvha&`{<^}Cz>R?jdgu&XTUZEBErf18HD_%S zCJWer_#*3ckMeQwl$@K@kiTXRDT&>*foWY=?T*{aQg*0`XrFzspJ^ZM<9zPhv|{Bc zz*b1FABa`V2^!r#UNIO2?Kl5b?e?n%444BAyO4-6&sg%Ib=VBRTx&sq9esBhr{OFU z+i|#3UE7~{16_KTP_QK^rM2M6=$Q0+k=ku$?)yQ9l%=M)N>g$S-`!t!vtCf=069;! zFtbx|I1}7LYnjxvOBDBCYp~d+@dA0_YWZ@~PbKF?kw{>_N10Rv1>FPbnS^@NYkoYb zc>q??Sq0Y5^pGV)u()Efsf2pEPYy=;?RaO7z8R_qq8uL!6VqSW@KLdT#8er}yA`xu z$6-c&(T!u&h!*g|QD%|GcIC~A#ud+XV|3z?=6?*+u51rkt_IcxR+ogQn;)?ROXzm< zcz!gh(RNC@E_=_k@g2Us>N-xfzWLQ$9-^zPVQQHs6|CPoyYl{kI>s8-vf(Nq+4fe86PdacoY0FeBzFqn5NDvd0aaf+D&)gx=GYQcAX&j*BED-`yghOzVN4Vu z3E3RU+7^G;ysxnnvWJfT$R-0YyDEPnDibj4Fp|Qwe=0gWj)v$sL z-Nnn_chtiCuQ@C;O9KB>3H5{sgM$R&22bRDBFK-+RNpu>%nv&bnnJW}o5@m=`pkct z)o03~Z&yb6!G=AsCUKjWk5JkPbB~qvHs^Ys1x(yhONn1#3CZy>xS^4-q|Wu{z_gN+ z^p?76hj9 z4NvPnMNL*R0RiH&EQ9iGwXfg^Bt!>oNaFw!3hg)zF)p~G2S6zHOt@CbvbTaB@|$G(j;J4f+;GN(t_d_C=6OT& zNl|fSWdL7x{E;Kgu2_SYZO|IR3P<8l<@9~d| z2y*oOYD|hf!nliSh>SqGOL<{aSEtHt#%1oSoHAK7vK&8i_l^%HW5Bi!3`J}$Iyj6KJBr$8aY3Bu(-f3)(Yom- zZ|K)%98CKAQl7kq-u|2b#~%cp;%SORCi5-4LbT^-5rwXD5b!Tx=t)v7VbufW&OA{% zg)4y#3CyJzR$cvQA^{Bbq&;>fxy&p-~W&sXqy1vcH# zgojNHL5%)n3k}c9Ko;AZ=4{nK<}v8h*J;ib)8(7I=->FH0N`h6`d4u?L6x_0msAT zEO=Y@u4WvW^E#}NDZB|t8^iq{6oZY5Nk;}xe^vC`td6r{BUf19KeHLxus(zdroMpiuqVVhJ`Ia|foK-x z|0r_lx-Y6!+*)AM=mVKtgL0{Kf51eh%@Z>|B6@KzW}9v-C8szZkrF5ckESeLECvP} z&a%ZXhPeq`jY#)TuKb`a26Akc{_fs*-r7?c$Hv9<)PjzG)SYX#w1GSJ-zFi3Y-3=z zEDmZRNyZVSX9ckdL*N;3pv*F3s$!w|N;u7M81}(f{iLR9HpLN_TWPiPS4B<*I%iKb zYlS(_nKk~0CCwy3wr+4>V21X`IanPy#|n)6N(v!Y)|^w6AR(2_#n}0e8qJKM@MDt2 z0J#Hw#CeP2B5=JmvdsEEPv9nySITMKhTK`(t-xuqg$6EFjs&!3%yEO62|w!OoV}Ki z6Fj8Qyv4PGpxl5&KE}a#W&-26Eo3s7=cJ`$}%R%lnF+Sr1cX| z2~Z~s(GG_mp4^kXAZx81ymZTGVe8{=6~A-41kmp?@weaS6G7xbE{gT+iWt7o=ufz^ zOm7a7w>3X_RPRcNb(SbbkLvw3t7oz`ln6>c|5>!!e|6D!x&tE9XaTAHdM=Rb=+0?R ze6}}7|BhHqe(i-;HyM>KsCHTEjoTKbcvJ$lbp(1e63NT^=|CP)YM>1I&E%As=5!wH zJ_4!1K2T@yIYy&1m}od*Hfq0FLV?~v&8P6tdj2MX}c)g^jM zfYFt>Pe!d5HX5~svj-_v2aj78W(c1sNBTR{jl5%~Q+HE$vdl|8 zHm2}9I85wDDi+CEEbt+=C9y;XwZxke6#0O7;B`bBl)Kg!l?`OYXA2tfrLPPLgc9Ti z7L0rj9!@{p95<`#jZmObAWSiMUAmx}8DBG4nzF`Eu2eSiY(Djmgnai(!IG#Z1;W6g zCuE}zX830DQm&M+l#KH;_O_w-YYg{BBOIu1h(UmcR}WRQnE8+07GCEFtp$#P>ZByr z=QV0jUbpV5MMym6`-nA*TnK|7#7wN^D%oBFsX5YmqSB*~0=Y6Ib6@Sk_hO`|wQT%?yYI$+q_4-R3p2%! zlU2>S+h7W35bsM`0vk*|`7kXA6>vcE8Q@@ymY>YJgN9}lQ1!K(JCu8Ew3mdu-_a4M zF*c&F8Wrl_t^Ap9UT6JEp2WtxyE_-EUY!i8eeI%d<&@v5Gw;m)zDqc8vdgxYJ=1Xs3Ks$p-c z3DU+A)y=o0`?B1tfikYSuI;u?GGx|fzmsxDCv)(j)LIT@{7c|I%jVT`Lu#W6Wt@9k zKa-K1JPNo4d#Ff#ya-MIg#NvU;VV-0j2d)q6;_y=JE4)E1@>og9dUQ(*RE#Fbhm5q zL01gPK2hjGWKR(NZPX_lY=Q=hWO-KaAcOGP4;PO={H;c;a_O?kuVqX|CMCwd^Vval zzu^0^nFm0pVR?^!hL^p%X%u_itG0I?DiPw^R&29}O$-*j$Vi0;Uv3lb4!TKje+>S4 zi8o9389bvz^sU(4-y3e=+A~`O=l64L9H^KhqTJ;x*EQ*fn4f9n0`GqDR#ir-YUJfW zUi%WxmWgp`(aasJ#GDRuyf-dM2{9)3x0qeoZZu=$U#HIo*>}V9v`Xcf2!z^XfpXt% zY`h#%ET!X%_qe*9Sk#p15g~vwYY4c!>W5HhF(2rNElp8{uaAVLj3eQg{mo_@^RE{N z-$Pk>S$u8QtBY~gU4^jv=BuM3S~8T;$24i#H=Wq<2N)~!KNS|(H{0K03B!y+!Rzp< z94tGjK2K4sBv9XJ^dA|rM&3p^k2$DwT2dnjf32f}ARRJB`7+Qgk;#@JqpKK2b@Hzc zaF`E+LFrbbxX$!c@Ae$Gvr%f+6Kn4~(G-3$XxX)f!bDnHy8)E?U8veS z7)5w13dFM;=AMN8;2tHv2SI{Sz@&RcVwbta%%Z4+u@`q44`H1WL9mx^(||eT>UL3= zPZM%3j6^6_U4M+vdFSCW45o~F1L*BPbfQjoZsL=Euf$79m7`o~a+&#j4W9iB{OIHn z2m`=LHqRAC$>*G_kgFScxjVwyXJVf#ZqCFiUNgk~%|2P!&+8rglW=$$t--}LucCw ztDkBR0D($L@;G{XOC=!s_4i=+HoYIPmHbteJ%>!FCpx~Nh5Ag{s8(7XFsc5lxcFBfB zC&<70u^WhrYZy5^jlFkWpX_!_pVarwV@3cYQ#__?C%Y-*glfi>bZQJd9@x8#pSIKo zp==$yu1Skv<_n_cBwDULu2wr9X3Fnp=h?+=M5EQ9J&GZT zBGd&I!S+~D=s4Zb!#1k9TS2Y85Ld6rk4CZE1MF<{mIj;7S`Z`Jl`iNDZ)Hot${Ng~_MgfT8Q^xU1jAVm?k9uKJ{9It zq}K%68BQ=G*L4#9q506JNV0eV*3}+lvQ50(X-OU$plk%jKm*H7m6WJ<{+U4;?$GuV z*8RGxvv9voI~|e-BUi3-{$ku5jn;6Ql{pj!by4qh{l@bru~(~Ee51aT%V(MkTVXU* zgNwAiktZ6=Pb9U3`jV{Pt;J5W4(vsEEhkB_fqF|2w}FxXWZt-T6slTZzb#kk0|t6U zim#lH$3b9gB+XO}|NRI`=HJ20s%mP_;)P3~TU4DX;*y9!O0BMCv|&jN79RTI;l@ko zU3w$DY#i+i1{B{B&}BOKZg6-+-CVjpN265(<#|aVT^xy^y|nv1_Dz_3}@tY4tpsZ zdx~^l4}i$#mGp{w0-GwMD3zZtvHn_YBpxB&YRuyAFX99lFm8+Pk7+XzD4LIi906cD z?<-&mRECsug2#z#zm+JL5RkB%cl6Ad@#8Et;pLe>;W7 z&SuBT&3yJ$N`37*6mb#RnMI97c!thCmv@q@b{6s&;V5SV!g{Ii0`oJJD>UPU|+^JMBZ|FNC4&!H*7?`7)Izg`v%%x5D75$Rf#dg zKLR5;4{6{x+`lQ7b;Q>qBnhotTV(B7=j%@QG=3C8`Q{hg2fA}zpRr$P$W%k`{ksWK z4{oDf^DnlN^};Q0b2BH6LGf5+vf*QGJ;;(PTssW{J0EIrX(w8&Wr?Lt8i+v}98E}l z8`bp4OY~0zj|WXU5Nz%AiOo#AZ&B4288C~3Gb+>8*U`~*735bU0KgY5uReP?o@} z;~JVr9$TQ@zxl(zIX`yf$*|C%1wdJ_RYde=i0KZ(Yyu0CDy8c4Ra0fFK0^)1EprHu zHL>(ipqs)8@r0LJMz$j`b)(;AXImQ8BVKSfaP<&qSS9Ak9wpC>(nf!^!?Qb)|8Jk1 zOcFdjc;F(S|3K>4rh*$2!;(;9NzxC?(=oQ`Joe-8NkqH5)!n;U z#$9^rv0JyZS1HJjePE_=uJxKp$orH&N|0u*xSY>lsYpcZn_oDrN;=6lV4O)INT*@c zu>8Qm%pM}X^zWBee_%ru3GG7Xui5Cl#LV>mWQ#bzvitXu++EyS*4sf#zBfC?cE0tE zt~|b38$$IVq{%+w_lK)G`ZFOpnz*FvHi*wWRjJBzjjPa-Sct@%A(v{lj*8uEbSK8@ z;9=;Yt4bU7SN6fk>^40VZ4OdWkfpMnA*3pZKX_*)h=hJDW~?~M_+4@u=KEo;x8ou3 zW5iAFdS*$+4tRZ;uE32TMDn&!7>w&3I8a`ycLjN znkGip%0!zimeo!<)ry~7%rcq5(4M$a^QFX35CrydfX`BtorF=6Wx_LMrl82?bl~y`OfV1XBeJKH0aG9}l@wQy3LjL!ituPNXl4w2T1Q^&( znlfk@HCYRxVqNC{dM3sF|KVQ-9jhsx%X?06X{z!Hc(l*8JI8B_>7q(^a#mgMd`Ls> zS$lVU*WyvB#)ms;G=oZK&~BrsWXe-uD@Fn^s2@aEK{jN=d>(6p)4uG-lP^>;ScjLT zqQkrLi+O(2dkgx}jF!Fj@>mn1j1o9nD4R_{2W#t!{Q97|uSe)H136PPWd|Uw5LXKH z+9^3~^4&V%|0u}GFK|~fN7D2_Wo&q1HEv#p>+ELdHagk{beu`B!3;XIG`{ z6Z-qKV&4jenBssN}&IjLIs&F&^~Iu03s?T8VOK`f3ELUMj&5M z^QkTxT$TZgk;JTQo)Cgy>W5_cPM;F7@y{m9zWJ%&%4KVt zNJ+RJDR`A#qjCC4q(hQ!3HS!IYAVW^52FoT`@7G8L;LR&vZ3MYlUr2#MDu^owrEDA z9nCtiTZbu`WE&pf2V78yMdg`c)f>IOeGGS0M!E=Ts~1BSI&^rq9P!0(D;^WsTxfN~ zZ~3SEt0NdxlT7_VU6FomD+QH#v0}95+&U~aZa!jvcizBns1Wl|CnyI%4W#d3Bl`#v z|Iuz#@)|CHhg3FlbGyCIy+1V^x$B>&H&&wZdw~a^G0x4c#mNvL0W=8RpM5eSKQ8@6 zw|m%&le63uTcBz>le=AO*@XQ##?eDy^hX~wh(W>7DE>@00}H=&qfcx)Ps3^{YAQv9 ze|F!jIqU6g6)JcGLwg4htDw{~+S0oHrrp_oOJLVPeE1or)g1kT1-T+u#b?~uH$$Om z!)c;KlnBVjl^SC5arDlqbaLl_Il&O(>UA+N!O=26WTGwlt_xo~(p`L*sgH!SA6Uws zejlmE`+4Q%8tjyMtLr9sX%duJHDQ5-nW)%NGwL?w6!p_1ClI5sdT&erOCUwJvD{PL@RcCHRP#L06pWY`1_9lF)s5P2Un+^v?cP+7u@p)52%Y8|1rWx+p2 z8=JbauG8LM3B|SD{`KY_jPT$}gN25Yv4Gb_khZ4T;suXaBbD48st=8TT)lLNYu5d# z1&E@0Q=tI=KLEg=#fj{5Oh8--ceavhyyc5}feENp4>b;7IYxDsHyT>%C^Bh!5E?6{ zBkQ)W5y1o_D+j&%+3Xy=ck8HTBx1e{K?D;t0K|xf3FeVUQrxqeif|aJ!WuN{qI$1nW;?SjuMHNX8soo@5n)H?;u3=s@2_hoO zf!eQY(CvYP{(Z@$uVziqDzE&F92MwJ#FU?<9OR?5lL|jguF;eMl2!=*h&0D*3hl!a z=*az!aMLtw*4MrW*(hK1NdjUgAwtr^vgMp+DUECypH} zw`7bx-<>w{AEt{>HRuPzJBMx;Ic&ezPIx>IQjuRXHdxlI1}{@$U|6(HhEM#b;!*}lr8=39spV)5ln$HqOfX&4l!t~QH6IwL{m4Y^n) zVj`9fZOH=(X#DuE@mNQ_SSBO0D7*|t4FiKzNtQ7x>jhG*g2jT!^*5@7S>vi2wx)7ZoQ(^ zvN;?a^_iW~T}`@FaZ5`W%%|42sy}Zjx=JHTU*zyp2EeQAVqc^LXt*x}-Ue3vjRez? zJxU#|stOh(VMcQQE>fRf@Q}EQVY$v%UmT@3I3{q9&8ulyuS!(m;^AgY@2FrEg)Iu& zHmx=7f#H2uP2A&L28B7b>1@(}se;t21KHhb*T_EN@yqGFvv)Z!S$iAf#e7<-W;;2L zz4?4SW2O7Fow~<@inX#?v1@SgwGbGGD%_HED%=1-8zi-ULX)fn!cm{QZbnim&@H4U z!eg;qJr#fB?8*m)zohGbYqL+3%wL;uONI77M|Vy zCtG&LM(q;O4Vb#s%;1(^g9I*KxXYI?V>UXzW~iIW;%`V7`Jf%^IW){=14AWg?@AZ@ z@+mLGDjE{A_^-=OaW#`y;MysL??BIwY?sSQl-__L?>;oy#!`P0Hfu4b@bzxc3@7Yt zxh0p{Mjlb9{mwL61lK*{@WCd_<~gUe&;MxekV$5$ibns>jz^z}g1u@coP;0yAztRF8ssIH z``jWmpUhNGx1kX41sTSQgB^nw6ryZK*tPHhK0CaHiv5%aq|*aTd+XJ zhXnci1c$5>C1*E>(2EsJHcJ=v*&i>#ite8fSKd?~0)AW!yzq8?NE*4@O=)Db8>Do4 z8XwJXXiLdXA|Zyx(3lXTL5Ed=Ly4o=#j@Q5bf|@?2lG2 zoM_V3kBQ2F$-5Cp_$XO&SzR(oh#+v z3uskSu8sEooZPl>T)Ow%zq%la`)&$`QKdTwO=uo)OwmqoV=%3RvB%Ce&@g$T!nu-F z)@H^R^;=nJmD_LjL)%@?=F!0yIw*vr5Bv=x9)p3`2tg3!W6KaF?l_4c%kyJbyv4}; z0u=?kJ0mGj%HRrrMZHc27q&jQxcBi?OKODv5zI+t96SNFmiNNK@T$rBy}7d4&r*2^ zDpI$Dh@?(@|6$lY=(FW9F68)^K%IX0CVrWl_nAM%R*@&bT4cZCCCPu-VhV~h@8bBB zaHCz*c89R^Zu&=33-n`3bosr*A?D=vMkm|fczuh0tGTx`>nmp70jl@)!-2Jh(;ktP zd5M}idxR2{@zn}zj%*{gqnz@B#lr-+ZDr7YiQ9Ak7drc^JiV@|NWP(A1kOIbP(NNC zBxq383HF1R)f-cSGE=Trf7%^LNv4zCIT2AV0ePyRdU=-mK$n+37Z|m9hHO#mlIj20 zVR_MeUe2@6o|Qv!g))X^{q^!_400FBd%9ZEzad+8B>^vSQ&s?lGY`AC)h4IiGK(a} z=p^pZOvOTg9|y}Fq5K-r>~ec!6<##Nd|~fG!xpwrb6ISwhq@Dbw~gAL<0%;$j(;$j zU-bv*rOMmu6WxGo*jrIm@(t--WmJJJm#o=onf=E*S$*=f6?q~s28hCfKDq%3u4Vzv ze3uM$%jEsRf-b77Asq>?Kc92<9#ZS*B=J(lo2oTy2Xx&OeuS#2wn?L9%dpx$v|E!o z)!$>mmR)Tnr3Vt*OOfNN%hoR$%jGijkKZ_rx?>)rq zrr7JV2VDm}BbV|E z@4YM%_@i-xR&OoI>tND~kvQBXWu`Fs9*-wC5?ENUHe~v?TA_vWjlf>|jf77ccc?J4 z^E~wA5Wb8uLZ1O9LASXnzHFgdT7pv@e*^X8S$2I(XX z|Jwaq5JK>r>Bqn30=Pyh8PSSJB!3y2fxTGj#>lg)Lcs|%7&_#w_4>;TUfjt>iB{Rm zjO32C)$HrCV)4Fkn^@2!D{p&#Xl)<)xr`i1ZCSqE$3wmM`E3i5??+Fp2=Fc> zI+jDDx;4VAxvJxRK6#6YL|6Ax*z05Ob!YHR3IuFvJ+k;~U<*Co-Cl2nVpzVZB@oph?Ne_bT3mNk zo0HoG(=yq@Q(oVePCMZ<2K-g(s_ReOe|y3uuCJ6qjYPU{jdmrBSd>P<_9Vm0#*GYo zGggW9aR4R=rqL|xV-AeA4rnacP_-**BhpXrFdlWD>~TSHf-A3ffM+dE!ET90{%D{Y z&;uyfs#pG^;WIN8_(#YvoqL+&u5DTlw!}E|gm+)^!RM`5j#v+4f@x@DNMu|?bq@I~ zvS?3BgPlC<#x;4mt$rcBkodYwUix9}zUs^6yRJ ztD0u-3#~fi`0k_LjlW5NOPRPR3`0RY{ENmYl@MM{y@kd%qOIV*a9O051uPF@oI#=p zL2+9I-ehIO8%@#XpdWNyx&?-7fL~`-{VxPd5C^={E#P>=tahZp6T!!~?S!f=XjZ7& zk1%{iBs8Ky;p~wkjGNw0aItlvqgCz$AH&Ky`*l@2uf^b87h$8<}Tb3*~9l-}!AKB99?A%)T;qnAM$$$cFmW^56eMYx~v_#ceRM zN~%gr92~VIENG)W8Q)xzL*y#bf9!wdOJtk<$Z`H)^eaGFrIF> z#rxCZHELl4RX!R#1GuoT>hdI(uaVwKz54Q9G_@A_C&Lq*m0U!1lb#%zH#LA;zJa>_ zefwzwhRwwp%xA*&nNiAsM52@h^6 z_JnX;c~uScpYxc$9f?Js6$n&rC&9#Tsv$C|kPf&(9d?qQ#Pdl}ijQ!HNo-hP_AAZ` z1yaeINICNn{^4}xTVIC&VAY2e3cBBmDK4}|bezWcbUYY=xNNEVG&|RW`~RMz|a3!Y*zN(hvCiz?dn+ zdY(3CSr4Fw$0PTWeThik60B{)G6{i`Rv^KI0K-PbD$a0e3EgOA=#>!>xeYRftlOAW z&H~zV|NRi(K~m8+hSnUDGLl`3`wYH1h9jl9i>gBW96IySa6q8V7JsxTJTg$7POu>q za`4)^0`xJSUbD>aXx=OLLu)W3j{QZz;=wuYt#u_7fH8$A=Wovw_bz@(m73cQF?4t| zEHtPJ)#)c3kBvwsu%n&`*UmS|+cSCkM6T;q2J#jV6bs&lo+kZnrp@w5$Y|?$ScXL+83$G^^ zLxxh?oidG#8n4j?8E4f?h_~^ZIEb&9Vm4Rb@`{`#?o^{yZYLDKH8utyr#5o!U#OAi-zE>nhtCd z%_THeC;TjaYzJ{)x#|O|IwF?DJN!8>ZS&)LJb$Z8g`#+}4GlJV11yKzTY%nUnjeCt ze<{}4cP~xO%VG0b#M`92;X@@E(C1a=0ZmZ|89W1yGS(?RZ{}0V((Dl(R;tR1F}H>O zQPM1^+8hC4fk##WhW;#-)u4fDnn?SrP>mBVF+;Zphi&w%-Pvw@vN{)09?aBDfhvHQ6!K7EIh-^0spbF(-G>eUwCJw7dgr^mc;4= zvN0*<_U$IXN`*K)-v|pTOdjjE5|BLi*zewXp%Qlg;W~B)q?zYn*{@2k_UDWCk0|e5 zsNcd!_9^~qtPYHm6y?qC?>$zJms6uEBK|gaU`w53ectE;wENVVN{q;22-_LekCLcp zpPhk7roGfLt=85UiuWKx-zRaV5ssSt8U@d#pk#uFB|uO=48!YcS-k0vft9tYNUwPz zqO0kTe8KLTTk<=Vagm@hS|!Jvv^bB=kh9nnFELH`@cM;huJLn?jqRa0kEwip4+Gm;oy)%hn2c0C(%l|%gtUZYw=MSHWXE?JCk54 zfM$5#hrq)=8nybjZyS}-mr;JkNK+YigRxkhV-Tab zGlv{vCMSgv@SKZ$djXW0j@%giWH-0cxyiaSjsB?G&@%P+b45SeLjzoCoeX-SxJC)t z)Ftz2Y+vRL$(}jP)*x2GLoZK$oy*!5xP!XXf6Nu6@ZHJTgRucCel8a4){~yej<|>d z^cud$WQRf0V%f`z`pAbMnUB73Mqzl&IB?UMnt5!xQ!K}8fZCRj;K;|jNz;t?$)A%H z-Wan2wOmcH%l53qaa4mrEx{fht!)p*jVB1h=fX+mG$h0J$e^@>V{W>&_g!>-Zp6Ezs=^G-8NbDj}ExNoBvET z@(Q!~+W4?_s1G}@19IqNVG1Ix#vy}+TAE(@w*#@h1G^9nYo0FHDvzt(UvROpilY;c zCcHH9v>6;jkJe%UW@^fWsl1_E7J+*n)N<&_4O^xMeRrnI>tg+M#P(T}&x>q}`~0#QAQABGo+d zjd1>q$W`l?%hSK{OAI88wM1^qYofHocr*?4OF&igfpr6{#3P6b1sa`QT2sRDK6IwC zj(&M2bKc%D=SzBk^7a7yMe3XNIxpWP8yS~a8!W>)+p=%I&0>`MTVmxrLR6&;$Dd0l zR;tw5^{!Gt6(ho3PEL_H^mDuwZ^v2Tg58Ug2iM=2b<}|cv|EpM_rlI9S^o@N@qCmO zG{_>YJa{qb)s5R4c=AtouRv&CT68N;7(q;gaIt=PL~A^I6UO0r`z}$@Eurzmv&^Xo zfeqWYL>@q}u#)@Mz2`$^>vMkiv&=g+6ThnzzmfBQ*GK(^Ts9NeE+(u11(3qtv>0%P zokHfYeR>{XL`DCj++WR@vnEPrB0>o3Fp{W5-7fkeFbGr)%Yu*NPW(+*nZEkPJ;VU4 zS!_;87D&Y7Zs-Z54%3!1gxGChLlm?_voU)~8Aql7_xtSSt0^27ufhzk zJ~#HR2`z}Khr-DH=-pFkz_cKt))q|5OYx-B!|&7VhceAYu*Ky2qdR65)hoN3*dk<|0B_34J*CTW_gzKSj zq1}gQ=a>`!BBsmwZ9hMEBQXU7VSSp`eNv2c%(U__z46*Zc*T=tgrUx59{jrXiI8+F z+MiHXXS~*js3hy8GHR_T7TejH8R!97HaNi?FOK4R7SeN zWW?ni?6Hl@*Hgn-M&_do`5-N{8ntK0AV7|`Vrvs_=va5}NlWM|4|&n6qGfSo$Ue06 zj6-H6Y*rhy<7l(y@gHr&y>JlCPP$%WL6q_w2DRotbWvTBq!lcbvan`D)n?8OBb>7ZhX#eEDD7EE2vS*SS+WV2f+pD>dq)C`*l*!NvBYSaSF z=oMxZN)!xgK5(bMhOoPdeS`u~22EC3F?b1!OgoU$}Q@NIE9JYs|0`O*d-jG~+m3ba&vr8t*&0s3@wh)n3B5DUAa&~>lK-~k1}lBP>x&-fLJ zuie6-#KCU4LSPzc{@QM$`R1ky=;Lr7Dd5-Q#t;B%)M2=z%l#<1=c3Oxk8s?K>fxs?szH0h0U=#(e0c; zyEi9RO<096nrm)`C1?L%I}ZUa`UL2Meu13!+y18O$9~tWvb7FBE{?ZF%G`A~tOG1` z*Puw248Hrzs60S=o$vV2MvHIYCBj9?{P!T$`9xp<@^_$S=KHoZJ6>F>=|xcegm9@s z;MoQ6#ssG05dtm<%%Cy$~jbUyc^`-+ST8#{zf%{WW)mBI(Xr$zYT-sF3{aD-QI?S;L; zPjCG40zrMvUgRZ_eP+lQCY@;wSgZ>4Yre+eF($K|&M2hs=B-m#uDJ>8!8-?|99z8RIYb?e%EE2?tg!l8dE{ou@)by@`I>L5vKtJ50Xq_p;@hO^GpW+R*;~PH)$N_sH zn#7MHIAb2Z5(a>^{x#@RX8z$uzLcxhd!R@+X0u66%TfJVx-P|5R8LH{4-YzW6+6Tq zTPORQeLgk&Ku0q>!fLYRs+fP7WxgOkU795z1f;6}l3S^1+>rxh7Qk)a{E`+#yVXhI zq8P|~U~B5ceDxx-y)s`3*f7X1(JsMSWe)$T`WqO@x>3r75X&9UR!hFyGMg}h^6&It z3Sv6(Dgk{`M31=`b=;UO)}&_)n3ezVNceKgVWA>P^me*Y0%jpf=(6IBLkVAK=7miW z_B6Bgj$}LhusN2-)aZ{sz3Xq{sHv~!TS)p)V-Z>d{gxC={`r$yRQI%=X>Yd(W?Bqs zrev$fNfL~bi!%J9{WP@w)eLmODxen5U_*u3pA4hpA__n~Lg_p7ip%I}G zL6&t*6*ltmh3+9=m_;rEMvw47^i41Scqv|OP>D=M6+G#_NzDmt8weVTI@hs;5UZ^3}9hWr(kGk}O$#AO3 zvPJCP!uA7{4+`uUBWtzzTOAULyc>9EdF~OA!^+M1?v3;*M0#TdSqq+X_bYVi?^pu< zBQg>BHw9oDAeu5F?GH`kiiHEY6SIA|x(=`c<`5g_ne+_W)Eux2`=Z8rAIn zg%pIbBBZZK8j@jcsQ3kqh&7{kA$&iW0>&Sf7J>?3UpI6UT7GvT%IlymrABN#>qL^< z0f`&}t_;Jkk-Rb5r@HBQvw??pK1unn6LMt*nK>01W>!NMWxl7F7RJj&sz*$L-7*rm z`hgu-Imb;K%i7l=W7&&TxGbXe{YiU(KZ$OlD=dH%%j3Q0#&$meXD%=Px2pN$#pb={ zV?2Fninut1jZ{IriZ2L`gF$8GPNN1VL*}APuTz3v9)s_!r^8#GrxDpb+MaB_mm^gpa zKJWC!YleIS92&?}sGuGs`CCTBajR5#(EBM}^dlR;IUPdw(UAa2rr;g0COKq1jb=TG zq`#djS?{VcjOnPome?+aQu!~XY7>$KB(JeTpT4y62hxuR{dgq{Px-3DMuIjUqwEs! zqpmRrSeY1*GblEU`vqb}6w!4RZLsh=o!IRkERduS%G+W;dgfIQ*MZIS?h&{j{y#CcIURGeSO!4w}P5L{YYeGx+f}3@FbKOf4O8zPTUD} zH)R|(t1q?O1?*`3p`ai~=tDEXp;LMbnfS(pPpv>5tTNHDBj(}#+QI;Tm3|7kOH;*u zzR-0Vv=vI}-0q6Ptbt>qq<_c^91JhuUM=~opleAl{q-8{p*2HmWlNn(b2V*iyT}V~ zrQCauSSK78wk=vGBe_d)gYl694ySO(Mf`1yCK&7|FD0HFsW_y8+! z89SDZF>bQRQ#Bqp9)bhy#6cH=PXoLYG_)5j-HE}lxJV>gaH+&rO5XfBpK$5_My8T{ z?ijJi_8ARqVU4G&Q3dRxM}b*)|DBF6KqmGmaUzb+xk+j*kf8LN%%;X=HlwcoUl<#U zXEo1PGmK%p%^M2Yzc^4WVN<~`c-wox%eRFiDV1ZRSorM${w?=Vwe{-K3G=VFs^f3X zu7pou`gO3Nlf0a37!l{bzE44klZ3OKspH4IhHg?Cyyz&d`=C;uwz&k+T(vbhR(pXo zeOSbIm1kF{%>^qqGGYLFT8_F8vH3^Sni~q8WHlcxM8tK-$=So&v;h50{Gw=*Weopv zuu<9gGds6QE6Xj?l)l=(`SRj+ZE@ULuSnKd*c_Ro&Vu?S4^`J$gjy0O^@S$LLJM6} z%s`^|+{Pa{C8esGjy=N^LTsqvZ=$R)EaK3>GEiK_sQz`(_`ob{Tkn2$KKH!na_vFy z3dwG7M;O^HdpkWhL&KR^FM&Zi}~A#OXelEW!9SK9ib(yy@=^-<`Vs}S^~(?*L| ztkow#EbU*$?MtJy&Bw{&wH7~Ea@;K}!Y&u9(jpr(i+DB2+tBHXP;D=#u^y6>pr>jc z{(X?GaY8kFQk-Ntd(pF+*=qiIPB?Y~kSA$2nD7ml|9cb;OV}3u5{=ZFKC4<_P9mP~zxJmdLhjm=pD!gA1V)4E{)UPCm5sj< z*>>n?LfyOYiDm=AY~i}u+ER5|8s-dP!UH8x$r3YEH^2hP0gnF8jVr3ZS4ID1De?@@c9IwU(sk`&AruAh=fbq{OSVs+zPTn=64hz#y2!j4 zYN4K0Q+j9$X*IU!=0U#83H+Xon0PMHt-m~~Ps(9ShIaJMb8mx2j=*?zk#KiSzL5w- zJVcGuxXZ>|#!!n_I>nJx_=WXAt30e-X)aC=$-G>`YJoMX8q+|=unhF~e4E=+g#CMf zbz7D+MK5-Q14eauv(NXOtjm|Eo;n|GVeo!t2~UGrpThYcJ$0w9-_1QXKuX}zM(@(U zTgVLo{GOI#(xat8>9%iqHPC7l@P6jy-Ly}yI&oOqe75-Td1gb(&g|C^;amjfLo2Yz zh1=GUaZ+JAbJ19YNuQ7YP15F)Gug3G6AQ3t1BqeXInJ9Q+ZI54A;*!T*LWB;Upgll%m(|DYY*W|H#p$9h>>;ISu1A;#@$@qmp18XmVwVZKPD~Imbgn1BAxBI zAfpMD{;~LkNH{MjAQ%Ip7%Lu?z#676_wT9fz zc<4f2U)oeTs_CPuNHyU>PJcJpbz5Jcr@7M(VAh!=zfaUGbOrs~+76nyMaox95XhkI;9)9A&e#cDDmo{=Cn&kB8wkqu=E?i zhzhLy5c=QOMMB^E)6PgXWbNfp8`36+Gp-g;8*lgLx9zEQC@Tljr{%42aiKBcV+Rcg zY677L2qA+{d4P(Y5dKHWDG#KiAaT8j&HNg2l%oAsMU{`(-zqh>ZYA9D?3bunq4unZ=sJ_m zSI!Iz#JZe#H1?jRq@Kzf=n8Je+_jznxcy>6m8|XlRdxF4#W6D9jqkY=_!2#@y%`0K z6(@Y0fSegd*Dpvj0jDv8;k1s_TW*=y6kHVLQv@BEgl^bI@1lVzCtkAC31|N#!LlzF z;ja*|XaTJkIN~)*B90&XC}BfX*(va})>#ci#E#jrr5d6kEF!`b=jq!bi-PYIWc`r(S z&_-&`vc0m_%l-R|Ej-C0(9*k+r zqKWiLkWrYi9G8)2gu~;LIpcM&;R72}aN?%E1ER@FQ&JC9BQ6?mtlG9z?IKvqafpzN zdqHLS+xKDZ!(4zNCaD+~t5I+0ravbOo6c-6D$^X{yg&S>U>Q9LLA1fC^SJt7b@X6% z0KM?mKV>>~7H2z#W-H^IV%rK=q!p@@#ynL@34|&b%8O^ir#`-4nivWGC3TCS=t!>Whz$rxVYI#WQ0$hQB0w6zcF~oeqrpM|BYk43@8qZVW7_tNqn15Te z1t!(hF=9^mx7$^K!g~lo7vQ1Qr|=_RGP2QOE_g@T7xLV}EmqHb5QG62|wd-=Z3z zbJvc1gmo&dc8cDmhQBc__VUdlOH!29Wtx0{v|71-F@}teozZ+NOID6A#mjWu;I_j` zMs2in7hTv%Ty|E6vHhG2ejJsy*HCUUuNmOKf&mR?Zmxde!~cb`M`(~~Xy}Ltea%R^ zfIdC3=Bjd@>m7~=MLd-^-2Q+&KH|aEZeb|E-KHKqi$NTH51wd=DV(Am3Tnz0l)BmWg%T<%oz$=eiBkF# zbXK&1%uLp~;t2qUjX;=wJab*U|H((b#lF99*#hFf{g*1!r50M#u0Twyy`UVZ&v%w; zH<))uj>UvXc~S0^g6mRwBMG&gHUh$7mu!Eqh8lXr*@^HEb`z2Kz})G0SjL~uHOhj} zSrer1OkEggfnFFA)o;Z9{7%<(POe|D>gCyp>V9D}kpn^BTfRCXFB$8(%@M7Tpd<~* zP~c3Fv~K1lE`)U}A5V9p)Myb!u6S%Xa6OA!x8>E${l-gA+Wa(U!4E+dwm~^VoyWMI zhUGi&e@)F)BkdVuM*OIpZ2w2T9QRuucQ%B(Wt)o8P%XNz&NwmoI{s5sBFaBq$Ya6H zVtJD~neCluJ581isS2S1Dpp+(1cE+M>Huy``z{Qp-P2(*eiJG>L|EFI1n&m+%-5ud z>uX9gQWSK1WXxhnVcDvD>}s5)&L=+#yXD8#-vD^(4!&4qNBub0eTcCxN^34UscZ?Q zqX8qIE1*W!*S4??be=5MX5J}|cG(0Rf0cdH?((Yetu00z^m}H@ACE)R9%NzX5OZM2 zxGJ*z-v3m6;y%*rDjVAcFNuB1;L?IvHuul5(S}j#9RWRy4CB;8eAaHDi#{0Ri%X|J z{s=%SQ^1JES;K=JDAIEl+|y=N7%f;q`cf(er0&Vc*o+^QFOu6h-Mh#mi!r4E8X7Jv zl$f&#{GQVhzi~>B_05*lGYw&uw*NJ^!8^F)e_HuV4x0%97!C>-aA0p48`VgI=ltBJ zyKOODwj%~e2V1-_F7Mps9{Nab7F+;$4K>meCBxh=YLD*<>lNkWpp&3Bih1)Q=H@+I zG~uO%W?dG#Xn}Y2xs(1h5kMuBO(e$S0B9H>r1lB*0O|^-jdn#BAxWuoS2Wg3=4IGw@)Z4D1+lMU8wyJgEzFUUrGL{y4U*4ObyQ zkvCPq%I~<81A9$%Xa`*(H8N}>Wcyt2y4blA@aI5@msFoEs>+XI!6d7NmGp=3c#kLp zy!{CsEHH!64IOTedt;_D;?z7Vsz-A;3!gdWW4*!1K~NkJL1dWMY zLIu2PEk+$=NvQ$bAX9kI)u;`gAZMtxFGpFBhoY-1)nse1uas-qo+@MC;qsX?2`qhAXW;jc{GG*8A7!& zOYgfu7XH#Vc#eb&(M~hE+2vqvVZW*iP;QsF7p+j|PA|Gok0J-)TH%ZY1^a!`!M%d2i)FO% z0hozIkhDZsm_ecvb#UJZf{Vm?_hRO{hV9l&5^`N&Y%?{~Fm?@OkVO>ZxN1QHF4Hn6 z+c}ZQc%NmubcIN2Cs~Bb5K(e%)dD}|ro73a*&xqRA?_-WfNfNJ?<_NAJbD_|N4&Xj z7y}b6Ep~VXH4rVQH>UO`VPA-P)WcIr-%r!feVB*wZ!7(51kfY$O?xpF%lr)Kwd{*?3F*ON_O3;qVHrjUJKS01;@YLx`^yFN}%ieGBj%c?+t`sHK#i?$eDy&FDlUp_khd(MWjE&juE1x*vjq z0|`17jlk^G4*l|D9#^CfnQP25*gZ8J!~;T?7UkGEmWzC-Yq&`(Z0}B>BHi}>nzAsw z{ZvNt9-;jv{{upsqtEnTN{x0ijWA#g=(r_na#&=NPd z*_0j8Smpl4fA0%+Fa4O`_DLGIJ?MdinZPTh zo<)DfYd4p#RLPhD`gJFsETJB>K&P82W);0H5RA2B#5NKaj=H>)oKJIP?dmyCLpW1GAO?}K5$ryJFMY5^S6Qvm4AE)?g2A=?OsLLVlLHd@jm{>3{RyEXleK;T6<_xm z69XpC_oXq7epyd=4)VI|_ zJl_cX>r~0-(*O$l0RIC(4|0u@D}q((YE@yi-cVRR)MH#|0ngH*mTD=8f^u#;A9xTeY_ z|8URZ@$iB*_c2hvgq=t|Yi5Xn`u7e?yrX|>?3BTwL+fw4ja>6&=5TE0V7~Hp){510 z!0|@7Rbr|62C%>K*&#;s*Kt*`I@bZ@*WC>tTy%#|263*WWFh?J08S%0h{ZIZ1-X~u zu3?&Ps#n^z;}L#Lv=N!JJTJz*$aHdt`U@P4iFn*Cp?N3v?nz*ywp&VrWrp$$Rfdwj z@oe0Q?C5-@Rf2V%5@2mDzW1tXPbZglNGz6Ix~4h3DU$~B-0Nmf9?z&#qZ=lA=BfV1 zs|%DY{zhKH*#vuxWZ9SkzI_o!C?1GE4JU&-^L>_DG z**}$n=o~V>=gksFOpw3$rVg&#E(!oT&t3i&r27l+()C~&3=ML%IJxJkF6@asJo60j zozfi68qisU1x=;xX(hQP(A_nZpXf_KbB~B}J1!Ex3P|cSYWX_l{0Y-12D7v_(J06x zR6A}elaUCO{pot=6^x7D@TlewC=!G1|3P>mi$47TERjl7o`yw}NLHVB|t@T#8# zWIZ&(hYgD$_<9v5mPG^3vEgkFvvbosJ9&e(#L9{#%A&1mIlMfsb6&F-6`7k^w6Q;7 z)QPPY`q-AzzCHH_pUg9G+5sMYZ+AhV&g}-&zqpM7G$b#NIFsrH+h%+@APzE=ftXZtSL%ZpShzEhTn^%g{aEejZ zB5}D&9Uq(|uByBX#V%B`k7+{%l%jDLUeH2@ePvBy$8M5)W|mZqKmDgSy)`2a&nsvr zZl@=_n4iXNdtA(#OH(h+<2LT4e(#*2>FnK!xKPe8?+-mI`PEkHIcdD`9m^!p>G~I3 z2wLna@oA5#W4tW^N#owF(NLSKiyHmh9w|ljl+)pC(*Z_bQrO2Z&+#e~QU*zAXkD>$>VPk8=wd5~bR| zy;6@&6E1RP4~+e3rkf3-h3*|K!kZTQ=Gr6;X0EjMOqA{YM7>^jY^zL#>lb4#p~Al-0A$$XbPPxM5i%6&FXOi|N7G!`g9TQNGTjtwZ?UMD*{c0B^y+L(mcq z$9iUegmJ)VO^<3<>pa|XZ-RXdf=Egxai|mEt!)Enz&xS7jIL;5$V)u8W#L^~EncpS zQPV6ext)>F@kWtgLn&HHU=6LTs$2D26u{SpPLmo69Ia{-ZN$<*?@lzTFfyFTAL<5)Dle3}E( zsh$G-_=n(s;TgIbCOs7+l9y{-JZ&<3tbTXE^Wl{Cc&yRdjHwxGOiDV@PNu?c1^(jC zYWTxa!Dmp!Rf{z-jMnl_YJFQ9(3$LiZP4gPq7c^5W3iI*&00IiJL@& zl|~VS)5^%g7yi*7rC7x%3ssA)xv$T2p!`Y6$G#>QytcVKd4H&(=z;#^FJju9Xw9z) z-<7Et#?cYo%w8gBvuX8vzzar+?Er*FP}AdU4AU}l@Sv;v;cZ&n_sAfeYI0e39i5ZZ zPWYwn%SbJiwq7hwNVK&zQv5hzVXP|QH)vl1#%%DjeiN0sDh{n;t&feXQnf;$1Ku#k zSk-sTxzn3(TguP?#Ocmc#MUm>QN+D_N=c}GtnYb=#IsxF0eHwp3&3HwuYVQsK)#G* z60B+^=x%L4-1L{k=e;{Zl&DOaO-CLxE~-@fr08DIf)ju65`O*4gdtadWqteibsV*Ps0zufZh-~6CjM8 zS3GI?jt7K&Ww|?xIOPEUKLEfABE2UIZzsN(L6bzK#aum0lF1nJN<02mv}y{Darr>+ z@>cMV4_lN zMhlB4SSV{c^kW`{2tEQ1l+VnV`z7^_IP$Ye)ADx7WP5~tkxkMObbX=yB)wFHFNpDK zHqF^nKHZU{T}*V%ckU2iN5JMX~sJL6MPJm>ckV(kdwlH!!nk$w#C zJ@m^65xDl7C!b~thg2AS*4m{ov_<~N8KT+9SP^k<%$@yVXk!jr;6)5G=Nt%nEgnaq zpL&4ohXfHGM`m$pt!}PA7#%5lSn#MT2YEY8GM7|;6#u;0E38QY2h}EG_cYcOFojav zzS7k&65APF_>XCh*T;l$$Xo4U(;M#VC1*9B&=)*5H z#YtWvfTu2nY;L551>Z-OqKCvid0tSK2Tf=N@O;0>tyTA7=ML0Ko~AjId(Wl_h+_R% zN}v97vD9o-gSz2s92#MX!r>W<5GTnfDKO>X{Q|3Zq{OWV0B0`vTmZH@?=$yx%_JZ9 z;+^`svEsmqXY2aAhEmVDZHvcq&A@R}#{7Ee=$KKSR?O)3K*I=!0>NRo33>ijO`4ve zA2o-z%57|)(@;s?FxNBHxe|~N0YsK5oz`+^Y0&tiP9~QOnnByg{<*U&41(MOudv~Y zbZoMxk;AV|u!#Mr;^CY%V@*aZquIbo4`UPpH(oCFvPaM#2m_Q{2gn6e~Fq;<`rgt1PK=tG|I4Y zLlGcOBI`jisn*EFd-G@ofx9_E#;d`(;Q0UnqFeu(hqz)@cjYeirYO~xU*A4RQ}^IN!RO#D zSln9aOk`NPkPh{*5I`dry$MtM_$9+9gSLQf&Oiu|BM}R+=yP2c&(S+%fLPb34x={A zyoMXGrQNY#Jxbdl&K^;aAAzAvUE0K2YbzG zs@PDj7euk)uozb%DP*(WFQ}Btf6P47?kks#o5PO*+L7vIiKV7kvjtcGEFWVs?z{DQwiHRgS6P@c zcMZlgWH5%i_U+evwS#@hdl3X`Kr}FQkmV%y^RdY`O z1ygVN{l_WAt&0`I!3dGQ6|p61%hU>oIdMvfv~CFu@!zl~vjI}dV&40R_VLmq;!nwk z^d0ai4!cT?1qU>T7y^?%_btr6mkeblr-OAmGmAAXJ<#>LrP^WBznO%Jg~03Gc8NZE zwS;K@dgBm$M?m4x#t;hEkE^q7waFVZGWc^1C>h3j)>PGUj*%L#IyIP<*J9XS2m_^xH$*)O;Oh zoKEw}Ns=~NoxOj!H5~#5+C!$*${-Z~OXW{Uv80kAJSgDSoyF>1z}``b-^Ok^P3`Slm#`f}kab9hy`0%5&>U?KerP0}n?28dZ0|E-kXqcgvELBJo5O1P^c*NK}!r0PsyA#(we#rAeF=fBs=I^esMsVQN~px$V2i zfdzL-`YKQfWLDnh45_6*>Xl_xbFoPC{lnYsyj1Ci{&k1+tMV1~L;g##9fKaN5NU}; zK+T{Ld)&~-AEp25!9qG0H`BWCZse-i1;K-zAfje)P+3LMa_T#ee)Om0tEle3e1grG zvE2KwiW0Roxh_j2!$XOmbGkEy%MAwSGLxH=yTpx`iQ_FTE|nkymrNlJ@nM9Jj2}go zkB(La5a2WX8UC!XntI^ggN(o0F3}VX7r%ksXJG3_+i(FTjxRl|a8 zM6nGL>bAWCzM+W0R9`{b56nw`ND4~a_VZ0-={(1q36296;+XDJr;@=`xcUHv85aAL z=SMmPLaBQ}-WIs9r4<%rnapnXa+Js!Eub{B2LshW5Q=f{EK-|2hDcd-j26%f}58u#-Q|sk4%-^TAFs^dR9kH)?nY zf&pGBZ-yuGKWQKU&~KmzTgw<(v2yDf=>I7ILu^|{qpGZ4k0UvX;V)=)2rV3$)L%(c zZr@T;kpwRlLT7r9ZSy#ECH^& zjhKq*m_4ZP{BhZHY6K@`7R+G7`zHcU@J`%N`S}9UO5)dOXy(DN)FOa97-Gc%A!mO+ zKC4E)Zq+a^8KJ`EEw*E@2^4I)@>X@6xwHS&zFi4pMY1%<{&f;i__-UIdpyF=EA zt&N3z;CEZ0u2DM`XuybEX38OT757aFpkB`=zI&{V9fDB&Q=49w(+VJwllB^nJW9gT zE+KDz@DX*cLpfD|^CmR<>GWHWl<4_c;kLXjSIO&pra|+)_i0R*4 z5J-{)m!>Ig&ouO1{w8}P8}MYn58Ykb-C7%r=`3Aev+4al5m;PH@to(!hRiz0HpDw4 zD$O*vL<#mT`eWf^`8nmJV^pKHo$gBn8?p52lm&l=t+`^s+eCRqbCm~z#f68w)bZW%mF=g9zk*zWHlq$|*;AQj=a6gzjDOT(>sNYF-v7*KIsIzH_X zvht)huxN&ZF@V2jtfbGI^(P4mGz#g94MggQsWe5~4!1*Pa&Ge5I1f~3Z__g;Krf|L z1~EQbs9nMW^hMv6s>9hD)u+)&8zv1Ds_F!T>BG@J2{_dM zSlS4h;JuhQnG-Hl&htT2IbrmOhwXRQRuA6IQ7?B@pz4mzRVTC(J@4?79Lz{L`vP1- ze{9+Gz9Ez95sKd0o&@ojPe=djjjQv6d$mV>Kg+#H8TkJ~t;^S9f_S~32a;n}U37M! z)v7bW#u23h4F$YTSu(>H8gJRTs#P1o+S*QSz4QSnN?~p!Q)-N<%)cJ%C;|3^wgY_; zyL`7@3lF7ZlaJ-Vy+=r~e$Afx)5sEa{^(tW262TLrJ0n3h(vWcM-$ni$}$attgfWj zAqRT~w=gK)^p9vo&aGX&HR0-J*$*6YE4_aV=Wgsy#;A;d7;_@AB5r!NH&*@}D}3dG zq1Ql5Kc22PC3<)EA>KCH^A1$43-3@zq`UC15s|EJBb7nqIx3?}DU4ajtA2L#3%mqn ziyf@yF!&%7?LBb*=nM`cU5GbtJet;&R}~YD&Z$o*mfn`S5nSCDS%290LSEF?IxHh3 zyH|5n&_4|8N%uPY4oG639acK zM~wM2-mUR!vY(J~aCjGMA?>MU>EEC9vkna8rSPIvx?4H8n|o!pB|~FbmRZJCG&DJM zs<@_ljX>_?I;tYb?oscciUCFF(|W282S@_I`Xzt;ycbFjf>fk53^@+@fhg2H>4o=!(=fL5KRHlbv;Eq1H_tjTxe3xa5k9O@CfzGqHKw60px_>bk@xd zg-xD|fNSO0nf=crqm<6ow;ZjGy20Hz@WGZ{5eHi?H6Q5ptF-??>JHCVN}4_IgBhYE z(%}6dKfer?{X3u@uzOtY-a%;8Nth!X?p1*wD?@MN(A75c8>coC;}o3!zORmPK{!LNlx%1_DYM{8{|`KO zw1-jU#H~IFGl~}T=m;X50Dyp&37e`yW0sbn2&Rwx0|EMvc_~MvPKpRXNL#hRJu!alpMGvV-% z(L-G1P5qYKZ_#R4A;{P1LY1g=Y&_9%zVAebHER_?)R)h@4gp{!;}QUi zooq&$4}@Ii#jjN5&~XPeiI3WvjST6$_SRmW(s~0mXQ57LJ!@h~w@<@Ug;FS$rLm!? zV{K)zph|qg+I+W@OyiYRKik}UA!Ef@Zq_GM><0Uo}e#j^>bV@Mb=>#lrq3Y&XJ$h*0 zNDcr&V*_``-KHZ6X_g|%z5Hmvowy1tN&_){Xj`o#akA#m!G|4{toU)I?4!63%otzP zrYV$hXa~rw_!P;4$!P!-U+lz;bO)GLsd3(TgWme^1#PvSZa*WMsxArEK|}n)~?2 z!#q!j}LE|ihW7?y+83bS?FTJwQOeB5)@ghnbr zbuzFr`osSImBR)^w7Z!m*3{F&kYtnseEUmNfmxq!6|}A($1{95iidYnE~e$pSX-Jeof0m132p!(Sf61os~R~{*Ya{0h(O8GIwJV zP%%BPoR`hD;!74`{R88}h!5%i{?6J(pU^jGeXm``8N2fFW3e2>vr<%j+vZ>Gj{+q4 zVR+dzgu=tXBah)U14J@}GPE}=tZJel$M9{IMa7kCF^YUcK%W{IgTT-KWPbG8V0e$0 z!ldlln~B7!#jf-K9D_4J{cmezQ5V3%_KIb_%?h*yEB5Q$I@_0UTWghqk=gh8`V=WC zFKWsvOZqaGF@n{wpk73>pMGI5EXkilCPN5Z5Wx&a>Y;ptMo3_EW5}{C=bx^%eY{AB z4A~b-fM>CaJ{TxenW=pc5D zqd|TLX;culTCVB#+a=n-G<%BJHLCmTrG+kVh15+`AF4p|@59D3FJW)DSSr-&PVD3d z8TQAo6}8%=ljnp{F>^03ZS{283FhwYjS3Rx@ZT{QCbjqsluOrwBUsCZHGPkKrHJ0( z))DC>S=Qs}0D}BVuA>#3DIKJv*FR|6w0e{%B*%mSZ6r_RSp7UASOLQJYwtQiiR3#F zFu}e+E5$L@P%%hu?Pc&`>+5+t`XciF&JvfbDq(}4EvOy}I+&@wO)RNzDA5mHEiU;6yraY|XBpk)V|F?1C%XbC!7GYyJJw0i!VGNBr zZaYRyOoH#+es=`x>a5;O9N168pc*1n^x?w56{o-t(R2t&1-Mz&#)d4N2s{pTN^S98 z^&YdIl`*uChp7|GI@XkUPPZUpyb4c zbv>HiY^EwfA@07GZ4yA7a~`bGV{zZ_h&wthb0$)e_>*Ge9!0cQL%i2#nQ&As8QVFj z!WlbG-Lvx^fd&MVQ!REBP%Vz44uuN~mDSWS%4as=kF$-z^jG>UT*1qLwqh)Mt`URe zOV4TVTeu7Im6KcS>}kG>D3pjrmD zmfAI@8?Yu4ea$a_8J4PcQ2x67N1g~;ygn=0qrHayZC73iW8zSYPC0BZX z7(;ygo>O}YgoFW^VNa%`sS)Bs10B2GrZ$)^2g<&eYtji81Pl zm_|j|VWy}sr8Io`f=X@=Mql>(bl(K8d78f+(Z#T0@h}>_&}+1mcKo2j=WmqEn4>z4 zCU~$R%=HAoPIY6y*|GAR;e-%uzu*|HIAsm~7rLEHG3t->TZ*cLu9tfwA9j?$Dm2|D zRunog5?oQ|UUClrjvC2((d}0SD6o6ys%$MZ{|_Z0&?&Kdc)bP+KcL5s`hA#d`#qU; zQvDXFdyR;wGSLK*lPftu{>v;Pf?Y0^DyUf#7^ccY(NLMu4zCSlaH89Tle+W2>6dQ} zf(!YELBWJt{8!30TL2#huY>c)G4fgUxR?jI#mKA4^5&P|M5GCNoPix?YldnAb@rHmZ5G~q8dfr zva`vqlE_dr-DIRx+DD4a=CFbA-(=351(FU82w$O-%}Sb~#}RkdGgiE2(uW)8Gbnci zrP#=KT+5Un-$L}3WQc$@XX#FBC@Am3rXc10a|YrRMIfGwM4B-}%h@fAx{1($23}rjET(H(i?s2NPAl8BbOf zRJ=ch*msh)3lX>5OFMljKXRHsT#VQ{fz)lws-EBwdlW;VG|zJuIJ5X%(XA1fjrnJ-XJCy(~Jet@hSIKgAYFQ1)1po~_Z^NH6h@CcZKUFAt01(W}t<(+P+zYHt|1(SdI=f8xNnmo?-K!a^#-)$6gWO zl*!VR!=Keu6Rn!9xFAd`7Pk+c>uK6@XX4LI5Z!OK47Z0gQwMfIP27}F`HK`%kxeDu zh{imkjJA~nxUOLluiz1W7at%JZ3-$9-1X#DiK^ZkBcs1Xkt$<5AN%yH2cZ7|hfs3t zD)A6KF!`-*u2lRXpKYgj*hAYC0Ug&Q&`Uknpt-HyDejR3zM~a>53{5HbT!jb8|d zyK_Pt8j(89UlS_fzg$XBU!zO@N~$|X;w13(smN&mE${&gI4u7{ys1IjRcjQj^gxh@ zF4X~2N_5~CtIQWy3R)J4jM&>ZhGn#cDnG9Im}Vm3UssyW@=T5q94_^wLdK1)v8Eu< z3N8vx+XGPd)BCde#U!E|7Lz=zx_vB{A4wKiD^q5^l}iDnuaqan(Xrg#LJ{fahH{gq zEAI-tVm$M{eX&Zd7c(nf)cyX3Q|4z@5A;MAjoof1?7KhrDIeuT_M0wR5~r119~{WU zys??00e3`8!VaiV9_=!aVD4-L^|Fu)aD5&r zmVpA2{Ns|lzLe_L3WOr=8lZ3xm&;UP18@^DVce*~T|5u>mm{RVh?@~nml)QdQ$zqhT z5n4;t@<<}FNSuE+Qy@NwXz2`hL8BCswDmZCL{&ppu3k`M92|Dk0l6VWkx| zo435+yt020C{_X0R}0Va)+8=rNv(?4nb25+XBjDskSjdk%fIjxLN`rtAD{;D5%&jd zIYIGW|C3$ai+yk<)nq0V*K(rOpS2?!BtP@V8egq6HUU+g*Sb~ zukfxldDg|%_h$zlwBpv`zXGcFHvA{YQnO$%A*_V~8z8NK~y}Dm}20kxYD(9HH zWD>BSW@F)c=PA?lSrwntTQocGE1li>b*U+5AAvfc*qsE1DTS4nfP#CXmgO{xW6k%F zo#Zj-lB5qjUF-3rJyTxCH!;9NG^$)`NM5J1+eBYEnS)aIlm8jRbiLJhPCG`MnK0k= zVe*f{+M0(+coUs`71%ijKwH9W0c<|M@y_L~9c#4+;C1+hr{c(9`oNX+pi{V-~TQ!>3< zm0-jF(}=n<_?u%tx6J~!~HzBJHu`V<_W z42m}I&x|=6#N>s70b=%~=ZxDfQ+!%(PFuOWiPnp_MkJ&barlUbXj}oz_&SUZz@$Ej zE9J6vZ1skTe;>SkwieBO<|nSV2l?{Y0mi6*vf+hgYM@07|7sCJfd>by=;wjr;=`ad zc(@-^%AW|Y$h@4YCFPFM;eQkCi}}W}w(#0KS)-NqgPWzfCaL8b6$HzGrv0fPP4>bu z5tMLl6;~zAPD1WU9PQ1=esjq^Ovj!3v`j8B%x4wTebRrZSy~WC?H|(9{}|BLD&BzB zF{uv)7vFl}RpKeRJ^5}~U${_w%4*5mY&V=}wJXoJ0R?$#QEWR0 zYEP;|fpN2PB9yiN&Bdmm+NmsyLpSlffQ*BUTYmXooebXmM4-QhiD?JBPDmB*FlVWxcv&yrY8=XliE%rOcqoy?X#-%B>&h{+&OTQBf9$gIMp zlHsLsWjyVMcc=q6JdT>;-0t;7O0hEF*QIfqC<*u!5wG~CB>A&~5mV`PMMy{BVToa@ z$DZ??K%kl1Bs0Gze+vT`gL@pE9jPgtth#ZB^`YOKuM4t9Vc9Sjkk>>^@9=rF?Vmtb z+_JN_kxez$ny0*Ki8XWe>xR`r4 zR6sR@n{Rtf$bg0KoCO$|#6{17t_&W|_DXdnA-aSyvAHpDO*@+VNq+jeRG9~;K`!;u zvin26D&bcI5F~Mel?vsikGna8yxg{J!)RwX1qjU0t4aC#w7aRm`S)en=Bgw2lTz2{ zF%VGHi$b3p$uK5Hqc&X_!M-4XOqcjRDuTjOt|oVUE?NGjp<;EkFs7J{eXkY~vru*8 zy=_R7lzy6D3oCqJ_=}|j0u01AF3B+jJ;vxHCiSsqkWM^P@E;WlVd4S~J<zePdnZmnX!D=2&M1gVax9JW`yO65a_)TR!o z`341#XPcO2l`EdMnV`Y__jcNyxTf(kHFJT>`M!i7Ev2^sG;Qh5E8Ea;@`Iu9ZIKo7 zl9xAPIJ_TJIK!n>E^EjNz;dUiglJGY(Ca+dQhB2ec~PDI$tlxIT=!Aq zx?2a0D3on}urccP2^cWK{Z2tMYxOp_kzRXI*jD8Ps)R*!O)A=)&dT5J5}H&)(IiZs zc$a~ExpnIENgA$ zGS)Dp@U(hBr>Q<8E_)9PPNuL>VE#=RJC+ODz~K!o8b@GNoRE&FD_T0HU2K&|A?`P0 zW$<^EL*Il8?%o)pTpR<#eF&}aD7YW-Z-}mSe~-7<2q^`QNE`6nF>?(>xA0#rs5cHq zc7U`gv;5~rMtF4J&<&x@Ch=i$J~96$k%;70d$3(ZJ)?$Urd0_z8iz`h3?^Y#OldPa zW0dO8=F}SXS~15Hx1k(m_QQpC`*~o%CQq!Q{0yNeOmnig!|~enDV;H$+K*LQ%BC|E zbTt=H0aym;;0vTxB;*o&49CpEwPMS-58xRHMAX6dvfhU`1DW~?IHR7dcNXEL$Scr$ z<;g&}c=jn&K~q)+XoIE2qi@#hNf+nGi%d7X8&J#Rvp~=LR3f}w#1Gv*Za-%catr?PQw7Ik zn^O(Tg(H}Fu&`wkU`SeaCFw8o^Vd0yiy-Ybp@LL%SSWj%xYgx&VzV-qqZ*DsdLWHJ zZMD?|&V2~UoBxYx6wIEVilJ-3(f5gB*U6OO1PXJqO?2mRj2zESi2;!RzWpu|4LXtZLH6g< zODP>_Ej5vU=0f54Hsiz(U^|~E$mdJJp6J{7s#OFA&}}OZLA-31RDG2KQeh&E(uZN9 zeaodleWn^6r;)|OA?5QI?%T`qMIcQZ`omLhsSzTwg@h#UI?JgJ z?zh67#uK*D+gOccJjOpZH1{FhjfY2l>6fAX81h89oKGgz7)SXywCG)1cQmJt=bYh>Z#K(NT5=ErcKJQL)9s}UfhUaknq7u{A(1{+F{mV`1*hk$8y z5zI@UtEfZ4|GyxS_H{As>}WFjBZ0~s!Vbs1eF=<`k$fE9i`8o>P$mMV0+Fx4y#Y-Z zsaEudvyWGx8+Vq`uIfPF0cDDLeMFJwOIf^;BjrRe_w{v^q30Whw>e(=2>9Bq_e&jx zxJO?PfYaAxNQ)OYfSEA}e02)z@b(3a;`A8a2hTc*nTi_5qLYg`#XQh{&xpBoU|{CY z|E<-!qsbG_MiHVnVlkY(8KJ@AdWL!pc${X-By-J=HsYVqr}X~Wni<`K|sXvbo|_|H`(UMc9pAw`$0^{UI}C` z^CNdcOW!~EaJVs}yD-N7V(4``8%*EzorG$!{?s0OGytZJ0MdGuQQ>u(H@JBw1%8-M z<$fj0>EN}wz#+mQ51~|{?-FlBPN#Q34FIgi=nB1LG!;xUaWuR`N4>V)5Nzop5ck%m z{!2Sk-4!hnnfkR8XejSQdeWC)+R8)1i>yeWGZxq-xTHE3c;z9ZV*T_tbKr;Ts8_|@e3t={MABx`9HvoarTDn)@()_k{T4Gsi+hvCm!tf(bB+Yb8W)piNd$5J>l8@Z+e556>`&=u2aI-@5L?#>SoVIGn*|>h!?wevG>y8+dG6Rcret-vuPPd(7%QHL-^d9 z(cuvS)T)m;-ovD;%ZOR$*mY2e)$OZNjFbApaOnu`APsDcPDTrS!xFiO8po?C?+_*g z>I95yp9Um7V%=94WqeNOX;*;q6pK-9JP$PMFrkYnnf3|n>zKr5Ea~O)56jqi*;NHq zLn72MY4W-?8RN611;cvfC`u~eYJ)(4jpu1fj4^nMZ0E*T8%nq&%nF*NM7r~Mg$D;O zYVpEKJvD>!G`$7kmxlw@%gW)DF}<7`H`ieGN6fGOuk?a@$*EvL`l|c6yIgEMn%{R_aNoA0Kq))o+ zd%C)k89jPXyboX?z))56JMDuf&EQr17Ro2}OVOc&%&R)5fJpt3SZ){eZ<-`%G|i|r z(IDsvr)sugbjTZa#oOJVvr-6LYZL&Iu!e)$RH|#<*Z}Yu6@;AQp^P!d8{<94kGXS? zVf8hVaT$7HLdHp}RGfA; zE0sXEc8(Ttss6t}tdyxnBR_xdkE2!26sG1po`Acq6;!Bt47*k}5(^vX5L!x67RQBY z);6Cm?zwJbDEaOZSy#i^dWc)4!T4nWd(9fa3j9TH`XBq$V0Hw)bI z-E((a^AluQK48(HdcI(KlqN6+B~ibHWm4mpPou#CfrUh+lpQUz)p!B-W{ozrPOO z@n8ykMMdu=nwuNy;*6y1d3E_Wt>OXOO&^}H`p=9HGy;w-Hs%R&%U~rmq-x=7d}pH{5-V#p(!BrAA4yL`Fr4rSxQO1 zYOPO#sC7|bD+`OqW-|B{Npch#=|!{mLn}++Pi}Y-itOlc9~7_+P@ITT+LN+f_HhRk%7b{h17Ch*(m`-kue3gKR zXIudD&t8eGA;yZfm2y%NmV)_&T*)6aBY~eb%qbZgDXjzN2vM=&?hUdE=Foloil00> zIhit|Paf!K+sA_O^$yv{jtI1Xt0{8pw#Kz7r7X%*mH7dA$|?^g%XK=*gLmTLB-=mJ0>F0I?J zy!9^4*@B1y%d@3l?o6A)5Qjbyg;lJZDDfS-&x)C+G|#B3$;L(FLx0I@MKUBURYd5c z!KDxMQaqemg{m=#^)=utAmxb}Ta;-_1Rn9Lep0p93dJb7TJH;L5us^R=ZxWfr@wiM zj1J-8&K~E&A(RC1TEf~;@>9=`|0B*$u@nYDO6U4DGS6xn$RR5ApPnrdZ}6Oy*-ymv zSO})Bq?LC6ykUz>OxJq4N})wHF0NAx;XzlqX3L*}?iRPe#BO5`AEHVkZyx3IQS_5L zMq`bIf*G0&SBsR+MmQD;6CHwn@1Rd{_#pfanC?;&2U72Z_Iznzuh@(5?Xf%VcE1PLuT3b+Sl5T_ln}Wt4U)Sf9FI66pqKSjYkj(A; zw=lPeXI#UGeuSh&ddL-%Cz0z8mn~Ey*>yj-a+8Z9LA4_{yitD}`CsClG9>_EW?bcQ z{-3_%e=EL~T!pCz&8>yVG#2~&byw9yf?lGi zQ?uo+q*Og>?J-3vu1>DEhyx7AxeaUtHD;&2Yf2_k&6 zRA=*h&;_i))Ouqm6JUl?gn(9S-$|O84Wo>&#t&A6e*+Y_tPN=99r=nm${AI{?qJbSnmaza~ zboBhc%MlfqoeabvJ7+OdIvNn3c6}L1nS#V_@~kb)*CqL9L*$7~d-m?@M|^^gur-mX zIGZ8;KPB!K-WC2Vj-9?+hUqgRuG626n&NQYXtp=Y9CbljvaX1K2O>^tf~?rf`?nHj zg7J!5ei37I13|ILeqc{6cNI1aV<#lfqOIzs&=}Rzke2X)H`{@;5DTmaAWN_tj2(@x zw#ZC-PQ((anR5`IZCBRfr$&^SRMt;PyBXcXqf^N6A-NTAJ3;1GP{txq@&6-6*~VpO z*Ur>czlErdVLrGHgV`e`oVl?&|&9g%GjS5}&qzb{Ty*o#zf){XX8(K5}zICIEIrVzEaZnuSx7!QEMvp7y7*K2sVnzr>;8ccY{ ze`XO;Dxum|Bb>wyZ%rtF6@HhS)fkUd;;y4gd`DS^+zQs(DQnXu{HP)=UBfuXqMg+vffu6UotaGR%>1(J2kA_g zpn1jg>3E8mpert>b&GRK{>g-1S2&5uwKmtg-pW9_nx{AXI1GW-*>L=bu@Ev7Jv%4p zZ!wVj`$&BunCz1aR5HX5N9754$ESht1oe_lhm-ja{?JY@I-(j795o!ZpQ{`{#&r=4 zlhbp~+g1*4#=D%VmYaG*r(6js)8BRjp}1h^t%%C&YiRJ0f}v=QED95jzzD(ZWj-76 z(#50LS?==l)=0CBi`VVrv=8%Z9o&6!6gk6MAt*1x0LfefMF1unSVP&OBnYD zuj^7am*nMH6Z1$EcA`KrOQPicR{OVi)r?-F;8)D6N_&qRx`p1l%Jk zsc{Lq8fq#oc_pdoUv1|9bAA^wES=vL{6kkrb4xCc8if}cw~7L=n~nv<&F+A@#g?H+7y!s7f>W*+_8i5@y5p9D0e z5=tGI6E?56VpcA8sor*0eBo&$o#yq5-~#~i>Xd8rt)M?XIHKu(tLtLA^|BjK{?VVQ zeNq4h^P4Av$)EB`u%v$dXQF*iHrQA;BX^Q4wVb+4?=T04@ofuE=SHfGK{|V?nLK!l z9lj=wo+*%JcUtSrV-*q>Enxf|Arf`+NM+c-#x#uE?l-j0Kn+A zB4|5-c|E|!9fury8{~j;WMxg&P%8C2CPQX9Si(35C}gDfktU^hda>ZHMv*d&-^gcg1pd2JBBavE|U;r~S zFh-U+ActfGQBV%U%?%Ff=ef49yRq<2D)}^DTpR^g6Z4)GVr?-wIEFrx)CvJ&sxgmy z-Ud9y6^v>nR7Vs3o(Rw9`x$XItjLwadyY2ujITNCc!nPOXnFh9b*-APr$R5G!8f1?Q4J5k(W+~&HM0j8XdNWw-dYM;ACuJLGw+kL zj&K&TE^%Q9&`A&cR%b}gS;#-P*UfxqRP_q>EEHaJpFUu2EEYl2peeTN&z;bYY|PeMYIw7|O#B=o#!KVZi~Diz zj7r_1P?MYow(txg?+rl?0_sjX=8ps|#G{y+1bz^LN$XTh5O+|ujAJjc33dx88wgY| z+nY}}(r82o+7g>I!p_;Nqr*FOLkTFbmUms#DCbtWbSU`n{ok8S@p`e55haA(z_Z59 zGr6g5P%PAR63TeY_0}p_^2O3qh<96A2$kxFd;R1+?^-O}O@V3QW^=k<7na2XSLS;U ztk-e^k&&rL4!U5KJr2oA6(Q6F_IMWs*D!r2?SvjWgJa22-H6;`k?}5kjK=bGcI^Cc zPZ~xZ@uWgrKoP-HINT95P^|Ux3v}d%zZE;X0vBbeQXex~bvfG^{D!J-TJ-lJKxYXa zAE8G-1}ax4EsWr!9z>Kz!oC~m%Ze|2%RilPryb9VVK`5WG5>_ml=<7Pa?8NTZJazG}McM`W^?Uo8bC;n&0^0a3w2;$A zoyy8z332_(4!xrqi?>vo0VMhqCh@K-v5Pf|Bx6$>s>@cfE%cQi2Ynw6(HPZkd&vPm z9F`cB+xwjl%en7eKqZj zw<)BJz#Cp=y@>>rAVW$gUZ5c?8|*WzK0iNGUd$XvBYyG2gZyt(nmsOc*!=hGRV1UM z(yF|50n+0rIUfn5@JPX2Kf#0}!71{gH{p#SMk2uYj}E2KzTLT(CdecAW;>D7S!@0M zC&{*(+!OgKNzA(cp8!f{i5lU$ls<}dFn4_)tcr3`K}ph9dutx2QU$KQ9+ZJ~4||F3 zhiTI1j6M;ZgYhyDPW`^_8>5NVq_6|iX!8gC0zFBu$ayWXveLx2^ADgIb()qkQ3wLr zY?1dE(IIx#e7z~ldE5_KEhx`aZd4SejCPOW;&5c%YXv}Ua_U93aGC_!zHCS3z3Xnm zG<=OWB{qo^C2xQX5#(D7ITXBwDa}(pcrhm`x)hR2hTGcwc^KnMoi^^YH*Oh{@?d;N zQeEiDJ>fCsx5ggAwKB|86P52MbEf0|$8zxEW)0xl(tswg2FQPY1d_ASBR~cV>o7D$ zed$0|velbKFL)_Q3kT)=2&A~ngR2)i17*xPRt)h;PXLeU7E6&k2s~#c#2<5S_1=O4xtIFt++$aahimX?jqmJN!448_uf3XHiHMYcs6-Rn zZoO5j47Gsn@3TicC(G%N)Q$@-e*>>3>=)2G-{DNey75w-n>7-v=VSwR{h?4#By ztYn=aPdKuS_i^`j!);rgD~y#9P!0h9KLEh@$so8s<~6I~bf$Go+^Zs}ZB3oaLmn1? zpYg&4SBR}>3jNClGXaE2?rCL17eY5EmA?gE00s|&pMb&Cl6KOu$HRnMr;~6PhTlVm z_G~?IJf4at;~b|^yp6z{vuK_i7sA@pu-wKe550cCsk9Ic^|k7E!xYPKTRCKmJvDKX7^?5Jnf$vVliGPRNG3 zVlxcQAbIByQ@o4?K$0OU-SrY94NGuBo%O31hspS-MN8~jxwP9OM=3}X;;w;MydELp zD8tdlV;j=V`2qlLA+4zSjks)~sxX8={vz9P(m$&N&HAGqGR~?WBlC$x2Ny$4xtNS} z3$0+=KV3@|WW3lYn7Ol)SekZ{+WJ=q^*bHCi;t<=2ai@RA28ZAd4Te;dC1>>af?~$ zP1+De9@d;}9~1$mxQ;}W0Q`$JdTGf}Y$Gs!#)y@oe~PhMT=o!4B?JuB zBlHSQ{8f89wylOzraDDds7*o-x{g9rnkf>QmZBT2_!^BHqhuxgi8M+WA6K4Ao!y94>oS4#1R0c? z(Nfs9q(S3rK6e+Mvy$ws1k!9O-8RnqofZA;FN47RVnqLe&k_vwt9SC72xj-Bc2hSz zBlO)eO&uJ;eB>L;#Fs?H4EIABdcD*b<&GY<8OJ@ZqldZql*aCZP{qPX>I4`F78a~Q zQ9IEm#H-3R3AjA-<;-RLB+OuTkQgsqdnN~}7zQQn3L|;Zp=k*Hw0=hhqTAF^V@p7?`iJZVco` zOTQ@gv4`GC8j@5MU+hy~A{%*AQl`ZiGze z`yHK8vx9%C{XP=fxxz!B^nhJtza2f*)JpC!> z7fa+ZgmlITb^d5B2=@82oBG^=I`G zrIh)eqGGIKpq-X}3|@#r%w=V!p@A8(S{$KXsPB`KUrA(AmO?L$?@4)TG(8WFj>>pDHs($;m{MQ7GKd z08p)hq8#=w+d{8!egS`H!6+_ZZ8(*gy>%MU2%ce2?d)mx0N_;*DZh|k8KF$^%J%C6 zKOME+!Ua9D#y=TAYKT;}xhkd+tY>h1enU<5XekTqi-Tw-puW4S`q!Zbo70Sb`19r9 zh%GDk8^X16H{hZE66%Bt>7IIL(0!+I^_?b=zFOH&ChC-U(AyOGd4DF`u#_NXUak08 z;~aLr#ZH`l&Hc+S4xw`DT~#VBeGV=#p#u8A(7+k3Wa(AwP_(ZT#@>r}*}?6DJv~r= z2zzMzz2|Pr%8xZDjvV_pj!NWi>>lGK$l<@M3KT6`RSk6*$$D^}1>8F#cXo5YV%zBY zpNYgs(;n{{E#lP5yW~xEt)C+e=|b=;TTCo!Y56h=;3D(OND$t)aSJ4C0;HJhEE;tY z1s5VBR|U#EHGf*0Y)pdZ#vqEI&+Mun=$5O}m z!3lgXAui5IVg&D7NS%TE4mUNsNZJclS~3s<~Jv`XlH+-oQt|J3D0_+xuMgk0bDX#uJP6r>Jy9 zIX?s^i^kB1)SbyQoonAYsSdzvz5|<{Rj~^WsCO=N1&e584dbQg`>xO(Lz&02w0W1p zCB?<^UJSsX_eV3eC2gmZThddze7m`*1o4^*b%2J^uByEy$svqY4eSE>EI3tE&D{sU zuXV6oFbkIhlbMv&%&*iI{oATZq?(SSA3JTo9w9;4qhaR${pv9!iggaHBx4VU$txSh z2@NI%U<8Q2=uBUYI(BvcG_*{vBjuP4m#zsfuAMc7J(cbxzr&p-k)B<^!<@Cg2J6C8 z%tdDcfm-8IyfPLxNco=ZzDju2JN#MPG1m^2C;7vOL$tz$N`m9XP?SVOn9 zQ!4l(Je2Kj=8o+Z54ZeOApdJe4edhOX!u9?l^7n}D(R&hz?r6`grf&MZD# zHa_|@_Dw^(p#E+7IhzFjLL)2gHDgBG5WVkfd#IcgxtpeF0q3X!X{MML*W@r@L>9}NT1gBkWyZN3B8Y@wPudM5oSJ)TZ&4Ef zw%4VWDO)&(vx2WGG8(bY8|*c^I^*fdwc4bi!>TO)5;fJ&F#Z`7SfmNhR}SSncrram zl+F;=Vo?v@GV;9r{UH2>C-EX1@K}|SMRaT86m`gi?)AZk;_2yY->OIg=<{Tr%g(Hs zP@O+;c)z`Ek6R&rMPDlXn+FE82f;qoqLinhB84yPM^WKEbtohh%ai`B^X)h3P`i-t ze2c*W2Gu9+b-n14JlUI)Qj|zzJMDl{DE-LNUX%EMr;mZ(Fy3wXg}XlHLL?@!zg@;2 zF67OUyy?6QThaLzwV$8zTr6p2qbxOCYMSq&M5BH3vf@JZOlw7=c%1akEbFqLXZU@l z5F3k{v#y0FshLUC@z!NwNR;cMyzjHC4uNHruA5O{*RUegR+b~c^Y&@n zp6D@nyIPa2QA2!`ulsG4N2}#>vi)G}^Xp}q?>E#`YPSo~OdA2+xdqPBm;OYkFA$`# z(&6U~IutHy7FkazsB;pJncqXM8Br57+C(R%?CC*p+DcT?NqkbK5w6C|%=x$*7D$Zx z9Os1J7lL;Cy`%NG;1xF}`CPmsT_r)%(A1yNIQiCIBN|d>w|2GWJH#hh(BCg#qOM(+_ z4%NWTSGYr?<_x+Ul1diy9#NQ>p_|I}HT{ZIWf!w5kB7x9@cM=?nsvjkV+?S}S#Rto zVgDN{mJ?ZsQ_;@ulybw{W|cdNj%#QuOiL|^Qav0*RY`3^-_6sMB3&{pdU8!wPTecZ zB!EXs9kw8bW|i?Y8_m!a>(O%4OeA``TGbm86$SKd>3Eb8eWs1Zqa@{RKjqi3V@~wO z*!EUW!A|?N8v(q>y|(7!p>v?zp-~^YIfuRwU6bsOtYk6Mb2-b18%(yJ{us#d$SjSE zW|Pr~uyLX1jy2%A>Qo9U(Sj4Dmp!V%Zx50|4)V^*Z0u_F1@Ga#apbnv8*XcCwwh%1 zUSUf#$TxfaSsfBXtX1Nwj-FBo%Cx*P6ZW^@0UXr{ zQbslsQ&|W}(#kYESVFiwjK#HXKKBqB$TO$d>F*GLV#=XfVEU&nr#VN67FH#ybXH{q z$c*vy{}D=NAfP|DtWyhXt}n}|PT(VK?wYc{??Q9RtljRqbeIln>&!Mr7&YZjtPvCs z8yB`2H^C-r5n5VC2*n@4N#y6gkx(Hx2?Rs1s<D1-eCcHYG76Tk^EYaXVPCNjSV#h z%qS`~GE@90Vsx&%npnoS^1>rh^)#wR=W@5~eD#!Q;k5U(?&G)PP1hW59pn*Df=$gZ z*tqCvEsV*XG#rt|w;q1=VF~J}!8Xx6Vl!P;EP3?h_Ifn#?RDi=lxYUYpZ-qIw6zf0 zD||-NvS9E!66i<>!LM0(Renr;L4Z+nW?YbRN68Ds1-9ZDz2bfCWS||{oqeyP3)|oT z(K&Z?|32}D)~3@|b?h@FrqnjRcr#>tr^RqGa&MztYIG1bJ-6%p&HjIH^~~mc<(uT# zIE3T**PVJ{bq)1uJ?09*$TSw%uY0f5|C+Y&F~pBNlt|(VtN=Mg<`;t(*HfSL<<(Q1 zZ!Bks{|pwwmwcRtP`Wm=eU23gTDR8P^C>A z5-;McP3k&SpS_R-exVDYIcYHPmpS~FT}HFhykuepV^0*F@|QM>eLRuJvFY|A6PsZc zpOAy~B=_r<>Y(_kQdV7#K{)kfG>jHay$MkOXN5|p<>&2Nl-sv?N}tVvWP~P&U`p5e zgM~3WJ*fgGI&(9S-D@&eGy2N>p%xSgQA&9L7rFtKefcS^JVIe%b(psi$zdBVY(at; z?5y!82fC)AT(+mlW{Zfq;#=&6MW8WeNX7Bd94kpI{Ht@zDrEgMP3+z{zVACj{u2O} zrK#rEL_dL`E-YkxH;>a@Q`hS+;z#}eRA5bC$p@EXsxN~(hjtCF4_)`rQN-@6_^zbS zN!jYZ4}o4SEeHcH?aabu5(m0xB!O#bBB$)Z;?N=Ha@ zpIWw}6%VCpt}}U`Z+VJK)OqDnZvk64YWXh7`e~=0oYPTN4|FQ(x_`%@TX7m+pXLUm z`su`x8akh40W50i8V9c>W}LHvO4yy#nDyn)r4&(qMDBVXX+d#D-DH|xT0W;ZPsrSG zmSEziw!z0Y?H`K+yTXCnJ540~KQBn!Fp2iT5Ymo0IVMF+u5jMsRQR^a2e2KMZf0eM zxKz$I)M6Q zd&iS^YMIcXebsi&M|Fh#U2gkX zCJ`4_%dFlVqJE;%$5w9rm`H9U>evzWq0OuJ*_KmBRE1(~R0o3K)8(wil~%PgC+ya% zciJrU#OC@f6>}be6*_bG6WgM6_@_s{?lxEqXG4xq4so@aPg3gKUCkH>N$E@I3&;@|pvt3KD;wb%5e#^rW?1wm;ms}N)z3K7%KK64zu@8>B3q(e@ht3$ z^A^j@qS`V3ByLo5rq4!br5vhy(}v_5T}Iq3QmTn+GwvWQ3~Qq~x5fFhg`sRbtMn;( znVSUO&)~6mWMXEjk4DcRb@%k4w#3H2b|2o~0!&Fd#H7X6zAyif-ZLf|YOp5HP{??J z)`V=dSx?SKeI>7Iy!<#Rzhn*W0GVTBb-NBj z^Ci#xM^Qk1qwX`#4iu2anNynlLm_ftB_RXL-g;kvaT&|L%~(R( z#wuZ&-8NHvVl~c289)@(OVhtk=(Ug#GvXQtM%gMDWbCEh({7n8lS!K;aGTorA zKPD+9PvCo{*8xr$3R!ywFqQY`IchtAj5%P`qGip9mdnq!Pv}J}<>WL~AaS9m+9@Ia zHR<9x zx4D`4L7{*uEL3jVHd=YlRc1B7KZl4GL<+riAaz;=P0So`w51rUt*P!kI|UH>k`gnK zYT;ig3T!1T2zMM%7>3r1ukj_C#@?1KHm2f|6$3QbzRH3c+YSd&R|0a`!bc&y1MyL(B@ApDeroyid z?b_yz^RJa!1R>|HHtThPTS$P9JZ-stQW!u>)NP*h_-Wc#I@;dK`3Qv2G$2eI*PFhl z5WUlU%x`Gv)6q5x4%Dg@EL^gO8Y@{O%ibRp5t8(5G8p!BQBwolxJ5U@Z;jRC!9bd< zZD|&|b3A|%Lbk^CS}~qkyaMFpffBhOVxqs~2aYClGNOkSmac3TS{CNtL`GW4Y`7%& z<&P;Yp_!Wc77QDZQof#;bs5FJ6j4oOY~mol97hDIH5ru8iT4ehN!1C=B8Or#?$W&z1=qFQo2X17No zYoc!a>CT$UE0jc#qQCX8g8mgFG-(s!&<;$;C?-YUmUAIZy?~pAtjncQ14%3}k@Tn9 z%{%O~BNEwavbhoYyP`>-@OA6azOt#vZf4|ktF zS4}4+Fm%Q9UOK)}N2MIYi+7d~_f9i0CAIms)bad9d)8u4e-|p`qfvgphWtY7YN;^f zZ?;wl05l)oKWsl7{Hj(b5Xg(H#r{H1tFduq>Pr~7?;@T~!aRTi^m}Oh-fDAON7`qY znc50EZh>_4s-Z!{?KJ){#zoOeogpmv0sh-@pP;qgruX@!kmgQV{Q3jKObJP8dpi_Hg0@sHt2KW__T5@nn)261D*bEseS$&@8N%T);PunV zx2|sPu5%aADKnZ%3-_1BkoX&EQ=8n(%MhhC$D4Pwnd@JdcVbNwLZ(Qvp*t#2_Dsf+ zJ$%ng-H;7?*euNG`B-1oSRS^|=N6{rcTEpS)u_mS&vv!O!sjRWzB%zl=xXbmmbiYj zMl~xa>A1J2jC1K)>+3--sX1RAZ`VN99mS<(Qm2T~DF?5=PMYc|X_g0^zr2!!5^uQm zIJp@nAi7oY+@}dJVk4^5l#Ef_@WQ2wyZ~E*PKr4U4?Ms+qVebrBFoI`&c>-deZhx91{3dNQOl|L6xQfNQ9Quq`SU{oC@g}sS;xX{1H_4~g&+!FP%Y{R? zu+7$|#Oa#9k_-3G$$Za3Ac9E!bfhcI+RAQm>@Bu*?9(%#UBXLkKYZ8vhmIrs>;bGm zV())7I@Xw|u4~n>;6#gSG@}ao6yf~t9Jg-{sWbzLj$?O+oI6_d5C6(?yJiO@o~d6& zG{taxF*kq%riJC{d8|30te69f4gPfXzLl_?>rMyW@;9mA4Yl6u5pj8r;AhcL%FIUz zevRu|mcDv2XIkhrE$n_5Pn=mk+%z6`V*}-J2EmmNGn!ZH?Lvx@!94G47!q48hjT!% zK5tDp+_3E2_B{rat?$^(qxn@w%P5ioVKYcxG}f2a0Q-=fDg~T0@*oH_Q|K!vPUH80 z^2%mCISh6ij4WXUCCS!rKrMde?MLY+^l_RG3n-w*;INf1VOboR^@SGhNIz&c#c!N0 z#=%CAx93*LbO5MbY-?10e!#5N7>hsnD4=wkpyd)un7S2r$|@*^e{xM1G>knUPWr>Q zkfE)nV$56;Yckv}C~t(%w)6pi^rr?gkzm1q7~qgJiiq7yR!pe!Yp+>N7T{Bz?s}i4 z6KaHTf^LuoahR{(=CHlM0f?`(b3E5JA`&f0F^EuqhYu|sfi|)_NtPxRYjCF)A6?U` z*U-(f%iTb78IclESZt|FiPm`oHr&ri5wn(|)&sr<5f|WYehq7O(W~jb`XH;B8-YaL zXmXv7ffg>&f}$_ zzL~EQG+_(iJzZGRyNpMkv`aMLJO3DlcwhXh>mVqQM-$P}l#Z5J)9g?$y~|KSu%Cr6 z^JnH&UbHVmCl5(rY0iMn0b&&5raZGW@H$fn`y6IpW+Vj|8cRhrq%qegACo59(LGX| z>99w9bIpzMUB@azB`C3GH^prP!BnjsEmRGldZ~8lp3eC3(N=M;_l2UgklP-+k~O#U z4v&5_r@rJ8Pu8Ygxryp6Ug#Y7{Jj?)x_1yFnsyl1{8kHwnWafz@qX5OvVZdf`dc%^ ziZ#iq^-JJ1O9MCm@FNY$yGy&7v4SIW#o@-r*|lf!N(r}F%|HflTVXxLcN##qiuMvZ+2~;k9_7V@5`G5>xd$Nr$1h6p;t9c+ zSQSs@zrnUR8Qx!~?~gvPn@yIi8F~FL*J&-xv^;|fDUPRaBV8!&p_J2?sZhk1+Qiy*dwPydy*Ei&nvU`}owTAVq?sKc=vj!0hr zhfkAq_>O4n4b^iN$Z+npb>Jv+$QCc zxP#+8;ezli6ooJ)_#SeW!*`OmdPf#?<3M9q?RvVO&;HFk9e}avSdaJfQ79H zQUOB%X5kM~n8RnwJ9c+@A(gP=*R;pu!V-i)M5c)ydX?u>1$-n~c~;@CN~Nl4=Km4q z8nEut1I2pny1Wo=&7i%h#Y8G1Cw-v*qBb`CiUhx<$#W0$wL-0lIk@#1)GyFAb-w!X zt5zFj=hqZtu92D(Vww#ihNLd29p@F*8ioNvTOUli15SLqAcas6t9DX~5DBjDWrJ*|*7sQCIKB{?IjOWPtZT>{69{OHJ3tUbZ(f?b^w}TZXY2=z*U0{fJNA z!!fS4j@~7k_Z9<&O^(5+eb>^WnQb|+#EJEx&_Z7&s*M2)qaVqscUa^OyZ8&F$Wd#V z@`%@11-`kH93%z|NB|>cxLA_%HqUwXW!QMf&_8jhVT=xUcePja@OM~iKG1^JRL)ke z-P(O;P0{&5mR0zi%h0|jB^cnwRi}lJks-gBMDC3Xb%-VH)1SLovTdddO*0*8H%qRRNb?Z+_KblevXlT%S1<6xjw+RfsSb~yusu7tRRPw; z3%sv)=9Ok_g=p^CNPfgE?TQwoLa#`t)6)F4vxX_iY)fQFMYq}veNiM}?){+rwb5e~ zYA+Y0B@B4Gubq3t$+HSQwo`SFQ}yS-Ko)m}Db%(NfIfv&^uBU0JCQSHtVrB3bX5H1 zDmpO>;G@CT^EIv>*XC3A;dhemq?FnLXtL|!IJ$=p_k>;<;WeSbD3t7hmA*o3h?z{O z&E#9WX>#5Fq`A~b$_37v_lroOVQrGHBFlx22*z^9Ahv)BX0UnfXr+0I41;0ZU#0f$Dc|%wMSL~b$l6gQK0M7@UJW~_X50kVp<+@pq*lpUo<|HgnwnI zbZt6vJ$!#u%feKK^Zr6-ezE z`?b4=v~TI_@ln772cP|(gyOsR1lLg>wme3VB!xf3o@IF+21(bgST#qU?<3SFP|p?% zN#C}@3{ruvPs?nTI7#Q%v~GzaDqW&vyY6BM8B0FQN7+EFwn&N8#1$P39!bK3SaG3E zc)4}rnr>M9+PN2S2b!WC-5I5|$S(5wILM<@GH%0^IK&AD&JW%3SpPvKV>a^Fwy(NQ znG2(1IhfAs!+V?rdpRCPKW8bqM=f`gAhB&>a`0`VczUqz{te*iwr?vbKLize?ndi4 z_GO6D9KWY{5k4>J^rKa1IJHhv*Z7AVu*`XFQ!%>Pizc!#S7pe`qC6j)T(q z6Y{GA3v(h=)hv-d3TI4};R5d*(-Rs>ue?^`-w^J)Rnrb!qeUs1Z!l^EkzbLr*xg#T zk9FRq$icM0YBS=W29BT^;5;LUB!lVE5GaJYOIrBg;Y}82%PP( zJ)a;}yPF)3es)s(ypaG5MWqv&wgHa<^j~RfF7ok#nQ?Z!fcUxlqfVlmtRf`+KTD#9 zW5D}{n=sjKu#)&c`0=00ovJyBdr9EuGUug)mk<&-6%ry|$9;^cIaNLIw#|Wf>>c|$ zmBg3#6q$lFuv|EnbSf-xZ=)a#(I#}oNZMa?VpqCgCFVd1%FT{Uwe9TGN&M%X7leAx+oeniMWS!uL&(@5ar3rM-#f7}ATl+?UF$G^hk7UzaQZm4S}p~P>tJFrHlE%sfJNVmGJ_!f0=?ALh!uE=ZvPV7Ob^=!r8q!heDj# zt@iW>FNrSssp?wt=P|A!%s;=B->~bDm#P zkUk{Oo4UYt6C|K(J=r5*hJ_24+>?V=O@=eVRST6RnP?alwb3TyH&Zx^-0q$URvCjg z%MUo~Sf4f^1sz7cf8nf`ilhXYrJB2AJc)_`HZp_IMJVchk$Bk>H=O`mhCQwUo?jW9 zwslqExEU+&a?Q4dkLCYyH=L@l%it|2-1`HtZ?u)JFbs>0{(p6`MU*(1Ut#pYeiH zVmNH+6FJrYdx~f~-AVj{7uKd~W2LI7>NsjScb~OeX=l{RHvQZg@ua<>=Cf3vOb$Ls zoW)l^Zc^O%mDJ0$q?j)TlOQ*_Sgp0Cp?!1&GF&~gT9WIg2nA~{f;FEuKd*7Ze^0Po zha@iuegD~52wN_*QFpi$J2R~_l><^Kp>Bnuy`-aRRU6%ZnAPs9FgNEW9dSeN#$thK zq1uU)GY5(V@S~0t4#H5d3M*1Rj#&xx!RnJl>AM4|wG7f9L@cgyB#`SE7-&iA4UR^L zKEYzZ;Yq8WkuT(s3Ko#-%zTwk&|b9Q=l~-HHsaXdn)mDb4IFA}({-E(9ysle2&gb) znRw!vj+a{-$-aCa$-egeHiQDfhpFL?+l0jVP3(f$_WOS9Cl+iAamr5<6F1kI=P)aR zQ~##eHY=Z=*!L!w8zKOu4Cy z^Oq;PaEjkXV~rf58~zbKO}zkk%{E%#hB;X#4ZdyM`~``O=#Y!_K`q6L+0+j2{Dt{^ zQ;bD;0O;Lcfn~62Py*46@qWTOhf+o75NUV>#`$pJIJXX@5L`u%iG*0?^1=JwgVo3f zh5&&UWH0y<*vOQ`W686YDr4`kupaFO_lnNZF-hcHKvL4)coBk>AhE*aA?ze;XFt^s z!EN1oM`EmELpU?8ALp8wB0dT#2+yV!tiSoHGzRo`KBA$Q11rEO+&xDw$t~;>K4PY- zXk}WK!Jb{OsU2elHnm?{)INVCAkk=ivTN_*7ma&8iGG@ml2tU{cIK?;xP0wQuBPOO z59c+O3Ty@$-u3c{C*%S*j0hs7+#2V};q->t_7m}wNao`T1&Vx1E88@Yd5 zLyXE3J|nArJOL5>n_Vi-iVb`tP{GPN(w6{Om4I^70+qB>-*=eKD~#e`7q@hVzWL~y zxUm|V^E2OD`}5?T4?Sm8OyzQu>MPU~oB$dF{2Grkf`1MIv7uJ)JkgG!uFhs+_+VbR z%G&ewo;9l)@ZmqlTJNzdMR%wiFsLIpr>(2epK1lBd;2iFrXI^CscpC_#Rl{|@}Xry zwcCC_yhS*inJE{!I6q6P+E))1ZIVim%(Oqf|5=0cr@Jj=liA49ml8(bdsj&zXTy|J z{;4@X87)r_;j|QP5aw*Z(1bbQW}f(ahx@!WW?(b`EghthEb*B~MY zj^p_aCmV=<&Aek#y_7~K!Fip*6?nz=b-WI~A$;q&cFm&pIkx2r)E|9`vIjnC9}lQb zKS0nJ=hC0nZ^3*dZrHV_&!QYN_jI*Cr5c-={UYiTsoxVYDc^@&m1>04)73xgUFvP0 z{S+Ps5|**EjC~HqeV5L)k{5e}R<$_V`^IG^*a!uJ9N9jNPzZaUoPYQ`97rq=YW&V1 zgj3+#;?U11Xu&M9E4PVBQaMeHD-%yZdR=XIXX?-8wS|Zf z=-chIspH;FfRpcx-kBJ((*v~Ne+Wn@(UVPbj7u&?8Dw>G>joo3PtQ*QztHVqK=j#< zGj{-dH~jF7#6Ex`cE~Fq|A}HCaa}l&_QjHrq}V( z@gdX1T!p{)JL;fq#UE#z5KTVi;tv)Gn~1RbPDNJ$WvO4FuZ3y6S`Ae6C+s;NWd7W% zF$>Y2UiqhUN)+uf&bi0|ks+Tkeed%MCVeQ}!Sv+^<;zH%R+BBXjp6|4#wUukaD`%{ zUc9)9+$_4y?$8p%^EFLR|5kB>VlVrcE@K3oAKfeLuxs(0TEs%;f#i7CG=~vFS~WCs zW~YicvSw;z)9#I9qX99QA(i-qpXKJkfF)?qnOF1~>!kVs zcjVLklznxz=eb_VU-{AD6!2y&7m6wz1=7Slwr8l)qdfOjseUx1WkX-7G=X$A*N=3g zbs|^3KQ7u`H(W@qX}@w}PigcZfTYh}#e$UiG zDg&bx#O6-uZrW?hQ!7eOy#7IXr{y@}6#xTR69hO0iL{v8wdrZopG95_;?1msIsagx z)|Xz>>xmQupGvkFutg5;#EZqY!ydO1XEU@T&a-KOmVQ2`P-CqIUjxHnUT6L3u@H3Y z9|*7Ac_*TmfDW^0(tq-+bKWlmpYUE9K>_;9m!4q%*^{e7Tps|v4^lkz+2Y(d3xPk} zMfQ_L_rCn*X2pJIptWD_vj~_5G;P~Jn6SHxB<%aJV7E&}-Gz8fa)HibT)fuMnurYD z8NwwU6_Q{Cal!F^JPmq7SO|<}lh3|5@f@7}=tZ)zZdHhYO>L93bIs6(=#)AT>LxQ2 zgp>l1*%*RtbqrbLKR%?v2rXceA~uCg(dar3s~|SNyC`cTOg&mW!y*591lfpF6$%$1 zcYUb+N|geZL$8oi1t=;mnA&<85vE}s*pAQULcRKkXp7eJJaO_`sYo>PQsM{NLjHGG zHh1>Hk(6+dPtkPyxfC~qEd1*x$b0dVY~5eAZx^e{h9>&|lCZ#va7#mz^u5T9fCTy+ zt0gPXF;_K(r+%#Oil(E3n2Yrh+rH>k+4Y|fmh?#}FEl2rZJKHCjf*0~7=fMj-tsHR z{P-nMC-P8ekVa`)hBoQWzm{ogaROh=$2tK7j3srzw^4 zzY;EF2KZG#>SRH)SAX_+#AhLmswjm^PKYLU%A9QGYH8>bC>W{`-;&d*t99|I_@lt? z*sgVom~}ovZxObl+7wz4*A3kL=tt8>t<-(<7wdQ9rn&`M$Av`73on<}auF^L)+W)& zOKqUo6Vrh4?u(#<=-38IA@5Hb;LF; zgElap9QW#Z>O!bKTjs32!O;TO{;iL1KzGq$DUdiCNSx+j;y^KF7IBeBQ#e%^4{i?Y zwXbM{|{BiZ-CYksP5s22)%^RPNlm^!-bq8%97vtkk>$)1^Nn)-~Z{lsX ztk83osON@3P*~X#u7Igg_3};8>KOoA%AX_{Tb$hUCX0H=N!k@LaxoBuP=T9qh< zIFz6VW1;P#MMfhv6=MdpI3DfS1a<87-`=Jgr~^MDIXi}~r$R9Op;4aO{DDU9^r zjT-M}>MFcXFyxoh%dgqF+(TyT{uKX$aY|<~0(3N=gGKO0#u4dWZ2TBXY_PFvQlQSK z^aT4(r!OfkaNXgkU2C_fAsKHe;lWt$(brT2C+@U{EZ z?96&9ghnLB3hkIUgUj59=%c6Y3=f^WFzN6d_uJaBe6$Rw6}oMou2u|U?2g3#@JZ)^ zD>2S}6O5^qm|j>)kq2d!8rbPBn^KiMXf^xE<3hZ+t6Qkp6U7@aw4CK7nSYHj~YWpDZ8#ex~2g z;PQdl{0(3w3D8DWzHs+LZfztuL{L+l;a@ZRh_I=~@ z3iP`!2dud7%fc6|3zH8dTGV*MYc|yp1o+2}*CzpLEm=Dm7cZdpPQ|#q5Sv+KmLe?8 zQ`sipcC~-PS3b`+o2W0D#D)9aM@x7!m7poeK%mAFue&FRUXFV=T@n!$qUOdW25$=) zp}*7+^i$Rngy^nM4ZY<1rEU!6D z)8+|s!q83>7pZS8qxIstxxcp$Y_U*$Sx5Tm-O;Y94r@Ks=A6RuA@r(6!Y`B}zU%y^ z_(VZaGF466~L#TlKfXmPARCjHV znA|VBirBo{NcMr4pG||8xLCzUT41_8#UWkV;}x3XFGxk#$50E|wX;6Hl;px7S5Osx z*yd+JbD zn$z|1Mc9H$271EhhdS3BA(|V@Ot8O&-r}hZ@7WB2c0ftCa;rf?BLu=sBv(XFyX+asv|DXO`egSwFC06FCoBOoSaBvExS8uQR0hSV8 z1qQCa1FGcZ)V6%zgz7-LvsadAp zhMezzV0Z6XwLc*|_TEtH=w3VWN>;*fBdXL60*YR~;dZ*?M*Wa*D~iF>?r9H@(7Ys_ zj&`rdUgq2WNu_e(nPzzA88n3f3a?Lf2K2>Aq;)KRH@0hEDLcTv6(0X|CA&l%Hd;Qe zrNhvbe3}>m!8L+tiHP;7qwUlUEqjdr!5cyr4rh#|&y6jf%A2gT@9N{arvY1{>d#c< zHQP0=>24QGkppNvS-OUq83?Pn4=ybvF zBHI7{Tug^fuSNy@ZNMW6bK&`ltsNjH_`@;MGtZ>uYuJIU9+j47`< zIA^5Wm@fH%VgxH=ol-Gbop#Ce6S%$ANqZfD>EXH(<7H}Yn>Ps>809d0i8{8Xe$bhI z4_XxK(eKVc@SN5X_sczdE!bij?xdSB`=1x6 zQQ`EPJwo=iVMWlj8L~VCH*CJ_$M~iwn=*qNvPKQDr6tjfBh~k6j~hKl1NRDT}--17;Y~3Pq zRte}gq3bXIc1DxfdynT2_x6s1D|P>f=m%^}58 zPBoOZaQFh?)%r4n6OCpB#()>y&a_Cz&J&HZk6<35^73Z0;@f&>yJSGG6Q-^wJ&dvIamCmw)wQ%T*4GqVx%B=DAI#p zS|*uHG;7p!3LS`fA!!R!)7Dr>s76gtMh44LO*z^beLNz-KfMLZxK+Ob@Gq#YHD*2! zdLB&4K5ZC>&Sknvr)iXxsgMA|9oQTR|2ACuJ~8ATh~GbqT@ckM8r;ZW z*`)KBO6Z{8sk0s!?6=(vUeRMfRa^F^V90AD3}#!ZKuq!zz&hF*Y05|z`qY!Jh&RcG zuNst39R_m(&;+)sF#B$SSNvh?-3GTw4Ty91w1#!{vXsXPF^hMvrL$%FnZ0?Sq_Btg=Jcp2K0N*!)VtmA6_&y)8X}%^>9&D~{Y~&nj(yxR1g5 zWqtU6K2{LQ{4}76)j(GVJd`381y!QG2d1lqTvoJVYdCJ1#cE=PSBe%)7Pdj0ZUKUB z)(XoZBDmVW_xiR~X}88`2h4|_9c22e;-oc5DayCI&l2mDvZPB}1M)m)rJy($KxGDd z+vkRdUoo4dg8MHmJDk2+KchCnWH0-FPRPU#>2&WANF(K|t4VTHzHF?X@p8#t#PYOK zACdRo8{aT2w9+n#E|i0#oCwZcf}hO1A|?uV)ULSMZVS8> z_tgeK3F>fL_w=t_hAhyvDAat(@X*^rdl~b55Fjzj5xic%-V0$BhYIF7F*PGvG*Bq` z_+V&=90-J*uR2={L|XHOY8c`FliAUz**=4XETC!WeG`KOmOn5jL|Zyf-vX0lO3uk) z=vw!`H*I8H)5J{GLiwo>Y5VhDs414UW-m%i<7(8~HqOuF5%}fpo4*NCBC{Mj;J+G| z_E<4}9lEwPZz~JO_YlSHeu?wOaRP8euN@&twNS@o1Q5zrg>p+(TcgJDhG)|PA5(?E z#VMDa-ixmn1~zM=;_<)-5@e`tv#Rg?F*+kfr4!M>`ax<#(;oPB;647Dadgxl!pIi* zp}^wZorLc%#454l$uii)zFBAD6;+kj9RQR`A2EL1-MSKH=glzD|L0cc4^Vyjt|8VV zI~5Yb7<6O-U1sx`r8AN#xXA-j17DsM1hwg1+;+*E*(!Z8<=(XHI#TkSA0A&<>e=L= zb&$}yLwjZAjt7^4d1Bbh&lFYHctzB59I~;WnMfOKcw@i0?-f?$r~rHl30QO4Qm`Fb ztB`^gDQg_y!LPn(_X{2sqHT}>>E8w2v69jzpZz+SumXO`i({Y~5sA$cJ6ZjvvMICR zN;@GNnsIQ6W8m5!h2vSN&*;4U_o}uweW2%r7@a;;)uH3Ih6m?YKD8wd5c(9hGIF(b z6WP4jf0-M7NhM~idVDcVsu4UJJku()!iW)-*P-TLiaLtHAYiK~SZYZsOxLffvkk_v zxXO9iTH#PAlwxoV@xCBs-c6l5Dp4~69T=!&Ay#EVB0fFvte`jRb;IJ9ooi^pmEq+r z=}0o!+(mfy+QukZotU{*9*Z0yK8?fut~hg0GLEa>1nXt?=XENv0#z?#x^f%7R{#+8 z?3y=1b51K!l}zB|dKOoU^)YPuHR;Dh=c^w>NaRl%??@~0{_GQFrBoOe3wGHyQf;@h zz3*3#yfZSP#JY05a52omZMTvi!Fp)X4Oq+w;eXH6Qy7Lpx{{?a4|91Tg+LPg;;)Q>zvIWIbb}|+JINdJS|UOLIzBJu9 zQDx7|-Wd>>^@&$ZtFl4jb51%&j~-X*Kss7(?#8?<{F|wAE<2c=HFi7Y-N6@#y+}2o zKuq?5|HsEsHP)oKa}R<(mzH%t4_!CAjFO`S3C}Rx6OXYg0N4}9gGE`6Q{LaiKp^&& zn*~p0G!iR{Z`IV)IUoihGZ`AZbKZ`?9SqCOGzKikp@cBy1m^hu8begZQ_yo}f0W$j z9pVy6ggWS}FbFsrOof*R>%EUdZEQaR;~&BRGtY*c+I&%!_lAh=b?u`LfP(N>j(nf8 z6T5l7kHwsc#cBqxC)$32JMa=}?`NJWl2i_vkeN3Uvy=@3X$w?P2v1XRm6h7mzNHWq>4yH; zK#wr#zAq(IiMZ)Pqv5Us9_Xor6p1LkL-u;|vT!0m^x~OQ97|9sC4p76o^eSnb$49? z%LM>uGmvXr_S-n7)3;jb2At86D2W*d zM}Lh3Iz-puLdwf3hnafXE+Ya`TvJEJwBr*VbJk>bU+NQ2V|q%I+J_o;-crHTCjlL9 zedqu5PHp2S_Q9C08H@jfeio7^-%075Cx24HJSf>sfR0n{iWWxNrIl}OFJC!T-kbPE z)34_vBFC=~L>EXMK`jWAA;oJ{Rae-uQdB;=-OZZ^rhG7mi+K_U{6R?qELG5Gd@U`mC{yHCAb3jaVAwd1CUp2cYS zIa^{=zsU=Gh66$a2blAXmA#L0ciKu`p?`M=sz?Nmxd?jySLrNmLsGC=%<|wG zlvn0uu) zuoRK3AhL>AnRDXG0%;1P;}pn6W0H<}r(Wjl0r^NHfBPsApg&N_!$ODjR&eq3Lm0%R z=rdo2M_u*gQ-i?vWguO!YCy;;bkFIFiDOy=(8Y<^ibRZP6w3;ivLgz!+ZOl6QNyhT zgh^xUIlbsY_&J@eJYOrqNsZsV@|Zvg^!kn#P-J@#qWp+fY zU;j!1vdP?fv0k7_MqVitbR0W-WH{`ZhsGB7Z&jqG3I41jJ@|frtOQftuY&>=lt{@ZTP77D47_0T1*vxRf63^xWFr&>2)dq`5JUxC-+g}#JMn}bW{ z2ty`fRVjD!+q_h=-x7-fwbC%_c(Sy(PDu0PwaP~VMAbS=53t|qunOXB&bhRfyaP9cbBcmRw5PFsqKU_WZQBE&GzbYbG{n(> z)3_ODiQ4+2u_@G+@YXwP?t3)aW2y_eFV1HQt)9AWtm->U;Ttub$yejgj2RsfOSs{4 z?PQ*u3Tw*H?&)gL3iD*RVTcP~k&H)&mnDWJ4Ov)gtZCzK+97~TSU^*V-z{KUzi-}H zp|t51lT-7mlEWg~P0Jj5?p2DXq$+Opaa?+!LZ1}Hr}s9EEx6WriekGMHbmqZCqXLm z%D!EoYT*NsDeq>1NkoSL9QO~1yQpQz~ONR@_M4Ar!1x9-wg zi~l5ZN1a~&hmy2Tp_q#IBOg)^1e@OnvK7i!2WMN}Rizuq)2=pd6!LR|E0XM1>N?{A zt2M;?=&OG2ouU)(DZ01f?}!&7RJ>LH&pNe_AB64m48AbDdAj(t_N2C?s?GFy3xhS? zr2OwPXO3O^#~AOGhi8`=KnEPRP#A9McZ7J-=tIx0rlc@T1i~@niRJi<2wPbkDRx&%K+`L8+YIowB_@_J$OVn_Ae0p8%3L&ru zgy-hsHY_5y8m;zDDt^17U82yUx?pDb-YLH0>(U-xc}e)gflcWkq<2z1;C~OppaqYM z68EM!;BjAjKDd6IB|AK(x&)C=a~eULvXy8@(Rs}Si+aAl;^;e)%gPxyQ+(v5(?t)} z{ecg1v7f41@F-SE{jtD(2;K`HF#1%V$YVB~Og*_{zt&h%cBse=5rxvB6H!X7M`=^; znTe1fWQ!r;3<7>bUW5o}3ancUoG%FajSbUe;q>JvkeZ|0{GwY}PZ$3k3m_{Fd=3Eq zjeFdd(X71Hv_UuW0m;QIWI}rt+NAWmDpLaa!P7*1`{wX=kIYO3bruO^kVsFlH=I3wfc^t`nXCP3UDshqmGa2I4`2Er+Y^?n}M#!CoUg?J!hW2vj1UqK?QfsfC zFG<^3#8~}Uto9-l&{^?XlXaZ^diS;#dp;VeTV39l#jw$a;=K!rBldeXq9Avmglyl5 zO@kZR3-k_qJybnKIhguPBx=8`?C$I6UgF(yNyW+%NHu;m7%P+SSGYM~8ryNhr1o4x zw8YD7I_Epn-_~NwO1575iJiXt10(+du&q<_p}K_Xw9e#_5gOm0;uipSOlO_#I7|~> zB15GAq8Ntvy~WEbHj8E|8g&`k#h)%r)*5?3XHLs&|E^5`VQH6VgDg-eB-@|ycSD<~ z3;O$mhP#&vGv|CRNF3TdrBOpK8|`y z!+bvBuqXJ)7%^w(vQyS{S?*0&m!D$g=*oj?4Uu#}vgbd$Y>EnKFCS}IywJmUQiB%J z#jSQ_u`Rk!Q3ue>wk@V$wPqxVuAHA^wyjbwfzyAS1sY6+SW4!E4m6q~ND-7lc$->* z(Koi~xibp7ugiNeWWwrH@CDEmJgwSUGRcy|eknlz*bb#tL(&t3@c}BFK9O_AmsHQ> zbD2%Nb{w8gs)7^N-hn;FyAcJ_BkJ4aiJ%X6B$96V9?%_)d5n}n=OVz0k*-0mhRK)f zQ7vw0!{e9(e*jYcYzy~mVbXM%Hv_)JoYDuM_zf{GF5>BW=p~r0`I0^c(@ownbdmmW z&NY~{R3@B*Z3yEjdH)A4@hxhIy?FExbA&lDU-l@-m$t z-0y(Ce>dif#2qM`6pJ-433CP`jXvACl=L$#adFxjaQ$_n&rUbIt~ZzUkTy;7$3NHu zHGIT%{E7Tyz?AmXU&|X2HyY^vzZU2SoJcXW+ z?J+EB9ffMqI|P#)>eQ^E{2=Sif5O`0(2;!57(vsI7}wr9VU<4sx%h=ibOMKDjeX&S zr$`;D;YEhSls{u9=XCR)t9Gbm;HVT?;gopXW@Z`Rkt0tJUhl-xwFJLP4}&E-HWZ`< zQ`v{n-8=6n5pA=StgE~Xg6%~3d6*R46!qP#T8G0T`ff?jYSOst7;oI+rVy`m;LWv@ z3;j^Kyk`Cg6+|9tnc#=B(`@hx#t+3!@_4XBaAd+MIA@02UOj1)wW|sj_~)aZ)$YpX zR17t&=t~7`PeQSv6Cxj#&Cw)(R{o=FZzAkcWf7$#GPN!|QGJ0?PSl|Pjss*z9xL0d# z$8viL&HHjrOX1w^!dp9f1Mm*KoR6Ar&EbXh)AB~tb^M@u^jE-tyUzv zQ=}ihfP{dm-8}XiT@sdeQ-Q2JFOrHC7&hz)1no3;mhLPd5pr+Z?BZ%hel%dCXteB8 zNKE$fkcUccAS8+Q)8KYzIS!KD*MV>JoLPoxCe5?w=T3Udgy}&?$lE*70(HD|G~anG zzw@`94@;pq`WrQ6_9wL4ESQjW=w{yAQSpgKnVR{%L*Bbp?;V`U&A1SXf zpc8bP%Q=Bau8z{8zM>#evR}8lPVF+n81_3b8}&++tDvD{tWH1Gk<3F^VQ*pHc~zcH zG*c}Lvs=9n(|RDUfU0$3yD7WU7pwFYvTDpH)v{D4$XMoC8NShXSv8 z0!(JPOOXL^9c0*X&hISL>obPxcJ{0q1V!!NUZF&yr>BJG0EKb zJlh*%Q5;Wm_8dKHtZk519H6nQ{c=3I{9QE+h>iq(g@hIT_>qN~7M*aDo=Fs-jSy>Q zrs(!0vgIao3vagA)78$t%yqo4GT8KaH_%~&;^+&y?ql;`!GAxYNxa6RkyJ zQ-pM!gWLOVr_jAQaF_G!h^wYy?0o29dC#Six>u1p-&Ptas}cnSN|#% zAf#gz2g{B%Ht5&n+$6dc-3phFZ2ULjVJB`OHP%(TKCRY$r7tE6d}473yDDy`XaIMz zRDdmoYgY7}_$RK0_J^P!TV)C_c3$PE_a_2;>!i5^og?H*gNL2SGfVdooFAguaB|pGxU<&-rjDV;mp` zI9BBHMqrM0Ja*GrcLRoFcPUqVSRP%BcsKOwc3!}AKfy&Yd(cU*y7~HD{Im(=|Jqu{ z7~oZiINudljImwbF&)EsZ}mfy%2*TiKJpDdzi;RO2;H0mk_VQr8non3a?;0Ym*hxi z<5V(6IxAkFV!c`7u>Qvm`qP#WIIO2)@F+INAUNA*)pqHlQH!6EpP=L+%|BxI!^T|7 zLle?`pN#FqR(dl~OFiATJeIJdnvV-XSVYnymjNKW>fi;aGj0}NQV~12Vf?fXPCPhw zJt9o(t1B6lQ8IqO9ZRb|t`Aql%S466eREB*u2uK1QVif^_=YB2+6^H4YQ&L1_5ZI> zQ-k>5XW1Ut<#nuqyxcZ+WID{Pa@K?BLYPn_1a!?1KrY+XGUgme?Y+X~jA`!-srr;* z6niH9L?Hd-m~WGfDec}O_yYsR<&6Ypbxt`<%s%-r0y5wVo$7;BR60yc3~e>3CLUzZ zbylDNkZFK&Yjj23ByM3@+BzLwQanRx}M166Xz^cJ|m!(BeiN8 z-roLVtp);Xx*KKg`b>f-Ei`uf-OCY5KpX+Ks}`VK>r{-CL_4$$-;+ECW_;ck+>yS* zI1$1^=b>i(t%+9y9(b;Aa9rH#Oa#QBOaEC)0omm1$B!*w4f3(ngE1XJqUe*@%7;HF zGm{MbGf*fU#YiLS$$y~>g+JQp!AU~hzeaof@r_VVQ($eb|cLe zt908!^*GK`(Q)g1v+ApN`))9Akj7kE@$R`yxOA1{7+ak9cd07{SMwUcIiTMHI*woD zw1V49u!JTnJO-)%z$FnMT5}sc8%Zw)fU+8*fyjR;1AIGLg`b_FTAz{)etoQ6or>*i zJ;=%eBF%1HUm@xlATt8{vl(@JFc@oAZhZt02Gq(uF?QaHx2a}}&%Lpr#RTFh6VQ3t z@g0>xyJ-7bRb9zK23*E)`?*BVI)s~7#P%nUfNC#6r{$ioSzN^**{nBQEt~6l>>CbRa-S-5@c&JEbRHYbiWjBfckV!4OCq2y(>ZeNcy!j1k@ zrau&;s_k7<@sf>s$@o_dnid0XR~O$s z7ZV~E@AC1qSTay;67ayqK<0xeufwSo1>(QR5X7D)hH6EsBo_^kc^(DH>nW$N>f{!T z5aXLYEZ;leOljr|Wz_cJRPrx<55)1yL+xa(0 z`>_gG9sy^0)tNnLM{v+lP~E)qKm9b{pXjR3vb}}NLErXspLvs4zgArLK|5nZe?*pi zi8bl^o|oOE&;scEM>0f@gxU6Q`$1uqFn%hi4}~5s$s2c0hvppUv=8$3Fz_}*=ax)? zo6prDw(Z*<{+66N9d4ynNkFJ)(&qL=W5E3qQ+ZvBa7Di-L6es^w_6wEygUi2(sd{X z!<<{OB{QAkSbE+RUCX{H?4JR%W3{`Y!P?X zRPsWPC@T2S>!n;!WJ=O15SY%^=L?oO0FWQl$n9V%=KA( zYL?;>QDc$RER@Rq&MqJV4Q+C0CTFM zn^>=P+nk)3ZL`sSfEKB}&I!un_GG-x&lKd&C1eyy`qQ|s3rhY+M3@hHZ#^bIdF<6L zCt@psv3RSS$g#?`uwX|fU-l_e$E4pl<7H45IKn~#dcVHca@25J7 zmM(S2x=4ZixtkzzJ2eHf93_CIBki=2u40|j4%X!YZ)!0L!S3m-ONLGl)i&gX%?K0% z^3$|Vm$>@mE1p2WK*2{Qw527)9S<2^xm?O1DE`aNc}M96kZ9_{>0NO_1RpB&890CG zbW^&d%LYa9BD<1Tu%fw%GSt6P#3&I;WBd3qbZj4slhS9P?I4Nl5+Nxsi-#+|I14s- zWC^Q74iMMuCuTzXgG7v=GQ)yJzJ>efFlr8${UCR^Ypy40YsD9|(O67-Cv!!n z;S!8>RI3_iIA3puI6sYGKmx$i87>$P?Hgy){j%4s9_KFmgx$73JD>waI?e~NOXNsd zIVHe;fShzE}3#F6wXpMp7et&ZFIyO$XR| zBNa3DJ}zmYyt-*=4I3pvt`zYc7o-KE<>skREY9ddZ0*8hX%rRW6?}K>dzkD%@dg95 z=>Hmu1?7ZQf`VDw5jA|ltbVdf_uk+J+v9aEjE5VfsO|f5%Vb-z6nIco!GqE3GjKELeM^TO-BRj4s#cc2+w&xf0e8d(-2L(qsAx+S~iiI=e%aln{$3Q(XmUVp>l zu217hZ~01aIORhS2-P%uAw$hpvEn2Slvzfo88-(rJh~$&okpDPKC{P|X`o#dMSIo~ z-L6}U*Fe3URK2EM-$LYQ{x3+Fb%wTPkOE5N$Q4y~q}d&R<<$|vPcQ6?(NJ^NYP37r ziPMir2yob(vTU>whxC|ZE+PA-blVuwMcTZqCDg9Mv3&lQ=Jk9 ze+@W@DC346OVLhC&4ij%n@DqG_)E&pV6vJo_h%UlQ1);SL}1D z8vRDCk_z>YGXv`}O;$s7i=tNfv%vxC4B6kLa`bW5okBU-a=-A1U`NL~p98fMDZXlP zYT3yfOT*%zzSZiCKa>+7Qx8MN8HD&sg{g8P@t8{+WI6^WimU$T&>)}=^4?C38G5h0 zCYLXnU!|}qP%Bn{#m)Mp38W=Hk&SIhpv)LI{St^sZ~L@*B+9IHSOlBpl3LzvwU@!m z>0CNw#4@)1fupZm2pC@9ZZhE`3$W%x+!v2wN#rSY9F<)VHw;1hkdQ{Rh2LC5XVw}1 z-8a%5b;z=Iz(cGcAfZQ;w-FrnGjJhnaVMC|5aZkw-I~s+?-l%@Aj~XdBzfk)O!U${ zWq{k8Cm94kypQtPtwY}OMM1E-M!rujL5dtL=$sELR5FgFl+eW^DOCU$No;IU4J6~> zgNo-pbQDZ1{~OjP5m;K8IK@71iH%hcZVZftk)Fc+G~s^gkeL3?^y%|%k~uEURB^z? zyTxHoXQ5CSnK~E^(41{hlRpbm08y%WxQMlPlFBXhM{jis$jqK7NKX<(i&oz2H4LC$ ztxu`?-c?+bT4$z$Iym`ti_YzL8`V(D8&`N}FAPJft77xDRbCB~0PqsUw;W(>H)}k` zp-Ty9)m?$h?Y*#w`Zk@)^A^v27jL&H-QJa6^-d?J?tE(9{>==94G|L-FdP~^U2%Ue z121BbOSl&?t|HMqK5y!j6EUxwnyV}~S}zL}5~$2DEoG)?P>)vP0JLf?gTPzPc_6^G zGf0biENAk+YonxRNUZ0XV`POU{=xoS2hMdoO#V1(Y(K-r1s|`QRFXsfw8y%U-+^0x z_jhf;tQ%+LN|VwhW#J-x-DFH&ZWnov!x0dH^Upfuh9+B)FF7nH;|Af)@h+&tCEj5{bL5@mL3G{ zzPAt!z5+dUd;(l3$BJ z*VbcOYvjj#%%Sujx<4)vr)fL$$kuQc^?#A-DzKVk85UTP%%D*a?KL0#-F`0<*kFWU%+%&`k$x74+jYexyPMA|C-GCsD{#g zG;{N7q+`QtEczY2z%pL!Wb#=LZ*qHsRyrbfEwF@10fm;|%af$PqF*-iFCo$w*sZ~*KS zq2EMji+lVw2;LIMqn7g2-`SFHEp%y7ba@I6`n?tT*|3+oRf z!s$1MUdQX#)JyTI|Y=@IrPR7o3F=c<8cG|&3_S$1!dcQ8S+ z;(_rx(y%OJX!}`N9`^nkq3s8Pw~p3B(TD8f%TA1XnV!WAk0u&S3Qzs&G|ilU790l> zMP#milfB~{S6S+LOK2YK7B7jdNu$qpJ=?wOcDHj0WehaI%LN*PCzda*Io7%P{f5;_ zL?vT{CJr01jQ_AsYqE05Xp=sH4tesj15}4ngqFB7C(!o?eW|YXq)D4nQ3m*g?TwQ3 zqQ4m|M#ka-QJ*a|fo}fIh>);t!0HrP#wKC?TO07b&2lihZ2oG zYFfbMNMwHP;F3m~NHmkQOmib9iLxc-*wN1Fm+AttR#4Jy( zOTA7!#T!hQG(_c`V^Xs)|59T%WB2tugaK^gZ=#RkVfLwbl30}9VWU(W1V3G%BaSdMd#?XxZfZi#^l^}IFFM>BiJtrM-zu~aG>~*bw^6C9sxYMf9D2msc zCe{U7$eoL0r&=$2;?s1%X_6n2Qc$dDg{v-Q=WuP1E{a{%hmG~O?`FHeTg|U*`}@hK z_Am2_+?%5h!a&hkaVr<0jm6k;tArB}ZYO>{8w3)%(EaA0ndYA0aSwsaeg5J|RctweVT`@k%%(0erol4>!> zVcQ#3i@5PmM>ChVU^=>YiGHg6-26sW_S3t{UCMwBD7=Rj3%aaMgcX|)RCQtr^#JoY z;TY***HDePy(&kn>`i{|_tT*-YD(g{?RCS&frQfSSU0bF94-APr24M|?N^^aj@e@HEA=-~w+odu-v9P#Sq$Ko|NvN^+WW4mU6A|M+sn*+0-t z#DBch93^aMT;&Tc!417Ran2PODha=o?vgToS5ywHr(7_t zy2P5K8?CCycK;J2jf@^5K!!+lCaf$)9mJ`FNVZ-ld zeAN9C{Pa`Wwz{p<$}n9Y!?SVF&s2+uh%b2S_+@v(A0=U?f*Mh()>wR{U04UNo^ncI zZph*5e^?F*f(+mEYKnFtrnA)MNwp-?XO{k}Q43+GE9KSs!M-34!>bO`d}gPGKKtWj zyY}>fsRYg^4izk>PJ~N@$N?E+^8-aUD6brwq1%@S)$yqT$TDkW`%dg)9D~sC%rNm< zTk$*M$@Ls4)`rZWbie2kI)3^VZPK&r3C`-*?giEX%+xaPLwacmNkDO-`+ZWpdYT2DvRvRsN zye^Z}{L#4gBqJ5rixEJ@wzf-Wr9i2xX?C z=d&C_RmR#JNJ4lmoRzV#SJoC6=($FYML%XR=b19KKepJ2pJwHe&HBn{nysxy*6^9e zcR8HrwiEfa-RKIrAxz>+Tt(c1E5pFiv-{fq7oKYHMcb+nU3<^Ew-b>>jz!my?q$nkaFX9rbgQjr8sT(?e_(-cv{dD5HtEjF1cKcAmUk-l}B15 z1d>hap&I1aHlY+vv_T;-#wv$`sZdQwh45IA36j6vSxHHq&+4}y00&la7p>KR;w5Es zYerW7qTKdtVw5m2k#ymZKbXkzZI@=owAIz;mwL63H~0%Sebf0P^E*F6wsc?Lv3(ME_ZA2=br2;wchr>1b1H3E6G3uKEaCzUKdL+bg57;q>r&Gi zJx8LEz+{B_4YOrn-%BUv*VBmZ=ahltgUB3<>8pPBbF#GxZp5WvuAvp&+_l}7G{ z_Up;mo4P~2vy!ahqh6vqsf3Xi65JizPG#~2JLe^B91DQUbFql<{wS?@g`{prt|3P8 zZZxDwTXD28`!aKJtLQJHnPv2++LiE9>o?D5KXb?cnkZxLGPT4@82)klvuyh?;Ks_0_b(?rX%0f<0g97<^|<_X{Ld#vH4& zF7b^+J0^m#Lk6g-Km|IXdOumPr%`@d*kITy{Bl!mSr6A%FwiPx-P4YClLG7 zBVts}n4R*`?Jj6aD2E@MDr=VaH#~1tu84Vl01J6E<>c}n{o7-4QW9ObJzWmp+47`L zAR(Fw>mPs?C3^B7`h7YjjHJb9PBOWU2z@$uQEb}D>E0T4G(bgaG!6J5;Uv=(Ux-Vn zov%+^?4&e=tgVMNIzM)j>{mR}WxcL(6Gy^Z-XPf6^dGmq+bHR2Q|t6l3Y5H{?;pvv z8V?SIvcG=ty*7b5<6uSGnc@H^bR<{QKv`o9518!ToIy1DpStC?AGCMQC@o1i+fp(% zs4)@afM~^qSR2v$sJgR@J+3t44x1XAt5FD=l$h2xJ}pK;sSy1eOdGQE7DVfB}Ci z{DCe`f`*4_J?lqbGvI=#qc3UpYV#o7ocCOFji`I943O{~S&&^oc^U??6jO`xVvosn zy(%VFcd^-~tDzb<5!WZa2IX5dWg{qJ=>u`luIQBcV;L=L=(avxqrrv z!+@Y}I8Kt1!Z1rrXCqLUf`lD2VumD@Me+#$W*|YtU~|1t|2EiMe{s7!^p1f%sC;O` zteq!(i5d+EHM;{l$cwp8SOH}t6Dg-xS-R|%^CWyZo5eAjEM!!if2k+MzWmd`;I?vq zO?rG<+*4=6i42&Or+JA5VR6H-F5B)8aQxy7sa_V8b@r24k$4i$Xj>H+C3*p09=m#6k*x!7pwt5%gE4f2u5htWD*v%smrC=3iH)pbzZkJHX#pcM-@&K-4ZmND z>3N+a=l1vnT*!AvJk=PPF%iTZ{U(w8D|XKnG_m!DpgLy#MyX8f=21}ZGbW{6;WaeB zw8E#)s#2$VrR4)A_L?rH`qUosQ_E8IMtU*4XnxwU-%l zMAs3%My)#RR6CaK!#{v$7#uF}uuZ0;WCJy7G25yME8O8# zV{O|3-!~hrO)>xbw=HwaR0i07Buyk6${z!`H$tcD!ds6b9@M@Q1%sH8xT#vc*}kyhTK8^IM|Yxu72ck z!-s!|JF=bUjBz^&%8nFx65-Lvu~ic`Vk!HP)Ow~vS|rpt;~fMRU*E3W+l-9Cl)EE^ z+A#UUL?{lBl^7l+S~3F~N9VVl&q4$q2rFd*>&^ww_fXLMp-jzA`BAypX;FDjH-Hj& zpPBYB3E*|)<(2i#B_ftq z4uZi2xA||-Dvk%TejaG1r6#O;GvlRc*+M*Z(XLI8Sq~)?m(X)qE%B7cu$*X5TKSRY zEab!TQjAamACHuF72Xx=^iioDj-m+Q5LC}vz<@lRO!Y^lru<*6N?u}FADBbSUk{aZ zsT!U$SrrEK1vAzn5oZrh7SNVE$r`l>(4OVG!CcKwRCc#tMk3BbRmVE@;jW3&{P|S| z_b?-k^&R|W&T_D)H|I9(846%ZVNX1tXY8KX16sW39sRz5f7xsgw1?*N-9j%orH_@*|f?e3B`X;KMAnCFS6jLl1Al_Ta%p6?dR#U0v2X z-Fi5THq5GlH*o(^Qn|_VwYj6Jqp0c`bOA?@Tq{ z*fI#c=bKuIY2ImK!DPbX9zU1onCAl$D1(8xqQ$dMc9DPpT0kJ3OGSex)+WsXT#{kL zyk~mL9`m6!@qwsQNU~)~LClaK_?ih9p~T4-9_kbZ)gZVNYoCj*f*SP(t5eR~q`qFZ zQ`gIXCI(hWm3NM&!pOPB)wt837`J@yiAGc>5R+p*g_S~tNh}xvT* zV?@J)YmG2OTzrp+Q=o1OQM#1;U`;`v4bjiEEH}kskjp!M^6j?S6_eE4oVF2E4u{QY zR9+MCA@Lv;a04jyccKq25pM0KO)Zbt_mPMWVuf2H&N!Jfl7z=8Qix29?W##=n`TP& zHjQ9{IH7(2hARskM^|_aA_&gs$_Yd~KsUm)T>@y^4;p??7WiG0$W;`zn!n(k%r~H8 z-XuR9-95!Pf(MY}o~(=J059T`>D?@{9pcz&Sw!fFC*$e)?eVn*F{?@!J+R$byjGKx zF6`Q_mt%s~*68$U*&mv}Oj`V!UeU2r&g|ygK;A6m(W=zewaO{oNndxTGxNkR>e^C> zhHGJIsdI9n}IY8 z>Q$mm^jM<`ZVn8q*kMl+PrJD3ruJTv6r|B_eJPMEJFI3Tp~|U-Ivc*x4FPcV&R|v| zx$wH$`l&^%vk8h+UdI00;cX6xG7sX1?Lh;hk2EZXmGG;B{J^qrA`-~?9{>)%qjy|{ zB_LzlRDKh+;i#?SIbc-JV{r(Bl(;TruTli9iSfa-{(b7^`CBVMRvAFGnwU3Y*VMdy zB^((o{U}BU6`DQU+tD!Uh7KTs{KLxsnWA*Uh%1t3eokBT5g-NiGYhxOQ^cg9+qEGe zu+8P?mgx)3r(EY9KsOQr+WdoN>r=kv2ScE|{Dj#cdhaMVKbG7dnKSg)g31-Bd4W&| zn+p;2{t+X@bX%A$Ie;IIK0db90j`-=qn7bgT<&67~dePTK<56{Qa40MVjT^d8@)Lu6*KHGC_UCDs`89P+6=C{a61qSSJNs zESWOhJXtqef=<3f(I5Z?+ueO#Y7{y$0{ceYm%K2)NU=sYIqGOQ-|Jx2|p-rQtB|eOKIR~Nz!j_WZ2oi{Kzi0A&iLT=u96`;>Zf=<& zTTzFe*zDYJ!7nyfrqbJ3_YOcIH#YMw$aOu+% zK-7A$KRK2poJNHl|4O(fOwSQd1O)ZgJk zUO=D9-kl8cMNv8PP*MgM>QC%iq1``OVkHLEL;>!pUuKS;Oc&*UI6w+O&PtW4rX@$SGry8wG6Nwg4iC?GzncHnv-ta2A8eHc;MGi zD~rZ}tSWV`ri@O*C35@(3TfG;M%u8y<%_2(nippn5C#AbhlTg6M& zY@`jhgQoU1%iF6qIXsmO<;x`RTpg(ldKFGt1jL@8 z;zHaaiyDQPrtV6`#ixGTZ|-?cRk+M8A?d7KA#ct_N5^P2l1YFGxcSZ~Et+T`S`%7| z-Q~{;vu!3h!``aF!h5$2N0b`SggeaO3GVq$|xAm!?3z z19ZLEFzpMx1&@`pNJ>_*THRI6#39k_VntqHKQe3^?XXuH#({GI>RNhZv)tt);I6_f zoQ!o7KL}z9+}@Dgu2zoq$-mf4Ob4ZI26(ym<(|7@l1nY{?hxV+`KFK!5y@8u^-(Vk z!P;!TFin#T{W5#txi?SfWa58B2x66ASY@2>MWpeDMtjzb8-=FW$!4^>&`n8o=YObr zJ#XKWv$3KClYk%iSjt;yATxm(zgTVh%^JlOcS}K0p#{sCnX;}ilSqgvSoCQ|I{fCR zGZVijSx~}0Jt`fVL-HewRUC9)OPbHE{pu{tOT$-pnA+!j^;y1!FIrKWD<{n$xOf5? zWcxW)xyCoC&H2rRWRBlx0qm^dP&;;t_;H6yNn zY7zt3bLLp?Hl`A<8Rx{Rzp$_}vq(-}8djn+Bk~SceABf6mwefBZ5`%~SF``Kn5oXMuIk#%y^#WyjiNQNh{ z^QRB8CTy;*G!|+=320`uI+&y8e;w=G#M5^7n~(@Gj21v6dbT~kf{AX>5jd@3huTUD zLgnZ}!ZXyjF%8;>V6@5*a?+|p@=dn>r z9f^8hbnoh*lIP~Jx?xqeLCu^Ck^!@NWW7ZF+GuTDB57gAZpZG9p+6 zrbwBJ5kWRZ|J$(z#QcI}?i7p%yAJ4pOq9l(@W|O{fa1Uzeob~mkVH9+pI8Wg)Wyq= znJG9UB^_cr)`nR&rKd1UR4cgDg|rth>;D3%wTuM=t|L5LMBZ_3;`9M8;NbY`6eqvl ztaSLwP+A(Ld0ho-NB2%gCLu{b>C*#5x*t?95Dn!4J&-7KRV_t>G13^!Jx~%H5Vdcs zRk@!vhe5?Xo;{`DLoymu?>$`|_JP-hwr?RC-VE(F=pchOcccy8dGClWrpEyIPI)Y4 zgqzo05c%DTE9Jq1mEQb@6YBGlZQ?h65jCTrrxH_7X}ogtPRL#Ls zteZb9M6j|#rqCW>g2m7$_=CAFJXS7wVoMD)Zz4v})5z&##AR}gU7%Dd07sAGS*qQU#kMPi{$bRKL9F1hR3QhE&ul_ zbU;!hV^MdMZBh)v!AM=x}6v6<_y$IyKu*iSU8uSu!y+;)?kJ7 zIfMkFPX{{RRHUyG=(hDJ>a09G35Q_i!E(8?E zn36svS(*Hq9TTUzWYGa{6lfXiWj06ui7FwUOU#`IvNOB4aSUXrhjr|V_B^KQj@gFc zpIvEQyB+ttl2Yb54fx%pc#v3u{$s-->)+5G6dFxNP}dcg>;OdqeNV%~Cav}$L=|wo zBg1;3i5nH)WQMC+4Y>zWZ13l3NK#(-ZlULU3NUZExih!=(DrIAuoNZc^+fuCIxnG% zQr~cEHY5fG>3h&sU0yBZS{0pt98C_;DvErU##&=!{yo=nwZwX3L!x7J7K_cfA^es^ z(#)BkYL$r68Wi(3ALT`;_ij%em=-D|BT{yGSI!QTnYdcIQPP8awdJ|MHa8PIBU z0;t7X1Zmg94n@@*1$o49dg6qTS_ebor+nkPoX3rsa~0fY3`XeN!&Mc;Q7HE=l(3+Xs5}apUk^e(u|ifgs)pJir=x#H+?NfHQ~!p_vkvmkN#5ebDC#0Q zKnf+~Lulg|aQSa8+(L?E3!yGpMjw<}2V@aI{(XR@8ZcRtNzbrVuU2CH2)v*4{)|Vq zLzDAhuoT!(P=-gCMg|PFW4-$k%QA2o(gx_9cPIPYg~B*Cyk@<^lZ`{g$ zk8jfWC$CkQV;JQl!?%=A55EHNUHtw@)eZ6k;&@?PUNMx z*A5xwDn3(STe|GBMT6>#sDEW|ZF4eP`WZ`HZ+7Ln0lviIDyI!(Xvn?1wxwL>{mraB zi)RLLEhV$=Th7Of;B;P9l{*)eXIse1q?L`C0;(*p%%g}l2_N?Io=U{_YAf^ zmpjGuA*-is7oB8q0q#-gxw5@qOcxfdtIc=N2i~}Mt^l5b0KspKblN;!2?RV`DHkSz z?P_9yY@7OtKnX@fwW5r;7KN5iJYU$FNlp$AFsElJVTkTRSESRM4+DB2%EPC|5L*qW z6J`TsfQTK=0SY->4L-dWF+KB+6CPuPPg>ks;ZPYJz7EY0WqaNVa$J1G%f@+Z3&e5l zr5@K;5NU4_0-zDK0cfiPw`aZk{m~M)hN&TCC{q@pNt@ z6uy4N)03EZYj-^LN`aOW6I*tJc2fj;q#43ABE$;hPJ_%=Goh^cR=!&MLwMr1(mL>V z%b(DRt1*1#7}z^)O5F+`KQZzG3%M>C%M>S~y&FdgzK>7_X{N~K`4)89)3!BrODn$y z!9}uKPw2AEg}4Lr+!6GuW`mh|88TV(S;viqu;Q8m2LJTNvH4aiE~J^EO2s(6%=fz%X2B?t>qIgJ0$zWzL;lW@{kLi)b(x>oK9g$Hs_80Z|Y1I`w&WWj@ zTG`8%cpE-C?Y{JI-ce23a>}+@-)hk-O}H|G*RNoCZ}S6*WcCzeqrF&`WG*t01>^ik zuuthq1y&aU3H{-q&cMSD**E%1&+#|IA_Qns?PkCXLm?fB6Kf)w^e2~;byh2FGPVIp zDs72n@#>m<=9lcYisb#uOR#7&Aw{_=CcgxY#PMT3MAEcx{QP1VYWkhzfYK7EoX?l# zux^>_psN!8Vg2GPr$`0ii zpzZxQ^X?w6l0oOlG{xGLHG4!ZNsT&P&u#p%hs<18>V48Oc86yR$o&kZV7wLeW8n6? zY3v}#davY?*+P5T(=~Y29?$XrIqQSP(XHEeg0XV}*{cil zB4E1Jij?q|s@i({)P)t1ErWYaX(k0W)KA3M1#g>NpZIxn&zi?^C&NrPL}P=%c5u;Y zOOIaP^RfsViKVn{3JZyBXc?z4C9rg61UYOa>jhUR%&Y}ZKEy&GUxB#Xu=tl=V*E=$|Jq64Y%=D zNh+W?4bK*MO2q6a?W<}XcZHppCkYJpp^*xG^pKiEp?o^L|6Yt0e8&=WKGWSQ_MyRT z(P4;QP4nJ7>O|k)=$A@#|LeQPo^4FDLeS}Ygi!5HbD^eW*V0muT%2>FJcB`A3vPOp8-de1rp#Rm$QCf+*ufvKy^T?lk+)mgz^IT4`YXHwq$nCi_^5rN zs1ZP$DO*|!UWIR?0!7-GnRjTK?MuG2^aDkJ^&EDLUprdt$_fb`q&!~HiD#n#Zc1D(Ifa`Gt9V7(zY_f*+;IqwUbPK$bv(J zNP>~wTo@Y`(lQ=8#bAg}S*4Z{q9lk3uIZppzqH_t2t3D{i?6eFE57QUsULv}hbg>n z);=A5f|m=&CNRTi#;<{0R3b4D@IzTy<_)HjqkdP^b8NjKi9j-BQaHdBbM+d&Pp3LZ z2Wv71;To){o#Q-X_ZjJfY!rzR*Uj{r@p?uS%^prnm^f~CA>TfOB;81zy1q5)41+HV zhEkJv38L$k%;mgUTtfsZTuaR^VumuAW;1Gyl|l1rlf85Bgj8d=ckf|aY<0+;3hfC; znpkC>=K_xYn?%gaTSstw5>M-|@*2&kVNk1~8-OsMGjXk`+DulIyqKDo{7>}rQAJt? z&{<aRbAxuAQtDLPrmYJ=G*P?}$r%1=f0{`MvE`Vc{YDlI-aR23L9Z!n#q?vSzm8lwnnNo(;{u?+XCAa@Pz@r`SI;4Y+koXax1ppj` z3RYiXg$%v)P8PDKh2d4KHA~I-fx1*Hj z6{>xW=(N$^Ez*E@sz!qeiCS>>(=-}Mjq;(R)tUpm?Pn$QdLX>4o!a7Ct$$beDEY5; zrdB0jI{UYATu{B%c%I+F62SR@pxzS}sr|43?1ML%ZlZP6Y%)rvE4U)+C|BUlXj{8t z!(N?znq~r@F?=yO1znz{L=P)DmJX0F-0pm^idPx%mo(57%%|o`p?kvZr{Fq+bfCp= zhIRIISK$F#5-@Yz>oJSbWzf9MuWMK;nacXB8Tlui1-qy<=}I<$?|hS@;$Ks12h`6+ zKAbl2{QU|E_+hFc{uEiu%S|EYD%7cLWW_Y^?Q%fbL9@a=6Xh+-plqvW6-D9eaX`AG zhg6ax0D!MeHsvV4kq0*=fbtm{vHA}xhg2L% z(SIW~#dDl=)4f?2wT(O$HQyH*#lEXai=ecP8TmOHn>XrX*yk7EF&Vm+Ea^N|b*~)W zkBKshQNo6PpqOx?a-aMqZZJlj?R1#`z8;>z36kvNojfJKyNclTBO0t4KP}BGc?C!6 zdR;R7i{GtWpKhTjEx{Pwt9||llm`b#zlshe=n+?j1L5<_(`Ke}f2^CPBT=HLcfdv- zk*X)}Le9O_fX}=LjU3>0R`kLvmt~oi{M@Ngs#;sqLvzVuSULp-By}1ugF?4%Bk}+N zVHjqY5B?Rqo|}>(%~|7SVnw}D`?v{+ zyPr2@9yopnY|c4Gym_YzWk=Ym6Et(-PGWWKXY<`ndOJ;D7DN3oQ6w_opS>$HpDDpk zn&}uaCSm(kafd; zAzb|VL~Zyz)|`NtA){PZj9oM=R1jxb&VlowUR|4H?#IlTcZv;z9(0s-0RAyrg9f1T z+dY-r@@iJI1Kw3hs`8K?yWPGE3(^-NKP)M%WD4&1^znK}?p5{c^u`8;3Ze=t`dY-P ztI4JQa3Q0v7+-7m__@Efu~CDagMuTETSUoo_gBzfj6dhvX5a0o@Nn16JndLG=vd^O z3!cCi^nvp?EDU*7{-&2#LtNhK@pE%@JM-hL$DNZL@59HU{YWHdPQ%s)E91Yk%uX9; zb97I!hN!WFF$bU#JK?Bt^s`xxV6Z^{*{Ycp>pLrd zbe2UnY~G@Ki*?3ex-fQ&xHWe%5=9M_3ryTMACRm z*fY~JDcHlPU^^AC4hla7aEMO=ehm`;nt8>m@~U@8;g6F(?#F2aG>!V(aaC83e4hE6r_`tk0KP*JB^J{;~E& z!=ZqNkr+vRS>KkHSACu~l`&-YL!usUydCG#GK!ZPB!SBSjs>vu&|)QoXmfy@X}nb5 za-3yH>-@20{>{=_&HLS!_s<~Ja3TXGQ1)V(Et4kx9y*=NQJE6lu*Rm60L2WPysC7+ zo1N1HRlwl(NO3#VF<>T$AHwBD!HVAy=wHz=PcI*mpTo9fd!6=`Xqt|1Hc#iY{fjoyYDCg3eTeIzikj|x zwSH;0%18x)pwVgJ%pKJg8^^#vD526V?2VVz#9dsRCSj*Utm7)9a3`1eU1;GT?udw#liN6-cZ0GuJIz#G2b8f=v3L<_Q2gH`w7Xc&vEQczCH(lU{<{ z>)ngU};W}=;0`Tj6cCyE3!&d{~*}BeWb3NGuK8Rab70Xt?2$&xv&di zaH6v(4{Yq=;K{HO%RnP(fvp1)n(rmnJKGdk*L(vJQFkLq&pl^2Cg^l!X%Uq;T#V{= z5*S9uUwbH8E8(I2TggV*#XbAGk#p3eR`HFGJiR#(QRr}cfxkulL4)h{`NYqCHZ+?3 zDYxrhry-fxTTj%oavSo)z}X4zrYVR79ijs9*A)2I_*BFsK`$QtpzoLG0CBpZFCfJ9 zkDl%p07vvQE@1$=Fz0ae*i;CB&XQU|Q+uv1nto_HdnAkFfB?^s6sH%xC*5W0E z+a7~QGj4q`a}z2)FphYF|CPYZ1UNGwC0WDbUykmhA&*J5M6VKQIog7{C8Dy%^fuk;^ z(hidDM`gMZ;)VCqG!xb06|G2DM^e-->@CFYuUe#E0PJ(xC3PXfOyomW(B<7S*z}}` zDENJ3`~ib~Okb>d8cf-Sl;DHWe4@UpC5QML--p z1{djS?SpxiXP{7Z4N2TT9Pslft6j3A7N@YULAp!+N`5^U#65!{71H=@ftSZ5ui}U2 z4Zkp#qlBd)109dPVzW_Cd5(+}dzXw?y)KfKxc7TiKeBj-KwMNBye|x$g)KB9gC-N*3_7|$0tw@*aj>&cnU@CU5buONlJW(1xuzY?c^wqd00DPg~ zGWY-wi{*fc?|cgbaG&2+H7^pPiHJ;WoHtXr^g%q7yT<(0)?!Wun(%A<2py44qTLE= zF@w+vfP~jJ+teAs87Bo?Eta;&DFLKUa3CgNov^diPD^mlEkdn@-ewrrWk9TN89Ji# zN5zMG@dXPg@xf1~s#i%C^PXWbHkRdR`cC3~l&ZdF4{#0E#+4N-#;3B1KLwrmY+4m? z@!Q}tY>tDMZoOdQ5XHo6^6IZpx+TP(1hAV2+~xdo)ce}B_w6aQa!~hQ?*^F-e2NiC zI-@`bl&-b-JdcoSF&6n5${PY^;|d-uWwi*A;FOr{nLrRC*ZjAq3g(uZ)}v>3kMTtD zuCa(tric)Ee`2LipXVWoOLeWfA=fNm5tW*Br0+0GnQ6b!X7q~{rsK_E;hel}Fq8|3Xq*}U=+L*yv)-=i z0gz{u>bmpjaNi1lB9%Jros*PHCw+$@4g#WssW2Ey#S|*F5adm_lS%P!$!kiuZg><$ zFH!?g-+CK%awp5@S~TwM*R_GII@T_?XT4)CX0U5XzGb7Z%~l_yV{(Jajamp8k1?NX z;f=S;lddWCbyWYyEP2;o+|Y!AdkoF(#!8iia|%P;v6WeexVFRgl~bX&d_j&xzhq(t zTj;jA$DJt$U67R#%CBh-$vRgI#^kGq?c>?Z;GbJ5(n(99?9z_tG{M(WUxO0IAZSp> z(>ml$RFaWo6=K*3KoKprPLA~~u#3H~T1L^^-|B|Eyq~7O6?!wpS-sOye3Z|0HOq%bXXoZt zUzq#dot+hK7asq%=BtN$4@2%}U>O><0(MS>=zH80&9p*i$6j{~A0RcG%gy38+66XX0OD{o+E|oHMX2yM5Pp!fwouDU)rI?QILTDj+ z2;`BAh?Bj=<7In@9HIF$;J1IcD`_WQwhq0D{pdBP+<=kKez;-|mAi-sFqU8ICZM3n z72LSx#6Ej60D{YgW8P3cXxt7UhQ6mE*pk}bR9-=A+rP5xvEX9xUs}i>)iyqDD9RY@ z!3n&!hd_~Oc&EN(9GI4$;8ab#U0n(?y3D))y?rFydl#C?Tf z;h;I>ykC!OO(;O@jb{)KS_HoTDf1^(*NQquJ>@bflgI$;nLE>VYAzg`w93iY17fq| zov6)?a1*WQhslJ_ylv7IN1PjYd(9{4^lbpg2Fh_xue&)5l$9L&^V72Z%#St(B}H~9 zd7ycBndW?M%kQpx^(AaL0P`RZu=KQ!eddY<*QKWj2Sxw3dJe25Rz4ry%S#%SvvG%Co0UuggQ+_?XdjVLp*@?FZ)O~ zJl1~2FoQie>%VZhrxF+j!4#0~we4d_~tUZGO70Mr|?il;GF|v0(((pMg&z{)U*7 zwAf;7YH%BTmrgoPGSF$0)u`FcFH>Nd+g1hip*sy2JLd?#*GevWm}moa+b~P5XvI3< zSXueh638rc{VJW19nv|qx5nVzY0YFpznR|yGo83c6#g9w`C>epKNNVq*Omu(Yd~B} zexKi7G zQeS!q z@TY*oxR=$@(n|q)N_L^5OW-E49MFclXIGj1o?`gjO%G`oaSRX_deLYX8YeJ_x9?;o zBuTjhCmm~AwgjzU+ayUXc(J^%zTjMsyLz~~BL)|`T9g&QZ@{63x$iow0c57KJQg0H z`wrnD{VW<&9o0diV#Jd=7zaC7TzNDKa$6xeO99Yf)H-79@F%fwKHm z%ly$r4c=rKtuLwC2EpP`riNAlL2ODNWUH(4600P)f4QuEB4{t%_Mdrg#Hb5O(UTdp z3u}}#R)ROkIV>wKu#^CI_%Tf~w0=A)lGN$ZBeJ#|6f~{9#i4EIWe0dGmv_yqtE|AP z_<~(zl-v<6$7LSCpUKp#ha4eAwO`Y8%|aI%EVv*sWICCQsoUzxm66cp6xo*JYI8{V5=Y0PE?>Z$?D8{gw)qxe3g1 zoTKGet^{@+rnQCp+C9G*tKsc-Fltt#NnIbi`HIgveIV=m|t}cBGwpXU}jA3Xj-}>wsM;oW;;JV!30tyCC9d15@7OgRa zS4lAD>FFU~&RuCSnR*mU8b~|1D`OAozu-}ZY=xP~_MdbHN9UBle_gD15S`p59da(a;^{cXs?y5bVSknsO#1Kprd&8ehCMupuOUXmWCro4as)sGYfQFyy&_J%K~dn#C+DUdwsDqw1~gby z4e5XNBU?^#r&nxbTS19Upo8oH!LeLpDv7JuwD(?mXOy7&INCke?bi?bU1p!@=7Hx$ z96QW_jFsO(;o(>4VDTMg*KT=~8MeOPL3&*?Que>?s(|I*7i4tSL!4G9c@Z;AHn^AC zS_7I`cEmqxA%HILW2^2_Pq16N+xHQwV=-w!7}Xy#fdk38SfSy;si$0vTn&p1I3r0S z{8y31SN(iCR`E~+hsmBM1L!r?F{1+WvI%h0`xf^zRB4Q+@pUNs=P-akCu4%Wzj0wK z5~GyH+p#=u@l@BLNS)@>oB=y;O`Cz)d@r__*6z%UumYHGhItmw<60nSM9<>WqU@8x z#7VPQ>t5y$d<5y$gXU%YN=i=BAd{s<&eVf_JS>$rf3!h^Y105Cs`SUg0VoFn6$J^U!TVnDISCZvMq{08u z)EeMTV9wYy_QoxhTFyJPaMV?-K^ zM*{0Mf9c_pY7Fj7>jU$l=FPK~0k4Pcd1JPCEMPd39o)(-OWT0Tyll&g08z&*+Hn&+d%nOn#5riZ+v4{MFjaRH0t z%|*Iy(ngTm0egPdP`?gmcT+qGcik7hH;cR$sk2vA&3NYuAq zXY!#lFdRt#rB`(e7^xS9#I&>Y#YQN6f;{fb$&#S+XG-!Z}!29kW2Tph2p}O z#&KqU2$mcSolqc<=YKvcfXqpwua}GQ=fB;q)75X1FPnt|0yfFEd-MDD z&B*-F#p(vHN>VSBP~6D>mfc$|{Th7d@=`O_$l18BV~L`>@@@5YAkR4=(T@G;bV&$c zsrn@UPqoi`?imvBn;^XUT$?Tf<&aGh+W4t%1pS<0!g<7o=jKa6q|TS_^VdnWC_$yT zfStZKNkV!l+}+@{>d(a^^QDEHYP@>sdKg~?B;*)6;B$y@<)$P;B$ZYQau66Cx$AF9 zfW4E)Q&s@oukUR?d$v;jGq_#Umk=q~ZSrv}d7NLG9{rzt+hwsK`WZK=D%WU9EOwvW zm4k)fipJFG4%4&x4j9yvkCxyv7tcC-=DxjetuO6p6OZn7I#hp5F&c#LD-=&%;%Oa= zIS85@hVbhAh{!1#y=ZM68iKW9Z?p_r~DSY(K>^)$P{ICqZ_JpI!0b6)nr<~J#a_>;VSY!h8L%ERgV0Cn^G={ zQbPaGw?^2y&d~FsiOmx%#vFVI|GVj8dU`b|dH|@es~(P^#CUqy#d*l<5F)E%>e~ir zUS53cQdvf%396*%;spBJH*KeM*EN@oD&8E}{4+yX#bC$VCCv>dbO@Ui(bxIIQ|LaU z*9VQ3h`*o!6c$d&_}B>?8uSDjD#ew&bxXt?d|OG=EbH&lPezc--}bzqw6J4B&vucQ z*p2n2YB{7VYZjEjx4ZHFa~0iU8hah%@CqYuBh7oEtMPkpS~#|GQaG_Qmt4*iabmn& z6b{T1bLrk*k8~Vw#F$zM?)nm9&Xprl9w`aksPBBCu;oQL=mWAN1aF(xD8|uk~wIHKxK{c`yki{!s z`eBJ&WS>2>R;L>~=5nUlbzp4E6?cu>gS<;X2<9)k{0=Tww)~bKWJ-@z-4wQTZ0tbp z#=}}2-(2!aII)A`=~hFEEsK#BPb{@}KMcXz(}#AYu=A^UEruk)o%Y`ZmO^#Ap}?RC zlRU_yCOYmn{*%<3WUv{gJfbuI*k85ygqLe#R%^YZ=kY%Vg{qXOHV}2Tv{kp$pLm%< zjQh+}VA)kT=-3EAu^t>{vSavul%cE*;Y<#_lahRNF}C}kR`h7A%)w!r{2GfCdH))a zcbnf-kq=JT_>?3P&eO66QLATRU{rE1-sZ4VFkKkrirlR#suCD!$L#W`6zj7wg_#;G z!dif2ZQknYQna35je(E-NQ92Tm9@Gjh^ZUo*^@EuWX7jN(jXM;#hqqDY?dR!L}jRZ z85QJ!m!kkWf-wU=QFf<%xBZ#wB{?g_a}3y->mpJ%bG?A6$ZFC^!DEEX`RZiOwz@=e zXw+-MbMrqCuYybnGiLf`j7h7;C;X;$i<{7K&VfC(6IKBX%1Lmj4Mp0=I;_nz`IOkA z7pwr&qE&|B1ztw^Sn+zrzT0oF?tL=IG36LrZwHbqMd~^hu*bzFEX(A+pwG<2WBI~# zBlxA&lsOVI#)C6^nqf7&ne3K(_IG&ad<@`+k?Qlm|^NsShyDT7qH#6yxD2|0{Mw81p*wSLy8itN*O7SOOPm*67zZF}>@ zX<-|+3A|UjdV6PH^O0_d1R8`*)FE?dtNa*o=wnQwsTBUHDw=kF8E4;BdorrmG21<(F9so@Fh>zV<;b2 zI%%vjzR|w~?rH5cbD2S9fpN}*>+KFqw3O1Bq7S~3xqm9kLd%3|Y1}zXlY@v5 z{eAO>w_Ja0^k!R(VBIxBIgf8J_qYZ619IO81Hdp&riz#xjMh72$bO$6MrliBMsvWL ziZ&n1|Hi-nC`4)Bp7wvZLDdG!FC=VTl{VWka9H-@$5;}s)eZ$|0n<`Ca>ig}8*)U=JYMmc#itu0+e^Lps~)R-L){%#;QQ%o6(uzxMp zU|SVynr>QJHViHn6^(p|QFXze$5mJpPI!GxRLKy)oWGHx7z=gk{?Bam0znu(PsPvWOB283`ev2CLWU5xXC^D zbmPyf=b%$)5uRy!PE|*SKE6x-u6_qVNvJjbYR zM{l3_qQNtGS8R-?IrJ@ihUa8kJ&wv%-bzoWy>22mK*w+BfgK({4L+{TZpP5q#MVa4 zf;w)CV+k2|5%6Tn%Lf(RC|c8)z7u34xq+Ga8Ng`G;dL!sfq?_@rCB)bc~bK626W4+ zn(A)leN(uO$j&aMe0r@3(vK0t>;#BM$FQ&^;I;aGg;Y(wu>iAM#SMXFo|SCS%qYDp z%Hfa{mhKI)JPWRoM6F5R)a@G~M>CV*Z)AMT5&ur2wFVns2|CS&S{E62WJ`dGalYlE zT)HE3Q@HI+`iQJ#-3vOhUoiemr|QR2fyo1!evhSE8hU3bb^>bK6L%f%G2n9S!&wOd5A0uLcI0CLz zG?Po$Y*U~($JY<=$Hm$JVcjvjq+Y9B+Vy#N4V{Hh^wyeaq7ETXNvh9=L$bxq6l2Z! z0y;J8htuZ<)Lq`075CZ&pjm60E`PzVN59)TyEm=UPmD;^J3VGYlG{>uv0wCm!UoyL@ER(l`TKIL%{txWHeP$ad)Dn_^se6^x z2^KT?Da41xUui|n9LrhAkkQFlhww~g-+_meTxctIWL@6ZiLuH{mEGxc8Q2F%3jhK@ z{l901(I$Pun>>tv8RU%u(n!p<-112Hvv}xgm@(VMH>_f44os3M$8}-?prD~(nnu6& z9gWXL4}`F}3|^w3lR3oX!Bj%j`%+|T0E>?1e*%+D8uGExeDBg@tqSI4=AkaMIvj2^ z7V1&g=`v^BQv6b_JcB{y-9Oh9-)ny!7Ai4bfG-G6|myXZI$&rEr=C?rQPZpf8 zg)Nh}oSOjtltXsuh6zeQwcm%Yn;VB;V7JTXgbq0*o$oM=su>ujfB&}YyH~?Bcx`i; z0(61Eq5RQ}YUX8Z#+gpoU?S4#FHTG&N9YVQjHoyJmG|=_XBN7;-t4KjXuupv676@2 zvka;r!*_wTq;%!+LkbG@Sm}dr6wx9}4YY4L5Sdj6uI66V?5Eq7PSysz%3Ks1H_SuZ z>AY63ndHftc7n47r?Ufh3-kWM2Jo;)nojlW5u|*+>zG{y99U~w?mCx{XzytwZ|4Cb zNz-`(u7mtXmvv(A_5#j`k@xU5O)oB%1y=n?1^fJm>3mJI>n<018M0yI$P zYN#0pl!%@Y3X+1w5S81t6IRR|qiV|PL1(_3zTd^Vq!5&&db7zwiShO}g0Y#l+OW!s z3_79|LpYM2Ni*~0vQ3_6_(a)3i@yi@LOOO4Us+3x|7!)q_l2I=$FRlK<&mg!72m_l zLgn#nl40mmJP-DeJv@r{+x1`mjL|gu`)-+B&Klm^#|*r6=i*?F&F*m<55yC1xPJwD zYO<^FMRm4j$-u% z9_7msb})^0C(~V&CU3Mmzb$i=V@X{miVv;j&w*sw2%g1xjVZtvdG!#HqEI5EF_+(h zJ?2KPtHgoi)SG}u^NeS`f4vxr2QqutcPkqaFbYfPVs6XbiFeNlJm7`5usuiR{Cr}_ zH+P};-~#+>ysa$CTyqkp2c9%!C0{9@QcRFT%LL6%ocRPRbR#J;bxBm2KPM7! z$RU5qcJdrQ)&UUPzCpn5zL7xP-#tz#L*1o{6y)Cy)(aYtdoX6!I8jMfvRdrwu4|$8 z`v->ncW`dpwZt^P_rWVmo_Pc7J={SSOn9ip%)dRhh(AWljrP!Bhh+B@0BY)qqUNvR zgF5TOz(WxlTQJQICvY{KfTwy;wN)HSlm;O>^IdW@@YR*ndlu&>IRk2!6yek6uud~D zmhiqJ4jsrO$=pg+Fj1caN;lZ@36V#9%s+k;sU7)%L7tF$y_41sFuQ>P-_!r5I(tg~ zMz6h2iKj9+5O+1({PiVa$_jESTrynWv6FN!mBsq73oX>|lcqMBk$&S5!4&jJA?8== zXa?j&j3N|@&@?ajvOi0CR8FGuCJnvUDaKN-W9`Xy!$sl8CKu4rdNyaPSM6*|D@i_XoGveos zPPDA^I*CU0aXaXEI76sxB zbT8lwCIVSUPwKz3CJW_=5No5@JcCQ}%|pXlm9rD=){CpT zfH6yXhd6$3!d0WDvhx?t`|-CbR5dYqFK2*NBT>`zr)j6ZTeOT{Bl=PaoUKx{{+MDv z_2g@p=U3^-XfK4}dax-H9^=ZG|9`4(#|DFm+0Yqq9Q#>?Y-2|b+H4o5tFZ>@tT`|3 zHvDXSu5<$Jr(`{nD$cj8h>o8_c~gqu+E5vaiu5TFp~miwb<)>4K0!us-+Muy?ltt7 z{-7I?Y0weEdZwaH04|;B;A%O23i_sZ%m4`DDst8-jtY=^={%0@_+tz2u|I$(w2p!@ z1NW2s@ZX#PJH$Iq@D$RPl0zcqGdu~vbeGZ{(jO?pqtBUIQ zdN$@&*`evfKy)42^Lx@B{>Mn@!|3=^4g+b+>qg_-(8s)j-A26nNkE+T#W!kkJQ~Vs zA~dStVS(eL;-kIP+vZCA9E`?Gu|@q00nlG9ct&K(DCOWb((estzsWpEcMJkgf|lQo zO?eT>R~L#3L}_HO<5hNl;tfU=Hl|~rPrk{FYL5VWB)-3(Y>+XGJ`U0vZ_-gI!wS#k zSG&g_{JAGS&Jy6LKs7=upB(<5aLRN;&4_4~JO#VeUy*NO2Rxv*BG_oxw2Ze{Q;I_F zwVep}=t=t$M2aH8Ul077l@_WK4V+0hTsEQg4!c>q)ZNmqazipnvJiG*{wj%r7xQaw zD6~`sosSox(HZI3Mfb}U+Rq6n=k}5$*I4{c7QgsSKg_=Nr>N)4(sPAUyt|vsmq%-C zcURNjj==s|`&V>X5vyiTp2Ql$_*+wf>?qz(uIo@Tv2qoPs< z@|pt4swj=c>*}sHw_zs({{`yNz!k0-U#HgT(#q=9&!6YyJLDOZjDqYgdHr+smC!K~ zk=hb@EflKh7rt70(6C#E5Zt$1xIHdzDjYWbJZ)&QLW_|bArOb4jCJpx_Y;DvfkG-% zdG0Okbhric$PN7Jzr2yzqEFGlc{AQF8$^nkZU524(`L(#9@_Ytf(URKR{)mVB1Vmz z8|V-4#sO*1vp+rYmnk;NVKrV}VvZU8bcOQFAYyJ_{`1$%`iniXY#3h?7q6776Uw#` zYw5WpR9h+J#xGof2;GrliD7xgXs)n1HxA}6gCDAp!k@kvvO~~ZR$KMp<7J4AwOl3y zNK5l-yBeNRpQ&cc)9{9vIC&^($x(z4>32zYiom+16Wq>&OWlyTnc&H5ihU zK(%;e95ISbwt^+WSp8SIHCEMhpmZJxy0N8r*!M z%ii~4lQ$DMuN7)f<_%3R{>{kp;rJ739B3t-bh_7O0U_AK`!0^-eR-Qh5)=9^YVnhx z(@D-W;s(w&Yi>S*BZe8<5N5<&y}?jlX5^m3>Y@Gg!y)!zl+iKWUw?2tmF zXGQOwVIUklHpARB*Mxq#XpqlZ<`_90$;Of;_}ddLq}5amONP>2KNhe#4~+K~Y8`1K zu8lx1gl$kN^Q%$6z(~-{I7~Cm*Iq6@IGO&O9WPLoXx*rrql+Ly2rce%lSm0|QMd;C zW?eRZ71YVH;FV%UC}*=M2#wzx?Rfr{T7?90HlSVUrF4{KY#Ns2j};^4+l^BBWZ2nE zrUWMEo6+A4jL?wX0N6LUS#=f{>n5TVHt7(a^w%MLw%Q79I!;$?+`gG${Q`+R@{F0% zSZ|XVgz?)#@aJ_}y9@=)4OTjpk2xLsCc2cr9dIh7K(DF|NSYNrz-0WCx!cH|h6?ro z7|2hiKB*x0XDD>5rwnEz(0#szwctMe(FL5`3Tk}>S-Fwr3pAHY-asMhK#r3UuTXo! zad!h8iS4vD#@!4pJHn$$IuvkH_@iZNh48hx=K*QWW%jfP0>at=m2VuD$m)8O4*d}| z(=8_qdI)C}tycI%Jjz*xuo+H<5d9ghlHr}zO|;YZBQ~AF8?(%pwT8DxdmcnJWua3) zz9~s%@Y$Gh~1)xRDI5#G$MT`(2+ z|Gfp5IK9wQY~>M)UaZuwv(M56MOd2sc{)qZek2@5bZjP}LbpkUny)rN5Gtjs2+p$d zjU!e;^uMf|kkP0$?D@P7SqWZuhRud(s>m_Xy%+W(yUUv#HF_Gf7FrD?sC-XbvczkL z=j&A8-z|2RAplfLkoNG@D*)Cz;tAwXr9U$;2)GfYQ5lc5EWeHn;EBAPNPInfCh~+o zL%6fSo`1ka5t8yhK-4Oj-Y&8+7EWi5kUk?-UweLT`ScJL-RigaLPWtckA@I9?kS+= z2}`E*`~+!(w%+-R{@}jg+oz}hY0$4$34&0 zVDZwYOPugMa=*OuzWgNTc4Ts_Q80}2Ay1QQ+GwcN_AgXw5|q;1zBQX_QXw50D5x0* z<%M5dUu>_K{%7lbr+b93rp?~#&?$aH^UqUA-1&vWbGU=Vt~M(TwT9E#Wle*=r{_kw z9Z2csucm#8pTv(EaaaGrN&w&OqJD`V>&5SWZ%t1=I0(MMbb;nH z(tY=}Tlv!JASUq-EH>Ja;tSi28K^?RXepbPPsmt8#iaWnibT4UN;Xz+ocSjZEMUKH zjw|Sj?|3^hxjF29dYbU39l2Ao8$9A3SUTFZKPK6}X$EXTa@nnkIPn&E( zll~$eR}8jb4*@n75aByFV{Q?3e33@Bk|iS+>!8}x$cFLtpzMH>e@{hp?2|v=Csof( zgC-L7xX&22Z2noRQQS=&G_Sa)2=;FEkHoz;#W^VgOgQA%>6c)sysHwQ*;JR%XjU>~ zOC+$7&fQ^E(zo$c&Yk!A!q78J_|8T0aWK!r{DP4dg z)k(ZL*6G-YmG&ib`HI69Z>?V-=ze zgLH-f@udR0Zq2P(NmVuqi~DVx=pCIrg0mX!qOdPWkb-%NuIxI zJb`UOpe0~w3^B<+H%ghh%MyN+#T!SSok4xqy6vqjgE&$*R9m`NOTTM_}Q6Jz6? z&7rhtEUEZLhN3%5@L4PSv7{A-HZ>lXIkI4txU;_A<1qF2YpgY{ns%Yi?*WzUkz%+* z14T&2ry%B7Bdi3hNM{2$g;2^z1ug3&LB$QTY!DIaCfHO66{S7r5icv0q zl@+YqzGTAo+1%=92z$N}pO6C-`-G%0)TOtBCS3o3yByRHZ$=qmH`%dn7;kx5N7q-% z4yZ8KV21*MWb+`h9Y7&O-TC6*)TlP0>>9CT3R=tCL$Y&26G53YBN4%BmrOp)$ zC#3c&y^KnqupfS?J&%A*6K}C>mn+zwxCGIB8WGuI!&?d@SSzwkTb-NasE3_+rJr<@ zz>9Y`>IRxHMsM0-O%O#e$P8vjhd~&OoYXNogZ+z_5Hc^OK~i4q$G7YQ8xyd@>n;r} zo2JAx38j~v*oiuBj#rB_6qFQXN%dL)g32S^A=clN&-mI>1hyb*l-zpi2A?@rpErkG z0-7(VjGSx2`J1uHl)TR2+~>_B^cl3SUUbU#$gDNk>*AYdVY}>_nzKNmugPgjhxK>+ z|B7w?Ll3Vv+{MRV5TLxX;*P*yWV&n_jw;V|kKk6}D>| z?Z{08c#&3$kNjBGcvD+Sy>J~@ZSjj*8b$8{Bmx>d11N#TJrkNSgQnFUeY;l0k^-dF z|MIe@y`<@jGxaCJz#7QIs`9>96I*(9>1~|HhUQOY0+>Z!=P8F#Q9$o07beEU>E^^! z{pl22J!-s*XBJIXQdE5>3JjylHc9lsl%)lkzhd0-IxYJZU$V(vdKxUAwCaW&hujk0 z@HpuP0sUoabdcFF*(lnZV6){Gz*b!|V9EW4;m6U=DP6jbxC>g%Q^$WoBL^twsXR#M zWyjg(LU-nk>4p0ZkhVL$?*+Dw4MELd3g3HM+t`rK_Atl4$kR**Dl3(%=qcO=MGbf< zV4W~FM+4;6#kFwv$rKNI87DL7`>n6n>G;&!Q^6BOFefmoe#jaA=3P8wn|V_->JI%q zb)u_){{~EPx`Lk-FaP!9XsvS*HUMUc??E9nr{vW%+SIH-6R;*{{TqNwmO1p!KQRWd zhDP(-qKf}>%5g@!CC!-?l7k!3tieH1HQTS>xGUPBXrR56h)SZIuF^QEFZC;61z$B# zw$16HPamnp1i^kyyvGxxZK%E|AuhPrO(ua5(d%6Aqm)EZGA_iZlSP+tRH>YCFnm7#j zum|M3S^N9*KqhbC7HR&4#LPaYQFlX(LhXElMb4TZj5IM|+=D)mRHk>HZ+%dwi#hpH zZ2AiVWwzl%)tLXHtChxfYSyhphq!7TK%5no`X;!#D{}yUEQ49HuYXh_yDwba&B$Ri&h_1kBs}3wUpt z-=9gw662Y$j{QBV!T7YemJr14MqqSLNxHwdw-aw!x3x-&kU=TU+>_^ReYAdjHVp9NNR))9JCU99Poh*$;Jtp4xoWZo74v|PJj~4X z`B!rRJ=MiA=wET8f~zTLjVe5;7~UDa6NPz_yQGn&1Ce*oL;mBn94U}!+*?Z;GOdg9 z#j>ZxiVHXvMxgCsW-|0$OdHI2S#$@;9E3T#a^NSgOo82s7-`4*q2c4B`HW{WZ6cf4 zwJmTVH&eBpW#ckz&B@vTwwQyLGtJ`wXW!UZw81_x+q*%C%x))4E4>SxBTV6h#TQHL zZeZx8Km1ygStG$<)C-ZT)L0gYh^`wANy|#|6hq})MuLg^N=(OiZxx+er;~c$pcxW@Fg1C#Yb`L!u@HW+-1`1G?HCL3p@RKC!zjZqfIj8hILMRseDCGi+fcC|7Fo}09kUzNox;8oC;2A;p#oN^Hm}O!$({;-6$ga!F zZwxhfV;+w^=f|%salS79L(vX=DuboP84Zo4?O4S;tj(eEGecHYPj|3W^hpn^TR4<>pF7^}?FZlxg`&KA0c)MX()z?$EAwU>Yp1I_|7D};QF@&H){i<-$Uu#}p zximybcHL;pK!ai1PIGvp$K1s6GwqX!Qfv&UE#KQKeeGs0cZeRUQM@A9h=xa}(bcQ3 zDWYpUfJ?|4Dr4J5rz<7{H~cwaad$u_uN=Ez@;uSgM!zk+cIt2Dq><{$(iF%y5L5+obrWg#U*T3ewsjhDf^1< z!v~_%fEpRzlUz zt|()F9-gF)eVa0817O9}Y<9Ka9M`RX(%etHjY?dBsX(Ft#+8}Uhrf9ui1+wc79Hsu zNL%DjJSASS&_(%g2Q5(X6AoB?XMorI-Bl=JnO>@){4Lzo+T1j`RNwiu)J%~ zzwA@}%Sn*sK%%_1R=q!x0k?&rzeEGl$hez7Y%U-hB^>{Z(-~&-@ZLC#czn7^$H5ii<4}jATiNDgoz(lQn zxLc_1MI1~R0guyfpy669bRfOcKcb}1OYrafn)BvVq403W)9Bk%;@`_l)>$AHiZY666p*F!89unKG4KhEoQG zmGoWyIJNzq@V;No}^QuN7o z0Ez;!<#OYh^bVL}&m6_8Y!5lt?|0YyI4It#ZokE{mvx|5nDRnO{i+d&CW8=He;Q{7 zLdFln-#Eft@@*RmG~=}sghFB5|ApY+;6hltz5zn;6rcZylk*ocP_wV4rsiedBS}^6 zFuez|RaVA?(Bt*Jh}6PnkJ}VvE#Ftg;hPbGBs-p-cFGJ@JWK=c0^qJ}OjbpE9FUj+ zo<-ih?d@C%vMo*@hpU__1}NF-^Arjw7RmUPnhVzG-; zisBdBHkNy#l2{vcR^8IRkew3d_!BkA0(Ppg>QVydS+8Swm~2Zmu7z5kMs>PcGzh>9 zSSDfKI1DY9^6LaYgmS>JMUGZ1TmFhJTCU%AT3nPbjYqD`b22l;`j)vo zIOup9TicW^os|)^p)}!xs}@oOK-k!{6R~5QC?M()fakqp6tHW$JlEa~6N+O04}(o9RhTPYMAWz78V>bmi+-SZ?^aCh2v=j~$g z4yiz1+37HeOuCGBiG}*oL61EW20O#FVG~o(U)C{WF$Io5{+2C%+(tJv39`)QX8~2a zeT=y)x9SOM-IVsi1gmd8XmJbY{LtU10axF05+(29#yGhL@O}ly&)fj#P?J?LoS1b98x=&hr@Ppsf=$5%JSc=1VYfy5nYq?9hf4=9wy)ZfZP^5 zI8A@*-JGa{IRX)6O?x&rW;7|d=!(48nciAz7UfVfA8ljhi>KlVh^y=Pxs5XpqAp;3 z2WMWTBa1<|6LBMMlR$nhD<`Apv&H$>Ryis_U_HkX-3=^+e}_g2n|tUW`pQ+P30Xv+ z&}iNK-l~>%lU@vENGRRTWEKIzxeFN`GCULGATXjz5b88@Xj&4q5*~n!uW=P85-#Vr zij!VTaKH1NzbT#^7nMk3X(so92GU~9zmU$)#wYfw?owbsI^gs4JK9)hsq4AuZ{np!b?~;yuK$%7wYfG3tuK?2cf}}~endTy@#?yjr1A%i&}x6hdYF5~e2t^E zJZYlw4Dyy%qnyamUhfrBHI?wj7F`(ih1>pdl!K;* zRpjC*1Q(dFGjvY79JJgW7yr>;cAt4Mv!mP4d%z`u>@%+kC_CtAq@aAXdV`zBm-72U zbW@W=MXJ;i|1Nn0sh{BO^uyqje+S8liZdji&J9}cbunY3$eR#8%me`O|g3J>apcpdN@F~ zB3fjNxKd6T;(M@i|d zAYu(S>0^cj(L2Fec=xr)*<^F9AR$vddE68-<3|B<{cwB!jDn!PdZ;MMR)NJX!L6ku z#B$^_3;f!*B=8!PzsRouRg%ot!lw0Lz^42rK&`yBzD~n@MnGSt<9xG=2i)3J*DBJg z4TLqRfp|}5hjIh~saVZXcJItirKHrAUu*0ICQ7B2l1`;I3#w%FrclV)iGtO1q0hlS zSxLkk{|$=OBaS7E-qC*nqAp49v0I6tKt0y=Y~`Oqd9R}Sqs`hlm7aXuJIk!GB7MCD zcGs}$;V&hS=70j^<+Vp1%|=wyol{JS(UiZm!v#K^uC`JC#sxIkWmHu!sV}B$79)Gi zLB)Dz>5mE0@o@RPb$Cnwg{OQF+v+B?OC_PnYKi9aRg;=2yqkI(!Wb5FRfYRdnKinA zKpa=$lJW)iOq5rq&ygO*lmeFNq(v96TYr%&zSub~nv_jamt(FFd1kg7t80DG{ z)u&enjZGiFX7?a&5b zgm%Mx{F4QKeub-80b$~~xEIko1A+C+ndy7cOWDAU)%xb`Zprlr!TQpCqKd}2b*|C> z?%|0V6pEVJmwll2@u7tMA<%4V07%gNt%?<%3Tqo-mziXp9NR8vt=t>+q=l7hUZ+v3 z{Hu#nxk4W(yZlH+2Sg~8Kqq|xbAyBR^g=7G(2WTGtb2DX!8w7Z2Xn|E|B$0t+YHu& zYGgKLXj6FyaViw7tcuYoLl?L?Dmo;~q9kud%KLGHrre{V`~xoUDf_;yx`7a(pP|aH zibn*bDz|3O?qt=H2|qQFqrO-*=A;Kdv)Ldvx&aTfr>#sh06lq%l@fbt=#Adts@Wsg zSVSl8rBFIrP*2{(P=tQ$>6yw4oHk1iF0PqLyP9B=fF&kDh$*TdeU0O+`>vUxhzp4n zo5(mNx8)`abek&8INQB29mQ5~s-)eT-X*+HJrSo&=zHoW6oz@8Kvep71!jT%PB?L^ z=vj9hV|%OOL;N&aSMquowGBLH$Z~Ld=c#oivl`8MM&z?I8;>SgXuBpiY!fG_?j01N z?M+uU8Mx#>crbQH)?f+vtR|TdV>G1GH70}~UO_<$vmoc@r6j$ZaK68x@tEk@D%n>Z z|D$DxSBW0~X&S7lf=38$CG|pBFx520C4F{Tvg*sc4m93ee-YD$M6o(?oLYz%|BJBA z8kcsG1mp-lVljzU_X~Lo6WWcu2YIkk+Xn;nZp>P)(Fwmf<743NCVJFJX@T>dM0+pr zKuurOjtfLw#-Xs2X?*pYO{I+?jcLe^dX5&TU*hDNAR;d4Z?}+QC zNoNw8LSrYfpW?6Daj|T(xJI&6>Jfb4yv~O~@viAwaflPbK;P8Qek(G^oLv#w9EHuu zMhbJWUto6dc(|MrsJn_@CW^{#zOr>iPoY{4Mv@{yahf}!ZfZ;xS3LH>tiUr=jH{Ky z#wN9LvloVC_$4XNLjFr?ycUiKQVIDF3Lqdgcj-Ub6G$bGr#ZW>0<3yf?Z&m$cHHE| zBAG^08WJk5Mm`8ju;^hnVlqlR*9cw-SChZ}XnP3jRhGagEIUD-yU|8pAUSRlN&R_t zdF7?B?lFe~Elv+mS*X)Fi@`KSu&DA8ROW^3BLoO3fyYP&2arVB8FB!O{fL~62xn_) z*uFKQHv6^8C;pcAX#};*YU)+uYru$!($??z)=E=718+wZ`YirZ$ga&c|9d0-yO{${ z9RuvX^ryp81R@lBh5i|L260XV`ePNz=Fpo@9rzovL(S`34*e|#hv(=Wt%m=EaNKZ5 z=18h7{2*uMG!Jt&i&z9c2hTD(+pi0$bmB+A3Ddqa~QQ>T4_8(U8PfbBA|^ z!svW_W>7cMm2Mm~W=myN}{V$dT4V%<=4KdgpJv~4U@ zj5HV7Vqd1apq2vSr{fRU{6jdim2 zP(5}$LA6|(Fa3IFf=Gcl%9YV)^|1)3)P^oOE`7i!yR%gwJy_C%(D<|os@BN>cI`E% zil)1aA!qxd7Zx^1E*qKyG4!n;B5Jz3N>|)z_U1v4uS(k zPMmlP#ftJbP{gU=O#F;Z4;L=>-3+|c2JwaxKZcN*f>uY_rHU+LYVY?ECs_i__nH znJ9fKNn1Ic7h^3(amTek9meHwt`pwlW5!tKAE4j|^;E_HB6Tro1sMD?vsoKAMUH5| zGUR_ePU}ZDz1dZ!`D!!OrblDq7jx1w_hS1ZV8{HX(ztH)#)HsAhtDA2%WS6>bDkQi!>5**WUl?( zuQ)4ghoGMmJ`L^%mM`|bu*VH~2EG)fO1)*7djP%@Z^klWt7b^d8Dhe-bs*G8ub9th zDb^oGGWK$03wVmB`6Z91Z;0!AU$=K-xd6d>e2(~^Jf0kJhJzyHjMq4OT~Sh zeC)UbRLV%s*eyfSYXKj!UML&K_zOw1y#K_?z@i43MA{q}>9t{$V;m>4@OnREKG&hW znvlZi32{x2V_M0{p4XAxN=>?lv1G9NnZ7dshe}ae0-~TcQk`Doa+PF*fUbK0*8r*g zJkr!6pJnJMN#B216YY;LTWFR>Bf04zj|tFw_EAOqZ$X%vrx#i&6iyFm?>ME)v!ekT zOI5tQfVlMGCjy4Osn62Ft$yImQ3~~=2n;Xkd4S~voaZ|$vuHMKxJ4d9sA@g7fwDdO zvO|N77Z*0ia3zQ{Q-F8HfaU7kQFcj*=pj+?bs1LQI=1OM1+=+l*wfGLs+!X1fz)hw+bt zoECa|m{N`Y&g0w=YG-D4GuLyfxSy>4ha^~Cx`^SmW>vTpNT7OW< zu2$WK%6|*eb{Z>C zpMG}J&2tp!-FyLHE+L|%ayM3ikD+pT=U9o9&L8inz=T{Ckfx1BXMp*DdpZTFUg}aA zZJ)}k`25CJL^vYf^*C3jG^JsF>~ISDvu`=pc;5BQi#WM6F?9+hG>uc`&vb7oa4@EZ z{uWtpxu*A#+(zX3!ge?s%eyp2!&DLv8zO;D#bltIXx!tP%TCdka=O}W!J}|g7KYF< zLE$XkwI1;5YH`ZK5 zoSjvVPE%=1#7r_lvRQ|&V()f{It3lmrnQ9NHxWTEU=K5g&b-+ol`&2ERfh|_7-27S zzQbS9SXJNK_Ln^Dh=uqX-bO}Da5pKI1J%jUNQ(N;Ue<>5W%p_;zbb$X zO0?9rtPz9dwiZ1Ozd;V5I)xV$GZ71|Hq$1Z#xF!@@Xf>$3PRypo`TPsEdSX^Dx$-m zT{qa-b75iT6iqJz_>a!5Nya<(gKjF{7lF({MGJcs%%CqGI}lk>c{<%_?gbfiqUf`o z8QQ~&P@4~$h2ba|OR9Ri|oxz{3mC2C!%^M={Y|zjl$8Ew`hOPF;Xz8^XEdOiG zVu~adgEjp47QdPB*)TyVHrLz5E8Cz2No`uvi(ckZz`mX$?E8G95}^NSPhoPCTRz?} zK&c*?PADb|!xfIT5%AgkjqQS?1Ij$>?k(YCjX3Fw1$zQb6=}UNR}bk5XQ6nT*{!DB z4_tU7{Pvg^vm|<;ijlb}x-)WuG+alvhfJ|#nW4~6{zwV6o{r>y6JTBn7*Q(-tl=F<=bqjJ)P-ta84d%SiQy zuW1z|gmZ8?$+E|5^xc$C^55n`Bg?~N2FbjY_XM~Emy)9$Z-`Qj#v7R7M&B_#7O3`? z8{Y-4qaD2hR<9T^T~XErbP29j<6#toTN*O=#HuCtCwXRVo=3Be#T^|rY;&}Vi_S81 za!Vff*>|(jO>mv-WY<${2S32_M0YOSZe#-PtPJy=tA?WJ8!JBOa;W-`kaby24NOwJ zsUnT5i$y#rYx`yW**~%RG!H|@3tHjZ@V{X4UTQ!(+uR2QMDo5JsToW@sKUDd%Y4N3v64*F6u}Ei96lVr zzfozZQ!qJ}1Uyeo$UXZTCC|$05zhWr+aDT-91cL`P$Uctj^NNQZr4^H#dd3E_bV-DwO9O~Z^(F7sfLuw093WLL^gA1|}3}!tG|N|Joy7M)f|zKNZli;oU}EGQJ}R{jMeFJ`@IJ z;)VW5a>U_SRcNY;TvK{NV`G%TtDzh56QzMxEDt|4BVv(85;&x0j^n$KVze7Nq1brw z$Dt@WcM3P%POAqwbEE~FqH({T3DBuG&1N3BVk}mnP-8t2?4ksxmJmcV3eA8+FqrnZ z8P1;XEjg#9cYIF}M!NQuo^v-9{s4c^NeHyCemjiFcqjT3z$$z4lG*BaWtpF7;AUPs zq_m??n<=qAUzNIw017iA5tQNX{VL);n)=|ABiT$FwnKMJF~-vdyr%Am-R{XqCN8bO z(S(k$Iu`C3t+2Y3@}KmQ5+0%Oz}T=9E`wi;1l_Bm zRVyq3FtVD<5Nv1od)hE{FQeviN324oFGGA;tpj1jfb`&a3 zKJ3h_ck4C+BImaXhCZPhxZ`2B>JXiezk*Mq71ST?!X|0S1&Ur9gi3)AfAzGFtn#IE zP!jFg2?qy`B(EJLjj|5Pqn8n#jMagCuMnm{#u;zfqM^{AA71QZRG1Bun5waib@P9|7MploQir1vWijzlT zt3V_Td#m*0-3VXdT~Nt6C{;UDmm~KdT0=JwliW};<$S*(yuTaR$0Hg5f=rEP+XaVb za8e}H^pQ$m*|*q>)YKdwKg0&Hxh}Cs93wiSRV4Z~E!?*hNwu|k&7pbc1htTSLoT6L z_GB)dhF0Jb?Q@z(kAe;hNM{}b0x)IDb?O}6mb^D%r)A+%1yE7l5M)(v-o#L=!>e1w z3awpeS0h_734Li72z;WW1QFu!3%6uS}WH}sAj%Pym zTfQ@)BBfnaW6yk_;dE5T#w`ow0K}+(dZ>U+y;!{5A)|aWa>60V6&_siHWP`qNU6kY zcW*+UNfbgy)0qSuBLw)P=dM(j^a$!8Ec%?2JEe_P<3K6{wSDVjeB^Gp%lNh_bvx{b zz@_Us(Nr?F^X0JBr7H@+5`Kg$qA@F=cje>;zwSeLY%`Eexd$u-v_>HLblVO=l+%Vx z|82NmM?}BBl0dYF5mxYHpg~ftwFPN#%N2K`CQM9N*>pEYG_dx0J)BA94a|!`5N>6` z$Zq8(ISB-!y>CE}>&QT)C_2)c{rDyRdgPen^WAxUiu>Q=eAPlEvA*DJ@|V;U<2;(& z-DFKrW51|W+U&h9jummZ*WREEz3`7M{!qXpP)G2g4JDiBlos^$1z6n-vd?`sT`BbN z6Occg@bWYjDsP+nBd0YHEZkk>AfTzRQFE+&9v5*1%b8!_5K=YZ=o}H3XE1X`FOf*jo1|>e^ z+x;x=)~$pk47{cO$XWp!pC@M$&SNXl%aWrnYZKm0a`1y15!UiITA!zf;2{Lrp>%-1D`4GbB*XUa zwU>`4K}?4`+Zfs+m$KKs_SO@x`HVYoKVU&=wY@=WJYHRIfxvj4^E(2G+GG#f%^Eggs_y65{2UJc?CqFmoZ<(&jp{?fH_0ydC4Z93A}ok zG^E)a%W*1{NInFeEPDq##SKT(d!qKO!XIO0y~}C9d=Dw0+~`aeP|d*WUF)1%2F}Wd^~}NN!I)72 zubOu*wLj8w@FS}hWZYq`%-6L)H(SHhg+8k3;_=T{Ps;)~zxqFOU$D&uQ zn@}zC`JP!2Ed?6fl4j4DDQsk9(NM4Z=rVU~6V>R3CqqY3HXFvM{OP8*|0W+Ge&t1j z*sKE_|Ex7SDq-Ko3YknSwejudVk?5bS5Woxe7x*Dj`7SetdtjQ=VilkA3}?Wv83G) zX-d7;7u^*vHt6|-+6N;>rCsz>8~=%~w`P~E+Cg1#>a$d_m&*z3g;7XNN0{@p2abP- zQNkb}hu8Qh#IAG9k0q}gPUqk%CfX?|Vy#!Hr!=NygwGU9{fVpY(sbR6XONXC!&7kn zTlJy;1goe#CK4I3qXdE=4gjHXVESiao|8wQ!`pm?hpnBUE7uSp4p++zJFp>-L{LSY z`6tP_NWU}|HmE5yBGp^D{N+Rnn{p$LF_I2mLv=XcN)Uo1<6)N8t5=@cu}P3Irby>4 zQ<8xV6=awY!d(m~mlnoc-!BIWgq8-?=CdtAaY93;gcuC0-F#|_Qp@RGLGTY#%)@*t zGbL3yTT@O6mm$K=H!zTR8htn6v5QEM55)8^#>U%lAp;N0k-7i&mdwz9+KQ;R86>oa z%28iQd)y-UC`MZxqm1!<2!%H9kcWwrAZb`MjNL+sL}Y`dnlhF1*a_FhEw3)<_8a|t$Gg0s%Rs?*VjC3I7kK(<$OrS#{6;g_4X53UUlu$ z=Wf+u=SgjgiPO`U8xW5642gjIQeL8xBW|nECNkA=dQu{M?oXSlRm3Ei}sB1_}ba|I=hORB} z*B@WlCEDz+RSyu2sRxpFez~bf{Ne&D?CE@d*mq7;#6IO*$Vfk>>HpYQmN4n| z+Q^YQX=OvRGJre%4ijc8$EZAe1b1{{&|iXVME)%#{d}3?wIMSua_9T|g)3mHKZ;B3 zQ{r&~fGBqV()>)tj9EnkA=>cL*i0-AH3(KN^RPSO?2evkGpuXC(kI#2%G}YiaGYA+ zv8UKVEF!l30RKM#z~Chdcy%WbZI8bfAVIgA5#l*CX*2T#b|wE5&lbWtkRXhxS6_>I z098qYE!JLS47{fnmG>8C(c{`Z#AVcQl6&A$C?`U;=HlPTZcgs$rlW17z#~=Mrsr#T zs%5DkE>LOf5gU<0BgmLfizwT+kdkyW)(DPa7g#XFagT^=?Ttbo*5mbKPXud>Rxf1b zUaCG&gUy>2a>Nu|y=_U5*sL6q49i$Z*!>2Qj@>UwozrYAIR3T(QR6Jx=E!@5rM}QM zp<48gl|L5ZKpZEAlDxjcu#O6lPkvOE!I5DU03_2a?wEZp*whm}UG1?}d^A>ONHKmZUO_G$B}+m~Tx%p3R~>%r|%Pja`+iE}3)Nk*3p566QW< zh8!VFi?*q!Zk$5s=HHtR$nK4I!dXRF%JUra%;x|Ip+%DV)3q|c`FWcMTe+M+pgzXL zq|Dx;oc|cvH0ZV=G!Rn>vD$OOlkr)_BBhnS;)C!Lr7Mhl{Ba~38(;K2t~(5shPJvj z$?E~}Q~1i@HP(wE%F#tKRUkerSaNa?x}*|7{Qh5cbGi}Js0j&K8Qv3ZX9H|HJ70nk z0E)ZguIT!_rfiXippGa93~=d}QxvL|+KqPZT8i9**$mqk#P4iIvV0?R45ASU_=Xx0 z>JqJ+9k(#E)#A+QFhAZ(6*Nmkr@8xS_M9Sv${T7EP>a=O`mg0oI6dc`CFc#xKYGW8 zy~4ww;Dhg_-g%$!-1X*5xZl(q;pk0olsms}WXgSL0eyt0*k|haf(l2%Ofl2sV=RaJ z0@T(HzD6pTvUuU2g{=A9Qb1TF55k{U#!U$Fbp4S4t{^r!J)oJEqQ`+6m5t860-Jau zPK0<{hnh8Q&2=9ctJbos>du-`)oK|GtNthk=YmEDDJZE#;JFi8gXvfX`y$~CV{JEm zgvuDX11 z$4fh}tQ1b2O`6eXjFI+PI4#T#E7t5sfH--#p=f`V6Jb{&o3;C!;%koJdRQGJl{H#D z)fZzdAJs__Vx^(4E-C4YIu#;}b=I^peX36h5yIZdFx9J)8#4L4qKCIW!0vL{L(HQ- zqN&ACG%Ih_?PHe{Y`G&BS1fK*>R&b!ow^-JFR&rO;ycdw@sKJ0Tb++CkeJ1#qdAa#sdKzi@duG2+&ts7;fkfjX^ETkkH0-cB;)wy&TF})uMj( zCu9QePZVOtFdGdCA9jeJ;_x!tQ>?9-%IM$=%Opl5mG4K-O`_fCAoL~7q0&U}XwaYC zQDHj@^vnFXp6Vl*R32;g6NSIU_>5q`530!^S7d?HJzBRK#pERr z;=Fj1P3>S1Ah@l*j2$bj|U6B9WTpJ-a>8LPw z%iO}`bM!el<9C@G{UI;D&1roVXvGp_B5xgX!~&pe;A_vGl<2R%8}4#DfuFr`3Kr?p zuaIpX#M*OM+WkGaBp6*9v?I7VA-`mNp!-u_T1vRKrY+QrQ-)xn*>XnF#ic} zO;A*2s=n!`|K-`ojh=}@r=^d0_n%p?@7)$B(W)YlOaq311zA1SJawguaS+92!*|%S zo1)B5FkvnsJ~{|pUy_&Frj-WwE3}xxq5{J_4)r1XLrP64AI;$IS>X$SaeG>PaK%n%rqC zSeJz=q*IMp5H%tZl{#*SQH{=Xv9v2tS;!*(`gpui2J8qj> zT?gIYI++MYb&+hIUKj{a(d9BfnfKfQ^YURacKOxOLk*U#~ml7ck zn&OEskh51*H2>)>WxLju%a2|i{l#+-hba86hO zhCY9U1*7SR1J-hJn2cZe(T?zNl&dYJo`e$bahnV@f_S8<(!?b7 zzIxTcCp4!rx#?lW88{&V`a<7Nl-+$9NM24q^x?=d=T0}0b;M=K(hhC50$D8mO<(Dc zZ@RR36~bxp&rYS$z44H0cksI~O9KIA{4JmPchp-*=0sbQP`DKkGGsLL2|frpLN1h} zjzp8Mk#`HOV+lW<;1mitF8~!GW#!jliXigFoK5|NhkGr7jvW;RyUf#B0VH(j&H=h< zp4|})d>LcGcGzj*Qfdfl7PtkXfLi-<>L(pZvl#!&@j~Yv#LT!;K&#d^1+?NNKC@d{TJU|09eB zUMXdt%I4HJ5Fe?WOAlg4re|62NcTBs4Nz~_g5HKI`yZ#oNtLrdl+pDZg^7eXhWdWq zomb>6;5MJk^oWd^H8{u`%>b`FVLr|nS{$)hHyMEsV7UH|i|$EIk)qP1_Luon%X}R? z=8>04K0ku|%m7*8UKwd6394>O4i&-;-az!Q8w93^>;qE&acZ^?qLb9}{+s1kEotv_ z8%ptTI^Paf`b#0QYgjYq40<$GhOdsM$mA0L;m~4arJ}|{O{_XI!4KJ~D?k(`?qe?y zI71oRVbf%uqb1a{1lYJuDQ$=9mB*_%6jxUyUD{9x9)~(Kc(n1iD?G6gTbkuIaR2=> zV|`~@$Y~#gNmPfN2pEB`f^Y}Q(tacGO%MZFj|=qZ9@>J%f9QSe-uybxi)-f9j8$a3 z!=zr?=EMk{&8|$%;5mkv<1!aszKS@v_5-c64|1{#^&_~%DiL}YxK|h|y zAE{Wye3#g}y^oUmh6sxw%GyY}=W})l5UkXO{j>+gqutG)IVkxTVetFaZJFPz-B;Po z`WV(V+TG3wbM{oo<`kG)!f*Om57DgX!B;BQsp0S=H?+yhyA0=u*wfrV_$O357?#?W zwe8l+uJK+-s7epn#WC$v8c#>@onfJNq~1f;*E6?;s+E{pc4bn}L8$wk2PhbK>nNBJ z3%BJIlI{heaqxKv51G=t)`s@87I8_n@_DN1itnzVnytu#g)oCU=7=j;QhyAm12tMQe-iDk!+!u(HKOs#nv(wSX4G+ z(*@zz$i>491KTb#h8|VmTogUbEMDKpsPZ|2M8RN1xOswxH4cxZiDEWJd+SRQ>N6=n zjy)`M(cZZjXFK88YsMFUYp{(ZpN>$O7P37iiQ=fd!HqhFh7g;adp{F^^+~{Mt#VY~ zPh*Fk#o9;n1>Xb!+EIEAGl94|nLB&0=^AFAKWf?$^6DxQrmO1pwvzk;BhOR2fS=@W zZW@C1!SwQGsdfUuDwhw9AxN-r1~QC`z*O1y-Dw0H67};|R^C@lVSqH&E@pXZisna- zCK)A+1L&m>?An3q$Q5;b*&B;4lCz5Bqsh@l=^|U==ViM#TK>eX4r6JH?kcbX92+sL z{waDJsccEgXcL;$f^7;l0|&@oTyU>se5F)`0W6FVtI3YFBp7@A)RMc!`>4{3Z!AudJkPuaM7}Nl<_Fq%GBvVlb1q zZ*A~OV(V>AUfq5(&-nizz`NWye7BFq&R414c(@i&A>e%uJ~Ri%m3JM$Q=S%50z&Pu?2=N(F)T_vIv_h+RRh4ji;t0ei%^Nd&F@n8T)z&2Lz$TCdmt`&tdq2UjIhff!Pa1xLf&Bvh^y6`vLej1Wc@JP=+PEiabtQr-Ow)BlDstsg=H7Uz7co?# z=O8sv?fO}p;atLiyrP8D@UF1XC}fpjl)h0$%u!6r{u{O`7?fPdBK3h*t>8>dfKZk* zCJ>*3dn^y@K6;$CiNDAnRm1UXj>khmKu&ilv@|1z890UZg0BDM(j8wE>|b!`o|n9% z?5AWc1Rmu#Zh>Vk`2gCb^L=vx0H#KBc7doq$+ZC7?f3HtYK_n@_UOOm`De=diOLkX zz4s`-2^O{!gxu^eDU}DY2TKVgU?;ArC)rR*;jDyS^qDBiN|(=jlNEhBNaL2w>nL$O z(CMoRwtH%pv||#pYymp+c8*dZOpB^?DqL7rp00xhG8Y=pTgEBFxZ7}O%!>wEZlxE6 zIY(AKjGJ+5rIEDUxE`DxT|60H2I$zZR5Y+BPfr5-3kd^dv zsx5k`yX~R}O{LA!pT@usR97wPRg1ZO z^t!*$T0ixKh$VkPc?>H~v?N;#T>1TXGV}VI^qm)nYD9B;b|ql05uPkgMd2J;KPar7 z;lpf2v~mohnvGd9LlT2yE^4GF`ZieE>6yT>ce}ko@vVTK2emdRA@HKu2}ZS4K2<>9o1f3)cNT%Jm%_KwcpuG&f2A@n_gSJ@5Y zrGqnBKrkbz+W5gC9#RF?+v8a@Bsek02$vgh{fUNQD`C}lc3?sXsp+Pa@7Y|uy{)={ z89VTvF!}h#GEZWPZg4^8>phC7_0mk+tv-BfnXzc7#~oUM<2X{Du5b8gVDsQ6-qvOv zSEa=74md=JkzxLWd~@85K#lGE$wk}pDJbMn7CA`t8Y^K1LplMfNhh>uwt~g1W`I){ zJ|#ieQSuyUqf(!%Gjr|a9C6!U2jy7dR50r8*831A^MFGMt6y=VDq3x0c77tY(4lo5v1gYw;gBkEQ^Phr0X%C^;)^ z?L59qL1VYHze!OsQTsA<>Zd`Opo%_7+rF!2b;*$&-% zf4*BsAb#)mDW|8MCDOF@Ni}XjD+tzcpVB3tir5aMIG_TaSrwf{_o2??cL}-x?puR0Q|niWjHmbK8~WX?{KvcVVBce4h^x>1{46KzVt4(jl&KUT&Q&(foFxYd)Gb^w2%v!5O&8tJGX=%!%>mSRJ#~v%S-PTu%YzKi6TDdWeJ!nNNpTn zyfv!l9;(h=Jhs%f=F&X%C##vJ!wYM) zH)3gce6_d)rnr`+9>q~n1V8a^aF1`DlKExGGN75w| zxCtx&JWF+phJ2!_CLW(<+}2@3<|P_KwE^QmA=f&=ZMt*E^!>LXa^A+ETz=M5WEfRRf$ch)u(&ZGf7H(7eIGoE0mGc zY=(Ld_PImlVl{C^rf2}kX*uBF%!-Hmk)r`rK|o{tUCRS~)NPHF@#bZW&J8s4Jc>KEDxv z(%Pwh(3kqYvJe=*DQfTRs4dRgL{OqQE{|uSAC#7Xf+2n{C-e!HYga}_xuS@qR%|&q z|6l^HjYdNrx{qVh@zit6JKpz~Gka-5CWpkkA8Zw>92<=M9fs#;QtJyk}q4 zMmmcw$VO&OZ0?eI4pFI5f|y{^A?OP-FJZ>}w51@wJVwIolgH@|e2Z6d(6!NjQA$t1 zOpw&V82v%yuTXt_3G3X>bCQC^Tm<6(M*hBXoq z`_`ro75(oEh}ggio~W2`5~+9CtlDj!(<=Q{LQs$6HUkIC@n4`%cDUCUKCxMG%gfa1 z2f{rzk2tEbFMfTq!U#VdhCKgi6(bzgs39S%U*3>_e@Fd#!d$3zf8Pfh^HulK#M;l^ z=Zk=qF@kwOz$6lkjS^nNN^w6z2s4LmzDsanHJo^fx;GiMkK!o3ARADC)C2RAXjP7P z<8i~Q*?PhblRb6_M{6pSgOTop;>a7ipzRD~xnLnJil(pB96hqw`#=TA6qm{NsxcjS z_3E|>Gm~--yB5ezW$c?v!Nv#f5y0ZO* zMbWkzR-FBNHdj$?Tc9b!g31lF&ku3A?!i$F6A2tei_YuW)AE*p$L1T~Yd)-;q`wX$ z5O6)cfs%8Y0DH081};`Y3^R~nxFME9S~jH+hg$%l%m<&lHyoQ`ikxwaVG+l9xlJ9T zX5r<$(QD>t`flm#aXh4&s50N>dCd^8{I+F2lHTSbk)5SZKp&!=#Jil7k@FiD=kwNuUJ%Bds4VzKOoj>s+zS*{+{d7KmT z!XLH~7w_1q8}1)1VyFouq$G%Io0k6FSTR?n8zr4*BFLvjcm0I&`Gh#>;Y4*Iuyp)< zkJ>=E5zH4ZiQrVBIhm+qJUH#Zg%?U{+>;NE;JLDYv2z?3Bm!TTO0+pSw`qg$cJj6G ziDGnU7(J)!VFrv2$`xJ0gS8gOlJo z;Hp0uU(jZp|I5?>hLcCl_FMAyze5+ae!|3-7nfLD-Obu6lZsNz8q>jxEi1LuPCWd8 z>i+&OE+b7Yz50J-z47f*hzdE?02UHMzjE(mKE?>;>K|LF8Nbw~ShQm9ikA*(Z!il8a>9&lrrB`Uw&3^7OwaDn2-0AoyCpuEe%8elzj<^?Gch*ick zVp2P!EvdIEsIw&dR$J70KM8X~6a)%T&aa@6Z{6i3J;u8* zo6JW4Xwrj{v+W~fTlL_CjMaIzLdA<$@LQdAc6xe@1pl%mr0cJPafZw$D-6T1Fsubo z!JK!q#BsFa09^%&>ikdsMW$U-uB-rwe=6fl0&&yz6Ht#LF2AHEs5 zZ(Zh&s;ng#r^1!JFeVmut4NqaNwXV=*%@V-sezs{ou6(eGu6X6Ab)w;MNe}N@E7v# z8X}ib8l8HA_ug>-UWwiLQFY2cn=7OH0;^^(EZM6S_TscY<+ z|CfWgF_eMu((tdB10N24i@zf! z>RGJ=6wt3-C8Z*pc4fq}uMf>s+$YMyM77i;V(MR#NGH`K5&xhAYeW!F+!W*^hnmGW z)F8Ku{1UC*ru>e|Ii$;7BDyXxzp3p=*1rqypIBmp zdGnx(IY;(Zvjv9@4ondWN7sS{;24dZDbShIE&AU}3!z3x#C@{GV4EJAJrbf4Ufxt;`U*L z?)boMfTCm(P{aQM%>WKtO{nSjyx7~|zyh8!*-?z^Los*yo{8HR+1U;Nh~J;Cve53& zw`CfYa|cq>dhgdKbW2O^>#qMIc3q2>bU0;OR}HaLFpM{edb!1t@Fy4T4uWJ-u^0-7 zH6-8UX;#=>icW|Q?%-C2LU;~v@r??6R3Vjtxb!7IvIYu;Ocim)$0CJ`F1A!!lNB*c zf08Z5d&8?Znl%-drg{Sk8e&35eRUQ0t@YRxLS5V}>^uN`;bKZ8tPxj`K^dl5sF*mE z2LNx>5zXjGoNwAieV3@Y%E5H6T!$T)ba56phgfv>91@%wV}uCz{74<_;tS@jnvpCD zG~p$$*c45O->%RGmiB%{nTfVTD0D_Drk0u45hhYQ`4Y4)cZ|eT9fZ>9#Yxe>Qz*Ps z$~aXPtlZ(h_VHV0?9GdgLWTFy(>0X1Qnn=-a>1J6hGyZT+dJX^zhO zVXAfpS`#Y0@ywW_KW|eR6@0*OC4XZJv{_+fczPH(2&PXdcjcqF57@w)iLFb(M4fl6 z8)L5vht7>uDbZYD<)|^At+hpGruhOI`m(o25bMKlkIkcVGZ#A821EK3KCgP3M@a}7*aZQ~( znns08NE#RD^fH?FqfKvGl7|H9R8;db;n!Q+9VL@o{0He-Lx~r3xrK6$D<-w4y5@h; z$=Pllj-6;WYJ*Jri7ZVbI@N>s^oM0s)U@p2uMXkr{10o_4v!A3p5!k9sU>P zkJz~pxCa+o*^*uJHi$?)z_Wxb-dZ6YgIzd^fSJrhIP5UMh56QHkm5*{He}9x#pE=| zFtScwl|~K@lz|yL?Pa%0p6vO52Qgv10colliWAEbl-qoWVYrVEIGy`h2Laq}K4#MA z!L|u@nsQ0_jc(LwC7B0$b4RjJJ5J}1F}r2G z@X#FBvtD7OO6p?T@`x}J7CuU6&deIH(Y21A!SYX@i|-=1Quw9kSK|t|OA*mhB;S&I z6sdp&-`;9ou3#bk;0RRaQEAR+QXwJgmU+qkCR0{|*oGgsQ7=7cBgo7)2S~YSl|l-J z2{f%fR!_ut7(Lw;m{}$-_6{0E*}}mypPiX=ZTNJVSq7AyO=}kwm}(Dlohf>H$9pvj zLfd2<;7<`=a7G9J>KgkeFPoohHy|6=5~YQRU+zYb$%yXG#Aj*jY1nt04|bB34><~a zJDwGB+xpPwUC}K0Ej{rfsyG*e|zc1W^KXoCKj9`Mmd4o^VEWTI9|&v?*xqg zL3Aqw6?bEzhDXlTEf%5vxN~X7CFjcO`=7+FK$fKJ*d_T0&v@bAP@*_C~++ zKWZw-3Pfu;dpvwPbN;V?|8t_5D+6)zPP;ZWXPFy;SdY#fH~AU0z*H?2+0lq;^uNBZ zF7T<5{!nt-^SLI=p=wy3yOLnn$ag#^ zMmYRg_q58~{>knw8PYxVkCq5Ov7Tj}XU^D7Q$Kd4rISD};{L4Ta<)w{xH2;Ip*sE} z=?1&!SXI$x-ivs9163)NY#W-~lO-o$IB#k2<`1> z$13)94(X9o^^{x>H1=TS?AmT-u`o)N7ZjW_2%}Ys9LRjEQH>b<`$qcPlX?+$4vBx!5lH#B=bTxmxQS+a_r0l;1k^=BL#e8Urceb>YT#ef9 zqfDP-$^Yom9-aHVp!3j7!JXCG)u?DI zoDzf%LI{2?ycw}tC&?Z|Jtbchy0hmI>g~zK(|lj@<8nPcZWnQTI$0}Dt~&Ra(>rWm zjDwH{myi<`Yd&;qrs~|vJ7+{c%aRqRn;UjJ;e#q3V?~K4-0pU@4PqbppNIJ+{OTJP zkE*XW^%;5K@@gK<0aYCkZKcDz#=aL&nUzHGw2DxVMp(O_K;I?u4?+i+i zs#r!fTb^61STBtZ=(oq{1sEYhP)G2qdtI%2L}DuxpBo!RP_G-bS81xWPeNJ|#T|;1 zg2*hUhzF>{k3(7$PRv#Z-EnQrDq+N^mxIc&?Y!7%$^_I-6Ba(D!5nFWii}IT3 zlt(T606q4$Mmi-G6{PY_wAo5 zkAGmMWwduGJvXO|spN}Oa2fxWnqP@8T{LnkrwK5w#tJZgOrvpD1Y=us{Bl(YR$DMTS6u|z_? zXlxVjeW_DhS)6~VaD6PG3Il`fOc;t|XDP5|W}Fznp_C~kzV1S9A5tC6yQe`%=mGL@r57KM~ zRgBLIoIZ(y>XVm7jF2B5PKwkznvSzd=el+VPKj%Bt^ip>^xxV!QDY9IK$m!KR;BSf!k%zwV{$~PsVCP`~guW zsjp^0W@aj17|4HLdZ_@zHw`zj(@1)iIGbL*VjdZ>aSsIlyAE)LAOVrr3C6M|8P^5o zNbf^9^{)!A)T2^D^$ASdxGuZZ`p($%+fXixzJECaQs2m3) zfgu88G#rnG9($$ku-S+gFty@MGSo$Ge#?wYLomV8_8AIJzHgOa`ZUkmVE*(65zK?+ z12k^#IpKfj^z%n1oIku}FW{?1JPC313#Q-uC*87|2sw|#F0OuUXrXECm=972a~>L% zfl`3QgX)I^sbxb0D}yf(lYQqeoITqni8TF|>*wzB#JRnlf6pVtF;Vt9#G7;th0)`jQbSMf^OOp!DwYe_7ljJ(I zXiYY#aE48PHdCKkN-Sx&bGc|1rde6@tM@|BiIbAKF`IWNqf2`cNqFK zzB5uZ3qF=Ylkk3y#hh8fWP+wuPSyPnZtR|%$WQBgR2WBcM}+HY2jTwL6~d%Pps_j~P2bu22JdfTuvf6( zF1^o*E0QS&ZNcBq4x=Qni5Gpb=fzmX-)YwItFW%MV~C^(Zd`zIS~AQe8NXVP=V+&0R)C4n(IT4A zm1=rdB*n*LzE&i|PhVtP@4sxo57>w>vlIEbA4Fr%wGpjMPw_>W0#KmAK8eSjn}6IbpT536QYzsFQNLiU>PvmDvzU4SX!!uKCO=n z3=>P5`v}5dIc_mbmpx7%j^6L|PEmUvCoe#15z2Y%BrQIw(_Uli&;8%mXDWkBYKk4 zUA3q|)eKo?B}&(tn!)YunFxa%s=x7l@S;)5Qy6Ky<{ zvTwng`fqM-oPw4{Rfd&=_SQ2l`sI#~V@or?Tx;f&7IS{cb9)X;a&RG`#AGmi#0q9~ zu~~SJQ-2V`_24A4|qulLrYkGly304 zUQUt;R7Kz2)fLB}%DRy4RTDGb#zb#O^!=P#FmYI?A>IW#{+d8J zK3{vR7`y#fU;J(QfiN3WsP&+yH9CEgn5)&qsl(cQ{7jTzH!>JO&WYY*R{GeIi!PwF zHUF)yzz1f!Pd6$$tAB_2E2)py_zGojmjT0MAD%iSUKr`X*rB?PmLH$kdDIJjV8F~; z*Mc>?iyPg|E)uc?Sb2NkAvT z*zp$0@>fIQ(xJjvW$O<jrvr2~>zp$_@^97`YTq+$5-?N7@&ENf zkfx8mmYvx?NJ?vHIabYCtrKvM&fdi=Eqhz+mteEn09f_+*X;;8h9!zp#Aagko3;7z z{+f>}J!C+F6j=249D#?j#zMsILW*F@QaNk-uucN9$9RwjRt2k8zNCe%YVZf*6srWU z#+-UKc9723cGEvWM^R@`K|PNQggytLX#2jrvF5;Cvm7?26liZPV*)*lJJ2TB zJ6Ff~I0m)J<9nrVboiZ5-Oyti90iD1OgDcfu6EZ6BV+|qL_aGF0Dyb-d=!Wj@`Ye- z#2h@O_JvRG+l`)-DOD$f)IZ3KF%Ae}+tzc3a_@PuFJ5JsLUC$M0J8rFh+DI?dkyu$ z$F@Ea3Jr#UOXzhf@n{~?nZZ=J!Eau8KXMScr1gFqXg?6!t8N+UgQ_ag(EF>&PPa2i52Lmw+}^N^jG8RH|V*5qDiu z{W85-1!=p(=m`-A2a;eo3a-75v^I~h$VQdK%0{*|HRp5Lv9^pi9rp9;gW&;ur1#7O zn7;vso`y}6J<)uc2L+rWrCmt^L~2w7YPD>sL)>o9woYphoC;6o0W5R*y(BE+7X~Z? zpRdR>9*fDHSu)y!WSo|6*pW73EvON}_*Y_UX#C0jci+jxe4}RXw7?9p_jy)zDoXxC zSmSrlBO8=<_2iy&?{*`q>C!sv=5Dc7;jwRpnuHFr(xjJfg|ELz*31(bak4VWjx;cN zfU65B?K8bx@x4#m07ZVPO=B{(evFZ`R~2IUHU2T zkl-!Y;TmC+CWAPEWF=JBT`=`lQA5bAeY!j~H4g>SdkmHj0PM%r91{hQVtv*TAu|Ga z8cQ3j886t?8PQNGkmE>}@rBrzpg87H<2RuL#O0a!TZKzOL6aGs`FV6rZt?b}!PJ7; z<9F_p$Y20kH38=mkvuEOzsAI#+4|2VRtHm`yntw> z|AwqF@9a#=C1#C8#*5@Nv*a`n^scb|sT6E9;#^JMa%!xV)<#{XHv&N2`l`oTX*m?~ zW(|J@?;v=ew*v2z(i3Dt%w0stnu6+u24-RL}`ELV3dHV6)&yT8$RX~_qWNCUldlmuRHnX$K-p?F1| zhqs&hvChR~%rbUt(i}bVM3R3;Wqb%KAZWo0N6;ghsr2! z2$PMjR~XoJGyoNI8Z$6d%WUr}SUm@3t9BD{Hmp7nDz*CC&HB2F_|L*dPaxS-^D_O; zy5DI6d;I#F^atFlt{@NE+Rkg^9c+DdT&C1A42X9k{Qg><{RDQ74`L==_O@mOpU;{9 z;@7{FWyPT(v@|wF-0PsQZ764%@kE9y6 zLwu9(v*;VoqDwGKmK$7Cd zVOuEMcJvU{Zkp|x!k$`GfUhrDh4`88c!sVA7qXN3=)5$eiXISX zD$FC4aZwnDuq%FqLRiP5Z77_)5Df$y4QSqD)DUM7D;t|-lXIP#nkW4gOpn$~e(K9Y zfMu~gy<%D@vvO?=Iimvk$o-`%GLtR4vKcH={!nzwkl+WzEeQ5=jlAbD!1WX5@;eZg z9A^U4*@;~3O%s%xme@c2imyui5Dt#^cje6lG|+O;p>&8ydMjuox(G)Er35LhuDLF>AzGYsjxAoQ!#Ze7bYHn zZg)O)mk2%=;rO=QTu9~+Q}UX@tH54sj1BaEdELy-?==7>z9s7fj#y)x$9qNbn2uNSN{7yTK%qjALq!15>H;7jti=s90$hdL2)b$p`bNu zimi+7qkQgWn0WHFO}Gt8x9ZtjVU9q0-tcIWS;okK;wB1A|9y}4Ucr#>ku~Eo*S(sr z`|&6nmaLXVbOJ4(o<^Wub7-V46~w=(f*hTffG)?{hwp#c7Ii}WV`6)Z6r45xA4ofw zp8n~dmF|XRO_DV340|KGTq=GS5Ve+kR2y$Fi%qcPQ3M9zasNG8v2K=OD%9iJqa7sf zlnG|6IX8w9Hjauj=i|_WYG&*pq;-4_2*-}Ua3#vOurKZd zm&CTVra{Lq6e5^PPn#A=ogzAuqUJR^oIJdj@Hj3H{WSuAz(RMQrxit3T5^RAom|-L zU3bNyT}<7H0}kercDX|p6s=<$f1U_H1t7TnI09AXJ0$!|W{%gPcEzICn1I#45!PP7y zRbv0rn*G@BpNp*2Irc7Qv?5~#?CYk~ z$GwnIARYaPg4G=dPh`dz0RKM#z!03=E}Uk!u=WcM4$9Jg6klp?j0TTA4_m2k2d9f& zXy0=+kn6?^-mut?=R_UUjW57rEig2jI1{Z+6zXz3EyU0N3Dn3mEEdd=cYq=OA6=XlB-EaXn40@>HQv=+ApWnPC+;B! zH(T6xaw0|%*kzLLqP@X}xH;Yb)`21un}NIY03_yri=&peT&R$YNKEy9LK>fiX3b~rtm+M{;gEppa;Qito1q=HsEUH^ z7S|f3X&YKHE}GC54i;fUrG3kugwOv1C?b8rbL+G)T(J@7B;&e~>Og1>+I!Pa5Kwbd zr5_M`b&!^~|6i@BNwMFa{E{S?7wp`l#as<01U-JWG$#cJ*?!MvL zt{4LoA;yy0i5i5)m&7&X00R1&6a$71^X|U-<;;TJE=EDdmKU*#{ef1)YEn+$@&HUe z)-pQHhO~9kb`QlekqBGLNR3y9l|UBrRaYq%m9YPx3qM|E>M#jFBvj{dPi1Y$-Os`MsHiza)TpvG)_=Fsg%!Dd8aK(qvnNy0`$lWt&u6v zOk#q}-$(v79eBEn1<7n;f>R8+aFg92cBA?$Qy_Jo@mk z`4WHthtJn%G#XopT^^SA;y=ov?u_f$!la!52~((eNRZ8jX7J}S6N?JG?mPvB(dbW) zURh~%N)w1B$MWMhPlk}i*5aJM{3p>$>oaYqiJr-ln=fp*TFC1DuZ=HC`jTER>xHo8 zT|mqQd6u!gt(0{;O20FO0*GytN|1TtNsQi_@5Y)BrTk z2*Cs6Fprez`FBL8d+HF;_0_-2+74w4@H8AsRMw>A z?!JOfa$H52RarSOpmF&H=Qz?hW8&(OG4V=99sYe<nGU(8Uad8#eSwAQ~zIoj@n``;x4y$jWTC=57L;NlZ^LC5O zYt>9|S9Z2=~WW6^S_B# zZ^|AOLYdOGQfOYhEm7+onpV`^)E^E}DlJ=U>4&Uw*r3zc2ScEoxt)-QQ1?;sjiB0a z3QpIvn_v6vFswysWOp2aId7IR9Y6@i>!OrnX)LSk}HqSU19%#tC7?=mF~TN1+j)1_tV7i4ppr*eu%>?*isN8g+{QJfY2mpj?FkW z$e}wab~0Q>zbSnV+CL!s*l4{nNXN*C+p%UC%+@s?PDOxLiW~zyM|ZmCEpx*{Fb#=x z9Bac0f*fZ%DkZTA)w@s>*+AEpDT*eH;WdzUbN7}ua(?q0$(B*~&o4~`&^j4W;V%}n zBI436{m5jL=HfJPgrZcHcg%2|NSJbfg8iB6vB1w=x)aysZl1qGR!=6T0VBjJWZ8z- z8)ycJBktBp@^~;mW~P#ypo?a zizm&UWKC`LT9P5p{JCE|Aj8ld@kxcJ^p3h}V=o~!oFDGWX9-=MSu2Xft5-FS)3QX# zFI8yjr2F%7wIpOUH-vH zr`vEQ1z&iizU?Mq^>rSHmL8>yfH=E4APxG5`+J*1gH9*?1clTHnXPiQzKZh<(^qJs zefn^(5lUJV`){iJV7}fk**cvhy# zaav(pQ_=NlVDhK2dNv~d{%;Z|O9v@fEZ&Q^Ei!^hz2sJBSn3_&FgyPr|LautlOKu@ z)a$YGeuDWhs$uGIWzw!dHC|7S{y%;eaap=vM{(lRbFQfPwe{VeCAiiKi-8a`~cW!lomOSKp-Z9A51nwY+BDhD>ROw zf=E%P=``3=VmVEX|1unNb>1qyFS^DO>tToS{F}H_!lDN<$`c#FN=eBx9xrjKGTT!l zOhmIBG06ims#zXy7iZdFe_*&u=T)nHYu_#4S6NOIxPtx4IxzK#{OLHiEqc2D0YRVt zIuC*TT>8eS>Inq!yYRGM80F}0R`>o308R-e3I|D9D`4SHez@|^J=2qo@VpGNyFG@sB%PHogH zJQe*-VI|KHjDBOb=MmB@l~8uwO}Soi&^-y?Y{>{>)cJBAs4z1o+wo+0E+rQ9O9@M~ zKJ0^A?x!^E4z(jzvNLxx1GW9Usg>9RGK_$|HnlyGZ8Gx^n|Au1A6a#Vx(Z3SUMtG| zw}#Gf@|CI$X=UAVilO$*4P!a5UKO{_!-{iVgWyZxmJ8MZL%7KP^sXD^`9k)A{0xQp zRTKW#bl05Y0P_I{&JZZKMH6Q)x7Gms*KB!fSGSFvVHBJr^@7qw#Y(=;EUEE1p>DZO z=>P<5J;nMH>})vlJwec~S_bJ=gSF;;A7%7T-%4qog3=IF#&t;c{R9>-V5Xh4)dQpx zvjL5(+vpT@VgAG`bMa~ZIr6SO>xp9;i^JgKygIsEivI2$-kc&}4%|nbd7A)Y zF~hcMZuM-Al>39})38~oz#F@;hqAx>SqC42v@-h_rK5rAF|ICUO6++TTTJz9*^%2W zvRTy8T9O~fYEE>5n(p6LQuvY(3zFQB_!U?EO@#LbRDe;|$!u(`Er4w%;shX`K~!p& z>&~#hxV^zsc5@$X)M#>k%~o5WuSXp9jmya?0m&yf*Yk3dQX}f{Z7Ldb@trkhhSWbm z!`Ib>N`JPgLBOBZ+lslC2%w(1q7X>m$xX0-gq$ z+bMPHYi++Hfr`K%NY-%$O!m)q6V`nfgPNY9j$W`hPw!{ntWVk2|FMQU>JmW4X;99m z2X?<6AdJ$cmy(9xPOBP^^lQ19D8~bJYi-@os}?|5f`I%KPQW+vagCx+Cx~NJIN=G9 zJhfq@eEcUl=c@ojAZ6$Fqfg8+W-ukckC+8Gy{tFNZtikV)Wc6X-*nglgNYp0W&Y3? zIx82ph^-hZ!MJyOBs^MgxiVHlHV-rJ8)C~>q~#G$?em-?Ry6~&Jiy>%2jwU;Zbx=k!Qt}~d6TjwTwoGCy>{}3S z4^mvT8vePOla9Ax1NojOTYwwgF|Y|7k^M1-Dzxvo%uM`U0R1n-b}S8|e^$Z($bfmn zNkdWtJf8)SrHWrTSJ9SDb3XDy%qRLcJeSHVngB<3DG`u8$~3X%6*K0HDHjNOSpF!G z76fN&R+S=atDC1{Z#u_o=;>kINPLD3BCL64hEF-ot2`q+S?aaF1G$H^eVm8jT0exL zuf+jav<7(&I|jMiR`s)nz<(Cvf3*%f;L5%~)6SCF2e~%zQ1$$bo2Y%tOiW$w1JPJG zXc_BdBFjf-XcGQZyS_h#1QThQw_08R3>fZHe?Ca)4CtYYbmHeyt|w%I_pa$;w%ak4 znR&P3V6Q;k=>Te3VaHW`1qT6iw)d?dbui~Z{%>3D!LW_z!y zu8nDcx+djg8DUfhb`(&SSp*J~V1UzSctN?p2|uY; zxDfR;qO)U(H~@T*#C=sjB+RTwg2s=NPQ_Odmf$HQ6QhURDy$#4xlVe*L}Rk`g)WTb z@f#&$v+2PUdvQ9EjiEQ~fQ5ZOyF45~u5+B>Vv?DS+>zkIe715?;0|GyyRhdvkHQG5 z|A}7!;IhX5`J2#wAbm>ZnmbRUnsR9Ff*Qg z4+gcKe}ROrl`;Iuood(!q_iWWLYRYScr#rlv{QeYYC#(se^#EXr~fWbKSH`FYSA=z z(|d0dTgQwnRC=D_hKnCdb)EouIy_|J>Of6Shh0X%r%2`J!0!ojZ5S0ApZJVE^P(%G zpl&jA+gtUC$;=66%Jy_3W#AfUqTY2$hE=;vYG-!($pWfYmCFpMKvR)VZG8M6ZdCwh z6DbUekF0wM+9Q9(O8dsT2J6lAw4g*JM;HCbu1nEAcmCiLa3driR&b@AQquVZf{+q+ zd+mc;F3&tu#RI4ES>xI?epE@cU@{Z=SACycsqtfRVf!1_%z-vS6m76p z>ptH&b;=SE+T78D68%uEfaZ~Y{p!*b3yvKxG5SE-3g~tZPL*8!({CteV?fC`CL0}- z5tW7!6ZP_t=T(_4NpPsOK-NoInhYsZyP^_}={7lZ$7e2np)ft{0j3_gvrJX-L{cgg zkHpYEIXi>#M6XjdJ*_?+nnkR(;A0AXTDHe4lI@f&?~Y*cekyFm!}>TtDj?J8{;&{h zh>|V|n|WDE`F@3TU@1{^DJD-+oMhVbXCp5HML?Q0=zY9W*&)Qx=Q>vbI<5GJghrnB z^@=27O|Lwy5U-}OfYOhRWyX(PBtq;Z6lnr824kiV7F;iX-f1UCk`%ebu%jgMj{dKz zvjBVx%pviM&hG1TWM<*~+F$5>Ve^RjSTkMAQ&T*%Ch6MX>%Apf7lv!_wKncJD2g=0 z+rI-ULr%YBFmRnQ(%Xn*_JUu2&mPX%ya6#fJxyEi_lhx=;HzYkgEbgjRsh}40cjL( zz=ejOIqp!F|EJ^#4i%-ZCaVR^rDi-6x)Maz)I`f$51>YSnHKar_5v*wGWiiIp#TZ6 zD@`vUQnSvHF5+g7K9HlCLF62*u{tR-@4oolj_JSLo09^9Ta<^h($UwDyUrj08(_fv>bwfZ%c)Ra3r#OdvED!C zrEWq!NU%`H+SUlNjJ8J}Dxh5P#Nc?uVP5*9i>M~APsd6ny9&a)tPjfj*?`*$;q2Q0I1+4{op%U6_Bd#xt6xo~CK}E+L`PD? zA-Aku;(-Frq|vlYvc-@kpt(?UuG_>u;)N$a(Ur5_&^{79O}+6;wF%#{PO{H*zRKwA zDqkNlebE9Y`0hEqDHrOf@U>%|g}4=1KI}ga_x`wvyVrwpEAAh*0cg$0F*eO;Ei$AE zb}b^K4GI9(N;K%6MbPgp;TTh)^!jZWh6_(ahp^G;d9TqfG}<*=K<7BrkmAmhxsjT< z&<}=!dLaygR@p3xZ=tV8Y5jT;4-YrSy(lUmv0{iPuke#RcH^8_<0!&e-$x{ctAXt( z+@yAcJCl8G?*bm$qF>x0jw^}@3-xv(WXsp`RBr3w538dP^~vcPckzIv$ap5QtkKMd zel>kQvI!T}BQRZJ`0{hB-kyoJ6pYDpyNXJ;C(g;E!@svg2OM(7RwrzriM^FNS}S4CKvBS(m%oFQs^ z)0VE!cr{0El{?lt}rH#0fvGb$^%sSm!Ajg_4%*5EvLHsmu5>QcNk}2jj<62Am zxu;?{B%QR@1WI`{Wsy~KnN`V`-Vf>HCh1*-#Y(}53|KM?i?7N}IvVM~KJKI_$;29X ze`A!2h$L7M*nNVJY0T!x^2s;c$chDU+ykCNw%7|qUF{|wPt>h(zQ#fGR+=a8_DeK` z`EzPO_IIwjNn3?mBh$v&`dRcwcfl*+nA|c zKS+cojg2#drb}c{GrOp!OKr{>ajwZ>lj6xhY@A2z3-aWGlnOnd;~+g2{*LS-@9IOV zlfhHQNJO0^4scM5Sd7kB2JapA^oe!2`7lNE)vXpkg|q>=Mk&_w-I$27h% zLgO&K5m)w@=roHhENPw02xA@*?t>|YTFs6D)Fx0HtF09AOP~2by>as)cQ|Tp5jtKO zm~84q;dh5S(5}0#)jB3JPE!=&*R?oy-vHxlw#xK(JRyx0g#Hh$pv%C-SQuy4Lp_ss zD`*5c``H^#UbpSUW@2`V&mu-ihX@C93*7elp$Vsjyj=tMw~-<=>!)HLXoofi%@QaI zlsgG3_5R}d!q&r9P*jEZJD+<`?uR4e9g=(yR4S4}s9^8BQGD|$h3t%=y8wGz$-+`? zA;8ZcjP=&bv3u9_>-#1ql3kAL7I_F#-Z%)^9-bXB@6A@@^6^S7O%W6ngrR^#T)@jM z{1y(RGZi@)8Cphb&)yU6q5BfhA*LvnRX`1X@<*S=^}{9=me6n0)OW7s|1I`$Wu`WC z%{^e)qb>8Z43^$l2wD+3ECd?}y`z3*9jFs2uC8%L1NkS;iACe2m07(;?58#hzKS1i z-Y?8K&6EtkU4I-C9UA;m-Iyr$dl@1XTf39TlOa>6nBIu@x>gyL5jB{ZT~7&^&dOf5 zj=Hy0E+rge0=-ZVbx^GkT(UI=R<>iyDQcnsZJD1a*?B-h?EG%*y3!$=f8fs~sQr~d z$O)S@8CS$1rDdTl4|p(|dm0Zl9AfVp++s%RU=!?Fgf@}h|M!7lkBpVkhZ zLx7CJp!;l{GF81g0r`g-7{4lQ`@fAqkB=>&onui1E=-BC3h+SuwS%LTtu@ZEjzF~ zO6i5@QLpP(CAPs>!~2C^?$g~#ua;{FiH*7v4R78FafL#cOQ}IK4m8fdG0YxicJsu4 zZ`jPfehr7eyZJsYZ-5xct{PL-l3tXZTq4(EP$1(5!LXuJ=kf`K8H9*HG4|6$X=)D~ zBJ7U2ruZi(r_pSwus1)wh#%}NZ5Vz21#oEj9LH{>iLjZPKi;bHeW^gEPO{26CWkRf z4~t=%KO*mm7)%KEu1@>C?!mF-6AUXj+?JI(lN2*s{qQ7GwG__{dl?6RGSMCoSa%72-klXm ztMX2g@058opY9S8%S8tk29OCT0F)+1K?Rfo#G?hwiIFGYU^!qaeU6~}(vu|`yBCQ= zM$V=jmL982M0nv&ey2z(r)DllxVsd)sZW7Qk6-2JBzU3r*T+M^&Df#$@P-1H;?3JF zaG%y1NIk4!4>8l|a&X5l9eoVNZO;k)cdTp03EZ{Mw4c*OQAvfreA6{MBwS^M2dU|K zqL!-&qQ)ITn6_s7yA|3x3E)sUn^~FhWhepvwr2IeqrNeLyN)(|U-& z`c;8|g8Gw|)}5Ro+C@SmjtPcZk?VCx(;K7onmimGH8W+vIuGKd&*M&Xh)?Uok@Qev zcxMBqaha&~B#k}}704ULOW^NqxZiLqyis)Q8>d{$(YQJ78uyXw*HfKBGb=`RRw#cg+z@BQ)$X%(|q1}kTN(~gAHy!tnn zjO{c;)Qw)PWGwmc80IO}8cl@4TC&!=Uexc_cO*5@cX!S6Y%_l^6=3$O~rEszTMdnkhKMVLS&y80#U`TK%ZBz#TYOt z3o9|CU=Br}aPH5P=T{c0YS74-5lwJ)1Ey(msOGFpjJ0Lb)4!Ddqi> z->OQ*hW`dR<&`meWL>kd>&T>`^4BOt1`u_Hh;ST!>1b2?ibzg_06f*4vZoi-VRF#p zVLTE(aIFFuO{rZ~F=O6nBBGaBgf|P}kWd$3OL**NH!G?F?lCC@VI{LzUkB49WqWHw zo2>SZTGo+2uAE~|>wsPp0x>|f6WNyR*A9&5ZB~X54q$j>AqC0F8S=@l9v!j#wUb{o z0sgw<&-mGtttG93LFrLL5_QT&6f4M^?Xd_-cH%WXn8_CsODiw?sQ2p&NIlR?wvo!v z#gjlTK4O}`<>?0wH%0F&f-l>_ib7jBhOqU{!i~rif5}xb>?kf=^biXH(BHgfJv3nA z9BTiT)c`!$61-LK6N%BaFhW7~y;!y6a|Gs@A{$nuz@|hVw;pE2yZ6F-vFf-2Hv6@D zLtDL~EEOTZ&SA%z+dT9jHHX!$(L*E10U9M==D7GQrqOx)M~cX-ej)Qfe9qSnE$LCT zrw@j_#xYC_OI8n`V}PYhxd0Dj2ggo8Uxs{?6Bqq@41xMx7fmuU=3>ARo#~v`=|ZA; zgry~@G^xV5cwb9uH40)5iQTM&CqG#$42imQg&!Ltz*_DV1swT9GM4l8>3Fao+K{&c zEaM^QlRIf@nxC`pYvKXEnPJ*Q!Igc{!A|{?Wn%C+kmiDB&f2jkk^tO{;M#gYXs3Fe z_MUb!T4%)6EiiwFJs`!@IH#dLL|TJK$#h>A38tKhT2CLbk+S3A5J!)oL!;vL2jg?h zA?d<7BP3`L@{l~LWQS+51`T^{k#5GIawy08K+*(U=U=PDB*Kj*%zbO10Z6@YyTMX$ zA%?vqNm-o^l|#Q-*p_IZXbDh*J9c_?EVgdre;6NfWl6xd<;f9!!SwNQ9;4#Zq!q^e zBvZynR{tS~05guPN@L zF{#P~1ucX~Q7297{T>y$XrZqZD~2PU`wFZHdqxoPI+Y5V2fcv__28BKllUZI*u8l- zR2An~@(`>4&>=kpP7>`5A>y`5)XB+BIg?K?tf`RwyRwk@ALp7Ta|`5x12^yvTb;P!chogl!}Uh<#La^HiIp}`j_M4ylB5GJNXtI&^}>D5Ox>&CwE~KtFwJbw zC(|Oq+@@D=r)a7w--O5Sq1=y=Wq5>YYT!{+H^3&oBGRbCK%d^Y$Fz5XMyokrx@LpM ziCG38-3|df#P7yk*LJ$u0Avlwbn!=|E9lkQ{E+&M_88PzBi>`Q}50#>jC8bHzQ=qI17K*Y9y!h4HZk9A-WV z*bbNl$jg_c=33yUK8fRAfF8exTev>d(7F~u0#j)(HKD<=^p^*jl!P`cfcOZw|9rNY zVUM;-Jb%3S?OhX;|I(OM_Y~)oJsl;JBP@s)ATLelCSi$}ejWN&m0=k~Imis4Au| zJf@r>SUB3whVb?z%5 zC`%eoc_mx&F6q_6Z50K3;f!yxBg=Z}duYqilG#=LDJWRdkJ52*w|fx?VBmn*IoNX~ zF2?#y(t;XoOnqz0pAaKae=8x4VFErB`OpMUG))OF=Xb%(w5dxaC;XRlXM3ROgsec! zb9A}TS1kEJ^pRm_JHHB`TP;y{iVh|XY2>=>)JqL2;8QKvSWF47c9pj+%A9yZd4{K1$UoMlU zoAkTO=n2Gfp#M|Vg7s#Wpp52cMatMuPK{f(-A=#MwM6da+~gU#c7F9>2x-SV3Y6jg z%sw>!cRqb~#byq@bf_H*+?&}}usiK>aE$or8_$??z0_~n^z{9LSO2n@Mr4uwVRU=* zwiWUAqACf7YGic0jjstv6i|gguM#`i;(8|k%UGW-E=enY^HAfw2mG~RZVC!?(1;9Lpe3l=AnG=PwGf%+^DhJmuPZN8X5)PQb8F#f&(e zh=-o_1S?9Ae0IUji+i5S7B7ob~z8gZ6QtN9-$$S^T z6z|)dYUKE`wF4`v88??Y-HdLuu?Jd?;KIZLMNXySNsH(~S{ibHJ!`-fwcBtZmA0mQ4}7+jM!y;r?Iw;b#|{^1-W?0h7T zMAt9sxD+Me_+2My{?~uZ>SQyeKp~Da>Fop<$qMlPjn=ceUU$0R04)c8_9U}|cDZ~c zOD==Ell$klO~>94&NKX3bNl_Qsh#_^U>e7${68aa8-%Xagq(f$b)(kzbaV3GW_>a>hh4ERUu(v206*uANMY*4m=JK2fVbm80@= zIPDh;_?XEfCGTq^OJ~h$*(rsqh<%WZ%(HyVYW}IMF)&P#@yXcBC1E*%`dpcC1npCI z5-l}LYnAv3;Bcnr-6kb~5s?_v*!+M8_WgG%qE~y2Y>rsJiN3X_tZ~|9lBgu%4+o8! z>jjYv-%9U?8Fe;PoD*L6I7yiY<>|^-B^T@Az!fJ}i8)|aPEOXMr8-;Rf*J}5ji}m4 z$^Icigrzjfq}!sPrnaB30+#8@G&y+WF^0Pw!)+Y1+|OQ5>X|P=X6H9Kc7XCC-;jPV zDBg9dLdhr=&i@Rr)0Pec<6*Qc20>Y6G$r45T7%*gZLD2#u$$(CeOO~oXk|aLvebxq zq-!(f&c&W92@PYv92kQ^BxUO3;kQ3E*{I$mvf6`O>6o|=w<1;lV4}kZxkR>3-Y>0C zM+{o7TZzDJytmv)uRQ$#s9L8CT7!HB6t-RdMG|pEZxT0bohXFji5pqMu$u1y09pZ; z*;%q$R#qmiCdu{Q>Wf+)Yre%G1Nv)|j@nd}Mke-6os@BEu0(l566-CDX;#&~qJtGPvKa{U9Eo(Ytx_~U zOGY^(>AfdI3pV+I#W~*ik$-}?c%AudwtwmawKFsldlJi&cD%7UOH>`Eooh6#dw611 z!ae_}qtyup7D>)Z9w}@(GD}+Jvq<#?h|%e^z#aR<$KC6`+)BLn>-EiLu+w8R?S*Qx zZu#E-*aIyQ zSWzjNkT{q9HfmfK9IOcS6i4hUrbROtSb%jXxmDfg)lWnu_p*sR*qfWh zxHKPe^I+)jg}LwyFT}uMlu3=vq~Le8l33!(@4;2NLI5lu-xN)g4?rPSh-{s-mMd1y zGq+WV0+B_l+UKgC8LzzM+7j;!z5>zkGY%tvVSe2oN7jQ;cr*xL8(yH9%!R4zFkqy? zEU2<@Y|3=W#e`lk5-k!SoHSQV8Z)B&z}Bj0eVoJlkg#O4_y#|N0g4%|F;BB3xQmsT z3HJ1nP`om+V4a-m%RsLLu=I>u_)}TX>sn+{UCVM^U%FSb5kS?#nBX^j9D4@pK?&LH zEj$c6bNMaGqNpwiLLmirN_{3-W7N3vL-owKo@6{?If5Z#M9C)lq#gcMqv8K+=21^v>4pajn`h0HswWXGW(_gO#5 z+8Wkh4-4?(Wwl*O^3uV|8V_q%#5TvVsIBrWc{%EJ<%GNMGbE9PDZp`2#tPg>M|#6l zPiZkq0*b)S&qkRL7xDr?3Z@PI4&ID5W3e-$U<8kj9#fJG~ZH`>>Xv#VC~ zjP}hKc~^WVdn-9gf9GZLvE1X0^Q6a0owV()2L%dO&{7w$hB_TX1c#-Zoiak|uDr^} z$*UvDgY2>9zA7)>UMj7?OuB1P89*ZqQND>|EL&0F%RmNBAtqe>h#5}2x z5XE`mCsdPdP(Wx>oKJ;x$2fu=`nm2E?P{XblF%bE2di*B893bHCJC%(Oi-#DhhT0s zd#72hv88&PT6;v0bT@SY!#|1p16gVEb8JlFldJY_RN5Yf;OO10l(o>Nb9jd)E&qhh zfX!fjNud{+R#9sLZGMw@7~E^`O<;=rRufI0@B_MU5I=9sWpHQzleq9J?(i1*pg>)R zhC>hH9ir#$xFN24FkofBP2p0$g(t`r7$3BZSW8^WSm=#v?!)?Fn! zYkz+ewE0~b&3I>Y@HfkqtB6s#G27B0P$dFLXrFmutTlT?Pzo5@OJPsqP&tISIs2=Q8XkTI^eAeNWkPhcKBLxe9lC~Uy1m>vr z%mXK8&wufbidmBYU~(<}e4$cL987Azaa@;ifMK^KNpOS8g6caflzAo!A0=8~7R>29 zR$F|BOIu9{0B;UEGa~b)1n`jeXy;UPg$9{`%B1#<&faDYUVwlr7!}XIcRGw6OpGT( z0mk$yjd?C*4A-kjwEYx;>@$-?>9og_vLurG92{>_b*zaDJ%dxB6j*mu*6E)7V~+6z zG1>PFUkodxfQk~i$22y}Ud`oCG`y>QhLJ=L`mK8%N}Xf4h0!+VJn~Y$#een|egzx; z5$Npxt!U5Ei$G^jvz?uzAO5f~nb+vOJczL=Fad!IX`0tV_rH@AU02g9)^?1&)f{Zc zXx73_b3(MTBB<)zeuNg`Eja;Wag>BZtH*0qPyRFfQH3aUVpx3)0$^}&|9mUu zeHfM@eLqIucCO|2^I#3CY;|Hv0k7fB}r259h6+Ppe(G$<^-rEZbMwYQxUac-=rla zx-ZIr1VnRR4g|e^U=#u;K?l{>NSsK$nT}GNNDigmO#;TJZ~+Q}7iYZjeQ>nrsPpR| zlIA@)-Dr*R9*8{=@4QhwB+!O}EJT49D{(h7u(`P>?DW{dV1+**vaqA3(^n?#`}tns zrwp|#(Y+KwQ;ZFj=-7$kyQQ5dH@;$) zTkA_iU|(r7gUBZd(vvEkr_PIF=9n2M`RW9O(eH6{g8gqgxKQ17ypb9E&K~;V#oY&N zg-w==vVV&PHAijpl{6F2nAh*s-1s>@mJC*JHPz3AAoNl|W*@#u`^r-8oMRhy*TXKB zgkM^Jeb5!r#r!-4BliI$pF?7jt#W_AAZD)0oKz~_YP!`gjDkXl16jpFY9l$z*sPgz z;$8{nwW<$JME7;(BlY}YdMIiN=fB#kiB1)A3rkD|U;Jq6!zii;C@rxTlNnsas(&jO8e?ms_q36H-cX z5)RcN##24##ig?d$hxXgiP&Tgt7_Ps5aM4syTt`}o?G``KZ`=AA6a^%CPlR=Brwoz(|5DSdqtz=-}Xh3a69* zv~dQi-tnMJ`)@xo%_Z2+Ljq5@=j`7`G|f5S6%+MFAfk{Gc)Qp5O?GxBDO~OcENs$6 z>xfVuxVxiXUj_QY01)vD0qKJ99k$J}Z^AZH3;m**&ctTiV7>LMMq;$_dXyeOTO@Xw zf1f&!atArF^f_?R#1MRFIx33#NN7+3GkYPgD#}2N{6HwroR_t`TgFDBk3Gxx6_W-w z;g`5E`rT+0l73xgA&dB_fa36~U#adS*cs3RNwISxKcddH%fIVoK9d??(eK_z(@Ek8 zJw7#G$czbfz-p`%QgVSX$>Mo5np=}gFio=nKm*hckFY9JXl#&yz?^>RqRRVhsKhen z>e#0uwU2#)VAuuE^`08CIA6$XX>3LLYeKOP>Ygp^o zB}?aO{`?B1kxL<|yZ8DPFGAIt42^^ht}b5eQ2(!rAwsgz7$OB^E<1dd;4Q-H{lI() zdxm*|DIju`8&51qkJnLvj5MT@()?Vd+}r+{ddPK3KG@}9F+9-`01ZjSaMfL8G^UEQ@ zNRh2fBr~Er7?aQssUyVMv!NyNnD(_(6;LBYUAf^9S%|CEmAGGK#vCQNw4ZdMDL@XU zP^RzifXvxXji$D)0ly3#30q%bVTKgO23nkNeLayI^v^SJtU)l34}W-Pm<6BKq*2HQ zroKT}PSP0J>#=tR9bu4DIcSv@i$1n9xW)PS4GBJKlOMjeqYT-8lTMQRq~Ga=O)!p- zFr1fvvZ1{V>{m7ML#DO%4j70)yf5kvUN0V;**+ad3AN&}(R;Z+<7dG2yjt*fY^ z<8t=>gg=$$eXEVpN)=ob6i!)*6ERwnJf#-3xeI7(j-8t-OiANgxZh|qU@xn;9X zvSEc8_u|+Pv2heib*rq4BAkWt!L7rUy=G5M^+(khyGW%>vs%rpyN&&@kePvq*D`55 zuDjk|Kjsb_lzvi79tl51=C!kKewvk;D}8lIy#pR;NaL#-Bl@SLpIC+4%ao2V8j?aH zPEWr*QH#{<_Q38&bBqHPngnj>Ri#&6T7XTCL|46kfdD>0sTTf@qT~igGi#zaVpyIk z@F;yH@5ZZ5lhfJ66{i~rw)P?iw9>Tm==e9sF5J0)uV|#S7vgolQT7b~WF+0%Xu;a_ zCr14kTZxMlJ^kjMmwd}cCVPVZi$g>;b6O{g~j$m&S(m?Q((~CS>e@aRM5ujIC?bEYv;sY&>BkfNH=fLvfSbh};v? zc2fYTrV>8IimV+Bb_2++YwNRDjr{!T#^_r_n52vI!Dc(xn?R zqQM{Uqvs>+3#o90rDQ6&5DIPm+fEJDq08zzm0AUT`x3%H6Jw@`U^V%>Hk(rB5=o|f zQW;x(lrrb(8LQiP#VJIh=X6zV%nU|~@-lFuJ|$YPAe`6AB-Fn2jETO@-?zOAdo&Gk z*`D^?fYZ_~NC@^$!cIPlR^4}C+vT9DR~(qq;*s+i!BTcI+9(rnc~Og;#t~RQ#jU1 z;2#&`aFP6zeH2M1WIwkZ@`Dw0$-!=sA^sD>L#KJ_IO&v)+Iub$b~@s+{8Of4K*40w z1*!BY<5qH5j}kE)q^6tJsb6tW+tmZrorSG(iT7hn*By=PhV4q;5HJ1YE)w<6$}z?RCO zG+1-yT}ocQsC7!X?$eFF%Hy0rp$QGi+wBeTC`a(yOQTSZs$n;}Q=8*_Yw$-6;*CPuY zomX^W7vECAI#|X+Uu?9c0iYDcC$m8|aQYH~MUrn9wo}33$vb>5u)rhCO|a_jx;KEI z8Wwminud{lczK>RCTQ=viqL_ze+dcRtkZUGBqB9QA}G8rN==Vmi;`~RGZPYM<|8i( zEASVz{&=r#!0JcPTw-@?HGG=oh78l;pk0x9hLXQL;{0@5tTJ)VAh7-A+8}!9>l%|9 znUYnfd}kj`GpJ!_DQN{EZo@d%OZ@db4~W_E7gr69bg3*oL79{Z=m?et9Z9Z47!P+# zdj9m>t{zC?ctDz7Efzb>#uI$`h7rtF-H?PCp6hr>&&)sz60B$3oy#=u+=zdg;_seh z3%oz){;I9G7q5g;0!-us3CBkV1E_r@mYmu=uJ%$VqB$&=&F8dNi=M2yzka{-( zyLp9!M$&%(|Hv;39;SRJxA{kLxtE8OOVtl$0LxT;2TN?b=7`Gc&Zfrf&{r(q zHFqF;SGzxoW!VD$y$MP7@yIf~+>U!9TnBeJ*A|QA`tCf1xfvTvQv9Wt8{%CYPKJ9Gv)o{3adVG18JMK%5Ie(Xj&X0uwtVRO3r z{}E2#Y!{*+Fx$MUG<$5KR9re)vDWJfU=nhd(Q7~YAaS@|^2GB8w1hC~IXL1_B^=bW zIS0+{gXxr=v?ttYAfuB@f1xJ7e@~Pf!AKf{Jqc}`e|Bbpfzucu zp079q7cz3nv@*i$UNKLE3nsb7<=+(inyQA{HI#b9@AdJ82BAX9ypzt@ZO!H0o8rL7 zj2I|%-&*yRt(ca9k;@_*;jWu}W*Tf$h;vj`z0^^LkriyQ*eljkqKc(1xJUmLpq=~~ zPgg|_7Jpj;Zy+wDBAy-Kds&;f&)Q1hN)FS0fhoMl>N=wc5j>DqX%n)Gz0vcTZZ~{H z#yifMkNnH$oQRyh_Bfbr$;jz|pLX;9^2gX}j4;PrY{AY*Gx|}2zgurT+)y6*Y&SyJ zmK>f)i9&LXem5NSYZv`H0U$E43y_`{I9u10_fNVJ|J_W4R7B%az1DDNG(R}U<&%E> zVj+^Uv4;7G`YXWK4Whgc5P^b#x}Ja!MJN2>T-5YdpF}p=f^aM2E&?>3wm9-6Kv5Kz zXeD?^B~K?utSz^}pNmik8>Fy*l&$a+d?}K45W44>u_V$J5bm3w$~n?DYe~A(&L^g+ zmV*+CRi&%}^X1wyY`$P+U)w;?Igl|l&_7uA_}xR}SNefHjrwWQ&#|}_+`lzR1yljX29<~TBY3h$9Y_gWAG00WlCZiM#+@VZ~$OIsPazbj(l z`GL=%hf(x2ZhuyT_$sII>;r~=_kS-P_zf9E`)0f0WXN3omI1<> z{~2h?H*xiNRc#O=8S3>B+PHCvCGxD!k;04yW3686qke)ef(kUZc63VA9yY5aAFBQ| z*FM-FkampAu0$R$^uXK5?44Y#B~E>WSB)t&dFp$_bbv*cJl)@X*#T~)PMyv~##759 z=tI|$oKGXDnG`Z8yozSb#zWV-V?m_sdM;83+bs)o?UIFPSubw&_{oI~2o{Il2Kn;h znJ`-k{Aa7e@gi|n8$vXez?|#0^%i_70R@%j4DJX@@@Tle^dI8v6n%}cN0(;l^wTSV z7rmE3Va>>yBwxt3G0odB_B2!KLqX4e`qA+v3jwaZv&Vh4Qwd#bVK5=H39bIJ@RknY(HS(v( zyp^L2m@4HnCzSo(tnmWIq0|*)MK5j3apT{frS+cQ8smXdi8te;@sFVk%;FKP_GhXA zC;(2{JiZf?vxNsx)XCc3Rkxq#Ysa17n@L1xwnN1l!AG8nW`^DEsTkXESjdOkynXl# zMD4J9E&6a5*J9|2>*^v;A(kj6N0n}`M7zuJy9!VidbNQWpT%5?+EH3%W9F^`<0aAM zbpp1u{B+rRm(`v6n!|*IroWJq3R3jy8m<*5tJ>;RXS`GP(oyw$p2~%)eeKGUui{J~ zZ^9Sv*&Zg^#O9V#`&#ZvuncyHV>AXjxn(}g=@TQw2U>xZpeps^L)aQ{iZF8v_h(c3 zVriqYwge;$|H<-*q=SG33}wEYUM_HX6?)=Z=UK7%S=j=wVS!_tb?0GMjZX!Ym~izg zsCAFN8Ob)2N$&j@wxO?v(B2EJ*$K-=BF!Bx5498~>--4V`Nm?rXwLj5Yit~IQ@=%L z>!WwdmGog|{3$hA;o|r=?P&PUm^fPM#|;86=q{ECGyLhOA>oA=j{5oaGNr>)f7NR1 zjs2}h2~0?wtFEe$|DEj=pdZ4@b}iN4>AtFo-Rms)Va`O^n|=g{_^lo*~L9$759D^?pjp0Nl4xZn~BXd<`9*UqHB_lhtK&!BYkPR(TsP zx@~3Rq|8rBfnLOHjhjqS*bnL)?9uZqKO%J3vE?Y;tX0$LeHAmIE7$gA4)PlsMRt0a_yoGU}w8WeN zPPx_aXfgH}`qlPO(0`N)QWW~u+TUs{ZZ>u@C>7Sdvt9|zr=OA;ip%z6HoAa424$*7 z@EA+S^)>Incu3;hgQsG&W~+Entm|ReW5I``lrkNJJ(gu}2U zEpK(dU&Sql2Zcu=ePsUK^`U zmy%8{+ch2Rf8fP^bbmgBJ>3$|3DdQM22c3u7uxZ&f^oSRx_*CY*-gu;gqI4C5MT4G zdqnurvLz*0Yzl_~>Ax2Jdv%_rcT&@!4syH@-rQ=bEArtJOSK%4$p0Cg(g8>B+NNF1@;{&Ugd}a@FA$>0o^-!!Q)WQRl*M5s6jAy3b{{=tHibu9uOp#8g0K zaQ#sMrq+5=`mA30XEOp*B%SngTZN=( zjxHebripQT%Hb==USs?QHU`Cd2Nx{cEg8_--^t+JyJ4lnuTEIRdta`7lRlyLxX`??hg#yWPY6guKhjTLQV)?yyDsyPCRUjqLO3*J3 z&)p>&bi`PC8wkohQ#veVD{h-vUxXZbD&z+0I970(erce%SP9j7;4TQ12ZbyoM*XKH z?VPnrs|fZ(?$E4>)j21%`lO2lg#II=qWVia??PZX^p++|_T08ChtzbSPRM)vjCSXC zO}e{e6&fJ+YF*04Kz65Cc3Q5}Y39I17Q1HOavC@LzfV$&W!7AHd-b1B*y5sk=DqEf zk3mY$C5)1^+ABoRudLK&#q?e{v3g_To zLvnzEIppLIuv=1cgX?@ecumCAzmpTY!AKi7??oL^r&;Lf($%2@@)_S%qnyYCK!3*A zr3yGqGiO8;!*g>7YhdcCU0`aXB6g%{RY3@)XL)$sq>z=mh~;GsWADeGu#Sn4&ns`x z-ez}h$|xyULz+ebA(Y8Hv z1YSy$41{=Do@8#WcRp1puyRiq635yPVt1@C(+o2kak3n+A?W}FG9OnCL=MVD#K&yA zJIoCBq5=|k#v$~s!l-SI%qkCwv=8sj{v`Yt9(;HdqBX}<-$aB%gFntr=b_|#D&&#y zFJJR$*1YMvaG8jKGJYsK;vD4N(w7lB3qtz=0aAdiWFS~j)-DfV@jQkGMRt4^Iwo~X zCmLK`4s0{F(V`EF&?gWAQUcljF5^^n@}m*#0e?QBaU06aJt-|%^!<0v)@#^(HTPSf zYibC%$?63=%S_AMvJA4FD($`glM0x=Pe;*}J34MZ1eIu&1|8*tU(!Ttn8y5)sKx(d zDm!)%MSckj*&6<4THGpAvs^KPyOzmMbx2F`5@Z&IT#9k+HGd0Q8@3PK2{l0^YG9e% ziKnET_TUoW9d<8V5^ZB5t#*syMNmqYU;=-hW8$ro890Hs4XDUmkb=wee83Oi0*_9? zB3Vag4e0KX>4$Q{D^ymW<~oAs=oFw_S=|h!Hx{OOB<7eaVmwo4!i7{_p|V8r!el6Q zs$6qi>qHGKazWUG^r((IXYS`XBO>n)p)$^ito~)L9RSNZ-mr~|9yC|m?W??85&oA#;VLWv1Ay6i zi7?lebOL zNyzrH<2s+z>V}DR;f#9ZwZ}Q3doK6-R~fE z{xc8b0vv%cDM(-CK=8+l>eN`*gVHj-@mnFrU{_*hro<(~99borew48(my+wFakZ(FP(J#+Ct>plQ)Lu$%x zP07fxaPJa&k4u7YJUKTE!x3v3WSu#9^WjifRh;Dk$y8vgr0Kfz&3)dGDhEA!e(LRT z^W2YOy+Qfg9k-ty2O^{qE9*R_jUH}ueUaY%O(7Tx% zKDHelxPv&yPQwzsq{VSg*F~LM*2MGr|Lka7i#>3yX#xs`KJ5$J9Xe7%dmBEHBDaXJw3kdts;kU16?q>T_ubuF z6I*C=^LM{;@{|yLBGXnR6a`}q8%25)L+{Bv@A_iIaDjGhrpu`g_{4K zHc2=y67g4GrcS0ZEA!Py0Nbq~y!tY*$+<{3JR?04#MlyTec^N?x48^2kMzUG4 z8=TOr){=o|N0NA_6J=@1r^8`G)LU-r@k`Fb;7co0BXr=&;^%~1QGO<8E1`2(X1pJP z3$*3l`s#jQLZM_d#@Ixjx>qO?`y@*O=w<0!wq8re-jdZ+X>`S3bY-d45ovw;#Clh~ z>YeLK1FRrMWEIjT?U-Ks8ut@~LFjyIB?5o!TNvK2AeWf6mWX0D$&@Hyz!>~n&Lo*S-~c61$hol7 z3%B5tc)c4X%h*VP9t-d|Rr~~?Sc%!O>u#Es<^6iOT};ZtNYRvX$z7uWy!2Ny$%y2x zo^c3e9q2%qdDh6l zzv9FL6iA``E0IaGBdfu&UIpEtR96H#BURgx&xm3}i`N>2r{+<}6i;Srgj7X3ZlcjP z*13X1Cg$Qd|I@nU!%V=|*$h6UYbpK0`mH=Y9k^M?B3Ev`OwX6X-)KLq?eTA>%f?T` zo%Z+L=iS$JU44%%m%}#&ZG`0~XOD*8m|De!h%7$L?y_UMeeYBz8UrV@n}Ib7Y2ld% zkg8Gl;`x3in=`FL0OpM|WvC*pN$owHd$r9*AGuxz>*Y5N^ST9ZBHS6|RD?QXD|Z${ z!p@wwUTQ0vVK45k4QWRj?&B7sl54%3MEJI}h`Y#Qq&f0Am0=u#6Srhn@mHStFIIPF zwSI(QHRFzrWb|R+><3+{8T+ZR?hNK_NG=bi_`svff_38}Vs^YwQ5w?D1p0eG>nlr8 z>p5dKPr)#*M}!MK@05*Y9Eny`K5wJ&c{UI6lZV3(-cDHWZ{{Ot+_z-j2CRRXVRQ(; zi#(z>83H8Gw~dHe>PZYpBG+yL+551ZOaJM|$BX=aZyxhas_6W}(0S2hKd zRrP@X%81A=Mh<8-*8lW!XfdSKvC0pyFcS?zxzY_oIn0eY2>5D6dr`=#xYp9H7Zx*% zzLtFp_fDIoz(Zp2x$Au|v)id}Xf5p2UEhn&N#A##-kkD2t9q|eIzTebE2%(%SpnZ> zD&a0PS4cup0St3l@}TBTfl@rHn&;jl->WVkmHn<{DoiN_BW(kyJ^S+CX341cY2CJ~ z{-Ijhl`?QWtkML4{P)dr$m#XXscd-9Ro1`B>&!zya%c*-P|NYKP5mmi>-OR9z!)yR zDPqF^-P)ZwdxsNBr;^c<`QZdfUb1>NdVEfOm9?~DK`PTeBqdOAV1W|b|B$Ruy8_BLZ$+(Qg2z@CSW=?7zLlo#`}P^K>4*a~5BaK? zJs^1Xvm+0KO^KB$202&NV3-a27w`y{`|X+OVuL0eKhdI~WtcYIArKa5_3`)D-fGlU z=&UGL>wlXxf^?s`a0t6g6qaw zPY7#^hR8F4c+!w*>D$1Oa6Jgr$i7@5CKb7cu2<(l%@xXqVMp!%3@B>19RbF z(ly_7QXa0nHGWLsKcV;Odv7tF{g)%kU|Zo{tfF%SAb0bHS zU#j7D0($96mW6`c4(wAw)h+LvI^wgN}bF&dfm7*gdY1!W#lr)nkc^!qLE&)m}P z3!(^!r%I^y(Nwu|b0bmWx21ktZ~qJ^UBOBhFutV!yukpERgg;Ek(-r`9Lf*ZJHL~$ z&|ms(97z7MrJ~ zKT&ws6pCVDn@yGLRTJSilkqlQSi57v=6u4y)k3>_MxLPYKfkHDA*fw>KXQfg{dQXt zF_zR3t9c~$cyl6eyWF+bGx&T|gu~3Z!hS6MJA&%kV{MCjO}m~wOqzeJYL^O7x6ZyB zx|JiSX#8m=H5wu=s^aYY6Kr}aM7g7Z=DipP^Sc)Fn-xyW9~Xhr`=UC#DaxV zAKmogFy{cs{1-P&pvNeND~hXtrQ1issyX0WM7G|*C!T#f)J_`h^%)&6m?_Ip;H+&U zqUwuh!2A+t<4hijwK{`|LAwt42NGIv+Mj!UC)_|eh~)5cjoaCCFtzDmZd?J>f)~>H z2DdyL7^)0N>$VC`fzN0UlGx?0gG~G|v6}R{2-=ceQ}A(;yKljNY6DRp^U$niUIrTu z*GAYcvA6m`ZJ#DUwN5j)<+X9W@1Zm@rfFcSstoa>7Yqo>@E)h$COkk3t)rSdkmQm7 z_#IEA4yfI&m@Z=o8+KOG0%QnB!9-jM0 zMQ<6d%dY%e7-yY30jMNcVsQmJl^mHpC#jvk@_&ues7*pifwKEx)C{QJ>#0$g?CMBs z_?11)d>1DLE);8zi|`tT_9`;i48RY*JEtEi2L{rJphNLaT5_tnmu!nX81y*L`G zA|bMDM+-d0_N^%*V@vhV!O7N_RY~PHncZ8gkHZrm%eVT88aZv?y z)3%R~Ovd^B;?NaP%}kyB3Vw4Q z_f5r5(2VI>?U&v_-o*K8mO~7dl#X#4Gt>DI3S(xZcanA4_bechun%rD6_V42?xMOs-kXrK1b=vQ`s7Ix2By=} z+-_BO3I)MAWkN=4W0-?bEPC8dhA}YK@I(;K7E6UVON_dlT6&zG7NT0rOC28R>uO~EN_tvr;#B`BN^;=3hD1`tp?bIm?Uy| zlX5sA$(;T-X>W7ug+b}9$iftZ{69nyg~}KsCh|`8M_#j=_P%X5%MJas)iOxNVvwkA z0IjZ-7M{iaviuZxT~-1q99#MCpX**fy>&|@;k9^W*x`M?@#xSBrBS2k4St;~-euF{ zqBb?0=pO&Bt5f8Xvu69&_d%7_8p5EqPN*LT_rAwj#Gy@FXla3>=GX=;&J*QqOo9mEJcXjf=)f)`^@-2g87hd&;LyuiV---&Y!`< z4q=6wa`%n+UT|8Yt@Y}L#aZlQ5Q9+LIr#aaTbZ(wTm_g3fE+L%qtOO;4s1{#z;8|r2W5yr|XoR_4>7# zD2bnV2Kk1Rrypyi%@E>wb;ql;X@~mWkH;rYC`Pey|eEew$`%RK|!YzB}(Q@iB zT}Fd5^KO$V2oSAL;}kwhV;c`{g!RU*Jm>$SAtLFDM*>=K7%hLNW6F7PjX12L6x;MNvqvrYNv|I=q+wkju%PviAkM{w-z$t9 zMO|1_%8Nlz)}roXf%U(wqEc&=i%k%DYi1$bNnwzT^w_yiK4ndHviwI}Mv zH%A96`+3Um9VcRtO>@jG`g$WmAU`t*P+C*nq%7XVNQ~|&-gG4>7v%ulFNj<={4C-$ z^~ws?AIIklP&I20=j1SEj-Jl&87L^CNt)RQV-O%9bMRR;{+bW+3lh}HH@yl;xlnOp z!>at*kJ_PpfiZl*l-n>(o@!#`%}J|p=V&6N^P z;o5g^2q_R1;uKA4JC?8@x4ghbL73J$txQcKrmY;`|7p{5Jq=)OZWeACKTQ%(w5v0^ zBY>g3ocRh=SuVK*b9Qk#o>`fJ%Y9jH19|Icox5<^J$J_0gczDER}}^%G#z&vuKfcC zKZt6~Q!g|8X?18@-u3YSN5Rq&4%js1ai>iY*NnW*2l%J9Zyht*;HkT~gSQx0xI8D( z(5}1&mWBsgX~;8L8OqPov83+tcd=Uq*LJuwrV(jG!dtY!_-gF_i+tbp>3xgrFJO}4SClu zIO`yo>?)rs#7IX(h{uuapR6&tJV;8C&*g(RL9U!Mktn+|`M1Nf0to8)$#k5zf0K-1 z^N2>T?mySeBMwX2qS)8|cUIk?R)pD$V0rB@ z12ffh=_P)7i6>osbn=70kvCyCuCBtXaJDC26B7QBf3SXXtJ71=xyOj|iBjT0iHJge z`Z+f}?xRHuhi8@dDm`w)CY*4ef;>HMzu?-PgOb_;Qv-1&b-+R$B~%{k12A73TpGWG zwnKuZg-m+3pH}(ow61gr3|>E0o}#-08bVZ5jxJc1L+;S^M(04MK6nMZH-}AP1VhffU;vI)s0e9y zl7`Nt7G$@9){PgkoFPHAW!eN>09vUHEt|Ix9ZZq>dG1hdbB16qp;A@;a{x7dXc=c* z!!Tn8GWi4%DhP*u$HQm#(Hn9qLmlcR&;y#Xzx`kw*;60UwC0k*K&GjgdyeD%Q5t{Y zPF?L3_J=j}I|DGgcAz73x;cm%Bjm@J7Ik@%c><&F3zRTfoeYp#`Mz4E9{1hvZH#`F zsoN-qaOY_;y^|@s+JdPrgEKCtdL)5&f0F8uL&*EcSv)tzchcU)uX zFJ11~!~eoX&JB>YY`^xK15+qbXC(L@JDXpQ4x1T`B!hQ?uH*q$5lDuukC9sr0*6RG zJCKW5tSq>2jvT=nzvl@6z~Po&YuiY>b1CpHCd+T{+L-p-R2YC^C50bE!U#eroK{0_ zVm-n>LCn=HW#gZ2`Q70NG#d!)c0F1;1Vzt&2MH8v@Lsf?C!W#B&NqpNrv4<(<~j_m zYhBcHEw6SJoV1!dzu0%?NR%hPg$)+upj%OUt{M31UoB;Zb1F3!0MR27^U8o>JlJlk9q)?FEJLH$zXKtENwRV33lo>C$rlsl+JQHI zk{v=Woi0T81iM2AwNRC>(2%A0x}!E;Fu7vsA$%?W3_`MZ_i~~t6bViJmofET*-hS9 z0=lQj^=#n4@fgp?Dd$GA&UylG)=~kM?l zXW`>s09CI(SgKR6*vFzGUry~PfTPK`iL4V1CSp7k#~MS`S1-aXDqzf1zJY|6zjL!I zeohuqOA|tePsBLE7)35cLR#Jw&vKzt&M699ml*B=((F<$X~u39?ugn5()#qUIG^EN z+afQ#d3;e~L&Xc|K-1gj0d{^49*z(&tZ)^E`S%VObB}7KZu(r6s9X9kfv}|kVv;1+ zY6t~XO!gr@-_M_TFxNC?m6HmOE-P9+ForSvhGiiMP!4dVJi_u=o)bU=(>hMDxzV%$ zW$*0Wa5|7I=IK0427I%${}cTo2kYIo07CHODfd;ps?4}Ob%c}lm_F8%qnyvCmH*~FosBM<6opCx=(aCk zeM|kvCa?XHwUV}8LfY4nR#~Dgs!WY)Y_=+SzSd)NDy}WBJOY>@17_QRLvQ(Jrv-(aPciOJ-=CSQ)(7&%sS(+IlqdNbZ2!&VeP_NU{`sQPgU%E}J>$Q%!oaG-8d@QvF+QPK>|`NMWewLMWxA$ zsSbkFjy;;u)Z1Zzqwe5`l|4g3(ooGY7kuBRJM9X%p(|DKyHR`c%xwRG>QM03b2Ah# zU*63)BRars9dXK~E=P%zjgg~-Gz?(oiL4KP4Ui~dxsv8ufEcMn?(B98lCDHHY~(dx z4foo#wXDT$=j?{lQ*&n6Kd{+lUmwj+Gvk%_P;*_ z&jh>_se(G``t__|!kp8r?R~Z?zVnca1k=7hjD92(H4>Dbm$LYAk>_ zdi!Q;YkL8P+rN^$ZQ5&eKVoyW05+%gK+FPmAow}Fjt9zxdo&RzUC^c=LO!Mty-t$5 zlYaHSR}KXS$T?o0ACtr!RwXSSAv({H|FNPR?bUeK@C!5iM0-1XNVy=kMdFSZ*5X3< zdQ=>-#=Jo~XZB*$EM0Lt2VROH)6ltZ>XR@Im0#468p*16fTv8fp8;_bB1`LzyqduL zv*~JXp1A^EY-WE<7kMf+R$`g?Wa#h+HtQ9VwQ{;URN7B|(&_z`@?5 zA(&KWF`auL;R>vd_e)jSa#FLTrZTIMYmmP*>Y$<1p)3rTg*=d82Zam}{0E1bpt%2g z@L=e?4PEGgQAQ0Fy%^Q|7pz{Qa==ow9s3Kzs%Hh2-C9L3A`X2$S&mUNC z4abz0YS;udL&Ft-kW;oA;@(x`S?m3Bi4Gbq6gy#=m$`KvC9`8#wywly(`F1NGudMr zkcZku8_qUbR@79;|Du6Jp zI2hSgV|LFvJR*;yP~HQ(4WE8P#X*YyCMbr|<=mCpA5ZAM8|8!F_Y%5kU`nGk z3NOeS(zfXmxX+5Gg)Xpzy{kwKK9~WUeyo>vlo+FQWH0;CN}DDa170BiFuBTvX$a`Z z#HwB_=R~7Ou|Wr9UHwR+(Ek&EkSOl@Oz0(mUAZY7QFZYIsvlPhAxgzol4-+)xqU+m zbm=GwkL#Hzb%$=v4r?nut$fkN7QBMh$gMG^BUdxM|O&l$o7Y#cD z8o-in4oe;1P_zoh{y7H9ETr+qjU?zafBP;VpeLG3!ydTT@uY;)xoBR*Niy?bU0 zkk>n2`A5o!f7gS|Ze^yO{k20D+N0lfvafzIH3vkghv70dy8S5q4(~UT84)muoT$yR ze^dV$@Lz5lN>37jabxGA9;8`qL~E@}OAcI*mo5H#>dd9maU$9Y6q}B}Rg6zf@@=Y_ z)_=9xQ`Il(tF`twPi(n1baN7~e7tZp-%!+>tfJL8-k16jlI(gsFR zRqS70so)6b+S7@GSigzSK=Hi09scID;(jG*V!jg)p;}{k4PDkg_tFQOiKuDtjaccdC={ADGh$o7xY`-W23p0l;K8Sf z>c8K^fihiH5SWgu_om27U2=)XBk-I14YE<|ukYN%kotGM^}k3l>d*wv6Yxaoh)DdM zm@m)7Zlj8a~%=BvZVgZXDa@?ZLyZ3t)q^X|OQbApxR{##3IdRO^+R(Cm_ z3V@oWL#Dh3gr+`{4_@17ghEm$pwdQUCD){a*f9&s2*+*5vg|nJD?j1wclE!NJOM%P zShT*E+zRzPEOX6TZ%b_f68?|-;JnPDjcg79L-Lcl z2b1M1kj?@W<3!*@A!`%gioZ1!lENoI94X=-USEcuak9-*sBL`2j4j8_j$94Q}uIysV9u6Ii3QGT~&yShL zBcqEaJ8Szs{(Xsh{oLraV3pKCaIBumNYj$rEKzXd_dwm5sAxofsi7fJ&c9{Pwi{MN zAzhE%iS+AR)bDjYs8)5)OURlME{_b_XVqD_L=LYMlX{V1pWM=QSrjkat+$LwgriG= z#E4$oKAF)@cW$ej2c_ie0*G3ACC!DvB{mHIrl>07@Wy?3h)|gjfG_I>4Bm&_zuXt$ zrkc}Oe9j02l-p>l1%+v=AahG}3&7OnyD$pgj#8n3#*@ll_ z)L%lMTA6;j+gSCs1^67%F03=M?W&)?>@RgyR%VUFTBvF6`G;4Sc^I7-(LlGy>)u2#ZGygHFNwvCqW;Z@g0{T-I#~a+s7zBJ7&c-m-U>^h)GdBN1jh8T z-mKRRaC^Q-WyGHIt7F+h22FLUWn%FTpP|imngC$E6knY9og;_SVreYv_gyu3dQKNEYPR}?>R4%|Z z4A9c`cZCv05=c7hWmV@M4q2b~@46#;>ak&?^SDp{Lh+== zaY3X}I>hpN(oQdeES*|Ws4o|BxV=I5<=yVkAWXIbLye}5wKSHGcNfZ|oW!!LT3Z_> z=!^%H+fxrV20J<$TglM$Rmho-A);36W$rRVRHGkN#zW-w zFpLE^5&^+gi*1gN&s8IU3*_#C6-JGOKLkds%>ALeg;!`UV08@P$A z?mH7(5LKMF z#b>(Fvhua1d^WUP=75>5d7pugpfj>cK~224L?d|8j9>cFNl2PJp2|oK^wE2*3~af^ z|2F-3E@XWYb21K`r?%wKxJ)}>vJJq3)AuS}f${{RH}!~(`|YIBq0k}bNymx{xOBod zA26bv&_d;#{*8%wcu?9c8=Zqt5k)>HJA^>X8R}|?1KTHvAjw}DNXT6N^(GEPOKC#3aZ#sR+ zDV@5-A0?x$_0P+L_9C_Xy%$ZV2S9m`K(EA2wi_I^p#+tn7-IGV^b0}kh6>AxY48Th zm8VbW5u`W_ODkiyNb8qXwV=4ojt0fAYYR!W-Fj*`3+Vf&b`|zNS7Di!I26WMU$gra z!|YD_{ZX!e4T^c_^3FCU0r)Et4^>C4pS)!mL!*6C&CZZ*7lBOhrPzkh z>{DI{zR^X0qs2X|R^^Le2w}Z(3ZHcKOVj49%#m#eZ!Kxl+4X%?1<@lE#w5)%Ivq-K zN~L;T#W>xJiRU?#_A{t*z&Bp%?Omz_EV9;x*(Ymd7!{t-Bal1?1Qn7Fc{Qh^8$&El zxRk({ZEqBzw+}E*Zah_8UqUEZ#vC19e)Lqx!_8_pi4s9s(U_9i`AvRZOxdvFCObG= z;%!!bp`$nvna~l>m7*k3L5We=HG;0A4HdAjSz^_9@QZK?-N72=|CcP=0*`-Y3}&*K zT1)Z#R`L*=c^a(3Zx|jmT7SKeUC6Ry8T*5}dLrN=xl!f1FyFXr=&S>_ls0Eb8~!D? zrt%lIk^4TA7-#XQ{FC9VkugW*;AaHbc;o||889a&%33-_sU^x>_c;L+m{ay|@N;k; zjS&jJWEQwmx-3OUHE~{t5PhnFFiKlVL|-*-#s;vof??sKUZlg8y6jk~JM5UWOq&-U zA~{voia%m-bqZsr3E(w4h6LE?;ZFH`P{gIA8@?3q5HkUED_J=DiVHGD*}5X~(aipc zd2HlODE#9jb}mWFiS1k6$y|#4+Y(Lk;XCP8Jn0cP>vx|Xlp#(PK9~-QV5F0EW!3Qb z^&mZx80u&(y!)NmRj(#W=l5dgTMW68Rz{>v#rRfkbefPqQ%gvdbp5a60`q3e;#>lL zTNLHFwmVh964Wqw3Hc9x@=qHilO4@@W}8m@+{Hj1OAM5o%xCfs_hW*h|Lx}S=I6^} z$nA={yWgjq?j)ll@{OBA9SnjD*SRvf(!jb*#T|Fo?`}^=H80ZiX8TA%|%52%GAz_B@*ActgAuS6VSVuHp#baJS3P=Ehhxw-DJA zdYBz6F_W$E@saA%JjK+wa8o9*f*b`x-?;E+S}tlC0l^_Y-W8G(Y#6qimwpJ)v|NGw zZNg+Y`CC{p$^NJTpIV?2K5v0?DWgo^asjbk`tv%VMhvhz@-P|j=lb2DSL#!*Tb(qU}F#k zC0srdT6RI)TFxhNUF8uGPJ+I!?+c!ys`P_#nr2TPCi8_aCW>qBm8;P_k*eO+Rv9+5 zn1Z!b&#E)r>7OUN2${*-<${n89+L5q5PxR~H1@@jY0axwJw7)l5+;8VN0_lJE4}9@ zr3~Q@axKb#)7jPyAcob*C!bj)RsJKg3$D|kX)f<)hPtKI#YbXXNbIuy+}G5qbiJ9E zw~E`FVZ8WsnbshGjYzV`h5=J4V`M)J9I=);c>++nFmVERfmMar*U^)Gx6Zcq_g3qc;mqDXveyd5V=@64M~}$gN`t-7eY;q}Z-Zqf`NB2qL-Tm- z+H}$58)MGJBjX9HfeJ!SEQ3I|U*iP+vz2cGiCfj5CnbtR&OWKG0j6SpLGRRVu>1#L zmeBNYt{@?|qIwNsgwraUe(kp<64NAyb*8N*Q|eP^oT`OoPYFmq1gj+ROPB`Uv@R8O zr3<`c<^(k?@Lj-1G3g8eqMG-n)xsmavD}M=rF3l_`0evj5}eKd&b!u@A>qWNT8>o$ z)d8&NV?U%M6U0Lg4qUVWRHp zfYZQi^g8ZO7l)h{ykS-{Us>V^H)z1s*VxSr)WD)?hMSrS&}JNu{sO8s&DGH1{YQp2 zjMC-rGorKfX2etB6XP%j*7)74_j{`{UF#BJVz{G%O-V6WI}HOE`2^m)XVi5R6U7j0 z^o@?5oB-+AXB1*)_3bSO<7tJsNvWZ|5P5$*hx&~SfRS8Ew|09RBfi+9u-nmxv2fvb zB{@Xy9o8Z>ZtsPBb9Z|?wmRt<1>kBesCz;6!nW?g_U$YZik~p2N+51FXK1Qcpzcj* z?FcPkJW{JNOUCif>{TW1z;t}TVM19>fq^UwG7s8pw@ZD{btHed)lgsQLpIJB8=u=C z5wWf85{&)aY=auWahaSH#Ju+&(gzRIv*?GZ#&H9I^p&ZJW2#z05~zzAWhF*FxvP$} z)ydZAM+`NEIO{;cV)LN)7BvAvCQ{1QlrmBS#y#5wZLXd08Czd|St!W{wH{F%!r_%= zEoEN3U$)hWsUmP{)&0~9Kb^D*&BERBG|lDt*YH$qUi?-tb*BFTPX4Jkx{E-s`}Dlk2w*4LUw7s=%J%8=%FBHbfG z@vs}I+DNpjac{+cm%2uLt$=`}=c5m!BI_dI6|^L_)JLxRkGr~Zrn)Eul1znpGyhegbr&;T`-PPtuG0CV^{Pt;`#KbAC(3W_Kaq~4Of_s=ygLxb9UQxF z5~JDsT(}kGJMrB_a#3z1RLhrH08#LfE;p@?Mp7|r36|7XP>+TLnCE%FQISqj5V(*op)5L=dU0R0t z9-$W2Nv2;tX6EHn4NKm5wYnW_!3K`K?_bB?uN-$=1f}17QQi@96m*azI5X807~WK1 ze*-e->|qO%x^>f9>dy?YeBU#Osd`*lah`q_e)|a3pT%W$u5VIR5oE%qFFKa7L%kTW zhOWpz@gfiUMZm()s5=2+&7$NRjA}{i-7NJFD4EbeNjmiL0BUT_?hP$@KMorykaY#$ z+r@wta)D8jxo&9?C`Y(lO3$Rs0jZO@cIK|`-3~KT|38gN#P&yaWEM$r`+Naku%nGi zq`7=2pe%RbG~a#KoB@iU1LmU#m_})(1*YazOX8bcvM6GMdrJ{(H&`R;lo2Z6Sb;p4LVv^ zeyEf9{*k?u9lqMkMju2TYGosa6XuymQ6&oIFlX$qx7-gDAEsFTM>SsDBdKL2S+{Rh z^V|FjFVJaQ{sUK$g?9C9oqa_6`Nz4@cf~9nc^Y0Vzz%i)VEr>xMWaK_vCho9`0Sz2 zibY^ARq{D;%%({C2nR-_O$x6^&bc7}5F6E}$gferCUv(j?>vN>`biqJmz%qjN1p9I z|5~d(j}gT16L?#@H|hQAINRQPMWy&DD7Z&nO9yzr9w$n;#(4fY-Zz(075-0`{Q=QG z0Oi!=hO>}ITs?XeFlu93r-NubL8mw?}wmm6w( zz|_9VKIb|)IyEvrq(1m?G*RD&85W#>uNI?y=1M~F)iG~Hh_#b6N}*LOnZI;*H{6AWL^Zj*Z)nSF3f=t}ydEFX}119?2! z+_<8m(1)b&xGRb+?!?Y0`%p^@c(yv9zItRVI!)~>|THvTuHyai!vv(gu5WHoBvhypDe+g7+i%CxfU4K2YR0r=M6 za^+rCo%hFTp-gi(Sh6Xu-+6bIS5}O|{E((N3+^X^qLec_AzE3(So@Eg&$$D&z3(|# z^NS!n3648lt>=}2mGVEqi?B7l0y5r=g8B#?FQ z$GNIx>1tuE>hANQ?wqCK8&yIinBxag^>KfNi<26*U9-IG>G2u<7oiO-(C{T}< zD0;r6^SYA@EDe)>VPxw5t7Lj6!|L1_B)C&t#ajs3uOZb2BMoN(x@Mko8}EN?lC@Z# zb41MLmPN}3$S1`CBo6un2`3aobd2$T*Bu&LgO=JAqg<3STGyq}X^!yhR`Tm}cvE+I zKqgtMTQ3{DuZ5uv!_OvqT9OlVH_ zTNXb}AK}9b6PN`B@$SurQ*yl^FSJ`#E_ITG{CX~>{B%ax`_37p4^+yAXJK(MsJTJf z{W>EGA$;CuqT6=uEVw~DaY66nA>WqW%Wl z(*@I94(PKS(Cma<)O8!yK08&uhA2Nq3wQgac1KS}gQqv}>C^&0JPaE!0Z^P{%71q7YcwoAmw1C>On zO{u2VBCQKc1Q%sl_15`<#t1Id_j*%g&h5IAAm^bHL*-Av=BTbp0{-VdH~YoX+m8gS z7AXdzXFNh{&8a{#bwSug3Vt$%^!2{=r6XAc3~aNdz&|EbAYOb|K~`-<>cxMancrkL zNln$`nOeCkxH7=fV@3y3Ih(vP( z3Mz^JWK}>wwz>##SXZ45X^>q8CFn$%G&ODpa@)NAvE>nwCm|ZjH-bdIaLV)RxTqDx z!{3l-FT6G(Z%9PtLDxX1-bcHK7}bL>JmhVuM-M`yMf z5S1hrx4>mCa08Js`OvLDemwF0v5M)A@B2ATTZ#3UG7)bK2<3YAAW|v<&M=N{}eDL{Zj>%77e=S<^Ib-mi z=e7%|eELj7!XkZh#A;1G{wsfmc<0;b4%i8=#?ZAaj4Z3bKe7SuQ&zF8p2{Xq(vi2s zXgPX|>XO@Pp@r%qVTwy0Ac-P?_M$*>%2L>6PyQ~yY-|C-waVz=dOYscQqbuLch8=2Nc?IZE8lkll*s63B!)x>MjjfUDRv zp?IHgq14y(vuYpJJAD)JC%kWee0Efd4uu(Jyv5wNPj=y9HB3TIq1tE0S!&Dj}j zG>wd&Y8MeC-UwKf1I3KG42j791_N%Q8=>uC9Rt@n69@(jxB^hY!lR*>?H4>n$9CWS zn2x>_R}^MS_qochx1k+tOI;<@)c{Hls$Y;0KjXa!6E}~7cH`DHsfJ?yQn4s9gNMHO zByMQnB8=am%isGj8vKu_`@TRm%WWy4m+}^@L!1lqRi}j1(;?w{3-jfOrVDxl_@Owa zKl$@5?mFykH8LLtmZ{+t4C7NLQ8vaoty|OPmmUE~M(@tYSOErtY8od_I;i)YG+kOn z!l$E9X~3DPGObU~Pqa#(V9Y@;Ovm9{?rs|^R@HC}bUgjqC*LX#2wAO|qoK9_p51#W z7eF{ci?K6t3cw?n`&>5XT^0*_Pj|X)JP@ay$QR4DHW(l5^rtZNK4VyC@_eZqz z9IBeu^(aJd%v;Gl|E9XXkV9eB+bn`?v>f}fkkVU@Yb0{Tu|1~v1KV`)(*GCsFbl$- zWO=&J4*1?!-QWA2VzgvW7_#8<1m>SVQhDdgaIU}eBk8;BTdnD3li6Qh$A#@C$}T=$ z3FBjF9ExKk03G^u-Gu8*WoteYaCFW6+%8YFSF6ha8hXOCtl|vkx?dOdK|JS>Lf;lG zN*SNnnq2a_KRSL{u+WAv)-=RD-ax3%Aa);u{hwNcT&QPe_2z~3Wuu`xzSdJ66;a1J zFv=t`J3`n!&{5QyOR}j#k{i1cQnyQ(?QPjr!t_Rrm~TS4 z)H{}T$^>l9tUpGNWJ5TK42&9uk}YJjRGTlyBC(I#n@ql0c|hVHWc7a`k861N{N^Hb z)n%dy;kY3ng^c&(w9OQEA^eOJwFmY~rveogHwdvy?1eM9F42i)>Y93weWx4P!Rym9 zI7d=B-{;7;2h-Nhd}_k6sY#Whnrbv*(7-%FQ2XbmjF@;wn(31rPNoS+U38 zOn3tnFVT!!Ksh(Z(xrcTJy(VkX!5yldPqyY$T8>9Py8q|!9V7Aaau-7i0t~Y#wRmkU8fb^WH zY`F0%-s^=UM(Z_|`A^+tp}RI*9j0-Nr^B%SPDpC!=9AL`2~pJVFXx3S3@fRHjpP@# z8jqn!03@@j`J;!L`M4pBHiripC>bKz6}jKsC|^d%>W&u#cNg&ecw#C>V4~z;9c$%C zDhwnh;Iy*myL`=liP#OP407*_L9uVOR>vf6r&{O_v)E$NQ{S%U_TXq1c_f^fIQ#7s zBar&-cJE05cL3dle82%>a(&(Pi^Rb+P9*33xOzXZ9F)T3vx2xzK7SJc&US?uYwP!bvOB*= z=;0t}Z#Pl6go7G;Sh+NDf$SalA>Z$zSBU8>j$zdU$R<19yA(nZsb{~1>}WY50Sz5d z^#_Pe1ICL6`mz7>_vuMjtc>rCtR{%&P$8wWW-%n8;j4qsd-HAdN>7ua- zU%W&ksGbHP;LyPWM2KUGs7kA{qYo?4R6#ZUXn{yy4iQ;S7hP7&=|dY%G^?sQHX(aY zAlq~EY#_OkGw!!>hf?9~rDds&2c`JG}vX)Vde{ zXvO1~_(Hb{?o9-AqSgk7YZ}@?aPdhTwIWz=nN_qLL4DK0E7?l1V~w!px-b#z8$y2R zOljHXcGAt2qsjPU%>?YSR;g?RZW})$AM0EDhL42 zNIQMG>%0|8j`7w0x*MK$!caV=_`whX6bFkP?tmrxg)&S=$sL=u+oELX@mOLXPHY*w z6UeaY15=bS;K$x6VBX#DL3zq#d@;#+4VI`x)VnU8Sb*x&bJLwi%40)cH=zapO=3HW zr?*y`Ju@6B7Co_=z!GeOSjlsh#R@jPZg6=MTnrIvH0#_MN!LxYZFkDR{#ntH@jCJ! z%DyK!uL8D~cwIZPkzE5gNiJ13!C&8&38y9$`ID#~m-5-`l+E4mGMn3;Pr16l6URfo zR*v<&5Qr;!CWP!lLXF1-8Td=@R*BwzwxCoLGu%Jrfc1$>Iv~J{<#8x#V|17DFE}Pz zfE^ZiaQ~^B+Gy&X9OWyGb?zi7st41VSy>f0*=Gf-F?cC$ctD8`shPdRcqzR?T&vbg z4e1vfk|lv1jnD~6akMAEl7L-bo1*Kz2Re2*swY{y+^efRAB!vrr2{UMDPz@ibaDjXC|ab{YscXF>hfw;O2uGkGYeUv$VBv8wcO!5tpit(lUvpMao$$ zx1TMvN$>Ff=mc3pD6nMm{RWN_UBoegTY(PSF<@7Df z040{Dlh_0K$fxH{FpAE&^jnw48|NLyS1M9|Ae!vDZj!&+$%1wmcGeOyi`(Bh*A>I5alOd0HBub_h|Z3 zNc9}Mq=ck~`ys2l>iSVlc|V@+Xgp}DFvXvWgK^R{q*&Vb5gXicT%X(?HCV287t0m3 z=G|^Bq-}GGR+pW!7~Ee1hWU0vmw`)jmB?R!nK=gE(18;cic;TLnrffoOAIB4SW08h z1T4%Qr`wW*bofit8Gu3I`0Jcf9mWFGTzw!Jq+7Z^`jpQuul9IRw%pwGzQF7%JqSZY z4+N6LHz*giEBEQ&qwDlf?`6T!r4=`C<~ibQ&Jh*q5%PpcFcGgXXfm2YfGAG{*((U& zN{Be4Brv@1?AdT<`EZjk!JiPzv4~|$AWjdH-s?F=bG^tbfw@ohE3Na4*eQ1$LVtg( z^uk?i1okU}m+v28tRzNrd9p`8W&G%$1u?knew{I3fJncup)4F4c;rh`4E|3o z6Lg!;mVkUlQ5^k0h&zF+H+r@P8gO3Gi3E!Lbgqv8eIL0<+9JkN*Nun{fFoye*G}!} z>9q8~@n69ce#>zqX`^x8X=?NVtpzVA91&;PJlu~%OxtSljtaFtSR_=8w!VZhKyeUR z2tmb?_!^itzs$lFTz|7)^(uF&$FfDCNFERrG#(&}2liHmW0}TV2vMi0Lgx;epc4*X zYu^ufRfkm~9Mg&xV4BRpH-Ap;-Kafsjy%_V+J>!Qv%l~6iQG&e7=&bQ`vTa9E=~AO zp;}q56-5pI#B}^x`+PZX6bhXYeboFK3#6t=EGF-`Bq>0_YXRnVUL1kTSR#rru z<XCqO|5NJOcO1kZMS|Mo0h}NO`PqT@cR-{@gbxr%DwLhdGyo`h#Sx9m?}OGA~4+ zx{z-B2HO?Fn7u|nm3>FSd5wQQ*&L|Ym2pt27F0cTDK_bTR2$%N4j|VK+)b0?Lc$g(-K>R#O z_@bE#FS>N0Z|MnIY%Vi=n&_4xxJ87!CFUP+Pe`Os8Y%MjE;OlDrEH6<{_(!{B)ju2 zJ#XDp6XX}eL41%?DWrk-9008H8dxaQL4vsS)2q}QzlvRWP(pvx4aN0Kk>1j;cC9sp z=eB1h?V4eDtS9qL$rTGyV!56%i)wACVQ*3Hkto%=-w&VKzelzB5vQYJFTx5?mg^GI z_F6caqH)&T^RD84Q?iP4Env#5%-&3;kV7c%@@e!ELjoYjW*dQTJ$#u8=CR_qIJ7=} zidQP_7%AoeX6aW9jnbw}@%NwU6570QzY7P;RdhSLz#&3)bxug-o2CG4q(_Zf7~mg! zHBT4DMmKHUO#hP6ik$jchtYAiNqaPoQTQ%b?Vk%;h%zvSNYwke) z-F@4jW2LUC5w9MmrpCvdB8FGK(8YvIo%<&Fhimt2b)d(H>z_h47N87u+}jk8q=Ll# xm7Tu4WdXD~Q&860e;(~G+l4-\"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" +/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 +# managed by CAPsMAN +# channel: 2422/20-Ce/gn(18dBm), SSID: vados, local forwarding +set [ find default-name=wlan1 ] ampdu-priorities=0,1,2,3,4,5,6,7 band=\ + 2ghz-b/g/n basic-rates-a/g=\ + 6Mbps,9Mbps,12Mbps,18Mbps,24Mbps,36Mbps,48Mbps,54Mbps basic-rates-b=\ + 1Mbps,2Mbps,5.5Mbps,11Mbps channel-width=20/40mhz-XX country=belarus \ + disabled=no frequency=auto hw-protection-mode=rts-cts mode=ap-bridge \ + rate-set=configured skip-dfs-channels=10min-cac ssid=vados \ + wds-default-bridge=Bridge-LAN wds-mode=dynamic-mesh wireless-protocol=\ + 802.11 wmm-support=enabled wps-mode=disabled +# managed by CAPsMAN +# channel: 5260/20-Ceee/ac/DP(18dBm), SSID: vados5g, local forwarding +set [ find default-name=wlan2 ] ampdu-priorities=0,1,2,3,4,5,6,7 band=\ + 5ghz-a/n/ac basic-rates-a/g=\ + 6Mbps,9Mbps,12Mbps,18Mbps,24Mbps,36Mbps,48Mbps,54Mbps channel-width=\ + 20/40/80mhz-XXXX country=belarus disabled=no frequency=auto \ + hw-protection-mode=rts-cts mode=ap-bridge rate-set=configured \ + skip-dfs-channels=10min-cac ssid=vados5g wds-default-bridge=Bridge-LAN \ + wds-mode=dynamic-mesh wireless-protocol=802.11 wmm-support=enabled \ + wps-mode=disabled +/interface wireless nstreme +# managed by CAPsMAN +# channel: 2422/20-Ce/gn(18dBm), SSID: vados, local forwarding +set wlan1 enable-nstreme=yes +# managed by CAPsMAN +# channel: 5260/20-Ceee/ac/DP(18dBm), SSID: vados5g, local forwarding +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,dns,www,api,reverse-proxy" crl-store=system +/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.0.0.0/0 \ + endpoint-address=89.110.101.17 endpoint-port=29185 interface=WG name=\ + MikroVados persistent-keepalive=10s public-key=\ + "64Y25EUZQQt8EIeAJYD8qWt+te8qvGEepnswdBgmzlY=" +/interface wireless cap +# +set bridge=Bridge-LAN caps-man-addresses=10.30.30.10 \ + caps-man-certificate-common-names=CAPsMAN-51B25E507D07 certificate=\ + CAP-488F5A8E1ABC discovery-interfaces=ether2 enabled=yes interfaces=\ + wlan1,wlan2 lock-to-caps-man=yes +/ip address +add address=10.30.30.81/24 interface=Bridge-LAN network=10.30.30.0 +add address=10.8.0.2/24 interface=WG network=10.8.0.0 +/ip dhcp-client +add add-default-route=special-classless default-route-distance=2 \ + default-route-tables=main interface="ether1 - Unet" name=client1 \ + use-peer-dns=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=8.8.8.8,8.8.4.4 verify-doh-cert=yes +/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=9.9.9.9 comment="Cuad9-dns IPv4 1" disabled=yes name=\ + dns.quad9.net type=A +add address=149.112.112.112 comment="Cuad9-dns IPv4 2" 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=9.9.9.9 comment="Cuad9-dns IPv4 1" disabled=yes name=\ + dns.quad9.net type=A +add address=91.192.189.2 comment=Unet-DNS disabled=yes name=ns1.unet.ws type=\ + A +/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 disabled=yes 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 +add address=149.154.164.13 comment=telegra.ph list=FuckRKN +add address=194.85.61.76 comment=grani.ru list=FuckRKN +add address=109.70.26.37 comment=grani.ru list=FuckRKN +add address=104.16.4.81 comment=xhamster.com list=FuckRKN +add address=104.16.3.81 comment=xhamster.com list=FuckRKN +add address=188.114.97.1 comment=lostfilm.tv list=FuckRKN +add address=188.114.96.1 comment=lostfilm.tv list=FuckRKN +add address=104.21.32.39 comment=rutracker.org list=FuckRKN +add address=172.67.182.196 comment=rutracker.org list=FuckRKN +add address=104.247.81.99 comment=lurkmore.to list=FuckRKN +add address=8.6.112.6 comment=dou.ua list=FuckRKN +add address=8.47.69.6 comment=dou.ua list=FuckRKN +add address=66.254.114.79 comment=youporn.com list=FuckRKN +add address=185.110.92.40 comment=pornolab.net list=FuckRKN +add address=185.110.92.41 comment=pornolab.net list=FuckRKN +add address=172.67.172.95 comment=crimerussia.com list=FuckRKN +add address=104.21.71.238 comment=crimerussia.com list=FuckRKN +add address=149.154.167.99 comment=telegram.org list=FuckRKN +add address=149.154.166.110 comment=api.telegram.org list=FuckRKN +/ip firewall filter +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=12h chain=input comment="block honeypot DNS" \ + connection-state=new dst-port=53 in-interface="ether1 - Unet" protocol=\ + udp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input connection-state=new dst-port=53 \ + in-interface="ether1 - Unet" protocol=tcp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment=\ + "block honeypot ssh rdp winbox" connection-state=new dst-port=\ + 22,8291,2222 in-interface="ether1 - Unet" protocol=tcp src-address-list=\ + !TRUSTED +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment="block honeypot asterisk" \ + connection-state=new dst-port=5060 in-interface="ether1 - Unet" protocol=\ + udp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=5d chain=input comment="block honeypot NTP" \ + connection-state=new dst-port=123 in-interface="ether1 - Unet" protocol=\ + udp src-address=!10.30.30.0/24 +add action=accept chain=input comment=\ + "accept NTP clients on local area network" dst-port=123 in-interface=\ + Bridge-LAN in-interface-list=LAN protocol=udp +add action=accept chain=input comment="accept WireGuard" dst-port=13231 \ + in-interface="ether1 - Unet" protocol=udp src-address-list=VPN-Server +add action=accept chain=input disabled=yes dst-port=443 in-interface=\ + "ether1 - Unet" protocol=tcp +add action=accept chain=output disabled=yes protocol=tcp src-port=443 +add action=fasttrack-connection chain=forward comment=\ + "FastTrack for non-VPN connections" connection-mark=!VPN_No_FastTrack \ + connection-state=established,related,new disabled=yes +add action=fasttrack-connection chain=forward comment="defconf: fasttrack" \ + connection-state=established,related,new disabled=yes routing-mark=\ + !To-VPN +add action=accept chain=input comment=\ + "defconf: accept established,related,untracked" connection-state=\ + established,related,untracked +add action=drop chain=input comment="defconf: drop invalid" connection-state=\ + invalid +add action=accept chain=input comment="defconf: accept ICMP" disabled=yes \ + protocol=icmp +add action=accept chain=input comment=\ + "defconf: accept to local loopback (for CAPsMAN)" disabled=yes \ + dst-address=127.0.0.1 +add action=accept chain=output disabled=yes src-address=127.0.0.1 +add action=accept chain=forward comment="defconf: accept in ipsec policy" \ + ipsec-policy=in,ipsec +add action=accept chain=forward comment="defconf: accept out ipsec policy" \ + ipsec-policy=out,ipsec +add action=accept chain=forward comment=\ + "defconf: accept established,related, untracked" connection-state=\ + established,related,untracked +add action=drop chain=forward comment="defconf: drop invalid" \ + connection-state=invalid +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 disabled=yes \ + dst-port=443 in-interface="ether1 - Unet" protocol=tcp to-addresses=\ + 10.30.30.33 to-ports=443 +add action=dst-nat chain=dstnat comment="amster.vados.ru For Certbot HTTP" \ + 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 +/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 routerboard settings +# Warning: cpu not running at default frequency +set cpu-frequency=700MHz +/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" 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/20260505/20260505062002-Diff-Config.rsc b/MikroMaster/history/20260505/20260505062002-Diff-Config.rsc new file mode 100644 index 0000000..9753848 --- /dev/null +++ b/MikroMaster/history/20260505/20260505062002-Diff-Config.rsc @@ -0,0 +1,12 @@ +4165d4164 +< add address=104.16.4.81 comment=xhamster.com list=FuckRKN +4166a4166 +> add address=104.16.4.81 comment=xhamster.com list=FuckRKN +4172d4171 +< add address=8.6.112.6 comment=dou.ua list=FuckRKN +4173a4173 +> add address=8.6.112.6 comment=dou.ua list=FuckRKN +4177d4176 +< add address=172.67.172.95 comment=crimerussia.com list=FuckRKN +4178a4178 +> add address=172.67.172.95 comment=crimerussia.com list=FuckRKN -- 2.52.0