From 6f5b7b9ae7e9122105d3050c2ed9e59561b147ab Mon Sep 17 00:00:00 2001 From: vados-dev Date: Tue, 5 May 2026 10:00:25 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at May 05 10:00:25. --- .../20260505/20260505100002-Binary.backup | Bin 0 -> 270775 bytes .../20260505/20260505100002-Config.rsc | 4506 +++++++++++++++++ .../20260505/20260505100002-Diff-Config.rsc | 12 + 3 files changed, 4518 insertions(+) create mode 100644 MikroMaster/20260505/20260505100002-Binary.backup create mode 100644 MikroMaster/20260505/20260505100002-Config.rsc create mode 100644 MikroMaster/history/20260505/20260505100002-Diff-Config.rsc diff --git a/MikroMaster/20260505/20260505100002-Binary.backup b/MikroMaster/20260505/20260505100002-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..3f00b98166d06db1bf53675646be273bd33c375b GIT binary patch literal 270775 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 am^Aq!1U)p)7;t{T$?Jx1oLZT0b zkWKkso|uhl^NAZNJ~5r%c6pX)3pq(nrj41JSbL0?X^*Q?YAP9^d73&1As_Mov^r4B zcm?`HgG^Svh-6g{RMO?{O8?{$W<7QMs=@OiL~FJ3eDs$TUSxB9Yj*!_p}8_R;puTq zszr&MtTB$`XJnqh?NR20FOEk4H3D&D@gFAW%uiaSCDaSvfqZZJ=P^T7lCqTx@2rPH z-H7Pj8RdTq7L+N&%lLQu-&r29a$J=3dLoyssxvk@SsJ}-Ix1eiq?jW&7k*`-z;N)= z4!hJ+fFBUXoaLCc5Fdllul`AL0+!e@n4Iu7V`nGQ1In~=vh@r5#Vkxq^dp)TsIyBO z`nIW1?BS;m-ffp~w`4UNqt9WF#;^<2HrgR&mpNVNLnjnJgu`e^`%`3aAc6i2(McQL zdy6w`6Mwgz92P)MZpfQcA2rV*c})oC#~V?KQ3lkK7NeV5Ty>@rzObwK@JcWHWybzS zFl3`-m9jctz8@vanN5PPI}T zrCb=zyxrn>@@hc|fZBt3!L<@12vfwWs-Z|lmX>nU*%mC@gy8a$z}hjP{m^dmM0UOh zt~0iKo1?szH>gkL@pt4;6uT!+Ic8WHlgpYG_Gf7n?izDQqtkEiSfqrf6O4rwF) z)CndA__SsmWbaeyBmz#sU3(Z6MNmS2C#p=k(&-hUr=N$Ba%*F`9nQoRE_4xkZTAHj z^|_F?VggsXfiZn{Stce@V|k7w|=NK^({$sX%lT0IV@N}H3X@UM@Yz$6BRbKZ=SESliYR+( zZ^@6_lre2|nK+47doLsW#DrvPo^=QH2yng0Pk=a%cPl zv5*`A{+M!?^2S&0-r320Mqd?bo%~!JUG0iQS(3+}fj1}!@D0PYJ)`ke<^B1&CTGna z&B{^TLmRMv5_)9}Wu(PS4eHl5;8#dXnRH$PV=nWbC_|NMu+Vt24<~R#%E?QMb2`T{ zgWCuP6OwUS7p~0{Gfi6gafv9Oz|ZkYL}!Nj0Rv|Ocn#C&zF;KpmUJaYa-(c<1+GWe z3Q$8f=(GR2iBMJ3?VWN&{`JS@Ezzsl(O87*z*+!7%u00tL|Y8$T}rzAy-?xv+N12I z!gN^-Rgi78Tgq~<0J^#`V_dIM-B;w`{XsVin=W)31o!;Ff7kJ_j+d=MZbh^24|j90 zPSSSsx2F>Xg{h=rFPZW$6#;s5|*su34TUrTYaR;)rgYX8MjFNGl1;R;p zk62OAH+J>kr?UA_)E$uGc}g`)Dwot&)qAVlfdgs8MZrR6Nc}iUIttho@bq}~)ArEg zG}dbL%_mEDg&SM9yj9t|gJbmT{0cb^sN8eJKd z`k&_$&~{5F-SS8XIU;dGqXa9T)-7x+jh{W{MW!~aaz}<{FXwjiQ@UCasMRKfhF~hQ zn+mMuwDM*!7Kx5s!RmD z8lz?~&0y}DJlTD7#Ojujb`#ZZP!`%pAspQ=O(4{vKf^vDD`P{^<>84P==&@^<*0`q zavb&(-f$_I-dWLLE0iOTU9Jn08HlaQ)sDUrrWpi`cT}&mmH{;XHN_^gQdr{hMG64l zOO+;(Ri(&#oVB35fUb@cM$#NKMJDTZ^QHcY3jm)jaMd*~+r)?xuQeV>o7M30V|4d* zEMTBnm!nw&{Wn$uIa&`{mZV!_Xmlvg4Sq6NzQ?8+zEmPBKr)4vIH|O}h6|lQHkMKE zOg8nBKESaBlekL&min9kPmCOlu5w;CsHKg)Ck|U}y0loQP zu{e@=e2I$SyL+JEX2AeD`+ecT4#AfTzPMg4N6V>K+}OR$YE-e(Lw&SWPQeCW8W2EA=kd~7|W(R8Hyb5kVUGAiEiJxrbDNNTh%mZnA$*`qE3LV z{{Z8vQ)`~iwtM3PEUbvdjGTSSG&GiAS-o#jZ)9<9P&sAh7s@@&0`%qiq?W@A{E?F?eeYW0Wk+Ao2yATf|jvQ z#U_SNFM$xsS7kX`UmU~Aw1ZV^R0b*&xwx|wYslQ}=>rtA7tLFxGKvez2(uB6L!Kgs~J)>)) z{%A#>s+C489r?8+5=^yvnM}i@>_U&dGWX&>eT&(E{as^HD`d5ZE7Gpy#o?Qu^wC7@ zmNAyJRsdnRatEC@=2YD`9;aIiXN-pQg!Nz_(3u2K+X?6gCl<3WbnQcd0Xk;nZ&4al zcnHJi8CSBjX=e5sI@BuZ$gMxVGX7gn61vQ5k;1Xh7G)3cjlRWDZt_tLa>vk+#Lq$o ziOaB;cP2(G}9g_NMVM8o{lnLO%yQCLX zqUs)C74XRe<0POY?sV6NpKS1E1Hxkf-T#bL?z+?XHM4A(qvoc$kB^ z-$}wz8mfb+2L2_l!oj)Nly%OU-+BVRi$1{r&UUmRKO$U9iFC)FT)Zx$4AUGv_&Fg}OC@>NDe`(ap%`jJFsDIw@5QyrX`RCSdM5f(-VbMP2)_vJ66nKFy4aYYmDsqc zkE&_LWha+1_`-6#yKw(C_%cQcdW>h9Xu+t~!cD!!QcfOw_podB|0z0oSONg$Y5)-= zxl~AN$x;2QVe0bY(>G*%5sLi+y7+_!Q@>*Ekjdy@OG)HujU#CCi1{@+QFSZ@ceoM~ z9|%S}2|m)Zq4lZwBB#VSjCSF;=?|*D>+yVm0=ucL5R=0Cr(X@_9Sr z`*XduceB;~tR4UeIaFe0lTA|mTO+6+YS3B4j>xn+Ah0w&UDY4~$Z37dy9h<(^ho>! zWqG#{`muxiv5TdLl5Kfj)V*d#>%$+mJ%!|oY-_yAgiBv&?k^oYXL?*IciS}Os3Z>e z9a3c3k2#xZ*$I=2rWugC*fZL4Fg-#WlNg|oqN!y`p8;vc4i%889-i9W;(P6%7I_36sl*@Tx4tB@O> z{ru2}M#!s)-T6H1gsjm_7U$+5E7y_nfnrP3G70 zOw&Te8M%<=KlF^bor)t!woJ|$WW{R++Q_Y?y3Z^2u>jAb=jjBVVH%CPoO~hXe|(a% zg@7K`WjSXUc}ptqkLt=D46AL=rTn7jFhuOe!5MYa6SfAwY$y`{ktbc53JVq=Q z4bFY2-}GltKGDL%e_H!p*53c&R>SPl9bl^MN^a z{lhx($xix>xv?IY#mS09kc?0KG^4UMRNZ8*PYSe3E(Pm%s zSpP~Ca-qIvvkc*Q1kxA6JK8L`EQ)>f@dGemKkci**jE7Z1ad=|0fhLgorv@O01x!B zyKF&^ACAs#V#Rzx2N8Nvhj&9thDe(l;#+)NtV;^!Jr=tJ+vl?EMk@-~54N1o~R24boZ7BN(kRv1fS#5EXX7sv(j6W1kQ>Qq# zmmVYX=bT%~x!$Tjo+Z%i4j88|uY1bxK#d$lO!88LK`}uy2ml0oghcqEdiAA(I@gSw zkj2iiu=B4-=JVWH-Ds$84ecK;aJAVlAu;KZ9B*RJ7YZ%j6;WEHY=+ganWNEKRn#2^ z(vB&}-aSq-Z#tcZrG)^r8~w2D zW($LXvFOx4Lm~s7E|g?FPfm}g#MFhs1(>~J-|gQRE^j^bS-@>uY2?_f`=b@jAMjWQ zFyIGjcnXFqrNN)YG5V@d?Srx$OoTjHDw-m#Hr;a*7Klj@=~D-Jhas)xIdDe0&_~5F z149c7QM`pRT75}n6y`n$$NM5R^h2(*;s!WO} z(J{|dw9v=LGlxpCA_=C3Yn*ie->2h^2477U+59zEMF&;fm=ufyEZ@BOv!ftPP*m2J zG85K*1@x7dHhf>9nDT$t0W>7d{b{545cJW^v7j0A1*#514Z_sy_rE&)QSZqj3y)j#u=;*>J?>Rm&dvHj zc{+>Tya}l{dLj#QwzB*a?~ZS>-fHxbAaQl=<^jdvq8rQdn4qaI!4u1#UXx!d6agSQ zu8EU@ULgX&Ak~jp#J5IbWXkF`b2Y;YJ}$wRSW(2#BeZti0n>>S_{`QyVMFAfLKP>a zMFH!_G7&QxQzo>GlfY709}?!TtW(5ANM9es(-IX<@Ae0vym{_g4?VlKx;@ zxO7So%txcCUhONc`Jt|tY~A{)9<*c2lr&ERen@dBFQJq^2^)W(VHioOBk# z1rzCEg>QL0@HDM4${0_v-_PvD6`%`dP0A%jZbhw-1OJP2>@9b#=qF}*ZC0bumMwBM zCpw$G`o8e057437m9W28X{3PlTQ+a0I3?|zyLFBJ6Fiw5|A-bF(}z^A>fD(+*WPtO zvVsX=S%S!?J#G{V{?kLTlK0Ls87F4oS!zz~pGOa_OPqWIQp}`Lsg{k(dY4rSEj>-R z@ZvWxlqj2|T3`W3(vxa)-O5Ero{^{^fP1`JFPvdeg!U>iB=#^LO#mlOxGG^VjzP+W z1(Y37`C3&@)=EPX8h#9BK_w_U-mh-IeZm~&wye_a`<3=Q_#&=P0R_@v z@rqL6u*Xo)mPsfWp!p~pdc(ct$kb)^03O@>BHhq?o zZ~ub4s+bVo+zR9SHLhM?g$OZlFW5C1iPc8je#m!`O9}`73*I|{BOi#W8U2pttS`jc z@EX^ApD!0egeq|LC4gjmQJI@8HE8V0zN{VjeK>b@G&@W{68^KFpaXd{7F*O~;qcI} z5qw51YJ~ZW0@|jZuLOGaHM$=R;ojYHbzIA^z|wpT2hS$1;dOC>*RHA8vBrA~0+X^f z&Yj;wsWRX~Z@Hcf1tk-S52>g2n(QL(h<#m%MLgUD>y<#2Ny!&GE$-+ zYj=!f!wdq#o@`rjcpn$fictCN?XOzf7C&L?z>9Pa5Ld603XpmCc3yt?gx;3&y4aoM z4p!$DL;*63{m%6S<3FMgtRwaP>K*L4K`^Hi7oCz}s{^)b>;`(dMQKhn<4N_kKxn1j z_#ikAHDc{Y5TRz@eJhoTxu7jiOTRvRz=GNa2+^;jD5Ge`#8^j4-SK6wMezjIeC;~& zY<35IGvAoN1i9AN2jj#~a|x(U41HOa(}gE6a@PP^Db+voC4qHc*o>*hvsijKsA#gC1e=?`yzN7qQ6MChxYjRlfVYJNa?{TCC7}nF?x4A9E30V6d#nf^g z%-M=K#yZL^i$FR)L}#ibnZ~4)ws+&ix&|yk>ja7YbaxEiV=5RhQ&6O;{%b7((_@At-DAcBTykl z4dx!5du3I8IyuoVUqgWvwDtC;lEi9Ug6~U?IG3P%;erPJ|3oubh|q`t3LCn9elc*OlqgQg-+7!EUf2(ZVMr*il)5M& zP2msBEDiz%{xg&FvkdsO5?ZsDi5GTt6TPESA$oe!P>lS9(Vx zJuPJpp+eyzoI>MRV2Zm_F&R8ag*_RyX}^-p2vR`F!XQ!T4YyR61A$Mt2o)_ODbmsq z!62E{Ei&I`U!IPB(vb*9(uq7p*c8_&L1PIl^-KI*5Nn*CQ`TUgu=OH~tAu<}LGs7k5$0OueSKb^-h zvC4sYsMyS=PI(Cb;BP3_)DF$*fg*9x3DSr8bGYi24HRQ~!d@&?_ysjTu{#YC?qaK5 z-JKU!BYGB@de(yR6MRN4V2fk=t^B~5Itf%Lh0K9?*!7yQ9{VHyonTqs2`16z&dlV} zas}Qs;ph-1-d|RR#*jG9A%V&^=t-!6Yj8vdphRvj%(n{@pUIA_(+@PbzpGQq7^y^&Nwd1b)Gv}NoedZx`OWTGkIINBW#CGqQ zplfo5AWQrayLh-Zd#hm@S0EPuJJn_UDa)284=2N(a1t=~okHEyyxE-4|LAHP&fLn* z9H1_drenfgQxDRJE3ZgsCjYPbuh#SLXYzVGT5O$>|9O?KSj_{Pjj8aFQnKIkLA~}~ z%_3NvHJv~)U-lAjxkB^VeK~WAus~6cgA#zCenDMj=BzSmWbxOC*>7451u%Zasa;Jx z8?u{M8yg*SBy66@R5mxTJGXYhia@7M(i&gsu1PRrm_7Ij8>hu>47Fq9e|(rxrg**)#xG?#FB|;JCLaG$sA% z(ycBHeH~v$F#LId{q5lM%owFT8gJ*3!#t$hi1&%GMct*!mHMTjnPRixK6dj#VVQw1 zRYK98eS>UWzc|c)LVez`hJC-rM5_n5xIeWlHR$X#1Vf+<70r>v&Xm5Q7|LL_Jy0gG zuWd`zwWZ{3m^o=MWy=NHeH@Q5|F5ncU_erlby^_NU%KVI< z-eq)OrQO_);|X+N|G(m8|Bdj~K0p*N0G2g=|JH93wN$}ZD%KfkP%kOoPW8DgJaY^~ zOwTEm@?L%Ir$~t!Y;qb26(e)FSC#8GY7L9)na068UIma0gqZj)KThW$+ia}@aYpA? z44sd=X(@ZBXF+Oy<4LpC;(IPn(&3?mr!3&8>Id5Me4DzYt#2ecdt(S;jB5K9N- zDca=7lfvMa=7_H64@Gj~DqOM;hX!yuW;%2_=7W(Nd(|mDDCO5ngZ5@I&%xM)oIZh% zaQsT<$7QAnC(9d{a-kXy;?=1A0U^X_lfH1}jXcBScGJaobDh8L!BOmM7J1aWq$&pd zBiimt&!bH_@IT)FMD$@+_Itd<*rggOGP-hJOy|aMy%Nc`(#}a2rR_r@X^hc#H>@G= z3yv{+imbIJMYaiq+FH9Iz15`F8w3hsQlSTLaT}#9t1Oou32&F#CaB={FXVqd()rZ7 zO>8{Gav@(2rsv82b0aK0|AMzEbgD;UCU&R*c-j`&iPsKif85#I$w^BEGA_ zHX`?>4O!-%+yG$1v`z`-x_A?=61)hE&4jILb$AYwr$tZ$!evvnK3xT~X-tD;aDiBN z#t+rcVFQOl6r5Jiq)Z-2@~q5c1tfr{HjB?ClTWnqY}6rJS)Wh+%(|gPH`&Qk4~Y#sG=WDF*Y!@u z$6e|=Ovu3a6$o14)Vc8n21XQDQ8QxhDfOVC7JH5oqaDf_R=XWsFu^U_B>;Nmgo?wb$175}S z@_yJy(AJt*NrcgbFvT0@fMf&P4i^R9-5^R@+p6f-lW#$8`x{Z9f$n7Fa1sjOm|E2F zYr<7<%&R@~gwssU$-&bI9Bv3VIu|Ylob8;kC6FbGU$0?q)E!0k zxz{zyVT@ki?qNY&tY^6`Y};gT8LSy*9z|nUMnOm}@yDtjen@GQ3j+03^-9OAVn!!p zCAi9{UoS{5%aHyquEM}6aB{ue=Y$%N6G8!vY(UvAu(6R(gG|~b(1xee*qa)734_c) z$)IlciN!abEZdqY6O8uGR;XGPn|_`*J4n$~m#9?<`@zZ{6Bcm(rg&f!cvW!uMk4u3 zJ|Es@?R50B|=A6%qZB*~s9J|Ltk{#nkCZOYAAO&^-;o#T5!73^{{y3js{z7}AV zc^I92)SJhL%hG{zorMgr%HIts3>}t_meAw8LONSH&?%@~Co&y+GUj!Z>$JU#RUyyv zze38{zW%+68!tnCRqZz&hD}Pn>xN(;Z8$iZ*+7u(I~SmGWg>zze_^TkK;6Mbu+0u3 zriBhB0<@{yo9c3ROZ>=xsfq%i;1C{~@WQ{VL`uGtJ!W`d!Ht+P{1+d;Wtk^+Yj(&> zA`SR(JA?XVXpV`T z<6@#)?t2>a$zh7$^fncJACiht@T_LsnJ9!z{B6ElGI+eBE1PFEn-8&Yxi#HuXYgi8 zO|d2lGGBQAC*$)Al%MBtpsl|lR#b=LnAe?YMS~(oGr=Nj;bHz{jQI6IU7~FyPau;8 z_2>(hGKVWRrmS-0e*n#2%Y!sN4USjwOoJm{ICB5Be(~Qcdmp-%9d~CPR0%= z6gKv1;4D|h8WT#-Y*VoWBX)x57_BI*xIx~}^Nm!PYrQ5G07B5$v;OKmGuZOFc0*u6 zc(@!zTENl|>-*#JilO#8cr6>OSGoa9!jI#8BP$vb|3)j%*X8*==oNVJv6T9Q3d>*J z2{z<%$U@bEjCd78y8b%X_X!ETd)8{{p}TgGK%OmOy;jbmMmywaANQ~;f?O8PQ4{9P zyHU-A8a_HiD*xXy?*o$N!TGHGl;vq`FY&H2vWYG$xJC^ff8_9{M~;l0keiRTpLKhd z97rU2xL8Ed(hYEy>dmIh(Hvy2t0p7sdb3rmr%||+L1XOkB@tmc@mjL$yGL9e5px(rHJ}3T}{z@VzOu2D@i!Fc{r)##iPu!Xady zkpTZc0KgHU9w&4|Vq#7s*t;m+RB4?RGE%9)J;rC1{63Zy?YHXNWQo+}Nh^qVA?;PQI?wxkbH^J-MLm z{V}U^pDO?cHNU1L(qSw79-3_4kp}6~g6H!a(17WDi@qFXso3NFg3t%mw)G?mT9hn)Xf#ceNg4Cl%Lu z-@!%Oz05soHj98@FSBjF6#0H(gOn<$U9sU4KEqUPN!8fNv*lQ`^zELXHSVhDn+7CEPqUkBcvPDK?a%am+CM z8w9t`Wz)(YDrbTLIdWFeyQ6yU)sirT7%Vp?%wQX;Mp|&QJxAY*vghvBCXp;k)H^C0 z$Fy?Vy5=J18heD*UWV-}75Ryf0jDM|NP} zJ1YDTpw!hv37>1Wix4HmFriY~fN~%pU^a7i0xV z0*r}JEp|`YGJ~yCl2|v_CI(3FdP&s~NaDY$YL3@V@UhJw7>RLP5_?ic$2t?bf~5x2^y2@d(f8J~ZkeitPdt=VXD(NV#DJwc?{fr}pukQtbe zJr^LkQ)o=M)RF4o>0xO8Xj%|^q*#%Z>wS#GFBB?Psx=TRyhd7uohmO1SPK+a|E$-> z?dq8u-1s-sTt-TEIuJ3zUn~k-k=@wI`zI^<GmwXatug^vvr;d$_ zPs$H@x~TvrTVJ&#YW*|vyjJLSe%4%|X+6O=LMC00!?48}@vO0}DECzxj0Rn9s4$n} zeCb-YUzg@hON~$!Hx*j5Na4g|#hbp%(zR146*$L`3??}}gu9L2y@&4zW#$IiMUtnz zlqn3Rz~?l`KC+ z(GRL&QD`b*BaMv!@q+G|e-(AUCG~SkWr}tKdb{S_aH-DV94*$v%DhfK@{SPv#mBn` zth=s=+|JAzuX$C)x5V6z84g|Sz67@^VGhwn-Y}CuJqk4VHGK%>NfJO9>?Q8jD!y?i z@7D8N#Zgf7nY0Ozm{BBadIArKwTR~f^Yvk8#5+mwqC0*1tXQkRkh|c%S@>{bPxO7I zO0I9i6B02#g&x2AKj!!jpz}_fhb}@R-Y}$+a!hIydK2Swp@U_d%1Obb@HQyU}NjUUk@oh!spYRg1oW4D=jJSH>y^6>f+m z?Mip*6-ewS%NHqW{Rq%Vnj`E3=c`PvU}1b1z15$I%rW~SQks2Zb4AC*H#%Vf)e*am z8|whJo9+{3q+pj-a|7qAerad_q^c8i=+>j+Q^aPj3RB`XanpzapZ+)w&Q-3dFQ;bb zYAEcmLOWhhn4AmjAS|EQmrB{>jt!*ycR+OEVwW+3tVC5ZBy9v)x;Kv_AawBr3}Y3M zk6!<`I+&A&Rr~LHi@pTCI(tSwG~(I`SGWP)>zL{Xnqk@r%w^qkJM`qaA>?TE!~H{& zipHEv>b?)SMz^_yYCaZI5y%3u-(F$TA)L8iQg;u;Q|KS#JTaS^(1!;&Aw=dR6VPTO zbdML|Dz2q576ls$V6qlph>0mbd609*sA>|3{l1NX9z+!LPGFo}qa7!SRaf|@!ATaa zyQdz%WFS7!d0fxt1n}AsVgBvP4yB*1^e!AAQK{z*Kjm!dS@a_1 zckT1s`nqm|pW4ONJZE2hm4nOt3FXfMaNR)LL8jp>fECr3E56}cUJlO1fLtGXC2#lB z!dpzf$f`N^y1$jISj$x0askI8)v^ULD9>}qDnj!WASVjS9(9{hRG5mXq=)B))2%4d zp9b#*Jw;Sg1I~qG)b}MISW^zk+-?~iDH27t?#1C+%jOSDv|wIJY%pjd{Dx;2bA z9i?Mhq69DLFb*T1%LJaj1r;6E4rgVzX0%AcW;do*j&2N@hQ`>bySiE1d*y)xP)=Hk zL>0d*rKY?lHl+DHn0Mp?=Jun<3gOHM^sy|^R6q6*xPr4`fwh1Zo@D{$3`0h4b=4W`(F6ZH<83BT1bhLc(fM*xV06GFPgN39} zEreDDFvvOSqZ(`RFK(N;h0FY}JoR-*Xg`{$Om4u#h93+_l-}$PM?edn=+r^5e{;Ua z8C}uwnQo2nM%KEd5(VKWX0`b`ts9A=wj!2^J@~`gLMDATpMF}0hidF%d8|}wp(l!=pOEx}{_qokcy9cOh58+c^`ljRj+nFiY z_;ky=fe}5b7KpK3aeKaZWmz;Sq7n?^)<|J9Kuao6+~JiEmh{iDY_b}^8;wtqmAjON zE_uMaRf|Fa^8d!vHg3(UcqO0*`5gcLuOaLCXz?e?+0@(DNBPLQ2!+CBeaVBo*~(`* z81+CRG34UxXqbAvg@xvhqjGSHj0wVhR!}?2U4LtBMDLd_WI1C7dkWp?&;cRw;}RBm zFq})xqKj+pzzA_yR}qcmj}}`y^ytfC#QTdx*R$G74OyYC0!JvbyuC?#dn70$=xMt^ zE{2RG5GTe_IXJ(RK=8dN#axRHJMfUl;Q@euH#c@_&xn|$!iB)MvEjF!-d*NwhWIiO zYkj*&!Wx}QH=bmL#-#G2I%r9I|L&fZrG9@6DG2h`qOBU=Vp=y@JrX%%Pg<@zPX;wV zY@QpdsQ>FJsO){^TFaF4u;MFw!0l6s%D*e+!zW{}?i#frz39nUp~Zr9h{Vn-!c4i; z`f}dF`N8bnz6PbnD``loN)D4?yfo0yn^aC@o~bh4p~87O+~)G7EHD9lmJ5dC>&2Iw`4;K zPby@&f=w3LOeukr)Ggz7(0P!faFVsdg)|RRzvBM}5VrupRu}x9pSQn&1;h(xKA-gU zzbI;}%oMmHqM8qCD~2&~Ey!*5jH^$$@_$W%6@hnrtPfnNm5ZOapE~xAnuNdr`urRY zvyH}(X+kLt!eml5YizT^Q#qXp5>H@Q$q`9nBj-e+r#{%WlHRp9whmLxh|!5x0ZV|n z9iD$GAbd()2Jj!{xkT7)oG@ttIn#SD>CcYq>3~b9oob$V%0?8KTJL4^CHw?qkqZ6c zSP%tVjD{_k7&?EF;mkLN!fYuU^Mr#1yGgx&>^-t7OC3853I$If?dAMr6}TGD9jX12>Sy**ay4QtWF!Ml&_d>|IM0mt;q- zw~wSUjqXuO=V&;d?uyJ{WX6A9x-c3b7QwMbv@_*_7T3s?_wmH>J8j!b>JW8}X-w!( zV3*sb;e47+X)oi9IS$p)k4eVWPW5JR_ze_YExbnFrMiFY1PD}uI=)cyXPSZ5D zBMm)tzAUb?ELl<+*x6rBc*6T8sg_3_|BCpOh2U@1uv*^Nn=oxEP8OGJ2#=CzwUJ@s z-{&G&s{pn`HTtFZNAO+ejL>i#vmzr@x|D2)BA|fJjq-jJ7ETJ1M!5CVL>B!yLLb^j zHz60nz@#?RTcGeB2V8T7XOz9xUtjybdf8b+$QZa!`eCtey#JRErrE_A>N}F(sWH}8 zsjzk%?Xf99f83NJI7L0ZL7Y%Yxar;zt{5P+w^J?EUeJ8cy{4|lMvRLcs#evLyP){c zH;LN9Jd@Tjp;|rc#5!M_;89HhWAsoIX8|lwJVco)*js?HOpfo1?{?VRMwkXe=aZZW zKtws{z1s+^Ka&QfeYv^-PsPcuH+6~Ea->3iZV-IiJ~v=KzuGB`9{^3BxcAnss32dL*JvDm1}urzke?r6-%G%6#ID)C*t@&+_D}F>3uDlSM(&F z@r?vX$lJez16NYfoK?=6i_|O8Un`$mmTSzQk;B}QH|z>NWdY9nXV8S}52cqTq&yvi zFNdj|iuybKaezh+vNl9~s9^I%G@h04Y7ZY(Kpm`SmGaY@3cy9<7*XZCNNJHhC$}YM zcxk11ACz!0R*MKDV2#Rh^9!J^8d73lF4Z#3aawO};3ig>qW`&1Rx@C;hMTxSJAmxO z7EKs`zWyPMYgB^cT_&BDcD8IspUh;2nd1zUx);E(Tki<|aKZ;M&f?#_z+A?#!DRKj z`m4~#f`Pbke`#y{{~ zVecnN;B!wbb?r&p1CoX4Az}T#;l6n7phgyoN#(7M;>i9#=uXV7+Rp;Go+l6~GTW1@ zbOX6XoIP0)A%H-$3Vf9ZW5U@^&PLU(S79fGz|r?chnWelC99hBGOQZSCpb}hH~wy5 zz?6*6aL)-M`@oCC99L1bvA7gL>r3pObe5lF@>LTwKy=by?3HAsA>nQV^Z1-GFYRKfLU+*B_n#C=Xk)p3^j$&g;D!(ZLu z@i&*rp&rPhV>gg!11Q!H^sTfc;_-nAI|S9?cuS1e!6tw8olpFeM|SbPFLn+ZbW?ur zv=pbGSBwHx9Zb3Rh(SI>K9oa6oZGJ&8~}yh7GusNJ>-Hbh`O>;CKocbRfHV+YUbyn zX-}L;7NKgm$bTA<7H1_YnC}eM6yH4f$z|}Q3ACUrq!9eTE~ay%)<7jFgxg%>XM4xf z_eRu?wfp6Zn}{p$csI_@8xG?3j4N=*>iP+6K4=q=`;SDN<}=+P409IStK%>o#42i7 z0q8!WmT*B*bYcbTpQShywq;?34Ud~>Oo@PGOhiH1w1FsC<1OW-&hCF~`VWtDKFPVR zP^zHYMGtzTb>E1~FvV7mI766p7i;`)%uyz({LIa%=o>k*sR}lu;JtFzqCg*2fnU2@ z(>BrCvT0Zd`pSzzcjHW0$VPo|449_NFgh4f+VFMex;s=S2T2BV695wjY$C*s0qrMH zBXN$%UkvM{*$ATN)`2~o-4{Kb1F7EsG>r1cWOZOnNp zQmbF|#0uhoE-vSYxw90ez3F_(`e3|1`eNB8Pc>+q+F$Vp#%ttPU930W=K%PjI_8&h zFNw=r00R*)?Pw8thbqNUk8cp@6>*Ij9wLg=)k*2u6Q5*+NevOnyKsf(&RgmAWPYdK z=SVY^HaW6&(Es_%B2qj5MBQX`fME(6dkDb5rq`5&a>ycE$t(V{a66;`q|gn&r+%YA zHEw-^ypmuM;y@Mg1Jj=@&x4;CuqVz`A#f&jo~w!OmCv{Sr7Z;!`7}}Znq2NuJJFETXgFrnJ=$=Y1rm2j z_HZ^<`?U(7UU650!_+!aoivO}8?lhAYAQ{`!H3tdUU!OzQ{ zfo+*4RSF{MJv`9?88qDSiv_Y$`A_|3n%vOW?97WbP4)rQ?}UMdpnD`Orm6Jov}s_2 zfsy*d+5k|bGZWwtIa7IycE9R%5se)|-Sk50F}mF&iCHr~ZWlj9Hq-uwI`YQv-y*cQH)TClXS(`)!M%Xdpe#zSUZfs7c1oig$@cxb#4HAVkT8!J- zhPH7@PmRD<&t%0?Qa2vaY>31MZGNz68&VHkwd9I-SYs6fawsv|em!0~Ggue@3+ORU zlp+^I$MRkO7lyu}jhfEgBYB^JF=K0ji<1OJ{nFgWCN}2kc1JyYZV@`a7qwTqX??-b zif>P&Z2bgBo3x-J-KAg7=tkre*hnzU`N7o!-Rfw{x+KL&T%s>ulAQDxMSwvdihC+O z?A9&x%xht46R!_lC)JSPjXqRMu_w4{1u*;b5;3lI@80Y=vN~TXxomQL_c+84W7s5u zYo*qTl6Og7-(2BB+8b_B(86>D+0(SlzIeLy8-AdCDSWU2R8lndM;4FEGpxswZFY5r z-4HRoq)`yv6fnY}tsP8Djj}N5Y8ZciMUTeRPN0P&u*9^*AO$*XPcAsZes`(p_EUME zx~V(8^vU*dD3K>pGQ5EV#&1Igm>7cYZ78h!NnJ?Mh8|giVY6jHy`kZFhO}DpPt_+L zBvQ(;>nr$M$RCJ5arxI51UJlW^w$SH@4%!m`Bfxy*GJo;>MHun4j47ico47v^tGee z=7QzpNGH)*I~uwt@<4Vru3d)>1A*;UNH~A6c=wUJ(&3e`)F=&q5O4jeNvAwm;F-*W z;x}S=L!J2ca_)Nb{6Y;&(A#zeMHf6XF~CpyD0f;GVJl<_B5~S%;ni)}z7WPsFfv-q zJFWmM{zs$(5-Bg&1RLP1S|M@$7&}e3Ic&5$tq9%sbQnWhxq;F+GV7GEIIDuAV%OQo z2y`Xfdyk-Xc-Qy7zc=!P17_=_td>)%kd=8UXD#T#WRrwe^puM2msC9~xlCA2lD6q<_Pt%Ewj;K<9Hhg$pn|hKX zCrhbdA(fizK~Wg^tJDn`eMDJhbjmw*at$G1Lx=REt;5J4v^mcf%tU~!Oy}L|OFID~ z1g6o85N(yFfjA2RrcY zkrNN28@H@Bt{6rmVt=%cn|+^unU$@M2lAJ139#-m@FyEYI5% zpZDIS?ps6mS6y@*9l^vegTMA1#Gi{OwGOO zLmsqMb9^q~@PPZ=E>zVns5}LYY3IRCBxvV`P#Dt@FbHqBL7tRmg-W{YVkR%o^*5*> z0{INQNB!K=C>N)A0Mve~+gTkjUwsYHCJ4S2J~k91D4Er&!2G%t6~?V%v?NxB z?UYu!%{2q2vr$SNelLp!*;)d9EQCOK?vxw+Nq|~+uxmqnekIDuM1-dnrrE=8W!lQJ ziy~ZCAMpOA?*m%R+oK#9;oa=31in1fRB${9*U09P zlPH8#ZmLpksg9Uvyy@-2VKzD#8*J0h<3S}a(BDb)Tkduo;c6SAeZc2y3;gPgR;o9x zFvZfzWP}H2H%qi$_7!0FDvj_vWpoVDTuOc3AEPckZ4iKEOvNLE-F$@PUEs{=_TJMR6lLX@C zOa}xEE@T}2W)eRqiB(i*gR1XcaFAMCH$4tx0epHX8oF@W8iH=iDD%9M_B#3kZE>kFR}DuCt;X zEdB!QL(UOGrKsX%MvX-c+~5Z(9+2dWd6H~XJj|IHe;Dr-A1CpP4&=*IYAR$+X1X<~hu z)tj@hmInnF-Fd(1xAGO_BX89kHSSgpHG(L!b@=o`xly=Wr|ml}q|c5J376jb<+qcR z6IZdjb38ob0bqy;7X@iF@MbCi@&YByzs2LQ3>}Kp{DWAoQ8b^zMb-dH1mNi*q;W5}jksBQHei&wq%2-Ry$$JZQ3h5?0fmL! zH|CdNFjYJL`32_+at>!*Z-yuDo0;I3@2|*rUr%8IPr<~uzhQi?BZY(2r5!tGB0?KD zK?L#%1K@jpE*p1K(OWMHb%od6S2AC%u%3uIMv@|A6Vwq(n_7c%rL+Yc?Qfj0M^-e* zqP8keq}ehW{jksEFjgl=wJ;&@@_XEy4T~|$j(+7R>US}aAOQVFukPumZ2nu?uaf{^ zk1vn&lmwhj&C95Xd5W7eKuvwN`)#YDQ(?8t-t}NBm~&ezAID0wb}_(*X0?Ad(P}Wy z!@$P#3~o->lFD0GSzTvojofRrc##q{^5KBcb9x<0jq(S1`TBHNWXE)i7*RNrY_5kN zdJjVHM{+`_BDhumL`HxaC}C?3Pniz_g~NybCvPj_%H^U*ln8nbG?P+((n_2W&*(51 z>b9T>=fshxckU#0*TxO)l|9u9C_UuAQAC&~*9uFUmJQE3jgx8l|3_N*?;hTaY)4s) z+Y--<<{k$0TFnrx2X8#_UG{9yPMH?sQqF-`-d)lau3w%3OZMi(I>Lg!v$=>{Brmmx zm5T@GFYsccdns%eJhv{GNf?WBN6kRhh3S|sp9WoVg1h9tp%n7LEq;gAXHKxMR72)JU)K5B ztqsv4pN&S{5;fyK!u{!DH^9u8|{(+yYcs3~=}%i>F-lx@fl|0_{M} zV4i!>+5k&C$IZ_ll0T=$M?5tpE2jtWb zfoT*^*?T-#0ixMv&-C=e8_2Zr!7UfE1+2{Eb?;-QuQXQC9_C#K+nSS^P~-QSII@FVNsT|G!G{}c=tZNd0(h-RO$5r9F*1)L z#hsCV?go)emko-5ca=uvd5^B*iXd^>0HP$W8ctdEy)q2iM*XyB$6kWw1f_)J7NIO_ zu#~JKia8@QefylCWp5o3-|+o6=nxl+ZNjNv;Rf?f+VFWa4h&eMevYrZbgTt_{XEZ{ zTfV}JMhymTcf0FOv4`m_x8K%&dVQ50=Z4)f_oLsRbG|4Y76@@fA8UNNr~pBLpipV& z_Vq{P7Wz=hAag!$wkBxtV=%z`_qxis2Ah2La8YXk9C@?EUbkBBJiIixKeM`YY7v#U z9n?hKe+HejR`2RYjwc?F53G-k+8FI}wieIuT7ol^;5!GL(|VZ{;fR7y%W44B~} zNu~jddlreKb4o_o3xGLg`?dg=bQ&2aqpu!ANHg)IwLXMk=8V*G^en~GAX}%EmzVL( zm6j`%4EPDK7W`AXm!|gkGv(ici>2473l8^G6!BL86PHyh;#BIo+tzptmFoWfe>EG~ z@~9q^>&C|k$8Fu#<3I@Y^tNx6o4?cqJQ;Ije)+#{3PZ3vzqk@wx?oHuPJ6}qv0Wlx zzW{3^axhKrvwv$QUoP>ih0qnCK43&&RS+>ta)!kjFk3QYACj$ln6u82HAMW?P&hjX zP(hA$N03E3!CZ;QOQYBF>}>_7&1!Ajz#2QUeRU;FQE3N;*)Bwo0ut1yv9BJZvEu{m zh9stl4as>UX=PmaRykxED^W^femMUrzpz?2NM2@SdWY`mcetL zngK8IEC5irZje!TqmLOT{JL;JY~5b9SQXx?^r;ZctPY3q5I(k=1mO5`Dyr^1ba0+m zPQ2gkzGHIHm3+4;vgN4TmET!#sly%221>Cq_M9y!VsNZuBIhEl{*R0LWWQ8 z&p*{R-h14gL9%qdqFkY!aR_zDvowtXI^Ak5V-C@jTW3VAZC-hYrp0t~d3 zm53!+xEpJJUAbFYcsreXBkf9VR=t2?UopkoU~WM%>h6DP;k6+;`18SgFAl*x8)l;Y zobN8L|I#RIx2&h`&wE@Sqg8faPOE+dRE{t-d*s{Vu`#s6gCB-hI(lFPwKWhbI)k6k zwW0WkBt0Rkoeqq_ez;jUXK?KEc+$j%2?Sb5?;bA^^}+$Ktuw(s3Ep&hB3H(=;M=^T zqxMYg%_k23dsA${=Q&!%^-lKPG@lXrAr1+Lpww2-5UL9Wdw zl|C)6egiH&ZVUv=TaB3KLQ53S8(L~nY5eg~cA`9XB=$&B?Qg^nyIWox$`aV4=mbSm z#|daLGKy@g4-fA4dpZpWDiU;4t6M#%r5obXB0MRKPpNE_(SBz%v`KnEy2?khiSA*3 zd(j5M@aSk`3l!4LOvg;}z<~pj59QkH5ZIneG;$$%UIYzSp}U?ik4cw>Y-L)J{8ysQM`(KbC?t#n!+#>cLVS4oU{ zDKv}TdcXS4UFpb-=>}vt&#mNARfI?qag!8(ZJRK-AX zV%{ka%(k#B)ga~4eN2lWS8zIME8dp)pHy3IaDN9v{htFJ6-=#3x2B5JU#W|#fZ6Oa zY4O^m5%zoP!2kAh1)(?4C0idMDIN=ze|~!fuaZO&vO2e%*~Hf8xJN%*WabKeWt+-el8un#k7(I!VUBrK2mygl!w zXszG~JeTQgpM1(Z66tkboJ48Zzt1}FRDqwNoKwD2fL|PMHmp5@o}SR=={p^E%;I^R z8X@OdWLoj-Z@NG(J&OigcFUoJvBCUp4`bAj7qwh8t zh0m5*ZBp_Z8^{a#;u;-fqIdRoT^`)9nJZhxE|5UJU1`f|S^~0vdcE$3Y(G(+En}}o z8p9)NX76Vd{LAGIY;Lx*mD~N}2)$)%RUB|+t~K8eHBV_K+}+_5U|IE!kVPm$J!r9= z%0JY5#PvcC9+xLzw8NR$4B5LbeR;#>UpNWfg6?9&3!q9&0=$QbAsf-;wTLV|iy^5F zkXCs4;cs##Il_R%4OCS}Zap4dh#zGn&V};dhW_2K&Use202&vmmUm^hYkW}tAA}BY z3jLB&=f{V_K$tUYN>>ccgq66JYm8czu7}$EFpT}GZ2Xi!$!H^y{3DX>DDOA=6R-CI z^ic$Yq6J)U;P*PZX;6mh>|%m6zy8nzzh8k9l81Jh%xclvFD~tThZ%P8s$6Vd#to@?Q~c^>YTxG1&*ph5xo{lf84NX@5i{o@q%NL8Zc#A zE6iDz;;~r2X2I&h^}GL(UVAaH<3wtScNu2b<9;v2TBsshs{!|ADK-c6nCN%K6`-^o zs3h+`6I_a@G!yF7$0f}MP~z9gNBq`lPN`06VY#e$#f4Wp4V2ewUO$nE(V6!LqPont z6$o6gj0*To!)gX@gl7MkmoId?PRiLnzgMxe#D)|Zg7*=Y}8(;lQzxlkkG znSWcXYwo;W*K#Fc{gt%6>PDpCBHZyI6Hq_WZ_M0Nuz5#=KehW&Rt;75D@$O3^C{vZ zxRv%%pmx+RGOw=63|iqS>yLl?rBvQmW+%fL1-E(@Asrl{mMOY1^0oR;cSyu+(Us~H z&SDDhD*}~PdzMe9OiRB)!`1!wqbQP=XZHFp#xi-2#ekDY7XHo8%yd#Sa_k&9K$|Kl zZh!w^JqkfG!Ce9$7SOzKRWgSkRxz|ND36GD^%gD=mxX8m>QvCv@GJZn)NEhpF(;h` z(Bg3wcMOC13}&e6#@!rO4enF~g*-f-H3+U!2o zRKO8iK_v=_KH*2-q-4udX^Q*idi1`@8p{L->8?YG93omBAIto}_jcm`Jb~&fNL}Mj zgPV;BCg_MlPuN~Qzyuc4?3_{td0ItgCEaZM(>r9 zWC<^kc+iI|m?0U5Da-~BRDt5}`r>xAJ^$oqAi}+_$J)-6!PEp|!wYTn#Xn69uI*M; zG5(5rmCV)HO~sCegvxruN1{s^A_qfg zR20V(sBb)>{Yj3Ye8~Itgky^Z8m7)hAv(1-T9EpbSNW?I?^gr_s%xr!92?bzlrycHiwPS~ zf`phL7m*ludJ9==t`?qJH{(9k%tWP-syntQZY)OcgbUZaDXFH1g`lcS_f3Gr)!eLj zbKxLG@_tl8R9;)7LuIZoiPmFTTPyUK2FG(~X91&~@1othfiS?9$sa#3PT-OMi)tB) za`kb({z9AAy4T;O(l_STf#UIKlP9#dXe{9JrIW6T=Ka1N^l1SaMpMwgg#PYaSJ@_p zn3g&4m_g9W(}UeG8J71OJCXQd`KxocX1qnz&=90yYmm&D?cQvcK)98^`$Kd%kLTh9 zqxy`l#cJ}r;3UX&DL|<=p@yf_kiT~+pb+J>3Qe<5PZ3lX^fi0%uiud=DhaazLXLfI z0NG6~4O+&DtpK^QsWzgwR23`IEr`VUPi^-*gLhG=Em z7^8oj*y#7liu*-@lbATATn&4+9$27%N`w9D^-9fm?oy7Y0D0|hL5f_&mjGd||Mia^ zJ()!<`{ouSq4#1b-1U!^yds9S&$tYuiQGIC_ll>m5}OrZZy+RybDPN>4H9qd6S^!z zI`9j^jffgR!Kgu5 zTgO>9VpWXQ$V1ff=VF3yc@Z~-j57_!e}&jpZL#lekU8Zj5d}O3VI-LX98>bq zp{yf7>rXEi@io;?xTq&~#fP2xeU^(a;x+$1gR1hp-sANXkF;N|5)q#2tCiZpPD-1) zQW$2&0Hg$Lw8hjsn}Ely57!6+syJVHGq3%ZQsj&h9Gve0tc)MbCBXdftQBBJ#7nL+ z3%!NHknl|lW)IP8UnzeY=!+4nmw60h67H&nts|K z_kcG)Ee^F!Y3+6P`1Ir=q{$e3o`-uQuD;yBrm|`^*`bQ>^*ftf zjbNtv`Hto)#k#Fz!b6!&iW8?-Jet zMGI2@vPD9rCGuk5B3$R10BJ#*g*BqhX2b_-pbmutHX9yEEKb zehWL^HvV<>SY6jV8*85Sl-?@*2V#dDH-}01X{fF3^}M#m8PDSWNNG#zHOIa_yfts& z1cUu^2vl`{b4@o-vJ&>^8aK*m$6nkL6s=@c9tX5#cwz{MZVn^^I)nN8Py|fK;=gyg zknR?@4l_;tDQ#qp$p_GAiFDS}J^Z%RxODagQ6&mX8lKwo2z^%Q^6t`!J(gh{|TfMh{5RDifK}LwPK(hiRZHQ2>KRtNgC_~qEqXQMH*>!crwEs!kN|am(8iA zXLx^q5nripjSgj(^mYi&OQRhp7CQ6@no4ZK9%*@V%Z9hOmXuL+3JHySOzXh*S9wZ8 z^{!Dh1i^pqR-;Q}Gad5&KR8Q0eNq7L38hd~OhpJ5T1SA^BS!-c;7hhIfUj-=fwe{) zn}u{Xc3v1pko=d~2n$ZkWIpbx5XvT9tBqrAwO6uXBv-4~V&xF)SmXH09CqZh5f}G%YJY zTyML^D3m|yx%~c#kjl=siTfPMQQ&(z1zSz3_%bHNVw-nPsEhloRfl}`t+`E7BK#X zNsQfOR&U{f`bkXV$Y-ZC8G1>Vns10GGcK3>fL+v*CPSV^qu8*PAa^`38!!eyuw%jpPu#2Fh(h9@dGsjt|U9`VP z+JJN0;qj&+yzSQKay`+^X{b<3>9BF(jwcK9Bb@W1%%vB=ZhJ2}?|7Ppw33d?Dr2uT zjIuC#E|SX7J+ECLyQXs5pxSRYri!-AbBW>|35hcE)c-UF6Bauo5n3CdQ^Q=+n10B( zt)t4ovPgpFcUx*pKFR$;3@D#XH(arCdb%&BUDgpNYWe02a5_e!VDBE7XfRYoHauZ= zq@Yf=MV-Ump){b7$ay+bLfd@&{C(=?Uw^sKVC99{jhLp1(0@I1jjp0mp^|z&`D~Qld9*}8+2M#pP>AvzOk&q z3<~%Ntet=p@4ougGoykyC?t18Fh1MG@OI z6Ss?l)a0o!DQQ($Pnci1(DBA}`&+-xqlVZHRTKsR6SSXhrB)aq0V0;@bk)?_2{7`6 zMPlwWIBCj7=;%+PE8&qHDG&`GQv^2+63%*||A^PR4ZYa)x}&~n+%f+gAGxz9-i?4A zyo$spwtxuB_BA6>?BqCv!luhtuW^pqIzfS!H0;{N#KO2n-*zYYFc3RprqXK+qZ9&O z-4f(+uZc`HdMGQs8}xY^t;je9Suj|`9s;^&QuJd_P)hKS`OTsqViT6I*$1hsbx$s& zRT7P4XPsclH4m8IMwiM)RJ%VK%jr{`y>J|b-Em>ov3rx3IPm1(C1kV)zz)p=PwrgW zdd-pPciTPC|EjUkJcheAM-8E3f1F=6xvoLW1OnQEC7H1lXDF`?*z!3}&@5kQizBD1 zn>q5;TnNLdz%ZD>?8i^CL8ODJyH)?5=2oN!kl&e~i36y%WMa`R=>-KTpZRdHpabX! zwOLMIDL|~cnM;H~lTg};?d|W|BI1}ozT=)xLLGvUAcSuy0GbIPan@ zO}*cILd$`SZT_tOGCaEauI$=x6;b%^f!%99!(3P=$2w6=`Y(G!i~$+Y!!iW(l%2pPd(L}p zEuiq@$&SLp_0+=zMLXxZmgAo<)vA0zE4g1><@(ICT;>DULC2k2W{TBHtC3%q_?y>y zTGV%L*0@GAq)Jx7*=g&`7H1F2XI%@MwUIzEEch1}e?1oxRD{t<9>3rIbiLDeB<06y zLO#gLs_UegTgV-F7hCpYYb|kY8sVH855+h$`+b9NBLqM!Y=WFilT|j_;gwL=-GLe| zZ)x69cD8xdf2(T(zpLI&{SD=eaD?~E-B0%tGaD+Zo~9>O&+n#3G<6~cQm$FOK z+^E`A>le?*MF?36#XujcWISIBGTR zXV!CszDzqcKbqW;o%yi)0O;Ms%@Kr~*x4+_p7lN&Klu8#R_+-T1_%f8x+gk;<>l*k zmSUrav&kkRR8XFf=dNJ0d2)+$-#`5IKmo=j4<~bI9#kUHB(&+|3Q(g}WKlEid?D!| z$9>w?3H*mpm%!&udb_fUB;16hIj({EK~}s)%}sr7gMqdD%NnFn0M}Y@iY)uUv5!|z zqtSi#kC6{lp!_2gy5G$~ZX}WI@$s7JZAaaZ=m?tR8O~kSFXDgmbD=LXeNLmy`P(^XjS_6tBY$_>fqwNDs*j3at(u~9}k%8BXokfpk@@A&V?&+}i{AT1zw z0{r=1#0=$IZvg*40Kiof28VUqmLJo)B|d{|)Eq(RoK$?Q@IM(+mzrwkUAM7U z6|aCn``5FnHmgmNoK)H3qOal}MdNB1zcRd_&-ls;QsLjyA&~QMput5M3s+U1VwiG_ zwjDwPCwO|WJG1kgfNMRm+oFAP)ybxY9M-C!N8N5DeRep>gM6|LwwWq8PV!`YX^LhU zt8!iGi%MfvjD@zncb-MgwEn;aVN~y(4MO|Y)!{KyWL?QplN;@2Q4iqepNKTr-PDz* zgk_9?m7z)I5D=L=GEqkXMeKfpgbf_)>9wI_^=|!2ftWm_XTaR6n68&Iq|ve+^r#jM ziRGPHB9Sa|ysyvAhjH(K5e7mcjbP60Ggf^%D+JvF_RGX$ACDS)MeIgeffe zs}N8AfO|2Aih}AxS9$F2UK-4h5Rg9mhWAn*-(I%=ALl$SpAW%vR%$fJG5(lM6J znhh-vh#IcihT+AxZ zUU1#aUcPKwe*~p)NXd8RZ!i5&R+{1%NIiESmY)42v}%v{0cqhnQ$VuaauMN#OMWvs zvWcoh#ncu18x^ZXzH&-Uqqk0JwIVPqe)9;Zi2>`!WL)D^Q0|*}$2OveHhJf3+Tm;S z`S=6p-A?impxb0)%$`nn#FX)gV` zJ)2j@8N-4yiOn#`*jKfhyL@I%p+?hL{YAp7yV0A+*VGK`)E9L##x?IBp{Vj3n<8X3 z0wJMTk%t)l+~!cGP@EHz`T%@=$4)qEU3~|ARas;Y&WvC_I?!))T{*EL1uSSXp(6%! zRzPKqxRvTX*gquSF8@jGM3M|chx0#9Q;l`omyhk%PC-IC`_8`W00#_}t4ihj+sB<{ z{AQ9Vl<_99ByG^3*WoF=jOJ&hhiaA+Oor;1LOXR=rz%dzP2K&cW8fAaB?hKPFsjw!MvTP%dG%}o>JcW8&$eK!CD1~diyhLQFMZ6_L^IAlVse8tc z64!|>z)?!kAvNUGi8(aiw}*qc)S#}euAmSF>tF2SbSkpYa{>mNLd_9s3H!*tt=w4fF;+{W;P*fLg^3IhtW9453?P z$+o;$j`n|U3C3bJd|uYbWRdNX4KCg9EK+Eip$N(}KzLlo>Ot*;2L}l7X_oV&G7pl# zzPSlqgWEN^7S-gmv3CSP=zn!t#wI(x{zjb1L9D-$73OVqUl!n!ry`8eWoPXsN+`gk z^fRBQM{Ison`(F0iL)K80EJgBmEm24k{mery;c@^$G3$rW%sgKf;0v7vWMo zQ|76UJ`p6JFy|+y5bz2A0#)(v&|=^2Mt(QqXRwx?+!N?*ZhQuMV39JDkfcAb_Jz^%#^R#y19)#s@OoXoNyF@)x4p}u(2H_Qe&IOy4e2Tnd63ZnHIuIb0+G1qViQUsUx8*8c)9I%r9ph~fDP>Pk z+}s2K!|eVfRm2OExN}aWsv{EIc6V!G(rW` zXiY+zc1DFX#9tmkvWzO{-LI8j4_2a^XDk7-T2sSmRR9HomtKXslL#^37CAVY>zlAiwgq9v{mT^yB<>B-FSEi%=&IbGL{Z9Zmz1Q_CO~ zj5Ga|)gB=D#7y-dEM(+OW=&0N5^5G=j$x$|dR7^ada6V6xFN^GUT7UF)kA}WbU!kB zH#>gtH=0GZR_EIl!$o&#=`kz|UEa^Ca+c|%C(toP1&7^@#6W28mCJdH%zlda5KDS> z=ZVL6MfpKe)P2i0PAVa!P|%%j@P3*j_?}h;od%Ks)o`VzSkh$@DauNSWpqHq9>t3L zw>e20jgmc9wYPnam&T>{Mtg$KE991S?@)V#tSg{{EHBM|&vFCMri3IT+ju(*M^&C0 z(0kI7``WFlXLflx4$S)4c#uxBxl#eo4``cvgqc`MTJ&6>7KQ-Wh7xXq8aY^{g9wT^ z?ePl!Fcc~SVHoyc-aJ;goqmbNG{w8^#;R@&Ni|52E~An0=gI(SIq0?MV_2z1STnH5 z4JTRvzWe5~WIHR#l8|2jYguw@v_t%Kj zq>lKNIda!WxrSdnR?Rz`+@i`nK0;#@LZU4_mT=37WKSy&)8CI=lcmLcyW@{R8Oddq z2b3oET05we1IK{cbff3r>>ynHDz9L|;)KwF_+DoIP)%4Ec+rlP;|%&u!T(PMUgZh6 z(?S9v{;7c}?NnBD`@atbbu*|Q?Cr;;f9LVb5~0)YPXV$uKhW0{P!VwBpJHXs!zu3G z`gd94TU7Tf;hu9`2%e! zKjW&cPxv((e2*jr7`Q7^W^NSxZgsbWNQC*e5X0D|wDK2zyjQ;p=(!84F+*MfJP0D` z9e4(#!jG5=UcL>xIvC_toWsO=_=bMttstc&o1iG-_33@R)cDZFm)9d$t|B&NTE0t| ztvp;6{P+J%gZOZa{ZxUD{|1rzp+= z(;&>ILRO?4%=U#5>+PBCggYmP3WdUg98@@3Irb}8EtdOUceQUq2iO~<(ScXiTUi6zQA ziLIC3l!Kuz+?mF~Aysb%?@s+Stlj1yfS@~a=PjRo%)cb#rm3`xgusXTAG9o>=t1d2 zMrs-yv0|?ukT6Q7XmiRP_+E= z!Z$-8-2hjXf@&nYJmO9`hXXo`0=LF4ZZRMPSi4cDiyqE`j`WrRzhWpoBRquq8D69e&iXoJ|9yK60&r^Ob}Yj3Jlcg#F+>1&9*4te)lq|KKr_Y+muM zStaAVo^mmgf^Q|S_D7c$NVXm-17e%aI1jO14urg`!w4b|@-U;o9Py zY)x`oQG**(@tV8uA#v+wn!j59Z~rK z;cxwI4lF{sn=mzTnwnaN!}XLf{p{3lW5SZ)0@3?t)!jj=&aLjPCxD1AdmP`r zHWQ1MCtk2d`mk710cZ%f zgzsMPFj`JDIoCw7A#xJp2h=;zNFTq}Q15ct!>af62iL&myty!k;Qz3`zN<1Vu9yg)-ipW{OP}%6L2-udHFADTRIj0Ewi81m6PS4ca!?E(kCsPV8zMn27 zCKigVrZueAw$)Naj=e6BC6U~e9(pm}+x?&u)4DWKX`-rK=?U(1&zawGRK5|myiDnX zB-=wilid|GPBljbdNa}O&bIZX)1W3oMqGo96u&64e=>vFvoDf6pj0UKatum}Wjeav zMbn@(98_Leo+Gi`h2NFnf!L+;uM~dm`CZKjBKVr=agNyH6hcN|M#Q=v#l+$$BX6mz z&R!T`CVw!Bvm{T3^S5OR+%i5Sju(0WSftRjptyfy~tC7b6_Zx^JfC|f zQwNzTM`>mjg%&BvnJKgeJrI`8h?e=L9RAZcs?r0e`=}*LT2e2;U7^BV-9d}&0;rvy>!^j2rrNBefUJ3DYz==E-6U0Y!6s>v<%x;;v&22(y8FWm-3dc3H z(&wT93{QQv6h$Luc5xt)?*tA6Wohz2&C!of5ux}1r=!s&Zmygxu_}6 z?bvAx0R?i2XMi`MBD{rTs0mGxW5P#u%vZAwX19S4X1NiL0{xlTl6AdCnPN5m;aK_$ zB9ICY5)~Ff+oMAiJv+#8^QGG-x5p**TCPLd9(7}Q)>YrA)PGt|FV0svCt-dd8uzEM zi|%@Yn-a?bFlPoEfyeGBi$0+x->~Y9Q?s1S{ccN^DByCv<4>5XQ749J^$JQ4Q-mlUbt`7#hkg~T<&u#)O zFc<}xn>cazDnCAJoSgz%!1i|q+1gtVO`7;B*;$ph{=#4RbBG}<%;6u0s=xU^k7)@)~G{D z>PrqM0t*lS+X`|{U0lX;>Fq?w$-jhG`pYP3KNzH{CEw$BOCd6v*9;8U1!i_*qSDq% zw@g!JYd(}hisGo0Ou5Nmzn(l_$`<&mE>!NQOp_9|G)7{_k_;vRWHA-%0HPb0?o_5F zmK(kp@f{#fw!ZSdj5C_2?3k&GZ27xj#HPZjFE#6G|CpYPE%ddESCM_0HRBAsU4-p& zEpq?a*zDr-93O;H*t7{`Q{geTU+P zO)yIU6PVXw(!S1s9P)w9d2aq$P%%sxUn&sXH}{*5?fW{^AU4$Y+=MOoz3nml|H3ig z-`+Z~8?*TwZ^qpPrGz#AgL%ln*XG;bcC)Y_g7a_+$IgxxKX(d7`vN!gmv_8x7ASvi zTP~2ky4se(GI!cG6Sgjlxw(jox(4$oOypTq?KGhrSv9D=MT^V~GBeD1=0)qld;*j( zzQ9md&d~Z(MdwzvO}s0+2`9u$S+)?8-au3^qma%9LZXn4YD|!_PW#RG)_N5p0Pp;e zjUy`rRy{MjJ3JWHG7Hsbo-78m*Z$C;xko--mE8rM70F`Sc2^wHz)rVH zwo!?#Q({31$vA15X_re+AH|*Vn~`L7)^#+@&11n<k}ZOAHyWv(LW@YQQf`M({lC#?4JAkB{f)DFhQ5mF+nK z$;Nvhbt9JfTjxG>oNP$G7rq^QM`01;5E;y`s!@!^rwx7H(*F(`FNUk+>)uU>^G|s#%G4$?a&TIQS&Fg)U8XpQLz0+&v<1??lnhW$iGTZm zx*#%pD-lS0FmD&4e(n6iPuc?H9}09MrO_|B;V@`7!ltK1Kc{exb8;9#!7eWlb+?Xs z+&K9Rpbtn3_&Z_yo33=qpZe-BjVW1glxq>&6TcwuNllg#`L9gF1 z6mVhH;M}8UK3QB6P5_6As8F{qb@E+iA_{iZD_U&we#kekbEDx&r(+4YgQ9L2tI=9dxUk z{Hu6NPLp*DGS@En>S+YuOQP2!v{~gRvCw73W8nMmSb7PsGQ;qA8?rqYVzY*9sb+a@ z0Q0-RH}a&_1cNYDJEf zhz|@$k-iK(R>-Y}L*~xe_DCAZxlQI?*t!p*tCvjz7^THV?^mB24iovRJ%dqaOEKN* zFA@eEJcppIsx+iNVRF;_M|bQv-9U|R8p`M7rxANuATU1w&f7n(SVLDR+U39{)>xIK?N0xvgR2vW(xu z;JUds{b6NU3ch6@YK2y?$U;)mstqb1(EF#}b@MlbFmZ5=6GGFE8d@~(R3xY=$kV?8 z|9Hf$ONpYUMO9&}65}n{@=^1$bV&&=*WtKMN=Sw~h;|5=Uf236FWuZJb`pu&rACh@ zC(&;Q6j{|9n9psp$8dFr?YUmwrJ2h6Vyu7*#2Lru>YH=EOS;_ycDHT2hGcxge^pXC z2t5i1J3?34QoEzSwqc9#v}tLDa6T$2a|+E-JNu8ghFjcBZaovygZ5R$LgKH}@ogYc z7+>5?#aSxDWJN7B-H1Ce1C3oXOrxK21;gq_;x@(u2H zBPt@kcgMpD^%#VzJRpS*%_%7Qt7_T0y|+*Kpj zW*Ud^FR*<@$w^*PI+Ik$_Gq0jPmF!4kz8gJgILgNnYFB~fHEkhdMZec(p1GjXD?=; zWC9TlIzTg##8mL9?7=;O!{3(WO@Yp;IS*Rt-~RphhE4{&n%+8nH&SXPBUp()3C48@ zymG0)!y1Bctrqh;xq>6YA~(~XV2PE^O-66ENi+~CA>dzNHwses7v^eg@$xGs=1J2H zhV8Luuv+FJ%hY!=PMra5M3|}}^@D0A3dW1c0(u zJJ{vRTx8_Fc&Z4(NEBL7a`E1bgl!z&I2?P*+19mR7t?H3+m5jdrb?hkrh;=CWz0cC z2MAW3Kg9REZB(nR1pHXy9p7@Xr`%cwuV`fs_GeH?1;Xy}Ftb?bVd)*a_vO&~~ zQS(JQ<}2W|xP0Hn0=S!^#|t}HuVrCqfk7nY)e1q+-L|r_%o8iEN^cVej+81!0YI{M znT71q0BeCN4ohc^JQgp29yI25JH2`-7XbtOG69YZg%$X}MH1cq28vnQy^sMu zx&~pg`Pcg$StT$KzbPHiyF*J=yM|kAOi8q;bv>}*Pcu2nF>JCGw6z-r9a5k$`Se&r z|I=zwgAuSz#x}~p>>kL`8VMUR7eqA+qGL6O%UJHziO+51CMYJn;%7P06}Us5W6wvH zUu!HC&+&pJ`XzY(q>IwCfhSG7kIRI3SVy^2W)&IZhZ2$9WvgW@MHKpvy$F$nzvj~A zH*zPwXXy6*8<5$P+G;c&R(IOaW58t1*pTCok)`{CnSx=s^1qW@$7mqU?Fn>5TxOUZ zUV&6AcfE3>r+;Trv79C%Ad!?r*25e}o?9t88GJ96W7#kyhBli`pBnVnaik{SY&I#v z4rimYiKG0qg>6jPtV-fV%WcGy=L91RJWN5eHf@w7 z7^Q+RJtYzutW=A)DoUb5x@R9X{89-y*-c7gFj-fGflOXh3fix z`(ZUUsDpciEqSN7rOv7XE0I0{4TkQXxM#{?dxnCdm_bYX6NRN4vXRf`c2$W{+zllI zBC@CZS?W6*dQQZ^8~^p*z;Itfxs;xxU6yiSw!eCOl=()|~XHG8~z*_)Iv#ymCnhyHKy+Oe=#@MRbBNBal(-+`Pj0U+1VnMmECMskrY zq4NRgbknLBd|cLWgFr6)#^`IfYO<2a(ow>+L0+`QP}TH&PsDMI*QjznXkH`K-@u@CJFAFylPwD~5Mv%Zs zdY|F5M_eUt-2Z_f`F52ou8IwynqmcLTt$Z@JS0k9+llH}B|;7AIpOfNVi+c2rXO9$ zRgLXz?NP+G{hXVX+#E=WMMt-~sP3VOmZ*UzNCYn*5&%DCyw<&ex}|&xpS?^t3c@sgAjyFPz{~J%BNngayRr z8bYq@#%>QGyb?R$+={PPg^W+lRvJk zsV7O5%Vi9%LPEGj-n&l8Sx6YsrKA}dcM@84t*U=aTZ(1zs>d>?LvWR(v8J1hHt*s1 zXQN4=xzv9V^A%@;!xdXcARsT5ji%-!#FU!Gs0&pl4_m>e&(6)-rx zSn|xrT3}VAMbXUmhNANDA6oA)a^$$oo!thpHsvYdC?@ENnR#Y6gaO!_zq9tduf;8E zk8a^$8)Lf;Eoii0XQzieX>fWq81gjP7~wBvRrF~u(2{B%bfi5@FfV=iSDqQ#`9c2Y$`UxC6()|%9q(CLgv{xW=sY!Co8l9pK5;wj=n$q(Iw=lm%|qpUu3 z>8kT(whYWsO*B?AL!JCipZ+?GdW88WP9tJX7&MO`Z&drC*o zN0dt@Z8z#3D*HNCXVs@1;DtaxNaN|Ask1+ZT#kNa;!s4vN!~zxX)ON94@vFO$-}>f zb*RE>rDw^MXu_-X6EZ*hJ8S%5{Cwc_+wuH2#F`SrVVN!`WnytHdlNcklhmirPM?(> zG}Q`>w1PG&{iWwt2W2mZON&F<^lKlXi!X_1rN&}OQQM=WaoF85(ES&S15+F<@9{}>5ii3V49Ce)dQ2i}#XvD3aV?zQj{87&RVfci$>^Uz12r$|OEC zXb1D|!(NFZQ1%AV=q1Rn!`?(&d)SxS5Wg|P%+(ypqL;Bn)SUbqZ@&zH%G@x1^3Om0 z&Ug%j#o{hg8W9R5gOukfg>94EK5P%K+NwWgXj4@7S{xIDYA~ArN|Eayah&}UN^cdcu_3@T2cb{8%r=VuCAznb zbO26Ir~#}L{)Ps^=>gNF8(ZjrnIGGH7ox9A%m{`dayq^VqPlXI7sW>0DUls74;*bZp*lHG$2= zkCa1=i5rnvBaNy$n^UsLwQ<~_3^%X}E$T)S{Rl(8B??w-OjQ}|%H{e&Y_4~vqQj0{ z2BVccRVYE`Ft?{O zoGwNl(5)G+^g57H+f&9xM_t`%3WDJKe3r)CqsOah6WN9tD95Um*iyL)bC7w&G{s+t zAOG)y>fr<9DQ*C)$)zfzFmv;^p2^amtCmCJHAp8)TU0;Q6u3*N%xJgF|6~gIIPsdE>fP! zGRjBIX!l!19o17V1j&JG$SFLKI9 z5yO^cXb|{_0GHOE_R#t;5NrTJ;1K}rK}MArql;e40bHz|A)sR$yN}W9gklxXq`_b9 z0qKwn5h#_CpIXr~GMhKR-c2p8&)FsH89wx&t!4tc60y<1Pn8e`(sO**Agp)N(@qEd zp7HXGs1%*vv<@7*aB5r14CF80P-la5Tv!3GE2(tn3c95~4?Igina>V%G662*JM;ZV zD`Bh(h`%%&NKR>^$P<6G<9ZE+ZC}2B*xZGy z`6!-bd#UjSjN|cbUCrZB!C$Z!W&8gtHKa|6vn?`mnx@+BT}&K;!)A!=(hgo)Ktie4 zVPIi_9njE@e;*)(^?5airv^W~^!Hn*dm>gg4qxbi}8zelmKynX^kw?u5a3?Mjr zz}UtK#H9*NtqQs?wdEa4c>3qKbbW@NtY0uMv-i7GVBZbi`M`-*-Jw`HsgNUup@KP6 z{rCjw!(|wTn^|3(+@kR6QfC)oi;!8yIHcFnRLnpGFk?X`^gWReiPPLFaxLj=K6hk_ zQKlh%0RUpC-wL{8iHo+cG1bEbC`Lhwoeupn$5_>CLomGqo8n-SVYJAT*g0o@#=}-* z>NvhL4ii#g@EWA1rMad8i+4VfeIN>;Zt5Dwm+8%&s$^&{c!kbX1bNdgqGK_=y2^-g zWS%yi4O(>ih6W4iC-P#G@YWYFrj8KY*pGbJ*`-~$!WsDe$ix+8JyF2)SU5Nep}r^6IlIge~A}eVw94&`Dlq8C};u=xRPqh3NN-MLA3WA2~5GA`zhZ{A@_}q~$r*Hj@A#hSASPaTU*xNhTR826lXp7(%i;qYb;%Hdu%6#WpkYgMNAQ_9hIxf zmY2rghQ%6Bdr$8RX*H3L(zITN^gEw(>I|%&Tz!ww7j&_4+R`+W1!0X}G=$I^qLllQ zKlzt%22Y7^Z(8)pcC^|v&*k$Oj?VC>>O2G$Ir5x&;U zv*j}h#qlWI#e}>EdO!{VtJV`UVUjhh=jCkay)jsE%hH_?fX>>79*uoapAv%TRcTms<-s;#f<|^L(?zbbpkEa>SqcNNWefSD|S0(EU(D3O0f_tWz9S2fWNJ*E81Dw%a4Tu1oIhvGqXF5rb~ zQq8Rv1F780Do>^gjM_!Gg4{!xma!j!(-K=wyaOUfOD5hWt-#d` z)tPsz5pFrPXSzcww&HfFG!rk%2%YvREXVM{8}dff3>vx3G0p#KIQFX&NHqg*B+xb|vr{|3(zi=eIJy5H;>r3W@yG&C96Z^Dj+yhiz;3k2M`N zmFpgaxQ4aakG4v7q+R(oF+0I$TFRo>2d}M{dI4xA{G-VPL*Cg6A~|z#D49Sq$tC|L z-m}*HR6tEpC#`=5zlj>;apy-hf3(r0TAx0J_y@KN|7<>N4DOu7Jz#U0?T%jqPga*m zXT#3$yR8+B13GMnawau_b%0rw${wRx$ZG5AaX}HkC-?U9Fm>=8v9^M>W$pyfLvNPt?RxL6`R_-2NWJh8| zzT3L{4nLRRb0m|i(U3IJ;pjetaFuH8-j_uLuAMhryR*=kvG{Cj(UrB3GXTMVCe@@{ z#85OZo}y#}8I)3rw&;uVDvUxF!&1C6<%f1Om^0O$q}4~!1$iQAo#!c!F>zR4WId<& z-RLL?nHUVwDj6}kb@EOzt)86nH>Puv2ww%Lk&WSsG#^waoOzxMO?}IZz3Md`@fE`&!N+C8-7~623tQe!_gYTP zv==hrFj0x~{ElL@0v%@=A7L?KK*Lq+GWIW3sNa&R5c*Tz-(}GZSr);zC0Fus9VOXI z#F}|0OwAk{Tn`z$h7|vZ>EAA)fir$tZf9mP;>Nfn{;^+GxerkKHRot93;~inEUr7k z0M$}SfL3GvLN?ncYp6}}u206LhhJ?0*;(gsh2tZFlz0Wb7PAw+Om>fR*6XtEuKT~y zgxl;xg|n}}5E}*@&E-SH#Y?v2f`NQaCoyiINB#V4-R96MFD zYaA3%4Riq{-2Y2YO0Pd|e=QBU$S@@fM)=m_@g=t9H!STjw-r>Y!;1;rl0&_{9q6UR`3gN2 zHn4(lAgD&C#Sf(7QAvDL)oOAyB`@nc;|0F`g)G=MF z5zVc$-vY}m>yPL)Z}uJV0Lqmp_V!In`nDzEt655<37^i|1~9rLtPWC^ZQ8XzNZnn4 z>?77<$UbWl>n#)Rt6y$^gcQxC4sNu1nNqM8^|E)S*1+g}_?jhkfqn$yd^ZeDmm*cH}^Xr53ujdAPo$Fegzm|KR7gT9pF@41Zr= zQeb(Tu7g``cs9tlo3kYho+OW|{IJMkg@&}fVE)VFJ9yZP@d9K=W$xhqg20#P#NGL! zuqQbeo^D7RSH`GSMBZa0B-$xf!`lD3s-K?2a>#ABd>@0@0X}}MiPTC0lyO#*S~FLc zsB5-(-sS@m^gRr^cwQLooGm)fg`0)w`#xg#9OKBP`3n zQxXY0{FvbOWUBWT0~5YaMEF`=^kPJ=$8wjI=0yr&!$r0`QVyh&H+1b^Y)8FvlF8e6 zo!ukxL#i@Ha1Y7Mw9eV1wJy(XJ6&HsS@Q%KE4#zn3vWo_coYSzfYv2XAT|p~=0quJ zH|0Zi)|XeaqrIl&evnbVm^Ku*z^?jf>qY>8-2%OhERj~_fhd6IHBhR8gGFK=Ch-YG zG4x#f86=mlLYjbL9}7M0+NBZ-K30u6N95t3ETbkH9To$vS;|iLwq1@)2}Cz7>V|fX z?&~ZX!jxe(sbk7H5$x6xm-X_oN(d)WLV@_L?={9MM)-(CU$_!>im^gFv&RUgAu~2e zK;;FDXascI)?_OltQaQ_7||F+kE%jwNs0ZhF$}_Et}P4EauCJf#RO>Kw-be`P4UZG zOhy_9toCH1qoZ!;FmY=fL;48EG9ZQ9atgw1<}Yjn&W->^u`%P{Es9Bwz9lJqdgqGg z*?glp;4`vbr4Mbow!vVP51Jeqvc8Ef*cl*opZ-rSd1*l?>#Gw(Qmr*N(-pns` z)wh(2K))~J4`@U;+QxP4L9G$}%FwQUw}AjsJTU;tR^ReJO#Ba{3}5vNSCA zGYDTmJN26lF3&8KE>@OsYBfV}W@h~Ua67|ipfU1XWRfLPdXS)8!G+SW(kOjoZ za=R^$XagLjX7$=ibf{X0R^P>XNcv(CECa@tSin9^sLmfL%w2{;o3x1!@!;F5)|AJR zzO9qxHJ!Q@;MsYkJSU=p^r=5URL4v3C;YW)Ge_aXOKd610|i=NqM>-C@w;2&+trRR z_zG`UM?j62a(nRkM_yG!5^vChSaS#Ku{Wtl$pfjCp!KDL|Z@hm{aVS2(X;pbInB zWqs!;UsjZ)bVKIw0L{8v(9~wlr@84%YPhlI43D4RVgfw^=;=UMqIVWP*0}ZGK3wYw z+5A4iSYX&q0uPec{B@kNqA^wF z5oEOe?G!d1KfRUjt@>FT(>>yC-s#2EHg&|;(E(v;;>S=tv(nj9+g@V3IY(2>d1g&w z(bN(7*b{HhEm#&sPSaGba`Kjtd*m0T7o&wb3Dm-pdJwJ`qqy9tl7hZ+V;GrM{Z{n5 zD;XF2Y_*ha-YT)OZUvGI^qOz%PY4xaZ)WkOxR`ZI9Au)m4uQk!3~lNKz^Pv8pbfTc zGE9s6Y~g9w&YN(ey8U<%KE^-Lahjq4$)^oCLX7od8}O}*H3%U<1P=f6)5WYkb}fgv z8D!v8S!}oB%*?EPzDqUvAo1R{-1~5{5NucW8+!kHln!U_wrQNJze!VBwXm2{w7giQ z#OE}eN5UirLvLJIlbWyF>1I5$*XM}M^qx`mA)8&(14Bp;5!26IV$= z{B-j2QDOM3TW?&?S@Y1j1lr$PIM!UkDU}}_JTEQ4Ksn_$%vIRWi!IzgBj_rp{Iept zDh8OOS&8nQz9^)$Q*Pm+xFM9{WZNhazT)9sUuxO}kxEE`>?NuU<7i?P@?iXcqO&fE zdn$)rKMl~ej5|bdgblkg`f;A~?~yROGZ4BsfuaIc1=$)}A#o%hav_w<#cMURN^1dT_{!++*V7dZ^jW-n{H0GKwJ#S{ z1eU}G`$0(rCzqbjG5X3gGv>cyL^=Y&*k74}&7d{g8@xGS11j(IHyoXrF9aN8b|5FW z=ia=kS36YR3jkk^F$Y*m5`NPVtEa#nTt_v58BfU_{^9uD%e4*qLwoXTiInf;Pu+1G zQ^m=LVLW;D>I>962a@|W^sz*TZf>Hfo69pNuAe~8=ja!4L&Ubo&XrMXMzz(~9wFtt zm`t`ju-8Uj4n(@)SiG^41546hil+?3`&2_S#qwde)=K-seSNdo4!eI*L4LgC8%xNe zwtjtn4s>yo@fYUWBXcyxBR-^|{QCf_H@6d!W(m&zjk@DW{K}>S`?UR_RJ^DY5LoVd zh?a`ANO=BFq0el3SMBf?>NQWpq_~rA$IdUC4oQEn^ia3I1d&FgZb_x|4lWxgmZlDN*h>mm|%Yl+JOG4O|4<+_DebjU9P#IT)-+xXp%SIp6{N0N%JGK^! z5lZc^IfMEGi7K!)uWVE-VG4jx8zUj>%^9f^R2_<@wncFsD#b7;*D>mKa=F5?BtVWl zoQCxbcl(c%Px`*EHojVhM4I2Jr{wu3+-ciWma)-;WF+#!Ad!w$>{;HfppwF`enKPu zXHen)V>T7LX71l_Cd#sPn7o3~6YhkDNb{&Hj$X%5+i=w+r*6)lO(uY;$;AN;22y_? znXaX>*@f5s;Yp7dn8?0@Vb<& z(XEZF#55seb}O`egUdkgDuOw!N_J$jUdA?=z2i)PMcr{S%s5pm9GlI4#>s9*r4mq* z=eGWtgDP^wc(6cOV1f9-tuZpACfkhTtVnA6egB2C?)IWOvTFp1!-BAlr6}Qez|@(* z>)w@AjH^nH+ppLJXacfI@kbrqt+5|Hxw2X$@fU2IK?-Rv6`{|S#IMs?r5F0AncesS z{P-x2R0<-Ct(eZh3Lx7#D-KU^TR-B~bg>(vm1B7gkbe19yBXgrdcTV!tAnz5@#m50 z6M!x>SH|pweh&7lDq?s8>hr}3O`mOWTpB#9d%?k3%gUh!W1gBD=2VcpS?YM1!cFJ9 zf1+ZMM5ghBXf3`Xb)@6B?*RWl0Km)l7+8INASOf5g|IvSCu|#5YbiIxu2K~R{^12K z=f|HmWOlHCmvR}0y9LTJ1CO*7Jw+R{!k}5RjU?QvGE-QL;RYn*vVV%q@~IN0zH;&8 zf+Ovb&$H|P+}<3>KL%pZEM~(Fx_bZ|;8?*=6;1RL*B@HE!Xxrr@O3uIVVcVTIMo#Z z{0adNaIPn^=IK?qb)EPXCg*QYt}eYa33bp?jJIaBaR5im+IRr{BR2xnX(k%Nx|Yg~ z%c6msOqS{Jr*bt~l?eF(j=sr-gP?6=MQ}>JhY}%l1_n)cYz#gX1MsdF7(kVgk&zsr z-K!CE4-9@2;=KB7gZ4LYMBiwT=Il zbjs7_Nj`leB_1y!=_7&I_z${}Cnf!8pUH0};^%Zl%mXdP{`H#5&f}phdt%5B)U@m2 z-2m@Hduj-w*?H}1kjv>=D&!jcI^{4?=tG=9z2xrA-hFPE$23S`(tUs!Yg4o$nv)l# zi5D%K>C0Pu>a=MGY?}QiV%Wa<+FTnhD;-o%p?~_?XL47BO zZerVXVwNrqr#%H&te_1GUtShh(?G~!Aaa~Iph?4;Xz>5|?_6fyQ zYxI9UUeLB46be&&Q+^pUcVy&jpdn2JZK94S0g(sk9z@B(JylKqm)MzX2Xht+AgRcm zSc#CQ1Rr5bhYL0Ia3dAiau0$@wM)(Pagpfg4|Zzvy-queiwZTY9xMrvi8MQA6jW-; z{8nBMV3J`W#GaZ5`Q_Ud$2#;Nnocqh2>)brWfYC)*@U(JP+=!%Uv z{olFOcC^B4qI%Ae5ELSe@qq{7L0E9)>J4dyrHHNaJuv=ONXWbD7)&W&++)F+p~xNz zY2R4G&VHVb>V~HS=@;9~`Ge~8YWa0IXdpQvqP-a!{JBY*50xQj!+g}|@hrD_LtXZ( zV42_{`XyxZglN>~`O7O=<>y@O3i3MF!!y&t8I{-X0>H-|Wk~Z{vt{t>GPf+N`o^l3 z#h!zI62!J26z&aQY=r?5PcRziY>ukp?!R1?B4LTpzqa|CRkqP5sl(2FO!5s9FmRpL z*fstrBj8+1^F&aRvIaGD3IG5ej&N-wfBTJEvnm@0I%eE`KO^1^s-%XL85ce8i)8Dt z4w5?vUfbkdPt5VgIm_yn^arLWFVAphEd^2V$#Fi7PjV0_?i9GY0~^IbPh}yT%*MQf zUGnmVG&fG@vUDv$&eOFeo0BF2ycjb0sAX5ahkWAj0Mx5x{(k_aYksim?C%!kZhd^vNqZ5o+wmqIpOO!>fE^&kE0}g2ktj;~<+R&2QLQ6_ z1h3>^R*;?PT~`~hegfx(BGXqD;w2;SBQ*4*_IC2qQJ}@Uyi+aOp4KLNC8B%r|6{B! z$cZM&(j8hTLVoH^Kd)3k(BW_HO_0cY0YEV@{R@HS>IGoj%A`wSnum_1b#hafaE0+d;z+x@Roa*m#C3+XhcWw*ZzB%YiZ*IGv z5+Rd{YJkzvziGDaJ9MT^AQaki)5v?`N*XzpfO?QUQ56}zctSuXC_G4aP++trt<@KP zPXArJKaBr!W2w0=qZ8=x+Or+smqD2kFL=5!F=Ni;Qcf7rfS;K0LJt;MK48{Qf`&;V zM9IY`#!yP$D;kkTlW1 z_*@#^@~u!d+JoeFCAq&ooo3|k{-#M8aSy!CVn;1VAvf3&jJSqbJykr6L^&1#oaF3S zirhR)+e&>VXz#oR{=B#1cXj~xK0i_xlF=Kiu{sqv25nP(M+`diKI!o$g~?+$JwD82 zP0&?{k8$q9o*)q~P~GHQaw8k*vF*Z_@iY^1tFj&b?$JAZ6esNV*mbK`VS9pgXHyWy zoHw2qdeNMd&fBAT#RByUxDGgi_xIe{Hi-ro(@USsw?Nm!sB18NxJMZqtea~+C&2_= zEH5F0(au$IgQM0{eAtJS^D@|8ev4#J&}`>P$b2eCe^fA@lrfDCn|E{k5&h zYZc!NTQ<3y;t8&pkwwV<-=lUvlN^SFnyL4qWz*#SpI)Gw@{aXbWD5Nny*b(+z{I2N zqEPoSL^6;pcB0gjv9R0nM*Er+q3sp2t}3t4Tk}hq>ubpJdjfGpU7WSKgEqoM)mFHs z1{vjwDP=AZO}lOR%0)&}JuAmCqAw{aiv;o_pj2Cn9(yhu>I_|Pxj4mZtGR2Yk;11# zu9!Tf=K+>AAw#~krH`*?#(M9tA(5#qSqVA{Q4644RtdY9Y;yXADsQR8>e|l7&XPt4 zMull1Em6!?hi!=5OKeY|F9uSzjF-=eFl71b4~O3K%VCmg#Tcl$ON3$tz;XyCE#INCDmn@2WbP*wt4HvAzCUu(xsu9 zsk*t!8!RCijb@(~OTgp^(x){?#zTij4}%*%i2dq76u?{*qS;T`w2bPqO3KT@WpB*M zb5vcn*AInFp{h;)(BG$uzu3Ns&+@*X4j@OtfNl9LGz5{bQ%>$+X#X)v?Ivn~%YZys zU8l+nQRL8mY0r9JIQ5^7Swbp-wvi!XB1hzwu5`(gDPYXCC zf*6`hu&ShFt#7v_7HJn<$1;Q4n+~g>YE=+$kzVeGsOJj+yC6)Rn>p7mS^t2pa}lz5 zoj`bo7pQC$Pl{d|2Vk(lvFzNq;1&-dk72-~dt0ZIxyMbXR9xYypFpqtBWyrx0wfd` zgr{3=idLsjigD%S!lxIY_FV<&Rg+3v8wpsVQSAqt14H5BXgVOMFpqI3nNIgIk)OAKV4Ix>9} z&!kR~Kvr}~jG2SvuJ8EVIOZv=%_)K}{VlOB2Zyn9b^WD}$hBOOG{GU@o?^v~?zFre zDAXqxGf*dfaE7=Ir`^`EJj8!ar@>gP7jN|0DthjN9cmuA0i&dK5Vm(T!yu-ke*mip z+mbCI_s)=3gsR8ssr%Gv=IYw>g#DceFw(SX(@02KKm212(=f8btdVq!G08ecca+*2 z*&Sc*bX0j8V#gTz3?_!y<@RLi>cA@8bGV_2on(Nqgp6nUvzb<&x_T)UO_n2vKaL>p zN~$esj#5$~)C6VDzQElDcD1UTnE6U+>UD|zEA^l4#|{&akhO9|53oyfs?1)SIYk%_lrT3*0Kf;WYAudlqd5?Uu&2CCZk`+MB}0gLyL@zdvv2K! z$atBq(-CjcbQ!@TTfW*lCfnW)=L<-2SYP5la*SgLeL49`_EJ51Jly=Gp;}-PkJ6*# zXA4<04#1R-35spWrlqi~jIk|aniR$=`q|u`WG>zf75oE(7<@W_5kWjKxd+prwgTy4 z>Lg=8i7mZ9)_sXDAuC2klQ*bcDpbfl~Lcq#J(Wfrr$;Gf|;P4t>7T3-{i0)qx}lsS%9CQL_fQ&_(%~Y%294 z$DrOq+G|_up)u9?GGw4HoRX~g)YRqQ7xm66o(oXUQSVcV`_aJdf7nz<>)9kZ3xar{p#HnXEyQOB^D12 z+;Cx6=ITWfJBTG;Ekb=+SQ>pY+m!)s$(E7Ou!Fz>U`}iPQ%-t_-FkW{BjQ<2MJ95Q zfaz0=K8q08$R9C@fGSzGO2SJhvWWxq>q#-niJqqHEfc^?O~Wi4D>VqoiF6rjt0DW# zGPyvip^icNb7CqlC)PY74G~E!>`tS>V&PV4pt1S2PMcMawf3n#!1^ffLK!C{{c+S6 zjrdsCytHvJmMt=Bz~@C%UG2j99R0U&>NGelnk5K4$|6euaj0!fwx+r*PLBvR1Pd}U zS7T;thS7(WM?c~fyf%O@{YeQ@5SzCqZ+A9P>6yF)0o)Byelh#?yHIT}LDP3S|Fm`# zW}=JH_>$Xq5xCj-Egyl^|8FNLN(v$fwxhe@teHz-6h<~XM&)0KS+8}HBn|-Rub3N z5;9VeTI6Szl%IDo*yaRz*gJDTx~8^o%rWW2ruY$k82r5BP0czNUjt7P+dBf@K_Cp{ zqIj*!g_xgyi${k2kpd7Eg18h(W)Tj2gFsUng_mGsl|{Od`bESlY)0oR<#bTDUwJbO ziO?0WdLR8YxI3LOw2{6cN)iX!kTz^Ht$>T+sO+M`m-YTUQxgNPzvxb~)XOfuz%)0`FdTZx>UMEw4DKY}iE&1chgQjIyoqTxi(azdG7l%J>8 zWd>6Vo&L_yFFi3djzX}C}9H_tVy6@CefhiKPuO@rBzWCpI_^p ze>ynQ;_e3uXWnfHV_u5aac_=9p4RySP2(TShi#t}hD4i4uF@wmVyZJqb>r~?89~;|?v=JJ_hQ4a*kop|mAefB z{jL{UO5{GvY#MA7LxI_)E`3ROr#n)6eU@NmR<<7%2eHn38$Pglk-@00xj7zTqbUY` zaRiP1G7;io#u@e9Udxn6d~j7r0$hIQqA0L!Bz;Y4j1PFxP;ElJ-vsThf|Q_**w8Hu zb-Xg%lHT^Pzn-q9GI8;r@mT6Jd4-yK=F6#$~EQm6rdiZk*<2|`~RR+ z)3wzou){0l=maWw|j?;0Td4W_ol$`8lMX<<;- zX&a6H%>&k6Ff;xHMu>OhwHU9!03EZT{DCN3h%N@3Z}_v=T;!*{0{&&I^mFS@U(zxs zSZ~`sBd7(WS)R7rIFVSXvv~99=%(~gokDd&NA)2|)+9OPmH{eR%8(O`C6oY_K(hxg z<@erf2vO6t{h|w6aOD>*s=KZf=h7%=G@L8PV7VN~V?lSX=iv`La`a0ILpMx|IV;IS zKrPs-&SEaeUtcPUUP}$^8DSfou_Ti;dSr&A8X-#&a!m>!!|y-_OMV=G^@BULP#>z zse_e?+4+O=j?Bg|0&dEiP#5Ue9X{p{8LnOT!ldbb5dwY~&;@N2nHya0vODQA6@mXH zJtc-L^~~Ff?`z+e=Gc=o_O36|xZD_y@*m&5fAZTGvEhW?^@f(>`I#CI^(Crd3)K0` z-0v71+8z)ky|YCuD84k~S5Sd#=BRby%^&fLHb>=Ls;8rN`(4#gw$F}$CosX5b|94S zo)VMrq{FG1L=8~}!}HWtMSs#!)9!jfr)W~<%y8*q2-%DVXARh;W#Fl{LHGbYq4ZH} zPAw87;>jZ|C!vvx0NvByIp^}A^($8VOJb4#}sMti9TbE)r_V8DY0M4{Va@hmA@7WEU49l${*)m#svDwZ0~d@B zB*!Fz&PwOSLKofnJjQF~{hjhpZswm^zqZn+UE(b11X!iUR$9veNP8*|kH~ie%mSeb zlFQt7+85{caG8nzNFee3(j!Q)LQFmwwsrNTPE4->D=e0h);U=HlIlqdS_u@beUAI}w&L*)mXChzkj zz9Rh4f%Y6?vz^n~m=V)^SzYWiJP(i@3TeWP5F`}#1%M1YtoyY=qH=H^al@uImnkYm zAys0=e&3v~8MTurz)IQ1>)3}jL~0%BE7p%n1fKe-HT*ud%1lp3VcM`OY?ST4rut`~ zEkqEZ7_me$W|K0l0859PBaJG#y|{mP#vz}{QWB6^+Q(0U#*t_B`~rE=r&9|BnP^AdBSfqCJE`>*!^_QPiD?41gzK*ZT`(&W`Je@`51sP71$&2f+kW|FbB`vFbp zgACjwb5Y$yURWQb!>aOe6|pHTVX0(ONvErpDmd03dDk{%k|wu8I~fAFlZz$Hbt%zA zDVECaCUipv9^_(gekvlW4Ka4?_3=V-0lD5Md^SM;^`h@}?}*F!*cw(sMbE><4=)St zoRBr@Cnx{7cNV`|eT7KD0Ve6vDDetr_r=ml7ns?EOmzRLOQUiNTFYNBJ$+HUJ+`tt^D0jL7H3S->LdHT~5y(g)Jg zfqSNN7SPzv+EeU7Vs{rGqh|)V}9oRgX%nIHB_)8^IyPH zb%JRgA<)gX5R25yf(ggeg6>v8#o8DV-33{@;i%238K)l!Of+R|sX^Uv)X=4rxq(se zUmh(U^L2}uSY#zIu531P%4z%}A@M3}q%&y}`|E?PT`T4-@)GL6Bfl5Y$K1d9 z4Xv?Pq}}lP{jHi1BknUfEc}@)1k{+6TdGyeU^6Fu5;<0% z$NC4Vk~5K&#k5fIK$u&Y5S<_;^>Wt8{O$&VarH@fm|wkkc( zRJnc6k`qRu_>KkM*If;qGH`I@O@q&w;zu7!MK3rH|@}_ zi@4A#s@)jQWiW=9zdfaaWf$0uUur2rI*xd1V`pGMaTQQqk7dl;y#Zkg5QRJm>b|Zm zX?Uy76ID>Z*gDG2)Oi(N7mFaAfkK)m@` zc>uH(^DcY&=o*uwQH6_65m^PaQ0_10k-Ck2b`#2T4{+8w;6b-MZA6_WL^o-d9f{3^ zyoGiXvvdad4sIbEhAfG<}Y<(L83-d zacs%{&0uHJIdAj=P%gA?%N22Wd5#m8Ss>%X6WCGql=9j|Caz<>Zbb|q1;VXMUO?a9 zLz-IflIYJB1-1UQzk*fLI01lbF0~LNJ9rQ6;s2fMtUOn@S36b5v-=JbP6dJ0++R{T z5E+c(6PY&VR*AQj(b&#hK;ewlC)6gn;?td5wgC%5OlzvzKYR&Gd`R72eV=ERt^8HHOU9Z-Y6bIYh^jO=6KnD`bwi~NyR zX@GL_70N_~FjRz&>MNd7)n%JEtQ>Sud0b_<=<(-d@@<0H_wWJy(AK3hNZn1rEt2`M zO_Z<9l(lD7fi%^CY{K|=sp5!iBK%t#i9E=};gNPPYeejQ7V5GrU}2#Qdut59Nu*Oo zNLm4K)!L^aT-@+P(Ko0M*s_02cFNabWWQNyMDYF#qSv7rOIo=){(GLUKBYucoJ# zT+&a36iFW;IA1Bb=N6r!-%ED9Ls?>W!IYZTX_KX^sgOZ4CePZ7+g#E(dNTfq;F(J4$i#>l zS8<4%xI-k#gTC9!!AiCmz>V9_n8ms}Lt1V?w%`K$71DryDG`#wk|eY7MeSx+QK-1w zW7p$UtF&RfvOi|p^K{AOX~+>>=V)>Uh+p1{9$5?ZYazw0)>igHb{BPA`Lf+}OOc5G zs%n`esP#rI=SEiEhG14oJ^Pm6x`d7e(2=E?x$uA6rFoF+7tjH<*#>~g19USu;R&sAN(oz0xfT!P{mNM`P#eD> ztY0h^@0|B00seDuPeL7}(^~$zFxU=qe#Ev1Lwn#OTF~cepMCJrHj^6h8cGD12u3O07~M8t!jpW%Zwml!Ps&myl=5I&ZO`^%#jkT(aB)0OT&L!hnm>@ z^osMDQ&K~$N68Z*mAt-_o-i-_l&k0MZK+ozMq&>1sCaI^WL z^TN<(&6Fnhg6`JKaX)dcAtOCr@e_kEA&=?Qe|L4QpqL`g=xPp&vUKx2lo#nzv9pwv z4aVQawDO>(WlE&|FP9hBPQ_KOo|y~H{B8s(9qEpCn#k-drgIp0$Naxdg_SYz(nE=H z4WS=kjB&Y8nlN*4k()6zddsEIXu4J%*t-!^NO9R(zd6ERT?FyF4lr#cGcYvkluIS- zv)LjK`0pDCOC}V&BiSo;qH=$)F7eJXRQ#JDj%V2q(X@q0r7N(kc;gf`Au}Uxv9gu! z@KMttG3{1whpx0F4fV)beLIZB!&bo352;Z`h42g>#L%xgtM$c7Cwhg=qdxV4sp!O& z^`SeM1ukKx`?MgiFhH3~NS&x>(kgGbHCK4tf=uO+Iz)U|v_Txpae86L$}*ietF0#^ zn*+VmP^~o23ndxX)lF#3;LvzxPz8sW<}L9#&H_|NYmm0G>R)pRX)g91 zg*M)R+v~2;p!zWCzOJEqZ;<`o&^vT@Up-W>$n>_Rc)P3znXm_-J~vn4qY@T#p|S-0 zB-0FY7^suOhfS94;lWSXr0p5vIoExFNKhw`EXs&2J70}>d*iM>K-^i{r7ED}9W`$| z**Mdnrjd?0oFjC$cWjG0hWCn_;N^Yo941NcnIX0`X8hXl_B7$YjI+m;q%Ek06JH|e! zod|=A)RwQnKv&ld$e@iS1NCp`b8e*%q4!f*>TG1NgtHRZX)FX`?P#e9d?5b(9gdLw za6(=m<8R_dtHtt@*?8(1e7TaPrOws}k@5-i{kj6L0;K9c{sbfbgTu@)bmaV;4wnM@ z&U5oJLcm10)z-pxa8}-l5*P$2LjVHj2UWDr9I}!*X#%j=>5w*e#9Vbsg+#=$>sYo{ zQ65wmam+nn+odXaZq);;=rlJI3hND0z&Ev{swt29U;1h6UJj(r5?-$~srLuq#t>we zTfvMvP#g%&va~Js9$l&SvB*?Zs^}d9#(QP4(T%8Q4-~Ew1r7%$pI?!to;X2^z=t>K zG~u|t>#rKAqfU~;G_RbrUH6NW5$MhxrK7TRjl9dn5)nhn9?a8`{B>`cYX429?_In^ z0^1P&(biZW1#*I3^o!|yqNy{j1^M>hZ3bu zSh+ehX@=|BSy+SuI1tQWg@w#)rI4-<9^@&}MEK+Ah)${>9Od0ghpwQ(k_J4XM@_y<& zX7)#pkE~uG>yN_daYuB`xfzAL&6WWRdD`5UWH=DDqi{P?t4f?1{R>m*aLd`{ zG&~6AR&cGYxp_D+U=pa791|m8#tlVa4DCJpR=^Md9M@RD)K*};JL-MHT|BdW%7F>W z;(A3X5^O4xe~_9(cpZ&%89hQx7eb@a_!w=h7`p*;;aMu~K$0DlI$s>7PzqqI+i^_= z5EXGo{Iw^{2!gV31=j2nZb2)^yA*9Z)MYN&Zhzj|VpYWeUw-iYNm`npU@vdR3QmSF ztBymYd`^}#(DD&le4wo<2gqtN6Fk2!We5gN@_8K3XNzo&MA$%10+%fb}_H@7-f@0b|nhIAYgfF(~HgB=Y+&khA&} zifA(AIC=NWC9X@(71-1-o+|jrhE5_+rQ0(#_@f7LHGjH5U>iff#^e9-MYOp>p<=|B z9CPfvFx7G!n1ISKTPrV5MJKLJeFLUW+z`p0?RxxqaLh>FA-Ct8OW*R|ibVN=Ca?Nk zcHDt{_JB#@PA<132f*f4J5%X?O6y278;#J5fTbR@X{SSk~KjQ^OlR?2W+_|m~`@H>!;Gici&DE%veocCj8Njxr{#x*1OS5LX` zbO8p8!YYI8`G6(yQk~mHZ63sH^bvfp9ZPP1bJIDHoF69v1o1M#g-pAeY0K7_c_)be zn$<|o4W3}vH`-`KRb;>8V48J;TK(jX0CAVsB~p5w8+B0GO+sH58NjGeLprf|VtFMh z2x-|USxjb5#Jd6ruk4hkvnwKf2kBA81aJ_CFNj`YcNeCfGbjFo3MWBFBUb4P0Tea8 z)&j$jd0o7t7|iX7QIy4$NJ+@CH6p#05Nj!YyIQTg^`3GDN@R2euI0T&tPq1tevr)2 zfTv2LFZPw|YsC-c7dg0MvtUJk?5R&O7{WrbSJ`wTxgmAF^=NdMv$jl(xIBckt#5L2Qx;-}Wvy4lV7wa2MNDtZ7()AfV zP@-b%SORRW2zEy>=m}qo^{Ax>!D34at%^qg?`6f*qU^e%R+LM!K2mQ4?125ocLXuR zf9aQTdaj9jUN?7RM^9u?kBQsc7Sq{5za!E6@)%L)>T;Il)Ko{f-^*uFzJdy^A78$n z8e|e_0&hV8YbhnTD=|Z2!x;$!1RM6nv*V>>PUkix81z+*;~*_|V{>*uHP9$?8S7f- zv+>ESM{f2qsHJz<0UN5sE{2`R#oU9E3JQY?fPLmEr2xbokN>mvy^ZI|>;$TN;f!N& zS{ZYmG2Dd0zl7Oo8;V1J>4;N9fjvuy)9h4yM#NLf^^?UcX=h*q8iifxrXE)KS@ZBU=EW|QNHelGtp>N zmyCqMq>7mz4JJnlIu7ZpjWN}*@in9QuPbSfkJRb3?kcA-c6LhRi^uo{#|I()<1lQ zzw!V`wZ`}N@*U7%O!yQG<>>6kMbqm~I$K9~uY7(7GN%7Pxm!x|xoxB0{gdaVKj`RE zqmqc&{U6e>ysRQ_er6(OcG7epxC@=o*>N#wRF!?r4Z&@qAG2XN$$c=i{l8-Nbq!q5 z@!lC)?ehTy#GK)aBk3_>Tu~h%9`|Iv05=hqy5+a(d|~H6|JY>F+PKkPW%?-iB$7%~ z0PAf@SbWk_4>)LM2x|WLYYoIk(hNcajjj&En>}1`ej00TY+hHo!v!F+?+nkPiF|hC z)pft7aNEsk6=Ke1p>0jho>9bx zRFN>E+FzK-(_O>Hz@qGBzb=iEe%9^fpOW>k=WcaV6wD&`1z%D^5pEcvw}Wn^KU?c~ zTAY&q%9(uTEL15?Sp}z#b}--EsXit^Bv(tb&9FCgO{@a{9!}6k1RtEjbP~&e{j6~E z$+Pz@GP;q_C_(ckkq*ifsbK?2`B++u@IFki`Ap+Qk%Jeet!G4a%&ql;hJu;uc;|#e zFz8WaE0BnZ?D}Nuz+fo37CVGJ8CBf1i)vV)4=vvJ>yIy-bo1%H9_f+vSjzx(H+=7L z{p&erB2{ICn+lk(MYdwl^_%N8_5obJFV(}VWlbMrG|?{b+O882{>ho)df`R!aQe4f zss1%|bEOWs08|e0U;p*?zPH~cTF2(giuP1WvO7xv@n-dpjjoK**33CUK>&?!CEMQ^ zQ~&Hpy+2Iz_VmN|K^oF35k)7JCSBNAUxOaJg`(GQ2rZ_&5E?YApt_f+`6xMB zHP{Yp%?2hEy=+o12cXed%WW@#whGyDWcXNJ8NW`W-5TY>h;$(O#Y(4IhP@_9{Ty&T z@T&{V-X1F^^a%ZH#(DPDoDiff!UA9<@Rr-hhFj9?xnSvjQT8cNo#>}7}zRm&V&y|kZ zb{c})!kK55>psJ?0*5$CW>efFY<@27nEkY-0Ga}6D6+t^UsEOkH6puGB3%6f>hewT zFFvgU5~RcrnPcX2JbVfyGb)tBSd8L}SvyR2>#yklW7|Cwu=ims$E=bP95r2DdGj;W zQ!obxCrm(<2}FhErXZ##0Vwo{x8_YUBfv)lnSoRFuInb<{@_c==DQnc)s7bCeUXPK z^Q^ryco7pr|8su>0w8W@;h{DS4ZT_OmJkg_$hBJA^SEaD{cGUbfHe;&4u$RDTsh&g z*kkuPdL~hnWP|n7ah`^GyMJ{Qv`h_^iLrapqW>RoU?Yi_>!`6^GTobxaEG6t zDa+7i9j#GzW4be5`!ps=n=8m9+x@Ef5eowt>NRCS4%9`u8r4N`%`Px^i3vN(l)qt5 z1ttZ2M4Y^Z&cZxH#3B|wIFgtiv+&i|3B2F={Kn_Cz#^2-OZLMT9 zRNt75;H6<_9iV6wWgs8zMn@@J?)oB&p@8i!{5WQBx>2|{c?b|{19QW@iMr8YTsg+~ zqR#r?8@#hiC2E_cQW8HVht!L6)HK83nLg}dr%qBjfeir860s?T5ivecQ)z+tY^{)HW!_*4o{e&qdYoe{*xBGKKxN94$uNB+Wv%mKbc|Ohs7u z;kV2BVr5{78aQ6)j&|b)j`B>k4>=@&b0%Xcx?zM8yP!esE~1A`t@B-l+AufsL>y7} zFsW>%oUrz1cBjOtE0H&>?qK&47|UNXKj{eJ#_A8uBelABlv1!rc6hocvvG7mJbNpO zUWSXqk6=*0i*t*2*OQaHX@_RS#s>3Xz4VR+Ggt`^1;6a5%?$f{GwA?xr&yzq(P9LH z*V&B;8exXMt$8%G&8DHbu-~BRVI2vhAM`8|L|3P!TF|F_gS$v3yE{Q$4^qe*&r|`u z2O#M>T^ z1n4=RFx`Y7dB4hzBpxnjbse%)D{}OJu(@3kBpm@j0KHnDjZqY3J%6ec>Nm&V->*Cy|u~ zoX9oo982?N!s)o#hx6_s7p-~x_6FUGv4lno(ZFk#bi6Otr7mWu!sc8+?l&g}KtW+jNl4}|MQ`s`k z?H%3lEK0L3R=l}up`^B*FZV*EN=+QM9Tt$)uy}3xzQTJw2pQ@U?P1k z{>fNG&C{7n^#+AoGM*TF>tn3-oy3!vcxY#kS1y0La38z0Cxv3)Iz%Rz{>s3FdaDx0 z1#ZJpb9;r6T$)ETj!YSjVn0KW&m$n>b!qbrnJ%u@o9EOjOc z$`xhwJ2zCEe=34`)+H=8KEPhYyHBv5o9qrh(G@zWTu-{hHI#xW#%$0T)+O0)*jF=6 z&R*V!XTQN=>~Ga2(enz+s#@paeIdPBi=w6^Iy{g_P z$440J+i%fnkSRtLMPJSB(j3i8R0Tt*t0)SPa~RD)UYdX$+yYWric00Gu(y5u8%%* zn~kpH52*~Hi{1Tv70>sEWHb-$m&%8Y_jSbI1nRdilg71~bj@X<%J!y1IEf^`3MF8R zu?onX6EpZsT}R`akEoiN?wByq-K*iMzP)>DG-dBvF%=(CoIae#a?G#bV!)cj_vdK#l-p9n6BnA^S76+go|uaGe~Wq1E`W2?Q&%iLVywJX|C1yKbvkpc~v>V-Vm6L=1`U@Z5a7u?GVIi+J&%vYPmU)T1LEL|6x> znU@*8OB{&{Z`+O%J-0I8K06d~@*B~15xh#1iI<{PXy}157MY!MDOh`5T($hz ztdmA%`7=lV11(C30st3zuz~xLhkgS+p}-ZTG131mS}2KIN$25?19k8rDzz`sTne_$Be{^g6WLurcM zqlt6pP(lw|{VW#TO7Kn0U$XLiHHPtVGYwjBJn{@kB8(uF93@?)SZvKN>58#5>F&_5 zROHd-OUKkUJVY~sF8lF1SrAev&>=Eyzb~YBK>uW>YmbwE8-fu9{cTz>dgfNN(+&tN z(j)dgO}EvxuUX6@)KSekh0?)(7pqCV>hsH5PN5zxIoe}*2JYIHE^|@ZVoa!40O>3< z3CaJvLsa8P*%J`?;0w)G?%%+Wscig+X76PnRqGR?i+CUDJ9CYC3R2;&gL{3KPXf2J z0hTxxR(WQ5PD`rPOKOc0^up8mLFTG0P|6VQ?sYM91d`$WkFe(U==sRvt;=UgYBjI?4nK+4kA0V>zPmW_W@}?g4A<%F_XK4%pW{eM z^wHvW44@+g#33%4Q4^D!fyA7U zwWuz%v^qWpR)3s6Cy%4x+%zv^Wp??CDpS*FZ98!4LO`3~c%}_2eMa_{yEO^cq?%z? zwdugX2X5fYDFs~!^xzB2t#pkbS^m*6fNH(1ioW$0GG^%=*r$kNbyzE{Gh1hz!c?x~ z_0|w&9W)%C2SHO<+Yp}FpBo=1@`+RIfFD?N_Q=zmr+_Ei-{y@sOJG#t5VVbptWfr) zcK6CY3|xkRqajxVwaV=EXHm9{XfuFwuIRx5=UyZ- zvpEvk<3@mYX;i)%fY>^!rTV&gc#z&!?+Ez1^L@2?um~UF$12AfTid8vwPrHH8@<1i z#Ia&&6yP8lVUB<>JXDxw3NK|>_1r7o%US)16U6*(nEf?B1h4*Y*%cXm-Jq8{Qdc9) zuxag<>`-C0Vs@y?8g)e?-Ut}CGkd@+UpqEHUJaDO7NLy~Ewh65hc@E&{G?0kC)g)Y zQqE%R&@l8&Bd$g@#~xiA13*7y)XmS%Kmh+g0Khn>>Jd`40)+cI%m)qEJ0uDhAN#GO z1@;HIy04b4L4GZlDV2B)$*U?9<f zyh3H7TVEWxkF$?|0dq*$Tah>jrVm4d5I@h28PIi!3AoCiGO+idJXC z`ty@YMHoCp(aKS4@nOQ#sGsGdPu`+ z=!u+&V!limMH-b-cPSuWIqEo4$<-H(O-W1rRihG5=bG%p`J8;Y7bi%n!h@9zG6QFu zQ=e&s)cA2b`yhKg4A4?@UiTl+cdF0^S~NT-M)^Q^PQwUBb!cIg><`FK%!=@LM;wJ9 zP^RHtl8Fi;1%AW3QJ)Be&Mp#ifqy6)n}c4Bnd<+y<7k+4^H@ zra#wrc?$~8rQJeY!uYkW-y@+0cF%7Y;Iw>B4ndRL#d{i2`^mZQdfTg{kH;PWRb9g{V#gUo zGe47Hp!Sae)1x)o%es))wn6T&Ekm$*VM8*sbwyanRNYUm!&XQR>AU?dBp+Z9CZO8t zMmy|?Nvt$4`F}C&u_g@eQW4ySC}!!wn&6JRb#`)-b+@K$|3w!;m;BqL{W}>d?yz%5 zU+p4ARe{f#we=4DWne55Y+ z5Q@un08con`v@51Ic22ug<8YWF@@|Y-?V;9 zkS0;#iJ4x6X4)VL>`(eq5?vh>zIxuqaH&IHW|p-D>%FeKIS-7a--7Gyd6Jmy$}Hpk zb0waOx>E9OOHIL95cQK9?@)=$se`w%9?h*0BT%WEq(HJzriduW7KLo;g-`I zg1Hd>l&ht0kIroz?1|71TBt_NSonjQL?ZXZrQ0dR%4v--6&hu3d!|@t3<{;fDrhzf zqKysPX+j>w`qfRbp9`Y1k7}9r7Hl(t#zi;ptc1QW@N;p+=`rqNsU>`S49SrHt7FG< zz8DVRr=O`+_B>}F7k^s1)8-=&6Onr2D4;+xv2c6%4Hqf`HYRjE8~w1E-P8f>gr5Jr z?%K1{ojZKD1&?>Ir8=|3L#VX*2MFW8wW^0_cjCd{JF~`+zQGZAnC&8@yIvjGkUv{qzF79F{}ujABk}z98uC<0?iYiZlftd zO+hc*Ek@ank_oBD(TVFlvJHFC;F=wu>M&EeP;~x5J?AmPceptlls-EHuovwhq0)2v z(SvsKkAYuou)8yUL_CU@G2zxG02_UX0y~EXefAczHU0eBon+Dcgn*Ds>neE@-H-|xLfKTse{dQzw7ba6wUvfbga2>?SaNa#l< zMG@*gG?2KVozsf9=k}hhhRLrAR_Z`Y^K|;sz!p~Q$}`Ymdp!*`h}!CK@BX6Q)p6{U z-`@$6EFZy{bdDb}_1_I@H^zXD z?G#qs&(s$M^NX1s;cG+x)MdCmwihM%AksVK;%?z|r5yi#wAq*5nVGWX3+IFPHHn;g z2m+btVu!|wXBp7^@g>MGUKk59{m!Q=ZK;^&3XaYeNvN-BHJZ6%eB?vo6NWVBxR!DF z`Y&C83#QMhJPP*&QjL=Z($pw#R1mHe+qo+lz4~T+#QM*EHq1m5bci5q^gIqa&UJrY zXr6@EPrluq_>eC)Xom+wxA#-k=vq#HCod;~K&l#WV)xX?m~ER5Em79c*nQ&2hp+1_ zl`fMrp-+SYkIv9_8viABwf3UpEd4#&3LwqYwBI2kzAQa{3ysY z6~Bf#+r$iRQ%l#&2%z%MLiw>`4xhqFYwB1CL}{)ULkr~ZI*k^(4l*!?7=zYM;}DQj zhj!2Esa%JB2RMV9mw%A`{`z$P6{_J^UV7SUN?x*X&`PI)TbjbFd3cAlg6{JyxPK@+ zj$R?3vSwHt{xdEoXn_|6KE4U03bUmquJZz!qi-T@c~j1qU!3FKi5TU8uL(~V3R)MB zW)8j2Sl%&>1t~jr!|rI zo0-+1-%Mos?P4@@g%G(0%!3hEc~Xr^vuE+`4{7<95B9NnsW}4a4Jv~X^ zWY9o)N=D#JA8CGD%l|tIUV2!s!Kf7SE4m!BbU7h+MMX>Mk!zAE;^3j=P{S|j$t0Xr zXxCj8IcV2UGH4fWKF><_{c68X1Gs?@M9iU(Z3)9ZntO_ezYIz|rE`8~?Rj~nF0%seNrWQ^!SHUmB=PgU`Y(5=EeZO|b{;!(`r+oUP zw=ggpH9Mfo`G$XXj24?}_BZW%Ddq`4a?_%7wdf*1&z@Znf_S2>%7PXfof&1p}H(5k+TkPWIw(A+aU1nErY(Ve!Wf*2a# zGa5_4&E3kkmqao==rUpxnC7{Y_1?MCu=>NB+&%aC1%ghISh~=Qy>q`7cD?tjh49*! zn^|_iOPl7AD<;CS0T2<2$Dend>qJTfiPgM9_m_oyDPeau zVBz7?pOSZKtUbf$=Fo9~{y4V?OF%Y8p+gXZ5?qf_G)+}n7jh5VxgM~|kqr`eti_<~ zqnfGeRE5awL=Eg*pcM@*n_J4S>XEJq2aiPKHXlh48E)){gK9f-^i}lX*Tsu-%B7u} z&}Iyp1$eeO0Ip&M7(!W?(T40v>2V17wkeU?54U19_36qL2ofp{tw{k6{-$--1vNt) zS7nMTp~s%E38bHAF^VTFtvvgQ*7Mzd5LB5O5kHFJfD;0%zwo_a>e(!&dd5Yuz%o3^ zAx*JS`Ht^k;nh+K7Vq;@n7gym8HuXEWVo}fmFu5c#beCJ849?&N~AB9m*0cPySLo9SVSzzrEu5L^-Vd*Twz?f}g1H}vBV z8S}{G*^?&?)wpkOaRnN+SKu&!0N9QT>`nt|&}(|{iUN*+3dX2aSu}3%}0Z-8l$#3Hh@CmZ$$Bc5v&WeOek4N;oUS309JW$>Gmxpa7Fyp5HFjQ!hS z6Q^Wq1RcLt^n4!sM|8yMQy8i3RRm%b!lkS6l24R_&U{BE!UvuFcj8(Hi*I^mUkG1r zJn(GF*nC=XaBhdKcsh)?H{-RD=oGmv3DWBy$E!ee>+dl}{eT)em4)*jF;r7RlEe&* z`+h|PWHT}NH|WHiCSJpvR(D-xRs#s5mO3r;PA`TV6Frl3DuVk<{7$pV2t8Fztq;Dw zk&_|Id@1chz;-$e+xd0WHFm5WgbdyqfRQUc!1=qi^w4>rXAq&&T6}Ad1m^k5Nue`U z#F!-mE+g}A`9t@9kLy7_G3J;%j@MgnCmx8@73f{f;QcM4<`%f zm!)6v`Yd$)KjU2kgg}RAP#Vzsb>FczV50sO_Q6WUVH~m^B8yEw6-kz|#~T6=S?qX4 z>a8nDfUC~5Z(9Zk6Un7Oz1Y}UVUGh9<3^f<7N+y=Un1tRvb%fR1TX63ci0K5C34ge zki_`xYTPV9n3uCnS=D48plYf?H9j2Q+9Pia31r`Jxu;%Qdu%Jn??cBNd>d^V3LY#k zYku30hvfvPyhJX6QWp5Od zjT*rQP;hCiPwYR@8~@m&DctPo{6lzy^jW&_uxEpcRoNUUk^I$Z8(gZ1?SA z?U7+6`QM=yZNuhY781mCi$wRC^dFP*bWrW8*-et?I|x)N-pe`IeS6Y`C)dw01S{|q z6^{p2BEc2bBW#S30`gblb(_)9^CMKymRjEsh7H_6)hy`POR)KuMm4|ab7U(ZecO@@ z9H5sw{ZYS&Ws(a%neaYj-+!7|_rHVaBZxt&S~cN0R6>tSzyN~5DKftB)2k4+sWN0rn>;Dj@nmynvhD(MwQjU$DHog+o`%Z)NiL_ZC zyUPVpWR$`RvYgoEl(_06c=y?0BI%Jo&@JCj%VIp)7Ed!YlS-U@4(> zgKokj>wTyJOkb^)unrvDJBe8Xhtrjorm{o$br8=JRJONWAaJk$Fv;v{Rk6{D|Kde6 zO~_lVb(SLeeia1)q9B#oCLRO)lFW#nYvs_Uu`&c&w^d=Lv{#ot)&Q~$wZHbfre4e# z5{fJPE2wWRWq$IT2=w92MBKAMK*g7&)^`fENycUWO}Xqia!aGU#LzIZida>cr_?^} zqos%)iXI1stMN3SPTxF`AE++D{~WRM)4H`KUGt<`$C4!p6vIHjgQjK z3-QyY7Q-21tv12e#^e%VxC`E;dq9$w9#+Me4o7g; zdBO(FXQYh~zng(=n#WDM)#7AlP|(?Bw0VUS4DLmD;}{yY4HTLY1WciA4p{HMzc;_h%B7~ z1CQ#9q?gHP7jocaKu${Us$Okz0Q+UI=NO$V+Zn6^nhYu1=gr})Ld;P@oBp6LlgDI+ z$zNnnKhZK$iBcA1)dgDB40Lb0{DPT2i>QMsXsSeGEHG!zjEH+nNaj2)?BjAD47kj6 zV417f(-w?YKF;wwG651>%*mB}HE{_Du$!^Q5o~jps+A8yQ}ujZmvpBSuz9f^gh~OD zM}l20RrwlWijga3snf#RPfJ<*TK}L?S24VLB!|}C8FQ_+mheiQoyM%y9MhM9AN}Q% zA70b47bQJXb)RsP1YYpwb`$3rj(cY${^S+Lml8Q?eHGc@V#z^cK{~gvtRcx}Q`%1K z7!XWMRBua0?88z)>P?7;>I#-A{3g~)FeEQ!*e3#fw{+C6k&w{j)vEr!D?N z)9%a0css?67Ip<5ZjPvAI3MDl9S6*qsTeqHsgPDDUWuI@=+p-G?FJAc#&+U9 z@31vJJ^xTEcz?8vTv?40tiA@5#bl)z}!b=IY#Ig`}^&;{e|?Evve z{MD|LAO$YPP)^*kh$;HQl$ai^+}tt7Fe8 zd%lLr953TI)S+N6w(liyv`Gmqj>}jT=_F~l>Slo|sMUYEH};G2SG?gQ%&_O1Bjq?} z#pDc7p+hJ248(g#d6d+6g8Vi6dQ1|Lhq^jGl*^bLygwZz211U{6^S4==iRos6QoUf zs6Rxfs+-u!KLBmy{tMidri{`4bMXM+Pjisz-q!Q(kGHGJZUV%qFU8qzF@1e#Qv^6u z0*^O%#r}Yn4T~gwVa}``40W3ET29UEIusy6+DVc_+17|sDp%~78^;baHFc zzMu7`LHo(o*$-l!K>?PNQZLry!V@aYq7LecfL(C|ml@%vO2E);T+`_R$-l?yAc}u! zVsj%pPnZX1zcaM?SW*5(Y(P;x0)GT^6Oucy{rSFsTer-BdDXakKY=jk=RzD!@kYu&MHZdXU_cJwXGuc;o5~!o zn|I^LRNO+GT+$M+7n)2cABm3A!6v7N`3Ar+N9Jn<5>9N>7?k0X#k$gWDpAxm0HFvF zoR1O!MVkFf&qoWu16!v->3=gp#m2KgIpZzua$S>?Nmz!l+Lc#={ePH0*$Teelk}$0 zz~)A)z~g#nBl){wI0>g7=O%YO>Uxq6LdVD4Yi?xz&zF_2(n7RBV`8XZaSY2kV*CU=7VdjLvwnGHr#$p^02*4pNTQBv$P zLP5K%VfGZ+J>0g;>}!&$16M-1?hdR0$Ex3A?@Qtvna16Tweq{!qlRMJXlvOLCwjKO zv?3)9weIbZ`JhtWl<)-aB5GRR{7NbcOqK)l>2Hc%J+1ABIG>R>OwzMWUyCYlTA)I2 z*hU+(R{e!F-ytp&Ge|8QSkj!+7e3u_KGo3(WQVFxb@Jr}8sG)Wbe`yNxgko0jkdYO zS6~hPw%R9WP`3|oMtE~VXEoNIFm(H?YXsR4BKK|Aotdzfk0tWa-GhSZdNXBA9SUz$ zLn;KVnPx*r-UfYY} zU!(uJ&e1ufd~G|a;t%Qf=#R$6OuGj;1BnV9M7)>2WwiO&&ZuJZG$owqr|JR@+bqbn z0>4x-g|~w|0kXv+n65dQnip8qRVN(~p9x7diH)NI2L!yf_{V@9|B^jQ7lc@R)ZX?q z7jkhW7e1$bxk~<9(VA@39_HGDe-K0g!zM2{tO}7gGYCW(A^KRqw61kho>Y`on-dy! zJ_|5Oyl@|n+6|MP#>Rdw+OljC$ad^9{v&}0y9BQKp-1*gK7Pr( zE+RvQ5kt%+mYNUG21#h_D)S-&D33^6?`nIhxWC@*MGxaaiO=FDh}AL)dF;Bg4H05> zydL2>A3=ChLzDSLL=D_?isSd$iczz!dK8M!PnW^gP4}d)0eH`xo$h`v=_FII&`ko;3Q@7WT^zOM z$Hy^x_ddxVA5s&M2_pqlayD?;NXso)2GJmg^I{-owji?S&(H^GZ)=^5(W?ZS)XNae ztkg&@#ZdMjr&{X6F^H^Hw0K8jSnd5HZKF1e5%7Vuyqhm;Gl7=QI6@Mv2X*b_dk(68 z;DH&yng0tC0$Aky6hb!TKiW#2eY(pv|9#y$@~suF=dv7MNNfS%l(3L4Kd7LxQ@jdj ze3H<30F4?`gS1aWn?SNrTn)XvjhB9S18#r7r~*Q-weE+j5_^ViU!ilyBR_vkDG;L= zT))P$7&6C!^|*Z!ON~;&nGQqGaKj0x^oh!L;5-JF)$RTD3(pgOWB{xiqk#!%gs(=J z+I%D>6Vfd!_ap9@?!l$wu9eCnL2-dc6z{jrx|g-INp~giKPptgl5l zjP@JrHfW8=Z84kC;(v^wHkx229S(6XJn|?%$?4+IJHn49FjoI%yqie0>2Y&_-0QpB zZnO|5CpFKYQG!nIU-bFXdDZBk9nF@Y!#|J4-enGBa>XxNpKj3|&kO8Mp0wUGD6b6f zeN9Rn?6R04PwKcAyYdn8&n$>HqGS1LQgek^093yfN!m@*GGRs`81wBa+3H@p-**Of?pAJ^M<>T z!+HrUuH=;JMGm90X?u;gW}E-30KvpEiXIts!tpH?p5_u|tF|4|&5I?G)yMS1&W<;^ z7jwuA@*4ByPmGQ4!E)#J;|`I>c^2B-$ST*OR3fp9eEoU~U47T|(M_V^eyjeoph}Z5 zPcvW@H`BaLA18tQ4cL%1mW5G@x68~Jc~7hV8U{3|&QvyuBb~U}M6)Ni627wunJx5E<^+?AWMYt8+!}#wgvq3;msW_sM-m(REvuk~+uEsgGr0SC`#0VrCIsZCNjDJjX_&d{GT&5h4y~wv?cc z>Gr`TsKF4GhhJ%AgZU~9e;Mz>hdNn`o1@ahTD3;IdIn6HwKP%4YT?wQo))=R;{dflt)R}(r%x7;q*BT#CQN% z#LvvGM4-}tldUQE_ZYHX87M8UE6 zm!BGRsF#ZV$o!l`Uk-bS7>7*FBzG;ISr}qvwM|c%fmZJW4IL&rF`K+RJ50hx_p~RDOLSOdvzsp0u*OA|Ev!&$dg1fpV-n z15(RR{;Y}4&Zna*q~@KaW5a@vjQn{eH>hhcuEpdABZgNl4q?IYqM9>{A%9H)LcE{ z2$ui^zX&d#Xe|d@1Lt4JdYSzXDgM$x8o@7Ej4@E@rw8?sxO9DJq!!Rxoqj zQb?a&!~94sA*m+BW{KIIE?+4dc9O}pB|%eeVNBl~SwD+Pe6Asp{%Ta})9xKeAI_!6 zm)yO;u%iO9gsnRdf^bwI3haS{;zU=1O*O|hyM2mfu=;dN?vHqZ&2L<#{jxsS^(>dA zbm##TkN{=)hi3j%0=3Z-=9~Cgt}Pmuvv|EUy({&mtBhTlZhbPFS&aQkBF$WkTA6_C zY)c@@e}j|(M83=mAAbk|WDSV<<$<=~jiN;EtrhT(b3eLw&t*_TLMAC_-_;JNgbU0D zilH~si0=l|r`$`W9nUm4)X6Ym=6;F`=k2tV%F|~R&rG3mU{8kCDX1{f=0|39AIx)~8 zzM!TU+;`)pBSfi&k;W%pBQ1zA*+IYCDf&l3*BvPQJZKj;mrUr-(2upp=00`YN zr^r;%v1CR43z!ovb<~KOVzQ;x3dZ@=knhiCzwn|w_NicB^l~MUpqd=P__4Utqp!MK zX%7ED`l@TKE07hVN?uKc^H$fbJE<%6Gd>v9EyP){Z3-2tUwTQ1AV`#_B}xcUNWQ_t z>i7Zy#Ot3dyGKM=8y9tuH7z^_tq37wdZ~kdy1Jkf-!%Pb?i=IAVLpo7h=52YrLZ7z zGs-3mocLz2{g;bc`QLUvZIcQM+M(d&w#EhXjL%RSA4z?ba$E4$#=Qsw&peyaK6KUh z7De)Eq_gJtnAu`f?dwiCV|7^&?9*CQ?Iz~$4Qo3}lSl1gCrmEZ+PmG@3a7=iU)erU z{meGfAPtpHJ^Q%bMq@E@SD!>5V`-N-a>~VVvh^4uBt2ulpLXz{tZDutjy&y^0P5~Y zd-ZPMoACg(7H&U(RXcKSjQS2E)dc8#4Vst5U6Uh90l5u25<-lz&=()L(XXd8-=-7& z0A44a7IP^2`d{S=y`=#z({Vs2kqZG67ST~QL&)1HwAYDO$`%u)Nj=Gu*J>L zDb0AFd-F%CY({;NWUa~KKF=qaOU!AKBvs>Va6NT?D5}>j{$aBb(3 z6t0^Gd4+Z`j9)5MHPltN>&b887Bc%agX<6x5LPsA>SJl(V&J0W5PQv{GX@4qyAcfo ziLdm)IeBn?ku!dox;UiS&72iU@y^h@;;9jy@`)3V6rGdh~E=i#HyM4oz(blbee`-kkZ!Qhh88v$vd|k^6;GsEOd>2Asouf4 zYqlge{Llh7#>sxK+82pu30_sJ|CT9R_|@kTvdnP@S>)sFh;HJDmY+782a z{uwJvLN-z&Emw;~aR?V!*&lbIFik|fWVG}Bgb+J}`UDhnP3#DrNG(pY)~GGI%{uek zt_-oY?AjRha290+$djaU`EtdR`+@kB@?;&y-+~)A`T?NXT1Y)`+sR$oZ-;~nl{*KX zFCZsM4SMwPNQO)y7`(=Yk+=^j+&saqh`__F?O zIaW4X`+-EnuswRuxRoyDL8-imjSI4SN77}VzREF3{lQ1aeN!r5C@Y?G@*23He<<)4 z;c>dv#Qdgas<}a#RSRD6hyy!RoN+=7Juzjr5FixReb>y~5divfYf zvwGebCpt9_&&bH$e^PDSY{@M-ZKX{;0#em~a>5!VGZ0xBp&oivfJfghI`QbfOzZ?} ztZ~IC&EWZ|R`%8!7xV(P(i}jZxnAi!m{00`xvYSU3;peI!knG%2-!PV%_%x<=qdBg z$MxSW_Jc?#@WUszWCs~ia5fj->1x|$(qx$kCD2*++Y(M9H-|5y8PG%X=l)l&?4Q8p zBEoiz%>nk9Li@ou8tTuxJdaj*CBOx|Y)&n*lR!(NcM;dd=U%Gvf%A;hyuOS}u`*xjq+Bm{aN5vPZ?9d3XZ(;E3vMd*0E+>Qfs2LmK^^1p~_$ z@MCavRs^?8U67}ZD0C0(+Qb}7Q~P6J2i*t8r28j^^>N)ZTo|TpMxUDQ_@x-n z#>OUG2k!u;5h1A+l*={7k~u(emFk!#QE|tSwf!+u$9uV-Si^b5v{y~iZ`E(W^vpbj z&H;kBY9ObvI#=Xvaj65W*G7MvO4s0ir4VcR>tHA5SYxL6p7!*Iy$$I@rX0BHrT?p6 zC1*P3TqY;g*<%TPc8{q}+|%4^TZKg+jxBshhm8wn(oOYJq(4XfJ&acV#7xic=mov^ zp}mBHtQ>>1mO*BE=hXeY2tWQmPU_qxHxi;x`IqcVVf5NMqzHzi4O5sQ<2Tlucw;rS zoQdD<&QI^!Y(@cgwrd5X5C1rv8(|%T#PHp@(_IRfMqYjvpqX0a~)g}W{m^oN+ zXM9c#<7Q zcr-xv-_iK+R?TgbzxG<`UYXyW z*+$k8W18o7S6*p3twc(KvCGG8`L@gBJwmk%Px=3rg|FW@!QIZ9(XYBvRD7jtq=?ui znJ)Y4JywOZi$O}?j17TryWmPNkS#Tg>?a(yJCd+}^^{j<&#CVM*@@v3g6cQ1Cv)B$Iockm%52 z&`tNw*2WM0bdv(=x-WBGT{AJqg@^R+I0G+?EDa2KKno3Fqpm(Tw!_(T5FQK(DF>`I ze_&6{4||h#VVBhU@v1N7Kcx#r<})8X_SRW2Ka7JPH5US}@(Ua`i+92V- zM{$_FQ1K-s81od-CC~zz1bf?lknftjfOMsZvwA|YLsvHlsyrz_Ci;*m(hBl}`{kI( zLW5a=9`QT=-nk5KM`Nr1EA~Yf;Ntg;#0AAzn!-qbsvSoFtCvU$Q1TR zmds99&2@v3&4ZVU^f1zE*!ImT$wMYIBEllAe#}6s&3kqZ@s3*9m- z9KSk+M-t!4MZgigdE{WMnid(a_VUMt6mvsyj~?14oy2rPR^SK zIgbUrQt#lF>Aa;8aTDUUy$`-G&iknUoDQ_D&-XP{^IVa0#NL(=18Tsv7`~sus8Eph zI*Oe)V!auO$_1GX`M92q7iA}qH00aEwueKit3RuR&&1_$dn4@>1aaz(=MH05Gg~(T z*mlV8A{7NMg&tv;$bba$#kLKpHI{bCU#L#HBE51RX99E@gV_H=i&1t>J6BCQChw*y z#R-PY_xLnn@#ufS+orxcbLzsEaK#0yNdUu*wjZkX#f34?1hrqTEbx5rk&{@yExElS zOa~HEc-uABt{H&SrfiM?%{uKu=)=qcLCYa>T8W0qz7R!Et9wnX?l<($C$f-En!hkT zdh9q%;Ms?S|BIASVMa7qr3fFcfYD3!bT!+lNV?pVZi_Ux3Mch)d3{N_mX|bA{2AD3 zw=Bmcj5apAe)Xe@)Eixf%9DIhP0CiF_OO8llN5YSZ1OV~o@D*qzBxB^p9v4^F0#xtATrjwXEO|(Nd}-+uIoK7 zo#kLYm7jc%Mj++44yx_3B75W5AzF-*h&E)aM(N`Qmy1x2z+0B!Kw0A2-QmekijALs zc6`k~!wJa_{Bgygr^;%>Lw`=(R{&;a57>_&T8nyuW_+emU{6fL7ytfNf zK&^Ib(%?@^!9&JsADM;hS=x~;I3?$1?H?r2zHMBHIiuf_(HFmaHUR@EVT^ zK%3bb4{QJVWSQQCN=PBRq5N`B{yV$|`>j^is$ey49`R=|Sr}Cot+axzx^~Drf9Bu5 z7EP>06YNBV0qo&YkNRv&b^;a}X<0SnrhA|qH^+Ea{9TDD8?lURFuh57z-SL(IIbVl z%WAq;4)21K#Gvmc7e$IVZFDGkcJ4(?mMXTJ$|N0A+-w}i4ZI#i_Xlz6yL&n>li^__ z8_d(jECG9Lw+XEGp-0{*|72?m%&}0(5k@hVR6pcj8TP^&EnLeY$l zgsI{ts$Bg2&Wv~vt&?IJc)BEjGqm(SBNJK-PLgNP59vw%@#^-)I@)op#+I9nAn zGkL|1CrM~ND$1~6p=XqIJG=sZsl%#D$t;A$1<8OkXyKE!#rJSDaAtR=EBv*laHMbg z4#y>`rMA}+vReaGD*I?x%RXlD0QG96&ApEl#$R+YdguT$vPVJTBtxZgo z@zBRg&i)$2>oIE~U_^MlBTHJrDBA}Ve2WprG9qP>NcJCcQ4i)SzJBdL|1-xEy7^>7 z5-};50iN;L>bE0X5Z?A9I~=2_r(YwBes$<`#$?_I?_V!MgQ}%JmR^dI;h_=AhkP|W^45fa^Br6ZNOj& zIR(2ld235T^;7v2ZjOIiz{0FW7=MVB!x(4Mep42m=5Z#$;_xFZ=UOKoAy&xU8d;?T z|K5d#60ql0OmmI0H`lpBDcfit-w|W##r9cGscG8b0iDwtn`#e0ec~Ut{f`91M1Fq3 zYcaq8q*!%7uxa}%`y+x<#yu6vWLvcZ2(B%S9wJe@ue1KsXDEdy05dUFmcasf(xJ9* z#F9A5J%bK|)-rY2*a%m(3tg;jO{zS}VA9Rx$Y9?VDI-8bJybG2=nX+S8ypJU>pA1% z;4pAXfzyBjp4;;m)meess`X7Wv&uoAlLY9yCk31SVSm)|;JSAgq6_ zdjyUjf2@VWrI@n6C>|A>7?MpE{z4O*>w#|?n(_hTf(Qqj-KwhOpDXRL$QY!kn@UpU z-p>x9qUBmdp6i6JK9`dmYc5@0t(yu2y#4LE*uk(E{mOhKb)fXe&Du|+%^RY|9Z`HlSiv_j@ z;7||vBS*#HxA8u6B&)A_17(K(k1Hmb5wrUPTqbDvLtRe*N8<`q(s(Z1q|oL$RBpUy zo8ZB-t8kSaO@QnaMzJhUGKb1hgM}q*_#!|glG&*STOY|v{=rUYi@i?}^oE1G3!x9& zqI+C#=Xyo9j=v$J6W&|5uru)QO_LCaD^3)X#AO=xL7)4)Zai);CT6BipU-ILNOz#j ziMxJ_P|u`9))tB{@%M`A7&`d)D|+h|M>5wjUpxDNT|C{LH8u8wAA{6u9EL3(+2QaE7G{1Zxzz+Y5sQg>E+(h zH2B=9H+uc~36*&pPr5CIkeLbfb&lWoWgqR?;rauA*(G6`4T_81*bq=S;BpWcP+#vf zsS)<*9*NBpF#k*DJcGJ*i;+I zH+_kn`|^T0mo+|o7!a#*T6;aQC&S;JD1)jC8UC3G+N8Ui8T@EjCewTFw6*793MBpE zLf29D>Q_zN?A!lkv~~6DAODh~K2jqo7Sdp~pyyB5v;n6mv7K?w;kF~WIiX*iGF z;5;K>3E8@O*=m^*)vOt9s?MS}l`s05!Kd!QG~)Gd>}Xi)Jbv9ETTkO64x@;@5Mlg$ z2>tNnD#FRAp@7_*HDUBY><+3UzW&|R0QOBSq@a5a9Ui!2@b{bawwJKA;7hq8@2OvL5dk#=)0vpJ-Q3*w?r3#hLz^S^pq)Za&ccaqoP9gD=0 z%+f&Yu_Vs}kL@94f^m00O24f2h`o71nf{6fE)+UUqOq~~D^v-tL+$p=#_z5BO z?7vxK>-6{u5*DChUDs;t7)-G`omF0LuUFR$XvYWmUlXuL%G~qih@W3ly`hpv8CE%T z4k|c#oum>iVk*N8ApkDE3p(cu0a>4T{wlS6jo6j(JYkmGm=fJ_6IEkJcmuQfc-T ztuV(NCY&z=!oslFgL8}FRiz^^V7)Za6ACN-o##>XH_~^8wpQT9zBAhhU$V`pk%Fi%7--rTR=PC?20MP ztaL`lW|hFQK-6spH+<%SKqp^I_Pz{QYO9^23hqh<-POV65LJm98Knvu&uIYa82<>* z7{+qnyT!2@0}D|pJvV(7v6S-nU-V`T@LjKXz4gg}BN+*h^xAIc(#W~2W9cam?vP+# zD`EAd^m`NY=_X}ZwlyI}5y;Ap1id}_z{AAcdc2I6dS<(LjWx6E$@V?fC{*~TRt*>%4?oWbSegB6MRbb%c5ztFB z@%=Kh&(os+EZ68v}3 zX{4WZt&N)#7120QdI7ocWf{FkdLd6m=dU$<{r)mp8VPr$P!aOAoKALgb36Tn9DpK;a~n*O;!^a6B!Uf?{L1m;t8 zI-_N`{S6*8WBnUEx}Gg$UmA{}P)h`vnIW#8pZPgGcF257wmfy;JYgM1&KHScA8hBm zG(bIQi&`#kJ>RXe9VfxX(-*L>xgt8!L&y>{7g*LqUK~Eu{qRe@z%Birx}j^FFg9I! z?m0Z*QFO4Ov55x@2l^LXk*nU1808wG+9@5!ZC3>3C-$BDZU{^R4X6JBZ$y}K6}?3^ zHWRM8_NArP1>fcU*um<02G54j!HLNOvA=)Q)b9)+ynv6e^3o?IhDVdWo-~aGz9qNg z?)&$&*f0OKh1}i{TJL)m8JGk6jXnwn0R$ild*;*B81Hzgt%>(%ukYX#nSenrcOVT8 zbF?~Vb+XIVJJ!T%(ImM5VkB>@%{u;_pw!J})--2ld;tGH0Kl{ec9OgC^s#PO7X1Wm zuz3XqER~{yMk9AIlhI)=QX4Vn`hd}Nr{k6t;GxqC6+*k+%|$OWVocawJ-_g<*O_~! zZz@O6<05m0=ye~1YX`dQY)0pIt|WeTnr0*En^S|P6(kygghN{)cjHPqtLJm3*5cfa zUhsxM+2wV8T!Qyta$ff~S^*`b6rLJ8fh^HNp zy%rfk5VX@@`&qT31BHS2=RTBVEE+%OD_hpwB^pTEFAQlaO1W}qgHS{-0sFjyg~A_{ zJmz0cYHDMB)Nr03!B3NhO~VL&*szi28!x&>Ab7#t&&tUMECzo;?GbUvQ}MnuywhKQ z(@S2($VjP6p7f{PeiWskVvh}#vSLFr;m zh=K9W0ZVK`FJO9Bgkw||YQF5Fqio$kM+Es%8|AIhK6Qy+H|eby+8AO#2PX(ttZS`H z1=&gE4PbroHZsd=4I?xtP!pz3ASv<^RyN$^x@;EV6hX!wdt{Uj#TerEnxjCcwls0q3K%%GK2BzOu8=0==^E8jk=AzKKOvO#>RcNIn#J{44z`d7Kn4j)?! z!t)tbdBwDh6nYXI!XC`v?+slb#GAENhC7U`I&&$A)(G&YX1RoIOip6uvhEkyd+w?b z(YIL~_fbH~_;7ygc6ractf4VOWuXcv8o#ozmWT3y(*LkvOzb<^2fL@vA#dNG+Ad8X+MxQsWkLYU4k^8I)aKbAFp)xU<&}6MvlyAnha7|BG(l7cCFD;ra-N^r) z17ELfDcLFbvS#tY!fB<`>A_0}@A{|=q`gJ?<5|tZ;8teq&DjxY<8g<-sde|pQmX)o zp&eUM=9u+Avp#aMU^q|tq*ju{uD#RswZCH!Az7y16Q#OmTm`Aq>=j>hdgfEUpvwAx zti(R;>G55(iCyIwf{nH^levYuR-B*xJxo5HwtN?c^*f?rRs(c&x{jf| z*jv)ntco;x_aPwM}H5uC&Up><(Ys?%Kb*=?l!RTBqM)m8S z*L*KH!eNqP=gMu@w<@R)m=oOW6V$cv+nxm$=E0@fjfacDtFXG8pYmemT1XdQakTtV4zc6vxWJIzIzaRyk zyH~C%=@H;@0$_+*lt6imyFk1^vZw-w>Gigk9zT)^5^XQ(LnL@|ZCL6>nb0SDDHDma z5eL=5G+C9?md)lA)9+=su8EznEiD|NtweqeLW|j*c8$LyT$$aJrkz;=wNOriuk)Sw zW`h+#s|^M+48tC!+Q#gwl&7{NBBC|N^PcSdkews&X2;-Xvf4Dtc`B`4?zLFJ-4X3Y zSaGD=k8jfPMJl{BjS@m0r&g7bv{DM4fM+{ke^sm#^z3h^YxxIHDH6$w^4sPh{|z@U zuNT6~c08?yN6W*_ebJGNfwx?Df$41UBGkr4--gP>2jY{O`DQ5J%9KK2xTxJXW4^=# zW#;%?g+_LM#EpEsH;hp*5&F76-zBWF`;oXyCr^lv(a#M(Th%~cnU54hD3t#}ysUj& zDj^v*nFlS#pf20;UM#)!)pckCa65NR?#dcxNaHp!)wG={4ZgyQx}u(i|4rMX{(4sJ z+wFw|rV-$2d{J&5!H&@H372*#K0k>;@M$ywfDN>FY^Ff+mpYuw2=7WZ+a~k={F~DZ zBw!2Qi~{l+t~R`=SnA#N(G}hJT+gmuKhv3(G`7V;%sDV65+Gxm;W|l+srC+i?+%Ej zf)Ai`bZjwPpmX;vETCwD$WYjke+p5zlHq79W;=TxQx^syDj5W4m`eWr>n6nZ;VK+F zIE!z|n=S&@DG>zdsUj?CIZy>U{kBr=<5tC_G$qmp?MKXOLjxmW8A8ot)>nD1-#)yG zx}m<4>>q7@5nm;RoN#%@7pnD}o{_ZBr<{RH?w zfcni`Cn_O0@9)jqo>`3B#_0@=Lp)F_riDx5e|=E58yH>8;p&80Kz;rh+L)BV-m|jR z-xTbS81(DYB(337Qpb+l=j&&-r>DE^LdZ_-kBrH~$%jKQl3*xx#2y3s4$cNo{F{b! zfYsQZnWr43Sj~tl=HwS(^=lWeV1IX`6sJ=_sQmQ@_bpr3YU7oB_3($3CgdI)=2gP# z*t9b?oQdsJwGtZ5d^Ic1zy$p;Qtlex_Smv==Z?)p6BwXWf?6qA&K*=vp0Lc5frWuQ z=vyS2qRJ66dK?`8C>mZDlFy^g!uaN-PAO-pZb7J>S9~Q$wN5P}0){uHRhqSW*GF-M zFc@)sM?S5*nPb2|;SeitWNX0Gj!1*$isPtWZ<-BwEmc9uTndVHUcwgX7*u|$mm~p+ z!}3eZh0UFBYa{yZJT1eSfVFm0lXbE%0t4+)Ge)YYio#uU=NR*8?pxOM4HB4@o21~> z0GTd%U2DF;QLJ2-1yqb;b4u7+fGSw|xEd3mXy3Xe9t>^xk4Dj({8l)JPOn!~vXxW8 zvG3r=vWEYMKR-QHs+t!Rj^c@P-f-+U>ftdvfI?&drwa?__Ha4JbEn@A*c-jIO#=XJ zDe9%mPaXY?#`qD1n`02Rf4g|7a~`}amvm5-(Igt*?AU-WgbJC@MQn7mnMbY^uNv2N zS@H1@MQf^(ubnQks_(IOz|^Hqkh)#^-O+T`Gr+g&{UkY`56?&`hGiBw!OchEGcCzv z)X+W{-^r~Ig&8l?AZi+5hwZ`Ei{fasgn%okda2lmS7Z=c^>I!YsTZASM%?v(N4 z7i%Sxrk!2^HF;$Le}8EIz-E_WhZtZE+(P>zWzWLC-L6aDO;AB6DI|y3cFh3s z>9}IBRq>UO7h_TpFqU%fFnJvNRKccXK2!LE1S3=Jy%U}>Pull6`;$L}k<2PmPlG*l z)cEs@Gw2Y4`L(!+lIz69k7OLYirclX2m0WU{7IOwP-^V1PA3qKj9wGq{Lno~seqA{ z_m6NbB)H^x{Q&AfBV57+!G`lN#djjh5>7)l8ho2 zC%S#rZvn2Q#eDiLGNaTz{P;t+v3aiF-U3YKfQUug5(9b5Lz-k?mdSM(r&LZR{InvA zjSQyK=ag{&B;7;KflcQDRv)-r?%X}(r4kL|4g=f%B&&NdX^D2KSbfyLmfVZ`Oq8xR zcMB9afFp^&&CAwS^C~j&!{o1xt>eYb5(cW`_;?AWmKnQ4GB1**yd7$|1_b z5t0}`@9xc17%7%=dt#mM#G!?;sV%tX9XMJUI-1SLNv-EXW005|B_NZ%#!iK~A&u0b ztI|p|m1K`h4xuWVB;+OB4c}Cra|rWkHnX87A0U-ZVb+8^aZa8DsFex77U0UKwHPw; zm+)d3!=lRx3WVfpw$GYVY=N5OO?btr>icJ574g~@)C;RE_%?A3&T^go54<*MDaWD# zGfpm%o=)nNbH}V~Q8P@;8?A=zmJ-*-(iUihbF=VWB1EXTJVOMS3vu*vqD|gYY3Okp z;7h>aN1rb~w|YNeP`BS4!^oG~h;GW0w(~}0&AddC6$V*5k zoyhow$n5ALfX3h1ido{@J=8&LRX6MuN=?f-xJkiL#YxriVZN5qGvJ1W$sR9OL_*+h z+rjy?4SRz5DAELYIiWupNU=DyAVYHlObm~yn(s=HEQW%J^`?BZpzk@xV;H*FrXbEz zpBd%k@{a!3kB!bKRm!v-;fsIp)<95I9&vUZDe?el?+C0o+uu$!%ClYh+!mT#I zP}4bfKqgVWjK8p7oN2MR*=~ou8EZL194=77eY#I-x>qYm1PXk&gWbA@KLZWMjb3avcL4-9WAGi?6eM zslFeXJY@c}hAb8{ll%qb0yHp{Jf);jW*T+SUDS{`1pa#w-5f~}Bt>UIrSN34z_PbI zgrC@%IfQz{)V;kQ64p??dv%b;+{l72_?@P1ZN6mV#+pfM3f=W)e~a_=Or}I*-VPG2 z)!GFF9lAuD=ifR1QGg!8w*XeTp#I|_V+w&nj}Ire)`0l|0i)R@ey{86hO{eAmo34T zDSU?vZdk%eRULF9N9#Hl-m;jo5`RbW$$rSr;iV{L$P_OpgqRG0f5gU|{2IhNhzwFd z5^XOvguCyKM%oyJ+wLf9DZDwMC~?7V`&f^>XYNNwf$t&qnwLP*i8`K2;M{b|sBD_e^)}eW3PJ|`%seokc%3a?Et?r``3jU00HpTe6;_KhP z&bbQU7b`XL!7tkkwy3EU(s_NoK?d={+HEKh;~zOvD)oSJb^6t>Ticr2$d1QTI{SnG1Ti<>(dEj_h@iio&WDTTLl7NEZ==XiT6>+<+&)wBH8)61serh={YykXW+m z%^<++xl@mSq=UyU*4$rV6320C-9VTHiL1I;>ZT4vWDAmNbzuFM{_G1uf@eq=0I36m z>nUzsKy@i*eYu_hsZ*`0pL3oF0`!O0BzU5Y8|=NwC_5ZJ#v1|)n_Vsewi#`xpqRr-{sR4&s-9 zER7LMK!i1_2Z87>&$C6mXqH0k30gZQBHsL4X+B)Y&^l z2;)oZ!RqQAu`R;7aZI#jOGwbP@FMOzkAQVO$1`Of9rO~@^S}qI#g+s3yUN5)D9O`U z6uuv1usw?RPneScs=BoNX=Xa}%o~EsC(MNdWnYgcpj!2%=%JOAavTP7knK#oHx%#C zQrR*>qlR$mU>MO+AMd}m+!mh3WI%~uah(K}c-xZ!#3 z%T@>UWLANM2MC8S#PLKerNaVGHEDWJNz^PYC42loEsde^d zEAy5(c{mAufGo()D|zujF~=kti$p_stE~Ox5}1?2-ma{2OK~^WDjM!AEYh)}L-n`# zvaSgJsI$SIhe!ttO5_z^)S-y1 zMilT$P5JY%D6?oIlr4HY+JFPNi`ZyJXY}Cx({u!i4cnb<9F4#Dj_!d zDL?f1NtBkr7KP^a%;UBThTo?XE2S}gUvNl{g2+eLjCpb__hUfvlt|f(#rIGhD2XVd zc4Q#;__QouKXD!2Ld$9{MSEz`Z2M@h=J%)gqfs(9ZYzie*cL~%Y%MkLAU`K5A$3?X@tGp>+p0Kw3AHYB+R z2NjNac}w5%97kv{BiH2%m1kfn$MM-8ILj8Ic$O;X8ftIV`5zmvLbe|OlnaD_w1A-& zv%uHSVy15zw@(EOaYwuIm5%!%yY7U(2%OLbDVeJe(im>tTjFK?wLNj|{|eXlgma(g zI`HADv)3qwU=-(Bt?D|KgZs{oil|R|V1#&YN^3mxKI`{$I2eQh54t|6w zq{|s~WQcKQQk01hYI#E7m+yaO4HbP$cy0z5lpSEV z=vA>acCE^4wY}NEGl|QiL-spasWlznFQ3W9JW`v;!79Ku92@7ku;SsIrxx8^gBfhP z6ek=#$G_&4i|q&wq4}J_iHlun)D$G+6@GZ(xxq;F3#mM*QqBWRS+x<%+y*EGIS=Hd z(DRlmWgiM6=2kQYvEMu(%ra63Letw&CG)sWjx66p0A`bm#sTiQCF!Y6)s{l|(-EOX}1nK&MMj^Qa{vnL|obItZm_9*u02v}zd{?kkQ z`W_iJE^oQf&D?3f2X1cvm2Sp`Uie~%Ky**8B}ODWiGp;8Ql2#!!Urbhu+oI$QWp3qU|fkCSI zp^N3>^v>m$)tu^&($^XLvCK*y>Uu@@95+30-_WY+5<#X2Ak{I8L7Ng-Z(zg^WBd_z z(`G3$JQcw@Yd~U0U7jezTy?|A(S%HGdwF}xTBEO97t3q(N-6Hhl@csBRSvUAu2k)- z(sPq0WYnBTR2e*e@Vhhe`Y96g#NWqD9G=NV@&#{AuozI!=se<0|2Vz}r{yYnVHO{O zd5%S)(t$nT6y=600cTvK{|wJfD;GWOE78x&`m)EE*~Pq`P$;>6M>L`B;wfoaiI3VD zO>*15H~CU%jppNqHEL+;OOfx9ZAbbNR>ic`Cd@H1_|&s=a3FK|s;Y$$oa0iW?) zH%twP$%EhhkK}tKI=LO3#4yCns~!o+VA*U1l=t=nnqp!KyrYRc%J31yrv%wck)DWX z8p-v>j~-AV7UJTiqA4Jv?<3Fs5*LoBJK})rABQgJyhW_AbX~}6LUMa`|6_;6>VSx= zS>dAmk4V668<=8=>zTjE9vD@5R%$nv>{#!subbbZDxgb zuHE~vZ&SCj3#Sy!{EQF~b7>@M3}D97Ik6P`SGuctX6H2fS)o5|cln`EI( zPm`Q9vDUNz?B;d&sivuurtlqA%;2i_L=NDbceR}zG3)5DN}XT>!Wp8K5UmrQOX^N6 zqpqYhj`!tX(ww+*>gGU&^|MSa1}DjcrHbP$ZsZFWQ7sA77LWz-(__&1M@96@BEEMG zTQIz*K*ywv!^*Ehky(okEpD&(_+Y}vvFJ@sE_exRsVN*(HRJsa#7&a2Nn5Q-=*qx5 zIo#IFDQYIPvZNLWzQZ`KOKT+cmyC^;DXJWY?3I3oFfsNdrV>OC$PQ`VT-g!aG|7r9 z4oZ-xxYmx23ftTRJl;5cnPARY3Y6~GMLI1>8wg~A2q)3$33+o0OOaIUA4z-@f2DyS z<6wJ$?%<2>q#Sr}EHpuj`Vk^!t4UJF)KlLX*1h1Q0%&%U;7u7$V_r&(t|Gp;i%qgk zNq2wvq%-Z$U++5{J^^YK^Ac~RI^?jwnwJ4bWORCXuZ}|9Mn!z4b6>Kxlk8`2p>%&epg0^7t;eD<_lHjxKGl58g_lX;X9Zt0MhoDqeuiqtvOWx; z@2T$BYy=MCS!XZv@MH1)x58iPDdjM~gj;aB6)=*`4G>3hUo+PYnsG^ZE?8ljJ+h-U zLoYeAeJeb(X7AZrVyZ;1)3D_`Q;dA)k zOcq1Z_S;S8E&4@x!WXOY?@?5AvNfjy;Ic<8|8VFO8Gh4IfQdM_Mq!vO{8#zK)1gn% z2g(qC8znqjYcs&-{wuFeQa;KkxY#?Hk40CKQH1h`s0i-*nbTj=x#0*n4AKP!X?f__ zrLJf~oFH~fRA;z{N8~5F&7+E7-)!USr!#Yt)7yq54W@BjXFN59W88UN+O;m1Mi*qG zq}Oz{rx;*5Pw<@+mx{5?totQh_cN|GPK~jZA>;i^_p-da+9hZwNq6; zN8 zRW$9;Q$mwwkA<{xjmSU-DMW>`l_My;K?=yWOdFM_1Fw=&xwgXUqdG8xrHHbYjLgMf z4t_97{ZvD4jgvu4ukHIDCS_L`T5o+{GVe9KaOSDMFKWe!@EBTGUR+LX*tFTkO(f~C zPj{0#7-~WObM_J~>BsCrJA>^Fd%)vf6XoI6PSN(DdXeQQ&i!R4fze$LcqabPR7%3N*~i zI-K_10mpT@KRk8!)ZXI|qS$>PvHU{gY#)xyu2jM3vf6v6p@Y5jo*%N@ zA&0uzFjMRHsB~(s+}bKfSAEkA(i-K0T%gFuv${9)$;u^XZCke;3JOOtS;+wzIkFDB-0*T+z%T&qDot!&WKwDFb&$sm{Y>vfor7-qRNNpUy+|0 zQe}E4gLEUC_2x*dDU(d+F9Oy+WwiW_-{IWQ8<+y0@dE07L&+W#Jw1Dpi2VGV6dL<8 z`29`!F}X{`f`gPgJCQaQ?Ue31#kUz{u@i?Ko8Lhu?thpq5g=g0ZCSnb?0em(|EOtJ z&!w`l8y}CU9LXS^z(!6Py96(!Cq?c;kEJ&VTYOMf!v(0m4G`h|ce#HlRhcaHMBNyU z%*jg#W9tUNDlFXc7pPx8fteEiVhZAzw`~Uc6QUApQIo+Jgbv$G@;{5GC@^2MflEV) zw)QbrlWWmM3egqtu^2cmtL3TukX-`cJF%tEtg2t_6!F3%$aw(TuMHJW#qygQ?bwyA z`F%1PsIl+s2+N1|Gh>(dZ8NVg?<1jdD+?ibx~?g+;)e3@c64s+s6ZA2z54;TQs)cL zfTz9!JK5)S5&`j_F1y;3t1DSrKb2^(6uuTIU%g}})ZOLUlZZ``P%`B&&JYdb6>^{M z>%EtXo^i5~BPJJ0fJ7ST#EZT)E&FmOHy*GeCk3|#H#f^4Eyn2|5qR|M3?#RH#0txo z|*j%Udf+3a8M1ld?hbf>`DxR+P@~Li%wje6T z=ROrJeG5GOq$Jh&?f)rm1+lKoh8(!)neM_bpkpbcG z+#@XJPF7PIQS)Z5%F6< z0W&u2Bei^wH|q0iH>L+95!*2?1b;7qGC|u=Y^EMD&%VHNOp?6br+o72EYo z)H`a*0?@-+Bd@NYA@57a#%OI&mo7gU@&9PQe+9r!Y_|s)sKXc-`$gN7lF^6y0P6?` zy(ZCPatk_{uPhTHjR`RW0~dqG{123rBM;a<3u{riVf1S|2whYC1MQ$ytD9Zu&Vj)x zE>G7BjxB?<%{Rfjc)TkBuQif51N0O!0AjwV4|Ok!1WO*y2v1o$QUB`M73t@c-&1`Z zKZ8yY_tP#i8QEM;UDLmeIH+IUS}e&GFh{AIKIQ^*COCF2f$J~K`Ic&r6By#F!#z!CgrS>3~z`(!o7 zWr--`8G45W-T@|RlsbPO=ybD{0@VblY*N+Ez5gM~V4CaxsSjO7iU~**xJutF!L=LA zggr$3GtC104S6zpprkm-X$bhb5e4+Q8zpir09GnkL3> z*mA~D^`A-jwP=pQb;tPv%#{Pb(Knet3TZ|8p|_|N)F`{}ti;)SUN#efF_>GV$*pUr zc92G1%hiCg?f!uKns$)D2%`AN_{)IkL{4FWmM##U$|)(%p%nHPo1++J9} zE5Eptt%A7b>S!OQiR0qs zT9UhAFB4G*E7r3)X@+cFhuUEwaRHmQ22&2c1x@rK+e&k%t4mG|PgH+md*Gu3!a~$} z25~Goi=1n3aEXnFDg*&U&#e)jsCOEG7KBDlK_U|L0bnV47+BVjw@x|AIvQ76lr`48 zwKiUp&Z=_cmM_ifF{!oE`G9d61W5WmtZ;{7UOC?)rkKQyfpk4e|J}fdErN|{sUPq0 zItN37y?W+B`9{w(N2XESY6}J%LCeQqF?7#plfgCx)Vru^hTaV)@{1PsSv?(jqE95- z0vXvef56Rsq-}^0I7(43%p4>`OadbX-jyRAN^|PTy1;1sJB{PRvITk0tW#hH} z!Vx-S@(x&7{loS@V;X1?|5^tpcB})WLZrxFTKcEU=sp5U)$Ni5yR^&uvb%lTN^EXa zmCfv_7>;*aD+kvpy_d*=<)-O|*wzF%j?uO8?vs?Ak}0-&@%?b-&yZTM>M>>mHmk3f zt+09-6ANaagiJ~t_#ZwoW9WRQ-nOPRCgkQvla^vw)>%<1u!=4;Qzq3&bN;J%g_qT8 zLGk(U{Phfs6!1`s85!}189Pe^snkH z9XH)3#~bTGegWL-w7zS|QS*Z0A0=lJVcr^juep!qKLlcnq+IPzHOj@ZSha`kX--y= zV4*zFJ$mhDFzaRP5RGF;kaiP^;m_#ZC_`pu0Vv&y02A-YMvY1pfp(Qh1e~Fcbcs6T z`)IKzj;rFt_~xtqeqXh>CvJFRO03^4`k17;-P-SRNu#i~+-!SHzJYYDUL8laTbYx4 zk#biIibhF|ZF@nae~iMZ$=hy%L99D`S2gCD4Y;0VDxU#d>Y6!c`1c8#4DIc|xevee z4Mc`7Ze$8F+pi}c)O6g(O$SeMISW{uh=I5Cxo?NRMNV;`HgA+X4m3c~uq+@%{^tWa z`bm)irLBu@c9;c_;sx8X5@Z(hgg9PG#tVm>Dnlp`4=V!$)MIWH)Cgq~qOB~uyfQ>p zGolS2nNUJUdhf8Ko6*a?#Y0NItI+;v#z<7Z-HgscX#HYQW9*3 z_;ZP!UO@*@_TQbP#|W)I8UCsj>nCVhcR5sheiMAsEZ@4>BK(L8Gy?gfgOy|Df}PZW zvO3~+Iz#sH*5UZ!1+#p1%^aKOTK3 zLmi0P%9TT!4_!?NPq#e)-~C4zNUa-&ZIwPUTcF^WX>G0mUe|{a7!B<1o#TN_e#;K5 zN-geX%sp6>@DonI6kzoA31C=B)S@iMg0ub&-f5-`7VRan?X14V=5e`Mc7bq@#sQyHyqQOG3~WC~0dmFIlIGU7lw=pkrxucMJu1dz{GGj@C@ELe!7d>Es#9`l z|J5kLNs1n$gRaQzWW=EKBI@$CGlO#M&glDRf?|ZLTH|Rszgs3Z-{2qS6&oj06i{o+ zRx6ONN}oRGucVa~@0);XTDz!=e5?^Fr^=*9quU0tIz&Z41kehk)ZLJt$uQdRCX%*5 z4>~tZJby{sTCNnG;ceD;7WQWyA?K3zX=+qUEiYy?&Ptg(l2!U*9){~;2bFh@sA8-w z<7%+9AR)G$!ym;P9fSg(<=GjJ!%3Vn>;Ro!!!=C%Nwg(H%P|?!$t_-?VlHrseFmfm0#4@#AzVyj!e5| z4vjjDzFUAH>YK_X2`_D@^evtqf|pEt&G1XK`FXJWvIIEgV-7`J1z0b3SbY_@;SE=$ z<;By?`D!e{3^w7dwowV?v%f4f!CU=x3$IOh?shso(B8~O00`#eXNW5i*z3)T1-RU7 z_=iVHgEmxjns_xj;`;wn4v`1h-96Pwv5k>RTn6h`bt_bOw|0f@){c!;Pyu-ex1pOt zNEBjYajq%SZqaV|uhwVLNhdjB1PP+WRicKt!S@1gxhOLRbb6lwmSpgNAiu;GsbWd_ zcv=M+NRof`@ohH4xWp+WJ1zG5k3cY5c26T<)3~J7$wNYmqFt7EIvYbKI3?|c;esJU z`YNrqSVinmlS0FS6`3RG(hepp9v5R5?x`M%Gx;k+&2dO3j3x&PJd4cN{V}F?*ee_9 zq$T3o?_pd-pYoo>yy;rng?q&TXHd%%15`VswHP{qw8 ze~+&z+=&T&7}~^s0tO9A5x2^k?Oo57azPAbzF+;kq)|9K*O54ty@gs3VI6mxaTnY* zsCkx|5gvuT)d5hGnZk7Nuu--QXWMK)nE@?LlaeF7PXUu)?yhtOqDINpma&x_($=RtmGP7zdy`or5sT#deHbvmRtE&H z;yO$uu6tnXv2Xo>rO|zSnZQ-V1sFQTg!EM z)S@p0!9!f}UQHE=-vlx(GIYON(UrwCrC5M{XVq;5=iNU9z8JA~z68r@8ovP-5i4#M zW`UPO4zeVmGB?mlZe9Mtm47v2?5nDQunRPFz!IWe$oyOa?MSd6+LApnVN+(SP>aOJJ^ai)z9Sozw%on=2@(eub38 zm}63l+NvCn)bhO>7fRNtIQd>y}>4s#c!9wR*`mc zh%kE(4IW;DCrl&%m-pl~Mv9bV<5(;s`-%BEhFwvtCHepq=F9HZH$VASq4Y&3_>OJNk_Wy!}f`Fq#(vs7tqEVWl@>Velfu?!^j(z}n z)MpzFT%Gq+tE*O$a>KzS?FF^%Lnw&vg*MrU%^jq4z9M<)KyaPX<+ix!M8g_Z7{}8Z8$Q;@!^9J zcq?S(5kx34Z}#;dnIb1`YH>3cmV(IKil^C%!8SD)k0HRz`wGQ8b$w6>fb}z@xk$Y_ z)fqQ6nD(6bt8DmIn{!4*!bR zVCBFr*KBlLvQRhS`9$d%AK*(o6Qcm%Fns_eWOgCpjstrjdtNP4FXRM%4B2Vy1(2zn z+D`PAuYXlj7XBJ;=dx$|;g3HjjrT}iTx^FTs9OA?)?e&!SwH&J@-|Kl5vH=`6|cm# z>-!d4U5|34QSJUUc9DvcU~XiF0L^B;>9R{DA`5g-h-n_M(v-QRGT;Rrvc#`GJ`|cm zS-p#R|G_&4_UKJLMkUjVf$>)JEQrkK$0_%{B!g0(0*t>hX(3RT-MUEiwq5fmD8}jd z5Egjp;*S+b#fACvrd|>_+c>$%3P2@%lMOwQxS`*O92i%eLNY-Tk#* zwnk>or>*1+Zjq2fnRJtVZgm?Qea{-ki-N}*Q%d)l zK?Qg%YSK?hFA1B6<+Gxb^zVWRtkD9(+dQZbV}22rgKO*doGLv@RL6_oYYeSuIf3o71Fek>l83zRws*-4B^Plmo7xHt%^ z9JP_(Xece>ccluzZF%nTK%0CsyK)BQsg!buVHGe-=$}waEz)I8lfWzS6XJ*5;m6!~yf1_r|F}sD<`=^aD;Rn~ z_UK7!IfMQzj^q3W@XE@TlLpM=jybrF$0mAgfisiDO6_X{o4hw{#Eh+y^A<;%W?`h* zRR0VxwnCLS1;{xQmUn`)RL5XuNPTfw0`~HSJe=VEMP!-%U{CnMX(G03ojK={*u$L0?I`5JmXiKn z>txohP*%^|p38KGd-Oh}%m7+iURT{@?qk|lPRCh`>{;|76H1{P6%%uk3E$O`)=IGC zI}*~LmL_RE!sG_Ap%*R8M6CC-t}|Ps)0B*AHgUvxy~{Wfzog1KJVnU&+V)>1c1s2? zG&aALmIG3pF1TjQ9-%@@&+~>cqpY^~a!wljGu6;HSE@GBQ?Y}~az5K#uRlc)p$`9wihS;Nm}w8NGEW1-^yS;Ro-BeNJ9TTV6jtr=nka5H z(CF>(1>EA zxX&x^x2bu=?Ns-lC5c8liP{3oqV6?2RRraKWZvtn04D#>;Vv!}i6e51$R$tvNR_;j zC<#8{HofoDA;YC)MMQ6EappwN0Ud&d4iijio2fdZ^=QwR9)8Uem)(^)kZtu)r2ILNM+?BH)i(V62+0zx(Ij~5RcMY?_d(|?LvlK_077tvnmCy z&Q(q_eAw}}yqiAB2C6Iuj!Nz;v{g6=l(Hhyp$YA1ht z7c@}mW_AN))3!_sO;2b6Fp&l8N@yHSLyZWxz2V|Z{T^;iw7{v}DX}ntq764?y*`;5=!p2 zMzaL7S_j}n+(QNRh~(x#ymmY%o+wm1Dg^cGRB=cMv%pPPZZ}Si(i92NJ0Jwta&vfG zkvZl7w@U4{ktw!#{<3XrW@nFOzXhD(^>6_qUH=HIX$cOu0XLc2e8v`rSPSeiQL9(0kbUR^yB~H_{`^ha z_^tvQ`DmEc=A-0Oy9Rv!|V0|NDiraGMf3=4;3h-4impOuL$>lbFfeXyNFk%l`Uod9|o0F7~K zdV+pt2>AHw+&o_(hkj#YM|h4Z=E%AK2(7JY++Zf5fz!yYqeWR`t=lyjX5!+) zaepZhY2AaVY`tbjeVHYo@eDp7Zz>}9TBxADxa2;y* z(Mp;ukwLQILmixf4U|sNrFK8I7k7|NGu%gdLAm-76SN!eF1;Lm0NResq6!9L{j}SX z$HE9~7&Q{@+M(*?Gs3e0{*eF=3Bi zGoYY|$>w_O>>!@6e5ai}s2U?COB{WCimx;)`|0&*=XvLHYHd+Uk?q3*gR&RS035rc z-uV`>E(WO$8K<@cis<5TV5K~-NTmjOHwDd#23&NLb9mq`(ZoMfEOfv*QkWgR!08Em zQp`$Xmssb3ID9oETw0h6H+L?WGlyrA`T=sp31egXf{v}SBV7reWQIG;06s9-{N6CB zg5!&a%~{)ma;{nNd|)*4{ZuJNK<9Y(*hqVv8g?@iTe4o!)5K)hw_Yhnx3j7ZL2Y44 z!~&~5xO8W}3R-fidSs?z8~4G=kau^-K{27(#p<=E3LcNbuLNjb=jb=*TzlOG-6DM0 zm@%Yh7sj5BN=1>hPw%NL)v0ywe52S|0UH6zWo#ZO(==le*Cz_jsAbZ$5(->Ct)ff& zs^9i~Iv>Vm!074_a~>-Vb~lierfC7a?i#zV{X$g{PQa!@rgh0Bd_!n7K|JpzZa4$* z)A3S=Cf-rPk~Zb(YNtlFkrvbBU`H*ehlD#33U4B}q`FWEjP{LZ^3XQrH7^$FRgUyy z|Gp66P7f_GbM0dRE;?yvXAl-Dkx@jkqFp!qP-T7=C+fp7CRec|FqglIQzKx{lH(jEmcWO?>pSS zM%-=BQW)-m0>`sSlh-R25Mjg>I27|0KVGMDIzYP2HceAESM=e6{3JctqH~#KfC}U} zy`D=vQ%dE>K=|=N7+3xI5OdwEM*lzj!P(KA+Cywj%wa0CdEi`_K~s3~l}S$RC3cbD zNJdD6xR?Ean0_elt~q=|>ZX_586d67Q*<=}WTKG4O3t9JL*>nBGKQ@kp_c=9z%VGY zvoZ~eiY>0-iICDpH=w(vVtlHS%%>pg1meb;G0G8kifn@8b_W2gbO?%7S@o_M?VEdZ zWSgyYuu)6EUM>MyBrEHuc1)FR`8nbF=gGo9qYFg^q_2F>jLh++*_39BX4VU zaNAI)uAkQQ7PW$k1{dKDxgT?0fpJs1o_0eb6{mgxhj7hw%+X;%<@OV0V-%gWhenBL zRsY{&?(k_n*kxcDiPQmzeJQUNf+4t8CcDJS#8PHRV5tMnTy^03)Ur~4EJjm*Y$u4! zkTITbt~eK)j1&-cDk-fJq2p?uhk$1P@;cm+LTr!~{>!dY^c*p6c)G)|-ej&F6%$TJ zpd_>t2f5W-ZLiMP?6#W!d|ZzD@^n!EK%DpiWoxeQI4*9-*8VG(Y5@N~0KlJ)#sFtb zEI9*ymH+n|M*%TGLx(>z=D=t-APwRZudK8vHg6T*5W%STWvRvvZYDEq5fcf$YXtok zrR--h7p?BODhk{nl7)E))K`Kxqf^G|p`nE`Zf`uc6%>k?*Q`lWC}Gd8{(W+3Dk6Ua z$+Yh%E=x=EEuRRSdTku22RfvM7U?8Z9Q;}4p%bb-VO8L@$WzKVzE{eHUS#tvuv>Zy<*xh>_ zm#*#P#?ok*g{pQvwbOF%Ecm;zTmf6@q{KWVSLBvS5J(c{@qV>7m9atg>{Q1|^# zB*bomig05Ac_`V9sMZmICgI5avqA+nGKw~rz$QZ%(`9BKWF0Los{WP*z;yn}P(Mny zc>?@n74N3u0s|5bMF)ofm26fo1MbD}3HH%o%xm+ba* zg=UW*&lWO2TKhDb0gzOTY0IKDvaKqP)w@PYu5(PMm$+J7Y(dU-8)mk&SX z_D?^Jc9awW2>5(zNaCl#FN=T5<11C7t5p4VM8_0ti_-=oUsM2$;g^+xOe+H}xf)b3 z6pxcy=fdk^1ydV-4@fFKQX$GL2!oWZ{#{6%lCA{N~X%+o9z6%{ItAwvl)P7%)|< z=6@V&DNs6LU}~~rtPreeY7go*t^|v$hqsrf9xIsZ`uZtZa~YIA;xc?a=x!yS3^dMx z!s{l=LLz68n7W^@sAYs;KMGIvrl$;t;)_4)w|Am-MzH^O7WeOA?H}r?#Dq`RdCi)- z&#&3nZpYD@>VJf6ZX|~@ShH5A^%k5}3_(o3vd2VYwJabx#J7|SJ;jFaGOlk5oMc%C zmHoX4C_KesCuQ z8@(P;Ob1ytt^oXdb@~I?tz*1ImMwzA<6RSfM|EArlFZ!gk$)vwIE1bCG}0l4k*$@m z%_;wxU3Ki9Dw7$dPnT?g)xPMvCw7L$PW{T~?X>?2be7AMoyUMnI|>=n0Pla*Y_;dk zDbSFElvn%^^Ih-hLWRW4gV;wSGkZFo{+0)wuqlLb=Ex!ww?c_HyUC(bbFk@Bc5k+qA|wYt02oMp1VO1H8V#)5KbYeD#Jzc69&8^i`fyAnF-xnUW%rGqH z&l}f8DDIDGtEXE>Tf7NtreCH#QhuF={f))${HHr{Uh_#&WdP!FC-;-u^)EktyW!`E zF%I3s3Wei9ue5w^+};*Gqx1!zMlYh3?Undu5uCmSIJ`Dgd_|e@7k#T}M>)J|_Ii~V z?Lqbuhd}-Tpl#)3lnx|tS(7@n9(YFp46^Uib61YN7&-vmGc;m6MShPC1ef?2xDtrx zm@wDHg33CCOb% zQDwjmrH5iVoa+$ql8mcEdaHZzx4Y~;~ z7EPIn?}lHxUbZ}i^*+i9Q(o>86JsZ-_vJ;vM#U0-p$X5PD5Ua?FlBsmJpuoU{>N1i z&Z@+JRfOC*+i~$*>5}HoSeV=eoHgoR^ppv2`bUX6Uz7%7#&XeqJf#+v>PDR{|8&dw znq3ff4`PS&n+UXH(c%BaNB*aw9)|_RL%dx0+hp zi5Cphe5g4kLXIt{hEZvt6TStI??E)gi1TemhcJDL{K^HL8-xf&QYb;#?*gt92NRL) z&-hAEX9l1iA>%|Etd`(L${lv6*fl|r;M7>WHLUe}6bj!!0&=M355#MzR(3Saf-Jvl zENhz2d^$tLpHa||0}WH%b~_lwDf@Gg&zY6$lf9CIMxN+f30-!!H>`B*cWY1{mwB`a>GicPyvH)Nkqg{dM0Cio&3aM_;;DTgm! z0tXJ4$(un$_5liKxT;D#<;ERZd`%G5%>G&Y@X0|nqiedhC@;L>Y0rSIFF8ngpqJY|c+Lfj~y_!h2eC4vU2UHGj4b3q*g=Ydm5O8?%{8O^$*O;Q(VO z4|kqlP2$&B4%=-E`1PQ%rmL`4Sa0rh;x&W-+;sla(fXnll80@e z)@zO*@&7+RBg@=XO+3bx1oyPO{5G=MM_z#8LY?WeUae^jF4ZI5DY&QJYUqdN&sSMd z876~RVe7a)ObY9BX3P8uvEgp4Eo9VmWKVMc{3Jlvjo)u>uXfV_4YGEQHj1v})(WuW zZXMatAm%2o(5`mM`>-@vqag&FtA6uz0pli2BtcA1o^E}IfETU72OdNWOtP#4`s@#^ z*a&qiN3k^w-*Qa4ZOxf$FaXZIl5lv3zhK%eHLS2g%aC7gOEDq;MV5(kL&!Nh9Qki? zTqiPGI{D>WwZsBiR`)kbJ-PA;cObg(SOI3z$^z9AWC!ffDg%9EQ*Y`{C(`Hg{={c+ z-*%q5w4e5r_=2ZvN*94|mnoLpvu}xyGg<*UXfh8f(_i63b{-;E63wE^LkGs_o*# zF-Q^Ve2+v8j9?$wjtcSy;f#<4ZisOGkde>Zjx!4k#3kgdZz*(iP)L}7UHFmNZW}~q zengi!OQJM>t=6`y;=}98r%y{JmIvUxtSI>qB9Ks%7Z-P@N7E7S<49-P7a_Y>TN9T4 z{gLYO|33gE$;K;UewoI4@js=JMU#e1$4ld(7Ska?J=rY~Yd7S$D!{c4Z!7)zuCMG& zy_=sS2uJNh%4Jsp!Rg z2WIR+H9zR0HqzsX?i8fxLteJ_EZAqB`{Kp^6OdZ@^XFHGqDdBh-*ItK^WD3fOzBhX zT&zx)uY-E8)~w*bDAUhLk0L4wk6#V;qSSA-3U)nS~WvU};&wh!)EmQ&0iyd*0c{myyii z(2!oHgL#^jC)ywB6e#d8k~e9mKT&jnsL6gS#O7xxcp7x$w^2F0K1{vs>t8nSYfan$ zSBg>!cj43uKJJO)nn8-82?Je?{@+we#Wr*+$YMZz8)4yZKn#M);Z-kE22sx8wjnaev@ zQ-$Fmj)V}HHQBsT(;X4;LbzlZnv zIkph)Ll5x9O5K+6M=CuSe#bq|RS?fsVtGG^0c{YH5u<>=f#pl z+$ZBcNs5tbP`NBgeS|Y+SU_3g)2z` zCBWj4g}FbHt3-dE`I_P20{V9PTjM$6|ub8Ddz;!Tf-SnH1{+L`}n`+f&tzgd5rb0-^ z3RDXmyi3mDY8>wtj!}$BPa&?6_b$-7%&xLfGlA;>Oa>82ZE5Q|epQfqR|^3$TLiljt5#{J5YlJgGYcCtltH912zBHLdP%@p zTFNy=DLy`(1C3PC4dFl)%_6|hGsK=;M&~Mk4S6PA!1I(Y2V0yE!TE*$=D02K()ia%@C3PcVnXhxXRl_ag za7)}QDLw%yVFak%dcn}vyM0q?;|vr?+1)~n?@k;mi^YH2XNU$m8*85p(b32kL%gBv zlIvDRaXWo(y)`HCVo<70A9GfD7N;qv`7HGtc$nj=R>7%(;lOj0pFKSgx2qK{6NZax zH0J6xoQZ`n5sAqkQ0UDFjpTVXtQI9D+85DK%FWo}q@%)-a_^Kv_RQ`%cMS;(hwJC~ zbbXOI=elG)=19pIdHG9MPRzwr!Pk1?D|Xl7?(0REw)g-$)s5xC95t=q%Dm7pLGuOF zyM`TTJquIKx=dh_Rj52sU(vgZ^dyQ0(--sFWa`P&jgaAV4m+NGFc=I8&87Vyk3k8k zOvAO$`UI2Y&m5O`Yh<|95j7?3!EfD0Q+@-J>iB$YiT|eca zm}}a?be4k*M=vFyq4c|5_MyhV|vFEQuzq zn-K)Cd7)ePgq)tlv_=`R2GlMnR$_iHg8%UoM2{!`ndNI(Y6(8cmmxiO;tTvuf#}%1 zIaiqf3im5b?;!A+db{>#lx%KclmB>EJPYOxrnelg?M1Y2I<32SGJ~(YLU$}=; zbq2OnupQ7L<(@?p)w>X1@?(8t$n&vI$X`S?By%jFX}Ahp(M#|c6AyDZ_8Kxn0z%Ay z8r{V+*nJpN@LuEb`D2uPFBAEvJ^*J8OP>$8$0p%O)&P^8{PiH)b%+fE3zk%%ksE7; ztW+!=^)(-1w`x@nXQP%EI+^IjzDGog4}aZX4(-N2S7O^PUi zak^Xtk`_1hxSjX|Xhaba^8fGuu!A?!ihlxKt z(#@+yi3D4l_F+i=f%$Zt=AmzK{SZksQ!kJUd;CK6{~gkE>e>o#@IydeBV>?&#`tiQ zEObHSHadg;vTl1`@A?NBhIsC9J+-GMBSglx=|E%7X86T;WH5pPSi#r?%uRKg#^Y&1 z{kzg@3I}SV&J7pnM%+ljNXrosAX0VR=npSJ7~GU^-1p3nuc{Z4uD^o?f~<;-S5@6p zX!uQSS6T|f^{KMir`3|b1u!B*_a$eMnpfO*k#@8o6w7G^Z|Hw9JRUAQq;Vi7pIgHZ z_tXEo=no(|a~GAnT;%Ex50OCy26U_6hZ4VUzL#C%R=ku~&Y10WPjM^sR+m^bi!ZGq zW@5Z36ne{RItmr27dF-ml7hH1U_RiH=~wmxDsn{l=s;2NCt{nVzCrt~_v~Kp#r=QH zB20)iT`Y=;$DMNk{_Yi}=M8oBgf1fU-Utc7{{w7@12|(mGCy|Q2pcb3V(=U@$$VAq zoR9fiPK51I%=Qk|2(o*ql{A}XmQ4mdLIgH`Ex6e=i?QVrMzT|jEs4nHUUZ0_9eQG* zH!UVOEVuP>>D!oU&NZI`3n)Z^(UWCMfuhJP?L&W#%mn>|}9aLlyEr0HW}gw4vT;O>q}xSIbXAcX4-u`B}e1S4QugcvmXhqUeBGg=LME z2p+Jh#*ox&jkmZp|L!?x`o}**#hy{d?3Eh`UG`}>g@_-CVoKHyRIvUfTn=-mOakOx zF@wIfI)Y+b@kbnl2$8Hk2KA*m^p72n&FmZi>PT!1K|ho@Z|?slXuqE@h1{n48n2PM z5W>zgNceP%RsxM>jMLGVe&IggIbtDE3A*(@8u9@w&*ycMl3K5wNraTWS}vpR2p`bv~}^i4^z2yH3ddBsdvoEsqed*e=v+)oK0k8YV5WU{EB zeqt=(Xcw1D9)Xi}!M|;koMuID{mezIFdg;&5z)>TsIJhvr0Rvvx#c_K7tp}0fn&iq zEmz>3+F0%sA&&{PW*1{rVaJ@av^ z8+vlytr<8?-a%eLQS*~gaNnWyMw!tJb>4?2E<6eQ8L4=Ihh6>8)N~~Z-K(@1 zO=>Ym!C9Cd$#4r3QgQOy^;80zk0-I~HBl;BGAlgo?906!8*Ac4!pX4v*{YoJcvf?6 z9QvNa=nK9AN;^i4$y)IhiNi{b+-)})2|{R(zpdGe>r_QXF;Rqjy~>d|+5Ml|DS-0RAL*qKPL^T9enx2ePziwg_>TQDz~aaj_`zZa%g8Aoh|b%_NZ2#jH6V5}C>z4O~+ zb8HXZbQuc@NLrX33bR;Z3Xxa4^(xYgDRS3W@iAZ`WPq zBn#~)G7|N3UW1lm{Q<8TZ%KWxt}O&0h@dO5w8Kn&`nEgAqJM_M9R5ok@g%-IY$%p6 zFar{R*7Aki7B!$aZb~}5PhHc=0l+?E{N(l#!5aSOt0P5)iyp#Z1QsezOcoVhH(tPu z+iS*zGDrs{{dvNYgnFk4o)iL~lp$8d3lC$@Z3tm2yyhOjwKS}rKZCWUaN>{k(-r=E zFBKXSSCw7y-Rlhk!x)@d{f|bQQU!{;L19h*d!~Gqb7wbntOls!ETThiyP&boToZ$g z&DCKPw7Vg^NFPa~YKUGE`$KbCOMENkR-CMbaNi)C&IRNH`@(*W) zd+OL*XgZ`*Mh(=^@6&or7?7~b;1o%z@vhH`GFVY8S4JU+4l%;};uT9oJ{XfeSx5G8 zR#kYHl)Ol-Tf;Yh#(*jn{g3?WiRA5ui$JzEORN8mLWf6Z32NnUO=aw6X-_-DB5m4DYy@srxM%5;C zGrPbyNn^fZw!@;TfH=4jyfD}tX2TP*b95n^7OnD|s`J(dy6otlxTo_+2qt;~XmPGL za9$yX%eY!GV%;8M5g|WqcuzkVv-etWA~fq>&_H#Kn44m0@Q+H|(L23w+$H#u*qz-) z2}1pC`Z4=7@KPdVc>1Q6x|jTi7v}7YM8~_+HZJw3c=SEQde+f~I>DE3R-!A-(B3G{ z8$bv#)P3S{Wq#A2Oo4I@ngPy>K>!KHxjaE0s~ZJXdkH0oknUxib@9~xbEQ~8QOx0Y z2^M+4fp0V2tkvEqrVnng0+wLGaYq|RnuF0)&Eb;WTL`ylF{`&H8OS~_?3j^%f3eZU zTz$XmEsd^eU;fsphmUw}fGF_cnLkUBOY?^b%5)g08r<+g?oyJ@T$$ z0Zx2?$8zT_5>d)CjsQIc(+|nfP_}5V7*h$EkP`cXzA=vGl%0rN*;JoFOmKj`mVUvd z#%$n!4OY)yFJVFUw9eHuZ&b9|;82mMjb#swvcPdOI~037cY=Nklazmp@xavEr<&}P ziELMfnFA8;g3^X@A&e_W{&md9Iv$>TC3XrXJNkO%eWpL2h!A*-<0Dc#$rJBoLT!r8 zc&Kq^pVjBsB_!5jnr&5Dr!QPwqVh}xTltdOSOu}{o><*mdk}gJI#fPiDN%JL`3+m-G;qYa1tzmU7eFk#pD%r;MCs)ScPg)%)J5}1AwV93=-Q7lnIFh ztg%yliOdUyv7g)b!^8PDF37Mm1)GD|UL|dNIO~m5N|NYlONhttj@jZOZT%)3yxz^- z!sXPoF}xnN&%DA-c6)HR1)J3iq<9D~oP8%B9r-j4jT0DSrda2P&5^{{@!&A;`6_T$ zfR7|rv?+3;(iFo}f5y8)JdP}x-tE7{V4-r_ZH>hShf6-aT(iU2iM0}eNfESRTlC!_ z)lFZUR{5`J)$chJF-}R-<3l|KD2n0yMs?V?n>7VF=%HU4dK!kK-9#LU5$6@IHZL@^d;_a42n@X<+}n6JA}yJ2E#U|g zfV|iT7|#+y{rZk#|3~nlYxG^=Yo0AwgwGP`yD+ccf3d@Q-tAzLsDtDm7Z3Eqwv7cp zSb_2J&C8{_WS)6Ne$;SvhZY!_ukrAM1XSmx=dE_JgH_lTY!IEV0 zSM|Sx6@$x4*a^x> z+{J41WR!Z*?jj((YKqraOnF}&XSObOdZ4r8hUow*JKBgRamQ z7rj8g4$vOqq%UNJ#JcL$ryjc@vj%S0jFFZ3jcFRXZpS2jA!#2_#UcJ*!3oYQ*`7N< zevxkxpR95WpfkgQI4n7Et!v}!E-=I#wg=6kKWRZ_?iN0F?!P=GFCQFxk+;Sc03&L+ zB$pY$k1aS4c5k@d8z!+y5L+Jn=>#dFps8V>&92@SZ*K|H9gn!!k3d?wv1~^@{$zZ8 z>X1pXuVG+BmPgPt`}fus_XC*)pETdh#R1gK*j9VrzKBTh&jXpsTR0;xlqd0@QiYwp zEJ7{l6Jhd%S2>A_s7atFARD4~%^DB3B@@FtFA~z0lM#!i*yiPcG$2mQt!?h5BnNf8 z^!_+yyvRj0)&u;iF5>3oGa?`cBW|db=JfnXh?A(8=`6J#aJY5LG;l7T$y;v$-2mYS6SO zj`ByJegiUe=)6NqAYW)-Pg-{(3e5)o6M=$unH~Eigs5o5uPAL0L{OLkXov6>LIQTw zK56fvdBL>+C*5UY@s@+9S@x*85QN}gSsas8q*fJy2ulc%;X^o@aUin_>_r^@SQRs% zBuj<(3eOtk+Lh=`dibv6s;l1`IT0xxTH>e}!=-d0GTtTOf&C!CTUSGIJ`rkqtPV4n z8+nArUp3qT`)sb}2wZYpL6vtB=nxUh5=2Lw`~!zp#JRE_>tzZ-jd~cAi}hbl=8Tg5 z!XL_&k5EbO`w4d}+?aNIYLWS@ajWOD+3(uS2u>EY&m(dptodK=yK>*4gGkLs%-7cj z#1W^;ZM(>A$vGlsPdXaS;7Qe~k`C9G5%PgNHTXnmCCes7wYd~*sdVDw_L zddlOgfV7jVXWO6TqjT@~#m-`fd>f6p5(^9A-%k?PKbkq=7+NM^4ozo>xo)6)giHVb zS`SqHNR$Pe;JoVu#Wl>>WXSW*Bf#{jrGaw80QIllmE(-f>9`e!%oIYSeCp1aG*!W- zD^k{YJfpK`)UwGgXGq3vT;7{qovRI`h(my;KkO!D7NPAoUap(FFHy|W zY_0-g$B!|0@A|UnFNx1_jfcH^7?splb(c3tpDVhCp z%K677t2GM{<63hX-YqybY<|Hwm~nT%J2I_1N8K%1e53n<=A2}>`58$$VL>AHA7Xhs zm!X*BbbEpT;bUfKVqYww9ML^bVJ4|7Paao;&4PCGUeA7VKBs)Xk+Ej-(f51m5>FiN zP+4AaM6cpw_5^Bnst3OKl=YfzJ9F?L$YNX&^pVbOL&WB^aY=Y40ToY@Z!rjBe^S$W zu1Cll=Dl>a^DTiYl_S*=tnf%TA6I}l^Xc(o$-Q{;i5%|LV5&kCwevl>z-D?5)oKQ* zoS`?04G#zIB$%159S*@QJTeG;5J#;D7>KT=$JlT!84=7}4K~DX? zg!2Ii@fgGYjx8|?cuXS^@ah(~a#T-XQQB4gC)wEG{eV>{CrT zKc=@qPc=jpz`LK418^;TaRY1)H>MLtM7nQfPa0Tsec$a|xpS2(M&ZT|;Rt+(F@{nC zbACsmyG|^V-Que;E@KOP{hW646HK}^+?gVSmPY~T64t2M5p$V`xeo|u|DD>bn`3w? zCAvS>SmMb3LN5&W!Zpw$X7t?_YpKRT{2ts`Krw3xF^AYRHoLMIn5WbI%X9&OT9k5c zP!c&=QkLUPm5NvX5Sk;T`C^=X0pVS0n^GW*hnR|yh$Y?rwFEB?mXxO&_$X=S-gMve zps`yz8)c}HDU8yD|1h*rqDeNT$DB@1^?~G2{Iy=wa?^v3nI$J^m7=byZ;e#AxahEv z=_A>x-gL;AB4|`LLo$%v%KWIq7S=~fzIc8eq)^H^zaqhgx+#34_2wWE)|1JZ5FP(( zC@y5P%pQv~B^9Cu-cQm)lr5 zDmwQ7++Tiwomxjx8vnn_eQi1y0Ym_CS&)}x>`yHS=zudAWr<05hw%L9WjB^NIhO>> zFrGEqS%w-9;nTk&N#yy{OW37pUxwmb%Vxj@ANxg>(C1UOWnS6Q?FT`pykKb7sHoo0 zM&JOox9WjQna`fz7N!~EvMo5NgT6q(!?9E+9ePji$QUletF%xquwFXZL@&Z*LllJdi_w7=I zQh^$eR$leZT4Cmkq0;)$DzjqiRB5FDU` z+{ns5{!Hdl%@6)`dm51$Z}X?LKE;bXg{ULZea8idt2>oZWisyG54+&k&eQ61)hVSW z!=?LmdCZ{k!<{@Bw0-Jo>&*IQNwbR6e%5fLACRy_Zb_|^!=a3AfXx}E`yMZr_ zVCXWJ%sw=4i%Th(^IGBgPwP+3&++1Vk+b~{3{Ui1qNJQXKaA(L9g_>V#{LpFqTf({ zi}3}*UTa$h?{%TolwutezERIE%$EJOj*~pCRB_;L5WM%{AheJ-{E;9P51CY6l*0O$ z9j~T#8HRFX1!j-qsvgWx#Ou}`3J(tK18!ulN_?qI85gk^vei!CvK`wF{@xlg5gEu$ z+sMcLbRE?%g~huAK$NO_V>5G3t`-Uxb%V+RMMh%_#>ULJ9$tpt)}9R*#^i3jJi*(T z%2IM3`z`4F;o|doZ0E^ho-pgxC4|Y}o+@t56{5W=QcqAkDqMy{EYZwu&29Y@ug7X- zQCaC8@)M3XP(M8|q3S2Am-hfI(1XaoA(@49H%4Oo&^aMjV9tD?>Lr&((64gv z&b;5I!d)zP=^x}?N7P}8RHjZzW{4?k zR5Gs}Nm%K-_j^or-Wc4TW|JBM?D#Jq%>ubBd(Wd-CfTA zMu~Ma1^hFspK6A8W`E>`sGGp47bUnxgOnLE@ln?CBpzecEaE{*kgtrh zjvQE2RPNxXyQlOAJ`B5|t7{Nx5^pi|44@ig>~U|*sy8Wl?Hbwl{JRt!POLBttY&%D z>DGgDg%9;=C=8*?AZrC6k#$DR=&5X5a0zH;wn`LS-GS>{+mJ~kAXs&&ykU!sn+#ma z{>z1B2zuO9FC2jZbzcuh;~)p$U?B<{(4iGG;yWS?@g%jCV`fvi(P{S1O6jkm=}SZ3Dj&zxt1cq!62UO}Yn5jJmBb30=kh{`T<3 z5vePG)FJwR)*}n=$C0Q7?N`!k4R`QB$204BpFs*Y2{-D;+{Nq68ILTBZXK^s^<*88 z<$Nyjcb=n#N&bg>J{;9ahxFp49;+U!LcmjXXxq$V%eRq@o1MyhKz8K z6ES&P(__df6l6jTKxe9q9v1SjcP;TcVq)}7^zQ6axxW&2?(Zx$ihn0F zw7%MgCs@~I^LV3p*$+<;4Be*TYZF5}kZ}7t;yoEGa31L`?3}0P^zQbfpL{(#@EN-A z(A}DAIm#Ksv`SfeF#C9Gfs&F=kYg1AhM z9AEfNQ9>ZMBr3ysQZnzI_~MRK25CO&`$p6>E9|}j8HyK&z2|FTD(mw9{{C}uNS}D1 z+i`Lb5f1!k;D7*Ql(&;QwguL-L??z)dj?llR%n^n8q2;OJLPQGL};()6NpPW1y&?fj_{?BdN*NQqn^YXU7MQ}kD zS@WKWdDU^>0Jp;u-v?@JiO%CAOAQmCmYAn~PM`&XrqK_h%G#M*N^~CmSPt`|*9l;N zLnmtjp4v9r$tiGH`T4l;RBnyk-L85LId2}KY|i8KP-O0|=sg$DvR`_;sOG*IFdU){ zF|4wgSH4f+jG_zjUc7U7%XQ3P;8A`2_O>JNe2w&5PgnT%ENhfz>(8?B0!~i};4F9| zKWJ*^>OLz7ST(ba^>=YJ(8F?6kzh7TMzcfGG2Y3nn{)!*wloSYxg1>!B23$Jeq*2gPnA2%alK^C*lhZj5tyNj9Nby0;g3hQQWfu z*?hHi*{WxDC(x!tj#=KM94?^^1c#s7AMmel_(v-{d-f-c-zt1F#5v1ZWX_o2Ms17y zf8vc2eY(KYskBENNql2>#F}!iG)0z&-04rh4r%F~UC?-8>3;e9*DTOSBj5`6-xVa^ zP@>z4gc@3idBQ)Cs#C+!LM_y-}|vRM}f=`E?>@$1AzyyW%dnz9syF`Zk{ z!+~`^`s}AIfi|6Ee5^P^N8jl;fc&jE7r>vy4X!#*bGS4pRAz~+Takt-v(A=b}) z$W>*Q&e3;%;u=IJKa=l7L78FErG`blFFD$R^=7(mKls`obZ9G&{&B2stC*3S!Y_lF zn|j6kU=ytgIYz6TQB&UTdM6QsxiwFI0z=KXDh=A-rbfs)rF3USj%T4ZzvQRu2YJP( zTT`oe=${J0%sS3HTZmzj^jcK>m9m9f@-gz!p#BCvE7caEV|Tbs zO^}3$H~<3Bz^eE)!P$}qEQ%;iUWw#MDZ315!jt!}Av_!w_OsRtR!%`j z@+A717QK=qia>GyY;v%<9HF2B&}=cne}99Pim@AlqsG#e*a;-WDEJd~jUK8XHnh>~ z@yd_M##W}1L!DKM!b_hMQERmLZ4`MatF46SywY`mkbS4> z%Us`{)c8Qom3?5`?~~%wpuk+82$Y=ib?X$`GGc$c&P1?K+tt_W5^H7G#h_ZRr*a;O z@jozyh~9v5cu|`FR-N`B2ozVx>X>pZ{*wSJ9DcBSzbud~$;66#2<#lhMP|#B0}%2( z10ir(Jam+T!v9P|kBM)^uM?X=AChIhoXwBD<_PC*@7jC$`#3;8+L@m{?S?F8cD>o3 zgsIfcG70EQND!9P5ew<)VtchK)vL+jxXLawE5B($zgT*hFCh+&Q!AzXNEoA$O*k<` z)(tSvkWhIk{_Ev#n>*QrGZZNp8tu!|F?*36KPI2>JyInqc%jwh*u(H3wO6OBuwK1GuCRPR1&znnFgUr=2$hoiEl7Mw5BH z$JWN&@$DCDTS3Z(X3n>XR8mI#Xx% z#o3ft-u_rOPy>Aod;bse7ZrUz#M7U!zmNn7(8F8S))l<8d`F~A^Xq#f#%MXh6jlxO zde`LiY#mO!8DV!U`{ojbPI@Q-=b-PLF@A9yS|*XN{Ihipx#O2rzMBif+V_etRPj1T z!xIwnFWED3HMYrHHO{_7S>-r6a4#76kM-MrR6K@;8DD7u1OWj-kHYpx9?wNk%{}E{ zSx&6vVoqe!=Fw4D6w|FDAo!yDYq_(V&dQa-GvjpkIa;2_20M!iDPO%93AmJHWEI>OXff=d;ZwcEeF<#lT4ExWJl|tky6>@dLTcgQXq_j_`>3%_iJ;AmB%eS20C7J%aMR>7rAsq{E%a@}`A7W*-C(*%HvWy_L=!F+x>sSpD6+gX)BifQ;FVzAE z*|tfog9(hSfX#IMz5a=0dm9SLfg?<~*&4KT@vBNNXYGL+k`ibB1JM85jiX(4;BpV{aj?DhBlLMmrTp zS55+|Er%^N=mg01Z%gO%(;vnKGh|`s2j$Pa*sx4F0<1 z6O)W^uQ4$Amo07dNl5h4np0 z%(lt#Yu;NRdP3mfWe0e|M3$UXl@x*%UhOu~G>mBVSg34e5NoWrxYnLaEK1i)k(~Wm zwrK(=jvI%T)EK0;2Y^08niUaYRVZg>au1k!^WH-o^;Lw2*qJ`lzSF4FFxlMi5DN@- zK?>YEaPgCb!+=QBVEC?I%?1m!3hK$M4l&vix-?m~PR8oo6L_4hjzXHiUq16A*&M8W z4fnAe8bth08O{y{SaqAmLP|km0iwgHT}(ba`khOqUp|WiCc|ypfnJQ6&Ftmkv)9Zr zQ0A$oqHFbh*5+M%(=m8)Y7R`7I+P01%g1s_w?#D$+z;(~+M)|%P3p4Fg&Wh2gE(zW zTfajtKu0d;c1;BnfmPV9u=0*&VF+n9NWJjp(cxgt_SLRQpDQk{;_}YgUtc_fuHTt= z4iMz_j(>@hflcxR@#xm=J7VuT_B+8khCr{Ao-;0OaaYr z6%r`FF4I_raFZabtEdLZ!Qz_w3<58zY`cQOt+<4(c|}AaO`V3v03zR{4~?825d03A z5+A??=@Y(*9&=nTzfy}?O^`PAyyVk5ZWGo=cKH6FQY5zT(z^Xw(W@GBkvuYipSJI- zm;i+?E3_y7V|JXqQct+cq6 z(;`lLNf(r4DO*$9Jh83N)q;V^S%zI$<{n+O=TG!~0(w}8&O}p0|9?k!7&A2_x+YU2 z+zpnEO`_hU(d10RpqX8jghyDi!*;VXU@o}!>ywlB<8+D z#S$ySbE1k3LRWk^@#uP@;E8{UiR34yrA5N#NOd<$qnmR}u7p`R_#iJYTgm|g$~F>E zrb_)ZGR(TdhWaP-T_!YNdkpfg(hHOHd`Mckr5yy&F}UzTu^r?AqyohBLr@UB@}AQp zI+jrr-UzBK%5tJ~HyZ+;){XYzIApYQMZ!VNJ9I3AcydlI{R>g`ZRHryBb}TGV~#LU zt0BGYbM`>l0(;0NJe|5xa*IiCOmFmSXY7nUu3`vWvI{k8qM-#eOEh7fZnjk5ngIVl z0Ki0-v$?|g_^ zmjSTEytBKukm#gOQLG=SRt|%{osZSclrt zZqC;}X*@|aWuqdM`_{IQ0=M^*$Zq;rBY!jVdP7;gfG96^gVo@7=XVBNn}mIO8Ew_;lsH-wNm57to7YtZO$g+9eGrvWd2kD&D4SS*OAr ziGt%~qJ9IZUX@VK&LtUQJZ<@jOTNQpz}%NkXVu90<2e&@Bp&6mG}oo_-iu_a$C0kn zzQ)23irP!Ot7eJTpS?aueOyS&ra6?{@PMnjg!`3q3b;(r_Q)g;fWWSFl5I z_;KX!i4Z7ME%{p)ANA2n$8Y`$*}sz{+qR0@wI+s-;=d(Gj-r=2P}~n*<09)jl6CeD z>G~mfH#!*q;|Gb-k4=x$JrRw|xs#gL+rS*d%431O6}YB4+_brM#N&D-bR7X5wM+j# zmLE0Cy_H&4haU0^!^UtS9Vi}gYNEHLhJ zQ{+NkJ7@3Vg^kR}oSD5M!W0G0Dn2bnrSrJ=j2=j9Hlc44=BbJ@`gjtnA@dbbu~+3P z&iYXnm1Qy`pjyTDLhIyvoEri3D{A@(<|qNBogq*;M)=0daVS5x(ibAWH8$BAA6%r+ zo3`=L^%I1%o!qVUr%$&CY<5;BqI-m#b|2JfV~h4C>;6|((DaFj%HF3hcf2)s5l-$j zdM67!J}iZa&GRRRK9tctw1S3r2z=sI65O6E2|N2Bdd5d(IAVfdJ!b9 z)qLGXRb78m+|Q&y3W&MG>NXaJYEm z;lvMo(Y0NZ!4WBJ!U;wt`+g$aU&1a=Ua3td!iU`L6AkX(+}?t-g4j|6^QzX&j@b0- zuTl&GsdUm*x3lcBz@_Habr!IOmi04P5 z=RMHL2#+Qv2pMk^6abMk?HCRD3XCa7Dc7py`eT7NKP0uAes*mnzxul#gQ75=gu*(C zy&wRgaNr!V8wh-PPWjtv}EZ79JfmuWf7v2)d$_AM+ zY{XL6IFk`3smOBvV^>1vzfT`l7WiHvf&)BNU*g`!irRCi@orMO%;$FxXwP54c6Wf` zkGQO0+d&sYZS%aJ2Lo5abX+vvQ>4yp7rEJX*vZsfgVp#{N%&mZvMULBG{Zqr7+oo& z2z@t+#}+b+%ewS`5LPJcUIcA)L)`N&W!z8Pw=_p!wrOlP~YlNW`CEpq>Emv9%uD(vS}RZlA+ns+r=*3KiqP<61{~``;`^^UfHD zirWF#2rqmFdg4l}d}^r6#=Va5 zZMU=84{Jvd`B+V@HaCTCZc$Dc#sJA@stNkwG(v_i(ii5CRAH^o(*P(YmhG_JKs2?( z!<-@Yro?sMo7UJ7TS#tu&~Z{%g9@ZI5d4f<*Nqx#1ZiteRkN~!85=sfWqfN22gr4l90`&brv{qe! zeWz?eSBiFdq`3vMT7~YvT`QB&u`smr56NfVZ_RZxS9yqvlEbuv7#2@a$(^N1HvBAT z54?07m9fk23Dp%@DQacxe7w-^&k)Z5Z}?>47tH;0rPnLyA@hOHTA@4Z%I%}ZfW=%n zXG?|;u#{#SYu~35%rDtSZ0rHNGVKxjpqo%%(q%m)hLcUI01(JPJ?WyvWA6)Pj_+5+ z2a1$;O;T%)_4`Uxhs~Y;r)SNFtdPnBwC%y&jBfqs0!j^3CZmmf?Lkq!nB#yT!g020yYVgp(MA@36dF0}@Ajk~B(X#sFk zTjm<9@M>|K=9>w%PB3I%(-Hy12@Teg3CS|sjmpcoz%obc-0&{b1*#3Kr3a8M0q# z6JBv8K=Bo~`JWtG5up_QKSS(8M6T7G=YZ+$d|L0@c{eMP`E_LcO5V3crCPB$u5VD6 zI2i|7rj3=}Vui6n3~)&fpJl(U@N z`XfBF1l$-Qkf~~WD?dV}gFCQTTD6b8>gm7elbQT>hqvHjb8C8Xl3>gUp3ohe+#Kl! zwsN2FOl`{{o74~ZsTTT6dez*4T9UOEqBhSN{t+1T|nh49Za8CR+*<@T(k1qx(N?0<^Yht~$!>*C^69@;bout9lM>j;PKXh%_K0U(A-N1J+VoYPB=EregW}VmpBguZ~kdQ9q zeE*IB;D?UQ+$d|xNK`RLbNu-+6_E6Qz9%9+Lt8iG6b_Oi=EDBRDVC?(-yClH(~V5_ z1j@rrtrcGgIK^9yKHqf;)}r@rRlm)Yz)v}q;6(kkL(k=DVHmfr?o{g4A6kdD8tGp( z4(_y71^oU7B(dJoUPGxa5T&Tshs4lTDNVV`_Lfvric{c3Mk=y91g;24Ae4YMz%aWp zbtj#;t9JT1>ukt@O%efo5%^Q-Xn~sc3g1&Uy5Qm6(h9UYr+p)z>*vBs&jF?ASNLij zrgSJOBI}+9<3w9+GzUg=Ptp2G@~#3qIEMAE>(Y#Gg7}-m&Yj>RIuX(^CZ}NkKKmL- zr96FS^_N24*ZkKkAdF+ztAc`TbB8kfG};2}*MA$-+mRdCg@0V##72Q+uQi9ot60Kq zo0%dxq_NNIcjO1vw(#bBzf?JSUDdkJ%`%S%;zX&Uln7Yyx7tYCZBuDQ4Kgq^wLRT8 zcG{0exc*h`yzgJ{@Rd%ku7 z(1DnchW6RpwWmf1r$WYjCrc93w}Bsi@8I>4qWT`$O|kMz&?0^cL_HDltAIu20r(C6 z;s!6m`?hBKYge+DMB_oJ+$I2gGV#ANlclt4^Zcb99prf&cRZ8~6PhHE(m{dNyL8A7#Rn_TXS#0bFIQ zPN)L$(y+5GT#RNE>A4;a%;b~v=0&}FjgjLn`kvm*b_~HGy>6ROB8NN?Om<7JJZE#D z;HDnlq?bQZhD5A~o^ny&U5{k@$GFVHleWU?xwbhj(Uq(DRF5K4J>zsKL;R zbH-Q;&Aw-NVtZ=UimlU#u!nuv4CTo`%c`!tP_DEIT*EP7GBC}op1yGeHBUbp>!{M; zbMPOW9W8f+>)48>)A|KLP`oImk<8Jlv~l@=EhZr5un}Y_tsnD#cu$|FZmFRTY(z^e z;^N^6bV?z58?w{`w4QQwE6NC{w2D~ns6eF4FWjnhlw#$Mr{& zs=bY6J!!V~#6UW284bhZ?EN7$my7ZlW~B-e{ZHjQIAu?mGQI}MIGGcZz@Fz74|G#a z^XyVnmP7E4X|)9DS3@!+xhwbAm+=jeL)V)&4lS_%kVUo79wqhXb)PjJ4VKUaEZ6Mf zQ}n$8grIiPzF=9e@c)+8ojVDAznlE7;WTCF8h32z&K~Ss2R5GBbRx)BD33w{vZ6Q&u+KZ?e?^aV6ciSxTZCi<3C$z0S&#rUepXPSR!{4rNId@|@p= z`~ABrDHICwhO{5~B*8*4ePb(XSWuACW%!>tT~{-EmmwR&+w-^(#GCf#B;d|7Ew z5C5E_{iL0&UMxG%k+wnxBH=6Z4t5ztniW|a#0i=+a-=m^$D$QFP%ys&gW{O5dWfiX z5l<&TtBdMXj>Y*OK2~J^_d-`s4L@CSaKR)Ip0gE0Dp=Kj`;HDJv&;BlL$xT@s1`bs~ttXD}$|fs!`d3VJ3(DNVYzhopfgR$NA-1s9 z(S+-Kd$ScZTYe0>wBY}{dPzOZHXNQf*tD}y_KF?0>Tkb_<$CUE5!25uN)I#mJISJs zAyxa98m#zQ0P<4;NR*;7leM$Ol!5K1vJ%~jds*VOfUPi-OA^Z-KJ`X)*bg1Xb_8U` zS>%($1|Y?~544>8fe#(GoTl9mKRfw(2E75N;~SFZJ>XG4DbpC6V=s&hNm5EJD%cM} zn}rzAv7K*L^T+5yiGAXdzWT!2L&e$y{EqNQI>r6gzTm3N1*)9$bu5n9vXhv1CG>$V zTsLJ{e}CHUoTC`PbX|BBKc4r3uIU$Uj=98bduKDAaOwn*}#~hDF<*e z12o4jSLDP(A{0e-M6F+A-Cl-pbzRJ1f+%TT{R%W&s4(naF8Ebe_Yz_wvYt)f&{(xm z^aHE>D=agmVD{-n&VxFr9O86e`0_xs_{p-*J`(ysgC$KhQ9jL{b&OB=tA6e)CuqLp zRmM!_ITDc3*!<-{e>DuKCq#anY)xk@TUs60hJ!;^%RN@uW%lQBqBR+FCljBUxrmh;80`$DA3zZZK1V?!)F+R-|9B%ujWA2Lwy)cGgXnI04kHe! zzfVZIv|e(q@`5A>8|gf`h7@3nxtM=etY{_`QbKLS)=RQVCtc2SjQyZSv9d)Uwg@LD z(sgM6Q!(0{CLKRj2F_X9VM^6|rp{M%QXs|z=xtGWUM{{io`8h2aLmGfh2134Qk@~5 zogm;>2Eef4V@!+c7?dUyD}1rrp@cq2#ytucd7!Dw_}YV^7Q}BaGyRQTT+N>M zEKEd*mO1>+OWTh(!}0Tc*<=8~N*2F$VK?2rM z+(%>A?(#2uG=wJ!y7imeTG-7?c@3`_^$o=IBb8X`fHb}Qmcd9|!W7(m=qD+yb>~~pIoQ88? z|BC0sO)JO_0?_O85DLiiM@{1h5JPeI6g~?Se?S*ej2&X;PebvjK63oTw-#Wu^6l%{ zXrv98YDYYWn%PKkK1z(;rNsZ;3 zJ4)rymfuW*onXD{$!F>tOX7)taz1(EXx+L`(U^#M%~NNYaqK6h2imJ6EG3q$+b z9Wet0Daai=CbKAXpsN;vQ=+ohiJpmk0);Ksi2gDhi|-Cus&=*4<`^?7lzyZ+Nb^6T zMH@*Q_f*V#0cselvhn0TRp1!m8x(r;yzG}I+g-x!H0SN$sYqE^ASkK-g0CCf-uw?J ziFo_`eucUL1n7HXjDI!LZm7$i`kyiUOzQF7sO$ox2OGFgS+v$~KE++PI;ARZ5*2L2 zr%B45RM$b7q)f)c=0eZ&gWuut zKuqy1j6y~&=)DkFGZP>=?Op(QN2KNWYF_h;;b_tfE^WIWHN)Z1+;?4Y&x%m@uHc-! zkJba4(-6vXjiR%|P({&MULvCx+^K%S!vURN7XJ_ZB|=_@{nH)X;bO*LZ_CSmK#L40 zD3{eGV=;cwq(VxG>r~?e)g#f>FYlg6@kDS6kq6So3^$zNCvha(Dn{+!JL7JS=i#nF zCjoNbCb7l@CaTQQGbQxR?=Vq!3w7R#XPEs+MY;Umq^Gjy4^^5^rARM2dLT@O+jl5+ z6@=aWJRvy|wcMdA*afO$SFynpL4GU?Y{b1f+hs%p$SsRch;9yhSrt?

uG^Q|*#w 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\"data\");\ + \n#/usb1/mikro_bak_rsa.pub\ + \n\ + \n#\ + \n#/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@1\ + 0.30.30.10.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.10.pub\";\ + \n#\ + \n#root.mnuc.backuper\ + \n\ + \n#/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@1\ + 0.30.30.81.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.81.pub\";\ + \n#:local Script AM-GlobalConfig;\ + \n#/system/script/add name=\$Script owner=\$Script source=([ /tool/fetch c\ + heck-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \".r\ + sc\") output=user as-value ]->\"data\");\ + \n#/usb1/mikro_bak_rsa.pub\ + \n#:local FetchFile AM-DOHCert.rsc\ + \n\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/tmp/\";\ + \n:global MkDir;\ + \n\ + \n:local FetchFile Binary.backup\ + \n:local localDir \"\";\ + \n\ + \n#\$MkDir \$localDir;\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \$FetchFile) dst-path=(\ + \$localDir . \$FetchFile);" +add comment="Example add WU servers to AddrList" dont-require-permissions=no \ + name=WU-add-to-list owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_Script to add target web sites DNS IP addresses into address list\r\ + \n# Tested with Mikrotik 6.4x\r\ + \n# Syed Jahanzaib / aacable@hotmail.com\r\ + \n# List name\r\ + \n:local LISTNAME \"windowsupdateslist\"\r\ + \n# Web site names which will be added in address list\r\ + \n:local TARGET1 \"update.microsoft.com\"\r\ + \n:local TARGET2 \"download.windowsupdate.com\"\r\ + \n:local TARGET3 \"download.microsoft.com\"\r\ + \n:local TARGET4 \"windowsupdate.com\"\r\ + \n:local TARGET5 \"ntservicepack.microsoft.com\"\r\ + \n:local TARGET6 \"wustat.windows.com\"\r\ + \n:local TARGET7 \"stats.microsoft.com\"\r\ + \n:local TARGET8 \"mp.microsoft.com\"\r\ + \n:local TARGET9 \"ws.microsoft.com\"\r\ + \n:local TARGET10 \"sls.update.microsoft.com.akadns.net\"\r\ + \n:local TARGET11 \"vortex.data.microsoft.com\"\r\ + \n:local TARGET12 \"vortex-win.data.microsoft.com\"\r\ + \n:local TARGET13 \"fe2.update.microsoft.com.akadns.net\"\r\ + \n:local TARGET14 \"statsfe2.update.microsoft.com.akadns.net\"\r\ + \n \r\ + \n# 1st time runner, check if address list is not created previously and a\ + dd entries in it for 1st time usage\r\ + \n:if ( [/ip firewall address-list find where list=\$LISTNAME] = \"\") do=\ + {\r\ + \n:log warning \"No address list for \$TARGET1 found ! creating and adding\ + \_resolved entry for 1st time usage ... zaib\"\r\ + \n \r\ + \n:local FirstAddr [resolve \$TARGET1];\r\ + \n\r\ + \n/ip firewall address-list add address=\$FirstAddr list=\$LISTNAME commen\ + t=\$TARGET1;\r\ + \n} else={\r\ + \n:log warning \"Previous List for \$LISTNAME found ! moving forward and c\ + hecking if DNS entries can be added in it ...\"\r\ + \n}\r\ + \n \r\ + \n# Check DNS entries and collect matching names\r\ + \n:foreach i in=[/ip dns cache find name~\"(\$TARGET1|\$TARGET2|\$TARGET3|\ + \$TARGET4|\$TARGET5|\$TARGET6|\$TARGET7|\$TARGET8|\$TARGET9|\$TARGET10|\$T\ + ARGET11|\$TARGET12|\$TARGET13|\$TARGET14)\" && \$type ~ \"^(A|CNAME)\\\$\"\ + \_] do={\r\ + \n \r\ + \n# Get IP Address from the names and hold it in temporary buffer\r\ + \n:local Buffer [/ip dns cache get \$i data];\r\ + \ndelay delay-time=10ms\r\ + \n \r\ + \n# Check if entry is already not exists, then OK, otherwise ignore duplic\ + ation\r\ + \n:if ( [/ip firewall address-list find where address=\$Buffer] = \"\") do\ + ={\r\ + \n \r\ + \n# Fetch DNS names for the entries\r\ + \n:local sitednsname [/ip dns cache get \$i name] ;\r\ + \n \r\ + \n# Print name in LOG window\r\ + \n:log info (\"added entry: \$sitednsname \$Buffer\");\r\ + \n \r\ + \n# Add IP addresses and there names to the address list\r\ + \n/ip firewall address-list add address=\$Buffer list=\$LISTNAME comment=\ + \$sitednsname;\r\ + \n}\r\ + \n}" +add comment="Add Hosts DNS names to NoWG addres list" \ + dont-require-permissions=no name=Add2vdsina owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_Script to add target web sites DNS IP addresses into address list\r\ + \n# Tested with Mikrotik 6.4x\r\ + \n# \r\ + \n# List name\r\ + \n:local LISTNAME \"NoWG\"\r\ + \n#\r\ + \n# Web site names which will be added in address list\r\ + \n:local TARGET1 \"comp-lenta.ru\"\r\ + \n:local TARGET2 \"ok.ru\"\r\ + \n:local TARGET3 \"vk.com\"\r\ + \n#:local TARGET4 \"smtp.mail.me.com\"\r\ + \n#:local TARGET4 \"windowsupdate.com\"\r\ + \n#:local TARGET5 \"ntservicepack.microsoft.com\"\r\ + \n#:local TARGET6 \"wustat.windows.com\"\r\ + \n#:local TARGET7 \"stats.microsoft.com\"\r\ + \n#:local TARGET8 \"mp.microsoft.com\"\r\ + \n#:local TARGET9 \"ws.microsoft.com\"\r\ + \n#:local TARGET10 \"sls.update.microsoft.com.akadns.net\"\r\ + \n#:local TARGET11 \"vortex.data.microsoft.com\"\r\ + \n#:local TARGET12 \"vortex-win.data.microsoft.com\"\r\ + \n#:local TARGET13 \"fe2.update.microsoft.com.akadns.net\"\r\ + \n#:local TARGET14 \"statsfe2.update.microsoft.com.akadns.net\"\r\ + \n \r\ + \n# 1st time runner, check if address list is not created previously and a\ + dd entries in it for 1st time usage\r\ + \n:if ( [/ip firewall address-list find where list=\$LISTNAME] = \"\") do=\ + {\r\ + \n:log warning \"No address list for \$TARGET1 found ! creating and adding\ + \_resolved entry for 1st time usage ... zaib\"\r\ + \n\r\ + \n:local FirstAddr [resolve \$TARGET1];\r\ + \n\r\ + \n/ip firewall address-list add address=\$FirstAddr list=\$LISTNAME commen\ + t=\$TARGET1;\r\ + \n\r\ + \n} else={\r\ + \n:log warning \"Previous List for \$LISTNAME found ! moving forward and c\ + hecking if DNS entries can be added in it ...\"\r\ + \n}\r\ + \n\r\ + \n# Check DNS entries and collect matching names\r\ + \n:foreach i in=[/ip dns cache find name~\"(\$TARGET1|\$TARGET2|\$TARGET3|\ + \$TARGET4)\" && \$type ~ \"^(A|CNAME)\\\$\" ] do={\r\ + \n\r\ + \n:log info (\"start entry: \$c \$sitednsname \$Buffer\");\r\ + \n\r\ + \n# Get IP Address from the names and hold it in temporary buffer\r\ + \n:local Buffer [/ip dns cache get \$i data];\r\ + \ndelay delay-time=10ms\r\ + \n:log info (\"1: \$Buffer\"); \r\ + \n\r\ + \n# Check if entry is already not exists, then OK, otherwise ignore duplic\ + ation\r\ + \n:if ( [/ip firewall address-list find where address=\$Buffer] = \"\") do\ + ={\r\ + \n\r\ + \n:log info (\"2: \$Buffer\"); \r\ + \n \r\ + \n# Fetch DNS names for the entries\r\ + \n:local sitednsname [/ip dns cache get \$i name] ;\r\ + \n \r\ + \n# Print name in LOG window\r\ + \n:log info (\"added entry: \$i \$sitednsname \$Buffer\");\r\ + \n \r\ + \n# Add IP addresses and there names to the address list\r\ + \n/ip firewall address-list add address=\$Buffer list=\$LISTNAME comment=\ + \$sitednsname;\r\ + \n}\r\ + \n}" +add comment="Flush DNS Cache" dont-require-permissions=no name=\ + DNS_Flush_Cache owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=\ + "/ip dns cache flush" +add comment="Certificates CloudFlare, Quad9 " dont-require-permissions=no \ + name=Update-Certificates owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_CloudFlare\r\ + \n#/tool/fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobalR\ + ootCA.crt.pem;\r\ + \n#/certificate/import file-name=DigiCertGlobalRootCA.crt.pem passphrase=\ + \"\";\r\ + \n#/tool/ fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobal\ + G2TLSRSASHA2562020CA1-1.crt.pem;\r\ + \n#/certificate/import file-name=DigiCertGlobalG2TLSRSASHA2562020CA1-1.crt\ + .pem passphrase=\"\";\r\ + \n# Quad9\r\ + \n#/tool/fetch mode=https url=\"https://cacerts.digicert.com/DigiCertGloba\ + lG3TLSECCSHA3842020CA1-1.crt.pem\"\r\ + \n#/certificate/import file-name=DigiCertGlobalG3TLSECCSHA3842020CA1-1.crt\ + .pem passphrase=\"\";\r\ + \n\r\ + \n:global GlobalScriptsUrl;\r\ + \n#google\r\ + \n:local CertName \"DigiCert-Global-Root-CA.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-CA\" [ find where common-na\ + me=\"DigiCert Global Root CA\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-CA.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-CA\" [ find where commo\ + n-name=\"DigiCert Assured ID Root CA\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-G2\" [ find where commo\ + n-name=\"DigiCert Assured ID Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-G3.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-G3\" [ find where commo\ + n-name=\"DigiCert Assured ID Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-G2-TLS-RSA-SHA256-2020-CA1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-G2-TLS-RSA-SHA256-2020-CA1\" [ f\ + ind where common-name=\"DigiCert Global G2 TLS RSA SHA256 2020 CA1\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-G3-TLS-ECC-SHA384-2020-CA1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-G3-TLS-ECC-SHA384-2020-CA1\" [ f\ + ind where common-name=\"DigiCert Global G3 TLS ECC SHA384 2020 CA1\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-Root-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-G2\" [ find where common-na\ + me=\"DigiCert Global Root G2\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-Root-G3.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-G3\" [ find where common-na\ + me=\"DigiCert Global Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-TLS-ECC-P384-Root-G5.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-TLS-ECC-P384-Root-G5\" [ find where com\ + mon-name=\"DigiCert TLS ECC P384 Root G5\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-TLS-RSA4096-Root-G5.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-TLS-RSA4096-Root-G5\" [ find where comm\ + on-name=\"DigiCert TLS RSA4096 Root G5\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Trusted-Root-G4.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Trusted-Root-G4\" [ find where common-n\ + ame=\"DigiCert Trusted Root G4\" ];\r\ + \n\r\ + \n:set CertName \"GTS-Root-R4.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"GTS-Root-R4\" [ find where common-name=\"GTS Roo\ + t R4\" ];\r\ + \n\r\ + \n:set CertName \"Go-Daddy-Root-Certificate-Authority-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Go-Daddy-Root-Certificate-Authority-G2\" [ find \ + where common-name=\"Go Daddy Root Certificate Authority - G2\" ];\r\ + \n\r\ + \n:set CertName \"ISRG-Root-X1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"ISRG-Root-X1\" [ find where common-name=\"ISRG R\ + oot X1\" ];\r\ + \n\r\ + \n:set CertName \"Root-YE.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Root-YE\" [ find where common-name=\"Root YE\" ]\ + ;\r\ + \n\r\ + \n:set CertName \"Starfield-Root-Certificate-Authority-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Starfield-Root-Certificate-Authority-G2\" [ find\ + \_where common-name=\"Starfield Root Certificate Authority - G2\" ];\r\ + \n\r\ + \n:set CertName \"USERTrust-RSA-Certification-Authority.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"USERTrust-RSA-Certification-Authority\" [ find w\ + here common-name=\"USERTrust RSA Certification Authority\" ];\r\ + \n\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"GTS-Root-RX.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#internet\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"ISRG-Root-X2.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n\r\ + \n\r\ + \n#/ip/dns/set allow-remote-requests=yes doh-max-concurrent-queries=100 do\ + h-max-server-connections=20 use-doh-server=https://security.cloudflare-dns\ + .com/dns-query verify-doh-cert=yes;\r\ + \n#/ip/dns/static remove [find where address=1.1.1.1];\r\ + \n#/ip/dns/static add address=1.1.1.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 1\";\r\ + \n#/ip/dns/ static remove [find where address=1.0.0.1];\r\ + \n#/ip/dns/static add address=1.0.0.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 2\"\r\ + \n#/ip dns static add address=2606:4700:4700::1111 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip dns static add address=2606:4700:4700::1001 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip/dns set servers=\"1.0.0.1, 8.8.4.4\";\r\ + \n#/ip/dns set servers=\"\";" +add dont-require-permissions=no name=script1 owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="/\ + tool/netwatch/add comment=\"doh-fallback, doh-url=https://security.cloudfl\ + are-dns.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=Clou\ + dFlare-doh IPv4 1\" host=1.1.1.1;\r\ + \n/tool/netwatch/add comment=\"doh, doh-url=https://security.cloudflare-dn\ + s.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=CloudFlare\ + -doh IPv4 2\" host=1.0.0.1;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.google/dns-query, doh-cert=DigiCert Global Root G2, notify, name=Goog\ + le-doh IPv4 1\" host=8.8.8.8;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.google/dns-query, doh-cert=DigiCert Global Root G2, notify, name=Goog\ + le-doh IPv4 2\" host=8.8.4.4;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.quad9.net/dns-query, doh-cert=DigiCert Global Root G3, notify, name=C\ + uad9-doh IPv4 1\" host=9.9.9.9;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.quad9.net/dns-query, doh-cert=DigiCert Global Root G3, notify, name=C\ + uad9-doh IPv4 2\" host=149.112.112.112;\r\ + \n\r\ + \n/tool/netwatch/add comment=\"dns, notify, name=ns1.unet.ws\" host=91.192\ + .189.2;" +add dont-require-permissions=no name=script2 owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \r\ + \n\r\ + \n:global InspectVar;\r\ + \n#:global RouterBoard;\r\ + \n#:do {:set RouterBoard [[ :parse \"/system/routerboard/get\" ]]} on-erro\ + r={}\r\ + \n#:global Resources;\r\ + \n#:do {:set Resources [[ :parse \"/system/resource/get\" ]]} on-error={}\ + \r\ + \n\r\ + \n#:global Updates;\r\ + \n#:do {:set Updates [[ :parse \"/system/package/update/get\" ]]} on-error\ + ={}\r\ + \n\r\ + \n#:global PkgUpdStatus \"undefined\";\r\ + \n#:local Update [/system/package/update/get];\r\ + \n#:retry command={:set PkgUpdStatus (\$Update->\"status\")} delay=200ms m\ + ax=5 on-error={};\r\ + \n\r\ + \n#:log warning [\$InspectVar \$RouterBoard];\r\ + \n#:put [\$InspectVar \$RouterBoard];\r\ + \n\r\ + \n#:retry command={/system/package/update check-for-updates without-paging\ + \_as-value} delay=300ms max=5 on-error={};\r\ + \n\r\ + \n#:global arrDeviceInfo ({});\r\ + \n#:local arrDeviceInfo ({\"section\":{\"key\":\"\"; \"value\":\"\";};});\ + \r\ + \n#:set (\$arrDeviceInfo->\"RouterBoard\") [[ :parse \"/system/routerboard\ + /get\" ]];\r\ + \n#:retry command={:set (\$arrDeviceInfo->\"Updates\") [[ :parse \"/system\ + /package/update/get\" ]]} delay=500ms max=5 on-error={:log error (\"Error\ + \")};\r\ + \n# [:toarray {\"section\"={\"key\"=\"\"; \"value\"=\"\";} }];\r\ + \n# [:toarray \"\"];\r\ + \n:local arrDeviceInfo ({});\r\ + \n\r\ + \n:set (\$arrDeviceInfo->\"devUpdates\") {\"channel\"; \"stable\";};\r\ + \n#:do {:set (arrDeviceInfo->\"Updates\") [[ :parse \"/system/package/upda\ + te/get\" ]]} on-error={:log error (\$error)}\r\ + \n\$InspectVar \$arrDeviceInfo;\r\ + \n" +add comment="Script for setup routeros script system" \ + dont-require-permissions=no name=AM-setup owner=AM-setup policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-setup\r\ + \n# Script comment: Script for setup routeros script system\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n# :local ScriptName [ :jobname ];\r\ + \n# Additional commands:\r\ + \n#\r\ + \n# For scripts:\r\ + \n#:global NewScript \"script_name\"; \r\ + \n#:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n#/system/script/add name=\$NewScript owner=\$NewScript source=([/tool/fe\ + tch check-certificate=yes-without-crl (\$GlobalScriptsUrl . \$ScriptAdd . \ + \".rsc\") output=user as-value ]->\"data\");\r\ + \n#:global NewScript (a);\r\ + \n#:global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n#\r\ + \n# For run from terminal:\r\ + \n#/system/script/add name=AM-setup owner=AM-Setup source=([/tool/fetch ch\ + eck-certificate=yes-without-crl \"https://ros.vados.ru/AM-setup.rsc\" outp\ + ut=user as-value ]->\"data\");\r\ + \n#\r\ + \n\r\ + \n:global ScriptUpdatesCRLF \"LF\";\r\ + \n#:if (\$ScriptUpdatesCRLF != false) do={\r\ + \n# :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vad\ + os\" ] do={\r\ + \n# if (\$ScriptUpdatesCRLF = true) do={\r\ + \n# /system/script/set source=[ :tocrlf [ get \$Script source ] ] \$S\ + cript;\r\ + \n# } else={\r\ + \n# /system/script/set source=[ :tolf [ get \$Script source ] ] \$Scr\ + ipt;\r\ + \n# }\r\ + \n# }\r\ + \n#}\r\ + \n\r\ + \n# /import verbose=no \$ScriptName\r\ + \n:global SetupScript [ :jobname ];\r\ + \n:global RemoveMe;\r\ + \n:global RunOnce;\r\ + \n:global InitSetup true;\r\ + \n:global tmpfs false;\r\ + \n\r\ + \n{\r\ + \n :local RmMe [:tobool \$1];\r\ + \n\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SetupScript;\r\ + \n :global RemoveMe;\r\ + \n :global InitSetup;\r\ + \n :global tmpfs;\r\ + \n \r\ + \n :local CertCommonName \"Root YE\";\r\ + \n :local CertFileName \"Root-YE.pem\";\r\ + \n :local CertFingerprint \"e14ffcad5b0025731006caa43a121a22d8e9700f4fb9c\ + f852f02a708aa5d5666\";\r\ + \n\r\ + \n :if (\$SetupScript = false) do={\r\ + \n :global SetupScript \"AM-setup\";\r\ + \n }\r\ + \n :if (\$RemoveMe != false) do={\r\ + \n :set RemoveMe true;\r\ + \n }\r\ + \n\r\ + \n :log warning (\"\\n\\\$GlobalScriptsUrl = \" . \$GlobalScriptsUrl);\r\ + \n \r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint ] \ + ] != 1) do={\r\ + \n :error \"Something is wrong with your certificates!\";\r\ + \n } else={\r\ + \n :if (!(((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" ||\ + \_\\\r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \"fetch\" || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\r\ + \n [ :len [ /certificate/builtin/find where common-name=\$CertComm\ + onName ] ] > 0)) do={\r\ + \n :put \"Importing certificate...\";\r\ + \n /tool/fetch (\$GlobalScriptsUrl . \"certs/ipall/\" . \$CertFileN\ + ame) dst-path=\$CertFileName as-value;\r\ + \n :delay 1s;\r\ + \n /certificate/import file-name=\$CertFileName passphrase=\"\";\r\ + \n :delay 1s;\r\ + \n };\r\ + \n };\r\ + \n\r\ + \n:local MkTmpfs do={\r\ + \n :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\r\ + \n :if ([ :len \$TmpFs ] = 1) do={\r\ + \n :if ([ /disk/get \$TmpFs disabled ] = true) do={\r\ + \n :log info (\"The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :log info (\"Try to removing directory 'tmpfs'.\");\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/remove tmpfs;\r\ + \n :return true;\r\ + \n } delay=100ms max=10;\r\ + \n } on-error={ }\r\ + \n# \$RmDir \"tmpfs\";\r\ + \n :onerror Err {\r\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource/g\ + et total-memory ] / 3);\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get tmpfs;\r\ + \n :return true;\r\ + \n } delay=222ms max=10;\r\ + \n } on-error={ }\r\ + \n } do={\r\ + \n :log warning (\"Creating disk of type tmpfs failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n# :return true;\r\ + \n}\r\ + \n:if (\$tmpfs = true) do={\r\ + \n :put \"Tmpfs variable is true. Checking for tmpfs/scripts directory...\ + \";\r\ + \n :if ([/file find name=\"tmpfs/scripts\"] != \"\") do={\r\ + \n :log info (\$0 . \"Directory tmpfs/scripts exsist.\");\r\ + \n :return \$true;\r\ + \n } else={\r\ + \n :log warning (\$0 . \"Directory tmpfs/scripts does't exsist.\");\r\ + \n :if ([ \$MkTmpfs ] = false) do={\r\ + \n :log error (\$0 . \"Directory tmpfs is not created!\");\r\ + \n :return false;\r\ + \n } else={\r\ + \n :onerror Err {\r\ + \n /file/add type=\"directory\" name=/tmpfs/scripts;\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get /tmpfs/scripts;\r\ + \n :return true;\r\ + \n } delay=100ms max=10;\r\ + \n } on-error={ }\r\ + \n } do={\r\ + \n :log warning (\$0 . \"Making directory 'scripts' failed: \" . \$\ + Err);\r\ + \n :return false;\r\ + \n }\r\ + \n# :return true;\r\ + \n# [ /file/get \$FileName ]\r\ + \n }\r\ + \n# :log error (\$0 . \"Directory tmpfs/scripts does not exsist. Remove\ + \_global variable tmpfs!\");\r\ + \n# :global tmpfs (a);\r\ + \n# return false;\r\ + \n }\r\ + \n}\r\ + \n :put \"Renaming AM-GlobalConfig, if exists...\";\r\ + \n :local ConfOldName (\"AM-GlobalConfig-\" . [ /system/clock/get date ] \ + . [ /system/clock/get time ] . \".rsc\");\r\ + \n /system/script/set name=\$ConfOldName [ find where name=\"AM-GlobalCon\ + fig\" ];\r\ + \n :foreach Script in={ \"AM-GlobalConfig\"; \"AM-GlobalFunc\" } do={\r\ + \n :put \"Installing \$Script...\";\r\ + \n /system/script/remove [ find where name=\$Script ];\r\ + \n /system/script/add name=\$Script owner=\$Script source=([ /tool/fetc\ + h check-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \ + \".rsc\") output=user as-value ]->\"data\");\r\ + \n \r\ + \n /system/script run \$Script;\r\ + \n :delay 2s;\r\ + \n };\r\ + \n\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint ] \ + ] > 0) do={\r\ + \n :put \"Renaming certificate by its common-name...\";\r\ + \n :global CertificateNameByCN;\r\ + \n \$CertificateNameByCN \$CertFingerprint;\r\ + \n };\r\ + \n\r\ + \n :if (\$RemoveMe = true) do={\r\ + \n :put \"Add Scheduler for remove this script...\";\r\ + \n :local OnEvent (\":delay 30s;\\n\" . \"/system/script/remove [ find \ + where name=\\\"\$SetupScript\\\" ];\\n\" . \\\r\ + \n \":delay 2s;\\n\" . \"/system/scheduler/remove [ find where name=\\\ + \"_RemoveSetup\\\" ];\\n\" . \\\r\ + \n \":delay 2s;\\n\" . \":global RemoveMe (a);\\n\");\r\ + \n :local Comment \"_RemoveSetup tmp scheduler for remove setup script.\ + \";\r\ + \n /system/scheduler/add name=\"_RemoveSetup\" comment=\$Comment start-\ + time=startup interval=30s on-event=\$OnEvent;\r\ + \n :log warning (\$0 . \"\\nI've done everything, and now I'm tired..\ + . I'm leaving.\\nThere will be an error below, this is normal.\");\r\ + \n }\r\ + \n :delay 1;\r\ + \n :put \"Loading configuration and functions...\";\r\ + \n :do { \r\ + \n :global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n :put \"Normal removing temporary global environment variables.\";\ + \r\ + \n :global SetupScript (a);\r\ + \n :global InitSetup (a);\r\ + \n :global RemoveMe (a);\r\ + \n } on-error={\r\ + \n :local ErrorMsg \"Loading configuration and functions error!\";\r\ + \n :log error (\$0 . \$ErrorMsg . :error);\r\ + \n :error \$ErrorMsg;\r\ + \n }\r\ + \n}\r\ + \n" +add comment="Global Config Script" dont-require-permissions=no name=\ + AM-GlobalConfig owner=AM-GlobalConfig policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GlobalConfig\r\ + \n# Script comment: Global Config Script\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# Warning: Dont touch this line!\r\ + \n:global Identity [ /system identity get name ];\r\ + \n:global GlobalConfReady false;\r\ + \n#\r\ + \n#\r\ + \n# Global Url For Amster scripts to fetch\r\ + \n# most be defined in AM-Init-Script or AM-setup scripts\r\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n:global ScriptsUrlSuffix \"\";\r\ + \n:global CheckSumsVerify true;\r\ + \n\r\ + \n:global ScriptUpdatesCRLF true;\r\ + \n:global CommentsInScripts true;\r\ + \n\r\ + \n# Debug output:\r\ + \n:global PrintDebug true; #false;\r\ + \n\r\ + \n# Debug output for specific script:\r\ + \n#:set (\$PrintDebugOverride->\"AM-GlobalFunc\") true;\r\ + \n\r\ + \n# Debug logs\r\ + \n# Other actions (disk, email, remote or support) can be used as well.\r\ + \n# I do not recommend using echo - use debug output instead (https://rsc.\ + eworm.de/main/DEBUG.html#debug-output).\r\ + \n#/system/logging/add topics=script,debug action=memory;\r\ + \n\r\ + \n:global MikrotikUpgradeUrl \"https://upgrade.mikrotik.com/routeros\";\r\ + \n:global Domain \"WORKGROUP\";\r\ + \n\r\ + \n:global EmailGeneralTo \"vados@vados.ru\";\r\ + \n#:global EmailGeneralCc \"\";\r\ + \n\r\ + \n# \$ScriptInstallUpdate mod/notification-telegram\r\ + \n:global TelegramTokenId \"8390868324:AAG3_d1hfVR2M6pGAgDK6ZvhOe4J97nyopw\ + \";\r\ + \n:global TelegramChatId \"-1003631309063\"; #\"454403445\";\r\ + \n# Use this to send notifications to a specific topic in group.\r\ + \n#:global TelegramThreadId \"30\";\r\ + \n# Using telegram-chat you have to define trusted chat ids (not group ids\ + !)\r\ + \n# or user names. Groups allow to chat with devices simultaneously.\r\ + \n:global TelegramChatIdsTrusted {\r\ + \n \"454403445\"\r\ + \n \"-1003631309063\"\r\ + \n \"-5124482807\"\r\ + \n \"1087968824\";\r\ + \n};\r\ + \n# \"-5294757340\";\r\ + \n\r\ + \n:global TelegramChatGroups \"(all)\";\r\ + \n#:global TelegramChatGroups \"(all|home|office)\";\r\ + \n\r\ + \n:global NotificationFunctions {\r\ + \n \"email\"\r\ + \n \"telegram\";\r\ + \n};\r\ + \n# Toggle this to disable symbols in notifications.\r\ + \n:global NotificationsWithSymbols true;\r\ + \n:global TerminalColorOutput true;\r\ + \n\r\ + \n:global DetectIpAddrDefault \"https://ipv4.mikrotik.ovh/\";\r\ + \n:global DetectIpAddrFallback \"https://api.ipify.org/\";\r\ + \n\r\ + \n## Update channel. Possible values: stable, long-term, testing, developm\ + ent\r\ + \n:global updateChannel \"stable\";\r\ + \n\r\ + \n:global CertRenewUrl (\$GlobalScriptsUrl . \"certs/\" . \$Identity . \"/\ + \");\r\ + \n:global CertRenewTime 2w;\r\ + \n:global CertRenewPass {\r\ + \n \"\";\r\ + \n# \"v3ry-s3cr3t\";\r\ + \n# \"4n0th3r-s3cr3t\";\r\ + \n};\r\ + \n:global CertWarnTime 1w;\r\ + \n:global CertIssuedExportPass {\r\ + \n \"\";\r\ + \n# \"cert1-cn\"=\"v3ry-s3cr3t\";\r\ + \n# \"cert2-cn\"=\"4n0th3r-s3cr3t\";\r\ + \n};\r\ + \n\r\ + \n# Script BackupAndUpdate mode, possible values: backup,\r\ + \n# updateOnce - Update once as \"osnotify\" and back \"osnotify\" mode (i\ + n terminal run :set OSUpdateMode updateOnce; \$OSUpdateMode;). \r\ + \n# osupdate - Update if available and creates backups before/after update\ + \_(ignores `forceBackup`)\r\ + \n# Set `forceBackup` to true to always create backups, even\ + \_without updates\r\ + \n# osnotify - Set `forceBackup` to always create backups on every run\r\ + \n:global DevInfoIncludeIP true;\r\ + \n:global BackupAndUpdateMode \"osnotify\"\r\ + \n\r\ + \n:global forceBackup true;\r\ + \n:global BackupPassword \"Peskar55\";\r\ + \n\r\ + \n# SFTP Backup Variables\r\ + \n:global BackupRandomDelay 0;\r\ + \n:global BackupUploadUrl \"sftp://amster.vados.ru/upload/\";\r\ + \n:global BackupUploadUser \$Identity;\r\ + \n:global BackupUploadPass \"root.mnuc.backuper\";\r\ + \n\r\ + \n:global BackupSendBinary true;\r\ + \n:global BackupSendExport true;\r\ + \n:global BackupSendGlobalConfig true;\r\ + \n:global BackupSendScripts true;\r\ + \n\r\ + \n# Remove local file after uploading if no errors\r\ + \n:global BackupRmLocal true;\r\ + \n\r\ + \n# Local Backups Root Directory \r\ + \n:global BackupLocalRoot \"tmpfs\";\r\ + \n\r\ + \n# Encrypt Backup\r\ + \n:global BackupEncrypt true;\r\ + \n\r\ + \n# Sensitive information in Backups\r\ + \n:global BackupSens true;\r\ + \n\r\ + \n# User Export\r\ + \n:global BackupUser true;\r\ + \n\r\ + \n# License Export (not for CHR, will silently skip)\r\ + \n:global BackupLicense false;\r\ + \n\r\ + \n# SSH Keys\r\ + \n:global BackupSshKeys true;\r\ + \n\r\ + \n# Certificate Export\r\ + \n:global BackupCerts true;\r\ + \n\r\ + \n# Certificate Password\r\ + \n:global BackupCertsPasswd \"\";\r\ + \n\r\ + \n# User-Manager Export\r\ + \n:global BackupUserMan false;\r\ + \n\r\ + \n# The Dude Export\r\ + \n:global BackupDude false;\r\ + \n\r\ + \n# User Files to export, comma-separated string or array of strings\r\ + \n# User Files are not removed on backup\r\ + \n# Any directory paths will be removed (/ -> _) on remote file\r\ + \n# Nonpresent files are silently skipped\r\ + \n:global BackupUserList \"autosupout.rif,autosupout.old.rif\";\r\ + \n\r\ + \n# load functions and any custom scripts\r\ + \n# [ /system/script/find where name=\"global-config-ov\ + erlay\" ], \\\r\ + \n# [ /system/script/find where name~\"^global-config-o\ + verlay\\\\.d/.\" ]\r\ + \n#\r\ + \n#:foreach Script in=([ /system/script/find where name=\"Amster-TGglobalV\ + ars\" ], [ /system/script/find where name=\"Amster-TGglobalFunc\" ]) do={\ + \r\ + \n# :onerror Err {\r\ + \n# /system/script/run \$Script;\r\ + \n# } do={\r\ + \n# :log error (\"Loading configuration from configs and functions\"\ + \_. [ /system/script/get \$Script name ] . \" failed: \" . \$Err);\r\ + \n# }\r\ + \n#}\r\ + \n#:log info \"\\ndevMode = \$devMode\";\r\ + \n#:log info \"\\ndevRunning = \$devRunning\";\r\ + \n:foreach Script in=[ /system/script/find where source~\"^#!rsc by Vados \ + GlobalRUN\\r\?\\n\" ] do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n :log error (\"Run script \" . [ /system/script/get \$Script name \ + ] . \" width marker \\\" GlobalRUN\\\" failed: \" . \$Err);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# signal we are ready\r\ + \n:set GlobalConfReady true;\r\ + \n:while (\$GlobalConfReady != true) do={:delay 500ms};\r\ + \n" +add comment="Global functions" dont-require-permissions=no name=AM-GlobalFunc \ + owner=AM-GlobalFunc policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GglobalFunc\r\ + \n# Script comment: Global functions\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch, scheduler\r\ + \n:local ExitOK false;\r\ + \n:local ScriptName [ :jobname ];\r\ + \n#:global checkRunJob \$SriptName;\r\ + \n#:global fixCRLF;\r\ + \n#:if (\$fixCRLF != false) do={\r\ + \n#:foreach fixScript in=([ /system/script/find where name~\"*\" ]) do={/s\ + ystem/script/set source=[ :tocrlf [ get \$fixScript source ] ] \$fixScript\ + }\r\ + \n#:if (\$fixCRLF != \"LF\") do={ /system/script/set source=[ :tocrlf [ g\ + et \$fixScript source ] ] \$fixScript};};\r\ + \n#}\r\ + \n:global GlobalFuncReady false;\r\ + \n\r\ + \n# Git commit id & info, expected configuration version\r\ + \n:global CommitId \"main/614/a7992fc8\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 01:00:03 05.05.2026.\";\r\ + \n\r\ + \n# The variables are received right here.\r\ + \n:global GlobalConfVersion 140;\r\ + \n\r\ + \n:global SumsDirAndFileName \"tmp/checksums.json\";\r\ + \n\r\ + \n:global Identity [/system/identity/get name];\r\ + \n:global IdentityShort [:pick \$Identity 0 18];\r\ + \n\r\ + \n:global devBoardName [/system/resource/get board-name];\r\ + \n:global devMode [/system/device-mode/get mode];\r\ + \n:global devCurArch [/system/resource/get architecture-name];\r\ + \n:global devCurVersion [/system/resource/get version];\r\ + \n\r\ + \n# Variables defined in AM-GlobalConfig.rsc\r\ + \n:global TerminalColorOutput;\r\ + \n:global CommentsInScripts;\r\ + \n:global DetectIpAddrDefault;\r\ + \n:global DetectIpAddrFallback;\r\ + \n:global updateChannel;\r\ + \n:global Domain;\r\ + \n:global EmailGeneralTo;\r\ + \n:global BackupAndUpdateMode;\r\ + \n\r\ + \n# Single functions, without nested functions.\r\ + \n:global MiniDateTimeStamp;\r\ + \n:global MicroDateTimeStamp;\r\ + \n\r\ + \n# Include globals \$PrintDebug and \$PrintDebugOverride\r\ + \n:global LogPrint;\r\ + \n\r\ + \n# DeviceInfo and Updates\r\ + \n:global IsCheckUpdates;\r\ + \n:global WaitCheckUpdates;\r\ + \n:global GetPubIp;\r\ + \n\r\ + \n:global GetArrDeviceInfo;\r\ + \n:global WaitArrDeviceInfo;\r\ + \n\r\ + \n:global devModel;\r\ + \n:global devRunningMode;\r\ + \n\r\ + \n:global devRbRevision;\r\ + \n:global devRbSerialNumber;\r\ + \n:global devRbVerAvail;\r\ + \n\r\ + \n:global runningChannelVersion;\r\ + \n:global runningChannel;\r\ + \n:global runningVersion;\r\ + \n\r\ + \n:global devBuildTime;\r\ + \n:global ROsVerAvail;\r\ + \n:global PkgUpdStatus;\r\ + \n:global currentUpdateChannel;\r\ + \n\r\ + \n:global ScriptInstallUpdate;\r\ + \n\r\ + \n:global DeviceInfo;\r\ + \n\r\ + \n:global OldMode;\r\ + \n\r\ + \n:global ParseKeyValueStore;\r\ + \n:global RandomDelay;\r\ + \n:global GetRandomNumber;\r\ + \n:global EscapeForRegEx;\r\ + \n:global CharacterMultiply;\r\ + \n:global CharacterReplace;\r\ + \n:global CleanFilePath;\r\ + \n:global CleanName;\r\ + \n\r\ + \n:global CommitBrief;\r\ + \n\r\ + \n:global EitherOr;\r\ + \n:global FormatLine;\r\ + \n:global GetRandom20CharAlNum;\r\ + \n:global GetRandom20CharHex;\r\ + \n:global GetRandomNumber;\r\ + \n:global Grep;\r\ + \n:global IfThenElse;\r\ + \n:global MAX;\r\ + \n:global MIN;\r\ + \n:global HumanReadableNum;\r\ + \n\r\ + \n:global IsFullyConnected;\r\ + \n:global IsDNSResolving;\r\ + \n:global IsTimeSync;\r\ + \n:global IsTimeSyncCached;\r\ + \n:global IsTimeSyncResetNtp;\r\ + \n\r\ + \n:global WaitDNSResolving;\r\ + \n:global WaitFullyConnected;\r\ + \n:global WaitTimeSync;\r\ + \n:global MkDir;\r\ + \n:global RmDir;\r\ + \n:global RmFile;\r\ + \n:global FileGet;\r\ + \n:global Unix2Dos;\r\ + \n:global UrlEncode;\r\ + \n:global WaitForFile;\r\ + \n:global ScriptLock;\r\ + \n:global SendTelegram;\r\ + \n:global NotificationFunctions;\r\ + \n:global SendNotification;\r\ + \n:global SendNotification2;\r\ + \n:global SymbolForNotification;\r\ + \n:global SymbolByUnicodeName;\r\ + \n:global ValidateSyntax;\r\ + \n:global CheckSumsVerify;\r\ + \n:global GlobalConfChanges;\r\ + \n:global GlobalConfMigration;\r\ + \n:global VersionToNum;\r\ + \n:global RequiredRouterOS;\r\ + \n:global ExitError;\r\ + \n:global ExitOnError;\r\ + \n\r\ + \n:global FetchHugeFiles;\r\ + \n:global FetchUserAgentStr;\r\ + \n:global FileExists;\r\ + \n:global CertificateAvailable;\r\ + \n:global CertificateDownload;\r\ + \n:global CertificateNameByCN;\r\ + \n:global CharacterMultiply;\r\ + \n\r\ + \n:global InspectVar;\r\ + \n:global InspectVarRet;\r\ + \n:global ParseCustom;\r\ + \n\r\ + \n:set IsCheckUpdates do={\r\ + \n :local isInfo [:tobool \$1];\r\ + \n :global updateChannel;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n :log info (\$0 . \" \\\$isInfo = \" . \$isInfo); \r\ + \n :local CurrentChannel [ /system/package/update/get channel ];\r\ + \n :if ([ :len \$updateChannel ] > 0 && \$CurrentChannel != \$updateChann\ + el) do={\r\ + \n :retry command={/system/package/update set channel=\$updateChannel} \ + \_delay=300ms max=5 on-error={};\r\ + \n :log info (\$0 . \" Set updates channel to: \$updateChannel\");\r\ + \n }\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local Channel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set currentUpdateChannel \$Channel;\r\ + \n :log info (\$0 . \" Update Channel: \" . \$Channel . \".\");\r\ + \n :local StatusPkg \"undefined\";\r\ + \n :log info (\$0 . \" Checking for updates...\");\r\ + \n :retry command={:set \$StatusPkg ([/system/package/update/check-for-up\ + dates without-paging as-value]->\"status\")} \\\r\ + \n delay=300ms max=5 on-error={};\r\ + \n :log info (\$0 . \" \\\$StatusPkg = \" . \$StatusPkg);\r\ + \n :if (\$StatusPkg = \"New version is available\") do={ :set PkgUpdStatu\ + s true; } else={ :set PkgUpdStatus false; }\r\ + \n :set ROsVerAvail [ :tostr [ /system/package/update/get latest-version \ + ] ];\r\ + \n :log info (\$0 . \" \\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if (\$isInfo != false || \$PkgUpdStatus = true) do={\r\ + \n :log info (\$0 . \" \\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :retry command={:set (\$arrDeviceInfo->\"devUpdates\") [ /system/pac\ + kage/update/get ]} delay=500ms max=5 on-error={:log error (\"Error\")};\r\ + \n :return true;\r\ + \n } else={\r\ + \n :return \$PkgUpdStatus;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set WaitCheckUpdates do={\r\ + \n :global IsCheckUpdates;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n :local Status \"\";\r\ + \n :local Update;\r\ + \n :local WaitCount 0;\r\ + \n :if ([ \$IsCheckUpdates true ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n :while ((\$Status = \"\" || \$Status = \"finding out latest version...\ + \") && \$WaitCount < 60) do={\r\ + \n :delay 1s;\r\ + \n :set WaitCount (\$WaitCount + 1);\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n }\r\ + \n :set Update [ /system/package/update/get ];\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n :if ((\$Update->\"status\") = \"New version is available\") do={\r\ + \n :set PkgUpdStatus true;\r\ + \n } else={\r\ + \n :set PkgUpdStatus false;\r\ + \n }\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :set (\$arrDeviceInfo->\"devUpdates\") \$Update;\r\ + \n :if (\$Status = \"\" || \$Status = \"finding out latest version...\") \ + do={\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set WaitArrDeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :while ([ \$GetArrDeviceInfo ] = false) do={\r\ + \n :delay 1s;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set GetArrDeviceInfo do={\r\ + \n :global LogPrint;\r\ + \n :global arrDeviceInfo;\r\ + \n :global devBoardName;\r\ + \n :global devModel;\r\ + \n :global devRunning;\r\ + \n :global devCurArch;\r\ + \n :global devRbRevision;\r\ + \n :global devRbSerialNumber;\r\ + \n :global devBuildTime;\r\ + \n :global runningChannelVersion;\r\ + \n :global runningChannel;\r\ + \n :global runningVersion;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n\r\ + \n :local DeviceInfo;\r\ + \n :local Resource [/system/resource/get];\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local VersionString [ :tostr (\$Resource->\"version\") ];\r\ + \n :local ChannelStart [ :find \$VersionString \" (\" ];\r\ + \n :local RouterBoard;\r\ + \n :local IsRouterBoard false;\r\ + \n :local RunningMode \"\";\r\ + \n\r\ + \n :set devCurArch [ :tostr (\$Resource->\"architecture-name\") ];\r\ + \n :set devBuildTime [ :tostr (\$Resource->\"build-time\") ];\r\ + \n :set runningChannelVersion \$VersionString;\r\ + \n :set runningVersion \$VersionString;\r\ + \n :set runningChannel \"\";\r\ + \n\r\ + \n :if ([ :typeof \$ChannelStart ] = \"num\" && \$ChannelStart >= 0) do=\ + {\r\ + \n :set runningVersion [ :pick \$VersionString 0 \$ChannelStart ];\r\ + \n :local ChannelRest [ :pick \$VersionString (\$ChannelStart + 2) [ :\ + len \$VersionString ] ];\r\ + \n :local ChannelEnd [ :find \$ChannelRest \")\" ];\r\ + \n :if ([ :typeof \$ChannelEnd ] = \"num\" && \$ChannelEnd >= 0) do={\ + \r\ + \n :set runningChannel [ :pick \$ChannelRest 0 \$ChannelEnd ];\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([:pick \$devBoardName 0 3] != \"CHR\" or [:pick \$devBoardName 0\ + \_3] != \"x86\") do={\r\ + \n :do {\r\ + \n :set RouterBoard [[ :parse \"/system/routerboard/get\" ]];\r\ + \n# :set RouterBoard [ /system/routerboard/get ];\r\ + \n :if ((\$RouterBoard->\"routerboard\") = true) do={\r\ + \n :set IsRouterBoard true;\r\ + \n }\r\ + \n } on-error={}\r\ + \n }\r\ + \n\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get mode ];\r\ + \n } on-error={\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get running ];\r\ + \n } on-error={\r\ + \n :set RunningMode \"\";\r\ + \n }\r\ + \n }\r\ + \n :set devRunning \$RunningMode;\r\ + \n\r\ + \n :if (\$IsRouterBoard = true) do={\r\ + \n :set devModel [ :tostr (\$RouterBoard->\"model\") ];\r\ + \n :set devRbRevision [ :tostr (\$RouterBoard->\"revision\") ];\r\ + \n :set devRbSerialNumber [ :tostr (\$RouterBoard->\"serial-number\") \ + ];\r\ + \n } else={\r\ + \n :set devModel \$devBoardName;\r\ + \n :set devRbRevision \"\";\r\ + \n :set devRbSerialNumber \"\";\r\ + \n }\r\ + \n\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n\r\ + \n :set (\$DeviceInfo->\"board-name\") \$devBoardName;\r\ + \n :set (\$DeviceInfo->\"architecture-name\") \$devCurArch;\r\ + \n :set (\$DeviceInfo->\"model\") \$devModel;\r\ + \n :set (\$DeviceInfo->\"revision\") \$devRbRevision;\r\ + \n :set (\$DeviceInfo->\"serial-number\") \$devRbSerialNumber;\r\ + \n :set (\$DeviceInfo->\"running-mode\") \$devRunning;\r\ + \n :set (\$DeviceInfo->\"build-time\") \$devBuildTime;\r\ + \n :set (\$DeviceInfo->\"running-channel-version\") \$runningChannelVers\ + ion;\r\ + \n :set (\$DeviceInfo->\"running-version\") \$runningVersion;\r\ + \n :set (\$DeviceInfo->\"running-channel\") \$runningChannel;\r\ + \n :set (\$DeviceInfo->\"routerboard\") \$IsRouterBoard;\r\ + \n :set (\$DeviceInfo->\"current-firmware\") [ :tostr (\$RouterBoard->\"\ + current-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"upgrade-firmware\") [ :tostr (\$RouterBoard->\"\ + upgrade-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"package-channel\") \$currentUpdateChannel;\r\ + \n :set (\$DeviceInfo->\"installed-version\") [ :tostr (\$Update->\"inst\ + alled-version\") ];\r\ + \n :set (\$DeviceInfo->\"latest-version\") \$ROsVerAvail;\r\ + \n :set (\$DeviceInfo->\"update-status\") [ :tostr (\$Update->\"status\"\ + ) ];\r\ + \n\r\ + \n :set arrDeviceInfo \$DeviceInfo;\r\ + \n :return \$DeviceInfo;\r\ + \n}\r\ + \n\r\ + \n:set DeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global IfThenElse;\r\ + \n :global FormatLine;\r\ + \n :global CommitBrief;\r\ + \n\r\ + \n :local License [/system/license/get];\r\ + \n :local Snmp [ /snmp/get ];\r\ + \n :local Info [ \$GetArrDeviceInfo ];\r\ + \n\r\ + \n :if ([ :typeof \$Info ] != \"array\") do={\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :return ( \\\r\ + \n [ \$FormatLine \"Hostname\" \$Identity ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"location\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Location\" (\$Snmp->\"location\") ] . \"\\n\") ]\ + \_. \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"contact\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Contact\" (\$Snmp->\"contact\") ] . \"\\n\") ] .\ + \_\\\r\ + \n \"Hardware:\\n\" . \\\r\ + \n [ \$FormatLine \" Board\" (\$Info->\"board-name\") ] . \"\\n\" . \ + \\\r\ + \n [ \$FormatLine \" Arch\" (\$Info->\"architecture-name\") ] . \"\\\ + n\" . \\\r\ + \n [ \$FormatLine \" Model\" (\$Info->\"model\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"revision\") ] > 0) \\\r\ + \n (\" \" . (\$Info->\"revision\")) ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"serial-number\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Serial\" (\$Info->\"serial-number\") ] . \"\ + \\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"nlevel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"nlevel\ + \")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS:\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"level\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"level\ + \")) ] . \"\\n\") ] . \\\r\ + \n [ \$FormatLine \" Channel\" (\$Info->\"package-channel\") ] . \"\ + \\n\" . \\\r\ + \n [ \$FormatLine \" Installed\" (\$Info->\"installed-version\") ] .\ + \_\"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"running-channel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Running\" ((\$Info->\"running-version\") . \ + \" (\" . (\$Info->\"running-channel\") . \")\") ] . \"\\n\") \\\r\ + \n ([ \$FormatLine \" Running\" (\$Info->\"running-version\") ] . \ + \"\\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"latest-version\") ] > 0 && \\\r\ + \n (\$Info->\"installed-version\") != (\$Info->\"latest-version\"))\ + \_\\\r\ + \n ([ \$FormatLine \" Available\" (\$Info->\"latest-version\") ] .\ + \_\"\\n\") ] . \\\r\ + \n [ \$IfThenElse ((\$Info->\"routerboard\") = true && \\\r\ + \n (\$Info->\"current-firmware\") != (\$Info->\"upgrade-firmware\")\ + ) \\\r\ + \n ([ \$FormatLine \" Firmware\" ((\$Info->\"current-firmware\") .\ + \_\" -> \" . (\$Info->\"upgrade-firmware\")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS-Scripts:\\n\" . \\\r\ + \n [ \$FormatLine \" Commit\" [ \$CommitBrief ] ] . \"\\n\" . \\\r\ + \n [ \$FormatLine \" Version\" \$GlobalConfVersion ]);\r\ + \n}\r\ + \n\r\ + \n:if ([ :typeof \$NotificationFunctions ] != \"array\") do={:set Notifica\ + tionFunctions ({})}\r\ + \n\r\ + \n:set GetRandom20CharAlNum do={\r\ + \n :global EitherOr;\r\ + \n :return [ :rndstr length=[ \$EitherOr [ :tonum \$1 ] 20 ] from=\"ABCDE\ + FGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\" ];\r\ + \n}\r\ + \n\r\ + \n:set GetRandom20CharHex do={:global EitherOr; :return [ :rndstr length=[\ + \_\$EitherOr [ :tonum \$1 ] 20 ] from=\"0123456789abcdef\" ]; }\r\ + \n:set GetRandomNumber do={:global EitherOr; :return [ :rndnum from=0 to=[\ + \_\$EitherOr [ :tonum \$1 ] 4294967295 ] ]; }\r\ + \n\r\ + \n:global checkRunJob;\r\ + \n:set checkRunJob do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLock; \r\ + \n :if ([ \$ScriptLock \$Script ] = false) do={:return false}\r\ + \n :foreach Job in=[ /system/script/job/find where script=\$Script ] do={\ + :set Job [ /system/script/job/get \$Job ];\r\ + \n :while ([ :typeof (\$Job->\"parent\") ] = \"id\") do={:set Job [ /sy\ + stem/script/job/get [ find where .id=(\$Job->\"parent\") ] ]}\r\ + \n :if ((\$Job->\"type\") = \"login\") do={:return true};}; :return fa\ + lse; \r\ + \n}\r\ + \n\r\ + \n:set InspectVar do={\r\ + \n :global InspectVarRet;\r\ + \n :put [ :tocrlf [ \$InspectVarRet \$1 ] ];\r\ + \n}\r\ + \n\r\ + \n:set CommitBrief do={\r\ + \n :global CommitId;\r\ + \n :global CommitInfo;\r\ + \n :if (\$CommitId = \"unknown\") do={\r\ + \n :return \"unknown\";\r\ + \n }\r\ + \n :return (\$CommitInfo . \"/\" . [ :pick \$CommitId 0 8 ]);\r\ + \n}\r\ + \n\r\ + \n:set InspectVarRet do={\r\ + \n :local Input \$1;\r\ + \n :local Level (0 + [ :tonum \$2 ]);\r\ + \n :global CharacterReplace;\r\ + \n :global IfThenElse;\r\ + \n :global InspectVarRet;\r\ + \n :local IndentReturn do={\r\ + \n :local Prefix [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Level [ :tonum \$3 ];\r\ + \n :global CharacterMultiply;\r\ + \n :return ([ \$CharacterMultiply \" \" (\$Level * 2) ] . \"-\" . \$Pre\ + fix . \"-> \" . \$Value);\r\ + \n }\r\ + \n :local TypeOf [ :typeof \$Input ];\r\ + \n :local Len [ :len \$Input ];\r\ + \n :local Return [ \$IndentReturn \"type\" \$TypeOf \$Level ];\r\ + \n :if (\$TypeOf = \"array\") do={\r\ + \n :foreach Key,Value in=\$Input do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"key\" \$Key (\$Level + 1) ] . \"\\n\" . \\\r\ + \n [ \$InspectVarRet \$Value (\$Level + 2) ]);\r\ + \n }\r\ + \n } else={\r\ + \n :if (\$TypeOf = \"str\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"len\" \$Len \$Level ]);\r\ + \n :if ([ :typeof [ :find \$Input (\"\\r\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\r\") \"\" ];\r\ + \n }\r\ + \n :if ([ :typeof [ :find \$Input (\"\\n\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\n\") \" \" ];\r\ + \n }\r\ + \n }\r\ + \n :if (\$TypeOf != \"nothing\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"value\" [ \$IfThenElse ([ :len \$Input ] > 80)\ + \_\\\r\ + \n ([ :pick \$Input 0 77 ] . \"...\") \$Input ] \$Level ]);\r\ + \n }\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set GetPubIp do={\r\ + \n :global DetectIpAddrDefault;\r\ + \n :global DetectIpAddrFallback;\r\ + \n\r\ + \n :local PubIpAddr false;\r\ + \n :local Url \$DetectIpAddrDefault;\r\ + \n :local JobName [ :jobname ];\r\ + \n\r\ + \n :do {\r\ + \n :log debug (\$0 . \" Trying to detect public IP using default serv\ + ice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=50ms max=5 on-error={:log error (\$JobName . \" Failed to \ + detect public IP using default service: \" . \$Url . \".\")}\r\ + \n } on-error={\r\ + \n :log error (\$0 . \" Failed to detect public IP using default serv\ + ice: \" . \$Url . \".\");\r\ + \n :set Url \$DetectIpAddrFallBack;\r\ + \n :log debug (\$0 . \" Trying to detect public IP using fallback ser\ + vice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=200ms max=5 on-error={:log error (\$JobName . \" Failed to\ + \_detect public IP using fallback service: \" . \$Url . \".\")}\r\ + \n };\r\ + \n :local IpLen ([ :len \$PubIpAddr ] -1);\r\ + \n :if (\$PubIpAddr = false) do={:set PubIpAddr \"not-detected\"} else=\ + {:set PubIpAddr [:pick \$PubIpAddr 0 \$IpLen]}\r\ + \n :return \$PubIpAddr;\r\ + \n}\r\ + \n\r\ + \n:set FormatLine do={\r\ + \n :local Key [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Indent [ :tonum \$3 ];\r\ + \n :local Spaces;\r\ + \n :local Return \"\";\r\ + \n :global CharacterMultiply;\r\ + \n :global EitherOr;\r\ + \n :set Indent [ \$EitherOr \$Indent 16 ];\r\ + \n :local Spaces [ \$CharacterMultiply \" \" \$Indent ];\r\ + \n :if ([ :len \$Key ] > 0) do={ :set Return (\$Key . \":\")}\r\ + \n :if ([ :len \$Key ] > (\$Indent - 2)) do={:set Return (\$Return . \"\\\ + n\" . [ :pick \$Spaces 0 \$Indent ] . \$Value);\r\ + \n } else={:set Return (\$Return . [ :pick \$Spaces 0 (\$Indent - [ :len \ + \$Return ]) ] . \$Value)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ParseCustom do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Start [:find [ \$Str ] [:tostr \$2]];\r\ + \n :local End [ :tostr \$3 ];\r\ + \n :local Num [ :tonum \$4 ];\r\ + \n :local Return;\r\ + \n :if ([:len \$Num] = 0) do={:set Num \"0\"}\r\ + \n :local rest [:pick \$Str (\$Start+\$Num) [:len \$Str]]; \r\ + \n :if ([:len \$End ] = 0) do={:set Return [:pick \$Str \$Num \$Start]} e\ + lse={\r\ + \n :set End [:find \$rest \$End];\r\ + \n :set Return [:pick \$rest 0 \$End];\r\ + \n }\r\ + \n:return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set LogPrint do={\r\ + \n :local Severity [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Message [ :tostr \$3 ];\r\ + \n :global PrintDebug;\r\ + \n :global PrintDebugOverride;\r\ + \n :global EitherOr;\r\ + \n :local Debug [ \$EitherOr (\$PrintDebugOverride->\$Name) \$PrintDebug \ + ];\r\ + \n :local PrintSeverity do={\r\ + \n :global TerminalColorOutput;\r\ + \n :if (\$TerminalColorOutput != true) do={:return \$1}\r\ + \n :local Color { debug=96; info=97; warning=93; error=91 };\r\ + \n :return (\"\\1B[\" . \$Color->\$1 . \"m\" . \$1 . \"\\1B[0m\");\r\ + \n}\r\ + \n :local Log ([ \$EitherOr \$Name \"\" ] . \": \" . \$Message);\ + \r\ + \n :if (\$Severity ~ (\"^(custom|debug|error|info)\\\$\")) do={\r\ + \n :if (\$Severity = \"debug\") do={:log debug \$Log}\r\ + \n :if (\$Severity = \"error\") do={:log error \$Log}\r\ + \n :if (\$Severity = \"info\" ) do={:log info \$Log}\r\ + \n } else={:log warning \$Log; :set Severity \"warning\"}\r\ + \n :if (\$Severity != \"debug\" || \$Debug = true) do={:put ([ \$PrintSev\ + erity \$Severity ] . \": \" . \$Message)}\r\ + \n}\r\ + \n\r\ + \n:set CertificateAvailable do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :local UseFor [ :tostr \$2 ];\r\ + \n\r\ + \n :global CertificateDownload;\r\ + \n :global ParseKeyValueStore;\r\ + \n\r\ + \n :if ([ :len \$UseFor ] = 0) do={\r\ + \n :log warning (\$0 . \"The intended use is undefined!\");\r\ + \n :set UseFor \"undefined\";\r\ + \n }\r\ + \n :if ([ /system/resource/get free-hdd-space ] < 8388608 && \\\r\ + \n [ /certificate/settings/get crl-download ] = true && \\\r\ + \n [ /certificate/settings/get crl-store ] = \"system\") do={\r\ + \n :log warning (\$0 . \"This system has low free flash space but \" . \ + \\\r\ + \n \"is configured to download certificate CRLs to system!\");\r\ + \n }\r\ + \n :if ([ :len \$CommonName ] = 0) do={\r\ + \n :log warning (\$0 . \"No CommonName given!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if (((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" || \\\ + \r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \$UseFor || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\r\ + \n [ :len [ /certificate/builtin/find where common-name=\$CommonName\ + \_] ] > 0) do={\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n :log info (\$0 . \"Certificate with CommonName '\" . \$CommonName . \ + \"' not available.\");\r\ + \n :if ([ \$CertificateDownload \$CommonName ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] > 1\ + ) do={\r\ + \n :log info (\$0 . \"There are \" . \$CertCount . \" Certificates with\ + \_CommonName '\" . \$CommonName . \"'. Should be ok.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :local CertVal [ /certificate/get [ find where common-name=\$CommonNam\ + e ] ];\r\ + \n :while ((\$CertVal->\"akid\") != \"\" && (\$CertVal->\"akid\") != (\$C\ + ertVal->\"skid\")) do={\r\ + \n :if ([ :len [ /certificate/find where skid=(\$CertVal->\"akid\") ] ]\ + \_= 0) do={\r\ + \n :local IssuerCN ([ \$ParseKeyValueStore (\$CertVal->\"issuer\") ]-\ + >\"CN\");\r\ + \n :log info (\$0 . \"Certificate chain for '\" . \$CommonName . \"' \ + is incomplete, missing '\" . \$IssuerCN . \"'.\");\r\ + \n :if ([ \$CertificateDownload \$IssuerCN ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :set CertVal [ /certificate/get [ find where skid=(\$CertVal->\"akid\ + \") ] ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateDownload do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :global ScriptUpdatesBaseUrl;\r\ + \n :global ScriptUpdatesUrlSuffix;\r\ + \n :global CertificateNameByCN;\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :log info (\$0 . \"Downloading and importing certificate with \" . \\\ + \r\ + \n \"CommonName '\" . \$CommonName . \"'.\");\r\ + \n :local FileName ([ \$CleanName \$CommonName ] . \".pem\");\r\ + \n :do {\r\ + \n /tool/fetch check-certificate=yes-without-crl mode=https http-header\ + -field=({ [ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n (\$ScriptUpdatesBaseUrl . \"certs/\" . \$FileName . \$ScriptUpdate\ + sUrlSuffix) \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n } on-error={\r\ + \n :log warning (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \\\r\ + \n \"' from repository! Trying fallback to mkcert.org...\");\r\ + \n :do {\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if ([ :len [ /certificate/find where common-name=\"ISRG Root X1\"\ + \_] ] = 0 && \\\r\ + \n !(((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" \ + || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \"fetch\" || \ + \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\ + \r\ + \n [ :len [ /certificate/builtin/find where common-name=\"ISRG\ + \_Root X1\" ] ] > 0)) do={\r\ + \n :log error (\$0 . \" Required certificate is not available.\");\ + \r\ + \n :return false;\r\ + \n }\r\ + \n /tool/fetch check-certificate=yes-without-crl mode=https http-head\ + er-field=({ [ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n url=\"https://mkcert.org/generate/\" http-data=[ :serialize to=jso\ + n ({ \$CommonName }) ] \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n :if ([ /file/get \$FileName size ] = 0) do={\r\ + \n \$RmFile \$FileName;\r\ + \n :error false;\r\ + \n }\r\ + \n } on-error={\r\ + \n :log error (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \"'!\");\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n /certificate/import file-name=\$FileName passphrase=\"\" as-value;\r\ + \n :delay 1s;\r\ + \n \$RmFile \$FileName;\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n /certificate/remove [ find where name~(\"^\" . \$FileName . \"_[0-9]\ + +\\\$\") ];\r\ + \n :log warning (\$0 . \" Certificate with CommonName '\" . \$CommonNam\ + e . \"' still unavailable!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :foreach Cert in=[ /certificate/find where name~(\"^\" . \$FileName . \ + \"_[0-9]+\\\$\") ] do={\r\ + \n \$CertificateNameByCN [ /certificate/get \$Cert common-name ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateNameByCN do={\r\ + \n :local Match [ :tostr \$1 ];\r\ + \n :global CleanName;\r\ + \n :local Cert ([ /certificate/find where (common-name=\$Match or fingerp\ + rint=\$Match or name=\$Match) ]->0);\r\ + \n :if ([ :len \$Cert ] = 0) do={\r\ + \n :log warning (\$0 .\" No matching certificate found.\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CommonName [ /certificate/get \$Cert common-name ];\r\ + \n /certificate/set \$Cert name=[ \$CleanName \$CommonName ];\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set FileExists do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local Type [ :tostr \$2 ];\r\ + \n :global FileGet;\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={ :return false; }\r\ + \n :if ([ :len (\$FileVal->\"size\") ] = 0) do={ :return false; }\r\ + \n :if ([ :len \$Type ] = 0 || \$FileVal->\"type\" = \$Type) do={ :return\ + \_true; }\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set Grep do={\r\ + \n :local Input ([ :tostr \$1 ] . \"\\n\");\r\ + \n :local Pattern [ :tostr \$2 ];\r\ + \n :if ([ :typeof [ :find \$Input \$Pattern ] ] = \"nil\") do={:return []\ + }\r\ + \n :do {\r\ + \n :local Line [ :pick \$Input 0 [ :find \$Input \"\\n\" ] ];\r\ + \n :if ([ :typeof [ :find \$Line \$Pattern ] ] = \"num\") do={:return \ + \$Line}\r\ + \n :set Input [ :pick \$Input ([ :find \$Input \"\\n\" ] + 1) [ :len \$\ + Input ] ];\r\ + \n } while=([ :len \$Input ] > 0);\r\ + \n :return [];\r\ + \n}\r\ + \n\r\ + \n:set HumanReadableNum do={\r\ + \n :local Input [ :tonum \$1 ];\r\ + \n :local Base [ :tonum \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global IfThenElse;\r\ + \n :local Prefix \"kMGTPE\";\r\ + \n :local Pow 1;\r\ + \n :set Base [ \$EitherOr \$Base 1024 ];\r\ + \n :local Bin [ \$IfThenElse (\$Base = 1024) \"i\" \"\" ];\r\ + \n :if (\$Input < \$Base) do={:return \$Input}\r\ + \n :for I from=0 to=[ :len \$Prefix ] do={\r\ + \n :set Pow (\$Pow * \$Base);\r\ + \n :if (\$Input / \$Base < \$Pow) do={\r\ + \n :set Prefix [ :pick \$Prefix \$I ];\r\ + \n :local Tmp1 (\$Input * 100 / \$Pow);\r\ + \n :local Tmp2 (\$Tmp1 / 100);\r\ + \n :if (\$Tmp2 >= 100) do={:return (\$Tmp2 . \$Prefix . \$Bin)}\r\ + \n :return (\$Tmp2 . \".\" . \\\r\ + \n [ :pick \$Tmp1 [ :len \$Tmp2 ] ([ :len \$Tmp1 ] - [ :len \$Tmp\ + 2 ] + 1) ] . \\\r\ + \n \$Prefix . \$Bin);\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set CleanFilePath do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CharacterReplace;\r\ + \n :while (\$Path ~ \"//\") do={ :set \$Path [ \$CharacterReplace \$Path \ + \"//\" \"/\" ]; }\r\ + \n :if ([ :pick \$Path 0 ] = \"/\") do={ :set Path [ :pick \$Path 1 [ :le\ + n \$Path ] ]; }\r\ + \n :if ([ :pick \$Path ([ :len \$Path ] - 1) ] = \"/\") do={ :set Path [ \ + :pick \$Path 0 ([ :len \$Path ] - 1) ]; }\r\ + \n :return \$Path;\r\ + \n}\r\ + \n\r\ + \n:set CleanName do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Return \"\";\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :typeof [ find \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqr\ + stuvwxyz0123456789\" \$Char ] ] = \"nil\") do={\r\ + \n :do {:if ([ :len \$Return ] = 0) do={:error true};\r\ + \n :if ([ :pick \$Return ([ :len \$Return ] - 1) ] = \"-\") do={:er\ + ror true}; :set Char \"-\"} on-error={:set Char \"\"}; \r\ + \n };\r\ + \n :set Return (\$Return . \$Char)};\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set RandomDelay do={\r\ + \n :local Time [ :tonum \$1 ];\r\ + \n :local Unit [ :tostr \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global GetRandomNumber;\r\ + \n :global MAX;\r\ + \n :if (\$Time = 0) do={:return false}\r\ + \n :delay ([ \$MAX 10 [ \$GetRandomNumber ([ :tonsec [ :totime (\$Time . \ + [ \$EitherOr \$Unit \"s\" ]) ] ] / 1000000) ] ] . \"ms\");\r\ + \n}\r\ + \n\r\ + \n:set EscapeForRegEx do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"^.[]\\\$()|*+\?{}\\\\\");\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :find \$Chars \$Char ]) do={:set Char (\"\\\\\" . \$Char)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ExitError do={\r\ + \n :local ExitOK [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Error [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :if (\$ExitOK = \"false\") do={\r\ + \n :log error (\$Name [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\\\$\") \ + \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with er\ + ror\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \ + \$Error) \".\" ]);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set ExitOnError do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :local Error [ :tostr \$2 ];\r\ + \n :global IfThenElse;\r\ + \n :log error (\$Name . \" \" . [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\ + \\\$\") \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with erro\ + r\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \$E\ + rror) \".\" ]);\r\ + \n}\r\ + \n\r\ + \n:set MiniDateTimeStamp do={\r\ + \n :local mikro [ :tobool \$1 ];\r\ + \n /system/clock;\r\ + \n :local vdate [get date];\r\ + \n :local vtime [get time];\r\ + \n :local vdoff [:toarray \"0,4,5,7,8,10\"];\r\ + \n :local MM [:pick \$vdate (\$vdoff->2) (\$vdoff->3)];\r\ + \n :local M [:tonum \$MM];\r\ + \n :if (\$vdate ~ \".../../....\") do={\r\ + \n :set vdoff [:toarray \"7,11,1,3,4,6\"];\r\ + \n :set M ([:find \"xxanebarprayunulugepctovecANEBARPRAYUNULUGE\ + PCTOVEC\" [:pick \$vdate (\$vdoff->2) (\$vdoff->3)] -1] / 2);\r\ + \n :if (\$M>12) do={:set M (\$M - 12)}\r\ + \n :set MM [:pick (100 + \$M) 1 3];\r\ + \n }\r\ + \n :local yyyy [:pick \$vdate (\$vdoff->0) (\$vdoff->1)];\r\ + \n :local dd [:pick \$vdate (\$vdoff->4) (\$vdoff->5)];\r\ + \n :local HH [:pick \$vtime 0 2];\r\ + \n :local mm [:pick \$vtime 3 5];\r\ + \n :local ss [:pick \$vtime 6 8];\r\ + \n :local Return;\r\ + \n :if (\$mikro = true) do={\r\ + \n :set Return ([:pick \$yyyy 2 4] . [:pick \$dd 0 1] . [:pick \$HH 0\ + \_1] . [:pick \$mm 3 4] . [:pick \$ss 6 7]);\r\ + \n } else={\r\ + \n :set Return ([\$yyyy] . [\$MM] . [\$dd] . [\$HH] . [\$mm] . [\$ss]);\ + \r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set WaitForFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local WaitTime [ :totime \$2 ];\r\ + \n :global CleanFilePath;\r\ + \n :global EitherOr;\r\ + \n :global MAX;\r\ + \n :set FileName [ \$CleanFilePath \$FileName ];\r\ + \n :local Delay ([ \$MAX [ \$EitherOr \$WaitTime 2s ] 100ms ] / 9);\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } delay=\$Delay max=10;\r\ + \n } on-error={ }\r\ + \n :while ([ :len [ /file/find where name=\$FileName ] ] > 0) do={\r\ + \n :do {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } on-error={ }\r\ + \n :delay \$Delay;\r\ + \n :set Delay (\$Delay * 3 / 2);\r\ + \n }\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set FileGet do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global WaitForFile;\r\ + \n :if ([ \$WaitForFile \$FileName 0s ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n :local FileVal false;\r\ + \n :do {\r\ + \n :set FileVal [ /file/get \$FileName ];\r\ + \n } on-error={ }\r\ + \n :return \$FileVal;\r\ + \n}\r\ + \n\r\ + \n:set RmDir do={\r\ + \n :local DirName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :log debug (\$0 . \" Removing directory: \". \$DirName);\r\ + \n :local DirVal [ \$FileGet \$DirName ];\r\ + \n :if (\$DirVal = false) do={\r\ + \n :log debug (\$0 . \" ... which does not exist.\");\r\ + \n :return true;\r\ + \n };\r\ + \n :if (\$DirVal->\"type\" != \"directory\") do={\r\ + \n :log error (\$0 . \" Directory '\" . \$DirName . \"' is not a direct\ + ory.\");\r\ + \n :return false;\r\ + \n };\r\ + \n :onerror Err {\r\ + \n /file/remove \$DirName;\r\ + \n } do={\r\ + \n :log error (\$0 . \" Removing directory '\" . \$DirName . \"' failed\ + : \" . \$Err);\r\ + \n :return false;\r\ + \n };\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set RmFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :log debug (\$0 . \" Removing file: \". \$FileName);\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={\r\ + \n :log debug (\$0 . \" ... which does not exist.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :if (\$FileVal->\"type\" = \"directory\" || \$FileVal->\"type\" = \"di\ + sk\") do={\r\ + \n :log error (\$0 . \" File '\" . \$FileName . \"' is not a file.\");\ + \r\ + \n :return false;\r\ + \n }\r\ + \n :onerror Err {\r\ + \n /file/remove \$FileName;\r\ + \n } do={\r\ + \n :log error (\$0 . \" Removing file '\" . \$FileName . \"' failed: \"\ + \_. \$Err); :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MkDir do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CleanFilePath;\r\ + \n :global FileGet;\r\ + \n :global RmDir;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :local MkTmpfs do={\r\ + \n :global WaitForFile;\r\ + \n :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\r\ + \n :if ([ :len \$TmpFs ] = 1) do={\r\ + \n :if ([ /disk/get \$TmpFs disabled ] = true) do={\r\ + \n :log info (\$0 . \" The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :log info (\$0 . \" Creating disk of type tmpfs.\");\r\ + \n \$RmDir \"tmpfs\";\r\ + \n :onerror Err {\r\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource\ + /get total-memory ] / 3);\r\ + \n \$WaitForFile \"tmpfs\";\r\ + \n } do={\r\ + \n :log warning (\$0 . \" Creating disk of type tmpfs failed: \" . \$\ + Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :set Path [ \$CleanFilePath \$Path ];\r\ + \n :if (\$Path = \"\") do={\r\ + \n :return true;\r\ + \n }\r\ + \n :log debug (\$0 . \" Making directory: \" . \$Path);\r\ + \n :local PathVal [ \$FileGet \$Path ];\r\ + \n :if (\$PathVal->\"type\" = \"directory\") do={\r\ + \n :log debug (\$0 . \" ... which already exists.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :pick \$Path 0 5 ] = \"tmpfs\") do={\r\ + \n :if ([ \$MkTmpfs ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n /file/add type=\"directory\" name=\$Path;\r\ + \n \$WaitForFile \$Path;\r\ + \n } do={\r\ + \n :log warning (\$0 . \" Making directory '\" . \$Path . \"' failed: \ + \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MAX do={:if (\$1 > \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n:set MIN do={:if (\$1 < \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set CharacterReplace do={\r\ + \n :local String [ :tostr \$1 ];\r\ + \n :local ReplaceFrom [ :tostr \$2 ];\r\ + \n :local ReplaceWith [ :tostr \$3 ];\r\ + \n :local Return \"\";\r\ + \n :if (\$ReplaceFrom = \"\") do={:return \$String}\r\ + \n :while ([ :typeof [ :find \$String \$ReplaceFrom ] ] != \"nil\") do={\ + \r\ + \n :local Pos [ :find \$String \$ReplaceFrom ];\r\ + \n :set Return (\$Return . [ :pick \$String 0 \$Pos ] . \$ReplaceWith);\ + \r\ + \n :set String [ :pick \$String (\$Pos + [ :len \$ReplaceFrom ]) [ :len\ + \_\$String ] ];\r\ + \n }\r\ + \n :return (\$Return . \$String);\r\ + \n}\r\ + \n\r\ + \n:set IfThenElse do={\r\ + \n :if ([ :tostr \$1 ] = \"true\" || [ :tobool \$1 ] = true) do={:return \ + \$2};\r\ + \n :return \$3;\r\ + \n}\r\ + \n\r\ + \n:set EitherOr do={\r\ + \n :global IfThenElse;\r\ + \n :if ([ :typeof \$1 ] = \"num\") do={:return [ \$IfThenElse (\$1 != 0) \ + \$1 \$2 ]}\r\ + \n :if ([ :typeof \$1 ] = \"time\") do={:return [ \$IfThenElse (\$1 > 0s)\ + \_\$1 \$2 ]}\r\ + \n# this works for boolean values, literal ones with parentheses\r\ + \n :return [ \$IfThenElse ([ :len [ :tostr \$1 ] ] > 0) \$1 \$2 ];\r\ + \n}\r\ + \n\r\ + \n:set ParseKeyValueStore do={\r\ + \n :local Source \$1;\r\ + \n :if ([ :pick \$Source 0 1 ] = \"{\") do={\r\ + \n :do {\r\ + \n :return [ :deserialize from=json \$Source ];\r\ + \n } on-error={ }\r\ + \n } \r\ + \n :if ([ :typeof \$Source ] != \"array\") do={:set Source [ :tostr \$1 ]\ + }\r\ + \n :local Result ({});\r\ + \n :foreach KeyValue in=[ :toarray \$Source ] do={\r\ + \n :if ([ :find \$KeyValue \"=\" ]) do={\r\ + \n :local Key [ :pick \$KeyValue 0 [ :find \$KeyValue \"=\" ] ];\r\ + \n :local Value [ :pick \$KeyValue ([ :find \$KeyValue \"=\" ] + 1) [\ + \_:len \$KeyValue ] ];\r\ + \n :if (\$Value=\"true\") do={:set Value true}\r\ + \n :if (\$Value=\"false\") do={:set Value false}\r\ + \n :set (\$Result->\$Key) \$Value;\r\ + \n } else={:set (\$Result->\$KeyValue) true}\r\ + \n }\r\ + \n :return \$Result;\r\ + \n}\r\ + \n:set RequiredRouterOS do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :local Required [ :tostr \$2 ];\r\ + \n :local Warn [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :global VersionToNum;\r\ + \n :if (!(\$Required ~ \"^\\\\d+\\\\.\\\\d+((alpha|beta|rc|\\\\.)\\\\d+|)\ + \\\$\")) do={\r\ + \n :log error (\$0 . \" No valid RouterOS version: \" . \$Required);\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ \$VersionToNum \$Required ] > [ \$VersionToNum [ /system/packag\ + e/update/get installed-version ] ]) do={\r\ + \n :if (\$Warn = \"true\") do={\r\ + \n :log warning (\$0 . \" This \" . [ \$IfThenElse ([ :pick \$Caller \ + 0 ] = (\"\\\$\")) \"function\" \"script\" ] . \\\r\ + \n \" '\" . \$Caller . \"' (at least specific functionality) requir\ + es RouterOS \" . \$Required . \". Please update!\");\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set ValidateSyntax do={\r\ + \n :local Code [ :tostr \$1 ];\r\ + \n :global LogPrint;\r\ + \n :onerror Err {\r\ + \n [ :parse (\":local Validate do={\\n\" . \$Code . \"\\n}\") ];\r\ + \n } do={\r\ + \n \$LogPrint debug \$0 (\"Valdation failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set VersionToNum do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Multi 0x1000000;\r\ + \n :local Return 0;\r\ + \n :global CharacterReplace;\r\ + \n :set Input [ \$CharacterReplace \$Input \".\" \",\" ];\r\ + \n :foreach I in={ \"zero\"; \"alpha\"; \"beta\"; \"rc\" } do={\r\ + \n :set Input [ \$CharacterReplace \$Input \$I (\",\" . \$I . \",\") ];\ + \r\ + \n }\r\ + \n :foreach Value in=([ :toarray \$Input ], 0) do={\r\ + \n :local Num [ :tonum \$Value ];\r\ + \n :if (\$Multi = 0x100) do={\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={\r\ + \n :set Return (\$Return + 0xff00);\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n } else={\r\ + \n :if (\$Value = \"zero\") do={ }\r\ + \n :if (\$Value = \"alpha\") do={ :set Return (\$Return + 0x3f00); \ + }\r\ + \n :if (\$Value = \"beta\") do={ :set Return (\$Return + 0x5f00); }\ + \r\ + \n :if (\$Value = \"rc\") do={ :set Return (\$Return + 0x7f00); }\r\ + \n }\r\ + \n }\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={ :set Return (\$Return + (\$Va\ + lue * \$Multi)); }\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ScriptLock do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local WaitMax [ :totime \$2 ];\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global ScriptLockOrder;\r\ + \n :if ([ :typeof \$ScriptLockOrder ] = \"nothing\") do={\r\ + \n :set ScriptLockOrder ({});\r\ + \n }\r\ + \n :if ([ :typeof (\$ScriptLockOrder->\$Script) ] = \"nothing\") do={\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :local JobCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :return [ :len [ /system/script/job/find where script=\$Script ] ];\ + \r\ + \n }\r\ + \n :local TicketCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :local Count 0;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:set Count (\$Count \ + + 1)}\r\ + \n }\r\ + \n :return \$Count;\r\ + \n }\r\ + \n :local IsFirstTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Check [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if (\$Ticket = \$Check) do={:return true}\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\" && \$Ticket != \$Check) d\ + o={:return false}\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :local AddTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Add [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :while (true) do={\r\ + \n :local Pos [ :len (\$ScriptLockOrder->\$Script) ];\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Pos) \$Add;\r\ + \n :delay 10ms;\r\ + \n :if ((\$ScriptLockOrder->\$Script->\$Pos) = \$Add) do={:return tru\ + e}\r\ + \n }\r\ + \n }\r\ + \n :local RemoveTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Remove [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Id,Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :while ((\$ScriptLockOrder->\$Script->\$Id) = \$Remove) do={\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Id);\r\ + \n :delay 10ms;\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n :local CleanupTickets do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:return false}\r\ + \n }\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :if ([ :typeof \$WaitMax ] = \"nil\" ) do={:set WaitMax 0s}\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\r\ + \n :log error (\$0 . \" A script named '\" . \$Script . \"' does not ex\ + ist!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$JobCount \$Script ] = 0) do={\r\ + \n \$LogPrint error \$0 (\"No script '\" . \$Script . \"' is running!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$TicketCount \$Script ] >= [ \$JobCount \$Script ]) do={\r\ + \n :log error (\$0 . \" More tickets than running scripts '\" . \$Scrip\ + t . \"', resetting!\");\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n /system/script/job/remove [ find where script=\$Script ];\r\ + \n }\r\ + \n :local MyTicket [ \$GetRandom20CharAlNum 6 ];\r\ + \n \$AddTicket \$Script \$MyTicket;\r\ + \n :local WaitInterval (\$WaitMax / 20);\r\ + \n :local WaitTime \$WaitMax;\r\ + \n :while (\$WaitTime > 0 && \\\r\ + \n ([ \$IsFirstTicket \$Script \$MyTicket ] = false || \\\r\ + \n [ \$TicketCount \$Script ] < [ \$JobCount \$Script ])) do={\r\ + \n :set WaitTime (\$WaitTime - \$WaitInterval);\r\ + \n :delay \$WaitInterval;\r\ + \n }\r\ + \n :if ([ \$IsFirstTicket \$Script \$MyTicket ] = true && \\\r\ + \n [ \$TicketCount \$Script ] = [ \$JobCount \$Script ]) do={\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$CleanupTickets \$Script;\r\ + \n :return true;\r\ + \n }\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$LogPrint debug \$0 (\"Script '\" . \$Script . \"' started more than \ + once\" . \\\r\ + \n [ \$IfThenElse (\$WaitTime < \$WaitMax) \" and timed out waiting for\ + \_lock\" \"\" ] . \"...\");\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set SendNotification do={ :onerror Err {\r\ + \n :global SendNotification2;\r\ + \n \$SendNotification2 ({ origin=\$0; subject=\$1; message=\$2; link=\$3;\ + \_silent=\$4 });\r\ + \n} do={:global ExitOnError; \$ExitOnError \$0 \$Err}\r\ + \n}\r\ + \n\r\ + \n:set SendNotification2 do={\r\ + \n :local Notification \$1;\r\ + \n :global NotificationFunctions;\r\ + \n :foreach FunctionName,Discard in=\$NotificationFunctions do={\r\ + \n (\$NotificationFunctions->\$FunctionName) (\"\\\$NotificationFunctio\ + ns->\\\"\" . \$FunctionName . \"\\\"\") \$Notification;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set SymbolByUnicodeName do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :global EitherOr;\r\ + \n :global SymbolsExtra;\r\ + \n :local Symbols ({\r\ + \n \"abacus\"=\"\\F0\\9F\\A7\\AE\";\r\ + \n \"alarm-clock\"=\"\\E2\\8F\\B0\";\r\ + \n \"arrow-down\"=\"\\E2\\AC\\87\";\r\ + \n \"arrow-up\"=\"\\E2\\AC\\86\";\r\ + \n \"calendar\"=\"\\F0\\9F\\93\\85\";\r\ + \n \"card-file-box\"=\"\\F0\\9F\\97\\83\";\r\ + \n \"chart-decreasing\"=\"\\F0\\9F\\93\\89\";\r\ + \n \"chart-increasing\"=\"\\F0\\9F\\93\\88\";\r\ + \n \"cloud\"=\"\\E2\\98\\81\";\r\ + \n \"cross-mark\"=\"\\E2\\9D\\8C\";\r\ + \n \"earth\"=\"\\F0\\9F\\8C\\8D\";\r\ + \n \"fire\"=\"\\F0\\9F\\94\\A5\";\r\ + \n \"floppy-disk\"=\"\\F0\\9F\\92\\BE\";\r\ + \n \"gear\"=\"\\E2\\9A\\99\";\r\ + \n \"heart\"=\"\\E2\\99\\A5\";\r\ + \n \"high-voltage-sign\"=\"\\E2\\9A\\A1\";\r\ + \n \"incoming-envelope\"=\"\\F0\\9F\\93\\A8\";\r\ + \n \"information\"=\"\\E2\\84\\B9\";\r\ + \n \"large-orange-circle\"=\"\\F0\\9F\\9F\\A0\";\r\ + \n \"large-red-circle\"=\"\\F0\\9F\\94\\B4\";\r\ + \n \"link\"=\"\\F0\\9F\\94\\97\";\r\ + \n \"lock-with-ink-pen\"=\"\\F0\\9F\\94\\8F\";\r\ + \n \"memo\"=\"\\F0\\9F\\93\\9D\";\r\ + \n \"mobile-phone\"=\"\\F0\\9F\\93\\B1\";\r\ + \n \"pushpin\"=\"\\F0\\9F\\93\\8C\";\r\ + \n \"scissors\"=\"\\E2\\9C\\82\";\r\ + \n \"scroll\"=\"\\F0\\9F\\93\\9C\";\r\ + \n \"smiley-partying-face\"=\"\\F0\\9F\\A5\\B3\";\r\ + \n \"smiley-smiling-face\"=\"\\E2\\98\\BA\";\r\ + \n \"smiley-winking-face-with-tongue\"=\"\\F0\\9F\\98\\9C\";\r\ + \n \"sparkles\"=\"\\E2\\9C\\A8\";\r\ + \n \"speech-balloon\"=\"\\F0\\9F\\92\\AC\";\r\ + \n \"star\"=\"\\E2\\AD\\90\";\r\ + \n \"warning-sign\"=\"\\E2\\9A\\A0\";\r\ + \n \"white-heavy-check-mark\"=\"\\E2\\9C\\85\"\r\ + \n }, \$SymbolsExtra);\r\ + \n :local Magic [ :pick [ /system/clock/get date ] 4 10 ];\r\ + \n :local Special {\r\ + \n \"information-04-01\"=\"\\F0\\9F\\9A\\BB\";\r\ + \n \"large-orange-circle-04-01\"=\"\\F0\\9F\\8D\\8A\";\r\ + \n \"large-orange-circle-10-31\"=\"\\F0\\9F\\8E\\83\";\r\ + \n \"large-red-circle-04-01\"=\"\\F0\\9F\\8D\\92\" };\r\ + \n :if ([ :len (\$Symbols->\$Name) ] = 0) do={\r\ + \n :log warning (\$0 . \"No symbol available for name '\" . \$Name . \"\ + '!\");\r\ + \n :return \"\";\r\ + \n }\r\ + \n :return ([ \$EitherOr (\$Special->(\$Name . \$Magic)) (\$Symbols->\$Na\ + me) ] . \"\\EF\\B8\\8F\");\r\ + \n}\r\ + \n\r\ + \n:set SymbolForNotification do={\r\ + \n :global NotificationsWithSymbols;\r\ + \n :global SymbolByUnicodeName;\r\ + \n :global IfThenElse;\r\ + \n :if (\$NotificationsWithSymbols != true) do={:return [ \$IfThenElse ([\ + \_:len \$2 ] > 0) ([ :tostr \$2 ] . \" \") \"\" ]}\r\ + \n :local Return \"\";\r\ + \n :foreach Symbol in=[ :toarray \$1 ] do={:set Return (\$Return . [ \$Sy\ + mbolByUnicodeName \$Symbol ])}\r\ + \n :return (\$Return . \" \");\r\ + \n}\r\ + \n\r\ + \n:set Unix2Dos do={:return [ :tocrlf [ :tostr \$1 ] ]}\r\ + \n:set UrlEncode do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"\\n\\r !\\\"#\\\$%&'()*+,:;<=>\?@[\\\\]^`{|}~\");\r\ + \n :local Subs { \"%0A\"; \"%0D\"; \"%20\"; \"%21\"; \"%22\"; \"%23\"; \"\ + %24\"; \"%25\"; \"%26\"; \"%27\";\r\ + \n \"%28\"; \"%29\"; \"%2A\"; \"%2B\"; \"%2C\"; \"%3A\"; \"%3B\"; \ + \"%3C\"; \"%3D\"; \"%3E\"; \"%3F\";\r\ + \n \"%40\"; \"%5B\"; \"%5C\"; \"%5D\"; \"%5E\"; \"%60\"; \"%7B\"; \ + \"%7C\"; \"%7D\"; \"%7E\" };\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :local Replace [ :find \$Chars \$Char ];\r\ + \n :if ([ :typeof \$Replace ] = \"num\") do={:set Char (\$Subs->\$Repla\ + ce)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set IsDNSResolving do={\r\ + \n :do {:resolve \"api.telegram.org\"} on-error={:return false}\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set IsFullyConnected do={\r\ + \n :global IsDNSResolving;\r\ + \n :global IsTimeSync;\r\ + \n :if ([ \$IsDNSResolving ] = false) do={:return false};\r\ + \n :if ([ \$IsTimeSync ] = false) do={:return false};\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set IsTimeSync do={\r\ + \n :global IsTimeSyncCached;\r\ + \n :global IsTimeSyncResetNtp;\r\ + \n :if (\$IsTimeSyncCached = true) do={:return true}\r\ + \n :if ([ /system/ntp/client/get enabled ] = true) do={\r\ + \n :if ([ /system/ntp/client/get status ] = \"synchronized\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :local Uptime [ /system/resource/get uptime ];\r\ + \n :if ([ :typeof \$IsTimeSyncResetNtp ] = \"nothing\") do={\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n }\r\ + \n :if (\$Uptime - \$IsTimeSyncResetNtp < 3m) do={:return false}\r\ + \n :log warning \"\$0 The ntp client is configured, but did not sync.\"\ + ;\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n /system/ntp/client/set enabled=no;\r\ + \n :delay 20ms;\r\ + \n /system/ntp/client/set enabled=yes;\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ /system/license/get ]->\"level\" = \"free\" || \\\r\ + \n [ /system/resource/get ]->\"board-name\" = \"x86\") do={\r\ + \n :log debug \"\$0 No ntp client configured, relying on RTC for CHR fr\ + ee license and x86.\";\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ /ip/cloud/get update-time ] = true) do={\r\ + \n :if ([ :typeof [ /ip/cloud/get public-address ] ] = \"ip\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :log debug \"\$0 No time source configured! Returning gracefully...\";\ + \r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n# read parts of a large file\r\ + \n# Description of parameters:\r\ + \n# \$1 - script name for logging and user agent\r\ + \n# \$2 - url to fetch from\r\ + \n# \$3 - check-certificate value for /tool/fetch (true/false)\r\ + \n# \$4 - mode value for /tool/fetch (optional, e.g. \"keep-broken\", \"ht\ + tps-only\", \"http-only\"\r\ + \n# \"no-redirects\", \"background\", \"background-and-keep-broken\",\ + \_\"background-and-https-only\",\r\ + \n# \"background-and-http-only\", \"background-and-no-redirects\", \"\ + background-and-keep-broken-and-https-only\", \"background-and-keep-broken-\ + and-http-only\",\r\ + \n# \"background-and-keep-broken-and-no-redirects\")\r\ + \n# \$5 - fetch method for /tool/fetch (optional, e.g. \"get\", \"head\", \ + \"post\", \"put\", \"patch\", \"delete\")\r\ + \n#:set FetchLargeFiles do={\r\ + \n# :local RunName [:tostr \$1];\r\ + \n# :local fetchUrl [:tostr \$2];\r\ + \n# :local fetchFile [:tostr \$3];\r\ + \n# :local CheckCert [:tostr \$4];\r\ + \n# :local fetchMode [:tostr \$5];\r\ + \n# :local fetchMethod [:tostr \$6];\r\ + \n# :local tmpName;\r\ + \n# :global CleanName;\r\ + \n# :global FetchUserAgentStr;\r\ + \n# :global GetRandom20CharAlNum;\r\ + \n# :global IfThenElse;\r\ + \n# :global LogPrint;\r\ + \n# :global MkDir;\r\ + \n# :global RmDir;\r\ + \n# :global RmFile;\r\ + \n# :global WaitForFile;\r\ + \n#\r\ + \n# :set CheckCert [ \$IfThenElse (\$CheckCert = \"false\") \"no\" \"yes-\ + without-crl\" ];\r\ + \n#\r\ + \n# :set tmpName (\$CleanName \"tmp-\" . [ \$GetRandom20CharAlNum 6 ]);\r\ + \n# :local DirName (\"tmpfs/\" . \$tmpName);\r\ + \n# :if ([ \$MkDir \$DirName ] = false) do={\r\ + \n# :log error (\$RunName . \" Failed creating directory: \" . \$DirNam\ + e . \"!\");\r\ + \n# :return false;\r\ + \n# }\r\ + \n#\r\ + \n# :local FileName (\$DirName . \"/\" . [ \$CleanName \$fetchFile ] . \"\ + -\" . [ \$GetRandom20CharAlNum 5 ]);\r\ + \n# :local Url (\$fetchUrl . \$fetchFile);\r\ + \n# :onerror Err {\r\ + \n# /tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName\ + \_\\\r\ + \n# http-header-field=({ [ \$FetchUserAgentStr \$RunName ] }) as-valu\ + e;\r\ + \n# } do={\r\ + \n# :if ([ \$WaitForFile \$FileName 500ms ] = true) do={\r\ + \n# \$RmFile \$FileName;\r\ + \n# }\r\ + \n# :log error (\$RunName . \" Failed downloading from '\" . \$Url . \"\ + ' - \" . \$Err);\r\ + \n# \$RmDir \$DirName;\r\ + \n# :return false;\r\ + \n# }\r\ + \n#\r\ + \n# :if ([ \$WaitForFile \$FileName 5s ] = false) do={\r\ + \n# :log error (\$RunName . \" The file downloaded from '\" . \$Url . \ + \"' did not show up.\");\r\ + \n# :return false;\r\ + \n# }\r\ + \n# \r\ + \n# :local FileSize [ /file/get \$FileName size ];\r\ + \n# :local Return \"\";\r\ + \n# :local VarSize 0;\r\ + \n# :while (\$VarSize != \$FileSize) do={\r\ + \n# :set Return (\$Return . ([ /file/read offset=\$VarSize chunk-size=3\ + 2768 file=\$FileName as-value ]->\"data\"));\r\ + \n# :set FileSize [ /file/get \$FileName size ];\r\ + \n# :set VarSize [ :len \$Return ];\r\ + \n# :if (\$VarSize > \$FileSize) do={\r\ + \n# :delay 100ms;\r\ + \n# }\r\ + \n# }\r\ + \n## \$RmFile \$FileName;\r\ + \n# \$RmDir \$DirName;\r\ + \n# :return \$Return;\r\ + \n#}\r\ + \n\r\ + \n:set FetchHugeFiles do={\r\ + \n :local ScriptName [ :tostr \$1 ];\r\ + \n :local Url [ :tostr \$2 ];\r\ + \n :local CheckCert [ :tostr \$3 ];\r\ + \n\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global MkDir;\r\ + \n :global RmDir;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :set CheckCert [ \$IfThenElse (\$CheckCert = \"false\") \"no\" \"yes-w\ + ithout-crl\" ];\r\ + \n\r\ + \n :local DirName (\"tmpfs/\" . [ \$CleanName \$ScriptName ]);\r\ + \n :if ([ \$MkDir \$DirName ] = false) do={\r\ + \n \$LogPrint error \$0 (\"Failed creating directory!\");\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :local FileName (\$DirName . \"/\" . [ \$CleanName \$0 ] . \"-\" . [ \ + \$GetRandom20CharAlNum ]);\r\ + \n :onerror Err {\r\ + \n /tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName \ + \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] }) as-va\ + lue;\r\ + \n } do={\r\ + \n :if ([ \$WaitForFile \$FileName 500ms ] = true) do={\r\ + \n \$RmFile \$FileName;\r\ + \n }\r\ + \n \$LogPrint debug \$0 (\"Failed downloading from \" . \$Url . \" - \"\ + \_. \$Err);\r\ + \n \$RmDir \$DirName;\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$WaitForFile \$FileName 5s ] = false) do={\r\ + \n \$LogPrint debug \$0 (\"The file downloaded from \" . \$Url . \" did\ + \_not show up.\");\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :local FileSize [ /file/get \$FileName size ];\r\ + \n :local Return \"\";\r\ + \n :local VarSize 0;\r\ + \n :while (\$VarSize != \$FileSize) do={\r\ + \n :set Return (\$Return . ([ /file/read offset=\$VarSize chunk-size=32\ + 768 file=\$FileName as-value ]->\"data\"));\r\ + \n :set FileSize [ /file/get \$FileName size ];\r\ + \n :set VarSize [ :len \$Return ];\r\ + \n :if (\$VarSize > \$FileSize) do={\r\ + \n :delay 100ms;\r\ + \n }\r\ + \n }\r\ + \n \$RmDir \$DirName;\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set FetchUserAgentStr do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global CommitBrief;\r\ + \n :global IfThenElse;\r\ + \n :local Resource [ /system/resource/get ];\r\ + \n :return (\"User-Agent: Mikrotik/\" . \$Resource->\"version\" . \" \" .\ + \_\$Resource->\"architecture-name\" . \\\r\ + \n \" \" . \$Caller . \"/Fetch (\" . \$GlobalScriptsUrl . \"; \" . [ \$\ + CommitBrief ] . \")\");\r\ + \n}\r\ + \n\r\ + \n:set ScriptInstallUpdate do={ :onerror Err {\r\ + \n :local Scripts [ :toarray \$1 ];\r\ + \n :local NewComment [ :tostr \$2 ];\r\ + \n :global InitSetup;\r\ + \n\r\ + \n :global CommitId;\r\ + \n :global ScriptUpdatesCRLF;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global CertificateAvailable;\r\ + \n :global CheckSumsVerify;\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SumsDirAndFileName;\r\ + \n :global GlobalScriptsUrlSuffix;\r\ + \n :global EitherOr;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global Grep;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global ParseKeyValueStore;\r\ + \n :global RequiredRouterOS;\r\ + \n :global SendNotification2;\r\ + \n :global SymbolForNotification;\r\ + \n :global ValidateSyntax;\r\ + \n :global CommentsInScripts;\r\ + \n\r\ + \n :if ([ \$CertificateAvailable \"Root YE\" \"fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, trying wit\ + hout.\");\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=\$Scripts do={\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\ + \r\ + \n \$LogPrint info \$0 (\"Adding new script: \" . \$Script);\r\ + \n /system/script/add name=\$Script owner=\$Script source=\"#!rsc by \ + Vados\\n\" comment=\$NewComment;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :local CommitIdBefore \$CommitId;\r\ + \n :local GlobalConfVersionBefore \$GlobalConfVersion;\r\ + \n :local ReloadGlobal false;\r\ + \n :local DeviceMode [ /system/device-mode/get ];\r\ + \n\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSums ({});\r\ + \n :do {\r\ + \n :local Url (\$GlobalScriptsUrl . \$SumsDirAndFileName . \$GlobalScr\ + iptsUrlSuffix);\r\ + \n \$LogPrint debug \$0 (\"Fetching checksums from url: \" . \$Url);\ + \r\ + \n :set CheckSums [ :deserialize from=json ([ /tool/fetch check-certi\ + ficate=yes-without-crl \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url output\ + =user as-value ]->\"data\") ];\r\ + \n } on-error={ \$LogPrint warning \$0 (\"Err = \" . \$Err); }\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vado\ + s\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :local ScriptInfo [ \$ParseKeyValueStore (\$ScriptVal->\"comment\") \ + ];\r\ + \n :local SourceNew;\r\ + \n\r\ + \n :foreach Scheduler in=[ /system/scheduler/find where on-event~(\"\\\ + \\b\" . \$ScriptVal->\"name\" . \"\\\\b\") ] do={\r\ + \n :local SchedulerVal [ /system/scheduler/get \$Scheduler ];\r\ + \n :if (\$ScriptVal->\"policy\" != \$SchedulerVal->\"policy\") do={\r\ + \n \$LogPrint warning \$0 (\"Policies differ for script '\" . \$Scr\ + iptVal->\"name\" . \"' and its scheduler '\" . \$SchedulerVal->\"name\" . \ + \"'!\");\r\ + \n }\r\ + \n }\r\ + \n :do {\r\ + \n :if (\$ScriptInfo->\"ignore\" = true) do={\r\ + \n \$LogPrint debug \$0 (\"Ignoring script '\" . \$ScriptVal->\"nam\ + e\" . \"', as requested.\");\r\ + \n :error true;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSum (\$CheckSums->(\$ScriptVal->\"name\"));\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Scri\ + ptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :convert transform=md5 to=hex [ :tolf (\$ScriptVal->\"sou\ + rce\") ] ] = \$CheckSum) do={\r\ + \n \$LogPrint debug \$0 (\"Checksum for script '\" . \$ScriptVal-\ + >\"name\" . \"' matches, ignoring.\");\r\ + \n :error true;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len (\$ScriptInfo->\"certificate\") ] > 0) do={\r\ + \n :if ([ \$CertificateAvailable (\$ScriptInfo->\"certificate\") \"\ + fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, tryi\ + ng without.\");\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n :local BaseUrl [ \$EitherOr (\$ScriptInfo->\"base-url\") \$Globa\ + lScriptsUrl ];\r\ + \n :local UrlSuffix [ \$EitherOr (\$ScriptInfo->\"url-suffix\") \$G\ + lobalScriptsUrlSuffix ];\r\ + \n :local Url (\$BaseUrl . \$ScriptVal->\"name\" . \".rsc\" . \$Url\ + Suffix);\r\ + \n \$LogPrint warning \$0 (\"Fetching script '\" . (\$ScriptVal->\"\ + name\") . \"' from url: \" . \$Url);\r\ + \n :local Result [ /tool/fetch check-certificate=yes-without-crl \\\ + \r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url outp\ + ut=user as-value ];\r\ + \n :if (\$Result->\"status\" = \"finished\") do={\r\ + \n :set SourceNew [ :tolf (\$Result->\"data\") ];\r\ + \n } \r\ + \n } do={\r\ + \n \$LogPrint warning \$0 (\"Failed fetching script '\" . \$ScriptV\ + al->\"name\" . \"': \" . \$Err);\r\ + \n :if (\$Err != \"Fetch failed with status 404\") do={\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$ScriptVal->\"source\" = \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Removing dummy. Typo on installation\ + \?\");\r\ + \n /system/script/remove \$Script;\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Sc\ + riptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :len \$CheckSum ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"Added the script manually\? Skip u\ + pdates with 'ignore=true' in comment.\");\r\ + \n }\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$SourceNew ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"No update for script '\" . (\$ScriptVal-\ + >\"name\") . \"'.\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :local SourceCRLF [ :tocrlf \$SourceNew ];\r\ + \n :if (\$InitSetup != true && ((\$ScriptVal->\"name\") != \"AM-Globa\ + lConfig\" || (\$ScriptVal->\"name\") != \"AM-GlobalFunc\")) do={\r\ + \n :if (\$SourceNew = (\$ScriptVal->\"source\") || \$SourceCRLF = (\ + \$ScriptVal->\"source\")) do={\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\") \ + . \"' source did not change. End of lines set to CRLF.\");\r\ + \n if (\$ScriptUpdatesCRLF = false) do={\r\ + \n :put [ :tolf \$SourceNew ];\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\"\ + ) . \"' source update end of lines to LF.\");\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([ :pick \$SourceNew 0 14 ] != \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Looks like new script '\" . \$ScriptVa\ + l->\"name\" . \"' is not valid (missing shebang = '\$shebang') Ignoring!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if (\$CommentsInScripts = true) do={\r\ + \n :local CommentLine [ \$Grep \$SourceNew (\"\\23 Script comment:\ + \_\") ];\r\ + \n :if ([ :len \$CommentLine ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"The search in new script '\" . (\$Scr\ + iptVal->\"name\") . \"' for comment in script body, is not found result Ig\ + noring!\");\r\ + \n :error false;\r\ + \n } else={\r\ + \n :if ([ :len (\$ScriptVal->\"comment\")] = 0 || [ :len (\$Scri\ + ptVal->\"comment\")] != [ :pick \$CommentLine ([ :find \$CommentLine \":\"\ + ] + 2) [ :len \$CommentLine] ]) do={\r\ + \n \$LogPrint debug \$0 (\"Exsiting comment for script '\" . (\ + \$ScriptVal->\"name\") . \"' is '\" . (\$ScriptVal->\"comment\") . \"'.\")\ + ;\r\ + \n :set (\$ScriptVal->\"comment\") [ :pick \$CommentLine ([ :f\ + ind \$CommentLine \":\"] + 2) [ :len \$CommentLine] ];\r\ + \n \$LogPrint debug \$0 (\"New comment (\" . (\$ScriptVal->\"c\ + omment\") . \") for script '\" . (\$ScriptVal->\"name\") . \"' has been ad\ + ded!\");\r\ + \n } else={\r\ + \n \$LogPrint debug \$0 (\"Comment for script '\" . (\$ScriptV\ + al->\"name\") . \"' did not change.\");\r\ + \n :error false;\r\ + \n }\r\ + \n } \r\ + \n }\r\ + \n\r\ + \n :local RequiredROS ([ \$ParseKeyValueStore [ \$Grep \$SourceNew (\ + \"\\23 requires RouterOS, \") ] ]->version);\r\ + \n :if ([ \$RequiredRouterOS \$0 [ \$EitherOr \$RequiredROS \"0.0\" ]\ + \_false ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires RouterOS \" . \\\r\ + \n \$RequiredROS . \", which is not met by your installation. I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :local RequiredDM [ \$ParseKeyValueStore [ \$Grep \$SourceNew (\"\ + \\23 requires device-mode, \") ] ];\r\ + \n :local MissingDM ({});\r\ + \n :foreach Feature,Value in=\$RequiredDM do={\r\ + \n :if ([ :typeof (\$DeviceMode->\$Feature) ] = \"bool\" && (\$Devi\ + ceMode->\$Feature) = false) do={\r\ + \n :set MissingDM (\$MissingDM, \$Feature);\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len \$MissingDM ] > 0) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires disabled \" . \\\r\ + \n \"device-mode features (\" . [ :tostr \$MissingDM ] . \"). I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$ValidateSyntax \$SourceNew ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Syntax validation for script '\" . (\$\ + ScriptVal->\"name\") . \"' failed! Ignoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n \r\ + \n :log info (\"Updating script: \" . (\$ScriptVal->\"name\") . \" Sc\ + ript comment: \" . (\$ScriptVal->\"comment\"));\r\ + \n\r\ + \n /system/script/set owner=(\$ScriptVal->\"name\") comment=(\$Script\ + Val->\"comment\") \\\r\ + \n source=[ \$IfThenElse (\$ScriptUpdatesCRLF = true) \$SourceCRL\ + F \$SourceNew ] \$Script;\r\ + \n :if (\$ScriptVal->\"name\" = \"AM-GlobalConfig\" || \\\r\ + \n \$ScriptVal->\"name\" = \"AM-GlobalFunc\" || \\\r\ + \n \$ScriptVal->\"name\" ~ (\"^(AM-GlobalFunc\\\\.d|mod)/.\")) d\ + o={\r\ + \n :set ReloadGlobal true;\r\ + \n }\r\ + \n } on-error={ }\r\ + \n }\r\ + \n :if (\$ReloadGlobal = true) do={\r\ + \n \$LogPrint info \$0 (\"Reloading global configuration and functions.\ + \");\r\ + \n :onerror Err {\r\ + \n :global InitSetup (a);\r\ + \n /system/script {run AM-GlobalConfig; run AM-GlobalFunc;};\r\ + \n } do={\$LogPrint error \$0 (\"Reloading global configuration and fun\ + ctions failed! \" . \$Err)}\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore > \$GlobalConfVersion) do={\r\ + \n \$LogPrint warning \$0 (\"The configuration version decreased from \ + \" . \\\r\ + \n \$GlobalConfVersionBefore . \" to \" . \$GlobalConfVersion . \\\r\ + \n \". Installed an older version\?\");\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore < \$GlobalConfVersion) do={\r\ + \n :global GlobalConfChanges;\r\ + \n :global GlobalConfMigration;\r\ + \n :local ChangeLogCode;\r\ + \n :if ([ :len \$ChangeLogCode ] > 0) do={\r\ + \n :if ([ \$ValidateSyntax \$ChangeLogCode ] = true) do={\r\ + \n :onerror Err {\r\ + \n [ :parse \$ChangeLogCode ];\r\ + \n } do={\$LogPrint warning \$0 (\"The changelog failed to run: \" \ + . \$Err)}\r\ + \n } else={\$LogPrint warning \$0 (\"The changelog failed syntax vali\ + dation!\")}\r\ + \n }\r\ + \n :if ([ :len \$GlobalConfMigration ] > 0) do={\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Migration (\$GlobalConfMigration->[ :tostr \$I ]);\r\ + \n :do {\r\ + \n :if ([ :typeof \$Migration ] != \"str\") do={\r\ + \n \$LogPrint debug \$0 (\"Migration code for change \" . \$I .\ + \_\" is not available.\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$ValidateSyntax \$Migration ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Migration code for change \" . \$I\ + \_. \" failed syntax validation!\");\r\ + \n :error false}\r\ + \n \$LogPrint info \$0 (\"Applying migration for change \" . \$I \ + . \": \" . \$Migration);\r\ + \n :onerror Err {\r\ + \n [ :parse \$Migration ];\r\ + \n } do={\$LogPrint warning \$0 (\"Migration code for change \" .\ + \_\$I . \" failed to run: \" . \$Err)}\r\ + \n } on-error={ }\r\ + \n }\r\ + \n }\r\ + \n :local NotificationMessage (\"The configuration version on \" . \$Id\ + entity . \" increased \" . \\\r\ + \n \"to \" . \$GlobalConfVersion . \", current configuration may nee\ + d modification. \" . \\\r\ + \n \"Please review and update global-config-overlay, then re-run glo\ + bal-config.\");\r\ + \n \$LogPrint info \$0 (\$NotificationMessage);\r\ + \n :if ([ :len \$GlobalConfChanges ] > 0) do={\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n\\nChanges:\ + \");\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Change (\$GlobalConfChanges->[ :tostr \$I ]);\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n \" . \\\ + \r\ + \n [ \$SymbolForNotification \"pushpin\" \"*\" ] . \$Change);\r\ + \n \$LogPrint info \$0 (\"Change \" . \$I . \": \" . \$Change);\r\ + \n }\r\ + \n } else={:set NotificationMessage (\$NotificationMessage . \"\\n\\nNe\ + ws and changes are not available.\")}\r\ + \n\r\ + \n :set GlobalConfChanges;\r\ + \n :set GlobalConfMigration;\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n} }\r\ + \n\r\ + \n# load modules\r\ + \n:foreach Script in=[ /system/script/find where name ~ \"^(global-functio\ + ns\\\\.d|mod)/.\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :if ([ \$ValidateSyntax (\$ScriptVal->\"source\") ] = true) do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' f\ + ailed to run: \" . \$Err);\r\ + \n }\r\ + \n } else={\r\ + \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' fai\ + led syntax validation, skipping.\");\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# Add and fix global scheduler\r\ + \n:put \"Add or/and fix Global scheduler...\";\r\ + \n:local OnEvent \"/system/script { run AM-GlobalConfig; run AM-GlobalFunc\ + ; }\";\r\ + \n:local Comment \"Every Day Set Global Environment Variables\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-SetGlobalEnv\" ] ] \ + = 0) do={\r\ + \n /system/scheduler/add name=\"AM-SetGlobalEnv\" comment=\$Comment on-ev\ + ent=\$OnEvent start-time=startup;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" comment ] != \$Comment)\ + \_do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" comment=\$Comment;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" on-event ] != \$OnEvent\ + ) do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" on-event=\$OnEvent;\r\ + \n}\r\ + \n# Add Update Script scheduler\r\ + \n:put \"Add or/and fix Update Script scheduler\";\r\ + \n:set OnEvent \":global ScriptInstallUpdate; \\\$ScriptInstallUpdate;\";\ + \r\ + \n:set Comment \"Every Day Check For Update Scripts\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-ScriptInstallUpdate\ + \" ] ] = 0) do={\r\ + \n/system/scheduler/add name=\"AM-ScriptInstallUpdate\" comment=\$Comment \ + start-time=startup interval=1d on-event=\$OnEvent;\r\ + \n}\r\ + \n\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady;\r\ + \n :retry { :if (\$GlobalConfReady != true) do={ :error (\"Global configs\ + \_not ready.\"); }; } delay=100ms max=5;\r\ + \n\r\ + \n:log warning (\"This script \$ScriptName Loaded \" . \\\r\ + \n [ \$IfThenElse (\$CommitId != \"unknown\") ([ \$CommitBrief ] . \" \ + \") ] . \\\r\ + \n \"on \" . \$devBoardName . \"\\nRouterOS: \" . \$devCurVersion . \"\ + \\nArchitecture: \" . \$devCurArch . \"\\nIdentity: \" . \$Identity);\r\ + \n # signal we are ready\r\ + \n:set GlobalFuncReady true;\r\ + \n:set ExitOK true;\r\ + \n\r\ + \n:log info (\$0 . \"Global configs ready!\");\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n}\r\ + \n" +add comment="download, import and update firewall address-lists" \ + dont-require-permissions=no name=AM-FwAddrLists owner=AM-FwAddrLists \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + source="#!rsc by Vados\r\ + \n# RouterOS script: AM-FwAddrLists\r\ + \n# Script comment: download, import and update firewall address-lists\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# https://ros.vados.ru/doc/fw-addr-lists.md\r\ + \n:local ExitOK false;\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady; :global GlobalFuncReady;\r\ + \n :retry { :if (\$GlobalConfReady != true || \$GlobalFuncReady != true) \ + \\\r\ + \n do={ :error (\"Global config and/or functions not ready.\"); }; } \ + delay=500ms max=50;\r\ + \n :local ScriptName [ :jobname ];\r\ + \n\r\ + \n :global GlobalScriptsUrl;\r\ + \n :local ListsDirName (\"fw-addr-lists.d/\" . [ /system identity get nam\ + e ] . \"/\");\r\ + \n :local ListsUrl (\$GlobalScriptsUrl . \$ListsDirName);\r\ + \n :local ListsIndex \"index.lst\";\r\ + \n :local AddrListsTimeOut 1d;\r\ + \n :local CheckCerts false;\r\ + \n\r\ + \n :global CertificateAvailable;\r\ + \n :global EitherOr;\r\ + \n :global FetchHugeFiles;\r\ + \n :global HumanReadableNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global NetMask4;\r\ + \n :global NetMask6;\r\ + \n :global ScriptLock;\r\ + \n \r\ + \n :local FindDelim do={\r\ + \n :local ValidChars \"0123456789.:/ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghi\ + jklmnopqrstuvwxyz-\";\r\ + \n :for I from=0 to=[ :len \$1 ] do={\r\ + \n :if ([ :typeof [ :find \$ValidChars [ :pick (\$1 . \" \") \$I ] ] \ + ] != \"num\") do={\r\ + \n :return \$I;\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :local GetBranch do={\r\ + \n :global EitherOr;\r\ + \n :return [ :pick [ :convert transform=md5 to=hex [ :pick \$1 0 [ \$Ei\ + therOr [ :find \$1 \"/\" ] [ :len \$1 ] ] ] ] 0 2 ];\r\ + \n }\r\ + \n \r\ + \n :if ([ \$ScriptLock \$ScriptName ] = false) do={\r\ + \n :set ExitOK true;\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :local ListComment (\"managed by \" . \$ScriptName);\r\ + \n :local Url (\$ListsUrl . \$ListsIndex);\r\ + \n :local tmpIndex false;\r\ + \n\r\ + \n :for I from=1 to=5 do={\r\ + \n :if (\$tmpIndex = false) do={\r\ + \n :set tmpIndex [ :tolf [ \$FetchHugeFiles \$ScriptName \$Url \$Chec\ + kCerts ] ];\r\ + \n :if (\$tmpIndex = false && \$I < 5) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading address-list \ + index, \" . \$I . \". try from: \" . \$Url);\r\ + \n :delay ((\$I * \$I) . \"s\");\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n :if (\$tmpIndex = false) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading address-list inde\ + x from: \" . \$Url);\r\ + \n :set tmpIndex \"\";\r\ + \n }\r\ + \n :local ReadFile (\"tmpfs/\" .\$tmpIndex);\r\ + \n :local filebody [/file/get \$ReadFile contents];\r\ + \n:foreach fwList in=[:deserialize \$ReadFile delimiter=\"\\n\" from=dsv o\ + ptions=dsv.plain] do={\r\ + \n :log error \$fwList;\r\ + \n}\r\ + \n\r\ + \n\r\ + \n :foreach List in=[ :deserialize \$tmpIndex delimiter=\"\\n\" from=dsv \ + options=dsv.plain ] do={\r\ + \n :set List (\$List->0);\r\ + \n :local ListName;\r\ + \n :local Delim [ \$FindDelim \$List ];\r\ + \n :if (\$Delim = 0) do={ :set List \"\"; };\r\ + \n :log warning (\$ScriptName . \" Parsing address-list index entry: \"\ + \_. \$List);\r\ + \n :if ([ :len \$List ] = 0) do={\r\ + \n :log error (\$ScriptName . \" Failed parsing address-list index en\ + try: \" . \$List);\r\ + \n } else={\r\ + \n :set ListName [ :pick \$List 0 \$Delim ];\r\ + \n }\r\ + \n :log warning (\$ScriptName . \" Parsing address-list index entry: \"\ + \_. \$ListName . \" - Ok.\");\r\ + \n :local ListUrl (\$ListsUrl . \$ListName);\r\ + \n :local CntAdd 0;\r\ + \n :local CntRenew 0;\r\ + \n :local CntRemove 0;\r\ + \n :local IPv4Addresses ({});\r\ + \n :local IPv6Addresses ({});\r\ + \n :local Failure false;\r\ + \n :local Data false;\r\ + \n :local TimeOut \$AddrListTimeOut;\r\ + \n\r\ + \n :for I from=1 to=5 do={\r\ + \n :if (\$Data = false) do={\r\ + \n :set Data [ :tolf [ \$FetchHugeFiles \$ScriptName \$ListUrl \$Ch\ + eckCerts ] ];\r\ + \n :if (\$Data = false && \$I < 5) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading for list '\ + \" . \$ListName . \"', \" . \$I . \". try from: \" . \$ListUrl);\r\ + \n :delay ((\$I * \$I) . \"s\");\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if (\$Data = false) do={\r\ + \n :set Data \"\";\r\ + \n :set Failure true;\r\ + \n :log warning (\$ScriptName . \" Failed downloading for list '\" . \ + \$ListName . \"' from: \" . \$ListUrl);\r\ + \n } else={\r\ + \n :log debug (\$ScriptName . \" Downloaded \" . [ \$HumanReadableNum\ + \_[ :len \$Data ] 1024 ] . \"B for list '\" . \$ListName . \"' from: \" . \ + \$ListUrl);\r\ + \n }\r\ + \n\r\ + \n :foreach Line in=[ :deserialize \$Data delimiter=\"\\n\" from=dsv op\ + tions=dsv.plain ] do={\r\ + \n :set Line (\$Line->0);\r\ + \n :local Address;\r\ + \n :if ([ :pick \$Line 0 1 ] = \"{\" && [ :pick \$Line ([ :len \$Line\ + \_] - 1) ] = \"}\") do={\r\ + \n :do {\r\ + \n :set Address [ :tostr ([ :deserialize from=json \$Line ]->\"ci\ + dr\") ];\r\ + \n } on-error={ }\r\ + \n } else={\r\ + \n :set Address ([ :pick \$Line 0 [ \$FindDelim \$Line ] ] . (\$L\ + ist->\"cidr\"));\r\ + \n }\r\ + \n :do {\r\ + \n :local Branch;\r\ + \n :if (\$Address ~ \"^[0-9]{1,3}\\\\.[0-9]{1,3}\\\\.[0-9]{1,3}\\\\\ + .[0-9]{1,3}(/[0-9]{1,2})\?\\\$\") do={\r\ + \n :local Net \$Address;\r\ + \n :local CIDR 32;\r\ + \n :local Slash [ :find \$Address \"/\" ];\r\ + \n :if ([ :typeof \$Slash ] = \"num\") do={\r\ + \n :set Net [ :toip [ :pick \$Address 0 \$Slash ] ]\r\ + \n :set CIDR [ :pick \$Address (\$Slash + 1) [ :len \$Address ]\ + \_];\r\ + \n :set Address [ :tostr (([ :toip \$Net ] & [ \$NetMask4 \$CID\ + R ]) . [ \$IfThenElse (\$CIDR < 32) (\"/\" . \$CIDR) ]) ];\r\ + \n }\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n }\r\ + \n :if (\$Address ~ \"^[0-9a-zA-Z]*:[0-9a-zA-Z:\\\\.]+(/[0-9]{1,3})\ + \?\\\$\") do={\r\ + \n :local Net \$Address;\r\ + \n :local CIDR 128;\r\ + \n :local Slash [ :find \$Address \"/\" ];\r\ + \n :if ([ :typeof \$Slash ] = \"num\") do={\r\ + \n :set Net [ :toip6 [ :pick \$Address 0 \$Slash ] ]\r\ + \n :set CIDR [ :pick \$Address (\$Slash + 1) [ :len \$Address ]\ + \_];\r\ + \n }\r\ + \n :set Address (([ :toip6 \$Net ] & [ \$NetMask6 \$CIDR ]) . \"/\ + \" . \$CIDR);\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n }\r\ + \n :if (\$Address ~ \"^[\\\\.a-zA-Z0-9-]+\\\\.[a-zA-Z]{2,}\\\$\") d\ + o={\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n }\r\ + \n } on-error={ }\r\ + \n }\r\ + \n \r\ + \n\r\ + \n :foreach Entry in=[ /ip/firewall/address-list/find where \\\r\ + \n list=\$ListName comment=\$ListComment ] do={\r\ + \n :local Address [ /ip/firewall/address-list/get \$Entry address ];\ + \r\ + \n :local Branch [ \$GetBranch \$Address ];\r\ + \n :local TimeOut (\$IPv4Addresses->\$Branch->\$Address);\r\ + \n :if ([ :typeof \$TimeOut ] = \"time\") do={\r\ + \n :log warning (\$ScriptName . \" Renewing IPv4 address \" . \$Add\ + ress . \\\r\ + \n \" in list '\" . \$ListName . \"' with \" . \$TimeOut . \".\ + \");\r\ + \n /ip/firewall/address-list/set \$Entry timeout=\$TimeOut;\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address);\r\ + \n :set CntRenew (\$CntRenew + 1);\r\ + \n } else={\r\ + \n :if (\$Failure = false) do={\r\ + \n :log warning (\$ScriptName . \" Removing IPv4 address \" . \$A\ + ddress . \\\r\ + \n \" from list '\" . \$ListName . \".\");\r\ + \n /ip/firewall/address-list/remove \$Entry;\r\ + \n :set CntRemove (\$CntRemove + 1);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach Entry in=[ /ipv6/firewall/address-list/find where \\\r\ + \n list=\$ListName comment=\$ListComment ] do={\r\ + \n :local Address [ /ipv6/firewall/address-list/get \$Entry address ]\ + ;\r\ + \n :local Branch [ \$GetBranch \$Address ];\r\ + \n :local TimeOut (\$IPv6Addresses->\$Branch->\$Address);\r\ + \n :if ([ :typeof \$TimeOut ] = \"time\") do={\r\ + \n :log warning (\$ScriptName . \" Renewing IPv6 address \" . \$Add\ + ress . \\\r\ + \n \" in list '\" . \$ListName . \"' with \" . \$TimeOut . \".\ + \");\r\ + \n /ipv6/firewall/address-list/set \$Entry timeout=\$TimeOut;\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address);\r\ + \n :set CntRenew (\$CntRenew + 1);\r\ + \n } else={\r\ + \n :if (\$Failure = false) do={\r\ + \n :log warning (\$ScriptName . \" Removing IPv6 address \" . \$A\ + ddress . \\\r\ + \n \" from list '\" . \$ListName . \".\");\r\ + \n /ipv6/firewall/address-list/remove \$Entry;\r\ + \n :set CntRemove (\$CntRemove + 1);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach BranchName,Branch in=\$IPv4Addresses do={\r\ + \n :log warning (\$ScriptName . \" Handling branch: \" . \$BranchName\ + );\r\ + \n :foreach Address,Timeout in=\$Branch do={\r\ + \n :log warning (\$ScriptName . \" Adding IPv4 address \" . \$Addre\ + ss . \\\r\ + \n \" to list '\" . \$ListName . \"' with \" . \$Timeout . \".\ + \");\r\ + \n :onerror Err {\r\ + \n /ip/firewall/address-list/add list=\$ListName comment=\$ListCo\ + mment \\\r\ + \n address=\$Address timeout=\$Timeout;\r\ + \n :set CntAdd (\$CntAdd + 1);\r\ + \n } do={\r\ + \n :log warning (\$ScriptName . \" Failed to add IPv4 address \" \ + . \$Address . \\\r\ + \n \" to list '\" . \$ListName . \"': \" . \$Err);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach BranchName,Branch in=\$IPv6Addresses do={\r\ + \n :log warning (\$ScriptName . \" Handling branch: \" . \$BranchName\ + );\r\ + \n :foreach Address,Timeout in=\$Branch do={\r\ + \n :log warning (\$ScriptName . \" Adding IPv6 address \" . \$Addre\ + ss . \\\r\ + \n \" to list '\" . \$ListName . \"' with \" . \$Timeout . \".\ + \");\r\ + \n :onerror Err {\r\ + \n /ipv6/firewall/address-list/add list=\$ListName comment=\$List\ + Comment \\\r\ + \n address=\$Address timeout=\$Timeout;\r\ + \n :set CntAdd (\$CntAdd + 1);\r\ + \n } do={\r\ + \n :log warning (\$ScriptName . \" Failed to add IPv6 address \" \ + . \$Address . \\\r\ + \n \" to list '\" . \$ListName . \"': \" . \$Err);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :log info (\$ScriptName . \" list: \" . \$ListName . \\\r\ + \n \" (\" . [ \$HumanReadableNum (\$CntAdd + \$CntRenew) 1000 ] . \ + \")\" . \\\r\ + \n \" -- added: \" . [ \$HumanReadableNum \$CntAdd 1000 ] . \\\r\ + \n \" - renewed: \" . [ \$HumanReadableNum \$CntRenew 1000 ] . \\\r\ + \n \" - removed: \" . [ \$HumanReadableNum \$CntRemove 1000 ]);\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err;\r\ + \n}\r\ + \n" +add comment=\ + "Lookup IP addresses for RKN list and add them to firewall address-list" \ + dont-require-permissions=no name=AM-RKN-dnsLookup owner=AM-RKN-dnsLookup \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + source="#!rsc by Vados\r\ + \n# RouterOS script: AM-RKN-dnsLookup\r\ + \n# Script comment: Lookup IP addresses for RKN list and add them to firew\ + all address-list\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n# Script description: This script is intended to be run periodically, e.\ + g. once a day, to update the IP addresses in the firewall address-list bas\ + ed on the RKN list.\r\ + \n# It resolves the domain names in the RKN list and a\ + dds the corresponding IP addresses to the specified firewall address-list.\ + \r\ + \n# The script also handles CNAME records by following\ + \_them until it finds A records.\r\ + \n# Usage:\r\ + \n# /system/script { run AM-RKN-dnsLookup; }\r\ + \n:local ScriptName [ :jobname ];\r\ + \n\r\ + \n:global dnsLookupReady false;\r\ + \n:if ([:typeof \$dnsLookupReady] != \"boolean\") do={ :set dnsLookupReady\ + \_true; }\r\ + \nwhile (!\$dnsLookupReady) do={ :nothing; }\r\ + \n:set dnsLookupReady false;\r\ + \n\r\ + \n:local arrRKN {\r\ + \n \"telegra.ph\"\r\ + \n \"grani.ru\"\r\ + \n \"xhamster.com\"\r\ + \n \"kasparov.ru\"\r\ + \n \"lostfilm.tv\"\r\ + \n \"rutracker.org\"\r\ + \n \"lurkmore.to\"\r\ + \n \"dou.ua\"\r\ + \n \"youporn.com\"\r\ + \n \"pornolab.net\"\r\ + \n \"crimerussia.com\"\r\ + \n \"telegram.org\"\r\ + \n \"api.telegram.org\"\r\ + \n \"telegram.me\"\r\ + \n \"t.me\";}\r\ + \n\r\ + \n:local ListRKN \"FuckRKN\";\r\ + \n:local ListComment (\"ListRKN managed by \" . \$ScriptName);\r\ + \n:foreach aListItem in=[/ip/firewall/address-list find list=\$ListRKN] do\ + ={\r\ + \n /ip firewall address-list remove \$aListItem;\r\ + \n}\r\ + \n:foreach aItem in=\$arrRKN do={\r\ + \n :do {\r\ + \n :resolve \$aItem;\r\ + \n } on-error={\r\ + \n :log error \"dns resolve failure [ ip - resolve ip ]\";\r\ + \n }\r\ + \n :foreach dnsRecord in=[/ip dns cache all find where (name=\$aItem)] \ + do={\r\ + \n :if ([/ip dns cache all get \$dnsRecord type]=\"A\") do={\r\ + \n :local newAddress [/ip dns cache all get \$dnsRecord data];\ + \r\ + \n :do {\r\ + \n /ip firewall address-list add list=\$ListRKN address=\$n\ + ewAddress comment=\$aItem;\r\ + \n } on-error={\r\ + \n :log error \"error when adding ip to list: \$newAddress\ + \";\r\ + \n }\r\ + \n }\r\ + \n :if ([/ip dns cache all get \$dnsRecord type]=\"CNAME\") do={\r\ + \n :local cname;\r\ + \n :local nextCname;\r\ + \n :set cname [/ip dns cache all find where (name=\$aItem && ty\ + pe=\"CNAME\")];\r\ + \n :set nextCname [/ip dns cache all find where (name=[/ip dns \ + cache all get \$cname data] && type=\"CNAME\")];\r\ + \n :while (\$nextCname != \"\") do={\r\ + \n :set cname \$nextCname;\r\ + \n :set nextCname [/ip dns cache all find where (name=[/ip \ + dns cache all get \$cname data] && type=\"CNAME\")];\r\ + \n }\r\ + \n :foreach aRecord in=[/ip dns cache all find where (name=[/ip\ + \_dns cache all get \$cname data] && type=\"A\")] do={\r\ + \n :do {\r\ + \n /ip firewall address-list add list=\$ListRKN address\ + =[/ip dns cache all get \$aRecord data] comment=\$aItem;\r\ + \n } on-error={\r\ + \n :log error \"error when adding ip to list: \$newAddr\ + ess\";\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:if ([ :len [ /system/scheduler/find where name=\$ScriptName ] ] = 0) do\ + ={\r\ + \n :log error (\$ScriptName . \"System Scheduler for script: \" . \$Scri\ + ptName . \" is NOT SET! Fix It Now!\");\r\ + \n /system/scheduler/add name=\$ScriptName on-event=\"/system/script { \ + run \$ScriptName; }\" comment=\"Update RKN DNS Looup\" interval=00:20:00 p\ + olicy=\"ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon\"\ + \_start-time=startup;\r\ + \n }\r\ + \n:set dnsLookupReady true;\r\ + \ndelay 5s; \r\ + \n:global dnsLookupReady (a);\r\ + \n" +/user group +add name=backup policy="telnet,ssh,ftp,read,write,policy,test,sniff,sensitive,\ + !local,!reboot,!winbox,!password,!web,!api,!romon,!rest-api" +/interface bridge +add admin-mac=48:8F:5A:8E:1A:BC auto-mac=no mlag-peer-port="ether1 - Unet" \ + name=Bridge-LAN port-cost-mode=short +/interface wireless +# managed by CAPsMAN +# channel: 2422/20-Ce/gn(18dBm), SSID: vados, local forwarding +set [ find default-name=wlan1 ] ampdu-priorities=0,1,2,3,4,5,6,7 band=\ + 2ghz-b/g/n basic-rates-a/g=\ + 6Mbps,9Mbps,12Mbps,18Mbps,24Mbps,36Mbps,48Mbps,54Mbps basic-rates-b=\ + 1Mbps,2Mbps,5.5Mbps,11Mbps channel-width=20/40mhz-XX country=belarus \ + disabled=no frequency=auto hw-protection-mode=rts-cts mode=ap-bridge \ + rate-set=configured skip-dfs-channels=10min-cac ssid=vados \ + wds-default-bridge=Bridge-LAN wds-mode=dynamic-mesh wireless-protocol=\ + 802.11 wmm-support=enabled wps-mode=disabled +# managed by CAPsMAN +# channel: 5260/20-Ceee/ac/DP(18dBm), SSID: vados5g, local forwarding +set [ find default-name=wlan2 ] ampdu-priorities=0,1,2,3,4,5,6,7 band=\ + 5ghz-a/n/ac basic-rates-a/g=\ + 6Mbps,9Mbps,12Mbps,18Mbps,24Mbps,36Mbps,48Mbps,54Mbps channel-width=\ + 20/40/80mhz-XXXX country=belarus disabled=no frequency=auto \ + hw-protection-mode=rts-cts mode=ap-bridge rate-set=configured \ + skip-dfs-channels=10min-cac ssid=vados5g wds-default-bridge=Bridge-LAN \ + wds-mode=dynamic-mesh wireless-protocol=802.11 wmm-support=enabled \ + wps-mode=disabled +/interface wireless nstreme +# managed by CAPsMAN +# channel: 2422/20-Ce/gn(18dBm), SSID: vados, local forwarding +set wlan1 enable-nstreme=yes +# managed by CAPsMAN +# channel: 5260/20-Ceee/ac/DP(18dBm), SSID: vados5g, local forwarding +set wlan2 enable-nstreme=yes +/caps-man provisioning +add action=create-dynamic-enabled hw-supported-modes=gn master-configuration=\ + cfg-2ghz name-format=prefix-identity name-prefix=2ghz +add action=create-dynamic-enabled hw-supported-modes=ac master-configuration=\ + cfg-5ghz-ac name-format=prefix-identity name-prefix=5ghz-ac +add action=create-dynamic-enabled hw-supported-modes=an master-configuration=\ + cfg-5ghz-an name-format=prefix-identity name-prefix=5ghz-an +/certificate settings +set builtin-trust-store="ipsec,wpa-eap,capsman,fetch,sstp,ovpn,radius,userman,\ + openflow,tr069,dot1x,dns,www,api,reverse-proxy" crl-store=system +/interface bridge port +add bridge=Bridge-LAN disabled=yes interface="ether1 - Unet" +add bridge=Bridge-LAN interface=ether2 +add bridge=Bridge-LAN interface=ether3 +add bridge=Bridge-LAN interface=ether4 +add bridge=Bridge-LAN interface=ether5 +add bridge=Bridge-LAN interface=wlan2 +add bridge=Bridge-LAN interface=wlan1 +/ip firewall connection tracking +set udp-timeout=10s +/ip neighbor discovery-settings +set discover-interface-list=LAN +/ip settings +set max-neighbor-entries=8192 secure-redirects=no +/ipv6 settings +set allow-fast-path=no disable-ipv6=yes disable-link-local-address=yes \ + forward=no max-neighbor-entries=8192 +/interface detect-internet +set detect-interface-list=WAN internet-interface-list=WAN lan-interface-list=\ + LAN wan-interface-list=WAN +/interface l2tp-server server +set authentication=mschap2 use-ipsec=yes +/interface list member +add interface="ether1 - Unet" list=WAN +add interface=Bridge-LAN list=LAN +/interface ovpn-server server +add auth=sha1,md5 mac-address=FE:82:A5:78:8E:84 name=ovpn-server1 +/interface wifi configuration +add channel=2G-AX datapath=xs-DataPath disabled=no mode=ap name=2G-AX \ + security=sec2g security.ft=yes .ft-over-ds=yes ssid=vados +add channel=2G-N datapath=xs-DataPath disabled=no mode=ap name=2G-N security=\ + sec2g security.ft=yes .ft-over-ds=yes ssid=vados +add channel=5G-AC datapath=xs-DataPath disabled=no mode=ap name=5G-AC \ + security=sec5G security.authentication-types="" .ft=yes .ft-over-ds=yes \ + ssid=vados +add channel=2G-G datapath=xs-DataPath disabled=no mode=ap name=2G-G security=\ + sec2g security.authentication-types="" .ft=yes .ft-over-ds=yes ssid=vados +/interface wifi datapath +add bridge=Bridge-LAN disabled=no interface-list=all name=xs-DataPath +/interface wireguard peers +add allowed-address=10.8.0.2/32,0.0.0.0/0 client-allowed-address=0.0.0.0/0 \ + endpoint-address=89.110.101.17 endpoint-port=29185 interface=WG name=\ + MikroVados persistent-keepalive=10s public-key=\ + "64Y25EUZQQt8EIeAJYD8qWt+te8qvGEepnswdBgmzlY=" +/interface wireless cap +# +set bridge=Bridge-LAN caps-man-addresses=10.30.30.10 \ + caps-man-certificate-common-names=CAPsMAN-51B25E507D07 certificate=\ + CAP-488F5A8E1ABC discovery-interfaces=ether2 enabled=yes interfaces=\ + wlan1,wlan2 lock-to-caps-man=yes +/ip address +add address=10.30.30.81/24 interface=Bridge-LAN network=10.30.30.0 +add address=10.8.0.2/24 interface=WG network=10.8.0.0 +/ip dhcp-client +add add-default-route=special-classless default-route-distance=2 \ + default-route-tables=main interface="ether1 - Unet" name=client1 \ + use-peer-dns=no +/ip dhcp-server +add add-arp=yes address-pool=dhcp always-broadcast=yes bootp-support=none \ + dhcp-option-set=domain-search-set interface=Bridge-LAN lease-time=10m \ + name=masterDHCP server-address=10.30.30.81 +/ip dhcp-server config +set accounting=no +/ip dhcp-server lease +add address=10.30.30.101 client-id=1:48:8f:5a:8e:ee:a8 mac-address=\ + 48:8F:5A:8E:EE:A8 server=masterDHCP +add address=10.30.30.107 client-id=1:f0:de:f1:91:d:1e mac-address=\ + F0:DE:F1:91:0D:1E server=masterDHCP +add address=10.30.30.83 client-id=1:0:80:77:ec:43:86 mac-address=\ + 00:80:77:EC:43:86 server=masterDHCP +add address=10.30.30.70 dhcp-option=domain-search-list,HostName \ + dhcp-option-set=HP1505n mac-address=00:1E:0B:1A:88:8D server=masterDHCP +add address=10.30.30.50 client-id=1:4:7c:16:36:f5:37 mac-address=\ + 04:7C:16:36:F5:37 server=masterDHCP +add address=10.30.30.71 client-id=1:10:2d:41:2c:20:c2 mac-address=\ + 10:2D:41:2C:20:C2 server=masterDHCP +add address=10.30.30.61 client-id=1:10:8:c1:81:59:5f mac-address=\ + 10:08:C1:81:59:5F server=masterDHCP +add address=10.30.30.72 client-id=1:10:38:1f:d2:5f:13 mac-address=\ + 10:38:1F:D2:5F:13 server=masterDHCP +add address=10.30.30.99 client-id=1:10:b1:df:e9:d0:d5 mac-address=\ + 10:B1:DF:E9:D0:D5 server=masterDHCP +add address=10.30.30.111 client-id=1:fe:2:52:be:3f:16 mac-address=\ + FE:02:52:BE:3F:16 server=masterDHCP +add address=10.30.30.92 client-id=1:d4:6d:6d:fd:e5:49 mac-address=\ + D4:6D:6D:FD:E5:49 server=masterDHCP +add address=10.30.30.93 client-id=1:7e:8b:1e:cb:b8:cb mac-address=\ + CC:42:10:12:46:94 server=masterDHCP +add address=10.30.30.94 client-id=1:50:cc:f8:85:96:a mac-address=\ + 50:CC:F8:85:96:0A server=masterDHCP +add address=10.30.30.82 client-id=1:e4:18:6b:58:34:ab mac-address=\ + E4:18:6B:58:34:AB server=masterDHCP +add address=10.30.30.75 client-id=1:0:27:15:41:97:a9 mac-address=\ + 00:27:15:41:97:A9 server=masterDHCP +add address=10.30.30.77 dhcp-option=HostName dhcp-option-set=StartLife1 \ + mac-address=C4:82:E1:03:49:10 server=masterDHCP +add address=10.30.30.73 client-id=1:10:38:1f:82:81:f2 mac-address=\ + 10:38:1F:82:81:F2 server=masterDHCP +add address=10.30.30.95 client-id=1:88:ae:dd:60:39:54 dhcp-option=HostName \ + dhcp-option-set=VADOS-NUC mac-address=88:AE:DD:60:39:54 server=masterDHCP +add address=10.30.30.98 client-id=1:c8:5b:76:d8:cc:bf dhcp-option=HostName \ + dhcp-option-set=VADOS-LEN mac-address=C8:5B:76:D8:CC:BF server=masterDHCP +add address=10.30.30.96 client-id=iPhone mac-address=4A:91:ED:0E:1F:39 \ + server=masterDHCP +add address=10.30.30.74 client-id=MiTV dhcp-option=HostName dhcp-option-set=\ + MiTV mac-address=20:72:A9:D3:34:36 server=masterDHCP +add address=10.30.30.30 dhcp-option=HostName dhcp-option-set=miller \ + mac-address=F0:75:5D:1E:5F:71 server=masterDHCP +add address=10.30.30.100 client-id=iVados dhcp-option=HostName \ + dhcp-option-set="=\"Client ID\"" mac-address=DE:4D:72:F3:1A:9F server=\ + masterDHCP +/ip dhcp-server network +add address=10.30.30.0/24 caps-manager=10.30.30.10 dhcp-option=\ + domain-search-list dhcp-option-set=domain-search-set dns-server=\ + 10.30.30.81 domain=WORKGROUP gateway=10.30.30.81 netmask=24 ntp-server=\ + 10.30.30.81,10.30.30.10 wins-server=10.30.30.95,10.30.30.98 +/ip dns +set allow-remote-requests=yes cache-max-ttl=1d doh-max-concurrent-queries=100 \ + doh-max-server-connections=20 servers=8.8.8.8,8.8.4.4 verify-doh-cert=yes +/ip dns static +add address=10.30.30.33 name=ros.vados.ru type=A +add address=10.30.30.95 name=vados-nuc type=A +add address=10.30.30.33 name=amster-nuc type=A +add address=10.30.30.33 comment=AMSTER name=amster.vados.ru type=A +add address=10.30.30.33 name=amster type=A +add address=10.30.30.33 name=amster-reg type=A +add address=10.30.30.33 name=mng.vados.ru type=A +add address=10.30.30.33 name=mgr.vados.ru type=A +add address=10.30.30.33 name=prt.vados.ru type=A +add address=10.30.30.33 name=reg.vados.ru type=A +add address=10.30.30.33 match-subdomain=yes name=mikrots.vados.ru type=A +add address=10.30.30.33 name=oxidized.vados.ru type=A +add address=8.8.4.4 comment="Google-dns IPv4 2" name=dns.google type=A +add address=8.8.8.8 comment="Google-dns IPv4 1" name=dns.google type=A +add address=10.30.30.30 comment=MILLER name=miller.vados.ru type=A +add address=10.30.30.30 name=MILLER-LEN type=A +add address=10.30.30.30 name=miller type=A +add address=1.0.0.1 comment="CloudFlare-doh IPv4 2" name=\ + security.cloudflare-dns.com type=A +add address=1.1.1.1 comment="CloudFlare-doh IPv4 1" name=\ + security.cloudflare-dns.com type=A +add address=9.9.9.9 comment="Cuad9-dns IPv4 1" disabled=yes name=\ + dns.quad9.net type=A +add address=149.112.112.112 comment="Cuad9-dns IPv4 2" name=dns.quad9.net \ + type=A +add address=91.192.189.2 comment=Unet-DNS disabled=yes name=ns1.unet.ws type=\ + A +add address=10.30.30.81 comment=LocalNet name=MikroVados type=A +add address=10.30.30.10 name=MikroNUC type=A +add address=10.30.30.86 name=MikroYellow type=A +add address=10.30.30.85 name=MikroMic type=A +add address=10.30.30.95 name=VADOS-NUC type=A +add address=10.30.30.98 name=VADOS-LEN type=A +add address=10.30.30.20 name=garage type=A +add address=9.9.9.9 comment="Cuad9-dns IPv4 1" disabled=yes name=\ + dns.quad9.net type=A +add address=91.192.189.2 comment=Unet-DNS disabled=yes name=ns1.unet.ws type=\ + A +/ip firewall address-list +add address=91.215.120.206 list=TRUSTED +add address=185.71.70.78 disabled=yes list=TRUSTED +add address=176.53.203.171 disabled=yes list=TRUSTED +add address=176.53.203.170 disabled=yes list=TRUSTED +add address=176.53.202.194 disabled=yes list=TRUSTED +add address=10.30.30.100-255 list=KIDS +add address=8.8.4.0/24 list=YouTube +add address=8.8.8.0/24 list=YouTube +add address=8.34.208.0/20 list=YouTube +add address=8.35.192.0/20 list=YouTube +add address=23.236.48.0/20 list=YouTube +add address=23.251.128.0/19 list=YouTube +add address=34.0.0.0/15 list=YouTube +add address=34.2.0.0/16 list=YouTube +add address=34.3.0.0/23 list=YouTube +add address=34.3.3.0/24 list=YouTube +add address=34.3.4.0/24 list=YouTube +add address=34.3.8.0/21 list=YouTube +add address=34.3.16.0/20 list=YouTube +add address=34.3.32.0/19 list=YouTube +add address=34.3.64.0/18 list=YouTube +add address=34.4.0.0/14 list=YouTube +add address=34.8.0.0/13 list=YouTube +add address=34.16.0.0/12 list=YouTube +add address=34.32.0.0/11 list=YouTube +add address=34.64.0.0/10 list=YouTube +add address=34.128.0.0/10 list=YouTube +add address=35.184.0.0/13 list=YouTube +add address=35.192.0.0/14 list=YouTube +add address=35.196.0.0/15 list=YouTube +add address=35.198.0.0/16 list=YouTube +add address=35.199.0.0/17 list=YouTube +add address=35.199.128.0/18 list=YouTube +add address=35.200.0.0/13 list=YouTube +add address=35.208.0.0/12 list=YouTube +add address=35.224.0.0/12 list=YouTube +add address=35.240.0.0/13 list=YouTube +add address=57.140.192.0/18 list=YouTube +add address=64.15.112.0/20 list=YouTube +add address=64.233.160.0/19 list=YouTube +add address=66.22.228.0/23 list=YouTube +add address=66.102.0.0/20 list=YouTube +add address=66.249.64.0/19 list=YouTube +add address=70.32.128.0/19 list=YouTube +add address=72.14.192.0/18 list=YouTube +add address=74.125.0.0/16 list=YouTube +add address=104.154.0.0/15 list=YouTube +add address=104.196.0.0/14 list=YouTube +add address=104.237.160.0/19 list=YouTube +add address=107.167.160.0/19 list=YouTube +add address=107.178.192.0/18 list=YouTube +add address=108.59.80.0/20 list=YouTube +add address=108.170.192.0/18 list=YouTube +add address=108.177.0.0/17 list=YouTube +add address=130.211.0.0/16 list=YouTube +add address=136.22.160.0/20 list=YouTube +add address=136.22.176.0/21 list=YouTube +add address=136.22.184.0/23 list=YouTube +add address=136.22.186.0/24 list=YouTube +add address=142.250.0.0/15 list=YouTube +add address=146.148.0.0/17 list=YouTube +add address=152.65.208.0/22 list=YouTube +add address=152.65.214.0/23 list=YouTube +add address=152.65.218.0/23 list=YouTube +add address=152.65.222.0/23 list=YouTube +add address=152.65.224.0/19 list=YouTube +add address=162.120.128.0/17 list=YouTube +add address=162.216.148.0/22 list=YouTube +add address=162.222.176.0/21 list=YouTube +add address=172.110.32.0/21 list=YouTube +add address=172.217.0.0/16 list=YouTube +add address=172.253.0.0/16 list=YouTube +add address=173.194.0.0/16 list=YouTube +add address=173.255.112.0/20 list=YouTube +add address=192.158.28.0/22 list=YouTube +add address=192.178.0.0/15 list=YouTube +add address=193.186.4.0/24 list=YouTube +add address=199.36.154.0/23 list=YouTube +add address=199.36.156.0/24 list=YouTube +add address=199.192.112.0/22 list=YouTube +add address=199.223.232.0/21 list=YouTube +add address=207.223.160.0/20 list=YouTube +add address=208.65.152.0/22 list=YouTube +add address=208.68.108.0/22 list=YouTube +add address=208.81.188.0/22 list=YouTube +add address=208.117.224.0/19 list=YouTube +add address=209.85.128.0/17 list=YouTube +add address=216.58.192.0/19 list=YouTube +add address=216.73.80.0/20 list=YouTube +add address=216.239.32.0/19 list=YouTube +add address=2ip.ru list=Test +add address=157.240.247.174 list=Instagram +add address=46.53.178.107 list=Instagram +add address=179.60.195.174 list=Instagram +add address=157.240.205.174 list=Instagram +add address=31.13.24.0/21 list=Instagram +add address=31.13.64.0/18 list=Instagram +add address=45.64.40.0/22 list=Instagram +add address=66.220.144.0/20 list=Instagram +add address=69.63.176.0/20 list=Instagram +add address=69.171.224.0/19 list=Instagram +add address=74.119.76.0/22 list=Instagram +add address=103.4.96.0/22 list=Instagram +add address=129.134.0.0/16 list=Instagram +add address=157.240.0.0/16 list=Instagram +add address=173.252.64.0/18 list=Instagram +add address=179.60.192.0/22 list=Instagram +add address=185.60.216.0/22 list=Instagram +add address=204.15.20.0/22 list=Instagram +add address=157.240.200.63 list=Instagram +add address=185.60.219.63 list=Instagram +add address=129.134.31.12 list=Instagram +add address=66.81.203.132 list=Instagram +add address=185.89.218.12 list=Instagram +add address=31.13.66.63 list=Instagram +add address=84.15.65.162 list=Instagram +add address=68.66.224.28 list=Instagram +add address=157.240.253.63 list=Instagram +add address=83.174.11.224 list=Instagram +add address=157.240.9.52 list=Instagram +add address=157.240.252.174 list=Instagram +add address=157.240.195.63 list=Instagram +add address=31.13.71.52 list=Instagram +add address=57.144.110.192 list=Instagram +add address=157.240.252.17 list=Instagram +add address=84.15.66.97 list=Instagram +add address=217.168.6.33 list=Instagram +add address=31.13.83.52 list=Instagram +add address=157.240.241.63 list=Instagram +add address=129.134.30.12 list=Instagram +add address=185.89.219.12 list=Instagram +add address=157.240.252.10 list=Instagram +add address=157.240.201.63 list=Instagram +add address=66.81.203.197 list=Instagram +add address=179.60.195.52 list=Instagram +add address=66.81.203.7 list=Instagram +add address=216.40.34.41 list=Instagram +add address=157.240.202.63 list=Instagram +add address=157.240.229.63 list=Instagram +add address=157.240.252.63 list=Instagram +add address=31.13.72.53 list=Instagram +add address=124.108.16.224 list=Instagram +add address=157.240.205.63 list=Instagram +add address=92.46.37.96 list=Instagram +add address=157.240.247.63 list=Instagram +add address=157.240.234.63 list=Instagram +add address=157.240.235.63 list=Instagram +add address=87.245.208.97 list=Instagram +add address=216.58.192.0/19 list=Instagram +add address=209.85.128.0/17 list=Instagram +add address=198.105.240.0/20 list=Instagram +add address=173.194.0.0/16 list=Instagram +add address=172.217.0.0/16 list=Instagram +add address=142.250.0.0/15 list=Instagram +add address=108.177.0.0/17 list=Instagram +add address=87.245.197.140 list=Instagram +add address=74.125.0.0/16 list=Instagram +add address=64.233.160.0/19 list=Instagram +add address=157.240.0.1 list=Instagram +add address=157.240.238.63 list=Instagram +add address=157.240.238.174 list=Instagram +add address=157.240.0.63 list=Instagram +add address=157.240.224.63 list=Instagram +add address=157.240.224.174 list=Instagram +add address=157.240.251.36 list=Instagram +add address=157.240.253.12 list=Instagram +add address=157.240.253.35 list=Instagram +add address=157.240.238.13 list=Instagram +add address=157.240.238.56 list=Instagram +add address=157.240.238.175 list=Instagram +add address=57.144.112.141 list=Instagram +add address=157.240.251.60 list=Instagram +add address=157.240.251.128 list=Instagram +add address=157.240.238.5 list=Instagram +add address=157.240.253.13 list=Instagram +add address=157.240.253.5 list=Instagram +add address=157.240.238.2 list=Instagram +add address=157.240.238.37 list=Instagram +add address=157.240.251.5 list=Instagram +add address=157.240.251.34 list=Instagram +add address=57.144.112.1 list=Instagram +add address=157.240.238.54 list=Instagram +add address=129.134.26.123 list=Instagram +add address=157.240.252.3 list=Instagram +add address=31.13.84.4 list=Instagram +add address=157.240.224.12 list=Instagram +add address=157.240.238.4 list=Instagram +add address=157.240.0.13 list=Instagram +add address=3.33.139.32 list=Instagram +add address=157.240.0.35 list=Instagram +add address=157.240.238.14 list=Instagram +add address=157.240.238.60 list=Instagram +add address=57.144.112.145 list=Instagram +add address=157.240.251.35 list=Instagram +add address=151.101.84.159 list=Twitter +add address=pbs.twimg.com list=Twitter +add address=89.110.101.17 comment=VDSIna list=TRUSTED +add address=10.8.0.0/24 comment="WG VDSIna" list=TRUSTED +add address=ikus.pesc.ru comment=ikus.pesc.ru list=NoVdsina +add address=love.ru comment=love.ru list=NoVdsina +add address=gosuslugi.ru comment=gosuslugi.ru list=NoVdsina +add address=pochta.ru comment=pochta.ru list=NoVdsina +add address=vdsina.com list=NoVdsina +add address=vdsina.ru list=NoVdsina +add address=youla.ru list=NoVdsina +add address=kupiprodai.ru list=NoVdsina +add address=myip.ru list=Test +add address=geoip.co list=NoVdsina +add address=x.com list=Twitter +add address=facebook.com list=facebook +add address=fbcd.net list=facebook +add address=comp-lenta.ru list=NoVdsina +add address=128.85.102.70 comment=update.microsoft.com list=\ + windowsupdateslist +add address=wu-b-net.trafficmanager.net. comment=\ + ctldl.windowsupdate.com.delivery.microsoft.com list=windowsupdateslist +add address=ctldl.windowsupdate.com.delivery.microsoft.com. comment=\ + ctldl.windowsupdate.com list=windowsupdateslist +add address=redir.update.msft.com.trafficmanager.net. comment=\ + update.microsoft.com list=windowsupdateslist +add address=geo.prod.do.dsp.trafficmanager.net. comment=\ + geo.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=13.74.139.29 comment=array605.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e12437.d.akamaiedge.net. comment=\ + kv801.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=displaycatalog-rp.md.mp.microsoft.com.akadns.net. comment=\ + displaycatalog.mp.microsoft.com list=windowsupdateslist +add address=rp-consumer-prod-displaycatalog-geomap.trafficmanager.net. \ + comment=displaycatalog-rp.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=sls.update.microsoft.com. comment=slscr.update.microsoft.com \ + list=windowsupdateslist +add address=glb.sls.prod.dcat.dsp.trafficmanager.net. comment=\ + sls.update.microsoft.com list=windowsupdateslist +add address=fe3.delivery.mp.microsoft.com. comment=\ + fe3cr.delivery.mp.microsoft.com list=windowsupdateslist +add address=glb.cws.prod.dcat.dsp.trafficmanager.net. comment=\ + fe3.delivery.mp.microsoft.com list=windowsupdateslist +add address=fe2cr.update.msft.com.trafficmanager.net. comment=\ + fe2cr.update.microsoft.com list=windowsupdateslist +add address=download.windowsupdate.com.delivery.microsoft.com. comment=\ + download.windowsupdate.com list=windowsupdateslist +add address=wu-f-net.trafficmanager.net. comment=\ + download.windowsupdate.com.delivery.microsoft.com list=windowsupdateslist +add address=tsfe.trafficmanager.net. comment=\ + tsfe.trafficshaping.dsp.mp.microsoft.com list=windowsupdateslist +add address=edge.ds-c7110-microsoft.global.dns.qwilted-cds.cqloud.com. \ + comment=9.au.download.windowsupdate.com list=windowsupdateslist +add address=52.158.227.125 comment=array812.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=au.download.windowsupdate.com.delivery.microsoft.com. comment=\ + au.download.windowsupdate.com list=windowsupdateslist +add address=a767.dspw65.akamai.net. comment=\ + download.windowsupdate.com.edgesuite.net list=windowsupdateslist +add address=52.151.58.88 comment=array810.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=consumer-licensing-aks2aks.md.mp.microsoft.com.akadns.net. \ + comment=licensing.mp.microsoft.com list=windowsupdateslist +add address=licensing-prod-frontdoor-geomap.trafficmanager.net. comment=\ + consumer-licensing-aks2aks.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=star.f.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.f.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-nlu-net.trafficmanager.net. comment=\ + star.f.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=star.b.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.b.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-tlu-net.trafficmanager.net. comment=\ + star.b.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=storeedgefd.xbetservices.akadns.net. comment=\ + storeedgefd.dsx.mp.microsoft.com list=windowsupdateslist +add address=\ + storeedgefd.dsx.mp.microsoft.com.edgekey.net.globalredir.akadns.net. \ + comment=storeedgefd.dsx.mp.microsoft.com.edgekey.net list=\ + windowsupdateslist +add address=e16646.dscg.akamaiedge.net. comment=\ + storeedgefd.dsx.mp.microsoft.com.edgekey.net.globalredir.akadns.net list=\ + windowsupdateslist +add address=40.69.76.189 comment=array621.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=bg.microsoft.map.fastly.net. comment=\ + 3.au.download.windowsupdate.com list=windowsupdateslist +add list=windowsupdateslist +add address=40.69.75.33 comment=array613.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=star.sf.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedgeextensions.sf.tlu.dl.delivery.mp.microsoft.com list=\ + windowsupdateslist +add address=cdp-f-ssl-tlu-net.trafficmanager.net. comment=\ + star.sf.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a2033.dscd.akamai.net. comment=\ + star.sb.tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=13.74.138.242 comment=array602.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=dl.delivery.mp.microsoft.com.delivery.microsoft.com. comment=\ + dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-f-nlu-net.trafficmanager.net. comment=\ + dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=1d.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=1D.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-b-tlu-net.trafficmanager.net. comment=\ + 1d.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a122.dscg3.akamai.net. comment=\ + tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=windowsupdateslist +add address=geover.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + geover.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e10370.d.akamaiedge.net. comment=\ + geover.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=52.232.182.21 comment=array511.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.70.77.95 comment=array519.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=a1683.dscd.akamai.net. comment=\ + dl.delivery.mp.microsoft.com-c.edgesuite.net list=windowsupdateslist +add address=consumer-collections-aks2eap.md.mp.microsoft.com.akadns.net. \ + comment=collections.mp.microsoft.com list=windowsupdateslist +add address=a1847.dscd.akamai.net. comment=\ + wildcard.f.tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=13.74.142.6 comment=array607.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=au.download.windowsupdate.com.edgesuite.net. comment=\ + 2.au.download.windowsupdate.com list=windowsupdateslist +add address=a767.dscg3.akamai.net. comment=\ + au.download.windowsupdate.com.edgesuite.net list=windowsupdateslist +add address=52.156.123.84 comment=array818.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.78.254 comment=array610.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=4.au.download.windowsupdate.com.delivery.microsoft.com. comment=\ + 4.au.download.windowsupdate.com list=windowsupdateslist +add address=cl-glcb907925.gcdn.co. comment=\ + 4.au.download.windowsupdate.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.111 comment=array510.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.69.70.43 comment=array623.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=tsfe.trafficshaping.dsp.mp.microsoft.com.delivery.microsoft.com. \ + comment=tsfe.trafficshaping.dsp.mp.microsoft.com list=windowsupdateslist +add address=ts-frontend.trafficmanager.net. comment=\ + tsfe.trafficshaping.dsp.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=40.69.75.248 comment=array616.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.74.84 comment=array615.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=sds.trafficmanager.net. comment=software-download.microsoft.com \ + list=windowsupdateslist +add address=40.69.74.80 comment=array611.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.175.242.182 comment=array804.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=dlc-shim.trafficmanager.net. comment=download.microsoft.com list=\ + windowsupdateslist +add address=e12671.dscd.akamaiedge.net. comment=\ + download.microsoft.com.edgekey.net list=windowsupdateslist +add address=20.187.55.34 comment=array808.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.231 comment=array513.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=52.167.222.13 comment=array518.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e12358.d.akamaiedge.net. comment=\ + kv601.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. comment=\ + tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-f-tlu-net.trafficmanager.net. comment=\ + tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a1856.dspw65.akamai.net. comment=\ + tlu.dl.delivery.mp.microsoft.com-c.edgesuite.net list=windowsupdateslist +add address=52.167.164.252 comment=array506.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=13.74.137.54 comment=array601.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv501.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv501.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=collections-prod-frontdoor-geomap.trafficmanager.net. comment=\ + consumer-collections-aks2eap.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=52.167.160.173 comment=array509.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.70.77.148 comment=array516.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.200.126 comment=array507.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=52.167.167.59 comment=array508.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.76.172 comment=array620.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=82.202.162.184 comment=comp-lenta.ru list=NoWG +add address=smtp.mail.me.com.akadns.net. comment=smtp.mail.me.com list=NoWG +add address=17.57.155.37 comment=smtp.mail.me.com.akadns.net list=NoWG +add address=smtp.mail.me.com comment=smtp.mail.me.com list=NoVdsina +add address=40.70.76.5 comment=array514.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.186.119 comment=array618.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.177.176.186 comment=array520.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.70.76.27 comment=array515.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.160.43 comment=array503.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.110 comment=array817.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.142.8 comment=array614.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.138.254 comment=array603.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.96 comment=array501.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.76.215 comment=array622.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.143.200 comment=array606.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.111 comment=array818.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.112 comment=array819.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.137.53 comment=array608.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.98 comment=array805.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.96 comment=array803.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.104 comment=array811.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.101 comment=array808.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.99 comment=array806.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.17 comment=array802.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.97 comment=array804.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.103 comment=array810.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.16 comment=array801.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.70.77.177 comment=array517.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.164.84 comment=array512.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.105 comment=array812.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.107 comment=array814.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.232.161.82 comment=array502.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.108 comment=array815.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.161.91 comment=array505.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.102 comment=array809.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.109 comment=array816.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.106 comment=array813.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.117 comment=array622.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.107 comment=array612.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.108 comment=array613.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.105 comment=array610.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.113 comment=array618.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.116 comment=array621.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.98 comment=array603.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.114 comment=array619.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.111 comment=array616.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.97 comment=array602.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.106 comment=array611.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.110 comment=array615.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.119 comment=array624.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.135 comment=array514.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.97 comment=array503.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.99 comment=array604.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.61 comment=array504.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.131 comment=array510.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.132 comment=array511.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.96 comment=array601.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.104 comment=array609.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.138 comment=array517.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.60 comment=array501.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.139 comment=array518.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.118 comment=array623.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.113 comment=array820.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.103 comment=array608.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.100 comment=array807.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.129 comment=array508.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.134 comment=array513.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.62 comment=array505.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.137 comment=array516.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.101 comment=array606.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.96 comment=array502.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.130 comment=array509.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.112 comment=array617.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.100 comment=array605.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.115 comment=array620.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.136 comment=array515.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=purchase.md.mp.microsoft.com.akadns.net. comment=\ + purchase.mp.microsoft.com list=windowsupdateslist +add address=e110219.a.akamaiedge.net. comment=\ + purchase.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=72.153.5.140 comment=array519.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.141 list=windowsupdateslist +add address=72.153.5.63 comment=array506.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.128 comment=array507.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.102 comment=array607.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=storesdk.xbetservices.akadns.net. comment=\ + storesdk.dsx.mp.microsoft.com list=windowsupdateslist +add address=e16646.g.akamaiedge.net. comment=\ + storesdk.dsx.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=software-download.microsoft.com.delivery.microsoft.com. comment=\ + software-download.microsoft.com list=windowsupdateslist +add address=download.prss.microsoft.com.akamaized.net. comment=\ + software-download.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.109 comment=array614.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.133 comment=array512.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=213.180.192.0/19 comment=YandexDisk list=NoVdsina +add address=87.250.250.50 comment=YandexDisk list=NoVdsina +add address=consumer-prod-bcfd-v7-afd.trafficmanager.net. comment=\ + displaycatalog.mp.microsoft.com list=windowsupdateslist +add address=purchase-europeeap.md.mp.microsoft.com.akadns.net. comment=\ + purchase.md.mp.microsoft.com.akadns.net list=windowsupdateslist +add address=ne-az-conspurchase-mp.trafficmanager.net. comment=\ + purchase-europeeap.md.mp.microsoft.com.akadns.net list=windowsupdateslist +add address=storeedgefd.dsx.mp.microsoft.com.edgekey.net. comment=\ + cdn.storeedgefd.dsx.mp.microsoft.com list=windowsupdateslist +add address=star.f.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.f.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=a1996.dscd.akamai.net. comment=\ + wildcard.f.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=cp801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + cp801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=glb.tas02.sls-prod.dcat.dsp.mp.microsoft.com. comment=\ + tas02.sls.update.microsoft.com list=windowsupdateslist +add address=cp601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + cp601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=star.sb.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedgeextensions.sb.tlu.dl.delivery.mp.microsoft.com list=\ + windowsupdateslist +add address=star.sf.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.sf.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-ssl-nlu-net.trafficmanager.net. comment=\ + star.sf.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=tm-pifd-prod-gbl-weight.trafficmanager.net. comment=\ + paymentinstruments.mp.microsoft.com list=windowsupdateslist +add address=10.30.30.33 comment=NUC disabled=yes list=NoWG +add address=10.30.30.10 comment=MikroNUC list=NoWG +add address=89.110.101.17 comment=!!!VDSINA!!!! list=NoWG +add address=89.110.101.17 list=VPN-Server +add address=80.85.244.9 list=TRUSTED +add address=8.8.8.8 list=TRUSTED +add address=8.8.4.4 list=TRUSTED +add address=disc801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + disc801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=185.71.70.78 disabled=yes list=TRUSTED +add address=176.53.203.171 disabled=yes list=TRUSTED +add address=176.53.203.170 disabled=yes list=TRUSTED +add address=176.53.202.194 disabled=yes list=TRUSTED +add address=89.110.101.17 comment="!!!VDSina Server!!!" disabled=yes list=\ + NoVdsina +add address=149.154.164.13 comment=telegra.ph list=FuckRKN +add address=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=172.67.182.196 comment=rutracker.org list=FuckRKN +add address=104.21.32.39 comment=rutracker.org list=FuckRKN +add address=104.247.81.99 comment=lurkmore.to list=FuckRKN +add address=8.6.112.6 comment=dou.ua list=FuckRKN +add address=8.47.69.6 comment=dou.ua list=FuckRKN +add address=66.254.114.79 comment=youporn.com list=FuckRKN +add address=185.110.92.41 comment=pornolab.net list=FuckRKN +add address=185.110.92.40 comment=pornolab.net list=FuckRKN +add address=172.67.172.95 comment=crimerussia.com list=FuckRKN +add address=104.21.71.238 comment=crimerussia.com list=FuckRKN +add address=149.154.167.99 comment=telegram.org list=FuckRKN +add address=149.154.166.110 comment=api.telegram.org list=FuckRKN +/ip firewall filter +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=12h chain=input comment="block honeypot DNS" \ + connection-state=new dst-port=53 in-interface="ether1 - Unet" protocol=\ + udp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input connection-state=new dst-port=53 \ + in-interface="ether1 - Unet" protocol=tcp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment=\ + "block honeypot ssh rdp winbox" connection-state=new dst-port=\ + 22,8291,2222 in-interface="ether1 - Unet" protocol=tcp src-address-list=\ + !TRUSTED +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment="block honeypot asterisk" \ + connection-state=new dst-port=5060 in-interface="ether1 - Unet" protocol=\ + udp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=5d chain=input comment="block honeypot NTP" \ + connection-state=new dst-port=123 in-interface="ether1 - Unet" protocol=\ + udp src-address=!10.30.30.0/24 +add action=accept chain=input comment=\ + "accept NTP clients on local area network" dst-port=123 in-interface=\ + Bridge-LAN in-interface-list=LAN protocol=udp +add action=accept chain=input comment="accept WireGuard" dst-port=13231 \ + in-interface="ether1 - Unet" protocol=udp src-address-list=VPN-Server +add action=accept chain=input disabled=yes dst-port=443 in-interface=\ + "ether1 - Unet" protocol=tcp +add action=accept chain=output disabled=yes protocol=tcp src-port=443 +add action=fasttrack-connection chain=forward comment=\ + "FastTrack for non-VPN connections" connection-mark=!VPN_No_FastTrack \ + connection-state=established,related,new disabled=yes +add action=fasttrack-connection chain=forward comment="defconf: fasttrack" \ + connection-state=established,related,new disabled=yes routing-mark=\ + !To-VPN +add action=accept chain=input comment=\ + "defconf: accept established,related,untracked" connection-state=\ + established,related,untracked +add action=drop chain=input comment="defconf: drop invalid" connection-state=\ + invalid +add action=accept chain=input comment="defconf: accept ICMP" disabled=yes \ + protocol=icmp +add action=accept chain=input comment=\ + "defconf: accept to local loopback (for CAPsMAN)" disabled=yes \ + dst-address=127.0.0.1 +add action=accept chain=output disabled=yes src-address=127.0.0.1 +add action=accept chain=forward comment="defconf: accept in ipsec policy" \ + ipsec-policy=in,ipsec +add action=accept chain=forward comment="defconf: accept out ipsec policy" \ + ipsec-policy=out,ipsec +add action=accept chain=forward comment=\ + "defconf: accept established,related, untracked" connection-state=\ + established,related,untracked +add action=drop chain=forward comment="defconf: drop invalid" \ + connection-state=invalid +add action=drop chain=forward comment=\ + "defconf: drop all from WAN not DSTNATed" connection-nat-state=!dstnat \ + connection-state=new in-interface="ether1 - Unet" +add action=accept chain=input connection-state=established disabled=yes +add action=accept chain=input connection-state=related disabled=yes +add action=drop chain=input disabled=yes in-interface-list=!LAN +add action=drop chain=forward comment=\ + "Filter Rule to block FB address LIST : )" disabled=yes dst-address-list=\ + facebook +add action=drop chain=forward comment=\ + "Filter Rule to block YOUTUBE address LIST : )" disabled=yes \ + dst-address-list=YouTube +/ip firewall mangle +add action=mark-connection chain=prerouting comment=\ + "Mark VPN connections to exclude from FastTrack" in-interface=WG \ + log-prefix=Mark-VPN-FT new-connection-mark=VPN_No_FastTrack +add action=mark-routing chain=prerouting comment="Test sites" disabled=yes \ + dst-address=!10.30.30.0/24 dst-address-list=Test new-routing-mark=To-VPN \ + passthrough=no src-address=10.30.30.0/24 +add action=mark-routing chain=prerouting comment=Instagram dst-address=\ + !10.30.30.0/24 dst-address-list=Instagram new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=Twitter dst-address=\ + !10.30.30.0/24 dst-address-list=Twitter new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=YouTube dst-address=\ + !10.30.30.0/24 dst-address-list=YouTube new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=facebook dst-address=\ + !10.30.30.0/24 dst-address-list=facebook new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment="VDSIna for All sites" \ + dst-address=!10.30.30.0/24 dst-address-list=!NoVdsina log-prefix=VPN-all \ + new-routing-mark=To-VPN src-address=10.30.30.0/24 src-address-list=!NoWG +add action=change-mss chain=forward comment="MSS on WG" new-mss=1380 \ + out-interface=WG protocol=tcp tcp-flags=syn tcp-mss=1381-65535 +add action=mark-routing chain=prerouting comment="VPN Network" dst-address=\ + 10.8.0.0/24 dst-address-list=!NoVdsina log=yes log-prefix=VPN-Net \ + new-routing-mark=To-VPN src-address=10.30.30.0/24 src-address-list=!NoWG +/ip firewall nat +add action=redirect chain=dstnat comment=\ + "FORCE DNS TO LOCAL MIKROTIK DNS SERVER" dst-port=53 protocol=tcp \ + src-address=10.30.30.0/24 to-ports=53 +add action=redirect chain=dstnat dst-port=53 protocol=udp src-address=\ + 10.30.30.0/24 to-ports=53 +add action=masquerade chain=srcnat comment=WG dst-address-list=!NoVdsina \ + in-interface=Bridge-LAN log-prefix=WG-nat out-interface=WG routing-mark=\ + To-VPN +add action=masquerade chain=srcnat comment="masquerade Default" ipsec-policy=\ + out,none out-interface="ether1 - Unet" routing-mark=!To-VPN +add action=dst-nat chain=dstnat comment=npm dst-port=81 in-interface=\ + "ether1 - Unet" protocol=tcp to-addresses=10.30.30.33 to-ports=81 +add action=dst-nat chain=dstnat comment=amster.vados.ruhttps disabled=yes \ + dst-port=443 in-interface="ether1 - Unet" protocol=tcp to-addresses=\ + 10.30.30.33 to-ports=443 +add action=dst-nat chain=dstnat comment="amster.vados.ru For Certbot HTTP" \ + dst-port=80 in-interface="ether1 - Unet" protocol=tcp to-addresses=\ + 10.30.30.33 to-ports=80 +add action=dst-nat chain=dstnat dst-port=80 in-interface="ether1 - Unet" \ + protocol=tcp to-addresses=10.30.30.33 to-ports=80 +add action=dst-nat chain=dstnat comment="Yandex.DNS Family" disabled=yes \ + dst-port=53 in-interface=Bridge-LAN protocol=udp src-address-list=KIDS \ + time=6h-15m,sun,mon,tue,wed,thu,fri,sat to-addresses=77.88.8.3 +add action=dst-nat chain=dstnat disabled=yes dst-port=53 in-interface=\ + Bridge-LAN protocol=tcp src-address-list=KIDS time=\ + 6h-15m,sun,mon,tue,wed,thu,fri,sat to-addresses=77.88.8.3 +/ip firewall raw +add action=drop chain=prerouting comment="Drop Honeypot Hackers" \ + in-interface="ether1 - Unet" src-address-list="Honeypot Hacker" +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + extras.getpagespeed.com content=extras.getpagespeed.com disabled=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=linux.duke.edu \ + content=linux.duke.edu disabled=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=vk.com \ + content=vk.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=ok.ru content=\ + ok.ru +add action=add-dst-to-address-list address-list=Instagram \ + address-list-timeout=none-dynamic chain=prerouting comment=Instagram \ + content=instagram.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting comment=Twitter content=twimg.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting content=x.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting content=twitter.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting comment=YouTube content=youtube.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googleapis.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=ggpht.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=youtu.be +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=ytimg.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googlevideo.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=gstatic.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googleusercontent.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=nhacmp3youtube.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=rutube.ru \ + content=rutube.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=me.com \ + content=me.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=icloud.com \ + content=icloud.com +add action=add-dst-to-address-list address-list=facebook \ + address-list-timeout=none-dynamic chain=prerouting comment=facebook \ + content=fbcd.net +add action=add-dst-to-address-list address-list=facebook \ + address-list-timeout=none-dynamic chain=prerouting content=facebook.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=comp-lenta.ru \ + content=comp-lenta.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + smtp.mail.me.com content=smtp.mail.me.com log=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=gov.ru \ + content=gov.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + r78.fssp.gov.ru content=r78.fssp.gov.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=api.db-ip.com \ + content=api.db-ip.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + api.telegram.org content=api.telegram.org +/ip firewall service-port +set ftp disabled=yes +set tftp disabled=yes +set irc disabled=no +set sip disabled=yes +set pptp disabled=yes +set rtsp disabled=no +/ip hotspot user profile +set [ find default=yes ] address-pool=dhcp +/ip hotspot walled-garden +add server=*1 +add server=*1 +/ip ipsec settings +set accounting=no +/ip ipsec policy +set 0 disabled=yes dst-address=0.0.0.0/0 src-address=0.0.0.0/0 +/ip ipsec profile +set [ find default=yes ] dpd-interval=2m dpd-maximum-failures=5 +/ip proxy +set cache-administrator="" max-cache-size=none port=80,443 src-address=\ + 0.0.0.0 +/ip route +add disabled=no distance=3 dst-address=192.168.0.0/24 gateway=l2tp-vpn +add disabled=no distance=4 dst-address=192.168.5.0/24 gateway=l2tp-vpn +add disabled=no distance=3 dst-address=192.168.0.0/24 gateway=l2tp-vpn +add disabled=no distance=4 dst-address=192.168.5.0/24 gateway=l2tp-vpn +add disabled=no distance=1 dst-address=0.0.0.0/0 gateway=WG routing-table=\ + To-VPN scope=30 target-scope=10 +/ip service +set ftp disabled=yes +set telnet disabled=yes +set reverse-proxy disabled=yes +set ssh address=10.30.30.0/24 port=2222 +set winbox address=10.30.30.0/24 +set api address=10.30.30.0/24 disabled=yes +set api-ssl address=10.30.30.0/24 disabled=yes +set www-ssl port=18443 +set www address=10.30.30.0/24 disabled=yes port=18880 +/ip service webserver +set acme-plain=no crl-plain=no graphs-plain=no graphs-secure=no index-plain=\ + no index-secure=no rest-plain=no rest-secure=no scep-plain=no \ + webfig-plain=no webfig-secure=no +/ip ssh +set forwarding-enabled=both publickey-authentication-options=verify-required \ + strong-crypto=yes +/ip upnp +set enabled=yes +/ip upnp interfaces +add interface=Bridge-LAN type=internal +add interface="ether1 - Unet" type=external +/snmp community +set [ find default=yes ] addresses=10.30.30.0/24 read-access=no security=\ + private +/system clock +set time-zone-autodetect=no time-zone-name=Europe/Moscow +/system clock manual +set time-zone=+03:00 +/system identity +set name=MikroMaster +/system logging +add action=email disabled=yes regex="* added|changed|removed *" topics=\ + system,info +/system note +set show-at-login=no +/system ntp client +set enabled=yes +/system ntp server +set enabled=yes manycast=yes multicast=yes use-local-clock=yes +/system ntp client servers +add address=0.ru.pool.ntp.org +add address=1.ru.pool.ntp.org +add address=2.ru.pool.ntp.org +add address=3.ru.pool.ntp.org +add address=time.google.com disabled=yes +/system routerboard settings +# Warning: cpu not running at default frequency +set cpu-frequency=700MHz +/system scheduler +add comment="Scheduler for Update Certificates CloudFlare Quad9" disabled=yes \ + interval=1w name="Update Certificates CloudFlare Quad9" on-event=\ + "/system/script { run Update-Certificates; }" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2025-11-28 start-time=05:45:40 +add comment="Every Day Set Global Environment Variables" name=AM-SetGlobalEnv \ + on-event="/system/script { run AM-GlobalConfig; run AM-GlobalFunc; }" \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Every Day Check For Update Scripts" interval=1d name=\ + AM-ScriptInstallUpdate on-event=\ + ":global ScriptInstallUpdate; \$ScriptInstallUpdate;" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Update RKN DNS Looup" interval=20m name=AM-RKN-dnsLookup \ + on-event="/system/script { run AM-RKN-dnsLookup; }" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +/system watchdog +set watchdog-timer=no +/tool e-mail +set certificate-verification=no from=MikroVados port=587 \ + server=smtp.mail.me.com tls=starttls user=vadossio@icloud.com +/tool mac-server +set allowed-interface-list=LAN +/tool mac-server mac-winbox +set allowed-interface-list=LAN +/tool netwatch +add comment="doh, doh-url=https://security.cloudflare-dns.com/dns-query, notif\ + y, name=CloudFlare-doh IPv4 1" disabled=yes down-script="" host=1.1.1.1 \ + http-codes="" test-script="" type=simple up-script="" +add check-certificate=no comment="doh-fallback, doh-url=https://security.cloud\ + flare-dns.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=Cl\ + oudFlare-doh IPv4" disabled=yes down-script="" host=1.0.0.1 http-codes="" \ + port=443 test-script="" type=simple up-script="" +add comment="dns-fallback, notify, name=Google-DNS IPv4" disabled=yes \ + down-script="" host=8.8.8.8 http-codes="" test-script="" type=simple \ + up-script="" +add comment="doh-fallback, doh-url=https://dns.google/dns-query, doh-cert=GTS \ + Root R1, notify, name=Google-DOH IPv4" disabled=yes down-script="" host=\ + 8.8.4.4 http-codes="" test-script="" type=simple up-script="" +add comment="dns, notify, name=Cuad9-DOH IPv4" disabled=yes down-script="" \ + host=9.9.9.9 http-codes="" test-script="" type=simple up-script="" +add comment="doh-fallback, doh-url=https://dns.quad9.net/dns-query, name=Cuad9\ + -DOH IPv4" disabled=yes down-script="" host=149.112.112.112 http-codes="" \ + test-script="" type=simple up-script="" +add comment="dns-fallback, notify, name=ns1.unet.ws" disabled=yes \ + down-script="" host=91.192.189.2 http-codes="" test-script="" type=simple \ + up-script="" +/tool sniffer +set filter-interface=Bridge-LAN filter-src-ip-address=10.30.30.50/32 +/user aaa +set accounting=no diff --git a/MikroMaster/history/20260505/20260505100002-Diff-Config.rsc b/MikroMaster/history/20260505/20260505100002-Diff-Config.rsc new file mode 100644 index 0000000..18fd582 --- /dev/null +++ b/MikroMaster/history/20260505/20260505100002-Diff-Config.rsc @@ -0,0 +1,12 @@ +4165d4164 +< add address=104.16.3.81 comment=xhamster.com list=FuckRKN +4166a4166 +> add address=104.16.3.81 comment=xhamster.com list=FuckRKN +4172d4171 +< add address=8.6.112.6 comment=dou.ua list=FuckRKN +4173a4173 +> add address=8.6.112.6 comment=dou.ua list=FuckRKN +4177d4176 +< add address=172.67.172.95 comment=crimerussia.com list=FuckRKN +4178a4178 +> add address=172.67.172.95 comment=crimerussia.com list=FuckRKN -- 2.52.0