From ca58ef4e76279d1292cbc6e7e3a143f07f904ab2 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Tue, 5 May 2026 12:20:24 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at May 05 12:20:24. --- .../20260505/20260505122002-Binary.backup | Bin 0 -> 270787 bytes .../20260505/20260505122002-Config.rsc | 4506 +++++++++++++++++ .../20260505/20260505122002-Diff-Config.rsc | 12 + 3 files changed, 4518 insertions(+) create mode 100644 MikroMaster/20260505/20260505122002-Binary.backup create mode 100644 MikroMaster/20260505/20260505122002-Config.rsc create mode 100644 MikroMaster/history/20260505/20260505122002-Diff-Config.rsc diff --git a/MikroMaster/20260505/20260505122002-Binary.backup b/MikroMaster/20260505/20260505122002-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..0d74f04e12511a1b55f95ca652304a65c79686b1 GIT binary patch literal 270787 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 _NOme>5Fa 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�k(%q#7txoRq>NG`{5uTD z*G6@<{u@_PyG~7CHM*sF(mTBuReX_R&aEl0#;VwlZDI%Gv3hf(+IKoVHwBX8F3qvN8toaU;*#G^Ux7u@mYJ=hC^RhMuQ9} zf*kFNKcG`Q{opl&UZCl0AB%0GRP~j!BeW_44+?Q`&xMOv8{vzF4V+{>*IL~0ZkCjC zP%DC089-aYFaZBQ0Kl@o#AQV$ZBe3IHx_#acN1L8hiNM>!lS9cxoqR;7#r-?e4?33 zzaAFO=Xa?=(2wwjOsleI7KRR9ro>$|KHsd^&N(?VquFNek=7@F{!l3y;TN;vM?`$5 z%CH+vw7NIK)BJw}&O=Gvz+_@#-x2-1sdx2wMJaSgm}>B|L(>!ARd$4M1Yh)XMG0E| zQNy8;$l2$G35Kd-o}B&@_ey=ykAc@3^fX*Tt^ua%TF>UIBzmSTdhm#gntFZkjQ`w- zVAUqRt!~cX8AD|jqP4_iRf)wv)=@E9SQ8tp!H*%0rpk*3q4>0oE2PVpj^Zn}n!pCxQqf0axhwBPk0QDbVZ55!=28+R_L{c$>ibf?v2X)b*g-H+UP%UFY z`?8MjDf9K1i{XD=8M@S;ac*1HNucj&Q?&l7ryhAdD#f`)P5|gw^qC}lnGX~9E$i6r z4q6tt?=?_}y^&~uq5sp!E z7wg!oj7Sqq7e*CO`JxWtPE;w`>G4OSwoegI>4Vf-FhZeV3 zZ&MR6Sh5v)O-_qoznBL8hc504VNlf>g0CkOj{!-qWE1H(Z1=l`IY{_}cpQH#t3UAnsCyE;~ z;Yq<$ZHW7=wq$7S*Wt?he&@)IW!Ryn@HDQ3ya+SW^=CgHut?$5qRHsaIh-a%wN7d- zS{@Ho?M)AHzj@4{>VXH7w3RK%uju&Pa4Gs=>Dchd{n_vd#iQwJKEzrW!#EO3_3AVkK@8tdcF z^l`c+=7YoOye*ZlbIgj#luKXPWcbps&S<}gPS)6#Vkm5K!F#>JF>)Zju=7K~0y(zK zKFV6zRlqP!n9vic2l+e(=Q9o-lc(y?Ik@2MV^!iwsSr?Yeox+b>UeUbe1DIIzJVhg zgOvNF5T3yvGi3y$rVr#^fUOvj`2LTvgGhAwB_TP58U1)?A`*$fI3>`tt`aco)a4VZ zRv65!W+*-%jEwC1!0+0)NxwCIw>efyp@vOY&cWmJnGOneHs^T31#qX-mQEK~fEo0x zv{x<+L~cxEFen##|J_&nQ2Oy9Yk=vP>v_JL52q&m^ z1F!1R6}o$|YBDvJ z?7zk@D$_J4@v?#q0{ah+@fPTiBCtCmRge(-?YhKXViKkBmf9t)|c1;a!WOwDOOe;i?6=f%@51W6>5jhSvqfq?I{@P<|Pg}N{W4o#eHBr## z$6Q1qbpgUo3mnm{RllRMdRn<{&p}%{V9nY8jPvn=l)icq*ZI*UXDx}G$BIR)nM|;+ zyE<$UBR8A+cjH)DTmXF$hHi|qEnKCC_{$1@`QSE!Apq%Q?P6db!z^TlF6tbDa%A+x z%KTK)*S;g`wp7yN@n3~>Z>tHtb4^fJPuI5DT^xuywq|>~gR^2cpd}-I&mlZg-4W)- ze32t$4B!#o!TKv9gw8}|J?;Lbl-c8yqRB2a%KNqTgMFhSNyKI0GPln-ECp| zz4yA60=RB1GgN!mPMRL((;U-}Q5sW*m7rZsE{viaYHziF+4JQLvO+)ft6Iqk3r5$Iq54pvzhxvX%7nIh(%1o85 z4Yj)V#mc%;iSKn2hV3!`c)gE-LfF&K)x-SfOKntZ-v z{m3?98epizu&uv6sVD|zscgQ+A?c2rv1CaBu%b1V zN97e$4VjwYU_eaLh4;hy5m|0FICEZMrfF?~*cSe&b+65^CfMaUClK9;7Vt`zBp9Ga zN|lN2>(+7&63U-NS&a18Z!7T`4q7JiSQYUJSdqr?hTXQ^M1l<&4W6~x6F1Y9I322@ z40Y(V#((`cOH;+k^5TSH1*ZFL_ACW)?4CF&kqZbHFMXuQVJG+YT>nn$QzYw0w9YsW3nq#vP4BCa*Oi5 zdz6VcmPYH>VWMBOhCQgFF#$%#13CT__2Qv!JNLd-^`49J~Cp{kh z+FjQTv5HuiKoWj z3xiVg!~QfXa(*vdN4f*;>Q+c1|Lz`k%tajYUTGY~#$z6|Y;X)<58xLvE=+e)G;#5S z1FqZ?VCIiJK1v#^PM3!9~Ir)cx~7hv<`mstmxDy9teJzsqkq zthw)lpeZpYA0b1Y0-~faD9q-p4MNK-A2;tUHJjo0im(Srk+M~qi^Yn&h`~s@rkoBy z%5NB%rfQb`;+2~I!t_B$f8o?P^Zi+R%r_{=A&H`idQr4^4~je;k=#gnMf+0uTIlo! zp$2BT-CRlhKp8$Qbe)$VZn%!!ImBPQNz*qF>GwbGVbCV z{3yr}aVE-W^h|I5X_-#lswsZi9o8+9&QEl0_U(#MT^*6vfZZFbBd%{xKdKzM1T@tg z^=lo;d7)h&K3kK~7w&P=@A8w#1TrKXYu{?z!WlEV8$TnW2sRhXpdkpr-AYOPe!(^k zyol-gqsD^33NQy%Qm;C)badl3eoQk-tSl4eJ6sR)3{74Gb!!QeCaOflTDX;@9mu(s zq1%4$Us+%0=A76Z@%ncE5ns<!w2N>F;2-tNr9ez~DlLZsJ^!Z9EUFBCr zGQI6KW$+ooli)qJOc}tFu1gA#k9S4iMzE7*_| zl9*@NI~!EdI=e;-rtv4I(;A8(wy#RIRf#I;va&xy7n~1AU|82pi7IWrU#9fq54p!& z7VFIBl<(#CzuWqK;YbsklSd!}VL`wnytuwek~*BhBZ7k8@1*o#Z7-u>#Z4ux0JM&y z@*Jw1LRxhQ88J3Rkbp5Rf#s+Q!uxd0-uE9^{s8H~Yl1pL0gk$JM*H-_VUP1?)3E)b!(>RKUs7-f$JMg^_|S;o(T`MTA84a3s<{J7WX zVMaz4^UH!XN;ls3&8~Mvm5Li1Gb#Z>BEH_{l|ZYwG=H77xOUQXv@ zuBw@0gREHJa+$X7V!;##FYs#{K<>-C3PZHh62P5qdafp;zfmOWd zKIgap9UU)X3>%8(+5-b+5GvF*sKTnN*@dP3RPyD9QgBW>l|EUX(f=uN+k_5Z)>4)v zt&Zf=r01Pi)fHk0>D*1W5yf9<@A$%&nHdlb!C|Sif?+n7=vXN2Qzm6a6@CF`&&qQ*gMn^S{V5dgu)1D@9E}40dPtUBPMRtd;;qbU#HHwe>((m9|NEi zYcAk@ajhLBz+)N`@0=}SFR>{kwg9~!0inz~*b=79(a|cP3ZjO*=1SLT ztn3!ETj?7T@x0;qefkR@N8#p(JBU9zLE-|+|nniM|;*zM&JoW>c1Cf7^euiMF0bw`!wq+p?1m?r8 zX(bjPpmO+pjcahN@Su~H;Ka7r2>@sqZs0t7D3b5Oa~%xNPuf;+hSb?XI^XaJ_A-wc zseix#re_=;8G$!XiJ4hMP90HT5vCk)uvgjQ=LOt(Y`>@lF@bMJJ{*b%{f@KMU1r-NfpKUv)fXFtu6l&N|KHI!%UX| zo|FqkqnV3)JU#8tDR+wJV0lo1tl#QIZ2!PNPXDm%*;19{I4wAguTI|m^%}D_`rNb$oe3Q=`S;VMaQ{&K!vo>bj{4v?CE%@4|I0!ujSr{R_LgS?JDOK7!(d?4g&1 zw$W|r0}5M3&LiG2l^hbF2CDOUEIs*e+#;WBP1Zuka})8Q9@Gee%2Xz9x?KFqJWNVKAj(LFZv>iEilcE zrw@DdB7b6pt7tb?4T6N}d$*u(CLs*&;s%|@)Sxx%k#&#l(W6t z^anyhmHx=m8@h$O*YuBe63`$ zY;AVZkWCi}bSG3lR@*5iM7CaJzG>7qx~JSyud8{iNhRZbh&IIN_eb2!>xaiLzie7W zay+QQdG~kCtK7V~F{Qm)Dx%~_abndt%(=;{w??zEBgszm?iST|+<~Y!nC_fzxqo4p z5b(q0)s$P<|6t6sOf2^vWqr|Um%!~2U0#^Q8ev~#EF=_UMdMx^>BG_D^w1XV>4KIw!8}6hU!O{oBB@rIT>X;;G zk=t-eT9s*Dm#kygYsocU!mKmf?5xhM`%l)Rh?9w)NN!yp!`3L%%CMgix9uu-A=T_+ zAQk!Hi-F4EoHeiP#T^4-#)*8}en<3>_y)>SrsN!YywAgXZwZ%jS|Hsg7=Z9bXz8%a zA`P;x-fTM!MnawX1*Ikb`BmJj05|7HRU~~3UpxH+H`YVwYs6Z_&PMZQc7Wx|&(Q`h zsF>IRXUO<$1?iPd$nMt+2TxKh5qFlOuM>r&(>*qWyWE#Hg!wva`*9mQotg%NuyIKj zt!#?WyIUz13}Fky!^yW?HavT#su8g$f>&$%{ho%xD5m#7@C3vW83~&{MHha~@KaO> zbRY0cs5Vdt=?Mlk=PqiwR^6VO*PKl-FG>|tA<2E5S}x1;*^mNru9ns)CwF#E9#4I~ zl;m&aq*{8f7`w;UGP>Hx!a|xh+H&JN>U$!Ev?HwQCL$!|MiNHg4v_Hif5ngYzmMWs zWeduE9Cj%H0$FR4ZCSMP0lU~`bXDhxN^t><3zwvR&x3P6egwrFX9)DppJQw+S`lhI z7_EBwB$JGdmii~ujdWiSohkBNI0DTlmR_Y=aXT~IIcno!w_UvyTMSFS%cWAt*U>%o z{XA;a{V=$H2CF&5=HwvdF^Aks0nQXx*$xotMH2UxCAR2S_S4Nu!ET?=^w=D7>mp{# zY&6wX3bP&r&Ekl`_KJ#lOk@Be8;FKZK-V@&Mt4p9oK5gcvu^k(qpv(xEiG*EGoZl+ zJiPb^mHEk~aO>~T?@@lzXQ%_4-kU)CE>{@`#*ySuL4*HnxPTjgf5%ms?*p~8Ze|dS z7T5SeIpC9$u*X~#jH5sqjf$I`Tb!*qKl>~rj-{bUMyuOo zKGQ9^aLFNpLT%UJ*r=-@;_xYDP(c$h^{8%khxtRb$Fyn&41Oh?hx-=Q&tAu6vo>aE zFoiQ2nbDUm`|$KIOa>p`H*}I`@^CJ!{{>;RTJQe+nsA57B74-%jY6||V?m?2^FPCt#K>Dh+ng$|NjU_WNqhD{%vJGJ=w zQj{vcDQnd<1gs|13I~J(J5CtddNQ9U%1uipVL}9gFONG3cv5r~ zsEP@Z?FULJ-8cW6X{TI1x)w{+CsoQ!>OU%DEyt#a2gZC*$%vq+7sAkk08bEsQM0Rt z35!e`Kef5i#;hE>9>>mzGsr5Gu_M+-Iu?r9uCn{kdJm0a48tHtL4E+=%rt%0GS}W= z0qaBm6$mVqEEoZ%g;H?0l zLgd&(V6TOjsMj2DhYP84I(xUU0sXow^hMH`Nk1>(Stmye5~ibxbLgUpTqHK~G|n8f zz3amgAbzhm;SV{#`q`?IcJftvuycA(5snX#3n?kPD`ohGg)|eB6&?^dffHwG0>UPD z$)V&xwri{O`)B9gY1;e__SlF3p0)<~9<=f~9tbzad+hq1fIA0IBNQm@{ucMW0G-(D z#=^y(qMmaCXQ*KX)L0Jz9MKo_2yF>%~eGxRr! z4_^=}p{DAV9tglQrRwP&pJiC>(Se>(*;)S202Mfuq`4^YR)D3cF(EN=)&~X7bqCKu z%hg$?b*x>o5Q<7cj1Qzn4@;>MTgB?Q)N~|-7I0>UtrFzuD?1YU&vp7;ee6PBT3npM zs)aJ;gs>BxnUKd@hVu)&VRfEEQ70*vLhXbo3wf@+8@7!O8e;nYO*^VH9=!jL9#vjp4wZSh8Kp!uDDKWj9;(ca_ zKdYt(X$NxK49H9XB-zIQ1@aATgE60+OwcudCd*W)8J6N}C`}8${*Y_b$Ci6je3c}B zVB%j7Xu+-FcLEaxuA>Ltm%V@#Bem!Yht|nS&A;{fW;R~QjMBBaY3#`}=eXr1ZmT`p zuLR#mb)*|LDSk<#f)#jud3_jZCMINvo+{4EZ%&QGa8qXfU;=C`Y=VWWi?;!L`4y*a zEB!A3>g4j{K1Fvw_kX$boo4`v}j}P9mOXiNs5Uk(*x^YHd9U ztK5LvH@RCz+lgPh?mm;~5kWpUAm{PqIp zhFNxFd0%$PD12^&;etmEo4xF|_(qJLOc1WEMkI!-DSz5X9~hcj>{u9i!}7MX{T070 zl_ScZ>gKNkwQj{gvI-VDh2-w(r|=Lh)XII3C8VDUxqhxakhg%KE%H@ps#}%o%#r(v zr}H8Tt*bvZbD9Jfsm9|LIJ@tst|uUtlm+#kPQ1t{pqyDPF*Y)@213BcRa!Bq1I?Kh z1i1LLIi!4PrC1ZSHiPn^eFUF#~epWQbr{V9TxyYo*>)nEuO4HBoa z;|1`><9&a9WdqfXu?;8Xyc%T4B}{}7jS{B3nSo1|=&`q>AF^n1vBP6pj^kdz8ROWbxypWubISaALDnmL&9SLxu(DQ*)XIkY zQ$KGIxIh`n-aD{biF>GX-OC9sNmpxl+HT<}>BV=(;s_;H#<%HrzSaK8xtmr#2|NKK zG#nrxeTAJ|r$SHAM8_g(YPgfWiHEC=L5;2&%E+IPJ|6SoNt77aj04|bi+$08jm<#E z#*Th=Ue|k9sKpR&J#k{ADrEqKQ1H&?AGL_oC%cXUg7zBK{$&&L!sA1}yTf?`2FQL_ z$%UudT8Ib_(^^3v=_aNPLIxY{SNw+YAmLp}z@WX0ff5fM{?Z`t;M46~;VZ}rtY9Jw z0U$KIXBfV4m;3V0qHb;AYEkk(4G|kXn|X}rR+Ts|-l(i`4*zp>j4t|ALQ$sx=WM^XZj?#Qr2sV3i^$Bh!M+s$}ICXQSDAYHtA+xuV=ui*k<9pvHKWk6Vu2L zHghDC>>7twPJ<@z_D~T@@9fD?HtYR%n@G=oG+lxu( zie_lZD1(3@$OH6V!vdH~K5WZ`8taD2(=W+(4Y1&DF!CLzb7jy%Wuc?y-xOpYR{ei~ zrd6o1Ga1Z$L!?DsziJATb)r2x&4hjX&TI9r&v*qTs+VCOyIN$joP`_I4am|)dDutl zdlK45s#SuDN8@gssn|u87@(L$A$nHE$bAw-ZkFH>xDX(V{^f9Xdp`&4*7wEyedy|Zh%9m8XKYj2ZkTM6x#9rgVoU%@wAja1d#nN7%{9`6=NUffM1YNBG?XmK(hqk&H z{Hb^!c`)!TOMeqz@B9$xQ+k>_lwL5Eq_8$+vhJ2~uRrF|ZeDqPXf`4hjWozv>dOjR zlg~F5djuskQ$KsG3?kD2L};6WS}ajXU~md4pTa;c8@xQiv98v@yCfG774YXk^Wm`D z!@85}DO4qTGl${RtAh6KyD2*;sHl=Zd=z}^vCu_@ODjxwI%mLZAd?#gL)T7~og01+ zLat&`p)IZ-u(t1U7~ml7SThnn-6-S(pLOzAHM}+p?a1j?vb$)wx?+9&KHWV>Naxg{juLk$oCRzxL$y9TEDf`*<*K`NE4$Y`(7kBCe{O3+W!An}u+CEAS zfZ|qTLWYA#B_V_-czZ~+J1tGMM{QdY)E}Xz~J>7Jb`gAoCWPy7j z^lryavm*DW@S11x#-0N+g2Zdy1P+fVV7{vCIu%3(Rvkn? zmaP`do&~>P*8@br<6v(^a*iIvfxdUokqpj^PI$ajX7JP;snY6r-Fw55<{-2XS8kh_ z*YiufJJ!RUHvrxk2s{yBNsdx?i31=8hB5&XvQ}5RwVChL+aasZ=O}b{(p$_%Pq~hm zT;t5u0?RA8u*nyc~v!_#t+a zy54J*i*|XEs2~URs96v}o=@Teil043qAJf9+c zOu+F!N<|^TFMU)h^+TvkF%t4K6wXsoUNRa{#|-x8)SVpN@IYJ2rdmgOkdqL_~QwN5~Tq&PpIk~(?M z-8$OjTkE*#B7ke>g@EYRW1~ClIUNzWn3OLr1PHSjbT!T|cFtf!x_ARSezyf4Z9N_Nbr)%hDnEX^dtK9BGR^1zUJKF1CD zVRX-?tSYBoS%|?-f(k+ub|t_jmBR9kP3OL`do}Of51V;->^H*)MFjK+J>_xrsj4cl>)?%?z9jSRD=HhRQ zJv{)@*{N;oc|#xC%cgjaEhv|u^(IJ2WpVf+`e1Mq(^qh~mv3ZYv?SX8A{o9rGP3=Q zhS6JgkTRUh;gI*NPs|6{yTm|x3Zb)x=miS&k-z$;Kw66`BEE;2+AcX-5c5kjaDp!# zK8aMTyJcMn!g67;q{;g8BnJm9akx?7LX}AB9Q~kss#*T8rfM{Uob+raB5}7>Fwv=B z6h|bBMa}K%ilmWf#7Z>}qtfkvVZ1%+ymqhOt^ApXGO799Jt7~ohkK^ZnJ0y*$3Y}I z85L?tJ29s>mZwhgZtATnymP(9sHAeR3xAHB_&7qyvNWm#%stwllR+eYt($D=USp zGAGauu{u$TaTdDA_sVK-0v2AGBoCrje+Gn4cud~#$R;HkLp_RU8hfBM7{vc0dmWB; z*wpJAC`@ww1K5D=APW>lV?D-L*m2uueLTk%uBN5kkPv29Qc>+Uyh z4i_HsimS273J_TbO6K(h-Yb&6#~S7-or80mJrOY}Ax*fVXtM~7huji|;i85JU+g9A z6CIAdpKn}t64ojTE4G`efKs0#*$LbZ5rRRD_d1{uCnt8NL02Oe45RN&|Zxu#a-lr8G1kNb0Xh~S~T{EY4_a8K0({~Z&G`rjBiiBXLHhh!+(n+>qnY8;7y(V(k(4nI+4fJ zHaepRB98!mqxzY>awrrmO+f}Nd0KyDkl+J1hOlR-TU~`7m&h=@6IPw+WHAHMiVoxr zTaoydPXZf*eM#UuZ#nN{RWKeZ1-dIHrFsEC#dQ65_WnyPT#5M3M@O;J zCNNuM1&ke~|C2Q=cisLY@)Z~nG#U&g(#5#{0?`mY;u0ON3Xh`!mB6^&Z~qZvXyKvz z;y?9oI{9fm6dvR6JYDqk0Ob8$OO{9egP5v(k@ms4+F4PD=PMcH+yln$5zTVU+~nQ_ z!S$?I9xX=tq|$)S2has3T{7OpECkF-SmBSP@zjES5q5-DO#nNmJ)1pnk>ohaM{-bY z&p?7Du44OKhDunWuzd!K^R`C_lg_}-<*Pjlocufz-HAB+JHoV{fns)h^DI>|lAf;K zt}jywL0zqVAv>5~olSei0f6RC_Xp;oJ2S)WNVmmm0g|fPGg{UGTqSe#yZ7sRDS-|& zZO4X2=HNUQvMt4Qk3J$NG>JiOFzvW=>L7SCD&Cam#2?&&0a?@p*!T`lip9a=OPzvY zrhG_)Fi`hCYPZ=!w+KBV%gmti6x+kcHx)11t!e!Z z0ob~hA4;4#_=H%uCyoEuT-?)stiV~TgL1Z~5DWL&@^x*XC~B73EgEmDq3MGteQLtq68C2-s8g+#JNRy~9rsu9Ui+#4)w{?Ot(r zm0jPR(mj2`*0B+FJ$QP|%M4m_ z>fy-g38hR39~ln@fcRu}D%UFcSC(^jqJk+$jNr~%+kwZE7$%Oid`h9qfRZQ>?~7bj zdiLBxU%Ac2P-a|o@SHkUJ(_8}?@>w}%=-%iU{{8EFW;J<_GX(RlPjBr(?44zpE;3W z7oiPpqg(YRDd2>NWv?k1CkIkrh*A}%V2`Vt6oaXGC&K(l&?#Wip|(MI&}KzJX!f^<~*5| zlgs@~D10v#bqA^SOxM%%Y|k4x@^adBJrZ5O)WpMm7IS#o1U<0l$F$s1R19U@h(yh9 zRCgYa)`mhR=hB#0KnUSD;LzLc0$C=o@GId#rU&#v>R^6M!7D!sk-EeZCkMo0-{LO6 zGC3r=P(AfGSAal0iou_`%2vYQlV@49zv%F;?LsNJ&BJK2V_=*xm%_8fYW6=EjWiiIR2<%eZfahIq;__gmYfn4? zwE2Pb1zpsU*X6Ozaz3T9OylR;K5A2oqJ+sMj?7q37^P7_m+ysxi+#C$+UypQ^vgv3 zSIZ0_CH0Cre)2|TF-g6O@@*{FHxtGuP2#`4y58el3`Yrz_GtBK8?h#~)(b|gJwsS? zmMQoQhj0yE+=ub(Iu$94BV@}ZC}~p)rbAs0)xF)65?yQ7pbDg($*YjaRcBeM7l80I z0Krj>nl=)~5KF}p{-8Sn7;r5NCHTM07rRHJvbLaCfl~S5+mt!a?Lw8>SwG{Fl?HoW ztnf!Y5B24lVY>?e+81l;X}h?`&8^rgpoiE3tLg9atJlLKTQ6c}76DV~Kwm#h7Xr~< zuCZ*JCj7Z8b{^$ASseA>0Qzn=C;sy8+&<&Be2`QMH>a2l(5D?f?#_Vb8qvejfs2#x zLvJ3t+gv6#F~i#Hj8)$;j+p~`Og~VF$j=>CDFE+^$~$Qr@u|;bd{lz?kQ~tv>2{q0 zqvbkS_Eqg@s?PtTiv!4ua@|BbAr+?oqhSBJd12WvGYUG*a}5X?sy+pVXnsLNMPHhd zbb>)v!0>qLk*WDMC@f#-L21T|A5d36fDP5%o;`oo zK_d=!*zb;iX)OcNSc%GuI4ziu%WRM8(za|*2GmFp3Q-hH9v|LvMt!V4(00GcFcSv( z9c7QA2BWL=YofbnG!^x+R4#ITPZbJe={O-WE4k5Zb6T*{e4UUCS>Xpps-XdLYesOtyWdez_%SH#)!yzUjK@?YppmTAh z%C^n*=)3j>sq$bqsfu9qf!d=uO^B2A9sJnI#hA`pk$$aO6A~L+!9bPwGhH7O;U2*p~Cfqk2 zFhPE~&v+ZW*M6r0g(=BlL7ki7OvxI#sOr_|v9*T{G)eCi&m88pd6Fipryr`hIw!&hBi?%r~$gU~d%3sJj!xGnxD}e?1IwTE$^B?f~7aq#a{w(#n;NUS{X36&7agk@lEi8N^Y2 zLE3ua)_i_TkWWuJhfhmP(aSv$rc~vM=;3ebi3`(oatM400LN8h0p!wWRG#TU402;3 z32Oi3K5vIVY{<^3Wkx7w$l!}*<+rOK4<$3fP(h5Uq~J^!romM+lH2!^0u&Mhiwp%O zt>5{qXMooM1h$&t>wcT^~Mnn<(907-$>%(XdZJ+ z=4X7Tfr-_IOKEF|Lqr6N0Ikt>FBCs_HdJh5pTJ~BBKe0^AwJ35w+!MG1r$%Y)WZ-;q1>)tJ9Xy3gI1mEV3njNyyA z*Eu6hQK9%Q8jn(9T>_Ol9w_tpt{{(e^dXqxC1{7EDly?t&N>dw!A@ny?=ne3s@^FB z?Gq4np-YG31N~Ud+^zRZwc@=^1ArHiSZeAxRL>d!C*3(_=(dkNn`DMs898&sOPwzI zvZ6TZsPp^f0yJ!wcow{Yy)O5|g@>yOPU%D5*?Dc4)4qNog7UU(vmT=7K$PgKcaEt9 zK)eMl9w`Ly%k9HZ*G4$%|0Ub=3aP{U#-15yHvuvE3|TptNh%`Vl@h7>IrGISbiGmS zmi~eSTBJ=5mCJ2ok`RNc(&FiJY{u|leUZm$C62sA9~U!NKxFUE0#)AT0@IhdP)kXT zn`eb9)pbDztyq0BI`&udVECjObB>sGS5yNO;%BQxwKPdwwZS6*2Ah0@Ms>@i9llGm zigjHg?CFKKmmfJt(>tk&pvY_$&!E%-T%D?WRRsJl>~SmQVW>a~KgLF$5?Q6?OzPn* ziDFIa^A@|_Vjs~l$Z zGY0U7&J8K&ja^8mGF-i2<-H1EC{m)U%p1&S2ze0|^U2@|_mxnR2sKNf%N z!XpP6%>e-E8fqRf16^{)j20-q^X1qNc=n=N{@|hsyHL8iVbx?64s6|kiFKMkg+UnV zw&gu3H{rAaUP3<)ADW#$6x#7pD1B*57`9Gm7{Dldd&M;F2O7kioEX3G`EY}7%M90X#|kR z-AD$idj2}@+5%tB)I(T|M}xFv%@5n8KU7Woq+0qlK0Nwa|HePi0Vh}EzdZ#`46sQNEmUeHV?tz^zk{eNXfnD>3U| z8CFirO>QD3v3D818ibuI=!Lx=0}yc6Yw%~e?H9%jsF1Up#oh^GtT*jQHX9jo3+5vW6IX4ObE8+CE;d16dr#stqT@~buc zJ2@gVnSk^|TGINgNvigry6VvkcATPTX_LhXmyhYJA+ki!F~v;}5U4>&kSpckU?mtAA5 zy1I2o;Ni#_J*5CV{li<4nJ0Z@6`jq-c?= zPf#zb4FUEEBd*6(AyIVlh_hIO6@hNpLVB#g4=p6Xg7XxU!Sbt0n=%I^0Zg8MFjFbC zcw1o_F^zoC$z>9I%e%);urgQr?hf0?I^42Cf((GecG zy+3`~rRP(6l$a&SA!w9sfeexUKZT-HQhmbeS{L=VU#W8R14OftNC17{Ck2YR8)sI`F zP8HK9Q$mi>e#Fk%af2o%~0y`b*Tc(Nws$) zXe(ZFQhL{F!8qtw)R#$Q`BlkXQ^~t4;>zPw?+)4j~nJ>{NME zfs#wVK24UTfBPlyU#w}5OELTp4;vBgG>Dff+6~p3yD>|gk2^J1cS}zWM=ng_`<+U4 z03I`1x3nKye+NHIH-L+AjnDtAbT=iVb|Hr)*Ya8`4Ng1GarAI{V!QO)eGP77c2k2Y z=O`NCp1*W=B;W;-!dS67u+1Y)ss6)l33l!^@doZ{O|Yu%DH#8tD4^j>B6cd^sgK(1 zvz^4J2c%`L@0mHXayx{r62zkorscT^-`rnhE9P@CR`zRHS2JO!yzi!rOTnMgQ+xuT zWKp#zr*U~ht+!qL+GLaQ%oqv!eA{hrOZrCtoPrcihy9jeisi=L$vkG}Ye=5x?@Ygf z{c%8+pG1>E-OroQ`_YbRiB8eZov+G!(}G}g-ZMPIrUhrLMSKev_PV+o0tT|xN3GXP zKOQRvInWha@I8#>?gW*l@uaxE32U1T_9Z(uH7#X8!!+H(ywF9iFMcS}R}oL&6er;f z|DM5Hj}<<)QGxt7WUcYm5*A%26rhdS?6rWfvx5Wbs8aLYqM2C9{biUcRC91s6lTv#C9_(gbn+bN*986(y=ycKdgMM1iZsCx)2hZoZ`M+J(aq^O`pxPidq^03H- z9cg-cR@fz_GfGl;d(&Qjig_*gqF0LKN8dh0BbvgHE7fej%POtwk2u|u9@boq&|+_z zRNMUF#>kmAkUX2hb0iIS+#Eh}x{!1|9T<6@L@ZLx#E9-Xk5z+QqrKfT zs5nIi!T_t$)qdtqg0X^4RJA=;Ez64eQ2XRJ9@=u$r;2|P<#cN{wkyYz-*AMc;fKFo z*3vIue%HRvsl}OsOs!yxd`bU~2V8O-NO=TGE_wfDDB5HB z0@NyCs{_d+tvz1n=ViGS01xYb^OY?Kcg@Xqt*wn!47QHoywOKik>*tMSIbHwuJMFw zc<`3oRlM;R|VU0Om4x$ zAocLk*&9Ui^FQ8LZ3bd-HyZ4^?{JkZhR0=A(KG$eh}EcG$ECUbzl`|$8vbs4U)(rx zaq&igj29Tqwv^1a=_d{2qz)) z=C@ADk?WW&JC{#<1%vZf?Ys_H%tEP!ON>dY=OUsDYZ@2Ls@!&egAh{ws}mGhm0o?B zDqniSfG7O4GoC3Yl5q9yU5V+tL|L09DP0o#X^lr#VWr}Kh!&y5dqXuoH7{X}0}Npv z`#jAYJmESQ9DCMom9b$hiS(sQ$5?hKHJTQ+dsAuRy=59YMINV2F>8(HsG6^4^{m8? z!G_1@)Pys|#Z^~$0JI=xOA#1KzI**)V@4MxXc5Zh$0(fH055a6eaknZ8@~xEw|q!# zW0Q(XS7lY-d~X+pXv1rg*_E}9-#xtw1d6dbCwUXRkE&;{GH@m?LU{N)xJE>oyBp({ zMhZL8IE7fe6Pc4CN(XUT)`G3Cu<}GBDd%GB=MU;L_2VGA^JA#kHp2NW>OXRwQp0N6 zBuD~wVVmdI{3c078q&jnThZwLioc(8f@7N!Gy#8J-DWARL;O}V+zv5BYOa9X4HqPB zp)({qKc-ISNe-$``dHY-7NW)XKK;h)E+Jof)Eifbi>c$R+n`cmvXt`7XmO$tbgzE( z(mi}aEyu%tezK32FL^%3Q zjF~Kyylz4A93^GpY||O}l1?a3V;#i|C3QQ4A5^ERgHLcM2;O1-g81`6UmQ0zjjfLY z6p>t~d%P_^^NsQF-A=*-9ja)VCD>$i)EB#l7TTs-jpVN)JcKn0I?W9_-43+f%|MYO zn%R3|B0dGUjBm5{U)ytD>Akxp@1_d&t3XYa$ac@>$J#YB#WOs6dmRZ&I|L!|E}EnX zospng(Y}F&hk`X)6<*bKjw^!IfimY#50(#y3wn?2Bt`cD#{g>C>q;cyUoEn z(W)0c(lk~;Q?yNxOMQ`#YclFpR(ac1q?fk0PM<||!WI>z>&ZBpMV{{dbt0KJTI`~* zH}4TJIl=is^yIV;Nlw9!oUn;^2xkA4EZC|F>@Oq43fB}O?-=QRNZt07@8KuHyscVRsgAKe9*|a&Iib->sXnKvPkBSG%6@ z3dw7Q1ZDTVI%X+6@165>o$JjOqvQV($;N=2O_344uhP%q@3KuX=k+Y|HdmWhy3eG} zHO{S$b`a$p3U=Z+s6bWAxZ>)1c4mR=Gs{FodDi%Q_t)J=@9naSaY(v#UR>S#$N?U! zVcX^LYcAs>-@t$`;3!(pYm7%ob``OzvX{v5|5HQ&Y8F#L^LxoR$i7WN9*$rghH^=G z2YmZXnO-X8))MVus_58K7Ha>|fp4N+b7sgrKZ>KY5}KEbpotRBKl8{HNoSwuKTY_Luh7 zny@0md4MS2sjNhzdchmL!-C>*^iC7MD}%uF76=L(7NQS%oRyy~wTj}-(}&Ze$ZZHT z$nN_Wl-=Fmys9J_zut|ob@sC3>=#GB4})gC7_(FB(Sqz^PDKvgeE_gqqU=y49e4Az zR*PT@f1RXZ4qE{{>Ilovoj5T6T(sm3hP`{8EF@kKJTbrot1jh7Bkrh7GYy8E$!s$2 zJ&B($lJ4a&J;aB5b8~=G?-(O%_jT&A7iZ_5=m+r^DhOZ(w>horrh}{>jI0&NIr%}P z(-6!O1@asZWUU|zg*dBg`!OHmZ0%EngCNWZGe2s%=j0WmMFxN_#yAd&s3#16H_z>Z zuj4Jr*A==|X-%?c+`p^=!;AcmOaGB!0LJoolKlG|Gdz%}FkEe?DBLGMm!J~|8BW$j z6X*BgvqKsf9)aJox$=5VfBLGxTnvA{774 z)ww~DUZd;aTPj+)TUJT*Vk~i_;HtOeZmzo;XI9WtWoHD$s zs8vSV39Y+Z;#xDA{l^M7Z(L2b?+K8=I%H@VmhIwV?<#c;&f95!rM%A6B)mOr+# zcCkpFvX=+AgA|=cqBvGo;P5tD7tAj~7HOu3zl^$^#>}*uC+S@o5TU{bMh(E_FF+}y z8xxV}%J2~aMaeIjiN2By6aICTQ_M)0py;(&MkH3RRtNkOZt3TLd8L8q*i<&8aV>_k z6zO&1guPib%h(|%AKbO+_7Ug#!j}bwuV0oT8JxaYeqvTwV{a4;ie*h$!khK1LW6q|3wht6}(Ed!EZbIGlwlYE;Kn!Tvpf9gDoB-!k?6hROrF1Jh z9Epppj3}4U;?bm8=L*?}C4Uj(1@IbisqLB*@Vw2AF(GDi$tu+1E%hS9?OO57R1h~B zX?KQvJzLADco)^^%t#ZUCFP6%_0c><_Bye2XpcL>7pXz)D40!{MEPSftvk!u1cbKzN7^7aAWRso0JJNDwHIHSCTc z*eMzZ%Jv3>CYs|SKI=1~rZiktzj0uQ+U%x~Q<{Q}r{RdhYuxilJFpmQGNKqlVV~F zp~uKn%P`yUFi`GK?*9zqf^Qt#S%XH^%Kutr)}4&F`{br>Vw4qWf2foc_*X*m;DA{l z^_jrNXbOQ1oh1UH(Dcnt1!CXk@HKT*s+JL827~$e{L@WJv7%YJsEIVMxKutrf0M~Q zNmq|c3-llv3mHOG{TDYn7izRVlU#;t1_?J7gM#%}E)qwoAH!g>?d1t*6u4bboS30; zl6EF!QjTSIo&0x$Wwl8ZSe)W>S3pY?XPqQ$jdcuGDK6-h?5wJdI6~_T{$TADle%k< zO$N)QY0))!PKZZnRm8XJcLf8ug>@L{0(=fTbRh%DMt*QNlU)%=iAII~i^`uoyDGXG zAnHn((2a;se{k@lct`y)tEURrMCVXQ!vQq<O$)b# z*nmo}l4sSTkL$n1WZ;Mr&k!{vk&6+YQCfxyIr_y8wJF`Ns zY+Rho^M;z~VO!*i(sT=6ketLaiMKc2-eS)U?oArHtMrg%%YH}RZXWI}VN)gry_BK? z{YPD3B>Dc_%EHH4!?l|?$yMgU$@R&LnSBTf8Gm{*grzUrjCKs_p!(MxKg}y6MK?6T z*|;C#=-IZ3oP?K!ZmkWm)d=6?pBqp4vjfkJYU>7#QXPzwjJk77bFubS6c42HkqT-! zmJG8dL*#x&n_UbOrNY+q5Jy))V`_z`FD%n*_L%mCx$PpXB*p@v@CJOXw=a8^`vU@1 zX=TERX_x*=_0oLa!8Pc>DJ~6flkdBuRv%ku`^x%Rz(cOC>crD%XwhBg`)&TQ z)Hmpc;AX9K7g>grO5tpHLyd8%oG|3(q|tUuJ3x&9Mq7 z=DLEoexKA$~Go5(MFblh2pyILhJ=VJ>g?NI|3RYG2yr_{!HVf(JCv99?KMJ)9W z`a@FPw0-6A>4C>!PR2%a4u|VEV_)FKG+I;RP_|N~cdpP}*U zf25df90X>iU3#e0d84ca!}`YL6l3C?=^@%F+N=vH%=HeZQ4=U3zmb0P4~Jfwx5w@R zbaX=oxbs`EN(n$YES0DDzu{e}19I8kp!!dDpESk`GQvb$;@>o%zM>s5gl}Eq=SlBQB}Qtts7Eca{VnNDP$h+S?ycpMDp`}YedTG$^Ntj zDRr9$TA-ajioHj~pG@E(S7!(__-4*H^9ic4W$CE!tUWteWn8KQ{DGgyRl*#7gmAMI zc6ht$2q9bWuSD=%G ze9+aD`wd4WQ<|v}?t20Y!wW|21U^QfG+~XRvIn$qiqRZGp~UHD?m@MP$M%3L=>+Tk zvxX~-%KWM5tK8Ux?sQA@Gu5|t8+3iubqLT=c^Zt5Ea+^d>bJ@G14v*5LZsF~OeZO- zSHr;N6bRbV#{b#>0F+J=EHQ>qS48g<9ek9H4<6>lDxi9nkCrGc5EmYE>@D z5DkDp?q#4ZLozhMwIsH;jCCZB-tut}Vs$7jVw`k)LZ^HCmVg5~aTSL2hXuma61*Z~ z^3H62&Ww^jrAJgD^(`p%z$srt<1`CybP)1owpnU%74x}H6FEsXEkjU{hE}p1 z4B=Lg0%t&~HI@tNOK4##KDs)*EshcLdnDB zgekd4cLI37dLfq4zSY>*c?#jDx%xyVr0uFYrtra8<<95juCB!}16Va*D$ zuqkbE6}tgE3B_S|-BHy&|APSo2?a|_!~}cprdbMBAsZD_ibU!jp3LRTZ!4>dPJ2j5 z2A}04hDVYAEw0gQ1vWisT)XNebrGdIVQ7DTo)rpm3yBXdI!N~_q*b_-?Cnyg;| zkw)Gz!Z*!(2nxTbqwt6~NT@Rm8_-Y8szUq{HkOL1*-5m)y{p2ygkn8jYAZBoYgA3*B56(U1Y{yXO65B~01_C{rc!mx zteQ%M#+Z><*6B3YJP*aa@ikouB62G_O4K*Q^eQ*irkV%bWPqRFhNv;-w2IEtDOfoT zaY<2`r8HmsqMAO-s3Mki3|Cy-mY0CelRq!e)NBu-K?(|Tybcfb;U$7F+zIrtA2{6) z`o^kgRD2y=`^rUW9etP7|4bn$fVnFMaJh!b6qa-Sh~gamL)iq8W6U@nRb{nkzy*>j zL!LEVKhG*B^@^+91%ls0Xr*)2h#noW4e2FB#omSMa3lgeq1#;=t-K-jha={gD_;`8 z`y{L_eSS%69;>?hi`&|oP2pb=hX9q0t7KHjCaNHekmus3ckl`c0;_X1VlU8u` z({oYgETOrQu=bX1=hzplLv=aO%!GhnN6g@|3Ny&6YUM@|J?=j$s3r<8vLF=< zmF-iA1(oDO9q?8Kg10G?gXToIPHWAk-|c>h0%l_fHdX4CU7dlfOp_rMttV zjqY8RP;K~(C!2hh@{OO2e^kYpMJxzg9Ae&`wM>HX6;9!!xE^X)NVw^3n0Oh~R4vWP zsA)zz{Q_hjv3Q5e)}L}3(L15_K{T= zJ<;*9ChL}|`Tu{bQ<@$M#yb?Jh}Zl(x^?oR2JZ-upu_hh0#9(qjyX9a3QZj{V7u|d z`>eHd8W#%L=d#?#j8RgCHpy1zJQIWWP@h}#Jdo;D&C)H2V{2-3rZ=^bm9EEeej&O* zKXj1qb{TJbgVD@A=wsiSCA*DM;1l*jVS8nxOd*Xse|8Fk$iJ33w$%J{AiIi9!j1w-S zI9t3~$UxE&56pG``YuXaCbmaFz#7R4GU4p?OPsmxi*RiXj$#uybw$DfQT?ZJj?s`K z5L4FQ6qHD$)HD8`R``~NQ6swd()${2-ZroRvIn;Qd z?1!Mp{OI#a$IBl7aIJ48C`OjiKrh}q`sI?^F^UGjI_{SC0M;GrOs_V9U|Qq_;I8vK zjN5>ya4QhdY#*KcuN%6RRK+Zzxg5ae-OuFLjuTa)6}RwKSvGPtzw>>}Z<4x?1-s>V zSlHi!(XaEldLEP5pao=)xo?WPBhqd?v%$`(ab8*Si)%VGA&*?p9su;>$}`NC(@8<_ z-e)vE%1b=Tq^W-dR~U;@;gUfOXgzZQnqaPSs-V-f+UBqhkCTO?cdH}kITE$a)i`^# zr7RU}O7g$j-4>h_ncpp)PoyPoU|dQvkxy=Q4`JT*piat}Iqj+=!<3tR)TI-K@aYZV zrwA)VIFd_|fiLuSixwn4-c|}6C)(tWf*Kwm=EwW#!LaA0|Hp&gv{Wn8?y~)q4BI$O zk$VZP`n3)dev%Rd(Y!O}-tfVI>h)ck3B2td)8x2YR#J^0-(|acHg>x>F_9EC z5uNC3xFwxq3G2Z%hrhy(eT)wI&!Tjay)K=((yK{SK&PTf46fY#}!h-SJ`0n;{|-1 z+@z^2xXh@PaAfu%cS$T$iK`w=UzXQPObN6!Ip=`z&c3&ATAYy)-Xv%Dy`@RDZhJFN zS=7+TjmSF7ghXDldV*0H%2abB5t62E#I9aKJC-x-I<(WUv z>#>>87LR0#rEZ}LhS==17&l#~8w}jtSTBAWXa-`>4d2F9C1J?UXL)3-_8V7zzAFxW z7AWoD@1t`eoC-kj4dD38*-Bfuc_wW(hfM-D>l{6WPK41gV@q{oVxD*bx^Zf}XW^GM zF!fEh>Vx)!GU;B2m@#f#+mI|=aPFd^;7|O!`*B*T+vQUVEV!;dM*UXlOCAnmk#a<* zyOt@r66u}T`P|XK^J%L+{@oz%EvyhS?(OU2Hz)=r!RJL{ifkfj!WBg2vM(heR4NNP z;LH2Foh~}jdBD~uiF66c*Ka=1ONd&Fb9RRh$>Tfv5oGMn;%qNue$F!u}1N5 z=#;EYH(LY zDJi(?y@#e3`ev~65TnQu$Woz|eZWa&xiA%Q_d=;C$a3*1o76g?8n`@#5(x8$JvKs!JpWB9)U}L4?<_-oa~&)JyDMVdMAs<%F7j% z-$D6{dIk{}hW}JUsDU?bMgI(!d}U&YF)Kj|x#S^;ielD7LpJ)sT}Xlub7dDsXR^_7 z*PSB_f1Q6@WkD&rOT*m^hER8lU7!{LI)0`*w%7AmJv zgng#&40v5_y7_96RolW!G6ced_k)IdC+!pX?sC58ksW)#8VDw7UX(RmiiPkOBN_^| zr562%Yf17Dv6L*I5H(Mh!%ak?%|MKPrXi6pC&QO~F2qC-hXg+BnnGMSK6xuFOAk0O zS$(q4;L1D^oYORRP%sCfvw`=s~GMX7 zj{^cG+v#DOB(1y18atBXh*H}TwwxtPUW{~Ci0q3bph5{2UPUoo3U@_^x|aaPzMw%3 z2cEgYK^Rn9*KWFz^%j3!BX7m_3-afs{3)E`^pdy_cYM-I{dS$tg9K~wY3eX} zCPVw*%I)x}$uA@5|AM9(Vw`)r7))ND*&2S@cwQ{!Y6eOsne=EHC?>zKI{50xR)9(* z68wT7YZDqeRJrKatWr}8{6zStq?1{Y*fny0gBVnplj9SWDiw#u3u}I7Aj^bY@!}Vk zRNHpT!a+X7JRO$?M?2fLheg_Ss3o>`&_wrOpthgP-_IY(`iT&JY;W^q0amO=7NoJd zGe@w`GYXTN+~eMvt}|9VVnSJDPo)8Y0YpKnA?Tjs^6KySLRI-%{AXJNYBi>R?AjPy zmOH*Q`9%1*bZL$ys_q{5Ugm@?xJXYix7{aWnjBGMDs@R|w|oPyS$AW;;0bk(tM34o z#Pi9;k-J_keME;XIbp9wxee;hdjhMa$tC((NtgK_1_SerWF^IH*iQk2?7FC*;&q&m z68>gKXnVk4MoPOnh4S+9iyRn7E4NY3bQ}$A!*1e4Y>Mu}wrKD)C09;6zvX9R9@fM+ z>;tkWc`Kv07l?a@ViYWW$Kpp~+Wf?R+zhb^-iDnsS#Ipk=~#%%Yccb?k8l_u{mpV% z`k0%J$taK8A{yql*am49(+1x`J+Exo5&cjUS}5TKdm@ym&>QT*Px<1;g>LS56-USU z*Oxr8U67OYXPp%KQ&e$>Xb%@#7G1|U+dijgaWYo=dH)VrYTyEcfC4HN&3>RFotW%~ z!!yLXd~M|(*X!)7l(?z`7P11Ak-s92(jf$Tn1?q0 z-&cn~1O$_PtwR8r;Mr1849rbLQ}LDuW>;Ej=dk>Clqj*v_t~$Xy%dnWNf_And}Nie z!8HL1(?tvbkz$8n@tf$>B?t%(Aj<36XFiFLZ=mT_6p1^<-}~9)?LygLjCnSOwv1?C zQWdalw29T{jzaix!iYh-(Sq(=u8TS6qYh^K$e?B~su^JO&75c_5Vgtb7Oi55iy@48 z@~Mi*Xu411+eqmNxRE2l;_$$u9!>a4NFd-mc3MCfys$`(c;Z4ZWgNNruX0kqGUn?| zR*gvlRe+YUumHJ(Z8TRIpBlZbvG}B1p#|0488q=6&Jvyc0Xo4q%t>yT9y+#k8C=Ny z%SmOKB;i~~Mov2{#zpt!ruyI+KWt41T61NpQt%~=vJ#)>(TvSV5}^Zd$|kDSZN1tf zYWejru?-9m4VUPh_cv(yq>uDuS;e9+A|9SnPFf!2oT5`5`n#Mg7U#MxI0_qqNcLfJ z!Fq<|r*{7WI}wLJs5f_m)H&#W$}`KJ(LDA5$je2s{kzs5-hU0+VgDv^96skCn_l_< zOgTHwL%r_?uqCgvQ?soV4o36FCdAsCY$&TBtxk(CeT~WiE{ho#yJr6SNz-1N3QrsfjjOg2AKu}v*Q^PS5n=IY^`Og5%kd>pecYmhj&S_v z;&>Z4VZdl^;i{Fh}Wh-Vp%qd)&H&Uc4461Vlaho1}TgIrrQB0-TPxDrP>zYe_wLG z&Gf=gUNv&Wkkv;*;pdSRIJT^v=BtENC7oh)i%gh;3DyxvDJHLo8~3!feVBUV{Tb*R z6UyG1g*1PSl%e*jr+vGWuS9=dobnf7co9>qILiA-PY9Jnuru8_Euaw`LPzXH$Pm;% zM>b)dWPBt(PF)9O^I3FT;KZOjGDS3w_`yS-)Phc`7?llFAMTCTclJr#bBAyFe#M0{ z{;{^|mff(^7zGSkj=uYLEtvoYvz$G)DGWs6H>Zcl;Tpn!$f$Fg2Bm_fBqDdC=Jt0-2mZm*8a{`MnNPo|#u@(D2vETbxIS`% zJYX8{*o!H+R#xMf8`Vw}bm_i!<`dfy2ThUXxVkbEqO=5tNa2)ny`42~dZ1X>M+lhx zR~7Nhbu>w}&GX7ltS{tA7MGUIPTYK|U_o+}E>s6yf}dN~nxGS2-P2wU_k+vv!CE`8 z;oZZA!O8pJsOUoDHgIAgaUPUEV%CyalMw3&eT;z%9EU6mS@Ti*`x2OwyXm*LK5Z$in-87b)i(-iC;F^B;MVYJC*=YbGP#?yLx%tw-2)^E?zy3s`lqJ49{L>u z@g(e?v~3co_wK7iEq5_t9z*RG3rMC3sRZ~_sJt4EO-TS?&%4B$ zC)L_|w07+zi?!eU+vBzkwn=aY1l2j22KiOo2rPw7>);d(AIw+J_4Wva(AmFNkbPxh zn8miiCXaN{fy?|K$z?$f|mtj%avdj*SCsnNGds-9p>9x!j~ds;7Kl~Od}Psg zCbEk3PN5%qhPXPt#1MQkZ0U~qB+xG{u+9-@To2spbLoSH3`b1=g>F*QN=5$NzC@gI z3)Wz5s~uzOOry&(Qw=Jqxeq^lb(=eQu{;T!FQW8Lp;f*z;5~B~@wG_8djMrBz<>(5 z`=Cve_F4fsgljHWB4?sy6-UV)Q(p^vk7iqXhxx;ierXMK?o?xaEbBA-0;HCsTsV?2 zV!w}h7_vjaXEZh+2H$3Op6j@Dw^|e}z{ChtYVTLtQnc4pLB3Cp8$z#4@M4+=+Z(9- z?3^7Gxi5JfRws{$JeRqlyOYvzIlSI@)DfA)XyB((x4(NRJnfgsR0Hox^V)t>j6wC0 z!R+%Of?KoEB;`MDj`kTvHw8RyLmS?yOuRn4t`{pX{=&4>* z`^=sSQy?rJ2R&0`#S~qyMxw!8&A&PsXr;16U%kz!(i>Xa0Lw)hp$SBI`lB zvAvcOVY17CaZ&Wg-vPyIdbnIIpVT2}1O8v^>;K#uH6HSW$IlD&)YrC2@kiL<>HMnS z8p8Ezu=*X@mz=&^^go_K0ezVF1?{;4syvId?-i$%Ec2aP8ZW z6Vq8%nN2F6fH$QuV%sZI$9G`4M&x%~Z2@-$+XE1ki)R77cBJ|~!N)~X$q_460RJ+m znO*hI59X$>61gs5y37P^{<=DyD_z6C@aFq!Cs%-3Z;pj+%#+Y0Rv)LCtd235t$j0IQ9x{7QonCTDL?fIf3((n+-ofhc)^wVh6bmlhIAN6Y@94I zaseeMZI8f4RYMr;!-{4h77TM3h5cM08*@^ZULb8!i2De8$w+Uc@;khGfm0}7qJINTn z#LRhHw{j6pfNU97t-{PUxIQ!2iC#{4+Y=*2$F~*x=8Mk$9(&UfKXM-=Uiu<6zp!D-!#GUMiIHEkNk7!WLR1K&$FKeN?t8K-9)bYqZeD zwh7z;Ip;zrmC4+;cxIcLH8Cg(7-`5o)o`9|ES`hqMb&q_rVBy-rpAQ*^MO}b@Ta|^ zanwM*@duz_2-Ln;<|E-c-QS}b_OMA^{`>T!&E6uLNG+36(wXhL0XXewa%812ygH~f z#~G>R`!3Cx;c9)d3Bj&I3d_g@J5?$oiM*H!a#Stm2zW1Z3{_83X;Yo13EWyqneJ-+ z(lD&`)HRi>zw=F?87^OK$>FX8*3Fqv-4~C+BFn6%DCuw5f&WIf`5i{rGBK-*s+`Dl>@IXX(L(c*q$bOmeJ!wNMW2 zY|tem?}w-aPiN2tO{sBNjQDLj#^jE_Sy)B~7$RHNX9qh(Q@L=2J{$`fr?_CRcU*Y&7mDHaUvoGs;gIcwT5mWSRmW@o~%z$pfI`rgTuln@Su zTVYkxY;8<-&A~Z&6OuHAla67)84jO}UfXhF-oG9wniWc=>~7JqeZL#6S?|h-)M%YV zM@oLrP9?bX4b1LVu^vBf@WQw7-^XLF^zK?QQQU075e_lG0-YwX=!J*?ry)Ds1~w(d z-En*s`^tMvw z64LF_e{q*IW<5{#Yj=85eduS!%m(t~7>CS`FS(biYZ|}%k-+^sB?jPNVj8R$r^Yez zbhsxe2J}tweH<#2@>Y;6#cxjmWp#c6!yA0Rl7!44e1=MEAXdN}6yh`B9ev8bv+#PX zIrP@|HH@_&cQ1>A{VDIaVGzz@h(jTU%RC$L{FM9R;1NK0Ttpf%$WI%aMwTZ)!v0(2 z44ftdy3t5=&{*B2M)$ZxkEymnqE4(P#yrDu9SFr321B7(Tr$%X;g$%Tw_c%AGwzX0 z>b&uI-W<$UEc+n|Aq>v&97@f3%xPrsDTQ80TvxF|fMrVZ&Mc z8C(qb0i)gP2AZ?k%EU;EbV;#elvq-wNLWj7OZ}P5DsymDIVW)GMGpd&YjqnT3)zye z8at+vI-kh>%z6U@X3UgbyGXITLBd7ItM}50`3%zq6BMMI4yQY;v_ldSQe{Fn9`>Bq z719bhVd73B&S!Si%r4Z;u~z<$U+bPRqpl*ZUzf@+WhCAaIynNpiLhArN?Bpb``2&( zcerWMXiA%R)pu_oJ+u|KXw2Es7=@F-ZuRC=IS0F=m=$s9j_iis3#v95;kKi!(Ua{*0>i7m*E za)5&vwIoY~!V#0|vlh^5dN9HO(H!OiywC{Hk|!hn6Q5!cUD*+ar(Dh zsCMg5V*}8H0cft)E$fwws{$UbRG-EN8jywLVk%t&Wt6jag7AF%G|D@K?Fr!_O8Ph) zE3#D?YN{H%Iiu)RTnUw}xxxDq$y;6%LGM;P%w5g`#bb$%7u{k%<#s$DJOVhMVhoH? zjj~S;5~Yi+a8wh=y=`n-e@6!0HY2vpdiJcIvsQ`BMUnK$&r;|C(NWnA2>2O!v& z5}8Stwlv}QHDD7Kp_(-Q&7cc^3O_~JGU{oJj38ohty(EmexI%22AIEDRg>_81Brv! z?`CXQpL*+2t*%u+r}LY(8US;4PUagO@sFVCSHp_x?UDDMH>Z*jhB{4IJ9$Er<~10Z zC(2NH=uG4B(p9<13{WV zlw3fC6%QgG(|VR3mTp%Bo39sCz7xQp#fR=a)}G-xWspUkKn5AEVH@s86`_WBYWx&& zCk`wDq5N59=Ur=QU*TT(*M?|Y(Cs_I)gqSQfh=iC6z~6^e9Zwz4>}ah+oW`ycpJJM zy}gyMp`<~&nA+xOX9-$)T!|Rh;o4BC!w%;A8gvaqab~h?l|_dVQ791Zvu4jBl2mRR` zFi|0@*tK{Ji;MYo(?!W%=KyI5Ms|8j)#lZM^}+H|a~g2%`4ahm%&wweZzUH`FIJ1!yHm@nB?-IIV@2J6MbkHm(8<$|92e|lm6zWFT1)I{SfZm zr$s;;vyQC~fU%zib(Ut&??l=>l;=2rXeP(Z{=%HOGB!B~>T+WzkLA<-@!JUApY1%j3RS zsF$pUC8}Zyxo-7VY^uj>{{Tyhtp#2dCK$7eFTUtera$;7|+}E zxG7@BA~;`wavf}PRHWrdDpL?Zl<}G}`96U4En}qey(Z>$IB_LU!k2k%HRrs$nX4I{eszvRWX<`P(!Etbfmy1iTWNcKe_tbdx`@ z^Etb#eSFZq9f)s|R=P{5g_s5cX!B&z7X}A5Qcl+=mt1p%Q?ri?PV@CA`QX0E^Nj&0 zK>;WC(+gN1Q*$w>3*8_&SZ*Q%bHNON3f+I13LZNs@peC$;ibcYwrE8z6{fT-y?V@S zILg`l91FU=BR3Rntz-J37E{*4V*B@q?0C1`S-xuP)e3!3L_|e@7!*=_DD-EF%Ee9d zW^XJvh+e+a%fbUHd=de!7hhJ)We(Tk(g+4pjdnrF7$-D$4|5qRjz^+Xmm8U-s4B`K;SpM-c zZ2!6^P`ByZZ2@^h!Ds& zE8!kL9Q*-JwW6dUF=Vp0n%NT}uWXX2F^?^>$7^XvYK|^Vu<{p0=gGcHOb6;-f-1dh zYx9r_Vz*F$AnCYhm;-+5wM3-k*^FF2%hcqGfd=;RuS%$wjYHdxm9-ncXKwwtJX7P6B zY{TRu4VYyN`WWidU`-9K)M3kFJVE>+0093#0KgFvV@l-s$X+UiN2|e`=d;?wY!{k#)me?(KpK1|Ar-XWfCdpD0g=GXk@>b?!Ds3$cdtE=$QnM` zgIxDr7tUHnEu`hgBf($V8CCd2X^T?pU=Y61yB#%wflW5bc1NFD zzH1!sZOsbq%9d6Qw=mG2u?sInMj4l3iD^^V-HYOb9p{qLf?Kn``K(a!Ha8Zuna&r~Vzv$&jQ;{+2$RQMRjkQmOlKj~{U5@Bu zpi^{9KZg(K(hgI>$veFG6}T|>=Ar>s?xb3;B_U=(JeWpd8a0|_{pqrflCs<_nu~Dr z^2Yw!Uy~_gmmY}r!U#uvN(<g&0z|M6OV9vsY*s~GdKwHN>CS1wsW`m984jbF& zk#jr2sp6+VAY3DsS~Xb}so5_Ey?LEvz|KY;Od^xucFjgoZN5Zn z=2mb96PIjr(;QY0^KRvXICuc!*&)g~O2bzVJ&CfQ*QF#o_EK~>d%f=l-_fxz&RUKJg9ogc5^q;;}{a2RPm$hPJme2STt!loUu=GS0D#^o_=Cc-co@e&B{zvknP#{!Tr{)oQSM$*B_z6C&mELx+0sdc-DaLP5ulc|v0> z&6!K60Cay=Nn3U*{O9R4Fz-m?_cKJaS~g@rMXN<~<}-=MPnzWKCRsWZoiZ8)Nt5vG zIl}IET|(mAuu3A}mF)d>Gv|4h)bp{o)HypF!pq*s8UvYjloh*y3KRs^zN|votp+~+ zLbXl**jDFgOTuiV8k{#mU7Gck`P+7jj`a2xwk+~PFms{x}wHZ%{WStJ9(_GG;)YW>%|JOGnT74Mx1 z&KC-Rc|lSmk>@;)CwaML@z=V@w~nnDR*vIi9?_D6@ePo$p9esT8q{H5743psxa!od zR8(|pxfhY(NK22nOtkKguHC5|0I5U&6(MbTU#j-}5pH(m*~+{s{oyt14mEacWkBA> zDZ~s}Wi=8`QY`%5(D8ApeQuvn!2ZvqhSP;>Ezg#6v+Th|na|G||C5U5HLs+(8SSo{y-@!L@-`QMr2pLw@sJ2J({Rm%**=2P4BVMPj~b?d|<}c z6XFziHbV4hdHV2mbNf1$9Ji!Q6L3_c$SHg38}%vhR)}_37a^L0PSK^lvc{^dI?;S4 zuY5M|Gu2pK@xWouMM#s)C$L!7ZtJ`3mHDM{Poyg7!iXZ>dXx{dab-N{EBn+9Dc6*n zAyC7tc0n?DfRXLGO0Uw5Kr{AZDWbv@oY%MW5Bq6Fiy2TIn(Qg^Tc{|n35@H!3_oa? z;0VE(`;NV5o$S9+YxRYg6>A`0$9v0YoeKP_b)^ZP5xV^n&{va(u#|lkJ9QXUm1#TC zwE9HS#LBy^2jvRgKAxFh$`fV2YmEw=_FF#?Rl?xL8ZA`DhtIIMW#IQDg#FOZsDzf^ zx}w?OWu(~gy8Kw>HjIB?q0X|e*h!*t7!do8*IKTBSn;5Gm}LAYF9`dTjHeG8Gtf*= zv#qkAu|fWg?r9?3s;{T`PGai*1}%#X}nDc;m=8p&1~k#_PP|y-)9X* za7s@BzDPwI`?z`?Pe~BaKP74#U@wp>S1ut$Af~>HOr1ig$7c90#dru zgRK0ZR`pq<3~P<rXAxzbph*BpGWiw?`F@2dnkilBbxixdAwR;CS@-0Xn$opiU zQSUW_9km>tSO#>-0UZRF9jbjO2oWhwtx+?)jN?oQjiLFTcIY~gj2V3gVa=)Ftm?`7 zj>$0i9pSJ4$*B(VyDDEx;w-C8`HyiE6PyS#2<* zC6NvMuxZ=-4Eq>vSc2*62Lb61h3-aI7^hy502Nt=Ho{c>`|$Jo*rw4%A2z)^@j-)JdO$-5-3}U!E?=7GrQ!k!KcP%Dow%0KT*wa_*}F~V z*}PKq!PA+NArT)LcTrK~p(2UvDH=m%BBKoX6!V%H7Z8I392baj(l9+mgr|=p*7RaG zsz0I3va?!}Q_>|IGhYg}to}2jVEN4p-Ixb*aBG+Ial0nXyPnvFAx1xEl#UEpb$SmQ z1Vo9<^a=)v6kQMiL{abC8)S7-5dQ&}fHeD}V(l>Qy|$QqGn?3YJ_!>Eq9-1z*2?Q; z@!?>7Qagz@LbN-z)ANEoTa|{H?6+T&!OKF;7@Wz?G(*vKF2{Ncc+yV0pD`uRL9&QB_$!s_P*grDMNMDus@+pEI6}1T)2q1 zfh-%uV>(OdY9z@l4d$^MLHxs3&WU%!hY@#fG<%f~4Y#o%)fqarn5I7fLN>I-!Konb z6JO^1$TT`jy^!{8lv}~E>2%f81zw5UpIRKW9qP(V?7O0Mrz|PTRV~y?mGMB5#L9ze z8I%&h{)(dId*@FhjcbC^{f769AGd^B%_2EWj|E5qAPmGz*1B8%quYF z0(=bMN;wl^&rVT7?6i2(1VnHSAxV~g{g#Ju8S%c;6~4WV)rCg0gl#XD>oJ-45|7h) z?33vhpB}`oM6*`uS!_9@2%>yGuSJm|0);Ff>wU4&`<0!|Dr7Tf5z}P>-u1}Du^V=I ze%h`6o*kW+wZ<>h3XqfBZzD$~DZ0K}3pwI?(i9cOq;6VywErP#@arLdt!#F%`Upr- zF5zt6AOC% zS_op@*T7^}ajxkd;*%=skho>^m)Y)g%c7EBm>>-O)QKwD?QVHC_SJfl8*%vY{9>{< z)PO~Sv5vtp9o|9Go%NquP~^FjTYjh_^^}>wh6hqCpRcaDtQ@5}F20|We zF-Btyaj~l^1u*M`90!sJIJR>%RhRTIyF|emr;33~$It5k%69E^Z|eu=1l^1vnMQSf zwF;nrUjHV^GN6TDd%!3QNKR6vQ7J~&v5^f6(9xv&H7Q79yMk$ zxzppf{u*A4&Yl&+AxwKoJhFy7=tMb^5PU=8_6&O)=3@&c-eNl^hYmGWi{A`W)J;Jw zM`Y)R*md@@DEB1i&BQ~i)3{vJZo(hpkg{85mMKKqEV-F^2+hOCtyNDC4gu6LaYf^yQL+kUCrY@Dnl7D z#Yc@)Ng89uW)9wjw`CdK`JET4Lct)NgkwWDXyo9R%%I+{6yxujzO50! z5pD-GNohH416PxZYP&L%^{;@E4;XujSS{g@0#950i+LifFCjq_+iIys(3b?yB-0co zCnNRWYlq^hgwuA56tb4p1mrwnp#!3nX(r%nC8e7mR2wn((TBCfnIO9JI=%sKQZo$< zr)T6*<@+V>bK~zBFKwaLyZ18JWoNrK{#Wl=YK>vls)Qx9X}K$Svhd>m=<`3}SR)ta zWP|Y+=4muUOjD#AcenE{Zd*Ylg~PFh!hUo^20y$5fvQSPW zz(gN^&oLylvmaPc_lrEWm$WNFnhkWVJNz7(&6Evt2U_ne94Q8W$ubpPUNGO8PJ~}z zhuiLrBE2q$H~CLPzT7wU^T2T`Lnq5k=@4%=5DQ4O7vD3ye-Y-0b~_`gUlP!SeOC4T z6~Laob=?0r{uP(FX4F6o-R?jLwEI9?a$=Cn&@P~73Ti>!Hq-a|^Un%F1GW74#agPf z8clsk(=V2_HSbpav&;J>y(RuTWo7=whtH=!xx+YW4(!IGiYJ($g#>iCkY{#|%gU@) zV;E6AiT(@R-LJGeE46+nlo>9B9(*QsF1kt=^VmCc1;MbfI;RVj;%8_z&nId)u}9pY_4$MfKsL`o#86fPO*a>fwJ$}Gue zV*kaOEY8e~1)UG$|G?8#f>ZVxr~-npX!S>k0QaNz$!QYR8@S;d)tIka`gM5p@KT&; zyGWn*_cXndq6OPIAZ+XZ;(`4w-;ci-$Jduq4AogO8i)E7Fl z0~(0vU*EQM1x7Yr!u0Jc)Y%TFjQH0G;YlfQsAobc@m64V?@KgOl$5+A21a!iILW!b zOZajMfM}DvQnA-)l(VVO3H-t$NrJk>VBinGX|AF*w3}d{MqSfD-^Sv1JM7d8jj;Il z3UxrYD~r*Ln~>UsnLcq%8GoHJHLt)SnPN;_xwbxWD>Bu-V<(jX%nwFBWBmVxc8+`ms-a%G&_hJGx?Rzd{#m+LJXuYu?c(vN%!$%#)?&Q4&W^ z>nq*fdUvMVc?v?D@xU{9LvVjw!|oI>l5x^=-et)C-Xv4`{m)UwN6!a2xa57s4&7RVn=a#Y3>i6jpumZc}tkpJJh91f#;2D8e>~gRKsNiY=v8e(2tBET2 zjv1Few3Ev-V4gCbJ~ON`V1FXikkf$K z7A{32G19-cp0q?W7qNhNCcKAEyPh7J(WHla3vZYt5eV%BpHbV^)Js>r z&i3umdujpbq|;&B$yDaaKoAh+ah;}(v)Jvg)CwgM=`D_OXThH*xB~5dW5O(o!g=O@MO!0FX;Sjnu1c& zK>{-EI`as#-;Ed96Qz32iz36|$J^J4pi|0E}~# zUnhO}I-X`te-G+$V5;>mnLEBW^J3U0?qwa=kT5)16hv0(r@X^jL^rZK&z9+k`CT;B z0xPZ~0KHWd)ndnwTic8pF6*c*?%@=$^EqcnClTK{1OVm(v1-z`pCzD9gcFN=oO}U8 zL#;R1*bSk**}r=Fev>FQy!i+#0rFy&4&B>Q#>le>g zt7>3<9(#`pOy*x_Ocm3iX(Ll1|A#-oUY!@3gdm<*PyU6l5^=HZSB>hgdA>ZoJQCV}Vr ziEufB8bAaafjraLieL=-#qe+KQP-6Zay$hhwRA~sj{)~3mtNqCf8NVqwOoCGdoY4F<44C1W zbA83!5HIeJ$tK!WbZ&9+H%pB<+%jWaAAOYLt**iwq`k`;^RgQT?Aa;&Q z;^BiPC2Uv!x$>7j+!s^h*9MtBW`#6ySs?8YlnVPB@%mqX+-L+BV=m3?u0+{DeX|7z zvfhMlCRIh?_fa%M*}DCt1atK)tlTu)fZw%KNvOtU%zFciUjxcB1HX1w2 zRvdL%qY}O~3{R;{1V`xtg~182ssm(7$aui!t2|?af+0dd!5Ty20zgB`a~S^636SE` z$cK-V3+A-QC{gc8T0~(4Cd%;Z%^Aj$i*B!Yyy3mVOBhN!hROrCJB2MALa~JH*cSxM zr}*VFSB1&&STOtx5Qe$y8}q!_)IVHDEGcuX4_f3>I;)W`u?!}e+_bc z1YrEIkyQFT`1&fLS4xLER2fo0K;Y7 zcFU90045p?IBzXJ>2sCpj0M40E5xuH{+@ML!n;F4annxYW55dHOiDSttJ=3;;E7)sVu99jj~_@RYSnkMKl_o$ zJ2?sjZ}}hGekTgR!;M!!OS04&3JVUTRCgyBJy;yPx= zai>2UvlQf=-m>iq(~mx8V#`d{9o`#H%Q(KFwjyd1fq4%>-F`6TWQTnIGFj2YW$IeQ zxNVbLsRP#^74n>ob)#A`;PAnO46mqIw3?n*A8HkH^i?7`8r3?5wAYqT36Okbb0mJ) zCp_ZQoZ?X78zttN^14!3dfq#u*{Y6+V7=&M%(DV%gT2|gOeKX47z!2+BkUFT*Lsr^ zM4NFQIbL}cD^7a}R##$Ca{SM;g z%9AXU#<=CUuKS8|TNQ^<@}HEkw=W`jR?!Wmuy=^wTQ7 zD%KCXS}v8*&wR8C5!7_E@HIpXDBS=GMhZe!PPsNPqH}xdv;d1Un1~~`$s3}5T~~p= zi0f}23++qRL8XF&o^N&F-E)I$6bUNlcy_(M2im0;R;5N{x=5>UZ7Lm;m_#cK&g6@Y zQR!avuf}f)xQrH5DmWtBb2mLRt{p5odg}~bJ;lEgJ0b7CCcuPH8{f+pAcwC0C_S2^ z32cF8DbQpkDQ-tm1S3Jb5hviCSX%NGpLOJ*LC`3Z+~21lSH8W3cP3IPXP(NkRvly| z{CXd<|ATFqJ^PROyQ3xo%crVW<%y7c1MQ(J$`~&?@RRUmOw;A(bsFx z?7e9zI2~r7BF9^%i_{@A`LL9iPQInsl`X~`diA(6@NW8zI-Fg z*dws2_)Bgc!LtnMJ(Faar{jrBmipn6>S6JeoIfk;V0C&&Ar}EW1p_ucVF;^KQNImQ zSK81m8I6v_mQMeLi>kr+WhX{Q(XN$>J}C&bjL+b) zs}-7H>`|~o#R}>s3uZioUad#!3fdklH7~;XWrxOeX zNAkzN-T-R19?f6~52$pzaqFRy>jv}7XH@8Zbw>Z8NYNWHPoZZyf>fBnb`g5W+@Sj@ zl<&tRxG?s(8VD;$B^V7!CDJI7#Kvs`7qLcmrB`=`mG`qfCDNw=w5I-p>~-b$N+`vv z3Ge&UO&wa_c?gl~QK;!Zd^Oh5GCW(lO1#YoSA0*0oxni-ZR))&$8G=eqP^ABbUv94TmAIHT z<3Rh{BHAyx7KyvPC;wSnRak;HZr-wHo3dH5$(W+h-;6a@@spy-h86C0ZT-gS9~759 z#H}~B^Mn~%hb`6}{4!+I z?;u6xgA#-|=TaT8D4pi4A=QzN)!**xm&`iGaOU&;geF*VHK~-K;Em;z=y+_MGzE;| zNF5&xWQ_BW9ZmfylE5nj8up+yzQfq(W5xInsX52vWr89qCBDk>h zoHy|i7UuFSOUs}4FFx5a83zP$e&l>um-r{Ar6uBKSV(Zvog8D=XULp8m5Bx#I)HVn zc?FL027adxl$IfT;5gy2v~c?2(#ix(cI`U^XvXKg2uREp8*2 z`W}e-&nVNc6aBiV18XpplhMEU>-~6OyFs_Ew74w(GX}Tze9Cnyp&e?K@kblD%d@k- z{Kkuree=tG2B!ccy7_<{^Q%+4YW`XrDM?al@_HJJXc-}~+w>b#x|EP2iKpQvy^T!T_t_4Lt%Og{3cNOFcBAHZ`y z0ik7S=sMH@St7F*xHMwinF)eOAXKG-V+d+29a#L7w)%<}*V#xcMa`g%MTl?g5B8Zw5N8Fzhiyf|O80*|+0vPGOvX@z zq$ID`Mg`?IyY{g`;m71{{?6<7bwD7m|08T^ITgb$W#5aOn-YzE0i2 zxU7dgNcNBZw%$S?klwED4b)O*z!P#C0(D~sr5tFsa2d-RZ%V0Xg>WoElFUCYK z$p5BC;3$Qf(`Pvc5^E~Nklp;K@>oxuh!m2BXWxJpg;+5FNzX9YSQ6~!@r$gnc?fP- z(_Oo@$j+u!V7+O1u1dwztXws8b>tY=oT-M$i%d#jCnT4_hWlEzk&EbnUyWjlF2_sk{|to5H~+OJA+b%c}S{#cXu_fohHX@AD1LY|O9r`216wgGMstsZQM90B4HHnC@5Z~OpkNNr)a8ReEOwDU)w|0*U^PIgfM6`n_5fxz$eMXM7*vg<51 zW8xd8K^%1sU<@cpm(#0_(22~t8T=w?(-~MU_3l_B*A&PxcU|z9bwt{J5lb`9+oI5V0T)~UzKj(u!fjmLd z|Lujgglz6+5)ZPzGig~LW(2`-muOeTTVK{hfwvHbpGv3O&WWw?>Jgij1PculZFVtv zc}jve2Kb?u_R1*jqFgxapRXI-U^ZzquFcE8bcG#@G9~EgzoO2NtyrFhnEG1Zm;AV{ zfh&-E4R1cGnhC6rE08$iHT=9ZdySx0$@8E7M zW0(|4(?u7_MIl-S)Lmz#qs42mmr)8N&&=o_Hy%kQ=CS!1LuAy*2`Va8f4A`t{$iHq zAuDB(Gk_>VK&AbL0D~EIWHFUsmI0FxFGnAaqNKdz#AIg$-%mw21S?>Ak+ko}gDV90 ze}kr={|EBpQ+5*~`#9gnong6b0(PZuP&NLNF7EWp_gf@DQ`f5T0}W3L9vj9E-EvO6 zN&367$pjfia-C2Mn8UFu83LERih~u4$raR|>2qvH-7i@LTbLd*TH*}M)1Uo*W{eZ3 za%Wn93sV2EIY`vvelp0k9OYHgs!xVK7QLIjZ5u<{uOa|0XhpVecG0>F=qD~+#<1M4 z{aBt3Og24u*oA7=2F`)=i81}bQ71=>t8;^K9SzByTjAF=hO7KKWp3|dT+#cOI@eGn z52d{}J1{&^#oTJA{|@jAqg)6d*h4O@H0rBmM8&<+Dobfc()1UyeEP~Q$O{x(3>Plf zvI2s-MK+PFT~QO@4j+;IiInCX+#}GgNF-USiy3N5=SQiMLdB8v!jbUajZSf*c_iCv zmT29}r0Z6agePs^ezg_Vt?IljUZ7Jo=HYj6+vZ18w(K;7=o#p$%_mH_4UZnwlHRQ1 z>`J`%nDVZ9;{LEGHkuw)ar|B#-lcr<>vJ!vl6iT7W%-_tfqpH9fy2pC;Jwuv^Agux zvW;MHWOuhUP!oD(wNj0x9l)&oazlCNLsUu1R>xVbwt*hdc>iL3= zSqK%oy^*TZBd)DC)m?adRpo)Z3vB3Jzh!T2MY{Pq$lyt{7&y%}*bcJU8sGig??oNv zQf>#=N0$VZ%_`XN%htJn%TmHR!6=B6i2w#;&SZCL*kd7f=a+`2*%+*Anqrgl%shU$ z(7bB=r4r6l+V?lS>FO#l>*MBC&7It_kKnl#f!M^}ohI^-GWCRopL~WUpqNF4z!W9> zbutBkh&)&4kAB7y5YE*Obo!)JOx{7}tV#Ou>nxaCXGVRK{*)motS1gL^&7)!y6OVa z%_sNr>xG~fjDI|6rQ%C8Vn>vO3=?f^mT9@WcFw$#0{94x;X;xBI)@>3^bnUzuHfq! zWFTto(T+8M&8^kZLn`gsl|G-<9@k4e%)<7T(aBxD_^5m=xYz(2L3=A{iQHaqaJl;D zIv}*`N*R*9{eUk;WVzwwJkKfjc(((>_w^R7_ShJ?E408^xCbD~mO+GL+i^0H1L>>2 z4^p`;v}NbVun?t1iP1)4&-os@TEFi3e-DJj9AFed(e;lUgQkKw6rF{A_C?V5wlJFF za=V`jO3V`n!T+o29VYba`4s&Mxg$O=e%+s`IOx(b^l}IciJO)}250zpwut#q?Af+5TWj(dR*ODgeuKnm^WuRNY+H}c>&6=cmi?8sWU9oT-x=MA#2>;Gz{@4!b=$r0;F`B} zUUfc>Gog(#wk`ScLl^qY6I-Z#hh1g1Nle^cluPP2-|l-^W8wRF(;qB}ItU{$<`E2Q zcxSX-U+D)dxWO47QUYYXVq9(y?j$hwfI5F$=NdC)Ho4}b#dNWMZ_?9I4=Jg2wT1@UUrq~f~YdDuh z=7Eqx4V$Mcj?{f(+J=;m^xY8Ulx~%azbu`c*Ytz5ZCujV)~TIPhJ>pdFV1k^w_-VrCfIv7I0 z(n;0bvKJ}OFF^WWaSx`x$=>H0%HRnlarz{!TMHSeST+*e;S;~p6cbgcW*pck0J8P( zg5pJ(>AMF3arIZa99yD-hG^PtmJC4?-o6~ug8ir+y3!F+Pu@zPn09v1*PwRQCIhv8 zNG%s~{n0Odz6et5MOz+|r`{N~o;h@g$I^hh#bQ>0Nw_8mpjroDyHO)Tj!$;W-p;UD zW4x^FsqI2J@NY<07NXK%{BEfcsNk@#nG@Z~^v!Q=0CE!U-zpU{vU!LSG^;#Sf_6FM zVDhcc-(nY)CVD)Ym8NFXQ9YEJScgNv5NeyYaX8Wywze!OYM%Pmw$Ja-aL65MhUp(7 zo#VTouYNd~SDx0rE52$!XH{OMgn0$+y*ld1``WT=LhQJnWl! zZ2z3mCx`tRgmh0`;u5xo?Nw`AOOBty*`40RP>9q*I8FjV-BP;gMZ;mFYHCS|o63DP z9m=$7wt3bYSd0o~ayAGQZItzeFwW3SYtJ;|(>?NlPL~_9>z|3INOm;0iwANBm3^Gs=9sA4^Tzs$dzigvLYmMt8=`v|wKEc_jaYLa-Y&Ftyq z3Mi1r8+6pl%R!YFH7nz^1o8Wf;AK`mecEY?tXgD{C`kYd>B61Y+j!nQDd zI1KQTiiJzlnI4w<-ChKGt#|Qp9?U z#V*vK8im7U={Nz~Qw9F+_KaQd0^-)*+=Mwv_E?VJ6td@O_`)sw_?#$L8PIedXAs1a z9m$`X*$DwCI`$M z87ey||UNEwR z{hu1CXQ{lkFuQimc|gWu#m-0vhH>P<^)^RLB@@VxpHiQ~cYyT@<&4!YY8>B4miMvh z#7!$KpshFwxrc-2?QHhEotoY{%D&Mv7*=uFd_%li>kj|gKTj#SSz8qiWwKtP%fj`l zR`FbXFKv<+GMHiHM>LGx5ugqdQY6h{JcIQXgV%{-(~O#W{ph=4nuoFQg77eh>Gv(( z<%&OvF{$b*r_X&u@*uRVtkIh>T(IK=T|ae+v7|ikj_Y%AD{_Tqn3o{1;^qZzJP?P$ zY;Sf&MU%E8RY9nZX>HWV#sJvTLOY0IV2_TXTFE!`yk=Q@*|^Yjak(JRM^hRhb%MvjojjObeqJd4EQPP3M6u1T%h6md&LLU6;fHoLi-mArc1mnPSUAM{V039 zCJAVO&1h|3D>Unl8U;uRq@yReHhEN1#5t_9nW8e|)4!osXgl52%?_&`7ezw5R;|84 zx+g8?2Z6F>pbC)aZ&e%XZ?qe4Pn-j*BcC}9dlWc!^~slr*G zm7_K3<~U>)H;T}e=SFM_L)O1_+sV-`9Ri+>q=B{9={dYDEYjf^G8J}? zbtCW?{9^=cHpMic$~C=vwz+_wX+jp2z+BB;D{>%dEnJbZ z!IJl642fzl=V7e1u~>-mTnvPKH!UPoEuQZKwIz1TEXr z8ciVgPw8cP;ybc;;WoD$C&Kt-knt-$6xa~JCFKRC_DXEX0s6fA00r%%nSoC`+Ne_q z%H5v-9RWIO=y}L~{UXZqiJE*G!!WJDT{8~h3@9h*NGVag^zn1bKQe3o)5Fq$rzHQK z>ELN$Wl06G)rR%XxVX#p6u;@OBSql2>mwI^YXtEwdY#5$3rf1WZUg?Eh#l%gEJ-F9 zd;Rn5hE}v!hbTz*#FvHgWvn#3IIOg6G6e7yvq`SCd<>WQDgO=uf3Ya<-IQaNuGke? zKdV{mq?%s2fcE^3=(P10*@{8pQM`_6f2JQX){VosjeWh6-FGq}G&%1~@s>s2_Wi4d zLFkmE%gbGY2q6i%z^WJB{KSf0AiaXxitl`}A#Co);7~SS(W_OA!0y6w{05)4#fhB5 zaEXGcYU4Wi9Q;GWU(_scwlDEw&wL&J^dG7w%^t1!Ed4LAx38)Mhx&lFeP@KDJlU?` zrcY4r8+K6g!`iNzD73XR(#pe$MjjH|u;e*QDEw7WMM?DaaZBqdEUqC@2d&t~Uh&s9 zFTMWF(mf+QxbKCeBiTmWko7f0*QfwSAUqY+VGg@VR$j9#cb?fxI&Q`h;TzitGZJNr zfbfSg;l`-(d!!!aGtWL9Oma1j=@__yx1{)lAQ1o8fPpX&$JHgZ2ElA$yL0wZ4{?U~ z?j3krH5RI$s|e7QRQZ`?k_(AL5zDE!ktAYr>?f$-`nedq<$12NoBrh+XSAb`8?bRh zeVYkD{oqi@IPZ${if>bFHhEzMreD({Hf~5)deO*7^83_A(+8ZdhyFv(e;R(x0+=c& zXW-jG03vR(f^DSo%}u6NYgWO4Vw{Ysl{vZmEoXKMjq>YH0kc&$Gd{IgS?J+Sd>mcI zs?Jd|-4-s~7nK3QV*Gsf5+LeHHShc#6DlU@fRkbIUzDqp(Z#X^&aiR@9mX#$U>^;sOHS1 zCSE4T?PXJ|_Lxra2cxf0SfXgk;*F=HZe{tYf&}P$iNT0-uCrGS9(cDBlkfjrC-x*6 z=9@8=q2iN!b5g5E+%8Ts1fOqkH|3C}W-(+}pxt(gigQ(9Aj|Hxk+0S1CKzD%#4PI) zCq*`{?$(JbXrOx2cQqly6urL_n9*DMBONHBShIkO+{Y)m2eV2%L5cCo30v#(o+{s| zxeJhv`4kw+&BWIzK^ z*6}<1wi9>C@X`F*W4oN@p-Tfmpa~KKVfGGNa^N=HiPzZQ?u(?#g1{vfSbb0}Pympn zlXOGP>86Ep!r0vrfxH6rY7o(r@=+o!+8+MY)Xv0<-pkB;XWR#(00yagA68yi=Wy~D zsa!(F!PR7Xq8=M34n|!IqX!?0nt#b`i4WWiA4wqcwc$fo73S<0Gto;Tw+$hZ- z+8Ml9Lu7Yaw@RE>RbBkY+@Q10@Fxj1upvGBH^6Y#kOHQ9V5cWywl&=wa@s8s&Bz-` zi;$d;SGVQIJcjtwx)U1Ie#gd;mYgtP7hWgAj5Fc|Magt;ZFiso}82F+y)5@OhwbOOodEMJbJZq z@|{AWCUm0|&H-5lUha$i!pTSDqd+wR1OgQce>dDi8F+XHQ=TuSb0U2Aim!-IXZ2`fYmOL;^5yAN1br_EIQoCjkFH0Kj@UcD#^dkOA3T+6*CS zS-|}nymC4m+@=cJCxO5#PhMpt5K6|TA7YFP)V?-)P%ew?YSs}at#GBTLSpk4PWwrd ze-&N^?yqS?(kAC!S>{AcPhkuAnW*BK4<=9*ScISns>2B$3F8V$+nVAm$}}b*AZ6Ft zmgG+YM#kEU@Fz5(k9^wF%93J-blC%1cnw?LgnI>~NPl>EI#|{fAdzCffA+NY_EfCq zr917@ZEK*&FBvxi2VsQ6Z4S&hmnHT!QTx|fz0=$SmJS}nVwj6T+nXfgIT#*4%{{zI zqCkySo&V(c2e+lXPLqkGNNuV&yMrsF(HJg@+4y+HI7cyLSn%{&T1x5$+$$(+$F#M& za!Ond|FV9R43UL+xOlvZWPwZOAeP(_DbW1Uzq5luzVl>?wu5)f% zs(|N<#4znGiLWTzaBh0P&+<9{kpm49$^2@1vHHV=f97inN1UVSvXG);EKTny2gU-S zP!jqE5BoT4vm&yFl|NaFPStKWbcvzayJF?jE13I@qA;8vBfJ`dD>_4!ptJX=I9Yhw z>xPRB(k**t?x;v(Y*ND1lM7~t&C&Aaf@y!e^<1&6V(|JqgW<3WUC+DjO|y#VJ_Gk! z#6kmRW7^xx`_>i%nMAhYa7c)0aWI9JW`ca$tu*(Vl{27S;Or8u*T z!s`z2*XnUMD&;X=bHXueLhs8-+DL$`ErQ*3MTyE#bRMFQTDZ2Y4IOW(4g-$6Gp_R7 zRiPwvlBP6AH&HZh3v1b_qzTxye}+RM6^2)=(0pNV*)4?shv96lF>yz=#}6a^Wj(R( zhVzzh-q3snA|xi z#tNR}Y>dd&5@y1DqU_kR&Maw)a?1k(ZWYPwx+n9RCBG*x^j$_qJFL6G(%>(vXjH_j zlkZvZue2IFpxyo){(RP%2E3b)D(7`zXTnVf+gAL=BqaWY<$XK_&He&Sb{I1C@7sDZ z)i^g02Ku1I#@gBKckq_fTPk+@vNMPmvOA5nP?uwi|4a9Tn1@GNIg50d#UC$ z&yLELWGgcE@_-UEAkJZMUm$E0FhoY)bPDmI>x#aZ5DM2ZwInE}OB=p%^1MC9gO8Z6 ztcpLCc(Y4Tj4sa|Gd<-@4b`OzS2=sNf2geXW_X=sGoyQQ`(83XXzruNdx!9lGzhwB z5;)9^xu>WAe3bMFJF6#D`R)=*emvF#r^Dq zPMLi?F}%ZdD&(z$fm%% z_t%AdwT+dpRdAQ2#pjm>c)*Job#ZM>k@XrCobgbF{5_`Svj)&A6N}g1gK}txMg)#A zenFC53|vk;xL95!eq3UydRqPsOU#pOM{g~V-Wq@S8w zxmo>j)d*Ogt@BcCz~l)ktWz?CmN#HhGxNeW&Narf2I-h;f)OY;Hy~!v_<}H)i_d85 z9Wwz;cV6Wd4k-|}O~FI*$TH^sHCN>GC0ua)5mzPw9gmNmNR+}N@)7ch-LW!{9*lNn z0W~M{2z9;A^jM*a+9`WQvh2qm_hsnCq%hID#h(4vYV50d>iX-q6&bIG(3wFlx14a0 z1yd9YIhsbrCOQ|b?lMM+4p((2ek_SIlT6YT@OLWXKPRSqYURI7+*=kqSUoB^BJC_0 z1gVwB@sd-AHf+v?54gnxFLt;@U%+tR%B$P1A#s8x(WziRXqMS0!W}5D{P7GhXA~Edc7FTR%xeq)5fpcf@v6eY!u?W zAI#cG5trn6Cd=nqdC&S8cH|ax#A51>L?qdh3HMb)BFQ(CAcLxH-M4nyK(#(7^&lUu zY-6PEOaVl)c9F**fY+f@@uldEE%u7h;1baUuvU|j`%i6ddm6Dk=Or0muuyBa^}6u; zMF}IC7~0zpeyTmVjX!-Qm+z=n`Cz`VwC2|5aLpvis=I|IGm0t1fT|`vnxud>wB-*= ze(e9}HEk;S%sXU!sp>a)r@vN#0C zBXHC6D5hv;*dO^|ZgIuOJbFv`Z8l=Zd}b@EbBGbMVWT@E=bny>={Cc?D)}6mUS1}# z>WLthV-?`=O=YgOo$i)k`?GiyXcf|q6$w1t&4tiKWl}(m`in%Oy9~r10!_y)ls&ML z9Wt$~TslzCo2*)tM=9`?6m&ipylq?&|i zzE(~)ZZrA_^6-9w7$b)JkMSQRm`donw(5993nf86lhpTIu+XMpXEpL>RZo)a?VaE- z=)bU-kNjXFPrQKhbS$j9So*7JiKenQp_LXYNaflT7kc_=Ot{f%6I`bFD@xJC25VS4 zr5zUYcU2}^p{7GMy7|aelmQJdzWJdoguPFx{hxRp$57NE2qcf*oj90Q)9v+_Ons-3xT>N^O7i(QE)lkTjoYCH#d;{feS>CB8F)k z6a`GO?#TOIw?(DLN}eD};NdjiYq@{#EtE0Y(1lot+*gd}j?^sRf9gVFcax&0b3!7}wcPuTN>%8!D@I@P~^=(Ul~N!N(aFWF!&Aebuh z?XndHZx(m0VWqv9{Ekel*;>`rc&n7Uyl-!IgBmU<;|AM23u5387RUhqShN&9K1gT; z57%+k_lymHArBkd)ywchD&_|hX=9=H`W(eJHkIX~OqGeTX&Cq!o-!GBz+Q3^8)@4y zqYV`X5}+Qs)DD2N7ZPTk_#m!$q5VaSqpl>~iX1v;BwO?H&umyq4vLCp0Hh=|a2`2Y ze^=7^!e6ygY7IlsS1>so7)tPC#{ko)y9?PwzVPjz15VKcTTIt(Ck*4&V>^x9hAqgp zxT#f75l^c>^E4v}WiC+XrdR82cdmi&J!WdMZM8<*Y8Xa%=9Dw%;@6!)cu*X_pTqhe>0&(#YbNT$pXSey&6^iTLrOx0;;_Z*3Sn7tN$vt(5TPS1Dni;T znrh0!)}(X)|4AY&(Cfex@(!#M!y+Ap^&6NkR-> z!|Mp^NzuYVzdL?CuLci4^F*qq2C{t)^lH>=C`CO|Ssp^+4l1x7_}s#|HH;aQ$^Pb| zRxcLlhgIndGwBc2xJuaoU`gje({y&!*nS~J3N%CHZ*%WjuVfucuvGp>E`&atd8c}k zG)W$B95r=u$vw7jUgJndTkXhQjUp?l#N-ra>?O4A&5n_xXj5*=$#Eb87|p;o7u9)A zJKmlFdQu!I0 zBl@4vce$*)%esP~=DY|j@HHT#S>L*^kJLErk08NV1QXMG(orF5aV}nSqC&=)<%_Z{ z7)FiGkA`Zc2}vb)u=1&mo?f`(BinBX(i>r8`;BxZ@YN_WT^~U*Id@9P#{I_h5Q8zF6vW7aIYcPIheee7@M7rJR zFQ5JmqoQWUmCSJ@LN;5*l)=P%!rNe}TbqPptF>{?=nYOX36*$KCtEO_cM%PWycekJ zCg!gEJFikwdXvkV%{UQ6UAaxZi-o3a?98N(^0k6m+!5u8#g)RW&kdRAPO`n!jAAYY zUvKF7wa<;50%R3Tdp0^+kKkDYJ1qmz9@}>=4;ylpwU_oj-pahDzjYTxrzT(i_eYS} zu9(RR=Wvm(Ai(CPNBu^KQVc@{4`>R6%(d&?22qJ< zEAhHkBH5zivL}zuyi-k7m=le9omq9{10Xj_sr=HF|-WMhXv2W|(0pOdVm1*u!s5G(ps(gO>J0vSP?co=8;s60k;@w zEq$R5`ahIiwkv&ggF?FcTD$axMpALOczga$tooyZjH-_)lcmsc?X3b)5yJo}{rc$b$aT4ju&UpoaM5pPM z(xJQQf$C;+F^(u~z{)?2v1omh{J#*o!rp2D;yuw^4*!QB z57i!JO2h?+6%kzFK;3^djs+pZK=~3%CaES^RaqtOePjTuvRTc**aaRSp5J{z_(Tmg zi#<7^hiUG{D(0+w>rUl6MABR*$iiQOUBvksU8br5D-kN<`0Ra*4OE>K zP8k?6w{`!?1Y)sJ{S8qW{UKP?adenQY-98k%^+&Fr#R(0r){H;`>?j?tgTv#TN0Z% z%RgwR(5jNXMpgv+rOP^Y`aiZeXwX*rQ0BG&r~3M;*vTT+Jd9Eh;SQ3T7`6~TM_@4) z@;p$tsl>{}8pGGMH&^=bewJ>fNl!8;<>8MEpK!duO9l5L4VKgpyS23~`>etL3?_Aq zH&vL>^>$5is2A3Ykhkl~V1H?-L=+{X@phd8xNoTZS9$~V&45K6G;$*X8j9mQLDON*ulf(nxC10eIFnDgCp9-5QTve^v_g{226XbI79wjDl8!lGIg68F|6M9_Q8WpGr&P0WWDPSYlSww^2oo0<`oant3LRLYkNq) ziBN+v&RIDWZSNN<&*_Wm*2jB-kTUwB128!~Q8kYM$x^%~{fg`_Eg+}9z*isf0!jAM z=8*du&rbOO4&RS~9@E~aW#;HD=Fn^W^ZiY)-vJu#zeH_~tY~TAlHGhF_;L@Z4FHfz zhIQ}y)|tFjACJY?hIaH3Y>x;|RiNkj1U7}T&$X5WiO5D1pdzbxi(_v>`%q>Bgu859 zkx3UNP_AhM0I$sLaS$3b-n%mx_K`#m5rCJcVaC=~_^i!C4}=WN_0lC}2wGaXzQt}^ z{HST8*(_5ix=o<^JN-r_KmI6CqcLq(+gf0`F>)eUsM%Sk#|t)%;>V^K((}_khDX(0(S=`Y4rj!K2xYqzx=YGQ|1<%!5QN;V&=ob)!+W1 zJ^mBCCyy)-mpIntC-FrHw)nc+psA_A4yR+F3Yz;kjwd%=HO+d7T&%AfeYi%fy#DV6(px z6g+6V%JUZE_|ZR-G)TKprJjWu&c7F%FR4N!Tv*M)>(FN@LPT>!3@c~L+oP`jvI*AH zmg@qFa=}bZdpOq^|OIYD-`+{#^;^sYh*?Yr^kru0tL+{{p`8K zG#6`eyt+0lm#rR_E8QXn$9O;+1~a5F6U)FwVwb6@y*{}hlDnam-W?<$VJCoe($g0$@bo;I6(y;$uW}C z_3EednvL(COcJz`;$L}x&W|NaH(*&tTzAeCMP$$s`0*QgM2nKe%*6jaHa0}-e_0?d zHif{4O7P3P>|#Jrxsg*PrZ_Q400NQxCtDVEd$s`=+}`W{#+V_95D}B`CN_OiVFx{t zpk!Ku#WySf+U5QSG#n=u2xe!nDdy=w#_jlnRD~)a6W925zA~w? zW{z%`pZ3{=$XxAF@|UGfa1dXQ zl2yO6_$~Im(3qAStl*!rz1Ppp!-sKA$~ZS}pc9Eiw5BF0LHNMCVQ8@KI8vhI>^zqU z?P!tBYsm+Jpt)hMf)JLs~id)jjx>5GzPS(__B3;fD#^2@ob ztQ2@!{LgT|r|qv4n$50!Xw}2s6yfBugo{)%rXJ1LE`i5Aowbq^d~=IPDvU`4`rL#X zt(mHh!`d&B<$kv_p)9}9?$_!a5Du26z)v(>A|gXNzed>2M=>Q#VZ!HLYDI-!cH+8r zWo8?AWFJN)3}&8($&=iA6tc8hE-<~Jsab4W6y9)wy{E_&>6W-Exln_Lt8=g(%7USN zX)z`x(-4C4+}34kJfgO)>n?T3QTK>S)@B8nbmr@!;4eGqhn*oFAL(h9v&-U##X#>^ z>va73;&2V2O#}XdD@pJk72-nsC}+BH=q8D}ax*%gLypQ2dGu)7>%{AyP>7i~M1GKHzU( zPLng+K4~S}jQ$_kMAV(x?hd4KKA}3B^Er_G+qc_+?7bWH;^!a1Rl(;^3m?TK-4Q3& z;n%*xPl~ZVCN`o&c;bhg)5LTJMp`7`Cr03BVWPEEp~OF>@WDu*R)kv}2ZDxT-4ay6 z!y}Hv`qY0`$h+!(1D}kIQ#D_I6q`>L_l*r|A|^Nag%HNr?3Xo4B`8S|(2!h3VJA=3 zv9wjrB$77aJD=&Q6lY7Y4yhmqViZgK=7uH+y`HKvLhtTf`~W90j6QcceVW&SQf+{H zj$ItL+p~rC>|3~9{9$iQ@45VDbdSEW10_2;!=t%h=<7dh^0p_z$AL5j%2X5%EXD8G zu?=(ttv~pnGC`7HGZ6l2F8NM=DhOTUVP*~d1Q~blgK>umA8hn`#lbS$uEI856_MSN ztt5*}kd!dNwWJ7L!SzJfb`-Hc0K6$wcT>r~kpv|^&3tR}v0~TTU>=eix?i9Dm|V0BsfFkrxpBqJ?uNggjB~+ z>uM*iB(9P4+}+d_lPT62pv&aCdUDQ&k7iMr=jzJ%%!#V>H*Jn%L}RQ_#0JlV2;sp_2#~HRlxWJ2o#1#~vj&q{M z;&idtq~bv&G)2&Uw@wXorqzh7Ma`#7ZB)=iNRI>CgKynwLOStVTyIp3`A*B<{97G9 zuaIogxsF)KZsnUUMTeU{;TZ;BEuA^yICO2aVqSzvAbtf`+M}OA{;UC}5>HJVO!8V7 zYF!mXDid7ZIyhq2Mr;8}4+@lDi*#KAi!XOdD$gdu2|e;!YyY!wlFhg}@XJV2q~G7k zXKXG4k)7TJcGw(X7oM#=!~X7y<@wzfDcSEW!*i=p(bg*b(;)OgE=?!MQycW_zl`_B zmKQ{$U1*COA_*|8#gIVBG$3d=!6BmKQ9`u0tW8efAw2K#zCa|xN28~h$48gLLkfi@x?${dx{}AJ0QOkzDsV6(L`I6<8^KICkC6N zz5G@~Hq#YZ*p77G+G{{ZPYhe;g@&F}$Ugq~b_s_J-JPjtx(>@^ow8-SC~nGe{eg@y zmZYHMB;J-0vg_tRVEbO&L)|G>{AwTfkv?C23GY38Qd(*-@z(0^th@$q`A{|%m4S0v zeIx>f1~M{#F2`H$J}*SkU6PUE1e8_Hi-qwoDPHt*&h-s!$L@xU;1&1g3U-icbiX|0 zo;1uhf!&(=kVTDp<@xDb>giT9&+a93?uKAP=EUW(1Bx)71NG3i(C32xe$StFT_!&mX`kogt`Ou4z{+=2YA^qy;rA-#CsVA>%B1DQv?p z>X{vkNy0v%dPAMH5wn|Yt9-(f9nM!v0kz2Y;{VJ~xYBGDZWSO*;{J2fa1aU`Rk{lk zQvO1(6`a#XPal^>l-ixl;LE6w1K-b^sib-SuikfN{jy8=fg&2eD|{LcIJesCk1yAxL|(j!f4LanJ5g=7wkzqZ*{ zP{0!@I(~N5$J;wX{y|D!0db{a=|jZ*S00NfBrGSGkZja0<)ksS^W%a=GNB9$wYOo- z(d4io#n`)r9JRxvYT%a#z3A?`(N1#|SpQq&TbeArX>kyzHI!nE%%YLkFiu7N<<+rM z91h>8$2kgHYef*GxmzoJ#*ap{%>4UfMp6@07pDG&v zo0+b=UHu)10ZW)J!RU;X3`Ku-2cHtl^pH9CU*=V}*RP&re!#v+ zlalBWEfZF3;KPP*-!3zFlf%zzaU<@LY@2h&7u{~i?zeUMJ4qW6msaU|l>z~Dwz5ZX z%Z9ji%_`%0uo>I}17I9y#Oc{t8`pvN@UTo%F7u= zggUmvU=~$NDM>|Y_F9l4&&E7d=lQQ;g(k%TGkDHy>N4f0jW|b-OBaa_50(470#Tz? zokz)}Nn85iw10ul)5^U{NQm3e3!~YOd zfol>iwqwas!}M16~|;cc^!lIZly0-h$_iR;K)b;54-oPuLPH}m}{yI2>+Gu zY{O720%s?#5_+-J>85fv=C7i2jq?*7Y!k05yNr8bLZyxG_m_|?>mn03xm}bWl}7}4 z-r%)RM);Am`spFcoiRyyZSy*^%v57nmRM}YstdHnf;0>h>o_0eirQL#es@Gd`V+&p zJ4+T8B7C@)+l%nimd|#1BjeIuv(7yuHGZq8@HhhG2ztdeNcKz)!Z9XwaIsyn159C46PebWm*W3g6_{D z^|M$rB>n^z3sJK?y_nV6b37Fmh4@#G!SFG0Iw@*j;Se2?diUFp;cxzGQGEfjAu&q! zM5G}cyD2px6@+E2Youy(h%4ul>H`=4Sh)`U)xoHk=6H1M!J8wBV|P9?I)8apIBr<@ zCMPcrzrEG^DV{CV9|l-T$o#hSrlDb}o(#Sc%yi*?V$DH&c6|GQ#*ka2oW}_ z{FF`E4`u1Ki*-`QUQ1k(4OPI=hut;0Za+9UgMi}R$vu`$;MJLfIoS*^sk$57rtGRE z5ZNTfoBQDLOL!UN4HZV#@VUJ`15M_+%Zreh`K&7tGW}G|c*bihcMoi7gY<=@6@#>XQskHv9=ETN z`FH{(1Dl^;0n4^`1%BJGB0#xYUtM{??uT_%0ZYklS1-e{ z?y!@Sh*^v4^&=9w+aM}@$lbkaevbP!yDPRvM)zBC`>PGxPB@s-23OC@@2#=Dz5vD>(uiYc{q|v>PI~N0NJ&D{nOrJlXmV$ zL~72F2FtBV`eJuTzhIE3QCV9^giMU?;V}d0m!2?(@B57%Rw}9n z@a7~OIJSLIzM;9sY{ucXKxIlhxtX)uiLh52jr7i;UDi#KVdbrt5lf&kdcrhavHgl4 zfYD#`2-;dv;Fc%iu4v`R+2uTLs`ZD*=H@5?VS&wG@@05e&w6gRQ;Xg~p1E_#T{h>o zVBC0QN0;MrR48T0BV0|)SCAWSaXrVl)dp3xDJN$}y`eNZGk{j>lf8 zL6D<@tuAtvBhtCuUQ|k$Pbj+`b+Q0kb}01_?L`hqK~^j5cmx=_D&;$erdY4|(ZE&% zRtWHh%d=Olwo9OZMm2Vl>+Bcv?3f83@OsK%wcSEtrGWHwZ|XwY;O01$X;Xu;tVzL? zwfb*Okk)a8E8p`DZ9B9@pc=khpOjTWCPyQpP_tC8os7d8w_yDKH@4X=STIAN;1u@1 z%TmakrLqu+_=Ia&6&IDcCthU)0i@}@80yEA%!Kv#8~*X6eRlACP^`wm?^`DlvQ~7e zabbd->NEh99ERmHNLP@(1ep7JlwwCVi7E=sO`8*=psx&S^B+X9J++)b&<(oBm8PZC zN?^*KoJuI3a_q3(g4RVunm*;|ntPzV0JTHvaH*PQ`<>Y{Xzfod)n({6Iu5Md1exMM zUI)4n6X3?{0KAF=|^WX80mA#U4)LJSq?PtEuh|w>gto^7?k($q;>R3VZ)$Qhc{Hl^j@#?lD(oYuwIc(~Pja>(shH5o0HJ9P z1^Fk=BS`613n?m;ffUZKmI0n(K@wH8(a@HslQgRaQHdw_7ie7%8Z#-44%q8#)zapz zjUt8u#7=?Y*9-A)RKIH_Evl4yI%qj@!BAuk6A$cXQE7Q*;(eBTM&H`nf{$QuU0ZqQceZvS=c?L;=5%bvxjQu+l3#W8fP?Xb zCVUtwBE~0imm!m;V8hO7uMywJlmapPf&ciWsEu8km@T} zTtW<0u2ycEFAapjLFET~6>;sq+X5mtev!ve2{K6G|8-mNyR2JJOI2~!P{IYX=vKSe zhx!+5G}0AgWDAv>``Bx2?%W{Tk8b9xalNJ-d!?Co6}HWG=028@7w#^~N)qnr>c7J@ zW>Ej#kEOaHcWSNriMO2d98!@qBuQA5V%H1R+!fPQGJ2KI5R)FWdPI$ld;lnZ3w4lC zRL%F>q9?hzT?F5W^Wf+ub6POm}THIB14O$U9vVNzQuMnB39N`MaX+Jc`p?}QB=13q^H}-RNTD?d2 z#S#vFrLj@_jjwpC)1e*LAe)t{-BgP;-~~O-CnoV*L78p8lx^%icgZLyC9IvhL8U;UX3Frjp$2qco+xs&e+MWy<=!j-gBHpg*lt?a-6nN z4?IHih?s5VBk^AGV+sJUCvoFeIAN3r$G>OaWy~B>nQI589o+h6=+twMk8@9ssSEY& z$}&f_#YzF*|We!ts>R|!>BRn_U;4XlE(s@#}Rwx?{a_#GYy=`mSQjM zs*{+`N9gsoLbZO9Mr|8Gw$z@h;kCDX`9G9rXAo3$kBDW{_!F`S7mBKO%`OeoFq`|W zKtAOf+M}!OpFx&Lj%!(xp16@vkqrY?d>!o z;41P_s-i6XCtE=2O{bsJ+G@C%p9*zf;mBL;hjNmQ+!!O$R-lt%62cAuUewSDUp$#p zWKh-6wD$fAjiy+_6&h^L3qczz9kCghLKL-70B3Qnu7}wkN)2TD=af3Xc2Tc<)DJ;g zrPcLTPACcFR-<@!*2K4e`jwN>Zn}j7;8{iROocO$?U*)xBn{)!Ui7T^WJZ{xe#!O! zSxp403VOFE!eQ<*T7W#>!zt&k=CUXLg24vIIxccp8Jfj1TtuEa1JRf#^#PP%Ojy(9 zc5qC*kNcofcYX3SIzF7~tfLhU`y>n13T}!vnhGAS)%$X~VABgaIkwJWHMWjXnX^b0 z?Gg0yf(mfyN4QkEdGG%NF>H?7)`}!V*C4K4gL;!eQQ12PkoP+Oh@BP8q)ow&z*F6> zqikO|X0nq}k}LF_)4-6aSd{VJ|TprKKiErS~bv2SsdoZ;nY6ViVr{Y1k^_ zy~=ipXh02T(k-h?2{9xA=3V~pP;Rmkpxbo8csdUCq>tvXS^0DMcn42q5ErRDha2dX z<1$CfGCGlTOwmVJ&I(1oV6PGZhz;}OQr=t`eo;E$J*^#YFF$RKKIN!AaPi|O8jk+n z1U8`aDFQPzze4+HC-*Cdfo@8vI7oq&Xh`7ltkBFYJqq%?qUTCVE+olej2$ zKXlvi;!cq0eqSw=7WdyQ6SsTdHPs{1o=!}yPrp@I&jP>=$nD=KLvs3#<332oHnb>4 zPVq)l8@!uV<5_1{vyd6%hIZ-Xj3^pI8}n|rm{O`QADPAK?Je$6I6ZpzgZ`Ox`sV`b z&2VkjT;@^+hrqU`rJJ=iE4X^(^g!uB>@XV)ik(Nh-d9YCD5jTC8u(uIj^39Tx=l<_ zyxx1r6Wk)eg`c!rY-Q?kD@TPi$=AIQA2wyx(TGM73hOp##E`U`e8MBy%o6rj9)Ta< zhVN<+*E95OMZam(xp=`&XoD{gT6@z$9<%dYb%M%G+NDd*)XGrb3qG%7*EW&XX)-+P zeFWRe*KT^ZLM%q?e1pM8hjSuhXF2%F)vQf^&hBcp60nj>PB==8lRoKGS^vm6Xb+XH zs?2-^`U7YD8H1>!N8IH*tDf48PwR%)HdnHf-6>JF`OL;U3=v4M`B4&do)7H9?oV(r zjgE)dCv;zU4ir#W?|jF*oPXJPGF3?|b*<_g3*GG@jk*U=ND3yj%drt_>!vGnM5S8M zkFkv*hl>PxXENG5Ly}V_ZTyNhw^+1As4Fpsp>~_GIXU4v zUgKw>!RO-RwEF-HKg?%KMuFRB`uct>YRa--}0 zjs5R@>ZnoDnjhYx3-=tm5jb#oAotb%5-=N`WUQiE3n9E^3(z8Ky7a=kZ@kNxdLk)| zbnpNt;DAjKAwC801+z|>1ST0jnDpl^Ak5_WtVDSWOW1Wiv-tgWv|&mv5rC1nZ+`?6 zt{6TPjdwVQADa6X_|hz4x;7eh{`6kQdS~ue^F0(5;j1B{yYQbwVAhrk$;1aqLPF`bR6GPI@7yR--`}jRd~wp~0CRr5En-?7md> zKh_yw_Q_mJat8P69#rJOlsN(Gh%#PUaGAG`zqfoJ)aDbsdX!As&*zNPCpvEX^Q&W47wCk}t~0-H z99xYq=s`u-)ruKsK;sBU-S8Ui;lop|n{cWXADDMTM^!RWehZcNH|4!ZtNh|OmbKI8 z!|2iq?%9$Zf6S4_n_)RKA$VzieYrPavs{wi>t_yNXryn5q-#Vi;O@IVcFim*Ks* zythN4?f_vaXF2O+7neNaUN~me(*y+9=@BBjF1`#1hc!;PrgK%9P^>ABkz!q5?N%Fp zlTY?{MVp<7hV(U(xZViv`KKhzer0G3ljTlwxlI!H9NY@Na5JNT+}h?LNADWF)%TL% zrn6hy$6||pYkA1Jo13D1j5-2_Oh6Apmf~MY#HQvjlKn-*rO3k%{|I@Pf*q#_L&>wp z+cE2*M%Xfk+>J_lMB1`SR8&rGN9AztzZv+?4vfw^Ji|0)zvY{%OH+@v_P1T2X*@<- zyr1^WOLw;`+8Ik0tfc?gKHIy! z;aLg}U3NhXq-zkY#?!Y9;iTewHePu0wT&#GNRgx8rMBlV{R5*OkZ2FGt@x#8`NPVb zvPxYo4ebC)QUUHY_5o@SaX4{5nTV1nZk3U4VZ96TFB*F~tkcMY4pR+bV?^wE5;+thwQ}j-;GQBo*OiMV&BD!&Cw9 z8(X3(Yz^4@x;h|NUSJwhcq4qb&2w5gSgd!685l2TsKkXXxLy&hwoqcM@_zsp)I_&Rzg!7_^M#+;mlGR@7Karpu#)}5!A z(m{x54|M+)9`(q$ygz8~tb;d(b#PfQpd#>W@fG#+%`v7gSRe6vc}QlvpI8RCI-?JG zBZ=mtLG-l9J(qLn5baQ>1Iv(J>5;F;xlWOl;8$&)VMp*jg2x^8-(gnvA*M@3=%SDN z;fQxHW0S4KlH}Q^s8xafRdMeci@x2lY6i6NcJY>E4?;$5vda*q1kfCpmL8Z%|GPq)%Y4>AxQ)?q+Hk zJ$0)6Mr?TVnj*ZO!A?*O4=2v3FzuWqNccC$qN?1iSotpQeiOoI zVgmE;Ff*7`YJ>d)@whG!LpVKkSY{+3^Lz~cG*rq?Iw_Jpb-7ZL?jBl=99)GRbTSa$ z9j8-#1PtsQP?B);m@OC_sl|TH5nhskyz{mGS&#USd!p!EG@o{OV($d%d5?|HXw+GXrvD+h zdwpNzIxZxQQY1+oOTz&aQYsdg zKn{u>(b2XP-;f+G?%i z*$i6^WM=%rES2C+df!b57uet~^2{J~U~Mr#O2??y{Gh)uOlaLqVEWT@eCSNwmJ%wv z)+bJ71l%M{*NIKoX1M5f<8QjM2|>ti;_N8W+GUV$JDXP1RzjAYb;+X|5FSo#&8ff5 z@x+RY-3m=J$i=m<#1m!k5ov6PnW~qSTV{8`u%`7OFDdQ-(VvAIkSq8FpAy7!&}^;> zX1#3uf(c8KGaVvK>o+#G2g2==s%@9|u4#b(as7+O3NtNG!2I6NxM@Kf-RH)X+m2Ey zQ*%BINCy2YZ4aTm{r?}!Ao*@ROV;PPI59NH!u1=uae2GzQwB|EUH}3>{lDY%Q{@pb zVBJ{u*~f>dQkCUV6z=L|-bDI6D&Et>>@@q8vr1F4BZB`UVPSp`b%IIBFqgNWVWgen zWy2KO=2pWh_y9E)Y}8X*PK@`JG?r^A6Y(RfH|zGubW&(K)|5$wy`m^|k!hl-XpW(& zTSq5rD9>SUtI2d6-XisQVzgKPjPy|GHCSYl2<^}Xi{F%*4fY(Rdtg`paW26_rz0Rr z`NE;m)YbJ2(044 zZbOHo5+aAn3jM!gC^r&O= z-1pd|UT2nyxIsWngiKk%_m0aYiD$#{A!~)f^3!N=)vsEJ(b`y0ICeq|6fIWn@E>GC zP@c84#Gv3}O;Rm@KlD zk)Lke#GHm2%0`G&(7R7xC+i`J%c=P!Y&3FGwn+kM*bG;u8J~O2b zdqK0-!%xG)MCN1#8ipNo5;HRyE*MGJojkPBl~`wFeUj`8`DdpbB)PfKWmaT@D7!p& z58_$ugK=MAF*Ff|Tg&|Jp0d1K1t2A0>l0jdj6$opX5jjaE}M<mHX#n68NA&UZm}?a|E7e6!HUT{ymA}Kh-&XSUlaUJwf(4(xdVTLY zWh$F%Ay9kXeZ+smHPZyox0Puv zggLeFW2DR}M&|!#e0ogz#;!lfN+guKb?b<^YkI0842k3WFf*3F;>P!&kH+LFN!>XaM^P>vnV#`zz%~^P}or zBTBhX54587$*jf4Fnt-+c2hbukrqq_fz3w2IkzFc>VEFk{|GALz80=#3t6p)>sLjlrGMry8_}Slg_vEUY zBSqc4URl@t|9>6vli%XR`UXD~yssDGSY$M>axZBxWyTQlK&xdTh!^^LCd za!k0jr!fv_Di?+A9uNk26InYrE#hK9rm{zlKt!9luoHhI`zqLqJUhP&_NIrDEnzX| zS*Tsl6(|_tWh^QjmUpLFr8p3`dM(7t4RE3yP=g6UFduLWFjfc*-s*DNO0VR(`=?&D z(E9^BebeTRJNVI(v+Hv;PUx^mxc5d1{5Fxap6Y4k?j~O(sc`TDGaUX z#*TOOS?JnJz!f~gIBQE=iFT%s42D~gQ^~fL4a8AI(Wap?4qv3~X#nkJ&w}$I4`M?H zy2yPRi>t5`yqWB=5AU*7NUi1K34NXU;)@sNVj~8DWcd5VQ)949v2M5G+fm2z7B#A} zKIrnlP9KQ((ao(}$lvu$QXDl$zcI*`j()G&ev8J}f&8*(EsQ~akS2z53IW!xuP%#K zMIfmae%*j;1M5#tGoo0KjFpoPO|MZCHY@!WvtR`UZUtJaes3otn_USe=hxT^59FPe z9}v?45dYne{Uteb0`_F?_8UZIUYAqBYD9*ni+rS9H{8uNhBpgf1W+Gg`#Fx{z`3*nA7V(%VIF4v-AunwcsdER%ML2M+qE zG2Ern7u^|mSpG0BtvYo@&?FB%%JJlfjn#3Fy5{jzjrw}PFS=Fa6&2rRD{y`MKh%5b z`dzMB+Z-CLK5heamD&p{jW4vue>b0Os*pHWK+~b8u{VD%jTF^Z5SKS#9|Wk~b7G59 zPm-rm2ZjOWb^^`!8z074d~icsJ@b93;nYLB27XuIIo=bCm@F@LtrxzW*cBUI`x_K| z7OtV8P?npf7@uT}cP!HH1~PyI*=)v#V+tYB+i4G|CZo~6E2#QS>4Q15oTM>=J;(-q z?66JO_%lx<{vvdza}=rX@x$t0>Ia|`+` zT*4|+IN20F?{3WwfJc>Fw!Td_&L`i{a`N0VIEUb3)Mq9{$P2$1qq~*iY1#3+rQARL zn6Y|01bfAZE+t;E zKGgs%ZFZ!$j~#i(*VH$BAdoMxg)x13$pIffHx&5kk*eVtHnVWmTF#DQzj^M_OTWj2 zb!;_J&vkh28Z-`z(=i@&N${NGu}7I?r2kfzP@q4bN5>sj_LXCD!8`j#I6~@5z|AzB zNaA9{3wE#$OoeXdU1-SU#To~DfIxDs&*+dKWeKOVs4Lddc9+xv(gYnN7~$2XA9)x7 zn{*Fq!;xG~NR~p##9o?^fEam@Q@2y{Paw|Iq=*po5ep$NEspeH)4IpG|i+& zXJehFZK6Ak^d{<_E3NJ%x0{IoegM-mYD-6;|C>hxL_xg*o0g}ACcA#PxQq8S{ixEE z#qhF7f0yol8d6Bz_dhyIThDhGHEpc%@TYvJxcbjxe?<=zaN=ni-s@!W^hG@j33sma z{gmO8BT8YQJ;qflTKirf&jH3|6uqZOg@_dw=B|oqLfLB%Y>#%Bbw4;lStm1F8M~Pw zVs@EWWu>7m5yffIhL=fa=~1_x32bo_t5M-LC8ucH-B~+vl@W1We#{OE|kcCk(L1# z?qH#-B|dji`>H%Z?;o0?+f3r9#RF(CQL5GpGhfxZNa3pb>9MyjUzTpUN}~(@Ljr%cjk6e_-f=Yj*AQgmfeiG!2(Y5b%QPy-UgAj|XL`b9br`;EG+96J9O2u`>EG&)l3@3zRqLzQOi2Dl)C}uC3h;=Ru?LqSPiZQ6aC^75$ZS=21$&EHA1LTC=7UkcDnhPV*jRiKLxtW$CbfE zc@4ub)(^wuWjLJ~mVrB^If~_UiBB|yc#9&LF4He^4Nx?3gb}=5|FAy{od@Qgp0xVW%|J%bMNqBYT zb1yA&MlN8sziksT7}C9gWA6h_jK1Z*Xrvs_(kabg<5P;F_te4oAvP{_7H7@JrRP+~ zho*u*u?M}+_47}c)0736{>4QZ%2^V|k*yMx9fAw@k`ht=pw73pYg74F63l+q321qA zrZw{!CO4iZ6fF4JQrb;D_@&xMZSvCK`2Z_UZd5Yha*PfsrY(fV*0|=*lc>JE)d4Uf z^bq@vO&pB6Bx&N~hFz?YMKFK=Ry3ZE;{ENc1bN%cdw;k@c?5ZQNP+I<29TTp)0}=6 zK`y*6GE#gTq?w*vgbi_W^+lhP92_FHk(?@`DYZa$euTA&IF;i+ZxLfnvgWEj+Y}(e zvge|>9Y$Jve_hjQT?hX*rF)cIdpB|N#`l(+#4C8B-}C-FUbAtjzP{eag)7j1(5(e* zOkIXGFa#Q^dq$P1jf4~d2z;xw*@b?X!-{q6jHloe?si#U73&e{3tk*>((Ty#dZW#c zz!4R}Hk%7*=va5R4{Srd#L2{%%3~@*PMvlyVc@drfI!_|CKMb)f>5CQCYyvO@7A13 zAA9^apn)u)aGQk=T|g5NzY2PW< z-M!;IE3Dm%Stim5(JIJiHLdo*$+`bCv(X+>RPeO8$>Li-*pHq}!Ugqry!1UWw0}bT zkcNe5#sLSM141pWFB%vfT+AW(r@RELS+>;V)kx77XSnpkHVARr9aq4fHpg<}yvsMR zP=uB*JA#o$#c)5wuaD%6DE95=p>v)Bvjq*gowYNPT*lcq#AW(YQIc$?$)A!lUUe!P z0UwNWHWW~Q>T@ojU|cwSEgB!Cd_BCAa}FY~#e#q-78|^x(|t6CL!x(La3L^9c%3OA zX_%}y_k3xVw10mq#_0k;Jv?c}Y8s8|ap>+CgXkq!>HDIMQ{hjAG@~Pdw_}8S5zNk* z_8vq~Bif~ozuN4ATWWt+ue4Hv0b}(<>70y_rpi-pPB6U@N-2XYxI>33fW}%rnOF+Jl9X~{qK|a<4(VB-u{0jwwxG%e?JJv#c@(Tq7 z15rwa;g5rr34?XvN0OT<)w*Ys@{U-jp6A68inyUCd@_8V7%FG=Lj7_)UWHxB*K2;W zx5Ng{f*t8#eL~V&<&I@1yVwUqe;f0|4x1Naja$I_1e&1*t4esuX2-auMc8XU&de-J zxG=O;1Ny|6WEKkR?ZaY?tQOVP=zmM&VXU35{}Rl>H$0CCaGID_4}6JPX4kJHb@)Ca z#7Xoj${wWv(tvJ4eyxkSU!^yV=gqG7M#$K&Ldl3KI{PVgD!qU{{P`P(R4{Da@sUX; z*7d`&QxWdKZhHPT@8PKdx44ZDucvBx|KSc;0wpAI&OV1W(DyK%o)tR~sFxn=xk+ z5MNnSt4yRSu4M586;*E20`(sT<5>Pm@Is+$$43i|m4jqM5nrlIO_cwPer;LIM%=VHU-36RKQ8IvdW04aw^}N9VPgAr@NuMKcPaMFL;v^ zWAvl5pG?jA^$p7RNxI9_=}o5PAy1kNGwPWL>tT|SQv7_%EtSF2+z_m`K~v$OJB}7# zys#YjMM*}k(JjvQO$F4nT0u^crOqNJ=xNbkMKcIo?l!|qo{4+#quG!|U>{CX@(yy6 z$Qn&y2Guf}_3Z>pHU;ypFt~cW$uQzJVG1bAm<@84VsfMmZkeCMLiMl_*y-5jZT&Zn zOU9Tyk*l4reW+?)&PwQ3=X+jSTQNb=^t!TEyyc&dm%R8aP`aIx3-5d;Wmm3K3q!6} z70f%nQT?&h^9*e%rMZGh01v_vN%aQ;WK47ZBS!N!fcZvf{iu0 z!Ik>3t{^iP?p>~A_!r~TJ@!~}5pL1u1T)sV+ES;44N;g?Lirz6=I`;nB7&a}Aqif4 zpMI5FFz!_LrsIz%Xh^Xo6E_p^H5*dbs*gOG!jRK+ z8%uCH1&QMkXAJF?802pq=S69YK;((d*qQXa^U?23P5>A)H`X_@&e zmJ@7eG$PKt)20fLNta({Pnk**FJW_BWiVTzK%Qr-5?`02Q6-${JE^r)+UhQBx>a?^ z{}?!xqIa##@r%|rYpacz6(hkr+!R*A*VZo9to`2q9iaMCl6Re9QG-{Yt6DxNwy-nD zsU6D;<;!}L$#K*bJIBn31RIg&ai>6exL|{l-zVD>ES+GfdhcCYsBlrL^(Q-hLHG%O z|G(TAR?dQ)`qH@lxh!eQQLcYUVt9|v--G}4iyuTlWT4Vgf;Fz5!2?73i%5o(ua|GS z^v?(FONYYxg|g(exB-OMJg<_%a-MzX)9a#?bs8KaVZ{D^(w@=l5rl}1K37FI;vOsW z8MNN9R|V~lqr56S#tm#l^QXZ&>t6d7+hS0;z|RZW)le0eTr8xWQrY?Ni1xZ)o{!Vm zawF+!yZ_?qTV5wFI)g2z_1;3V<<(4-YiU`4k|LG=p@FcsmmDaNsRFzq0=si14!P@` zCd)u27Alg<%iv!pS|wwn=i~CR?rn>|#V%xMAgVicTJL{*^OQgRtRZam!I+fkPYe$r zw+1#0`|;__>ud$<*-#Z#*b}-nuyPD^y=GdW*K=JDit;=1JGl52sWu&4KLY;YrO{U+ zF#M3BPDZrAF%!!P8KLqD=`U${=UvD=YfqiiavXyv-@wkRsniFUe9!WWs<(4*4KKL# z=`jG0zEi~t6^&tHjr7yf#zzM)19Ze;aRc3pR7jtdQgHQF7#a?s$Wz+H0-7w$?{)pm z`^>0v(?jkXIq+nI%gaPJ1BHzEd1Vo3fTMx*nnP!XL5K~=`oZ^D)8<)crq2N=z|kKW zj*;Rfm8yhJr$C>TkYY{?sO>W-ag!U>bc!B`*f<;8K@`cUAdMq{BD#}=bw^bXh)AZF@FXXe zDs=ZSix?wYF-uFO6{1jQ`fLR`OP93*e{m)8(2x(nJA&1G%OL?NEGA6*~7~FBx_0bdMWUjmPw;dQOl_=(-(6h@Xkg0DNBC z)cZG#))P8QqrO>8n*5*(^6+=otQW^Gqt2{+r`4dUTe<5)20~?<-Et;~z7AVK&V58r>_10H?Umk6=e(F0Cpx*W}VGcC^GGyVw z^rV1bjwVcle=~SC?A976AdzJ=#Zix^wc#R?)j*Ga(yLlsKlsm-yd%FL$R0u=qeTX| znSf;9t0%S89uu=PU*&IXjL6w_j7b(X?v=lxIr72N%{Xm=^T2w5)j^`~(<3PFUtlIf zbQRiB0VW(Qb*jPq-5mP4cJq)UWo-1!gR@+G8-?n2*gmEEPx`#@hvy5^sL$E8LhvzK zo4d;%pj-5Nff8e`6@s!K(+&6+fuVUYZc6RDM&vw8&$Py}qt!x*Es@;D_+jF5-EIBK z+9VY9FB9JLNLTJW&xD{{2=&8$EqIx>kEdTlYsj+_p@I*?QOsr7Uilp=aVj?mJ;YPm zV?A`1u>M9bhTstI_i9mE=f{6tfp}>80J);O+e><;k!g-MKz5u2Vbg@f;IqW5lRCj~=XCCqB^z@6J5hqv9__PzN{Xt>W$w6MAjhS;AyQa>B`G zZ&x7MN}W;pGy3OEQ-{&3ZhnAjI(lBXb$j~n0X@S#1n-WE0@|f(tPLR?ac+wsl!UdZ z)OZjFPO{BE(!n1dz8th%2($hF_haE!d4&Egu5g5nq)&m>+$*bVVGr;ho2_}Jw1fg@ z9)rqekyJva$4i-cyS`yan^KCx+Qh~2Vpe|Q7@1eYtjt)c28~0}@R$D_O&IWULN@$4Bl3fLFLpo6*~M+^><5Q>?zo;CqRTc=*?5EjCc9e0 zs{puVRY?`vuq5FIGf@7{nAP=%u1g!xoa}wvHCjrFfDFQx20_X~b1;$@e9~00bV;HP zPq2$ljvs{KcxsAp*1_@p(6WdJA`%lU0)U_2Peu-rvuvjXA`m%R*@brGBTz>BWm)Lk zWV#JEHGu=jSU41g*wrdOXw6fpfY1T&hbCw#$O((aWd&669tZVfrg0}~LIj%0Qh z##H7gey&kNS~S{!A)o!zN1ojIO_CYG{-1>#$kbYBIa>rWoJ<6^lB51>3T z8!KiO`%u8;a#C=bL66-zZxE~RVv)w+j_Kb6_&9^ezXdvBWS0IZtmWeCBm!kE8*lSd z&Fb0^xbB4&5oz&snRR4WGTTRdxKB>Wiap_!MV#`4v;y8!-sr%q-wfI(yyyUClB}Ux zW{&nVSg<$0-)|+iJ9T7ZlwP;@pif=UlndO?EDXuB)y{U)NQ3U`=*dmaLxLd~U?0?A z#08@xzG;;wM9%2(gnqs9j(G8yRqBpyxVO^%va+!0v$$s_X$=jRy4;x+_j*s)CHka- zqGHJ&0HH^QpA*~nxMlt0EwnoPJdW*k%lyqVM=Py)dh`8SZc$Bz5YmuZ=9uSN{qE6x_M(3_g72GVcgdOpaeCY5CI+sdam zWGL_7_JpYO_IpqNz-cVbs+Y#s(mtJi*%aM=#n^JC@SlfGi~@|km48jo0Y%e8(*nYJ zbT`t?=g+rOT(-$`InI4JdqH+g7PP_-Sk=RRwJ5!-8J?nzjZ@a9s^osJJvhi6NAJ!IuNph|e1K9lRgZo9co2327ox7%Ugc?l(Z z8ES=YFpV3v62I%Id3IK3ZA_t!N>2p7+#9(YQH|iK4&@+P8rrdZXFmB2Dd+>AF)nJR z=8_2aG$KuBZfxhjV)JLWu9O;Y4&CBq&q1b3Oi&xa-%^)D(&WzKVo7p%s zTkG&3V^QD?eW>6KBRoZHDABftlNG&bq|$t-}ooqQJW zxNCshIz+n>sQs&HOUd&s)j~BN_V|X!uK%-Rlqk_HWDc!l`!*VK53R;i7Kd+K;H{ZI zyI~7~6MUf(r8ixZf!%%8g=`N{B>+KoXsE_U3g5P@ETP2yOw_d_= zpUsSw%sZGni{VOE!`Efr5C05)SpHRSMwJ!IQBJEn|E0HF#+Ti;?UaS)P zjjJ|=il__CVW&rmdD^AUqz)(OTWxPXVavd1FxBMN0iy}}S{<`Ja~zq*l?GR6VkH+I zbVF=qaB*w3kb(Nz{1ax$_WN1T<=YPB#_Sz763(xjo5{9UN6ZK8e)zaDG!Ct1M}36# zz1-}Yvp*Jkhtega-@ru=kddd@=#1a3F~~|KCy3=~(+_cSbQ74#$(cF8gdUAy=LBhm z`zKFbd>H_GU#f^@P_bE%~v(NZ~j3m)t5985bh#R~%ZREN+QW_ubN7&1QB z^1_GaC6BuWN;(B`*pF#UAxBf^4BfEy))}-X(V{3lj121Q%-64*c7r5WRPshz(RO+a zzRb7ZDD-@)-974Eb^(g2URI1YdyDExUfL0g;~nAnB!|dCcCd1+4Y`hG8`}|qJeNdB zu{m+-RuM4tgqn4y_wIVn#E5+WiXP6`X9R-(FLV*7Y>pS)yV($(NnKvhtU$I$xH3`< z*-S{vwLARf^+%e?!Es`r+({puxgE)xf{XAoR2yqNisg5m@B(1qMg$aiD8mQzrgGg; z!6^o6Z_FRQ-((~)rJ2+iEZ&KYf?y#gFN!wj+57P1?)21%^dk3`jPvTIMx&EJ&Ly=& zwF-OIf+!)kk+ncznd#DNXMR6NS8`Lk`Ml>t_@fQ2$*yM%n6?pcqO2gt+`ncV|1d`$ zFRVE>w*WxUKD++xgx{PEqqA&B-u@Dq@Ju4YRS3WHi#Jt*$=gu4!>DrPeW1>SgjZgn zIKpSCX5wDw`^a6rSlNIAQb{DyFj5 zLM|^(Dl$aMm=^Rw!Fgac50F439ML#4*x)}y5KyuP=e`l&Hsw>Nmp}cvKW!)OH@FEh z#vsKywTYa~WOx>+r&E_)qcrrqiobi<>JeRdVt>2hXKqlVFbVL%Aw73v>~N)2-YwrF zZpifd8{o=48HLAC4S=s>@yGhoigeP>Km9_15A&0QPTYHOfaQ~DZ>KgHqCd*WKZ0H= zGG-(q3}VYFo5LWdIiUPMYqmhZY@0ow_GX6`J&c<2Zx;JV@}i?-J%{XDY92tW{fQ9U zO~in{2Ui?WhyhF=eDpy1u~wAeT*)PWh+)Fw#`(56If{iTidM!5Co}q%GE~XoW~;MD z?nY9SNd;JVk9eP*(85-D(QIh@hcpPmWF+Cg|IWgQ2&F42k)l07#`umOOo`Mwm6#Gm z4}KtOh1s872)tFDaz8}m{>%v6qsPVGn|@b+hr*}P%ep9oVJ-G+a@jq4EuU?GurY)S z657f{G(6HDYidReRPiz!;0B$|vQH8p9k!RgV|}moZ?O~RS491FUohrX!_n7>K2#3h z?Z@%ST6k72$D~}l<{J7!x8aV^F-^l?ecmDLko`yR(&MV*(z2~` zPi~C&MGE=W$MDa-l=TT-M9}f) za{>yij>@{Ecqg8v+C;mz5_SLX34On<-Nz}lUd@?FYC*hg0E^V$dPbprS3d1PEO_#6 zt{IHc21*&;lpTIOIy1p(G+eU04bX0ztVx|^I2<61?loi?^_JIYPUjIL!C%fseVi zTYI}TrH)zL>g$COys|W+`jueVKmGrb>K4obV4Fh>sL2HTWar)jm7ph(Fgad;eAL5> zw4UExMGIR>^@XSd19mn&7WJBJ$V zty{YVjbIG2)^_4fJtxSKvv(Tn)VA>gE(JIGQtQsl>NrVY?!pOKt;;Je1uk$1DRPIz zd_okH?n{l}a@AovHcd`e+<>YBO(X`o9f>0xsW?P4Hmam3=}*{M$J5CXV}P(GQR?=9 zYYdU19f1O%Upa7cXpb${iaxjH-g4LQTYvXyg#e9$GJ1RD9Ss&gy$(`oeG)yJ9Rt@@ zmmb`0i6J|M_GEihHxtpM2b>=Yr42EqhcULEBF5=fXGv})^88XHTqJmnRlQ+M;7B8_ z=OdENiXn9u`gdW0f(Wz@MFdB$-6ugvmn>VtqJ*!R0wst0>*xreSFVgR{otZT8p(jR z=a5@GI19T)N7cVKJQc{9>9~ zEat$ZwspT4l=d-klh(Fkja3A5`>AWZzyy{ix6r#Q`6#TBc9l1B;gbnVJEUAe8L2p5IE$?m7xjv58w&1_}gNnwg0@i|HEZ!dTgLFL0 zvand}x{^EVxjiXw{G1bCvQwv|5J=yfHyj zpAp#|MJE;B5rb&n752jnL%!=v_vZ)=)!_0c>iRsJtJT}TXn-tg90h=|X0U7u50--w z^qzzq?|ubGtPXoYMc&ooGgp=#-ZMGHs29G@%KriWI~ZLde6B4Go34!l3ChR6*wh)Y zV`-gbv{qAg6RQDkbW_`}0Rp`1_Scftg@9ZI+0hb(Q=<((hBSS6cCHC{ciu}1Lls`e~llW5lL z^wHLVBb)MTY)L|E6PD>k{F^J|s8zDnTma-)_=aDEl|qnPhuae;?IrN9xw9GVKsE__ z*rzMPV;V6D?*z_AIFnfryT#MlDe!$0bJEaqypt@N(Oi2f(12xdjPYT3nv5b`A^LJ$MPez-}dX3B~ZT`_(He8>VU+&zLA`i)kp4;+RNwwW?66gTrmVbf5;W>i;KW=BN zir%7kldyXN-$Dg{r#k3m2Zpo|#C;YMwPDdmNOEu+2vC@9+NgD*I+sfN_Sd$dULm+=m{x1;mie`OU2j(i^S- zm>a{P6VIpyt%2b>5FnEnc>62H;HpB9D?{C%YGJiZ?rW4M#xep{z+PY155d5(eed|L zb5<{uP>?Pp3U^1MsmY0dSnYswHUoZ+ZFKyBADf=0I+8^=SX|4hUi1+swrI#uQ@7k9f3#qzcWZefz;F>e!YaMzg z)A7#+o8U%k=e6NTrMIl;Y*PKiT{YQ`9Db&81Xnn+>W8?iP6Ck1A7eDx!q-{`Y3Y>3LLFu8zgdR5o)j zOjGAlV|0uHz&M8h>jQ$6R6trcN=OfAE7X}*31}aEJb}{TkVswO0!vP8Vxrk$k?`{D zUR&(yERmw+1!Y@}E`;6Jx68pof=#pO9u8cfMoO-#_IDDmH#hn0pMO~k*tzk?zf}|p zOBaNz&6tXlHX)W#_86>A%tnREZhXmu4NFKR@ORZpPWFH5p!_c zxnd?YNkDeL4+%9N-B+TX&ciy&w{meX3H-Ht%tKS3+qmVtcTT`?s!J|E9{?N?7?=6+ zGG{_iXPORtWY(WG#CgK~7LEnbxXNF4UHbuu@6bIjwNqusVE?gAmX-#r*Mw-D@NiytPm0y`&!vtiI@j z#;lpLSX9islkty6XH%sg8{{8Rr;5A1ZTptHH?W-h4h?nDO$O?8`dyG4!+vq#3`PvYBu7S zKd<kpg^EZxY1`KAy%45la4uda6BKCaUMnYG+4>E< zYl5>eK2JG_bN2P|629S&T?7`X@(vqFH$poW{RsEJNFn zRm&A)SAWXvUzs+e?Lq|TYt33g%`E$PAz{W2YbKm*&y!~dCIE)}+eaavnlmB++>xQp zG_MZojNmGDPlaFVZZ3xJCAD$p#`l)`K@InOG%!xi^rxG~AV<8%?rD;1tiAgi8{9BX zX&K49)3tE*9|B6l!tC5vf{NK;`p6i6)c?Zr5LLGI#PelrMM&QP}9hlNn*{w2Ki_>RqnqO~7bWb6%4*vEJEm=jB3|XJLR7Hb` zM*XSN&>muEvGE%fMH-}YOkg(*vbwV(YU4h&p0q&Apck!IG7yZvK$`F%}x*Pst%&L?UA<{u>xY~EUyE5w`hFM&S$ZvgHNbuzS-hVHo1M<7So3;MBDFHAy3sD{%+0W?~JMYe5-wcn) z6G=21W}NOG!{oS&-hoCtX*WkryQU=JcaP$l`DBAu$L;Y#r%=KLLnhcphum z<6P^?`D@lPm3l!X(uSq$f-Z81u{7;L{udt&KHq_w!_t$~265Q#K4Y1r;1e|~P8LSs z^Fbc-z{gQAY5Go@G`mo{j{phD;njIxlPkkNkApW}A$Xo!-g#$;cuD4BsgQH*1q}%` z4rF8P3}ZL*<$Jqzk-Vy~8cxKauNQTGRRbU&hTuGp)3Mq}jAIO0YGMtCxjiW(-Zath zddDgu65zY%w~Q<>WB3Ew-YR;bO}8MzfIhAqI+eAM)YEH;1u2PPHoiE#WgucRy?sF5 z!R;9EPf2#2G_-TV!vjdDXGp?zYuU9KLmiq4>3R$Nz&qrHFY;+f7)vvieFh7OtK^1v zlrFo?nQntJT~FpK75jpMKxCJog#@yunB*?;8y_WxgE??1U2EPG>DgrmdO+~mAk;8- z)9}8MIca=G#-YCgB(0^e9nLO}fYRaN^d(U2kv}v0jo^1CFO1Net=Ah}b5DQB!un#- za7fL8-&8dRR7WU?KnEPT#s@4#O?DyYpPI~IjzFw8dkfZ24j)QJm9mBIjaa#RowfAI zj)<~odtei=L=IeX5HWbW!r=7~Xjg#_$S?DG-%i*B4Q6y#{&!asBY3Q8N179*<$+_5 zv7+0&RY3z)W?bWq&qISz`?EiBk!;pdMfm(C3tJZZkupV?ZFee6fic{dO&foD)_leN znZ+c*EktL=bDo8_CddMY$9lNy+$)nYIz!Q=c4a%N`<8ds36b$zn7Hh3=vN@2G67X~ z-Clm{5aXxTjEgOt%@FaT*_gYYp{A}XnW4<`KGWFU4%yn1wB!9g1hb}x8mX@5kv7O^ zKd1SX6F+L*cC?wpJY<{b)9n8RRprEKDiw9qgW)=~Ktbbn;?fd2TT6_nl@I}v{O?1R zU5Wu<>Tfq`r^<9GnbN@}Wj`dS4FZklR`N`@|5EAlxmZ6ndFp}P;io^(tqki`TgO4B_e>K?h*P|#$M13`$dfGr! z`Q?ec=Yuzf9Y|$|(JHK*+Ya&?N+$I_!~V>_7fYShh{+8z?ZnIemG9VJuSOUB={n=r zms@%V1whVxazP=vD+wMl6c^6X{6-{ZLAq}pyrXLheM5i2D0QW^;SQnPmwDO}j@a0fD5gO475K?oJ zKZm2$a+M4Pl#XtGHbqYDeRs3}-9a_}b-W|vt3-f~95lx7tDKr5~D%*65Z2h(+0fX%H z2XRQX3+;KqkrUtOy)T;}?;e6`ZoLakNYj#(SUISQIcYfI zim5tMpPh>bGxbUUl4pU}wC?0qhMt)48eeTq+A^wVxr*{VGxJJuP2r`|sp_U>SQ$Xv zbG<9)X}0BGIdo#k43u5p1%_kt{!*|j{NUOt%yM*ytex489zgA8FzjJ#v?t!_3L zYAGh3;X{OR;CQ=GGXax92>JBZ1uoG?EmYE!1iYrrEBE1qP;x@#o&wm4(SU* z5v7*$>qUhUWAkj*Rd4aCxXR~lgKH&tS8?eu*B^9%TMVX~u-H1AH<8q||0Q1BEbNDT z_LVE5*bC0A<29WwxM9keXt?H4hHf|bf_?H1{nNbj*cTH2PEym=yVB@RF*@RTN}6ol zrR}D})Fy8E*9_i3xv6D(;Z_bMZpLe;Al6f5paf+WqEzIuQavL)zXAZT5`+P+^>0RY z3O_DQ`;usN_!O_J63j(@FC?I=XYkm$u^0FWCbjz72<5XgE+jRTD@dkm{ckhM9YM_$ zakES)7U%-&U#X5zIAGZ>Es)JaVL@`*n^)bX=8k&s2<1- zzA%Dfg8^uBU&Y4HD4{bbM)XQTfaAR@6D@lNBX2dNt^Is{o}=1Kc=rG;;Inhg(LWGd zB%~=(6ku zhyj0a7A)$gbx)WW&V_8mHco=JK~avNe1EDv)APN!=aBkv0>Nv{hyocfQ4wzH+Ag-y zOq}3Z)7q&gCL4AZdLfsA+x%|yy#d+Y++z*6ZcCr7-KKN@

SpZKxH@nU#*TpmWg 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

pj`qAQexpou3F_d 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 Jq7)w^Jme~wVT}L) literal 0 HcmV?d00001 diff --git a/MikroMaster/20260505/20260505122002-Config.rsc b/MikroMaster/20260505/20260505122002-Config.rsc new file mode 100644 index 0000000..71a3cbe --- /dev/null +++ b/MikroMaster/20260505/20260505122002-Config.rsc @@ -0,0 +1,4506 @@ +# 2026-05-05 12:20:03 by RouterOS 7.22.1 +# software id = A8L5-07YF +# +# model = RB952Ui-5ac2nD +# serial number = D3D50CEDCD38 +/caps-man configuration +add channel.band=2ghz-b/g/n .control-channel-width=20mhz .extension-channel=\ + XX country=belarus datapath.client-to-client-forwarding=yes \ + .local-forwarding=yes name=cfg-2ghz ssid=vados +add channel.band=5ghz-a/n/ac .control-channel-width=20mhz .extension-channel=\ + XXXX country=belarus datapath.client-to-client-forwarding=yes \ + .local-forwarding=yes name=cfg-5ghz-ac ssid=vados5g +add channel.band=5ghz-a/n .control-channel-width=20mhz .extension-channel=XX \ + country=belarus datapath.client-to-client-forwarding=yes \ + .local-forwarding=yes name=cfg-5ghz-an ssid=vados5g +/interface ethernet +set [ find default-name=ether1 ] comment="WAN - Unet" mac-address=\ + 48:8F:5A:8E:1A:C2 name="ether1 - Unet" +set [ find default-name=ether3 ] comment=LEN +set [ find default-name=ether4 ] comment=NUC +set [ find default-name=ether5 ] poe-out=off +/interface l2tp-server +add comment=Server disabled=yes name=l2tp-in1 user=vados +/interface l2tp-client +add comment="Starless 2 MikroSPb" connect-to=176.53.203.171 name=l2tp-EoIP \ + user=vados +add allow=mschap2 allow-fast-path=yes comment=Starless connect-to=\ + vpn.starless.ru max-mru=1280 name=l2tp-vpn use-ipsec=yes use-peer-dns=yes \ + user=vados +/interface wireguard +add listen-port=13231 mtu=1280 name=WG +/disk +add slot=tmpfs tmpfs-max-size=22369621 type=tmpfs +/interface list +add name=WAN +add name=LAN +/interface lte apn +set [ find default=yes ] ip-type=ipv4 use-network-apn=no +/interface wifi channel +add band=5ghz-ax disabled=no frequency=5180,5200,5220,5240 name=5G-AX +add band=5ghz-ac disabled=no frequency=5180,5200,5220,5240 name=5G-AC +add band=2ghz-n disabled=no frequency=2422,2442,2462 name=2G-N +add band=2ghz-ax disabled=no frequency=2422,2442,2462 name=2G-AX +add band=2ghz-g disabled=no frequency=2422,2442,2462 name=2G-G +add band=5ghz-n disabled=no frequency=5180,5200,5220,5240 name=5G-AN +/interface wifi security +add authentication-types=wpa2-psk,wpa3-psk disabled=no group-encryption=ccmp \ + group-key-update=1h management-protection=allowed name=sec2g +add authentication-types=wpa3-psk disable-pmkid=yes disabled=no \ + group-encryption=ccmp group-key-update=5m management-encryption=cmac \ + management-protection=required name=sec5G +/interface wifi configuration +add channel=5G-AX disabled=no mode=ap name=5G-AX security=sec5G security.ft=\ + yes .ft-over-ds=yes ssid=vados +add channel=5G-AN disabled=no mode=ap name=5G-AN security=sec5G ssid=vados +/interface wireless security-profiles +set [ find default=yes ] supplicant-identity=MikroTik +/ip dhcp-server option +add code=12 name=HostName +add code=119 force=yes name=domain-search-list value="0x03'WORKGROUP'0x00" +/ip dhcp-server option sets +add name=HP1505n options=HostName +add name=StartLife1 options=HostName +add name=amsterDev options=HostName +add name=MiTV options=HostName +add name=miller options=HostName +add name=amster options=HostName +add name=garage options=HostName +add name=domain-search-set options=domain-search-list +add name=VADOS-LEN options=HostName +add name=VADOS-NUC options=HostName +add name=MikroNUC options=HostName +add name=master options=HostName +add name=MikroYellow options=HostName +add name="=\"Client ID\"" options=HostName +/ip dns forwarders +add dns-servers=1.1.1.1,1.0.0.1 name=blsp.at verify-doh-cert=no +add comment=Kra dns-servers=1.0.0.1,1.1.1.1 name=slon2.to verify-doh-cert=no +add dns-servers=1.1.1.1,1.0.0.1 name=slon3.at verify-doh-cert=no +add dns-servers=1.0.0.1,1.1.1.1 name=slon3.cc verify-doh-cert=no +add dns-servers=1.1.1.1,1.0.0.1 name=bs2web.at verify-doh-cert=no +add dns-servers=1.1.1.1,1.0.0.1 name=bs2best.at verify-doh-cert=no +add dns-servers=1.0.0.1,1.1.1.1 name=psrms.is verify-doh-cert=no +/ip ipsec proposal +set [ find default=yes ] disabled=yes +/ip pool +add name=dhcp ranges=10.30.30.83-10.30.30.254 +/ip smb users +set [ find default=yes ] disabled=yes +add disabled=yes name=vados +/ppp profile +set *FFFFFFFE use-upnp=no +/routing bgp template +set default disabled=no output.network=bgp-networks +/routing table +add disabled=no fib name=To-VPN +/system logging action +add email-start-tls=yes email-to=vados@vados.ru name=email target=email +/system script +add dont-require-permissions=no name=fetchCustom owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + /tool/fetch mode=https url=(\$GlobalScriptsUrl . #\".bak/mikro_bak_rsa@10.\ + 30.30.86.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.86.pub\";\ + \n#:local Script AM-setup\ + \n#/system/script/add name=\$Script owner=\$Script source=([ /tool/fetch c\ + heck-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \".r\ + sc\") output=user as-value ]->\"data\");\ + \n#/usb1/mikro_bak_rsa.pub\ + \n\ + \n#\ + \n#/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@1\ + 0.30.30.10.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.10.pub\";\ + \n#\ + \n#root.mnuc.backuper\ + \n\ + \n#/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@1\ + 0.30.30.81.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.81.pub\";\ + \n#:local Script AM-GlobalConfig;\ + \n#/system/script/add name=\$Script owner=\$Script source=([ /tool/fetch c\ + heck-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \".r\ + sc\") output=user as-value ]->\"data\");\ + \n#/usb1/mikro_bak_rsa.pub\ + \n#:local FetchFile AM-DOHCert.rsc\ + \n\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/tmp/\";\ + \n:global MkDir;\ + \n\ + \n:local FetchFile Binary.backup\ + \n:local localDir \"\";\ + \n\ + \n#\$MkDir \$localDir;\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \$FetchFile) dst-path=(\ + \$localDir . \$FetchFile);" +add comment="Example add WU servers to AddrList" dont-require-permissions=no \ + name=WU-add-to-list owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_Script to add target web sites DNS IP addresses into address list\r\ + \n# Tested with Mikrotik 6.4x\r\ + \n# Syed Jahanzaib / aacable@hotmail.com\r\ + \n# List name\r\ + \n:local LISTNAME \"windowsupdateslist\"\r\ + \n# Web site names which will be added in address list\r\ + \n:local TARGET1 \"update.microsoft.com\"\r\ + \n:local TARGET2 \"download.windowsupdate.com\"\r\ + \n:local TARGET3 \"download.microsoft.com\"\r\ + \n:local TARGET4 \"windowsupdate.com\"\r\ + \n:local TARGET5 \"ntservicepack.microsoft.com\"\r\ + \n:local TARGET6 \"wustat.windows.com\"\r\ + \n:local TARGET7 \"stats.microsoft.com\"\r\ + \n:local TARGET8 \"mp.microsoft.com\"\r\ + \n:local TARGET9 \"ws.microsoft.com\"\r\ + \n:local TARGET10 \"sls.update.microsoft.com.akadns.net\"\r\ + \n:local TARGET11 \"vortex.data.microsoft.com\"\r\ + \n:local TARGET12 \"vortex-win.data.microsoft.com\"\r\ + \n:local TARGET13 \"fe2.update.microsoft.com.akadns.net\"\r\ + \n:local TARGET14 \"statsfe2.update.microsoft.com.akadns.net\"\r\ + \n \r\ + \n# 1st time runner, check if address list is not created previously and a\ + dd entries in it for 1st time usage\r\ + \n:if ( [/ip firewall address-list find where list=\$LISTNAME] = \"\") do=\ + {\r\ + \n:log warning \"No address list for \$TARGET1 found ! creating and adding\ + \_resolved entry for 1st time usage ... zaib\"\r\ + \n \r\ + \n:local FirstAddr [resolve \$TARGET1];\r\ + \n\r\ + \n/ip firewall address-list add address=\$FirstAddr list=\$LISTNAME commen\ + t=\$TARGET1;\r\ + \n} else={\r\ + \n:log warning \"Previous List for \$LISTNAME found ! moving forward and c\ + hecking if DNS entries can be added in it ...\"\r\ + \n}\r\ + \n \r\ + \n# Check DNS entries and collect matching names\r\ + \n:foreach i in=[/ip dns cache find name~\"(\$TARGET1|\$TARGET2|\$TARGET3|\ + \$TARGET4|\$TARGET5|\$TARGET6|\$TARGET7|\$TARGET8|\$TARGET9|\$TARGET10|\$T\ + ARGET11|\$TARGET12|\$TARGET13|\$TARGET14)\" && \$type ~ \"^(A|CNAME)\\\$\"\ + \_] do={\r\ + \n \r\ + \n# Get IP Address from the names and hold it in temporary buffer\r\ + \n:local Buffer [/ip dns cache get \$i data];\r\ + \ndelay delay-time=10ms\r\ + \n \r\ + \n# Check if entry is already not exists, then OK, otherwise ignore duplic\ + ation\r\ + \n:if ( [/ip firewall address-list find where address=\$Buffer] = \"\") do\ + ={\r\ + \n \r\ + \n# Fetch DNS names for the entries\r\ + \n:local sitednsname [/ip dns cache get \$i name] ;\r\ + \n \r\ + \n# Print name in LOG window\r\ + \n:log info (\"added entry: \$sitednsname \$Buffer\");\r\ + \n \r\ + \n# Add IP addresses and there names to the address list\r\ + \n/ip firewall address-list add address=\$Buffer list=\$LISTNAME comment=\ + \$sitednsname;\r\ + \n}\r\ + \n}" +add comment="Add Hosts DNS names to NoWG addres list" \ + dont-require-permissions=no name=Add2vdsina owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_Script to add target web sites DNS IP addresses into address list\r\ + \n# Tested with Mikrotik 6.4x\r\ + \n# \r\ + \n# List name\r\ + \n:local LISTNAME \"NoWG\"\r\ + \n#\r\ + \n# Web site names which will be added in address list\r\ + \n:local TARGET1 \"comp-lenta.ru\"\r\ + \n:local TARGET2 \"ok.ru\"\r\ + \n:local TARGET3 \"vk.com\"\r\ + \n#:local TARGET4 \"smtp.mail.me.com\"\r\ + \n#:local TARGET4 \"windowsupdate.com\"\r\ + \n#:local TARGET5 \"ntservicepack.microsoft.com\"\r\ + \n#:local TARGET6 \"wustat.windows.com\"\r\ + \n#:local TARGET7 \"stats.microsoft.com\"\r\ + \n#:local TARGET8 \"mp.microsoft.com\"\r\ + \n#:local TARGET9 \"ws.microsoft.com\"\r\ + \n#:local TARGET10 \"sls.update.microsoft.com.akadns.net\"\r\ + \n#:local TARGET11 \"vortex.data.microsoft.com\"\r\ + \n#:local TARGET12 \"vortex-win.data.microsoft.com\"\r\ + \n#:local TARGET13 \"fe2.update.microsoft.com.akadns.net\"\r\ + \n#:local TARGET14 \"statsfe2.update.microsoft.com.akadns.net\"\r\ + \n \r\ + \n# 1st time runner, check if address list is not created previously and a\ + dd entries in it for 1st time usage\r\ + \n:if ( [/ip firewall address-list find where list=\$LISTNAME] = \"\") do=\ + {\r\ + \n:log warning \"No address list for \$TARGET1 found ! creating and adding\ + \_resolved entry for 1st time usage ... zaib\"\r\ + \n\r\ + \n:local FirstAddr [resolve \$TARGET1];\r\ + \n\r\ + \n/ip firewall address-list add address=\$FirstAddr list=\$LISTNAME commen\ + t=\$TARGET1;\r\ + \n\r\ + \n} else={\r\ + \n:log warning \"Previous List for \$LISTNAME found ! moving forward and c\ + hecking if DNS entries can be added in it ...\"\r\ + \n}\r\ + \n\r\ + \n# Check DNS entries and collect matching names\r\ + \n:foreach i in=[/ip dns cache find name~\"(\$TARGET1|\$TARGET2|\$TARGET3|\ + \$TARGET4)\" && \$type ~ \"^(A|CNAME)\\\$\" ] do={\r\ + \n\r\ + \n:log info (\"start entry: \$c \$sitednsname \$Buffer\");\r\ + \n\r\ + \n# Get IP Address from the names and hold it in temporary buffer\r\ + \n:local Buffer [/ip dns cache get \$i data];\r\ + \ndelay delay-time=10ms\r\ + \n:log info (\"1: \$Buffer\"); \r\ + \n\r\ + \n# Check if entry is already not exists, then OK, otherwise ignore duplic\ + ation\r\ + \n:if ( [/ip firewall address-list find where address=\$Buffer] = \"\") do\ + ={\r\ + \n\r\ + \n:log info (\"2: \$Buffer\"); \r\ + \n \r\ + \n# Fetch DNS names for the entries\r\ + \n:local sitednsname [/ip dns cache get \$i name] ;\r\ + \n \r\ + \n# Print name in LOG window\r\ + \n:log info (\"added entry: \$i \$sitednsname \$Buffer\");\r\ + \n \r\ + \n# Add IP addresses and there names to the address list\r\ + \n/ip firewall address-list add address=\$Buffer list=\$LISTNAME comment=\ + \$sitednsname;\r\ + \n}\r\ + \n}" +add comment="Flush DNS Cache" dont-require-permissions=no name=\ + DNS_Flush_Cache owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=\ + "/ip dns cache flush" +add comment="Certificates CloudFlare, Quad9 " dont-require-permissions=no \ + name=Update-Certificates owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_CloudFlare\r\ + \n#/tool/fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobalR\ + ootCA.crt.pem;\r\ + \n#/certificate/import file-name=DigiCertGlobalRootCA.crt.pem passphrase=\ + \"\";\r\ + \n#/tool/ fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobal\ + G2TLSRSASHA2562020CA1-1.crt.pem;\r\ + \n#/certificate/import file-name=DigiCertGlobalG2TLSRSASHA2562020CA1-1.crt\ + .pem passphrase=\"\";\r\ + \n# Quad9\r\ + \n#/tool/fetch mode=https url=\"https://cacerts.digicert.com/DigiCertGloba\ + lG3TLSECCSHA3842020CA1-1.crt.pem\"\r\ + \n#/certificate/import file-name=DigiCertGlobalG3TLSECCSHA3842020CA1-1.crt\ + .pem passphrase=\"\";\r\ + \n\r\ + \n:global GlobalScriptsUrl;\r\ + \n#google\r\ + \n:local CertName \"DigiCert-Global-Root-CA.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-CA\" [ find where common-na\ + me=\"DigiCert Global Root CA\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-CA.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-CA\" [ find where commo\ + n-name=\"DigiCert Assured ID Root CA\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-G2\" [ find where commo\ + n-name=\"DigiCert Assured ID Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-G3.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-G3\" [ find where commo\ + n-name=\"DigiCert Assured ID Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-G2-TLS-RSA-SHA256-2020-CA1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-G2-TLS-RSA-SHA256-2020-CA1\" [ f\ + ind where common-name=\"DigiCert Global G2 TLS RSA SHA256 2020 CA1\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-G3-TLS-ECC-SHA384-2020-CA1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-G3-TLS-ECC-SHA384-2020-CA1\" [ f\ + ind where common-name=\"DigiCert Global G3 TLS ECC SHA384 2020 CA1\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-Root-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-G2\" [ find where common-na\ + me=\"DigiCert Global Root G2\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-Root-G3.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-G3\" [ find where common-na\ + me=\"DigiCert Global Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-TLS-ECC-P384-Root-G5.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-TLS-ECC-P384-Root-G5\" [ find where com\ + mon-name=\"DigiCert TLS ECC P384 Root G5\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-TLS-RSA4096-Root-G5.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-TLS-RSA4096-Root-G5\" [ find where comm\ + on-name=\"DigiCert TLS RSA4096 Root G5\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Trusted-Root-G4.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Trusted-Root-G4\" [ find where common-n\ + ame=\"DigiCert Trusted Root G4\" ];\r\ + \n\r\ + \n:set CertName \"GTS-Root-R4.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"GTS-Root-R4\" [ find where common-name=\"GTS Roo\ + t R4\" ];\r\ + \n\r\ + \n:set CertName \"Go-Daddy-Root-Certificate-Authority-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Go-Daddy-Root-Certificate-Authority-G2\" [ find \ + where common-name=\"Go Daddy Root Certificate Authority - G2\" ];\r\ + \n\r\ + \n:set CertName \"ISRG-Root-X1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"ISRG-Root-X1\" [ find where common-name=\"ISRG R\ + oot X1\" ];\r\ + \n\r\ + \n:set CertName \"Root-YE.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Root-YE\" [ find where common-name=\"Root YE\" ]\ + ;\r\ + \n\r\ + \n:set CertName \"Starfield-Root-Certificate-Authority-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Starfield-Root-Certificate-Authority-G2\" [ find\ + \_where common-name=\"Starfield Root Certificate Authority - G2\" ];\r\ + \n\r\ + \n:set CertName \"USERTrust-RSA-Certification-Authority.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"USERTrust-RSA-Certification-Authority\" [ find w\ + here common-name=\"USERTrust RSA Certification Authority\" ];\r\ + \n\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"GTS-Root-RX.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#internet\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"ISRG-Root-X2.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n\r\ + \n\r\ + \n#/ip/dns/set allow-remote-requests=yes doh-max-concurrent-queries=100 do\ + h-max-server-connections=20 use-doh-server=https://security.cloudflare-dns\ + .com/dns-query verify-doh-cert=yes;\r\ + \n#/ip/dns/static remove [find where address=1.1.1.1];\r\ + \n#/ip/dns/static add address=1.1.1.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 1\";\r\ + \n#/ip/dns/ static remove [find where address=1.0.0.1];\r\ + \n#/ip/dns/static add address=1.0.0.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 2\"\r\ + \n#/ip dns static add address=2606:4700:4700::1111 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip dns static add address=2606:4700:4700::1001 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip/dns set servers=\"1.0.0.1, 8.8.4.4\";\r\ + \n#/ip/dns set servers=\"\";" +add dont-require-permissions=no name=script1 owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="/\ + tool/netwatch/add comment=\"doh-fallback, doh-url=https://security.cloudfl\ + are-dns.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=Clou\ + dFlare-doh IPv4 1\" host=1.1.1.1;\r\ + \n/tool/netwatch/add comment=\"doh, doh-url=https://security.cloudflare-dn\ + s.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=CloudFlare\ + -doh IPv4 2\" host=1.0.0.1;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.google/dns-query, doh-cert=DigiCert Global Root G2, notify, name=Goog\ + le-doh IPv4 1\" host=8.8.8.8;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.google/dns-query, doh-cert=DigiCert Global Root G2, notify, name=Goog\ + le-doh IPv4 2\" host=8.8.4.4;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.quad9.net/dns-query, doh-cert=DigiCert Global Root G3, notify, name=C\ + uad9-doh IPv4 1\" host=9.9.9.9;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.quad9.net/dns-query, doh-cert=DigiCert Global Root G3, notify, name=C\ + uad9-doh IPv4 2\" host=149.112.112.112;\r\ + \n\r\ + \n/tool/netwatch/add comment=\"dns, notify, name=ns1.unet.ws\" host=91.192\ + .189.2;" +add dont-require-permissions=no name=script2 owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \r\ + \n\r\ + \n:global InspectVar;\r\ + \n#:global RouterBoard;\r\ + \n#:do {:set RouterBoard [[ :parse \"/system/routerboard/get\" ]]} on-erro\ + r={}\r\ + \n#:global Resources;\r\ + \n#:do {:set Resources [[ :parse \"/system/resource/get\" ]]} on-error={}\ + \r\ + \n\r\ + \n#:global Updates;\r\ + \n#:do {:set Updates [[ :parse \"/system/package/update/get\" ]]} on-error\ + ={}\r\ + \n\r\ + \n#:global PkgUpdStatus \"undefined\";\r\ + \n#:local Update [/system/package/update/get];\r\ + \n#:retry command={:set PkgUpdStatus (\$Update->\"status\")} delay=200ms m\ + ax=5 on-error={};\r\ + \n\r\ + \n#:log warning [\$InspectVar \$RouterBoard];\r\ + \n#:put [\$InspectVar \$RouterBoard];\r\ + \n\r\ + \n#:retry command={/system/package/update check-for-updates without-paging\ + \_as-value} delay=300ms max=5 on-error={};\r\ + \n\r\ + \n#:global arrDeviceInfo ({});\r\ + \n#:local arrDeviceInfo ({\"section\":{\"key\":\"\"; \"value\":\"\";};});\ + \r\ + \n#:set (\$arrDeviceInfo->\"RouterBoard\") [[ :parse \"/system/routerboard\ + /get\" ]];\r\ + \n#:retry command={:set (\$arrDeviceInfo->\"Updates\") [[ :parse \"/system\ + /package/update/get\" ]]} delay=500ms max=5 on-error={:log error (\"Error\ + \")};\r\ + \n# [:toarray {\"section\"={\"key\"=\"\"; \"value\"=\"\";} }];\r\ + \n# [:toarray \"\"];\r\ + \n:local arrDeviceInfo ({});\r\ + \n\r\ + \n:set (\$arrDeviceInfo->\"devUpdates\") {\"channel\"; \"stable\";};\r\ + \n#:do {:set (arrDeviceInfo->\"Updates\") [[ :parse \"/system/package/upda\ + te/get\" ]]} on-error={:log error (\$error)}\r\ + \n\$InspectVar \$arrDeviceInfo;\r\ + \n" +add comment="Script for setup routeros script system" \ + dont-require-permissions=no name=AM-setup owner=AM-setup policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-setup\r\ + \n# Script comment: Script for setup routeros script system\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n# :local ScriptName [ :jobname ];\r\ + \n# Additional commands:\r\ + \n#\r\ + \n# For scripts:\r\ + \n#:global NewScript \"script_name\"; \r\ + \n#:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n#/system/script/add name=\$NewScript owner=\$NewScript source=([/tool/fe\ + tch check-certificate=yes-without-crl (\$GlobalScriptsUrl . \$ScriptAdd . \ + \".rsc\") output=user as-value ]->\"data\");\r\ + \n#:global NewScript (a);\r\ + \n#:global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n#\r\ + \n# For run from terminal:\r\ + \n#/system/script/add name=AM-setup owner=AM-Setup source=([/tool/fetch ch\ + eck-certificate=yes-without-crl \"https://ros.vados.ru/AM-setup.rsc\" outp\ + ut=user as-value ]->\"data\");\r\ + \n#\r\ + \n\r\ + \n:global ScriptUpdatesCRLF \"LF\";\r\ + \n#:if (\$ScriptUpdatesCRLF != false) do={\r\ + \n# :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vad\ + os\" ] do={\r\ + \n# if (\$ScriptUpdatesCRLF = true) do={\r\ + \n# /system/script/set source=[ :tocrlf [ get \$Script source ] ] \$S\ + cript;\r\ + \n# } else={\r\ + \n# /system/script/set source=[ :tolf [ get \$Script source ] ] \$Scr\ + ipt;\r\ + \n# }\r\ + \n# }\r\ + \n#}\r\ + \n\r\ + \n# /import verbose=no \$ScriptName\r\ + \n:global SetupScript [ :jobname ];\r\ + \n:global RemoveMe;\r\ + \n:global RunOnce;\r\ + \n:global InitSetup true;\r\ + \n:global tmpfs false;\r\ + \n\r\ + \n{\r\ + \n :local RmMe [:tobool \$1];\r\ + \n\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SetupScript;\r\ + \n :global RemoveMe;\r\ + \n :global InitSetup;\r\ + \n :global tmpfs;\r\ + \n \r\ + \n :local CertCommonName \"Root YE\";\r\ + \n :local CertFileName \"Root-YE.pem\";\r\ + \n :local CertFingerprint \"e14ffcad5b0025731006caa43a121a22d8e9700f4fb9c\ + f852f02a708aa5d5666\";\r\ + \n\r\ + \n :if (\$SetupScript = false) do={\r\ + \n :global SetupScript \"AM-setup\";\r\ + \n }\r\ + \n :if (\$RemoveMe != false) do={\r\ + \n :set RemoveMe true;\r\ + \n }\r\ + \n\r\ + \n :log warning (\"\\n\\\$GlobalScriptsUrl = \" . \$GlobalScriptsUrl);\r\ + \n \r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint ] \ + ] != 1) do={\r\ + \n :error \"Something is wrong with your certificates!\";\r\ + \n } else={\r\ + \n :if (!(((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" ||\ + \_\\\r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \"fetch\" || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\r\ + \n [ :len [ /certificate/builtin/find where common-name=\$CertComm\ + onName ] ] > 0)) do={\r\ + \n :put \"Importing certificate...\";\r\ + \n /tool/fetch (\$GlobalScriptsUrl . \"certs/ipall/\" . \$CertFileN\ + ame) dst-path=\$CertFileName as-value;\r\ + \n :delay 1s;\r\ + \n /certificate/import file-name=\$CertFileName passphrase=\"\";\r\ + \n :delay 1s;\r\ + \n };\r\ + \n };\r\ + \n\r\ + \n:local MkTmpfs do={\r\ + \n :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\r\ + \n :if ([ :len \$TmpFs ] = 1) do={\r\ + \n :if ([ /disk/get \$TmpFs disabled ] = true) do={\r\ + \n :log info (\"The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :log info (\"Try to removing directory 'tmpfs'.\");\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/remove tmpfs;\r\ + \n :return true;\r\ + \n } delay=100ms max=10;\r\ + \n } on-error={ }\r\ + \n# \$RmDir \"tmpfs\";\r\ + \n :onerror Err {\r\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource/g\ + et total-memory ] / 3);\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get tmpfs;\r\ + \n :return true;\r\ + \n } delay=222ms max=10;\r\ + \n } on-error={ }\r\ + \n } do={\r\ + \n :log warning (\"Creating disk of type tmpfs failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n# :return true;\r\ + \n}\r\ + \n:if (\$tmpfs = true) do={\r\ + \n :put \"Tmpfs variable is true. Checking for tmpfs/scripts directory...\ + \";\r\ + \n :if ([/file find name=\"tmpfs/scripts\"] != \"\") do={\r\ + \n :log info (\$0 . \"Directory tmpfs/scripts exsist.\");\r\ + \n :return \$true;\r\ + \n } else={\r\ + \n :log warning (\$0 . \"Directory tmpfs/scripts does't exsist.\");\r\ + \n :if ([ \$MkTmpfs ] = false) do={\r\ + \n :log error (\$0 . \"Directory tmpfs is not created!\");\r\ + \n :return false;\r\ + \n } else={\r\ + \n :onerror Err {\r\ + \n /file/add type=\"directory\" name=/tmpfs/scripts;\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get /tmpfs/scripts;\r\ + \n :return true;\r\ + \n } delay=100ms max=10;\r\ + \n } on-error={ }\r\ + \n } do={\r\ + \n :log warning (\$0 . \"Making directory 'scripts' failed: \" . \$\ + Err);\r\ + \n :return false;\r\ + \n }\r\ + \n# :return true;\r\ + \n# [ /file/get \$FileName ]\r\ + \n }\r\ + \n# :log error (\$0 . \"Directory tmpfs/scripts does not exsist. Remove\ + \_global variable tmpfs!\");\r\ + \n# :global tmpfs (a);\r\ + \n# return false;\r\ + \n }\r\ + \n}\r\ + \n :put \"Renaming AM-GlobalConfig, if exists...\";\r\ + \n :local ConfOldName (\"AM-GlobalConfig-\" . [ /system/clock/get date ] \ + . [ /system/clock/get time ] . \".rsc\");\r\ + \n /system/script/set name=\$ConfOldName [ find where name=\"AM-GlobalCon\ + fig\" ];\r\ + \n :foreach Script in={ \"AM-GlobalConfig\"; \"AM-GlobalFunc\" } do={\r\ + \n :put \"Installing \$Script...\";\r\ + \n /system/script/remove [ find where name=\$Script ];\r\ + \n /system/script/add name=\$Script owner=\$Script source=([ /tool/fetc\ + h check-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \ + \".rsc\") output=user as-value ]->\"data\");\r\ + \n \r\ + \n /system/script run \$Script;\r\ + \n :delay 2s;\r\ + \n };\r\ + \n\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint ] \ + ] > 0) do={\r\ + \n :put \"Renaming certificate by its common-name...\";\r\ + \n :global CertificateNameByCN;\r\ + \n \$CertificateNameByCN \$CertFingerprint;\r\ + \n };\r\ + \n\r\ + \n :if (\$RemoveMe = true) do={\r\ + \n :put \"Add Scheduler for remove this script...\";\r\ + \n :local OnEvent (\":delay 30s;\\n\" . \"/system/script/remove [ find \ + where name=\\\"\$SetupScript\\\" ];\\n\" . \\\r\ + \n \":delay 2s;\\n\" . \"/system/scheduler/remove [ find where name=\\\ + \"_RemoveSetup\\\" ];\\n\" . \\\r\ + \n \":delay 2s;\\n\" . \":global RemoveMe (a);\\n\");\r\ + \n :local Comment \"_RemoveSetup tmp scheduler for remove setup script.\ + \";\r\ + \n /system/scheduler/add name=\"_RemoveSetup\" comment=\$Comment start-\ + time=startup interval=30s on-event=\$OnEvent;\r\ + \n :log warning (\$0 . \"\\nI've done everything, and now I'm tired..\ + . I'm leaving.\\nThere will be an error below, this is normal.\");\r\ + \n }\r\ + \n :delay 1;\r\ + \n :put \"Loading configuration and functions...\";\r\ + \n :do { \r\ + \n :global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n :put \"Normal removing temporary global environment variables.\";\ + \r\ + \n :global SetupScript (a);\r\ + \n :global InitSetup (a);\r\ + \n :global RemoveMe (a);\r\ + \n } on-error={\r\ + \n :local ErrorMsg \"Loading configuration and functions error!\";\r\ + \n :log error (\$0 . \$ErrorMsg . :error);\r\ + \n :error \$ErrorMsg;\r\ + \n }\r\ + \n}\r\ + \n" +add comment="Global Config Script" dont-require-permissions=no name=\ + AM-GlobalConfig owner=AM-GlobalConfig policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GlobalConfig\r\ + \n# Script comment: Global Config Script\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# Warning: Dont touch this line!\r\ + \n:global Identity [ /system identity get name ];\r\ + \n:global GlobalConfReady false;\r\ + \n#\r\ + \n#\r\ + \n# Global Url For Amster scripts to fetch\r\ + \n# most be defined in AM-Init-Script or AM-setup scripts\r\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n:global ScriptsUrlSuffix \"\";\r\ + \n:global CheckSumsVerify true;\r\ + \n\r\ + \n:global ScriptUpdatesCRLF true;\r\ + \n:global CommentsInScripts true;\r\ + \n\r\ + \n# Debug output:\r\ + \n:global PrintDebug true; #false;\r\ + \n\r\ + \n# Debug output for specific script:\r\ + \n#:set (\$PrintDebugOverride->\"AM-GlobalFunc\") true;\r\ + \n\r\ + \n# Debug logs\r\ + \n# Other actions (disk, email, remote or support) can be used as well.\r\ + \n# I do not recommend using echo - use debug output instead (https://rsc.\ + eworm.de/main/DEBUG.html#debug-output).\r\ + \n#/system/logging/add topics=script,debug action=memory;\r\ + \n\r\ + \n:global MikrotikUpgradeUrl \"https://upgrade.mikrotik.com/routeros\";\r\ + \n:global Domain \"WORKGROUP\";\r\ + \n\r\ + \n:global EmailGeneralTo \"vados@vados.ru\";\r\ + \n#:global EmailGeneralCc \"\";\r\ + \n\r\ + \n# \$ScriptInstallUpdate mod/notification-telegram\r\ + \n:global TelegramTokenId \"8390868324:AAG3_d1hfVR2M6pGAgDK6ZvhOe4J97nyopw\ + \";\r\ + \n:global TelegramChatId \"-1003631309063\"; #\"454403445\";\r\ + \n# Use this to send notifications to a specific topic in group.\r\ + \n#:global TelegramThreadId \"30\";\r\ + \n# Using telegram-chat you have to define trusted chat ids (not group ids\ + !)\r\ + \n# or user names. Groups allow to chat with devices simultaneously.\r\ + \n:global TelegramChatIdsTrusted {\r\ + \n \"454403445\"\r\ + \n \"-1003631309063\"\r\ + \n \"-5124482807\"\r\ + \n \"1087968824\";\r\ + \n};\r\ + \n# \"-5294757340\";\r\ + \n\r\ + \n:global TelegramChatGroups \"(all)\";\r\ + \n#:global TelegramChatGroups \"(all|home|office)\";\r\ + \n\r\ + \n:global NotificationFunctions {\r\ + \n \"email\"\r\ + \n \"telegram\";\r\ + \n};\r\ + \n# Toggle this to disable symbols in notifications.\r\ + \n:global NotificationsWithSymbols true;\r\ + \n:global TerminalColorOutput true;\r\ + \n\r\ + \n:global DetectIpAddrDefault \"https://ipv4.mikrotik.ovh/\";\r\ + \n:global DetectIpAddrFallback \"https://api.ipify.org/\";\r\ + \n\r\ + \n## Update channel. Possible values: stable, long-term, testing, developm\ + ent\r\ + \n:global updateChannel \"stable\";\r\ + \n\r\ + \n:global CertRenewUrl (\$GlobalScriptsUrl . \"certs/\" . \$Identity . \"/\ + \");\r\ + \n:global CertRenewTime 2w;\r\ + \n:global CertRenewPass {\r\ + \n \"\";\r\ + \n# \"v3ry-s3cr3t\";\r\ + \n# \"4n0th3r-s3cr3t\";\r\ + \n};\r\ + \n:global CertWarnTime 1w;\r\ + \n:global CertIssuedExportPass {\r\ + \n \"\";\r\ + \n# \"cert1-cn\"=\"v3ry-s3cr3t\";\r\ + \n# \"cert2-cn\"=\"4n0th3r-s3cr3t\";\r\ + \n};\r\ + \n\r\ + \n# Script BackupAndUpdate mode, possible values: backup,\r\ + \n# updateOnce - Update once as \"osnotify\" and back \"osnotify\" mode (i\ + n terminal run :set OSUpdateMode updateOnce; \$OSUpdateMode;). \r\ + \n# osupdate - Update if available and creates backups before/after update\ + \_(ignores `forceBackup`)\r\ + \n# Set `forceBackup` to true to always create backups, even\ + \_without updates\r\ + \n# osnotify - Set `forceBackup` to always create backups on every run\r\ + \n:global DevInfoIncludeIP true;\r\ + \n:global BackupAndUpdateMode \"osnotify\"\r\ + \n\r\ + \n:global forceBackup true;\r\ + \n:global BackupPassword \"Peskar55\";\r\ + \n\r\ + \n# SFTP Backup Variables\r\ + \n:global BackupRandomDelay 0;\r\ + \n:global BackupUploadUrl \"sftp://amster.vados.ru/upload/\";\r\ + \n:global BackupUploadUser \$Identity;\r\ + \n:global BackupUploadPass \"root.mnuc.backuper\";\r\ + \n\r\ + \n:global BackupSendBinary true;\r\ + \n:global BackupSendExport true;\r\ + \n:global BackupSendGlobalConfig true;\r\ + \n:global BackupSendScripts true;\r\ + \n\r\ + \n# Remove local file after uploading if no errors\r\ + \n:global BackupRmLocal true;\r\ + \n\r\ + \n# Local Backups Root Directory \r\ + \n:global BackupLocalRoot \"tmpfs\";\r\ + \n\r\ + \n# Encrypt Backup\r\ + \n:global BackupEncrypt true;\r\ + \n\r\ + \n# Sensitive information in Backups\r\ + \n:global BackupSens true;\r\ + \n\r\ + \n# User Export\r\ + \n:global BackupUser true;\r\ + \n\r\ + \n# License Export (not for CHR, will silently skip)\r\ + \n:global BackupLicense false;\r\ + \n\r\ + \n# SSH Keys\r\ + \n:global BackupSshKeys true;\r\ + \n\r\ + \n# Certificate Export\r\ + \n:global BackupCerts true;\r\ + \n\r\ + \n# Certificate Password\r\ + \n:global BackupCertsPasswd \"\";\r\ + \n\r\ + \n# User-Manager Export\r\ + \n:global BackupUserMan false;\r\ + \n\r\ + \n# The Dude Export\r\ + \n:global BackupDude false;\r\ + \n\r\ + \n# User Files to export, comma-separated string or array of strings\r\ + \n# User Files are not removed on backup\r\ + \n# Any directory paths will be removed (/ -> _) on remote file\r\ + \n# Nonpresent files are silently skipped\r\ + \n:global BackupUserList \"autosupout.rif,autosupout.old.rif\";\r\ + \n\r\ + \n# load functions and any custom scripts\r\ + \n# [ /system/script/find where name=\"global-config-ov\ + erlay\" ], \\\r\ + \n# [ /system/script/find where name~\"^global-config-o\ + verlay\\\\.d/.\" ]\r\ + \n#\r\ + \n#:foreach Script in=([ /system/script/find where name=\"Amster-TGglobalV\ + ars\" ], [ /system/script/find where name=\"Amster-TGglobalFunc\" ]) do={\ + \r\ + \n# :onerror Err {\r\ + \n# /system/script/run \$Script;\r\ + \n# } do={\r\ + \n# :log error (\"Loading configuration from configs and functions\"\ + \_. [ /system/script/get \$Script name ] . \" failed: \" . \$Err);\r\ + \n# }\r\ + \n#}\r\ + \n#:log info \"\\ndevMode = \$devMode\";\r\ + \n#:log info \"\\ndevRunning = \$devRunning\";\r\ + \n:foreach Script in=[ /system/script/find where source~\"^#!rsc by Vados \ + GlobalRUN\\r\?\\n\" ] do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n :log error (\"Run script \" . [ /system/script/get \$Script name \ + ] . \" width marker \\\" GlobalRUN\\\" failed: \" . \$Err);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# signal we are ready\r\ + \n:set GlobalConfReady true;\r\ + \n:while (\$GlobalConfReady != true) do={:delay 500ms};\r\ + \n" +add comment="Global functions" dont-require-permissions=no name=AM-GlobalFunc \ + owner=AM-GlobalFunc policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GglobalFunc\r\ + \n# Script comment: Global functions\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch, scheduler\r\ + \n:local ExitOK false;\r\ + \n:local ScriptName [ :jobname ];\r\ + \n#:global checkRunJob \$SriptName;\r\ + \n#:global fixCRLF;\r\ + \n#:if (\$fixCRLF != false) do={\r\ + \n#:foreach fixScript in=([ /system/script/find where name~\"*\" ]) do={/s\ + ystem/script/set source=[ :tocrlf [ get \$fixScript source ] ] \$fixScript\ + }\r\ + \n#:if (\$fixCRLF != \"LF\") do={ /system/script/set source=[ :tocrlf [ g\ + et \$fixScript source ] ] \$fixScript};};\r\ + \n#}\r\ + \n:global GlobalFuncReady false;\r\ + \n\r\ + \n# Git commit id & info, expected configuration version\r\ + \n:global CommitId \"main/614/a7992fc8\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 01:00:03 05.05.2026.\";\r\ + \n\r\ + \n# The variables are received right here.\r\ + \n:global GlobalConfVersion 140;\r\ + \n\r\ + \n:global SumsDirAndFileName \"tmp/checksums.json\";\r\ + \n\r\ + \n:global Identity [/system/identity/get name];\r\ + \n:global IdentityShort [:pick \$Identity 0 18];\r\ + \n\r\ + \n:global devBoardName [/system/resource/get board-name];\r\ + \n:global devMode [/system/device-mode/get mode];\r\ + \n:global devCurArch [/system/resource/get architecture-name];\r\ + \n:global devCurVersion [/system/resource/get version];\r\ + \n\r\ + \n# Variables defined in AM-GlobalConfig.rsc\r\ + \n:global TerminalColorOutput;\r\ + \n:global CommentsInScripts;\r\ + \n:global DetectIpAddrDefault;\r\ + \n:global DetectIpAddrFallback;\r\ + \n:global updateChannel;\r\ + \n:global Domain;\r\ + \n:global EmailGeneralTo;\r\ + \n:global BackupAndUpdateMode;\r\ + \n\r\ + \n# Single functions, without nested functions.\r\ + \n:global MiniDateTimeStamp;\r\ + \n:global MicroDateTimeStamp;\r\ + \n\r\ + \n# Include globals \$PrintDebug and \$PrintDebugOverride\r\ + \n:global LogPrint;\r\ + \n\r\ + \n# DeviceInfo and Updates\r\ + \n:global IsCheckUpdates;\r\ + \n:global WaitCheckUpdates;\r\ + \n:global GetPubIp;\r\ + \n\r\ + \n:global GetArrDeviceInfo;\r\ + \n:global WaitArrDeviceInfo;\r\ + \n\r\ + \n:global devModel;\r\ + \n:global devRunningMode;\r\ + \n\r\ + \n:global devRbRevision;\r\ + \n:global devRbSerialNumber;\r\ + \n:global devRbVerAvail;\r\ + \n\r\ + \n:global runningChannelVersion;\r\ + \n:global runningChannel;\r\ + \n:global runningVersion;\r\ + \n\r\ + \n:global devBuildTime;\r\ + \n:global ROsVerAvail;\r\ + \n:global PkgUpdStatus;\r\ + \n:global currentUpdateChannel;\r\ + \n\r\ + \n:global ScriptInstallUpdate;\r\ + \n\r\ + \n:global DeviceInfo;\r\ + \n\r\ + \n:global OldMode;\r\ + \n\r\ + \n:global ParseKeyValueStore;\r\ + \n:global RandomDelay;\r\ + \n:global GetRandomNumber;\r\ + \n:global EscapeForRegEx;\r\ + \n:global CharacterMultiply;\r\ + \n:global CharacterReplace;\r\ + \n:global CleanFilePath;\r\ + \n:global CleanName;\r\ + \n\r\ + \n:global CommitBrief;\r\ + \n\r\ + \n:global EitherOr;\r\ + \n:global FormatLine;\r\ + \n:global GetRandom20CharAlNum;\r\ + \n:global GetRandom20CharHex;\r\ + \n:global GetRandomNumber;\r\ + \n:global Grep;\r\ + \n:global IfThenElse;\r\ + \n:global MAX;\r\ + \n:global MIN;\r\ + \n:global HumanReadableNum;\r\ + \n\r\ + \n:global IsFullyConnected;\r\ + \n:global IsDNSResolving;\r\ + \n:global IsTimeSync;\r\ + \n:global IsTimeSyncCached;\r\ + \n:global IsTimeSyncResetNtp;\r\ + \n\r\ + \n:global WaitDNSResolving;\r\ + \n:global WaitFullyConnected;\r\ + \n:global WaitTimeSync;\r\ + \n:global MkDir;\r\ + \n:global RmDir;\r\ + \n:global RmFile;\r\ + \n:global FileGet;\r\ + \n:global Unix2Dos;\r\ + \n:global UrlEncode;\r\ + \n:global WaitForFile;\r\ + \n:global ScriptLock;\r\ + \n:global SendTelegram;\r\ + \n:global NotificationFunctions;\r\ + \n:global SendNotification;\r\ + \n:global SendNotification2;\r\ + \n:global SymbolForNotification;\r\ + \n:global SymbolByUnicodeName;\r\ + \n:global ValidateSyntax;\r\ + \n:global CheckSumsVerify;\r\ + \n:global GlobalConfChanges;\r\ + \n:global GlobalConfMigration;\r\ + \n:global VersionToNum;\r\ + \n:global RequiredRouterOS;\r\ + \n:global ExitError;\r\ + \n:global ExitOnError;\r\ + \n\r\ + \n:global FetchHugeFiles;\r\ + \n:global FetchUserAgentStr;\r\ + \n:global FileExists;\r\ + \n:global CertificateAvailable;\r\ + \n:global CertificateDownload;\r\ + \n:global CertificateNameByCN;\r\ + \n:global CharacterMultiply;\r\ + \n\r\ + \n:global InspectVar;\r\ + \n:global InspectVarRet;\r\ + \n:global ParseCustom;\r\ + \n\r\ + \n:set IsCheckUpdates do={\r\ + \n :local isInfo [:tobool \$1];\r\ + \n :global updateChannel;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n :log info (\$0 . \" \\\$isInfo = \" . \$isInfo); \r\ + \n :local CurrentChannel [ /system/package/update/get channel ];\r\ + \n :if ([ :len \$updateChannel ] > 0 && \$CurrentChannel != \$updateChann\ + el) do={\r\ + \n :retry command={/system/package/update set channel=\$updateChannel} \ + \_delay=300ms max=5 on-error={};\r\ + \n :log info (\$0 . \" Set updates channel to: \$updateChannel\");\r\ + \n }\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local Channel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set currentUpdateChannel \$Channel;\r\ + \n :log info (\$0 . \" Update Channel: \" . \$Channel . \".\");\r\ + \n :local StatusPkg \"undefined\";\r\ + \n :log info (\$0 . \" Checking for updates...\");\r\ + \n :retry command={:set \$StatusPkg ([/system/package/update/check-for-up\ + dates without-paging as-value]->\"status\")} \\\r\ + \n delay=300ms max=5 on-error={};\r\ + \n :log info (\$0 . \" \\\$StatusPkg = \" . \$StatusPkg);\r\ + \n :if (\$StatusPkg = \"New version is available\") do={ :set PkgUpdStatu\ + s true; } else={ :set PkgUpdStatus false; }\r\ + \n :set ROsVerAvail [ :tostr [ /system/package/update/get latest-version \ + ] ];\r\ + \n :log info (\$0 . \" \\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if (\$isInfo != false || \$PkgUpdStatus = true) do={\r\ + \n :log info (\$0 . \" \\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :retry command={:set (\$arrDeviceInfo->\"devUpdates\") [ /system/pac\ + kage/update/get ]} delay=500ms max=5 on-error={:log error (\"Error\")};\r\ + \n :return true;\r\ + \n } else={\r\ + \n :return \$PkgUpdStatus;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set WaitCheckUpdates do={\r\ + \n :global IsCheckUpdates;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n :local Status \"\";\r\ + \n :local Update;\r\ + \n :local WaitCount 0;\r\ + \n :if ([ \$IsCheckUpdates true ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n :while ((\$Status = \"\" || \$Status = \"finding out latest version...\ + \") && \$WaitCount < 60) do={\r\ + \n :delay 1s;\r\ + \n :set WaitCount (\$WaitCount + 1);\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n }\r\ + \n :set Update [ /system/package/update/get ];\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n :if ((\$Update->\"status\") = \"New version is available\") do={\r\ + \n :set PkgUpdStatus true;\r\ + \n } else={\r\ + \n :set PkgUpdStatus false;\r\ + \n }\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :set (\$arrDeviceInfo->\"devUpdates\") \$Update;\r\ + \n :if (\$Status = \"\" || \$Status = \"finding out latest version...\") \ + do={\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set WaitArrDeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :while ([ \$GetArrDeviceInfo ] = false) do={\r\ + \n :delay 1s;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set GetArrDeviceInfo do={\r\ + \n :global LogPrint;\r\ + \n :global arrDeviceInfo;\r\ + \n :global devBoardName;\r\ + \n :global devModel;\r\ + \n :global devRunning;\r\ + \n :global devCurArch;\r\ + \n :global devRbRevision;\r\ + \n :global devRbSerialNumber;\r\ + \n :global devBuildTime;\r\ + \n :global runningChannelVersion;\r\ + \n :global runningChannel;\r\ + \n :global runningVersion;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n\r\ + \n :local DeviceInfo;\r\ + \n :local Resource [/system/resource/get];\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local VersionString [ :tostr (\$Resource->\"version\") ];\r\ + \n :local ChannelStart [ :find \$VersionString \" (\" ];\r\ + \n :local RouterBoard;\r\ + \n :local IsRouterBoard false;\r\ + \n :local RunningMode \"\";\r\ + \n\r\ + \n :set devCurArch [ :tostr (\$Resource->\"architecture-name\") ];\r\ + \n :set devBuildTime [ :tostr (\$Resource->\"build-time\") ];\r\ + \n :set runningChannelVersion \$VersionString;\r\ + \n :set runningVersion \$VersionString;\r\ + \n :set runningChannel \"\";\r\ + \n\r\ + \n :if ([ :typeof \$ChannelStart ] = \"num\" && \$ChannelStart >= 0) do=\ + {\r\ + \n :set runningVersion [ :pick \$VersionString 0 \$ChannelStart ];\r\ + \n :local ChannelRest [ :pick \$VersionString (\$ChannelStart + 2) [ :\ + len \$VersionString ] ];\r\ + \n :local ChannelEnd [ :find \$ChannelRest \")\" ];\r\ + \n :if ([ :typeof \$ChannelEnd ] = \"num\" && \$ChannelEnd >= 0) do={\ + \r\ + \n :set runningChannel [ :pick \$ChannelRest 0 \$ChannelEnd ];\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([:pick \$devBoardName 0 3] != \"CHR\" or [:pick \$devBoardName 0\ + \_3] != \"x86\") do={\r\ + \n :do {\r\ + \n :set RouterBoard [[ :parse \"/system/routerboard/get\" ]];\r\ + \n# :set RouterBoard [ /system/routerboard/get ];\r\ + \n :if ((\$RouterBoard->\"routerboard\") = true) do={\r\ + \n :set IsRouterBoard true;\r\ + \n }\r\ + \n } on-error={}\r\ + \n }\r\ + \n\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get mode ];\r\ + \n } on-error={\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get running ];\r\ + \n } on-error={\r\ + \n :set RunningMode \"\";\r\ + \n }\r\ + \n }\r\ + \n :set devRunning \$RunningMode;\r\ + \n\r\ + \n :if (\$IsRouterBoard = true) do={\r\ + \n :set devModel [ :tostr (\$RouterBoard->\"model\") ];\r\ + \n :set devRbRevision [ :tostr (\$RouterBoard->\"revision\") ];\r\ + \n :set devRbSerialNumber [ :tostr (\$RouterBoard->\"serial-number\") \ + ];\r\ + \n } else={\r\ + \n :set devModel \$devBoardName;\r\ + \n :set devRbRevision \"\";\r\ + \n :set devRbSerialNumber \"\";\r\ + \n }\r\ + \n\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n\r\ + \n :set (\$DeviceInfo->\"board-name\") \$devBoardName;\r\ + \n :set (\$DeviceInfo->\"architecture-name\") \$devCurArch;\r\ + \n :set (\$DeviceInfo->\"model\") \$devModel;\r\ + \n :set (\$DeviceInfo->\"revision\") \$devRbRevision;\r\ + \n :set (\$DeviceInfo->\"serial-number\") \$devRbSerialNumber;\r\ + \n :set (\$DeviceInfo->\"running-mode\") \$devRunning;\r\ + \n :set (\$DeviceInfo->\"build-time\") \$devBuildTime;\r\ + \n :set (\$DeviceInfo->\"running-channel-version\") \$runningChannelVers\ + ion;\r\ + \n :set (\$DeviceInfo->\"running-version\") \$runningVersion;\r\ + \n :set (\$DeviceInfo->\"running-channel\") \$runningChannel;\r\ + \n :set (\$DeviceInfo->\"routerboard\") \$IsRouterBoard;\r\ + \n :set (\$DeviceInfo->\"current-firmware\") [ :tostr (\$RouterBoard->\"\ + current-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"upgrade-firmware\") [ :tostr (\$RouterBoard->\"\ + upgrade-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"package-channel\") \$currentUpdateChannel;\r\ + \n :set (\$DeviceInfo->\"installed-version\") [ :tostr (\$Update->\"inst\ + alled-version\") ];\r\ + \n :set (\$DeviceInfo->\"latest-version\") \$ROsVerAvail;\r\ + \n :set (\$DeviceInfo->\"update-status\") [ :tostr (\$Update->\"status\"\ + ) ];\r\ + \n\r\ + \n :set arrDeviceInfo \$DeviceInfo;\r\ + \n :return \$DeviceInfo;\r\ + \n}\r\ + \n\r\ + \n:set DeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global IfThenElse;\r\ + \n :global FormatLine;\r\ + \n :global CommitBrief;\r\ + \n\r\ + \n :local License [/system/license/get];\r\ + \n :local Snmp [ /snmp/get ];\r\ + \n :local Info [ \$GetArrDeviceInfo ];\r\ + \n\r\ + \n :if ([ :typeof \$Info ] != \"array\") do={\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :return ( \\\r\ + \n [ \$FormatLine \"Hostname\" \$Identity ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"location\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Location\" (\$Snmp->\"location\") ] . \"\\n\") ]\ + \_. \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"contact\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Contact\" (\$Snmp->\"contact\") ] . \"\\n\") ] .\ + \_\\\r\ + \n \"Hardware:\\n\" . \\\r\ + \n [ \$FormatLine \" Board\" (\$Info->\"board-name\") ] . \"\\n\" . \ + \\\r\ + \n [ \$FormatLine \" Arch\" (\$Info->\"architecture-name\") ] . \"\\\ + n\" . \\\r\ + \n [ \$FormatLine \" Model\" (\$Info->\"model\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"revision\") ] > 0) \\\r\ + \n (\" \" . (\$Info->\"revision\")) ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"serial-number\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Serial\" (\$Info->\"serial-number\") ] . \"\ + \\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"nlevel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"nlevel\ + \")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS:\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"level\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"level\ + \")) ] . \"\\n\") ] . \\\r\ + \n [ \$FormatLine \" Channel\" (\$Info->\"package-channel\") ] . \"\ + \\n\" . \\\r\ + \n [ \$FormatLine \" Installed\" (\$Info->\"installed-version\") ] .\ + \_\"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"running-channel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Running\" ((\$Info->\"running-version\") . \ + \" (\" . (\$Info->\"running-channel\") . \")\") ] . \"\\n\") \\\r\ + \n ([ \$FormatLine \" Running\" (\$Info->\"running-version\") ] . \ + \"\\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"latest-version\") ] > 0 && \\\r\ + \n (\$Info->\"installed-version\") != (\$Info->\"latest-version\"))\ + \_\\\r\ + \n ([ \$FormatLine \" Available\" (\$Info->\"latest-version\") ] .\ + \_\"\\n\") ] . \\\r\ + \n [ \$IfThenElse ((\$Info->\"routerboard\") = true && \\\r\ + \n (\$Info->\"current-firmware\") != (\$Info->\"upgrade-firmware\")\ + ) \\\r\ + \n ([ \$FormatLine \" Firmware\" ((\$Info->\"current-firmware\") .\ + \_\" -> \" . (\$Info->\"upgrade-firmware\")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS-Scripts:\\n\" . \\\r\ + \n [ \$FormatLine \" Commit\" [ \$CommitBrief ] ] . \"\\n\" . \\\r\ + \n [ \$FormatLine \" Version\" \$GlobalConfVersion ]);\r\ + \n}\r\ + \n\r\ + \n:if ([ :typeof \$NotificationFunctions ] != \"array\") do={:set Notifica\ + tionFunctions ({})}\r\ + \n\r\ + \n:set GetRandom20CharAlNum do={\r\ + \n :global EitherOr;\r\ + \n :return [ :rndstr length=[ \$EitherOr [ :tonum \$1 ] 20 ] from=\"ABCDE\ + FGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\" ];\r\ + \n}\r\ + \n\r\ + \n:set GetRandom20CharHex do={:global EitherOr; :return [ :rndstr length=[\ + \_\$EitherOr [ :tonum \$1 ] 20 ] from=\"0123456789abcdef\" ]; }\r\ + \n:set GetRandomNumber do={:global EitherOr; :return [ :rndnum from=0 to=[\ + \_\$EitherOr [ :tonum \$1 ] 4294967295 ] ]; }\r\ + \n\r\ + \n:global checkRunJob;\r\ + \n:set checkRunJob do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLock; \r\ + \n :if ([ \$ScriptLock \$Script ] = false) do={:return false}\r\ + \n :foreach Job in=[ /system/script/job/find where script=\$Script ] do={\ + :set Job [ /system/script/job/get \$Job ];\r\ + \n :while ([ :typeof (\$Job->\"parent\") ] = \"id\") do={:set Job [ /sy\ + stem/script/job/get [ find where .id=(\$Job->\"parent\") ] ]}\r\ + \n :if ((\$Job->\"type\") = \"login\") do={:return true};}; :return fa\ + lse; \r\ + \n}\r\ + \n\r\ + \n:set InspectVar do={\r\ + \n :global InspectVarRet;\r\ + \n :put [ :tocrlf [ \$InspectVarRet \$1 ] ];\r\ + \n}\r\ + \n\r\ + \n:set CommitBrief do={\r\ + \n :global CommitId;\r\ + \n :global CommitInfo;\r\ + \n :if (\$CommitId = \"unknown\") do={\r\ + \n :return \"unknown\";\r\ + \n }\r\ + \n :return (\$CommitInfo . \"/\" . [ :pick \$CommitId 0 8 ]);\r\ + \n}\r\ + \n\r\ + \n:set InspectVarRet do={\r\ + \n :local Input \$1;\r\ + \n :local Level (0 + [ :tonum \$2 ]);\r\ + \n :global CharacterReplace;\r\ + \n :global IfThenElse;\r\ + \n :global InspectVarRet;\r\ + \n :local IndentReturn do={\r\ + \n :local Prefix [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Level [ :tonum \$3 ];\r\ + \n :global CharacterMultiply;\r\ + \n :return ([ \$CharacterMultiply \" \" (\$Level * 2) ] . \"-\" . \$Pre\ + fix . \"-> \" . \$Value);\r\ + \n }\r\ + \n :local TypeOf [ :typeof \$Input ];\r\ + \n :local Len [ :len \$Input ];\r\ + \n :local Return [ \$IndentReturn \"type\" \$TypeOf \$Level ];\r\ + \n :if (\$TypeOf = \"array\") do={\r\ + \n :foreach Key,Value in=\$Input do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"key\" \$Key (\$Level + 1) ] . \"\\n\" . \\\r\ + \n [ \$InspectVarRet \$Value (\$Level + 2) ]);\r\ + \n }\r\ + \n } else={\r\ + \n :if (\$TypeOf = \"str\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"len\" \$Len \$Level ]);\r\ + \n :if ([ :typeof [ :find \$Input (\"\\r\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\r\") \"\" ];\r\ + \n }\r\ + \n :if ([ :typeof [ :find \$Input (\"\\n\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\n\") \" \" ];\r\ + \n }\r\ + \n }\r\ + \n :if (\$TypeOf != \"nothing\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"value\" [ \$IfThenElse ([ :len \$Input ] > 80)\ + \_\\\r\ + \n ([ :pick \$Input 0 77 ] . \"...\") \$Input ] \$Level ]);\r\ + \n }\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set GetPubIp do={\r\ + \n :global DetectIpAddrDefault;\r\ + \n :global DetectIpAddrFallback;\r\ + \n\r\ + \n :local PubIpAddr false;\r\ + \n :local Url \$DetectIpAddrDefault;\r\ + \n :local JobName [ :jobname ];\r\ + \n\r\ + \n :do {\r\ + \n :log debug (\$0 . \" Trying to detect public IP using default serv\ + ice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=50ms max=5 on-error={:log error (\$JobName . \" Failed to \ + detect public IP using default service: \" . \$Url . \".\")}\r\ + \n } on-error={\r\ + \n :log error (\$0 . \" Failed to detect public IP using default serv\ + ice: \" . \$Url . \".\");\r\ + \n :set Url \$DetectIpAddrFallBack;\r\ + \n :log debug (\$0 . \" Trying to detect public IP using fallback ser\ + vice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=200ms max=5 on-error={:log error (\$JobName . \" Failed to\ + \_detect public IP using fallback service: \" . \$Url . \".\")}\r\ + \n };\r\ + \n :local IpLen ([ :len \$PubIpAddr ] -1);\r\ + \n :if (\$PubIpAddr = false) do={:set PubIpAddr \"not-detected\"} else=\ + {:set PubIpAddr [:pick \$PubIpAddr 0 \$IpLen]}\r\ + \n :return \$PubIpAddr;\r\ + \n}\r\ + \n\r\ + \n:set FormatLine do={\r\ + \n :local Key [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Indent [ :tonum \$3 ];\r\ + \n :local Spaces;\r\ + \n :local Return \"\";\r\ + \n :global CharacterMultiply;\r\ + \n :global EitherOr;\r\ + \n :set Indent [ \$EitherOr \$Indent 16 ];\r\ + \n :local Spaces [ \$CharacterMultiply \" \" \$Indent ];\r\ + \n :if ([ :len \$Key ] > 0) do={ :set Return (\$Key . \":\")}\r\ + \n :if ([ :len \$Key ] > (\$Indent - 2)) do={:set Return (\$Return . \"\\\ + n\" . [ :pick \$Spaces 0 \$Indent ] . \$Value);\r\ + \n } else={:set Return (\$Return . [ :pick \$Spaces 0 (\$Indent - [ :len \ + \$Return ]) ] . \$Value)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ParseCustom do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Start [:find [ \$Str ] [:tostr \$2]];\r\ + \n :local End [ :tostr \$3 ];\r\ + \n :local Num [ :tonum \$4 ];\r\ + \n :local Return;\r\ + \n :if ([:len \$Num] = 0) do={:set Num \"0\"}\r\ + \n :local rest [:pick \$Str (\$Start+\$Num) [:len \$Str]]; \r\ + \n :if ([:len \$End ] = 0) do={:set Return [:pick \$Str \$Num \$Start]} e\ + lse={\r\ + \n :set End [:find \$rest \$End];\r\ + \n :set Return [:pick \$rest 0 \$End];\r\ + \n }\r\ + \n:return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set LogPrint do={\r\ + \n :local Severity [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Message [ :tostr \$3 ];\r\ + \n :global PrintDebug;\r\ + \n :global PrintDebugOverride;\r\ + \n :global EitherOr;\r\ + \n :local Debug [ \$EitherOr (\$PrintDebugOverride->\$Name) \$PrintDebug \ + ];\r\ + \n :local PrintSeverity do={\r\ + \n :global TerminalColorOutput;\r\ + \n :if (\$TerminalColorOutput != true) do={:return \$1}\r\ + \n :local Color { debug=96; info=97; warning=93; error=91 };\r\ + \n :return (\"\\1B[\" . \$Color->\$1 . \"m\" . \$1 . \"\\1B[0m\");\r\ + \n}\r\ + \n :local Log ([ \$EitherOr \$Name \"\" ] . \": \" . \$Message);\ + \r\ + \n :if (\$Severity ~ (\"^(custom|debug|error|info)\\\$\")) do={\r\ + \n :if (\$Severity = \"debug\") do={:log debug \$Log}\r\ + \n :if (\$Severity = \"error\") do={:log error \$Log}\r\ + \n :if (\$Severity = \"info\" ) do={:log info \$Log}\r\ + \n } else={:log warning \$Log; :set Severity \"warning\"}\r\ + \n :if (\$Severity != \"debug\" || \$Debug = true) do={:put ([ \$PrintSev\ + erity \$Severity ] . \": \" . \$Message)}\r\ + \n}\r\ + \n\r\ + \n:set CertificateAvailable do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :local UseFor [ :tostr \$2 ];\r\ + \n\r\ + \n :global CertificateDownload;\r\ + \n :global ParseKeyValueStore;\r\ + \n\r\ + \n :if ([ :len \$UseFor ] = 0) do={\r\ + \n :log warning (\$0 . \"The intended use is undefined!\");\r\ + \n :set UseFor \"undefined\";\r\ + \n }\r\ + \n :if ([ /system/resource/get free-hdd-space ] < 8388608 && \\\r\ + \n [ /certificate/settings/get crl-download ] = true && \\\r\ + \n [ /certificate/settings/get crl-store ] = \"system\") do={\r\ + \n :log warning (\$0 . \"This system has low free flash space but \" . \ + \\\r\ + \n \"is configured to download certificate CRLs to system!\");\r\ + \n }\r\ + \n :if ([ :len \$CommonName ] = 0) do={\r\ + \n :log warning (\$0 . \"No CommonName given!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if (((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" || \\\ + \r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \$UseFor || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\r\ + \n [ :len [ /certificate/builtin/find where common-name=\$CommonName\ + \_] ] > 0) do={\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n :log info (\$0 . \"Certificate with CommonName '\" . \$CommonName . \ + \"' not available.\");\r\ + \n :if ([ \$CertificateDownload \$CommonName ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] > 1\ + ) do={\r\ + \n :log info (\$0 . \"There are \" . \$CertCount . \" Certificates with\ + \_CommonName '\" . \$CommonName . \"'. Should be ok.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :local CertVal [ /certificate/get [ find where common-name=\$CommonNam\ + e ] ];\r\ + \n :while ((\$CertVal->\"akid\") != \"\" && (\$CertVal->\"akid\") != (\$C\ + ertVal->\"skid\")) do={\r\ + \n :if ([ :len [ /certificate/find where skid=(\$CertVal->\"akid\") ] ]\ + \_= 0) do={\r\ + \n :local IssuerCN ([ \$ParseKeyValueStore (\$CertVal->\"issuer\") ]-\ + >\"CN\");\r\ + \n :log info (\$0 . \"Certificate chain for '\" . \$CommonName . \"' \ + is incomplete, missing '\" . \$IssuerCN . \"'.\");\r\ + \n :if ([ \$CertificateDownload \$IssuerCN ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :set CertVal [ /certificate/get [ find where skid=(\$CertVal->\"akid\ + \") ] ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateDownload do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :global ScriptUpdatesBaseUrl;\r\ + \n :global ScriptUpdatesUrlSuffix;\r\ + \n :global CertificateNameByCN;\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :log info (\$0 . \"Downloading and importing certificate with \" . \\\ + \r\ + \n \"CommonName '\" . \$CommonName . \"'.\");\r\ + \n :local FileName ([ \$CleanName \$CommonName ] . \".pem\");\r\ + \n :do {\r\ + \n /tool/fetch check-certificate=yes-without-crl mode=https http-header\ + -field=({ [ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n (\$ScriptUpdatesBaseUrl . \"certs/\" . \$FileName . \$ScriptUpdate\ + sUrlSuffix) \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n } on-error={\r\ + \n :log warning (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \\\r\ + \n \"' from repository! Trying fallback to mkcert.org...\");\r\ + \n :do {\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if ([ :len [ /certificate/find where common-name=\"ISRG Root X1\"\ + \_] ] = 0 && \\\r\ + \n !(((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" \ + || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \"fetch\" || \ + \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\ + \r\ + \n [ :len [ /certificate/builtin/find where common-name=\"ISRG\ + \_Root X1\" ] ] > 0)) do={\r\ + \n :log error (\$0 . \" Required certificate is not available.\");\ + \r\ + \n :return false;\r\ + \n }\r\ + \n /tool/fetch check-certificate=yes-without-crl mode=https http-head\ + er-field=({ [ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n url=\"https://mkcert.org/generate/\" http-data=[ :serialize to=jso\ + n ({ \$CommonName }) ] \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n :if ([ /file/get \$FileName size ] = 0) do={\r\ + \n \$RmFile \$FileName;\r\ + \n :error false;\r\ + \n }\r\ + \n } on-error={\r\ + \n :log error (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \"'!\");\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n /certificate/import file-name=\$FileName passphrase=\"\" as-value;\r\ + \n :delay 1s;\r\ + \n \$RmFile \$FileName;\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n /certificate/remove [ find where name~(\"^\" . \$FileName . \"_[0-9]\ + +\\\$\") ];\r\ + \n :log warning (\$0 . \" Certificate with CommonName '\" . \$CommonNam\ + e . \"' still unavailable!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :foreach Cert in=[ /certificate/find where name~(\"^\" . \$FileName . \ + \"_[0-9]+\\\$\") ] do={\r\ + \n \$CertificateNameByCN [ /certificate/get \$Cert common-name ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateNameByCN do={\r\ + \n :local Match [ :tostr \$1 ];\r\ + \n :global CleanName;\r\ + \n :local Cert ([ /certificate/find where (common-name=\$Match or fingerp\ + rint=\$Match or name=\$Match) ]->0);\r\ + \n :if ([ :len \$Cert ] = 0) do={\r\ + \n :log warning (\$0 .\" No matching certificate found.\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CommonName [ /certificate/get \$Cert common-name ];\r\ + \n /certificate/set \$Cert name=[ \$CleanName \$CommonName ];\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set FileExists do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local Type [ :tostr \$2 ];\r\ + \n :global FileGet;\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={ :return false; }\r\ + \n :if ([ :len (\$FileVal->\"size\") ] = 0) do={ :return false; }\r\ + \n :if ([ :len \$Type ] = 0 || \$FileVal->\"type\" = \$Type) do={ :return\ + \_true; }\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set Grep do={\r\ + \n :local Input ([ :tostr \$1 ] . \"\\n\");\r\ + \n :local Pattern [ :tostr \$2 ];\r\ + \n :if ([ :typeof [ :find \$Input \$Pattern ] ] = \"nil\") do={:return []\ + }\r\ + \n :do {\r\ + \n :local Line [ :pick \$Input 0 [ :find \$Input \"\\n\" ] ];\r\ + \n :if ([ :typeof [ :find \$Line \$Pattern ] ] = \"num\") do={:return \ + \$Line}\r\ + \n :set Input [ :pick \$Input ([ :find \$Input \"\\n\" ] + 1) [ :len \$\ + Input ] ];\r\ + \n } while=([ :len \$Input ] > 0);\r\ + \n :return [];\r\ + \n}\r\ + \n\r\ + \n:set HumanReadableNum do={\r\ + \n :local Input [ :tonum \$1 ];\r\ + \n :local Base [ :tonum \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global IfThenElse;\r\ + \n :local Prefix \"kMGTPE\";\r\ + \n :local Pow 1;\r\ + \n :set Base [ \$EitherOr \$Base 1024 ];\r\ + \n :local Bin [ \$IfThenElse (\$Base = 1024) \"i\" \"\" ];\r\ + \n :if (\$Input < \$Base) do={:return \$Input}\r\ + \n :for I from=0 to=[ :len \$Prefix ] do={\r\ + \n :set Pow (\$Pow * \$Base);\r\ + \n :if (\$Input / \$Base < \$Pow) do={\r\ + \n :set Prefix [ :pick \$Prefix \$I ];\r\ + \n :local Tmp1 (\$Input * 100 / \$Pow);\r\ + \n :local Tmp2 (\$Tmp1 / 100);\r\ + \n :if (\$Tmp2 >= 100) do={:return (\$Tmp2 . \$Prefix . \$Bin)}\r\ + \n :return (\$Tmp2 . \".\" . \\\r\ + \n [ :pick \$Tmp1 [ :len \$Tmp2 ] ([ :len \$Tmp1 ] - [ :len \$Tmp\ + 2 ] + 1) ] . \\\r\ + \n \$Prefix . \$Bin);\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set CleanFilePath do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CharacterReplace;\r\ + \n :while (\$Path ~ \"//\") do={ :set \$Path [ \$CharacterReplace \$Path \ + \"//\" \"/\" ]; }\r\ + \n :if ([ :pick \$Path 0 ] = \"/\") do={ :set Path [ :pick \$Path 1 [ :le\ + n \$Path ] ]; }\r\ + \n :if ([ :pick \$Path ([ :len \$Path ] - 1) ] = \"/\") do={ :set Path [ \ + :pick \$Path 0 ([ :len \$Path ] - 1) ]; }\r\ + \n :return \$Path;\r\ + \n}\r\ + \n\r\ + \n:set CleanName do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Return \"\";\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :typeof [ find \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqr\ + stuvwxyz0123456789\" \$Char ] ] = \"nil\") do={\r\ + \n :do {:if ([ :len \$Return ] = 0) do={:error true};\r\ + \n :if ([ :pick \$Return ([ :len \$Return ] - 1) ] = \"-\") do={:er\ + ror true}; :set Char \"-\"} on-error={:set Char \"\"}; \r\ + \n };\r\ + \n :set Return (\$Return . \$Char)};\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set RandomDelay do={\r\ + \n :local Time [ :tonum \$1 ];\r\ + \n :local Unit [ :tostr \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global GetRandomNumber;\r\ + \n :global MAX;\r\ + \n :if (\$Time = 0) do={:return false}\r\ + \n :delay ([ \$MAX 10 [ \$GetRandomNumber ([ :tonsec [ :totime (\$Time . \ + [ \$EitherOr \$Unit \"s\" ]) ] ] / 1000000) ] ] . \"ms\");\r\ + \n}\r\ + \n\r\ + \n:set EscapeForRegEx do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"^.[]\\\$()|*+\?{}\\\\\");\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :find \$Chars \$Char ]) do={:set Char (\"\\\\\" . \$Char)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ExitError do={\r\ + \n :local ExitOK [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Error [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :if (\$ExitOK = \"false\") do={\r\ + \n :log error (\$Name [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\\\$\") \ + \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with er\ + ror\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \ + \$Error) \".\" ]);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set ExitOnError do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :local Error [ :tostr \$2 ];\r\ + \n :global IfThenElse;\r\ + \n :log error (\$Name . \" \" . [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\ + \\\$\") \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with erro\ + r\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \$E\ + rror) \".\" ]);\r\ + \n}\r\ + \n\r\ + \n:set MiniDateTimeStamp do={\r\ + \n :local mikro [ :tobool \$1 ];\r\ + \n /system/clock;\r\ + \n :local vdate [get date];\r\ + \n :local vtime [get time];\r\ + \n :local vdoff [:toarray \"0,4,5,7,8,10\"];\r\ + \n :local MM [:pick \$vdate (\$vdoff->2) (\$vdoff->3)];\r\ + \n :local M [:tonum \$MM];\r\ + \n :if (\$vdate ~ \".../../....\") do={\r\ + \n :set vdoff [:toarray \"7,11,1,3,4,6\"];\r\ + \n :set M ([:find \"xxanebarprayunulugepctovecANEBARPRAYUNULUGE\ + PCTOVEC\" [:pick \$vdate (\$vdoff->2) (\$vdoff->3)] -1] / 2);\r\ + \n :if (\$M>12) do={:set M (\$M - 12)}\r\ + \n :set MM [:pick (100 + \$M) 1 3];\r\ + \n }\r\ + \n :local yyyy [:pick \$vdate (\$vdoff->0) (\$vdoff->1)];\r\ + \n :local dd [:pick \$vdate (\$vdoff->4) (\$vdoff->5)];\r\ + \n :local HH [:pick \$vtime 0 2];\r\ + \n :local mm [:pick \$vtime 3 5];\r\ + \n :local ss [:pick \$vtime 6 8];\r\ + \n :local Return;\r\ + \n :if (\$mikro = true) do={\r\ + \n :set Return ([:pick \$yyyy 2 4] . [:pick \$dd 0 1] . [:pick \$HH 0\ + \_1] . [:pick \$mm 3 4] . [:pick \$ss 6 7]);\r\ + \n } else={\r\ + \n :set Return ([\$yyyy] . [\$MM] . [\$dd] . [\$HH] . [\$mm] . [\$ss]);\ + \r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set WaitForFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local WaitTime [ :totime \$2 ];\r\ + \n :global CleanFilePath;\r\ + \n :global EitherOr;\r\ + \n :global MAX;\r\ + \n :set FileName [ \$CleanFilePath \$FileName ];\r\ + \n :local Delay ([ \$MAX [ \$EitherOr \$WaitTime 2s ] 100ms ] / 9);\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } delay=\$Delay max=10;\r\ + \n } on-error={ }\r\ + \n :while ([ :len [ /file/find where name=\$FileName ] ] > 0) do={\r\ + \n :do {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } on-error={ }\r\ + \n :delay \$Delay;\r\ + \n :set Delay (\$Delay * 3 / 2);\r\ + \n }\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set FileGet do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global WaitForFile;\r\ + \n :if ([ \$WaitForFile \$FileName 0s ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n :local FileVal false;\r\ + \n :do {\r\ + \n :set FileVal [ /file/get \$FileName ];\r\ + \n } on-error={ }\r\ + \n :return \$FileVal;\r\ + \n}\r\ + \n\r\ + \n:set RmDir do={\r\ + \n :local DirName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :log debug (\$0 . \" Removing directory: \". \$DirName);\r\ + \n :local DirVal [ \$FileGet \$DirName ];\r\ + \n :if (\$DirVal = false) do={\r\ + \n :log debug (\$0 . \" ... which does not exist.\");\r\ + \n :return true;\r\ + \n };\r\ + \n :if (\$DirVal->\"type\" != \"directory\") do={\r\ + \n :log error (\$0 . \" Directory '\" . \$DirName . \"' is not a direct\ + ory.\");\r\ + \n :return false;\r\ + \n };\r\ + \n :onerror Err {\r\ + \n /file/remove \$DirName;\r\ + \n } do={\r\ + \n :log error (\$0 . \" Removing directory '\" . \$DirName . \"' failed\ + : \" . \$Err);\r\ + \n :return false;\r\ + \n };\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set RmFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :log debug (\$0 . \" Removing file: \". \$FileName);\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={\r\ + \n :log debug (\$0 . \" ... which does not exist.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :if (\$FileVal->\"type\" = \"directory\" || \$FileVal->\"type\" = \"di\ + sk\") do={\r\ + \n :log error (\$0 . \" File '\" . \$FileName . \"' is not a file.\");\ + \r\ + \n :return false;\r\ + \n }\r\ + \n :onerror Err {\r\ + \n /file/remove \$FileName;\r\ + \n } do={\r\ + \n :log error (\$0 . \" Removing file '\" . \$FileName . \"' failed: \"\ + \_. \$Err); :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MkDir do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CleanFilePath;\r\ + \n :global FileGet;\r\ + \n :global RmDir;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :local MkTmpfs do={\r\ + \n :global WaitForFile;\r\ + \n :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\r\ + \n :if ([ :len \$TmpFs ] = 1) do={\r\ + \n :if ([ /disk/get \$TmpFs disabled ] = true) do={\r\ + \n :log info (\$0 . \" The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :log info (\$0 . \" Creating disk of type tmpfs.\");\r\ + \n \$RmDir \"tmpfs\";\r\ + \n :onerror Err {\r\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource\ + /get total-memory ] / 3);\r\ + \n \$WaitForFile \"tmpfs\";\r\ + \n } do={\r\ + \n :log warning (\$0 . \" Creating disk of type tmpfs failed: \" . \$\ + Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :set Path [ \$CleanFilePath \$Path ];\r\ + \n :if (\$Path = \"\") do={\r\ + \n :return true;\r\ + \n }\r\ + \n :log debug (\$0 . \" Making directory: \" . \$Path);\r\ + \n :local PathVal [ \$FileGet \$Path ];\r\ + \n :if (\$PathVal->\"type\" = \"directory\") do={\r\ + \n :log debug (\$0 . \" ... which already exists.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :pick \$Path 0 5 ] = \"tmpfs\") do={\r\ + \n :if ([ \$MkTmpfs ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n /file/add type=\"directory\" name=\$Path;\r\ + \n \$WaitForFile \$Path;\r\ + \n } do={\r\ + \n :log warning (\$0 . \" Making directory '\" . \$Path . \"' failed: \ + \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MAX do={:if (\$1 > \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n:set MIN do={:if (\$1 < \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set CharacterReplace do={\r\ + \n :local String [ :tostr \$1 ];\r\ + \n :local ReplaceFrom [ :tostr \$2 ];\r\ + \n :local ReplaceWith [ :tostr \$3 ];\r\ + \n :local Return \"\";\r\ + \n :if (\$ReplaceFrom = \"\") do={:return \$String}\r\ + \n :while ([ :typeof [ :find \$String \$ReplaceFrom ] ] != \"nil\") do={\ + \r\ + \n :local Pos [ :find \$String \$ReplaceFrom ];\r\ + \n :set Return (\$Return . [ :pick \$String 0 \$Pos ] . \$ReplaceWith);\ + \r\ + \n :set String [ :pick \$String (\$Pos + [ :len \$ReplaceFrom ]) [ :len\ + \_\$String ] ];\r\ + \n }\r\ + \n :return (\$Return . \$String);\r\ + \n}\r\ + \n\r\ + \n:set IfThenElse do={\r\ + \n :if ([ :tostr \$1 ] = \"true\" || [ :tobool \$1 ] = true) do={:return \ + \$2};\r\ + \n :return \$3;\r\ + \n}\r\ + \n\r\ + \n:set EitherOr do={\r\ + \n :global IfThenElse;\r\ + \n :if ([ :typeof \$1 ] = \"num\") do={:return [ \$IfThenElse (\$1 != 0) \ + \$1 \$2 ]}\r\ + \n :if ([ :typeof \$1 ] = \"time\") do={:return [ \$IfThenElse (\$1 > 0s)\ + \_\$1 \$2 ]}\r\ + \n# this works for boolean values, literal ones with parentheses\r\ + \n :return [ \$IfThenElse ([ :len [ :tostr \$1 ] ] > 0) \$1 \$2 ];\r\ + \n}\r\ + \n\r\ + \n:set ParseKeyValueStore do={\r\ + \n :local Source \$1;\r\ + \n :if ([ :pick \$Source 0 1 ] = \"{\") do={\r\ + \n :do {\r\ + \n :return [ :deserialize from=json \$Source ];\r\ + \n } on-error={ }\r\ + \n } \r\ + \n :if ([ :typeof \$Source ] != \"array\") do={:set Source [ :tostr \$1 ]\ + }\r\ + \n :local Result ({});\r\ + \n :foreach KeyValue in=[ :toarray \$Source ] do={\r\ + \n :if ([ :find \$KeyValue \"=\" ]) do={\r\ + \n :local Key [ :pick \$KeyValue 0 [ :find \$KeyValue \"=\" ] ];\r\ + \n :local Value [ :pick \$KeyValue ([ :find \$KeyValue \"=\" ] + 1) [\ + \_:len \$KeyValue ] ];\r\ + \n :if (\$Value=\"true\") do={:set Value true}\r\ + \n :if (\$Value=\"false\") do={:set Value false}\r\ + \n :set (\$Result->\$Key) \$Value;\r\ + \n } else={:set (\$Result->\$KeyValue) true}\r\ + \n }\r\ + \n :return \$Result;\r\ + \n}\r\ + \n:set RequiredRouterOS do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :local Required [ :tostr \$2 ];\r\ + \n :local Warn [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :global VersionToNum;\r\ + \n :if (!(\$Required ~ \"^\\\\d+\\\\.\\\\d+((alpha|beta|rc|\\\\.)\\\\d+|)\ + \\\$\")) do={\r\ + \n :log error (\$0 . \" No valid RouterOS version: \" . \$Required);\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ \$VersionToNum \$Required ] > [ \$VersionToNum [ /system/packag\ + e/update/get installed-version ] ]) do={\r\ + \n :if (\$Warn = \"true\") do={\r\ + \n :log warning (\$0 . \" This \" . [ \$IfThenElse ([ :pick \$Caller \ + 0 ] = (\"\\\$\")) \"function\" \"script\" ] . \\\r\ + \n \" '\" . \$Caller . \"' (at least specific functionality) requir\ + es RouterOS \" . \$Required . \". Please update!\");\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set ValidateSyntax do={\r\ + \n :local Code [ :tostr \$1 ];\r\ + \n :global LogPrint;\r\ + \n :onerror Err {\r\ + \n [ :parse (\":local Validate do={\\n\" . \$Code . \"\\n}\") ];\r\ + \n } do={\r\ + \n \$LogPrint debug \$0 (\"Valdation failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set VersionToNum do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Multi 0x1000000;\r\ + \n :local Return 0;\r\ + \n :global CharacterReplace;\r\ + \n :set Input [ \$CharacterReplace \$Input \".\" \",\" ];\r\ + \n :foreach I in={ \"zero\"; \"alpha\"; \"beta\"; \"rc\" } do={\r\ + \n :set Input [ \$CharacterReplace \$Input \$I (\",\" . \$I . \",\") ];\ + \r\ + \n }\r\ + \n :foreach Value in=([ :toarray \$Input ], 0) do={\r\ + \n :local Num [ :tonum \$Value ];\r\ + \n :if (\$Multi = 0x100) do={\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={\r\ + \n :set Return (\$Return + 0xff00);\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n } else={\r\ + \n :if (\$Value = \"zero\") do={ }\r\ + \n :if (\$Value = \"alpha\") do={ :set Return (\$Return + 0x3f00); \ + }\r\ + \n :if (\$Value = \"beta\") do={ :set Return (\$Return + 0x5f00); }\ + \r\ + \n :if (\$Value = \"rc\") do={ :set Return (\$Return + 0x7f00); }\r\ + \n }\r\ + \n }\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={ :set Return (\$Return + (\$Va\ + lue * \$Multi)); }\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ScriptLock do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local WaitMax [ :totime \$2 ];\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global ScriptLockOrder;\r\ + \n :if ([ :typeof \$ScriptLockOrder ] = \"nothing\") do={\r\ + \n :set ScriptLockOrder ({});\r\ + \n }\r\ + \n :if ([ :typeof (\$ScriptLockOrder->\$Script) ] = \"nothing\") do={\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :local JobCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :return [ :len [ /system/script/job/find where script=\$Script ] ];\ + \r\ + \n }\r\ + \n :local TicketCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :local Count 0;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:set Count (\$Count \ + + 1)}\r\ + \n }\r\ + \n :return \$Count;\r\ + \n }\r\ + \n :local IsFirstTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Check [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if (\$Ticket = \$Check) do={:return true}\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\" && \$Ticket != \$Check) d\ + o={:return false}\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :local AddTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Add [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :while (true) do={\r\ + \n :local Pos [ :len (\$ScriptLockOrder->\$Script) ];\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Pos) \$Add;\r\ + \n :delay 10ms;\r\ + \n :if ((\$ScriptLockOrder->\$Script->\$Pos) = \$Add) do={:return tru\ + e}\r\ + \n }\r\ + \n }\r\ + \n :local RemoveTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Remove [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Id,Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :while ((\$ScriptLockOrder->\$Script->\$Id) = \$Remove) do={\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Id);\r\ + \n :delay 10ms;\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n :local CleanupTickets do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:return false}\r\ + \n }\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :if ([ :typeof \$WaitMax ] = \"nil\" ) do={:set WaitMax 0s}\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\r\ + \n :log error (\$0 . \" A script named '\" . \$Script . \"' does not ex\ + ist!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$JobCount \$Script ] = 0) do={\r\ + \n \$LogPrint error \$0 (\"No script '\" . \$Script . \"' is running!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$TicketCount \$Script ] >= [ \$JobCount \$Script ]) do={\r\ + \n :log error (\$0 . \" More tickets than running scripts '\" . \$Scrip\ + t . \"', resetting!\");\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n /system/script/job/remove [ find where script=\$Script ];\r\ + \n }\r\ + \n :local MyTicket [ \$GetRandom20CharAlNum 6 ];\r\ + \n \$AddTicket \$Script \$MyTicket;\r\ + \n :local WaitInterval (\$WaitMax / 20);\r\ + \n :local WaitTime \$WaitMax;\r\ + \n :while (\$WaitTime > 0 && \\\r\ + \n ([ \$IsFirstTicket \$Script \$MyTicket ] = false || \\\r\ + \n [ \$TicketCount \$Script ] < [ \$JobCount \$Script ])) do={\r\ + \n :set WaitTime (\$WaitTime - \$WaitInterval);\r\ + \n :delay \$WaitInterval;\r\ + \n }\r\ + \n :if ([ \$IsFirstTicket \$Script \$MyTicket ] = true && \\\r\ + \n [ \$TicketCount \$Script ] = [ \$JobCount \$Script ]) do={\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$CleanupTickets \$Script;\r\ + \n :return true;\r\ + \n }\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$LogPrint debug \$0 (\"Script '\" . \$Script . \"' started more than \ + once\" . \\\r\ + \n [ \$IfThenElse (\$WaitTime < \$WaitMax) \" and timed out waiting for\ + \_lock\" \"\" ] . \"...\");\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set SendNotification do={ :onerror Err {\r\ + \n :global SendNotification2;\r\ + \n \$SendNotification2 ({ origin=\$0; subject=\$1; message=\$2; link=\$3;\ + \_silent=\$4 });\r\ + \n} do={:global ExitOnError; \$ExitOnError \$0 \$Err}\r\ + \n}\r\ + \n\r\ + \n:set SendNotification2 do={\r\ + \n :local Notification \$1;\r\ + \n :global NotificationFunctions;\r\ + \n :foreach FunctionName,Discard in=\$NotificationFunctions do={\r\ + \n (\$NotificationFunctions->\$FunctionName) (\"\\\$NotificationFunctio\ + ns->\\\"\" . \$FunctionName . \"\\\"\") \$Notification;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set SymbolByUnicodeName do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :global EitherOr;\r\ + \n :global SymbolsExtra;\r\ + \n :local Symbols ({\r\ + \n \"abacus\"=\"\\F0\\9F\\A7\\AE\";\r\ + \n \"alarm-clock\"=\"\\E2\\8F\\B0\";\r\ + \n \"arrow-down\"=\"\\E2\\AC\\87\";\r\ + \n \"arrow-up\"=\"\\E2\\AC\\86\";\r\ + \n \"calendar\"=\"\\F0\\9F\\93\\85\";\r\ + \n \"card-file-box\"=\"\\F0\\9F\\97\\83\";\r\ + \n \"chart-decreasing\"=\"\\F0\\9F\\93\\89\";\r\ + \n \"chart-increasing\"=\"\\F0\\9F\\93\\88\";\r\ + \n \"cloud\"=\"\\E2\\98\\81\";\r\ + \n \"cross-mark\"=\"\\E2\\9D\\8C\";\r\ + \n \"earth\"=\"\\F0\\9F\\8C\\8D\";\r\ + \n \"fire\"=\"\\F0\\9F\\94\\A5\";\r\ + \n \"floppy-disk\"=\"\\F0\\9F\\92\\BE\";\r\ + \n \"gear\"=\"\\E2\\9A\\99\";\r\ + \n \"heart\"=\"\\E2\\99\\A5\";\r\ + \n \"high-voltage-sign\"=\"\\E2\\9A\\A1\";\r\ + \n \"incoming-envelope\"=\"\\F0\\9F\\93\\A8\";\r\ + \n \"information\"=\"\\E2\\84\\B9\";\r\ + \n \"large-orange-circle\"=\"\\F0\\9F\\9F\\A0\";\r\ + \n \"large-red-circle\"=\"\\F0\\9F\\94\\B4\";\r\ + \n \"link\"=\"\\F0\\9F\\94\\97\";\r\ + \n \"lock-with-ink-pen\"=\"\\F0\\9F\\94\\8F\";\r\ + \n \"memo\"=\"\\F0\\9F\\93\\9D\";\r\ + \n \"mobile-phone\"=\"\\F0\\9F\\93\\B1\";\r\ + \n \"pushpin\"=\"\\F0\\9F\\93\\8C\";\r\ + \n \"scissors\"=\"\\E2\\9C\\82\";\r\ + \n \"scroll\"=\"\\F0\\9F\\93\\9C\";\r\ + \n \"smiley-partying-face\"=\"\\F0\\9F\\A5\\B3\";\r\ + \n \"smiley-smiling-face\"=\"\\E2\\98\\BA\";\r\ + \n \"smiley-winking-face-with-tongue\"=\"\\F0\\9F\\98\\9C\";\r\ + \n \"sparkles\"=\"\\E2\\9C\\A8\";\r\ + \n \"speech-balloon\"=\"\\F0\\9F\\92\\AC\";\r\ + \n \"star\"=\"\\E2\\AD\\90\";\r\ + \n \"warning-sign\"=\"\\E2\\9A\\A0\";\r\ + \n \"white-heavy-check-mark\"=\"\\E2\\9C\\85\"\r\ + \n }, \$SymbolsExtra);\r\ + \n :local Magic [ :pick [ /system/clock/get date ] 4 10 ];\r\ + \n :local Special {\r\ + \n \"information-04-01\"=\"\\F0\\9F\\9A\\BB\";\r\ + \n \"large-orange-circle-04-01\"=\"\\F0\\9F\\8D\\8A\";\r\ + \n \"large-orange-circle-10-31\"=\"\\F0\\9F\\8E\\83\";\r\ + \n \"large-red-circle-04-01\"=\"\\F0\\9F\\8D\\92\" };\r\ + \n :if ([ :len (\$Symbols->\$Name) ] = 0) do={\r\ + \n :log warning (\$0 . \"No symbol available for name '\" . \$Name . \"\ + '!\");\r\ + \n :return \"\";\r\ + \n }\r\ + \n :return ([ \$EitherOr (\$Special->(\$Name . \$Magic)) (\$Symbols->\$Na\ + me) ] . \"\\EF\\B8\\8F\");\r\ + \n}\r\ + \n\r\ + \n:set SymbolForNotification do={\r\ + \n :global NotificationsWithSymbols;\r\ + \n :global SymbolByUnicodeName;\r\ + \n :global IfThenElse;\r\ + \n :if (\$NotificationsWithSymbols != true) do={:return [ \$IfThenElse ([\ + \_:len \$2 ] > 0) ([ :tostr \$2 ] . \" \") \"\" ]}\r\ + \n :local Return \"\";\r\ + \n :foreach Symbol in=[ :toarray \$1 ] do={:set Return (\$Return . [ \$Sy\ + mbolByUnicodeName \$Symbol ])}\r\ + \n :return (\$Return . \" \");\r\ + \n}\r\ + \n\r\ + \n:set Unix2Dos do={:return [ :tocrlf [ :tostr \$1 ] ]}\r\ + \n:set UrlEncode do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"\\n\\r !\\\"#\\\$%&'()*+,:;<=>\?@[\\\\]^`{|}~\");\r\ + \n :local Subs { \"%0A\"; \"%0D\"; \"%20\"; \"%21\"; \"%22\"; \"%23\"; \"\ + %24\"; \"%25\"; \"%26\"; \"%27\";\r\ + \n \"%28\"; \"%29\"; \"%2A\"; \"%2B\"; \"%2C\"; \"%3A\"; \"%3B\"; \ + \"%3C\"; \"%3D\"; \"%3E\"; \"%3F\";\r\ + \n \"%40\"; \"%5B\"; \"%5C\"; \"%5D\"; \"%5E\"; \"%60\"; \"%7B\"; \ + \"%7C\"; \"%7D\"; \"%7E\" };\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :local Replace [ :find \$Chars \$Char ];\r\ + \n :if ([ :typeof \$Replace ] = \"num\") do={:set Char (\$Subs->\$Repla\ + ce)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set IsDNSResolving do={\r\ + \n :do {:resolve \"api.telegram.org\"} on-error={:return false}\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set IsFullyConnected do={\r\ + \n :global IsDNSResolving;\r\ + \n :global IsTimeSync;\r\ + \n :if ([ \$IsDNSResolving ] = false) do={:return false};\r\ + \n :if ([ \$IsTimeSync ] = false) do={:return false};\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set IsTimeSync do={\r\ + \n :global IsTimeSyncCached;\r\ + \n :global IsTimeSyncResetNtp;\r\ + \n :if (\$IsTimeSyncCached = true) do={:return true}\r\ + \n :if ([ /system/ntp/client/get enabled ] = true) do={\r\ + \n :if ([ /system/ntp/client/get status ] = \"synchronized\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :local Uptime [ /system/resource/get uptime ];\r\ + \n :if ([ :typeof \$IsTimeSyncResetNtp ] = \"nothing\") do={\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n }\r\ + \n :if (\$Uptime - \$IsTimeSyncResetNtp < 3m) do={:return false}\r\ + \n :log warning \"\$0 The ntp client is configured, but did not sync.\"\ + ;\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n /system/ntp/client/set enabled=no;\r\ + \n :delay 20ms;\r\ + \n /system/ntp/client/set enabled=yes;\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ /system/license/get ]->\"level\" = \"free\" || \\\r\ + \n [ /system/resource/get ]->\"board-name\" = \"x86\") do={\r\ + \n :log debug \"\$0 No ntp client configured, relying on RTC for CHR fr\ + ee license and x86.\";\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ /ip/cloud/get update-time ] = true) do={\r\ + \n :if ([ :typeof [ /ip/cloud/get public-address ] ] = \"ip\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :log debug \"\$0 No time source configured! Returning gracefully...\";\ + \r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n# read parts of a large file\r\ + \n# Description of parameters:\r\ + \n# \$1 - script name for logging and user agent\r\ + \n# \$2 - url to fetch from\r\ + \n# \$3 - check-certificate value for /tool/fetch (true/false)\r\ + \n# \$4 - mode value for /tool/fetch (optional, e.g. \"keep-broken\", \"ht\ + tps-only\", \"http-only\"\r\ + \n# \"no-redirects\", \"background\", \"background-and-keep-broken\",\ + \_\"background-and-https-only\",\r\ + \n# \"background-and-http-only\", \"background-and-no-redirects\", \"\ + background-and-keep-broken-and-https-only\", \"background-and-keep-broken-\ + and-http-only\",\r\ + \n# \"background-and-keep-broken-and-no-redirects\")\r\ + \n# \$5 - fetch method for /tool/fetch (optional, e.g. \"get\", \"head\", \ + \"post\", \"put\", \"patch\", \"delete\")\r\ + \n#:set FetchLargeFiles do={\r\ + \n# :local RunName [:tostr \$1];\r\ + \n# :local fetchUrl [:tostr \$2];\r\ + \n# :local fetchFile [:tostr \$3];\r\ + \n# :local CheckCert [:tostr \$4];\r\ + \n# :local fetchMode [:tostr \$5];\r\ + \n# :local fetchMethod [:tostr \$6];\r\ + \n# :local tmpName;\r\ + \n# :global CleanName;\r\ + \n# :global FetchUserAgentStr;\r\ + \n# :global GetRandom20CharAlNum;\r\ + \n# :global IfThenElse;\r\ + \n# :global LogPrint;\r\ + \n# :global MkDir;\r\ + \n# :global RmDir;\r\ + \n# :global RmFile;\r\ + \n# :global WaitForFile;\r\ + \n#\r\ + \n# :set CheckCert [ \$IfThenElse (\$CheckCert = \"false\") \"no\" \"yes-\ + without-crl\" ];\r\ + \n#\r\ + \n# :set tmpName (\$CleanName \"tmp-\" . [ \$GetRandom20CharAlNum 6 ]);\r\ + \n# :local DirName (\"tmpfs/\" . \$tmpName);\r\ + \n# :if ([ \$MkDir \$DirName ] = false) do={\r\ + \n# :log error (\$RunName . \" Failed creating directory: \" . \$DirNam\ + e . \"!\");\r\ + \n# :return false;\r\ + \n# }\r\ + \n#\r\ + \n# :local FileName (\$DirName . \"/\" . [ \$CleanName \$fetchFile ] . \"\ + -\" . [ \$GetRandom20CharAlNum 5 ]);\r\ + \n# :local Url (\$fetchUrl . \$fetchFile);\r\ + \n# :onerror Err {\r\ + \n# /tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName\ + \_\\\r\ + \n# http-header-field=({ [ \$FetchUserAgentStr \$RunName ] }) as-valu\ + e;\r\ + \n# } do={\r\ + \n# :if ([ \$WaitForFile \$FileName 500ms ] = true) do={\r\ + \n# \$RmFile \$FileName;\r\ + \n# }\r\ + \n# :log error (\$RunName . \" Failed downloading from '\" . \$Url . \"\ + ' - \" . \$Err);\r\ + \n# \$RmDir \$DirName;\r\ + \n# :return false;\r\ + \n# }\r\ + \n#\r\ + \n# :if ([ \$WaitForFile \$FileName 5s ] = false) do={\r\ + \n# :log error (\$RunName . \" The file downloaded from '\" . \$Url . \ + \"' did not show up.\");\r\ + \n# :return false;\r\ + \n# }\r\ + \n# \r\ + \n# :local FileSize [ /file/get \$FileName size ];\r\ + \n# :local Return \"\";\r\ + \n# :local VarSize 0;\r\ + \n# :while (\$VarSize != \$FileSize) do={\r\ + \n# :set Return (\$Return . ([ /file/read offset=\$VarSize chunk-size=3\ + 2768 file=\$FileName as-value ]->\"data\"));\r\ + \n# :set FileSize [ /file/get \$FileName size ];\r\ + \n# :set VarSize [ :len \$Return ];\r\ + \n# :if (\$VarSize > \$FileSize) do={\r\ + \n# :delay 100ms;\r\ + \n# }\r\ + \n# }\r\ + \n## \$RmFile \$FileName;\r\ + \n# \$RmDir \$DirName;\r\ + \n# :return \$Return;\r\ + \n#}\r\ + \n\r\ + \n:set FetchHugeFiles do={\r\ + \n :local ScriptName [ :tostr \$1 ];\r\ + \n :local Url [ :tostr \$2 ];\r\ + \n :local CheckCert [ :tostr \$3 ];\r\ + \n\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global MkDir;\r\ + \n :global RmDir;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :set CheckCert [ \$IfThenElse (\$CheckCert = \"false\") \"no\" \"yes-w\ + ithout-crl\" ];\r\ + \n\r\ + \n :local DirName (\"tmpfs/\" . [ \$CleanName \$ScriptName ]);\r\ + \n :if ([ \$MkDir \$DirName ] = false) do={\r\ + \n \$LogPrint error \$0 (\"Failed creating directory!\");\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :local FileName (\$DirName . \"/\" . [ \$CleanName \$0 ] . \"-\" . [ \ + \$GetRandom20CharAlNum ]);\r\ + \n :onerror Err {\r\ + \n /tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName \ + \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] }) as-va\ + lue;\r\ + \n } do={\r\ + \n :if ([ \$WaitForFile \$FileName 500ms ] = true) do={\r\ + \n \$RmFile \$FileName;\r\ + \n }\r\ + \n \$LogPrint debug \$0 (\"Failed downloading from \" . \$Url . \" - \"\ + \_. \$Err);\r\ + \n \$RmDir \$DirName;\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$WaitForFile \$FileName 5s ] = false) do={\r\ + \n \$LogPrint debug \$0 (\"The file downloaded from \" . \$Url . \" did\ + \_not show up.\");\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :local FileSize [ /file/get \$FileName size ];\r\ + \n :local Return \"\";\r\ + \n :local VarSize 0;\r\ + \n :while (\$VarSize != \$FileSize) do={\r\ + \n :set Return (\$Return . ([ /file/read offset=\$VarSize chunk-size=32\ + 768 file=\$FileName as-value ]->\"data\"));\r\ + \n :set FileSize [ /file/get \$FileName size ];\r\ + \n :set VarSize [ :len \$Return ];\r\ + \n :if (\$VarSize > \$FileSize) do={\r\ + \n :delay 100ms;\r\ + \n }\r\ + \n }\r\ + \n \$RmDir \$DirName;\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set FetchUserAgentStr do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global CommitBrief;\r\ + \n :global IfThenElse;\r\ + \n :local Resource [ /system/resource/get ];\r\ + \n :return (\"User-Agent: Mikrotik/\" . \$Resource->\"version\" . \" \" .\ + \_\$Resource->\"architecture-name\" . \\\r\ + \n \" \" . \$Caller . \"/Fetch (\" . \$GlobalScriptsUrl . \"; \" . [ \$\ + CommitBrief ] . \")\");\r\ + \n}\r\ + \n\r\ + \n:set ScriptInstallUpdate do={ :onerror Err {\r\ + \n :local Scripts [ :toarray \$1 ];\r\ + \n :local NewComment [ :tostr \$2 ];\r\ + \n :global InitSetup;\r\ + \n\r\ + \n :global CommitId;\r\ + \n :global ScriptUpdatesCRLF;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global CertificateAvailable;\r\ + \n :global CheckSumsVerify;\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SumsDirAndFileName;\r\ + \n :global GlobalScriptsUrlSuffix;\r\ + \n :global EitherOr;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global Grep;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global ParseKeyValueStore;\r\ + \n :global RequiredRouterOS;\r\ + \n :global SendNotification2;\r\ + \n :global SymbolForNotification;\r\ + \n :global ValidateSyntax;\r\ + \n :global CommentsInScripts;\r\ + \n\r\ + \n :if ([ \$CertificateAvailable \"Root YE\" \"fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, trying wit\ + hout.\");\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=\$Scripts do={\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\ + \r\ + \n \$LogPrint info \$0 (\"Adding new script: \" . \$Script);\r\ + \n /system/script/add name=\$Script owner=\$Script source=\"#!rsc by \ + Vados\\n\" comment=\$NewComment;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :local CommitIdBefore \$CommitId;\r\ + \n :local GlobalConfVersionBefore \$GlobalConfVersion;\r\ + \n :local ReloadGlobal false;\r\ + \n :local DeviceMode [ /system/device-mode/get ];\r\ + \n\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSums ({});\r\ + \n :do {\r\ + \n :local Url (\$GlobalScriptsUrl . \$SumsDirAndFileName . \$GlobalScr\ + iptsUrlSuffix);\r\ + \n \$LogPrint debug \$0 (\"Fetching checksums from url: \" . \$Url);\ + \r\ + \n :set CheckSums [ :deserialize from=json ([ /tool/fetch check-certi\ + ficate=yes-without-crl \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url output\ + =user as-value ]->\"data\") ];\r\ + \n } on-error={ \$LogPrint warning \$0 (\"Err = \" . \$Err); }\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vado\ + s\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :local ScriptInfo [ \$ParseKeyValueStore (\$ScriptVal->\"comment\") \ + ];\r\ + \n :local SourceNew;\r\ + \n\r\ + \n :foreach Scheduler in=[ /system/scheduler/find where on-event~(\"\\\ + \\b\" . \$ScriptVal->\"name\" . \"\\\\b\") ] do={\r\ + \n :local SchedulerVal [ /system/scheduler/get \$Scheduler ];\r\ + \n :if (\$ScriptVal->\"policy\" != \$SchedulerVal->\"policy\") do={\r\ + \n \$LogPrint warning \$0 (\"Policies differ for script '\" . \$Scr\ + iptVal->\"name\" . \"' and its scheduler '\" . \$SchedulerVal->\"name\" . \ + \"'!\");\r\ + \n }\r\ + \n }\r\ + \n :do {\r\ + \n :if (\$ScriptInfo->\"ignore\" = true) do={\r\ + \n \$LogPrint debug \$0 (\"Ignoring script '\" . \$ScriptVal->\"nam\ + e\" . \"', as requested.\");\r\ + \n :error true;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSum (\$CheckSums->(\$ScriptVal->\"name\"));\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Scri\ + ptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :convert transform=md5 to=hex [ :tolf (\$ScriptVal->\"sou\ + rce\") ] ] = \$CheckSum) do={\r\ + \n \$LogPrint debug \$0 (\"Checksum for script '\" . \$ScriptVal-\ + >\"name\" . \"' matches, ignoring.\");\r\ + \n :error true;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len (\$ScriptInfo->\"certificate\") ] > 0) do={\r\ + \n :if ([ \$CertificateAvailable (\$ScriptInfo->\"certificate\") \"\ + fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, tryi\ + ng without.\");\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n :local BaseUrl [ \$EitherOr (\$ScriptInfo->\"base-url\") \$Globa\ + lScriptsUrl ];\r\ + \n :local UrlSuffix [ \$EitherOr (\$ScriptInfo->\"url-suffix\") \$G\ + lobalScriptsUrlSuffix ];\r\ + \n :local Url (\$BaseUrl . \$ScriptVal->\"name\" . \".rsc\" . \$Url\ + Suffix);\r\ + \n \$LogPrint warning \$0 (\"Fetching script '\" . (\$ScriptVal->\"\ + name\") . \"' from url: \" . \$Url);\r\ + \n :local Result [ /tool/fetch check-certificate=yes-without-crl \\\ + \r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url outp\ + ut=user as-value ];\r\ + \n :if (\$Result->\"status\" = \"finished\") do={\r\ + \n :set SourceNew [ :tolf (\$Result->\"data\") ];\r\ + \n } \r\ + \n } do={\r\ + \n \$LogPrint warning \$0 (\"Failed fetching script '\" . \$ScriptV\ + al->\"name\" . \"': \" . \$Err);\r\ + \n :if (\$Err != \"Fetch failed with status 404\") do={\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$ScriptVal->\"source\" = \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Removing dummy. Typo on installation\ + \?\");\r\ + \n /system/script/remove \$Script;\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Sc\ + riptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :len \$CheckSum ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"Added the script manually\? Skip u\ + pdates with 'ignore=true' in comment.\");\r\ + \n }\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$SourceNew ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"No update for script '\" . (\$ScriptVal-\ + >\"name\") . \"'.\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :local SourceCRLF [ :tocrlf \$SourceNew ];\r\ + \n :if (\$InitSetup != true && ((\$ScriptVal->\"name\") != \"AM-Globa\ + lConfig\" || (\$ScriptVal->\"name\") != \"AM-GlobalFunc\")) do={\r\ + \n :if (\$SourceNew = (\$ScriptVal->\"source\") || \$SourceCRLF = (\ + \$ScriptVal->\"source\")) do={\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\") \ + . \"' source did not change. End of lines set to CRLF.\");\r\ + \n if (\$ScriptUpdatesCRLF = false) do={\r\ + \n :put [ :tolf \$SourceNew ];\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\"\ + ) . \"' source update end of lines to LF.\");\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([ :pick \$SourceNew 0 14 ] != \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Looks like new script '\" . \$ScriptVa\ + l->\"name\" . \"' is not valid (missing shebang = '\$shebang') Ignoring!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if (\$CommentsInScripts = true) do={\r\ + \n :local CommentLine [ \$Grep \$SourceNew (\"\\23 Script comment:\ + \_\") ];\r\ + \n :if ([ :len \$CommentLine ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"The search in new script '\" . (\$Scr\ + iptVal->\"name\") . \"' for comment in script body, is not found result Ig\ + noring!\");\r\ + \n :error false;\r\ + \n } else={\r\ + \n :if ([ :len (\$ScriptVal->\"comment\")] = 0 || [ :len (\$Scri\ + ptVal->\"comment\")] != [ :pick \$CommentLine ([ :find \$CommentLine \":\"\ + ] + 2) [ :len \$CommentLine] ]) do={\r\ + \n \$LogPrint debug \$0 (\"Exsiting comment for script '\" . (\ + \$ScriptVal->\"name\") . \"' is '\" . (\$ScriptVal->\"comment\") . \"'.\")\ + ;\r\ + \n :set (\$ScriptVal->\"comment\") [ :pick \$CommentLine ([ :f\ + ind \$CommentLine \":\"] + 2) [ :len \$CommentLine] ];\r\ + \n \$LogPrint debug \$0 (\"New comment (\" . (\$ScriptVal->\"c\ + omment\") . \") for script '\" . (\$ScriptVal->\"name\") . \"' has been ad\ + ded!\");\r\ + \n } else={\r\ + \n \$LogPrint debug \$0 (\"Comment for script '\" . (\$ScriptV\ + al->\"name\") . \"' did not change.\");\r\ + \n :error false;\r\ + \n }\r\ + \n } \r\ + \n }\r\ + \n\r\ + \n :local RequiredROS ([ \$ParseKeyValueStore [ \$Grep \$SourceNew (\ + \"\\23 requires RouterOS, \") ] ]->version);\r\ + \n :if ([ \$RequiredRouterOS \$0 [ \$EitherOr \$RequiredROS \"0.0\" ]\ + \_false ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires RouterOS \" . \\\r\ + \n \$RequiredROS . \", which is not met by your installation. I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :local RequiredDM [ \$ParseKeyValueStore [ \$Grep \$SourceNew (\"\ + \\23 requires device-mode, \") ] ];\r\ + \n :local MissingDM ({});\r\ + \n :foreach Feature,Value in=\$RequiredDM do={\r\ + \n :if ([ :typeof (\$DeviceMode->\$Feature) ] = \"bool\" && (\$Devi\ + ceMode->\$Feature) = false) do={\r\ + \n :set MissingDM (\$MissingDM, \$Feature);\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len \$MissingDM ] > 0) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires disabled \" . \\\r\ + \n \"device-mode features (\" . [ :tostr \$MissingDM ] . \"). I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$ValidateSyntax \$SourceNew ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Syntax validation for script '\" . (\$\ + ScriptVal->\"name\") . \"' failed! Ignoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n \r\ + \n :log info (\"Updating script: \" . (\$ScriptVal->\"name\") . \" Sc\ + ript comment: \" . (\$ScriptVal->\"comment\"));\r\ + \n\r\ + \n /system/script/set owner=(\$ScriptVal->\"name\") comment=(\$Script\ + Val->\"comment\") \\\r\ + \n source=[ \$IfThenElse (\$ScriptUpdatesCRLF = true) \$SourceCRL\ + F \$SourceNew ] \$Script;\r\ + \n :if (\$ScriptVal->\"name\" = \"AM-GlobalConfig\" || \\\r\ + \n \$ScriptVal->\"name\" = \"AM-GlobalFunc\" || \\\r\ + \n \$ScriptVal->\"name\" ~ (\"^(AM-GlobalFunc\\\\.d|mod)/.\")) d\ + o={\r\ + \n :set ReloadGlobal true;\r\ + \n }\r\ + \n } on-error={ }\r\ + \n }\r\ + \n :if (\$ReloadGlobal = true) do={\r\ + \n \$LogPrint info \$0 (\"Reloading global configuration and functions.\ + \");\r\ + \n :onerror Err {\r\ + \n :global InitSetup (a);\r\ + \n /system/script {run AM-GlobalConfig; run AM-GlobalFunc;};\r\ + \n } do={\$LogPrint error \$0 (\"Reloading global configuration and fun\ + ctions failed! \" . \$Err)}\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore > \$GlobalConfVersion) do={\r\ + \n \$LogPrint warning \$0 (\"The configuration version decreased from \ + \" . \\\r\ + \n \$GlobalConfVersionBefore . \" to \" . \$GlobalConfVersion . \\\r\ + \n \". Installed an older version\?\");\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore < \$GlobalConfVersion) do={\r\ + \n :global GlobalConfChanges;\r\ + \n :global GlobalConfMigration;\r\ + \n :local ChangeLogCode;\r\ + \n :if ([ :len \$ChangeLogCode ] > 0) do={\r\ + \n :if ([ \$ValidateSyntax \$ChangeLogCode ] = true) do={\r\ + \n :onerror Err {\r\ + \n [ :parse \$ChangeLogCode ];\r\ + \n } do={\$LogPrint warning \$0 (\"The changelog failed to run: \" \ + . \$Err)}\r\ + \n } else={\$LogPrint warning \$0 (\"The changelog failed syntax vali\ + dation!\")}\r\ + \n }\r\ + \n :if ([ :len \$GlobalConfMigration ] > 0) do={\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Migration (\$GlobalConfMigration->[ :tostr \$I ]);\r\ + \n :do {\r\ + \n :if ([ :typeof \$Migration ] != \"str\") do={\r\ + \n \$LogPrint debug \$0 (\"Migration code for change \" . \$I .\ + \_\" is not available.\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$ValidateSyntax \$Migration ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Migration code for change \" . \$I\ + \_. \" failed syntax validation!\");\r\ + \n :error false}\r\ + \n \$LogPrint info \$0 (\"Applying migration for change \" . \$I \ + . \": \" . \$Migration);\r\ + \n :onerror Err {\r\ + \n [ :parse \$Migration ];\r\ + \n } do={\$LogPrint warning \$0 (\"Migration code for change \" .\ + \_\$I . \" failed to run: \" . \$Err)}\r\ + \n } on-error={ }\r\ + \n }\r\ + \n }\r\ + \n :local NotificationMessage (\"The configuration version on \" . \$Id\ + entity . \" increased \" . \\\r\ + \n \"to \" . \$GlobalConfVersion . \", current configuration may nee\ + d modification. \" . \\\r\ + \n \"Please review and update global-config-overlay, then re-run glo\ + bal-config.\");\r\ + \n \$LogPrint info \$0 (\$NotificationMessage);\r\ + \n :if ([ :len \$GlobalConfChanges ] > 0) do={\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n\\nChanges:\ + \");\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Change (\$GlobalConfChanges->[ :tostr \$I ]);\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n \" . \\\ + \r\ + \n [ \$SymbolForNotification \"pushpin\" \"*\" ] . \$Change);\r\ + \n \$LogPrint info \$0 (\"Change \" . \$I . \": \" . \$Change);\r\ + \n }\r\ + \n } else={:set NotificationMessage (\$NotificationMessage . \"\\n\\nNe\ + ws and changes are not available.\")}\r\ + \n\r\ + \n :set GlobalConfChanges;\r\ + \n :set GlobalConfMigration;\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n} }\r\ + \n\r\ + \n# load modules\r\ + \n:foreach Script in=[ /system/script/find where name ~ \"^(global-functio\ + ns\\\\.d|mod)/.\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :if ([ \$ValidateSyntax (\$ScriptVal->\"source\") ] = true) do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' f\ + ailed to run: \" . \$Err);\r\ + \n }\r\ + \n } else={\r\ + \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' fai\ + led syntax validation, skipping.\");\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# Add and fix global scheduler\r\ + \n:put \"Add or/and fix Global scheduler...\";\r\ + \n:local OnEvent \"/system/script { run AM-GlobalConfig; run AM-GlobalFunc\ + ; }\";\r\ + \n:local Comment \"Every Day Set Global Environment Variables\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-SetGlobalEnv\" ] ] \ + = 0) do={\r\ + \n /system/scheduler/add name=\"AM-SetGlobalEnv\" comment=\$Comment on-ev\ + ent=\$OnEvent start-time=startup;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" comment ] != \$Comment)\ + \_do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" comment=\$Comment;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" on-event ] != \$OnEvent\ + ) do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" on-event=\$OnEvent;\r\ + \n}\r\ + \n# Add Update Script scheduler\r\ + \n:put \"Add or/and fix Update Script scheduler\";\r\ + \n:set OnEvent \":global ScriptInstallUpdate; \\\$ScriptInstallUpdate;\";\ + \r\ + \n:set Comment \"Every Day Check For Update Scripts\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-ScriptInstallUpdate\ + \" ] ] = 0) do={\r\ + \n/system/scheduler/add name=\"AM-ScriptInstallUpdate\" comment=\$Comment \ + start-time=startup interval=1d on-event=\$OnEvent;\r\ + \n}\r\ + \n\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady;\r\ + \n :retry { :if (\$GlobalConfReady != true) do={ :error (\"Global configs\ + \_not ready.\"); }; } delay=100ms max=5;\r\ + \n\r\ + \n:log warning (\"This script \$ScriptName Loaded \" . \\\r\ + \n [ \$IfThenElse (\$CommitId != \"unknown\") ([ \$CommitBrief ] . \" \ + \") ] . \\\r\ + \n \"on \" . \$devBoardName . \"\\nRouterOS: \" . \$devCurVersion . \"\ + \\nArchitecture: \" . \$devCurArch . \"\\nIdentity: \" . \$Identity);\r\ + \n # signal we are ready\r\ + \n:set GlobalFuncReady true;\r\ + \n:set ExitOK true;\r\ + \n\r\ + \n:log info (\$0 . \"Global configs ready!\");\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n}\r\ + \n" +add comment="download, import and update firewall address-lists" \ + dont-require-permissions=no name=AM-FwAddrLists owner=AM-FwAddrLists \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + source="#!rsc by Vados\r\ + \n# RouterOS script: AM-FwAddrLists\r\ + \n# Script comment: download, import and update firewall address-lists\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# https://ros.vados.ru/doc/fw-addr-lists.md\r\ + \n:local ExitOK false;\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady; :global GlobalFuncReady;\r\ + \n :retry { :if (\$GlobalConfReady != true || \$GlobalFuncReady != true) \ + \\\r\ + \n do={ :error (\"Global config and/or functions not ready.\"); }; } \ + delay=500ms max=50;\r\ + \n :local ScriptName [ :jobname ];\r\ + \n\r\ + \n :global GlobalScriptsUrl;\r\ + \n :local ListsDirName (\"fw-addr-lists.d/\" . [ /system identity get nam\ + e ] . \"/\");\r\ + \n :local ListsUrl (\$GlobalScriptsUrl . \$ListsDirName);\r\ + \n :local ListsIndex \"index.lst\";\r\ + \n :local AddrListsTimeOut 1d;\r\ + \n :local CheckCerts false;\r\ + \n\r\ + \n :global CertificateAvailable;\r\ + \n :global EitherOr;\r\ + \n :global FetchHugeFiles;\r\ + \n :global HumanReadableNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global NetMask4;\r\ + \n :global NetMask6;\r\ + \n :global ScriptLock;\r\ + \n \r\ + \n :local FindDelim do={\r\ + \n :local ValidChars \"0123456789.:/ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghi\ + jklmnopqrstuvwxyz-\";\r\ + \n :for I from=0 to=[ :len \$1 ] do={\r\ + \n :if ([ :typeof [ :find \$ValidChars [ :pick (\$1 . \" \") \$I ] ] \ + ] != \"num\") do={\r\ + \n :return \$I;\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :local GetBranch do={\r\ + \n :global EitherOr;\r\ + \n :return [ :pick [ :convert transform=md5 to=hex [ :pick \$1 0 [ \$Ei\ + therOr [ :find \$1 \"/\" ] [ :len \$1 ] ] ] ] 0 2 ];\r\ + \n }\r\ + \n \r\ + \n :if ([ \$ScriptLock \$ScriptName ] = false) do={\r\ + \n :set ExitOK true;\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :local ListComment (\"managed by \" . \$ScriptName);\r\ + \n :local Url (\$ListsUrl . \$ListsIndex);\r\ + \n :local tmpIndex false;\r\ + \n\r\ + \n :for I from=1 to=5 do={\r\ + \n :if (\$tmpIndex = false) do={\r\ + \n :set tmpIndex [ :tolf [ \$FetchHugeFiles \$ScriptName \$Url \$Chec\ + kCerts ] ];\r\ + \n :if (\$tmpIndex = false && \$I < 5) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading address-list \ + index, \" . \$I . \". try from: \" . \$Url);\r\ + \n :delay ((\$I * \$I) . \"s\");\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n :if (\$tmpIndex = false) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading address-list inde\ + x from: \" . \$Url);\r\ + \n :set tmpIndex \"\";\r\ + \n }\r\ + \n :local ReadFile (\"tmpfs/\" .\$tmpIndex);\r\ + \n :local filebody [/file/get \$ReadFile contents];\r\ + \n:foreach fwList in=[:deserialize \$ReadFile delimiter=\"\\n\" from=dsv o\ + ptions=dsv.plain] do={\r\ + \n :log error \$fwList;\r\ + \n}\r\ + \n\r\ + \n\r\ + \n :foreach List in=[ :deserialize \$tmpIndex delimiter=\"\\n\" from=dsv \ + options=dsv.plain ] do={\r\ + \n :set List (\$List->0);\r\ + \n :local ListName;\r\ + \n :local Delim [ \$FindDelim \$List ];\r\ + \n :if (\$Delim = 0) do={ :set List \"\"; };\r\ + \n :log warning (\$ScriptName . \" Parsing address-list index entry: \"\ + \_. \$List);\r\ + \n :if ([ :len \$List ] = 0) do={\r\ + \n :log error (\$ScriptName . \" Failed parsing address-list index en\ + try: \" . \$List);\r\ + \n } else={\r\ + \n :set ListName [ :pick \$List 0 \$Delim ];\r\ + \n }\r\ + \n :log warning (\$ScriptName . \" Parsing address-list index entry: \"\ + \_. \$ListName . \" - Ok.\");\r\ + \n :local ListUrl (\$ListsUrl . \$ListName);\r\ + \n :local CntAdd 0;\r\ + \n :local CntRenew 0;\r\ + \n :local CntRemove 0;\r\ + \n :local IPv4Addresses ({});\r\ + \n :local IPv6Addresses ({});\r\ + \n :local Failure false;\r\ + \n :local Data false;\r\ + \n :local TimeOut \$AddrListTimeOut;\r\ + \n\r\ + \n :for I from=1 to=5 do={\r\ + \n :if (\$Data = false) do={\r\ + \n :set Data [ :tolf [ \$FetchHugeFiles \$ScriptName \$ListUrl \$Ch\ + eckCerts ] ];\r\ + \n :if (\$Data = false && \$I < 5) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading for list '\ + \" . \$ListName . \"', \" . \$I . \". try from: \" . \$ListUrl);\r\ + \n :delay ((\$I * \$I) . \"s\");\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if (\$Data = false) do={\r\ + \n :set Data \"\";\r\ + \n :set Failure true;\r\ + \n :log warning (\$ScriptName . \" Failed downloading for list '\" . \ + \$ListName . \"' from: \" . \$ListUrl);\r\ + \n } else={\r\ + \n :log debug (\$ScriptName . \" Downloaded \" . [ \$HumanReadableNum\ + \_[ :len \$Data ] 1024 ] . \"B for list '\" . \$ListName . \"' from: \" . \ + \$ListUrl);\r\ + \n }\r\ + \n\r\ + \n :foreach Line in=[ :deserialize \$Data delimiter=\"\\n\" from=dsv op\ + tions=dsv.plain ] do={\r\ + \n :set Line (\$Line->0);\r\ + \n :local Address;\r\ + \n :if ([ :pick \$Line 0 1 ] = \"{\" && [ :pick \$Line ([ :len \$Line\ + \_] - 1) ] = \"}\") do={\r\ + \n :do {\r\ + \n :set Address [ :tostr ([ :deserialize from=json \$Line ]->\"ci\ + dr\") ];\r\ + \n } on-error={ }\r\ + \n } else={\r\ + \n :set Address ([ :pick \$Line 0 [ \$FindDelim \$Line ] ] . (\$L\ + ist->\"cidr\"));\r\ + \n }\r\ + \n :do {\r\ + \n :local Branch;\r\ + \n :if (\$Address ~ \"^[0-9]{1,3}\\\\.[0-9]{1,3}\\\\.[0-9]{1,3}\\\\\ + .[0-9]{1,3}(/[0-9]{1,2})\?\\\$\") do={\r\ + \n :local Net \$Address;\r\ + \n :local CIDR 32;\r\ + \n :local Slash [ :find \$Address \"/\" ];\r\ + \n :if ([ :typeof \$Slash ] = \"num\") do={\r\ + \n :set Net [ :toip [ :pick \$Address 0 \$Slash ] ]\r\ + \n :set CIDR [ :pick \$Address (\$Slash + 1) [ :len \$Address ]\ + \_];\r\ + \n :set Address [ :tostr (([ :toip \$Net ] & [ \$NetMask4 \$CID\ + R ]) . [ \$IfThenElse (\$CIDR < 32) (\"/\" . \$CIDR) ]) ];\r\ + \n }\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n }\r\ + \n :if (\$Address ~ \"^[0-9a-zA-Z]*:[0-9a-zA-Z:\\\\.]+(/[0-9]{1,3})\ + \?\\\$\") do={\r\ + \n :local Net \$Address;\r\ + \n :local CIDR 128;\r\ + \n :local Slash [ :find \$Address \"/\" ];\r\ + \n :if ([ :typeof \$Slash ] = \"num\") do={\r\ + \n :set Net [ :toip6 [ :pick \$Address 0 \$Slash ] ]\r\ + \n :set CIDR [ :pick \$Address (\$Slash + 1) [ :len \$Address ]\ + \_];\r\ + \n }\r\ + \n :set Address (([ :toip6 \$Net ] & [ \$NetMask6 \$CIDR ]) . \"/\ + \" . \$CIDR);\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n }\r\ + \n :if (\$Address ~ \"^[\\\\.a-zA-Z0-9-]+\\\\.[a-zA-Z]{2,}\\\$\") d\ + o={\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n }\r\ + \n } on-error={ }\r\ + \n }\r\ + \n \r\ + \n\r\ + \n :foreach Entry in=[ /ip/firewall/address-list/find where \\\r\ + \n list=\$ListName comment=\$ListComment ] do={\r\ + \n :local Address [ /ip/firewall/address-list/get \$Entry address ];\ + \r\ + \n :local Branch [ \$GetBranch \$Address ];\r\ + \n :local TimeOut (\$IPv4Addresses->\$Branch->\$Address);\r\ + \n :if ([ :typeof \$TimeOut ] = \"time\") do={\r\ + \n :log warning (\$ScriptName . \" Renewing IPv4 address \" . \$Add\ + ress . \\\r\ + \n \" in list '\" . \$ListName . \"' with \" . \$TimeOut . \".\ + \");\r\ + \n /ip/firewall/address-list/set \$Entry timeout=\$TimeOut;\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address);\r\ + \n :set CntRenew (\$CntRenew + 1);\r\ + \n } else={\r\ + \n :if (\$Failure = false) do={\r\ + \n :log warning (\$ScriptName . \" Removing IPv4 address \" . \$A\ + ddress . \\\r\ + \n \" from list '\" . \$ListName . \".\");\r\ + \n /ip/firewall/address-list/remove \$Entry;\r\ + \n :set CntRemove (\$CntRemove + 1);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach Entry in=[ /ipv6/firewall/address-list/find where \\\r\ + \n list=\$ListName comment=\$ListComment ] do={\r\ + \n :local Address [ /ipv6/firewall/address-list/get \$Entry address ]\ + ;\r\ + \n :local Branch [ \$GetBranch \$Address ];\r\ + \n :local TimeOut (\$IPv6Addresses->\$Branch->\$Address);\r\ + \n :if ([ :typeof \$TimeOut ] = \"time\") do={\r\ + \n :log warning (\$ScriptName . \" Renewing IPv6 address \" . \$Add\ + ress . \\\r\ + \n \" in list '\" . \$ListName . \"' with \" . \$TimeOut . \".\ + \");\r\ + \n /ipv6/firewall/address-list/set \$Entry timeout=\$TimeOut;\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address);\r\ + \n :set CntRenew (\$CntRenew + 1);\r\ + \n } else={\r\ + \n :if (\$Failure = false) do={\r\ + \n :log warning (\$ScriptName . \" Removing IPv6 address \" . \$A\ + ddress . \\\r\ + \n \" from list '\" . \$ListName . \".\");\r\ + \n /ipv6/firewall/address-list/remove \$Entry;\r\ + \n :set CntRemove (\$CntRemove + 1);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach BranchName,Branch in=\$IPv4Addresses do={\r\ + \n :log warning (\$ScriptName . \" Handling branch: \" . \$BranchName\ + );\r\ + \n :foreach Address,Timeout in=\$Branch do={\r\ + \n :log warning (\$ScriptName . \" Adding IPv4 address \" . \$Addre\ + ss . \\\r\ + \n \" to list '\" . \$ListName . \"' with \" . \$Timeout . \".\ + \");\r\ + \n :onerror Err {\r\ + \n /ip/firewall/address-list/add list=\$ListName comment=\$ListCo\ + mment \\\r\ + \n address=\$Address timeout=\$Timeout;\r\ + \n :set CntAdd (\$CntAdd + 1);\r\ + \n } do={\r\ + \n :log warning (\$ScriptName . \" Failed to add IPv4 address \" \ + . \$Address . \\\r\ + \n \" to list '\" . \$ListName . \"': \" . \$Err);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach BranchName,Branch in=\$IPv6Addresses do={\r\ + \n :log warning (\$ScriptName . \" Handling branch: \" . \$BranchName\ + );\r\ + \n :foreach Address,Timeout in=\$Branch do={\r\ + \n :log warning (\$ScriptName . \" Adding IPv6 address \" . \$Addre\ + ss . \\\r\ + \n \" to list '\" . \$ListName . \"' with \" . \$Timeout . \".\ + \");\r\ + \n :onerror Err {\r\ + \n /ipv6/firewall/address-list/add list=\$ListName comment=\$List\ + Comment \\\r\ + \n address=\$Address timeout=\$Timeout;\r\ + \n :set CntAdd (\$CntAdd + 1);\r\ + \n } do={\r\ + \n :log warning (\$ScriptName . \" Failed to add IPv6 address \" \ + . \$Address . \\\r\ + \n \" to list '\" . \$ListName . \"': \" . \$Err);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :log info (\$ScriptName . \" list: \" . \$ListName . \\\r\ + \n \" (\" . [ \$HumanReadableNum (\$CntAdd + \$CntRenew) 1000 ] . \ + \")\" . \\\r\ + \n \" -- added: \" . [ \$HumanReadableNum \$CntAdd 1000 ] . \\\r\ + \n \" - renewed: \" . [ \$HumanReadableNum \$CntRenew 1000 ] . \\\r\ + \n \" - removed: \" . [ \$HumanReadableNum \$CntRemove 1000 ]);\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err;\r\ + \n}\r\ + \n" +add comment=\ + "Lookup IP addresses for RKN list and add them to firewall address-list" \ + dont-require-permissions=no name=AM-RKN-dnsLookup owner=AM-RKN-dnsLookup \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + source="#!rsc by Vados\r\ + \n# RouterOS script: AM-RKN-dnsLookup\r\ + \n# Script comment: Lookup IP addresses for RKN list and add them to firew\ + all address-list\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n# Script description: This script is intended to be run periodically, e.\ + g. once a day, to update the IP addresses in the firewall address-list bas\ + ed on the RKN list.\r\ + \n# It resolves the domain names in the RKN list and a\ + dds the corresponding IP addresses to the specified firewall address-list.\ + \r\ + \n# The script also handles CNAME records by following\ + \_them until it finds A records.\r\ + \n# Usage:\r\ + \n# /system/script { run AM-RKN-dnsLookup; }\r\ + \n:local ScriptName [ :jobname ];\r\ + \n\r\ + \n:global dnsLookupReady false;\r\ + \n:if ([:typeof \$dnsLookupReady] != \"boolean\") do={ :set dnsLookupReady\ + \_true; }\r\ + \nwhile (!\$dnsLookupReady) do={ :nothing; }\r\ + \n:set dnsLookupReady false;\r\ + \n\r\ + \n:local arrRKN {\r\ + \n \"telegra.ph\"\r\ + \n \"grani.ru\"\r\ + \n \"xhamster.com\"\r\ + \n \"kasparov.ru\"\r\ + \n \"lostfilm.tv\"\r\ + \n \"rutracker.org\"\r\ + \n \"lurkmore.to\"\r\ + \n \"dou.ua\"\r\ + \n \"youporn.com\"\r\ + \n \"pornolab.net\"\r\ + \n \"crimerussia.com\"\r\ + \n \"telegram.org\"\r\ + \n \"api.telegram.org\"\r\ + \n \"telegram.me\"\r\ + \n \"t.me\";}\r\ + \n\r\ + \n:local ListRKN \"FuckRKN\";\r\ + \n:local ListComment (\"ListRKN managed by \" . \$ScriptName);\r\ + \n:foreach aListItem in=[/ip/firewall/address-list find list=\$ListRKN] do\ + ={\r\ + \n /ip firewall address-list remove \$aListItem;\r\ + \n}\r\ + \n:foreach aItem in=\$arrRKN do={\r\ + \n :do {\r\ + \n :resolve \$aItem;\r\ + \n } on-error={\r\ + \n :log error \"dns resolve failure [ ip - resolve ip ]\";\r\ + \n }\r\ + \n :foreach dnsRecord in=[/ip dns cache all find where (name=\$aItem)] \ + do={\r\ + \n :if ([/ip dns cache all get \$dnsRecord type]=\"A\") do={\r\ + \n :local newAddress [/ip dns cache all get \$dnsRecord data];\ + \r\ + \n :do {\r\ + \n /ip firewall address-list add list=\$ListRKN address=\$n\ + ewAddress comment=\$aItem;\r\ + \n } on-error={\r\ + \n :log error \"error when adding ip to list: \$newAddress\ + \";\r\ + \n }\r\ + \n }\r\ + \n :if ([/ip dns cache all get \$dnsRecord type]=\"CNAME\") do={\r\ + \n :local cname;\r\ + \n :local nextCname;\r\ + \n :set cname [/ip dns cache all find where (name=\$aItem && ty\ + pe=\"CNAME\")];\r\ + \n :set nextCname [/ip dns cache all find where (name=[/ip dns \ + cache all get \$cname data] && type=\"CNAME\")];\r\ + \n :while (\$nextCname != \"\") do={\r\ + \n :set cname \$nextCname;\r\ + \n :set nextCname [/ip dns cache all find where (name=[/ip \ + dns cache all get \$cname data] && type=\"CNAME\")];\r\ + \n }\r\ + \n :foreach aRecord in=[/ip dns cache all find where (name=[/ip\ + \_dns cache all get \$cname data] && type=\"A\")] do={\r\ + \n :do {\r\ + \n /ip firewall address-list add list=\$ListRKN address\ + =[/ip dns cache all get \$aRecord data] comment=\$aItem;\r\ + \n } on-error={\r\ + \n :log error \"error when adding ip to list: \$newAddr\ + ess\";\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:if ([ :len [ /system/scheduler/find where name=\$ScriptName ] ] = 0) do\ + ={\r\ + \n :log error (\$ScriptName . \"System Scheduler for script: \" . \$Scri\ + ptName . \" is NOT SET! Fix It Now!\");\r\ + \n /system/scheduler/add name=\$ScriptName on-event=\"/system/script { \ + run \$ScriptName; }\" comment=\"Update RKN DNS Looup\" interval=00:20:00 p\ + olicy=\"ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon\"\ + \_start-time=startup;\r\ + \n }\r\ + \n:set dnsLookupReady true;\r\ + \ndelay 5s; \r\ + \n:global dnsLookupReady (a);\r\ + \n" +/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.4.81 comment=xhamster.com list=FuckRKN +add address=104.16.3.81 comment=xhamster.com list=FuckRKN +add address=188.114.96.1 comment=lostfilm.tv list=FuckRKN +add address=188.114.97.1 comment=lostfilm.tv list=FuckRKN +add address=104.21.32.39 comment=rutracker.org list=FuckRKN +add address=172.67.182.196 comment=rutracker.org list=FuckRKN +add address=104.247.81.99 comment=lurkmore.to list=FuckRKN +add address=8.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/20260505122002-Diff-Config.rsc b/MikroMaster/history/20260505/20260505122002-Diff-Config.rsc new file mode 100644 index 0000000..1642f77 --- /dev/null +++ b/MikroMaster/history/20260505/20260505122002-Diff-Config.rsc @@ -0,0 +1,12 @@ +4165d4164 +< add address=104.16.4.81 comment=xhamster.com list=FuckRKN +4166a4166 +> add address=104.16.4.81 comment=xhamster.com list=FuckRKN +4169d4168 +< add address=104.21.32.39 comment=rutracker.org list=FuckRKN +4170a4170 +> add address=104.21.32.39 comment=rutracker.org list=FuckRKN +4175d4174 +< add address=185.110.92.41 comment=pornolab.net list=FuckRKN +4176a4176 +> add address=185.110.92.41 comment=pornolab.net list=FuckRKN -- 2.52.0