From 7caca7e623e41a0a2791a6f21f301d3ea71bdf12 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Tue, 5 May 2026 06:40:52 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at May 05 06:40:52. --- .../20260505/20260505064002-Binary.backup | Bin 0 -> 270775 bytes .../20260505/20260505064002-Config.rsc | 4506 +++++++++++++++++ .../20260505/20260505064002-Diff-Config.rsc | 20 + 3 files changed, 4526 insertions(+) create mode 100644 MikroMaster/20260505/20260505064002-Binary.backup create mode 100644 MikroMaster/20260505/20260505064002-Config.rsc create mode 100644 MikroMaster/history/20260505/20260505064002-Diff-Config.rsc diff --git a/MikroMaster/20260505/20260505064002-Binary.backup b/MikroMaster/20260505/20260505064002-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..cc7df282af418bd2b384ab5d09548fa955f773ff GIT binary patch literal 270775 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 mC_qQHB5whS}7UCB! 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%0Dki@_KFOcUWho{WqTZ7HmH55t zel1rscX8VSFhx5ct&#Hbva2vUjS;>4dpE;XxJm~MBJNRAtaDq0I2rV;axgosZ55xN zOM@#gSioyPQ(j$4M$Te5Jxu~Wyac74g+sdo#dYMP1I%NN_N;8lughCVFtEPgb&U#x z#manT9lM~7J@sJrIkk#x*!%)}{iP(GX0&+`wl5w4Wa|fuIu^}=y>015Tm(vsv5cUe z$}I8?#HMmBP(1gAnT)TvhPf*_p-jdq&RBN8gOz`nbR$sqHb>rjA0s^cbkw{AUeuElJPp#j$#$5zY=3ufg5i?4 z6MykH?R%1@`kLMYn`sO5OiFPn?>N9GHjM>wIt!BDCk|+dStNMOEX?I3L3^5UBoZt+ zhrVYN&{ZJ8e_l6oytvD7(92iA$kA8Etjah{p)iIiv+nL>#cmO+S7Gu~ur~baA_c}2 z3J1?IIJCN)1g+vd;EwUj)awlbW(ZI)bCJOd#Uzfw#ro7qQ0P+cN_vG+6pLVDk4zSL z0L)(^sY~V3^Q6QRyl~3kItDhcMKLk}s?JK-$7{FUwg&8d5(CG8Po>%GVpb4QP;F9qrfwfoYT`KgL9pD@z!5Umqdm`s)W zm=&lfss_yKw}%u8dTD5;UcpE5S=vwx?H*P5sn~6DH~Jsf!&Nk;C|Ne-r0o5~z4lBT zEc!fN2V7H?NKXb=9SI&Sb`uIw?xV|QUew;MOmDpSD92tvHOC9EaO7W%$f^p32~%Rt zbpNL@)#3pdO13%>X}G0o{44_41giG)YCx~m+71!-K9kfKh#U0%z9m>g4Gp?_b$8CQ zR!sh98JA_n(_K)ed5=%9`}AD%eP>T2;v+6XEhEt#G<#uw0^bFRz`O@Lmh_#Hp&l4; z8xY_pD{eJW9uvoaY&zlA0_)K>)|*FqiGP{o_PwaALP&l%wUl$)f5%=1p=P;&Ok(;j zqs~X96zgI7ALg0_lJ~SoXYXV6^>;^#6ch>3TQ&#-TtaHcxf{dn0nBjUnYcHMh}5BU z%`$WWafT=rf|4GI#v>&$9;IopJN1+iy1`~VH%b?f<5;9b!L^v|kH|YrjU7F_=VhPX zcyhRWJf>ICaG-A%Iy_;&7NnLVj{G2EnOzM|6&$A_tI1Y|@40{@@oVbq%D}A1QhoqT zPi$D<_3facmpBS8`UaKy8pCTU-k=&ZP2!W@Cd*||G|v~XcKsK{qM8#s{u1=ySZr0n zZ{=ks=$8x)ka0d*MXTDui_*P7O9E5%3yf(QLgfW?ig#};Ju-@fnrF)^1EYbe}h8qds01F2KNHZU7Jv$lE;_!EU+-IpRv>f?Q>9(DX6crp`I{m^x#N zIZ(F;V5i0KlLrTX_1l%=59v^~HDO{iyfEim0)SD{Ip0GHHYfs^EIDvu=al=bsi> z$xp70q1$6D$Z#hhZ%z$;6o?F3g)5mIDL9HPlg8LWBCOXuz{Q=9Pvk?IDOS0$0~(l$OK3{+fJAg7 z1)T~|mB_NDFcCFFvJOXTV<8ox+^Hv1>7}rgv@-@+z2$x5F`q@t%A%rCP5XtTmqQ2) z%Dx!P-_HS(<&2r_&T)LA6|-jZI%Gi!$%8nA z;N1D;7WypUXghae3INkq2>)%AUOBwNbVsTsk~&Rn~_=t3i`3;Eq= zzO810zJTs*Z?!;>tTa?P?q91<-7c(2fOsoI&koQp%8P%k0UO%zan#6QkoN~tPNtFU z*&-_+dfMl%e*(iv=7SPpWj1y(odqUXO?BLwB-?vEMnDpKyr}A4d7SN%v8{7dT9VUk zBq-LJM1d#NgK~j5@|J)oY)!Kc$Y)k4@6MN8f1MLF*M-5QT=j;U$IsIujtYFnwT_(+ zppH7Eoy{G2#3^EL?8U#WBz!C|R@0T|9)fYZ0#M&$g;H~2WLzmNz2!*%uvT2$&dXVS z7c+i3n-5CKoB#8$QsEg}JTuPV&DrpP6B?Y;ovCr`-k8v|JzjFdl6$!O>dxKPsVulo zPm?Q%`b~bl__fugyFXIN-oK5?7%Mt=jLIz7osM%Rd#_2m4QtzvjJ+hl?>tsP0*kR> ziR1f~`!%!W8RV0WfU|69Ku;eCK7NvMV~srtBUItbCgTVO1q(k?sgCI>M=E0qZ(L3U zC;YA#Q63fILszbEs`mNwfpo0cwql1>b^(Akus%7}JY3>U+}%VtLY++|0Qr7eB*_8> zJpAF>!AU<3*BmRZ5>a;*)_J6**W0kfsXXI=D8YTx99@1nwp!z7kGRTL7=1p22c&i? zMd;2xw?_80h0cMBqMI?{IXsE?E43O@#JEjU4CfmXn6WHkwHKc3;wIZA)noFvKi5nX z-XJB=-x4*a9|9|TgGZClutx#_;r7IIIoD5}0kk1?LvBZGcG>MK(op|RP3d7|o0Z)} ze2RCEstC@p)^Vo8hfm!~7DBdsEL}AnI?N#L{1D1o?TId4a3?(hod9E{{_)C>H{lv1 zirPMGBHC>?gzDgnkqWfF_`&Ij!wCTTVaC0N@?(x%r`4PJB?!Hd1wfT=N-RqRmMkil zIy2cF{N77_yIXRdR4P6AY*>M+Q%k<7rPfnElARYttRVa9uKJ~K1tn=8P z9)KFsGoVOMR+k9i-05WIUY(aCqg8+0F!noL6`pz2JjtHM`};S&+({+j`~;~TLEeTb zTdcwiT}!zoF&wV_rYqqFx_2=%^Z`#4pwl&g{ZiXam=Uc{n;0Ak%yYU#P##mKfVwz{ za7bXkI1ouN=TrTJv6pm1jwPR~ts23>k5nlTL^cazxwChmra<`KAphnzi@;}&UgB%z zGe>*_%3Z`{fTit^BMH!45{}pO+{VIH9(GxsFI$nDb|Y^rz<4tb97yPc+ZlVmbF%X3 zu|@Ap9Y0Wr@%9cMUjC_rJCyFpjDOT_BmWamVkOW2;%{BOz@rlZliYc`U|LzNJ$w<3 z_fK-GIvB@N#WcF&P4+S|;LsC6d(>nT`bBK9fIgoD2v;puCn+JZy`RU~UcT zNk5ymNwL7F4h!g(mf9bs65FfCRmbv~LsIrIxfN3e{$>peP!IoN3h%7z+f)nZZCOy5 z2e<|w2ZICa_5$%Km)%m}6dbES<+6k0`iX^hNbS>i?Se_Z6l@(h4ijsEaYCr?qAp>? z3RPwvq~uXuED9&SG_GS#D&wd0gAtV&1Z~EKKl{uZW`Scdz z{7N9h$reKVuAkyMaA)bX=7;myP<)5Ein2(#GF}~)ECoG$s>>vG9-{{ z22tJ>NyFg@oW?yt>s;&lNkSYE{%xpa#7Tk{iAKsxy>QOHjM+#mfIEXdA9!xYMSPK3 zl##m|ic+0hK3bZX9QUDFQpNqWUjofoJs6!qOEAHEK4G8))%!~GEa$i%0WCuim9E&A z+=BxYsK>^r*+OYfDTy2HZfM{6Ex7R7C_9I<3ZYw?ANdjbZka^qB{DUWhlcORp6~BO ze)OKidk?C;wZqfgZI;Y|dXa!46>>?u(hT{=Y>`{a)T4jAhzbT6?}q`V+06-tm(8B& z(|UFq5Yvs1Kq&zHFQt3LAXg)YyR*rkCJe3jil9+UoK?zuQFxlW{E!Dh8E;I^vFf0rjk?mZlKbJzjrtu}Wk<*8p%Zccu+8w$f0}hkck=m*+ehoe*o}8>W)gu*L0cB1slf7qloHpT5q578DB|hFFt&Hxhn)^Ve)-2jgbvvYgi= zj55&*Qvd6xE?)yU{U~F|d)qt&@(VH|#Zty2oix>w3(Yy>W*Wp{gCJEfLLp!)d4&QrqyfQC)DKfXu)%Qx!zu;Cp0jzU9s;&d(>lh7JGO&F=*=@t{>&dMSGh zFTr5paC^=J8#v3gHdP?`=7GeMQ5AS^ve=H}VymwY(UF>w>3(c~kfyaPfMFU7Yf-~A z0g?bC=fW7AmSn^LO_;drg@H5%V?yFh`8H4b&IgNYxS#S@)x~YCF0GCIZZXnqa)hvd zL-9(!?5=SV;aR0be%Y8+10`i^W;4*JH$ppkP_b3o?f+w}zFa5R}(7DT8 zr>%mdX|OAgdT*-0kq13sSQZ_T^lwzl*Ny5KEjHyw&zfP?Oe_Yq)cMcEXCTU@G1KAx zVW%YPC07)tnI${=s?6gq5oH%BCh&9^f^>-Mh%@qb7^%Yxll}tTYV13r*>b9iBP4Y~ z=p#_chUQpKVFebYdrQNIZ^1v>Ndk%c(fmZN=Qn9f8H(z~(%Q9pAsB`Whiw-akDai4 zQ2*%nej&-c5J5MK#rV1;h;)QF`m=~cy&~3?BVsj)nRhXbH0P)>i2xJoHkH|trn6Y( zUvTbX74)wpeD@TEFKVBlxERFj`!S@IShTdr7w#o{SEoyJ4GZ^gjP@E2VriBJ*_>yN zqSdSIF`f&6TG0PB{S1N1f>3)y*cwc}58$&GQ$JS@0gT%~ zc#KFXkSOI`MCS*Qg+;DBzAbKn#0ko>nqWQWZy{85FKhe z%`P(+HeC(qoCbZ9d&lTmtV$zhWnfuHwjclwc&?d~0ezst?s9<@r#IBC(QFR=487`Z zsz#(t09uz+#m`DHCzH|MZQLY0k{`a>8NW9ro8w1%hZ6W2haLGG9Kv^SC@jMKcjg9# z$_Do569@`+Wh5yeM2s?n0>bnTNNh+*7|;s?3tr6oZ-UG}%PpzT5gj=P`*xzm7n0>9A zujm0jjyEJ_V9Zg*Omh((qeRE3HF_0JS;4`fAO~g!Ixvd_@Yt}w9kfFaIrcxX!X>jj z+fC0Fq1K7R++eR4Q7Bg2bW3D&S&cRI?+=wUq^~b*eWi|`YS}6yI(Gq@S3P#syP3K} z@Qi%aWo6P9;&h!H?()B%<;}$pbz1RDf)HKR8JrdNTw@#RB(wNm;W3R#$O_?J52Fj+ z!6UR!$hnbLe!(-B0@lWt{RJrSd*1UOD%&z$DPJhfs>`-lcsLz5Pj0$xM%OZ^zJU|5 zN>c{672hCwF(lpP!f7vdY5x`jU3=*5OX{9UV~{Bw&1I~3N*{!@ zJsfK5`SQf(8cdyObDzvv81$FAt8p|GFbxiHVRoqEV*>(kdI7WF&DJfUN~*Djc~?pJ zE4{IIr&Do1l&|C^@&LPp`jv<_S}2!RS3Iuc+aFkX_9H#5egs1W` zz`e;`PBo-gV%(p!&?X^Co)okei@rH!P5UzYd}c0ThHG^irN7nGz(*rU#dQD0RGg#I z?<*>n40Qy9B3^BbN1|$%W@G!saat=#$Wi)p;YD-n{_|W)Wlg*)S|^)#qJdj}W3v%P zV+Z5HD20T1VahD%eTgQZIp%lo*Ru>`vWDVlRUn0HOZ1uRS$+7Z=t@SH{ z+vCo8ro7?}joCo$q$XbpJG(pPm-h7IG2L9bpdrRuWnkMK?j?U86NV^DI6dYQJGv%l zw>{IMI*k@i1b(oB2;buTUR4@lrUI7r@&@d!y9I8RVt&iS3+yh9R}f;mNI_n~2mAm> z}w3?>hPHWFTf|+18XFrlm`k_g@#RD$fA~iRP*owRQkZ;ARBS$mpDY z))=ro`Z_y%`5s~eG~%J8OO5L3p3^CIE1e+JRWJGsR69pt**k+>VsBeJUF?hH@cf8c z3PEsOB3~9(cxolGHU82yDjSx4t z;Dae&X)o;M9ZbHw(qg2_&q0HJr+%(w09gX`g%-?Pk7FRIo*PJQQPb4%RV4anyu?Hk z;cYQt4@BXbG@Y_^C{aXI3%eur2P9fv*}3UVACtM0%osb#SpP~jUWUm z)#aruCGwazp7Xd^?(e@D39#CKAEBig1G!Cq=)`m~N0tzSy}x8rymlJ3eWz_93JAI{?yN8- z_V!vcP$hb2_}`fc&i13XEpkz&C-75&Zyap;qj7$VN&%)+)W6Hb4nbU-=|A9rIQMhC$U5Z6<*fekZwW-3TXT6LuPH%>|n)1K}0wgML24=!kKLnLT%muY);n?Sn|pB+*hA8;E@^{`s3bK{v@2B@f#d|@^8_vtWbbQF#M{Od)w7g5;#}@q9i*{V zXm5E8sSJN!`eYis_vrMbCa$7ipaN|z-{CK6V=+^Hb$;y0g2 zn7oKb(&VzaYD+m`AmuC)lP)XLh&vkrY!u04@XPfo07szFJ6^LzR_ZtMGH<8(V`>jO zziej>bIb&*hr7ry=f5m+9CVV{3|GCji5D~%1-|U6kBONN;3azseHyq?Q=s54Zof}U zzkG*CI`&PFVuo)s1XK?P-cG`2mDym=7VJSd# z&3x?M4Sx?V7+9_0DZy-&yKYL_a|p)#^;Z{1n-3{7W~K~CCA&VaIFDl4bi`~%ds6fz z`<4H?rp#B58V~HGb|x<_(s2&F^Q8Yk+%zxST2(#{{`5!bVh*!beg@P3c>yeND%Aan zN;cF;+7ECuO3N)t@Jn~LIR1Pj&2KW@E={~OBu(3L^(WKEOZ50JO)3svUW!nk^SHlv zs9?6%-?#4s2`W3~3qDX;2~rQ$GQ6pcU8OwRMGGvy1}G&$4-J2rZm@r5=49eZ$rI0A z#g6E}_N=j=mY;HDQj0^g9J;8wfNU6u=OgAXE@q}6zvuEnRr8Eb+DHM$t2uk6vwxIZ z&rrMbsY$5pU(}v%7mz|LQO!~QSrA&6(x-{3r*(RbT4{Ijbv(3^+S=(PFE2MuNqNiO6{z`+L##NC7K_Thp`N z>CY)J{*UAuaKLOcHtP7Y1uTuoL1m_a-l&YZWu%5BhgqbHzC-qKY8)ALsqXAg%9ERN zGK4CyN{sOPqxrMi7l9oJorSuaxy3V7dR903M_=EV$S$(7^B*rdh!kT)f8FZLSB+9} z-PRbMs4g#@Ri~n?JVbfPR>?GH8lkHQbS$+s9O?lqtim17JE;{H%FAtXZxVs&hp%olpLNrkjviUS2k-^M_DX`N{!NP#Wo>ziJOyQ*9mY zgFlJ?C@PgD#uUw<-}a@|h5A&ndQc6C#4l{v{M5BffLKCRJ|}~PVu#X_&HMjkGiwLPMxCrVUJbcD^5nM;<6~|-*q>F$Fkh=9X4Lp4*y&G(<(7Kg8(^7la8`Arx!JmhWj4MlZa~qR7bbw9#4K=WuPtlp>a=5+Owm+?gzUJA<4d5GWAla2t-1cN@H@6Z^!R@&6Ilx>Ep!=b?v$( zjpy8=DV~|+K2C|>nk;!s>JJRxHO9kU$%h?ebX!gl=xQ)k@h6*o3P{w$OEIxUOH`kJ z0*FW;PNKrtq40L9Agz^>e5_bws=) z+sLcHwSo~04i3z~Q@vzfQz6;-&eJtHrb=7)Q@UWGt7k85tp{`l#j}BjDe{xfyR)M_ zoM)(254-7UaNml*!MGZ0E(42AXk5)N&jxtya2!ByFBAEYH}L@TW@co>QVSPgKk-fc z=hGvOV*xylkScG!vDx<)y_DEe_lHmvRo9%2B2|K>`38wm?m#+|citVV@qZ5~ud|Cw z-UvPk1F_C=!cDR)tYBZ^9M-ei9wuCGQ0ho_?YNrCv*|E^+g7tV3~N?QOQ3VY{oyu< z5mJBuv!x9jFNBNuu^;_(Sl`a$?3S12tk8LP+je+n9Bu#9CbcM@Ux=QI?}iBzE$#f4 z?JFcPBL&!#s5rYJ8cE2r_kg-;_s&I>d@M8-!DMVCTKLZ`HkMLrr1Bg*1N_Q96OOoq z5I&MmkiQE-P8xemPREt_WhqyJW8(r0VNMUUW!NnrJ{;cdbhX4w*t?#hkVc6V5Gk5^ z-#po~ax`?YFiL~JeiZd#xT?ZvOt9`~HALA-)8!`iz2UDel&I#b0JfW-G^jcPN`D#= z$f{&m7ZJtFy1?Eb=MtFr^C0yag%l_$0HY{ZX8j5)3`vdjMSv`?Dd%?1k)ofFrqvJu zF5Cpc5fGldM;OhhU3L#4+P4k@qn-W3LN$Yn@FzvC%4JL6Qi^>gt9K-*h*gc>#;t}}FOP@H9Tr-*4Tp%y7sG+qY2u`*{zz|AV=?!3nA z6T30`eAOc$ca4yo%5MDtrDC?Jv+RC&d2ywf;H$PJ{5flFf;Twatd26}al3fexO(j- z7b3u6?2d=~mA3|oO~)4FHi@S9h4VW%;6*22QJ&8>U_YSbd-Ujcr`v7IXa}C(@3X%q%l{y^4@*P9?U=KX8)c~ zfA`VjRSuz%Js~8G=YTw?au}|9(CZyuYXx@gv8;pMt4%sO8M9%Q%wkJ_^?llQ7 zD*R^zchvc`b8!)RZ-SC62$u5nijmzUu|iv+MvE*inpc+?$=9l6l;5DqvKO_F{JQx&p&X zi#E9zXR{9pz5)4zxgxOcHLEq5@f+VI&3W;8QLk?6D$*<0R*%p!VFq(tC{%TRxeD8= zTC{D$f&$7HL87SC=Y7!5zdrH(zt(JXZO~>(znz_?Ac5Mn0v(p^oZO z3h%#hdV>wJSK86`e;`A|ei$Ng9froAq@DzN0H~w2WuJCtx7&rxUuc@idKKv)fB=BI z%eWfZxrM%;AtFKe8J77{jPx%k><@9ox`M@}o(j@>G+%?l(aWOxf&x_Al4~(|nV&<% z)YPvLHaNMvYQ7TM-ie=`nlX2bs^!p@lU9ZV;}s?Da`_W73wQKpn#qYftTrm8S~h+d zu1$(?`bFL|_^&}m7k@R}Plp~_%KCc5G-&xIk_v$GcIFGd)qPyXCq}M&SOIND0%n|n z7)LBGa#$_LH<12-pT6~jlY{!=sYahU>ryMA`Pnb`T`bHCUF7#PfN{KK^^Zb#Y$)@n zYr|6?Q#!})F6i9m*}sB4`&`y|gcrCfd9SY#oGzO1RG`GKBH!nG(=mYkxMYh+{lq3W; zAJ^g$VjFwCB}U(t9c>RS8QwT84fciA|6{il0pW;k%QY)vCyseVNwb0k8=5JGP@o;! z(*C+EggnsLIYe;^vM13_iL0`20&*#H!<|W9aAL#;i5Swz9$YSbbc)uEE$fj8bA)=s z=`hs63EG6+6;Kb1!Pfoj_j*LV)6bi+fy=KU5lhx0iS(w=t z8Q_k83Mr(=aI#9H|1osr#V4FW#5-muSrGiex$?hH5+Pp#qz!Y65j~ZGZ^w?2_UVQL z;+?Jgf^p8iws@N;91?BcSiP7;LK~z3hB!FPKkbyxo;tkBQ!JJ8O@M3eGqPP8o?C2) z!MOuP$(Q?Vp*4)mBXk%HtbXQ80db!Rzvs23zQx`tM9_7_2xvQ?gnqlp0YOe?=`!n> zuDY(Z+*Z@lwHZtdVXQK}APvfU06loUgc?csPLAl#*@|;6FMxkBoCpv+ zGixGHkz$2aH_3r8tnK99H!z|q$g?K=Z?tsU^HB)+EGVSPI|HD@y*wBxF>Bl=)57MY z>d6)^T=OVgk$#}F`G3~yAV2fAyO zDvLP!ngn}XJ;7|?{CR77oDiU}0UC71Purbw1MsKz`cLjJ*yJeoP z<%e@NAELU&i)*Pq;)@+fbsE0kJBn<%HmLM$-QGo(|NGJAq_Bz@f-0`5xH$I8Pxx!a zOulHaWsFhHl`@=mWVYZ?J1@$&h+2-t&T%lMdAxVA&2^b>`|TDjRp=?MrJEVU>A#9E zbmcWVx#B%T3K}Fb3MXR6Pe3mqMjl22=4W+PId-xNLsRwyb3=!t3@3!d1#=eKZp$AL zu<6!98#0m5^2+SB7tK3Iikb-v2!YRZXq1%JRD118@GIz;scm^pHvpP{TUfivGbckyX6^SO{@;A+Sn1;D~<1vyMy{cm~fgux|pD z5W5(j_6pH(ZLmw%Of6oZ0lBMQu?7c|!fM>{nRB*~cx1q9#VD0hpaiEXofjpBn)+Hf zq}~aNToUp;9F})FZ-*|6Nr30xxHP3IOsG*}I1Y~y2%q^uVEzJ*snTwBU2)-KtfKvT z-QNiE@_FbsjRqJW!{02`b{OmD-_leHMjhHOOF5-Epgz_J?!Ys#M{MZ1d-z?5O7#z6t+!(l_uWY03=xZ1@5wxc6Q3oB&rb6%mn`@63Q0o29 z0LtLKdfO8UJTyXwr4=(=mh0HI+R$#8p7wz!I%dm^ilsHCwv(QU&c|Ckh#PYFl#J+m zi^LG2p={3{EN|Zn%N!8sJ$@vTji3+U_dxqE%Vta_Kwa1i zj+&=YE9)|5oA+x{K&>SEVd4ylBg#YI5S|R=%v}_*BP|2S)TJ~`W$^8@o4T#bV z3*(QPgHbc)8V>%pQyRFGL=P3Q%YBy3qS8^~OvxkVIYTfx=2a7bF55?3hMakl+Rv$u zrq^g=)wrZZr@N^0`ek6xhhsEGNnHLyy;|T^_gj_nZSB`WcWd|wxhZXvR-nwi>0==5 z-)BVi{PA(%3@dKi;>VtqtcdMKj>B~{OaXr)11`M_VZ;ytg<9TrF@Ex;T}O%D`@>2a zV!#X3$>oQl9p$4S06*v{eHIJ`9L%NO-BU%huQD|EZVmI<|06`_GACn-VM%0*q3c86 z#5Y8_NXtKmHKsIQoKlrH*aJwx|N5GF3|jh`okzQ>kelu_FOJcz^o_EofYX_$b`=i@ zK9h&pe$e@k(F^DI)O5$(YMtg7S?M!&J)h)*y!luz?LQPT)g%8YNz*>{Fz!4V@Q6gm z`EJ>VRi187XMO}oE&RwO6;U@hz{~QoV7AVqGJ07X(xh1b(G275MJw=KCe4`>8GmL- z&Qni}tw|$bGbSG^HKYp?u}iF&K3P{4Yw0haO}`_wLD5QkpD7JkZv)}xo$#KOPh0-L zZ1XFiA*g{XK6-o^IU~q)rdtKYw4|j!D@F}6^&6_ZL<+J6sH-8ff0v%rqoqZk_)iO{M)Qnq; z%3oQG(=IC5C-rj^KbnpAgm0z-RTuJ;dLjh%q5E91Ya7yMLL(?8&uH2qI}e zgYb0K5h#B~N0e9PegN+m?0vdAzyV1Sn;GI9eF+vijod$k;1#Y4F>WA~7QFXIMli|- zR{Q$+Dry=L5E|Uz!qd{HVe(tp+=ydb5CugGQKb;r49s^nu|ToUO#_SE^Xyx1)ajfJ z;#R!7C!ofa{TkDDnAgXv?wbRKmEqbckI9{^a6o_Bu^7Lvx3|g$1D>lxL+mi>H~Ai%}cE?nfNF zEwXlfslsI&MUfM*p)Pq?E%g;S^ln^BAOVAN>=*#W9=N#Z7WE>+KSK6xRcYmgLa@#q!{AI+LWC29YHg&%Q>2M$%x>jrVar^kE zBZsG6e1X043vYAqb#+|EuBadTn3tOCg7&WFr?D%X4{+O36H#Bf-;)z&KlRRjeX;^K z?G#%*gYC38;^$yuBrB8$-5dwsXP^Ax)is+cD}mmcx7A&Ii1R?246DFh@aTip3y2@m zEazUEUf$AOgWyK+qlvVJ5(tSYcnY?YnHFxi31C^!vSl48n`TAM%IQ?VzEg$)?R{0-}3wy?>n6EE7zYpK5;GC7eR_vuAbU=7aNo28BHNd6J1i# zd{unlSne^4*3=(%BfJT5K`nrY|4RyZY>7)4VvCkvn`p1w^VHaXXyPJQAC<;|23PFw zDy^&y-jhd?f@5mW!B%9{gt`T|s`5qyb-fY|o9{2wB0{Uhii05f`b0JD%Gt|Kx~kM( z$FL!L2VO|W(J=<|I0Y*1P2Z=jSXqbsg;WnS)6eVFe4slxEDfiHh3X@P z5@pODCtF}M-UGfP7z{)Kf{e3T^1v@WdOD=3lPs(>rw;{f&G21+ez4XhtQhQlZC3ie zSVW^e3;(f!B74MXPwE=senx`(24T!4zoMPKsSLsK-+bilDZm`tfi$ut<+7GwdKe<1 zodLN06u88UVyT5+E9dFwm6bm1vtbQs`1*{Y=px6tDctaR3m<_t{jwFXW&p*TGpsZz z6zMQN=C0klW06|br#gwXfjHW zlS8}b>3#=+v+f@JKj$R(08;T8ar~F)`;3!w8UQb{4b(|u*8|NSFj^jh_I^p{QKwGD zS5u#x=%)dBC0218^NaZe8)ra4izNuQ#jcoB3;#$n6=MjPbH`mspZf6%wqg=yn4=bk zk$nnBJN6Wcl-WzXTQeD+-!;-b!T$mMq&QW!RhZN;23%6^jFnP)&*G4F?Fc%ANF9w# zRg$OwQ+K;;FI1@-6YE+@D)DG-2J8Y05n&4ztfkuM226Jxxow73Fzr-#Fk1VKoIz9U z$5?*(Mew11wzz7kkCJOMY@)G7;aB*(R+|>ero)=g6m@r&9_e!G$v(U|mA-i?tYKA` z(MQbScb=Y5oCdu#;SW@nHn4!xFVaqx%e3O}eKot2Y)tBi^uvYP-M>fv^xyd?ocwwc zEFoFy$*_aARAc)wG#{f34`FMvOlFKxhPRud8_ULY$+dLk~QPD{l->f&NLmhGacE;I%uvCstNx& zN@B8{a;ie)Vy`^YC{_8*T_v_;vIYTtbdcS>s6v2bG?flFl&|oT5BtsIHfGzWHm*M! zM-RaoEs-E&nMD@%v zzEFLsX~3dX7xR zDEs_FrxVh9k@K4^D0bJ{Uwx&hm#_8V9!zi+e_+%@XUi((ms$^vY?tjDoZD^Gkf7mwr}4eSZ1e`1{Eym#$sq2rrl%#s zs(JRfvAEj^TTV8YiCUL(T5>*ZuQ~0iHFTKAz$v`)hKQ_gq~SJOccspYa<*_p?edRT zn&|wMf=mJFzzohOYy6 zhrI-70@2h4+JjmrYeb9f$ee#D{VzcnA7^%C6(nwWadhvON4-OR(8xzvt{2P!fTF=T zZxNnXx%7Fty&J@aZaET5LqG`2mWWcXLPd$(rL-C29C_0}T~6U*5zHIGeGv=A z5+-c^bk+=Dx$%rQR-4G$f4rVX&P%I~2U$dXBWNl3xIIm5_1L*XW@c_iG!>&$=8muu zpGk?hSa*rOKo*nuLTbr{*5oLkn-K0_Up($7Ep|-H@se*l0iZJF7~H@v6k-8tEjP%3A7ZH4#y z_S@CBxDOzHue~ucbnnvi5+H~#6999W?#S=q%f<`Ran{9|d6lOOj3YYeNxQH7Xo^XN zTB04}?BlgG@6NU?@~(^c?7s^YB?+M)2dWgB4>>ZW@>75GhKmQBQB#%N_H? z`yTTMu>K+=FppLq6ZnNTUz60z1i0I>6^W)yMF+@-YmMhh)|a-&#E)U_`mHz^{$f3J zxGZL06MxHLv9vxPT!62&NV9r5J16-LX>uEOvixm)3LdH%yN}@A7kBR0bg>IhF5Hfs9|sS+HYC8LQkZd)2G+cy z7Q?o}_mMP99a)M?B?8->NDG!y)tZPJ@41nKo7E{lVtmVZ&rB*^>dtG z^Q=w9L=IoiA+Ye9m-LeT!gLQmorIFAI>iCAOMtvhWK3#H?n@Gq6=2N2=**}{(A5ri zY@q1C0f9x+xXRMuun>^htLbA)fkt?FmrquifERQlC%|X@34P~Hq{Vh*0JRR1+g`=EV4?phPrnJCTfR;W54wz=8r3gIX#*S$eIJfGPF zbGjKcg;zO{^N$ITKgmBvF9zCZ1y(F6(vY_SGq`!7O7`Bmrk9<~xN~y}-8{S&On=VQ zDDEB*)(#}qQbiIBk4fzo#gP?v-A`lBozDc$j6Fn^g+@)3MF5zt*AW*C z2i1I)D5+!$P6u=^K7d4)9|S0tYTW^C7)oLRYNWlLJS;*nmQ-onZF;VLQPm{~nY$-z z_`XC3pFmj`5$fvFXD7ij$$eNN32u2&!zR3Z!zV%HSsu_;NgD`xKNOhhAnmtg96|Yg zDs_jB4_V$@tP-!`yc2oC8)!0`p~y0Fl0fe;vW2%cLA57j+8_ixWVeevdi9d@OL`%W z)Fq}jV>JVkMhiTuH;hkm`WIe>q_BOzEO>JyM-8>LeJIjcdx*#N)1? zZviI+I=$EEU(36FU=`z}bXjg=Sl1;-au z{F?c^TqC1uS13LkLIqV8URw2QfE~X^X)Uq5HrP+_<{}})DmP4$c@>}|m&fhg zyYEE@y7(d$L!nK z=(D(Y`y;`!9R_!?VBepY6Y^&_gPRD8!9M+94tf&4+P?aB)HOYm9$lekEl1IYu2?B zxjL%H=rH6}1*tL*K`j5Ep`mMX%qfk+wo_#O>(l4x9U-k09LsU+S@dN#j`br%ouKX!dh4D3{-~PA zO$%#pta%5izGc(%Y1dCHf?kyS`PIzf4bbo<&`xS03WG`&CE$A-*3dsutO7A z@Xs#J55gp;$?`yrS@AioZqrKdD@di~$Q~0Gjr zXBZ9Gb4L)o>fi6KUyH4q`y#=AwO#}^1?*TF;%es%xMjx#kE@K5KqlHyBn!WjY#Jlc z6+Ha!j@|cD;ov!83Bp4I>Wx4$is{?qTwYoiQeNw2E{^6ae3h#e24MK9Nmp9%$WfRrpI~i*I8^3Oy6QoP<((`65jS%m zq{5u0Tr)E)0s*{dFV*CaV=&QD7)QDxiJ4Azi;B70Gh-s;DjVsr%XhUjR|sU~z@h?T z{put;o^K!@BVEqm5^BL`Z~#?&!xjXFB__lGI#6VMM{KDVxBWR*1aMiqBDNUB-4V*A zMmoMe8Jiaol+O=W6W3PDF!GPCMJVj|X+)8w_ge=Rfet?|d03wKmxx(5LvQAU90X$% z^{VNJSiK_}W@m=hA|*HSB+Jx?(c2twU2b*Dc~%5hM-A!z*Y`OJY$%hKzI>gY!u=W~ z5C1SA;_P&#G%zI z{m2&5C`68BxeKTcF@U-n(^J2Tqbcw#!3!%0GhD?BH<-73g{&*;*ai3~5zFbbkL@6Zzk^rAVU8(f zeSvvS*v=kjQWe)gmD7Q64gN$I(mlonacDMuU;idc%6lLUV0>6OE0eJ*U^_FR*YwSO zuc1TSXdBVtKkt}6LE$J{ z`SBD#?ok;V!3QnEUzQF z4JU+~d0)SzXpP$ge#{8eFefmlTH0c;f;=70vA)RCCyn1KKRg!lgrE%#j&fNSu*LDE z6Z;zaH=m}BuU=T5W?c_F##mn3%9FOfMp|h-nH%`jXaE5sV(2hV%CWPY!~O%Z6C38C zS^lRNk4kQa)5n*?l1rBgNi6@>(=6mx@7qo3wh9iK(Dbjg+lfqG=6n@3^B6p)tkYOIoDdi^uj z6A(YBqNjWa7fV8|l}Ruoy0}4c21mC#E##y8;J!eGm=2?tp?4rY12tU95j#mEuj2XH zeZs2IR2uQlx@GqETZ=cwKF0ImSmVEf+OpS&Mg&T66G9r}v&92A)+@X!c>tiaU6Hs> z1n9GEgcKZ5i2u}OQRDm@Ue_5q9&79=ZuU_gv}`ppr<$8I^E17@@Lm@`z|7>B8ow|a z->nKfnF+!PhijqtMV-ufaeRaNnSLeC9ZGBb$8N;P~h0=^`c%R@f0LXElZq8S73^ z+3@bgWi^R@J)+Pu%p*S@YQMD2vYA~q|Nq>J5OV1*)UE50k)kucH@)#G!Ggzz!wx~) z1+l~?O12bzyIEG4f28QfMIu=B3z9UDP1;qKvT(d3A_VJuDaL1w zS9?0NT9VGJ+pXlV7ggR^dWs!I_xRg3)YFJzvnxYYqgHze3M>4%QMVuHTR&x2&b9Rh z4q8;%EY`3X21L>6Gm_fvNObtupr8(V1ut75t#k)&IhLH&d7c1FKi|#aA=}~)001gA z3xX|y8Dzq_e&mZprzdqLnrNv1`ewr%3#vK9p_D=5V_GH?P_s4Ev2he$zi?Y0f@$A z8b^=eLXM=WiemY}!#yGjCk876NMpV2LQqI_D6b*0vac4*o_9_f4;46m*A0O77OyFJ zx$SoN$IdpieX4Jd^I4jX60Ih}o2;U&XI2Bs5z>wB*3)xqrURI=qgWzJyTNGRW#~Wt zwqKIzT(v+|8CzC%TK&|AdDGK6ErRj%FdM!Ctw-Ij`M=kp8LF)>K?gEbwxu{aKOYqE z?F#M@_saMHt3!^eajWCqO!KjBimZvDLjnPUMWokk8ZCpd5#M1w`U2VobE86B92PMb>r`|oq= zA!`+HNy|Ci>}&x?=}TyOgW0-*CVMA+{r#a~o>s1;lZF~(B(YS9*nn{LHk!=xkY97U zn#GmZJ3n8-%~G&c7x=YB3vY|Ih_jr%Z#r4fW6kG!1Ej-WImUjh^mu15t2>vxk@a}w z*HF5Z))D46*qVVEoKV)1#WKQ|Xhwdx2guMaq`!iE)+xhAeRS%CM zH0n$gPMzWgS|k|Z+7B`@HXz2k!R3rz>{r#JvlKV>e)KzT_xFn+yJ=`LgfVx6?olPf zmt=jl)heBo96%t`xYJ9vwe{8$PBl8|==zM9mu@*lT{6 zWv($62XM|`70x(k?#cnl>Dv$mE6i^TINX%iXvwVXpprsluzGw%cS!b@V_~GoDCV~_ z1{a9>d{V3gj0nSte(ZI5Ho+oKrC_Ags$hhjC!pZ(*)s2)AJ^efLE3^y4_G5=al0k* zuP%sSJAgmkHKzGgUs5piHO*NhyAZ4{LT8kXCwSwK%+%{^0y`%{g-CCrzr$`O8ikLh=g4 zxQK(Ev6o(E>`$!(neY1%lCahAfb0ShKj3$O^o_zWE5FHl8Fm;V!!(B}IXW8&g zY_c~VBmet7hw~8d5vJb%`}mdPu+@y}0jyE%q49v{=j7U2WVn<}Aymk^*W!SjRZo>o zL0^1^jB@F%p)Uhb89GsMjglMTY0a*f#8U?7r#3U|J8PtUdLd)MM!tp}k5onJOY%iO zHCbY8L%zr@x0Ef`L-yp$Xv0GeWzi6t{B01fov_)V0ZAz>A0{M$wjcE`#V7VvA08u8 z0NK~_8R`$lk!tI>cj7^pZMZdO7;=dGxq~BStysmH<>O{9ha}k$!0N4zVDEm)mfYBe z_1|e<<>nOl2~wx9qW9iLWG2T(h zd<(h@v>%t{D@6I$qkmgwbH}+=BzylAb4Y9c|Dy*9QQLEKp$I8x{u_Qn^?ks)YVPNRRb%i0DnxJk%|7IQ`(FxUl5R?rC z>%%W&zvucJOxUJelUp#E_6;Z;n@MWm-Gi=*+MsYC$Gt5C^=MDQ6PxSDdL-Q^cO~3& z0DB+C$LsA=KMA(Ki72s)?+8n6QajWoJ@GzDWhs?J^$gEPq21Dw+ck#)-E%G~zYFkj zr%Z#~#bF(^sd3^5mV$`K`sV5qOGs7Q7rE4kK5g-8SC;Je-`Mv@Qr-EZa3Ca`lny%V z$4?frwj^5n%zdiGh&zlLW?83ttCOzJY|aEyOE6kr#V#d#Oi7>XftvBPmyQ6s?9l7v zT5+D&i8}3`0sPSm)9!FhLMT!&s? z4rvBI^B=?;(R$olGLO5r!I3|YA0GeJyr!lT*ycn3c%0MYnWJ{4w0(4^tmUU;k~hnF zJB5GJZwDnTn4RGR@Gy>^G1TT}44B?eShkZJ(>tuM9yk@Pn7aggSH-qiUt^@ORMWB$ z$s}@YZ$h49T+Zw8`O72*)Zi|Vd2-mh?&Ogy%^^fLRD_2veRXJ|mw<}{!6?04WXwRO zoAKgW^{Y@W7iEb19k}V@Ti9`FD|KcZIVcU_xcP$H@ODREMk@28r)f>^6i?3=1jaF_ z1)#M;t8)L?nhRSiTZ`Dx1g#2bIekG|Hzr`eKwPfBK3vIDbrmbq<$n8`)qqNA2bkW3 zl(3D$zcC<0|sxV(#G_rD@(=0XAam4aM!9EY> z4TpNfJKOBhv_>s%ynXHjD>rN_K;1i9P?F|kNO$Lwj72(-M?xz8xX$92xu=6FF|=)R zK5^w_u|{|)r_8wj41g>0^X&;zHIX4?&%)%eI=scui;HP6&+Kd-u2~W zwX5R?O}z;*25$)pBu%SKM4BiZB^T)L9fNvrHH$EF_E!YXX!b3@E-q{bkw>x)<8IBF z&jB(9O9fpbz#R*Eaeb|=1Ho1fTT;wlDRSEPmGN(#t5pv^c{_)eHAMV#(bE7wIqz}U z9G3U)pdBS5k~6cC8vgF-gX^~?B}jTx3KQ@Pc$UQ{^!Iv>H)Qv(c6+uPelnp2>p=>h zWs}7jNDN*GVe8NfsV;nCawfU&mDvnE<5vRcxYv#wBCxXaj$Yp_yw(5r>o21)g5~-> z+i+v^W6?o1JqHtyY(C%FMN`{TA*XDiC!Q zqmrSoFgmFED)&pyk4;)V6Yq6A8#`@UyTSf4t1Cb3E zROt9<^9@S{7A{*|N%-mEa$ZtbwuAf~EqLN-A-(zep`=}P1<{bU|S(hAH^)DScsHrRs5SW$W3b{Tj-KG~ahIB_c8_HW})2*!Wkw zK&!?|XpK33L{?L9HD%$rqitLy{jyw`qnN+%$6bh8e^eDLA#E6o7`Cm;8Rk$ur2C|R zm-lehxtE-Mb&}LbaS^&GK^PXf!qEQnD4_pDO9jd`Kup_0nZyjmk=)aF@%G%~H8@-P z9lIW@oG6`L^$Cy6D}C}l+lyYJB(jygMd6J0eUYV8F9ChrJ2eNI=Y~-1lTTN1%$q?q z3R#Rvj=1kr{8*-PcRMzhYMn;N4^5J*pwY#fKS(t!@48}P`tqw1RAGb@p=*MgYHaJCXsq`pw^{N3nJtqwecGhn?sEC3 zkmNn&?6s`I{a6b&1){}VedNi8nDBWY2nr55(lG2#xm%U}d}V<@^wgNRACm9;ql zM?et)pyxTKd`=R-w1m1R4LI>;%8!iuGoZ&QI&s;IFT@O8y}B}iL!QJcjY89kPwC7i zxA9i80d#oQv8I7MQKjN8G)UQahCwuUIG`=}VV?iq_(HVwxtBpcP@K56!Qt-cSBeFh z%du1)KN%T#+HILQFkbVZB~RS9JA=z?xeH#h>h#}a|1mV<1sq~?HUK(95w@+%rez5D z63|QDth|{QXp00-+NEqpQ}=6)}iB@jHr`Ww^eG{7G zVXGfxWI8danvcqNlV^CRP!B;(dz&(^saaOxa56PO0K%d@kwHs!Xa!_$0qGEs(EeQu zifPvF9*^o6egQfhB=#R-4DJoG&{-MN^a(+=fTPWi8REjU_U{ss>u&RzVMEU8)~4>v zIZs`x2paH*l?#;8bZ6Ny)RsCNm%<*0`3%xzLjUzRBVF zR?{-WM<~(8dM`f%$*WPYI;F@W7Tzmd(~nwWiMQlzd}^8>Gju0X;EkhLaE4e%o;KW~ zW{tyIOuwuEN~eKa%D6eZWe897vhdkX0g3S*9j+Lk5=dOe%$!IJVpcDpzLZIzpulL9 zy>qol@OZrY*5u`deM8U>WcQh}Ia#%VG z-GqGhj|wQ&H2LE-ggT2eee%$L&Is^fphjatjfP-}W&zWiJ+Lw?ZYp}sI~H5imwADI zH3RUHPrCa~%UhI}@ZlcFcc7+tX7ulVwgf3DUNVEqdf_#)Tx2FPb z9b<+-vix1?Y2@Je&5AJskRC1AYi?L&?;0C%q|v>FXntMyBQRp1w5gra?sFqD>|Ndk z<$?H+U70ZHRYX&^h6qQb|7eIb1Nq%E=D;;LD}D`2N-!%rfCb<%GW zqiK43oNmgILnmU$e+<-rR)$O{~FK^XE?wHPK$U(-4H>55njEuR-r6_|uv z{h)Y&s?Cc2OvO6OmF6-sGFgwv^Mno8kIQs&bCo6W5FD9}0_v|X!z|=$G zpf^HKEAP<`I^g+Y7^c35`*6^v7qJ)NS(&c`QMupeL6u?OYVy4Q|BV-Yi{AQYTm!|u zQ^Z~WcBQeTtJp$FjBe?3OJ&J6hc0c;*^aRJagWNB0_AHSrGQ)s*V%&>5Vh05&x9U| zF*{%IFB}$X=E}q65bM0de_FXZ26HtDIt%f0kh1M80%9`}!SyNHAp*1~iXt{_O#g9h zeR)maeHJWe_Y&%Tm>wGIocwR4q=6hoW0#*ou%ltZ;MPZ9sP7in8(5)4t>(TjditpL z|I=C8gu?YIC`LFo3#j2mE6PQzr5lu#Us{KAZ_p`sc$t#dCv#eqG@3psjtaM)XGqjW>>7sd(EsIC;3yyElI-0d{~Bs%nM-Q}o z?}2_2=oT#A$&m+`#}M#8$iU)6JN8ahV|S@f8u%L8KF+*pNGnNc5U$$H8U~y zz*@4$-CW=7k^4Rr=OM!@484Jv)fw$CyCr0w5OQ!kfQ-4!QFX}^_lA-fzlDjNXHI$G z@5L*O@h?#>VoWtQY8LW5E<%d=dp`N@4(?zXZuxq8YMgh(Yh6Vm)iHVAUS(EW#Q3CK z4_8(N73aCW|(_2V)#KD$)cE)t_3|*Xc{eoJ5UFw>Mz6b^6j8CuD@Kk^qI-?;71ND|2bnM zEc>H^lr~Q@6cDcN5B^+-47L=(@0F=+iv|w#3-fA?1_{YucCgC6t1GR0=IcQ_qTGtx zVyIN}kmSVlU+){#JIW=r$`LNYWNP}`LwhJU=I<&OfKniGpOE9v#d~8Xiw=&ae{VHB zI8Y%x!Ry%jSA)?!&sk9K12NRSo8b;+Sr7RoaM@9n!P0Of{g5`XzwHE|AFQg1s1eD_hN~a%>K(wUhJT>seMM~%vcaw z73$4YsI`$5mY@I}L)6`3N}}N^&1Wz`$Ev6VK0_v_MD(6|PH%T7fSO$A^66dsta6Uo zh;fT6k2eLJjj>ti7U;8;Gga^bNRnj1Fjt&C80&~NIo~rZ6$4Ol3vDg zdNB%Gg9g$3!7bS(Rx!>`z}m!!xk3GdCMq@1Gf~5sVbCQdCXXuABad1ktH3Bf;ac`) z>5?SkOS3$|^$>Zkyoy2K8A~ zuX@bgXSjP|=|^8}9YIi!=Ts4n(BMZ1CY;n)?%K5Fas7t>GF|E2JT_SCdT-iAa|teS z2d&~}hTqP2js-Fl8|2f~)I~Bb`Yo-PTiP?YwF5x)7FE zQxrG-(oYu6?5O#GN{PeAr`{Cm${!p9zrsc;a9K7$jX&kFXFv9=JY-__@4T~v@TH~? zuU75c1b&RtP6Hd+A5AS+V|NR61mrkAh)?}zPX^Z3-R?(z(otU6#UD;X{=#G9b0Ret zhacn6C0B7OVSoMF=b?skl)|`je;iIY#%w9~#CKt`|KzAC?Y@$I!pQ{Ob(1Kz_3t2I zpLD?o44gZBi&kaL$9_%0T_df{1!qAlR1?^Pvh=f2M?o)Lx}#&Z{gagzhZa=QadPYP zYG6ogBnuMEe=iGRzwtSKoCwB=#GD@_RK&H^oO>|h?$oIV9?fq(8b9V3{Ucfq)N`7< z_0y6HmTIoP4Z$qArqg|epSog#W>5|6R>8J|s@g~kXES9x&j$TaNHk<4mhbxZqV{K* zILh7SA4+FOjrW@IaRAU&*hJ7L&~)lzyp&muJ;9r*(>~aCk^EKx{3DT zHQC>BE8!SYVW&$pQBN6kyb}XNiwO!phOsFVLmkywPN@jx`ECd_HRJSxTSx*+QIJPXec&Os#-+w z2PIOOcdNWWp?4ZU&;29Pn`m7qTv|eQQ6+CG$}u%vi}{AI^3Wy4;V{;h|HUuY@Kp~2 zT>~3lMo5VWX`gqOGwMT#FOf7i4ah7iI{LWb=gNQ8Jwj5{@{Tsz)(||TB0a>G><6=w zO*B09mhJ|U0S6)gL=P96BaubiR!BQZE;FeWa-;yYYzaHZRayH}@?27P6UAOG%(P!o zx%j!+karB#t0xJ;SaGZWDY&*i?Sm+wzVA^=ed$!}!Fz~>uPA5|CnibldP&B)Gb?=p zS_)-aJ>(-kXf~Zkl!|8=9G{g-d9}Ou5BkMnb+vE@XkKRkEu^hQkRF(^Zz`Pk%%rZ%CHNC884E-$}&+m|GZ+Ymk> zUcDkxUqBnR^*01M85VOWNbbuycaEAm`p&1yq9UPt(tnrzbH|mVa9ioR12iyzf zO(W;^m|>B%_1emBn|(9&3V^y`?urUEI!6lFd>glxdRye)wk>~kX!Ed{N-`8XjJj)P zk^+k*$OP6(a*Ee}yO0v`-Dj@=RYMVho{t4Q%Qpz)@{^M`kr((vO)Yx{t*kXrvH~7K zph^vyz9HS*ERk++alPrJgko}hHM;YMK%nO^+laJX$njydjY4S}I&;WeIeNFh2Y`S; zpc$FpJ8w?IuIdx_#YUFc(@~1b$GhM`%eNQP32RIW?-Vg0;MOS=lm_qPJ4%Vf9Kz4{ z(5I+=qXFx@(GHO0mk={Fa!}j6me?@a5wEbphp$lcOMT*FRSv}w2r*%lXUKx~mD-VOVU? z29f?={YpM{L@J7nu7X-T*SO)}89fUZSf$P-dcOJBULo$ndfxTs?VP;T2M#vcw)xTs z&pq~SQ>gtfjsMx5-}9U|%K?;b8-UMxM~Bf&7tJfFIs+hs`k}fbymxJvTkAP73Xy<| z=&Env_h%h4y`irg`%{W)05C{r`X=fXWhcHdEmh`A_ZxGmUwrB@V@ z>3w73RmwhuoGfVTnqCy=pFScuUG-{T^qW~bVrxX(^usXWeZGEHt z?mIPd4>wt+SeOthON=D`*u2is&UXyS@>U`Vq$Szz)B=;X3ztpAx;UW=%j_JCgUe!e zSa~LXk3ZjQ>(xg{&qSL>Cw(lBI{)gz%bo&{6sZIrva~_&HctI`{L!w_gC=^$ z&Cv!vl0C_S{~?h)GzuMqEhSbro5GH35>j6E<@=zD5~yzVs;3x&RKHo$V~IE67=stZXHLm^~Q^q6>^#ZSzi)B zEzRZQYi!p87k9mDETiAvIvYK_)3O_iDj*rn@#^F$cVu`%etVbqjIdbK)~p#YMnqCFRgTkr0N2`$J&6zhKA)d^O-8#r z=;Ax*4EMf!S6L|t1Q#0p2lp~;H_A!<`4i~++KnK&kVz+~IZ?pf-TzM0GiZ{?-R)$r zw`mzF3NMev)kWmx&_*r(EG6Kj#8=P4RTP+q)Vhr=B1#A@8_k5HS)I4my!DAWuv#WP zXEDPo^aEm6z>Tpe2^Y^{lePRZq>{jb@!n`^tf;{!2}UqAO+ee_l62x)Q>K`MY4ZLE zk6SuCxT&XYQ>mNu)I)Eq*DD}v!`%d}goP*A1SU8spJr!O6*dv#Jo%r2)%BYn&04${ zzl9UpNP;TEnHjK_|IPt{xu5$SUfY|ULz6qGNEa1#eA3Uhvdw#7*pUo}RcJdRX6DW# zSe%m~8Uy4Ot5s^c_+T)MYHEB7o@*foPexEakOL(H? zYutlz4}XYNs(8iTOh9eivDH0sLh6xaB0e0mD$ZO^ z#vhtd8XpT@QUP^)J$>i#TjM`2ezR85X#lM!MYfHZ1^tl(iJL%9tn-shiK?)5dW-eCq=(ZiI zKBlI`ME&ryhsZ-gLtSFLerQdudR1aZ#XtW^66(L`Za%hyMwV)v!~EaRp?T=xg2&d{ z)2}TxjgGxu8#VDvE(a(b6t?f2zY9UIMOnGnL{K$A&4Ud+;Hq9};{an!b)1CpnUCl; z5>qyxHDH70*uJ1$&wkpX5xNbZdWNk!MbJCT+Gm&=&ZTV1P%fOL>+ZLrahM*0S`OX! zj|V+^mCk_7)Sc67N4b-4(-rq)T+xJkNu3y#Es4Hf3ycdL2K>O?;2z=!MGC0>Pw;@@ zzB{gqX=8Tch&3lQIFr=Jv!#KRfososf@TX}RZmpo7FzeXpDr z@{^{}lW@gWOPrhJ3r3sNk1(+r`41?l2moE`c@?6>%F;qfPS7B4{nc7&KL!SgE2{~D zRHPMf3abTXz0jbVB5$lc{#T_gg17E&d#PoIanOPYYtDh_tgjXfh^fktjJ1RMxu1}!~uQ}c_}3xRk(EP*CQe`!hK4!-vmDQzvA^02;?!29K?T)9;gvqYMVKCam{Z;;=l?BndIu^sF zz&OydEwf^;uZ#X70}S7jbD<7FAWGJ9MtNclwY$M1r^*)M_!nq6!D0vh3)4g>3HfF* z_qmVIMW{py2e{};G@_tQo&>k<6cyi+CFVW?lR#$Yy}fj^8q970SsrHkBco?A2QKL0YOkQ%P(2+%np8DtU_>6=W^F4oL4sF4HtbS4CmIW8h z#_!fv@~664+C?vf(|-s$#f7U_PISw4P`i>9qmh(0UU=DeK4Dc&3-Y<> zg-=WGmYP>=?=R8KS!WNVB{@*&|b(*;_+h=*gjVsYSIEZ#yLtiCc> z_vpi;8`DEt2>Z^51_Wd7MB0l8LUB-*>Ej2xFoMlvzk)KK=}Z2x?!>It_U`kRGnaoD zi2x9%7pd`fP2sp&-k3K2v-2Pz^2krN?dE7RAhH?8ZmP@gds-iJ0dWQIvir7#(3)l~ zVQj_Qc}SswZ0i>xRxO|^x*1hyc3Ol6BRnzf~R?#$Aocvln7dl)o3zf2`d! zfw#5`?&wo$hE-vN9hC;+oTnVvH3FZ z{4~4R*YYUM7(QXtVy73pX?gevdgs8Q{Odv0MabNQYxed-l% zV}rRh3#p9OL*>>3f7)G4hwg@V+fPZ}Ic6Yyt&2{N$>9_$(hh3GhlUZXyS!XAie{CYKP3Bw1raO)3ps+)esm^Xu>^!Y7}Y_f?IpE@FX=uRU>3w zO!JNd(D6^8G~ta4|LOKbzbGP33X;PE+lycO5W25(BRchB8aof(9rfH}7z+7=QAD%T zq`4)>&~5-_lmVYn(I>XDRo-YY5|hnn@x9$r8&61Cg{MWC825|+Z?n`ok-etA)c zisYDJrL=^qe*{SEP;-6tlX=3?6(93x8~w^vMUA~Y_OG!L!Wm9R8WEMQmn`BV)4`|+ z<~gPyXWv>*O-&DwVyZevl$gRF*{uq=n;tmUK34Nv~ z{m}yX1uJ0W_zwA{vt?>iNSPH`hz{2vJ11#fz7)X}#I*AW+uDEs9j4GKH%}{Sf*G){ zawkAEg#De^A?Ax3&i@qxxkQ$*WznTM?%DSCmO4}3IK6L8qH@W6QofApth==`}o=zkM!$&da!f8PQxw z<~j<;22{ZSXrJd$>6ug-%bFUe!y2f*;vi|bUOQV^M zB-e0qOi|-ENI=I{k0ra$M%F3I)r*!aopjBGs{w(9H-A#2+!&eK5!GteC24f2JEb%& zNfW}h%9DqWt~LmSam&~6)NYa?E@Qm~#M9_!uR?z(7b`}hx7yc~N_E>iQ+&lNWr4nb;ILD-F znakuiE(>u_^1Zb2bO6&=jeI4(EHD=xMvq=+=YDXoJqZ8LYA;CUG$G!m9zQ{q zd37V-&`*Ad6I+3>Lmzq4{NRBmiVx&b2vF)k+4|FTEDZF~=EO_3?~3VS(tIg9acDj8 zmNo5vf;Hh@D5hC9H8HrVC=Q%k6*@>SIv-*vi3F6_)U>B=M-7RUbY@o~749FP;xY*2 zLOgD{G$xv&)Z!C9^}U*`STiV+PiDp-F&k|-{q#pvmEB+8x10by0Mn~#&ZRxlrAj2fC;Ng{7NA@Q~uT} zzZ7e}a047fRaEV6l!U$p+MFhDYg{97Fx!&zhzpn z_L8PTV;C;imi8;)ISXJzYxEdRq|1jb1%#`|J#l^@5VGkF1Cb7)t=iyyVv#Pr>=VuY ztBwXDYx877YiFVDQid<$kcNsqPNl*mjoUUF?#TGa^&s!XY~thD2c?!&b1v_ z8&Q}@YhEw|W`1<0oZ-TxeFh?K6ceU~oDc4$Gv?tjoKNfTF-gwaMWNB%f=c1Oc$)jm zv9)ZK3>UOrKpIRGC>G(Y$RPnQwVt$KE0x{>#Sa2;&sq*encMBdXRs129d(?X{bBcg zUHe^Yo7F>IllXu}TV@m}F?AXHwTtBY^6?z*Iy({Bbje*x%so6MUPqyu&$|S(bcj5T zT!VGjx`yL;V>Fk-0c+)BInr2d1*_D}-E1%X3*iUUVN+aD5<$_pdyRR^zwLn{hlOk* z*sm6{K|N2x1uN_WsfbDtJ`==#Ny|cpypxG@KSQar;3StL1mnD<&)0&t)yppuphqQj z7ST~6u~mC?ZY<7<8;)~*lm4nb6#rw2sogkeKA~vwNg)v7Uw@Y4b|3S!jLO+`mB;M7 zF%;ZVJ++m*CT>k=ITT`V|4#`gA^lr>ks3SFUI z!;R=CWd`7b;L=u1Q*1eUPrcA$RJ>z8cmrJe>4-R7PrK3 zIfG0DYi1TNBX?30qh&?Gygd;qpdk-s9gn4=RGfUsMG|pv)dY=T{r5xv7ZwHaWZ`oc z_AG=bFXr+&(*4u4b`)lY#9C9;+FFxGKSWm)14hJb3Lmvd2n4Sgxp`RunP$+3ZTGqX z0-RsX;?xveq$M;;l?WsT`D3uu!#%hYI=0r9jfMT80?KwDywsLhK5)P-+J$=v3k8;Q z9U^H4p1P-A>-;&UP`OJ>d&E*4nG)sL>+cj#82&uCsepiZNXr*R<1PN1kv(`$yP1Ex ze4_UmbUp7JMgA3rM;s^x+Z5VU&}D%9*pjmq{0qIS<`8(l7nX5eKZQNANHxmynA4?j zm5S6?x>O2LN5J}O%gjJN-b6JDs00|iO0l~ zM}e_|8Bngpi<9`{*qdSF4K`I6PjE)zBlFV1rdELW0m3mD_1WO(D$;szo-mD^T%UXJ zE6@B~SLzx0iPoNRQUDBoH{Rs>w)l@)i+PNRJ6cAq{}d6QHjUx8r2pnH`PtT^DuCmv zM{}`$tk=9%mLPKV3EUxdw+?*|@zGGylz|3%M59B4#m|H?2XcCI7ANx-`*xqgZ%IwL zLoXa!m`qoB!#Z|Mc~YE2vImiYBM!&>kWWOpIR#*>>tiSqd}Sy-=64b@Ips{_W4 zaF5I@mU&tn_BF#e&_1+^ER8(mL%5+r8GP#tfo3*xzXKNFo=D8)l3e*OX*6PtOVwRg zDAudXXLP~NrAS|T7|Ylk=q+gCHH8A)=pbN<5Ezg*;_^6EKDdIp0~R}VSS~EYVsx&@ z3nCj3Iqj&X($oZDGS6&=9$%M$slc4*pW2XwXK(s1J&Sr+hThL+Z{XX+q;FLd5;b8^ z3=dIuu88p|dad`Z51tb}M}x6g@}apj#ic^Uoyw!k7s;e6bpm`rYe(YEPU-z$){(A^ z|3Fs=Dcix@_Cqo`iYFfDZ;PlIB8N_4y@7AwWf*`{)@l5K)z^CdC@y}3=T z52XSE`*3_;_+RQ^bRb;<0{a0|PDsA~QaJ8ssdsPfW`PWfloeQ@sz8-V`nBTFmX_jZ z8-e5+7xmMu^SsNXwSc=qVgpFDA);$W6m0ys^M!+cklM#ryfng^!v}xND@Jn|_)cLf z3Lx~Oee#KG+6FI=Nri%O(ER^P%L$okccnWEC<_>3PU7i119sKRUT)Vxo^OBv{yxaZ zPaO^jNc?iaQmN6J{Z6R++uAvo{ec}2nH8qJZw*X<(nn5>FJvQl3IdqSzY^UisxHb1 z=LN7vLy4CHp3ge|M(wm0WkZ${K%`DgxV0tFZ$~0jF$Y#ki(@PjW z<`qF}8#JS~;%88Tq0CVNh|)Nt{F;wf6MYF43)07SvHpkira@-gYZ%gz8!{Qlu{U!M zhTwn@EDo6HbFY-Guu6_h-mA)oYP}$0+NNslgTcl&k)*VYL}78+&Y^RVLi||aupJdS zpelRMoM0?e7R>4~j2k;__HHLgDh&DHk9t|5p|% zBDwe)fU0L8Ly**8M>F+g(hl=@JPYT@Duy6Hg~DnlIs-Ub-}w!2rme21Y`pm|=1rt3g^Ni(W?3-BpB8PHwCJ%Ct=$l22v2!P!t?WWAb0_?JETV_S zw2_USnbE6FG;|3u%Va&Sz-h=r4=TT;Y@!}4{Cln3{L9`Wreh5Hyx{Ml2az-0mJX(t zK<#?32P2Rm698uv6tR@!cA~4y;bDNZu7kSEpAAWH%56q zMDaZYOa>x&Pk?CT++wY;J#tvW_QhKi6d6hz<=tM3+P>wd9UrN6(la;sO-e!1gX$^y zu$)pnZJPRO!}~#7^IT5+zpHalDu~WHxh4RXMpAZtfwAl`l$m|MZ#cw#*G7I)nOej_ z=+jjWZ!%4XGX#k90{xH+NzA=YbmCvsQ%ISjw^wSHrHi zsHI^b)Asf^F*8`P!8UHM>sV67)f|t>AUTQ`hCQ2j?y~C(t`=iv2p(PZJG>y$^BZgq zsm}LpCHH5f?mg_xJo_6zW^4*Cm-0{k++Ze$1xa42^V{M<4>K2N$0t%4MrqY1*A0htw?17L zE@KfWX=awTd0~9AVb?`OU{!mex${XC!SCeH8L1w<%R4 zhL37fjF1#cxVasi>0KZLDqEFzr$S3cPA1C;U(N@z1HXEhGCBx>zk|}Us)8p60!3!bjo8bf}{v~6PNH!0v#)-2jjre;7mS1DuR>Li}$CW_| znn+?F8O!=K5tMQ_aAEex!XCRcG|rrX2;lajC^5z zp|?x7-tX$+S)JTg75hrsJ=6Ql^y(k|w$1}sE8Dr%W8O!)#Z$p4kY1?Oal|j$N$?MN zo67NA|KBF644Rs%+BXk9lZ2Pd8th`>A97dg9d5@mZs25b1d8{J7aGbkc2);#o`Bf! zpwB=fKX=QI?0uXk_y;><*KGI`y^n?05MXEAf)WqC|BDlT%W?jit*FI*wX`p+nH2f=AJeB2OkNm!M%N3OD6bi>$BDrG}!>?8dCA{EW^QGaH|}uTZ3iYv>?CK zVxovBbBWAe78OqifdSvP($|l)ChEcG0xQmWmW%)bckn>Mzstp&qz%Ak)p81rKmqv@ zFt9?cD|g;p0yTI;_h_GKh=Vn%)DcU%)9LQ%BX@53W0Az+lOqfaUmVfpsM7siW zMpNas3~w(i4(2=PRDNSmKP|4e8h-%>Yw;X!kqOD+7X8e&V(!R8@c?P>nx!Gym09BO zDWav<4U%mI7JCl9Yl9Se)ZCkrH;r3JF_~b1v+vvP%*gIC6YpY-w?leyKoJ)>sG&*h zu^7TBJlyFd;1dNq2UxD}fa?0kxGa-hD3qM4%=?D8<9A2EU?wOi-H{h5gHK3R#&g-t z@X_(*`Hm{xWKxTMhO*70mO)~>^sHyMhpUk`*(Vl`&dOr4cXfT9#B^1jF4)6IsqzPB z0lCK}&J?t899uioV!Nx)*4Ogt-v)Nrg#AD?3(2`WEs`&CD7P3QCmn9R*%=?g$qSRx z2US`hAJ@R^8tT;C7ZD7ip^B7>X!03*u6Lk8J*g}*z_qWH?Wz**E}*ql6W1r`(RYEX zNRqmiwyly`Ix?=ZpJzA%L>#F%(j4nY^`I$VsjT`_DVDT+pWUORq)xE1EyReHvYDnX zhaW4n#CW!|D!+5n(U3#T$3Q8IMw)?4vn;PJ%uFp)Nz(8|ZtgS&Yj61CAvidXO<*pd zok?UH{MS51lsUh8INgx5*)%KXA9%xl>K~*4YO^09Wz1{?m9`Tr`c0H- zSjX54dTw)4ghw4#8bVh5{3$qDEf5`AyAeK>cxtQ9wo>3{lq_Pz)+gy&XTIC&cXo;V zOUO3Z0n{~Uxsdp zf76YEb7G=}JDQ~fZMVBP0{j!1Llq!n6b|%@QCL==+1!q%z%n$30(hGs-vKTT$7Oeb za45{2Ng$p?l|X3KkwG=~yS|^Xs_1G%M8OAaL@}?#Y^I+PJi+*B}M~S7sEjAP3dHBdX7(3Z?Vk&k#gtZr;Kp;0-3DeMzjKd zOBXt4n|q@=^!uaa5--NiI29p8m!hU__fwEEeBeSzGUUM}Dm@zzztk62AK63AcqjuC zep`LA0KIyu1*v7WL(*1lUCS@HTKbz7;OnUU<%b0;IR-tSQr#YkmdY-z3x_U#Ac4k+ zM>Md?D;+IRuCRXkbG()sz7?Y6Ba~fjkxRz`f-ICxqwAuWxsb$Il~}|)EGnTOOe`x4 z!3vBze7gKr9qLg(m*Yi62gV9+J_v(q-`o7bKK}bf77- z#JwulTGx1+>Il}z+bHHmU;%sT0jXPi=j zU{?3iC?L@~|CAucBimw?UxfF)8>X#(s8F5s_QXGEHe#s1&<2lXwOPFELEc}PZoO8j z5Y3=q-JJ4K=b1som_!64@?WDx_(OL%VrH^+K}ZKC9Hx zqY`0bYYs``3*(0z=EvdIEr1yV*21||p6NV0yUir_{D;I25q6glc*ibhC#PX9c|iKH zfL;+SHU8QqZY=>;0>Q1NxVs#abiMXYo=93Q<~G5R7HH}RIfFZ*?a(vjUo1ZdD49J- zGh8Oc7&0t7AgxmfQenYQsqsudlbiKQL9R$;$E)ySUGPJu#OQ*Yv33`lYiYVkYnSCq zFJ2c6tOCMw2OAkZQ8d4Nwd>yjCpP@`u#=Yz^dhh>(2~q5@X53vp~L#tH^xG z^$tybX);Ej-O~(ScianlVbSfJoJZ&k{233D$ms&Y@KQept|lrzR2BRt`{_~d`T9|6 zodH-~D{~p$C?u#o>7g_gz?Iw*^wXDTpcPY-)MoNZ@WAWua^%@N9xRG8L6Ii=acx^R z|3axO5bn^EQ)`{pKpeLgabSJ4N*U}UGmN$GHI)cg{<0JiCZ>2z%&Iap97bVJWYrT; zxqL$;Ar9DMxL(!wh#du2mQH1Ww~ga*1Wp zNV^y6X=Cwf)waMCQo^k<%(k712+JuMD(hfgXF=ySyI{^X9G~cj4C(i4Tl_sUg>;`M8`Ago5ab~Jz?u_Mx>2Bi%U>U`)m&Vx!b2|7jc!FW|kO8l16>w1t#z;Du zf|g}y2QwffDQ4h_c`LyBXrsNzcVCIo9?}-sVGQ5sIfudD0_|MO`6rP0KW+qGkn%UT z!OQ~Nq_(dz>r#-`KytjC8N1fFFujdvO74wpnR($f08tUh$kj1 zR80;g{a@g5}>TNexFtj+i;f{ zOnT6M`h`ll8Vr?h;aDOTDven`^cVqa`I!m?DaO72Fbg8})T|=JY;1uP2}h4rA|*Cj zzhUnx5GhQCqn~Syi6%V=P+QE5^CF;LU#kY5tDF|+c-?AL_j`y!(`V1X$PHaCuRev$ z;=ROiPJDj1t|oU2qqNsnfcE0gWaA7&16fC`uiC&+k2nBZ?N=|DetYQlG$Bm3y`P2I zpXGC=EBe2c=#g||GjWO%ZGF>Qo%rupoxRqdN5A>Pmgg|N`uy}|NT`VI%Ex=GQ&8*> zcWxHNIbFf(b8Vw2;bni91B%erb~!?P)P`WODiQ|FI9}0!Z#!rcwqHfkXKxmqidn4z zQTm} z)Z@)xD;-PHw3g;jn=iz?GrEMjhEI+{niNlD=cydKXWNne+B6&HPyw$b2Lz2iv?1(} zMXTDYj$QYim&OU!bxl;sghemKtvMFtf*_ z?dO3dDhMPSpQ4y4O=ja=9MDRt{n!eq@EuXla$E}qjuWW;{NJGsq-Cx&PAY(Ni^NQ_ z$brpW^tw$f;SZ?^^y1s(z`Px$ix2C+25K-C$C?s`+fJ(7t{Of=ybUKEC+z9UHXg^B z9-eYx_fM(LYw35av=BgScb2T_4iO5a2Yp#|C^2S2Gk>^Ort95`%sP=w;ws#e6wfGV z3iz&%nUQNU5AIac=(&k=>KrWh3sK_NfX1mbvL3ZavAoI<>Fkv~#bJfSXY4TYSY~a# zLi`kQFAN9$9${C6AOsy5+dTmYpuL*RjuXW zfL{r>S}?@|>*JHG^YWnV{z=v-AAp6@sCcTq1WuL|vu)Hy29fWxmhaf(X!_Mpw6^z& z<_m*%`u4ZD6(Gn#`yXqTp(Wfjw_bre+>QrB{2Pg8&{AMYN)=0>TO$=KDotG-^4=xZ zf=CI>OOq(_;h=?y`w2cv_F%v?_Q7$dp6eIeb#qxGsyTQ|23wH zI*OWZSAyt@Y!hFCqk)J~jvdKMTMcho4oi6K&NM$O)vs!v8NGtVdA;_uPf#OuK<$JVn*9JXJJiyGYMToYFJfKivooaz~TUSI-!IXY%5(VhwR&?U*U+!wNjbNfs6&r9{kUi5B zZD7pI@TD4Ry7jA*`^kIn#e*O03nTb-buUKBc?c^Xn_)2CZN>-A-BWGBXtHAy{vujw^Wo`M^dE{eSt z6dGh5Sel%EbD+D0+(fZK)3n7Y9#pM<=Uf4jM@kl$gJoPM+7_jin*oC{1Kl-ev;q{kM|y) z{!GqQrZSXrVcc`V%Jsg`+u+VF0opQ zZupouYYg(-bCn03N4RbWZdcC#KN(hjRxq*fKpcT>=cZPWShT?T_$Xb4kDYgcZiA22 zIB?os4ul3mHuI#9W7=*m1Cwsb%nj|JF~#&3e}PmAChrOq_@CRMq9vAG?W$i14*)9k z*+?c(^jxRGzXgzX&4vIRosy8$6}q!vE{PC?WS7V{5beDbJ&FkY-4=xqEq?g7lt|m3 z-Wh?Yn0p?y{Dx~7PCF!zT()>YTb4h%BxdMoX5*D&iT9^uT3d{BA-mHS>U0M2^$ze; zK9ie5Wpy_0cmkxMCsGz7ZB#WGBi!>^<@0@N!|LZOlhhGFs68+!Gr%PVx^AM;!ZmRa0EE|`eaiwN0~1qaw1mZX5b+_}yp}iHp!*sKrh0%R{6wa^_d*YFbOP~F4Ta;kMK_7vy0%}mu!#W)$}8*q#;q_$QOpNsfeCiN~fS$!9u z_r}X+DLgyP>~qMr!WrqMWBU03XKV3 zMmKuqBPvBstE$`PkhOY(u#S~Ga~5>1h)=qyYH>(hKT(pO+CCf(P~6YTDv-O*6Ndp7 z?+BO^oz%GO+{%<4TgJyc9} z_dG%ndK*XrqgX7Hk7A^dzLna`n&d#X%R|Xa{flB|#;c^AYZ68cy+Y9K57@3tN9Ii8 zS^aO)A)Wt0M<2WmVHLk!BGYR&4D|8#oJk6pR)G3ueIrtB4*hZ?nk<1k8u@Kcmkxw! z6K?Uw_^>DG6kod-u(I2?;g{2r(P90X?;&rXZT*2f`leUoy$W*_r zip*SoeIC%DyzV6+!NmBX18;i`gQL<-4iLH{)PT5Ms%FwM3sLNX1rQg7*L>DuLo=9R zKWhPUsN|`N*7d}NF2t4}(GZ~6@6>|;RGu+^gM3$;9nLOMta!02Ar>QlxTq?I65ZfV zWWhrmLUX{(BGbw_U&7oeLv_Nd*9m{c#V{8j>g=0BGYQ`&YQ;LoYTc839nZ>)GZ{9X zc#!XXp$)c?b*8DKmmOrbg9u0k<|t99IpK;4ruz0#UlbO??Hl5tRiV_{TYk^&x4p1g2i6cz9@ z>ag)|pU3FcE>9GSK+379ad`u_pwXZH=%`wi!u+52T56wCea$&m63!B;UTjJhgfxog z1g>jvea?A<3YW=`H4<5wX^fJ=efX(zgK@>;|A?dkJj?2gK>N;4_cV&NZf)(${Ue*O z^~GBZ4DShT=Td8(cP?C+$}DX8dUag_8e{vHAERx_%&iZ#ZVN<&&V^Zf-MTs3HmYA* zCLmzYFCo|cG!z|#rX?=AlW4VjX4#D`(#ramD|xr$PRZ26gldwcEQVg!%YU>H0+j{# z=Q|ScwgXJC8v@xj;rZ1bl!e-ald=Sb^C|? zO}<|>c|{B|%tNN%C{+;pXfqOUA+KSy%c*a~@mb%T44sWSAgbU*@og@xo9Q8BIaZwm zl@v%ycVDW=U1reWrBeL07r!D?q4TI`dE>G7|@8AuCFobFFbomIY7njJwM{*o1Z z#mg#Su*qvg`@Y6px|8FgCAz1%LYto!M% zEkCaVq`-p7V`rT)u!m_((uW3T316{Jp{kU~t=fLu1{0p1`p;#5e927J`2Q`HsY`vHQMFqK{MT&2`wXhH$!>{>M3^t;OV+W_ zZ!2)5vMo680r$&V`c^NOc?2J`v9icCh3Wkz(67At`M`wr-S=z5@@(X#ep()r8cvUB zLHooM`zM7y91-R{_J_zYmlyaaV0d%sgT%9uEGI*RAkCQiv(d$pM6CQ4@(f_`k3;DT zDQ%bg$}tIRVn#*GJmNsJn}XJ$QPskXy5#jCr!0O8ohKK;E5tgjY0P!s#KK3twfy7uHDmgZCw-5kCRP)9%PFi*ITTZFlrn6E>^0|F68;5THjI;r_~ z=)cejnRgPl;tJFDk{OaJ8oJx0>bs#M;n?QcPMt0hQ^+r~PWm5ra(-j4whh9PedAqn zC6QT4i%Bk<#$ZR6bUU=cRW1pHLBaCsIhJWkr!DWW9=h(P`<=XfI#&l%K`Hs={(kHrUl_IWAGPF0zAA^P3mH)AL-?vQ~ViC5gGp zO?xR{*Y0IMu>rqO=oq0Y%%Kg4_=Iv(K^N`GNUSI_xGBB*k$0c9Kqtc@mD+hr;Yf;p z+U+AXSq;dZ{KHkgf6LH^!G!N7{4>$Z8zxJ$gsytY;SN#yX`+bCTNgb%_yqZZpA5_C zB&q2qlI$gJy!TFTd31NsG?>wwY%2OyfL7DC&mRS)_6>8L4`Or6Bm+Mb@kf^>b`f`^ z5f7+iObb3J-H(^jawD#t#feEpm zgMMZrd6s_fcH=8WP84o%nU{32bH|uK?IkY{g4czJwNTkdo%`gE_I>gtavPTN1MS=3 ztyX{iQXm!LjI5u6t5DP7{=v9f!#qolv=pdWd`K@E#kfnAvpcgmmXnah8fBx33Q~6_ zD)tW#_H-HD59_SSSAey-V=bzFO%n|4NpgqDnCZY_4p)4Tq5)h5y4w}20J@OWic11Y zdrX`64Ye@>U-AlgDoVK^%0OslBlNgEt;E%(R_atJU*#WZCJ`aXusHIV{}Z0}zf-qg zO2%r&Kw8Qax1E9#K&M=DYoF?83s{=rB61sX}Kx@4nUmd46lOqi! zI3cYaJ~-BvTKw=u2|x}KU1gk6!!ivwiIp>dXIKVI@`VprH@#7##Q|50FJ~l&o#AZq zA;h#g@fDN9gF`5bq`{7|7^GqMo12nsTwwB`0MZ}>^8{JorJR!r)1!XvFQMLAcqIbS z>Kv-aSC;d3H^fQCje1yn*844&M*)u1;6&$3x>ex*IEcVU#Nj#MF05A3wcZ>$-@+~a zwK3*4?6fe4KR-k`mjI#b6n}dPtaj)VltP6)?{94tS6|S)D1yFZBIbyF-#HqsAqCEQ zsQ+>+8>ocn);>i|)5e-=Bx>19H@EW1h(dp*8o@JHyM)HQBgR?DR?GBBsRZ9t3F5yjUMQ?ig0lfk)pJsj;KWXnzN;0=Q!MvjzI}e*A zqTaAmidBJCsM623?qE;q&WrrUuC0ljYXPngEdb6T-FVZ_>o7`1egr_6L0+-r5I1%y z$ge&JPz=}>Fo!2JtD@D7asGC-_$WJ$)knp)%E~4>U6PxH5nnhfL!^Gkaw77L@}(N2 zVqT3bPMK#xmKB5PXZMj@+)~8VXdu0?-;*_%)^Z}M3R!#KxqorJ*^s*px_|F}J}NGv zksw^I;wK4Vn_zm(VxjLNUK^8vI)5pPbk%C8)?f&%=g7EhfsSz40)Tx}MF8Aiab17r z%?pQ00s^J|w-^FDsFA8bvb=)sfdXL8mE_xHT4YvIx*|=Sas}IefY-rp(hAd#3S4L!?r$2&dn^!<#mm*!2q5s= zeoXZOhSuS$eUJA8_9}0;FA-=}fi!5yvEF?7jV&p>BVOk#K>~kczOUxSSF}jl zx3k#{5Ff9lxH?3|Ap98U<_J@%1v!!n|B8>;UI*LQ&FRctaJg0ON-?F5Vpyna>!|If;ZQ5=wX?BKX-NmTUg7Y;xO8iDowhj+I;MWKNvRrz*bce2 z<$?j>;qBWmJf}uzk4CUd2C)Xp6kvg144ikNelDV!_Rfe3zV{iwgGpT7SXVaqgI_GKm;1 zP?o#vtbZo-i*oEYtma$aqvarSD`aJ_`O={=8ix4xieE?Un9CJ=%DkN$p_?C(FtzAS%~DDv^dol*`EBS&G<6aFf|4ed`ohZWW>C zD7_vav-{ z0i=cB7*s41jDTI2LmHv{v-REjS1}AE*p0nStpp-I)C8nAXTG`Eue|j0Dum5m-3QlE zU!m*{RBUJY(ePl>hp&k(e11rJbwywFl#NHJ*fRLE&k`i{+QIBG(57ykV4cys+}ATUd-+Ae zqJPrwF^mt_iT%uYmY5&N{O(VGkp1@05iHzK&7uQI!k}q)uI-6qy(md2r3c~(m?OJ+ z|E9P0(N78n{jxPTHW~$w7FzgOpnxwEaGlJ$=ax2v>7z*HwPKn*c#62Fv}yzl@E@j2 zZG6SyT~rU{_$vwtOs5wjv|!&P7G9|Y4z$>CHp57|%RK55oUU5+E#+479KW*GXT=>R zf%xie6#KSx;G#;+4ECve?Ru~J`=L*V_#wa|DZbt0;~vKHc7ch8tGWt*@D8_{Iox9 zZA4-u>~I@R{OKBQp5UDZ*>TFmbNpG=!WFqU58jJiT$(ZVJH2trcFsVCVZsxGys+Wr zir?1V=!+o@Ah3A}T-HHHe?Bt%jUe5R@J;@KJzKIj1x6Lx*vca(o57!U=7ou`XdcHZ z4SUQf!kw*{B@B{dLo+6Peia7ASF^=C2Q0f1=6KD}Vo7J}HS1IxoF17f&!tVc>7Bq= zYcot_raC%#v#ZOVHo;p{inzZ^0n+2C>#(Uel{D(ElQcy2OLi>EiE!W`T<|>q+ovap z21nzT`g>0-X8@x`T(v>^VFKKBf8E~l?_4x0RJsG=SiL@3?Ftv+qz-ao#D}#$1)VZ+ z;2zH@gXaVt9S|=>YG(39BhT+fG&Lr)Lu6LW$X($6+hUCo8id;|@c z(N&=B{Lc!P5c~pC{)8yf-|3zzkj~9A%=QL8I#j!YlZeSHE+EWo9;z?r(i%IiKAHqC zdDi3i5%&V|9AFVYRLp$+a}XW<{)RC1@!=qh{{Ly1aSR5KgCk^vxTR4cXDnx{uo;Ph zA4>OQ#8W*LBz9QA%Q=sb+}Z)6eUD@puviJyL%g#1NO6+eS>>OYhH&^~${B%BFbZ1& z9v;m67bs>3$-v*>ZUVWNm)M#&<@|E1wu(mkl7}$0P7~y9*o_7W z8BtE{S)EbL6%n%uWq4X*Ee&0^o$+qwKyr@uIkXnolGaBG8uCu@d~qa|&4~NiHBF1S zjzV1bQ8cONYJKI5{IP@idY(;oNNd(f_@!n;tnMLn6kPh&=FewAKOXR{T>H_&3jyjs^R0u4QbwQ3H}q41ym-zb#}`Zq0QZZ$ z=zkceaVV>UmZp=#%ynh`^|D;CjdyRw!%01Imw+19O+4&_GCDR%4{|6I96PTFHm?EK z3KdCHHWB76S5NYAmkDq|{5WUr{%e=00!p4q?-d4ClB{?#*7#|lEcMh(F@5OrDg7z! zfn}=Hqg&RBIYP%m?+9f1?dp1*BCoUOwVz7DOVta@kt_bO;+Ds2UE^11{%AgSvIstKa z_B$L_gI*DWMrq=lCorZ1XI#i70iRwSn)4rjQ@4elZ>n*S=EZP^Ll*rJ>|uD4VM;-9 z)A-Lao0zczu4oi>cbt*k6OOXrthLf-8eP8QF*y*ncK+3S*ub(qs!Vb3uld4?i+m5C zj=^d?)gh9mX7G>LV53*(5`hSvDYQdx8rt#KrJcxv!8%R-lgq6xIg&VXI?dp`4C`o< zBSgjx-5a5cuL_u2P3npu)%otZd)xNZ(}@Y2mdddOqNR5M5|PvCwlTsvMPZZx*Wm%t$L#8)4V?7){i+Ztq~mB)lZ9Wcedo8(oX zaC>MBq&#!WEN!Jy;0H9@tEm-+a(787g(VNIo(!Y3ZgQw1Q2f}ad7NfQIoURxqJ$lA zG%lr%v-#@1msqowGKN($H_(rnzKv@7{!2tn-g0ikTQx(SU5(G4`HTynToFi6%kH6E zrnf5-EXyCQ29+(u=(AzV@yT-HMWK=Juz~1v6I!Q!m$8o8q>d69CAgy7+!4BL>F=X@ z&qA;?e~DO0zYs})l=xH!_MPL^?lx@q^(Vg}+=qgL09=49f-D_${O&`Zs*d5z?>-Jq8;b%D znPuNUfh;d5*Ks@^+9wSpMIu(s(41+uJwlT9rm1oB9gZXouagY1S}D37z}bW)NYuGT z8d9#FaOiV_&OWJdn6KEVPU+Fk7I{e~c~rIFmrzGTmPl7AAmXlFIL>nl1^gFN~ zQd~!MlnE*mAOoc#^(*02Bh#dKtW6yjH*zyBK3^LhzSe~U)}+Bjlq^Tc97Bj5nx#F1MaPP~mREBJ|AMlS zT$HAqGiGl#%Y~(%_K>&_Kh)C66OxHg?!geAyegv;i z*MV$wb!nyi4wzReb|}9dc!eXCLQ1&9fIk==6?^a)eQEt!=N(s`oHP+Qa zWMOC_?evIjvogmC+A>~Z3bsuN)t$uP=KOml0$RsY+N_S7jO-qVo5vo+vHgD9_V3h0 z$;q1TH$By&#qc-md`H;daaev_CR0j}2({e6PE#B?woxicN1WIe|1#!%RgF0Q`&7o` zDffCLC(!=zhpsjk!Qa++!v!s5;Ra`Nb*9^hPr5MW+s{PNT~@d}rJn3pQ`5TGe2 z1)=o?&f>sVjfr}sEeCP+!>MbA476#yFQH6brBE9*$?byj!Q*O!Tzv#bU}M)V#&|H@ zlcd#MOyJhU0Ai2>m6}I>9xqsQWJ}p}dX8yZiI8O9Ta)K!*)fbuF1V}ZIq%@@X(I%I zlS!okpDiZYoUS`uf;4Gf9t?D*sPrb9Vcj1Rpi zwu~2_tm!m)84d#XZeXuvNI;p5@IporrUlvKQlZMai(=%K*VXPr1U~S3!LzGW!$;gok}Db#PMCbljD&~qKbv+ZC3z;)3gSFfAZ@4P76rma4_Rh8psxo z9K@zJac`Mh++(EQYUULeArbXnZX$alRf*6%9{D-(5hsB*3>it4K59Krm>6vFy;vQO z7S+zSn)rgZd-?YQi0XF6FA%nJ-8Th;ucfhb$6=N0GgIYYRlXB45)K>6$SB9hcgCyZ z0Kf2j<+zocFvs0ZZthQ)i}31%1~X?raT;<>72uEDEbHd3BsUKR8%zY-14JLCy|Kfu zM_P2?6V)r`XHh6F0PM=ZgL+u*2aeYauO{g~M?v~ax@Xu%`~4`@|HOc1{N|6ZZbK!h z6Fwu>F+V`$@|$cXTZSn-3)hE?8<+ahax1`)QB+!{mhfR!)8PDQ1@M4vKfYm6h-m=t zf1{t~GVIy}ykdV+&pi|C}nE z$)xcf-Zg#*r6HU3mKQ#McJbE0UV@Qg6w$#4 zE_v0&-)D4-ewKc}4W?%64Gs--J1D2qRBkh%lI31Bz=EEkE_&n>;IbuSr;6XvQVq<*tz}#qQ!|o zYPH$}hl3({*TxBK#4An^_ngqoq=H(JGV-N6=iCzU*WXvav2chXF6HgB>32!0Vq1*< zU|J7Q^6_I_!~HF^Z~I9c7DGobw&vZSHb1MJ?z zOB9O8FKBEr@LTJwhSQv&A&PRGx3M3)3A&`q3>vb-XADqZ?YR3buMXd(vJUF1nl8gl zIv)g@^m0^kt$-q6=iSvrl(u6Wv+u;iKTeEMK5IVv#**O-?@D^1ce4$@bup&sj6J>~ zQLhcX+1l!>cbmXponwD{1e6ZQ4g$jjroB`)F9l2kZUGw4yPL)+`G2~YPiCMXgTE+j zZ{?9&Y;LTWR-9^5O+JLT%q%(@?bvtWKZ0}o42IEDg~>b|SU5y$3A~m3-atIm9>n~! z{O~Ox@FcFAme$g>1g&Y+BSJ0gZ;Oxb^O5bac2Cnk4BuKkLJUEWcX3G)4tCCYf(>Bk%415>uRJ()p$TMPh7v*{+1eh<;_3-vNx9 zr6!A4u+^I8<(10be8kuu{WW%@G~1-W<;F!EdF3Hbu}Nxp6Lh5S%z%VY>EhY^#_4VI^Kgx$~sRZm$@)vLyQTV9Rb84JKjA-Vk_|ZeFY@O$L`b21#_6y zc?c(xh@&6Vl)9XJ7`cq^DtYYMeo;m*L`z}BG?u7k03rTQG0f|qJS40Xyx{^7eY4<0#ko(=QKee;ORmj;gb6be&M1qiRD!wg1{|y%nfRp z?56d~tY|}N7lqq4`N$_SPnb_A^DMmM*ochX&K(vGX6jfu=NsAOhF=mkZy2@Iil260 zSF-$iMq=n^mWCwl0q{&3gM!0XF#MR>AVxrDOo#ATfXb#E9?pKwrzznJ2Wp}tc+fLB z0!yuLMKB`^%53n>k5vSn*$~3YiLkWqfH-^{@HCJ3=Zh+lL^1DT@|aUeZdN|%CUc1# z``HOYNi2q?v{`h@>wD3Ebx?5Yq`uLu+kA~k=hZ$4G?&4m*zHrw2EE9nM)HernODf-xGq=;6UW%bo|9v`CYpsY&9Al$TQ&tI1NmJB`Dyts3JB%uPkCx(&x(T?gQ2Sd{-y zh?|Rs8cFOaV&`?R;_pcFo$6>R=bo_f`z&H$`&6F5HS#|x245&FF@-!?-mt1h5+fWB zesT#$oR+cLGZ&kY&wFp1{W58u5CnY~QjLkmPXILHs_@~k z5m`nEv9iY%goC8R31NA}mG3kG!p5j|kEMD6z4Ow%K)ED!v$-!IHSWx9tkZI-=_Otf z4nSsU(*w3_1z*+y>lB@iU|$6U#{o*gM^rr*;<--I{x#E`5}OGz>gOdk9OnB{UNgaV zSwlrFin7ZW>pPhp_t3jzW$J|Hhp34_-hJ&Yt1+}t;zeh>8dAe(BYqT+vWD?ADFcL& zAID81%blmg$>z`BJK%z>YS!?`m}`P?!e`UMU}MAr=WCTSz1i0zzU?k{p0Bno=yt_? zd0i|R?4QA|UanTG7d4lI(t@&(ynjVKN+?PT4#3%-mND8jf^{cK>as}J_c>5q5GZP0+aXAZpQ9mBF8wmE%NAFyGIboX0K)MazIKH#p=jXX#1T zt)EBxXgemVWdex{c3n-E*LLS0$SH$f{Hd}YcPHo;Q>D5;z*|0++LynQj0jEv)c(MF z69jJ%%%ypIZHeG41*vMbIGEhEGSl8uY9 z@v)te=5lM>d%^6Ndl7xDj=YIa$Do`J+zOIoRar^iLSs zNPR2FgRNK#=!1m?0Q9&2m(X5)VlUK%XTLMQ6bdg(ThH9!Q0GTxjJD+7UE|KCU>xcY z!yQ-f`zbOMSiL3`Brsc55#fJ)TFy9U`T0DNcYj=f%X$MQpBe|vG7w_Mx$vJ?NzF&k zyJg8v@q>^6*`TBs2IN%);9N~qED2U>ccHkHbe1l7^sPu^<>2Z;_#5XV5S8ILA?UrM zvJ@~d0|Rug@t$uPRfn=O)Mt!gIL>ETRT~ahDD4GU3IseK5%Q~kcGF|^7Ww?v9X3pl zd6xB*!yDJ~0@x=U>H(%aEx-%7pK7d_4YSE%u)n`K|9%1`dqDYzYzJd$ow%e+BW7Fp z1B|Qwt$}BqY5YlF75GEV%E{5&JuO?6kY(WGWdK6L@LTi^x^w{TW#*t7UOln3! z^4Fg(Yfd}=uvAxR3gAwfb}a_DNak1Z&z!M!R$ROXr8>mO7uD+ge$x01ec7eV$i(4f zt}BM_?1m>Px<{X9NX!ehvQU|V<8_43a?v-ci`w~8iRVrOprqD!iGLSblrN~!857G| zmFznVOmp-I4kw&4@*T(6E`>|k{L*`TM#DlVsdPWEvh1-iT=gM_Uh43DQQ5%g~7?LsGEt};ixM1YAw%#Tr)<*R3i?k(BZJ1MF zML9?Fv)AfBXN-qV5}G#28Blo>9@*m7U-a%rj7t>V9VW}wxU@#o4_mXjYXHV1)bR$( zEr&8S%giymB6a7&7d=s)9a0bGO5oN-7G#_nw~x`7|9>nSu!$L=Y0Ts099s9Dy z{%+*~D)MVTCg~0kQJ~6S0RkqjGbKtDwlSW+1zNH|StpW}8UE{}UmcF0-ZA?zz;-A^x5r~|2C<3(xrqC$eo3I47$u}p7iYqDB)ofn;!a_nGZ%&BKz z_zrNB!;dMPT!5B3y}*ewaLcpJ&zQQGyGsuOOTGiHa|6rB#+5h`Yhs8yh1VerVQMkX z-s(3ixiA&9Gxeb%fw)Kh&ov&_758{*dL8N{gr$B|5D??x$K%X$$+~GQ@7Q3o4q0?B zcvhhMk&71A3o1x~qV|+<1rB;-LwK!##e&~~7e)5PvtM=D|MrFCCeavo`fB1>UPFUg zkUP873jIzh-)cf6C@o1(bW`1w=_NM2br9cQyM+Bipr}C2xV0IWrIujJ^wr}Xh^Ze& zQ6}%KX4uyr!ym`H>QLoYcS-zSk4W^Dts4)XIW^Jan8*V!;XP*9iUPmqqTq$Pe${ph z5v^=vhkZ3@^YJ(#W9`ewf0dY@jPp5Cmp!RsSxQ5CoHR=&cO7bD1f8U#Upus03NkRP zohb^DHy6`hQQRO#4eG*9quAk6?gFh*GK~x0-hHxFC^d4*Z@wopuZ+@7*fycD{yD?o znnF$I66(nKU0=nNFO`cVF(%tZBIMvEi4&8Rey&e&QBBz>jC(h z4ZH-y4kQr{o_9-Li@{v92iwo~8GY>>C;aQZXFL}iCu7~(%ZP3V9w52O(Ezo7s{ttr zJ~zJ}JPH0WgAE!WDi8L#ie6yZma8x0$0a}9PUP!@ZP{)70kkEB#{Yx8djfZ=mDL>* zq>z5>=ABqIoC~$B+3Ujoe-ijpu?(kQsDz8q*M1|H%_`L^Wy+mLj@*huUe-`BG4W%0 zP)piKI+{b_kkIKZu<<~w-5Tdp&|@LXQ!+v_>I zkw7E*CRmE&1p>rId#hV(l8X|f(0;s^FMiH|&7>VddiZ_Su65WkgryIs%h$jtx)XpK z1M_0OKl zU&n5YuG|$Byd{;F>v0$(v4^q=M|bJzYkt*+^1*x4QE5xN?5|Wnm@Kh$-MHh?`t`|? z(S1Hpdg1jP!Rywrm-yHbY338*B9za?e0uny6QMnyp;q4nOtio9ZSiFpYJFe~5%G}D z#%pu|JhjZ`ZpB$eGGu3u_kEC)CkkCNR@t(4&XmL+7)z}ZVcXZ1jKMJI4=*pBg@siq zln^)7amWDYRSNZ16M9<@0YguRXPSNpM!W~LSioe4m76kqRigO~eZPzM9G|zw?}dN4 zYe(2e5_r#Ff?GG35~r3uR%;ptoRr32TC>e=f$%^-Bv#Qbu;~=`*_)w8R>N>W73!L% z9Uj-m>5M4!rM7kvNsc95Wp@3(XB->7bYep#Z00fW3yrcXhpe(HWI-MhkBLXoQifr@ z6&vNW+GoOwHDEvC=G01x5RzEG+Q@zQMi7|_0pY|vY zg;6+Srse9J#50fkhMdd^y)^3#@vkgcpn_bc?Ryh1|G1_1YaqYvG+`0iJTUrvO4OOC zW6U^mZQ;+AC0hh{C68K!axtkRHWFc!rl}T#(F9P=R#I}B_|l7TWhKE0l?L~k9>Zv< z+`hAP>$$igZOvb`bbflf+9(e){H6$Cv#e0o3ANyl$M${QB-H>-$&llD9jVye6~3oK zbe&uq%DM)6QRQE=FVvAkun5E@4X-+Ni3$0c49lK9%2NO7103@;~VOd$@6h2#^Y3o!o~qRB=bWBLiLKxby@SN0TuDWeHRdilXu?MHQ=)MO@WU5Qg=hCrD7~f0%c|Ou z0^hojQ)8*9Gh?t{1J}K1;|;zGw=|@eVFAX>oy+>hYOv}6YJWwt;E`Q>%v~=-6?+xj z@56#{LHanVG?5fI&3mmnEb2=qP4;b;(Bl!GywfYWn=+5Nk|D&_3fufJCs8*~bO_*k zeP0BUy3nOwD0|gDcB=`MD4=et{}1Rbf$eJ;m`DO6WAo@7UXgz`O11&=mYF}#OwSPk zrLp+f)#q_2|4H~!M#N>m{;6&08z$b$8D=iCv_T|W(%FAjuJ#^;*8K?C_>B1w{rLF# z?H%Q?D#9hhL8^BOpw)SKL>O)z9?OfBLj;dNwg*BPlx^JYlWvf%i8|_yMXc?|!;Z~3 z8Ztm{@(Ne`!b-tX$TAuVu;n7Dr|$L5I*;@8 z=G4>c&jN3Lol&Z7K15$$FTy#rfFP?*mT#c9F|zC^-nYr^|3ohOJW!(jZV=Isr-on)4k6%x{+NP+=dX83f)frCYEBnla=HZLs;$-FmT#@qOMi?Z%x{@Ocb8;c%|! z4)Z)n_f&X~rlxpt@ITZJozO&WJ$tubIt6R|_Kg-K1~Hy~L?MCNrjS104smNeAFWbb z&B5>QP4yrW&We(W8ZQh>QCHx6=*zJljvui4d`H)^nglTL2kwJVbXmp3tba(z%igFi z^{YDIsbHms81bJ2Y)GcPJ)ACZzL2?9{~XKohR)%dm}A2Qm`~XNCGpB9;c_31sV27~sWAP{NyumfA21L_ouww%C6QFe* zud@?S314gxt|P-k{`mqCqLynzp!GzInC5`wYBt7H6E8cSj5vFkyye^u$kAqN79bE^ zQ)<-2h_HFju6SZC??y18tN37zQ<)tO(LDOUyhA~Ra&#f*bl!-Tu_nRN`SzFa`pRKE zT<6S}O%M=f(DpW2wajm;9o+{bp7gldEc~Z>z%ZV-&k$3UODrO zbTckKmAZ)!uy7w+%KVdrpXR+N6ej zs_+&o@3F$p$ry$Qvo&ht#i`0!UP47%ruZ0Wfqqq8|8{)3_nrh#?DI+ z3fO+n4_lrg4`$VfI@6_4Z5|OJ4RXa0kWnMRAP+L&uVbVI`68R^zJ~w7iwLybpO+6_ z+h4wBq?(zHBNE(ZPPgORCmM5p+*}@?Jcv2;P>$LiEnL5j!VxBau*m((BBw(u9C%U;9jt)H3=Oi$clA;FWt2p2?yGuVNj>5S=S>UE%Ls>@T5 zqaMk^Q1X{?dyVZ_nvvG_gRs)L%6$#7SCAR@+whlwskwW>9?0LNs0J>eVpCL=6PWY8 z-Qx*(fm6L+=}9cHRUH0-t(EePR$Teh)*hr1aePA&zdYZ^cG+Arjzs08abO}gsJIxL zu$$$P{J^cjr2>+Py3Y4(JV}?JD;nH2cK$~=T#s85&_s};CjTQU8tA9$GtZ;l9oTa) zaZzc7yIs{V#fO8`E!dQO5&XSE91iyfg*8KW1@{9@vHhnapjHykOpE^D?_ zP{2cZUbV_hIS6L)nStK5&>dk4`>=&)J0}P5%vb@noM~YsAC;!MBU{G|@<5#0ARD@# z`9x0g^%xflPq4aSyQ~_Zo>7qzjfi2|)~>=LJp!*oRxOpb%^9*(T zEx7;~aOgDweQs`q+JbUU#%JX3(-m_=Yu+n+VOIt1!3b9G243E;Nb%pnaUYCOo=rN+ zSyQz;03lWtA*(4!C;MQ^X9d{bR(O*;J_N7HnpTeqOzBZIzoVmasi<}?OYk^ES>Z!QD;QeN7731W0q04j}jVBHSw6o61r z0io8v*SdfKZ@{7uM(ZQ${sX!Fv^#<$@Mu?=z_}*5)RN+Q?_GDa!mL# z%b6NKg3bP)HoQRK{V8*r(qg>k4gGc~kh95<2&t?vgO?K0Yre<>-#&){!vhT)RJC@~ zpYrL$#n@557ZFQP7wPrNKe|hmvj3diz)?5*iY?ocu@a9LW&UN(!g2Ss06lH#phq&QMm)GDEHWt*gG1Nm0cQdIbV3Y8Lcb+tEs+Xhx@CQKWB|{Bx($?$$JtJFt$JNM(+_+O%#We8B{&}DdpH~3v7`~9fSjz)~3P( zz8@iyC4@q`LX}X6`H$5OhOpm6*VLQJI&6C-sS()^ zrR)IwEv)%nWC`$5&?L6-8g(%YWUciKnT9_{`5^ z^B|;$@-*;c70TO~Fl<2U;wuGZN}poYT2?9o1r44#XGdw{n%Jo&9yt=BG^Upi;71lc zWFd;{T(ECBTb^zzo zxps$+h8va;syHvEsnuBk_lhMOjX^Jg{Nf7(HwGUVA8CqXiQ&z2@|~8U>L2am=bsR# z>5&L#FPp-RbURI%^}%VTpdFRBwfcAR^cN~KKBGZtfAUv}Z>zbo8cAYlj7kB*fu1_9 zmFlwz2HAVY)UJ|Y0g`CB+&Q|%`N<_9C39X>ZpSfl)?|Zhk!r>JZH08(qyZG`&l=NA zuNxM`EU@0FT_u#3rlTOTgXT-8e=`!hrFuFyM?0>8|0w5V1x%Z4gX;v6le^{UR z>)3wq12@&laJa#PA|ek!jZPqqK1|OuhWrY|*e9}=dA9-21M|XX95GKd9OT(2N%>@moe1#|^3k?toN-67oS2x86g#zmp zi%?Bws_#;8Ko7G|B-_N7kFcU7rTDg`0<_6T#M^AxRNNlbEN@|HGmz6)0amLsqFG5! z9@j%pcE*$QGs|rlv zab8Pzl?=oxBbwVS#_;UF4{N$0)FXeohUp++LY z5_TDkAC+e)m%+A!-6Zn9@lWBsl}+DD#>n!@!5`0Hbq}O#|1e5oWtJc*3JqN)H};Jx zk=4?5Gy*Nl{&stTI^B*4pnq>VL&Cg04on0E@%0PR)vxC@qCQ-!{1vfpb`nE+tD)=9r zo~iopxLVAtcnfF1cSAdpOld-;{bzL zJIt$YO1bvbYm+A%>vw8^`8Gn?H(TshMNHCXRhHbJBRx2HU{zpRF>|B6m-U%LA&?cf=V;b(fD;18&VcSDv!HRnFG(f#=XpxW}wpe{PKbzH3vP175S@=-i7 zc(8p>RG=Z1hb+3N72q4D3SOSGqC35s+GKw#&17xP;~r`KY4$%vl2!l! literal 0 HcmV?d00001 diff --git a/MikroMaster/20260505/20260505064002-Config.rsc b/MikroMaster/20260505/20260505064002-Config.rsc new file mode 100644 index 0000000..191abd3 --- /dev/null +++ b/MikroMaster/20260505/20260505064002-Config.rsc @@ -0,0 +1,4506 @@ +# 2026-05-05 06:40: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.3.81 comment=xhamster.com list=FuckRKN +add address=104.16.4.81 comment=xhamster.com list=FuckRKN +add address=188.114.97.1 comment=lostfilm.tv list=FuckRKN +add address=188.114.96.1 comment=lostfilm.tv list=FuckRKN +add address=172.67.182.196 comment=rutracker.org list=FuckRKN +add address=104.21.32.39 comment=rutracker.org list=FuckRKN +add address=104.247.81.99 comment=lurkmore.to list=FuckRKN +add address=8.47.69.6 comment=dou.ua list=FuckRKN +add address=8.6.112.6 comment=dou.ua list=FuckRKN +add address=66.254.114.79 comment=youporn.com list=FuckRKN +add address=185.110.92.40 comment=pornolab.net list=FuckRKN +add address=185.110.92.41 comment=pornolab.net list=FuckRKN +add address=104.21.71.238 comment=crimerussia.com list=FuckRKN +add address=172.67.172.95 comment=crimerussia.com list=FuckRKN +add address=149.154.167.99 comment=telegram.org list=FuckRKN +add address=149.154.166.110 comment=api.telegram.org list=FuckRKN +/ip firewall filter +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=12h chain=input comment="block honeypot DNS" \ + connection-state=new dst-port=53 in-interface="ether1 - Unet" protocol=\ + udp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input connection-state=new dst-port=53 \ + in-interface="ether1 - Unet" protocol=tcp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment=\ + "block honeypot ssh rdp winbox" connection-state=new dst-port=\ + 22,8291,2222 in-interface="ether1 - Unet" protocol=tcp src-address-list=\ + !TRUSTED +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment="block honeypot asterisk" \ + connection-state=new dst-port=5060 in-interface="ether1 - Unet" protocol=\ + udp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=5d chain=input comment="block honeypot NTP" \ + connection-state=new dst-port=123 in-interface="ether1 - Unet" protocol=\ + udp src-address=!10.30.30.0/24 +add action=accept chain=input comment=\ + "accept NTP clients on local area network" dst-port=123 in-interface=\ + Bridge-LAN in-interface-list=LAN protocol=udp +add action=accept chain=input comment="accept WireGuard" dst-port=13231 \ + in-interface="ether1 - Unet" protocol=udp src-address-list=VPN-Server +add action=accept chain=input disabled=yes dst-port=443 in-interface=\ + "ether1 - Unet" protocol=tcp +add action=accept chain=output disabled=yes protocol=tcp src-port=443 +add action=fasttrack-connection chain=forward comment=\ + "FastTrack for non-VPN connections" connection-mark=!VPN_No_FastTrack \ + connection-state=established,related,new disabled=yes +add action=fasttrack-connection chain=forward comment="defconf: fasttrack" \ + connection-state=established,related,new disabled=yes routing-mark=\ + !To-VPN +add action=accept chain=input comment=\ + "defconf: accept established,related,untracked" connection-state=\ + established,related,untracked +add action=drop chain=input comment="defconf: drop invalid" connection-state=\ + invalid +add action=accept chain=input comment="defconf: accept ICMP" disabled=yes \ + protocol=icmp +add action=accept chain=input comment=\ + "defconf: accept to local loopback (for CAPsMAN)" disabled=yes \ + dst-address=127.0.0.1 +add action=accept chain=output disabled=yes src-address=127.0.0.1 +add action=accept chain=forward comment="defconf: accept in ipsec policy" \ + ipsec-policy=in,ipsec +add action=accept chain=forward comment="defconf: accept out ipsec policy" \ + ipsec-policy=out,ipsec +add action=accept chain=forward comment=\ + "defconf: accept established,related, untracked" connection-state=\ + established,related,untracked +add action=drop chain=forward comment="defconf: drop invalid" \ + connection-state=invalid +add action=drop chain=forward comment=\ + "defconf: drop all from WAN not DSTNATed" connection-nat-state=!dstnat \ + connection-state=new in-interface="ether1 - Unet" +add action=accept chain=input connection-state=established disabled=yes +add action=accept chain=input connection-state=related disabled=yes +add action=drop chain=input disabled=yes in-interface-list=!LAN +add action=drop chain=forward comment=\ + "Filter Rule to block FB address LIST : )" disabled=yes dst-address-list=\ + facebook +add action=drop chain=forward comment=\ + "Filter Rule to block YOUTUBE address LIST : )" disabled=yes \ + dst-address-list=YouTube +/ip firewall mangle +add action=mark-connection chain=prerouting comment=\ + "Mark VPN connections to exclude from FastTrack" in-interface=WG \ + log-prefix=Mark-VPN-FT new-connection-mark=VPN_No_FastTrack +add action=mark-routing chain=prerouting comment="Test sites" disabled=yes \ + dst-address=!10.30.30.0/24 dst-address-list=Test new-routing-mark=To-VPN \ + passthrough=no src-address=10.30.30.0/24 +add action=mark-routing chain=prerouting comment=Instagram dst-address=\ + !10.30.30.0/24 dst-address-list=Instagram new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=Twitter dst-address=\ + !10.30.30.0/24 dst-address-list=Twitter new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=YouTube dst-address=\ + !10.30.30.0/24 dst-address-list=YouTube new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=facebook dst-address=\ + !10.30.30.0/24 dst-address-list=facebook new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment="VDSIna for All sites" \ + dst-address=!10.30.30.0/24 dst-address-list=!NoVdsina log-prefix=VPN-all \ + new-routing-mark=To-VPN src-address=10.30.30.0/24 src-address-list=!NoWG +add action=change-mss chain=forward comment="MSS on WG" new-mss=1380 \ + out-interface=WG protocol=tcp tcp-flags=syn tcp-mss=1381-65535 +add action=mark-routing chain=prerouting comment="VPN Network" dst-address=\ + 10.8.0.0/24 dst-address-list=!NoVdsina log=yes log-prefix=VPN-Net \ + new-routing-mark=To-VPN src-address=10.30.30.0/24 src-address-list=!NoWG +/ip firewall nat +add action=redirect chain=dstnat comment=\ + "FORCE DNS TO LOCAL MIKROTIK DNS SERVER" dst-port=53 protocol=tcp \ + src-address=10.30.30.0/24 to-ports=53 +add action=redirect chain=dstnat dst-port=53 protocol=udp src-address=\ + 10.30.30.0/24 to-ports=53 +add action=masquerade chain=srcnat comment=WG dst-address-list=!NoVdsina \ + in-interface=Bridge-LAN log-prefix=WG-nat out-interface=WG routing-mark=\ + To-VPN +add action=masquerade chain=srcnat comment="masquerade Default" ipsec-policy=\ + out,none out-interface="ether1 - Unet" routing-mark=!To-VPN +add action=dst-nat chain=dstnat comment=npm dst-port=81 in-interface=\ + "ether1 - Unet" protocol=tcp to-addresses=10.30.30.33 to-ports=81 +add action=dst-nat chain=dstnat comment=amster.vados.ruhttps disabled=yes \ + dst-port=443 in-interface="ether1 - Unet" protocol=tcp to-addresses=\ + 10.30.30.33 to-ports=443 +add action=dst-nat chain=dstnat comment="amster.vados.ru For Certbot HTTP" \ + dst-port=80 in-interface="ether1 - Unet" protocol=tcp to-addresses=\ + 10.30.30.33 to-ports=80 +add action=dst-nat chain=dstnat dst-port=80 in-interface="ether1 - Unet" \ + protocol=tcp to-addresses=10.30.30.33 to-ports=80 +add action=dst-nat chain=dstnat comment="Yandex.DNS Family" disabled=yes \ + dst-port=53 in-interface=Bridge-LAN protocol=udp src-address-list=KIDS \ + time=6h-15m,sun,mon,tue,wed,thu,fri,sat to-addresses=77.88.8.3 +add action=dst-nat chain=dstnat disabled=yes dst-port=53 in-interface=\ + Bridge-LAN protocol=tcp src-address-list=KIDS time=\ + 6h-15m,sun,mon,tue,wed,thu,fri,sat to-addresses=77.88.8.3 +/ip firewall raw +add action=drop chain=prerouting comment="Drop Honeypot Hackers" \ + in-interface="ether1 - Unet" src-address-list="Honeypot Hacker" +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + extras.getpagespeed.com content=extras.getpagespeed.com disabled=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=linux.duke.edu \ + content=linux.duke.edu disabled=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=vk.com \ + content=vk.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=ok.ru content=\ + ok.ru +add action=add-dst-to-address-list address-list=Instagram \ + address-list-timeout=none-dynamic chain=prerouting comment=Instagram \ + content=instagram.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting comment=Twitter content=twimg.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting content=x.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting content=twitter.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting comment=YouTube content=youtube.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googleapis.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=ggpht.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=youtu.be +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=ytimg.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googlevideo.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=gstatic.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googleusercontent.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=nhacmp3youtube.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=rutube.ru \ + content=rutube.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=me.com \ + content=me.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=icloud.com \ + content=icloud.com +add action=add-dst-to-address-list address-list=facebook \ + address-list-timeout=none-dynamic chain=prerouting comment=facebook \ + content=fbcd.net +add action=add-dst-to-address-list address-list=facebook \ + address-list-timeout=none-dynamic chain=prerouting content=facebook.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=comp-lenta.ru \ + content=comp-lenta.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + smtp.mail.me.com content=smtp.mail.me.com log=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=gov.ru \ + content=gov.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + r78.fssp.gov.ru content=r78.fssp.gov.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=api.db-ip.com \ + content=api.db-ip.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + api.telegram.org content=api.telegram.org +/ip firewall service-port +set ftp disabled=yes +set tftp disabled=yes +set irc disabled=no +set sip disabled=yes +set pptp disabled=yes +set rtsp disabled=no +/ip hotspot user profile +set [ find default=yes ] address-pool=dhcp +/ip hotspot walled-garden +add server=*1 +add server=*1 +/ip ipsec settings +set accounting=no +/ip ipsec policy +set 0 disabled=yes dst-address=0.0.0.0/0 src-address=0.0.0.0/0 +/ip ipsec profile +set [ find default=yes ] dpd-interval=2m dpd-maximum-failures=5 +/ip proxy +set cache-administrator="" max-cache-size=none port=80,443 src-address=\ + 0.0.0.0 +/ip route +add disabled=no distance=3 dst-address=192.168.0.0/24 gateway=l2tp-vpn +add disabled=no distance=4 dst-address=192.168.5.0/24 gateway=l2tp-vpn +add disabled=no distance=3 dst-address=192.168.0.0/24 gateway=l2tp-vpn +add disabled=no distance=4 dst-address=192.168.5.0/24 gateway=l2tp-vpn +add disabled=no distance=1 dst-address=0.0.0.0/0 gateway=WG routing-table=\ + To-VPN scope=30 target-scope=10 +/ip service +set ftp disabled=yes +set telnet disabled=yes +set reverse-proxy disabled=yes +set ssh address=10.30.30.0/24 port=2222 +set winbox address=10.30.30.0/24 +set api address=10.30.30.0/24 disabled=yes +set api-ssl address=10.30.30.0/24 disabled=yes +set www-ssl port=18443 +set www address=10.30.30.0/24 disabled=yes port=18880 +/ip service webserver +set 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/20260505064002-Diff-Config.rsc b/MikroMaster/history/20260505/20260505064002-Diff-Config.rsc new file mode 100644 index 0000000..fe030d0 --- /dev/null +++ b/MikroMaster/history/20260505/20260505064002-Diff-Config.rsc @@ -0,0 +1,20 @@ +4163d4162 +< add address=109.70.26.37 comment=grani.ru list=FuckRKN +4165c4164 +< add address=104.16.3.81 comment=xhamster.com list=FuckRKN +--- +> add address=109.70.26.37 comment=grani.ru list=FuckRKN +4166a4166 +> add address=104.16.3.81 comment=xhamster.com list=FuckRKN +4169d4168 +< add address=172.67.182.196 comment=rutracker.org list=FuckRKN +4170a4170 +> add address=172.67.182.196 comment=rutracker.org list=FuckRKN +4172d4171 +< add address=8.47.69.6 comment=dou.ua list=FuckRKN +4173a4173 +> add address=8.47.69.6 comment=dou.ua list=FuckRKN +4177d4176 +< add address=104.21.71.238 comment=crimerussia.com list=FuckRKN +4178a4178 +> add address=104.21.71.238 comment=crimerussia.com list=FuckRKN -- 2.52.0