From 1a4b5ce7b943d254ef5b0a4dce2f58d5ea8ba7b5 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Tue, 5 May 2026 02:41:18 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at May 05 02:41:18. --- .../20260505/20260505024002-Binary.backup | Bin 0 -> 269577 bytes .../20260505/20260505024002-Config.rsc | 4501 +++++++++++++++++ .../20260505/20260505024002-Diff-Config.rsc | 24 + 3 files changed, 4525 insertions(+) create mode 100644 MikroMaster/20260505/20260505024002-Binary.backup create mode 100644 MikroMaster/20260505/20260505024002-Config.rsc create mode 100644 MikroMaster/history/20260505/20260505024002-Diff-Config.rsc diff --git a/MikroMaster/20260505/20260505024002-Binary.backup b/MikroMaster/20260505/20260505024002-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..592f066eeb851d47bc7a785277f740973d795f27 GIT binary patch literal 269577 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
    6gB0c?OuLp}bn> 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 z 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

    (o#}ZV)T$HHWR#QS>5Lk=gf#8 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ÝqI2Nh%EsodlYOV5jSMnYJ-oUMA6!+KekLM(mQW2T z6bHZ@i#R)(KVTw5%Z0xfur^6e;QUTv?gQ4kq{sT*s@LcB85lRzw%5dnK8iZMpNDSr8(~ z0tj|v_8PPr2(L#ojfVb6uC)+`#=uk)7*SoG#V?Hy?2`p2K48i|W4HyMqZM=ZP}G$W zty2|_ayASb$n+75`K=lbRx7#xoE=;M?V$IxVq!!t>+}(lC95O7dT};nSmOLX1qZq* z*+25gCDA6ywEK$v(uCw32Q%noxl$ctxk+>=_q*Lcm-a^mM_9O9Mg@7`;kTjj4%LP5 z#DV3#^?%oXtJ->lFJ8p*4lGERv-f%Wrd2;KVRB(*eD8;GhUm<7MZm|5lbBt<-JL+4 z#nk1dqllH=yLSGz4xe+~DST2Y-0^vuHV$ohZWu6^gW}bDoLS0TYH)I=d6Q&q6U45HpJDb^a?|}Lm6zorJ)L3ErBnw>q!8_;DHhi`c}XaXtTi=GsddvNInS=cOQoD7T~oU%sgYT%(&nNV_TYNL+ULa^Ip!|+b5dFHq$ zArucq&Pnc(g>Jpz`A^R}VoS#O?gb~1RDrJwX&GP)#8wY{m3EC_EGx0vqR(4p;Ucd{ z8Jva#@}zpY*W^r_2~to!G?W2Faa{n!>4ncG#xOJ?0(MVvhMm7shM8NiB{CL6v>`dA zn|u3l;MY>o%5(}H&BVTJrSpa#?RyG@u*4uUet}i=iZf1THAIB%r6fnG@vz1)df=~p zB$3W5&2`GcV~A+lD(g=0x+gh*w0lQ$)5f-A$mS8!a0s|)`b(HX95pS(<=M4tm(SKn zxl9-j23&vUrK$R3r^NG0br8fXPBT9}Z$@0?yc{4o4a6Z9GJq$Bn>UOlI-g?9nLeGB8^dy0QTff54&IDa!=5`e{fXg9$WrnZnF!TcPdG@|> zX}um1hE83rQq2$SAgXFsBGlaCTa=l#N=_HP6Jki>y9=g$tyVz};z}4JM=*I+pVv%v z0`VRyohHIM8sP(W6|6<_l)PQm7^gIb3mU^1hC>!e^~AEl04(0Q$t``40`CI3Q8Pxx z*bgjm&+K>(ph!*y01GmIn-j)8!2#Fm|-9O4=W3Pl6iB)--$VdV3ox z(-YIyTXT`zQ&^vP!@j8&Wf)<2WR5RUZy=2(%}Md}N@6ZkIKosYGYvat*~{_ zdW=f-;A}JHmOkobw>=bV28sCHd}WB$qrl8kpgAlX-i+@Q^S4~ME_3(3Tc=Un(a*0} z`mZ5ihtYhJq&$B~qMbCdO|D(nU5|G;Kscts=&nr!*#jYQu5}n<1oRf4fSKn)-1lx& zw4$xgC%faKujdr`EdviSwz;h&~z=yff@TiaD#+OHkcRIpG_W3CI3Z zg6a{9BAt^bn7=bcTw;O2jR7k@)1<^Rz3EUX*py+JaU?J@O>XQfiGF;040|(K`sX$mA z1je!}U+0T7Q7VX;al_-hKu#eL#4%e!hkKG#me^yMw>mQtHFwD1l*p$H&=q&+|G-PU zj;LVFR;%v`LLBy)RrU`!O-M)skDyfr-@Va61OLwfzb*a#KJ!9TgYoB`J%w^n^1BI^ zw++mJFDc2V9rdLhSZxCN$%m^+V6EnRq^K0hf$qxJ2uKM%`?W(swOELJ6C<}-q}q2B zm0#3)%X=%|Su#tNr-`OgJ}ZeAmgu3vNHC5+f!yxypm!-v07Ve;?q4=v7>EVWGQgyR zPke=Rn8n{ntH=R8#cLPX;HC4TzXB-Nb>T3PDupf`UYyb&B0)Rk)ZB3`A;<>IN{10& zh`~Su)bJ6pP(Hm1bsTxM%!)x9i`i?yy?~+JnkB0`-6t|&>#-W9%_J9{Q*f*$fm3r0 zn0lE>jB2oq#-lU{&h9>ou@(&6(xq4E9aIDjGA)DRMT=RkKvT1}!9zhb`;pk08xf)W z=M~NZdx&QJ9(Hd=Zyn#~l@X3R+Rt|7qdC15XAioPz9`I0nY3O%lsfGk_bteCwN>04 z3^+8(lIIi6^1IGl9fv-cUfm64@)3kaI3IT|$V%qQNtfFMUFma>tLhc-s5)eVk-|_= z8z@=F019DVC#p4<_`DGf{&y$qR0vwztl6=u>H7;$_Ap`THs8FA?W$ut1x?RvfSY-= zi6j7@<9_Q|LMxdzRn&ZtcUb<6Q-VGvA zYWDDVR6*W>wwHMK`8R?skpf1+3FVz*PFS0G3bWshDSgt`OVMf~S~F>OPtV@nZafslPect-@7RNn1Wb z??fHL1?VWmDhcd^C{IDZ`?TVBi@p|wr+3gFqJ02vi%R;1!RLu>HObeyE`)Y3YP{RG zI_WQzI)-F8A4X zp4#!i)$zJn>oh{?x@P3Oth-!gwr(oMKGQ@F1Wn)UjK+hpEbuAH5KSsLe7sa9ivHlE zoQOz!a>5$k-H1K>ZDAJAWl;b!#_~8Mi91M%4;O8QL;lhGWJ)!+G zsf(!&3ew7?eE(mb>uNVs`s{}B6mBWsoR*nEQ@{tFBH&hWTsJLBx9`ZF-C7ngvDmbK z8FVjj77qyxVJ70m>zQZDl6D^Oh_GrABxl4ids*YMnyt1FvhdYF-ECY}w|#`!0m0Jy z*47P)joqk>5wCx+wrD(o^XvplZDHw+{ktvoKbg|U@0*#nmA24%KG~*R))~AphWzt$ z(S+)|lGi=k*8KWrw}%GxFGHQsG;eY5Z*wFt9w4)`ka1Rov6VWi-zIDgy&90z*@&WO zeDVZX`Cn9Rcs_SdPSVjYc#n7q@zEGKEn97w65@%O=9@ zNfYRaKaI(4SD`3Hsx(P5N>Hz}Xz%?)D^*(M%m;3$n10MNy~nMU)`?GV+42)l$5w0(s6SQu~~*=VQJK z28Am&l?eqVeIunJfYv~^`B<_rF_G-KbUY>88X}L|!m- z=CJ>DE7yTyTlp!b%}aO&<7c-Lbmye)fAMS|#~# zn+GD!S%h+=GjR7FH|PJU1&D+if{$!w>op{_`HmK~lejLTBH9C}*0_CLC?xm2x`&Lg z_bfEkJblva*U3d;vYu_~Dx-1sNAcd3Ctb8&N_O&qG}_(27Gmh{tB)@Y)>%gL6N}u3 z(qJv?mE2_AtJjr3q~Ir0LeM|J|GfJqL*AQe17A@_5K@f7o$46gIP`PPip@_-srlC( zl!PVhmgwDC5V%;#5TH!IH zS$@tL3gz^@6c98#QCU+yNp^YLI~lIionvOYKVbUI!h`i>Z6tlu>lOL9hQizQi}_oHcN-PO1RZsn2K z6R|_fT=|mr(O?FMCwy?0mK)1_YX$Y`f27@*sl)=Bt9s7J*HUQes<8+Na$6=?Kguq= zRs=SY_fn27)d#~=e$X^*x-7S8@zUi4>Pp`AR^Ha<%H3U?cwok|lKjGqXO4=?xs-O( zHCaP1;9)T^U!Alp!2}Yq-aqRpPJ$>=k2z6IjhKY+WWl-k?!UJe+$-|Jg%()m{HT1U z`DfsvuE$Dp8i~CBrNL2^f|Ikt)%uZc(52)ohxU-pOti19+GaV-b4%HWIF)W% zPCBe)sxoQHX^bcB7F#@u0xp$Uv8e)I>FXJ!MOERsstd&0i7e%ZNkHlPXaJF!e z)y#t8EHazGLX~|TSk!t$a$5RU%a-E$?=TwxyTWw#=hTldvsdjAJ>JzB!=!4SpY9aF zh4!Xeir{ppgK#*S0cXJ@AEi^_^v}u3%ZqyR^FB_->|;q5fTbfV!jZQ(+~RC+C6++D zeV**k{;&~jTO@I{UocEYeyW#1^HIBg2#keKk~?v^NbeOq@{Fz>T7Ie(^*zGf0pc8M z<5U^{A}okGf--~bFqy>;VRnrf(;OvT{YvWMX=6P%;r6=+51QG_q;}2Iz_AgBny4_u zi6!&r#KgQ*j^_83qGp)|&WEUe;Y7Yq`-C>ilzY593;V6-2nHX;@6Slopu zB(j9kdGU$BwQ|k+pUvz5Km>o0YE|!PB)uyZ^ouC0i3v{>=EoT@_QQs6qkpAn&DfO| zV4hCa5FaSG0<=3yto}Yjmed@r=;6&zPL%VY(0b8g69PX)2~bN6WN8*m^>SAyB;k1V ziAg;thbapeeKtzzLl)tp%9vhR(;UfE&95?#V^`ui`r_(2!(?>1m}GM|br>ZU1pYjc zk|jjU_USYz{-5hOp0Fl&=zwX}g50h=H|D01hqvw(gGFeSb$DsNC4qn2UZS1C5A(*T z52tCse$}j7SH2B-rP&zm;sq;r8sJ@WphWHJ=T^p#o zw-&OEm!H@EWB&Za>ZV{T-7w3n z2WMP>*0Dwrw$qf1cQ*J2uVvcKx@>Nqx&dA6XE!!4s*Pi#(`4a<&wZz2^^P<4cwi$o z_n@S=gaQ@c*1mO+(whf|XGr@>9?&7s7&r{9qjW@GqH| z<@pK1QU*}1LOae>=$PB~rHPmTNCGequ!XbV;$k(Yb$IKe!sk59$p*@*(m1{Ndq*7jS8SC@I8#R;a_4s-XZ{yx}Q=f z1s}6^Y>+THcFq>n%TxB215?M9r&tpsA)Hvrwye!%3*@tCtnWGP(>GSAhwQS8ys-BK zf}59zPy%vC{C7xTsV{faj9jm;=0L=w6-n>Kfq&kD%j3+(_#8X@c=kO+jSTtDkCJsW z#O5!Ho2LRQj|J~E&lC<(ydf5XJ!OHa2tjdR9ZXsA$X!BcuZnJfTYzpwfCg>l z1YjfUXEANr4S@wLsT6s4Ml$^gCD+S{v5kNC%?8I+J6d~eGXR-23%ljuq(lSM48JX8>SfRzvb}R_W15 z9E%`|v*s9@<6FBO8d8&wjEuiybV0F=Rbb^qXobAuGT2IS=uM|9P zmnX0|^mQXgWF2sExSzl*C(k)X4sO>wmQ7(r&5@TqQG^&>I{Ro#5JtZ<;gCBMq+u1= z7zsJx1&gG81a8mG$*uB3vkMS1`sj+lM%cLjTW$Q$6W*Vs{-L8;28^udCS=5x?Y%$i6Co30K5A3f6j0GS}QCmXfP{Lc8;|C92jo#<~=y5I2>^) zLn=cnN*~%`TebsYw?JrmCPa%rkJotT)>_E6!^WtB-p;RZaE7Y)X^JVJ6fyEK>%BRy z)4b7HI4_63aLxFqV@jrXOOyb)>TK;m0s^@u7M z8cBcd>-^ep+uJkAQ~lKWP{|16>Ob&#n0R?+p>+m+8UnV{e0~Hy+X!-Z)?&~@Px?D| zk6g?c!}5B|7xbyK=&}M5dyf6kTq1IJM8XNbHi77PCCrO#-MGm9E#) z>}h2kr;Eq^$4stmRv7%#-RgW|#DWtx9uR)w(7Ch8zxIM%O93&^iiD`SP34!66wBg? zMaU%pg`q%R@gO*(h8-0--1(;XFQN+fo_(nT9dxT&rR-X>|NYwfN;Sje0aOPEmH9c< zoX5WgxnY$O2m2rA=v0~HchD;gsONYKumB3*M)Km}!|4ND|_=nGQQ9Bf^&AK$dR2Li* zA&;cI;@8#-8eYQla8JLTg&zgoBs^uDgJo{Y;WQ%cQD{q%Y;Q|)xh#U%4qiy)BTE4) z<}RM`jWHANDGhRA@*hA=L%=!oMMu!LJ4?nOEnM|DGn^)5(ch z6&I12Du14(eA>`U0^y7i67&GO**wWGewalpL=U}pV#0a}y;PvH+NFZ9UtbNoTNAbm zPDcw6Hp(lhR;H@BUW?gW7j=*I@p*SKp96>64;f?^DilcNjao`p(|*{v-4*Q*lypi- zvDt0}II#g?6KVl8F_CZwQj{_7Dd3u)RV@hk-v}n^ER;vlRe|(F-o=wGKqE9%|I=Pi z>y^8~nhty*?m>ivKWZybTbu-Q7mE)m9|WqaMKBl$roE=q8Vodi-!#9+cS(@5<;Q8M zjTF%507EiJcB^dkz8SwMoCRp3d?%gaXfJh-13@4SMdYfETfy0?NnJCctcRZ}X3na6 zeWHcx%PoF27`}^$%5)t-8ZIc%Cn~U_>KhBEaJ~b<03`OtI1c)WmL@{CLTlcR+Av+f z=Lf`hSO^@`oB>GuyXG)mmqiC)j&u`Q!L!eSZ|)#-bbn(bDDd8M{Yp!ImA+YllDvRN z&S2JKZf}a9kv!hd0q1x?)N4+k8|KeC71 z?`<;4q$AKG2d1c_nu~9N@rxVxac;hBW*ovf_Gz+0<+2_E4|`4aU`Xlom`UowYin=} zPkSiY>mPIm2uJnvae00PEFE;@Ud`c{PP|?D0RXNF62K_ra~}-%a2yj(nf!34(9V3n z`=0y&{2j_b?*B>N3@`;=L*Mo`A;H0 z$WusEF>!jROp;ZaIEK^&gA)poKvqxb-!+m$ku^>zYV2NMOC|mYQ;n`Cf(Peu^vVg* zCin2pm*OhI`~{rU=I7AG7DG{Jb4x#9oz5NVWVU-k{W*Sj>;4bYSvxx>g?yF9rYOjw zkyjw;kp-Tb@lybv^sO&QL=~V-UNfw(&G6M5Pe%?SjWrir*vW7)J5IX+j)78Zpb{EV zY`Q3zG0Irox29>6*!1XOQYdU6_2U0j@k&bW$x2o76cn(#H7TVV+h|{NJO!uUtio`< z%bIg@)Ke!Y&+kQUdAt8+F$#d6BULHL5Brn*(m9cHvJ}4VU68@v^bI%)fVrF(vnuNW zit*g@)G1W0RSg+t*0>Wm_5V5sO6Ll z6}sLc+*3pRN+DRsxN#k;4f*H^{}8jStoA=(88t}5NFB-S0%Q7Ic7_w0-r%zsWeGpp zea4z)A$=KXa4B?0oF)|-UQ%aaz2d#?&%RHVe($|JlD6tT!ZguPaa z$z{_i9TXKg%v`ecEvYLQfAFI0?ctnoG6EL*wrisSAyiVE4lvuc#k{_>T!rk(TdgB{ zY{zoXo~~_XR7|k_xIOG%`85w@$IG{$5}ruCu~m2&p4A?!vRsBJ0@!LUSj=ImMYnxU z&T}mqPrvf$rAZ3v5FO`&iusW+_h)HPj>UrqWj@hK+MuppS~*FFuHppzd(Kh%iZXkS zW-{xIrPCp;<*RFJkdAZ6)%ES%@MgtlEh)vT{6dx|0UvKh>W1dMZqUhsILEcuXZl95&6ks%#V;up$^^z&m$nQXLb4Km#BZk)C>CHZh4=Ifa%3eC zg;7d?zSrLK+)nq&AT>>eKNM-L)@^$OTs7i02)>!uUHBW=e<67&@}!Gfk}fhrppr_~ z#?ul(q!{4oKAfHFum^+0s6?%*v{Gz%eTg;1*TBGl2y?7{a>Vfojbm)Pu+wc!q*Bi+?&-FUkT zHa8P+vq_tGBjg5{B%3S9m`E2R93C54l>mnU!y1HOY5p~edRQ^fDxIju30OjpY@B+D zofq0?h31M4k1N^!yYdza*6FqVKM}oKFmdcbwk~IJ4rc!Q$sUb2y>w64>LQX-F9OZO z>58!0_gjl996jSAuXD!LYTmAZsRfRxBP@g36l!HlB~+mc$@eRT7O32JUND&t+ePXL z0;&*K;buD+Z+X*KX2=i(gDXhm(Na>*9Irs`$X-%FY(B~6(4XZD$`YNrMR~KSz%i6h zl<5Cw#$bly3}DZ9+J7gXf;MaGHmp5ZrKyHmYr=K!H9x;Znu)nS z=ayrvVp=~Gw`VX;t+v@CfwfzED{QJNxQxo|;pmQ|9J>jWe#}&{eQZwwvhS(dxus(& z&Z99Y8=baoY>LAVG)^_*WA#C?L$`qmYeU$#^$$T}tkMvvKatl*?@})Htq8$HZCka! ztz)*o7``0TX>zQV124^9pgpJH{3z2XV*XHtW2?PZky2q#B?AG0awgNvg>Lu~^?F$o zo#>n7H)2M@YbqOl8=wL58L{e%Rsd3wB;pS+@8zJBTC}w8;0Sp@d2>Fd&Jm(LCU*J1 z4O4ro>Mum|B0)um(P}B-6Aj_SPI{LgM%fa3s@?ZV$%5)+DF-+|tB=PjE|bBmq7OaV zy?X>)BFP}4#0t4jgJKTooJy5@#`If(z#!-}biX z9RfzbyC#Z+v^O*I&c5thkjD>bFzXc>Ix5Zc*rwd7R+H__`8n)S$SgR(v14W+m1oET z2CSbe7!7=;pV5m6V`_FK1s)H4@`w#U+!H1FkE>*?eb*pP9+yGIW;6MfuuI`_FVp3H zBwHh!rJA6Fx38F7BJW2I-shNhCG%}cUPun|RjADC7tIIi?d#IX{OG^aNWFdLYogFr z0Gkd>3{e7tE~9S$YgXYJih7#-+A zp!3L4RlJr_bT=WkDE(oRG!euF80uYG(2BZv8Q>!;(22(sM*&VII|oYYzQ4Rc>ITPHv00`JNP|_-7>R z3;z1AaG=BGEFM7u?}qpkfb$()EaKz!JKr3hKJQQc2cVW+$IV(@^Nfi>5{!4pET&hJ z6={+Lil zo!^(;b*_|?YWySAW-`(gA|@mee1%e8yPMa7%6b9!j=ubLxW1nF6HiG%Sz=99*;-Bt zcdNvoF8>oAVy`hOgqA(YL_6^jF?(r)&Tp+Jk~}9hW3x+Ih|0Op;&(g+rZVpTa1e7W zfCsx3i&}T5j8R`YfX%zFWkV{Gr(Rc`MmbbD@PE@d00s}40P#n zhhGKh&xXOp1h##-F~gB~Rhg=9Ngwz)fneDBc4bAu1UZ>v4Lz8U0e8G}+Vcn|9t4pq zWJYWRoA$D8XXJTed0eC?(k&3f&#RltziKa;f!46LioeEmXewIDmI`ct-Z?L_h+m0qC*sV_yNh z5T5Hf-p?cv!zxq@b|6fEuZ&TWX8iQhp&LGyd;Svy0*kH&MKu+^^R#TNj4>&|cLkpO zNSSXA#62Ktjusn&Q;oN?D*J23;_F>V!ieomN5V}l1I^sZ$4O7IPhp?LNoWqWF*ChU zSMOb*J{eyC=s*}Sq{xt+P@{NCp00ky{s+b1%XrZls+>z@{BF*uLMYSqG1f5U566=1 zLIbElu&U+&V$vb*F*O;~{bkJ$ZvOGT$n2}z8;IFCljFGG;`lJHDDQJa96T!f9=J^> zSR&N~N!FkM>(orQ5~1UV^&1S;XkjZtbauR^nB?lpbfJ$CM+3!fCdQpmtxP@cAY387 zIVX-sb?eY5MNbW!=(ofom3X18d0h3A4*`;G)H8bMh3YvuoVQ1@iFLEJK-bV|pGUsu zBH|x*I~XgDGwPkJSaw%KEIOC`dMxK%YJ&GCt-zZ#{gw5w>r`Wr8o<)rSUL-96!LT| z9$#SyEx3>3erBo{b%xLn)8!_(jDmROR3;R#FOxz^3iF2BN?oHVq=vXVm?PK(?R7IC zGaic}+702V%#OSLUr*)x6~vd869^JszgsE=AbNH72E#*lrv7ly-Q*+jUzC`Iygv0Y zmIInDQ*ut4HP7ekI7bjiaYS5hv(cTnh(`nSk&Ip2Mn)-9KV_i2k{U?+vjreds@^^C z!a&wsDpSYs!}@laiC(hn5YFN0h3OlrKw-!`N|ts!M3D?h)Nw-MI6Zfjm#p)M0sy_# zkId~Kgw~k33D=z!<@|G9VDiY-( zA^ATdP||(rm6|NrX=qm4+{c`*UP;L31lKWl%dS^|Xp#q@>OD*hss-u3Q2s5uc(+{V zC2*|y{l`m)88YB#-jk=$Zu@l2S*&bM4PBwtjf&zFg*QtEf{|6pzsN~hk^Jb|-BW-J z%F8xx_3D4>yii`yG1qW{+>j$~9}1!RWGmg4wwAVS{mK-o12p_?vTgNgE!LC+>$eNX$CbrZ+l5RmS3eW%hcQ~ z7e5SDNer1LSH{tETHXE=yQxSYF0qj6_931!JcEEODA-MrVps3BQKN}8!^c7^G(osw z4Y{IdY;4R=y%62?mhpEDaL5!aRze29NY0W zmRRNU2)?X#o25@u7_pu(qzp?Nq#-1dGyOOxbi<2k3q0NEW~JSpiW_Ki6Ph(c!lc0| zCQ8A6aI985BZXjW%;mB$NRltJS+SovP5&b8C|uGs5_+uF4$yJ1!XhjtHI&yG#orRQERC}s zU{E_c$QpNY9=0nS2^8ibtSp{U*Euz}Yt?R|kVz&PU1uE;J!k2HuMHFw#b|=PM}nU8 zKtcD7h+0m*F3U%ga8dv~Ex?(UuPsaQti_^MYSETg%8KHF`#7;ROT5>6*G^I%ccaIcDP*$;063frvx6b zSC~7YjutfKWJE$8=<-hae?fis@17HNh?B^%gO#z6eF9+`mHc8of1GAO`b@hQeL0{t zX>nwKJp^iJ5>z7fV>Ai5=k*>sE7V8?9{Qk1^5)b?KFd`_gQ!T_!J}JX#1R$vGwsTf z9b5=w7kiji>wpV={VWj~nkop3X6D^&yEvUo=tObMNho0fWYrIORcel4u#d${jB50I zy&+Z#(|>$Z)}%*K%p&_S)GYTN5euoMqo{wa$i~?qwHn)STbp3~P**dsSsvc-<;M@a z&4fsPn$K)Gxy%KwfXRuGtIT~#oG|tUdqH95MT1NGWQ(S51&z5KQc=-~sDu8dcg58vl!wTS?J=*OZ^jw}#s3h2}P`$zbfVaTkPdh=&NRR|6L#<%P&8Jl-vO_2t0iWVNEpW|}i46w?u(|(706T&LD)>_g z$ItYiD?(^Uf=iHMI4Od|2R8oc1FZyBU{{~(i&u7#KfpZ8R zT_xGXR`y6+JdI#l)%^BQEYd6HX%d&@1*Y$uCn-; zJ5CdqaT*s>M`hCEG&;luUf5J;u|TQuPQo_Q9Q;aF#$nSVpwwrAb!WPnON0pF4GmVm z<>Z8?nG?nq$07ob`=%%T2rhLM)CgcMJJ;wXM5@d)VPf1pWmGbdx*qW}>8cKp??Y!h z>PfvdM6}H=e+t|p#49C~|HhhfjZ% z_O3eUd3~?Nb*DD>iBE(dINw-D)i0u+`uVS`;yMGt#G#aqIbgH>UtDZIL+|>TFoYxYV#^A| zXtX#_C?4r@q}fxN6jIfTWY6M%SkdYkg79==(<=TrvY%R6c@OGrUR@&)YV}v|VJ5d_ zZ7@eo8aOu&lTrVB7yqPI#Hw2mvYVGde20cU)b$qZ-Z0n!y|^zkE=e+xSK(L(x+p|t zbYlC>SptNIZIK}QdF*eBH|;iiF6$>tJrm=prirv1BF${21DuY{2G>;q6Yq??$ow2J z$lK?p?Lr$V4i_#1AoI!0^SIXaVz)*U&uB*bKJT5jf-S02-W%n`n&(I*uZxN5jiSW? zV#ro(?JFwAL`#EJ%EC0qd`aFThpEsB2&CGlK1?i$nXiT^z@_j28CAPd=Yg2+_=7M@ zw~K|mEL9%)xcm$WlFg~YKO4dS7P70sREprc?ETrr7uvhlZ2!>a13H9oVJ<(kaCsf? z!dS$_;>dtzV2n>$6)d-&?>x852eII`eOPIO^|5QF&jY3LvZ*Yw;i0_SL3X*i6d-tk zgiN#`b2b|-iQ;vU5dJu#V}p3RUK+!eng3(-FxNyq%LPwgA;F7-x(aiw9t7f^HkieD zG8vP5TUK$Qc!B~fCi3m%cCk3?Dg%)K#4jcT>g_b((4F`ZjRND_pn650_gOmE{pIDH z+EVjQl|0khwH8Us=Ocb)P6*`_!Ja|Zf3sZ4FL1Sd*U%@1e2BA}R)FYG#XW#Zd7{yZ z|4^9=wKD~;!DsQv`YxwhZdD5*eD4mW`V zc90odKEd1)7ZvS_m|BLm@>agm!`-9?bm!)ZI|&%#ViG-|@xQ!n(svU7%{NGk7OD}c zG*kCc0)MO9zfChpIV5~5Thn=piGKioDT`V+q;Jzkzq4R1WZS-(KR^v-Kbq|W&ei7l zh-mh!2sPQTu9ytP64C`J2c|J~Uu2d#8|_^y!n_k_aptIr#i2b&^0h^%>UQKDufa(t zco&oJn(F}R@Yc?e*wq!3mDDB8Rc);kF{U4E!5g875fNnoM6aW%$|e9UQOaGk1^uEM zZy-*jM$tbuIgQFV?`~6c0|gJECQI+Z?rOuGR$xa^c0J)xVsx#dXCdS)hne6whG4TW z!7^}y;(g>|bqEmBtu_JT`E8ftVh`=(RY4CHQ^t{~ zNbv9!v`*%vPL<1zDh=f0MHA0Ba1GQbz~%$~#Q8Dt!V=`a^~^W;-LPTtsICob!y7`k z4ScH{U?XN@B{kuM+cShTJI$Iwm1JeCI=(6+l&K{@33k}474l3w=i2k?{SDn|*s*L& zPu#|iTCS$V(4qXq{k+WKk-8ShM6pR_`Q*OVWuX-z>3WmlNG$ZBvq##vY)?W>`cyQ@ zU2Y45y4Ger*|4Ok7cDw;=ZU{k`JM(d=Xb*E6Z&H4q%}kN;+3~bdf144pJ!lcvmUxl z{XXAUik^!Vnlcy0ky2BQRASi5&s&V)oWlipFDOXU!yi}lwgGU{n_G(wie@(}y}a>( zC*p56$RBFoX=>1LqB zc5+zmQ5fwt4SlU`17d934)x;94PH25j?AjiXa;Q zcy2Q2@B5WOa#u~`(ea^@)*BkZ1x0`2^0Ogc&?z@SJjiYf(k6O-$5(Eo4_G!VFOSjs zrj9x@M&S_%MVqmDf$_q%{#gG0x1o7pvhNB4z}JG@F{rNESbJdr&?7bEXk;$}rP%%r zZ2h9ji4PtK_sYH3^x~4K}&`( zg@Gb|PlwDc2h0O(kDRG0bHvJBCVLLtSVi?TYJn^+dgu#F4tYMa;7*GVoV}OZp-e>a zn2~|qAyoO?#xQiyMaPuER;8t4uD(Z~5tN;A${Gm@gevJqo45UP^(X#2`Fm>nw|3A} zyW7v97&V8vluVx`Yf@|k_S&h*8!GzFzLm?Sj>Lc~^RX#Tyagq}w16N|kSJ+)AO^#z zxilth;!zzZ1qH(enE42)+(aqOlYm;@&pg0^eA_``&}mrfr?;4185!)d?5a<6dF*le z-{F0$49$?m-fQ8dB3t4^_0D)S8X?!oa|+**IQ6Cx76Q+&^M(TXU6LzwR0R1mT(J!#QSD#GfPWP7Vxb)sD!1E?D}5RNJF zeJ0C1_&3gB8>5O{-jvU1N{k55m@i_{p_2HkB)b(Hk>nljoBr&0oEU&!w0MY9?PjW1 zVLv;YvQO@DU_fdP^*E8#@ngL}M9BdEKLEh1biFLg)76Hb0V=SDBhhvCQ1wi}xo?o` zEF!SGMe6;V@wAVoI;78+qjqj0Q-z-RTqhY0{@g@?+O~bnARcdnvq-Jx63ZDR$+(-Q z)?}2%q^|Pi6<=Tt2%$}!!wP;>-XlPeI?{Bcbj0&HuFxeEm`5*l24V|(O$E7gb8&5i z*7mweF7bnQZfo>V!&r6JBz~N;anK$GqfawWyum_X6x|99t1x)Mf=|F|xuyp7fMe!< z1G@w;_JDU96ILRXcaleJ5OYP-2o74)H0JPcGD9fG1meWyQ~>d&OtKOav#%MZqn~4B zQCwXgcuy!la#Yb!PHe}ECOlz;el3ErZ?$oQN>TtX*R7@O?0S2)f%N1|vs$iCExta* zDuUpk{mp{(W1_{@kA`kwi%+`3&nXYNmc^^ja3Kn$83!-+;DEP`^g=genqIY%p6E7{ zQi{-ZM)$l`cLL%dQBUe&p=}6uw;g{2^wVyVR%K@q?f%JEN^5e5wzA1KB{r(Z4X)MH z39%eha%B1dn^l+n61%EO0V^#=wTQ^b5*z8vQocjbV)vZ#+xplSYIv+1cIVUKK z`9D3%UoQOaB?ohpatEwmtVGA>*LM)aP?s5TbU-(JQqq~DNVn&}H5iYRqY!j&4X2^j zk{UD6jd4HmD>kO%%+`wrTyHV$!D zXXB5D2oV6qQHP1cuUtDN6M~RS2A=kN zHUZR3a252}D3T9)PmO4H_bbU|DE;uBXw5CT0ZSF!}GYpsYB^_)C3OA{5S8>|)<8murY$Z3!(DwvO=I4)OfH5*w^9v%*7^I*-BJO>3LEESV~S8aX#0Q?rMoc_;6OQ>(i+yV-JQ z#V2`phfQ202hSHhn?2>uoxQSYg+HhrY=nun2Ci@UbUB&vV z388=;AKP;Yeg;PJe^#+JRk*$4xv*ifOsmjGPsrX(NzFst@N(gh^%`&BR21XWiYdm8 zWOD4p@BOD98ju3z@*=8Dh58lrMbb6DhPhg41(gC;`~?ge95TRsHhU36mmpm)Q_Ki0 zy{h79U9nCYYn~~JM1$<;8uuLauaLJl`e6+QlD+u`m@e;VSK z#g7eJc{!e8KM2ELu=?DE9Z$Gccsk?Uh;;V2KaE82&=WLcMFK(vPrf%nQTKG{}R(f8;cyBL(^(j@3WEON#f}a zd&2$I%p>(X-{6Pi6w6UVfQCxnK>47NO-~K(umw8jC}F_aE6V7CsF)9*q=5PAiFfg~ zlpOv<;V?p!W3w_fC+iN0q&c)Jn9+bc>I z8*Vy6gj!TG_k|QPvaQ?JZKYSovBSDnyv&XvUFkKt&WLZqftzo15*!OtAC$JHMy zhx9U~+d7$p-o+?v1D~*kLnuYl$B($k%7(@*T@|`$cpTm}J^_2f6TD!XMMMye zot%wJ#rZy)c(i^M-FA2+)}-%$28SngI-a33#(6`1tHSS-5TKvCn|XSHT*gquSL*v# z93{ zvIB;A=51U+EVHkQ&An0N7}!w`LnmU(Gv{YlY(wXYUgB23efAx|!HQ2a|2KkD`g-Mo zW=EYR9vowLh;$Oq0OvS81=wrW4Ky8OT5;C~q3A0)#2P%AY^}y?T3*4xi6jq>I+&5T z@1=lQD%v^$jFX_;Ew+VPM)&iX+gozz&yBpaPiGr*B54+FC)UaS7I=v>Q07okzfs#t9zQOu0Q7GdSmF}wSPn|qo%|alt7ROh?k`<(U|;;XHvj()v)qaM47K_R93cXMb=uj9^ z&IXeK#XLwq3#o)0EY8>4ZvLu$pMtwUD6M$J#6U?5d}h4KQA^aE{j-WOM6lOlv#{o3dnm2Znm1LO! zD%?>q7f?x_{j-7?3F6INjbD@$;w1C{G6I9kPT=&Uq*_|F7T7`uOgzw% zFXY^-X|mv}iDBFPT~CadAZmGw0)RSW^3oXX5V3RGqn?cnAdxL^0k#XRUC zq$Rwt*l`<-&P*`QJe^(u9=x=BpMmpr$G_nJDMZA(yNsmz_qe~-mBKy1qAfK+M6LO@ zW(uO64-g{A$cdqLTUh}&IK>?7mcZ^oSm)g_u~z*kZpJroEZJE^plU*%pD!D;mO9p| z$Cb)m>De_)p?q7DmYwry?d*cdNYizg)T%nCOL%NBZWv65S09fn6`y!qvu=+D=(C0c z6dTyxO_!^k@zT6=dEE_;MVeWoU;r~8f1NlPT#+OQc{7yjT4Wl8_@Y3cN>|iE={%^; zmH-LziW;uIR46ulj4duW>#zRI2S3ZlB6N@X?m1wa9z^J%SWni~PlbG#y^*)PG&4J4 zuaG+nxQmUtsO6?~ga3O6ZH}N$`OZynSLv$?XSzl=kwyj%9BWER)$v1`4As;8D@O7j9G&7LKL%BFRm&2s)k+6Volzm&%uaXeYFX4dH(4Fq>SXRj zF_}d!Yg)wYBdu5w_kL_H>ki@sn*g#iu#TigFY$yW4I3fYp^lZc*Q7_=2;V%kFuyZ) zSd~D|pLCcCB?okT5*QpYTt%^CBc`3KbAAB7@Y1mWnd}RM(!nf_1->E4LiWaA(1IwS zc|Uo>2)EaX&Ww4jy&2P2wn{h|L;#GcLJ*x*%>!}%E>$6*97V8Ufm5bvhSJJnH~P%n*+ay9XwH zRfZ-U`b_NFrxg3Prw(65h%Z)xlKzWTW>cJ^t;yc7ceu-=%K;nk86dnOLC-k?f&%sP zkdvief{{;x;_JX-(w~O7%k{nC|58WaF4pUK*E?_*v~}~5zg7D>jvL}Fg0niZdpW90 znS8UKepxFKvh^l5W z1cVFK0c*FXXmk`9d0XhU0XxhL2Yw_FLbw*0yq$3C0qi{)&SADVY!(*ox@X`{EgbO2 z+;U&T@jF^XSQ6j+RO2-xYQ0Ja;2I1vO6n)`=9_kGsuFv4p~?EHjUf$MPAk_T-nGEX zni;AYYOz*^j1O0fm*^AVSWYWeIjQAGyu5JKv4u?3GV(q|9g*EAUb9EE?I9c=y$jp% z>O;zU+UVUhp_L1=c_XAKz{I2#6)i7ql^EZoXc3b+v02a&iRG5Ck!O&B#h1gHr1tz`Ac9BUOqZZGm1C$poU zm-yjo50*{3VWIGH(>Z>)qPN!{tceHRAYr^F)kD-ZUqFb*)U%s3Y6ctD z!!ed#tXq)EjBv8k3$Cl`yvsz00?_Z%9p9vTN?^{b;JW)*B{Jw9_kH2#7!}5)_30Rt zfC%wFd&!kMg7mtkA5QkcksT7x(sfF%R2923qW8E zdlm7uVjXrnJT|v{@6(a|+@4>}772hrT%|!Y636b#;OehlI7NoXQ$r6AOF^K4K1YI|5^@6Ys(Z z#oyZK(cafFz$u`nGh?7_m>i7x`0ftcb&hd9lOmm&@FfY4sN0oGS@jAt@oIlQ&9$iJ zEW3C-ZGlf~^B3Iut=4Jnn1N_7qxB)&*cek@?!LQneD6_)j_3^*OWba8uf7JGVLxD- z7mr^7R`^OzmyY|w(ukIyC4;SChkh=;q?n;{4=WPj;o)}klw2y3&w4BgqNp!fbOTvL zGg&n?1m~(vPQW$W)Ey)n#!U2KivRB1TKxh31gCpvSPm=Fb7U9|0;2xK?Rh8M;#sPj z0V(ge*qofp`nRGy=qH_iWM}CAid+s!Ex`#&vDQP5~$Ghf=?&DnT5l$_C1n9H#C*m4RIMm!w z2wzJDS&|SgC9?EQs!C^LkzUsJ5F}Ycvwp2U67Z&gCub)71$Q|+%)Z8&WQZZ2>z*8G zMoRDN+BX^lWpH?=$`gBTB)bY*{HkOkVc^`hSg-o}Up=jkYejj@mCpUl06m3VFI_SN z1?^>dyKdYqYxaPA;SGzB()x!C1F>amAzDxfX;MnS5{Jgs`jP@Z+jLfCQCav4m6)kW zLiYI)vexNYe)?G<#)YoTX*LoT825*Al?3VE5B@)P`3ke|y3wTATl#+HhhD^K$UKzG`RF0SDbqXy6B1TUX_n||@ z9AUtWS8ve{@_eN#Oh(R>iA;`C|5xd!ot;(QLgr=cAj`Bb|zQ=IA6U?zN_bZJLb zeOX1DR|M7-p@S->Wa?iX2;D?Bq8i@&5$AwyywJiH)=~o*fhOEwy3ZyUw;Y&U44iEI3e1%Gp%cf2zw?I{_=0_Lm zxf+8{ZEiP{&=lz|Wo;oq=098ITKkdA=I7e`kw9!Am42%uS-t+@c?G&k_J{YTA_a9G zyuyeHhMF-vtO$BHe<*e4cgl+wN&PFc1qi|H_qb&2qpY76BCl(%)%&PdWVT6P)S4lt zkljFqKG@`4b&Sm(pf=7kEtEY`2Nc*-ZC>mdpTCUv2|NVywPA9*aPw3k zu!j{b`X@%qyft=qa&MRILHd*j$<}TiJm3p6fT6n#3t+4rrS@pSa_Q^$@M6+(FUTDv z5lDj@pWD3U&`oYs*v$5Fnv7Lvh#HE`Na7o?9X;qyGj-*KY}8M=f6`_24Ek-FMv{%A zX*d*JidI=};d-7$oJlL3xEvOoZZ;pI!@vJ1$*}W$H~}E7+2SS|cHiXZ&1o&u76s-C z_(mLTxnK}~NKJup$(W0;u2SS2q6A)s2hhM4_UkL@YUJ5{SjVIVNOw;&HVW0)JTiiw ztYS$``naaRXvSn5hELny^Ai>DBn3p~bRjjjRO|dhEVMWn0a;&wQJy~i zdarf{DZg{U$=v_-Yb}|3@Gst^SkhVWkmvLLe1Q@S_#2hRD>?fs3;a_UyH; zIZz(5{}ycC=yZcL0apbgenIo8tQxNR9sOJIQ(_L78^)`+)RyuxR3F%C?*d_wvl(rl zROSBxAbn-TOS)2Az8B)<1Vz)1dC^Cbq-+eCHtSo=qh>G|zauq9j7k+Wr2aACO_k9- z=7$g2@3&p0rtNdg&DN;peK!dhz9n9aT$)W>F`%kEx@jv!Vsz5y$=jd|t;4ZpWvSaWN(yFR^OK!25Nulrq^s zZBrcMM!`irQyrSm*q?^Xo{~s0qlyCMmKnjBG1KStgTaa#9t~-N2=s$H{I8~GffSQ1 zM*%A?g&QAGB9!RV$s{|sYgk?e?t;tcUy6swKi;9S&~=a?Hzi!)CL&N(!sGNSyS6RB zL*9AUpq_T$0?gBJDtgncMucEI-3-JHcW?EEu__{umBtdw@UHzmfR(KB;jbk9PGRT3 zBPOVn&;$pmY^tuNkk}YvW{~5Sc9;M(j!+W9k{FaL#10=A$FP$IA734dUxG82j=(GH z!5~d&q-GCn2WP5^KV*x9?sxXvRdXkp$=ZfP?%4fA^~%{FRYsOyGUn+pxaB2Q^kv6o zqK`09o{cP3OV>>vt;5xPe^-;)jMPH6RjTCbu7Gn)(ZN7k!P`}6o`kCji>p#@}|g#u6)JZVn{kZ*TB6re@> zU^!UPxxGj_QtN~6F_<0`raq4^5Sh1l4iL>a+-0dpFVq$r@~ywjtq$jqjT*9Zz33B@ z4$LA@JRcY)+4hQL#)`wNTt+=g%k!nEisk6Nle6z9|D&4l&lVh?d}5HvxxF$7HiV!V zs=Y#C{%Z_xETd!Wn%ewTV$aSqi9>Z#bq>*3p-n_=HM5{cqfri>I7ZhF>*uoYiHT`B zBEcA#;o>|Z7(37hfcnZ)?r}zRpALVvl;S-q#rHmE^j%0MKaLH3vF~hv z=Do6#_QN*RNx0h)blq?%en_$=g^3&Ab?vT;vjTORzk15YP2oEyi?B@88Z9+Us018! zqJZ6crjQh2J3J`J&@>;4-oY7F;}2Ud&CI@DBdoV54#_GM+#I0_r<_DJJ_#i4oAxUCpJBatO4o@*+q zcKnIbD-FGy&7Y-B5Wmo(LZqv&8pi^reSS1vHt2RH%eUrhQc;js9XvVHJGr*n8`VrZ z)2zM~d^T96qe5=WUtQip2oR@E7sBc_lppH^qm zb(V%{HnKk*@o}nj(WeZsH)}qJ-_sHZGPQkjQr*Ez;9#Nq(3yfoMmF zMwCF$6|5pRru8Q4P0f+$Q>`NfIY$uQHUj=;QpFihMvsW#SJR2)J*cHM#Jer@7!fUp zge$O`@G2D>0`mN2+Pk^oT)qi}PH7}th&~Zv2>_v$fgT&s1Xb+WVrJPpLOdf*&%Ug^ zn)lZ7R|Ie6*v@!@DMTH8&#cJv)CawqF1^Ch+Mmx<$mF#c@B(Q@AhTHfJZY^*(!HHh zquz!mJ~aG~5MnW;azMbeGc0m4S>&;_PB=B*W{dbw;=YhH)i+CI4l`Gt8;CBZ9_^$n zDJ;Dmi4$EY=>-WfF7%tCPbs-np>$8t(hq~`sRjHzD2+!9P6sS%3~l1np(cq>#!3(D z(JhG8oB1Xk;lbZpUsiF7!`u>l&eWgEj@%D-dl0qVq|q1r)GOXmu|fNMnR09Lx61$w zt3nrmyC8cP-U)Cg)c{K2Tl%~;t(MDx7j@V5u89xh7yiDFpPX|? zCvDuCgMpYlPl=k-Zk(tz$VQ{=Z;%aG2fL4hvfaIHbl~Cbaoz*z={|y!Yq;$Q%*+6G zYS$Jk6;Xgj+TJJ38Y<%fGepx8pH8vp0mi2no!}m!anxH#$wF({BM&BO>YAz8rVwqK zIClD2=|aKzSe~*6!X-PBu?&adE3zvy-_M655iC+ITmnc{!z4gJ7rPWCjRP17^s)2C zF52f{zQPI}`~NTXd+n z18FzMg(O&7oVNPp!P!xx5&!B9suSooBt}z7GpfwzkNbPgYcDhVxPQM3>(8N+3~$uJbo@ZpoFs&W>HZk42E{TA7F6Q-#_?xXoEr2U5o zNCZ$GO?JMKWmHL~^52j%l+Cw-46Zsz4RkoU3h&8OZ(F6UWj^}c&w*o_7r!V|*Ygtu z#mKo`Sd?6UoEK#rELkNWHQ(y6pO#rlo@`IiHSBkH?>1?VI+P}tPg9=}{m?5^0SfmG z&R~gPKl{^m>W|m%1A*x_)a07t&g>0KS5f961B9ky!s@3i1#m}+?vQ%HnkvC zF7@vmO#%>d5YH}3QtCKsqr9toTzs}7zPjje4Y{96etDUP;&CcO|ISh$urP<^*lR#J zj!N2}rOX7pdCZ8l1_rrs8CdXeA{{pdC9#r2D0X^5JWWOC-5E{%NTAbvzBWiQ`Za` zS^~gp>o6{HR3rwW;I+s6Ja29cuO$(6@u5{PG)hGz`22VcXB%av?nFRYK;nar^#8&Mz)+bk>7_b3k0_R?@W zp4)M^@T~witJZDBg*%|A21wfXpVd4&CpuW?j9KR&iJjP zJ}Wlh)?@ACfa7&9>W&K{NJLY`AbL8zq{alXqeVvwDBPDov_C-t9_oX(%m#`%>P<(J5l1H3# zu{=x;XX=P9as@)ZX-n!mg2jE=1dvV?%7*G-;SAoLmuFlSud(#|cfK;uQ6n9e1B=j) z#ynk+9bfh!AhM-+Ky<|gX09MJCm)NOi&b=~f_{ou`+R*1@DNMLCekbhT#|7c!j?25 z^GlaQLI^XWU7N{xM6>Z;s|s@g-Il-*cu#!$PKGIw^cbp&Y5rECx9i0V%$f3hmUVIu9%L^zX)02nn{A9&*%MdJjEQRv^ z&bm@uHHw0Oh*rV?!waM#19ykLJ4f9;980tF_C9$}Aap{;60Oe;{vIs3j@7IH5_v|$ zqJ~?Z3|r!ruqmC5Hq%&mP2k$F zz$JuJ0rAy%s>V$>M!1n;2Y%mL?9q#il1e=Luacicpq7U!E`(&flzBf>OA3C5mMm(j z)cIqDSIc9o?!T+ruG)%K>X7l+{ z$Dy1e%J<~I>9DV;{K|Gd-_LX1X>t0FjJFUcS$kGcdAd3VXGPS}Ywnju#4}73iL}g# zrU0WGD$p*`#R^7F>H$v5;%FZNU}e89q#culE~4Y6`IV2Xi@{8l&97|Wt|zZJYW)Vf zEQ;8;^V{Oy?r&fLy~3T><1RVHq&(h8{}vrZo8Pm!Nl$7}3pw;o4VU9OTI1X(P6a#8 z*0R&rF9q!2{E~nU5XbW(ireLsBVhtwgRWny0_UjQGYq?{T&pv%U${$@l>1yY^ep-4 zx8FQ*F~Lzr4gZ*L;JG>`=jYGU@U=YK0%RPtCM#B$ph^7-etnVngwXM36*RmAG%seL zzAG2@LuP^A>k?-p2Es;HcTuETDHOe;eE7MNowHjoEIcd&8sfKZDIU=xWeXQyY{st9 zWXmlJ#rMNvczdu$+11xegCh#|(T36&Q%zEH6MNRJ^QCjt7yuc~1D z{#kmBXh+=SG7%0`bkpnRN>p^W{|7%}JohZc()TJ1uw({I;s}#oGu2RZ&A1qfzFOAo zu*IA`M8q!Bp zo>a{Se%B-9kXNc}HBVx~Tj$Ip6g`rUVx^ECCOqw#IvHoPvRl{NkZ$k2&I!%saz?vh z!B|#Dq(^p3^>P++q=$u>RK$Qevwwr`iUKJ}N+BaF9GVF^BQG*DxU~M(s z(^-UaVtZk-GQ=QAmgsIkUAh6AGL89Wit4Y#fYgB%tKL>@9}bvv=bv@aRQH?FJ(jc< z*QK2SOMxe9Cq7aH2@Zq@@(*5v#SbY)-Xai)m=MjrnI!I>RMq?-V?oTN;SmE@p?=mc z@No4c5gG<5DZiPF!Lf@W>|cl(OTm}~@DmdaZYq}wYO94*wV3RH}~{1b^M=j* zLmy?ppjPQHzQ*DB$$nzDlct&~_cx9+vXGKwSk{3bH}XtchcFW1j9f6B>MfjmGU5~l z3B|<%1Jj`=Is+OTL~8I>zv~+wT0Vq&5b} z`|DHeA|@5cvW>B5)KDqZmBog8-*!awKTvOCUy|R8ZDYPtfxybbY@G7tF--j>)}p!= z6pI|*pszR5gAp#0xj68RFdz;S*2y}Wz>F^n+Jzqf9!OE9`}y;Qe}r8Aaaw!EwJ(I}{q7xU?qtYqt6zd8e7eAuy;#a9oH0oz$e4yn z!1v;`xmRVb#^p-`V-FtV4ZmAx;&0}`?{X-SK~7A38%UQWBlKx=+Kshz-+v0Jo>v~t=5G5APAS=3|SZ)u&4*SKFG~6hM}l@159qq$ZvEcTBTwG!ZYHqBi`p}J?&&!IG<;*x zxMp@pP)Q@kXNGj&qr*|_TZ8`p+1+TIm!>1FZNBnvCZ7NXeY)DIIRDc#-6=it^xEh? z2p>-WFi>?x^R(?h!;S@W{p3SJF~>Uxvp~W2HY!Zfz7n=jzEmPg?Z)GYBu=`2x87~w z{K5aNFd24WO@PfFvARMSYz3Q{7wa>R->*;$!RCBAE258GTaUum3(S$}8dD@yuNQho(j6LbVte?%V=$A<=Y+{a7G0hb>- zn*`l*V|%@^cdkMaL=k#qQPlnpRGqeTfcNXU?rC*_BG2zknOKGgiiq0^y^So-m@mP- z(Hn0Eo-28l3z;yjd`EOV)Vz!RMRYNNlSrI~eNT0Ei$)sR8Y*(g^Mo*UOyL6SVYSZG z&Es?yJI!*aTYXMey$6LWX34B{E~#;Wc1y2ug}SwzryGqr&W9}t3ByyKREi!>@eTN* z^!L)`Jer_E9w2p3Z?Y8)Z{wbD0c(HQ7&j z9njG31%e<`#2a~4^1vksX-62Jq3f&rf6uD(o(a0p+oVSe5N@Uy4FEG1+o<0i(5YwU zRhq5Y)F0BF$s+Twl5aC9nGA6e+fGP#{8w+kBHNt|NkYve{Pjw_>v{H$p66S(op7vQjwR!X*SZFYE*44c)`>y;Z&X#XYWsKhOi zv*PY(I>9a2sPz-D!&UdldSYt|aAN(`o;DL}8+}U8bQVxSE>rJY5;>6w=Wpkjgf1+^ z6CgGMn@}+>F@JzilRUUi|dW!e}1;qQB8>j~Fw4s}tm^bKGYR ziRV9)tz4xFPd8SEeVEsjZGZnoio}Sg$9VtkS!k_a_W$qvS?-@b27MTbMSJ6M=!oicdXATrG(*o zJg0Z27xt}F0&4CTbDGBC%3`4RVppo{%cAwYRD?vT-AvLxNO|ivU}NP9`^QGK;cu?M zZaW+!Jp!iCM>?IhurfBf9miB80}g+7LK(|?nG1q;mi1lnOl#aH5Wxl0q5B!MUn<-M zub4D^ke)JtWd8nbZ^QHE3B}zzDY7X@M~=8G7NSpMy?Yo2kC`p1M@EG5^85NE=~F`$ z<8QEXvW6~d6l2ZHG*CqkxV0)C@(#@$01X|lyp!&3qN)<*wMR-LIxgh#v5=fpxoEkE z-*cdWoP1Z`)brfy1M8e=$fLM7#G@B`e_+(e6V%MFks7 z6B(+|>Pa!F^+j+QviNx1uXw^!L5MKgI#3Fp>WF6TjsEBEv>MN3MlfbMRQi30sd|p< zH7j)f<}Z7DdP6zi@0k8McKpXk!L2*Vfb7&m<$MKi5*>GLUUpG)=9hEWy|%P7yD;e` z8p7Pmq~9h0o=8rtaTNe&PWG+T2e-UWdxUmas_%UIm^SitVlRV!o`9H)of(&Snc*P_ zv|#+9F$7%BUxa(+NRXCHxp2)I3T=9u-6Qz{;)Hr2pLBuegSrIJDr8~l78lF|vhUw< z=vth3@-ZHx;pnD`N)nJ&h-BQy?n%k`7JOp{7wxTir@^10{CoLYs2dVTG6i>Xqy&V> zdhW9X;_V%?^)W%ubf~s#dha3^?PuJ4gi0P<*Y z4Gmre`2bakJ~dwAKcH$DqZuhVJMyECyA{{o*AY+~L~GJB@A+EL`}2eD@59eLTOd3` zl{C~8$M&TjGwhs!F;_!@P4=zLD+}n33Sq=2kykBVQ@l_k=oQM0zIH5>>rX~~T2%%~ z-PJH%EamkS=~^2Y1mzsA4NNtG2k}ePx3)mHelq-QK5TKF28iPbvfJspeI~+#cYtwR z+9FFr+2q;FD#1(+jQb{9okjLQwhH=CHehw3jpshSYT-#)G+7F|pan46RS!EHL%^r# zA=QhsTWb4U8??EVw5R1OV8FEv5La7L_AdeO(z5eJ*zPo;77*9QH-WQI8y&g*G`X(r zCezpE-ljplam5i%=gL>wsky z<`bQX=9JiI!yXvdVGb7!!HX&O`rWT7XXBiZHmxGG>Eqf;O4F$8Cf1XPS=J8FRIK`& z+a@Ad11;E3i(ZTJiU3@gEpqH-cToYW3;7QFUXcB}^sCy^K7a$YExz!^d-cd4jIF!$ zkINAP(3Z7-$Cte-RP0B6$e@z}wL@AhE8#wQ^!7EmkhaINmJQ83K%zBR8t(?Rc7ihi znKrw(4Pv@@@&16n`otTNt?XU~S7{@59O}+!N+p65{Y*R+G$%mv!q9E21r6`dHuaND z9AgU3>W5gTYM5}D3v(B!(FqgF`Myg2mtW)0)5+eqBpjuOg*x1J@PE`8L(36T>+l+x z(q@BeY~HA_TVL_Oi>e!K-<8d%amqq7u}6F+C`N(o)`=0y#27cRHFI3hy&zgsH_@b_ zYFkg%=zkrLl{nkrm9{M*M>F-S9j3h~Y&>#&6q;M9?9-w%*-OQ$YORpV?M`t602oje zo7Z^D+prR9JoG#3T+SrH38-`1Zr_k#6%t*C{Vv#dY)8>&7W-+j%ihIm+=sib#;++ zuF8wqO_daxf*k6ERbC_X5YP9(DcSr{$SvW6^%8+d$!iy28v9X#64@xhSER-a*f5XG zp;*;7B)PLoh0uwi=u?FFo|z?%(D@8^%o&49dPRV>oE8o%bBJWo{bPESRwCv?ca9!j z`($0 z+i_8(aao#7T!cV=>ukQFw=Jv7*N^e?H#c;SsQAL>82(KDk09? zPHvs`Eq4@!an+NhkXBL#-Q|lLD`kor0FoP1GduwQKLEgkymy(>ak&Fk1^$h5v`&?} zPI`JB!(pyZS z7C6@$n?H$Pg>N6cC7Fzbf7<^PNDyin`F0M1?V+jF7Z~}j*#=9#It19S zf>omXbv#W`VfJxx5F1rWH%)#@CfmAJw)i-gAz0!l<@c5E2Lr9VJo`O|O?bQ5Di|6hS= zm7y!JARq?_fm8|FiCkw$gNtw{*Vgn1%u&nihCfz<^p*=D^u#kX#FRwA+ zF{ZnR#n<);&Y2RobQaw{|EyVtewPhC+-7o^h7)(ZYV<`cVN-2MY>NQnlyN#5WBg3e zm_PC^k2L>zm`UCLc}qAiR$?rr{?_QAdxgzHgTtKVEjyr{=^t_chVB-&_=*6@z;i$R)HMF>lSOKqETlfwChuYC(R63Ne%O7SO+c|v8{+MW8C-R#TGR&!|1;Ku87Q|Qpq%8A6;QNrls=snwG-q z-vp~k3_4uNGn&4%P_<3p`kohVWA1zZ*9+^GhVyz7mSB+H4jv*?t~{)rzO3*Xmy36a zYO90iyPux{W$V7|v2dn0oiH($$ZG5BAO-NI}O ze2Ra(|BZ8sC&+!a=%yFYEXUY>q& zsKiG^MMW2Cy*p3n_h(|F&cUQr>J_4KM^Y9|I1xmGBb{>X!j(F?PO_I){z0jQZp#*V zcKp00GrYsqzlFq{L>)1wTJ6_O9+3-A&QQ>!lfe+4^p6{)T@x&GHGtUNBO0vp+@y4v z)F9CWGD)8!zGeru2K_|GWQztp20qRPb;#i$Bb}rAhiDgY7*T={wEq9cC;)rYQ}F4k z)a&BX3Tdrasr|DXcwSQW)sZW#AyQNhu-GH!R*^BxH-`zkinTvL2u8I2_(prw=48&+ z?%pa)qnXx3=BU4Zn1KhXEEyx&%K$Xs$}lxh7*L0Yvrk6h+$d)GK~lYOBeGfAOr#~W zpbivRk{wO5ej2ZI+=I`^si3ns z88>tSId4e3aEN>P0wy%$;TtwbKih)qEHZk_xkp^s^O>zEUBW{sqWcTc8`&0+_`x>p z{;{oa1P@$c9?L!}F@~U__21W?jd3|n_zxGjDWu@_pF$?f`2#@ttiZ;danJHDTjC^v z-MAl~)VGee%*xiopQaZYtdfp8Fb{npgfRM;d)l-z&>ZjWo_Q)fT^$OWF7SNgKmS#O z7oH?C${xw^MvL0|k7GYL9OlgXJ%QTT9A(VPb@`jrluAPeJEexy31t`$b)DZ&Rynbh zh#u0Mb82p8&o$`27Ged#q2uQhCG#orLbgKT+D|IfOUWAnc&-O5#7xKs$V1~-3%kOW z$VWf7L4|WAkw6`NFWD`$I~XnYQp5pONk zgfQbSt*+}$R+~TVnTR(Ks%RfzT=p~kRAXKlIY?e=q#oF)8M-XCguipaBE|9P*bJs+ zMZXQ%UkO+xQ@{PE>C$Xk?~lIFi2Air9NA1l{W3g%ZBFbf9d|>xiZngKI>f31%WG%r z^gw1=m3!M9kBaDvEK$OQ+9(L9kpa-yTC9+9#$>J&257RzQS|k%t*&nVQiqtw(XJe< z1Qbh%72)nQBlQM_32B`@$e2L|!Lh5Rdg5Kj;dn-E=nj9MQ)MQ`*AIaz1N*&q*9t5#1SY^o?ko=9MHZI#;!6e0Gm}#CBL`ElG;PHq-jeVYng8N zr~m2gQgxMOCPOiaRL>%9j{3;hB09h9%9iO^*o5U#rWaUgt`Mycx5Oqt_<19>_GHDL z%#!(*lf8N2q25sUi}#Ig7k+qa{ii+SxAWxSMTY>Y+}N4-RtSe~d38P|*d znF@A7u(;M}CdIwQl1aWvHy50x^bvcf0^~fw^4ESH3WPaZ+}HP&ZYefv32Y#H!+9@Z zc}es@EMDmwfw5;se^7k;`pbHiz%i)_Png#r<_r~i0E~S5C`m9&=g}&UdK3LqTjMG@ z8w`3T#h?L(tl1H=Mwkd=!xG5f<5Th2my#Sk#UWBO zfp{0^DeiePIeA^u>y(TP5EW=!am-Ax-Wx zn-jh9!j}p-q+A&-L36|PmxjZ8Zh4a_2j(fV`uvmA-$UK%0SlvsX!q7qws$CIQ7~Y&QnbSG)NM=iFVh8GlMl%JpznsL$O5R9czteVasiCGTA-Ki*p?9 zAw5xPQQp19S1Z9!Bw^P;k=RsAeR+|^|1>H&{2MBfzTJT0h+)e0F}Z|N(V)#zCGsEH zv5-gc#WnJzE|}Dnx%n1&%HdR&^W$ol6&mZPe=fmzF7r3l(&Z0fP#iJ>a z8^nkXR%?ct0uR@dsFLjmuaDzy9ud;=%R)c-EoT8n>O~1;vNb;!z@3Az``u1Oe8SSl z+kB*vM^<_A@4&e_n^CYz)XgY#Sb1Z3dOiIE8NDSxRGlvM<<#?Um{`GHCx_ti2~uJu ze$oi9e;LGSw~E)8Sy@h@SqC+bA1B> z_u^SExj$ru*~GQ17?PUkhg4+f#Xn*(MKlUSh6=jzadhyV0MQ#+`b|sGUG2I&eR)dt{4UAL0j$(pQG|cBOXAKC(hB%~_|Bi@T*btD%|O zENIGye5*42rSCgxsD-u_PYA~Z`<&5cc|zuHoU@U?{Pba_u=sZaO^UlK<{VWqX7fPQ zqyy7f;B$iauKIGR1edr${{iuW+8!VeQ(}Zb@7Uw|UV2AJmTamO3vgnCTL<0=4Vv)P zcv+jKY@H)!#k$b{D5gJqJB5|IOnE*jNMfdpZv{5*Chd(-l z6&G@*E^>bGU3XhfZHa{Dj09u?)`8`OL}-#yrNOsqkL()yGcKU56~g79s|s#~Lzu5f z!EE$P$`dNk3d@0BZ`-08Snq2^Ddp8?kvZ_FQP=l&FT(0^Pg}TL}ZJ{ z;m2GvF37SaNSJXS%+!4`d#vQ@$!+dSJh)iu&ze~gaCnY~y3=YGat} zdL4>HfBZ~S)IONctt2jx=;ED%up43{1yFvId<>XjW#s#9$1hp;k9?++Ao@91m$qSt z&(_>9_@sbqCU1?N?}d<{q~PK{14RU>O>~z66C=*F77A`Qp>B@HI@LjwkXPykzj?O_IQ&U0R@&q8f8kf5HK^MfCte6iw;0pskG zmTN~Rz0@`N6Y)g=c6=1p$p$gIi4csIXOm`TE~=K@nUWNWyI!8<*O_mRp7^5R z2b39X$cmLcRdQZ^cwPT!geg0mdt`9}2)Ti$`}rCs=R)@;-XMHg>k0wsB?5~3c5IjFs2)=N(eof1qD%mO{_uC2Ex z6d~d_wn6EMc0g~dE3r=_**)n6mG2~uS(ms}HZZzjZg@VQ1kT$`kl)xn(FWTMGLwol zs^_i-K{-Lfy8AS=Qjr$9Nd|rsz{;#=0Qv$Cg?m{o-Qp)MRcy+!?)ZZ^$ls=t* z{}CVbgMqZ$tgZi598GIgG1lEgaE?|VWtCX{HtNdl~k)@Ot7^tcIJTY7?PJp*U1F}ib!x5VZ zC+aInX_c_kW4x5nF+E^hN>fSOE?=ymwO6BwlYRwb@xChEI5x-7D=ZkXm%u2MA_@ig$1&<-)JpGw0us!Pt4 zUDgZ%A`j(`Gj_z->l*rQW=?fn$4G6;xRO%*0?J~dj$jyS^PVMnCA&u%y8TCHj}md-q{aD$_1C}_{>uD#0P(bp?enwc^0#n|(iMQA)Gaw^Pfuss|Grm4x3X3g#W>C^` zRs~U%^dtT=JxwGhDBG|?`NOY)sXX>n$(};0lVWkf&py017w}eVVf()-`Tsss@FF97 z^T$%M7=orpRCJ>o=5uS4-L%6fJVt)JLBgh5H}ScI`xkNnQD{dXK4F}n_!>{qSoepF zGx|toTzg&(-vvviQ3y;=tsshV)CY)CYFWK<^4*M+sM!VgFCr5*gskOB=B(*?Ou5J@ z?*g>hg5&x1k5%_cBH_?`3mUWPGx;t^CtL>HhS2W(!E*kW%uk_Dzz*i=Lc61$Y+%vp z>c$=Q)vk~GWZWD1D*H<`6u`G*kHwDFz?8jD>qiqV282Fup*ZI!DvszXcCj1Zqb(bH z;JH$Vp>-tnawpSUNe``HHwxo%(llrvuh>FbicON;fZG6xYiPTVA5gLwcNKec0g!zh zBP1oq%K6*w-N-J8u8anZ8Cn1UF|3;C#DNvD87hJASX?VxabT+mG;@3qXHZ$V1~GdrxDjDz0E#Qc3Tv!}yr)uJ-yBlOiH+HFgNL|I-%6z4 zXcs36-!HOvIb-@+uW$O9w_ZuuD!im-`QCka9@2`q>Kw>86A1YW>LrDS%=#bY%#{`% z^`U{l3~1xl8{x`pi!?jAQcRELxCgpUguT;p@%O*slI+jM4FJwcvrYYre(`eSrayLoH={cO zf3Yf$6TkMz#4Ze^5`X+go8c}Hw#XG-WBRc}f$e>79OuvrLoJec(yZ6e)sXbi;o&Vo zY^4%aP-rBP!9^OD4(a~L_}%AP;C{9^8wC`=8}K5CiXqb;&fxRZTK;$8xzWdXUAgu| z!!snL;K~+I@RGU0hAFWEY|`#~nSrVZ?5<`1o&-+4c*{FYe(MAWH-D_ao5FvXjQou} zP%Oy%z2Jdb(tRT^dzsy=sUxXzih*GJy{%| zpx*e2@~zEdwdkCI5M*Y{U}(D0Mk+~Es+e13E$r_#E=iBsoa zKu574m(l>9Io!o;+G)^XXoC)-McBjN3s%h0;tbW+trFZ5;C7(w_p5bhS=GTOHSRY3 zfbwcekW7Wvl!>jObwu@}`W+`VrA!tdK;oJ*c+$woT8wB zY~nkXC(x~mtVKfd76n(3#B?cHvE!Y|4%(#v(u>7eS^l5$MYXRFdd829T^*Y2ZS%B+mexwE&xk z=*>pEFeLo|cC0&3PIhMi85KwImUOC$Od5k^&C1-SUvn{zDX{*ri&nHz`r$Cf66)D!WIKiL$P9;36FqhZ z_mAVBm!gH-RIjID@&JX3H506=M%n3};5U|m&bg5BGk(+4p-TzLMW~9#a8w;xz(%rF z6-5Sct6x9I zzJYtUfU*B_r8m2JOowLnWd7Mqh?0kNk`4zo_NEo^l`obMG}P1+#Z_d#g^0Wt>N1#n8%fxW9hn)c3Zz@WzYN|w_4`n z%trje(Sxdug$wSe-!NRZ1<4cA1^T{_dQ~*yw%ohoS^cKKkC8Er)_(dgCTEE39H0m# z*nwO#D5dzluDD9TK8P*;JB*ueTmYxox@7yi#Q4Me^w12?XwoRbaIoTbmra}dw8d-T z%cbw?zLHMdM$f6>3S-6zaeLSQLl&r+9=YT1}0(oegUl&G1Hu+EvPTzNXp{qym0Od z=LM?*)sFlL@UZm{_aJufx%PQFSO(lVEwAA)Z5bWNM1yJ_Opz z-7@TN{}=HZpCoagx@PlY{5yB8tB(+ztLvXDBaccNF=6Ay1Fx06D94mNgMCb>{LP@; z+&~XzKJ6iYJB}3Nld|A%zyvHEl@_TT8l4pLqrG6~YhC?ls_@%7IGNsa<6iFdfg zmm}cGT4Ju4cQntx#QJg2Gqpo8Bi%~AXAlzSNCp&!4qyEI#6&68vNAu*yme(0(CVY( zrnNXG$ztWgpOMQ@d0ZG|gd9d$teFqFt;MlwOQ+y@2QC^tlPj7NOBnt8j7haGq2fHv z91(IBW7E2&N66B8*zotiD**UAW2YYXu~Ph(yMe1q4TKGm?Ks_^hRKf=rw+MzCATRWI@nG#Z<@cS zIre!v!?DUJXk0pnMyb3nA^kw{!hoy-u!YkxR%o}3=Z^D2f0MSDSp!B^?XDi8Js+(r zDc6$Uyh)`^3Cq;H4+_awBjrw;O|)7VZf@bDQFeI7RU#=vfg!e@-;d}pM#|Y z1^VsDxe-ZnO)eH-*fQ_|+tac*7opyJE$#?1<{F{J)YiCA$+Z)j?Rm>D8u|B0pD(u$ z3Qtwhv(2XQ5+AYNH2+Gj7z4il;P-&WeBlkL<~cJG45AQ{;ur|S5dzNM<4#}OFi2FQ z{= zJNK3SMC-Ks5|$?kxw>iySm|3x}Jl zbrm7dGvXh&8;lwAbPVS^lhr)Z!VqJcG@PK(v9{SK(Hp(q`CBlAnZ9dNi^p4Q?^pbIvi7)GgR@@p@P0A< z117TY^+(cTH%6zWRz&@-wNe@uypk{jWPXQs%<#M1+8SK2(v6qbtH0%iH&BtatbP@v zn)!;20>m8_-S@74Kllna-?R{24sCw?TJ$|n6Is#Unu6TN?FJ5LI z_ib07J-w22nsHEu@(8mV=M~(+>EAA>&h^<(Bk9)JP`dX97nI!LL0Qt7$E?2+L=z$~ z^9p-er{Q4k>k3Hz#KPY6rT<{D9 zPv@f4J*yeeB z^r`cU%#dNJtPkFiLQx1wJ-E3nj-aOmmbIX?7xN38i2XW$xHhpdBnF)*gk2t8Y~s6V z=3eNCh$>IwY)m4zUx-pA(LuBm+0VmQ*T*Z3ou8C%9{5g0d1K&Msi1@|3)z9>%=v2A z`aK*jOgh78B++X9MPYC+l0GhoT{Ecak1$f^D#;6Ixip*q{%-1 zGCE$~px|wf_{KrlUqXMDfy$pSeB3fR9_dZG6HY&c@MTc(BK-}T=7ZsgMrEkl$Ze~) zK;&qu+0Kcyrj5IX;$+{q>Z{pST~Ma0y=f;A|2`LHXL6gS%?uW{YU{$G>SlnR`021b zKa3oC!nr=iTBD#o>u>ex8xrB{L&hLc;+bW9wQu-^fnEN3W>rEJD^@5lMkCPkvGR{Y zrCE|kclFV!FUtv8q#1@G*YV}IFX>i*0^lM!KuFw76yhAOfThpHQImEMQbc_s2V zW7DCUdO*?Vl!%uj3wrX5ElPfa@ww5#SL3cCDmy-^M5DpRQcmSe~}Q&z%pbeY0Fit}h44L&4r zis;f17}L%3)FtxW;IB|GkQTa9fM+i#SFxED)`}7%PW9z}6Y(N`^^Ea+`m7ijE68j@4RWbvzU@!A z8|e2$srjfY5ZRE43F~OBXEe*qF0nRHTLYXB^=r8^CLa`98Pbt+{$0Yms$LRg}!#X?Mra0chZ z1?5_J7VvHcaOMK3qbBGVSW^24s=RbjI#se4C(40{7i7FlXKgSaCALXfBXMEfPS~X{ z2n4~#0@X)&;iE1rUsSVpWrdT4(-X(mJ%-=8AgDx)Unn!AjPL}!v03$}dwy9=N#>C$ zBtsq)k4IC`+*h4RQ7!X%3%$*>4(h=Cz-IcdLlM{W-BCIpZ{gNWEI`vo)Zqi4{iwkr zgtkTCL5Gqv)1I`grQdafW&E(S0SMRetUan2?Cp@TsgCNvPV95!5&iQG|ElAt7R_F0fOLqWiobD}E4K6j7m&IeW;xC9jHYa&$yJV8TAXq2m4VEyWQv#cG@uKq zia?vfiuUdwGZM5l!D<3RtAe+>i=kwc42!=~cP8Kl(x}Oh!hGptUPgJoxE~u`ULs{_ zD{Z3GsiC4IC?wN0KtZ(Y6orUr;Q>=w0a)CjLJJU0A`s4?C@AL6=yG_@$K63bmD&>J z8X2S7^(meUpBI+@H_uX@3iR%bb1V*)!e@lINcbmYrcaiDo445!PD)ZFYDN_T>IcCT znWo^aGsKSL6-%KRR^lji+eEVwj*kcxg-Q&!No62?{Wj2g-I}s*jc)-F!M?$H|I}LE z4J>y{GYuLsKx#wo0&eeUYN^>AWuNt)<(@Yz@z)*#8Dq4teG%karSL5`l8p6QIh)u?B(dcahvL zm&drv#>G$CASu#VD1dRT%kTPPzdiG&=^ZBxtbD$sUcip zxFumzagkl&S4$LN#pgeXB9nh!p4yD%6=H#@KW5|1lgm=rt&wj;IsHY5V@WJD^BS0} zzl6>s=`}vJ|FjbzE-kpCruamsOUNmX80C%h@&MbjQK_i3FBA1q+JQq#eC*f}w-E>K zs3w=HoqQ6uu;(fA?UlM(*X$#j3;XdY+Hy_*;YVgMV13VX--K8C-}?DWWzsr?XP8^r+T$5gEL0V9BlKADTgflR>m>PEKtzqQ$Om8x+7u>X11W* znEZ9|_N?va{SFM=Y<@KatwC=<7x&8Jy4Gd#g#m>zR)wwY+5^Ha@VCw)*f?}1l6y)% zh=sNhOhl}@YjkDF#HL~nn+pMgzWvc~=|+^hwFWh*F=@~DhNtM5U5!bE^<&=9CShUV zxf8f_LVcei>dNm*-A2x-tebZ66hLecob1MQx0&yOGayC2$mFc!!2g!8Z1d!g^bzBJ z7RpK(w2oPoNCmirzwD9S0hvR56F8g}Z^KZ2wqI4$&zXmK{;mdLbbAjvcYL4om}lLG z^C+x8hUl1kaQ0r4l#HGFmx1hD(S!SVqzKF7v3=;DJ54jUK5x-Oqu1IiJ2DsmDmAjKft3H9AYh?MnXG!jds z7?QndO6}vYN~cr9$?z|$-CHE1}BR0u~!OJz0Jbomf6c0 zuEG6E)|g8VYd6YDTjQ2$riCO7p0Bmq4@=*s&NCBzak7-oJ_8oxx}y^C`$S+wRcYNq zkX2~oN*yY}r>lLw-Mc~2O`v*7m^ftug32p-n zlBMYXj$0HA^*Z{ILeA8Tmyb@WfN9X*4cI*@lQ!mfrPBe}w8;+^nb?auqx~t@2WD;j zNmx(77OUdlMzS_gw*RQ=)OzkKMz&|+u5P$8X0J(%zWYAF_K61)#(%NwHB z^Pdk>8v|gr2G~|P&w!OqPJn;-E;fzMlJ2lT_B|GrYI~U(p^epo2zYXwBeN*D&Dd6+ zXEv$eu(Y>I+c$wV9h(N*{WO1Q{U*R_d&GdHSN;x}QH@`eNjm5(KJT80Wq#w~ugXYs z5_CuH^t@*)GASs6f2)5lZ>Nb)ueyGy^hTL-MtRY+&d)1La90w;Gdfwj04#9}n-(Kw%QXJc{Elf)>8LF_5MN6`9)Tu|V zOy+yK9dAO{Q@g1Bw zVbr9+CQcu9vYJVIFP3S|g86ffv7!|cQyW3L&YAhhz2aR)?g4u{w3qNJ6GhAmpGy1+ zVj3el;K8{Czq#H8TQl=**(iMIcdGwk*x68lw@Aey9`25~?_vWnY0s|*2>G@4)#-(8 zu0uWhp!nX5O8ov4#gF5cTWklS3vP`#vz1U-9>sy_+h%Gj|9m58Qc`x6`0$T}RQ61g zQfi?A#XWoNZ1mHS3T2$XvL-%KICt$kU zt({Cb0TqeY8CoOD(=ET*gbK8a$1tf4s59da+xb#n-_r@_(jEL#mAgG!(R zMt-wv9 zmydDvH_J@z#2bdLWP=^BVKl4q0B#-~BiuYXkIQ&XC)PbUaz8z#Uqi>Z-cYuZB}y%o zcUJxzmG7J!i7M_rrTT?=*C^`FDkd{Lg5=c>@~rwViMx340une68QYuPmC}{YeCHGn zC*a$YFegHEhMY%J29Vtdv#geqoj&|%$(i^|N7&g^D zbvjUDez*+?gSgZb(lI=AK-zuIrLjwNKOrZAvNu&|ng=AZ!V_vpg@ki4bnS$y9kfzV z+MGe8bfIUY3Bm()35z=vvlwO#ZU5m0qgtX!&$hfXjwzdU<@XuOy%|pCTQ7*K*Xm(& z^)hJ7M+c&DH>hwzZ-24+D76mSURUO96O#6EjU#LU0oZ(RIOM=@dV@o68*J4jFM=N2 zh^4Sl+hps>FQ$&aeggBi?^%238-BXDx@@d#4NsMbt3Wj}@@E~0AmoiPHvZZj<^F$TWy3)qGVJ$#VDE=`@)uh_o zG2AcWKU=B|T_N<6oz)ECjvKA(p6c%hC1Q2_S?)hbV+(zuW5gn#%%=gq{zZhb7%qJF zv%K7THO#fECh&nUptVYD&$9AE_>@!=+abDKaq;qJf#?Z2l!ZNi9BrF0wmm`k6*gkP zT&X_Jr?5`yO|4KEAY8Z=MT_<6ARUb zgn}tdw0J_K?+q7T8!KsQ`gf07ex)Wd+dV3-;JAI zik?8YslWiYPWEcySYZslMl7eJe9`A%ieYMNhU=+2;oJO1+7p6F{eA4SZrHQV`|!PM z{Bz;`sh20rC};a-z{KmH6q_sDcW|pA^x% zxe{PQZk1AXlL?B6B2cw{B zx_9}(>w_m-)whMtqurDc(JrD5EdkPOUh z_{-bAQ4x)N^GEWi;o;p(xZ85E$!1w~6?WTbs=yFMF^O4IL)tkvQoHGANCBA8D;|v- z)9v3UD<5t<_6D5+Q2T|8kNFW37pOT&E4TisE9)oaQ=*_2ez8Ksh8Sa=DW4Dhu<<%iq?Nn~)*ywD-hD7jEi`Z1?}y`TK*JT;i`uUJ6-1tbx;An%t_i)9bv+v~iwQ6OVwbke0$ac7Kk zQ$%nyV`^Mji|Vmv0GctqngYr19M*J^SuE6&Hnbc}JIDHMx&K;ZyRZKbGfUh{!27-s z-hMZVuO<^3_QNb$EG}BIR2p7*@5ejcxINV&CT%7Th-bj&BJ}P^80`{2OrHV-kIga7 za)}a1x{O5?BPi}`9Z~+h*(Z3qsWi@Ebg+L!bYOjFju+iR?m?y_X>sQYZH^%?Fg$q~G7{Ve>j#fQDUNU!Laa1Ng~mHd0&iMr5KJLxaq*I#tJO zbC@QCJ9yicz$i_)Oa;2140<0@2Smuv_+{8nVFZ|NcX!r2XNb<3MKp%G`1ht7X~L%) zywXg77bh6C>{`*QlU7QR)lS48Lv(VQ_=;9W&m z!_I^j991VBs!7camU42QRg-8cL{v<^g3lF#NbngoD+Y!RfTyRb=+#)QoL7SbWAXEO zKWCJ*(W=4z^#t}a=oje>OZ(W`AqF;BY9DnW%8L;U0@#$su087OL3_a~h5zh+Na3Pb zu<@7AeC}!5!+~|h(_6-y0vRgGWrQsRl=$t21HpTC(|=N2lz+sWwe@mz+E>-ck9_PQ zg3bld(Dn>68S-$Kb#g<9`G*4_+J;op{)Q+}cZsCpp;00vLQ$C_<^qPPYhroAG$6Ry zmB2}YtQ}Dk z|F_8#QkIq>0T{5WaPtm)sbVS!m(o5^0@cm&3C?g-!HLAsfsu$&yZ9b{-yxH@Z`#Nf)qG5i$t!^CUz_ASCF(P$8|r)R-8sX9H(o!!^w8~0S%zdH zib4@Hl-6FPS~Tj00ki*@haCmF!9XV>Q);Oxv;!?*nBiIbsV0PY!RQ8k&CC!qC zMoBqzcKij}19>aDJ-Phz_mEg(C=W%|%|=LCcvEsKv;$MVj^flk7&tU5keBe+#B8Vo zOiJRjvmX&{o(MS%SYbvpbYWBok8JPgOd7&$^mO-Z zjX4ujCPm<4T)`~y_(jzoc5pD8wI=zlHt&w3v9-WgH)y{?NpNv#JJ>pa=&U$ti&@!Ib9rW8pG_eIk zO-F?|MWxy$RgrB;_ViC-sX);g%Yl8$rtVU<6@vuAkMmu>og7{N;c_b^9l@ z%}eQOx0r1xH7?ZskhV6gX#1^TsBQEAgM#lSuxohnCW_E~`2rdOtz|wp3mG@+xI-rT z{Qpv?**{EofPu-^iZH&PW;ROBcO0Rh6(svx#c)BMCt*y-bZR)N0HN(t|p z10XbcK|fiq?TwRza}3*M$RP~;(fW9!$#jX|P3PIPZg zv9p2{O$jEBE__uFgv)`#nN@4_4KZCA9?Z2E{AP?P&L;tLG5OKvh_|%5`ahUaZv<)` zOd`0~4RKg|!ndVnjsY~+h23(3r`OPL=`FJ;pxVqM*h+2y6X#6%2=q{4A_Tyl`Qe8y zPAL@~J=dq8dUvIs0>{^POhMcxSHr)@#@_soS_~zA|2|+aPpqTb;n)Ns*`p$dN}ldq z5;WK=S3pHa{e_U5Z#>roSh3{sMvz-K?X^-ez}i8l{G?`Qdr)oXF(DV4v*i@Ml+tr4 zn|@`$^Dz88OoTm+9!+Ew(FOh1YHx6b7IdB?5GA*XoK zSoMI|QAb56od!y0hn(6`O4YIP@2)24{it0-Jm!OAJlA3EE%g_Ut40eeFO?^f`+V&6{K*IRX7cTOI|)u`1{| zP&^Ypm0eSH+ze;zYDRRAezi@yTBbEwyc^ouWRQ3e@hv4Qo0ryu60B>@uNkAqzTIhC z)NXOI;ns~GuJ!SpqAJ7$gOd&>1`pyB;wp`3ssM#W(kpx7RVdql#+>H~~;p+)XR197rl`)yI8Jfun zW<<<A*>dROLmA&JuRplD$mC44yxdy?OMB?;He zJ^btU%6k_r^-VRT62Tws9QYD$bmpBpm+9Ur<*@U7q6?|RTbWiPrpkOkL0A}itXn}B z1dW~x{gVa>mSS{DdjIEGRkG7HN^$0i18f7{2{PybdbF_{97H$gZaJPgH3CiBHtv? zAUa6E8q*BYKJ%+Ckl_Z(ppWrFwGNZI8ar5e+{5&3L@QxVW7hKgKv>Z3m`GN51+-ix zX6?UE-7sO3o@X9YTs(kd8!^nSE3q%n|cg<%!%J`)G|J;w{6aZQLeY zqGkL;UCuPY@hSx1mjD72P2jYmAx`X$0h9VdxQu5cU$ad3s73()KLEfhwORI!tGqcd zDc4Nu>i`~c^k4C6K6VIcwt!G0v%-H2$m*L6IeGY?vbvL*Q$a>2FD9rc4rAw_#7H-y z3V<3_z1f{--zh8v>EB!{H~(LUno9P!Pl5t+Sv()BsxJBMPo(<63mq-Q9&~YOfQ6y8`9Eb0^ZmdYZFwqjDyh3OxWB;hiFy>2>WPhS^v)_F>g6_+gmF zXZGJEcVe#6xj&eTpXSg=IAf~?4W$|^`NQaBf-Tqk_|D~KiHBh5f1JlToIG%@WuvK8 zG+7IE2T9;MH!*4CcNfKuKiv;P6gFB?5dRR|J5c66gf=$Ek2X%M#Gk{*T^TgyX}DFJ zFFB$DZQo|4*Nw@sw?N~TDyVL}>si$_Z@hkXAPxKLp{7+^xX50mC;{IdchK`lM8?~G z)|&vw)RhqE7O_eENii7aNLG|n&(x@1L|7v()Hg*LMc-|>d~GfA!2j0M4l5kRdVHJ`fR9w>POMq%&3x8TQ)$GD)yZ2*#3O=tZ`_b*k#EE-E;F)Q7wQ3U! zMhDE~$kUz9J=Afb>yhebb!PnM{Htli`r?6<|31YgT|cFjk#LEZD&=hp`)t#J22#_t z{#hEg$w{&IYLC8d(1c5SJIBU@u$3q?`|fn39gv{jCjMfZE96UB|01i9eYpt_WDsTp zuE+`9IJoFhtt_&9&1~9b{2DOF2{gCJa8<%AWkNdu1P)_-daT~x)}>BXzcemP4*<`m zmk92+c-+#}Liv-7XicritS z4wMlegm0kO5PV;+0^uPV3J_n}xQ;(o&&ujzw2ue^A8a)Z6s<{1Ci6QT5^4kpOuk&5 zTtlS>e0twV%;&kQ$8{zeJSSAGoj`=5&ygf;Vw z>}r$$!FH;}7X%Hh0Eub-``}Da^cd^`P#HP_Grbr;2gG@j2blVLC+RIDJQCVdNtTTn zauzj5V}T!_$9gcARGhA^fU`umk}P6FIZV=Y-2mw61^z%9Fz%^|p`Vzl zJ78TF+1BB)Dfwq(yQw&ld-Tw~609|@nZU0HF-D8m8vy4in8f*w^gU}p)4twmxTqo5c%TGzu3>v-u5#xF+2Zn92LFA7xi>jTQH46qsEdty^cL9c0Q2 zG1Z$0@D#YCPDJ3iA3h81#sr7%Ou{XBa)*9(o%JGeY{yh)98A0B9a+c`-wWVg#WqRZ zVZ6mlU(Rj{9NP`2rXppPj}QS4cf-hlbC`iONhC}V->8S+ky!H=w`6SjDjU14ghCRF zL~B1&Mw4(7D$+>&U8gRV=)neE|2o8%3QU^AbOY}KFZHo{Z}{7Cm)n3DvAvDK@5czn z>Rq}{H3KK==8Jl<#2YI5tS2XYM-)L3e86+xK{R5Ce2mp-(Hg+&I9(p$lOq!&f_`)+ zQ)%9y>)t{%=ZG!<0{U5n&b5NA;(Zy)Bx9f{g zYC2lRw0V_cnBHO(Xclo$_K5}s@n!U^#OO@S4g-jF*i3T>AcFT3>%rKJUPMVlrc0MH{gSjb~#7U05?6)-i^{6;otCT z^!BW^U7V15y6bE%Brk8|a5RPfb!jchMNt5R;HUL z_!zc+6!U(bRa}_vK7eqpL-OZFGewFjiBnL(XUKhtcw)i~n9%h(s!QpB*+}ZB-MQ!U zgDBV4+0w6(3bd+5U_aWa^d*|LD6*GQJWZ$};hHMKDGKET-;#33|G)iM)~3dZ5U7{lZN_?yjofo`K#5zylfPa$;~Mf_DC2rb zyg^8k#!HA+|B|D$fLy!pJ~TvsFwc$0+&9ck3)3={fpS}?KV{K%@mws<%MmS~`$~51 zw&Mz8q;Uq%6~*uSq*CN4=vNLLgAd+6R47uNmTQ$Ml1X**)Y{gtwEU+tKw^JQE=(E>N~ z@O&8AHUHR^6(_b!S3E%(Rlyjk#!z|8g9X-%Q-mtI1^nbmOe zK$k4j%V0Hf^TYVgGv*JJgZxIvu4Xhoemgvg(IwP21s`amoH7pOSnhS4Lvb zJ7xXpte!*k3Rvx^&f&TRS2x!a$9GZUTJ+y9z_7YzDWD^cKlQ#HSuC}zCbc~YCl9gM zuce_Mwnqy1@oN6PtDnR-Ipjbz+t6gHVCf8{_78EQ95>ocxTCJQ;74UNKm7&RYxc8Y zLe_g&rG8Zi|ChAmm~EVj_L2S8OYjH*+CASj#}PPGYU87TjrA?hPLal6cSc?t(>G%q ztgAk%Ql!E0CrpsnAWX3-S4m@66ew7UcJ*IoN~xnPF?;LiIVHOxCVx6x^eWyopeoMq zJuV=+gES8hrLrw(`j2bN=b21&1h=j;Ca2ks9v)hDkaX|p?oNj z;Tm}{>HSN-0GuN%8B%e_WuywQuHW! ze)hd=&(eQ_T>3Ehx@s4cb&*KZrJ=aZN1NkEy-n(^i~*8@Hiz-bukKM(NfelylC;=_ zaZ9t37?2V$WVm~5_#9Z@y8gchaFKZCLwQZ%Qs<<7oVM&}nVGqH9k*;IrB7s`rjNZv zQj4qn)d{CBJ6^7!yjC#?@;%H7D>Qyo1_`PeQU}Ykh_6#?ma0 z6f&;Hwf#m&qpRI4y2i>7L3Rys78(D|tPX{<-}6fQ`YxORxel~oNX;a*CO=FpzIlXi zfNVAkOucm8xMMNY4wdRdZGE;u2V^({W6&A}Yy<-)1r!(b%i-wz9dy`AHNG|84t4_J zX{j>b$Yaeu7IRaa9gV!dcrooed)C)lt0AIIhQGR-*^q2(+^dFwh>NsFULxarJAaEv zYFQj(BcZMPD|uJvUbm;y^2E8F6)8Sg*jTwfz!@D#ZlNA)xPmdYxY&z5ttKRtFxP5e z2=(ZAosU&yXbFqR+y{kj&_DyXGQFoPgZHkgyx5BKexi?u4fU8bbDQ)@bzWsG{N^}u zrAvU73yS;hiBozVYxKM86F8TeM+$8M9AeS}JopQ6X&h}Zf zU7Ed%c7^SRsWh)pBD&KoV?;?^9ypHW?lweBZ1eSfHG&e3>Z-Y=e+j`6^Q}y?ztZ>y z^9c`V$SrT=d_&rU0`6}MasC~GvoYx)cT z9$WeST>!nwpd?F?Qm8K%VXBQ;}YCY&3?CY;EV2fg~DfV9Zw%r8Xip62pq?e@4oimXWPvFhcrqC1( zN2W|Hh2#Igh;6kZ&l}(%a>GN)f@TOR3E*C7=iVCR@ za+DIOHsqg5Y_my(?COJ@)guBb9{lQFpo+NOf09zzgmFkDj3+Mk!k7JsR| zF3rW-U9H?{AX(Ca|ECUUbJJD)=~6lRL9?*-rGpfvK%2t-{6bP=67Zz4A@KE+v+u3e zKlJm`FLzmHl+`=*>OEm3g1!7w#P&T|x4{F-f>a zwzUT@h5MPvRmurI-Id{yJ>|qKM#36lTe`lN~Boc?*Egh1m zyWH>nxB)nsf8>Au!M7v5gLoiv1V{p5p+R{_SaK3+2p0a22T6Z}8U~APjFBgq5pK2) zQ=pY*h0e9I1Jb5sZeI)pc4q_iR$!OHJkt5M_cJTBDj5u%`tkw5GJDTA$0O-b3m5bG z(@_d1M5cI*h@}55p5Lo;K1;?)w0;~r7iOVd=jzmn4tePGK-bH}!njpyww&^1<~tFS z>O5bsp7V(*92|frm>d})v){rXgV((}kEOI`WoVBXCt~69z2Uzc^!rX;!6NYC0Tr*rqB1IG?17DimufO) zO$9f~?SbVX8^K0udX$kpZ)8eqmqsL$bb`79-Wj@D>^PDjFG;-qEM!z9L~|O+*_!Bf z=qkJOiQ~&182i32!Vm2YvGNw%7Tr8m7Rbt1gI zbqo*|I4EkKjuvr!B)s;t%rpKA8Zw4UUOVoYMr+H-6G5Oo;6zjT0dLS$14*RRT-Tv$ zcf{Ea5#rh7a9r0JVvdJw$E-Wsv>02uw_?Z7ajwkXcrwxksi~P;j$n_~69dRZL+PZ~C_@~;G$pwQr z(e(7nR!5)gfo-N6E*&Xwb=U;jJh7CX4%0Xx?Y!;k$Du65I6>zx{QV~F_%S5~nJ~FW z(ohtY(2FqRQU{$Ie@;Om=)2SFXwME2b9Koh)k|>(n+^IakckDeUp7~Hg(IE0>I!fB zr1Vtc)VjTPy@@RCr3L3`tYF_hO7TG`QcNZjx06I@3NefNlKjl*mAW&6#~6Ni7xa`U z8h`|g)G2Zv8(f$>;lnm9s!%YmEJk80!s@rVq?Fx^GjKJaZpPe8bF=>e%E$DPzl z?m)XB0KZ!855Rmx_3ne#{|kx=zuT;qp!x)gfei0pGgg~>$mpco%t6sV@gy9*X$+62 zveJ;qJj=%tQH>E(o_N12n$;M~GQ&~m+<+A&lntZ<@Vb8Oy&c&yl8c2vk2SjPW{>vl z4^T$%)C6Xna4-=a)B$G0;tT!^Zp9^|fJQ{8+1W$gu8LRb!Rm`!jb;}MLYDKUg)-P# z(`iq!DfN0rd~`A*rj@#3Pa)4wjjmX`AEkANeZ4aH^D{FgaUp@FN9e}|`qJ0d93mr^`Q0$AP#}UJ_Nm(~I26oyk zpf;Yh3LJVx#j9n;@!Es9S-H|Z_yZfN3c?hrnyk)lVZfEo4^Xj`ul6%mS~Wu>-T}%O z%Ib-SLOkoGLq#??h#!g z7v?(_VO&;{hvY0trOiA2m4VF0MFl4Wxk$0|@Z>1zIK<(%6f_GojQ1L3g?TKbPkBBwgzG3e9-h99e)0;2Y4i$z6yAs;Y@7{L{NH3 zAuNV{EdAdd50h)xEecc{l4BaehsZ&AvBoFkweT`wnLbkY@-?I2ovEFA77i=J&C!ls zLtcO#DjWVAey8=G{6Pugu`&IQWlwFP>Qs+3P;R-LS93E9AKpak@FhRhw01%VrNT}# z?bS|GErN79nJdM;8Guwkej1H2ChD#usYdbb%k-9BAqrd1i!aXuPa~D#bZWM2(HwmS))VSd+_S}@3K+ruz=C#Z?2^I z%h1VhL)3YLUjo5X=lwOZm7Smfy0r}90y3FhveD(x>6%QF0GRbkw8I&}o=4i@^$O-ZD?ar~4bXLD`XH^kB^tucSSF2d~qG(lH*MM^LP+Od?2p_(`qp z#f!q}8+9Z(kNKJIvbR{4-d0oWooKSDvyNzRKT@VANrH0qLX1{nTnkhc5~hTt4;ot6 ze(wT+@L9CU>aMU^&(H`u(M0k3pV8qevr=fk%g88brwR=P47CQ#2WUp$^XI!cijttn z4U|3#{iTyitRGhz1G5?t^}?5DOTX~71DOQl1Uv%w*jvQ7fkE7nCr=|TQ^5dFRKUoG zNWmFyK=YsyG?_A{!w0Kgy3=*rQd1b4ySxH+d78T3Jd9BD1?2g_FOQh~6N_EK4%NL+ zO)X{^1(bi6(8O)eikG@tMv1R%u%YIeNy=W5)R2lha2ELUf0nuXmv8Ue~gqgdW*|tpAd~N6ILsqM6<$xo*=Kgw= zKB+U_!57gB8LQSupC+2hu#+UCACn$!cb8apTbbi_u!H&gW|Fl+L&J!J>E_4^n6;tY zT8pIc^B~5>_fSbmon(V!B-eK$xNlm7*7O(Wt;p{oz?5~B$8-l z7ao-q^Uk%_??dVT2THJ;YuxEncKsg&3FeVkrRQ)n^me}<;q71>NoM%f_fP=ab5Oif zuuaH}94EkC#qq%6>E<6$!X~bw>8H!_loVQPh<*D3qg-dCz5xvg9v`edy*ANL9WhA` zeakB#gk?cWI{XoY)(!lBk3?eA@9pURsh)em9@>gQj5ArXa^{n%O_eXqAu=1_OJs2!sg30{ zjzXWaMPU*6#0@k>_Q=FgM_InNjsGXxHtkU|&eC;;mK)Q2THyh%EYkK-?V^Y^df?%S z{*S_JSnK`q1X}4*Q9ppoG^)RkX1JH7)AV{xzx$?VK-xg z92d14GOZ31{%t-q>1Pn{sU6QM=}YsGSirD%8t}NqI5YeHksQG73-F*;Ni&1gbnu@s z!|orHM>M0en6r!U-PAXO6|c+QO8=TIYJA=9FYJEqeVfkXYOKg(RE&YbXl!+St^+aC zMi$>94k*!N=>H>eXSW3;sg>4>HRa%kyw>q4Jcyl0qG#``@DcXD&HY_38itteS@Rnz zbJjDue8f~%js|CcyM9?$x-hsLSlFa#ea95v{<)M02=|0u5fp(NR#dv*KO@xiis*Pe zDLeo1j`O`+#PE7w-7+-Y#Hcp`otOsiUx4x2I*NV`zm}=4)E6;i2#G{tG$7-sv*D_& z8Jscqg*0)5^xnC#cfI8aWtOOyjQo9P%*xbLJLlE8N zZDonIb97;o&s_?2Jwp%mJV@3Oyn1+86xT6g8CO&ZMn+W|=@xG-j$iOQtE^-Z?yHOT zwBM2b*uVb8)@Txk6Ke7HW9Lsv*B0_uJWoQd#h_R!M*<(L8bRs?nD9cFH~mIwZSJ7^ zQjtK6jBoWzzwq(IV-6R#M=4X+3sK-vv@JMx7M2Dc`?|j8mem1ExlTD6bjF}0$A}As zCqdne#sgN8N--Z)xfs>g1)IuD*gWMQjb9JMkd{)mj&3WH z2i&Ahjtl&oF4Gd2t1HBaLD-e4DQjGiYDB;Z)a8^W0X;@ z9&AIex zWxD08>MMQQ(Vgnri6Sw?kmh2?@8zi6Bf~P>iWI7~d7R0!ml(``)Yh9#6EkADR9+Y?U!>b>QKUak5{EEXb&?1Q zYS@=o#tq=8!hRU*y3CGy*@?B!Y_A*SP_CPuAp5^$i#l5_aRi~Mkp5WjW;6J}CR|t3 z*)CpNh?oS~6pLNs2Y=jNYn&8>a<+hwA%zE^w-=iwgDo9@won6=VGS0;IB~Ex4(@mw z>J@n;TllnSJQ97DgA6PLt`Qju2V*l1DnG%4B#LP?yw?DFmab7GOMqrJMl5bkB+ez8 zl;__~Wmb&FV>&4&3LOIZuZsm>c^}bEGIQRFv*Tnyx96HQNhgHyIHC~OG)FLX$^!@c z8er)#G4dH*pa~nalj=%B56eAC)xST3H{YA>{U<2Y;5u_#oj|V}m_Q=`1G!1mFT`~X zj!1!X$|7L~h8O=HQ1Z!9dz*RB`lL5|NPxK9lz$I{Sg>RkEVB$kmJ|e^yv|CUljN3oUe>lOgyCBV1h9;M zStLAlwd6|)FR3iDjJO#X62}a{L)R-=?=^B+=J$Eo%+Hu19~JWe#$G&M6$^AxNSj*P zQ9!w?j^OauN^ zP*51Nt_zb}X9$Ybj+AB5?SXd(39~LA_r}mZtu5RIHy*Q`Z;7_E;&0#=9r((G$ea^O zSYX6st=I8+IiMt!*9%N=A7C#2n?vad@y3IXCtmpTD`*9F?vd;;f~GD4xyT|G0UdG6 zEA$RgY|lDO>8;UN@6SH>T{`G_t;NzL$-RC(ZK@qtcR#rI=$Cc|FG(z)eTr*xJaI7> z5kscpZZB5!ALT8odXo-gTyyn?TcgGV1h*DjJ-R%>ENzT)Y$bhdangAviI!kE{G|)# zo@6-)Ci&xCbx!1#&3Hm2U zFy#}OPw|mB+AI#%G%^`zQh@%BTaI+E#rm4^cQg?Cw__yRz@&V%;+hE(MBCKCQ+D2e zu`gHq9qtlq-9Imq^$Z#*@HhUX)BmEru;2xMV}YBgyCbb;4SFrf{I5^AZd8FhfNycf zDFLYKF|Yc=V&dQIdLKF3BJNAiX#rD((zf=D`sVpA!jn3spNi2@B~9F_XJ^@_^vU*+ zyg5dbtgydrS$P~nlvkg^gSV#}E^|~x9J0Gi=sDoV5fQL>HH-a*eB0+?Rb3hdsgoWB zuN71w%f@oD7^5(QJZij=tfu9L?!%pv6C_!R7X_DanVO&t#H~;s~d^FC;~Gw{Sk)W+hssB6Xcx zY_zWBol=VUs_oiSlKY;KrZ27fVk%EUdQYCM%l0B$3 z1$_Nt=q!Z=V7m=uxP07W5hG4M0gnxy1u8`1B6q3DtAlOZ&gSap4DaClfyBII%AVag zi`kMBPRt*?&859YZA5{z+MpLW^(|p>CS1^yrUJBa1#pTupGu1W5h``L2s!y9PJ~h4 z%ny@G;G_VUju!9@RoF#j(c&Xp0(BhOEw`Ua4#rk14$V4-WjR6*M)x|7LCnB~)3;;a zGJtv~LaL9*p#2q??;f33D>=_lZ}Hhjlr*Eh8BcSq%@2S$w4IaCPmR8h=ZKX+lD*Mh z@k5nqc@Vjoq+$7kXx}$yx>@d*@eJtTGj37`frO)HaAkqEQh_Z1o{wI0xv6SAVf{V) zU!&?zeyzIy)TqN25N-{syt~5RI{rG+?sGy))J{U+Raqzmkhj3@E)5-)w+=BneDu^$ zR7wlb8`K8AX;yl*31GO$KG$}kP7m{Ylf8`t$&R_W&;2m3=~?jv*S{D|_Xd@GfD{IO zBGpMc>Sby8(|O9{S{B(C9Z*bKqTpa1_jSo^wuK<8$zi7FGzpkvfFy~n=#fH`Fn42D-Dr~R)PsNj& z?;qWqOx%7*c6$rG9h z!to#7Jr9(v-6{(wi8#E)fVDm9zGbnthOF&~-S9yAt!vGtJ|33sYKP)X-NVQ_)pDXx zi`*%P{_AN=p57EJh0=A|<0WoSQ*1gm!1QgTUqGj43v3mL z=o26fC+!2x?F}fZKjf1;R5mx30YkkSP7AMO^2op^VNQ=Zp4kfsT&#HY_-{QjRQS42 zmSt;>+_EGLM55sxBX z*9HzpkmU-nL=F(WtN0^=yJ^?&nuwM;j{E+rP`)Hq78q+0pb25F9Ku&Q*e37seatDF zK@wc5xH+R8N@$ingvwI~4YHy!XQynLUC zN^cVZ^Qh{vIT&8#sU$Rhr7~*Zz%4^Wf1gOhsp2$M)6kJR^~QEGcOWdoZZqIrz78%B zY$g2~$@w1IN}GI<5ljRdIT<~D8B4$}0J9rw3PSGMLYll?@LyKEj?w&f1?Fb*i?vj< z_Z1+vtVF&J-`aE_xrDghb zd@`k@%Z7l<5-^mz#DA6Ajj(FML8r;O&$uWFy!*o)Qhq9x{&cwEy42EfDzs6`5)sq6 zLVOcclXw4E=8Ex(H9%aA=w_@1FuCtqC?W4R<5?&_c1fnnjNuMr2tX*g+8)0IX0a3l zisJgIeoaz2S1-C`(A=~5-P#gcDbyw`+Bj0F7_m~z>syQKjJg(zeR|H%Bl7+x{C=Tk z4}d?ledUAsQ179%Lmejx+YyI7FY$XJsMIMymHNfb(9A0t+do)zMf30@PX2y29`Lxi zQR2EGuG1K^XSekQq49LVFsrDJXj%5))5y6}zXWg2BeOc|^O( z)qE{DQS5>FC_y>tJxCbbxgu@~a5oK;t^6PzF5uY@$|x$?0WEcagr8@GOhA*8VC@oN zLd=Hf2^Bo~u`tpgy3=8@WJTJKBu8PdE>B4n{Zd$<*|MLaRs6t{^GOGFhA?zML~K@n zUOyWm5W0D`f#6bJmwbBJj7N@}uzh`VoXRCQUb_gKEiZPx2Xe5=JT5JYZ=n{x+@d%< zFx*@@UmDay(xXK|i~n)-li39arD=Yp3iWDvSij`)k7C}ZhTqUS2eHKrJPj5ma7f_$)$X$QEKDATdskyA}9$7mNTOE~=@30OtqGP1^p}r3x zlFaG82E%9)G|f{V5)vJV3}jttjaTl?pog;im^Ql&l7B3B>VGgRmtAPx8>KE;gx)qh zzx>>`F-xpu0$=%gNzHd{pnSI>sj}wXmh&-q-*vf7_M|5gC^4J-9hsB z9MtyM=%MPN@p}#tzL~4@t5^h{o)c7m%Xx>EKt%?32~rb@+!VYSlGFwj1A2ND*o{5W zxiivFtcaO7BCzV(@wHR|M$#ttxAhkU>wSPKc8dN*)j4~o$pQr6#+-ZyV(+(-AEFbd z61ve}=%r5R(`!7j4re*<&b|8uokx;uP`2kAUV<%G)(1~oC$+Lk7@4;g;lIGIcImC( z;;I;$?4Zybpo<#vh5RFh^#nhp(T{_n0|xudM~uJZ=dT&#Kw2lU)$viUe0C59!;}d1 z!HClS5M9$B&K)1K;J+iW^u{|78e25F3Dk6uolFlF0qYZu@OF_nIA30q`!Gx!w1{amO1FHV}H zLy}nUl3#FiGB2JALF@q%Xnbfs@e@8d(uvX__qUY)CSGV$b)crR%XeZ??WK>{C%QD11>gdQnU(-f)yW+~YH?v4U!r>L zg2+;Wb3gz{_mS`O#FrFXPk`7BVIPg_fh)^}cB|<-kV*w$Wl}Cu`I$qsf~8&prImYx z;kxzSv0|)CGel903)l>dNkLsno9 z+Rgxg6RRP>Grj9Xw6LVUflk%)RieWia@=-#F~%79w(q2r>UZn5`E%4%RNecbE47Ps52^-$<%HFK3op%u+hJ zPGv-t@us1Srpn!&=8Ad)(R0g%h&!q2A5OY*maEMe56Od(xuVN5$k zl|u1MUt&xBqQ9(V%hC_B!)d-tulN(VV4e`%8N}$6rhk~Ub2vPI*?&+43X{N-70YYz z($<0YPc6SRDHh%2dkLT~Km z0qH~Qk5G*mFV4yidws460XjrvfarTVo2gi@BA~0OZ&F)Q7Lu=dWZ!o)RGo9mZz=6D zm)azV8g&LJT`mT7-&(_;-32`4D7^+ezVAMlbADp^@y$Eaz^IPdyJ9dz&Bw#hnR0nR3Ahq-7P}R9IQycc+kS?j ztpIW!*$U`kBeWlhg)eT?SU*QN47T&HKhN?m9#dAw+<9|#%a*w8ooR~2%r`H}tJ*O# z=+<)Mq0#g%mn6KG&py>Cu#abLcAhV$B>Gge-%*2#Smc64cJhor&AK4>CdtX6^RsXH zb>$C0K=cEGR;E>9SDyVv1iBs>69|9}IG(Dz8+ zVninS7V=e-Bc)2)0himZno9fjZ}bMqQk%E_s*Htt4CP#~?R;V(bJ&*d@2AL`6Zew- zD?D8P9$hB?h~>FpChr#In_be^k9TV6PF&!dMRR1Z5ABH-vWwN@-L~nd7OHFD2r2?o zUW}r^^+xeVsLq`PdHYhD0%!>nzc+Y=WNxu3iWhNlg4DtpjaH4-YiBf54z!eZbn2%7 zKCt~00&5U0xbla|0Y$3;R=k78zdJY#MFH3HeU|Ib+_F3%*Ua43TiAr_VdIe4{jnNn zM%1L(Lr(w$Hug#jpO_nmtzkh)LSr%!%aRH%CNPP(x#U28-p^2RpxUB5Tyta<4_E&07o0w=W-$`td%* zN3sTEWF*i9;2_Wmo}G5MnRVETR_OCq9jG#iHTK0D&cxCHz8-1{ZB<0h`_gXWP4>Kx z#IqVIiQEGa*MmK_@*~ny4>RDs-EaSR@a~B3Sw2NOxIt6et>n-Wtr&^YqlSMdivLRU0Bdj( zYONX#-PGfs^|0LCXmA7$@dv}_-M-uEB>PcICI%3WMyYKa{n4G}K7#|}eu?0h7x)fh zPVJ1fX+5T~J@FJ)f>TrhCaIR@ega#JU@VJO$+si2VEr=LmPkFfE#<(9O$hvj?v4F! zQwffNzg=dN0Fc;=-hZ^kZFu1MaO`-33YZsZ9KN~5etMRG-iA}?e!D?bL{Ydw)Te;S z?{SV+Hu>6=HdC+y72esLLWj8pFlUogbv+5O7|)V}DI7fBjlaIUORIa$C*~H+)2@H+ zLd!CZpb&+vn*oYSw}RjBui(2ph&{K$@E}~|m%m+6h|7KiNQ{Z=@ug7VFND9;1KV0# z?CdRu1*HJ`RRG?%jG=>bQ!gcE0y|H%3G+H|52|73% z##~J(PHcosH*lRaYeH?AU?Ds=nNbq!$(Td5od(< zBYjj*?p$icrX@TR{3o*eC8f?*zA8xV$)&~beL&*mudPhk{!-zraS^n92WW z()Gh{l4QQz)FMRnUQiB~l(tB;wBbAY2r3l&jq_c={KjazYBE;`YISurASZ}fy?{YV9UlhfvnnLNLhidR=D zl;vin}?Bbo_Xh+^2!ZT_#2xDW6WQFO$IbE55q+s7kvc(uoqw*G}f@j z5In=jb2ODI*KIv-;sC$xRDnVD&{}mZ`5dy7Yu<{9@3ftYet3OqM2RA_e*&l6$`BRe zqzy|`qt$2Ak})UptuxC$%{-DYNwjQV6R&2)Ho@kFCb_IT2dtfCjg zUTR$D;!iUi(WkQ@;YNv|8z4wjv-| zOJ_gGH9PXtFp_k&C6OHztrJJiFd2BtjKdd=XPwt1>x8VceAfjQTc2MK_vOhXZ5@lb zm25gQNGyxrknc2frhG!#_AL+lOX_>4F~V0_I6_?vT{j69Sk2ccgYv7byAmr8@Kp(n zH1wZHx{4GNc4#)766~0OeM3arCh?{5>U;T0z)9h*PwDjg1S~U(d!lt8PKmUG*Wy&k z0Qjsc%u{N-=|umuR$=Lg8`0cP>2k(QPu9|@XfdEO)$9lif$onYs~5Jn_89}#B5YzE#1E+IuyHZ*^G|d$?xsmGqIthCG%e% z3>z(b(74tzZ|0uluTP+H`kw(m^#%z(#2v(Q|BM+xLJ9!s{wWbXD5vqI>%V_Fn4Y3K zVg0;)e}!ya&Y%8jjb2m_JC&dAuv|L;XcxlG@;%PJBK;P+E>@vaz)Bj%gue)l8;xo4 zY12`h+`|gaH!Hwnl}XpHh4}a$W&rE81WQBWxM!4<`(<7>jo}^D{4XwXLxCpw7r_SuB5Lg-~kf#>#w zN%R(wsJj64@ntT}T~#3zkjVKUIgs!v#j6w{Q~HF3H{Z=V6#UZHIJB{?W(S3l8*Ao4FuDdik8 zRE}UgZ}58t(*eHrsNXG6F$RQt)@w+m4-9X6qp%&@g>`7S%Y%`lITW@RhvH$erB!$+ z%a{qeoMM&5E69!4y4wM5`4Z$TrvrTqiL1hbwhhy$J1BT+E-}9&z6r+(QS$i`#70#Q zj@vq(aL9go3`8q_C65+=D<(?u3XhrTK(9^0lT>N8GkL+%kL5Ro!15T5#q zD|@ovW;UBE_TuI4b-!Xjp+kuFndEND}*7EPaxiR>&p@#d&gEW!y;vuOOS zG%D)bXF#e$R-88dvNiANh5CFL@nLV;-taM$Bx5HJjk3gf+YNWz;XXFg9Y}c9D~|-I z2?dXR2%A*rXCX-NTA1rhhj)6XB{xh*x!~ZV4%@!#1A#VDbldKjR#Y?iMn}#CQ3MN) z_m1%;Ut|t7ljN+==Kb|3xsN>Pgf+b)hpwNSsYFL z=)zU^Aa?U0A8P^c2z)kqRkvfwmNY04fy&h5@R-f@mRTggb5zGLxchNRDIe!*XHj|~ z)dA^2WMd-=+2Pk>lP?zEbrf<&lWqQLy-8&4@I8lt*ZEU zD@0KJw1Yz6QS7vDgb;a&P(@eEh_B+gLhB1#2n~_el=szZGjuiLdLdhzq8R1HWn4JN39gUjCee|#KG5feTEYlH{4Km` zEK)V=z_t0gN3zzI$fmk%C})S-NVY%^V{+DLTfJeka_Fp?NO+A)CkupsR2ly9WdQ-c zut~Ud3(2Q{OxfZWGcrFJrRE4;^k@2UVK)B75j~|OtT5Vn#TCAgg@5qdXBc|Ap?r!5 zH9nRoId}w+C(0nNe(^3P)*h{kbYy@%mjBa=_@6EzcWSSra>`)I$`Z6v_J?d9Kjcf# z3>pgFAQKbxtV8F`m_@8nH*o`o+d(hMhQ;Q}Asdc{6y{y>U9d(bzkY!k43Pa9i{_VIZ|#@Ez4V25km+Kk5wszI<41SeCT}tb*m7M0*XLtLUDS%+6A32E7<&N_Y#C< zvW}gW&mzpV`mhYg3yIhmd8n+4gi3LdMkvv?ec}(Rf|M^vz z&(GPHxX9qp)mmymu-K;fpb06aU2D^8*Gn`*1@X&XE!+s{eEWxt=KV`Sje^6N^-Z~F z9a<{s>f)|+zHvh#|DN$w0SM0{bZgAna>>+lg;>j{a(FkU#4^E^DS(lg4nLwphH6>U zO)+)xkT_jeb^{N4XdEVFsDiP53YN(z6e&~poQ|!yexA&KGg{9r0+{46Ax}KSRr=j>VKLRr#T7g2w@-b@#3o$9&h41ovRBE_|{(n zBa91-b3cU?!tj3hm%adhh?-OJgu-PzGcnU)tXLk#TqkIn;a~5VXhILe)6J0`98%~? zCAD6wQWa9l<2;1r3*jv#jWpl>=N<67vLGlopZ>pA`MGAGG^J&u00a!$qviyzTHuY& zcpr7GE;fo(B~E-AJ9=ZpQ6#Wjt_vP-wJoe;;E7->^=xGP`7j*pottAZUO!WzRdfI+ zQlxUT6*Ecfpp-PNCSQEtFhBKwt)l^mD$p=9t{yJV?T4ZEPjxsPX92J*q9DNlQa~}~Cc4XzWF?REw~9ldK*HGmfK0fj&JQML zo37c(8SP=YF7U%@5=~iWYRwcHB|>GMuzWpe=kKLEgf zbjyL6_gq6yx+NzAm4Jq&JTgn*NIX9x;8sg$E<6S$0G@bfOo+cZK-cAKcw3Y*=4&)j zRUe3>oKrjHMKq&V!cU}L0tfXNwQ9cHSvC67CFqu4JNPPcfvBrcvc1E2Sf2XFOtCM= zMK5I;=S6?u7J7G01nk@-g6y1C5GZhwJuVj{MsZ0Xrjgx_kfY@pv&9BBJ-DF}yQN3b z6Gh9^#)Vd^3Eeca>hI&^{x9sw96KLC!-Sv(CQ}}hI=dwR7OK<=jVt37V44%H!qTr} zCldjw?S-S{Ab?$f6^1iR(%IzFg1+GIs*w5`m_7v8Yu>cNZ3JAE4#a>yoYcBPEn+m0 zoGE>vM$$dF*s#rk8K^xs+``(hXXU#E&hYw$Tq%(R(+=xJy1(Tgd?w|g4oJH-#qFb* zRx548bGD|9ntGBJ%oGqTffR0tbwo`_KnB__-PRoV64-D$usQ7a1Vc}Vdebv;!31N% z?VJk`wMPqXokM^D%PMOlaTYva0*7FbgC^m7FCuoDe5eVkLsPfV02ZHKa946 z^v#NNTpK!WtZQN10zVJ zla@ZU#wb(gB6h~IT)GLen5Ts+q=&p0b%6%b7Yl8JRC7fY+5U4w7W2R(TJnwjdej@R z@$&qpTH>Kd=@0MzDHmfcl3hd#7)b5U5{CU-to=4Xk_^0P`)Zzj+A0nli6CVnqN&(} z@Yfg=6+Rpho7Q2xBrsAIR2Ph-?HKqDB6#_OnTI`(vs>yX8#1OKf#Oy1QH;B9Tu<|- zF8U|Fre3~ii?1SU&Q9lpSi+IK@j8JL3Xzh^H0dt>XggW&eJ-rCg(ei>iwBvlf>`g! zY(2D8D18YG0*~ZKet(PO94c#H(Bd{YFrt)Ho*XcElEnKTCwK`49UaV3AzdFtvlYKL z^im?M4J{fpH^X4x%#9Cb8*%i9v{L}AG7ikK*Mbp}KQ=a+vs&9@v@};9n2+`Kbr0Tw z3VoVj*UertWaE;I`GI({(NTAxzxaEAQlVywu z3V`A`lIGH9dlczaeoMTX0`UF3J@5#FoPXfsi14RF$Mu6kJ3n+m zq)DFNwXE_6M^U>qq+};oJDdI|cL6mBK+aqzi$b)xVYJa9K{;6F=d&)d0V9LJnR*e{ zlKeK{W`PIHlOwmSl(>0oDh#K4534?Sktv-N4gAir{-cB=o^KivR41ILG9F-BsaCtj zVcCmcdvO5m37F>sLRnEz)Z(k#LCC;~Ew z;SR1x)@+f7=5(*BAR111T*(}iARN>#U#9+Ny|nSrl$9BuKV#pEdT{yKOS_@$+Rq@4PGufdVy7!byky1cU&_IgZZj6_l3TT zB{q*T?-|n#2Js!q|uY^Nwpv#*Gy6|Vq)uN9K;H zsJU^s{Apg-^(1{wsrUDDpwoStC=w31M_(B(Z8TqpyNs*bA#$!4Zb}hx41!lj|Kl7h z_R@@Z(wW#>Dj!P(k?=FxlYqCc;V;_XH|2+utk2B4+_TFpOJZZMtYau&^x!p3z2ZYN zs1*EO6Go8d(-QYyX@;f^#*6h5%a+Uqc{qXZmHGFWn)QFb*Name{0DU8h_aCIVotMx zb(x}rVHD!m=`UXffC0X4{ ztu|bMWi>SfJnEn#G23qm$2TrCWX7o;a4|MsWrYdHI57N%9mKfjc9IqB+H9g;G_K^) znpEej{~K(wt0fBigaoige=ilrG%v7V?K+tNxaat_;w2_JhG~W=I|O_}Z>1MFj;;TE zS;^)M#k4-FWXAIt){IJ5RQ&#S| zpg?LMmkX?*M4qI`l`Xr~o&Zo3gQ@weyi(M*DXS-_Bbp+j)EJ2&^iWaf(%+k3qyk|x z@sV(4WvQ_NM&tX7KC)S~Z&! z8J2J;6w34Q!b|-J*aw-5ZjxcfEb_qK;*xAiTpa9#U1PS0sC^$HmwEO@`IhPtS^A|$i@+#0_Q}I)LNC5a zWW2XMwXx5GD<@JfDRm7BXHPa@Rx@0S81Onb7W9QYZ4V0%JiyGU`nA}AF%<6Xo8HWY z+s)=-)^q~-7D&T6n3I~K^eB>RU$68e5pL5yp%V)%hro1{ws{WSxA6rb+M}psGf0{& zd9l{efL|DcVzABY8vyaIc@h#>^m(&ddV4bVOZjlgt?_E8l-_}cB#LcK;f3HM7tdWW z-^+n1aXU^U1cJx=uD0zz26#65XDlxgdyV?{R)ONe;4CuxYs8TT~HMp1U|9Exn>4I1MvdNbD8+VQGJ5TO@C8zeCgPVIZ}^Wz6L zJAi~Am zJVyEhuTOZ8a3xtEueA>p|wlqT0nhqSR^ zwI^E1H~(^osO4X!#WYJt?cD_p^^TP9#f|x#gP}@%*k4lAsk^h5@}C#o%U>9yfn>^! zeFh<=8<^V~%mdR?)0rYhrZ8|``h%~UjohC64ETCcNXW;hf&)SIVnOfP%8k@%okztV z+ffx};(1ot6>xMIbH0-z)^wzt{T$Tn(6!jgMxy0)^U8|8xfU3^T zQ{N32LD?8d)ve-rIc+{E9V+J=7U0B!b3u!si*1`)S%+7jV#w`dBe<4e1cNVh0Gp~l zD7?%lhzcP!4WJ0?uY;A32bof&3Zp@GGLPIFJ)XD4=!;3$ndHzZBbS$0Y`fnyVqm!v zdj#6ck79YvmP46NVoKY0cQy~nworE7xtI$VTW-hJz%FwdF-VLnn#nL7 z&QO7oVV&GCCto!Ivp*^qeF)dpR0<9@PQ5!Qm=n-pupy%jBU^521429R`ecP&pEZVN za}lN5QkjKY+nkW#x>ExYp6cfJZW76)>F>kn>Cd}?+x9?*z{^3M)sR-$@?o$ zAv~W3e3ga0@hyQg*b#CUDfK}+E_Tj8IrW%+-)+oxD6HA9sVaAUmeu>o&%@@C;`DS= zg;!xVyzJI&<8Ub-;F~8-mQ2oTuUd{ym+-mN7@6n7cUNBMu*Sv%N60#tLlCpyJ+}=I z#>Y5>X~QI4VO``K>WrnD8k7FBc@`eL8P?W>a$a~q9-rrttNx&*#{ zSe`3VF!^L!_F6^Q>xW5jB- z#e}+9C0^|D+d8f96U72Vuuap!4q3E}{`~>nj%kO=|K5Q|IF%aO*#Zz$-HAZ@PhCoS zs=~`f%^nu@gf5%xqm*spbd{@-TY-EQ8B%YqvahujSE%v|n?%hH&icTLN~y1>I><$e z(lyftb(n)LgXn-knJm|vd^uEy>25Um0jye}_&PjoQaGl9xKr8@@sZNagnNoI9(HJQ zrull?Kd8$P`SxHXPe6QpZ#F2crohh`XYp;;5`#(#Y?$<+ku}h`Y`?q!^vYxXgHm*x z;y$rLUqcK1Y5oc5&zI(BRjy}Zf1<8w#F0fn54mOx(THO@k*UBcAsH7QgZ_}3*{lWm2)dpQV4*Tf* zjU{O<6w$@+Oa{pJ(&_wwnOdr5XKniHj#R8&7N0v&!izGv8tJhdx8d+%T<80qS$@E0 z6KY;DTdQRUD!!oSdYM}v3!n92U`L$35lrL>s1bwS`3In)_R+D4 zDelz83xG+Wu05EI~E#B4R>06K8KBvRmh*76GQcENuyq3%tr;VmvyaakFc^hrQEK z&Dt6f5%5{xl-+I!K$ga3$={tX-AnB<;%(+|m=i{A)o&QIfyCHmm!6fTC`Mc?m2{=| z{A|u+#c@s7GQF3yf6qByLEtecJ}45Oid8!>He~zFVwxffY;LXs!S3;HElto~b!ux7 z!^8zBVw&3(X#r1IDZJJcaT;ae^FnOR53J3e<~e|Vf%`xxFfujkg+G}jp5E6R?=+lYU1NCWE%<Z)I)3lirYxus{-*C5 z$IjHUM%Tt=Jt}3&eazd_tnvKlb;98$)gUD;`ppxDDdpT2pkPnAum(S@qk!#PWVW&< zBW)iGm|tr}H#$58kpoj+>@!IE_8Xn2$|%nDc=)e0sB_}8p-eOf{~tzc=Y;25B%Giv z;tg)0XpqxZ6$`fOdV*_EED#s6tVIpc+=*3s!5jq- z9a8Sij%@sY6_qrQ`4aw$CLi$eSyS#u{FC2FB8Jt&2v24MI?s$Eev_cIM5F{!$*LGF zM2s{m{T9cWxQUqKxPV{TQ=!~D;RTA&(uA5^A+*%?2nH>7dn2<#G-|-S)Z$3cP4dWO zwQ0ck#nj+y(*Bu~4)FnD2&R)sU|K3&GdanTSk2n6bho0RM)EdU$VjfC)0pcyZlv!Y z-s=R0Fi1T?V@Gqa1d49yjUl5th<(3VRXtPr4^7BF9C6sbrO7BveBZ03Jd91_?oDM3rh?cY z2&ky6KqZMY+ya2g(H$BL2M1(6O4de@(mfG$v_sYvDgag(b!`HcJNQsT!=bW zu*L)f1{>9wCpF=b`R0ugFMS(;m(8yx>`JhqNozulU-DRdNGG#{Wq4@JyqXvWr5ru* z#S->Q>D90_#TvQK(Lyx>57nK=r$=43%e(m9&5jaBg1ofwb2d#WHf6=a=jNbdV+q3l z$w5t*f4s9a^GtJXMwa+jYBs16dJ;O+rJG{J_Ge=^>L=BJ_V273hE?^-+n%|rnxV=c z5(D_WxY|aOWY)Kelk9o;joL0;5RdZKb-LayKy$&@qMkii$ON-SvxX(1bNLtU(~gT% zpHsyXO;Wy7zPPS6UH^?W!u8eYyGF;ar^HZ#%Mw@jb6& zEfGt`Li7FKR!>nOY{+A$l~t3QG=)S4x7V{f2BWCK?B5hRQ}XsjOJ2t>^M#CY{ezoX zcTrDzV!4)1Uh9oN1H+6&49e;6?yXF;D)TuQI_}r=cHNM7DfKQWC38>(1UO>io|wt_ z%ne?#g&()D^~lFBTPD@%{FlBv32oFxTEu1-zlX-Wu3UQZK#z=rNBN-!OD{nj(D?hT zC$;?k_?9XKvd-RYXYm{lJEpoei*@?|K++fwpimezhy!8&R_>xoe6dW|c^piM4ju5=E>0jr%+OVH6rwYTHtg^5RORV4myx z&hqfGm;8N;CssWJk8SUSjt?efBQ(%(wwp@4UpAPA%RmWs94U+<`kU!c!GB{`uhL_m2BBikgTow1tMGA zP&@Y+m7ww;{IY?sb57JoftfBAhh!gtIO`-XEz%tFzEIWCcQOTQA`qQg7;2LpzqbVF z=3{llB-L`mk!Vz8ygf8`(M!U>=+G?DDjf1{V9}-4r$vq!^SWIUTgqDWQ$z?9EX3Ba z7(NHf$Ct`Bgu?*X?rdJ;;lwCP%%{Q?L3`XeJ%roHY>y=qG7L^~`m%I*t` zYKK+(f)-bZ>{Ro#1=#jLg*{od5&bdMya>J7RHv06DDoD?85#o3(QHriKA z`Vi8Ao2>|0N!u6vzc-Bl3b6x$5>ZSJWc^k2~Wlb`@D#2HMQ=wRwR7A*avPc zz;s}k`CmK>Gt$qlh(arre0zE832A~->hExW?dCx}9U`LEfw%OM)QEudvF@7;0* zUgC|HaybE)?nc0y*)F?WPwiqf5T30s6TxIsherNxl=6!DJx)kY2^+R*|J4Ue?44<# zftPVe!d8Be-HlIgN6lwWWcGku8N#%J?e-?8{pG~VE{k!9I|m&#zQs0j3h_Gp%)%8e zd_z8_p^&Y+{&Z8-ZPGrP&(k{%qWxi)+!ugQu=7SVWM_2TX z?1f1oQ9W1!OHZodo>8C;$Lj`3K!R^4rUCT6xt>-Vi8;){Gij$U4Lxs><49S0vZ1>d zx>d0x@<#EJO_4-f0lDu<(B78W)S3dAw&VC6h23>*23X(rbD+%WqlB+{Zxi)!J3*15 zQ6bbFRqqKK7S}h~W-)4)weMkdxWT;ZlF#&GwDld~ zB_+2^`2&_*;{efLlyY0;hm;7kOpGcIk5^^>0I6hn_M>uokHU$mtg{@!RV>;5)-@#V zG8rm6Z%_kyp3suyN9AUCe6>h~2Eic-t&8lX}t>P(R3W1#p#Ozx|e z>T$hou_0WirSV_vllMR{84-`th$TrDt=r9q;L@P00w)vi5<2Pr;fk>^k9ltq&%^v< z$5K9}jd8TYc6}|3gZEF(qnM}!fx{W+fvO`}-FHq@D>?LUz`9jro@E1*W^$Dxq+kqf z;-PreXq7Ja*EQB2ls<|=G%gPNMXBKUK3iCK^a5y7l);m*6BLgdKiYey#M{Hrx(&W} zB&>BnbR&i6T8nwTbEtG$&iEPs<;9ETXR2M~@f=mes_UiMonGucI@0F0El*^xo-^(2 zC!K;B_funwzkiAA_g|I1Eabc#K5@prhsaS}xg=|>o^PrQn?bvj^uPI9*-gATXDJ#O zz=_;&7}0)Z5_4`T!*Di4680#4HGerV6gJJ$V1i*m!vOak?-r?k8VHzhxOLdfQ_@78 zHlUY7MB_7-;Rv}lO=M??Wyf6{80FnQasTa&E1hkp=b;^ZPL9S1n`*x2^Pj3_2mp15 zEleV*CylZvb8N$say17I;^p#|3L>g#0L7hr^&6sS(}GFa_Eg1azna9>XOg9&6;FJS zlSQbQJB&dK21XoHaZRVL_$nU!a9yH(WZG-LmEeX(}emCT-p8NoE* z<{;Im5Y5-ZuQ-6k;}u9n>#%!m(8NS}pC#q5z^y?bKJJn&J0>fvDxrRC30DhSO>c=9 z3S_}7fQ~RET^Ah!CX>)`4Iyi&=&UOpNit1N+LKe-Io?K0)`?nf*RZgS-|R@mC_VoI zPY>Q`7j0emDSIElP#E*<(!yKl0+6!_0N|frZjbmSac(m<;Z1Z@RJZ-T1d}EeMKf9T zfw8n%s+4J2r#x(9P0{Xd%V9-9W9kIl=i*p0XE2Qy+5!6-Dfk&l(dPq{!gfRPo&Xb} zm75hWmH3SAteK4*b?Kej+5Is|^u}2shFc4G5yL5*f*3zn$l-)pHHe}>!V%7;$*?iX z6Ie%YIE}MJ{PQk9vEQ+sPoPmsNkbeX?lL+r{L2dFY&)6 zAt(;GEjRs!<}!v>dqwx-B62>$8HNHgytJ>X((`w3x6-i(LH4Wh$+l~zLj)__vVk^c zI}?O&;`VXt6_WvZ)35Y#@(2jJsgz$!wmMyzmRo@__qj*YcFq)5fVnjM9|XO$CJI2O zti&=mlF=&r!9fB>l6`$+Ge-=6a`bX>5hc4LEG195ubKXf@?8MQT`)DetI$c)2JFG; zglOoQ3((%j6v2!*e~J~ygsFzjLBDe(&2E%ucu0f*9koWlV|63GkZ=`6LM39@;F`S8 z5O`;(^pyGJm;?o*DNXOWO=mF8gq5o3~ymBzx>&_yXOwD6~t#{w00de z%A&HX^ky}zX#CHR5wdmM-&}-|fY|`43TcdnsxUQBnfqcVv1kya7tw2w^>9kdsI3&5 zW6M)|mhec%1Vxr7tUE+@s4PwzwhMdmr=T z@A=qUo+Y;MTv@CiI=F-WL$?_u2{uF_F^Us`8dHTiOun(b+BDmu&99 ztRB6pGs7EN{c7iyt5ANuIKI*Cp##3Ex3|h&u$ld*1B3_vr7a5)D(+3&_aepVSGnoA zjhx|b!Q7nu(O{XBaTaQC4 zFHPPG|MPDxzLQc`!j#mHC*<<5-Zqo;M$AjVg8RKx0&z#LG2mrfeU-VEE;{<{9yU_P z75gqwp`y{Nrjz|{Ye`Aet{vdX`ow~bTenUKLHbD+wl*v`Pd32$kB)L}8{|w3##O)R z+V}wnT53{3{PJ$Pzadu8kZj_obDWUyJ+2MD#jW8GDWY1ROOi=0(VbLqm@TLkk=CMy zCw*~P=p!wVL5^hc80tw9A`%1^8b6gsig$loFLUK2I@Oqo<&*eJwNDtKc z);^XenHvzLBhhH_@dJ)jl4|Ey{Gsn!C^S-)`M^9O8d@)p2` zp2e97!UVe^B2rOOIjyAHA+?~LSEu^+^tnYeQ={-n*Rms^m2YE2AjV3FZV&SITOvaG z;`t^z8&!6595l3W#+Bpf|F7TDolQ2m9E=^9nE9AdnxWGfZpmEX)wiY_PTF#MyyQ*O zpad$`sX(<9_|On(HIbjGSLe{a7+g2MDLx|n5gk>~G0|Vd8vI?(95<@|^#EZg6BFx-}VmmH9Y|2kL@)YV#{=vMLsO=@|NC= zux%T9T&FI?H^>W)cc#%K>sHu=#RnF|jq8wW{DI-=(2D{xT zqnM`t4MR1&pn`wv-Y>*hDVNivNIe)SEzv&LX*0S0O7gCai{yNgY9qKs6El%)5o=;E z*}HBF;~0*W3m6lt5(>Bg>k^V_9?Oh=)cc;*rmO|IdLU82M&~RQut(> z-vFay(z0hQsD~b6wd4(fr`$YDOv(xuM${L*hnLD{j!LB|8S}VC0py39?Xc7y<)qiw z7~Bi1esX@r8Ti3cGvT+?Hlg-i?+ze&Sp_Z$>)b5?bJm*x;)|*F{TEj>%Acl4U5P7s zv50q+Ckeq!#L`y6F|fd7Kep(7Gk}3nQ(ve<5`lx_tVm)qtGuDtp|TpRP+bzAiePyr zAP!if0R@4YF7_D75m;#vA(z&B1h?^qwRLK%^5eUK2#Q)AY&dm= zo5l>C>n>kOC-toGE4>bLa4nDu^Y~?KzQGfllIi#7uLVA2KtpZs?4G$4k6~B0DeW=) zf_;3!z{{W(RgN;;Zo!r|(YOYMWP<|q>9ihnn~$|yh*f0o&_y`Be$ewGIZ79%?+Miy z#EO%_={e?}caa88aE~}fq5X*=O_zbM`g4=N5O9iRWqOac(S6rxr?jx?1Tss|Z0I(g zj!n9MMcQE3gbW5c3ZneDke>l)!`*3Nfe+yCnrGheTFx+y)_PQ}SS+FW&7CE2F0W=| zj4rgdFc(|xe8rOh2Oy#XJwm;o5OqB^xf2?ZyKdiiyrSC`hOgU;r|4(Cz!o-h345a5<-ZtUz|_9F9LnzHR1;*qRzEAV1?(WfV`Mbte<;3y*(0nI~1%%XY{h4O69 zOlj&u`P2)VdL+9c6h11KpRSxY4gNQqm8d%@lW@dNE;Ai>%ZPdC;N2}xt8y_o>)uPO z$+-~WIGDK{qR9MLplcAwJz2ZJ8uFmC0jjw=<{!qkzfOYO=_ z5fHgh<6R1i$j~&BeWO%c;*j&~!qZC(+y@*wN+|%c2F$K4BaWFt+}Y**=aohocf~zD zeaW|UI2QZ1erg}5dpWFJEv&n_(b+Dj4)dh$J zTLYZ!ERuS=9?FcE&Fd0@`rHVz3MYRtX`MgqC~jIH@w`|=osXzij5(aD z-KY#)5cHBD6g5lE+!`AMw)O-j5y+igFfbPJ%In?w8fR zy5cDp*?e*nxf9?AL8Svew5;;?H-w7cu zbLIA90FL0*kF#ZCfR9|7?}x`86A_S1EQ+{8V!b0X@hHVsaXCY+H!K*=P`pwZTMya1 z*}k-c32*a|66ho^63Zg$Gs&wxF9xGxPNl)7_qTOK8`3G>v&JG_8W}0Uw20!O!u0@# ztgt)vGGlJh1723S04SFGF7T_Zv~!Q*613g0gdm)HF9bK`HTes_VPm3CwtFu_+N1tkJObpvqs2d>5rV=UC z^zW9uPSMZ;O>G}BW9D6`oh(QNfzUjyBqXsiH=ZKbB{%kkCDd=&nwTv~G{Lf7Is--6KkW9s;JwWkdm4i~-sso1X zxU=U1f@rs#x?NO>iQeZyT8*z70BATHyl75VpbW`{ep$`22^a;74+L>fD;rhM+VQJF z6`p>`F1!8gEgpU>Z|5T(YD|c{cN>@!9@5|+b-qCDmL9nd?c5Q~z!U!&$j5k0D7;+- zL?+2?uf+%gxV^~P)d5WkpJGRH+~1vAhJf{NaXO;c`Dc;u1w?RZ?gRKhmzddrp*E~< zBc!^`lOY&0JY)m}u$91nuNsuGO|g9YHK0&qkG+H8tBP0dO_t--jMlsHNDJ^roCNl= zI+bMLIdcm5oUGkRrTrcS#Xe5_ahrYFSj=>sdQdIuhbiDhe=t!I1W^)rRK|hqjAAOx zMF&*F4y{8^C7*STic#Zv z#CoO;Z+@g4YndgI;O@2}x7~NkjBOxZ+tf7qiN7^YEHA+)D7#H5G`yjzj)d*RD)w7a zq*1uBgx-PN`OqTSa~w9Xr`PaLz+$AZGs#fyJY9!@S@ear|$2SHu@bTflifs{3J6cQF9~Gs&f1CV`?DO-jayLy z&F|W1?34!+g#mm9ONK+M%^-w)Hx7QmSn*_x?UW6yt>G-QZ0eOe0V4xUAeEjiAPzK5 zGu8bx99R7HaIU11R+GtF4blCp50HfF6fA@9t0T1S!sNs-2`5I__3s;PCz3Zy_rOR2g=!4munhS5u zKCJ}MaP2AkRJqzDgsc)~u%skQA6pP9?n zG%sYMr6ymY*4g+xPMO%v#2F9V|As4}ldIXA&F?ofZ|VB!%QnhVl^Ye$>VVGXxxQaP z>M#R0uL&T&Es+t`aZ8~295-`u((3eJ-B=16HU=qTJCN_^!M5{i_YA()RrDR`h)|H? z^_=`75?#l>>Q-jwfZY*9O+=~o-$f8~TpJ*{Qkqn$@a|oae4;Lcl)8eiPIowI`e%{h z|6dPDuR>$=LmVD1e|{5DwW}%`Kpq~izO~adtOht{X7uB@`Q==%zDlv#dxBw3SNje` zgK>n%=Qs*2Q|0$127LD$*`uRDg-6g_!4XuRin;jD!zVXv(ubY@?=(0koWb!r7hV;i zl1h&;uTrQNLvv2K&{RZZ?tcUvN@rQ@oSaBmpAyTC0LVUkP z7xWUSe}Z!iPl(Ub9?B1j=nwx7G54i+4)V(e2%VamlruVnFI?_9TFCVnIEPFIJK2EQ zQ($yi8OeQ1VDRW?Nm-h(yl+_IYWz#~J3kqSfte}M#H}41rftds3IrL}~?SF_?pi)hn)zS)D#B^ir5~6B zAzJqeSV)9OqxoUo@@k$GZWYP89EGVMsj;SwR{hf>L3Q$&)1j=XeOP0Wz~F*}D8p*I z7)PlzpPnoH#W)>Xs-n}_t}ye95Pj$kyMoF?JQ`d35TSpYdp~%OSGPK2w)DcRz`P>p zh9X-<3keOf81Z<1DR|GziLrmtjaH2dg+aa;4Gvp90HzK>b|b*Guz29Zt{eelej9SH0qklL=uS_oP7ba=b3~_v@-z*(i zg*8DC4>hSZXr*J9kpR#`cFCQ&?bV&5;X%G#cAfcf+WE% z!{Z-|o&kO79H5!xV$Fs-$Sha5(IR>0y+4q4?MA#MjoGX)G_yE@wERVXRzOV09sd$3 zC7CW|^w>@BXOgpAB{7eH$;E9%$zm0s+aK%8fvf=%3Cf+0 zT|R5HsAKcJpnLDh#4D{6!_3bx8u3j7kH9;X#cS-2+n*Xe>s7RlhsK&bN`9IiIWpH7 zi8p43UQW0$(T02v?GECx=Sd$c@w~}s|L??k{whoZ5ZA~)x-*9_cAB9p^+mL-8FwC3HdYrg&>qUcbn>A5Z=<`}PCnXkEYZef)` zF$D6zLoj@qeWU0y>-Xh=K~435tvBhYzcb(ftvOu1_?!lXbq9Aph8wRf$&8X?!JLEG zsxhT@&QJiKcO8vh8eK<`{s^ar{QL2(A;Xy-{Dv?*g~wiuf1}oS7Yf55e;IYRa8HJ; z^}ERl?lh1(mV+)&Y6EQ$j|&LUV41{r@8H;Pva7bttW;!;Bq5R8E3sO_4>+~dxL%P+ zYfMJFN)kxZ%_7l%9-<|yeo3@gDxCE6-sr~oVh8wl{2A$Ii1-X@uP6DvJ3!vYQ8!eD zkp_?4(~Y1$gjQ?vXu9)q$6i4Z1^h0=0evkYiJ?1aJbLdcu=>zeBEytQ#|6HW4tM=q zayYa8oTfk>=cU$qMdC*g4LK%xE!K-K@`Ltu9owD7&iRY^-Wv;y6=!=+mAN}YcJIoc zzIsBOXsN-MAn<^H>l9Jw;VSz0*KdBs*l5E58>S&0`a=tC%f6^4t8WUiyS$8mdjY+a z4a>O(g!x_NUw5i)7v$yidqVh6CodzB2oxtu0DSi9NBn}l0ySZnR%?46 zz6V3UGl&?rwQ3k>h6B!wJ33^2Q1v3o^OLbd=dKHL)X-s+ zeY1|C9IFs}xM~~f7W`cdKmHBges~ZK=na6|B#M3wkyijl);+bi5h~AjZ)UZ%y+oIs z>^(MOXw((v0x>Na1VD&Nu!x$x)MPUE{_N7M1}_e_fA6h9$aiy+^t>1&VO4hKDiymP zztACe6AM&a!ig?N`S`>qBwe{#yB6K{yzl??I@MIbBR?tlP$_oP$qD$m@O8%uo~*q+ z&=Bqs0^Ur4H9$){gjtlW5TMo`|@>Wyv zc?5B4+$RG?6t}J*;gA_v_(;cZ1SQ9FoYZxZL(~|gg9;L`- z6-<8SOPC&Ms4QyB5RskW0VCd$1#gO|s6995%P_=&s`4V~bjmeN4!oJrO)!&-DdzQX zfwCV+?Z~1gW#;bu15|C-MOsgcKmjKaZknhvNYVUjE(w|A7&k~nzbb3??4pTZ$+h^4 zd-Sc3ubpRjsZq+XB~e;Za9q#!kk{ate^ea=#EzjnPY}p{vrRt+h0oXF_}5P6*s>PW z70)n$rlSoENbpbIwBpzEaDkK7yf(DIcIpWA(YE|9rvNQWQG-t`&J%@ z)3nQ*(*i;RoE|k_hxTU5;sH8qJ~ic$;6xbjummk)tvbsdiYKwv>Va!YO9wd#3eXd$ zq+fUBY>oG2n})WLS{fm5C6VEyRdKYqTKGV^C7Di?T?4?oGn@H;jGNGFL_if0QQr4# zu*B^%zMcuIkg8x`vQ{WvV23gS`Fo*28$H2MM^b6(AJNcR7*}%;_qDcVxB5`CxX(y2s>d-px zxa8f3)HhG&dz8{MS}K5Zdy3H$I1arbh| z({1x?Q|ziJ$4Ex|DaKauuWBkombS#DN8WjC*|h|P*nLGJ!~O2UjDM~TaK;e<{Pcp; z6<7G+l~DWaf3vDMT8Lw2iwTbF=&`Z1GD5iSvA3GOiPsgRTxX$uFdr9KlVjyNvcZ1c5PG-xr=I#mHOmA>?a1OvJ>nDr4qN5% zJXeH9Ry-LhuPZhmxUN~YJ*SDk)v9js(zq2}W+ahNZ~sroB#3(2@AUzBm_k(Fx^3uP zKt)+q;paBPlV7q#@LS7B>#TlyJZ$Y&jaXd;ANBHmp?F)7Q1C%!Z2AL#3~{)6dqTDE>u+V~4wi`OnjqdQ#34K>%44gXU&w|>%4 zPcG8I&DUK&l&--e*K@kQ<G^}KSUG^&>lkaCHD8u_9T-| zjt!P}GEJg_bAi_alt@4KHLvExj73*8%*2c)^4_|`y0uu}OvYQY6)I8|Z}>_1|K3im zbZautF>#|BXzgBAy@0R}%vJ;9f4jh+j9?4mA@1GsksjLJ#Qm#1$FzNxZ~SYt7bSru zTAplR%o*&GuezY0!HH(2%lPH_y%jQuAjih^9fl}i4+G20nN`Ju2qAny)|{A|Uuk}3Lrq|Lwu860cu$rbKX8P-JW+E^ zw}55EaDSPfGTzS=$fR4yaM#5b;MWigxiv27Z> zJ}GQGG^ekV5lKPV5F9YD!Dt;P@iKU?DiLeE0 z^4IqGqZ0bgVd>+bm|tg658-q$%Y%;P-bLWF^YiE3foHYY7e#uZn)AWzyN}VFI2;uK zL_Qw+o&1dqIBxCN^3)X*Upp0@q4we*Z*Mu1JxfjOXG6GE;9|v^l%uT-Kn7GI+PW`X z`@m>iTY%E*hQH1{xde?!qfRXz5raX17}m}Wm)_oTfeRO!W7EIzaG!6%gON7mA8x}^ zr5gbMKLEhJ__VY%L`?hq>r48(gRBbcNz&OkPZfewW{dybihRF;1OaT9x~&;ze5A4O zHE*X%S(wnmSYT%^tsSsK2L3!b@~@{krXpM?BL?>|zcsD?c;(ZS8r!2z2-rtm*pPFg zdd@Espf zZPI9q;`23eWA1`jI@-7&mNETs=u1%`dKpBAXozv!Wf?v7ANV4x&c0N|YesYYpr8j; zNw-9n#3u+%9%22esAabS={HS>ID^5>o5^^4D~xm<^ZE zyzXjIW^rioeUK;d`9UuT`4H_mN=T4yQB1Qi!?U=S>@qBm8CVs?cTbk2gom)mx5l}B z9gRso4R$=;_t&;u;sj4h#ULekL`-_vReoQDm|E^W=V^!lIoFmky|eaug_zt>lt4z8 z8MECp4LF#x?QOhYBtQGO41N|VB}joa+72y|+WE>xJL~mWG8|c6(mTFIilD3ghb-0n zgK>LO`00nYe7=oKR8dI2a^5UCPRUVV*qCXqKORoES|8R%p^2xU|47a%3~j)9pllH@ zYO;#sJeOX731`iUSt>%E?=s_*gkhQAR$%d_egu8lTszXe+zvaDU)MX&Cq zvD7s)1Yzm{i(6(&%LrLWOQ`1D~e9_fj@bO{0j+-$y`h8X?x^sG!M zQQ@?4VB}~DUS)?Z-Ch_Psl;jCRbwqvq`iVa_pdwmqH9&XkRe<*v~HUQO50d`}JiDo?#k|7eKutP_E!nGpX*=2rC41P{&OjH*7!22XB%)LVBA`&&d!eTE}Bx7~$ z^mEl~j{%)TwNv8^@)_!qDNC}U)x`=+58|yZ6lg8thIMa%d}tJxxy9_*$Z*_4SE5Pv zan@+3eBFXIVW5q^iTpWrlPdk7v7_jh-NU<0CRClWM>$1lRM>5wj}as*sE@Q6$dz#?Sb3a-@qz7Do%UtF)Q zjGTK+*qg@UtFN1)?#cs|Em1|MiRVX140Tf}qe)Ou0Jr?mf~AzD2g^C$YySBh30y83 zLti;p&(`Qymv#{$zE1P=PzIt56d!JRTIQ>MqL@N&UR7Q6piSVqpHwD^yoidAe@x~MF||&D|4@g2=tnh<(erz%&*d!@ zz#2zsz)`r4X`>#bl~U$<^T4m4K{w+~%n;yYwKj)3#H&*wgU=?RqsjW|2Al}Us8qsr zE@AQCQ0`M5e6e`goGH#RSTd3NDPy&?9rlTW1Gr0*A_%5|wd@3Aho;L0);$riU{g== zan@SKD{&a{;=l~-u~(RcAqbM7ZNxAVpeyyY_USZ+MTb0IVBw^(2ver|DY884vC8`m z+kaA5WgTg65#Hq;Jvc1F@gBtKeIFqomZotAY1l65@x5$2-a@rn{l3>rFF2lh5*hJw2EJjSQLv;^5#MMXjA$J z8w*4ej^EOffIm8CV{NpK5C;%gkY5oOCk0aT9n> z{0Wn2AmApZ-FG^M7!Ra$Gs29`ax>+(&D;w-PZ(0%m28A-67~J0u(?|fS6rXq#{SI zY~pWi$`e7#$STUq8*G>#&Xvf6>B{%<|SMB>Di+)RsYxUj{1 zFoW*wemUy$2-bus$63{h@oRV+aQ|MK*W-Xl*!?(JUb&q*6GeiAbt5Ew8~s%oHTbNo zwSyGbcHOJH5!Rv(gY&tg*HEY6k_heeY2f$nMvNBNti||!ghuc&*^eRFi-aO8m8=>Lq ztq!qc&SK(txmn^Qo`XqtFB0d-@HGNV!hc)n1Y5EfD^7iO2mW4_CH&7-gx~_y z-vzX*7Z!k?Ke|*dqb-j1Cb%f4ge85?AF{`jGTo#^jT@-oMFf&}Jere)w8%#mpWEEc zkQ*&5v3=}fi5J%qk2+Uy9KA~!1alTUiG;GjM7^wAVa~_j3$EsuDXpkAgvXCv2lX1d z;x})tQzVKmY5PS#j0cR5WJ77h!(%}+Eb+JGrj8k{QzSt`lV-8n-P2u&y+jv$zH3?} zUdZhnvKykSQx0Dv@}X}7-F4Ol{5dqMeCt6C7G6_cy}l-YHI79*Iw4;W5>7a&=K%@3 z)FN-qS9$n;3|yyNyoHmThFwP{MQZOQR=vlynLxcM;v5||EF!VM?vtmdu_fSwT}|f$ zN*CvwL(3vRR1e{E%5Be6v#?u=Xh)ZB6q@gbYPj&nj?pGAodXlRVwKbCC~klAaD!29 zUScO&$`)M)&1=!ARk7(Tx9-MosL`E2VSkurE}+@V+W)<)>VoPO<^HEAT`xqin0lzfwmHto#k zL5HC{RCnOR4Z<+IxB}Y>V{zOXmZqkJ@Yc9wAyvQu+4Xdmy+qYBe{EGv18O3^jWNa>`#Rwas3qg6+9}xT&f>0=tG*V`TDYBZT>lc=Q+p(E1oD; zVca8071&7M)twO{PyRst<{Sk!k(9K8E+&H^M@0pazBH^{7@!2R9%LaWVhe?cjyd}1xJ@}Zxl7=6gkNk@|qe&Pg` zdfrK#&D-5B^-a;cCcE{keOdW@8C#b2;6UN7cI^g`r3z(iouaf9Q=JZn%8FMlGiF+q z=IG=A)HqhKQ!!N&@s4xqLP(4YdkepumLw*OjGXPi3{wclVjqu@?OPW2V8$MxUdaY~ zs&Xh9y|2g=MzB%ysA+++%Hak&w@-+JUO}4Ji`|S7P2oVZE|KXCh6OoTPmy*JJmmA( zDpa8ShTv=Zo@hx^pq>vo+r|WbzCMwbb1r+YR5lEcI~E{@+E5N-03o`Z0v)$tB*39J zYGZLs*FwCfDeSD3Fn*2kigxfM1fT-R77iL}b9tISMU5n-%B&>@<|3z^hadYLl?K_r z{_M|b5L~tr#)aa7>iDydpuMg|-z`T+hz=(`(dF2lI#jHR&bX)!T3G-ouI~Wn8>dg{ zyQNw(hcV8`PZ;o~@GyPfBpG9xK!_Dg_McjAc%~d& zAe-h?Y-=fPSd<|Of{vevzj2ELXtUVAm4E;z9N(I-V%ny)tev+@_K0ZE$1{8l^4BAa zJZ{(FQ(r;>IQQVHyl)dp&rEwAUTunv%yH{AA}^1{w`^q9uu+$WEMvP{g*jP+#-f&Kx3&aH|gne_&QT!PSlPo3vbR;t* ztF(&2irsHhl~`XFww2NO$-td>*L}90f&N+COLJ6`{c0-=h|0*pL5q0(u+9Y&`x@?y z^S3ls_IoYDA}T!GMAkb+=ccS@5_ku9RGXN+W9XbCagj+XYMYGHSro9Hm^Qmp5ev~76mMMd-$difu_5yw( z11Tbje5>w0r6DdaoaA&|?Zy=6sTrkU4+-lWa)7$UY?(~hnF%S3DXcD^DC`Fxj2|7+ zZuza6OUJ0(1G@MBKp6I`b`GOhVFl4)xAsO`_`C`@sW+Oxzb zNPy=8tcpYsyw*{2xXsiknm9xHp~t2jzH^2><>GjOxH^GVZg51J6OPfEOE~3ukz`-7 zFSLPBp%Jc*b>3tdr85OMg>GXTR`^7iYmk%_?qe((MN1vXr6;Lrt^+oX@|?3UQ8Ryu zJ@+z&tfJ8{?HcWWtu0+-^KB?7&bmkS7ANwlTpNtK=7v4$YV)!u0%Lk~rH6-AE1K}? z{nsCJQ`llucd0C7bfJS4l8!4KmL?esHY`mebj9T0GpL`yOaOei_&ul!1+Dh=J;65$ zUS?k>pak>SlIaLDne`#JAIQuUkE;-&RgUn$r?HHVK{vaS^$m(r?H4I=*B*;u%?XDP zugX$YX=)+y?%DABI0zFETXfIP%;Mma{r0M7y zLEu%gTt>S4|_K= z5h1A+OqjPxBE?f0ea2msD5zl<0pHOM{vi5ED8I@k2FXZaCOGCr+0u6ac?Fi%3EQg* zb-g6)z?Rh@DYd;KW39`O+qp6bmXlND*S#3scbCZAnOTWMONG zLg<%Vs$kSWckY*2D0*vq%XCU9190L{D;tm|hh@kcb|w=i+N;{&ks@a(!Nfknud<_EmR1O&VxIH1 z&7JTE(Di~n@U6meB^`#R!UN6TYw~4Lnp7j|IR0lTOxw23w*81!ZfKIeNU{Ld0nc;4#r{aZ)2sbk{XpB&BBdMBF7@SX82AMS-%t+Je>8Lv9cq1T7TPYq2ay%6!w>6QuWN+K&|Fg0q2#D4(x7kivs z;__ROfIe9E`&a3TDQ}c?1bU~U2XR9DEu1^fiGwoXJ!iY2LkMSHLv#F@3~UXfAhpHQb1Tlm_*k$X=WAnKs5LmChS zNErwOef&*FR4T2m3&%zCutbBKSo)s#w1LhS=Vc{A3%tsUp=C?wC1`RLCZn9P*b!^P-J^KKBKOp`cKZVAQC%ENB2zow;7`x z0~Vnx0{@U}6_TT=b@zm6O3^pkC{HSG*JtUNQdJf3?EVYCPHvpnnivp!Vk3DX+%*yk#;fjxZco;J8*v zBxzOUrOEOBlsLuiQR8pkmro>67`ny2ITdqyfOUM1(PS6E_dg?$dKwMtZ6_zXYx+CO zxO}N%s(BA7_yyU{;oz|ARew6y!(T;5O(~FdKNk5`yM#}pg5iJyj7g%I@-3kj?%(-_ zsn8dJl}(vvghhn$YkryROzsuIWrg5EuC~U6N>aq_X|)4=&b;)3&y5rV(FKo{wG!9Sn(0wR$93=!)u9p>jc9QR}^n_XC>HD3jQCy<*-I z-sE-2Ln=3kZTXZI6$fL_c<->Jw~CykJUcH6mL^u5^)=HpGTl}Y?LDY6k>EF-{!LMj zGLDY13b+p~2OReG?#C4dkZ&W1sV%EnZ6N5J*BacswY|LM>+Adu9tsi}&W{C7o7bIe zq{5o>j906GMW+=*Aa0#>RWt|);fw; zU^#iBc|;xnqm)eB#NFn>_^P30fUs}!By4}H7*bIii)^EA>vhHDj~)eKWhg|uVq@0^ z8d~tLijF7chUXwN0HEYx)xwk_o2^2!g^Ig)MqI};-^xph+}cG7_V^K0w>NjCCo5%i zBw?>c?*H#^_~cKhRF^vp2G3L9ZAtT8WZ%T>(VNG*g z@r3Pxz%!S~eudcPfrdV%yu08hgPA>O%-peA&Fu=%rIW|^gB!29EPs#`4uzNgTEA0^c#>im@-*F_Nd-!M@cES(*$>;7LOMj-&Fr8P*lk={&KPfb?TE?rbz-$dS&bhKIO znHp{FC|COWV;NU#KAW4{KZAR1+@(N~0TaQmdjO9Mk+J}c(wK%b1EZ5v)33DdaiU#z z(T=MCZ0qsnkejH-sm>SSP{YnwC=_`E>Mg3%4iTahRj=;s?2NkXy^$VsWKn_y=vwzM zTfafKN=hj7_%52p_QgINoDlFl`4mTh#vyqZu$kugkP7?H2;emj{d|2alE*qnqyg%;<#X@vLm%pl~R*TO6wf z)%bPT^%Y|{EHLI7`>NhmC)MexrLF=9Qjo(xeM^9^C!ENEtwpRCPWgkSr0=J+r_r_PPgft zNsVF2;m62fI}neRZUbt<)DChV9m}KGY5xI!*Ex2*Nx^!S#qCZCD(8O=2p;{1d}Hp> zIh!6*Gsu)gZ+7$)y&`2OReNc>Xa#zDfa!td6CVMUvP_#V#mO_vl14RYUzEn}V=dwb zlFn;&lBM7ha5-kux?nzDctqs5 z>7(UPRKJ+>s88WVtzaH@0k|AWnAX;!9RTd$%%u~c0U^~FheQ}|dQ~R|gBX84v3KMd ziEM(ev;CdBSxgS?N~^9N24Ib^8Pd~S=pRG=&^$1^=gv_% zQx2SXRo(%J&TiR0`5a*6?Apv7^p>=f?L%3*L)B#*`V%$_V#h zlv6~bafhz&l;Wrw^GA-eg1J6oaT8Kw8MY zv!}3+TrLn4M-r@Dj&2w226GLS)znmqji2p2#l(ItA-uBucvoGSkmbQ~H%n`3rjrbZ zVm69cKT^;c&C3y-hy(B|BHTt=WSg;%^YHSJFNToHM+cm-R!9pSPSeIXXElisI|yAn zP$6O_wEIA8wh8AQ!U=VOS>`ZEe+#VV%rD9;A`JLzb?%+d`JzBD167B2^^-Cq<~CxZ zw#W@%ym#EfhaSfAP-8KDoPy(T&JBzu>VMz zhtidgz1x+DE187nV+JC)zbDj5qC!3(ePe}sN}kOD35AWyVS_s-hN@JW#!2a_4|(T62?nMI02cEAw^yN0_Qc{Eh4{NLtNE|drJ<(v`5xe}!y2NPQM z;a;Aou>J=F5vWupxO<76gJwRngM+)O&2P!Bo*>ME(85Em%^6=~)w@Iy8NN_32rk2Lv zw>Pv+D|IX{+NEB!ve z_>#9E)1<2@x8En*aLW+ed)f!!p-rg_Wv%2XYR}&!J$9rEo1R;wW*6k} zOUW$Y$m3}na2)cSY2qKWKKuYIgpMNH%n?I0`{swFJ$DuUz=x}`(e4(_J zCD&~vQa_ixaI?4zRPB!&u};!aZq6uo*A z&kQ0na-ztE$!GQpI8D_5a@1=YfFsUU9OJvLH7l||w=b6mRO6;cKo~$IB3YVDt@gRtiZ9D9$WT9J3do=Fq zj7}D#oQ=i^3*5;LCMZ7S0(2=?xdPk@`9|K@-i2ENIZnd6tG!}@wx46=K|97qPkrru z6(cq0KElynIA^8!H-9xNq)QyH8m0GDkY*3)ZrW^Z8;sz! zth<~zdsndv+{6YNq2nMwwz>3WgTVfYe^tlfrruYwy|QRPwZw>)N4B-hsf|DIULc}r z=r(C&IQ&2KpesbY_TB_a_ctq~=n*|a{ml+ykZ<6)^C%;Ie4M^PH$)%k!fdU%)k5*^ zLlyD_Uqc3}%+vBVD|x@mV!54yrn>g)kt;_ z?b)h*iThw#laFYYfd)plb~MMgZt_uP{%YPyNU?RIX@RAYPyCY8zs_<3^^uLB8!0|8 z0w!W%B{n${H;GRcLE)3I{8-8OtX-?y4s(bI!#9;Go6TO=1D{&*IyP6HDvUmre= zJW7?}ad8u-JmjSc$-Bnh06clEUTO|Ef61@@TwX4v69R-ei95KKx4-P<$4)G&{hO-3 zoL!IOLafKE1>(5>l#f1{+piRHpGUA<=R*~Ec-XUnNgw0<3Pu{`3EE1k-=4u_2^gSh z6&A2d!0beorrUXBm&lpswM*61|;k zbdfNZlG%HyHYrZ?c!R-aA`*~BMh3e>PGr;5?v5#0!DC5C_C>3gfOAt(=X-lLalS{Vh^}Lb=V4?H;a+P_oh>2YZB>pQp`pp2FQc=YW ze3M?g9>CI>bbklSQ=@gLg%M7jl1B;a3_Gm0-l+luCq+69FlQaOHzmua%~p!_%flVjP^KE zvTT^qX*ACy$X+m!V^>;W=DabQQ>AhockbKaw7qa&6Kc{dUCrsaW?;7864dvnE~b$> z!B;%lHTB-%8H`}UtFa@m?8)JBnpH-RzKHc;7n2zEc#Uh{duLitjzOcG2If9J?Wiq7Yxhr}c2yr_O=YtKiy9t?2G}~)$zD6o z;ILe7@ud%tthDVSq1U>GCBzHHQa_=&@|9gyl6z{EIEh|lh&v}=-GgarBNQ!r>3B@e>M?+Ng_ZCSJr|V1;I4~ zPY`jDJUY>(`s<{N(n-K#**xu7g9VFV&+)4=43INHyv5pg8Nw1j%udw!QTlRIq z)^ERiGwEzE8P3iy08l)9Q{=YmoeqjoffKvQzMNGh$e!^vgbI3kQG9fdHCO^DX-%Er z?J{?&6?rZ;tS4Yz|F|LRIpyg6UXXsAhx$ecQLG>1E(DbI6g!#Izp!2wY`ds2@l+8I*D_0irA|dq8O<#ml-VB2!ElL)CWW% z>7&<-cg?taIivMrUf58WXPSZ%qYIV*pN`t7JDH7l0r20xzTq17<;iE^E;dWvftGA@ z5e4;}C@h;4>2Pn-(UbyxMKsyky43@1`5mS(M?{-n%k4ODGszV=u;$b(FGk3R+;M8S z*yxE38^C_5!AnIHIp9isET(5)N4*>C>$d>zO+=sWJBJccQ&Ym$K#{hzB#3b%`F`%R zFP`iw48;7%DH>04Zbq2GeBw_izt3laPk(5}=}2yCFPL!JzgK?K+DMB~cp^aIS0P(s z!X62WV64BdDaprH6xg1=Xmx^b8W(r2Ef=B0GlPiR+|(RLOqm!m`Kq;|%n?7z8!<`_ zol+U62@GA%uCkWz0saf@n+!C2Zpq`EcQ;rRUcOdT&wFQ7wf1E-*@G>dvWQ9Q5t<8n zhoT>za!Zt(KTBB%H3pE!hIXk zMm>Eo!TNz9ujUaU+4h~Zs8XIf4<|b*W(f(~Q3dYYlSG&}c20>(oC;(R1RREC;oRk( zKq7@MdO0PJ+1qbV#@EVK_7@~LUF{^9GQJfRM10xY?4CC>svl7jkpjZv2#EHc_H9kM9g*u~P))h!(D**^(v6bpp3S1gO%S?}xT|ky&XH z5T)X-fW#O5%$nxW?ShX$oms2aOD=lMOlV}Kb>i-6mEtsZn!^y+KGT55%Yn0N8s>ne z`9|&zg1LEz36xuk4aE5_Av2Nf0F2>XrIO{g8tvpb!n|s^-`~r&aQjp=$<7wnO&;7@ zXcy>dkw2NtbtH!04C&9*sPND_F*;35EqcM)axq&N#M|5G{l`mq@G=i(kd<(nj5ZTT zaVT-?zKR7b6#vU|&ow!NpyL&~Y}MOj@Y`I|6}xvJ4fXtO9%cUnzbc z%z3lRTNeRsIv@8!6WWD3KxQ#G70uJ0%2XYMWdTC@`XraW;6{l(;HUytNz`DTTP@!p z24#V4&Hir`TZni=Z8kv%tt}0d?v7G}_pJI<4MIKhM)FO6fSrLtnRV2L$i$aY_&A=N zm17->l~6kLqNz91<^BP9Is|6cT|A}%{2F2QtKtp-*VAQBOmtA(C1WgKJX*<53A?~h zWTRLN&?q$OF#`J7SD>t{4J66!R3aSKXidS6pw&1N2CscG4BGje@~Szn^iXOI zcEoMCwt7@q3ygQP7yna_kA{VSVCxAV?$hwf8tQ&_*MR<>X{eTi)2)9tcJwZTnsTuS4BUM>Je4mD*;|xMt(?kax23Ioe?#3YC2kV}BQr73rmt5r;in;bbs* z*1D<$zB;TGoodzDPdi3Cr}NI5U0T<|l^Jff;#{o83n}fkzuvJPj)8=$ z`O7XhTxWzm{*s`(y+p~Us@ba9XSpqZ4s#F1gyNoGzg7?C4Ig1rN(_<2bQ>6S25=1O6AHcD=!E&~#5 zVyv`f6MDp*N>X{zFgdGAqrw!`Xt64Esod;QUk}aLWWi!ws-J+2Hka!mAGOiPLr9l~ zn<93lq++D|na}84Qeg@zJRT?&qEL+~x}+v>Rev+RNrObT>9BwYd3oxG z!+WP3^6*M`w)*ph0w5LqdC#UokEy{y=Dm&O&`z66S$HUNR*ET4f(#p_%BLNqs#1UN4e~`F($B*#y6{ZO+X^~$|Av3 zavNHX(_+e$muLq2Dx%3=O3Ysg%af+k6v?|nEwzS%>P%AmhfOAI?BE5@LNrf~HmWcAwW@f+TMv3s9Qs*sS54KemD_!t74ZaA z)K}zqplW(9cSGcOPPv;C>Y%~}#&2Ut1%miC-dw&v0CjXZxDd5B2BK;t5SX0pwvjzB za+6OJ$rtL^ZZ^ekw2|RRvW51Zwu0I35UKXdP2*|1Yu^2j96W?X#d3E{aGYi^?nJaU zc`XBp@={5<*e<2bY8Owc3|zL5>k&y z^%KYEgUo>#Q*N((CQjQC$^jD}wzSqv8c4CXz*M|PcL5p6U0?ntHF{tpC(TD8@b)x! z>vS^;CZ#cUHXZiz?dhxVB$Hc9JfpZkVxQA|Az73N>@-?z7ZbQZng^0vcmtOD9{PCH z%aGz)PH8V2=lZ|eG^XZ2J}<7GRwCPM)3BS3|Ew(c8Bd%kN2a~j5(Ck?)}EIi$|HG_ ztKQg1nf2Eod+n)>fJv`=N@a;f!MmKC^E$^V&|OdCy#|xy9AZpm5%T7(_dXnug0KlK z@6)&Uby6*atoYQY8;mw?Xf1)=+=l;#NN5gn7BimT$geNgW!#|9S?jTfqQG>AH_^?B zlw>Pt&E&|bb!F1TK;e+^w&$-dEp4az zY1F7Udma$+PiLAEZTlF5O9qBkwv(4CDtN`Uyt!t1^7NfD_pCT}zG|2EQkjjU1BzSs zGKES`degG7?sdz^N17VIhDIA$FF|~f_#YTEoricQ5{_F|cBc?E)Nxqk-T2>-#d2>V zN>KSg#O6FKK4a7QixK9uvL%3cEew8ds;p3KaN|ws8=}Rm^NvQ+c;`mt;=4GD)(iwV z50#aUm!s^qX@8lTIOrr}quRz9`I}eSNNu4&5RetFi@s_-Mn)NKr?olkl2@5cJZC5O z5;_<|u|e}HTrg2RRM2VN`$9;O0K*5Bw-C=KVg$b9{JZsamUdpeME>pu&WRqGHek6* zk%(w94QqM3(Lq0L>GxHn{NzIjtkz7#12+bTEMAR{-&I?oD2pp?)(=Z(opQbz)D@ZZ0G@j2U{R+=_wy^@%o z?9%eR6SX|x^lD|=Fh(zb%LXA$0Xe_Bx3@}^|09Y&N0N3ge6+1gF$DKkpb;l;KA;^1 zD#nylgn+)~GD&mx>7c?AIMor0#Ww#`#Ucxu^ot1?c22+;ud5XIa0{vLz6~ZKSSL(u zU1gB@Ev5btQ%_KhD>RU;cFKJq?4R`hR`%D@eY(AnBSGk>`*aCjNVc|tXNr(Zay!R6 zb@lzE+N_wXkh4ep34D7JLQSnxh)1d6>{Fik*Cz9z&aThax%}kHZ9+nRcRmk&V|u<& zwy3r-qmy94Ud1fb`>VxZd;VE5C)j$PVqbgY>GH^w7Vy6!*mzptxaLKe95iVU>R_`m zi#zGpETUtsAn`$%`YFoEc%q{EwDArQ+c{7)S%-#y9)DvtQfkHRAw@t%Z8Hqy_QkkB zFeqk*rSjLir75}&Gh;%K%eI*k1!3m&ByfA01gMCrEtoLrxTFz*JUo2dF+R0r3*YrsM>c&fTuZ1}--9;1uSH#@;6gi^Ql~rJ|LlKs7EOOux)=%_S5Cf<;*$S=%&Lr|z?ih1Xe3U>t!(eyh2=WVr z|BsswX~-AWpMnjB;$hOH|Fl6U1!=Vbg_*Qggq4e^f}fSYu`!4dS7f~nml4ojL-ySsEi_X6cuFB@OEEtvPQKi%z)13 zk&s4IV->J^%o`a3uAt?D=qNr|aTS1h@N%O>c}qp82;Ja$r7J1>u77YjUSWvOq4rYv zUQCWwI-uw(cjX?drZo5{I(L{pan3dSaSIYdBMv-;fz^|`vq$k=z^KGqlVu=istZ1x zzN);E8|?n=Zy?p=@hrCFegNB_n3@(Ch$IGNkH?KG-na3_MsFZ4PRvv1nn10oE{RTs z$Jlc0jlz&wM`+Zi^KtZz(|}xu&F zFWQA1`d~^Tgq+UGQIRvC*E6UD<1}2Y!Lm58ex@-cI#Sh5K#`~r?gsr+h%t;sVT!m8 z)_Fgn+2N8pv<<{Cc07&nvoOw$qAS#= z1OlJMjS4-Fv)Nf>wntoh170elrw`l=!HHh$F%TC6M;zh#R?r`{29>`iG>CJ}ff&8u zafkggMrrlCasX7_sYXus#qYF@PK4^#XV0jgT7iT`&ZmxG=u1e02l_U0(lxCi@6kov z>y|uBgUp)b($=45CZZ`sF73da9^lR1<(k${Skm)}o6Kinh+8uzX^$}t>RfjMsIhD@ zh59${icrKw7#WAZ`vO~T)Uu4fz(3z5^ILW%@Mx%UF6uGa&TA9fNQ$u=irQ*AoPmj6 ztz7V>-K1=SbM`xQcD#B>x|@Bj{sj>F1UZuz*cQ77izGDpaj2744o9XsBTyJlOH66l6^Oc3=OG~uE^3jq>o&5 z^IkB-%gV#A{K5eLKLEgf%7c1K6_6cG`<@tLfdG+87y|bJsj34~L8F4a(jy5+TAOjp zW>wZAQn(nP1`1s^y0Aay9@7|m5IRkR!+T_YJdixr!{>R?QWG#a?1heIX!zoL#2gqA zW_pyNZWLPHA}h!|I=*Rvg5)#$$t(^H?uorLKZ&DZ%On)zQS)4J8hx5PH|@p4@B(_I zq0XF(hi?$$hX7ISkbFEVSi+ZuF@Il7+SQHPo0GQW_5G4-i&pey!T?*=NW)+^-qSDg z;IFm7l`#_yYta&-i}ZlbBboM~@lN>BBJ?TS^)L(MR{aPki@f|#vjYt?F6S*hy?B-u znfq>o{yWpKjM{2uD+KF-rhgs=nxHyRu?9iA8H*S)%ukGUuSz^PN{ymVj;7LidO)&m zW(XLvVAywPn4y{rhcY19R0n#=F%UIHBCq;eN_Y}3(QF}_%G9h_kt5Li`KqWq*K8t) zo~NZOY@6^?moF0!#3PuZv$dgl}dBOFXz}Uey-_bSZ5>(b}hT+)3{sXi3qAyuUj$7PE94~{xQg?*6>wQES zXxF__lo*n4LJ-?WxOOo+$B?>gCeeAcu3cC3rvkCLIpyaVYs3D&P~SSDe7Lt-Mt!dQ zHJifGB)5YY<|2d-k<67Cja8;jwZ!7PbJ{L;32|ipgPAzFDZ`K7LsykZF^KDaKk%E+ zn*t*2WPk^&cI=cR#4n`{rFt;5a=}0lzfP>doWka^6+`SZr16j77krmnMR9paE*-nK zyGVD$lg}Q$(ojm~FRvRMFw$P8i{sCnNCp8TdZ4c0coX~qf8KcFE2_-iEnc2yZL9DK zxc3Y>#G!KS_6heicYItyY)QXH@+!2ekf%I6Kjodigz{bBFAh5E=0<@QOhMH;F~@za z76EQC2cM^rVz+--61UFMj=8oOgi4ClJ4Pv&aYmgd2LV^3b9CNeTr zUz~6X#-jXbiS|i39mlH-mxvJ%?p;7E^s1tq+*+(}7#5NBaG|x@ve@>BX{eXgGN)a8 z0NTSwhK-5U7vB@yxjmO4qyG!cxCjHFEaJiyI*gj;B#-3~do`$u1M4*Lcw^oW3<*bH zm&P$x9arZrg-U%`&6p)A;3{trVCipxEBQZhyYkJ0L*@!9!Xw>y(;Md2{P=D~V6Y7K z5l4?QC9jr#ShU2-O0~qlL-2Q}>R61IMZNTK)*KwRso$FmFfoblF6nNn7tw?{M@5>D z>| zS$-Cvz3VXJ*+gi*%?Y_u9{KZ_aVDb%niIb#AHqW!&5l7%s=!Ai7e`c`w~f8n=H(06 z!xgSWSRNHT;I}83N4iEE)Yzh$ZR0cX_diLv{GfABjT72dj6@SUT$_de3)=9mY3)e@ zYq0X20mG5l9?l*NZ(h2ryOEkf{~hY|G0!~eQ2waie{eO!;HgKA-MCeVk`&~m#-<n~ZT z0Yjf5womRBf+5m-?#BDnfoBEJS|S>n3f9B&_wV!R4<+QuwcLQM;xc$=gpep0j1vq# zskPX&84o0_*#YBf;>T#?vaEiTiQ+07J>7(~sqHg7F9FU%8EIq=jp?Q| z=L|#IxrC)2^PO0CV~2%OP-;n96MfMxNd2p&E>Kw;srFlULxi56G-7&J_1jnIRYD2N z@VHwdBf3duWtzIF{9+Bw$bv8jLR-!dytXAX8L2oREX$_BGjb|wtjFyjKESp@nQ(s3 zM0R*fsB?Ig5y*bC2x+1J_*USxH02~>H)-9Ioc4GHkagaaJJ6X2L|ylNnC99nts(Wj z_GZ_AxK!=HTci20qT1idRC!Iqm{=T4sQ{f%(jmnBdXzR$7>uFEfT2y5=_$rBr;qAx zF0r4ehPcf`5;virUmU5QnJ=F+#FDjez2aN=(y-*Z$`J3QE{2--@Ry3|KJ_nO+*Cxb%2@n`NL(eIrBSeg(i4TCe? zp!+)H1^y^ZY%5D`Fro2_ZYWNfI5V;K1f^O0vU54Y+unM8o4T&C+0;{gSRlL3yxtbX z3K?Pz9|a_nX^YH2csU!Wuk%uJ5wV;lNc?k+%HvQtErqZb*atnu0hzek@e8_-NwK;< ztK*$UB~=k94Ax`_?MF$9X4B;EgMrwJnXRd3h4pb>pnkfRrUfELb|0`rD7xE8hNU*B z!Y?2ZBK+y2{?u0pCq6=|afLhSW>_D_j|ww;NqQ?-8U^|0mdC}vgf1H!&OS2UCFd2ENw zL*D-Bk1aC+ezQou4=kAJi{mg1hjEEmm7U&jR}Jo&+WIPG+)-t@i&`@zOeJTjzAAEz znhr4RhvnuYsy0E;KVstvk)-x8lo?5C15Mgkz%gfKV8n;61Nua21s}HakjhB2Me~L>_erES3;KDgWZn&i0 z6&C-eKwn5C;MLn!;B*TTs00P>oj*D6 zbx&_r78Q`5&^wJ(XCvMRU`Y#6KUGq8psIasTv`{m5lIKmiWOXn)HpPND71;cMN@~6*QhI8VG_Mh_SdKwZ^{{e$qba(ebgVSD zJLLE^AH9^HLZUH44}tF~)5%U_HCB(XVUyltrx<N7orZ3!}{PPg0i@w&PB7uL{N79 zi+pkD-{VoYMPqonAK_&ysg;9}SLo0XbJCAoxAHA@ypp%w?X1UmCARGcrYYywLSs$I zvS^Vz z;sZ&k4h%67kwT9gKN8HwhM^}=ULnW7YL%M4B#5x_JwcrvuAC44y!HN0hlAr&p+)Gt+x`Hi5#P}hp*HWINFZKs!-4# z=*XnWie8TA!NTus?4mSo>zbd&Y8T-)=9&5lG+*J(?l7jq0qQOR0msNB_5E;JBk2Jp zqb~8HhR-GYyzW=EY^1pDKVg{Jr`hg*6*rOIcWE&6MSTcU^Uk#$^kzXEaTfWD zfqg}ksFY!pbE(bbEPDkb`H?O1(w)n1tu>13Q*$GZwH$&>D`YZ#1rnCNk#1>=M4EO1xw%=7Qpa{QVoAR^I z^|Eq$mSw%@bI$Gdu{PH5OPXQ942$K2pZ^1I)jHOv&*8Ey$f!R!qX`C*se>~zvA^S& zPT6ZUR{!!MM++N}CG?_-x0#=9;39R5yL4iyMm`xWH6zI)aB(_}S}kMNcggz(oPYMe zIE;Z6J9n0804uWJv7o5fgjsBLBQuT`=Y(s1Wj0QWE_(#?ZV}-2Wzw}7ytVN=5)ZfP zb~9<}kSHTFZ&?*QT@gU+Qg^#R)B&c{qDNEZGW1q2VQoDwq(^nTQ$z%2oLsk-IWBn| z%>^8GzN3rS8^8!fMHqvU%Ud60OnbU*r6m`5EX~$$OE5~6XkMn@Yxb^S!Z^oO#jWNO z1P_c+SgJ>u>=t5WNds-HifdZ{f7o2wZsq-H`0s7M-GA6hc_&Ds{Kvg&LG5ZsMqyd( zC)ZH^sXm*%n7|6n)VpPvXI|otQlZ1QqY87f-~t^snM2RmQXI*TR}tR$`o7t{oQ4xK z)h502AXK%0?&myfbxG=J>g=#0`bKrt0vE+w%$7sa*x%m?<{@4>4^5OJdaleZB{X?g zOdaGHW}n&%2@FHWofi|n5jfQ5iy9~&2%Y4DMI%OMiH#w-z=&VK^ikv-d96qM3@`?##P1K;Je3H265Fh%>6PE|twlrmlpgQ6I-Twtr zIB`wkCM$~=Xqi3f&a;iQYcZ1s`8Q^M4G6J}z<-E42G_2&CM1iNghs|fh-Iv$FwoP6 z`sW)17|+I{JCk z|8fM@h9BgVTQqQ6`)&f`iM9qD7M3;2LK_~UO9>rF{5etN$wf=Z*!TxQQ9h5na?2m# zrQUpf0TsJGy2BcuLgd-CegvsZb#UG4aAdfMI>F<860`9!epxaEk$?Hk-o?XJam z?gHljBV;&XS{XqY(TD!}BSNNtW!;7|P>{~uj0+jwidpukYJj74k@@OnuMKYFx?q>$ zR!=()uBd7P`NePbPQ_Aq^Em^g!768rOn_0O_qh-7Rc2c=To(R#`HyZHWT07M=4Shy zm41^#>69;)BTOln`KSCSeZ?Nj-~RT5_K3# zzM3{1{YSb6@n~R5QJJwjsvml6*14;Vl-!2JX~qLe76{Fv7zJ5wuqwe09)zsYU^ajn zGczhBH}+yH?6UhoL&_bV3c}B$_@#lqk=ECydRyF@GK|8y%qbmq3XX+}0U_7i9gI0ufj=4l#>QDWKk z)VAOzOYe=;2b_Tk$xmFytQ99Hdr@TrHms^bF9!DgCr<4N#SenDkPdkEpa?D%2rY94 zsiTrNYq>z;McBCzLt7ZiMLH5yrjQ-SwvdJ}$L5BZ6oSC1opMqVMjcbe}+o)Jq#T;wbgmj+CtsnhRXwx$dZFUaUKw;E0Xw>&w?L4 zY2W(OPjJ!mz0a5MxeANS@yMhYol$yKQ}T+=>};CTN%M~zur)tDE~~RI$0*WH)8uTI z^skB9$WYxLJBd5-aMXb1Ls5Ytwe5_ya8$8PUqf!YW-;Ave>JGxvFU`X9tX00l@tt7 zh5(2nQzCP+pNAsN1`-P~!7#HfN*4gSJ(tQB!kY40+gT?eFin#i6Ys*#@7pzM+OgZ==`5eg93I7wr zJCKwnQPczu>GSlk*@uF5GL%xV0;YvJ#G;q|CxC5K`2dEsRC5;RhjZ@|A&l+@>=$#> zx*Z(>gU^1ItY7}C&Uh{5{+d)yBxkBXB|2!{*MuqRsAc|Su)~x1P-E{s3C$H@FMcal zmLBBm=jfU)x6vI{mPrx_FJU?7t&_z&fl@MvkK-FgdNTIS@T^t>Rgp^t-mAH-JgS1} z6D*`@g*tQlH}#tBQ40OFqw!_Yd`Zlvwj6vQXL;a9J2U-8)D+;yaQFgEzKP1294!TpP|g=k+{Bm5cTrke~*T<<|}n3im7K}}FEN^>CD>JwUp8mapP@q_W;zNuky&|d5c5q*S| zm}tvsw|zfS9{=A3#L#>(z!;nd)AvufgIPP);l@6ZTZ4Ckv6Bj*zbCgM27*4F9`%d> zBb;|qCjV=5gm7-esqg>rOfhLSk7{Kp!mQv;9`r8r8=z>`IRyJAxM8-p!0$EZ9gyz- z|5dYayFg>}t2xqRu&qq?~H_-&q0s9=61kruQ3#27GU^|Z4xHsD@3wn7GRI*(+ zur{1QaJp^lRp`m=>15gv23d%|)78iVMdu{P)?+520P7er8(>D1%fWn$wZ+Fyhk$-z zAdO`*u85E5)Y?O>9TsrbG0HZ_;on+La~MP0LPKU)6gNCQaxCyyE{bjS`Asz4@#V^T zcbZrE*JyS8eyn}c0?x`&kM{9J^(FW!VhIoeXeZlO=JlEXQxo4Y%i1kRnB*;A&$!--QluIsq9|1;jfpr_$lQmJ z)TF2a9IW?Fc7rQ4`KnfXW5Jts)q&{O*(@#4Z#l=4oSz~oO%hS0rlHRRu}BvZ-5)nx zGODA1n#o*Obt)ROQB`O}n8b;JGYA~ZY8nV>@gX_OEu~dMBJHLv*x{bXnh3HsRPo`+ z;BUrQjZuO>>4J;?cihDSS}BV!18KytT+aGtDV{$}K{J1gT$cnt{Vpd`Qe|4GV-ME6 zwoij(wRvYxag$O)=?tB{)P&mvoO#o{*C|E>OnMx!Cc>v3yn?Ys43Gl*_)1Kplu6N% z>*Z>+NUQFsi4ld@Y^;+>>`L|axMg)WWu zalHzxh7|^rw1HKOiMz>*dRoC>!z4>#N~q(e+?>+sZg#s5y?j155B8=gxaeLK3yWZB zB{A+O9FD1%%*0oklvlFkxv-RR6_$v)g!GE(7lQSBJFP|Vo*IrRg*CjK`+5e3EWxN0 zp{;z^6-1y&_nPH0rp;|xRH|lUq}2oE0N_F4GyipX#z{)L2mkb~BJ-QkQQyv1(qf2; zeWP_;*yK$7ni~5N9s+164U3NiY5c`lM zu)oFRLnb~qlC2@$ii~AKMhhFvWZMfcOf9uGJmpXR8W@9|?>KX8OlgI-sr`-bPQAdA zq-G&f1gQT-l&~7+>Pc7+?i)uquWygn2vwgk&}GdP%y0d=Vrv9?XQv%8gUVtBOxRw_ z3SHZ3`u<{fGvXpfvJT<0@5P3S;>(?sdg-40j3mE;9`oQ5K_N&1wk3YxTUe!}JF$$} zC%qPPv}JN+>Y4~zx6<)@!*bhWabWK&pK@YaItI!8mAVJOmZvUhc$R>%^ zovnLD6zBT6gd#K^II1%NwOcJZk`ZkJ3}diIoigT>q#CuPv-%{PGK~fTq9I|7&j(60 zHM^HLWKtyZ3`zDUTY^s3C_ub*(2ahpG4c>o_fURT^3`pS*>i%*yjU*k^rlxiIm17#x!xx(jFLdc}`%}t$7R)R7uQG74m6ERGX3v#6V!ix@!iJ)(d)Vyk-BI3jnRI#0^?4iU7U{Q>Mtf;m zto2`9f5(BG*HV6*kxiluwG3;y!Cs=%L)QRc-6s6n0(Nf>#}okrOSO16ionR5BO6oq z{0lYa4BKUeagrI|!aUq|k3ewkUqDk4%>X$%2cRkh)_El133OajgKYS>IY)I?5iitA zJFA!$`8fj4_acZqe6>r61LM}ZUex#$QjM8PR{9Y`C;&SBiVX(R|61CjguHV!75spB z|EDsLywK+3aR1wseP$hG;pM0kyq=e3UTc5I$6OP@uNz7bzE&MloxX#6XN5|U4l4XDshN3IqB#TS*u(Mt#hn>jtODo+f` z><_>>FJjkDlf_kjMN+egq=4C5qFirPimW6|CT&A*3M#N$#*=^y>;d1Wa|H)mrr^8% zLxJ_$mt*Jz!y`{M$d6<50Hl~4qRnEEl0k{Ra~~4EJ8kc9e-+5oBZODdsgHk~D);gP z@3Tl;DXCkHDdzlhNM83m6S5nXjdWo6#LPpLDKDrciGjzo|DQlN+)B%L_m|mAyIAC? zwk(5j@Gm!HCcBp~M+z$HHv6eJC(-PkBo#Q6^Y1VRZ#*{Mb??3uw;e!yK(xB|n@A!c z7lQ>jId~$-ZLJnbwS;8tcTcBSOCx=_!iL6M9?uYO?J9@3XY)BX;EX|1hIcuEm{L}v zV`e!m;v)9tXZ}qI)oi6X=7(#T%)LYT^RYIU`(LeO?U_4wkF73D^u76={m&pZ2>GNy zFUQ4fzE}q$hd*k{vZs8f_}M{&iI2ZERrrgWJC860INb$_0lgSohU&RaTxMPdJZRMJ z%K02$C`cnf!d{*)g5mlXx@BfMQU2UumwXu;JMwGWHm4(eYFhFF6Od&F>36k; z?DxgD2u6*L)-zF|!Nl$Z4_9nfjqnw&(!%)Y#Cb|C5sj%Uj)J0y!V!+^0s%izXrzwv zX-;vAH{1f)BU zFd1qgq!_u#bu#YCvymdwNcF0)?*7PTEY+}`LXik{@+9r~81~kdE>t}+GX+Z5QK?cA zSc*SfAYn_21v{K;3dy%`T&eI~0x&WiWXl~lOzF62bN~8l(ZY0}la}JkGX{mY-3(^R zfiO51A+(w3?N#qaOF~H9^JVpkm=t9M?3X(pj6-#!^9%n?s*PZ3r+AaM4mNGYu0CDw zk=(+U8Ny#-#=qQ~{Y0mc@5N|X2>q}IVV>F36Fgcd?rB3)-;zKLJg1$36ToE}ugW>K{ zWr_z%MnH{KJk7Vwlzem%cNcbIW#Osrr9~ybp*XrH75jASi1k&}*iQH!~tX+6OW9rr5qx=>sP^ipa7ZXz)sZmuk4IbQ#g`Ai41ptIyWouq zf+UTCOp-795E>@MR;tI|%LUySX9 zmajG~?4DV4~1fJT{!>Kitse-A!>@G1TXdfqU>L4X*=riet#~px* z{fWJrV?`?(dDT!6R!Fm3?3jqbH$9)nb%s0Uj;O9vZi=6ZmKvBdYfP5uxdhv)?=ad< z5snqw_mr}zQY>5HBMWP2!;D{C{#+8h2FyRd)&!3|AWd1OtcRx&fOOL9?}`wGd&lo| z_BwV?+M8u}YXqFkraR`3@JNcxXSS$h5iUt9PRa;m#$he&(y_ihCsPr7}l6;IJgZ6~!Y>xT`b3oawC$YdXwEV9X$5qem?i37`JoS0Y zfRU%3r@5yg8a2E?_DD(?-uxU2If}7t@6D3QGpKXKffi=AW*7IkAM-F8y#M$B31&A#Eh^~A)WDYQ9PO`WM z-*XZP#hAYWe(7jH(#(j$(-LszmfC&c*xXXvMeqeD#rJOO0e@$}mt4r=i3`VayvX>k z9S|i>+k(F1IqYhI!!mGdB2Bs73p9P?{{;v)Ow7#?&VBD5+3u)`k*yHTqU=~L)`#<- zq$p6`>q1`}%g(>KHzpQ+u&CMf-a*6vq?~(`M=#-gmh>7NL17@=jjd?(i=`EvU=oJ> zEe;xQp2RYE0P!zsTow|;rj=%IL~7`We;Co3XrnQW(c%l!|S3#^tB#{L(N|FErHmwlQu`&;6e!H6gFV|+UcobcOptS{UCbd z;JyS#wNINK4Yyfm)D7i&X4K@ILTChc8gDX?$}e=ga>?+cJI~%Wqt_CLlZ1^VM`(j` zXRpD?Wkl}XZ+oSVbu%OY@X7C}1F%S7WwxA@0b4G-^gC0=SDXxZfuuxxo2Tn*N6Wpa zF7bsE68Jd(Z7>^O)WaZ02J2{bBU?&R#m1q?oB7rZ$5nWaGSA7|<+olgq7)d+YM25+ zM``!mO5Mjv3gaZAzv4V&;ax|CkeEZsWQGj?%^83q28Jaw8HW_Id7k0!zdxEWa}8Aq zMz}f$Q2wswR!{@Sx%{!6vxFH)!Hf1$Y^5UZ>$WcjV8@=z$u68(eV|o82QYdC-f+{F z3m+c#I!oFFcZ!2#zq1^11Km${Hw`~e-Gc-j$2^@-giRvI^T60qh`GOy-`)5QN#w#w z>|v|dq=QUHNXT3HeaYt*Os+*ZQHmHw+?q&6B7#c9V<{Ao-0K~3${cLekzn20JVYU< ze;;lsF+CS@Q&bCnQ#yabtH+$?oyQt0ZNzoftQOf+#l8muVNLtb!@^r^Og&rt8@BZs zjzUp`O$L$AsG;@RivLw3S!52tN(fGsxVzzPzL=gsxMj11E##{&23c3O(0W>1NpwU1 zD5;;vQ&>Gu;)(-}Tj5}@xjC%?zoO%rl8biY;`~lpdX$}&67qydbx575>?Q7*+wZ*}&v(=J$ivT;Ht)U(a3cX{7wtZ-_mQxH)C zsx%nADiXhv2F2gD0Ym}%P1n$2r)##)5m+De5O7-UT5=81wfWrrG%o8~nWYLMSH%Ov zb2_N>k)IkOFv9#$87}epbp%DvRInM#Yd(;XUf-rGx^W}UHPXMY1T4@4K0&o)-QnxM z6P-oms8RT4Cegt#-tPYRLMD_A1qFm6&sTY8-h}L>0y^~_ITs<2ALL!vKKZohkDBdKTm*|u|}UrKER6ws|Hod3t@7pi0^*@I40>5i#l*{WY?7JyRF_b8+D| z(JWvJj05OddRDsjMb|0@sxXg_Vbnn-qv;y*F%Z<+^F}7nY^DtQ)}(yAN$SIJks{L# zXS%z(MXpL$M+v~$O)G5-*0@cHvQUj(Szu5)D5Ed_7aKPA59J~y%e#=3LNjRToWUz> zYZ?pQyVYvMGOycVBxOo)2>s5z!Qke=0%EhNINu5MP>X}v1I=WZ1!N(fMIF?YsVOvG z{!U>&!w&i_7G{Z%o08YY=khL;(4rL=@}~t?ZPAWW%0q6MfIzPq7Kd4)BlQfQ8I(PH zaV>b{U>^q8$-5{oq?F>*fpMKO)JM=gaJ}+T?pjteJ#2w`!%z~m{EoL# z?W^^q9@)(1!f>sq3k`1&+EW|fq>hlh`d}d|TuO}wlQt{%jp|6(WbF+!GPf+1DJ5p? zdK6d=u|D#+P$a8bwBY1-1}c0WUezk=02k(7o-U|Kn@c5x<1FlRykD>=LL%V!Co6tX zbx|UL2L3boYks=sP47T+zp6nIZ0kgiSs`#EJMdT=3j!QdH)bOqCLzqk)39>HyPj(s zYMK}Ao2mDevK!a949qlvQRv#$?Y5l@=|uk6aq+F#deR|m5?VKK{#3spuPw5;3E#ip zsSV^wqtOVP4PF}!sY|)5-G=<$b-+vc>I(~|`}jfh2(VJ?DWWNS&5z0l1K8>}>4DYwZ=M)hU+ z&;$-i)dJrg@V363xLkHs9Aa%YotWvtwJ00i%Jp3-Nm*!Vy{?5{&Oa?FdmuAp+ZnOz zcAB25y`WQD=jJiTDZszK3D?4$Yl@2RGuTCR4yN9=VO2A#8R}On~$veGo6m#lg z41Xds5a*^U_H)V@>PVDqc{1K1ER&AoeZNIVJE&LsMxXpf`8?_;X^|M%0kz|6hPQUD zu{%7)XY0*^q0Bgj5N?(H!K>FKkp_w~T{h8?3Q66J6PD65TxlU}-SMD^yL~W>VJHa9 zi5E`JtBHy!%de>Aj5fAjF$f{p2ZGEuY?lIH-7r_px5?TcbS%Irt&+^gg|5~ca*V|q zP&Q;f@=BavAs6JZy!UOkB1XL;Ny7++S$7d5U8i&rK8~dM8I*C5|ffTZYdP(Isx36+UeE!3GU6Q1CCVYDsTOdj$UMb{2c z$Ggj3-W-M@qnojg+@z(^M{fr&2Qfw&*RNMMg()n2snvxW(VJQT-RlVvJg>i zTO{tfX+xX5sJijBjJ$>`5D^ggQFJAjj7fLDFq6K$Jr{7LTS$a1redxLFdN_{Dop_l zN?=nF!BA1YnAwioenI@tPk_>O%XtZCNfo^a!|#ru#jKb)A5zh0NfGN#GBZVXwp6~D zjK;%a%&;9N&uq%Io{_dXBsOBfqMOFdfdOgFs zzC2E|^K;ei-!*Te%-BDRv1kAK|2S%R;TjKiLCs3S$k7dQvrNYXT^X_`0>8wMK9E;d z2`6v_EF6J7afLP06-Da;!bYXBXE0A6w9p-rfN%AnK2d&a1EII`JkfZZsY^IQs=<0# zFy=+HWJ@!bnpQY_na(87AlgBK=C~&ix5GpZP=5BSRS_q7OU$ll`JKyvfeYvH_o8Q+`O-GhqK15kGo6j;~_|CbG^gEaiJ&$oIwtAd*M?Qd=TO%oph zSQ)Qxu4Kw~5@x~m^XD*Wu8t1;RPYDFI!lK9v!4bqNi^(Pj6USyAs8$>2RFf9;B{JE z`V8zj>Oa1wFD2FS;2Z#}@(K#^Snv$k&Y{mYE=MV9L!f@^G$H?hTksRUYb#lJ(@vdl zU<)*t_@u24zPm+SycBxo0bOZ7CI)a-fS? z=e_!>31l|nnZa=H0~(tFjyib_v$YNmue(5GSM0S@I)<;zfDR;fPE{Ua@V{^g z6w})bl#4i0(Oi+RD${f!@BQwJe~h`!0-rfSp<$0>B}%ON(Q=jtclHURK>%+Cub1A^ z`>_Q@mDOGJrln&P%1~Dl(Jay;Ams4P1^aPae9bos3tbmQBcy-BAMe6E^~u<1y+mm- zS-pNH{w^(5?>}HL8uwAKt@J9n@UtIffbLY!g%-$Pf)EFoezYCGn7gCt=|=q{B*?M6 zZ7yDQ>0Ne@SDyAB*6#;*F?BLEOqdeX*zNBHQ0zqFJv7|%Gj78|?x?rM z{9q4m+g<7%8W4|g!o9n=`o z1uZzzBf}2t^c`6vP*ib0-k4YWA>w!DZF!}M0+{o@^XMr!hnBgyGF?IQ zJUA*#QHw&cMU6EB`@>qHoyqqe16~&AMJOkAB$?|)I%H7Y95(y@xoYC9V*GQ(v#F0i>5(uUko9{IRr-9ZgF zp57hyInTT$9zPL6gfxxvLa*xJj$+`UMI0eC_|&8U7INdE#yHG0PkUBjH+=c7?_d=? zFUW51$`hab3@PG5AKW<2wp7ZHuj|7HylgC3TIZe-@V~`H>vkEV`RKft0SZEh>TZ$Zm0C*q7u4~t z=gz^s4U^x_b#4IzT!}T&L}`C!7{3M1HCDh~x6YO*{KT}t?Bg>cX_;~%R33FMuJ$n3 zyfP@2%G~#Mb>Htyj%+QM z7O55TJ%%{c!GF+9;k81z&0MK_3@+@P3IyqOxt-r0GaX+YTNcyh{T=D+wDZ%K9Pc}f zJ^^e>n3b=SyVd^-zwNiJ|71|4_mPL!UyRV8#a1WH#v9;9@JCL@DmYNTuS%&Ye^b>L zOhs;gzR`NLM%9{4L1S)JH!sI~L_R_HgWPi%7yTG{g0X}YIjk35$S05x;3yx<)FFc! z{lzt>z}=%38xZ>@t{i+BhslYOgJ_x@;#BlCFqON0eblgor(y^pUfFrnKqGm?eFAdM zbNHo7<0~}FbMLE$L%i|@DJmZJTp>wuhEt_=sk#^5(^&`ufs%vcNI!5|_MjfvlA?NE3Q;%6(f+?D3@z zCACw?rA`nG;9^TV(#pOS2{LkN-?uT--1R}=kjj@=M{ko22fF@Cvh%(_FIg&5u(HaP zb#>{!33$)pPcJs%b7(P_f%lal`nl<7Wh*br%3FUoWb%AG-0+=h(rp$Hcm|67)Mq|O zdjtW5KglPgPlyxlA-becVQ#SZ^>Dv|bmvE!(30v&Mj|shLUS7E7~kpOi)QQ*mg4T} zXNyK(Y|J+x5-;z&&53N~u&S-pHK4l-Pola~TF)cwD7TMDH6R9Kr1f0ESQrgnBGGD9 zkCUC~Y{)RV6q!W+#BH{R%IE9_f46Y^-jTeo%fK(V4d9Ju%~4T`;0N2;3N(_Hi;)O3 zn*P*?AGv<`zAe%UP8BEghrD^LH4c{ME%Knx86Fd%H6HaC5JD!R3L*{7bk=R%@QoLX9T~X1S(SkM>f*(HCkSe zW=*TeGVuFeC+;wwC3eNY#JB|VcO9SNQ_1jnrz?-s%Pq(z{BK#Y5OBJEUb$|c#f*zP z)>q^#S*FgtP)xub?|8G|k(?`VzIUxC2(3^Dvnc3QIT z)3;6A9)AScrgd!u9Wwh;Xnt<0hLQw@Ng^*ck9RLFYp2}L_5wgx0Gs$sN^3XDPz(vn zd*;0kH-uL)dT`y(>aJ6?4z3>7Zh)|F29Gt2YWD#;JjLBG1HAu@o46n;bVL*(T%@~h z!PcoqgRy;T|9)3$C8fy~*^)-QS~r)9i8p!;?nJjfJF{iD4o#gtja|p>-yAa`lNyz_ zN?LUf1HGg{383}ij$rmeGFV;Xwv?)65>#R5)_j)iz(2OjU#B~KCo8aPFwP6mj7Qe7JF=7(iokh@=7_y>IGURs5P#MJ^z32 zsw9fGT*!15m~Y95@X%3*i-#|K)<}ae>b&{|8c@PXN_ z;2l7j84trw|3wk0B1ZMa`bM9_wipz&6{7E-!t?>zWf2s{DjP)mT1iY()5Po~7=A zKrcNouJk{m<<}fS0r9a~ZQw7+{&mtid)Olph_w|E>RwLR>d`!<`Xj<$+B2Ksb$Bl1 zv%De*ttgiA#<`A<1HV%%3Gl_Izs6Fo#PND@xE|})3%h+t3oAZ&=&`QG=OhUaY75&! z$~E%JF4%qv2#Zz~52)`SXSe|WKLEf$EfAvKilluuolp|KZq1t<{&Bvg(r$cm>&}<+ zi;U`VC1|T8@ZS_|&n=@~vjHuGWRN$%MYpCwQNnXq=^U~8`9VfhB!Hk9z$nth{$s z`H=}Fe=05#_^e@PBYHxAx$oY8-m$!q3b2V=7xNl^BtSLhKI>*iV)62&(z{cdRB4@< z+a7NRwcOLIkRx2E&Vn9kx;~(|iZKEx^)~#C%kNtR-YqRoe!H@Kb#2*lGsn8h#$CJ= z0e`*)HfTq(;=$nVNV^!9sw2v7Je3uUB$h{1)$YOcydm_U)NvM?E}#TzM+NVgmxYSM)kaSs1#nG)~ z=4f!WLP7E&DcN7xaloUa=la9v2+>$5BTJ7!2CKMzEHkW+uhhH+-AyU0XPFBy!yh7w z@x1`nvTuF`d5{1BCFV>vhX+?V87{y=PH(CA1x4TqkgYs7304z~89q0Nj=Ma@$$&<~ zB_%XMjzI)1b3JpqH2)8Uf&-wCAD!MNB*FekdZ#vi#!V6cKnoU*u)_k7PFLr!JlyUY zDcw%SZEW=Gg#b*@D*n4yf9Y!ZOVOVev$_ z;b}-7^nO0J1vWd%){U({~rN9@_gaMbsrt7t?LOhMyWodxTuYZL+3|}gA&$%UGKQ(1M+XqNC zK_}@rC_J{vwBEu--$(AQofT?8ah)iS#eHU$_Y$o7rAf7D=0IYll;5mApp{%V=q)!3 zL(4?esgxb$XbEGzO-iwLlr&DM=@GK1W2AJGawK!oq`c;RdcDmU?F{=2y%9X6E|(VU z&Kp6yD3F+>5}V3n~>3GbA!11iM7{iJwM&w+0EFy(zsW zkay6}Yo@XxQ_encHM)v{kR)zF?(hiX(mrt(iowR2jz+FKs}kNgbMA94W-v;<^Yp5w z%kf~9=Yb&Ms{6h0l!LZ)v&>C;Ele9%m5F9>Je!Azb3{4CyU!}yyr{~eSOCwhjA|qIPI7yp%UO8Lq|A{sBYvUH}CkB!3 zLH+=DJz@RHZT|yt0_NEGs2baIJz>dFY|!)EA$>v}_m>C;9QVW|PI3{L>VYx;>l4neHoB^043wHTa%O8Mz33n9*(h6^R#t zFk`y|rCC~lr&Io2%Ue78c?}}`brQaewNv;yV_pkrZrJgP*uFE$zw#p!j^>3+CYodW zJy?E*h5efY%|Y|yLddv=a-m1mH&B-JiE5H!@eY?=;{^f2xcy>KD|S7BexDg9b$h8* z64z^4FElrimMK@T%XEdn?)G%;;%)fc)+7qKK;i~t*yAk)ywqF=YxQ`oxjNodm4=^j zVBU#{9Q%o@B0B&`He#~!kBlL$wbzp5BC5YTdBP^U1_BV=v7O*_*~o=XmrPp5_J5JD z4@XFV08?XzXKDJY6VD{@{syW^rlcSG=Fbk__?ObuinOjfodN;JD-OtW zl&?i(DZVGf=x|IU@m{P&iL>U*@d*yojl8s^K5mg|LN^A$7z-io1cYi^%}O81CyFSG z_d@Jvbz|;JytM77#-yIe(fU52Z_G*TLL4ed{8hq;62O^-uHx#0@9&!-O~x0?MMC+@ zl#6>?@sGKG9~>JC1WkSpiXx` zc*o4iUR!uuHAoN*R<6x{d(41V6tL3MdXMf(;WEg?HIv$B!a&=)iZe5^n8uT#j6y%R zgRN@}Xweh2>2;ZL=#@yzOueZR$03K)gd{#(<(L40zgQ~WVCFjsxG4s#^N;q4vK!#H z!i20VXRa1tlvIks>{XZybkm}vL)xvH^r1zp%F?rlv#mqv$E54^NG=H)-H2cF>JClFp)_Ch#rk_n zhhH|IfT->wnSndMK(*4#xW;t9Ek~1+#}9NHJ6xCPyHf&dC2NN; zp9D4s0=@eCCZ2PQ>dBCvOjN)s0@Ckf1;~oP! zGgO1U(f}WaAo2ORz>_eH*B0@~7Jprz4dpxlZr$2Q7X~Heo3K`tVNz@G&362JYIwap zat*by)?I`t0!1x}v?dY!%*PVEbGG~uA7%|;3s+alfjG?JaOqFIq-%&3cl2MJOKO?E z7D`eJ{m>8chyF01$&}jFnhJS7Ei0}@+Rz$7yf``gFz;e^;1GzagD&wZnz6z0v0@;g zMnjxbKpD4WvHiAJ(Dmc-kmaV)SQ8ygi8Dl6x24KV9RDf2Vhj>?+P}XoU94H~T!4Wv z2ea0&;}R!7X7T^2K@Do%v*JxfAI;s{n(f3>@jE$?9tLiOehjd*G~7aHo~Zogqt)P?t-t+Yp?!QJfh7X_N=ZWk~#a zjIY!SQ=Neei4;(B87TEHx*md*QgM^i94}kwI7DI$a$AU3;W{vZPJ6k1(T5}dR-#|X zdKr^yjJF0%2DlILflUZwU470$E_T}a;8CPNy^NF!+Wi5b^ceshp=?dkre9p7)^&AimmCn zKL^l7D$_aS^t+CCo9W+m@1T9r4`bdRZ^*#oilcJ5=2tklJa}zveAvmM$M{mt zCGs9u#F_<9DzoSe+FFm%1ulXrk;pp+QbH$yxk%Y=FWDBR;}3w6n|h}b75J07lCLbI zaB)oy3=Mky36iSVYJ0ga1YUY)O2=M+Cn1OOjepbIU0|JjJwF@MMN@4T2mrMYX!aL_ z%R2-zI84?w(;D&%UL*^hHH;A{?NQ9FV^(4O^US$;P+X&#cHl{YDAu1rKcB(ZT(0C6 z?f=Vh&baO`>>QR3yd4x!woDUd#}-w^)K9Gc4A+00QE-lQ!4 z70)PD0wd9;BnVQSy43g!r;(jZ!#!}xMKsG-wIxI`VO0NJ6$0u>Y$bvqD zUlu4V#3N&-d3t|Lv;%>tf}Qb{uD3g*38J*m@Ws#vfMj=hOe^;#nGgJFtA%`*s?7uK znO|#k4sY{=FEbd~aP9e$r{#Wht26a=13(ybYH|;lN*44Wt5TZqnMfun?a1gN!kAse zgI$AZ5SrA4((05kh8pnu3-{Id))WtC(gdb0N!_^&*#P@-kfV>4jqQ^c>N8Hk2uYa` zN5874{$tJ&wh*6*_T-Q) zC)Fef1w200wx%1?^O2O(uVgk)G5ZQlw<%8uI34}U{z!0tA+X8JbLyT&Y&jliw0UHr zDFh?0AY6PLhIb<+cnp>kuv)-lPREbW|FZEzA?YkxFj6!V`&FDieUMx-+Db+p*4$`w z!*2oLUlb@kWdA{jqKd&8jC;AKQA+=qHm2L$#*mb>q<2M=V!=s7lg9pNAwHm6)Ox;3 z#LRNmDcTwd){(6$rCbKu=p@YP@$0zPElmN6V{C@2_B3o=5o920LsWAh1hKad3fNT0 z0ISrbxdFd8+YHo_sYC8Xf+?x>{OMgMUe_cUh!KA_4j{jv9bO4wuS(4TZ*N1;Ll6hT|`H=^t$J{F4^X2PfJ8w$Hvw0pEOM zsA=&?@z$cZIfa2dC=TtpmEFyf+Aq*12YLvbq+Jxcn4NX40l+p0=Wt5Fo86S`}6wC(n92!Qpech7v$VT-a?U zj54cnGEAM)b{V7JjX<34WiN86YN#sdua6Qs`~v4Osh4MZI&C)Sit`iONn#77eO(GG z+_KT)+}uWb4cY6M^^+6%+gg{lt0jo|CkITlb$?B3WI78mQ4mNsQPH6AMxq?vs&WmUFgbLxt5&18P%3$u zRIx&$vXyEI5gBJ50L*6$1G7^+O}5{y_x+$oPZSO`h&Avo76c5dojV#9f?Xg|lP>f~tYz-#e6oLh9j z-skd3=pht`&0}--SV0jefsEV|vamg{Tzh31=KVG{Bkq<{ffdfLR@c=@hLNb%rqSc@ zpr`mBnV^yM{LGjK-?B=#jCt+t8cQq5h`|a0xe}$D`W9!N?MeF%g4yYZf21Z0G8e0K z1l!Ma3yo&8$o&brj&LD~q(=}cp$+3_LG<=b!@fjh`TTREbWtQaXMIWcHe6^hU>mtE z-7mh#(Rh{1Y-+j--CjBQ!J{Cy@QCymj^M@%DFbA7CC&uguJx4b8;ZTnE7!SX*a^Tp zdAdCv#pFt$aU1cttV9g#lj)2`&^+%v+a>-4K*Iqc%41C)W`25bNk~l4^*wto;;J;S zlXZT^b^hBbCE9Fgkuzv&Ig6p*s1}e*T^T+_r>ZW4pB+V>NpX&u6sJKl>E4=m#~fnVE$?sx1-?D~Mj7*l;Msj7 zlG6e37rtYU#6dyDNdLu-L5X#?fnw_{T(utYm^UXBMd1?IB;^JPG07hC*1MySSGkX= z(lHRp(@2tup|bS@8eW>8@rpVqD*=4*LjTP&w~nTxPbNxbn1~1>t)9epmOO$IlrgzE zE>c?j$}Z=1o+qE(1@1Ku+I&W)t$J}*+tqk{)hMJd7uJCiXchc7QUB_~7;ruS96UHCHD!>aN zIrH#?dk2N5ZJ1XBfCVWL^17jTfVTt4_K$`%@S&(Ql^S~ln(Q4u;lR?MK@w+3k_8TD zy0<0C*B9pY0>K|R3j`trF7NU$u`ZJ$@_Vn(1?hI)jtkGp%Qd1knk_JEX%n*&NM1Kh zY}ZBj-LDj1S_X-fE&CLk@vJF`-hK6m6hg0{lGF?Rt4QU$mcCC5{$d|Dp9hyl@&)F& z^UOSnI>na>{9alGq~rzh%m)&tOVY^eO3Qa#{@@RGo1CF|%>}AW{5HJZY*V1!6_MEG zZ&Cy(qiLRGka7-l0bOb|}<(l$iB7 zbQUIrK?44YXxlZxJescHI*Xu~J~WVf$6X z-^~>Z22DRGk@bwQ?RkkyC&Bsx7uelWKH_G!fGqr^5}8E3YG`o#^;X3fcI?S!E1)-u zRK=9Np7cBAGBRfKEW(ZSR*CMq4a(JIQ)zie3nA90?X5wq!~85WSf4;!74zxlc6AqO zSG$3aN^c~9gqb=bZCx2go(3d0WoOHDs%lcoDgkqxQc3cJB3^_YSgl8k7JsE%>Xg<^ z0l5|iXO>fihEUktcG2D{bK&Bs$K5eJ5P$GYuEvmh2K*Y9boS7tKSI%U0rI!WbF1v> z&}O6x_G;}CQ($=69n@NOt@~VyFsvm8owR*>N|nP9@Mtw-uWtL-Om5wuZS|z7bUZM? zU8?{LD1$FiafU9&0;VEncl`CVH-!(785+Z$%FLDifOPoQi-Bu6kSY(YkJ08RmYiW) zr-A0;5zUBnc{)t6_4&{YNggI-+pOw&pnj^JI*Zs^F}7zCDH0C`w$nsX z5T5VT7*{oJ_#h(##HKL1i{@?3r-XDZ-LVcG@ef=h%^w{YlhCF7C)Eq}^E@F2_JV1I z&f6Pt0Ff&ex_5*-qYN6eC3S#{Pzp4lp@iWv-eU+hcMFv5RQyv;+7h`oR1^7`-C)#;tBO<`|$7E417>9L;6g~DO^hZjV5Wdg#&;Siz zDXtS#>05$T`bHmrerfdF@=c6w`cE&Qb#z+hdPuBO$5i5J7!WmHZ48k|j^_@?rE!MJ z;&C-hboF_92pEeEH{A9V{O;xG7Cs;M-UaaRWCI7{3EUW*-GfxZ&gnT?xt8AyYe|YI zfDcb7P;tF!{{JclS{vJvR=iRD6`o~pEA`BkkcslgO-~@NLRd~gVim-FIe5ssxo1 zQ6L*0luN=nlx0t!@HO_taF172;?oo=UXeemN6+obwX;;lH?cpY}CpjunFj<~MG9sWvBCnHH>bVTSg<6(|w32bEbmE#62N*_sbIBlzQl~NMe$v`&xT?*$1PV((l~*&ID|g6i;M3F@K`#`v5!~ zCQyeXt#spJu9Tqzb)WIkEU}*q8>fMr*H}=VA$#WO7+YAAABqwvms^gw)!j z{eLsTtLduik`;m`jY%`LOG!9WtvdehDddHzYUcw+)ZaIp@iTe3->w?bol#_zg89rQ zWO)Noj;>81&Zn45of^xbdLzQ&MyOnVBgA|oF%zK@MPR7ff=f-OwyLoh-Qsnyrth53 zpSO_rif#AWvXl7+S@%K=@T*6C1#ihfDzWk;uoZ)Rt>u%n{TGEkR7qbK0y^8B7Zm2R z5%Y&YLncqwtrnl3en=c5_=((D5(F$1FElgUs^^C}0S?{Z!Jgtu)4fBT`;xmiLjmz= zk-_09$h+Z`Zy~Ua?abIgmgvw+K}6ObQ5(PJ$!lZvSC9|x&jxY^Vw6(MKEGb6jk1_# zjZGXHSjx?1@vQ9wn@Xc|bFMI42Dp31R`(jU_(Bqcmf@rhK7*kGXZYDSe;@FY2MRHl z8P7vkhNpW+xNEm7NU7JQVI!K-lnj^@1J3O26&VuyaW78Fc%3UVGX8ED<+*;kkep3gWXx13OhE~TloFv>3D zC>(N&8kY*P-6Nrjq|{s%ljhAAP}iCaF?*XpDw=f=G;>*9yz!PkwZ3=zuR5HJ*kEsr z>@rj~4*fu`#+s+rXPw_h=+J!BWTbUp{^q~ib6(ALI6xc&TzKb=>0vn%42flz2)2dG zBKZH+DSG-Fto&xn$r3rm)G-}3K+(rAu#STZa!(M#`$L7Q2Ow8i!!@YO+MbR+>@n!7 zEf%FE$)w4sR701aUjMQa;B# z-hVvEg)p@2iNr?e)k7>tJe@KTNY9=;onl=f_PKJ0o2v{_(AiN*Kc;?{aeb~aNPHKW z%Sl-2^vLLZSepF4)DF`brT)&=@wo9!SIb41$fyQ+Hey1Rb+1m(i$K!lYaV(|v8W{i ze?fUS!=V?GRez<2Q`m&%BfhC*qDE$&xu6}gQ05HTzpscUkP1bI|MN9EMl-17&*SRRJe&{cE9m6Ch8{=t6kqo^g_CNT5~lxSST}Io_c4 z^VoP{C!yaDC=I}%85|xYkIzcL@%PQ<1JD9N@JRXS%hl?YlE9L#=*+yIAUAbM@bv(jLYKGZs90DsoVf?+6W&l(0JyzOC7Nn zj+$WWm~*AC3(t=cD0(}CKL-GR+8v?q1K=Vxm?|4fV;-*<=0;W1EW|_q(RCF_#%eVO z3QJajz|3UfHlB_exMIJO_$&byjUa(F{nL(iF^i^^s>CxNW4QI9q%4OArxB3ekD-0a zn}%QR#A{GRf+Vozy}N0%*X#vJLB$)eKjyTZ+4+o9QySZ^RX3&7=uQ%iATv)N?_v}_ zf@-mR*J;K3Qpe{SZW_hm&I0@<3BERv!W5z10EpSwkcXO?FeA3jybd1FcL%5w53I^E zt?H6WMP3J?=!rR>(y{sRcdGBC6E0d=^MAk}Z;&h46x=ob6>py)AG#mTYW!unI%C8t znc29pL9D}Ra#5faTMm|(d6a~;MYzYTgBPNjmCq65^8@NbmN`tFrtq6wuP}g z_HgW)D$c2~$2{vZ`J@hNp04;gtLjKxZqIYWRCWhQc{zp2z?<|XxCl&$vE4I_31J3h z8@Fz4%B5?;btK|Wi-xi?ruW7CX-&AqBUSny_$71WmU0V*-`xPJ_?@tZ!qmaEsAC)z zkLkj2TJN=MkJ%d5T-#S_La<-l%thBY6mzE$`2m+^bJ@Bx%M?4LYrqU+0KlhXDXKrpYZh-O)x+A{?f$2bzT zSoKy&jqcM~hj|v}1Jc_q=^{Ef1r|OG|MZ!YfE` zxA;iB#mw3U_wAaJ)rjIfgXz<>Rz{-o@`}mYe1^;cwy|@z=N6;Y;W9!;om%k4{wVIv zcGYr~63-m@Ye*PK$R^Ss`vY&QkSCEa%-(**qjyZ7%#?D*Y3;@xN9p7)efMgbUEe4I zBLJsx3-jarr_1%`>Mn$WDR3}+TcKMf0-bh8Q0&JSb78MZ-h}k!xyyu|AiSMAS3!13 zemV%BgKD!ap@*A(iyflnd}_z)icR(r|j z^%(SU-L5-d3u*t8oHcN-iD~{dM{3m4}CR!xnPB#ehOb|KMWdA^sUGg!#18u%RP-gLpsLedw>> z*(733d%w|zVA(xhY%^Q8mE(wLD;g3j9VCcxnWkqeb9{>q?ZEe;)%AuX>l|@5?Xh4! z2`eVhH)tIyT(d({zhJW}4$qZzY}eA}mv8n}2&OfwRTI-MH&yq;8R?WG({;WTsNg{( zuGzAn+%|q-_dh@3fP+|V!SO6mAVqf@N~S-zvZ*h0-w6A%jxY&f6yJB`T%1dFA`(cE zS*nFdX9KD0EN@qj+)Wg0(v}#%B6DPOfoPdcQ!VjRx_YR7uRz{mlnb|Pnre_I$%LH> z4s@j@z3ZS^b?x*64d}y|0cyP7n6oleumz=Ctm@a<4buCmd)9#Juek~x3y|%(l(`jU zn#Iy5=hObf>-!X0ri1~EXNMOloY6FTQSAFT_@G|Bh#yDM_xBa?w0M_dr|g6Up6%&P zB7^>8zAr5Z3!e_cq0@1zBN>a&v583e!R*{6VIa0kv`W>4WyUj11R>m8JD5o(q+s#b zdL^64m;0=nq?E7^Efh;C7&x5@@4w@x0H!)G21k`oC3RKOGghGvAw%K3TGuK$EtGWo z)TAT6H2YCM$+A5Z^548Tr9*}St31V1(N|RXTJBs%+1=+TXO@xLJ(>!B1MPNj#+6t2 z9)=|X3-?WERhMbyhS1oQWeFy2fHRPm*4IfEN>^^5q%?+RS+XRtYFXiVxn`b&`6Zay+wLLE{inFJhh&U)*r|<*j)?$wRPKL&0hP z3{-E3u(A+t7}pT3aP~q!G&i~>R3wusK;i0%;m8(0=QD%*{Tuja_^gzRWxux@H({e< zYOj08*Jen!-RC6;byH;TZRQijX#$I$OG64cKmUM-zl4ut1WZOOVm!#tJ(_f2hbgD_ zV`{T0%`7=50{nZNFAJKZ*5W7_;K2JvM$kc*vD9`GI$!k-C*0 zX@sF@D!jtCX>0l&FuIiyifR{HxSq-9X5(y2Fdv9*0I;QG=R3e*hg24QXp+?tL!Xl| z=?aTb);r^^mO#R(z)QkzICTV*)LHxH&y)$C2A~7((FJ5sa2oj*BmG0NLivPa*`uBT zsq>97=&7?A`8<84r<4tb#zDwRv8Dm^>pKoJyN7>H2~v4atZO^?6)N1Iy<9U5Vp<&$ z;Nc(-D+&HM)ccif*<+#bDY?PsN&c{kSBy&@#_^^T~$0X@lo2Z3|IY52asZ^cg+PBNh_D1h^ zt8iqo9?0WB-fusSSTB%psT3-hbmc1*dvJjDi}gW}QjW;G&sBb9B^#OuHj1qf22ENKf7 zJ<8@y}Ne>>VSckE9(Gnx(Jvr*0 zKlF1>b}YZrMW8y|ds)g_vJzv5E-V`F`~xf^1-HLmL}FN5TR6;S`OOX4B!A?)_Ad$- zPpBUwOq2+uYKg-mmdI_m6Ne{gpo&ryv~d}W9G?5&6h^XubS*4+FrnKCg!S& z85-R1f~goKSp$5S&UDU~41ns7Vx6_z=_-NwvBkI2!Gkm{yZXTlJo$!??)XZ-lo#bdR9_{bh0d>}RRj|hV-<*9Q`rjg54 zg<}`XmEjrG*3a}(|F$Tqpp;&&J6M8q>#`>5i3fZyC zti`J{+0Jz*a`gQYM5tt!BT<&eRX_3sHRJJv@ogFpnKw=74@ zPX1;MMkcS;8FH{H0ybD2Ryv*#;QcPff%ObY+E})pe?=#^og3|cG;0h6+Zh+0J+Xy( zE*}E+vNL__p!HRg&87I;56|miQXpot`&S88PqcIUuncf)6!TGP^jE&okBht?4S{0dN&PY? z;Y)Qh-jUETsDeB;9n<-G0I{gglm%(4PqxPxM;38ic*vfi48E#F4V?DOy-cWM1~l8N zGTOZ3t$`EiwG`<6s0va$!pKF9DD)vT(*@(>*G&26KIaq63@{d+)mnx(FR&hWN}WG+Y?@>O|AJo z*vuS8wAQYl9f`^X5Jk#p3A>D+LmPy_vW#bDC~z(HmkKDqL=CX33&eX>QWw4J z<-TxG7<;ItD-{Gzi~GMrEyqX&XvF)PTNbQcp#Z3bf|T$=%+ZFfDhQ1B0ClLrJ~0VC zHSypK5mJDH1K>|-&s5e1WYDppQ&zP!E9>z=St_1afU!+2(c}f8-({#wPdDzU&8laK z^m$Ku_Z&e%_BHBQfjorV7Vk-~Jhhs~*3Zj>uZ-zAjetvry%32r@z!I;Vo?YvNf=Ns zN}Ouzaa2C52%NTVn9q-=B895&!r9 zhJU^4zp12oXw9XTY2nFeBJag8YlBSgPA0l$gk%TqYff1B5pnF@5OIGDR3{)J@~^1t z=70}}pE|HdcDYrn{vMhyPz#xnE%A4h)s#e%uVkN`!&?Z#E-IrV1Clzl!tj!Ac}%(O zi~FkFb=7Mgp4U_~jLklM3MEO+96@hLLE1S5hYFvmze*_inez;hE~i{#h>xW0YO>Bs z7!bXnToZcqjJTwa4U^;nLZU)=W-8aUU<~BD0}T1C?JBNDz986C!f=&;2PviWz?Q8ot*_vM%W ztUpTs^vncv(lQ(z1bijK^){&QIPy!&r#1{e$C*JXEB@{zO4;xJ2#}@dI3cJPiSv~(J@Y!?V=oYA|VUAT$s6W7l?ka5(%6U{;)Os6&15`i1_+J5H zRxFPp?%wj$K|`M-I&B%mB~Qzi4f`eI4E|j6+!&L2&gQPt@xb_a0z0bj6$soF!{<|! zh!qGL6-_wUUXKLt6@kjk)f{0cY#Qh0*2qM_vBJ%4nae-(l@^UUp(RW@~^# zAdOU220g_eOuY!(x?kfVd0)2)>n!E_XuFd+_eHu=fLDxu)j z|Cq}bi<8#^&<<)cHC$^T4{ennY_(z^#Bt zEKDhf>)jI`U!?+sscCh}+nPGSVDCi2DVipKPb*IKkMfpX5ga1)k3O7>#icsA3(>h_ zs1WC4g2s`WOchC~9i2RmGtj2)XD4wll1V<<7=%H?0Awouvn0*Jpj*!b zXBjsKzgiWlYnP^?Wr??NFzx>x)gRKTZahgYQ66>HVFWRwlyk_ePOnkWv+*B&M*iNc z$CWxNPFI(R0n~cLc9O^O_+TGAJixil)sCgr`vKb9A`**i$mbsLzkPiuL%RH?Cpmj#~ds+Xb=*a52(b$5n z*73okcv@MW+3BRKqnkO(Nt(yy=em9(A!fLVib0 z{;c|S15Hi%+qgrFJC-8TR#KqZL#`YU^yce>ph(i_-@r;iQly)mD=DFflLU-`c_Hm+ zxwv9u4BcG6-=-S=$n`x$k0B+QnHxdUHZcn4D|7aDrCT|yMKIzdqm%wj*~$VKllqdK zG@&y$eVL7%B#LfH0r*%^?v+G>3zxSZ>|A=|3G_5Iel2$!?{r}^SAaTr;`(vh0AAJU z+pesB?DItZWb?WgJJPt+DPAPZHL4k>r+O0(ERfTbdrX9>94|h56(G%pmr0e?uW1`r zchFs@0%sAKys#RDoLpk+y_y$m?-95G3WGopXiE@%#WP!s@(W5F(e3%;-UGVp-_7HH z=w<6Hg57%dLZlVf=N|Wt*(Y;$f!?zYn_=Y58t)i(J(@UWM6{p1T)AL~44fQXhte`7 z<7quYs^9Lngb>N9bPB0K34?e)M>K1l*oGR~glB_Mq&z37sUe&^0)sGBQoNUFfY5lb zCZ*jAYtN>e&!k?7x(SM$nm~*BeWTi%W{o#Z;UifIf3X+##)qNU$-8#vQIU%Kic^p3 z8Oq35)xP_+Di@a8%|7sOR^1#pNA9DNok6*m7*9O@e~#%{d=`<|R;@~myCSvW@=LcB zgm%G?J)G0_<(NU);*re$x6Cag{m(o-QVK94oL_jHH+WaUsqD2 z2dwVlQ__z}%_0>w?+^_h9g??wiJZS@W5&!3`j=Svg^@=2xS(OjxyO4_8oU2@PET@b z0jG05Ol%~S1&y4_Si#VxU2S4bmFGP2%TbgtggOq|h85wOfy>r&^gg|F&IGH_)C+^4 z9aC2Q{U+{Hn2{_8-?-2$RvnU+=&L4Z5Ks}V`H(8JRS+{AUD8E6T13i_=ScE>Zx>o_dfK;V%F=Hs1)UIpu zpmk*h@oXrC+bOw@o)WDLqo3Y_&k61P0JVw7_4^+%uR7Y(vJAro9X^v#XDLtA4DeA8 zb2Np*u^Alu{075kJidI5<2WvL9hLG&;%V8Cy3b~TVNdPW1U9==g*fDEOFSmw>6akJ zJ;v?4OXiE-%`T<3nLJb9{=1%A`yv+^?xS0l1^aA)XqV=@TEE89%1tb(pV$eo=`2tK z(x_!j|G1Bi6j5R@N28?`#gCFX3WX-br!rk=ybrLdX`hh#mSBXsKAkWe- z0RPQmYxlH1adj86nnJe!$nXcpZ{-=)Evc6NUC8FlZJ84EyBG~59o}8pfspO6=Oi)v z0%<2O#z1OT-~!`^b$8e@(Yd6g>iMOWtP!CMAGV^KvIBZY4eqz}5)fqs0E8_7VR zx*m(^SrrC+TF=#QV%+DQa^)H3r*TN^uZW1ELF!$flual*O*InLElztabTqFjZg^6& zx-)^j{B4~u5_H>mh_+MYvXGXlJq!YO?5(N1`W|&p9G_ZcNfn6i#*@13%!dDG07qS( zE^x+;df!z5CD<9$7}h(5lXW4E;;NVOD*zZb2f?8~I32Ib!2OXN1#ZFu4DuM+!=<|V zcn_niWRl>r5Kz1a35bV^C8gd zFWo%l0<%asfs8rrVnu+}B3;X#e9hrD@wxold@uwwv9&%Ch<73~ob0b;xPyWD{Gqa@ zLAfB+uDUUK$+S-9=~*+FWk8$(OuEB!neYG-`io;Mp$k-^Q;Z~s|GuGwW*uW_BgBo} zadzM_o^c)2-L%gG$bn4>YM&X#hH&N=!tyOXabY}z83cJ{1(ieygKaVDSSmK_FAQPk z6w}dPzS=#M%h31mI9M2P4?kmHu0*3S*jId{j-lIop7n+N4fTjSihnM3JK=yfO$6ifQ<@)hawN;YLXU@YLLFmA7;kI4`d7BN!r-vd`O(7-8Ku<;!l2f>4~>jnZt9}jfB}Nd@3g{{>!ocyn z8CtH-vkt)jH{Y8PGTR_KxSqwOM){t3eWoLZV#hghZp0=Lp1JMNoKN=*3IDDErudSi ze<3AX{l$}x*25g1QrfQr2gkHvS6K9XkjQ)6p!U)f&~vht{1z~84LC+@F~G#^Jloza zqd4^EtI^Y}aNs^)E5Y%U`d3xQ*X|k{jM4!a9p>VO+<1u(mR7lKkiS_Zaa?7kp`5r? z-+Gxoq#sawFE7S3Nx@**nu3CKf@&DvR9@cQI6=7!ftFou00NfqL5KN{7wpPpq)qaYE*sDX0WY|Z9;X^K!7=VX4Wv_MLf zD62wz4(~7y6R7m-^0f@HT%)?Oh&!i>XS)4`C!Q%?a3^NIp} zHO`*doUF}LEn~(Zy0ub|+ym5$08rW+w?sF5qe$&5wgz84%?&#DE;hFiKN&Si5K%b!;$N>c7$TaEGx(*xwMTn2e zITC~gZxV@Mul5L0#ftn!cG1>VJR2R4qR2Rx#<*7&h1ZdhQTJ}B;- zYApB5{up_h6=bMZR1-8(IJN>zZRoG6KE4ozpUx$7i1Ge|;NC{L3DU*k#s`@H^UXmh z{l#~flersjas08*wEs~92_ZX(yuCO>VEEQi<(90eONhN8qYoeXsM*Xsj=t1e5!JM! z63}EGQgNnTXzQ!tm`4Ah)IrunOKltd#S;x`$mIijB^4;3T*2<;tt6;3n2Xp!oyYJ- z)y$kk&Xbnk2cV_*Y!!7_%&^)Tq6Sq;*4%NJ&#DEe!=-i*DDl!75pT@*7!qhrx#*eF zi~yV-M8Us}zm>XPjfmBgWyHxHuH$aTqo(G`s*Ju@#L}$}nA%a=FX@r`;5<}lCjO-5 z*G)}vZcl|okQXHPBAhjo%L2j&?PvHklj?G|5bq?OXc2b4IUD2o- zx3rS^*2D+lOH5GdI4^qeH{tVf?6ksU0ZRnI=sy*XqFgMB=;Y|t;Zla?tmbUW0I5V6 z0`-m&GS%_*g<7X-Pa^rtli*T zkY{}J+K0|dHqE>z3k#C}a~EP`S#mDIW3HqmqdNjh0xHJ^ICD$BE5h`4K2kY3^n#=# zD$84N=l8A07h5<6zOEUvfN2BhgG-zUi5Q+vx2zv6`T%^gmwbKuw=5lL{Zr1kvMFOP%3EW0zBpo-~u5EPgOd@!hzdlxz->v&5takq*|BustDoEOW;*pCpdlAjTz=tDYwS!ON}EIGkhfM z-3yGZU<;At5oxA8_vkIGq)gFnNes*yxGWzT`FGBB@*$VF?qB(`W}oB2J%q9=0H$Kr zts32pv@lHn=+kaRoViu=PU-xvz-&K6eofPA)s%Snxf0^V!T&bRT^QhbB8G?rAx7^R zJPYbnnqPV|N;R%6E&Z`X6H(?K5%G8-C7PU1b||y|JJ%}3pv#Ry-K#2%p1hb5zJ5tq z_2|FsS3y6c0hNJF|8Pg1gKXz(d`lhUNk3H&IP%B~{jB>`^6u|K2K8Ba02PX3(#XM^ zE<&7o?1h?E{f4}P_6czB9b`4G!K^x68; zuxGB;E`+xenKLh|f0NqZ3jK_@)RY@p8I=K;OTyl(xm)2~k}CJy5G(PXzuvBlE%V`>P$U$M01J7~UsC+jkG1<9%3nr~9&xNxgjL8Mao9hAvr4(yB9+%i%Tt zs@ zjdwT1eL_EzjJI+cIEn*Il8e8`GAHIwc`Id)*ND29*z!s}cyFLj3%OCauoiS_!G|Y6 z3q9Vp^XVOk&a~~bQAi;DsH(myQwm;Gox;uGqy+%}x$hkO93XMvGN1!qHXq1>l1U0( zq0=NWZ2%*nB7L=BEB|0QTjJrjk(At8B5?(r3zKgG&U?93H*|$GBqWNl64IzY@x)@O>xz!%*_%>w8qur69&GdC_(OVfTvqWSmEWSdV1`4nTw=d#3#YVxqpigm zhd%OkEL0XRK*XvP5*AP=`V1UgPJmWaQzw!SccXJ5sYW`+ z1G{1aaF;l70CgULDjA%Z6ruUXOx@T9D0|PtW&?(AO8>M^`RjL*sD z8bX)G&{^~tV%*%7QJ(O%Pmn3L8=MYX4hV?yXs1x@=r*1iEEi?>SZ-AI*t!Af=@ApJ z)vERGq!Ws3&oVCe6C`mHFmEUo>7{a_F3RIfuDK8%JkDCB@6aq8+t>OLh&x&NexbE( zdzGK2G4piUeb98pJj6FPZ*^VToequplBgXDMwMY-9M#wL^MtH^IZpewO~kxJl55YqyDgY z!~=wcwkF(0)pmzLZw;hy&dn^=Xf+8wwcv7sX6WGXTCElWlHoi)gm_(^6+O1j$h)PR zXaFj-@p0{wFJ;!P{zjTvt`QR6uR1B=^LXfxCq`A0Ue}_~iIxt~`vONVY}N#LMeB|( z13)#^X{!OGH}{2$+bs`qq!0u7;wcnIhzCMZa^_+0L%K!34C86DfLOpH4@p_oU{-B| zNJhn;Kp0rhz&r4rgWfw?{vQF!KW8HWWNXM%uOkmCHwGsfeD^b%peuH*0V|J)jY8g{j=XLm^;{;UuMEq_G;OHcMR)kcP%VGas#+vgyfm z_%i#QlsvEi^iMfE@}EQ255?fXya7gK=16%z40Ria6aRiYi(1K;z6N%Sva2%m;|;8p zRAQEz*L55A?zMR|mCv}$n9cy- z))yKsv#4oRKYRY@RrlPRyl8Z6){S#*`w}so_gfbocrE)!L)XMmcRx1GC)Hy?;mnTb zumrRS4C}B6nQ5;RXl*k||AGcR%T2%f&f?2DTKI3DbGH5JrfSwG6aEhcOIpw9^%8Qk zlFq(0lXg_tyk|ugApT>12It3E$8Ro&O_CBIdWI6V_V4t|RD~prkTY5x>-fg@Hqq>T z9w&~E(NB$6tXws6!|VbiBE^~jtWNG&2_#7DE@cJ zEQF8G<#ZHbs{QU#Q%$K-DAnGmS4!EgrCwg;W~dd3>CyU>Z(@aMeVt@l57~G922GxZ z8v}fJG$A7(7+&?}aD9<97YV*JUox>0z}-#RG^eNxtZt+`NE68j@CK)=TVU3=cL_|k zW@SsYj$XDruPOmrg0ms2e@-LtRoqg5R6T8QB$3+*y+E{|;bwnr0IT~y?TR)l0*6Ot z1`Z%cOMe{a@)AK^`ZBkRoKja2Q&3}kN0z9_73!B;l(*?c`~tn2!A?Y1srNVxJCZ`? zkfHpv$td|$2tJPAn;mve@4DJ2vprpK)#s92qKEPfnMBNa?OhC$uEix&*{*<2x0cc^ z0HQ!@tj5KWNO7C&0;Csh5!<=i1F-V?!5P+{&kSwLDMnNiJ~V5^?g^gwoM5QJ_Z{2D z!A+Nfew6QwdWzwa;-h_VnnzB-k0Crri4J?M=6q7S4*z*rvHtqa9Af$$ypOs7yL*9} z@+w&PP2MD74XxWORq}-$eF~Xn*a#&Uv?+RI7TQUnrJqR#7W6Sd$|`CCM@}iYwH2de>ww*ykz% z`HwUFb+*E6Ok@QITg6@rzy2UWOdlwg>+&zOV3>|&)@yN5XJ)qDcv_cPPP>ngzirIe zBu>ghhwIS~2{VU()mI_w;!e>I^a~H`DXLQr zb0U8hyOqw2nf7oz52JSk7_NhUv|=U%(U=fahz6R3j9yW(7#$hvB;w|d91Pdve#EPxjy#vd7;F74N6z6NmM5G%eD&3o@Kh|tLP{07z zdI&?8$L^<;ix!|$N{no=;h~(4GVM;gaE=Le((B}-+V8;(p!!Vh5znIpXc)JQ!D%PK zHZ--3al$tT^Cy}L{rBn1(+*fSspyy=`C&&Jd?=Sv8M|0aAgW5cP^X z%v1vrn+-W`7#H>#h=Vq6Uu|4Rg{fm>Tqi@3dlT{{1Si?9L#h6Q4AMjnh`pqH zkk}sLECpoq>zwU+k##J_6ab&Cp-Z*>z~4Oz`tHE$N&#AcjwR5yzhUP-eAwb(&dqt~AXjC%y*m`@(mWC8)QP z8yD#Sa|$>p#~ZXr8@9)!n#ti(p?&Fs09Qx&N21jJPtLVtr^UI(!my5%vH|p=r!oRe zlacXou<-CIbGr=d^>$B+i+=farO(ABP9;}jN)-2v`1ka;mP0`~zbVn@rX)=+G|g%r zNWC@NchtvB?!m*BBppcHz#MpgP3R2Ap>E7Ko~@r0nge5V=VW8$5#L{2O$22niy~SK z!uGdDv@Zc#%ck)AXb&Ktv;FuI+tl4HN6-gDKO#oX2@Cwszl5wvGskx(nYk@4{Hvdq8$~aGdk`mO*r~oKgwk&el&A}_i95$3ixJ9c) zV+vQnylf#w+Db3tQO+q7EEHIpc$W|`+r8prQdK2;k;bM^{ z5RWs#^6-;dn1Zj4xmgtU$OvmP&LKkHN_R}uWi}4$ve)0g}WlvA3Wx}?sIGb7Vg0r<;R4)cFbR8N^E&Z*tu$LCO~am`-xBis3Ot@hDKGlxsh;s-8x&*_tz~OEPs?bf|1mij z5azJ`5=JPdkhsaju+6Bz{+lKnIK=%?<%Yw*J;6FF4}o}UYd5{V*#L(*u!Qkmx{UYP z>eBnDG<#>HKkzQI%qHnfG>Pz_yuTofskfkY zcDrQpC!1Y!9m!F_lOmdWX2Kh>kDh=ZdCo1&IIKdS31KQ={p&lYV`kvdKK6bl~VZ##8 zKzqvjid*1$my4}d*8od$^;9r-aaP!VlGcD~&1Ql110#~u6r%_^({Jd*+)m}(r*lP( z2~i^IG^IJBVS8tB3Gp!4p4%-<@h8a5R-ie1m%#3FXaEuqg3_9bH=jWEDvK;H(phKo zB87(@fi(?7@-MrJV=>9xY^-H5A90-T6xQUi;6*gF@`wO*l3;b1IZL=TBalWE%f~;T zC!WpGobjSc2)AC#MSiAOz>iMIS~#7ph+u$H-#`5ikLSH*-)nWp#E}_9cQ~msS+5d}$ka3|pFm?emoE^$Iuj56~=9K&PkURnU7LX}!T912To_4_=ptDtmxL)2gSB zcvTbh0VkSHd{GJju|{xMkv}e@=TJ0NCn86?z+p}*! za$W^-<+rjr){>lK7ez3q7sQv_Jr$u?oqL)p6wx;5de+T*YX69Sk%;$4XK4gM66Oa= z4vo=fxTd#zjq1W4d;vQo+u@i=Dv;uKPhhm&tP+b8O{`~|k#n3r&Lawk-)<#<;R*WG zn!_2lk0!Jl*6M6jXRUZOqQnkQy#A&{ScG@&_Hp=@_b%imqz19$TGsUF`CMmQ>9eZ& z_~e~wD#D$u7}G<=UP1CkbId!eMf#2g1#P^Ico`LcK>*JM&CObkC}18TKJhwJ5BozQ zfHxJXD04p@aoL$2%CCWJ=Mu+++M$OdjnGGj7pcH zWN5FjucV#@kpId6qW3_}2+*Z%6lQ5{ zJMVNwV;|3<_s}bqJq%kNOVuht`;{Xlt?)@Igp9f&JEu<)zEtkMjLT&j5;LfHcWK~s z-Pr6|9y>Ta{&-ab9r1FSUzV=Q|Bv^Fn#9ssH>yXvL2X`nXXqW9<7CygaS5f!f69U4 zR;G+pgB6j7v@{I3Y&4m)Kk$XBaa3_j6R=-i?e3qo-gz?iJ^;ip#3t6Pm@d3sjpm@zDw7>aAq-ZVE+JC}p5smKPZ!dbVs v4%}#sZmGxcSZ#`8C+ip#3TJ$dooMmC(l~jDx%l0v{A&}?wlB+_AcV3&FdZBc literal 0 HcmV?d00001 diff --git a/MikroMaster/20260505/20260505024002-Config.rsc b/MikroMaster/20260505/20260505024002-Config.rsc new file mode 100644 index 0000000..7373e4a --- /dev/null +++ b/MikroMaster/20260505/20260505024002-Config.rsc @@ -0,0 +1,4501 @@ +# 2026-05-05 02:40:06 by RouterOS 7.22.1 +# software id = A8L5-07YF +# +# model = RB952Ui-5ac2nD +# serial number = D3D50CEDCD38 +/caps-man configuration +add channel.band=2ghz-b/g/n .control-channel-width=20mhz .extension-channel=\ + XX country=belarus datapath.client-to-client-forwarding=yes \ + .local-forwarding=yes name=cfg-2ghz ssid=vados +add channel.band=5ghz-a/n/ac .control-channel-width=20mhz .extension-channel=\ + XXXX country=belarus datapath.client-to-client-forwarding=yes \ + .local-forwarding=yes name=cfg-5ghz-ac ssid=vados5g +add channel.band=5ghz-a/n .control-channel-width=20mhz .extension-channel=XX \ + country=belarus datapath.client-to-client-forwarding=yes \ + .local-forwarding=yes name=cfg-5ghz-an ssid=vados5g +/interface ethernet +set [ find default-name=ether1 ] comment="WAN - Unet" mac-address=\ + 48:8F:5A:8E:1A:C2 name="ether1 - Unet" +set [ find default-name=ether3 ] comment=LEN +set [ find default-name=ether4 ] comment=NUC +set [ find default-name=ether5 ] poe-out=off +/interface l2tp-server +add comment=Server disabled=yes name=l2tp-in1 user=vados +/interface l2tp-client +add comment="Starless 2 MikroSPb" connect-to=176.53.203.171 name=l2tp-EoIP \ + user=vados +add allow=mschap2 allow-fast-path=yes comment=Starless connect-to=\ + vpn.starless.ru max-mru=1280 name=l2tp-vpn use-ipsec=yes use-peer-dns=yes \ + user=vados +/interface wireguard +add listen-port=13231 mtu=1280 name=WG +/disk +add slot=tmpfs tmpfs-max-size=22369621 type=tmpfs +/interface list +add name=WAN +add name=LAN +/interface lte apn +set [ find default=yes ] ip-type=ipv4 use-network-apn=no +/interface wifi channel +add band=5ghz-ax disabled=no frequency=5180,5200,5220,5240 name=5G-AX +add band=5ghz-ac disabled=no frequency=5180,5200,5220,5240 name=5G-AC +add band=2ghz-n disabled=no frequency=2422,2442,2462 name=2G-N +add band=2ghz-ax disabled=no frequency=2422,2442,2462 name=2G-AX +add band=2ghz-g disabled=no frequency=2422,2442,2462 name=2G-G +add band=5ghz-n disabled=no frequency=5180,5200,5220,5240 name=5G-AN +/interface wifi security +add authentication-types=wpa2-psk,wpa3-psk disabled=no group-encryption=ccmp \ + group-key-update=1h management-protection=allowed name=sec2g +add authentication-types=wpa3-psk disable-pmkid=yes disabled=no \ + group-encryption=ccmp group-key-update=5m management-encryption=cmac \ + management-protection=required name=sec5G +/interface wifi configuration +add channel=5G-AX disabled=no mode=ap name=5G-AX security=sec5G security.ft=\ + yes .ft-over-ds=yes ssid=vados +add channel=5G-AN disabled=no mode=ap name=5G-AN security=sec5G ssid=vados +/interface wireless security-profiles +set [ find default=yes ] supplicant-identity=MikroTik +/ip dhcp-server option +add code=12 name=HostName +add code=119 force=yes name=domain-search-list value="0x03'WORKGROUP'0x00" +/ip dhcp-server option sets +add name=HP1505n options=HostName +add name=StartLife1 options=HostName +add name=amsterDev options=HostName +add name=MiTV options=HostName +add name=miller options=HostName +add name=amster options=HostName +add name=garage options=HostName +add name=domain-search-set options=domain-search-list +add name=VADOS-LEN options=HostName +add name=VADOS-NUC options=HostName +add name=MikroNUC options=HostName +add name=master options=HostName +add name=MikroYellow options=HostName +add name="=\"Client ID\"" options=HostName +/ip dns forwarders +add dns-servers=1.1.1.1,1.0.0.1 name=blsp.at verify-doh-cert=no +add comment=Kra dns-servers=1.0.0.1,1.1.1.1 name=slon2.to verify-doh-cert=no +add dns-servers=1.1.1.1,1.0.0.1 name=slon3.at verify-doh-cert=no +add dns-servers=1.0.0.1,1.1.1.1 name=slon3.cc verify-doh-cert=no +add dns-servers=1.1.1.1,1.0.0.1 name=bs2web.at verify-doh-cert=no +add dns-servers=1.1.1.1,1.0.0.1 name=bs2best.at verify-doh-cert=no +add dns-servers=1.0.0.1,1.1.1.1 name=psrms.is verify-doh-cert=no +/ip ipsec proposal +set [ find default=yes ] disabled=yes +/ip pool +add name=dhcp ranges=10.30.30.83-10.30.30.254 +/ip smb users +set [ find default=yes ] disabled=yes +add disabled=yes name=vados +/ppp profile +set *FFFFFFFE use-upnp=no +/routing bgp template +set default disabled=no output.network=bgp-networks +/routing table +add disabled=no fib name=To-VPN +/system logging action +add email-start-tls=yes email-to=vados@vados.ru name=email target=email +/system script +add dont-require-permissions=no name=fetchCustom owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + /tool/fetch mode=https url=(\$GlobalScriptsUrl . #\".bak/mikro_bak_rsa@10.\ + 30.30.86.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.86.pub\";\ + \n#:local Script AM-setup\ + \n#/system/script/add name=\$Script owner=\$Script source=([ /tool/fetch c\ + heck-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \".r\ + sc\") output=user as-value ]->\"data\");\ + \n#/usb1/mikro_bak_rsa.pub\ + \n\ + \n#\ + \n#/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@1\ + 0.30.30.10.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.10.pub\";\ + \n#\ + \n#root.mnuc.backuper\ + \n\ + \n#/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@1\ + 0.30.30.81.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.81.pub\";\ + \n#:local Script AM-GlobalConfig;\ + \n#/system/script/add name=\$Script owner=\$Script source=([ /tool/fetch c\ + heck-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \".r\ + sc\") output=user as-value ]->\"data\");\ + \n#/usb1/mikro_bak_rsa.pub\ + \n#:local FetchFile AM-DOHCert.rsc\ + \n\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/tmp/\";\ + \n:global MkDir;\ + \n\ + \n:local FetchFile Binary.backup\ + \n:local localDir \"\";\ + \n\ + \n#\$MkDir \$localDir;\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \$FetchFile) dst-path=(\ + \$localDir . \$FetchFile);" +add comment="Example add WU servers to AddrList" dont-require-permissions=no \ + name=WU-add-to-list owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_Script to add target web sites DNS IP addresses into address list\r\ + \n# Tested with Mikrotik 6.4x\r\ + \n# Syed Jahanzaib / aacable@hotmail.com\r\ + \n# List name\r\ + \n:local LISTNAME \"windowsupdateslist\"\r\ + \n# Web site names which will be added in address list\r\ + \n:local TARGET1 \"update.microsoft.com\"\r\ + \n:local TARGET2 \"download.windowsupdate.com\"\r\ + \n:local TARGET3 \"download.microsoft.com\"\r\ + \n:local TARGET4 \"windowsupdate.com\"\r\ + \n:local TARGET5 \"ntservicepack.microsoft.com\"\r\ + \n:local TARGET6 \"wustat.windows.com\"\r\ + \n:local TARGET7 \"stats.microsoft.com\"\r\ + \n:local TARGET8 \"mp.microsoft.com\"\r\ + \n:local TARGET9 \"ws.microsoft.com\"\r\ + \n:local TARGET10 \"sls.update.microsoft.com.akadns.net\"\r\ + \n:local TARGET11 \"vortex.data.microsoft.com\"\r\ + \n:local TARGET12 \"vortex-win.data.microsoft.com\"\r\ + \n:local TARGET13 \"fe2.update.microsoft.com.akadns.net\"\r\ + \n:local TARGET14 \"statsfe2.update.microsoft.com.akadns.net\"\r\ + \n \r\ + \n# 1st time runner, check if address list is not created previously and a\ + dd entries in it for 1st time usage\r\ + \n:if ( [/ip firewall address-list find where list=\$LISTNAME] = \"\") do=\ + {\r\ + \n:log warning \"No address list for \$TARGET1 found ! creating and adding\ + \_resolved entry for 1st time usage ... zaib\"\r\ + \n \r\ + \n:local FirstAddr [resolve \$TARGET1];\r\ + \n\r\ + \n/ip firewall address-list add address=\$FirstAddr list=\$LISTNAME commen\ + t=\$TARGET1;\r\ + \n} else={\r\ + \n:log warning \"Previous List for \$LISTNAME found ! moving forward and c\ + hecking if DNS entries can be added in it ...\"\r\ + \n}\r\ + \n \r\ + \n# Check DNS entries and collect matching names\r\ + \n:foreach i in=[/ip dns cache find name~\"(\$TARGET1|\$TARGET2|\$TARGET3|\ + \$TARGET4|\$TARGET5|\$TARGET6|\$TARGET7|\$TARGET8|\$TARGET9|\$TARGET10|\$T\ + ARGET11|\$TARGET12|\$TARGET13|\$TARGET14)\" && \$type ~ \"^(A|CNAME)\\\$\"\ + \_] do={\r\ + \n \r\ + \n# Get IP Address from the names and hold it in temporary buffer\r\ + \n:local Buffer [/ip dns cache get \$i data];\r\ + \ndelay delay-time=10ms\r\ + \n \r\ + \n# Check if entry is already not exists, then OK, otherwise ignore duplic\ + ation\r\ + \n:if ( [/ip firewall address-list find where address=\$Buffer] = \"\") do\ + ={\r\ + \n \r\ + \n# Fetch DNS names for the entries\r\ + \n:local sitednsname [/ip dns cache get \$i name] ;\r\ + \n \r\ + \n# Print name in LOG window\r\ + \n:log info (\"added entry: \$sitednsname \$Buffer\");\r\ + \n \r\ + \n# Add IP addresses and there names to the address list\r\ + \n/ip firewall address-list add address=\$Buffer list=\$LISTNAME comment=\ + \$sitednsname;\r\ + \n}\r\ + \n}" +add comment="Add Hosts DNS names to NoWG addres list" \ + dont-require-permissions=no name=Add2vdsina owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_Script to add target web sites DNS IP addresses into address list\r\ + \n# Tested with Mikrotik 6.4x\r\ + \n# \r\ + \n# List name\r\ + \n:local LISTNAME \"NoWG\"\r\ + \n#\r\ + \n# Web site names which will be added in address list\r\ + \n:local TARGET1 \"comp-lenta.ru\"\r\ + \n:local TARGET2 \"ok.ru\"\r\ + \n:local TARGET3 \"vk.com\"\r\ + \n#:local TARGET4 \"smtp.mail.me.com\"\r\ + \n#:local TARGET4 \"windowsupdate.com\"\r\ + \n#:local TARGET5 \"ntservicepack.microsoft.com\"\r\ + \n#:local TARGET6 \"wustat.windows.com\"\r\ + \n#:local TARGET7 \"stats.microsoft.com\"\r\ + \n#:local TARGET8 \"mp.microsoft.com\"\r\ + \n#:local TARGET9 \"ws.microsoft.com\"\r\ + \n#:local TARGET10 \"sls.update.microsoft.com.akadns.net\"\r\ + \n#:local TARGET11 \"vortex.data.microsoft.com\"\r\ + \n#:local TARGET12 \"vortex-win.data.microsoft.com\"\r\ + \n#:local TARGET13 \"fe2.update.microsoft.com.akadns.net\"\r\ + \n#:local TARGET14 \"statsfe2.update.microsoft.com.akadns.net\"\r\ + \n \r\ + \n# 1st time runner, check if address list is not created previously and a\ + dd entries in it for 1st time usage\r\ + \n:if ( [/ip firewall address-list find where list=\$LISTNAME] = \"\") do=\ + {\r\ + \n:log warning \"No address list for \$TARGET1 found ! creating and adding\ + \_resolved entry for 1st time usage ... zaib\"\r\ + \n\r\ + \n:local FirstAddr [resolve \$TARGET1];\r\ + \n\r\ + \n/ip firewall address-list add address=\$FirstAddr list=\$LISTNAME commen\ + t=\$TARGET1;\r\ + \n\r\ + \n} else={\r\ + \n:log warning \"Previous List for \$LISTNAME found ! moving forward and c\ + hecking if DNS entries can be added in it ...\"\r\ + \n}\r\ + \n\r\ + \n# Check DNS entries and collect matching names\r\ + \n:foreach i in=[/ip dns cache find name~\"(\$TARGET1|\$TARGET2|\$TARGET3|\ + \$TARGET4)\" && \$type ~ \"^(A|CNAME)\\\$\" ] do={\r\ + \n\r\ + \n:log info (\"start entry: \$c \$sitednsname \$Buffer\");\r\ + \n\r\ + \n# Get IP Address from the names and hold it in temporary buffer\r\ + \n:local Buffer [/ip dns cache get \$i data];\r\ + \ndelay delay-time=10ms\r\ + \n:log info (\"1: \$Buffer\"); \r\ + \n\r\ + \n# Check if entry is already not exists, then OK, otherwise ignore duplic\ + ation\r\ + \n:if ( [/ip firewall address-list find where address=\$Buffer] = \"\") do\ + ={\r\ + \n\r\ + \n:log info (\"2: \$Buffer\"); \r\ + \n \r\ + \n# Fetch DNS names for the entries\r\ + \n:local sitednsname [/ip dns cache get \$i name] ;\r\ + \n \r\ + \n# Print name in LOG window\r\ + \n:log info (\"added entry: \$i \$sitednsname \$Buffer\");\r\ + \n \r\ + \n# Add IP addresses and there names to the address list\r\ + \n/ip firewall address-list add address=\$Buffer list=\$LISTNAME comment=\ + \$sitednsname;\r\ + \n}\r\ + \n}" +add comment="Flush DNS Cache" dont-require-permissions=no name=\ + DNS_Flush_Cache owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=\ + "/ip dns cache flush" +add comment="Certificates CloudFlare, Quad9 " dont-require-permissions=no \ + name=Update-Certificates owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_CloudFlare\r\ + \n#/tool/fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobalR\ + ootCA.crt.pem;\r\ + \n#/certificate/import file-name=DigiCertGlobalRootCA.crt.pem passphrase=\ + \"\";\r\ + \n#/tool/ fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobal\ + G2TLSRSASHA2562020CA1-1.crt.pem;\r\ + \n#/certificate/import file-name=DigiCertGlobalG2TLSRSASHA2562020CA1-1.crt\ + .pem passphrase=\"\";\r\ + \n# Quad9\r\ + \n#/tool/fetch mode=https url=\"https://cacerts.digicert.com/DigiCertGloba\ + lG3TLSECCSHA3842020CA1-1.crt.pem\"\r\ + \n#/certificate/import file-name=DigiCertGlobalG3TLSECCSHA3842020CA1-1.crt\ + .pem passphrase=\"\";\r\ + \n\r\ + \n:global GlobalScriptsUrl;\r\ + \n#google\r\ + \n:local CertName \"DigiCert-Global-Root-CA.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-CA\" [ find where common-na\ + me=\"DigiCert Global Root CA\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-CA.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-CA\" [ find where commo\ + n-name=\"DigiCert Assured ID Root CA\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-G2\" [ find where commo\ + n-name=\"DigiCert Assured ID Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-G3.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-G3\" [ find where commo\ + n-name=\"DigiCert Assured ID Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-G2-TLS-RSA-SHA256-2020-CA1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-G2-TLS-RSA-SHA256-2020-CA1\" [ f\ + ind where common-name=\"DigiCert Global G2 TLS RSA SHA256 2020 CA1\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-G3-TLS-ECC-SHA384-2020-CA1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-G3-TLS-ECC-SHA384-2020-CA1\" [ f\ + ind where common-name=\"DigiCert Global G3 TLS ECC SHA384 2020 CA1\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-Root-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-G2\" [ find where common-na\ + me=\"DigiCert Global Root G2\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-Root-G3.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-G3\" [ find where common-na\ + me=\"DigiCert Global Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-TLS-ECC-P384-Root-G5.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-TLS-ECC-P384-Root-G5\" [ find where com\ + mon-name=\"DigiCert TLS ECC P384 Root G5\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-TLS-RSA4096-Root-G5.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-TLS-RSA4096-Root-G5\" [ find where comm\ + on-name=\"DigiCert TLS RSA4096 Root G5\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Trusted-Root-G4.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Trusted-Root-G4\" [ find where common-n\ + ame=\"DigiCert Trusted Root G4\" ];\r\ + \n\r\ + \n:set CertName \"GTS-Root-R4.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"GTS-Root-R4\" [ find where common-name=\"GTS Roo\ + t R4\" ];\r\ + \n\r\ + \n:set CertName \"Go-Daddy-Root-Certificate-Authority-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Go-Daddy-Root-Certificate-Authority-G2\" [ find \ + where common-name=\"Go Daddy Root Certificate Authority - G2\" ];\r\ + \n\r\ + \n:set CertName \"ISRG-Root-X1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"ISRG-Root-X1\" [ find where common-name=\"ISRG R\ + oot X1\" ];\r\ + \n\r\ + \n:set CertName \"Root-YE.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Root-YE\" [ find where common-name=\"Root YE\" ]\ + ;\r\ + \n\r\ + \n:set CertName \"Starfield-Root-Certificate-Authority-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Starfield-Root-Certificate-Authority-G2\" [ find\ + \_where common-name=\"Starfield Root Certificate Authority - G2\" ];\r\ + \n\r\ + \n:set CertName \"USERTrust-RSA-Certification-Authority.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"USERTrust-RSA-Certification-Authority\" [ find w\ + here common-name=\"USERTrust RSA Certification Authority\" ];\r\ + \n\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"GTS-Root-RX.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#internet\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"ISRG-Root-X2.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n\r\ + \n\r\ + \n#/ip/dns/set allow-remote-requests=yes doh-max-concurrent-queries=100 do\ + h-max-server-connections=20 use-doh-server=https://security.cloudflare-dns\ + .com/dns-query verify-doh-cert=yes;\r\ + \n#/ip/dns/static remove [find where address=1.1.1.1];\r\ + \n#/ip/dns/static add address=1.1.1.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 1\";\r\ + \n#/ip/dns/ static remove [find where address=1.0.0.1];\r\ + \n#/ip/dns/static add address=1.0.0.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 2\"\r\ + \n#/ip dns static add address=2606:4700:4700::1111 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip dns static add address=2606:4700:4700::1001 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip/dns set servers=\"1.0.0.1, 8.8.4.4\";\r\ + \n#/ip/dns set servers=\"\";" +add dont-require-permissions=no name=script1 owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="/\ + tool/netwatch/add comment=\"doh-fallback, doh-url=https://security.cloudfl\ + are-dns.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=Clou\ + dFlare-doh IPv4 1\" host=1.1.1.1;\r\ + \n/tool/netwatch/add comment=\"doh, doh-url=https://security.cloudflare-dn\ + s.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=CloudFlare\ + -doh IPv4 2\" host=1.0.0.1;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.google/dns-query, doh-cert=DigiCert Global Root G2, notify, name=Goog\ + le-doh IPv4 1\" host=8.8.8.8;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.google/dns-query, doh-cert=DigiCert Global Root G2, notify, name=Goog\ + le-doh IPv4 2\" host=8.8.4.4;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.quad9.net/dns-query, doh-cert=DigiCert Global Root G3, notify, name=C\ + uad9-doh IPv4 1\" host=9.9.9.9;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.quad9.net/dns-query, doh-cert=DigiCert Global Root G3, notify, name=C\ + uad9-doh IPv4 2\" host=149.112.112.112;\r\ + \n\r\ + \n/tool/netwatch/add comment=\"dns, notify, name=ns1.unet.ws\" host=91.192\ + .189.2;" +add dont-require-permissions=no name=script2 owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \r\ + \n\r\ + \n:global InspectVar;\r\ + \n#:global RouterBoard;\r\ + \n#:do {:set RouterBoard [[ :parse \"/system/routerboard/get\" ]]} on-erro\ + r={}\r\ + \n#:global Resources;\r\ + \n#:do {:set Resources [[ :parse \"/system/resource/get\" ]]} on-error={}\ + \r\ + \n\r\ + \n#:global Updates;\r\ + \n#:do {:set Updates [[ :parse \"/system/package/update/get\" ]]} on-error\ + ={}\r\ + \n\r\ + \n#:global PkgUpdStatus \"undefined\";\r\ + \n#:local Update [/system/package/update/get];\r\ + \n#:retry command={:set PkgUpdStatus (\$Update->\"status\")} delay=200ms m\ + ax=5 on-error={};\r\ + \n\r\ + \n#:log warning [\$InspectVar \$RouterBoard];\r\ + \n#:put [\$InspectVar \$RouterBoard];\r\ + \n\r\ + \n#:retry command={/system/package/update check-for-updates without-paging\ + \_as-value} delay=300ms max=5 on-error={};\r\ + \n\r\ + \n#:global arrDeviceInfo ({});\r\ + \n#:local arrDeviceInfo ({\"section\":{\"key\":\"\"; \"value\":\"\";};});\ + \r\ + \n#:set (\$arrDeviceInfo->\"RouterBoard\") [[ :parse \"/system/routerboard\ + /get\" ]];\r\ + \n#:retry command={:set (\$arrDeviceInfo->\"Updates\") [[ :parse \"/system\ + /package/update/get\" ]]} delay=500ms max=5 on-error={:log error (\"Error\ + \")};\r\ + \n# [:toarray {\"section\"={\"key\"=\"\"; \"value\"=\"\";} }];\r\ + \n# [:toarray \"\"];\r\ + \n:local arrDeviceInfo ({});\r\ + \n\r\ + \n:set (\$arrDeviceInfo->\"devUpdates\") {\"channel\"; \"stable\";};\r\ + \n#:do {:set (arrDeviceInfo->\"Updates\") [[ :parse \"/system/package/upda\ + te/get\" ]]} on-error={:log error (\$error)}\r\ + \n\$InspectVar \$arrDeviceInfo;\r\ + \n" +add comment="Script for setup routeros script system" \ + dont-require-permissions=no name=AM-setup owner=AM-setup policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-setup\r\ + \n# Script comment: Script for setup routeros script system\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n# :local ScriptName [ :jobname ];\r\ + \n# Additional commands:\r\ + \n#\r\ + \n# For scripts:\r\ + \n#:global NewScript \"script_name\"; \r\ + \n#:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n#/system/script/add name=\$NewScript owner=\$NewScript source=([/tool/fe\ + tch check-certificate=yes-without-crl (\$GlobalScriptsUrl . \$ScriptAdd . \ + \".rsc\") output=user as-value ]->\"data\");\r\ + \n#:global NewScript (a);\r\ + \n#:global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n#\r\ + \n# For run from terminal:\r\ + \n#/system/script/add name=AM-setup owner=AM-Setup source=([/tool/fetch ch\ + eck-certificate=yes-without-crl \"https://ros.vados.ru/AM-setup.rsc\" outp\ + ut=user as-value ]->\"data\");\r\ + \n#\r\ + \n\r\ + \n:global ScriptUpdatesCRLF \"LF\";\r\ + \n#:if (\$ScriptUpdatesCRLF != false) do={\r\ + \n# :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vad\ + os\" ] do={\r\ + \n# if (\$ScriptUpdatesCRLF = true) do={\r\ + \n# /system/script/set source=[ :tocrlf [ get \$Script source ] ] \$S\ + cript;\r\ + \n# } else={\r\ + \n# /system/script/set source=[ :tolf [ get \$Script source ] ] \$Scr\ + ipt;\r\ + \n# }\r\ + \n# }\r\ + \n#}\r\ + \n\r\ + \n# /import verbose=no \$ScriptName\r\ + \n:global SetupScript [ :jobname ];\r\ + \n:global RemoveMe;\r\ + \n:global RunOnce;\r\ + \n:global InitSetup true;\r\ + \n:global tmpfs false;\r\ + \n\r\ + \n{\r\ + \n :local RmMe [:tobool \$1];\r\ + \n\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SetupScript;\r\ + \n :global RemoveMe;\r\ + \n :global InitSetup;\r\ + \n :global tmpfs;\r\ + \n \r\ + \n :local CertCommonName \"Root YE\";\r\ + \n :local CertFileName \"Root-YE.pem\";\r\ + \n :local CertFingerprint \"e14ffcad5b0025731006caa43a121a22d8e9700f4fb9c\ + f852f02a708aa5d5666\";\r\ + \n\r\ + \n :if (\$SetupScript = false) do={\r\ + \n :global SetupScript \"AM-setup\";\r\ + \n }\r\ + \n :if (\$RemoveMe != false) do={\r\ + \n :set RemoveMe true;\r\ + \n }\r\ + \n\r\ + \n :log warning (\"\\n\\\$GlobalScriptsUrl = \" . \$GlobalScriptsUrl);\r\ + \n \r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint ] \ + ] != 1) do={\r\ + \n :error \"Something is wrong with your certificates!\";\r\ + \n } else={\r\ + \n :if (!(((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" ||\ + \_\\\r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \"fetch\" || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\r\ + \n [ :len [ /certificate/builtin/find where common-name=\$CertComm\ + onName ] ] > 0)) do={\r\ + \n :put \"Importing certificate...\";\r\ + \n /tool/fetch (\$GlobalScriptsUrl . \"certs/ipall/\" . \$CertFileN\ + ame) dst-path=\$CertFileName as-value;\r\ + \n :delay 1s;\r\ + \n /certificate/import file-name=\$CertFileName passphrase=\"\";\r\ + \n :delay 1s;\r\ + \n };\r\ + \n };\r\ + \n\r\ + \n:local MkTmpfs do={\r\ + \n :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\r\ + \n :if ([ :len \$TmpFs ] = 1) do={\r\ + \n :if ([ /disk/get \$TmpFs disabled ] = true) do={\r\ + \n :log info (\"The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :log info (\"Try to removing directory 'tmpfs'.\");\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/remove tmpfs;\r\ + \n :return true;\r\ + \n } delay=100ms max=10;\r\ + \n } on-error={ }\r\ + \n# \$RmDir \"tmpfs\";\r\ + \n :onerror Err {\r\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource/g\ + et total-memory ] / 3);\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get tmpfs;\r\ + \n :return true;\r\ + \n } delay=222ms max=10;\r\ + \n } on-error={ }\r\ + \n } do={\r\ + \n :log warning (\"Creating disk of type tmpfs failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n# :return true;\r\ + \n}\r\ + \n:if (\$tmpfs = true) do={\r\ + \n :put \"Tmpfs variable is true. Checking for tmpfs/scripts directory...\ + \";\r\ + \n :if ([/file find name=\"tmpfs/scripts\"] != \"\") do={\r\ + \n :log info (\$0 . \"Directory tmpfs/scripts exsist.\");\r\ + \n :return \$true;\r\ + \n } else={\r\ + \n :log warning (\$0 . \"Directory tmpfs/scripts does't exsist.\");\r\ + \n :if ([ \$MkTmpfs ] = false) do={\r\ + \n :log error (\$0 . \"Directory tmpfs is not created!\");\r\ + \n :return false;\r\ + \n } else={\r\ + \n :onerror Err {\r\ + \n /file/add type=\"directory\" name=/tmpfs/scripts;\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get /tmpfs/scripts;\r\ + \n :return true;\r\ + \n } delay=100ms max=10;\r\ + \n } on-error={ }\r\ + \n } do={\r\ + \n :log warning (\$0 . \"Making directory 'scripts' failed: \" . \$\ + Err);\r\ + \n :return false;\r\ + \n }\r\ + \n# :return true;\r\ + \n# [ /file/get \$FileName ]\r\ + \n }\r\ + \n# :log error (\$0 . \"Directory tmpfs/scripts does not exsist. Remove\ + \_global variable tmpfs!\");\r\ + \n# :global tmpfs (a);\r\ + \n# return false;\r\ + \n }\r\ + \n}\r\ + \n :put \"Renaming AM-GlobalConfig, if exists...\";\r\ + \n :local ConfOldName (\"AM-GlobalConfig-\" . [ /system/clock/get date ] \ + . [ /system/clock/get time ] . \".rsc\");\r\ + \n /system/script/set name=\$ConfOldName [ find where name=\"AM-GlobalCon\ + fig\" ];\r\ + \n :foreach Script in={ \"AM-GlobalConfig\"; \"AM-GlobalFunc\" } do={\r\ + \n :put \"Installing \$Script...\";\r\ + \n /system/script/remove [ find where name=\$Script ];\r\ + \n /system/script/add name=\$Script owner=\$Script source=([ /tool/fetc\ + h check-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \ + \".rsc\") output=user as-value ]->\"data\");\r\ + \n \r\ + \n /system/script run \$Script;\r\ + \n :delay 2s;\r\ + \n };\r\ + \n\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint ] \ + ] > 0) do={\r\ + \n :put \"Renaming certificate by its common-name...\";\r\ + \n :global CertificateNameByCN;\r\ + \n \$CertificateNameByCN \$CertFingerprint;\r\ + \n };\r\ + \n\r\ + \n :if (\$RemoveMe = true) do={\r\ + \n :put \"Add Scheduler for remove this script...\";\r\ + \n :local OnEvent (\":delay 30s;\\n\" . \"/system/script/remove [ find \ + where name=\\\"\$SetupScript\\\" ];\\n\" . \\\r\ + \n \":delay 2s;\\n\" . \"/system/scheduler/remove [ find where name=\\\ + \"_RemoveSetup\\\" ];\\n\" . \\\r\ + \n \":delay 2s;\\n\" . \":global RemoveMe (a);\\n\");\r\ + \n :local Comment \"_RemoveSetup tmp scheduler for remove setup script.\ + \";\r\ + \n /system/scheduler/add name=\"_RemoveSetup\" comment=\$Comment start-\ + time=startup interval=30s on-event=\$OnEvent;\r\ + \n :log warning (\$0 . \"\\nI've done everything, and now I'm tired..\ + . I'm leaving.\\nThere will be an error below, this is normal.\");\r\ + \n }\r\ + \n :delay 1;\r\ + \n :put \"Loading configuration and functions...\";\r\ + \n :do { \r\ + \n :global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n :put \"Normal removing temporary global environment variables.\";\ + \r\ + \n :global SetupScript (a);\r\ + \n :global InitSetup (a);\r\ + \n :global RemoveMe (a);\r\ + \n } on-error={\r\ + \n :local ErrorMsg \"Loading configuration and functions error!\";\r\ + \n :log error (\$0 . \$ErrorMsg . :error);\r\ + \n :error \$ErrorMsg;\r\ + \n }\r\ + \n}\r\ + \n" +add comment="Global Config Script" dont-require-permissions=no name=\ + AM-GlobalConfig owner=AM-GlobalConfig policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GlobalConfig\r\ + \n# Script comment: Global Config Script\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# Warning: Dont touch this line!\r\ + \n:global Identity [ /system identity get name ];\r\ + \n:global GlobalConfReady false;\r\ + \n#\r\ + \n#\r\ + \n# Global Url For Amster scripts to fetch\r\ + \n# most be defined in AM-Init-Script or AM-setup scripts\r\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n:global ScriptsUrlSuffix \"\";\r\ + \n:global CheckSumsVerify true;\r\ + \n\r\ + \n:global ScriptUpdatesCRLF true;\r\ + \n:global CommentsInScripts true;\r\ + \n\r\ + \n# Debug output:\r\ + \n:global PrintDebug true; #false;\r\ + \n\r\ + \n# Debug output for specific script:\r\ + \n#:set (\$PrintDebugOverride->\"AM-GlobalFunc\") true;\r\ + \n\r\ + \n# Debug logs\r\ + \n# Other actions (disk, email, remote or support) can be used as well.\r\ + \n# I do not recommend using echo - use debug output instead (https://rsc.\ + eworm.de/main/DEBUG.html#debug-output).\r\ + \n#/system/logging/add topics=script,debug action=memory;\r\ + \n\r\ + \n:global MikrotikUpgradeUrl \"https://upgrade.mikrotik.com/routeros\";\r\ + \n:global Domain \"WORKGROUP\";\r\ + \n\r\ + \n:global EmailGeneralTo \"vados@vados.ru\";\r\ + \n#:global EmailGeneralCc \"\";\r\ + \n\r\ + \n# \$ScriptInstallUpdate mod/notification-telegram\r\ + \n:global TelegramTokenId \"8390868324:AAG3_d1hfVR2M6pGAgDK6ZvhOe4J97nyopw\ + \";\r\ + \n:global TelegramChatId \"-1003631309063\"; #\"454403445\";\r\ + \n# Use this to send notifications to a specific topic in group.\r\ + \n#:global TelegramThreadId \"30\";\r\ + \n# Using telegram-chat you have to define trusted chat ids (not group ids\ + !)\r\ + \n# or user names. Groups allow to chat with devices simultaneously.\r\ + \n:global TelegramChatIdsTrusted {\r\ + \n \"454403445\"\r\ + \n \"-1003631309063\"\r\ + \n \"-5124482807\"\r\ + \n \"1087968824\";\r\ + \n};\r\ + \n# \"-5294757340\";\r\ + \n\r\ + \n:global TelegramChatGroups \"(all)\";\r\ + \n#:global TelegramChatGroups \"(all|home|office)\";\r\ + \n\r\ + \n:global NotificationFunctions {\r\ + \n \"email\"\r\ + \n \"telegram\";\r\ + \n};\r\ + \n# Toggle this to disable symbols in notifications.\r\ + \n:global NotificationsWithSymbols true;\r\ + \n:global TerminalColorOutput true;\r\ + \n\r\ + \n:global DetectIpAddrDefault \"https://ipv4.mikrotik.ovh/\";\r\ + \n:global DetectIpAddrFallback \"https://api.ipify.org/\";\r\ + \n\r\ + \n## Update channel. Possible values: stable, long-term, testing, developm\ + ent\r\ + \n:global updateChannel \"stable\";\r\ + \n\r\ + \n:global CertRenewUrl (\$GlobalScriptsUrl . \"certs/\" . \$Identity . \"/\ + \");\r\ + \n:global CertRenewTime 2w;\r\ + \n:global CertRenewPass {\r\ + \n \"\";\r\ + \n# \"v3ry-s3cr3t\";\r\ + \n# \"4n0th3r-s3cr3t\";\r\ + \n};\r\ + \n:global CertWarnTime 1w;\r\ + \n:global CertIssuedExportPass {\r\ + \n \"\";\r\ + \n# \"cert1-cn\"=\"v3ry-s3cr3t\";\r\ + \n# \"cert2-cn\"=\"4n0th3r-s3cr3t\";\r\ + \n};\r\ + \n\r\ + \n# Script BackupAndUpdate mode, possible values: backup,\r\ + \n# updateOnce - Update once as \"osnotify\" and back \"osnotify\" mode (i\ + n terminal run :set OSUpdateMode updateOnce; \$OSUpdateMode;). \r\ + \n# osupdate - Update if available and creates backups before/after update\ + \_(ignores `forceBackup`)\r\ + \n# Set `forceBackup` to true to always create backups, even\ + \_without updates\r\ + \n# osnotify - Set `forceBackup` to always create backups on every run\r\ + \n:global DevInfoIncludeIP true;\r\ + \n:global BackupAndUpdateMode \"osnotify\"\r\ + \n\r\ + \n:global forceBackup true;\r\ + \n:global BackupPassword \"Peskar55\";\r\ + \n\r\ + \n# SFTP Backup Variables\r\ + \n:global BackupRandomDelay 0;\r\ + \n:global BackupUploadUrl \"sftp://amster.vados.ru/upload/\";\r\ + \n:global BackupUploadUser \$Identity;\r\ + \n:global BackupUploadPass \"root.mnuc.backuper\";\r\ + \n\r\ + \n:global BackupSendBinary true;\r\ + \n:global BackupSendExport true;\r\ + \n:global BackupSendGlobalConfig true;\r\ + \n:global BackupSendScripts true;\r\ + \n\r\ + \n# Remove local file after uploading if no errors\r\ + \n:global BackupRmLocal true;\r\ + \n\r\ + \n# Local Backups Root Directory \r\ + \n:global BackupLocalRoot \"tmpfs\";\r\ + \n\r\ + \n# Encrypt Backup\r\ + \n:global BackupEncrypt true;\r\ + \n\r\ + \n# Sensitive information in Backups\r\ + \n:global BackupSens true;\r\ + \n\r\ + \n# User Export\r\ + \n:global BackupUser true;\r\ + \n\r\ + \n# License Export (not for CHR, will silently skip)\r\ + \n:global BackupLicense false;\r\ + \n\r\ + \n# SSH Keys\r\ + \n:global BackupSshKeys true;\r\ + \n\r\ + \n# Certificate Export\r\ + \n:global BackupCerts true;\r\ + \n\r\ + \n# Certificate Password\r\ + \n:global BackupCertsPasswd \"\";\r\ + \n\r\ + \n# User-Manager Export\r\ + \n:global BackupUserMan false;\r\ + \n\r\ + \n# The Dude Export\r\ + \n:global BackupDude false;\r\ + \n\r\ + \n# User Files to export, comma-separated string or array of strings\r\ + \n# User Files are not removed on backup\r\ + \n# Any directory paths will be removed (/ -> _) on remote file\r\ + \n# Nonpresent files are silently skipped\r\ + \n:global BackupUserList \"autosupout.rif,autosupout.old.rif\";\r\ + \n\r\ + \n# load functions and any custom scripts\r\ + \n# [ /system/script/find where name=\"global-config-ov\ + erlay\" ], \\\r\ + \n# [ /system/script/find where name~\"^global-config-o\ + verlay\\\\.d/.\" ]\r\ + \n#\r\ + \n#:foreach Script in=([ /system/script/find where name=\"Amster-TGglobalV\ + ars\" ], [ /system/script/find where name=\"Amster-TGglobalFunc\" ]) do={\ + \r\ + \n# :onerror Err {\r\ + \n# /system/script/run \$Script;\r\ + \n# } do={\r\ + \n# :log error (\"Loading configuration from configs and functions\"\ + \_. [ /system/script/get \$Script name ] . \" failed: \" . \$Err);\r\ + \n# }\r\ + \n#}\r\ + \n#:log info \"\\ndevMode = \$devMode\";\r\ + \n#:log info \"\\ndevRunning = \$devRunning\";\r\ + \n:foreach Script in=[ /system/script/find where source~\"^#!rsc by Vados \ + GlobalRUN\\r\?\\n\" ] do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n :log error (\"Run script \" . [ /system/script/get \$Script name \ + ] . \" width marker \\\" GlobalRUN\\\" failed: \" . \$Err);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# signal we are ready\r\ + \n:set GlobalConfReady true;\r\ + \n:while (\$GlobalConfReady != true) do={:delay 500ms};\r\ + \n" +add comment="Global functions" dont-require-permissions=no name=AM-GlobalFunc \ + owner=AM-GlobalFunc policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GglobalFunc\r\ + \n# Script comment: Global functions\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch, scheduler\r\ + \n:local ExitOK false;\r\ + \n:local ScriptName [ :jobname ];\r\ + \n#:global checkRunJob \$SriptName;\r\ + \n#:global fixCRLF;\r\ + \n#:if (\$fixCRLF != false) do={\r\ + \n#:foreach fixScript in=([ /system/script/find where name~\"*\" ]) do={/s\ + ystem/script/set source=[ :tocrlf [ get \$fixScript source ] ] \$fixScript\ + }\r\ + \n#:if (\$fixCRLF != \"LF\") do={ /system/script/set source=[ :tocrlf [ g\ + et \$fixScript source ] ] \$fixScript};};\r\ + \n#}\r\ + \n:global GlobalFuncReady false;\r\ + \n\r\ + \n# Git commit id & info, expected configuration version\r\ + \n:global CommitId \"main/614/a7992fc8\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 01:00:03 05.05.2026.\";\r\ + \n\r\ + \n# The variables are received right here.\r\ + \n:global GlobalConfVersion 140;\r\ + \n\r\ + \n:global SumsDirAndFileName \"tmp/checksums.json\";\r\ + \n\r\ + \n:global Identity [/system/identity/get name];\r\ + \n:global IdentityShort [:pick \$Identity 0 18];\r\ + \n\r\ + \n:global devBoardName [/system/resource/get board-name];\r\ + \n:global devMode [/system/device-mode/get mode];\r\ + \n:global devCurArch [/system/resource/get architecture-name];\r\ + \n:global devCurVersion [/system/resource/get version];\r\ + \n\r\ + \n# Variables defined in AM-GlobalConfig.rsc\r\ + \n:global TerminalColorOutput;\r\ + \n:global CommentsInScripts;\r\ + \n:global DetectIpAddrDefault;\r\ + \n:global DetectIpAddrFallback;\r\ + \n:global updateChannel;\r\ + \n:global Domain;\r\ + \n:global EmailGeneralTo;\r\ + \n:global BackupAndUpdateMode;\r\ + \n\r\ + \n# Single functions, without nested functions.\r\ + \n:global MiniDateTimeStamp;\r\ + \n:global MicroDateTimeStamp;\r\ + \n\r\ + \n# Include globals \$PrintDebug and \$PrintDebugOverride\r\ + \n:global LogPrint;\r\ + \n\r\ + \n# DeviceInfo and Updates\r\ + \n:global IsCheckUpdates;\r\ + \n:global WaitCheckUpdates;\r\ + \n:global GetPubIp;\r\ + \n\r\ + \n:global GetArrDeviceInfo;\r\ + \n:global WaitArrDeviceInfo;\r\ + \n\r\ + \n:global devModel;\r\ + \n:global devRunningMode;\r\ + \n\r\ + \n:global devRbRevision;\r\ + \n:global devRbSerialNumber;\r\ + \n:global devRbVerAvail;\r\ + \n\r\ + \n:global runningChannelVersion;\r\ + \n:global runningChannel;\r\ + \n:global runningVersion;\r\ + \n\r\ + \n:global devBuildTime;\r\ + \n:global ROsVerAvail;\r\ + \n:global PkgUpdStatus;\r\ + \n:global currentUpdateChannel;\r\ + \n\r\ + \n:global ScriptInstallUpdate;\r\ + \n\r\ + \n:global DeviceInfo;\r\ + \n\r\ + \n:global OldMode;\r\ + \n\r\ + \n:global ParseKeyValueStore;\r\ + \n:global RandomDelay;\r\ + \n:global GetRandomNumber;\r\ + \n:global EscapeForRegEx;\r\ + \n:global CharacterMultiply;\r\ + \n:global CharacterReplace;\r\ + \n:global CleanFilePath;\r\ + \n:global CleanName;\r\ + \n\r\ + \n:global CommitBrief;\r\ + \n\r\ + \n:global EitherOr;\r\ + \n:global FormatLine;\r\ + \n:global GetRandom20CharAlNum;\r\ + \n:global GetRandom20CharHex;\r\ + \n:global GetRandomNumber;\r\ + \n:global Grep;\r\ + \n:global IfThenElse;\r\ + \n:global MAX;\r\ + \n:global MIN;\r\ + \n:global HumanReadableNum;\r\ + \n\r\ + \n:global IsFullyConnected;\r\ + \n:global IsDNSResolving;\r\ + \n:global IsTimeSync;\r\ + \n:global IsTimeSyncCached;\r\ + \n:global IsTimeSyncResetNtp;\r\ + \n\r\ + \n:global WaitDNSResolving;\r\ + \n:global WaitFullyConnected;\r\ + \n:global WaitTimeSync;\r\ + \n:global MkDir;\r\ + \n:global RmDir;\r\ + \n:global RmFile;\r\ + \n:global FileGet;\r\ + \n:global Unix2Dos;\r\ + \n:global UrlEncode;\r\ + \n:global WaitForFile;\r\ + \n:global ScriptLock;\r\ + \n:global SendTelegram;\r\ + \n:global NotificationFunctions;\r\ + \n:global SendNotification;\r\ + \n:global SendNotification2;\r\ + \n:global SymbolForNotification;\r\ + \n:global SymbolByUnicodeName;\r\ + \n:global ValidateSyntax;\r\ + \n:global CheckSumsVerify;\r\ + \n:global GlobalConfChanges;\r\ + \n:global GlobalConfMigration;\r\ + \n:global VersionToNum;\r\ + \n:global RequiredRouterOS;\r\ + \n:global ExitError;\r\ + \n:global ExitOnError;\r\ + \n\r\ + \n:global FetchHugeFiles;\r\ + \n:global FetchUserAgentStr;\r\ + \n:global FileExists;\r\ + \n:global CertificateAvailable;\r\ + \n:global CertificateDownload;\r\ + \n:global CertificateNameByCN;\r\ + \n:global CharacterMultiply;\r\ + \n\r\ + \n:global InspectVar;\r\ + \n:global InspectVarRet;\r\ + \n:global ParseCustom;\r\ + \n\r\ + \n:set IsCheckUpdates do={\r\ + \n :local isInfo [:tobool \$1];\r\ + \n :global updateChannel;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n :log info (\$0 . \" \\\$isInfo = \" . \$isInfo); \r\ + \n :local CurrentChannel [ /system/package/update/get channel ];\r\ + \n :if ([ :len \$updateChannel ] > 0 && \$CurrentChannel != \$updateChann\ + el) do={\r\ + \n :retry command={/system/package/update set channel=\$updateChannel} \ + \_delay=300ms max=5 on-error={};\r\ + \n :log info (\$0 . \" Set updates channel to: \$updateChannel\");\r\ + \n }\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local Channel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set currentUpdateChannel \$Channel;\r\ + \n :log info (\$0 . \" Update Channel: \" . \$Channel . \".\");\r\ + \n :local StatusPkg \"undefined\";\r\ + \n :log info (\$0 . \" Checking for updates...\");\r\ + \n :retry command={:set \$StatusPkg ([/system/package/update/check-for-up\ + dates without-paging as-value]->\"status\")} \\\r\ + \n delay=300ms max=5 on-error={};\r\ + \n :log info (\$0 . \" \\\$StatusPkg = \" . \$StatusPkg);\r\ + \n :if (\$StatusPkg = \"New version is available\") do={ :set PkgUpdStatu\ + s true; } else={ :set PkgUpdStatus false; }\r\ + \n :set ROsVerAvail [ :tostr [ /system/package/update/get latest-version \ + ] ];\r\ + \n :log info (\$0 . \" \\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if (\$isInfo != false || \$PkgUpdStatus = true) do={\r\ + \n :log info (\$0 . \" \\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :retry command={:set (\$arrDeviceInfo->\"devUpdates\") [ /system/pac\ + kage/update/get ]} delay=500ms max=5 on-error={:log error (\"Error\")};\r\ + \n :return true;\r\ + \n } else={\r\ + \n :return \$PkgUpdStatus;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set WaitCheckUpdates do={\r\ + \n :global IsCheckUpdates;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n :local Status \"\";\r\ + \n :local Update;\r\ + \n :local WaitCount 0;\r\ + \n :if ([ \$IsCheckUpdates true ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n :while ((\$Status = \"\" || \$Status = \"finding out latest version...\ + \") && \$WaitCount < 60) do={\r\ + \n :delay 1s;\r\ + \n :set WaitCount (\$WaitCount + 1);\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n }\r\ + \n :set Update [ /system/package/update/get ];\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n :if ((\$Update->\"status\") = \"New version is available\") do={\r\ + \n :set PkgUpdStatus true;\r\ + \n } else={\r\ + \n :set PkgUpdStatus false;\r\ + \n }\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :set (\$arrDeviceInfo->\"devUpdates\") \$Update;\r\ + \n :if (\$Status = \"\" || \$Status = \"finding out latest version...\") \ + do={\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set WaitArrDeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :while ([ \$GetArrDeviceInfo ] = false) do={\r\ + \n :delay 1s;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set GetArrDeviceInfo do={\r\ + \n :global LogPrint;\r\ + \n :global arrDeviceInfo;\r\ + \n :global devBoardName;\r\ + \n :global devModel;\r\ + \n :global devRunning;\r\ + \n :global devCurArch;\r\ + \n :global devRbRevision;\r\ + \n :global devRbSerialNumber;\r\ + \n :global devBuildTime;\r\ + \n :global runningChannelVersion;\r\ + \n :global runningChannel;\r\ + \n :global runningVersion;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n\r\ + \n :local DeviceInfo;\r\ + \n :local Resource [/system/resource/get];\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local VersionString [ :tostr (\$Resource->\"version\") ];\r\ + \n :local ChannelStart [ :find \$VersionString \" (\" ];\r\ + \n :local RouterBoard;\r\ + \n :local IsRouterBoard false;\r\ + \n :local RunningMode \"\";\r\ + \n\r\ + \n :set devCurArch [ :tostr (\$Resource->\"architecture-name\") ];\r\ + \n :set devBuildTime [ :tostr (\$Resource->\"build-time\") ];\r\ + \n :set runningChannelVersion \$VersionString;\r\ + \n :set runningVersion \$VersionString;\r\ + \n :set runningChannel \"\";\r\ + \n\r\ + \n :if ([ :typeof \$ChannelStart ] = \"num\" && \$ChannelStart >= 0) do=\ + {\r\ + \n :set runningVersion [ :pick \$VersionString 0 \$ChannelStart ];\r\ + \n :local ChannelRest [ :pick \$VersionString (\$ChannelStart + 2) [ :\ + len \$VersionString ] ];\r\ + \n :local ChannelEnd [ :find \$ChannelRest \")\" ];\r\ + \n :if ([ :typeof \$ChannelEnd ] = \"num\" && \$ChannelEnd >= 0) do={\ + \r\ + \n :set runningChannel [ :pick \$ChannelRest 0 \$ChannelEnd ];\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([:pick \$devBoardName 0 3] != \"CHR\" or [:pick \$devBoardName 0\ + \_3] != \"x86\") do={\r\ + \n :do {\r\ + \n :set RouterBoard [[ :parse \"/system/routerboard/get\" ]];\r\ + \n# :set RouterBoard [ /system/routerboard/get ];\r\ + \n :if ((\$RouterBoard->\"routerboard\") = true) do={\r\ + \n :set IsRouterBoard true;\r\ + \n }\r\ + \n } on-error={}\r\ + \n }\r\ + \n\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get mode ];\r\ + \n } on-error={\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get running ];\r\ + \n } on-error={\r\ + \n :set RunningMode \"\";\r\ + \n }\r\ + \n }\r\ + \n :set devRunning \$RunningMode;\r\ + \n\r\ + \n :if (\$IsRouterBoard = true) do={\r\ + \n :set devModel [ :tostr (\$RouterBoard->\"model\") ];\r\ + \n :set devRbRevision [ :tostr (\$RouterBoard->\"revision\") ];\r\ + \n :set devRbSerialNumber [ :tostr (\$RouterBoard->\"serial-number\") \ + ];\r\ + \n } else={\r\ + \n :set devModel \$devBoardName;\r\ + \n :set devRbRevision \"\";\r\ + \n :set devRbSerialNumber \"\";\r\ + \n }\r\ + \n\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n\r\ + \n :set (\$DeviceInfo->\"board-name\") \$devBoardName;\r\ + \n :set (\$DeviceInfo->\"architecture-name\") \$devCurArch;\r\ + \n :set (\$DeviceInfo->\"model\") \$devModel;\r\ + \n :set (\$DeviceInfo->\"revision\") \$devRbRevision;\r\ + \n :set (\$DeviceInfo->\"serial-number\") \$devRbSerialNumber;\r\ + \n :set (\$DeviceInfo->\"running-mode\") \$devRunning;\r\ + \n :set (\$DeviceInfo->\"build-time\") \$devBuildTime;\r\ + \n :set (\$DeviceInfo->\"running-channel-version\") \$runningChannelVers\ + ion;\r\ + \n :set (\$DeviceInfo->\"running-version\") \$runningVersion;\r\ + \n :set (\$DeviceInfo->\"running-channel\") \$runningChannel;\r\ + \n :set (\$DeviceInfo->\"routerboard\") \$IsRouterBoard;\r\ + \n :set (\$DeviceInfo->\"current-firmware\") [ :tostr (\$RouterBoard->\"\ + current-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"upgrade-firmware\") [ :tostr (\$RouterBoard->\"\ + upgrade-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"package-channel\") \$currentUpdateChannel;\r\ + \n :set (\$DeviceInfo->\"installed-version\") [ :tostr (\$Update->\"inst\ + alled-version\") ];\r\ + \n :set (\$DeviceInfo->\"latest-version\") \$ROsVerAvail;\r\ + \n :set (\$DeviceInfo->\"update-status\") [ :tostr (\$Update->\"status\"\ + ) ];\r\ + \n\r\ + \n :set arrDeviceInfo \$DeviceInfo;\r\ + \n :return \$DeviceInfo;\r\ + \n}\r\ + \n\r\ + \n:set DeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global IfThenElse;\r\ + \n :global FormatLine;\r\ + \n :global CommitBrief;\r\ + \n\r\ + \n :local License [/system/license/get];\r\ + \n :local Snmp [ /snmp/get ];\r\ + \n :local Info [ \$GetArrDeviceInfo ];\r\ + \n\r\ + \n :if ([ :typeof \$Info ] != \"array\") do={\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :return ( \\\r\ + \n [ \$FormatLine \"Hostname\" \$Identity ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"location\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Location\" (\$Snmp->\"location\") ] . \"\\n\") ]\ + \_. \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"contact\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Contact\" (\$Snmp->\"contact\") ] . \"\\n\") ] .\ + \_\\\r\ + \n \"Hardware:\\n\" . \\\r\ + \n [ \$FormatLine \" Board\" (\$Info->\"board-name\") ] . \"\\n\" . \ + \\\r\ + \n [ \$FormatLine \" Arch\" (\$Info->\"architecture-name\") ] . \"\\\ + n\" . \\\r\ + \n [ \$FormatLine \" Model\" (\$Info->\"model\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"revision\") ] > 0) \\\r\ + \n (\" \" . (\$Info->\"revision\")) ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"serial-number\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Serial\" (\$Info->\"serial-number\") ] . \"\ + \\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"nlevel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"nlevel\ + \")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS:\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"level\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"level\ + \")) ] . \"\\n\") ] . \\\r\ + \n [ \$FormatLine \" Channel\" (\$Info->\"package-channel\") ] . \"\ + \\n\" . \\\r\ + \n [ \$FormatLine \" Installed\" (\$Info->\"installed-version\") ] .\ + \_\"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"running-channel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Running\" ((\$Info->\"running-version\") . \ + \" (\" . (\$Info->\"running-channel\") . \")\") ] . \"\\n\") \\\r\ + \n ([ \$FormatLine \" Running\" (\$Info->\"running-version\") ] . \ + \"\\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"latest-version\") ] > 0 && \\\r\ + \n (\$Info->\"installed-version\") != (\$Info->\"latest-version\"))\ + \_\\\r\ + \n ([ \$FormatLine \" Available\" (\$Info->\"latest-version\") ] .\ + \_\"\\n\") ] . \\\r\ + \n [ \$IfThenElse ((\$Info->\"routerboard\") = true && \\\r\ + \n (\$Info->\"current-firmware\") != (\$Info->\"upgrade-firmware\")\ + ) \\\r\ + \n ([ \$FormatLine \" Firmware\" ((\$Info->\"current-firmware\") .\ + \_\" -> \" . (\$Info->\"upgrade-firmware\")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS-Scripts:\\n\" . \\\r\ + \n [ \$FormatLine \" Commit\" [ \$CommitBrief ] ] . \"\\n\" . \\\r\ + \n [ \$FormatLine \" Version\" \$GlobalConfVersion ]);\r\ + \n}\r\ + \n\r\ + \n:if ([ :typeof \$NotificationFunctions ] != \"array\") do={:set Notifica\ + tionFunctions ({})}\r\ + \n\r\ + \n:set GetRandom20CharAlNum do={\r\ + \n :global EitherOr;\r\ + \n :return [ :rndstr length=[ \$EitherOr [ :tonum \$1 ] 20 ] from=\"ABCDE\ + FGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\" ];\r\ + \n}\r\ + \n\r\ + \n:set GetRandom20CharHex do={:global EitherOr; :return [ :rndstr length=[\ + \_\$EitherOr [ :tonum \$1 ] 20 ] from=\"0123456789abcdef\" ]; }\r\ + \n:set GetRandomNumber do={:global EitherOr; :return [ :rndnum from=0 to=[\ + \_\$EitherOr [ :tonum \$1 ] 4294967295 ] ]; }\r\ + \n\r\ + \n:global checkRunJob;\r\ + \n:set checkRunJob do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLock; \r\ + \n :if ([ \$ScriptLock \$Script ] = false) do={:return false}\r\ + \n :foreach Job in=[ /system/script/job/find where script=\$Script ] do={\ + :set Job [ /system/script/job/get \$Job ];\r\ + \n :while ([ :typeof (\$Job->\"parent\") ] = \"id\") do={:set Job [ /sy\ + stem/script/job/get [ find where .id=(\$Job->\"parent\") ] ]}\r\ + \n :if ((\$Job->\"type\") = \"login\") do={:return true};}; :return fa\ + lse; \r\ + \n}\r\ + \n\r\ + \n:set InspectVar do={\r\ + \n :global InspectVarRet;\r\ + \n :put [ :tocrlf [ \$InspectVarRet \$1 ] ];\r\ + \n}\r\ + \n\r\ + \n:set CommitBrief do={\r\ + \n :global CommitId;\r\ + \n :global CommitInfo;\r\ + \n :if (\$CommitId = \"unknown\") do={\r\ + \n :return \"unknown\";\r\ + \n }\r\ + \n :return (\$CommitInfo . \"/\" . [ :pick \$CommitId 0 8 ]);\r\ + \n}\r\ + \n\r\ + \n:set InspectVarRet do={\r\ + \n :local Input \$1;\r\ + \n :local Level (0 + [ :tonum \$2 ]);\r\ + \n :global CharacterReplace;\r\ + \n :global IfThenElse;\r\ + \n :global InspectVarRet;\r\ + \n :local IndentReturn do={\r\ + \n :local Prefix [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Level [ :tonum \$3 ];\r\ + \n :global CharacterMultiply;\r\ + \n :return ([ \$CharacterMultiply \" \" (\$Level * 2) ] . \"-\" . \$Pre\ + fix . \"-> \" . \$Value);\r\ + \n }\r\ + \n :local TypeOf [ :typeof \$Input ];\r\ + \n :local Len [ :len \$Input ];\r\ + \n :local Return [ \$IndentReturn \"type\" \$TypeOf \$Level ];\r\ + \n :if (\$TypeOf = \"array\") do={\r\ + \n :foreach Key,Value in=\$Input do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"key\" \$Key (\$Level + 1) ] . \"\\n\" . \\\r\ + \n [ \$InspectVarRet \$Value (\$Level + 2) ]);\r\ + \n }\r\ + \n } else={\r\ + \n :if (\$TypeOf = \"str\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"len\" \$Len \$Level ]);\r\ + \n :if ([ :typeof [ :find \$Input (\"\\r\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\r\") \"\" ];\r\ + \n }\r\ + \n :if ([ :typeof [ :find \$Input (\"\\n\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\n\") \" \" ];\r\ + \n }\r\ + \n }\r\ + \n :if (\$TypeOf != \"nothing\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"value\" [ \$IfThenElse ([ :len \$Input ] > 80)\ + \_\\\r\ + \n ([ :pick \$Input 0 77 ] . \"...\") \$Input ] \$Level ]);\r\ + \n }\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set GetPubIp do={\r\ + \n :global DetectIpAddrDefault;\r\ + \n :global DetectIpAddrFallback;\r\ + \n\r\ + \n :local PubIpAddr false;\r\ + \n :local Url \$DetectIpAddrDefault;\r\ + \n :local JobName [ :jobname ];\r\ + \n\r\ + \n :do {\r\ + \n :log debug (\$0 . \" Trying to detect public IP using default serv\ + ice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=50ms max=5 on-error={:log error (\$JobName . \" Failed to \ + detect public IP using default service: \" . \$Url . \".\")}\r\ + \n } on-error={\r\ + \n :log error (\$0 . \" Failed to detect public IP using default serv\ + ice: \" . \$Url . \".\");\r\ + \n :set Url \$DetectIpAddrFallBack;\r\ + \n :log debug (\$0 . \" Trying to detect public IP using fallback ser\ + vice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=200ms max=5 on-error={:log error (\$JobName . \" Failed to\ + \_detect public IP using fallback service: \" . \$Url . \".\")}\r\ + \n };\r\ + \n :local IpLen ([ :len \$PubIpAddr ] -1);\r\ + \n :if (\$PubIpAddr = false) do={:set PubIpAddr \"not-detected\"} else=\ + {:set PubIpAddr [:pick \$PubIpAddr 0 \$IpLen]}\r\ + \n :return \$PubIpAddr;\r\ + \n}\r\ + \n\r\ + \n:set FormatLine do={\r\ + \n :local Key [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Indent [ :tonum \$3 ];\r\ + \n :local Spaces;\r\ + \n :local Return \"\";\r\ + \n :global CharacterMultiply;\r\ + \n :global EitherOr;\r\ + \n :set Indent [ \$EitherOr \$Indent 16 ];\r\ + \n :local Spaces [ \$CharacterMultiply \" \" \$Indent ];\r\ + \n :if ([ :len \$Key ] > 0) do={ :set Return (\$Key . \":\")}\r\ + \n :if ([ :len \$Key ] > (\$Indent - 2)) do={:set Return (\$Return . \"\\\ + n\" . [ :pick \$Spaces 0 \$Indent ] . \$Value);\r\ + \n } else={:set Return (\$Return . [ :pick \$Spaces 0 (\$Indent - [ :len \ + \$Return ]) ] . \$Value)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ParseCustom do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Start [:find [ \$Str ] [:tostr \$2]];\r\ + \n :local End [ :tostr \$3 ];\r\ + \n :local Num [ :tonum \$4 ];\r\ + \n :local Return;\r\ + \n :if ([:len \$Num] = 0) do={:set Num \"0\"}\r\ + \n :local rest [:pick \$Str (\$Start+\$Num) [:len \$Str]]; \r\ + \n :if ([:len \$End ] = 0) do={:set Return [:pick \$Str \$Num \$Start]} e\ + lse={\r\ + \n :set End [:find \$rest \$End];\r\ + \n :set Return [:pick \$rest 0 \$End];\r\ + \n }\r\ + \n:return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set LogPrint do={\r\ + \n :local Severity [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Message [ :tostr \$3 ];\r\ + \n :global PrintDebug;\r\ + \n :global PrintDebugOverride;\r\ + \n :global EitherOr;\r\ + \n :local Debug [ \$EitherOr (\$PrintDebugOverride->\$Name) \$PrintDebug \ + ];\r\ + \n :local PrintSeverity do={\r\ + \n :global TerminalColorOutput;\r\ + \n :if (\$TerminalColorOutput != true) do={:return \$1}\r\ + \n :local Color { debug=96; info=97; warning=93; error=91 };\r\ + \n :return (\"\\1B[\" . \$Color->\$1 . \"m\" . \$1 . \"\\1B[0m\");\r\ + \n}\r\ + \n :local Log ([ \$EitherOr \$Name \"\" ] . \": \" . \$Message);\ + \r\ + \n :if (\$Severity ~ (\"^(custom|debug|error|info)\\\$\")) do={\r\ + \n :if (\$Severity = \"debug\") do={:log debug \$Log}\r\ + \n :if (\$Severity = \"error\") do={:log error \$Log}\r\ + \n :if (\$Severity = \"info\" ) do={:log info \$Log}\r\ + \n } else={:log warning \$Log; :set Severity \"warning\"}\r\ + \n :if (\$Severity != \"debug\" || \$Debug = true) do={:put ([ \$PrintSev\ + erity \$Severity ] . \": \" . \$Message)}\r\ + \n}\r\ + \n\r\ + \n:set CertificateAvailable do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :local UseFor [ :tostr \$2 ];\r\ + \n\r\ + \n :global CertificateDownload;\r\ + \n :global ParseKeyValueStore;\r\ + \n\r\ + \n :if ([ :len \$UseFor ] = 0) do={\r\ + \n :log warning (\$0 . \"The intended use is undefined!\");\r\ + \n :set UseFor \"undefined\";\r\ + \n }\r\ + \n :if ([ /system/resource/get free-hdd-space ] < 8388608 && \\\r\ + \n [ /certificate/settings/get crl-download ] = true && \\\r\ + \n [ /certificate/settings/get crl-store ] = \"system\") do={\r\ + \n :log warning (\$0 . \"This system has low free flash space but \" . \ + \\\r\ + \n \"is configured to download certificate CRLs to system!\");\r\ + \n }\r\ + \n :if ([ :len \$CommonName ] = 0) do={\r\ + \n :log warning (\$0 . \"No CommonName given!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if (((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" || \\\ + \r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \$UseFor || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\r\ + \n [ :len [ /certificate/builtin/find where common-name=\$CommonName\ + \_] ] > 0) do={\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n :log info (\$0 . \"Certificate with CommonName '\" . \$CommonName . \ + \"' not available.\");\r\ + \n :if ([ \$CertificateDownload \$CommonName ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] > 1\ + ) do={\r\ + \n :log info (\$0 . \"There are \" . \$CertCount . \" Certificates with\ + \_CommonName '\" . \$CommonName . \"'. Should be ok.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :local CertVal [ /certificate/get [ find where common-name=\$CommonNam\ + e ] ];\r\ + \n :while ((\$CertVal->\"akid\") != \"\" && (\$CertVal->\"akid\") != (\$C\ + ertVal->\"skid\")) do={\r\ + \n :if ([ :len [ /certificate/find where skid=(\$CertVal->\"akid\") ] ]\ + \_= 0) do={\r\ + \n :local IssuerCN ([ \$ParseKeyValueStore (\$CertVal->\"issuer\") ]-\ + >\"CN\");\r\ + \n :log info (\$0 . \"Certificate chain for '\" . \$CommonName . \"' \ + is incomplete, missing '\" . \$IssuerCN . \"'.\");\r\ + \n :if ([ \$CertificateDownload \$IssuerCN ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :set CertVal [ /certificate/get [ find where skid=(\$CertVal->\"akid\ + \") ] ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateDownload do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :global ScriptUpdatesBaseUrl;\r\ + \n :global ScriptUpdatesUrlSuffix;\r\ + \n :global CertificateNameByCN;\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :log info (\$0 . \"Downloading and importing certificate with \" . \\\ + \r\ + \n \"CommonName '\" . \$CommonName . \"'.\");\r\ + \n :local FileName ([ \$CleanName \$CommonName ] . \".pem\");\r\ + \n :do {\r\ + \n /tool/fetch check-certificate=yes-without-crl mode=https http-header\ + -field=({ [ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n (\$ScriptUpdatesBaseUrl . \"certs/\" . \$FileName . \$ScriptUpdate\ + sUrlSuffix) \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n } on-error={\r\ + \n :log warning (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \\\r\ + \n \"' from repository! Trying fallback to mkcert.org...\");\r\ + \n :do {\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if ([ :len [ /certificate/find where common-name=\"ISRG Root X1\"\ + \_] ] = 0 && \\\r\ + \n !(((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" \ + || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \"fetch\" || \ + \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\ + \r\ + \n [ :len [ /certificate/builtin/find where common-name=\"ISRG\ + \_Root X1\" ] ] > 0)) do={\r\ + \n :log error (\$0 . \" Required certificate is not available.\");\ + \r\ + \n :return false;\r\ + \n }\r\ + \n /tool/fetch check-certificate=yes-without-crl mode=https http-head\ + er-field=({ [ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n url=\"https://mkcert.org/generate/\" http-data=[ :serialize to=jso\ + n ({ \$CommonName }) ] \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n :if ([ /file/get \$FileName size ] = 0) do={\r\ + \n \$RmFile \$FileName;\r\ + \n :error false;\r\ + \n }\r\ + \n } on-error={\r\ + \n :log error (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \"'!\");\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n /certificate/import file-name=\$FileName passphrase=\"\" as-value;\r\ + \n :delay 1s;\r\ + \n \$RmFile \$FileName;\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n /certificate/remove [ find where name~(\"^\" . \$FileName . \"_[0-9]\ + +\\\$\") ];\r\ + \n :log warning (\$0 . \" Certificate with CommonName '\" . \$CommonNam\ + e . \"' still unavailable!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :foreach Cert in=[ /certificate/find where name~(\"^\" . \$FileName . \ + \"_[0-9]+\\\$\") ] do={\r\ + \n \$CertificateNameByCN [ /certificate/get \$Cert common-name ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateNameByCN do={\r\ + \n :local Match [ :tostr \$1 ];\r\ + \n :global CleanName;\r\ + \n :local Cert ([ /certificate/find where (common-name=\$Match or fingerp\ + rint=\$Match or name=\$Match) ]->0);\r\ + \n :if ([ :len \$Cert ] = 0) do={\r\ + \n :log warning (\$0 .\" No matching certificate found.\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CommonName [ /certificate/get \$Cert common-name ];\r\ + \n /certificate/set \$Cert name=[ \$CleanName \$CommonName ];\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set FileExists do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local Type [ :tostr \$2 ];\r\ + \n :global FileGet;\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={ :return false; }\r\ + \n :if ([ :len (\$FileVal->\"size\") ] = 0) do={ :return false; }\r\ + \n :if ([ :len \$Type ] = 0 || \$FileVal->\"type\" = \$Type) do={ :return\ + \_true; }\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set Grep do={\r\ + \n :local Input ([ :tostr \$1 ] . \"\\n\");\r\ + \n :local Pattern [ :tostr \$2 ];\r\ + \n :if ([ :typeof [ :find \$Input \$Pattern ] ] = \"nil\") do={:return []\ + }\r\ + \n :do {\r\ + \n :local Line [ :pick \$Input 0 [ :find \$Input \"\\n\" ] ];\r\ + \n :if ([ :typeof [ :find \$Line \$Pattern ] ] = \"num\") do={:return \ + \$Line}\r\ + \n :set Input [ :pick \$Input ([ :find \$Input \"\\n\" ] + 1) [ :len \$\ + Input ] ];\r\ + \n } while=([ :len \$Input ] > 0);\r\ + \n :return [];\r\ + \n}\r\ + \n\r\ + \n:set HumanReadableNum do={\r\ + \n :local Input [ :tonum \$1 ];\r\ + \n :local Base [ :tonum \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global IfThenElse;\r\ + \n :local Prefix \"kMGTPE\";\r\ + \n :local Pow 1;\r\ + \n :set Base [ \$EitherOr \$Base 1024 ];\r\ + \n :local Bin [ \$IfThenElse (\$Base = 1024) \"i\" \"\" ];\r\ + \n :if (\$Input < \$Base) do={:return \$Input}\r\ + \n :for I from=0 to=[ :len \$Prefix ] do={\r\ + \n :set Pow (\$Pow * \$Base);\r\ + \n :if (\$Input / \$Base < \$Pow) do={\r\ + \n :set Prefix [ :pick \$Prefix \$I ];\r\ + \n :local Tmp1 (\$Input * 100 / \$Pow);\r\ + \n :local Tmp2 (\$Tmp1 / 100);\r\ + \n :if (\$Tmp2 >= 100) do={:return (\$Tmp2 . \$Prefix . \$Bin)}\r\ + \n :return (\$Tmp2 . \".\" . \\\r\ + \n [ :pick \$Tmp1 [ :len \$Tmp2 ] ([ :len \$Tmp1 ] - [ :len \$Tmp\ + 2 ] + 1) ] . \\\r\ + \n \$Prefix . \$Bin);\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set CleanFilePath do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CharacterReplace;\r\ + \n :while (\$Path ~ \"//\") do={ :set \$Path [ \$CharacterReplace \$Path \ + \"//\" \"/\" ]; }\r\ + \n :if ([ :pick \$Path 0 ] = \"/\") do={ :set Path [ :pick \$Path 1 [ :le\ + n \$Path ] ]; }\r\ + \n :if ([ :pick \$Path ([ :len \$Path ] - 1) ] = \"/\") do={ :set Path [ \ + :pick \$Path 0 ([ :len \$Path ] - 1) ]; }\r\ + \n :return \$Path;\r\ + \n}\r\ + \n\r\ + \n:set CleanName do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Return \"\";\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :typeof [ find \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqr\ + stuvwxyz0123456789\" \$Char ] ] = \"nil\") do={\r\ + \n :do {:if ([ :len \$Return ] = 0) do={:error true};\r\ + \n :if ([ :pick \$Return ([ :len \$Return ] - 1) ] = \"-\") do={:er\ + ror true}; :set Char \"-\"} on-error={:set Char \"\"}; \r\ + \n };\r\ + \n :set Return (\$Return . \$Char)};\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set RandomDelay do={\r\ + \n :local Time [ :tonum \$1 ];\r\ + \n :local Unit [ :tostr \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global GetRandomNumber;\r\ + \n :global MAX;\r\ + \n :if (\$Time = 0) do={:return false}\r\ + \n :delay ([ \$MAX 10 [ \$GetRandomNumber ([ :tonsec [ :totime (\$Time . \ + [ \$EitherOr \$Unit \"s\" ]) ] ] / 1000000) ] ] . \"ms\");\r\ + \n}\r\ + \n\r\ + \n:set EscapeForRegEx do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"^.[]\\\$()|*+\?{}\\\\\");\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :find \$Chars \$Char ]) do={:set Char (\"\\\\\" . \$Char)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ExitError do={\r\ + \n :local ExitOK [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Error [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :if (\$ExitOK = \"false\") do={\r\ + \n :log error (\$Name [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\\\$\") \ + \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with er\ + ror\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \ + \$Error) \".\" ]);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set ExitOnError do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :local Error [ :tostr \$2 ];\r\ + \n :global IfThenElse;\r\ + \n :log error (\$Name . \" \" . [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\ + \\\$\") \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with erro\ + r\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \$E\ + rror) \".\" ]);\r\ + \n}\r\ + \n\r\ + \n:set MiniDateTimeStamp do={\r\ + \n :local mikro [ :tobool \$1 ];\r\ + \n /system/clock;\r\ + \n :local vdate [get date];\r\ + \n :local vtime [get time];\r\ + \n :local vdoff [:toarray \"0,4,5,7,8,10\"];\r\ + \n :local MM [:pick \$vdate (\$vdoff->2) (\$vdoff->3)];\r\ + \n :local M [:tonum \$MM];\r\ + \n :if (\$vdate ~ \".../../....\") do={\r\ + \n :set vdoff [:toarray \"7,11,1,3,4,6\"];\r\ + \n :set M ([:find \"xxanebarprayunulugepctovecANEBARPRAYUNULUGE\ + PCTOVEC\" [:pick \$vdate (\$vdoff->2) (\$vdoff->3)] -1] / 2);\r\ + \n :if (\$M>12) do={:set M (\$M - 12)}\r\ + \n :set MM [:pick (100 + \$M) 1 3];\r\ + \n }\r\ + \n :local yyyy [:pick \$vdate (\$vdoff->0) (\$vdoff->1)];\r\ + \n :local dd [:pick \$vdate (\$vdoff->4) (\$vdoff->5)];\r\ + \n :local HH [:pick \$vtime 0 2];\r\ + \n :local mm [:pick \$vtime 3 5];\r\ + \n :local ss [:pick \$vtime 6 8];\r\ + \n :local Return;\r\ + \n :if (\$mikro = true) do={\r\ + \n :set Return ([:pick \$yyyy 2 4] . [:pick \$dd 0 1] . [:pick \$HH 0\ + \_1] . [:pick \$mm 3 4] . [:pick \$ss 6 7]);\r\ + \n } else={\r\ + \n :set Return ([\$yyyy] . [\$MM] . [\$dd] . [\$HH] . [\$mm] . [\$ss]);\ + \r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set WaitForFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local WaitTime [ :totime \$2 ];\r\ + \n :global CleanFilePath;\r\ + \n :global EitherOr;\r\ + \n :global MAX;\r\ + \n :set FileName [ \$CleanFilePath \$FileName ];\r\ + \n :local Delay ([ \$MAX [ \$EitherOr \$WaitTime 2s ] 100ms ] / 9);\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } delay=\$Delay max=10;\r\ + \n } on-error={ }\r\ + \n :while ([ :len [ /file/find where name=\$FileName ] ] > 0) do={\r\ + \n :do {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } on-error={ }\r\ + \n :delay \$Delay;\r\ + \n :set Delay (\$Delay * 3 / 2);\r\ + \n }\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set FileGet do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global WaitForFile;\r\ + \n :if ([ \$WaitForFile \$FileName 0s ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n :local FileVal false;\r\ + \n :do {\r\ + \n :set FileVal [ /file/get \$FileName ];\r\ + \n } on-error={ }\r\ + \n :return \$FileVal;\r\ + \n}\r\ + \n\r\ + \n:set RmDir do={\r\ + \n :local DirName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :log debug (\$0 . \" Removing directory: \". \$DirName);\r\ + \n :local DirVal [ \$FileGet \$DirName ];\r\ + \n :if (\$DirVal = false) do={\r\ + \n :log debug (\$0 . \" ... which does not exist.\");\r\ + \n :return true;\r\ + \n };\r\ + \n :if (\$DirVal->\"type\" != \"directory\") do={\r\ + \n :log error (\$0 . \" Directory '\" . \$DirName . \"' is not a direct\ + ory.\");\r\ + \n :return false;\r\ + \n };\r\ + \n :onerror Err {\r\ + \n /file/remove \$DirName;\r\ + \n } do={\r\ + \n :log error (\$0 . \" Removing directory '\" . \$DirName . \"' failed\ + : \" . \$Err);\r\ + \n :return false;\r\ + \n };\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set RmFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :log debug (\$0 . \" Removing file: \". \$FileName);\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={\r\ + \n :log debug (\$0 . \" ... which does not exist.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :if (\$FileVal->\"type\" = \"directory\" || \$FileVal->\"type\" = \"di\ + sk\") do={\r\ + \n :log error (\$0 . \" File '\" . \$FileName . \"' is not a file.\");\ + \r\ + \n :return false;\r\ + \n }\r\ + \n :onerror Err {\r\ + \n /file/remove \$FileName;\r\ + \n } do={\r\ + \n :log error (\$0 . \" Removing file '\" . \$FileName . \"' failed: \"\ + \_. \$Err); :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MkDir do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CleanFilePath;\r\ + \n :global FileGet;\r\ + \n :global RmDir;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :local MkTmpfs do={\r\ + \n :global WaitForFile;\r\ + \n :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\r\ + \n :if ([ :len \$TmpFs ] = 1) do={\r\ + \n :if ([ /disk/get \$TmpFs disabled ] = true) do={\r\ + \n :log info (\$0 . \" The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :log info (\$0 . \" Creating disk of type tmpfs.\");\r\ + \n \$RmDir \"tmpfs\";\r\ + \n :onerror Err {\r\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource\ + /get total-memory ] / 3);\r\ + \n \$WaitForFile \"tmpfs\";\r\ + \n } do={\r\ + \n :log warning (\$0 . \" Creating disk of type tmpfs failed: \" . \$\ + Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :set Path [ \$CleanFilePath \$Path ];\r\ + \n :if (\$Path = \"\") do={\r\ + \n :return true;\r\ + \n }\r\ + \n :log debug (\$0 . \" Making directory: \" . \$Path);\r\ + \n :local PathVal [ \$FileGet \$Path ];\r\ + \n :if (\$PathVal->\"type\" = \"directory\") do={\r\ + \n :log debug (\$0 . \" ... which already exists.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :pick \$Path 0 5 ] = \"tmpfs\") do={\r\ + \n :if ([ \$MkTmpfs ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n /file/add type=\"directory\" name=\$Path;\r\ + \n \$WaitForFile \$Path;\r\ + \n } do={\r\ + \n :log warning (\$0 . \" Making directory '\" . \$Path . \"' failed: \ + \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MAX do={:if (\$1 > \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n:set MIN do={:if (\$1 < \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set CharacterReplace do={\r\ + \n :local String [ :tostr \$1 ];\r\ + \n :local ReplaceFrom [ :tostr \$2 ];\r\ + \n :local ReplaceWith [ :tostr \$3 ];\r\ + \n :local Return \"\";\r\ + \n :if (\$ReplaceFrom = \"\") do={:return \$String}\r\ + \n :while ([ :typeof [ :find \$String \$ReplaceFrom ] ] != \"nil\") do={\ + \r\ + \n :local Pos [ :find \$String \$ReplaceFrom ];\r\ + \n :set Return (\$Return . [ :pick \$String 0 \$Pos ] . \$ReplaceWith);\ + \r\ + \n :set String [ :pick \$String (\$Pos + [ :len \$ReplaceFrom ]) [ :len\ + \_\$String ] ];\r\ + \n }\r\ + \n :return (\$Return . \$String);\r\ + \n}\r\ + \n\r\ + \n:set IfThenElse do={\r\ + \n :if ([ :tostr \$1 ] = \"true\" || [ :tobool \$1 ] = true) do={:return \ + \$2};\r\ + \n :return \$3;\r\ + \n}\r\ + \n\r\ + \n:set EitherOr do={\r\ + \n :global IfThenElse;\r\ + \n :if ([ :typeof \$1 ] = \"num\") do={:return [ \$IfThenElse (\$1 != 0) \ + \$1 \$2 ]}\r\ + \n :if ([ :typeof \$1 ] = \"time\") do={:return [ \$IfThenElse (\$1 > 0s)\ + \_\$1 \$2 ]}\r\ + \n# this works for boolean values, literal ones with parentheses\r\ + \n :return [ \$IfThenElse ([ :len [ :tostr \$1 ] ] > 0) \$1 \$2 ];\r\ + \n}\r\ + \n\r\ + \n:set ParseKeyValueStore do={\r\ + \n :local Source \$1;\r\ + \n :if ([ :pick \$Source 0 1 ] = \"{\") do={\r\ + \n :do {\r\ + \n :return [ :deserialize from=json \$Source ];\r\ + \n } on-error={ }\r\ + \n } \r\ + \n :if ([ :typeof \$Source ] != \"array\") do={:set Source [ :tostr \$1 ]\ + }\r\ + \n :local Result ({});\r\ + \n :foreach KeyValue in=[ :toarray \$Source ] do={\r\ + \n :if ([ :find \$KeyValue \"=\" ]) do={\r\ + \n :local Key [ :pick \$KeyValue 0 [ :find \$KeyValue \"=\" ] ];\r\ + \n :local Value [ :pick \$KeyValue ([ :find \$KeyValue \"=\" ] + 1) [\ + \_:len \$KeyValue ] ];\r\ + \n :if (\$Value=\"true\") do={:set Value true}\r\ + \n :if (\$Value=\"false\") do={:set Value false}\r\ + \n :set (\$Result->\$Key) \$Value;\r\ + \n } else={:set (\$Result->\$KeyValue) true}\r\ + \n }\r\ + \n :return \$Result;\r\ + \n}\r\ + \n:set RequiredRouterOS do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :local Required [ :tostr \$2 ];\r\ + \n :local Warn [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :global VersionToNum;\r\ + \n :if (!(\$Required ~ \"^\\\\d+\\\\.\\\\d+((alpha|beta|rc|\\\\.)\\\\d+|)\ + \\\$\")) do={\r\ + \n :log error (\$0 . \" No valid RouterOS version: \" . \$Required);\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ \$VersionToNum \$Required ] > [ \$VersionToNum [ /system/packag\ + e/update/get installed-version ] ]) do={\r\ + \n :if (\$Warn = \"true\") do={\r\ + \n :log warning (\$0 . \" This \" . [ \$IfThenElse ([ :pick \$Caller \ + 0 ] = (\"\\\$\")) \"function\" \"script\" ] . \\\r\ + \n \" '\" . \$Caller . \"' (at least specific functionality) requir\ + es RouterOS \" . \$Required . \". Please update!\");\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set ValidateSyntax do={\r\ + \n :local Code [ :tostr \$1 ];\r\ + \n :global LogPrint;\r\ + \n :onerror Err {\r\ + \n [ :parse (\":local Validate do={\\n\" . \$Code . \"\\n}\") ];\r\ + \n } do={\r\ + \n \$LogPrint debug \$0 (\"Valdation failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set VersionToNum do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Multi 0x1000000;\r\ + \n :local Return 0;\r\ + \n :global CharacterReplace;\r\ + \n :set Input [ \$CharacterReplace \$Input \".\" \",\" ];\r\ + \n :foreach I in={ \"zero\"; \"alpha\"; \"beta\"; \"rc\" } do={\r\ + \n :set Input [ \$CharacterReplace \$Input \$I (\",\" . \$I . \",\") ];\ + \r\ + \n }\r\ + \n :foreach Value in=([ :toarray \$Input ], 0) do={\r\ + \n :local Num [ :tonum \$Value ];\r\ + \n :if (\$Multi = 0x100) do={\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={\r\ + \n :set Return (\$Return + 0xff00);\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n } else={\r\ + \n :if (\$Value = \"zero\") do={ }\r\ + \n :if (\$Value = \"alpha\") do={ :set Return (\$Return + 0x3f00); \ + }\r\ + \n :if (\$Value = \"beta\") do={ :set Return (\$Return + 0x5f00); }\ + \r\ + \n :if (\$Value = \"rc\") do={ :set Return (\$Return + 0x7f00); }\r\ + \n }\r\ + \n }\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={ :set Return (\$Return + (\$Va\ + lue * \$Multi)); }\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ScriptLock do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local WaitMax [ :totime \$2 ];\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global ScriptLockOrder;\r\ + \n :if ([ :typeof \$ScriptLockOrder ] = \"nothing\") do={\r\ + \n :set ScriptLockOrder ({});\r\ + \n }\r\ + \n :if ([ :typeof (\$ScriptLockOrder->\$Script) ] = \"nothing\") do={\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :local JobCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :return [ :len [ /system/script/job/find where script=\$Script ] ];\ + \r\ + \n }\r\ + \n :local TicketCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :local Count 0;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:set Count (\$Count \ + + 1)}\r\ + \n }\r\ + \n :return \$Count;\r\ + \n }\r\ + \n :local IsFirstTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Check [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if (\$Ticket = \$Check) do={:return true}\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\" && \$Ticket != \$Check) d\ + o={:return false}\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :local AddTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Add [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :while (true) do={\r\ + \n :local Pos [ :len (\$ScriptLockOrder->\$Script) ];\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Pos) \$Add;\r\ + \n :delay 10ms;\r\ + \n :if ((\$ScriptLockOrder->\$Script->\$Pos) = \$Add) do={:return tru\ + e}\r\ + \n }\r\ + \n }\r\ + \n :local RemoveTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Remove [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Id,Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :while ((\$ScriptLockOrder->\$Script->\$Id) = \$Remove) do={\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Id);\r\ + \n :delay 10ms;\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n :local CleanupTickets do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:return false}\r\ + \n }\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :if ([ :typeof \$WaitMax ] = \"nil\" ) do={:set WaitMax 0s}\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\r\ + \n :log error (\$0 . \" A script named '\" . \$Script . \"' does not ex\ + ist!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$JobCount \$Script ] = 0) do={\r\ + \n \$LogPrint error \$0 (\"No script '\" . \$Script . \"' is running!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$TicketCount \$Script ] >= [ \$JobCount \$Script ]) do={\r\ + \n :log error (\$0 . \" More tickets than running scripts '\" . \$Scrip\ + t . \"', resetting!\");\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n /system/script/job/remove [ find where script=\$Script ];\r\ + \n }\r\ + \n :local MyTicket [ \$GetRandom20CharAlNum 6 ];\r\ + \n \$AddTicket \$Script \$MyTicket;\r\ + \n :local WaitInterval (\$WaitMax / 20);\r\ + \n :local WaitTime \$WaitMax;\r\ + \n :while (\$WaitTime > 0 && \\\r\ + \n ([ \$IsFirstTicket \$Script \$MyTicket ] = false || \\\r\ + \n [ \$TicketCount \$Script ] < [ \$JobCount \$Script ])) do={\r\ + \n :set WaitTime (\$WaitTime - \$WaitInterval);\r\ + \n :delay \$WaitInterval;\r\ + \n }\r\ + \n :if ([ \$IsFirstTicket \$Script \$MyTicket ] = true && \\\r\ + \n [ \$TicketCount \$Script ] = [ \$JobCount \$Script ]) do={\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$CleanupTickets \$Script;\r\ + \n :return true;\r\ + \n }\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$LogPrint debug \$0 (\"Script '\" . \$Script . \"' started more than \ + once\" . \\\r\ + \n [ \$IfThenElse (\$WaitTime < \$WaitMax) \" and timed out waiting for\ + \_lock\" \"\" ] . \"...\");\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set SendNotification do={ :onerror Err {\r\ + \n :global SendNotification2;\r\ + \n \$SendNotification2 ({ origin=\$0; subject=\$1; message=\$2; link=\$3;\ + \_silent=\$4 });\r\ + \n} do={:global ExitOnError; \$ExitOnError \$0 \$Err}\r\ + \n}\r\ + \n\r\ + \n:set SendNotification2 do={\r\ + \n :local Notification \$1;\r\ + \n :global NotificationFunctions;\r\ + \n :foreach FunctionName,Discard in=\$NotificationFunctions do={\r\ + \n (\$NotificationFunctions->\$FunctionName) (\"\\\$NotificationFunctio\ + ns->\\\"\" . \$FunctionName . \"\\\"\") \$Notification;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set SymbolByUnicodeName do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :global EitherOr;\r\ + \n :global SymbolsExtra;\r\ + \n :local Symbols ({\r\ + \n \"abacus\"=\"\\F0\\9F\\A7\\AE\";\r\ + \n \"alarm-clock\"=\"\\E2\\8F\\B0\";\r\ + \n \"arrow-down\"=\"\\E2\\AC\\87\";\r\ + \n \"arrow-up\"=\"\\E2\\AC\\86\";\r\ + \n \"calendar\"=\"\\F0\\9F\\93\\85\";\r\ + \n \"card-file-box\"=\"\\F0\\9F\\97\\83\";\r\ + \n \"chart-decreasing\"=\"\\F0\\9F\\93\\89\";\r\ + \n \"chart-increasing\"=\"\\F0\\9F\\93\\88\";\r\ + \n \"cloud\"=\"\\E2\\98\\81\";\r\ + \n \"cross-mark\"=\"\\E2\\9D\\8C\";\r\ + \n \"earth\"=\"\\F0\\9F\\8C\\8D\";\r\ + \n \"fire\"=\"\\F0\\9F\\94\\A5\";\r\ + \n \"floppy-disk\"=\"\\F0\\9F\\92\\BE\";\r\ + \n \"gear\"=\"\\E2\\9A\\99\";\r\ + \n \"heart\"=\"\\E2\\99\\A5\";\r\ + \n \"high-voltage-sign\"=\"\\E2\\9A\\A1\";\r\ + \n \"incoming-envelope\"=\"\\F0\\9F\\93\\A8\";\r\ + \n \"information\"=\"\\E2\\84\\B9\";\r\ + \n \"large-orange-circle\"=\"\\F0\\9F\\9F\\A0\";\r\ + \n \"large-red-circle\"=\"\\F0\\9F\\94\\B4\";\r\ + \n \"link\"=\"\\F0\\9F\\94\\97\";\r\ + \n \"lock-with-ink-pen\"=\"\\F0\\9F\\94\\8F\";\r\ + \n \"memo\"=\"\\F0\\9F\\93\\9D\";\r\ + \n \"mobile-phone\"=\"\\F0\\9F\\93\\B1\";\r\ + \n \"pushpin\"=\"\\F0\\9F\\93\\8C\";\r\ + \n \"scissors\"=\"\\E2\\9C\\82\";\r\ + \n \"scroll\"=\"\\F0\\9F\\93\\9C\";\r\ + \n \"smiley-partying-face\"=\"\\F0\\9F\\A5\\B3\";\r\ + \n \"smiley-smiling-face\"=\"\\E2\\98\\BA\";\r\ + \n \"smiley-winking-face-with-tongue\"=\"\\F0\\9F\\98\\9C\";\r\ + \n \"sparkles\"=\"\\E2\\9C\\A8\";\r\ + \n \"speech-balloon\"=\"\\F0\\9F\\92\\AC\";\r\ + \n \"star\"=\"\\E2\\AD\\90\";\r\ + \n \"warning-sign\"=\"\\E2\\9A\\A0\";\r\ + \n \"white-heavy-check-mark\"=\"\\E2\\9C\\85\"\r\ + \n }, \$SymbolsExtra);\r\ + \n :local Magic [ :pick [ /system/clock/get date ] 4 10 ];\r\ + \n :local Special {\r\ + \n \"information-04-01\"=\"\\F0\\9F\\9A\\BB\";\r\ + \n \"large-orange-circle-04-01\"=\"\\F0\\9F\\8D\\8A\";\r\ + \n \"large-orange-circle-10-31\"=\"\\F0\\9F\\8E\\83\";\r\ + \n \"large-red-circle-04-01\"=\"\\F0\\9F\\8D\\92\" };\r\ + \n :if ([ :len (\$Symbols->\$Name) ] = 0) do={\r\ + \n :log warning (\$0 . \"No symbol available for name '\" . \$Name . \"\ + '!\");\r\ + \n :return \"\";\r\ + \n }\r\ + \n :return ([ \$EitherOr (\$Special->(\$Name . \$Magic)) (\$Symbols->\$Na\ + me) ] . \"\\EF\\B8\\8F\");\r\ + \n}\r\ + \n\r\ + \n:set SymbolForNotification do={\r\ + \n :global NotificationsWithSymbols;\r\ + \n :global SymbolByUnicodeName;\r\ + \n :global IfThenElse;\r\ + \n :if (\$NotificationsWithSymbols != true) do={:return [ \$IfThenElse ([\ + \_:len \$2 ] > 0) ([ :tostr \$2 ] . \" \") \"\" ]}\r\ + \n :local Return \"\";\r\ + \n :foreach Symbol in=[ :toarray \$1 ] do={:set Return (\$Return . [ \$Sy\ + mbolByUnicodeName \$Symbol ])}\r\ + \n :return (\$Return . \" \");\r\ + \n}\r\ + \n\r\ + \n:set Unix2Dos do={:return [ :tocrlf [ :tostr \$1 ] ]}\r\ + \n:set UrlEncode do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"\\n\\r !\\\"#\\\$%&'()*+,:;<=>\?@[\\\\]^`{|}~\");\r\ + \n :local Subs { \"%0A\"; \"%0D\"; \"%20\"; \"%21\"; \"%22\"; \"%23\"; \"\ + %24\"; \"%25\"; \"%26\"; \"%27\";\r\ + \n \"%28\"; \"%29\"; \"%2A\"; \"%2B\"; \"%2C\"; \"%3A\"; \"%3B\"; \ + \"%3C\"; \"%3D\"; \"%3E\"; \"%3F\";\r\ + \n \"%40\"; \"%5B\"; \"%5C\"; \"%5D\"; \"%5E\"; \"%60\"; \"%7B\"; \ + \"%7C\"; \"%7D\"; \"%7E\" };\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :local Replace [ :find \$Chars \$Char ];\r\ + \n :if ([ :typeof \$Replace ] = \"num\") do={:set Char (\$Subs->\$Repla\ + ce)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set IsDNSResolving do={\r\ + \n :do {:resolve \"api.telegram.org\"} on-error={:return false}\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set IsFullyConnected do={\r\ + \n :global IsDNSResolving;\r\ + \n :global IsTimeSync;\r\ + \n :if ([ \$IsDNSResolving ] = false) do={:return false};\r\ + \n :if ([ \$IsTimeSync ] = false) do={:return false};\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set IsTimeSync do={\r\ + \n :global IsTimeSyncCached;\r\ + \n :global IsTimeSyncResetNtp;\r\ + \n :if (\$IsTimeSyncCached = true) do={:return true}\r\ + \n :if ([ /system/ntp/client/get enabled ] = true) do={\r\ + \n :if ([ /system/ntp/client/get status ] = \"synchronized\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :local Uptime [ /system/resource/get uptime ];\r\ + \n :if ([ :typeof \$IsTimeSyncResetNtp ] = \"nothing\") do={\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n }\r\ + \n :if (\$Uptime - \$IsTimeSyncResetNtp < 3m) do={:return false}\r\ + \n :log warning \"\$0 The ntp client is configured, but did not sync.\"\ + ;\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n /system/ntp/client/set enabled=no;\r\ + \n :delay 20ms;\r\ + \n /system/ntp/client/set enabled=yes;\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ /system/license/get ]->\"level\" = \"free\" || \\\r\ + \n [ /system/resource/get ]->\"board-name\" = \"x86\") do={\r\ + \n :log debug \"\$0 No ntp client configured, relying on RTC for CHR fr\ + ee license and x86.\";\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ /ip/cloud/get update-time ] = true) do={\r\ + \n :if ([ :typeof [ /ip/cloud/get public-address ] ] = \"ip\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :log debug \"\$0 No time source configured! Returning gracefully...\";\ + \r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n# read parts of a large file\r\ + \n# Description of parameters:\r\ + \n# \$1 - script name for logging and user agent\r\ + \n# \$2 - url to fetch from\r\ + \n# \$3 - check-certificate value for /tool/fetch (true/false)\r\ + \n# \$4 - mode value for /tool/fetch (optional, e.g. \"keep-broken\", \"ht\ + tps-only\", \"http-only\"\r\ + \n# \"no-redirects\", \"background\", \"background-and-keep-broken\",\ + \_\"background-and-https-only\",\r\ + \n# \"background-and-http-only\", \"background-and-no-redirects\", \"\ + background-and-keep-broken-and-https-only\", \"background-and-keep-broken-\ + and-http-only\",\r\ + \n# \"background-and-keep-broken-and-no-redirects\")\r\ + \n# \$5 - fetch method for /tool/fetch (optional, e.g. \"get\", \"head\", \ + \"post\", \"put\", \"patch\", \"delete\")\r\ + \n#:set FetchLargeFiles do={\r\ + \n# :local RunName [:tostr \$1];\r\ + \n# :local fetchUrl [:tostr \$2];\r\ + \n# :local fetchFile [:tostr \$3];\r\ + \n# :local CheckCert [:tostr \$4];\r\ + \n# :local fetchMode [:tostr \$5];\r\ + \n# :local fetchMethod [:tostr \$6];\r\ + \n# :local tmpName;\r\ + \n# :global CleanName;\r\ + \n# :global FetchUserAgentStr;\r\ + \n# :global GetRandom20CharAlNum;\r\ + \n# :global IfThenElse;\r\ + \n# :global LogPrint;\r\ + \n# :global MkDir;\r\ + \n# :global RmDir;\r\ + \n# :global RmFile;\r\ + \n# :global WaitForFile;\r\ + \n#\r\ + \n# :set CheckCert [ \$IfThenElse (\$CheckCert = \"false\") \"no\" \"yes-\ + without-crl\" ];\r\ + \n#\r\ + \n# :set tmpName (\$CleanName \"tmp-\" . [ \$GetRandom20CharAlNum 6 ]);\r\ + \n# :local DirName (\"tmpfs/\" . \$tmpName);\r\ + \n# :if ([ \$MkDir \$DirName ] = false) do={\r\ + \n# :log error (\$RunName . \" Failed creating directory: \" . \$DirNam\ + e . \"!\");\r\ + \n# :return false;\r\ + \n# }\r\ + \n#\r\ + \n# :local FileName (\$DirName . \"/\" . [ \$CleanName \$fetchFile ] . \"\ + -\" . [ \$GetRandom20CharAlNum 5 ]);\r\ + \n# :local Url (\$fetchUrl . \$fetchFile);\r\ + \n# :onerror Err {\r\ + \n# /tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName\ + \_\\\r\ + \n# http-header-field=({ [ \$FetchUserAgentStr \$RunName ] }) as-valu\ + e;\r\ + \n# } do={\r\ + \n# :if ([ \$WaitForFile \$FileName 500ms ] = true) do={\r\ + \n# \$RmFile \$FileName;\r\ + \n# }\r\ + \n# :log error (\$RunName . \" Failed downloading from '\" . \$Url . \"\ + ' - \" . \$Err);\r\ + \n# \$RmDir \$DirName;\r\ + \n# :return false;\r\ + \n# }\r\ + \n#\r\ + \n# :if ([ \$WaitForFile \$FileName 5s ] = false) do={\r\ + \n# :log error (\$RunName . \" The file downloaded from '\" . \$Url . \ + \"' did not show up.\");\r\ + \n# :return false;\r\ + \n# }\r\ + \n# \r\ + \n# :local FileSize [ /file/get \$FileName size ];\r\ + \n# :local Return \"\";\r\ + \n# :local VarSize 0;\r\ + \n# :while (\$VarSize != \$FileSize) do={\r\ + \n# :set Return (\$Return . ([ /file/read offset=\$VarSize chunk-size=3\ + 2768 file=\$FileName as-value ]->\"data\"));\r\ + \n# :set FileSize [ /file/get \$FileName size ];\r\ + \n# :set VarSize [ :len \$Return ];\r\ + \n# :if (\$VarSize > \$FileSize) do={\r\ + \n# :delay 100ms;\r\ + \n# }\r\ + \n# }\r\ + \n## \$RmFile \$FileName;\r\ + \n# \$RmDir \$DirName;\r\ + \n# :return \$Return;\r\ + \n#}\r\ + \n\r\ + \n:set FetchHugeFiles do={\r\ + \n :local ScriptName [ :tostr \$1 ];\r\ + \n :local Url [ :tostr \$2 ];\r\ + \n :local CheckCert [ :tostr \$3 ];\r\ + \n\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global MkDir;\r\ + \n :global RmDir;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :set CheckCert [ \$IfThenElse (\$CheckCert = \"false\") \"no\" \"yes-w\ + ithout-crl\" ];\r\ + \n\r\ + \n :local DirName (\"tmpfs/\" . [ \$CleanName \$ScriptName ]);\r\ + \n :if ([ \$MkDir \$DirName ] = false) do={\r\ + \n \$LogPrint error \$0 (\"Failed creating directory!\");\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :local FileName (\$DirName . \"/\" . [ \$CleanName \$0 ] . \"-\" . [ \ + \$GetRandom20CharAlNum ]);\r\ + \n :onerror Err {\r\ + \n /tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName \ + \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] }) as-va\ + lue;\r\ + \n } do={\r\ + \n :if ([ \$WaitForFile \$FileName 500ms ] = true) do={\r\ + \n \$RmFile \$FileName;\r\ + \n }\r\ + \n \$LogPrint debug \$0 (\"Failed downloading from \" . \$Url . \" - \"\ + \_. \$Err);\r\ + \n \$RmDir \$DirName;\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$WaitForFile \$FileName 5s ] = false) do={\r\ + \n \$LogPrint debug \$0 (\"The file downloaded from \" . \$Url . \" did\ + \_not show up.\");\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :local FileSize [ /file/get \$FileName size ];\r\ + \n :local Return \"\";\r\ + \n :local VarSize 0;\r\ + \n :while (\$VarSize != \$FileSize) do={\r\ + \n :set Return (\$Return . ([ /file/read offset=\$VarSize chunk-size=32\ + 768 file=\$FileName as-value ]->\"data\"));\r\ + \n :set FileSize [ /file/get \$FileName size ];\r\ + \n :set VarSize [ :len \$Return ];\r\ + \n :if (\$VarSize > \$FileSize) do={\r\ + \n :delay 100ms;\r\ + \n }\r\ + \n }\r\ + \n \$RmDir \$DirName;\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set FetchUserAgentStr do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global CommitBrief;\r\ + \n :global IfThenElse;\r\ + \n :local Resource [ /system/resource/get ];\r\ + \n :return (\"User-Agent: Mikrotik/\" . \$Resource->\"version\" . \" \" .\ + \_\$Resource->\"architecture-name\" . \\\r\ + \n \" \" . \$Caller . \"/Fetch (\" . \$GlobalScriptsUrl . \"; \" . [ \$\ + CommitBrief ] . \")\");\r\ + \n}\r\ + \n\r\ + \n:set ScriptInstallUpdate do={ :onerror Err {\r\ + \n :local Scripts [ :toarray \$1 ];\r\ + \n :local NewComment [ :tostr \$2 ];\r\ + \n :global InitSetup;\r\ + \n\r\ + \n :global CommitId;\r\ + \n :global ScriptUpdatesCRLF;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global CertificateAvailable;\r\ + \n :global CheckSumsVerify;\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SumsDirAndFileName;\r\ + \n :global GlobalScriptsUrlSuffix;\r\ + \n :global EitherOr;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global Grep;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global ParseKeyValueStore;\r\ + \n :global RequiredRouterOS;\r\ + \n :global SendNotification2;\r\ + \n :global SymbolForNotification;\r\ + \n :global ValidateSyntax;\r\ + \n :global CommentsInScripts;\r\ + \n\r\ + \n :if ([ \$CertificateAvailable \"Root YE\" \"fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, trying wit\ + hout.\");\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=\$Scripts do={\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\ + \r\ + \n \$LogPrint info \$0 (\"Adding new script: \" . \$Script);\r\ + \n /system/script/add name=\$Script owner=\$Script source=\"#!rsc by \ + Vados\\n\" comment=\$NewComment;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :local CommitIdBefore \$CommitId;\r\ + \n :local GlobalConfVersionBefore \$GlobalConfVersion;\r\ + \n :local ReloadGlobal false;\r\ + \n :local DeviceMode [ /system/device-mode/get ];\r\ + \n\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSums ({});\r\ + \n :do {\r\ + \n :local Url (\$GlobalScriptsUrl . \$SumsDirAndFileName . \$GlobalScr\ + iptsUrlSuffix);\r\ + \n \$LogPrint debug \$0 (\"Fetching checksums from url: \" . \$Url);\ + \r\ + \n :set CheckSums [ :deserialize from=json ([ /tool/fetch check-certi\ + ficate=yes-without-crl \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url output\ + =user as-value ]->\"data\") ];\r\ + \n } on-error={ \$LogPrint warning \$0 (\"Err = \" . \$Err); }\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vado\ + s\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :local ScriptInfo [ \$ParseKeyValueStore (\$ScriptVal->\"comment\") \ + ];\r\ + \n :local SourceNew;\r\ + \n\r\ + \n :foreach Scheduler in=[ /system/scheduler/find where on-event~(\"\\\ + \\b\" . \$ScriptVal->\"name\" . \"\\\\b\") ] do={\r\ + \n :local SchedulerVal [ /system/scheduler/get \$Scheduler ];\r\ + \n :if (\$ScriptVal->\"policy\" != \$SchedulerVal->\"policy\") do={\r\ + \n \$LogPrint warning \$0 (\"Policies differ for script '\" . \$Scr\ + iptVal->\"name\" . \"' and its scheduler '\" . \$SchedulerVal->\"name\" . \ + \"'!\");\r\ + \n }\r\ + \n }\r\ + \n :do {\r\ + \n :if (\$ScriptInfo->\"ignore\" = true) do={\r\ + \n \$LogPrint debug \$0 (\"Ignoring script '\" . \$ScriptVal->\"nam\ + e\" . \"', as requested.\");\r\ + \n :error true;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSum (\$CheckSums->(\$ScriptVal->\"name\"));\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Scri\ + ptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :convert transform=md5 to=hex [ :tolf (\$ScriptVal->\"sou\ + rce\") ] ] = \$CheckSum) do={\r\ + \n \$LogPrint debug \$0 (\"Checksum for script '\" . \$ScriptVal-\ + >\"name\" . \"' matches, ignoring.\");\r\ + \n :error true;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len (\$ScriptInfo->\"certificate\") ] > 0) do={\r\ + \n :if ([ \$CertificateAvailable (\$ScriptInfo->\"certificate\") \"\ + fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, tryi\ + ng without.\");\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n :local BaseUrl [ \$EitherOr (\$ScriptInfo->\"base-url\") \$Globa\ + lScriptsUrl ];\r\ + \n :local UrlSuffix [ \$EitherOr (\$ScriptInfo->\"url-suffix\") \$G\ + lobalScriptsUrlSuffix ];\r\ + \n :local Url (\$BaseUrl . \$ScriptVal->\"name\" . \".rsc\" . \$Url\ + Suffix);\r\ + \n \$LogPrint warning \$0 (\"Fetching script '\" . (\$ScriptVal->\"\ + name\") . \"' from url: \" . \$Url);\r\ + \n :local Result [ /tool/fetch check-certificate=yes-without-crl \\\ + \r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url outp\ + ut=user as-value ];\r\ + \n :if (\$Result->\"status\" = \"finished\") do={\r\ + \n :set SourceNew [ :tolf (\$Result->\"data\") ];\r\ + \n } \r\ + \n } do={\r\ + \n \$LogPrint warning \$0 (\"Failed fetching script '\" . \$ScriptV\ + al->\"name\" . \"': \" . \$Err);\r\ + \n :if (\$Err != \"Fetch failed with status 404\") do={\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$ScriptVal->\"source\" = \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Removing dummy. Typo on installation\ + \?\");\r\ + \n /system/script/remove \$Script;\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Sc\ + riptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :len \$CheckSum ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"Added the script manually\? Skip u\ + pdates with 'ignore=true' in comment.\");\r\ + \n }\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$SourceNew ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"No update for script '\" . (\$ScriptVal-\ + >\"name\") . \"'.\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :local SourceCRLF [ :tocrlf \$SourceNew ];\r\ + \n :if (\$InitSetup != true && ((\$ScriptVal->\"name\") != \"AM-Globa\ + lConfig\" || (\$ScriptVal->\"name\") != \"AM-GlobalFunc\")) do={\r\ + \n :if (\$SourceNew = (\$ScriptVal->\"source\") || \$SourceCRLF = (\ + \$ScriptVal->\"source\")) do={\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\") \ + . \"' source did not change. End of lines set to CRLF.\");\r\ + \n if (\$ScriptUpdatesCRLF = false) do={\r\ + \n :put [ :tolf \$SourceNew ];\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\"\ + ) . \"' source update end of lines to LF.\");\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([ :pick \$SourceNew 0 14 ] != \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Looks like new script '\" . \$ScriptVa\ + l->\"name\" . \"' is not valid (missing shebang = '\$shebang') Ignoring!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if (\$CommentsInScripts = true) do={\r\ + \n :local CommentLine [ \$Grep \$SourceNew (\"\\23 Script comment:\ + \_\") ];\r\ + \n :if ([ :len \$CommentLine ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"The search in new script '\" . (\$Scr\ + iptVal->\"name\") . \"' for comment in script body, is not found result Ig\ + noring!\");\r\ + \n :error false;\r\ + \n } else={\r\ + \n :if ([ :len (\$ScriptVal->\"comment\")] = 0 || [ :len (\$Scri\ + ptVal->\"comment\")] != [ :pick \$CommentLine ([ :find \$CommentLine \":\"\ + ] + 2) [ :len \$CommentLine] ]) do={\r\ + \n \$LogPrint debug \$0 (\"Exsiting comment for script '\" . (\ + \$ScriptVal->\"name\") . \"' is '\" . (\$ScriptVal->\"comment\") . \"'.\")\ + ;\r\ + \n :set (\$ScriptVal->\"comment\") [ :pick \$CommentLine ([ :f\ + ind \$CommentLine \":\"] + 2) [ :len \$CommentLine] ];\r\ + \n \$LogPrint debug \$0 (\"New comment (\" . (\$ScriptVal->\"c\ + omment\") . \") for script '\" . (\$ScriptVal->\"name\") . \"' has been ad\ + ded!\");\r\ + \n } else={\r\ + \n \$LogPrint debug \$0 (\"Comment for script '\" . (\$ScriptV\ + al->\"name\") . \"' did not change.\");\r\ + \n :error false;\r\ + \n }\r\ + \n } \r\ + \n }\r\ + \n\r\ + \n :local RequiredROS ([ \$ParseKeyValueStore [ \$Grep \$SourceNew (\ + \"\\23 requires RouterOS, \") ] ]->version);\r\ + \n :if ([ \$RequiredRouterOS \$0 [ \$EitherOr \$RequiredROS \"0.0\" ]\ + \_false ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires RouterOS \" . \\\r\ + \n \$RequiredROS . \", which is not met by your installation. I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :local RequiredDM [ \$ParseKeyValueStore [ \$Grep \$SourceNew (\"\ + \\23 requires device-mode, \") ] ];\r\ + \n :local MissingDM ({});\r\ + \n :foreach Feature,Value in=\$RequiredDM do={\r\ + \n :if ([ :typeof (\$DeviceMode->\$Feature) ] = \"bool\" && (\$Devi\ + ceMode->\$Feature) = false) do={\r\ + \n :set MissingDM (\$MissingDM, \$Feature);\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len \$MissingDM ] > 0) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires disabled \" . \\\r\ + \n \"device-mode features (\" . [ :tostr \$MissingDM ] . \"). I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$ValidateSyntax \$SourceNew ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Syntax validation for script '\" . (\$\ + ScriptVal->\"name\") . \"' failed! Ignoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n \r\ + \n :log info (\"Updating script: \" . (\$ScriptVal->\"name\") . \" Sc\ + ript comment: \" . (\$ScriptVal->\"comment\"));\r\ + \n\r\ + \n /system/script/set owner=(\$ScriptVal->\"name\") comment=(\$Script\ + Val->\"comment\") \\\r\ + \n source=[ \$IfThenElse (\$ScriptUpdatesCRLF = true) \$SourceCRL\ + F \$SourceNew ] \$Script;\r\ + \n :if (\$ScriptVal->\"name\" = \"AM-GlobalConfig\" || \\\r\ + \n \$ScriptVal->\"name\" = \"AM-GlobalFunc\" || \\\r\ + \n \$ScriptVal->\"name\" ~ (\"^(AM-GlobalFunc\\\\.d|mod)/.\")) d\ + o={\r\ + \n :set ReloadGlobal true;\r\ + \n }\r\ + \n } on-error={ }\r\ + \n }\r\ + \n :if (\$ReloadGlobal = true) do={\r\ + \n \$LogPrint info \$0 (\"Reloading global configuration and functions.\ + \");\r\ + \n :onerror Err {\r\ + \n :global InitSetup (a);\r\ + \n /system/script {run AM-GlobalConfig; run AM-GlobalFunc;};\r\ + \n } do={\$LogPrint error \$0 (\"Reloading global configuration and fun\ + ctions failed! \" . \$Err)}\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore > \$GlobalConfVersion) do={\r\ + \n \$LogPrint warning \$0 (\"The configuration version decreased from \ + \" . \\\r\ + \n \$GlobalConfVersionBefore . \" to \" . \$GlobalConfVersion . \\\r\ + \n \". Installed an older version\?\");\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore < \$GlobalConfVersion) do={\r\ + \n :global GlobalConfChanges;\r\ + \n :global GlobalConfMigration;\r\ + \n :local ChangeLogCode;\r\ + \n :if ([ :len \$ChangeLogCode ] > 0) do={\r\ + \n :if ([ \$ValidateSyntax \$ChangeLogCode ] = true) do={\r\ + \n :onerror Err {\r\ + \n [ :parse \$ChangeLogCode ];\r\ + \n } do={\$LogPrint warning \$0 (\"The changelog failed to run: \" \ + . \$Err)}\r\ + \n } else={\$LogPrint warning \$0 (\"The changelog failed syntax vali\ + dation!\")}\r\ + \n }\r\ + \n :if ([ :len \$GlobalConfMigration ] > 0) do={\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Migration (\$GlobalConfMigration->[ :tostr \$I ]);\r\ + \n :do {\r\ + \n :if ([ :typeof \$Migration ] != \"str\") do={\r\ + \n \$LogPrint debug \$0 (\"Migration code for change \" . \$I .\ + \_\" is not available.\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$ValidateSyntax \$Migration ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Migration code for change \" . \$I\ + \_. \" failed syntax validation!\");\r\ + \n :error false}\r\ + \n \$LogPrint info \$0 (\"Applying migration for change \" . \$I \ + . \": \" . \$Migration);\r\ + \n :onerror Err {\r\ + \n [ :parse \$Migration ];\r\ + \n } do={\$LogPrint warning \$0 (\"Migration code for change \" .\ + \_\$I . \" failed to run: \" . \$Err)}\r\ + \n } on-error={ }\r\ + \n }\r\ + \n }\r\ + \n :local NotificationMessage (\"The configuration version on \" . \$Id\ + entity . \" increased \" . \\\r\ + \n \"to \" . \$GlobalConfVersion . \", current configuration may nee\ + d modification. \" . \\\r\ + \n \"Please review and update global-config-overlay, then re-run glo\ + bal-config.\");\r\ + \n \$LogPrint info \$0 (\$NotificationMessage);\r\ + \n :if ([ :len \$GlobalConfChanges ] > 0) do={\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n\\nChanges:\ + \");\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Change (\$GlobalConfChanges->[ :tostr \$I ]);\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n \" . \\\ + \r\ + \n [ \$SymbolForNotification \"pushpin\" \"*\" ] . \$Change);\r\ + \n \$LogPrint info \$0 (\"Change \" . \$I . \": \" . \$Change);\r\ + \n }\r\ + \n } else={:set NotificationMessage (\$NotificationMessage . \"\\n\\nNe\ + ws and changes are not available.\")}\r\ + \n\r\ + \n :set GlobalConfChanges;\r\ + \n :set GlobalConfMigration;\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n} }\r\ + \n\r\ + \n# load modules\r\ + \n:foreach Script in=[ /system/script/find where name ~ \"^(global-functio\ + ns\\\\.d|mod)/.\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :if ([ \$ValidateSyntax (\$ScriptVal->\"source\") ] = true) do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' f\ + ailed to run: \" . \$Err);\r\ + \n }\r\ + \n } else={\r\ + \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' fai\ + led syntax validation, skipping.\");\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# Add and fix global scheduler\r\ + \n:put \"Add or/and fix Global scheduler...\";\r\ + \n:local OnEvent \"/system/script { run AM-GlobalConfig; run AM-GlobalFunc\ + ; }\";\r\ + \n:local Comment \"Every Day Set Global Environment Variables\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-SetGlobalEnv\" ] ] \ + = 0) do={\r\ + \n /system/scheduler/add name=\"AM-SetGlobalEnv\" comment=\$Comment on-ev\ + ent=\$OnEvent start-time=startup;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" comment ] != \$Comment)\ + \_do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" comment=\$Comment;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" on-event ] != \$OnEvent\ + ) do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" on-event=\$OnEvent;\r\ + \n}\r\ + \n# Add Update Script scheduler\r\ + \n:put \"Add or/and fix Update Script scheduler\";\r\ + \n:set OnEvent \":global ScriptInstallUpdate; \\\$ScriptInstallUpdate;\";\ + \r\ + \n:set Comment \"Every Day Check For Update Scripts\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-ScriptInstallUpdate\ + \" ] ] = 0) do={\r\ + \n/system/scheduler/add name=\"AM-ScriptInstallUpdate\" comment=\$Comment \ + start-time=startup interval=1d on-event=\$OnEvent;\r\ + \n}\r\ + \n\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady;\r\ + \n :retry { :if (\$GlobalConfReady != true) do={ :error (\"Global configs\ + \_not ready.\"); }; } delay=100ms max=5;\r\ + \n\r\ + \n:log warning (\"This script \$ScriptName Loaded \" . \\\r\ + \n [ \$IfThenElse (\$CommitId != \"unknown\") ([ \$CommitBrief ] . \" \ + \") ] . \\\r\ + \n \"on \" . \$devBoardName . \"\\nRouterOS: \" . \$devCurVersion . \"\ + \\nArchitecture: \" . \$devCurArch . \"\\nIdentity: \" . \$Identity);\r\ + \n # signal we are ready\r\ + \n:set GlobalFuncReady true;\r\ + \n:set ExitOK true;\r\ + \n\r\ + \n:log info (\$0 . \"Global configs ready!\");\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n}\r\ + \n" +add comment="download, import and update firewall address-lists" \ + dont-require-permissions=no name=AM-FwAddrLists owner=AM-FwAddrLists \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + source="#!rsc by Vados\r\ + \n# RouterOS script: AM-FwAddrLists\r\ + \n# Script comment: download, import and update firewall address-lists\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# https://ros.vados.ru/doc/fw-addr-lists.md\r\ + \n:local ExitOK false;\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady; :global GlobalFuncReady;\r\ + \n :retry { :if (\$GlobalConfReady != true || \$GlobalFuncReady != true) \ + \\\r\ + \n do={ :error (\"Global config and/or functions not ready.\"); }; } \ + delay=500ms max=50;\r\ + \n :local ScriptName [ :jobname ];\r\ + \n\r\ + \n :global GlobalScriptsUrl;\r\ + \n :local ListsDirName (\"fw-addr-lists.d/\" . [ /system identity get nam\ + e ] . \"/\");\r\ + \n :local ListsUrl (\$GlobalScriptsUrl . \$ListsDirName);\r\ + \n :local ListsIndex \"index.lst\";\r\ + \n :local AddrListsTimeOut 1d;\r\ + \n :local CheckCerts false;\r\ + \n\r\ + \n :global CertificateAvailable;\r\ + \n :global EitherOr;\r\ + \n :global FetchHugeFiles;\r\ + \n :global HumanReadableNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global NetMask4;\r\ + \n :global NetMask6;\r\ + \n :global ScriptLock;\r\ + \n \r\ + \n :local FindDelim do={\r\ + \n :local ValidChars \"0123456789.:/ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghi\ + jklmnopqrstuvwxyz-\";\r\ + \n :for I from=0 to=[ :len \$1 ] do={\r\ + \n :if ([ :typeof [ :find \$ValidChars [ :pick (\$1 . \" \") \$I ] ] \ + ] != \"num\") do={\r\ + \n :return \$I;\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :local GetBranch do={\r\ + \n :global EitherOr;\r\ + \n :return [ :pick [ :convert transform=md5 to=hex [ :pick \$1 0 [ \$Ei\ + therOr [ :find \$1 \"/\" ] [ :len \$1 ] ] ] ] 0 2 ];\r\ + \n }\r\ + \n \r\ + \n :if ([ \$ScriptLock \$ScriptName ] = false) do={\r\ + \n :set ExitOK true;\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :local ListComment (\"managed by \" . \$ScriptName);\r\ + \n :local Url (\$ListsUrl . \$ListsIndex);\r\ + \n :local tmpIndex false;\r\ + \n\r\ + \n :for I from=1 to=5 do={\r\ + \n :if (\$tmpIndex = false) do={\r\ + \n :set tmpIndex [ :tolf [ \$FetchHugeFiles \$ScriptName \$Url \$Chec\ + kCerts ] ];\r\ + \n :if (\$tmpIndex = false && \$I < 5) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading address-list \ + index, \" . \$I . \". try from: \" . \$Url);\r\ + \n :delay ((\$I * \$I) . \"s\");\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n :if (\$tmpIndex = false) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading address-list inde\ + x from: \" . \$Url);\r\ + \n :set tmpIndex \"\";\r\ + \n }\r\ + \n :local ReadFile (\"tmpfs/\" .\$tmpIndex);\r\ + \n :local filebody [/file/get \$ReadFile contents];\r\ + \n:foreach fwList in=[:deserialize \$ReadFile delimiter=\"\\n\" from=dsv o\ + ptions=dsv.plain] do={\r\ + \n :log error \$fwList;\r\ + \n}\r\ + \n\r\ + \n\r\ + \n :foreach List in=[ :deserialize \$tmpIndex delimiter=\"\\n\" from=dsv \ + options=dsv.plain ] do={\r\ + \n :set List (\$List->0);\r\ + \n :local ListName;\r\ + \n :local Delim [ \$FindDelim \$List ];\r\ + \n :if (\$Delim = 0) do={ :set List \"\"; };\r\ + \n :log warning (\$ScriptName . \" Parsing address-list index entry: \"\ + \_. \$List);\r\ + \n :if ([ :len \$List ] = 0) do={\r\ + \n :log error (\$ScriptName . \" Failed parsing address-list index en\ + try: \" . \$List);\r\ + \n } else={\r\ + \n :set ListName [ :pick \$List 0 \$Delim ];\r\ + \n }\r\ + \n :log warning (\$ScriptName . \" Parsing address-list index entry: \"\ + \_. \$ListName . \" - Ok.\");\r\ + \n :local ListUrl (\$ListsUrl . \$ListName);\r\ + \n :local CntAdd 0;\r\ + \n :local CntRenew 0;\r\ + \n :local CntRemove 0;\r\ + \n :local IPv4Addresses ({});\r\ + \n :local IPv6Addresses ({});\r\ + \n :local Failure false;\r\ + \n :local Data false;\r\ + \n :local TimeOut \$AddrListTimeOut;\r\ + \n\r\ + \n :for I from=1 to=5 do={\r\ + \n :if (\$Data = false) do={\r\ + \n :set Data [ :tolf [ \$FetchHugeFiles \$ScriptName \$ListUrl \$Ch\ + eckCerts ] ];\r\ + \n :if (\$Data = false && \$I < 5) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading for list '\ + \" . \$ListName . \"', \" . \$I . \". try from: \" . \$ListUrl);\r\ + \n :delay ((\$I * \$I) . \"s\");\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if (\$Data = false) do={\r\ + \n :set Data \"\";\r\ + \n :set Failure true;\r\ + \n :log warning (\$ScriptName . \" Failed downloading for list '\" . \ + \$ListName . \"' from: \" . \$ListUrl);\r\ + \n } else={\r\ + \n :log debug (\$ScriptName . \" Downloaded \" . [ \$HumanReadableNum\ + \_[ :len \$Data ] 1024 ] . \"B for list '\" . \$ListName . \"' from: \" . \ + \$ListUrl);\r\ + \n }\r\ + \n\r\ + \n :foreach Line in=[ :deserialize \$Data delimiter=\"\\n\" from=dsv op\ + tions=dsv.plain ] do={\r\ + \n :set Line (\$Line->0);\r\ + \n :local Address;\r\ + \n :if ([ :pick \$Line 0 1 ] = \"{\" && [ :pick \$Line ([ :len \$Line\ + \_] - 1) ] = \"}\") do={\r\ + \n :do {\r\ + \n :set Address [ :tostr ([ :deserialize from=json \$Line ]->\"ci\ + dr\") ];\r\ + \n } on-error={ }\r\ + \n } else={\r\ + \n :set Address ([ :pick \$Line 0 [ \$FindDelim \$Line ] ] . (\$L\ + ist->\"cidr\"));\r\ + \n }\r\ + \n :do {\r\ + \n :local Branch;\r\ + \n :if (\$Address ~ \"^[0-9]{1,3}\\\\.[0-9]{1,3}\\\\.[0-9]{1,3}\\\\\ + .[0-9]{1,3}(/[0-9]{1,2})\?\\\$\") do={\r\ + \n :local Net \$Address;\r\ + \n :local CIDR 32;\r\ + \n :local Slash [ :find \$Address \"/\" ];\r\ + \n :if ([ :typeof \$Slash ] = \"num\") do={\r\ + \n :set Net [ :toip [ :pick \$Address 0 \$Slash ] ]\r\ + \n :set CIDR [ :pick \$Address (\$Slash + 1) [ :len \$Address ]\ + \_];\r\ + \n :set Address [ :tostr (([ :toip \$Net ] & [ \$NetMask4 \$CID\ + R ]) . [ \$IfThenElse (\$CIDR < 32) (\"/\" . \$CIDR) ]) ];\r\ + \n }\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n }\r\ + \n :if (\$Address ~ \"^[0-9a-zA-Z]*:[0-9a-zA-Z:\\\\.]+(/[0-9]{1,3})\ + \?\\\$\") do={\r\ + \n :local Net \$Address;\r\ + \n :local CIDR 128;\r\ + \n :local Slash [ :find \$Address \"/\" ];\r\ + \n :if ([ :typeof \$Slash ] = \"num\") do={\r\ + \n :set Net [ :toip6 [ :pick \$Address 0 \$Slash ] ]\r\ + \n :set CIDR [ :pick \$Address (\$Slash + 1) [ :len \$Address ]\ + \_];\r\ + \n }\r\ + \n :set Address (([ :toip6 \$Net ] & [ \$NetMask6 \$CIDR ]) . \"/\ + \" . \$CIDR);\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n }\r\ + \n :if (\$Address ~ \"^[\\\\.a-zA-Z0-9-]+\\\\.[a-zA-Z]{2,}\\\$\") d\ + o={\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n }\r\ + \n } on-error={ }\r\ + \n }\r\ + \n \r\ + \n\r\ + \n :foreach Entry in=[ /ip/firewall/address-list/find where \\\r\ + \n list=\$ListName comment=\$ListComment ] do={\r\ + \n :local Address [ /ip/firewall/address-list/get \$Entry address ];\ + \r\ + \n :local Branch [ \$GetBranch \$Address ];\r\ + \n :local TimeOut (\$IPv4Addresses->\$Branch->\$Address);\r\ + \n :if ([ :typeof \$TimeOut ] = \"time\") do={\r\ + \n :log warning (\$ScriptName . \" Renewing IPv4 address \" . \$Add\ + ress . \\\r\ + \n \" in list '\" . \$ListName . \"' with \" . \$TimeOut . \".\ + \");\r\ + \n /ip/firewall/address-list/set \$Entry timeout=\$TimeOut;\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address);\r\ + \n :set CntRenew (\$CntRenew + 1);\r\ + \n } else={\r\ + \n :if (\$Failure = false) do={\r\ + \n :log warning (\$ScriptName . \" Removing IPv4 address \" . \$A\ + ddress . \\\r\ + \n \" from list '\" . \$ListName . \".\");\r\ + \n /ip/firewall/address-list/remove \$Entry;\r\ + \n :set CntRemove (\$CntRemove + 1);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach Entry in=[ /ipv6/firewall/address-list/find where \\\r\ + \n list=\$ListName comment=\$ListComment ] do={\r\ + \n :local Address [ /ipv6/firewall/address-list/get \$Entry address ]\ + ;\r\ + \n :local Branch [ \$GetBranch \$Address ];\r\ + \n :local TimeOut (\$IPv6Addresses->\$Branch->\$Address);\r\ + \n :if ([ :typeof \$TimeOut ] = \"time\") do={\r\ + \n :log warning (\$ScriptName . \" Renewing IPv6 address \" . \$Add\ + ress . \\\r\ + \n \" in list '\" . \$ListName . \"' with \" . \$TimeOut . \".\ + \");\r\ + \n /ipv6/firewall/address-list/set \$Entry timeout=\$TimeOut;\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address);\r\ + \n :set CntRenew (\$CntRenew + 1);\r\ + \n } else={\r\ + \n :if (\$Failure = false) do={\r\ + \n :log warning (\$ScriptName . \" Removing IPv6 address \" . \$A\ + ddress . \\\r\ + \n \" from list '\" . \$ListName . \".\");\r\ + \n /ipv6/firewall/address-list/remove \$Entry;\r\ + \n :set CntRemove (\$CntRemove + 1);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach BranchName,Branch in=\$IPv4Addresses do={\r\ + \n :log warning (\$ScriptName . \" Handling branch: \" . \$BranchName\ + );\r\ + \n :foreach Address,Timeout in=\$Branch do={\r\ + \n :log warning (\$ScriptName . \" Adding IPv4 address \" . \$Addre\ + ss . \\\r\ + \n \" to list '\" . \$ListName . \"' with \" . \$Timeout . \".\ + \");\r\ + \n :onerror Err {\r\ + \n /ip/firewall/address-list/add list=\$ListName comment=\$ListCo\ + mment \\\r\ + \n address=\$Address timeout=\$Timeout;\r\ + \n :set CntAdd (\$CntAdd + 1);\r\ + \n } do={\r\ + \n :log warning (\$ScriptName . \" Failed to add IPv4 address \" \ + . \$Address . \\\r\ + \n \" to list '\" . \$ListName . \"': \" . \$Err);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach BranchName,Branch in=\$IPv6Addresses do={\r\ + \n :log warning (\$ScriptName . \" Handling branch: \" . \$BranchName\ + );\r\ + \n :foreach Address,Timeout in=\$Branch do={\r\ + \n :log warning (\$ScriptName . \" Adding IPv6 address \" . \$Addre\ + ss . \\\r\ + \n \" to list '\" . \$ListName . \"' with \" . \$Timeout . \".\ + \");\r\ + \n :onerror Err {\r\ + \n /ipv6/firewall/address-list/add list=\$ListName comment=\$List\ + Comment \\\r\ + \n address=\$Address timeout=\$Timeout;\r\ + \n :set CntAdd (\$CntAdd + 1);\r\ + \n } do={\r\ + \n :log warning (\$ScriptName . \" Failed to add IPv6 address \" \ + . \$Address . \\\r\ + \n \" to list '\" . \$ListName . \"': \" . \$Err);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :log info (\$ScriptName . \" list: \" . \$ListName . \\\r\ + \n \" (\" . [ \$HumanReadableNum (\$CntAdd + \$CntRenew) 1000 ] . \ + \")\" . \\\r\ + \n \" -- added: \" . [ \$HumanReadableNum \$CntAdd 1000 ] . \\\r\ + \n \" - renewed: \" . [ \$HumanReadableNum \$CntRenew 1000 ] . \\\r\ + \n \" - removed: \" . [ \$HumanReadableNum \$CntRemove 1000 ]);\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err;\r\ + \n}\r\ + \n" +add comment=\ + "Lookup IP addresses for RKN list and add them to firewall address-list" \ + dont-require-permissions=no name=AM-RKN-dnsLookup owner=AM-RKN-dnsLookup \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + source="#!rsc by Vados\r\ + \n# RouterOS script: AM-RKN-dnsLookup\r\ + \n# Script comment: Lookup IP addresses for RKN list and add them to firew\ + all address-list\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n# Script description: This script is intended to be run periodically, e.\ + g. once a day, to update the IP addresses in the firewall address-list bas\ + ed on the RKN list.\r\ + \n# It resolves the domain names in the RKN list and a\ + dds the corresponding IP addresses to the specified firewall address-list.\ + \r\ + \n# The script also handles CNAME records by following\ + \_them until it finds A records.\r\ + \n# Usage:\r\ + \n# /system/script { run AM-RKN-dnsLookup; }\r\ + \n:local ScriptName [ :jobname ];\r\ + \n\r\ + \n:global dnsLookupReady false;\r\ + \n:if ([:typeof \$dnsLookupReady] != \"boolean\") do={ :set dnsLookupReady\ + \_true; }\r\ + \nwhile (!\$dnsLookupReady) do={ :nothing; }\r\ + \n:set dnsLookupReady false;\r\ + \n\r\ + \n:local arrRKN {\r\ + \n \"telegra.ph\"\r\ + \n \"grani.ru\"\r\ + \n \"xhamster.com\"\r\ + \n \"kasparov.ru\"\r\ + \n \"lostfilm.tv\"\r\ + \n \"rutracker.org\"\r\ + \n \"lurkmore.to\"\r\ + \n \"dou.ua\"\r\ + \n \"youporn.com\"\r\ + \n \"pornolab.net\"\r\ + \n \"crimerussia.com\"\r\ + \n \"telegram.org\"\r\ + \n \"api.telegram.org\"\r\ + \n \"telegram.me\"\r\ + \n \"t.me\";}\r\ + \n\r\ + \n:local ListRKN \"FuckRKN\";\r\ + \n:local ListComment (\"ListRKN managed by \" . \$ScriptName);\r\ + \n:foreach aListItem in=[/ip/firewall/address-list find list=\$ListRKN] do\ + ={\r\ + \n /ip firewall address-list remove \$aListItem;\r\ + \n}\r\ + \n:foreach aItem in=\$arrRKN do={\r\ + \n :do {\r\ + \n :resolve \$aItem;\r\ + \n } on-error={\r\ + \n :log error \"dns resolve failure [ ip - resolve ip ]\";\r\ + \n }\r\ + \n :foreach dnsRecord in=[/ip dns cache all find where (name=\$aItem)] \ + do={\r\ + \n :if ([/ip dns cache all get \$dnsRecord type]=\"A\") do={\r\ + \n :local newAddress [/ip dns cache all get \$dnsRecord data];\ + \r\ + \n :do {\r\ + \n /ip firewall address-list add list=\$ListRKN address=\$n\ + ewAddress comment=\$aItem;\r\ + \n } on-error={\r\ + \n :log error \"error when adding ip to list: \$newAddress\ + \";\r\ + \n }\r\ + \n }\r\ + \n :if ([/ip dns cache all get \$dnsRecord type]=\"CNAME\") do={\r\ + \n :local cname;\r\ + \n :local nextCname;\r\ + \n :set cname [/ip dns cache all find where (name=\$aItem && ty\ + pe=\"CNAME\")];\r\ + \n :set nextCname [/ip dns cache all find where (name=[/ip dns \ + cache all get \$cname data] && type=\"CNAME\")];\r\ + \n :while (\$nextCname != \"\") do={\r\ + \n :set cname \$nextCname;\r\ + \n :set nextCname [/ip dns cache all find where (name=[/ip \ + dns cache all get \$cname data] && type=\"CNAME\")];\r\ + \n }\r\ + \n :foreach aRecord in=[/ip dns cache all find where (name=[/ip\ + \_dns cache all get \$cname data] && type=\"A\")] do={\r\ + \n :do {\r\ + \n /ip firewall address-list add list=\$ListRKN address\ + =[/ip dns cache all get \$aRecord data] comment=\$aItem;\r\ + \n } on-error={\r\ + \n :log error \"error when adding ip to list: \$newAddr\ + ess\";\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:if ([ :len [ /system/scheduler/find where name=\$ScriptName ] ] = 0) do\ + ={\r\ + \n :log error (\$ScriptName . \"System Scheduler for script: \" . \$Scri\ + ptName . \" is NOT SET! Fix It Now!\");\r\ + \n /system/scheduler/add name=\$ScriptName on-event=\"/system/script { \ + run \$ScriptName; }\" comment=\"Update RKN DNS Looup\" interval=00:20:00 p\ + olicy=\"ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon\"\ + \_start-time=startup;\r\ + \n }\r\ + \n:set dnsLookupReady true;\r\ + \ndelay 5s; \r\ + \n:global dnsLookupReady (a);\r\ + \n" +/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 manager +set enabled=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=109.70.26.37 comment=grani.ru list=FuckRKN +add address=194.85.61.76 comment=grani.ru list=FuckRKN +add address=104.16.3.81 comment=xhamster.com list=FuckRKN +add address=104.16.4.81 comment=xhamster.com list=FuckRKN +add address=188.114.96.1 comment=lostfilm.tv list=FuckRKN +add address=188.114.97.1 comment=lostfilm.tv list=FuckRKN +add address=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.47.69.6 comment=dou.ua list=FuckRKN +add address=8.6.112.6 comment=dou.ua list=FuckRKN +add address=66.254.114.79 comment=youporn.com list=FuckRKN +add address=185.110.92.40 comment=pornolab.net list=FuckRKN +add address=185.110.92.41 comment=pornolab.net list=FuckRKN +add address=104.21.71.238 comment=crimerussia.com list=FuckRKN +add address=172.67.172.95 comment=crimerussia.com list=FuckRKN +add address=149.154.167.99 comment=telegram.org list=FuckRKN +add address=149.154.166.110 comment=api.telegram.org list=FuckRKN +/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 graphs-plain=no rest-plain=no webfig-plain=no +/ip ssh +set forwarding-enabled=both publickey-authentication-options=verify-required \ + strong-crypto=yes +/ip upnp +set enabled=yes +/ip upnp interfaces +add interface=Bridge-LAN type=internal +add 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 ntp client +set enabled=yes +/system ntp server +set enabled=yes manycast=yes multicast=yes use-local-clock=yes +/system ntp client servers +add address=0.ru.pool.ntp.org +add address=1.ru.pool.ntp.org +add address=2.ru.pool.ntp.org +add address=3.ru.pool.ntp.org +add address=time.google.com disabled=yes +/system scheduler +add comment="Scheduler for Update Certificates CloudFlare Quad9" disabled=yes \ + interval=1w name="Update Certificates CloudFlare Quad9" on-event=\ + "/system/script { run Update-Certificates; }" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2025-11-28 start-time=05:45:40 +add comment="Every Day Set Global Environment Variables" name=AM-SetGlobalEnv \ + on-event="/system/script { run AM-GlobalConfig; run AM-GlobalFunc; }" \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Every Day Check For Update Scripts" interval=1d name=\ + AM-ScriptInstallUpdate on-event=\ + ":global ScriptInstallUpdate; \$ScriptInstallUpdate;" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Update RKN DNS Looup" 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/20260505024002-Diff-Config.rsc b/MikroMaster/history/20260505/20260505024002-Diff-Config.rsc new file mode 100644 index 0000000..5272275 --- /dev/null +++ b/MikroMaster/history/20260505/20260505024002-Diff-Config.rsc @@ -0,0 +1,24 @@ +3355c3355 +< # channel: 5260/20-Ceee/ac/DP(18dBm), SSID: vados5g, local forwarding +--- +> # channel: 5200/20-eCee/ac/P(21dBm), SSID: vados5g, local forwarding +3369c3369 +< # channel: 5260/20-Ceee/ac/DP(18dBm), SSID: vados5g, local forwarding +--- +> # channel: 5200/20-eCee/ac/P(21dBm), SSID: vados5g, local forwarding +4167d4166 +< add address=104.16.3.81 comment=xhamster.com list=FuckRKN +4169c4168 +< add address=188.114.96.1 comment=lostfilm.tv list=FuckRKN +--- +> add address=104.16.3.81 comment=xhamster.com list=FuckRKN +4171c4170 +< add address=104.21.32.39 comment=rutracker.org list=FuckRKN +--- +> add address=188.114.96.1 comment=lostfilm.tv list=FuckRKN +4172a4172 +> add address=104.21.32.39 comment=rutracker.org list=FuckRKN +4179d4178 +< add address=104.21.71.238 comment=crimerussia.com list=FuckRKN +4180a4180 +> add address=104.21.71.238 comment=crimerussia.com list=FuckRKN -- 2.52.0