From b552147b56e1288b5cdffe060e895c081c31cb4d Mon Sep 17 00:00:00 2001 From: vados-dev Date: Sun, 3 May 2026 17:00:25 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at May 03 17:00:25. --- .../20260503/20260503170002-Binary.backup | Bin 0 -> 215722 bytes .../20260503/20260503170002-Config.rsc | 4090 +++++++++++++++++ .../20260503/20260503170002-Diff-Config.rsc | 31 + 3 files changed, 4121 insertions(+) create mode 100644 MikroMaster/20260503/20260503170002-Binary.backup create mode 100644 MikroMaster/20260503/20260503170002-Config.rsc create mode 100644 MikroMaster/history/20260503/20260503170002-Diff-Config.rsc diff --git a/MikroMaster/20260503/20260503170002-Binary.backup b/MikroMaster/20260503/20260503170002-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..fe889f74c7114dfa90f4286e40131c00f7ccbe55 GIT binary patch literal 215722 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 R89HI)+|c6Zr=7zALB#Q-*d zbMm0i?1_K`(+GrYrwSCPYu710&I|*Lu~SlfbDgW-96`R#U5U5J1B zC}rUFBP?>mg7sSAGJ1#&z^Udrr%t>&g?0uAs}A;qx)U>l*p0pU1OW$F`(2=Wg<^Vh zD?uFH=G~p9Y219S9Quez{~Ie`iVuw4G>=Q|N8_fwn1#&~G{uV=kO@NQ-e%nb4yzfk zUtEK$GWP8VpKmqTTti_frHmvV4* zAEgrQVFzN9OlHtjvDVFCFN2*?%WHn)BOlw;9@lY(bZ>jCcHG{F%00g&{Q7kvxAh$F zETAc>FDfob0iZbGiIu$t%6yFX;xDytF@<@Tad>z9H(~&SHEdoShhr%nbq4^B;4CY~ zCPr6alCQ%0no_WzYM{j4*K`8xZvwJ1*jYI}A{GsL2$FOKR|$NbOW=!`nzkEkT<%4^ zMh6EnPf<$o2^u*Y^_3C!@*bL(T=5Rc$HLt(j^`avK8)iAL?C(z1-KT(aXX#cQYl&W zy1dd|g|7!PN^FN4T5MyQyWMUDQyA)0Tq2})Y5a~D!7EABGs|P~_2Kk))Q#fy2GTc6 zHj^`iMXydid4WQW)5F}5cAl6k3YZd5?_~*W7hWhX)rgpCP^OQ%7{48zmq~P{KaGW< zbr=M3FE9iYfXQwUYm2#RrLxz(S9v(oFEuYQ`Te6IyF7Cu1=srOZU+DHe8J`&0oCe% zv5lrM{A@p>TFD7->HMP_g4ybU!YBQ&q2-~hp#qk&4ivyFM)3PfD|y`UGGR(pr-_(3 zUzGy7HLu3A%T#lz&lO4oF4cQlne%zT)X&d>DEiL!Q757%b*`8>P?xMcpB-gk$D{b}O>K%RHtCI$5Le?SRQ8qb1Sg+yVDL$JwCt1xSTWBk zi|>;B?2&KvNOrfQCw_GGI;J+_99w!DRrFT8a|m@sS35o1u5cc94(wszttIh_o z&{msx1`8DCfUvpI2^UtpE+f9`@!5*T)*Ly(@{UuDSXVuMIoZDa*v&TW=^IMbU4etK zV;40_`2py9w_ous^aywnmVGW!74i%B*o<3xRh4zpMn zQRc4$7;)z;(@gd>qB#Y=vtkSCfNdc(09~8p9HuR^)pxI{z$|m4C>Vg6MKDeJz`U`O zXwN-9tRl!u+W}%cGv{lNkblLywge`#norJ$Q>VaE$(9*k6bwVVS$K>d!&%{S0Yj-R z1^I(TYTQ~5GODIJhan?wC*^1Ec4qV+Q;iQTlXRXdXb1042^E0J4m6SRF@VyD&^M3+ zyDAerPnW^qNFUYd4xE4|W*-8^!7rQV_G=_Dch`ZAfsHo$i@Jg~LDmhi6NZPJ=L4IG zP9&4&7S$k>tYmDB40mK9$o(~jQ*++46_GS3zJo5vC z?iCn|il`2z6n-+apr63N8J)@WlSmb^`q}5xSo<{$)g3$Eb;i`XQ3#giA~V|E=Qm8% zQkpufV#i#;fstPA_Yqy9T-vF-M<}C{jF=%x#A`C2ANs803(z zUu`*3!4O<~OB8}kPV813#JO3&tjyzH*=c*+&`49l$buZ_4tefV`zrrHPEfXO6U`bnv1MoqpsS6QIwu!y z|B5z>IiFQ#md93nZxQ{>utm;DayLRZF#=@ zd~?Z}L;&!mLbI3t8-foqst|j@3vOg)2nK$Det&!m)h^^%z`_J6LM(AauJPG?4p;Lf zw2w(U97{G0#eNUXfEq6jjsjfO+$NCD8|HjgGB4+SaxT9WvoEH3TU<{%XvEFncGjl6 z%>SLYpHg~eBKi)>f5pFQLVJREqXZH@W}Ckm0X-r>2M5L@a8$^+Z%EloqpK#yd$h#r z+>nIB3aIugI>&dLo_n$U4l?143N9zrbsN|g&|THgcqto&!0;a5otP0 zk+@m*YwkEhGMf^&w|{Sg(wlGpf=;S1Z@$a*ho~+GdkajSP%mr>f?72L#T_px z4-nTj|I6(3K9P02A-JOq0{VRn=X`fGED0r^0b%)=CN7}5JG_watAW4FU()&c|E49n zqnLRRWM*%W*e00D^m_4>^8rtY`)dS7mdup7v-h1BFy6M^c%*}!y*l+>;d_M&5xZWd)i$>wyt|Lo+M4$rra1iZE?EEB`Sc0nRaVzV=6`6F{tpF)6#?k zcG9O7v?>?klo1~5#Ykt~74M(hv0XA{MnGtn&ty48fZ%`wc#xjoI{jBtaWO)eoM)B& zg9rL?;_PmTWp;e~Ur9-i{DPICX)?c7V(n{Cs@}rH3?yBoS;lfP$LA4g{FAPmu0?9x zpM&SW;ihe_)nKJzY~b2qw489FqiC#-B6;DhsKJUn6|29^r8_x3ef+M|g&J)LRNGS& zH+D=?!|$O!!13zqaPU9@hv+zQKkS%7RS=RXco!E&%ED> z_VQW@9Z6_cFg!Nxal|0xwy9Y87M$i zB`RS!Afe?MD z9;JaJzJE_$fQP4&C07p`5zo;)n5oS8MsK>XxBV zQ*G25TP%8q_zg&d9SiWZAzP&kb2}E31jdM+|?ec2JAqWvRml#XFzw z3GIZFXDTtI`da~2P*ueSI5(J;J4x@lyY=NB60pR6i12_C(fs#j#codjG2~3YkI10= zh2o4b+)31@CHr^i1wJZ+jUs3ju)a)ZvMOBmrn`~UQE4C*UxY|%bN{GESDR^7mb7=) z-8IxRbwQ#|u(H^~@(EfRP4(gI9-?1a8iIqKlW~X6!!Noj}_YIN%AF}l)15FiUf2x#$00FGx?b5=H$4o(jq&Mb? zT>W5_%Y`mkN$Uwy4M;24x~4{%NLvW-H8%I?BS(NuH>hC7|AHLbsD;L$DJO@l;stR?fA<15?D%5%n)v% z(~aar3Otld3feToF76g56p{nxn}CYjNV`8!L?%O2WtrrYPIo-MpF0v8`>q-r@#=|W)xBn;HH ztAYl)nbIahNx$x6gTCA`ip6;}mH?p%h^W`*oh4BMp_qyw(bb42naTBlXpZ1PKa>qtMGOMR`PHJv; zEBtFJJJN315Vp1aeAu)c9ZOGD(tmw_V71S^o4H(rs#?0 z3#mq6xew1}G#7aCgW~f;xmWJ3q!EKEeTmDR2RMitn+Hd<2V_{vV1(*=Rw~Ezc}5Um zhbqj9HZnJv4HZfv_-<#Iig+mpOTNo?^q%Kph3kZVR zm#gdaBU{RoGiP2;*Lrcg7u<$k-xIL6l%{grjf9HuucmYx!(BM7Xw}ZqvAI)9ul8J= z($LhfJdV+>Du_n3EfkgNRhTY+>EkPS3foQHXU%9s;^%D2oNSs-h0K}pfU^}mVn+y^ zy%SP0AaLOgWiBt}V4SIvx3`C-K4!dV4V762n(a52DgkW2h53~K#@3x^U6i2~Px-sy zpJ4m^e$wlBLT{BomU5mtWx|BP+N+Ks_>*66Q5d5G?p3%;Ol=50B0d!s3Q8rhD?q=owb z8!#sc0!}ugCW5kIjgwcqFM=}cDhf#f0581_&J)VJPF2I~p5aeW5zwD0i@%_o*QO2k zINnqjcK2&WZNA5iRytueunVvLp&_ZF&z{_;AM)||Uov{?GfD>`MzEM!0r}!!)|Q_# zS2UhZa3W}1SK3Ot50iV5$Mf9+>`ef|$poxuGe`C%RLQaB`zSBoXLM|)e2s#u4MZQ! zsOdVeW*%@UTg^2W=O`IHm%5ZatP{7PH4!ZU=A%d~lnQO3wSX0O0RKM#z$^hcjZB!+ zeqlH=aL;fNRj_)CJn)^W?2>x;ov(p11lB^65nZgW!i;$Pt)^X;0xUp-5ZumWZ{0$F z;ve;wBScFQC`VD{)1=ZVfii(WG>|BdMz>^nMc9&6^>g0U0*(eWr8VIRcz`k~2EQx( zI8HYBa!*i=Nwj>`TnaQ%V%}SA-*(2C08yZiHfAF7j#pJ*fw|mR&x2_tR3JJ;Q~@Y& z#ce|BIJhB?H~xZYpV0eqFTAs2f|Ox&8qpeOCQ`NLgQ&F=>BZK~PK`6NMgK}TfPGM7 zcU-5L?+=oKq8pn_E8szxtm{tfeho4xh6IrbT(!$mL^ugLx+z<3K)KIeqbg#cgI_;F zngkkkG~ZSps1$lxxjkhJwoD9ysMX=3mN{jNSSGK?6)|yz+Vcb3@~HYvwS(D9RUp!? z0fCkTi&`F@@nOk}3t;S}xIS?zXW#m*H~>nB1BUEdfyzJID2#pFL~I;RU+zF%EqVrA z^qd>KA$}rXXkl7su39}by%>Ipol^P&oAr0t;9U!x+WZ| zPF?EvRely%RT|Q}yXkB-fHd{=J0)fgeh)!=QEj)}g|D|?mvfmZ%BG=wE~@2W412WB zQBkim<+cheR)-_oRJGa*#QTejjNVL?sBd$Jf~Z@%YOc4@4b(6Y*tu$=r z*THrxP#nr6weUE#(aC-(_k#idVl4-rA>@n@5UPgZ{M6K0B*g$|3n0b-$QpVl98^K` zFvj~VYD9jXh{5)7gvI+%*Ym}#lewc0X_cGpnk@}$MLKhfXecSZfKjqJlzXmX&TC(n z+kq)|b#D6laljXncspjPC!{NbZ_M5cdjiu@2rzz<;`sX_IOmx1(3|IH-vFZevUh5d z$eW&JqK4Z|8v1(Krj}9=T6vfFvu}8dH+pm{%w(P{2<=h_spm_k%F&9nvRHJ%vJ*lNLTO<+UMugwGCp{{s{2mYZMBp!83Q(op7xDzfQ?Pm^klFaD~{WTP7|Ibm|vql(CRF){WaF|A(K zI$viLK@{;c!-UX;fl}}a;n8^GF*)AEF6s-eEJ#nz)XrbLLlC}O%Hni0!o@a ztu!Coly|6Bn=h1@t*9*-V_R8Lx*nHScNS_X{jSfhiX%mSdGZI8 z*(rL9n)F)f6o|yhY5G6RD1v=uNyq%2hfrD3&)2u5f~EWwejnZfkk+DuV~&)!S=UVY z0H&>%mL4R2`pvyDJ)2S0Av&yX&uXpku>Y$@h5D zK8Ms*eJJT9EV^}d*Ih9=AIEp3qw*^nk!lzwlTP)$C7g+eUrnxZ(e>K@PODBwa;;EV zdr`@k0IF$8$Yxqgg&2^}gJ9#fSKQmoHX+LUsLAH<$sP=>twSOzps+DB;D-`2PTEIq zj-=l^*v3QQgWblmY6R*fM7Sdj?uF=Ge2TUu2>w&u`oaCB<7y5aa%1ibm?uH&2dUdg zC)30E+rj7}$Yp?d5lw~z^Dv7lgs!`S&9B~ywy8CkFx@^~Z_ar5(mmj;=;>o=p&Gy} z=#8pNb7mEuOtZ}o)wglckC+GMDHb<&wDi7bL<@p%t&~CG9%x_xB#n;bzv|sJZzd9S z#*DNHsQoq4e+Sg9?fzbVW=ZbEM5}b2Apuj;i5<8Ya8*2Vf8OrwnH62jim=Sc!U);V z$>Hr5Q^pQLzue$n;WnGJZIJOzb_BmELHZy8r}UeH%+C&Tm_PkVh?qg}t9Zz7n;)`u z%3!@SP4rbszI-#g`-BDB!N46bHCrG8kySDWoq zUph@z1pz`XQ+Vl?SzR!reu*mA zlW6Jq0pbwr;5X+N3?D0oSAs^T$(g#%*doyqp`iKL{dJvYC%xm%Q0Ho(-wPS%!LDbiE%3*_&tFomXB(bk!h<7PhDC zFLW&^S=%XTR#L~C`tfC2_T-;1*vDeVGr;%Om7}C5PY|+-F}wTsg}u&{58wsoe7(#5 zPUfNq#v40-xJF(|sm;`@*Xn|woBHqBl0?Cr7s=|tM}jJu)*tQfX#h1qHI2^2-}28pARXW z7z#FudLxMGLhZVnC3mcy4}j7QdApM4quA#=y~0DSAru?Gg8in0u+x$WD<7l}DU0{~_bW!8;i77klVGLh&2%5Tu?C4B1^Pkn! z51dT6em|!44W-QFnK8qkg?5PAamjNZ8B1W+)gKrCHRw?l29?j&5mpaSwwV~xjA7OT zsxXH*Gyc<`7HFo4%FNhuuHR|X)ztc>asfor3f#|C$6#!B#qd3c?E$N)2kU(m=N zVR_-UgyZTUVxJh&UI&VZEfN<{HwS2tk<+&kfj|t47(d!K9WUB0CPqM&KT)n(~w{g5;eDX%{yv1J@hVcx!xz^oC@~b^CTUY4p&|q6!1n2H<=MR6nbuF z;uh$0(7(XH$&#>GhbR44c3SZYw(SZ3;;-fnxQXFaTODFjj}7 zl80GMS(`s-ltRHtHsnp4(qTvEhlVJYQ6kRQ|s=0oxrL%Kf4|>$Pi)vOaKTn zZmbPQY}BS~s~ieomNc?J$ebw{+`O68@SxewrWc><%Ab}xTkW4~FGze!zwK*WUchor z>;)@PQj`CkKS_9WPRpUIc*}St8hw5A*k>N!17#^Y`En8V4Un?pVqdB&(6`JuERdvL z{jc3nZBhj}yNiwi<~$>K5I~wB&h|X@(DG)l`X-go1wT^fF|{3vQr#vb&<{3`mUp^G z7YNn`MUk+mX1nYKIM63rdxcmSp(U^psV;E^gh9Dp8Btx|YOkey>91quE_@&`bW`Z$ z>^Ud;Vdo;p*#HbXs5w$ff!)UXwR8%Upx&W0)^I?G^*{KR*EL0)>x7#X*}+2+CMO1c za%l7%_RbIEZSgqVJw=6zE>4?3mFl z%Bqm3FAzJ0+!CBV;v@?@pU$X7?;*e*)0_p72bdO8Iny-g;~(V4=_A$d1&z-7ridE% zB!2Uk4&TGiA%(V=puxWLm>UNdUjz}Ca7~(H%Og%zFl8@p7kVx|{`#xM=s|K+4w#J3 zLHs!5nC;dN1R>M~h@e^cSg@3OZ|7<3nie2p8W(`2_t)*fRUnk_Q@&Us)Rf9hZ$p93oIlS%#`WQg?jme%L6M5pkjo~5Mj9H0Su1Pt{F zum~qX3soY2D#j(6z}~QjiDns;u!;EGF?Ey<+M+y9QB$f1wU?5j$0}N-Tn!sqA*mWy|%>PdSUKvD?5s?1FBT`7)gq(uAgrR(mtuhEQBJ!9pLkkZe1` zwj(o8jgo$lP%w6}nlT;eM4?o-ymX}^<2-VijL zCn_#j@PwfkAgz`m`mA1~M}ll9z^@GMMzH z@T%Nu>gLpi_Z1%&w5pRce|4}4-=u^o^JF~6C|tM|M4!A}M$dvu^I}r}-_1jCvVP;e zdqaBHY!=~hqV@=+#m2lEJBdFC*0cZtlJb*-dAxZrE)NH7kv>AEHSN}{50kQ*O7pe)-xmEMJ+;V znZhPRB7!PkMxkO8FL=}!ISk02_@QE8Z@y2T9&$Xjy4+x6ol7PRax|$s5s0FnWZWRt zi$N0_?v=p(c{H~nSptBv$j}HxU*lg1=YYh)mF;2E$msf!PDJGiM;8Th8)jw%%0V}R z2UuVd=M)nDiNmtYuL45Dp^8|?40_h^;G7btom_Vb;LLv)r46t)gAhfnfRb#O9G~x0GSKA*R=yqrrpK6hquG zx)08iGExMj$!!-dt`V6?PV`rN5b!G@sb+2O$(05C!@OPZXXcI^2095hf_Gu^8ofa5 zds?~gEYIluk7J->kH&H~D&Os9w^WHCAO8(MKzVm3i++VbnNh_pRF6DTz(QK1dEl1- zG&dR;yCj9a(qjogryXfndnDmWa{ALT9{Dne`3Vq+W8%RnQY$7%*oaz$e8MLqHQFC` zlmC5-g;e7Xp&TME_45AJmQTOpc0@X*&$CYU=2lW8Qi7*tp_nxd_muiXNilt%K__Gv zg^Fh^>oj8?Xg{oepIq40FDKP;OtnCDwyI~3f@V}0sRV}UC)~l+v6ko0c4rB|;;>-# zk-+lv!NK59${urxQjS&ZURpUzZw8Db_(k#|c1uAy#Ipmz- zv22U$ysC;#viJ!tM9cz&=Pqw$sEtzPGS0e9@s;MPi+aynr!Pw&#f`XYE|yI>zu=)D zc;Ct5u>vb;3wXGoz6dgJlr0;2P&cxpZjr_T*zo5HZ9qVvNQw^8a#1=uz$(abKn$Ab z>V=aa@I-92gC&Eej(HEf=F?4sN~p7ChE%y}5T|zA0&J!8I5)Kx%x2i?XN1s8H218( zBAEp!8MTugC#EM{wH3qz*H6^}z| z7ByL}eeOYsPAH7SEM3kPitCwOE`S>IiNpSb5uq!g;-bGcTEE@LKFAMY4>g!aNX>8S zEOPcDEzb(--7HQjbQZdFSnVVU{$!ZkB&3XaCn6HnjRZfL4Z8z+kSA}kO%U{yCdT7v z(~iOE44Y$32{LHd!QhN6JRd1UPeEPgslv{IUqD-5Jg9nsc(>Q3QD!gEq|LB^zZccbTjfsd1PrBXAX5ooZd7=$DcZJ@ zro;hB;j7vyTA%7iEx}zc5V8`|kR{3O2f@<15?9{QLtjK>Oeu_#y)DDwe4ftSn|W+@ zHve}uW)+WV*7n-QWBeR$pq(u^L2J%Si?TwE;oKL3?1KjR=nnI4xoVPP!;0t|h8iD| z!0;;66OC@Et3oJmI?Ho!~nRs9m;HC&77vt4{XA^eE0{^J&*esuvdc zDMvi+T2qaBJvyl}f!w~$!>UGy53>5~EwJchTf%^zxIlqoj)@)3CFi~JLNp2EV46;$ zgN-#TGC!q7Cb!zcq$g)63>BR`W^jV4A{L9nMT=GpsH*10hKkeZhuUR{462aORkFv! z5Og9Qb{Z(oQFZ>aWVJ$bksh0Gz4L6(}r$g9R>Yaj@$H|-5Cr_7|f~6 z%z{W340DZ%XXjK-rG3yGBvwAfWQW{4L%R&OgU42l6K_<~XS5inRxnMrS`}T)7<1l+ zFx&!wb_JB%?Cm@OmTuIfu2~P}3Am;cXvrk)w;ArzXGp9oFMCbbFoQ*9$I}<-Vc7w& z*_}rSF-T-AGKiI*?^n`&%eRDZY1s?gmMp`g3t0lfya2uXc+ObT-y7uzasvSk>|D>Y zPkrzqj(TKj=B{%I>w{K3mq4{47)Eh-y z(hhml!(;*MMOBi@0ExIW`^@N4wsaHY_K*nXnjGc<-6}c`$%H_FN%q0g_D6n>o+?yQODjWwU3aw>n^Xb9gE9Do82SkNXaKq z>DEx?AwtNkz#WiswSL^Mo)E=?z*E*Jvg@5uBQ@}_sBY6~^|j{ElY+c`1$0Qy z!qx9m+SFdz8VPWWeF$Uujw1uJDd+Cy(tZSiA*XXEPjs}V3uS&SStEF@${*x|SL~uR zMj{!%j_c*(G}K8m?Z(9qMLl-!q8A z&H?Jg0z{c6X__#wa=BNqQ!0{srLLZ`?`K7_VPGbE8abp5%*M0UY4Agcha1XUV;h=D znMkT`uoZ3Ra-ivubA5K_4v1)X2MU_Q-u6EXb-FBHg zLC7g|0A!(V$yhM=i~*W;;kvSutf%IEIt`tpN;W@ZI;#*xedW%U{c5W1WX$$B@re6t zC%A*PQAH)e0vu@Ir>|Ag0iFsT-hg)eq8I9W^!^$%Nca)lCX)7(8F`ZNPD;pS2Byy0 zWXeW^(6%dyO#%)qFhZan?1bRtuS5}4+8wh%mi(xwK$Ss=r!S(P&GR=l6^)Zwh6n~y zR@N!=oY9UIBx#M+p&vMggbxkwS1sH(PpLZ3O?_23RShcl6bSdVVQ=6VCTmZw#P+Qp z;^^CaCpSX{qRpqW45C4YC71Vj+EyR>C&ypIb!naVDj6O!a)YdlVSVv7A`PHg_%h0Xs(SUaNQ+6{B_++@mI9L`Y23QB9uF zA4i`pMt=(?5dg%WSf39bJ=8Pd?f;a3(@e@r?Ly(DCE6Zi?e8}zpKrTVjBmL#mi7F) z_VG2FFfGsa;4y}z&p6iQ-R0~QG6gySRLaGNH#er+RU9a>%GlMj3XESMejZn$DU=Kf z*x%Vz2VZ?lwi3jG(q*?TKWUJta^8n4vOx(;zv?Ej276TiNHD^;Kv7nx@JtTrvB#QS zEiVi{sQ`fKO|B>8=|>{G(?-&Cq#312I0U09$T`=LW%0d~gek7)ksm%=00q>O8EVq+ zPVI#+#$$-(iOQ5GkV&t#P)kEk?}e1dNgS#$?lDwyP7 zaLiEA-W;J;q!I>{goB;l=BBMEI@kQ_xJsJEK&w3#bd#L!+`V@Vda zz#1SiX}$FWrm;YO+I#8BqfwpmEcx;1Ek2s}4wZeWV%h8!}6?{(ri zI8nyX1T_L;&Dm5fKPjLrER{<@`r@wCoqp#0%n6=#v+CUrryPm;OICm{y49Nir~L`d zMCj_YXouFZM-g^KMaCG=wGCav?lszH?gnWKvkhXRq;ch)-}Og<2>NXJ;kq{ZqqY?H zJ;kL2&fA#Ks7SceY@dZ0QnDx-6RIF6MAY>p8vm>HDblX~dR*^XcyZ-tA5jax89}4& z&mJpMcH0tU-3C6oTQMj6k6#?9G`%-fuWz*Lyi8md4=tOv1P9?-Y%xBtcu*eABPF7ymPM0bPy{IU+N+- zOpeY0`*9nS8Bx_#Z8=!ErXBreSB_52n;Aj)1FD=vYzt-E>NKvoEZW{&MUI>v+0B?P zA2u`DM0%pV%Fm7~8eTKgSmAHM<7?BUOwq>hu>3Yi-?bv0U1VVX!-~q6;H3DO&4TGu zn*PdSY}YOuL(=>!jWxY8vU%{*iH31FAE3UIFW}v&fACtCw3M#ALe{9|0j-YONxb;0 zejL#+C=jFQd#$vnebdrN#uvXf6ftx*7O>2oM4(lTHQI_l(3=rstDl*J-q6#{*x0=S z1d^45qJ+b<&&Y;iWZeTL)n?(SL!rz_^htJ(jjQ zgU4$+n_lm8s40Cv=EIzcr4K&0nL}2r{L8UOh1Eh25y^<5EN2_o185jvy=~>UeE^Fj zoAiK=>?TB^J@TZl9j!-XroM^s8iGCv16$^F$iMePjuBriP%K`@usxOzCPB(X&+0H! za3b)XvmYO`XHDSAzDg8Ww;pRK?i4i;8Gl&vR44Vz&*<7qo<9o?p0#F`Vd8r|#hwO| z*f0pLW8#<;8m$N#8uY_(%v}t=Ec@D%3_8fXcPIz#IIFVFGWvCq4#{|?tfsRVjzljU zygo!ZflmDNdAOXw?z8|ya#(eaXYOTDXz^a22{Me`)t%vvr_#sFz|^fFxH83gMw_-! z;044b`ivXE{gMmrR%V_G;Eo3`t9vPpq{P_D>jfRcx!g1OlZJ~oAFh=uL6Cj1D@5LK zWx_2rf7p3u?GBMilAiAgS;%dP>Hv097&`S>+;Rip0Vbt~{~>zgH_$_!r#d z%K}vTUIE4H#8vZF1B9iUfpr#0G4MOomP~UmBRln!3vfHP^G%K!Xc9qi%=y(0x^$^;W-WuX!1+Op^iEP3oXYgWHg}nXWzWgX%U;oaL_$PT?5qP2b_u3PQOJ?>Q!pAMpqXT_$tX z!mzd|ZOR1v=tYq<7#D|U!TA0{2N79e1lCQJ_X<0PtcA|#GWTP?Ib3b&>}0Q)d2Y$W z0M;)I8g@1$c7jeQ3XAjA(+*5jGFPoWNTpex1`E#PV?&A)sFbi!%IzOvFcMl@IXHlPDs~5-OEkNE9R!dj9%AK^)`x-d zJ$V9MPl;ebZ-~XIdj{yeLGnaX3bx@w!E^`s1Q?Ksn-yc<7XR%9)j9+c*9JKX8WAFB z6(R%zO#pNyTQxFGc#TLCK?0ZY5VzUaU_O};BlS}C07t!M9L0Wqbg1#qD(2forQ!yR zBj3kui*k^=x9rST3GRbVy33_w$F#K`T{#K>V&YFgVPiZe?5&5tmba3q`M%p-^L>MjNI%0)Bl0=C zeLUDvzCHi*JTc*olw==22AJbnvKjL#W)9_gct5vT;wEyco=Eudwyz66b~vW%97*>u z?0PizZ$Ic+Bcb)PLY17RGvhJvuntjuZLsJ@?V0i%<>J0-Yw>ke5L@%QkMO$ivw$GC zR>f>KA--3P#oWZv#v<7Dd&jO}gpB2=v5CK#TZ?$rBOgSVfk%YfGV(*}TPU8oAyg!?o{Y)30@2>`eMUGXrEfOY3;lXAFP#4Mdv^yqRG zQBK82Xg28}rMz@~O?}Ku#55~)i0Sz@eGr`<8`OW=2wh6vSZD=G7Of|Zbfd8Grz3I( z`GWd-_`;$dlXmO1c#-}3iCzjp`2hEsBtQ_C>q6-wm==_tT0A-3=Y*C+<7evq(lB@z zFZ)07xGQkL56F?BbS6h5i7t6JUw?6bRL`mfUa>S~yhABnH*UKzQD35FMZUILjOzr> zZJgTm6q=ROOcii6>S}dlM)AJ7ZT4&dF}5K_71<8blxkA){Axlr(7wnlomj4~mATyPm-kVS1uQrE;^mvrtQSOM!$lLJaZhYnU=>xzamx4Vhuo9%Bm%@ zylO6wJ6N|b+N0Utt8>1zUxSGnJ{>zm9sX!M*+`vZXVj8jvU?Ony9z63GKlxkAD)A& zR21)1XJ`17BMkopmkchwE8n9xDEsmp4}FxTena@x0@DQ0D1(+YpKg=Km=5bpFre&< z6;lS5Q)hMziBAih*Z#ZDT#C2T%1KR3t75vJg`YTBxQ6@@Pya+JtH51 z#AqB{Xuv=YhT=KdakZ;j!n&$3!E0fRU=`O$r3D^7HC`AX#7D?-gr$I5kMucM6T0P-7s!_w0S zo;aCj&9fj%8dC_C?>5zRuu_}R=q?6laL@Y4qt9+AM%By5X=!yUKn?%bVNCtk(z{tX zgD#ch21N)QwAfHZ6bwKs#+}@ZNyRso^MaTqLEZvbqmA^MoPttG#5ETk@9hJ=1m?9W zfOC*Kg*^KZaS8&`<0cjNZPQJspy_Vq{U*f-+c% z!;nG^q2WwYdT4b!kB1}5qNnCkNL8Ch&QLH6SpS$Z(C#-!&BQT+7w4Du^deWem$VEI z&6{mLFZ`Jl;}B#S^DJwH<`!Y=VZ8Kw6#%)MO_=s=Kh&Vx)$odq9m8inYOds_QWc0v z&0EOA@h})1fzviPp_SZN9Z-dXW52Ql*97h}W4G}o?!AGNI2@nOtae!J^x+ht6C-= ziPGh`=(&7fz4By?p$@O#(qnZySeXE~}a{>3)e0j#%v83 z%8{`94m%d}73B6Tk{S>R<;)pNK;K^$I~#ql4!iPPC}>!&gc>qECOd|1U4~jrjDfI> zEN0BvApiJl5tt)g;>S{X3&f5Ua`~(T2ZEtDrPvHU_@*sj#d8t!;0q9HKMX-E!+Vdf z=49Pi0T1qe~IN1u7bCL_Lkl87Bqae_coi3#sfG z>{`xUCy|nN&<1yk+%YnUzdIMWKjp*poFNU^p4%FA2ve!}ezD4_XcF`D3*frQ7ZF+# zuDf-KYQVem2YDT|y~H2FENMUc3KN5sti-QHz{T(v8DfEKg-M@GCPANYhIsby;=*4f zs+OH*+QsILd3`Pp+)SdKhjZLod)6|^k6Tp4jIVS9X!gu_{|wKyx7hU8wY? z->+qLHlGysYhxQbp7q%Fv`6-^$bZhf?5f4$a{;hvMye1zZxE+WDK9}eHf&tIT>#S$ zTKE<@LkL9QF7NoL^p0fU8M26V-}SiOMTX2NCD6pq5EIwQl|3^@O_Be-0L_0XlrF6? z2+9_~B=1wo%GKkL!}!*cF_;Pe>}0-jz*&L&tMqdAYXMYTpUeFV_nsC+O=hY4&Hmp1 zE=HB`9=(GI53COw2j%XoirlO^1G@}Ih=Vs6-ZdFu(g}5*EN3a zRTP-S)0c___|$Txqw^-q@`@bLt!epP#_^+eNUy}9wqGO&6`7XT!|&Mc2G|-=pKHuj z1Gyaok?ej~`!Z`J6G|#<(7_-jb2C9UXf%NBeuX0TT)OXlIoO@ygb;zhxyJAF zcjR!yjeJ(1ZIPJFNSyMeFu5$sxpsF><7fX!?Jy2NuZyzktA^smqI@tSTM*;#Q)k+orI^lZK+mX zQ0V;Dvb;^mCvPF%YDp;2%D8z>^)to}TQPmkQ;^Z-xt)1t-JUGqHd?@%4JLYd?*jxh`@5KpW}EGF-F{2|9~lbS|KeP z?e;9QJn)IDT<85#!}1pC1qz5RmZS%^jfvj44l~VWWSluv1{jM*#v|+glnnqPjn5gZ zpn2uQyS$Z{al6=e^CmAFbP2He;CEv2mCPK$+ibm&%j-ZqxYcrll?3Ex^NcUj$jH<= zy|ZTtJiBP96woFrYh`w9yk1evSkXEB>YLv=Zqwz_>ET<0z->^tr|!P^9_Ybq%OMKt zd_;WaLbwY^W(=j;M8$K9ARtok?#vhifQJMp!fWbF^7~Bvktn-b3igxSxW_sS> z3eNd@p+bsYy7B|G8bI1>>Ie5WHqAvSiSL5nlTHhgm^pjK^R=e5|JdX{6(S>;E`VO8 z^#y5<$tT@TVVDO|)#Cx#CG9V8s!|DYAPooKh->m(7Aud4hzIM$-$y0ROh*=X{}NX> zqT&LYE7Bc%@!roNRswmzm3d-jJ6A1GaRSS#N8pAPyEyB)<(af%RSvlsbu>L5{jCl2 zs*+M>le}8{0PuxtfPC$nAMuwQ6VQm`)cS_o7%uZ$dKC{wUW3 z>s-3QdXCPx&*LyN8JEa&;|Wqu5qV*^@I|YSwqXH037&ewpZ_9QyRo1jQ!-5!#|p=! z@AUvO3@Cq2iQkn1WMWxim>&8rcA)xMwXG(EZ9Pg(Bhz7t3YQ=(Bsa5d9AK=+KuzoJ zpGy%?OL?=+yG$+1Gci5BhZ$G%RyEh3!TLwgV4gE5{6{GVf)6i^U2%>6wI!FqZSY=n zJRKpaho_c}Wt+DLix}Z@Slt^yqDc|s@YU!E7y%^CD4I-PTN5olUsudm-OKVG3FTmj zxq2O}?KhsvqwCCkf7(AGsfuw-Jtlvch4$#FI zu>m*~VQ+i>WrlO?LbA&4IgrXAfUn$gyZ6515|1xJeQCtW9v#3&1-s1Iq^9PWt&ZEP z-e(g2`@3tP4wLPhwL(~oa(>^<%upuT-gyOwit3Co!@#i7Q+(-=aC-g`6+c`i*IgR4 zxS!fMlytGUS*u@;C3D?|ff^j*m1qdDJn_JeJ`z5X%>^D3f{%2w;k*pguX-eU_*CL$ z&Gop_-ozsjN3Mn;2$$_H4r2t&57Xip5}lyy9`BQgi^)oZ%-pVs4Y*T)dc!I1I3V8= zL=g?7A&^O*PeJolq$o|0qvoXNCFRIQ9{TvGlnZ++QeJx`OUV%->T?1(4KSluf?(Lz z9SSwg0dzNto85x#Jn_BpKH(fNlBhbG@6XH1CMog~r*cOC>>TmgNk@OK%xA;MURxbA z5gQJ~xex#Hy7NE~VyLxh6ja>^J3JyRH=T};?uvqIB&jU&HVVCYae1NyJ#kbD>1sQS zH_F^Hsvs+xpl;VqC71Y)!MO96$XKK0E$Ju%WO6scuO>U5J%f4C*o|6lr-8I49*surLK#`?}!?$-a|QTNM)1rHD09t^YsjMI%Q1>-zb4 zDVM}9V}^Yk2;|lTtD|!IuXMAs-z~s6qdtlM^nO5cblIWpc?Smj%pvo`0C7Z!qpp+2 zDkOuzSd3=r4j-GvVN#l;ZMO1Qm8ar0iO+r-`NS6(2EK4Y#Qi~)+HRmtJNa}BhTtWHDolP0tJoF`Z1weP9NVgUwk)bcs zbhYNN1N~NtZ?%0RA+|qdc-rMAzuY4|_;HG=7ze9?|I=_6$tt$u1m7oqJ#p4kmk@qT zEDa9&7;}xfBq%{@{1f_y`{fP;ZE@pvM;J>iUBW{35y!4RVhz&2*i7{+wg#gJ$)qq`+)H_ zCWA9XIM+c@N#%1Dw@^09WH`D%z=XbYz*>jjeuk3*B7eeWP&PzDswfb-+qK{diTx3n z5g*@D(G$6c7$)G=u4a^(sYR3(cTJ3c_V-x-5IK&zp{eaP6Zg%k`mX|?mvToz=~R=? zfv{-Nmv_|0EH(dLf?|%iN@Q)xpXRvZY-84N!dap?B6v^yTOI@1BS^c74@D3Oo-@yKOA!#!piBzo-r#YMqVhXfLYL% zYhnA~jH$Vv?em@&{$`B4BX*J0?O?9;e`o_j|r1etfME z*8-bFQGXu$_^PyyX&XsWJK6e>W*N8 z*xs@iJ@RT-wY#j$wOga@u>ZmNC|mt~cFBbsQPESNMq`b%<;viC+@1?LIe9o9MJmv=?Mcg7x5%diMzU zSbmSGf}YJ?t@)fhB5KULD;dE4Jqj%PSXFL^22*P4H6KWD*RT-B6C#vG`257moIyET^(R^kEPF8TU@yI!}}7cW$W}TABKt3R?Db$cCKL z6VHDR!Jeu8S_o6InA}Ov1fP3DdR>Q;(LSE1Qrh;>HN*_fb~{gZ^x$2no*MC1kPsnj zPkBL$UQtuk-SE(Nb|!h^aHvYl_NI*1fhYWW zV_U4v_hUA=3{$fg27^bp+8N!-q3m=C*P6D>QBdcmVsDjmWeI3LbjDi{&4wjqMU=BV ze=0bdtS%vXtX)@q&CEqHch)w*G{0UENHgb~Xey6ilu7a3-ysb4oalnPIy+z2BIw8Kv`C zsa4k3Cc==3^H1BGe=qpT z>U1t7_-}S{c^0~9W@}R+XrW+{ zb%B}oDOWf(Q0gsD&e?d!;L?5f!rU=B*45^*6*D|z@oI=Hb* z=GV7j7JA$@Oebsrq@|Jwv-GXcbqnKYpWwVgA4fH-nsRSwMrobXosdU|1)1Jw@^?7; zynFXwQqH0(=UxtT?b2xF@@lP18Tk9^Zwbs5G=Vqdb`iTiwoF-kV;`f^>F0Y^Gr8O$ zn!>(X6^F;`?iH@10PR3X0_j8ZY792Z#L`zbC!y<+TR7_@-ykuryukL zs^S^iYcMP=aAd)L>FX`x1=Oy)1BZ13wkj>{|1#wXh(VeLwzoC0D*N-=@UF88VS*p( z;|5%G7=lc;1Me9V>C072Eqw=Re@-ct8|N;i zL#4Nkns+D^JsE1PsVj3%ukyg5G{eMgH8f+gne?M%V@La&`DLiaQXVDZe$%)V9|04Y zK@ZZsF(gmHBcPZAuae05zloe$QlupkU=+IMJtpfpF}r>ohw>&K*6LfqyUuggqj|5A zZ;h7NZ#fom^}u*&Yv_7k(RZW8EaQ!!@}68&uCL<%pV63E?G;eY?p|R8tJGJQD6>f_ z_~M}#INVNl{|aYa68P}aVvSG}G65*!q~#PfoPark6P=!ymKF7&qGd}lF6dBI;omYU z@>R7o;&Hd8Nfbm-FK!`u|GBRu7VZ_=*n9O!*6$ez>-7GMRcKHwK-|+F_CUakT^6s$ za*nx?-6K=^A48_$%bCu?qU^R4#G$?6)K+Qr1O*6Q{t?N`%LIC&5$F*uEJBqdtzn^`xcI=+`_>I|Ev%e4;X3RdP zRUyJ5$z)>&S<{8L);4*-L zOV6JbdKo}HImF*?-7S7m%=&N%Yx|ah@NeyyYJ$zSdui%ccD+~h>E&c~XQrlG(x(Mt(7OqB_88yMbyF*duB#jhv;Vp0tmeDLvN{<;H!Y5^*^>aN z-GG5grlB_g@Qrm=jtoVnVTt{N4X;>W;L7DQ4HV;cp1Pe^3~nsl;F%Yo$xY}hVW|bi z68lPlUk=e^HA)HJRM5w3H`i?;Uaan3H9VlASdp^`mK|qtg%tQrBU&PMKd~idfX-#* z63*|Gv8t^-2{4r^9JSn$apyG$k>XKgB5emD(^sE6?B#E9^biY_n?7+=eAfULPlVQ) zlMyfFlha4nlv2?}LKNJ~a9jcjx)`lve}?_~a%fRl-3l=I)Jz%zkW$4!;}c=f%q>Up zO%bWnL2-Gj!F?4syAy_>Kq6jw3+dn}mepSgLuuj)pyl^G=C1d8-S({|8B0g6qFl{R zgdv&zG7-kA=H~Xot3t%#;lTczH*70Ic_S$#0R)8A1GD+V+xj}!RF!NFWE}S!HCy2H z5|5oe+cyZAwcy-vUt|F8k^a1wi~zM-2FhweB8sU0aqq%8pe&i6s^rWVfu6fH(CfU= zsW(ZN$~+rT3{MBp(0aBFQ6xk5( zZzX>oFHs64XRV^8f7=Ikv%W$#aBSTODwx~}&jBmzkdP60L3MjogE8&E?NOY+am$II zOCFM27GBNcqNiA9~C4&`$Y zibLzV-4mY#rM8Y1Y-TcG5n&bBfq?w~i7O4B;R=UTEH_Vq3nUn}ES;e=DWDZ)`wK!} zC6`%y30KTsSDpib0<@m&e)6ONJ{y0TGVmgzWDu79b<)mN1^?(g8xP83Bec|gq~VaX zbj@GDR!RyIBqHabdbA%byx$tKj(a@P-cTo+b>m?6UI5$8u!Wu`8RpYJ%Qs}qRto7l zDnkk7KH};r#6uv#CqX)X(V(pA$x`GI)v_x29=PM08+eVYY@SBk70FSSgbyN)>>c;- zLs~=9BX)dn3!U^}O}W$tpD@(qYM|k}tG}fQRcR)s)NBFxMD(-t_*9ESGd-PFaNxrA zf&OZ{Eh9YWm&RoIeISc!VuYN`e!nI3g?{iS?RktpM!%YZqd+0!H8uy$CEJ0k`f;dP z1C8(C{}Z8Hy<-nX?xAH{ly^Sbx@6-*$MA4~?dw(JfJBvXDe{cPJ>sQ5nXWj0#cdGL z{-(hXbDS%ea}vOt+cQ&C3gZZ5zJ?2;JZV&oS$h4#2&nte{@dN3;RzHi6X*a0sZRQE z*MOm4%f(AE-T;#EQ63!-n@1fs-AvEOCX@B*^&-=eNoz>b~AhxBtK$L-S4B!b6M%h~xE6J=>DhzRfpPO>g zvb_NxAu-?Cax5x%h+A&Af^$;fa-lZGs>EW;*3A2mEI2W}qOdwBd>-+D&4H3a^jx$H zSmA(zkdSLcL&4}u5XsyRyVY|CbD_(lsEOf}R0w+~!+Y{uLCggHDYHL@-PCk{e+M?{ zj@ONW#5by?f1rCF#8A8muC^(v0X{eNeT>_@bUOKe zIjB1yy}0`p`sod9`s~=si^L}9X?Uc|vh=wrJyiwKBR2P+6_<9&dvQe!({Gmlg-tOB zq~J$N*i-@Oj&l#JJ3)7eK5Puun|1vjfZytlR%;=pKy$ocqZ<2SoYo?m>Qg^T4bsWE zO+w}e)!ht1nB#?&Ge5e}YP~Zmfr?Y1EepLRh6lBmD}^Z$alOr%=oS{&I{!Rh8((AZ zP|7G@_xF)={=ef{mg0^RLs3NCuA_t@g}&`phRHrfV%!BS#{Z4Ug0?mKaGHRgdO#Nw$e->}Y0T@%UJBM99rTR2Bm^YOCj3wVo4 zAeV}H|2B)v+I0&H-a1pwu198vp_7&6MfBk60D~DZxY}my2W*C$9)%5N>KFJ zDQryoeGxh>R)2CW+0^x4WgMpf6R-G^tAdY`hkOle-dB2)ndC_&F-)RcZ<%3Lvo;{q zq|PN&QH(0f-`LGY%$1rD zCJktK9&kxPOKrZD^Y98;QV$$4z(%K$EKTjs(Ev|7Ijq3%7gN5>m}*hO3)7fDLXfz> z1JDxIr^xXqi`aecZ?o7<_O1H7QiSv4f$Rltp z5j-^IDY*;Dx3oTlxM5E*(twatF;bWgQxI+%qtZzr=cW9NVmbo8EhFt1fvk!V1D(8p z*;hpJT#tMg$k>>0j;%e2?I_>(=`D<5wmAA)NhcJ($KfK!P#pC>I>LB7(Ag4kd{p5g zrtc0pm#C~rfC)jj=;DNt#GcxHuHHxMTSjl{2+iMN6F=KzsUTFCf0P+=DiK}$kKfcR zl3`}|4g6ZZ7opH)aBsV;JZ7Hdb@P<+J{UC^M${s#T4ev9Aw_?&iLey|9HXk@LRc+v zE7AlKL}xpGk`f`W$92^+rHxhSg3pIvN-KQ02=pkWZB;;FqM7g4f2g!GCP?8+4=L(q zNAZ;3i5Kp(d#)D;stn!QdfUs`MxO?mL?I-Ute2nva{vjvV3(SLa|t-zA(<$Y6Ofb? zt)QK-h^$@05+SvM`CZg|iApPCYdgh+M22VUhZ%|h?LTsXo($;n!N37^E-{2Jin{VE zi8-iJH<>XwoWtW{aXLw-%BhKVf0QymVYqEImBBh+j*(v%1jOZ<7)w`27U;i10g@Ks z1lV0r8DXYgSv2BuZsJP;3a<|H4ldcxpInSQU9hI$T8B5(s>>rnI8j`Pq}##mbPtw^ z50%uuB^n-VgzU4(R*@+$8;hrxWkr>lNTm$dP9eOq(3K<=TYljAm$<;@K7wW@E>+K3 z^`$GeLifWjj%!>5Zt&)slzcaUz_;R&#uzFvNDai`d;vOeL*xOnb?w!asWpL1Jynu;O{K z^x@_(s!K851HfX2>7o}7GOTh}F9T5CoQlXWb5cqR`DttSZzDCk&K%2h`24tm{S~pO zsAt5rt2|!WPn^qcpN}^WLW6;`)*vT7wi>9}He5e{+rCrK*#7dEqa}xi#l#@}JK&aq z?0(5%1$$K;9ilm{V0YlrA}Q@OGg(+8yq=l9enbx)XQXjes@3D%Ia02SL zb{uT}4Wn{0oNVF|Z%-aa-=Wa#PQA*WjcqZF{Mqs*@nr@C&=){3<~1^aOx79wMWLN>U?Iph+lP4*Qj(pBbrzkZ zeZO(M)mh}3@7EJvz`(wj_K*qVCGV*YHDq1aDVEK@ShD7$Zgi_K6ATDIy{jXmnS>CW zhEP5M2PRjgcS09poM!M`-QUDO(WrjT1@`lZO}t%|Oxtnl3#2!C*_Oc^DgDNM1rV7? zrkUhfWJucS#OcpL(1$pV?C3&Qg%=sD9Ixf8%#I&A9xDV{&65XjQB0+y#R)+@tEv>cs0}f)Wdy7QCVgqGY2}0zR$Hce z#XmxB@sS<0Qk{3NzU>c3!yx>gfzGWVp+MFvsWk9E2aQeOaVw z!$fv^%aW|08U9(#F^!Y4{!#jSroqDMJ*kAQkfF@@k<{x!Sk$nz+Qk=H1^bWL1dS@T zReDCkV=F%DpH;`N=zp{t@|vaqxow(a>Z3G<$}{+6Ob1}hbZdb2NG)@PFUB8em9;>d3b%$ zWyw)4UL`12X5>108N-QJznYpKuCE%q4zcALUcUJJS`78VhvNY{AiYip4JR(SGX2CW zqDaEBnpgT$gO$pk@`eHEyz{B(WiX`p41T$ribw~qbRX)8hXq91_)+{q9`fElXwq7~ z-mSkeR#B6F1=?1-fImR!2IVJPjYHG2UkQ&^^X~sulI#+6^BGWr1o1leYE84vH<3swVV;u6i zhBs@pXX6eLc0kZFqvyF~^N05DjbJF@9X6Q@`FW9{VQ_4@`kiME-Tfj5koKeP{6K)v zkk-2hg_^0Zx4ln)Kjz$lndP)m!=PgB{SCAd9J?0+D1hs@tV!ttZz0IvfDvOC8l$RM zo%RzAZyn%fIIN0!%Dzt8(4{7kaw!7|(B^rq0cQmLGt0H9>^GCSevhQyO*WgcNddf4 ziMN_ZLU8@s;asm1F~^RJ18>^NQ2b=Sg$~b0enpHn_4NjLNS(=f;XbZ`h&+ps5U^@p z4Hyg9FZf}6KeIP^H+Q%of8m8!V{ho*uauj;Pe)P0Kc+|m_JV8}|Mb3p@25^V^9>lS zHt-_9i@G8LkyOO;ZidknPm6*WZwKCq+rP=sdO0s#2oU?)dpqEtK))Y zcDCg($ZPHwYA)+dgV)aCZ{6`;Cd+*Qz7gw{DLCAvu$`JG1*-Bg|N8)mt%Xz^G;6-Y*G2c?Je>H?bik&>!c01Ut5YqOmt}1CVt-OW)N!6u3z;rA0dL?$AIeoJz{<|N2U3vU z8haTrwP=PjCXs`~NA+UMg5x&EbeWl^Ybd6W)8@Q z{rhxk;NR~LpXQ{)XS1xIh?;jjV1wWeubEDmd+1m0r*mt{rZ>G#eH3vK({9<;ErSK- zF$S<)6Znku7JVXNp~QPPot?X}m`;U_sKk}FaYoH&K9}FIeIq$ju$0nw8uYw74j@yO z+0<&=vW33*Py`%O1V6f&KdfWcrSWr;iGes2M$0g4H$UGr%Gp8X490`98xu+qab<&& zKt)S3Xd_{B8A%7bW?YP$=kFQgPA~=JW-T<@8PR{_tugRCY_)KVRd;A8q|!k5D_HbQUu7a%~vAfC3N8QLD34LG5%6Bi710P(u&YoHiB@2CJL z(|-Dq?J#x`P{D`Q-cm{6Fh+{h?&P>WhPZ&RNqh-9azIb3I_biItGl*f@u*m;t_jM4c!G)OdCAl&xjlIZ`Yl`wNQ z>=@nnpU0N`ntT&>K~8qfi-KzlY}Z+=UPC}AAtGGYsu%X8Al7V!=LdO`>87oua2`92 zx>ZDSFX4r+!^^a#S^X0{4B@L)atp#;P}lil$g9i*LC*Xf3$;c?iNS*~#El+Dq*yeq zQ82m95k2MRZ%ZjQM?~kEhpnErkGk+o&>$jN=#H6AxxMZ(#U(wzeJh+-k zR>3zY`T>YxMq-~XqD=k}MY>R9D#gdZm2!D9xSYQzjr~%*X&H4vRCsvgHjWIxg4Rey`VIK)(>Ns_25OB>0fKKs*Jabe2c+JJ&1 z+l8OVJ`Q2Hh9FgXI!iD`W@odNMGD{*<{u~m2`dcg6VveC64-Fbi$=v^AqZ(5J*5>J zvv?b}<%N0)8?HpSGrSgW{UwQjsNboTy=qR?VpabGDKY_#%H+~M_j%6Dk6|w9jxsC0 z!X|1bCdaTH2mVxu9-k&9v`D=y9|cr4$sD<=kaox-Ct*|wWyiEbeIVngGj<{Wwsh7b zG>j;&xUv(EX=k1Sh}=R|T?biV8Ti0yd&|sk`F~^kJp;V;2wZ-PFk-86)wetPGVr@{ zv`gm?iAMa@d-ah~-{rLe53c}V)*wB>5w#r%9q|bUbcneUAl_oJNT=WkO*)Wv_&(36 zk3&V5uu=;%o{4P_HvM=}Q~Ts`I4rNA4u0oR119B40~JCwb3p1=D3HKYa#059eW>R^*QC z7BUd6tgTlwkvR;?!;_CeK1IkA;rY1N!)NS7O06YY(ax<2{zU09p`-l+SMF01A%Orbx!zV&u{ zDM2qKJlvuHdlFj?*hd^e#*NtxR1z-I<1|!3UmUA^pMpLJ0i!^#Zq7de@7PWl;2ZhN zSSdw}e@bQ{^>~R5Gtu-~?#%?*4r-|Pk{ zB@oaxNv&^8$27}CakP=@wQwHFP@51WTf3`!DJ=cQ1W;<>B2wsnbG0g1jJi-t_H&JP zJD{bm(D$SLiH>nJmrg~*B$q3hQ_%-jnV%-f(5ivgO{{9MqmS#SO~<{XYA`+!Enq(SUC z-$)3oemExU?CL_V0~fh z(k3sc%c71`~b+*Ys;*JDHOs6tdDiC{3N$Oe=bi;@J(T0l*tt{4`sVC%! zpnoB)=UVDU{w-cW_oA_rxfm_BUbrgLeF|b3r-w{LQ2*L&tkDoM{vwbeDhB3Eb zXT9T8Mivi&DixQi2V_m=tyY=Bj)#c|&P2JVMR2LD9Ty9vx%BFpoU9J5_C=~dPJz|Y zTNXha1%@-ggdVG3!SyHoG9>sY;Mzy+Jh;~nh!jm&;oJ^m3@Uy<0Q3{Lg$G)--HedDz71Fdi z*2k;=Y~RcV04zZr%O7>Iz+))&at7HA9yZB;+(?@6;$)2e$Z763MISEGYtOy_puw65 zAL)mUC4H@%=}xkhGsbY2R>1`uc+w;8yX%B;=oKRW&K6+t0pB_Xal%*YaFSnVg%m6A zGaaJv_?VDkij#g(1sUAnTqml2y+W)IhBXQYr#m`^g{n#l0w6+m!#oX`R9B9r8Om!< zYDtjVyu}L0WLg?%N!qPb-Qbb)x6n-#@&sW9p0Uen5BrE`bq58(+tA?w+Pn|XI*=`n zCKG>-Ftvm8E?edQwtjh}$MZ)}DQU5$9ZiVJ3NW#Q^Uod~gA~{y{~v)50yTapCH*+@ zC7e?0gGj^%V*Bc1`YE;?|1*pmZjZ3FeL3wGn`8av2q!rN=k?6%wN;NZC*H#-m~CR8 z8+N@9+shFvFj-iM86W=c&V6^@!ELLKJsnmiuEus_=L8&=Vm5wHk<*?xT!gPfe zHLdfTW&*kn;>C&QJX0A64et{Y8yL|j#U+^)Cizr5(*BNT=NVz}My`W}5eF3>= z3d%ej=ES!xwEIYxW>Zh~=p8*$l}j$UvtU9H;uepco$*A31;gT%heCIzj%BL$T%(^J z*xD{tHg7gF&_=ot^&`YbyjqohaldPaa1j1)^-;KVgVu)FyaL~fDM-bbfdcx?i(<>i z9~#=7^iE14Ane`0dz?RXjG+-V$Kq3@VUG|Ao6*)@{v0a7l`+>Q>H ze2LG}$*Zc6_)Qd&Rs~aoL-5Y-Fj68*3w%h=5fbmw`5S!g!ep4vOTM*7?&i+5me$s{ z0ag-AeawMYN|}HFOwtT(K;vYZC#yrnlcBnwy%6bP>fmnG-rvgdqDKt9()>BSm@UOw z9(v?e;@ag$j)03joJpWh)g96fJb`u+mPPB@n-~j{uipIyhCKo!?HlDsn z|EJP&lfy$U1E~Vzyn-WI0~K0p0LEoN=jc*Q$lav;DlR1JPt@3ljA>+w6$f~?N?J8_ zC1efW*NZlykL^?=&m|0U$5f=2B^UXjqOl3wW@YFZmWqgwD>d1qSxk1Nli$feA?fw#`}0SAG8V7 zE`DQno~bMb0e}KhCfIL6LFc@fH`wze8cPfF&dEAR@u9ij?Ru2zFL%7I*b;sQ$=xZK-VpG7<-^X3%HA13z z3lIAgc{D;&1?;(3_sVV2I4~p|9-V@}NjTc&x0i7*WwZ4KSfj0u-&X~&eM;yC*uvDb zJ6|v7@BM?f|EQbvagvup%A_;%A&Ac1Fst9w7&9giVOc5EVeYrqz-ZqO6$gx@LvFk2 z!6NdJha5`0N4Dc4qK8|*zXb~VKm2tHbf3qqmg#8|*hlJu9M5su!+U7o zTJP?`TVYMJ8MwxFI*Ls-L$S++5K4vra)Sq4rLD;8# zy-JZnM*w)g9dy}ms};4&X7m`@QM2v>P*c6M ztzWT4k6Il~bL!wref0^f4Q}901ntqbXEbU)T-(+;+Yafd@)OF0f_N9qjD?iy6PR}~MV z66)`xi=sUckM$F!>Hx%rx+**bS482$C;F4cEyl0(*3r$`f%+3mXjzS)Y=okzpWaMS zbpYt+2eYZS+540Ci#SuQ{TGp(5Wx<52sbjaxoA#{gx!t?RamgjI9lw|C-wZ1hpeP`zz);;;*sIm}3%nHs}xid)- z1T0UISIsq{LnpXx16~Gywz9qK*Em-6k9u!fWBO1EvkV^8-fq;Vir`C zC4O4)_{|!#pL(D0s+e%T*Q*mx;XFbR`+d=ehWS9jeah%#>U{9wl+J|fMs&+>*1rki znh z;xoJr2LnpaKs;b6-W~WL(N+*9By7mZKEj$S8~Ta2m>EOI=6u*2GZ{3{U|z~jc=nQa z$9?5{1g<3Ic}~7iQ_!d{{qsllEXI>?;%ICxJ$UgBc!eWo*KHL5QTQ=s@HAHtjUwZn z5A~6}2!e8^kyg8XON$2YMLp}?=9yVHYW!oB7Y*z0cJbRi(tgACeuUc*5wE^)HT7d{ zLzKh*`?{WDS=pLoUU}rM`pa)-By+TYp;;dBG5n+))M}ljS@sl20=xo>7LK|o+OPsj zJF3{Q^p2xdN01c;dul1Iox=5Q+^#U+Ssqf0nM^@JMz)_XA+@U^wzBKF0qdv?YSM4s zgEJ7$9k%ChxymyQ`9g2Jo|um#tB3e`(DtvF96~y z9ovV+u+a`)Ui`D?PFNc}zw7R2yd};;PSb&f94W10c8E##V;?nq!ax1(Yo1maDPbIIlX5d)v&*}x8zW&5d4JxKg$8~J z$3GoKto_Fdf!k`Hu2aICYNznQ=;H+}5>U8xqdJmAy-L^^b|WUpS7wqf&7fW|J~5f6 zp`?5`g9&H7QI9Yk-GV!tlxxy(3}QVhE$$Ku4P3@q5;y`I-C+mtFf4ELaZ^ke@-wc> zpkYSU-Z_rHDj9dNUAGt4lrUhRQ>4z)2`j>mtM0bJ^ZG0z%AKhVe=>PTx#Uk zuop{ZyPQLj-q5x3)I>?M?w3&~J(vG+^3q~esh6S>S?-%AMqDemc`kh2=S9^0B7)Nv z1g$k)1c-E~y#u0}?vCLj0H%1YDcdz9D){F6ns^Jq3?N;OQ1Gk_45NeIo|V;T-s7 z+MI?s3Y0cEAG2zW^@)fN$8B-3A-izMZku$jcVba^cpjp*Yr#d4*V#)EPlCWe@pLao zssdx`Xe{Sd8cqTJ&^{ZOXkqG{LFea0adK*}%uSL7D1wI#eP#CFVPMz^A~GH5 z8*Jk0UCD;j^$!j@~(J?eT9 zSyGpZ-#`_)GV)5DDd1YXmICf#A%75cy(`g|w6p}`#r=NAsUo?dFb7C;&=YbhC zTR+N)KYz#w+1B+Lpl;g*Z0e*Qxhrcs{s_Jhyy?LOlO%Q24TH&7T%omW6`Epq!nBOA zf-(*5^_OF}dW6HDO6R|FPqy2e*xoH2Y4cvk;2?;+rac1g!B> z)C(F?ij$M@MkPNAdE}lVG~WN4gbUXW6^5%yIaSF{Jko(TrVvO%^7U>F zUNK6G6_e@~0GyK*lW|-3Zv&h$jz?eI@WcOVSVDkY$NMIZ7kn0GXK34V~C^kx}={Ir?Zi>Iegp&FS6ZUQ%%_# zrtY+E_mI5;tc;i#FyEw|k%#x&A$MpEN#}&_%N_G~XJ5`@r-sCu&aXGkY0RxB%s2fb_uA{SckpIc>~^(6qoQ(J9i6rtn5gB5 zpY&prY^_~7L2wmbs70a&cf!8&2v5llN92@_2xxKrh*_R#a+EGVt$fm2CgN_0q$>-S z6g(15iEl?m6hRgJs`C$nM!wEe&vNm}2oPm>4oIk>-`%yY*DZAO>Ryxn=3-41tcFiO z7~mmwA%W*dnw~&R6AAPk>CK?CH&;o9BulEs1xCN{8i-Wd!Uu!jFzHxZcMXfN-8Z?~ zfCg^N9g7w~{}I9l;Fbl0F%tS?TT$aOdgaYi=)fV_y|wgdbi^o29T0(PI;W77nPD61 zB<8v<$f?K&^-iAqj#~Jcz6|X?-C))una0nw{p!seXOJp~k7A7bG^r5F+wP@P$f>}| zB`ipD+VHz(t5Pf046#C69f7MAJrrhNO?1Kp!nN&|LxzAfa6!b0l>})^n`Kj-e2+yR z9j`dPid*2}UnP~U{rK5G8nwl-fEY{TjB_(+`E!xzmih^L6BOgB{i85W7cFZ}1%Cm% zI%cEA;chE}i>Dt4<(!i|Qwcr6n+AvSFJ_)!N)zB&`F!1OTk)Ae>4-gY)%JX(Fz7Wq zn91=4EmG6P`5kqhW39N|^+1~RWVe{dPKr&_z~l;5GQnGc{aN{o;&4cuZgwK1-xd!@ ztpPeGH1`N4nQJg(c!}uco6I<>;Lb4WQ+CkNGfKJEwf>LUO!5sPe^s)-aXN&sK6v)( zhXd{(m?+=)NgKx3h1liWUrFc>%smB7gr3R|V<)w@`4IbL5owIBO`>PK+6zPA$v=8h zAA6|Vcp?|?99AGDJPl2=I>xrOv-N9AXciqYkVi?bL55>`UwPHXtLi3uh%gy*L)Q;u z0aGH-W$ssGv@O9o^J!lkwTcbBixSK_)J407ey@PP=^nbPFGNhub`}l_9|)KXf({|( zVVvn5$n`s8r~`a!`ln$PS868H|5)fL+rlIhpy>N^F2t;%Zit=PSUpDT%5rd?x%vB9%lH`4q6-%}m;fP*Gcmr6^pVht+nj)YC70|qy; z?%zS`g*l-p)WvNyafCR)&2Z(HG*38jcw39)(5aJ6C!kI9xj%=p$(H@sCV}WGZX2vvZIwqi&b1UnKyrxH}f zsnU6ruyDy!(ERT))6kQepU2L|q#R$kOI9Nt5xRY!0tK+{T)2M<{f7fiyGVIi*e1H; z9p&i+)59=W?x!wZl={%NL~01$6^HCi$;5TCMX==4}<3D*b32;&tfEMWO?~s zf`ISJxj>)1RZ4iHoi>gi!aA2jF`~6|UDV@5fr~Gc#RGq?i5!=+ zbtie}o7uvX$m}*N$T+)64aeR8WfN&O-m?z4aH_>vj=$}4TqlqU>p$62 zX~x(RR^4OIdOqumhxUK!)9|8YJkL{gkq+x7|9lBZPKIxhjWod`pQRjHfMaFGbSh~Z zqhy0)YGe-h*=SH$*;dvuEi!GD4aI&d9kwtFO^8K$>HTNH;H`(S*NE5j;=ohNC#ulu zjV|KQ~83e!^Dx^E(kbT?O)9C zKwvaM=-d0;g&LYJZGL3@Q>S*bK8tdjy)GCMa+Z+jzIGL~aU?$x5#irdabsek=dvt7 zw~^KDK%Z}`3=JKy^9g+)t5&C?nG<`!Ei!xqrGUq%ceu9WqA_+$I*cD?ZPm>%73_KA zx@Ucg9IXvI3(G!-d06RSG5^Qnd2K&4{w5Ec$CW$z)&Y34q1sbzbSCt!++9}@ct9zy z^!c_@tQ5F9>-SHCrwIr9kJYSLZ%br)FHU+TzTmYz75-l8lL`+?=0+6ij(EF`=hOG< z?cKT+SbQD$QvMPWtNu?{?5@Qm-QWb=pH>JFR8-1k>NXk4W%t`s<(?k>a}*B6zjo(l z6*=Z+9ub_ceoOn!ElE|B$u6UMj_y%gkx%^BoglCdf9;X|3`d*Ay&w9?RbPES<1Nth zX%&K0gD;uddybwsawBSeOYE+4TmkwV8g|2Wwh{B2@5S+Doce_wE;iZLi!Qu@aq2rA zm&-8S#}5<--pI?k1V1nZY0F@*=mmTHNx>&!Q#(Q%`w-^|wE}1`cD`^}VsE4iONHC5 zs;QpJa|lf!M3ZH0?4jw*F9LyqkE|y&0klJIkKeK5(&j7*CI$~p43MSGChM+fdEv`p zh@WC`U`H0YFue8>>_b@sWkC--md&q<%tCsU6fM<1a~QVHuY(!8Z?a%K7iST01<0iK z_xJL_-8!ft_LI417NNwUyUK+2wG)QK#G{9d)${dp=}=TgKAsx~V7j@Yt5zOaskPrY z$5j39DNE?^@c=YBL8K;UOK=_a74Cs&-v|dWL2k}5kSbl)I7G1$w*=6B zlSgaiAmY#~?r#80i_3|+wDW=9F>*;KhHOt6y;A$y>_2~XTn?bOPCin3x$;(vCGJuT zE}Go0)ohrn_kpq8%b(b>B0u_+emX<&^b>fO`W=FDE@fe$$Lm+FPC8{+0%bI+NNkr> zfPOE|FoKF{Ap$Yr3ol$;2?2*=#=dW{5DX1u;PgBI-iG%J^T zG^kpeDf&pxnP?+S=j`$qM5SasI?2e@2hCjx5>z}0hYH5Lr^E+f9H_#$L=$7fpiX|>3OredGaWsOlpY##T@dN!uYI!Vp?UOJ)yRt^6xv_v z!50u6Hq%Y-Hp1Kdt^OY%sMjLQ+Z_RU8=e=+>4qVJ3!g<5{vTzK4wm5_uM^-~A=5zk zT>BH=AJ>9Lv0uvv5)jRz3E}FP%xn>86}+878xQ+ncqj$@9#I&o5WYb}ynI{tM(3zK zzDKZOGD%@!;QyS>>i$GjPBBYrIhNI?JdhmdRr4^g#*i-#_JTt9)Dz>cZRD{un-*4l9A`e^ zjx;?F!M0lXSTbt@x8j^Tx7e+g;*l}u-)WSAxc$fH`cyIxp-O)5eFcw_?Ywg6?}Q(Q zgFh@Fn*p~Aiw$3Vprf>=?#+An@R=D}e_pe^lyRj8s0y|-P**ujDv!qvYUln7!l%p`V8nP zpIyc(R_7jZTn@YduvBjqo5rXzH-upR@}9xE3^iAhpC9-}GCO$T;I8bOBMpgBVNcwn zO!k{AYI&2zT&-dgmIVmuzcdtPO{nXQkT^0ydRJAQ^Ow@icp06|1Ek3YSJo_xr^G3D ze#7hIxi=OqE`BaONA*5FD|`J!U~7u?Av?H?zNWR_T#T|r-k6HjW9i-x@LdVRQBo%* zO0v6EqDUmuu7piq=vzi)46k#1_@r3MBTj=WQFe7ZEH^m)X;w)`{Fr=Q%i|8d8^`X` z@fZE`FBhviL3)(W^fKPr^JmVil`oK2UDb&$C{NU=x-r#;23J}Bj!I`(ZDg@-PK9yz zxQ4y@XArJ`kMWYeb(pmnN&q5wqZvTrYJnQ$^wP($qf?Aiqw|M^!4)csYJBaiKO3gQdh6js&cRDG|mplRb`Bu5Q?o+QRVl<2C1)&pK4f(t0|9N{H|bvC-47qM;t$ zQX*AeD4>FAZ+yfw(um(sB|l84N+(fuL7}ru!EU|HCmne942|?7E1$W_@@5J!@V|EK zX|Ag@hd&oXGaO@g@lpXT5uP0Cx-EsPB8=*I>8OKN4aBLtvj5%$*}X@jU{)7H?9^jt z#_^X4A#Aomdci}JPWr@EdmxjbkUln3(@j#PdqIgd>dKneBf(SD>#{kS4h~|7wG+zO z(E%|hdopI}8`Dqhv6`A?#V1UoWTkldZAh)3Gp>qJuDHKX4{t&B&c7`#l^@A=2+)v9doXzOXF z$&A7dSoQCV5rv>~OctNYuenRUm7yds+;WZi1fw*tBF!SF0nt@j zwDvHh{1Jd8qQ^IeGEd}!Q(uiNZ0E{3SIuF#soyOW8f>?MmS!@>ms}YA{8ta_c{C(D z$}Bh>H;GF}^>j?hLU>X)^2EwlDY>j6$II$*6vn7o}_GunXp7)vEudl8X@fiy6?0DcN&=y#|$q^bkH@M1@%O_U^ zJU&yVL%xBi+5FfsD5v&uAZ)`Rv}?#L^ikd|p}bfs@VSWUi%P=aeklRx*W z+j>W9Z;-zkcfe8UOa+}YzzJw_E08LWI8uCx6BU5zR6)|Gc^4T~f~xRlbg%()7g@&l zOO{MHmh{GlIYzaPCH@@%5>BsnfiBORZT+8b+^|#6ZXK~O4!)ziib?qYxedYxdQf z;QAfbs-iP2>|34IZNyp^mKXREC9y1~@Z<_1)ZeQtg`5ZqHS3BJC~Hf6+ZET;eIoC!X}z1D*_;(S6Z4pxYw{UA(c15H*^@P#i@u}Bw!z> z>}QDdBMnUt?JC}SLwT;D#qEtz)*$nobBYfuESflyjv=+dX@PMtbLs&MNIqC?v!`R zqXy2)FysR(DFbAjz~#DPyWQ)q%656o;(C+o=VvUy;tz$V(Q91(AtGve1}`1Brz$T~zyL_BA_X`PMr>t)ohPDru{H zX!#Q>C4=BTh&mzk@(OvwA@s?ct`-{8f6{SM{<#rHJ`bnX=*p(3du{i|B$RdmH*zI< zE+Rg84#lZ>s`UJu0i9<;nl77}jmR&tWsj?slHylwN82P>rPVCJg7C65KHY}?1z6HW zzO@UAKk?GwW?qUAkFBR$RgN#TMghVKBXPYUUpzE&#xJU3yR`zjI180{Le{wY-%DbV zH!nYH59m#GNe-%aK3ucp-SWjX(4qqYiW*<|Q>QYrpBC>+FPmM0-S^(-m^5~eOK<}1 z)npaH7UV47ThZ?N+WAHF`%9Ooo%RitYzYj`%dU;Yv#Nmrdiq(-*Un+?ONyqVzRD^2 zZC9)jcMgr!h9Nmt@|`}f8ib*<8sqa8eA9ha9%^vO>2;gvhsF}w6S(TY)zow_i`+T| z3~g8VAJj6=kxDA>7UoMp(@6@m&OZAazDvm4>4rqblwq{ywIT*W*t^qrimIc<`NXvR z1(CF^O+26Xlq^D_=CY%T#!#%STAVv_z;gKzDEE`rHP>i_P6qWMi0}x6lgy)FnEFq3 zFO7y+;77>Si&sGz3Uc*Xa7PaJ!L#_|2wp|Uv_tthpCKuTYFj=*RjyLwjqoV3s}Z9T zf(5-KlGVEp5fyOFnM38+!6}xvXo!{YPaAjNdyh|F8K+1(kg55U1eZCnS2i3q@9Mo& zlaVsk&48p^{OrKR=OhuGSuH0yS#K{L!WhcQ#<21gotfR=M*K5-O>4%8q# zojv_}I#q8uS@0i8i>m-49+mKz=YA88h`MgArFK>&U(0i6*xzSS?w_}pIj~$I+Hgtz zRzx2v?S&Htr57>&WaQfopt^rIHCDgIUb>Y?|4+}BmnaIWzyhZ)`~<6+{62O(fE?k$ zhy_iJLyqYQns{>sNeR6<7ZcECf#>|{8E~?5QDrpnM-%PK0osaz74roQ`|gP&xI?uv)d8}BV&ob>)ZI!Ovo39Iw}P?zo2X-+S=+Zc$>Db)1h8+(5xK`olPP$Mn6_UgVcm&Hn4XP9S$z%0x{HJ1U)|;$LK%wpS3L*7eaYT;oHKg78)o6na`T3MBShno zo2lSa${_X0DweN+WM`3uXGxkwk@U3rfP-fCB5DOjU^o$tx*{{#RDINJpFgw7sxnBW z$^dhg{^OfXxU5BAHs9oRjakm32}I9^7C_epgup(kY`~gx7$>`H_@4St=#fiv1o3?@ zC`Mjin_kNQ5Bj4(I`UkfCvcM;)l32rmY$F7vi4g3j0f+C!(M^I@~mBM=F!mu+Q9Nm z17<@{LZh3Ub+N>QeA}*0bEu|I5l>bCdP}0XAgawaf<*shDac*=$G)dCHF`{YLB_iB zNhaXshlb=!c6v&@6=!*}&xDvc8YsAZ_F*`m%?5Cd2_s;^qKTe(9YE^otx~rm;5MRF z1;|p3Kn{eQ&l>?2L5Y!D+*;S@YiPfLlh5=$onpHwpPMocV?e_`wsM*}=0+>(4vWb# z_c9w$#IrXwn#1Kni-i9hSCL-R>p<4%CQN2dVa7MvF-Nz9UYp|0@oIdmD(2-v+8uQl zkbMyg*}OQ9DQA24AiZa{0L5+|ruh*AJw{9{iYfkY`NL;~e}LPX6-IL9Ovb;C?9j4WNX zUMcIBThM%#)M#;{^x&SxbSyrj$)di!cbbTZM_54~f;vNdxW)HUQ zHY5Fq^EUC~*X1mu&|F`LGOU_@Mz_@mLrIbn5+}@mJ~#~dy1BU9-(2DU~ zVB*ObLyBIVeiv)wwNYT5*ej%M*R?f2nUF)QXBY5H-Er(L^45z-%-W4dogjCqO zlH=HKZk9fvSYzHc?3vuV{E+Y>WaSp+WFo5tsmiewdFs2a0O^mvn9K<#r9EGBS#P<& zk-7OeN4cm94^UZJ6HM=jF)@G6fuOmbs{t=ul{C!pk~lTWuME|HpQ7G&tt&pfatOgd zqj1?WmJ6?lzX>JLB`J|X87%IGgtkMCZNd$edYR+JL=a_Yfif{VF)5zJI zbT?QirBf;HCd#bx&2g8CG)LdnAN~s46vfK5Tx=Eglg98=*ebi~NYmr*Z6B8N1qL}Yk1z;!pR@<_6I(*2o zuCZC01D6BSC}8&wUau$QUEVAv>Pz|ZAf9y{u(9ZTfRWSp%`7n^W2Yl_Na$qh`~%nBq^)ttqn?Y?$UUuT%u_DMhD zq5!V%zVHqOy*o=NeTg<)fCl%qD0!x&?WoCIAf&m$@oni6QntsRT1y}(F}fcpGBp_v z?aDI6nFpHPkw7=km`-q&Q&QY)vUj`za51Mel@QWCl{Y&;MaQ9fvd0<6k5)1}ilol1 zYH`AELcfo`etN!t&%!O1EX1yM*9~_rNHbq7q9-$r8(1q${{+GPNAy)g^v28F!cgkK?S$WXWL{e@(g*sQe_lfgO4J zsE2nwpj=45Eq0F(Bx~`r#NL7uySg)5FX~8fr!@Bnz8_gp(E0J>5m}nz0VwN7i#+GZIr?C=v78( zd3>uL2%Gpc^vx~zTf~a7xnbm~d}>q*+)%879S6Pja2E#j>vXJ8wmhZhs+F4b;qA*L z&gY1OL|*d*Ln!lim)5B+Vh{S1E^@6yRzr$pg_>!8wFl#VN3YKlanRF$;B z{U?Kj;j0xJD7Sb=F@bx~tyN617HE_qG7oR5S@i8nQ|U!rR|S)*2fef^mF{U|BUd#j zZnwT4S#+@WeRwTck8^Sn$6!Vf#Vf>5N(^JglQ8q6;pSo4Pp8@!!XU|~Y-!c1`NupG z&m$8INqm8N5JM~*x?QOQ^D;Be7q-*r3MD=n|C}dZL5OC(7^3#(EJ_1`w6zB=J~@+$ zQ55TaWqr?a^K^MnslkKaj)M44yfdO^d%%fe!l$E_bnmLXa*{_4tfh0+r~P%E00#HM zUwVH@YkahN)23=WlAa`FB%gwkMT3FYGEw`CP!tQ{gk&-Vp3+Gm`I3w9@hFAH&1Z=nW;{`Oi-} zW3759&ka5&@(uhFJ3h2IfZ(bkb|V3?qp57TYgxbfcf3b)-(?m_W;J!X10ocNN@!6p zip@tx2HW;=t8~=;i5}irN{g%-noP5V9$VVb&KfC1)ggdYNJE-j9?7zin5UT?w7+!A zdaj%Z;P(hNM1p$wFTBbL%8k4)Zpn%Em-I?3^HqUw2IsQMX!jKlXW;s9!yj~s45x}t z9N^(7YvOH3^CgXN8-Y0<&Ct&|ynM`QXs_U$@}i6x(u*DtNsxITaG31wbrTH3V?^o6Z_#-To#GggLsw$86B}M7#URtB?^53nYx#2I7Vnf+VPE0XT+HzuHp`QE50_Xur4>I{)?jE8b>d)} z3&oG!D8Kf-@5{Ug1sQ_7s?fGRe+Ncce!#pFvyL^KJj$En=4^MJbja=fu>7$3haj(QwAeh6C+ac~_fnhMouc z-7$&iqWp>wp#)k06(P@#C~AAL*?=dRf|$J=V}1lgzeY%uW##3SPq%-!4Zfy6Zr3$G z$Qt=yZ{g^zlec)C|GYt3GbrDLe4e}&=~^j(S5S%eu>gJP1e2chzFx$(n)7|zOY2hV z9^A_l^_f%Tlaxx6LuZ)L+dz6@&=pgDX|}OCoyaOV@ADsJ-)g%Zx&Z45!)wmr(APfe z1JJV{xMv-`E2on_UvmK&0r*Ua(8&4yG$GlEsr{SNQPXwBRn36y$*sgMfsu6Rk_jWf z?rf8|Lf-C)MP(o||0`AVPtSj(*fLrsR*~%_pG*hlt+ft9_@yFGgXd?+u;@y%cUQQ> zjpto?+5C;oAAl@6Y7dfwNzJstQ|K;$68q7}Mfe*kT1Dnj&<9+r@fi51cFVkQ=<^-c z7gY~?qXG1-%<9Fow07eOG6_`@Qwm&if`h&~&)`&}FhL6j1jE~oXW2wvFQFMDU?FbS z$k+aIr~}KEe#o)=>4^dKX+BmYYDe4@|(!IH*-95C3_CE>q^hSOt_g&n`UGtXhJ za)_!y{c$I|$a1?$B=7RMB3(e|$ty)N+933KMeTrtna{Ln42#D`1hFmEB*8$Lt~IE`jJA* zqCXFw1yG=11WeAP*~L&kmwPc?gV9sdkE8?1B;Sm~_S>lr*AJ6deL{~YqqfzS2UO{) zH|j0&(G!p5(A>J>hi)BP_g-!tZN%TYpiyVT!e-!c2Jm+o9581w#)CV02*E(Oi|C8H zz?6!a;-kv`N?Q??wTB}eFWYL0dZ5Q%ToP^)Mg{vn8T ztd(99+jE^~MpGTV9>iXhZC6xYOrm4Iej>g`9caa(Z#&{GEEC3Hdj^H$uU^3E^Luwd zX_IuDLyVO}H#D9PJC=?VHfRIw&vfATs3W#P&*_Bi0K~PoY2slFUZ@(t52Oqe&Lm7} zzp#21z?i~kQR9cvX*K2}NL`^05o9yo@^ zEorc9z@#k461n?F;bWIq-v$kALiAP2N2ZDsZkq_oLfW!s#W-|-ZM{SmyvG)wuxO)T)I-wIw1P6;&%A*^=1Uxg=KXW@)1a%vzUfP>EF^z8%uPfDJ# z|J+iuSi$#_RUH31)8pZgg~YGlpBoP9u$nX`VVCgi&j2Lpn-JQ&DSiCqHHCnR;_>K_ zT3l|=KSqialjk=@kU@k5(m;GCP{Kc$8)`UHlVWX~+RbsC)91OMH&=fF*TCp8#>gj5 zF7{{bwU%q2hp~d0wWcfZ>x8%L(MRg)#WWq6=%roGrbt!9u`!rDU~djmc3^s%YSX9D>tezNs*1C( z-8(3`@ZN~$%+_s^%5@aaoXqfH?GCT&2OozAl1&1RkOdT5&8r5_&*6WNKbg){OJP!p z6KhWACqBTpQ1uaWo9X96+CVgay}h2C?ZHJP=2HilmBAStOMbX-nOts1ixYl^>&M2E zbN!*paf_O{#D^2oRPx)^J<&$dh|=<079`{yuIv)2iIeH4y=d{nw8t$`+)q7urW`Gg zHZVB~P%GC=8^?vV^Lu8Gybt*bqiJ@UVjG9pusaz>iV7Tj*R)2W2N&zd=IF>o5yI)V zYI2b@ag9LT`686#HQUI;Nj6%>uBR1(m2jGv!<@e^$&inZ)Ju<~i=OLrV#gm}{`(Vb zNL%`b^&Ry4MT@vso%GePL)qhycq+OpZa-$nhc6Vmu9UhLgJ)Nl=-VaE#g~(-02j3Q z$dwK$=IjwfxHo30fA8#E+_^XC%Wbkz$_AejMGXne@;gH&@1hgpo@PUSWGCHo0U|Pk@3_+*(N&%|i6bvob-V6Dfk#dQ-#U%w1#2?6CJnPL zCa9pt_H8|FY1u=m>_Ex%u|j_vqm!}0MrW>a$81-hS+RM|ED;64^Gztns~YZ{`dqvQ zF5ZGW88px8m#7;Z^-Sj#S5{KnhST}eV402>`Gw54t_VK=CA(S3gTxYCM zO{I201lZP0948-%qQFraQUgB!yQP?O9 zw7K!u>2Hr4ErAQY%cKfj*Ns0}J&9FF$*B{G$5vMDdPXQeI$IfZMd7F*fDLR%#B5^^ zBfW0nL9aka_g^Qjed2D;prjraQQd8lNuGZFziUKYdkg5sWL478JPU|SO4&$bn-p?h zHqMzj-t$&3391aGn+vMKC=iQ*Yr`gulZ1;kQA-+3`rU3J4y zuJ<0T6Ji++#uhPI3VSZnWks)1@J~{p#NpswEcyhny8pqpf%1oovHQmAs8sp)s}=C6 zv~~aE*I?&2>&Ag9ma!4d`dS??X=5*aTj+v+QJ2>5VfxirHFsiZ zJ2DvpJKzK-jwzNEV*bWCz7e{-3j8>ypT7xnaXNc6+Xi~6;r&8`*CJ!Y+#=hRw!iDd z(_%|7)=dO@vp;Zb18-@wU~U?xHk>b76K`0!u_f5Gmux!T2AI0&Si= zy|fg~xdvy+gMx*zMd0CD-V?wuK)TgVV}`*ZWnY}{Y~7gQcaLl ztgFohd;a`_eNIC)8~1(9KrNH&q0a|K+~FUo4Loze9=|qoA6NxMHqRs`7QGH*z3Jz| z&?HTdXb>`owusgCd|9nOL{AjUf60%$xwLJB#}KkgSX2myfBp#ii$Wg9^RxCf%YE5# z<5r+<))B>Y)I}x&Ox1$E0?_#JbDGP~LGv+qFJH&YKQmrnKt)|tAB@MYzX<`%u*2@_ z!#lLKSI z@0H7;zfvtRFR5(}&&694M*?yTUYOpVtnYhxkdeTX&PTTKW_h#(HaujaTm{S9 z=XyARs{Klpn0S6xMj6myT!^newdiMvR95E1-v_-D>MwLZBDvF>Fr;U7bP!3XHth`v z?b23o9WLZu2hKoEtzZVQ%Z zX|NhZL2N?RM{05g)#1yEs`-U$OGZ+q&4G!hTdEUqEDR|g56)U|wV#m`;!pjd;9q*x z2IR}&^>C^*J7a6OA|%&qWii3Ou<_yVAMvih$`RD>&ZsAIIg&BIY;g{?UZX@D;gS)JvU`2SRU+On^h}5=SB61WF5GMf|tIV*R zjIo%5O^nFv*n(Glm&KP;RtvhCTzq|wvhYs~iqR!O((>~7{10kJB)M*w9eP`^h&Rw2 z%9$o7U6WOks0Qb0k>i^imRa%(V*^e}gxL$gN~Q=VviFd z+)d_B!l}e~Grxt4A@gL z7Pif_o_=787F_GJHzjfw1TC78fii(n13Xx0PcB-~n&B&QCGQ9Vao5DmE3)3)&1U zUM|kEznH@I{rXtJ8ZMO2o&mkhdn<^}fT?05Icc&)rhnXvcCwn8m+_cIAxY>eg@96f zF23>k`oN|YU7o(my4$LC1XztxenZ* zK0cQlFq(%mK_wQVvv_#@7laXB^319h9WZnQN2V*@$@jn@)%0KzjcWbtO7#MXw?PtO zASA>tt|1>N4L`$bry36@=cRpU+0z=5M4|JlC2u1^DJQ(7y+Uu&NR0RQSp6ZLrS704= zf+wfuaS7!9O!{eapX$16=|-8oPz@WLa7piNad}iBr%zgPk$41^EU(Ho* z9c5iR1JxH$t)zsb&dZ~!wRLAM;af--(9!DSXr)<@H*E+iVQlS?i~mg)ujC3*NM>gpGv#x-qm>0$7EGvA-G4Kd**=)_4hFA2*Q79AJ$ z0Uzbcs`G3@M$S)?jn!7CniCZJ=iwpL@YtJ~8l^})sjN>l7Q5|(9 z2)9BK5?v6obMDC;ZhkVXTKa)s%%=BUde|>rR1o)_5)E+k!B8Rnqo#0I@IKX8)rCu* z87B^v`8PlJQ1k2QBCA72Pv*arai3-z>YH1ocXxC?KgM2p0&%?_TQf6=+MFg{r*;9RaxR3mR>_L;k+K+w z9zHA!B7j@u4!qST_=PLsh4`Dn;#L~(K_hbvYtiMc&w=bvhPv^-%7i~rGIvakk4gVz zvu4t53Y?_He97xuI$d^uM%d=6h<9@NyYDhpqcOfW%@4S&+f~XL{DH?{R=qeLg^~L; z89)y1uExu>{K+M&9*EQyB|L!zcogY_jvxtYj9R_9QBa7KbFFFxJ=3-YtB3|2JCJ$E z!d|y40pLD?h%_KTR4&fRMRoVT?Iy3&1nE5+fMMd}avBctLPRNyO@aRO4*IhoBrb^9 zgz@qzzoIwWGhF4A&$mQ2ZUouJYG<@E6by@Qc*3AuY8cn;Nf%V$bpi~ZGTL6#gEyv? z4-?z%6Z4_#-JmA;#lC^%8&j~xh+PE?#v-A)>$uPnd~JgjvKxM+`B$Jqwa}T~-)eKn zO#{{2R0=3+Z4ebamV5}RH1S0QLe#Mvq34ewcDkD*fW##Z zM20){&t{i2gRF7)urW*QVAT2wqtHMVMT;aUpH3O^M&?syCTx<2gN8K*i*5e^(Q)8T z*rBsc$_ero>T7%+1#Xb=b@GxBFoWr>r?%H_ONAyEovK6oYSo=zeUVPp^_mdJd)1DA z7WA6WLSweY^k+3q47dQ-kzbD8ct$X8)hkN%YQ#uP{(2b?-)hx!r{_Uk5~2+!Ca2N@ ze<`#TJ^oJNel-MqD^cK%OmAD>wv~!|S1DH!%K@^9D<&8y_83)f`vl2O_OX(xNl{3g zS4pW2W;GT(nbLNi*a=+_VCpxE7@B|uy4;(9_?U4kf8^27)Oc*hDOKMB^3y15A8@h; zS&grfT)V!974}6IWp~DQV1~W+ugsya+=o+Wjj5peR0v)Em$9wGp%pl6xp5W%xM$w|{UOdyX*@EDb-EZHq(Pm7rP%#S-v0Dw5&h z&9;P@4#z56Yr>|cUzph0nnQz8QMaZ5q*r4Bq)E$zeWYlezLmngY7v3NjCH@=L#2nW zH!}%Kr-s7T0rlsc-s$)+qH$V}Ji4S~NKZlKULq-r~)h|3K z5a5e<#NJm@CPt`Jatb6SvrjS=DrLseM_&mKUcWSv!M8W-Cu`L7;HWATX^D6M^V1bZ z{98w>pGj=Il@zpliMK@}F3x1-uRcO{%5FBh0<$)6m-WX(ey&|o;WU10E&U_d6@|u0 zkWN@=!_2Vl!K~lXbJ&WHUnKv|+<=I-pPCy6Z*ji3hFq`5T*xF<7Y5Vu5&o9(IYQ%K z5ozZ0R49Juhr05F)qT}fJUAO2(c6K9GN2CfTWvQCriq>gN*3 zzMLt|gb?J(dr4FnQkGyjQA8P@4XlQINOt1)7B8BW;*s(jO$;n?3NRDT3d1uDlbL{^$DQta(aSKUJJIaLDe)4IDm!Pf zdEubkRg9{$_^rW-o-~%H8_mKwB|}?!%d+?d`Al@T1MLB!@8{nuOg-&x>p01tXiKO; z8SpZF7d%dSyFJ*Py~{+d78dOy6W-^dKqeZ1)vbyZzL(+lB%qvqKvB9lh^tMg%Oupo z_hrKE?e(JUb=b@T7-qh96_ws?GiVlQf_Q|@q`0kln{-ER+^A_RvsUgrU-fzKVXu|$ zyufKdZ@@k;aj0;&*kv!MQyZUmrDFtaGgnp7J7C!@W;ZhAsBh&5XlA-lO zua;M1E0On-hiQ?m@k`V`A6(Q_j-|DKfC*6gyRIjeW@wINcu*;0&fTb|&ImbY7$j^s zU}8d0YsBt9GSYlWq$J2-g)=7dIp1BAGwe4<%0r?ls%VC~l(?u=IO>6F=&)BZgX+6- zj5O2;2CjN%1M|E07`ZI?&Mb=`dHv8zZ-55iqmqV8GcRvKPVPbvWK%G0hEo85YN3JN z0W0`?yv7qj(;W#Z#6;E28I??*QF>L@u_dnPS2>z51UA~EH7fNE_Q|0&aK>3Clh$GI zfQjknU(4F;{!fv3>d9iVH(M`Z!t7!PnaK<_ij5G8E8rXJxHZ zh{NXLl{g@RylOs8<21nr^nfLkpxZiA2KUawkF%(36B~7got3pjHUF)d=%7pQY9n zLtBJN@6o;TQd=Rl&L*`wsXR!7NcLNpiN?DIJxW9n^bf@_0YS{hJ&_&hVWoQ z_SG7VfarCgKepJNZ*d*c(f!Z3e}{;FSPL4%(u4$NKOrXUO=~({u&BZ{)x6)LoOJ0Y zRs&}$w1Y<6+FVZ_&oHD#J7X3h104KnGzZ-O-C9Sqpgn@L-k8Zi1Um1U6Z8}rLguEp z&qiaxBPR?WS>r#$KfangfM-{{JdfnIEIwa&aFx2c>+Oc}RP%I6Bf`hx1&m}z@0AY> zfS%TQ00s-0<($8MWtQc1vmy(&y0Y|jhZ;=_;6Ij6%POCW{bQsUrHzH$SdFmgFCts& zpe2q+TGAS;vp6EgCq_pm^Ek&CbRS%QRu6D`h;!n0FNGd>v!?@la4RBLIo(O?^!;rbIft5U@prAcpgTwMjzN z;Tv?x5zqPpJ+=tmJwNlF+|VEhf_-r@mH!%A0`P>Bgmo0W$kBoo;=Kf_!bri)QMl4J zrF~*{TbU$C@n0Z0PyS3kuyrn8lVN~vExr0xT4|!;Eu{F7ucZRi+4LPP2Xel0ggc&8!+igqL(A8gG(c)P2la$e;QO z4I4BE11YO6-Ylm5nduYO+V692zIqt!lw1~|ZQCm=2jMkPcNxmLDSB>9pB)(zc+HDc zP!y*;$QaFuDR@qP9C91oK$S#3_AeG^(=fqWrVv@O9mWPL0%JoA#?nwC3PHh=a#_p$ z^$8x{ZKda=tE=r=^m3yCe|kyP zXqP6oGt=-@u%puJmB0c4&vUf?#Hgw@MmF1oE!F0zkPuQ4;P#7cm_QmG4XKP)K^$U* zSXS|lH4y57H8l&nwQLxYlB%j*J6GST8orE6(;gn(ViEOv9*i$%U?)eSY+?g#04-~A z-euH&_JmuC(&-G_qbRwa-Ti@i+XOcpAfb`Xwt-bPRl(r38*8rdYk1gnWZlIJ%%CR- z+iuV9@*w=7!^N;#0s8%-2nj5zz4BF>?v;P9RR;*e91Ia6ShV#)`ik|ppHHl>=ir#w z%}De%8uL(}Cr#pKpf0FHorN%=i_tRwNsDEH)>g8Yt}LC)$NV4pMGi*I#e%*#?;6r& z1~C`dDOV&1=0Fo{b8LIkb?yw5C^cqirJYJ_&$!iO%A74apvw3gL%FB7Ka}Nn_r{2K zA@1$Bavr?t>px!^Jf}U=iDotp*UM2lQPg*CCxAV$Or0cuz+{DT2Ta%@Ri*%cK&nN# z5oS@^yevUOd`tq%|E}oaoG-;Gq75i(A}OrlVL1NS)+IcsCQNtf)=z^)2Y{JzSdHS#v4q{{l*UR zmNH+M&(6s{_dH`G4 z8x}Tl7D!CV&Rg@nL$cC|=N+}2Z51c+^;jOtA8 zGn`gWCAX5E13<|C4T8)6*M067OjK7B2rk;q?^whr2oPeRt4~AXRhegMW;9@dLbFox z)vw#O0o9rV!&&O{^1qfIp^DP{%z~MB7Pb>E=2~4ZVXoA?JK~Jdj^bhm6fg3kj{pTg znYIdW30{!p+`LDN!_CtK2fH=W!8a()!K`n{1U%aIqA$mReikPzFg$&n&gYI0rQJY zu72cL4JB{4Q-y2dofQeWO!GBv8=>%h4OImlex^MermUdJg^E5i=VaPo|uWg zq6Zmh(8aMPuv#k94CI(NTK4w}T85h;k{$9X@vC6IlxKhZ2w{i11uiD3=5$6;;zGuA zE`TkF$9?S&fqX9oL26S#J{o^E+Q*f44Tb9;fb9Ew!8mM;RH?+Y86!@0ZkacW8gs1p z5Oc0z3rsqwD4%k7{% z#~A}nwDt{=s?lPc>>w#f25-*7zkn4Pc)u7$5%gQgcRX`8=;_e6JPPH3ay9R218V9v zEzjFCkXTA*IuK5FkiiHj|5F%@y3i92bvAjC8(9LOjgWE4yd$k(90jcjC;PzUUv((y zB3W{A`8NOnE_jOYMKZaa^%&g+^zo64cuq+^8c(fb9|q5LCGT@0zu|~kkEFUe%;Vx} z58{A#ak4Ipovv}Vo8Qq9Nh(V({_u94w;Kebt+zbPaPr8%1zgqWFtQnBQuP3NWA-gK zYY*G%{RNnM<*=sp)%!L*z`Y;HW86Qqf>7fyX8#~~*eXeh^e)Hv^N}3&1Cgm&&pO-1 zSv;>Fs$vmah;6RP-nO(NzyKJagnvVAmeVF8~{yKYn1qB zA5lG-FIG`ohpoW!rJ6N;F4Mb(w4tkj2eS~2S;m8dq@2U<@*D+TTT zMxkBU3+%?Rlx7cg?mA`!_nK`#G}e!eL9)xh-}L*C1v+eKr456AsE8MpoOm55@aVRZ z4)AOvUpbMX{j#y}-bfY)xROI;gB>jI$93tqM_Ma-<0+ zL=!B74fSqe6mi_f?IC^x;OT)JzhxN6Bk?GJr%3q*wmaPP|^IM6^8SgU!p8G(CG^5rG{7<=;(+Z;k{eRBOrz+ll;&Yz$H6!`f2NMANRUx0j=JUj5q-m7 ziB8iZ2i7p-*OTyEEYn81x4j!vRXHD&kB7wb$H~?!;8u=ziT+rk8&JVl=_U73IGx4b z#XsTRznUF2{_ax$0RKM#z~DAT+R9aDj6I8$0an7i;7wxR(jm_XOw)fm_14ooBNQT+LWjC#9` zmGV5E{wFZ+6)6ZN1(b7GB+aRNUrRsJ;9JE}Fv$-+f{7Xt~|i z8M`Qze61~JrD)52p|-hH63dH{R$db3wDY!WFXv^eiOXoQDwXl8G${;|V&f@bdW3*{ z``%Qd#Y(v<1^7KSc`j7oh2X|x?N2g5YR4{=EnZ|7qj5D*Ku>=UvBZXxoyJcqpX7Rp z*SUp`no`ODuTA+j5l3fc(wd^E!yX}23G4u@usToW0mOkOl80_5l)zPNd2in0VM^cP zy+r?)4rQy0I!>z3XGxJH(J%A$AV5<8#I?hEQYJfimBgp5fzI27R}rhigqf2N zwk4p@s=e;M3TS!x9{HOnr!;QCF#je$q~1}qyZWMc{w^SOt*wCO7f4BB_8Xg&asO#F zDOwNpm;j0O7GHZ_pE($59{8&TBULUmeasidgDGc-U4_fsjmivj2YoR4j5ockorQRT ze7^H8Jw=O4v!;qwA=2I}aAiVo=)N=fAZwHCSUgN4$Fj3-Z-}>p|%5n66LW z1zvfle`mT6XdPpn;F#bc`_*Aw{YT?9^PxyP7rOD8y0*%ow2&CGCGl%cEsYEm*3C=0|>)z(KZh z06_*pN#<2joi7BwVpR77dOwyA5Fl$cr0+}w1xNA3R%+cM!}_^~{`)N+MaOn|(^kJD zWeNv8c0E&&*$;A9OB+ADPor^Ag#q6k0OxqQYS#I!zAkxb#nGlf^IsWb#l(N3o7x{f zHVCadfw21$zwbA%#vCK2o2`_!<41u;CnXvKs{}bpOY!>Uzr($4(~dGUPFLw<|Hx_gaP6oWIVa7Fl~XY4X$A;k#vn;TcV{R)h6+; zP}NA)7!1Rx*iMdb7n|z{IVLuW#zZ_L-gg{;XeUg5jVW5VdH?A6I^v2ce*P0fYTia2 zKf^#D5~q6PXQx?=cGhsU8>_?hFeFn=u$1?LO;$M;%eJrotiJ=!YBP_Kv*T6&NKDe-- z!XmA{&`lYh6Cje5;Wfqx44~dLRoy$e*{GPFnH=fNrwy zLw$1ic%3(7zdLCI45xg+0SpNUw&PN| z<`F)%J%4FvHnTFf_7tzVvQw7cYE!hB?9nhJ9Cb|jz~Ma<)FgQ6f+F_mOa`<`(Py!N zRU3SBbTff{ZS~=uQGZ(kp)pM)A`qh57R5d>ElYZY(kb?&07#MfZ2e_@q(%F^J#!ZD zCRU2a#?Sr~=N)S0WkKKNsPD=ls1?ZGAI&L*Y}UG_w2<1}JOU<=$%K z=O}t@X2+#0=&70^{IeHy-k=RtveJNggtZ$b-LkcbB;&hrH) zbNbZD%n3G`a%A0_nR`kq6Th*Ipg+n>nYvUT-%&^VQ^{If-TF2t9@fQ^@2`vw?zqlo ztmM4MI)KOK%lS8TP#&4l1_dahNmK70O*?kEuGcV<@t(>4IAO;x#sSF-ZgmHcl~2Wl zk)Zh@34;E(RN}2q=PXH8Ifl3fJ~U^W*L5A$9F&3T2D5gp?S4Mz;2|4$HmJBah?r0W zLJ#DiN{f0Ti6nG6^eW?~9fX^0WrN{}_K7pq4@frj0`ZMRj(+}!tQ5TEsf=-8BTICT z?OP_f^n5h?<;U4gpyBLwp)8g*t#ryM>Pi2>(7G&Ecd5%i*HX#xfY7&-AE1(cc}weP z?u3VCdrSq!yEV@PWXy>nE3c_sWt`$YwMa)Y;2ia73G}Q;iYVWFP*fVYCbq5jc$3tH zF4DP#(+McN9&RmtK1G@tV4{=>Ymb1I-{@1hWcQs4^O3(5plRnXVvs_B_fKKMhp>1px`gggqkvs7A4ExKjz{Y(Nm4(Y#H>ViWZ~ zTy^$6I|Nv1F}YY)`KHeHf3LGP)HQ#(e`!at#7ji1y?fW8Y1P%d4zD$B$l}#yM8V(xt zL?i7HP|zj8kycCCfM#C)xlTWQLDPzp;vL%-m*+g(HByCHP7nQ9|rl7!6h2 zOad*Rm=~)YX9)rxSIRlhqa7PeIYEw7Z%J{ZvunizR<0NFyM6oNj7o~PM}n)ukE|4h zot){lpmpy9xo8d3C^Wp5WqwgmYaAFEO2pBaYuBtU1Ih-PN8Qbg_?mWWdI#q~VN0j3;wU?tJdC%3RC5D!{ zpYN8p3&?5p8bEA@!I*>$ECdd8ic*|rmnxdn@Q4*KVl@Qj=^NunN>p4^a!yYSHu4(A z{cT32WVGHiR8DfepacwOLVu;%fO=D+i!p;AGt+Ei-IOMPDmPNkk2zUcb zdeYE(gekT%KY8blwjnJ4>GT1&l80@IAcRlufY@~vIf|7Mbe6p^W=&?|8Sg_=Wb&PFI z9^ALF`W@QvMcsA*k!2_K7L(_Wl+jv0@M4aGq8!vLlO6Bzc0) zifi8XY$A?c^X|+$mb@$Bf#+AlS0l#G63>g}!+ET_fb~@pGMr~h99;+ao?q&iN8xma z5nY_jh$W!*dP3JCku$Wz+dSE%NWE4+s=GX6>&x!n06!i;l05EhRTb}(b=s!W&biVW zf}g<_d3h@0jsv9@Z)%wBy!+cv;CMUtuIWh%EhUS@Yzs^)fT9CQy zeFCNRg)FwL{HTX(QTdWkT=-!z?U_@-a|d%nCtTI>@m z4`}HpTfqQhGS&bS)ZbgNeq}vDzjYVkCw4|i7NzgG<toIN=E z)e!<+BL1KlD@V#|f>)IIDR7Sy{o-LObPY-k)V8DL<^NqD{m4k;wp)aAe=8-YJ<95n zO`)`$GY$G$YPo0V93SJ(Pt;3Jd+%)*O!f;Y8a+&Kljj&K;Hoo4?e;+(_#UUw(lB1MT*%G&L zpU@FG5`&QpDma-{_RsUqQuE6@dKjnJ_NuJ(*)96o@;!mvBZZ3?=5;`z8C_05f+bOI zQY+!esdw^*EcpapC6 zw_6`6w3i0!Boia6f{(<-4#}iHSjR+pa0>3YBzp_ROs)I*^3m$YBFvcKu7HiS4Ga*A z%LGs4?wuzO0E}M>+ivjv0m~mPl!b{Tk8vrC*HfWz^wy!@n$*ZWj{@}$AlZ1d;7%dC z>oz8cb#JonJ?cr8j`I|kXG^xl(w33LwyH>|%-g+r56wdXJ&mWVR1!ic7>jgjP-ou; zUe})y(EYtAY!5MhWW^}0_#XTPjn|~Q8}FguJbpW(`mAaQ?cCf(OD<6a{w+M4xxFaR zSt=lmWGNFgS=WTE3N!7P1)W`^eUPrQ``~oms%VPNyt)#dHuZI1b#YN0{i5Q2e86tj zWmkAEo{LF#Gh%?|-IziHu98W$@&jJ@PhWX{3rwA2fG_`oza34wO2&SqQaa8@OMx8c znZl>{M~#k(4?*PIpd4s*X8FXC;C&RJrrqdY$fb?z4i79M5$&XQbfvqVFoZTXO?Xt0 zjR&=JqR`O=>fJxKt`ApcV?I8#^yKys>*tZ$N$UCSdcdf6eX`61XJ7fWM|58L8DVIp zv_h;MTkU3RrfJ{%YVAUchu^=EWfN&$SMs1M%E$+Bq}-h`c^0b7a?&|T(smh7+tJpo zVH@fyYS<%=NiVeyI;pY&0kqR!b7D!i@~j#d{K~-E6(9UQ`p7=~v9yU$AlI6JV$Wrq z?YV^FHPQyqIR5NqFFZWmQmMCyT5=;q`C)@xi&~oqfhgEhi2WV2C_#d$3!CW_#rd~~ zJ-%LMxBP7Vkn={TWp{;Z?H_8F`R#Lfl|}hHk-T_l@B&;ST2%8U-)@FH(Mz0*cYxej zPJW)O9P7R`US`A3$$#ceeNy|1vI|$2Zm)(Ge_|@PMK&I&nqgX$e{l=n1&h|2SIM&o zro3kW?EvkeGl8%a`=V@SJlAH7^nFNN#Hlnl;ke$^!~aF%^m@Z!DC>A0M513>Flb(p z>my*CBw&bP1p=pQoAllPba$@t`4{F`di*e`~nog{0Bx z_A*N_L{_8KpmYweyB&SY>-N-SJTqe;NoS<(5#Iidf+1+9{F1$Fw#I4*1~f0jG(hU6GK##E&U|nH2U>o=N#p(bU@#Z$j_#n#iM?`G|EfpEqmXkeJVgx&oZo6=L}Yc=tEv6V z?BKU@Ox=*NWpQuRVj7E(jX@yR|K{YSVd40?`)LRZD70K(4e0~heDV}j)LNV%u(;M% ze@@A#)QS5cV3Q}&B3LEn={exszGv?cLO90VC*qWDd{Able+RUI0bxfKTN!ux>grMG zqlrfeI5-4L_Jx|7+O_>!Z(M{?@|&pEGR%imRvKpA^K5Oe%)|ug4<50F@8Lr{hf=XG zUbS{l2`gvjyak@FjQvA7CL9v^o|#l9Qb@}{ckU||qq3<#NKWAC&(Kjp$l+2ZGU}E! z78jy30h6h@GZ!Cr`bcjm5#)Q3ju}uHr<33lBVQJPR~cb=BXwos8bWsUur95HT!r_X zw&1`_7e~yKFeej!d<*^n;^!{4&HL}x?*@LL=JWN-y1J%w?~^%6=wn2FQg+a9kT@|X zmmG`XkKwf%;13@}ZJYq@dN6X(W*ot)|+~Dtk7-#Q+%lv@xzU31j>t0?X_x zY_)bD#_2IwZrUnm`0^1y>cFIc^3OXZ;Fw^Lwbzn+C545qI-7IV4Pj0R_BO!P z{K0G~TYL@R4^RlLaZD)A>{r?(Ye!j5A4Z%TV`eZza4&Z?l zeF(G$cPvq)9D#%9FTR{m4G9MQ>e==>ZHI;LU11=PCc^=H*b5iM2lwghq9Qu9+^CrH zG)oc^OT1x+`^8T`2JeG_8qxh;R73!XEk8oFe*aG-q64a0F%vsPSmJ<&`7Gq&EjL+{ zp@XffuMh-SDa2>oLOeGaw3>)vchfA*5?OojD`aWwkmR`1C&c&>LNo^2V(5&{tXf4d z{CK=@Ge zpB|AGQ`voV=x1O8|{;099{<}ckES~hMII_~eo?QB?G_Ty_KgTOM`5q(B6RxF~D zP#_b{r+2XSlF$)rBKy`Xtm0?nsVCbbYC&ZRPmfsI%0%Dr?f#wNIv>la3*Kg@=!^PiI>;V? zS_y%LJ*o7wOuWZ9?~+WKqKhc9;oP7u-w$}1bN7i}w`H5X{=A$12cve#iSFEk1ajgE33@xshw$8;d= zD>{M)FkeQgGWQW$jsapq#d{vpHre;P3s{b1!(r}Q*M=^@p5f@)K zFxMdIIs{}xqgBC}DuYR^o_y)G%w1x&vKG<`RGT`c7x7*Pl`5AipbvY#nW;o8Zz!$4 zCuv+E_@dF!?&1T=vCHJF^*I#+uHVKoLQp-Vu^$c?L`#;n;wUs2#)$S z)WDx@!07*pK~{=)v6safaRVjKEAbaN!K4$dk>fP=Xpp#Jd287Jiq;m_9-C?sxNRns zfisPXxza3u+gI-u$h(8n$cGGL+ZBZKO=MQqFsfj=*{@TCghSQ~R*x3ZX_6_m6>Z|w zs2uR%HJnL=ChpeoT}{54 zAlOZIPk*oxem(=M!BiR2C4&XhKa|h`z^-vqay2H_osk|ZjhOe>AZ5mV@3EGt?y-dY z+WtCw?XhxZ50NENty-vYMPt##CHCE^?b`Fs2sZJ$R4^Q2J76(V`&qHYNaU5T*j9`U zf?f4;GWg?+>^`V%xzlv*W#6?1yl5k5*$)#~#-{0<(@Qa0h48!iRa`C4d#E9+=ER@! z=5FWt0+7*_<{K`Q5qzB%Eci9xa0zW7WYV|dt5C|6GHhUQw1*B*w{2o3@^6ypZQV0C zJJEB!hCXq@Zi*BkeV!7wY5I&X@LRSW1|%CUb35~|P?FO_lR9tzeWL2k#%+{A=fMye zuRta<%;5qToYM#_dNEwPXv6+_(;mj9Cypx1GI*8wKGa9B#`=$}ajM`c z^sZ%IRBxUUPrm9SZeXXfp(POlp3yWT?AvdjDM7#9_|daQ2uxCv_{0h}#Pf4WIBfTG zi7o?)Z=8}IGe9uD^0~jF4VY~YCEX$eE92-E@?ck z7n;24-Y|+a8qSfyN!kxvTv8CqNz89!Uhc$sruvABzcqp_%iYenGR=lm6lS61Yg{Pq zy=}AQ&^do=VyeUaRWcm5zA0GK*Nbnf(v}RuPg)n2!U#}VTX&^=2G`htL%b#zAQamJ zQ>@}55jhe*1w_)T_AVaE=pk(@(wyzWcod?H=cRgr*AzsKE6p(n<6hQu&>7fX}n~DXyeKRMA9FTwM*>>GBbR+fjH-78u^YO|CGi83ouoXUv zn@~=PhqqCgDNuK|?=$M6(>4r@`mo}T|M6_OcDg7<&N$%oSJ|rQa)oUb;Yq-!p!0GK zePw0AJ@av%pa3q0^ZMH(*emJqE0?Xl7&|J9te#!bSjXvQGpQB~ID!WlYi5Iv%So&} z(;|8Rd zHlp=!*~XYdxr9bn|N#oR;_n*&@jbsp?BGWv4xYG2bRkx7YIkv7Zv^GZ-|Cf5Q# zQlQ0=*(`7IZ?pv%N_msLtd^Rikyyi$-T*w|fJtCfx8Vtg0k6M^n`(Hji95Sn2se-9QhK z*6oD?VX_k)@-pMp5Kawe`8pj%%V9V(^mRKSi4e~+DYysrZ&}8m)uZMxNy(sE>EM@a z`Zx4)$%?nRZ*xa_u-p3Xyc{9V80cjkCRWFF6=I*%b7bi);K~i1-P9*UW%2KRVi<8s zgC*I2^VdYbnrBrWp=R*!E*jsCNue}djiXE*6jvI@*G)t}$CJiAc*k5ZweXgJl$+*sIy4?HsmUe6+TN=;Ce?K5>v6uED`l`!` zTOWE*E$1+h_{{fm6L=v#P5*Aq?1%dL_{)u3z))8))L7f}gL zcNb4iZVG1Q!8Vrt{O<^YNV>(M8q$`-(bH20e|*`|fkFpld1ot z8|Zx_+J0w9mTy#8@GT<`jUiC62}gdrezaV0* zTHmbBpZQNI0_|5_36{7$S7`L(Uv*~ZdJl$uy66^$2Fjo1#5vM;1gg&0in4n4`%ZK& z>#R#aLWyhHre2o3>159z-lLU5w>&NLO-^2x%Nul@XRI*)n%d&HdM3MTnd}13o-FQ6 z639MxmWVFIXFUK(S{`)#Jb^6Kln1lL0e&fr=T%8W7Xx+=Y7-$XEto8_&rx2t>3*q# z*7Q4kyGCY`_;m&@+{U#1O(_pE#$Rb<8i1&{H*S~jGazLz8gG#I!iCPxlVz*IxApXD zf{w3(|ElMkD@gP1r%<$W-n^KJEpV>XR>Fl%-xxQ@Zg1Gv?aatMn71iSC2G+LvB-AM zL4S#tBWH$3RKNY|{LV-vvn-B+=&7LT1uTMBM_x|aG(T^YOHvr{Gcz?CdzeY5%ghXo z3b2{#GWhGl0yJfCV5o;x_S4p*hu{s0;Q5Unli5p0<%CckE&kHgYlu?=>KfWSW~>}C z@jkREh8|qGHAzWj0!Z^p;bJSU@{{0y%30MOqU5b&9Z0P=@%QZWKJ%(_VB?MYevmyl zeHam|KzcnbAs)!Gi>pD!x*?k{1}B6@X~hC$W$XJ{SMwK(C%gsD@wPJL-#=;=3Y8jS z1u<%hg2kSuiR&5Ih1-Ih&7SO1S*?rR2%?6p27m<0d1HTgB3xSy9k%xsqL@i2MRH%( z1!DPf!6CQ4tBsO82b0&{j`IsdkY^H{{B0$V=?251!EeSy9`Eqkpe5j$rP%oi*HpZU z=G(JL%PALCw|$E;x#sMc!;8TrF(CCb`PyU(sraAMFMg7iR3l~6$8*Y=&1FrT-3^6c z{HS1%WVFwnou0;>AXycUnw*A!!ax1LcnBO7gS_>pA2kf_oSh6S8UgoqGv!o)iaeC@DsmSPy?I(<4 z{tTW_V9etDXOj4OInuLz+I12u89tFu;01_Nl%F<3FwT33TIBvoC@wD`{4rT5#^i_X z{`ixbLtO=77!`JD&G)c%!&cabe?Zg8c6HG(Z2^ekk90s&xg5lRdN;=}3YsL}Hcm%3 zcuR7}lF?0g@e2kY{l2xi0+5B>$*qG-oPl+5!|-e1BJRrywLVA5PyFU$t{Sjt za*@Y^N`#Mwq-ygjxAQUlNBf*a+i-0J!r{%6fzZTVNVwp%=k(28ba8N|DkSo|Pw>fS zu43n0sg79f)z4Soh%^8OcB4oF_2p38uDD2nJzm<0^2G4T6bi0Pxm=K@H+5f((R?z$ zLg#^Xyph$U9@QnI&*Wt^NGmCuLts0bh(eWWmR{Knk|BMO=%o#_Ky0F9*gCm#u+^33 z&UPe=Ce@}FW|=}p!}=Jha6YxC`NXFZd1_r}68~Y$FmYvlg60Wdic6ae{YOmhs6km~ z_CM6ckY#m$g8IB4ZcB)8FLj54}5gs{#-^h0cyi`7K%G`G=r19!3FxWj> z6bL;O(%B6mIO>Gax=bgEF^d)rWo+z=e12?IYLSdspcTm`#Yz|{JFVW;mHnQeqpT(0 zM*tuhueGuve9VAd-K>Zt^euH7T&%ctblP}Cft_ys<~{pWuh-z`oo1M3Pks?&2&Ahq%|w*pKeHw6Ws z)|jZxc7v0wZwt5_ki9Ah-k>b@cT5P0A~*^g1o=d@U>iG!gOhiJ#NhaZ4&z2m9^FePEUr5%*hvd}*QC>UH2RoT+EH?ge}L|5_kr`TT$c!S_W z!1_#!VClDphYOOZzk}Oy4R?N@3mu-G6)hbQ4nF z&625{97}c>zc`y&ths~;9{=|zr^m-r;Ucxwg>W1@jULctGe~&s5{-UhM*9UZTK!He zPQtbN$wjG2jvtTgA8kw5$k5?*ic?2}<#EZP2M$AXnWG9&b%}yf-5#@>+jN)?0Q-iR zJ*w%ly9|3>i}tS;+P*iLzDD7+@>D4_e1JSsDD%kNxcE2&rG_(3m|?y1x9ad z*yx0mNoi_*W2MyLZAFj6$7cSrx=0540U|hkCGWIg(m&enC{F}Q@t# zuw-mfkj7~c?(g(GBo$h1fdEDlX5RG?z~qe}u(*w41X^_}sGaOP}5WZp>q9&{2#1~}!Q|B|$ zim6O77VEVEVe*-Ot+?DWL8$`18;}fhfC}GA#+{fb|IbKYz>I4WVdvznbJ$gvBKl?1 zf#a{&)SYxMqUwD7rA7-|x{wziozXxerS_e(R9asqnhL50gd&m;=)f2z(5Il~cT~fJFocy+oQ64vV zq#G|BsRhCE+tm`&T{7XQ8A zLpxJkJ`cI4QaA>mfLdX1;HM|>Ar6YyL-zq)Ui z()12ZhNtK|yj*3kCY-n*(fjYC9(MTSq7{8^B-?-}5}~JjPe=l=-&CL)!Jl1FMzdH3 zc7m~Pv)?MAnm2ldL?FlUpc-EG7f6=P0F_`j84?&UBHsEVzpe?u2m3>54A>YNp2V`3 zsaXrP;62fHwhO-~@G|vPtxf;x_B6*k;Zwo&<?&IK)Y|8KxD%kP6SH#%sCH|_$rXz)Hj0kq7LXKrFS8_3&(k4(qw=Xanp5xdAD?T zGjba^0U?4v6-Q_X=0M-?_WN5^fiMk~4w zUGeT}A_%4I@%uP=^+o=<(a}Vk5wWFjW9tmn=v*O*KU!jhnDlX+*eyj&Za2Rg}=I z^rpEu_&={D`O%zun$ekM)F#Q}I13LYO*yStIRh|*FlF=ZWk828B5k_P014n>ruveO zgbo^<9BZF`QW-N;66UnHR1LipdS;rA%P8Crn^8hiH5wVV&E9bBx}Duv-}s=5N1DM$ z&Gde!d(W8^R0=3dUO+Dm;0i(cYXq zMEu>|U_1vFd(n?LTF$j$0V+zQz@!3YgvA@vmEx>h_vyEC)vqcS6@Hb9$P$SN-B{4L zt>ugH6~eQWh8*59$e@@VJtwx?e~k|gNAkXdM$^XEhO1%!q7@xAe=Ml$a=ZpnioQ<_ z@9mfY;K!>4e<$?Z^#HrST;M;f{3PScf;i?<-j|c@15AH|{<#6mjt+Npf?18a+2Vv3 zLL=Ndo3Vv@Mzsth)1JfpPGa{|)r@p!i*w&tUP;Kju#?xEt6Eo)kiH8f@0_A(RK@FD z?7PP>&m6Zfv9pHJdvZxZAy*GzCEZvpd>MVT3B(0J$(&>j#32Wk83oA|fXRG@wmP&; zce;UiL^33{uSX2E_?3DJvsbD2SfFjj=HmE%gnw#m)&=XSt^Gw$oe*?!U^pahg~4s& zr)1-NrFdatxv7Mdm_MtuHk4h$QZ%VkNjn;GWrymekGPCc!u8tWLl;E#S@CLSkR%Vh z_y|pPQoX9Z6HN}xJm|I32ZcExo)n5`25Z5z#n*fi<#5bT+c(u~yoAtHiocQO| zmnJ(;l?=DJ}Si;+EVDxaskw%S|}Jj3w2150`L|1@EkN$z;g)gJWSf~z&|q&>~Kt&VHN z<}Fe+b~G1Ow=0b6kXGr5nI+yZqk106ZR$3sO*wz~Wg-aRHz<&6=N@Wu$j%dG^C==( zu-b3Zt>NrnDM&aSjfu$6xi>r?3K=(!3q+4N>yKv*hi}p^Keq8n zH|^&GoaDmnP1_3=GU;5=SHm_xlL0-HXwnC9HB8rXe7T zg+XA$DzwWFbm%SBz!oJs0imGb#MB8w*FZ zeB8YT#K4*;@+C88>)jWU<^Co`%y7f;*@xjy@at~dG)Qb9oO2grt*gWAFk@NFAcE%Y z#&-vv_vvjmkle3nC{pbtX-{c&=)@&_YG^%@R0O+#=k%A-=W+;XNcrilcL4DQe%FbE z$9`M=o+gW$oL_Vh51YhQcFk;S5s~LFDt1eKZVYAMq!7yw#}+lO1Jcg!OkC^rssG^_ za6JD(QTy%myAF*Nhwb3%Fr+-$$Ji%*V~aB0fQYeZW{nfGiag`2mJ%6XMmmUaIcRzl z?r9Dj5$s2llEmPS(BBXc+3SwLK8^9C6N&bM%4AHHunAIj7fL>b;vv;BK;0<(c-E|6;Y3& zA%K*a>(W)aZT^beh?)?>;ryb9Gp1Noh&_kSpL8&5k6JJ?(B4OE@_^>KFm6W?j^cpX zrFvR9t2x7(%SmGEJzpyXTn?gPU0T1zHO`n8KI;Pyf_j+# zIG5{n9yTq(Nn^Xnu#nA}^^|{90TkPoEIM}$gtY#`k5$WKppwCns#*L@9dZ0n-BW-A zf!dBAwK2LrdE;-zTWCFN-!L)AH&U_nk=w3zq(Djr6=8uo0ofo+LVm`lb}B^e@wJPU z25MLQoyS;ZeGA@|9?vHXm-87;TGC*KcU8mqrW(@f^aHR#ptV&n?!pz38}ps|#VCp& zD7exHDs($uB(>hYrd*2vk{$O48<0Jz!VX5-#X@owVpAv&c8b2HYWTVimG;9uUyDPdd(+|Kd9wPO3R)^`DZyW3m&-23xL`GX}KgQ2Z|< zc^z<@t@aOYQ3z_20ybLp^gV(@A}XT*%9)Tokvz_D2*ui*5hSxN0E97cA&5O~9U@Wt z-0$tzVw6dSi~`z%%$Jfkr#h|!Hk?#&HpYSdLBYD&p1B1UZc-yrvBpV$gxt<^`k__+ zXY&42JjdXSAHRKf4d;C>hN*drgstJEL5m9mMth04LXtrk6~^b;ozjP2c3lW|k1H-w zNR=2#JR~W9GoYd)bc)L0HQX46a3?+yQjsFS{6AfmZuoZjCNsAjBCg?ZtuiP}NNEo@ z2%jRsO)Yh&RZ%P=QbY=*5F@G(?oph4AsJW^r=1b0(q+zXbC81O`ZB`O#ok)8c4qA9 z4Aq}kAew`W%2;kG(+)qcGhW6&kb;0jHd%DL>&C;){Q`q1bG-!q@M9m$lbcQ$;G#e% zPkKrBtl$Bdh1&C#Mv*@{GX?ml#SJE3^3@T}`1(&h3*!K{&bT9*Cbcdzdg5+8<=+&7@MvIph^7HGHxL*r zqvZOZ6Ax$zM#%f%i6pUUD<;hAUfe)JFAS~^{CI6Je ztVOo;+E5odB8<*s=S=R zlcj*TLc@=%KNkcTW}|IHyj&Ukk(nb`w_3n>Hp%J7UBb2MM$=7=bcKol`%j>u{A$>| zEGTxboi!1F-yo2PN=Z?SM z#`TVO{6QeF@M=wV!PZM_pJ>FIW^2J5N?sN7JxQ@|{I_?>|74suJe}sMTKo`P-tZWPt3b?K6N5G& zn^m+vKN)?d`M#{CBL3$Lp3vQV(F$D=bhX7kJ>N>M%@b84ir~SDJkeWTHsGsp~uOU zhg`FIYPYaWO=XK>;t=Lh)832Mxkr8zcD1q)5oKx7-!{}(?2S=|OKGpRCCg^*G5cYv zlMpK|N1CtBc`M6TE$PZ5l|ZBR%V}%zS~$p>7RaYYmAizKWS-KM4+r-)Ugucz8cPB_ zQOvbqK@hh#jU}b|T6(4osZ-4MG)k1zD^MrZW+s=#Fd0)e^~d!_#>^g3#rPQyxvSF; z1QOwj9#7;mwGkF;15|fI5BsPKbnGLHX971@w)(y$&AM%bsLwI{#n)}P#dAHyVHcS! zK~~0!^pskolEo49lp8b%1|q;BQNc`1L*a-OBk`D6ff5^xZR&EF?K(jW@KZ2=HBbQe zkTfW^J)&!f9wEqLj(iS%WR8o|c162n?3GUM5>95*fe`E^3caeShlwgHmO^%6o>-^^ zPS_7Lp`9KZB;ia6{s2@2AMFr8&Z*EvplItAq@ILKGe-(WE0~Kx z_Tb?LcxRNy{e)@{Gr5;P!12H!KTPrQJ3#i2r4qHx;u-K)c~jyA$2Nf3Xeqs5XC@D} zrxi{JCMZN?wvgB@{vObjV6M9sYIiFJOHioMw-dD^b#@f_Y69$@cJuoejh?w&Yd=Bb z`FAq8n5{qmkI)M8ab)_~!O>RhThDr&se?;V3PQKx>684@rR@{^NC7wxmhj7v^xJ61 zBfrjvUuf<>=PQsdPeUba##ViwC~um^ED7D1roN4hF8I8Ils;j%W|}XYTp$OKSLXAj zr$~N~Zzb^mgZ`%_QY?M}h{-o6#kO(v3Ay?}aOCs9uR&JP`;cO4hOw3ZGZAcD6^qPV z6q#iZKmrL9eXkW57S%8|^L2NcaJ+HILEUbi~5z4o{Gti}uz>b<&hz$AN^~C;h7o z^2=x541~{2MqCih*W2o5AST0gt<&7k+G0_SzZeQ0K|vqT=#!J@LsCeGK{~Fc357wl z7?Ky31k^QeRuaSWD&a+F_;l=36XM`eW0O4&*E#o`4Iy8*c%l{Qy3A8$FOu2v@$gpd z@vVLoKS*_Mx*8|FDYSVGBNgU)|L@OOfuM*>2RCU1XQ=Tpda2)p9y+VAWSv@jP7cK? zu*XOXCJz8q-5znJ-fa&?EoY0X{>;`?Ubd0NqA|U1)Z`n@g-)$f);pl8(vs5x_5~)s zg$}e;(t4&~OAB7+n21TfSO6D<-N5v*!10&byS~q^l;dS!kWMwO=1%&h%9^Fv7A0>9 zAPX&CO-5rMEaCuYMU~@1gSn=T!5d9lbgG14!A0z-FZb^w9#ike51(PCP`f9XPW-el zz285A7}GmizA2oSD#t6N8($_;N`-B%sF}Kql5YFnUFm^u02h3pEJQ&%~=>#&sZgwKJc#+&M6QBfGZj(j?Uoi9)5)mfO{ zZu{VLYZCmvrF&FIG)}<;U&74Wo71hVZ&uY*&q6RSofANe)}upj%K`2>57L9300@>W zc}hcfVM1vPEyoIoyOLa;rZ%Yx7yKEUh24pKCxDe0&kN!g;senIM8cI3w}qm-v{Vzv z|LbqhdoeL>`+m_L87uK4B3{@$dWS1QG>>-)tPA-$DCd*nFcgb!SNRB9tT|y z1=*Ezwm{h$o73__Z{@)nh}WraI2gC3uxDHg_rcHe@=T8q1fUCF=`)-M_Bpa^ZF6zU+d zSeVNg_xE~g7UyL&=#C-b6^+1uTcW%?K%7q4V|hRGTy07qT}8l^{%IdsP@}efs3JIc z#N>Xi?v}*L(tx#PmgXv1X@+8C6^-mM1K zJR#y+wGh_2XJR1*=YXWsWNy7EpD=HYN(k{LB9C{cvBdR3cAWsWV)E0Y);)O@adO<4 z3!3c39~qk2q;k9WNe3FjnrS;-j<2`P(-y`$J+tJnn(Tm)ZShG{54HwqZUxDy_Xp_S z)-f0F1r`1f`hn?bVx{_M1qWAECT|!iRV_nD4E*0>ZY(TEBX%Rm=}>Ex6oY|PGsz35 z%V|=0_2X==rH+VG)i_4}wVXr-9=>DA5O#Gay^gyCEx?y0jQ0syvE>U*^A(Ch-wuS{ zXDqCBKl(LIJFXa1ao@Sc1q{%0o!x!0$ZL#X_>j-Vi)5DZuteqrt>33Zm1Ke0hPzN=rU6DS@gY zny=MB4^0-()k{~Q`0qXK)RS5Ef4L0z|F&-3Q?lCp$WiU?waG%Z&#~3uZ%G1B-21q+ zORk4n)y=2^TLega8)O-nc&CQJVv(nvei%|NZcjmD`c59QVR>m4k*jYF=yJ*(OO}41 zMEBBH@MoQiRDO(P9FGHi*H;M#y*Mmp=#l7$+~Tx&t*=&5%0u!|b>)hRy;U29fqUF` zX+dO&^f%12&$qTsIYFbsjR$i4yg+t`__ifI+Jqu0Sv(|0EkHA=Kr^bd3n|I56TO8F z6m$NJ6?;94A9OnDkpuharKqiv?rjEV^F?JmCI_3^vB8s2*W5m;7MH6R04gEO{dx;* zbaLDJkfR8|B%HEmRltaru-6|K_}%VDwGNyY5h~CZ|Kmm&4gtqZc*B25qG;>zd#yGs z>4f2jeg(8)Cxo#a*i1Q2K693~w=d$Xgh zPbXC{f}5?pqlOdm!L$uC0z_i~&oZB~$Ayjq-SX$HZ*14S(uV^f(h=vz_DI9FGb zrDw22>aLv-drsgR7TQM1<7(9X6vuc!m@3ZVnL{g)nA+5$`XU26xYE#!<-zn8Q=#E_ ztv}#Yahd4I^9Ycb(RBAuD&{el-Eu=>if!M}6rY~vE=a3wb=J)tm%gqmGmMX#*uq~R z>l93322Y(K3I>l9ntsz%A0*k<2oxoSEa?-63Q?9~@scEF-CY3<%_1n2eRT2~zI9A_ z3q51Yi+W292yFcvzk3$NtI1e?Six#WTugB-X@c$k1ui9xfpX))A~_JHg4e&Jr_0~Q)#GNGKDX912p zzlBY{iQ)V%m6N+ zP0u5a*L=n^uM(8iEW!Cf)a~>#!v_Y=dB9hnZJ7e}g*IE@*~MaK^Rcp`;EL=V$Hp6Q z!Ix~*b>`&8^+czU4~`fGab|XWE^jzw9-Pa~0wf%X0DLq-E{JALJ{tS4PX)iJ*uJbX z*bbCL$6aY~m}RXmA`jc5-XB&TjPB*RlAFT;7qsb+n6FEn>A#Au<~4GwiVOSIKQ-;u zUPtFDX-V+FnDUdSul@gqvqnC_WQE6^JdW-Sl>KzY6)q&Z$jyNVeCYRTQWmA-9;KDd zK#gK9z}ABmyp&P)9pwrYIZU>HGnRzHDdw>E27|ZQ*O^)eUiAkUl7gN$7O^Q^HvTie zGYW`hTM@?Mszy{F+@1l9w2H9&cYB+ENBvkzmgkAck$eQ=r5e*5T{#d`ATvPruz96$ zyk>WK(S-MD`mnFX=T{CmjH5c*S*nWzbU0O=$3{IVo}=oGT5QV62Sa_@El0OCM<@g`x7l+ug0Zr3H+;hjv;K(hv zy1ue<{QzCIocsH~QgX9>3-`ZA>s{+vJDFaDV0RQtl~z>uGZ`HUL*8QJc^Wi+a3u)G zB1Gu~NV=#|$1;2blbCwedYo&OV%51J-Ek1OlO9XB>`%bEigP0bNOBN$LZU!W1^imMGnbk*^AJ^ZJM` zSt!~+rw)cuKS~dN6t{eHI|Tk8_q9aB&I|Bi+S{yes6Cm303ok?D3zn;j`kTPBSG3c zlLi|p<+I~cj!rKpA%gk86$2>vfx>xPZBz7~xP8l-i~%Z(aS0hqB!xuAM4F!G-B*PP0EaFn}_5$gsN zOtT_5{;P_f0MJ|gGFB4<@sc?f&mO&Q#8}_gbBu;u(e1rT<&u2r=gzs2`rr$jpycZ0 z-ZgVdN_9*N8F!VuE_o#cTnna!`)kA*18d*~@hsQFY4)zQC24mAN&xq~e;9gT-!D81 za7xER4&50U%KvXs!zJY;3GXpa%GTBd)VRvKK90PH(nfhZ3yY_gI)T}lv#0^ZHLPW&)9FgG;9%NKqn`F?0`$2O(`5D)?r~BM9QWw<-kkEA_hW+ze5HCSA>!&Ke-`#eR6Yj)#bp_q^(U;!?m{ zRaBNK!cXlIpAxbzx3>us2+p(RiOtv(m5uRYTQI!#449!JDey6Yi(mjLuY!^6=Wa;> zJQ%WJQjkz$-C@Y@Z)GMJ8$89T^H;e}xxp~ZPE6oA90mFCXJi8KZAjS+MICyp?z{>H zHwyhtQegb`O%GFr*s|Y=aW}_*rC2c5x&LMqz+bS%C`yuHt?HB5Cd|0np1RB^$(S0Y5`L!u|qnQRcXv? zKr>lFgdFIMyjXrD1uz(>C6?s+X#O5RAO+N=-|{yNREWuQH7U%j%oQrUm;@D52uV*N z&u8m~*M#ZBDg(CviH|G;fa$F5;=e`mmb7!vMru)$!|@@mtcC~`F3$xm+IQ8Q(1j_K zJ)-S9K%PKnUV8Ql1;vTE|9-6G;1P|iTihjCwfA!p0^116Sk6{vA23)7S1YDe%QF0> z5p38B0%$H(EgNT=WW>d;%iBAQkk!G)~E$H4vFqom^1T2WmfljUe_n`D4h}9TWH9`i#;WbNiWxLxb%FJcd7a>(Bpm@DxMGRd(@rAZ;g1e1e!i2ox2oBA z;ZMC)fx}apd@Xo!ubn&SCHjkduUmON6<&4z3{^YX-w9Bi)i@0Kuu}P})M>Hi!!xLj zifR0jzEFe&N+knEM#l`+rEN$z<;7PaX^U(sFuIT095m(KV%!cOwUq)&4l%1R+)*5<#MZ~@Da>3a-ac`($0w(3&&tQI zqhzH6bjgP1^u&B>#VpeCWf~`}0F|4RGCYrDk6ayyS#S<-i#iM*#7}X=<3Q*uZC_THMf}E2Rm{hVVwbiKXsiLMgp%4^2|o;&0|vo+{e`cMUFQGM z(S**~U{6R-jAiN*-zQA$hv`#pExS@;$sHx@h56_`p70{DQKhV0VnX3uB9O-cFef)@ z=(;xcWCzF^=<1Tp^hIPFIa718r~5DM{usTecT9}u++5Yl+wt*&C9fdd1N27 zt}Tnoa=43=Q>}kVUFf#O3c@_8TcyFQ?}NwjRym$AEzaDnGCGGgGFp!F4MYg}9O!>I1~ff<2H5c~2N-kJBS04#xed zk<*LUysvLNL1@h@T*UpU_341K-uwe{Q`Yj&^Jsoh71Ew$8aBH@a#K%2+?IDeE?IZ{ z=^I+?hzKz*Qlp>K^)IRU+GnnfUWDGgpjO}!=lFZOMgXrenDptCYQL6S*e_pRB)pDZ z`#%OI+LX;Y(YN~VtC#J|u-FNzq#i0=dWoG}NNeHoFbuDLzo9 zB-y};JJGy5zktH^t1&`VlEwD_a>>B#+or?j55%YQ&izUoHwwS+hR}tifaAN1yA?0o zlH=IKyFe@8<<0@Jzmvs}=6$=`7z>pJ4mN0+7mKcOrrunh~I8GzVpmREC z_~C?derVV0Ib78e;xg#kAaK)f{hk9z2@bXQBbif;Blsi>2%bnefSR$JroNlNG%uY7A^Xo^}+IT@F~%a`8@ffCl1H|9Rl zzPVz_N}{*QwYyRx&OL!cR`QGRI!Yfm*2af6stwXthRPUv`BwO|+pxdiU$!6YAdFg;E>rPDn*Q0v0}@N^QJ63!Fw3 zkwz|Zu*3Mrs{YNB`b;=E#Ufhr_K*9Ls4=X+0kv8J>*-x={-dZY>T4UnmOew9PFyeA z2E^SMj0~pU#_|dFjc_Wa0?-HT!iyLNk}#V=D_yWyZ2R`d0Cw=AfFk3^7ol=MlWq%X z7uLNNnd%3g-*{>GWWJxo2`lDcQPos~7y#>k_Eyo-VhwSQ+XgSs@ogzdngOVhgWHGZ zb=K2*+%d%N70>7sX&=BfxyjsN_fkn^kRWhc3!S$#1o&2}8{ioMg;!AA{XN$&JGq5l zfQP`&-X!{N=#$EIxHLv>Z|LeAiN0n%@tuEdBT?0T2z?T>Xs;WtTN^`hea*xRndxE5 zY(sWpy2!-v7bP*^-c;fWM7KpG(2xQsHUy};*P57RTdo=(0b2pSZnHd@AS1_|G$#D7 zHgI(~_l*or%&6#`7+*(k0&obbWU2V}*&~&iyc?-6Wi92@iHvJ=*V^*#oY*XFC!P+~ zxeFvQvEnb>s#DhJwcZ99@#LE)WId0~R}0S%E$(_+^=oR_i?F}#v)|I@z0bz?zV(d(Nl+A*YON33lCk7hx_`7^h+K|7FqwUUlXbqtYT4^xf4Rk%e27XlG4u@ zhwS8Ul@L`>T~TFHD`QCC*QXO&b7W&-F~F}fX4oJ%Ifp!~lJXcSO+Bp#ME?1-Qv6H6 z@mv=qX3vT`o`q9K#+)AX)YZ3@(LH#(txd-|(L%G9?&7ctQRIl1Ja37#W4<7|%SZ|a ztHfl}Ih3;)UnHTih2+w~0vC(~kNdu?-!8^1QaZI~dr1RS%lqMB@>Y-mw|dx8QJJH< zXt6z7YrRs7NQpIGf#W+E7uPC*@<=`e&~4yTbEOOb7Aw;-s9qU7rlqP$)n02Wl-BAr z#9tBNO&?!g-zmeX;rgZ0H&E5Gra+w~T&G{5;^+l|BO5Uubw!H3(GJ1-(RQMvT(4ko zL=VCDdalg4+koLJgI%I#ZX3A1~l3&G>ZM@Z|PQy+clk38$p6&zBNj;W<_e z_w$fuFMT6c15-Tn;;(VW?)mXqDVmI?K}ZSca~ zdD=J5c)FaC+OiVrBItzn2O3(CIn09~_kGs#k%hRG{Tbzj*=yEJr0a9y6vz#1*fjR< zi~I{xqqsKlu}1hX@b?lc;(qcl&uL*vSpl!rYbAY)c_V~2l9i_@#+p1QZfRyRY7OV8MMVJ=OcJxAUrSH1*i818zX;4tD3c z7{!uHrUk%RenMrto+nQ~skJEUeTiIvCxwu!zmf%ieak1cX+*$e4oXq&<v~^ykR_coU?5a+F-=%Y!KllIvv5=vBe)pi z_gjf91iAgPk2QZMAI(!#G7lsUh6dH77MrI00P0Y-)I3l6#2?yrYf&6!U2x{oh*pAu zh*_nxNW=r)d80UXVe$+Ad5qGsHW*l-6PxsK#1$J8&dq3b^1C7OXuvc!R^eCw)Wkht z%4xQOpM>~(3RB0&HhJPnqSUDZfWtReia8c(x8R!%E#^S)(}h&1P3T{Y80W*byeevU zYzb5zq!9`NPFgnvOqE4K0HDsw}FYsQTt(XoXi(%v*;&hDqEDrAAZYBl`^wHtu32j9FO zqWGxh(2vDrz3MpI4cFo*#z3;dl+@2I8}}>_#qu_WC)E`%w4NK^0tM9Ae(V;0dMvEy zy1K2eBJuQHZFdK{7Lzh>VopOm(ijY#0D>=sbM!!G4o+Sd!&raFu`X(g&mRd%C(K#j zHV_*A*US2yBrInbW}i7p#$1v^tCUt^Y~LSE(Iu6<45Xw;w8OmUQ&6ONt0cupn4`b( zIRDvMq8(4NV>Zb3vSDBf4PCl3%`|~K&A>Vmuvu}fd*6(XjV zJ|q*s>X@@D^`#tO^)dH5ccb9ZJq{hqZ3rYWaS^bO-6i?3>gn13^?GSnAaEFdVK}Hw zr4fW8&$!)UHMv?SQyD3AS*W}Ze7Z1s&1?6iRWVwH(@fB;8N1{}^P!&NLa<3~0a;IX zt{c{VVLtz@!Pum71AOErNn9>Klg+)D&s3Oj7ctsv-4oBi0|#85xTzq!F&>9ae@{c% z@TyG>?z6a(SP#qmbNz9(rPsT#z~w4nAs3S?3a5NgNH?kU;G3j00h}KPKE`j80;k+$ zILnzpBx8wKpDWznVAfBDe~(B`4qQ zGyxZv1W-PovOXqGrCXoetpnFElY5>rAJS8BYfO~YCi25U>IHbx03o}E$rO^;kmiFf zDb#aGQH+Li0ivO7Id8=9ffZnmb5U-wpeOz+W8_Pr0;#Jrwb8Q>UNE#w^91cdK@hmV8=4uytcni@#qG6#)hN z;J>iKDcpm7E~-9nd2N7Yf=tAcPrsgT^xCj4my!0a;?iPjcFKEUwG_d>QWy(;tNZ7y z;mNio3YO!_Bk$dM`4!{C3OO@OosA(7-sR^{^T#*v>H&Gy%j+&TvLJRHe@FoG4J|SuM~< zuS0~EP!9@=s=^s!V?Z{BeIkR1I<}5jTquef34%yR(uELUnB4Id!dUBa&|)5`1|$*r zM)XkBgIq$lDW`WOdqchyl?@&o|N zy2VU`wu7Ux!S5fkX!9mIwT|ON#ebTN5A#e7>RAg~jr^BZg^06z(+ zjDNv!UdNvEcG_h(u(B%A183%wk6m zqj5!&=QT2XA0*giRUjS*g!l)aD)g)Ma&~DGaXMVSx zFD@Yi*rTS>=h;tA>3YHxQ?2rSUDE5GJoCj;Jv-KZz04Z$3@3H(DWkPjVjK{!*`qFD zG67H%=82FDhCxIUjC;8K{&{C^!~AzS{?K$)GEn*m{0gScgyYEbQny)`{un}7fz-U7KgBL$1}L5x_yu&_LP2r7#h%3jF?vJg( za$$lNu~$LNpKvHo=lZ?B%+yp#zi(d3Fc{oIO>elCfr%(+S=QhqH)t_csQ1OeB-VB9 zoR~(7ZW;pYVKbmOLJoYe&gGoTT}H(&{ZzB?8uc=*nne#p-r1i{Y2PlHTW zIt67#*a=fwuN9}6Bzr_A7;7+c;zPp566M4koS%btsJKIo#MjD3UCBo3oSrQj$?kD~ zh2>E zI}K55ZYJ`2Ttm3HR$LK3dp0kM0M<)i!rZAytlSR-+;ROrlbOX!y-O&X+ai6~$$T}1 z6cOHKJ|`i(N5=9GDd4R+_rV#GebLwCMPAxvPi48faV_7{CO6;KGY3evd=I{HqeC{2 zdE=PRsRGq2QK2i&Gf^#SWi$@={W4T)1o-)0J1DJt zdQg2c-0ws+V_}wfig34UXUEA*G6GnpvgN{1SS|_L*6g!GPWiYIVgjLAo#~7!Rq|89 zpo@LHw>Ey-nhbSH8lXcwdE2)CkZALG_bAp;KDPjGBgs^ZLVHU?O}~)7cknCyp%vlG zwSQZD+}br*?xT-eaU#^T$&JWOI558DUZpq8b58@OtWMrY=U_K|l6DY$wPne%ClX3o z#re&{+Yb3Rb^UuO&%!sR%0}df-ZpQ|xJXKt!`pb@LDv`yp;Xth+1UjD^77rtkHmh% z=|%{3czow9q}8e2;RIG_%dPyAh9WPKz&ih4l!bQe#~H76el$Jh2}!(ykB%$zb5m~U zE^yiS{X4{j(I4*G?7mPNAbc*6?Vkf%)7C9ca_T~1{^5o2Yn%nR*N3#;QAk`cClpp3 z?>al0;}=%)O?ByD4!*RGF>>Dh8fMMi!aHqsu%kLH%uAYhTmZ_Gv6x7h@DO#FfmPTi zvD!WR(sf=^CozeocOZCnu=JO~4^z8kUq5$U&r$O-p4>ds)_xCep8mB>4h94E*K$^^ zwq&PhZEz96S9_Dd*O>cOx2|{gvW_w(ZC1mUkAOni`DPqm5TQ?vB7nkCO%Ol+?5vCW znM*usNe-+;PBsR4MPSsN6f4t)g(9l7ide?iL}TtIghMIW{q2__xfx2K&_Gr}wCg@% zwV{fYqlISOQKe1|5*h$4z7|$gKcrSbNWvvjMfq2=b^hFh;=P|;5!||^V4_y9FTPx7ch~g z{;kJt@RYG0$A!D(*F)VU4F!0|t?a3v^YqADnlS8|w=aWU15Kc}g~f!J18W?0CWL%-g+g`zKc|6L51X zv7VHc;3!9p%uea5I$aznH2uq0gxbTMwquCuz7ZA{j2f(&@=Zrz;|C7(UvV`3>{kCY z*$sxsz$29iPAE`^^D}26WTY&*QS3(@W(zCv1p8m5a;~AiM#hcEHRcerK{mc+EA~3IV=LExKLxz%~d5kbgK{wYLZ@-thQcN zqM?4?0=F?h9f(#NsA7;})CqBM4fBbaTxsd0Jy`a#klSec0msZL>Ymr_YN@30GcraQ z4sro79Giw}q7^Q!+N}j{2gP536~byaxg!QT&j(4CRJ#;Jh|UaV=r=Jccc9dXjXH~7g&?~RywjuwhSMK zNIuS-d@(Mx>93Pmyn76B%m}qBlVDwyKnq~FH=U1u%h#$Y0?$H7 z-tm#y1MrpDOGE*Dr3~-*A*oMcH15>A#EPIhl%mEho5Fq08o1Fdr#aB@ZLm*K&&ZUL zH#bw{WhmDweWqUbF1u$Azuz4Ed)MGNA>)b#+b*?h=Ek87$NCC@VEMsM!N>LVBuy`M zkFTI+;i&H6^@6C%(-{9}Hs5)IY6)ht1NyAZ@8N|q!SJMo+_@^#FZrhH|9;xq-QQ|o zB1HK@7A^dS8g_gGk8kmJ)b&^$P$w+9ntLM%Y?9|&8=p`ePFAD!n%C4z0t)nm`=a)~ z4n5FP4(sjKIFLiuyU$qh@84P$%KioHw|+QWAlwcNvqcI~I)O;=uxR75jR&2t4{^%7 zfHt{tE_WAMxg~s`FIAM4VEH7lvNWs@YDQeupZMZXI5`DIzpRY~R(i{gf>+sA3jIy8 zJUTV%lEFNK8Eb&K?uv8Qx04ZBml2Lfd14M7C#-dwsJSCz%sUdGeJzAO4=laHLH^vv zVf_|2pu;CHd*EMPKLcLn601aZlfgVRPu5b9 z?mfr!D|fm1)YspwupB;lvSh-!7_pnDr3P4|`gMpkf&WTWOc&dj?yN{iG94Hy3|*FbY7u)x0`GwHpP%WveG5X82TzBpr@_xu#<=0 zYf&Y3<{9c%Td3s<(op~jyDZ#UhFS!!Z&UC7c1P+R_@QURM4Nx5J+mhFDQ@kRMU?(gA#MZ(7AfuVyw#qujFPtmU zoQ^1+fKQ-77w5EcF0;E-FmVXDr4)han<4^6>Y|7P_It(H)Lf%+@Yx0Qis?m zKug|Vl~hQ=o|Nt^SJDXDAx$Gzxs$C7v_J^CVLCgg5ULgvp<3v!a0EKlcv*1x{6h@u ztCIACW(${SKLjE>s zSrjG%c~Hg#t0rrH8-R`oFZt#?L1mx`L$3|{8d{SguQx1{($kC#bSJXCY^35Hd<-L3 zmn`X~JGNs|Y1EZW#ztp`U{%rBUcq@fQBB;BXUd}tQoLJmuP%vMYgPtcuj%g7y-=F0{ z4YkYV?2^`c;o9WA>Z5c*kHa1yrW%zY9_aUSR^^WA>qQuLnItwhG!r-25$Fy9P3k&L zt0+0g5ZJXRd$Py@#e}nz!_kaLe4R9}YN75{N}@dyJnBDWd~B7hLtx5Fa-QFbh-K$J z7_mN*n}J+ht0>y`jv)2_?Qk^X0LL3hy8$>#%g|dydx~T97~$7J3KK4R?e#oNV4)6w zN}x&N;fbMe=9_XGx+{WBT#TFs^RE}s)jO;~ehALHiiGF56{}R2+A;>xPS5aeU`7J{ z5BxTouUiUMi00_8y1WOc+NHmV92SXoy*$~wA0QUZMx>ySjW-3~cb7)w^%oT%xnOGK zIeQiwBx7Ygve1LLG{=A{H|ZZL01h5NiptQjel=nZV@}Pr&5pVx-hf03nwp~cJ)axN zj{W9HskAM{Rl78E7V8qk&zT?<#iCj$9eE_V_CKgrSNQOy%1!`4Z$2cs=1NAdvnMQ9 z_s`HUgW#;BCO6!P4(K0qWI^!EASU8y~*5=jqt;q*0!3UmV`q zajC_3{iWozSX1TaP)J3~MBTUEN5{J`PzE^VDQKt7mdr~wQgMCw3T*|c-LV;gC`mei z9p~QQ)gKLr)YCt%FHZ&Timcs<(%oO0v*(QV0$N`Y%q|tiXru4ISuvS_=p~I08ne?p6wN|}J^*2iZANVsGoYpy&p}K74;mj$j;CD= z6Qv+q#rWtQe-)wikL%B-^czckQ zs{?(T`~!JNWoAu5vJ)v18Rrm2+WpGiqVj1H#ME!yybfz%on6Le5B|=ZE0j~c+d9I; ziZu-)>k>g(U=xDr7(Am28`wO+RNsj+1s*Y9VKlk;a#Vsn(Bc#jyW{S*q z6>DR$iA-*)X;s#hArvNv(7U7J*8f=a;j#KcB!R5;}xGtMpX4TN%DNNnEBs zCkIyWd?ri?z`uW&<*pQ~%L8L&n8zjz*fGyPD9FOV;Q7?on6t@D5>|UAZ4j<8PKfR? z*jsMp#2c!=#%ofRot@>JQEqO%JC3%{*W@kIR>L-Us{Ws+ewfyK(`u(W z!oFvP)OJuy)lZ1vW;Xe3za?`-o1~D7xZT*W)cv=S!9+S?#e$6TXogkyI=l?;3$vK@C#}O2zgbpVA-M&-UFyNz znMUG{K1(Nj58vDAcW;@^Wmtk&3IS2aROWl!$>`IL@XYw5bo3fR0;sU0=O;*eZ`qf= z+CDw^4>mFoQ9ozd+NPQaH%?jp659FE8Z~=i*8{7tw%LBPMo1koS{G#4l`z1x zvsXrD4L)@>*4q3(y6@;M>(UKkZ+^yi=P)4eQAvpw%-U-)olEkY`E|ae)3~x`6h{H7 zlMhycmya}Or*jIu#x(4wZA^D1C~x63IdV7LuS4{m`sM_;mPEZ+z0VHe=eipZJvXI-3ou zTQp#K4~p9q8@SAX|CR2uncw*nK<-7dCCYQ=1-YQSI5rmJ^uh&XiMa9~pmXV*s{Q07 z6vYygWI6!FgXcXGbKU+OGfZ@u&&~=xl;^8fd=bhD2DX4Hq`0I_G zzijE_9{&K=Zv_!2%?dE9joU$d4KQ+zUMdGz}CQjv#jgv z8F~n$U&zQ_;pu4f;RuS)Ei>`KL~?V1LK0Wde+|Wice{WbNevAWIzWLbiH)|0N`1CO z`Jv&2P(8fJvg3x4fA_9$FFcqys?{V)o~WWb6mxD1onfe?G4J;}3g;i`Zdimy57ilP z&0M>ZXZOVP#gjzXY~X40f9S&twn7^yAkn7kkW1zCa$X+xf{~9h0o>n);js^Hl)%|r z9*9h~tBaODt!lRrlh(R#;l7!`S~P=i!7z@I@{Gz;tRbK0O2E}PW1#c9JEZRJD%kWV zt-pNOY=2VjZu+fgItM&|F^30bB)r|Y#)z&=zsbzmHHW4zwa$N-dBb!UzULPAypcps z#)pP2PJYa_cX^r3pk?#T3%G_4sQxI6!&3u!V{CVmrMdr)VcLLb>Z;(?f)ok1h&PjC zAmPre=S?KctDN&xku%14?nt9BXM)87H~y zicvf?qm0atLv&^QRTG$MUY^~sT=`R4)}dW`(&3TCoQ1xux-irr##2;Oo+~5LV{pOj zFOd%Stso7yyEQVs>jPI}j9xND43IAr-}v2uqMtHfhtrl5jFH*=im3!rw+LZxPFIRB zVNM``w#mnk6TRua}MjZcK{dT`gtdve~Zym!x?ObQVsc9uT?si@`!;(?J zF%GZ&u{Ruz-C+VPu- z%=cW|j&8%oX37|k*O78*UZS@ZJu0sz&nd;^ZS&&84L+s7ri}vNsFyUZX6m@RK&*9n z`1_6jQ+Q#{4bCr8&6X+*(xYbO5CYYB4^%93w06**sN7B;9W9v>W*T6UsdX{6MI4X` zjwK5dH|JW@9b~c6&}HPwY19X%BaaKX4Ede|=TR6ToI}M$^n$Ssj0GzpMwP?*8!fDh zdb%>W+O0wEJ)r>v-%oQF%d_J^9BtMhWL;~XZvp4f<5(oPZ-pU|f zd2Rw=H4q*W$R>X{e|?v$R!AUV={UNG0Ls;31OWGfKnX;Z=~@sNCrW^gd>r3$>_Uo zkmAi{us0C?CZk40(zQ;R+05j_?_QN7N+B24t`FMX9?+#s+ni#f+Olaf5J2IhjEDz3)DwlxS(V{tl zeUN0Cm1Yi4Zt;>@XovuM_0K3AYj%(Z93gxZ`+GImuyz@Xp8Pn{nnwD_?1i*2dT(u3 zq@0uXC5$i7pH}qt%}A}OiVVBUz*O}1;*z&;1QEoEW%MVGN^p5a`8|aCLOf0Oj~lT3 zip>oI%OLCH=QeG&#FE=gE7ohWbHZ6kK`zYJ03rM04zVx5k91XM>4XyDiqa|F-rTqG zn9%jYpAO@RD#Ho>@Q|ko|5PHVR^`t&gKU|JpB3!IV8esg#OaTJ7s}!6l@6j4Gq~nv z`%g&v?@r$o+~$0uC*^o?KQ=Ber3yD!w9=m%ZyT=1c`^Gd72ao!i&s->x#pAGtq?Hm zs9^`L{iVc$eBhp4Qcck8hU$HJw`2@~r7lh(>*dWk+NE5#Au!4PIdGPbW^QU0#i`L* z)uR$sBHrEKf(o3Y9DUDK5g>A$Ih>NWDAP-Hjgc6N_nvx>_jCjLB$gQDBy4zNg9a3B zq!Dg$#<9XM^99KFBx;A(XkcsywY(zjEA)0$A?j6rHI=pQM{`On5qWw(W|e4`b9jG5 zG)C1kZQ))137IhR+b8A-E#mp&mo{gwE1j&H)v4H%hsM=@d2{pUVbGe-7b%$A=B6sIqib*un}{LZn|A$^?rHsDU9!cUy@%2NM;#v<%G=tSdM7mI{Q&{~te@-e*%i zZI*;ixMMfqpcno0-!krEJnP#e^hWGrzi~t_^Gs0|I-2udDz|qKj&ZBL6-=CohTGk@ z4H-Z>(p0c8(!5Kp#@u9@n+_3YMCq6SELLP3TreMrX~zeJ9t9jinDFtB(@JGzYCP~A z$_F!RT!=Y>J&>v84iXwI1OpfVKl|i@3TPE6Eo9I0rKbUgTE1>bdcVkaFsat2vvuG_ z*-u8Y(Esg}ViYxKfG*>yhh#unL9JY+U5?WGKKgPj6#G=P(tzj4bW4N-%RI`!IQMDb zI_NU8978wS)78r}T4Y0sx+k@RW6WH)@U>kBqC)giLKA=JNbv65dX^*BB6;hc@+Na-eEP-Z-MtptJI=LpoH1 zv(*o=d>%Ex$T)tRarz1Yqk3ThOGiySVd5b$ALne{itW^=mF?&0654w4CS1=mzacfP zEwAI^27&Qm`K(QIEpKvc=Iq=i@j z7G(D~O4U3|OCxP?f?B$4(O{Q zbTXee?0F41?ndbA2gw|yzgOS7U=b}k!E5Zx(6!47gTS8qs~?y<30Ou#Q*^WRYe~fh ztmhKa5qyZVSkqDMj{07O&X5IacH|?8L15w(){%tU=tr;~<-aVp%dSqCEOITT>b8fn zyr>|MGe$(1io)Yil0(3-#%eO`OFasYJbEtMwN$@HrAjvLO#+}NiX=}-9G9HbSR~!> z$Ez^2f@Adfy#5P$3Y=2V%|mFi(Q9~!jWu=)EFZn9&9%39ax=m3E9r@@=zjv%#Z@Z9 zbRD^5AGZ6Z#*goPJ`V6p!M}dSD2AtDwX|w_abDklzvvjuHc~hOt9YuV9?_HzYB#>V z!%wo|Wl-8*$&fSFB%irhmTC5q^DmSe8<(h&dy4Is!Ir+##$~#I;(_~j2DmdbED?Z2 z9U#ZA9fE;$TChg@xAm?2%gfi*A+_GN2VhS594@64Isoy0acn z|HY@H&kg`=*m@}Ke=m9qem=S=%~jyozBxGYi(uB;LMJY}JQ#sE%)Bx`YLI$x<|npE zd(?!XLAq4j?wwF-)Sfng>zsWreX;^xKd8vg)oHD^ssi!!np7NgILr)LUQ%e-R2*P@ErXtTRH=Lzx}_ z8myieopjq*fD0!d^Bkb&I|JZdg}}AD@T<$3ULhMao2zh-bx2QQrZ(0$@X;ba4Wm%IG$DP&5hjKQZ+ zWFajbOy7Q;MW+3vI(8+qq+mHn{a}vp^MA6?*g*V&Ci4HkPBg+lhFLD^W;0++#zLxf z$+-%boUN0hdm?BS`B2eTc_m+&%>PnsFH|}dr4`;o7Cc$hXkJ5=rtJ*ym=_%aGvLL{ z#5JI89(Dk;N{+#`CmJMV(kWS7A4ex~As&SZw`hCTX{-luFThK~G8#puspv96ssL(!ef@U~zB%lK%Ym=KM~@8V$&mRaNz*UtAvPBHlHpC-~n= zP}(wnv(N@vq__YhU7^Q!WIU}1{iXE3y58y)S}X6QXagU6DqOO&zMj0_S6?VQK95}>t=xsB1^Xx|XaC3=G}6<^ zrCOPK8yvz_R{guwr@{#4a6z<)#@Aruw5Jn!LX1{jFvWve*HosPN!tKF9EyIpXuckI zRHhxtMvL+JD8yaMvSI0F`nuBS78$aLTsX4bucQT=+QEb@74`ksP>IZYt#k=7%UOQI zk;ULmI1gT`Y98B?sV0lH$P_sG9JpM9TLvMk|9~8NU`=`0{#t6VuxL6F+HOUZsAhK+ zJGGb4WMPCE)37(e`u7L?GMvJXeJaOMG5DNgiI&eQ7l3 zRnIly=~J2At6Zhe?h)X^Q<|l(l~9)M*rtvpJ_Xt%paNf(umAbmsur~HEpplo)UfI2 z2)(bN-|PN~YB)CI|J-?Z3s=}W1EXr9?2x36QuY$zSU%!bf;%<8CUin$)zV!w?c=v~ z?q)rO88fnhP(3z~9nv!5&Q$v@_6Nw1Ht^i0aNfdO;A~odo zw^aO68MzoNj@?Dc!JRk4I$zS{ZD;L29462|qkQbYpwD1<)3jO9?vva*dR5;0K_nQ` zDxAJ%f*7E-h!tLuLImp|oo?0gmm6MxSjW$iHC7-L2^~)NP$6OiNET)&%Dkwp22wL$ zD~a{}|F{ntAg{uJbEOGeeO==X)|c~vITDKbOoS@)ai5>X^s83O-^$A28F=t@94yU7 z;>as(2ow!pe0BUF5P2MPKf0ZyA1@KMVKQA6ndue$gn?9_zX+w~ply;?RMYD3zpAL;8cl9(Sm{d+q?7c9R?di9j z76?jmEC&5)!;JFgCOVz5NO6I+r2x9u8((jVSO*8?e;6ybF)B+AM3AyYb_>(DUv7sP zWHh+e$X=D~&ZPuX4HqQ!aT7~C-=HNUu<_TIQjK)8KYjcXh$r{jWU;ao zeyY#^B_e2`5pcpuzO_HC9x-T9E&35O=#efVTu3XDB`3f7d}^D8ia#SQUaeaH1|cTv zMRU*n8Frvo72(1c6QeL(iFe5P#p?LG31Sq)Du9NC;H)D~XvgN5?}+%eqDsu(`Ryf1 z_!yd7{Q#S!tJbfXn6|jFoAB$SQ72J|^UVT-Rl~1fql+iMS)5{o;(k0_^+jWcxxkq8 z(rEFfv%`ciEe~mJlOg8czR#qhh^E@8)7C?*f@->f!Fb+s2OMOOl7YN-@Ty8Cur@OI32;!&R-q@C~tRulO832Q^WD zhMfO`hIDTj;aC|K8azE9?3vh#B9ycI(1uasABmmf7x^u0!m`e&4Ennb zK{zl9%hmR0rh^1Qz!IqKCM9>-Q+vfFW#L9odw>X=P@{_%8#W(lV~J0hx~j@APQRIN z9j{n;xg1^!71KIwu=l~~`hGByfn7~Mt^Ff)=a|9F(E|DlVYE*l@p{a5l;*~Coc1)JHpUAf7fzZD55T!F&({`3Qq+|}r2IB|!km0wXe!4VBSqv~#$#vRs0t>j}&Bw94j+}>#! zRF=YwZn2WQ>Cgy6#kh`m)w=Xfi#tr*v5#39Vi`w+@(48NIBDi1VFGeSB*Z6ce9C~6 zw<#QcTyJt*v<|(4X^YD>+Xm+YHlz_6BZVTQV{oXgycDwZhKr;&ln*b4z(GUNV1NwD zcNc0oMI`SSh&;-#k0yK+f1W*$^;rXhA7)DXKa&l+dL>{8(Jj1)3U_f3aW z--kdDIqBTT4^cGHYRP9lk`t8uEgEOI198O6vhSzXHADwh16IT&b(1{4kY^k)P620& zY-f6m|I{Ht>iItXHe5tsTJhF4_1>hiCDSi+BGNvU(Klv z$_;y}2%_^??o!j+a&m=F;18wmK`{{^PeB_e6FtELzk~f5*W_y=7 zm49O}ayTm(Vo%t-)J@rwVs}?B-k(4QmMFzim50Vh4uL|*rY+n;Ay>aWU|VU<#>DKr z^jJ`3IEiPZziMC8f>O~-e_c?pE&hRpBtRi{FmeVV8&3^X&mX>jdV~wxM>&Y0>e;Lc z>A)X+di$|2zI}q5w({L;(PPz-c8gxMN!T%RI^MrYmL>`sM#@D2)yBzyOe`E3|82J| z=U?6Vypu0N2DJIz6n4bsBSlkBrwX|WAycd5{m3YfCL`P@#lGn~hhR0@ccf4|_i0EQ zI8>V(CM{Px^#e_mes`d$eZ;&17_uy;b6y4FTGPp^ayezYL!sNcjcRGxmN}$LT3`t^ z(B6Gb>J=Sd679_i0h(?u+&Imxw@7_>`!i1DK${^fylDjioa*x$UH3bbu()zbN0M?t zv~?=7>cCq;?sBx@>=`VzxH!=;q7+2nGxAju8xRgM}E=e*NO40#a9^9$^eR zedhv&Mc8*|C|Cy#C8e`^tAo#wZoG62r|@;b zWi&M<#N@o@RDTsUp4NDXkt4NzG%C_zrO>LWB9X+sfB67{16UZAaPivAn_ndURO{wO z3|jyP`i#WBzW+I6nk&dIHzt92)~2tdF=61JXKBvG2B}K=2Oyw>eI>{&8laa*i?aIQ z*_O=?rUbC-2>j0XWknuHEcf{0)KzjGSu(78U9kZpyf0 zF`cloH@L$6pS0WrJ-<8ET9FahQl2*p4}bh-@>jJ=KZb1Bn*g9A5cfkGe|Gd04cuzo z4iEf+b)o$rDK6dPp?2Ploy9%5a;wZSe<_O3LyP(`s(4~YBX@@%?-cV&q}BW&%5@>>S;teeKX;V8vk#Ni4oWXcol&V$;VoYA4y@Xj4Yma34k zoZ3xRZ&YRoCm)?P-$#_sb5E_A>5c(<$6Y$%NS+nmhk-ho|8*CNl2rs>6(R~&dj8ms zA4ps0$xo$R_wJJjztArGeD-IZL~GNTG&=oY$%OakC#ed$@Rq;=gg?W)r?mV&? z#)#%`2hP*ZFnAez$V~c@a5(Ioa00vzCMxf!H7Y3zc%sb$DG2dG3d^s~);8ZZj4}Sk zMPx!N+5aI4`B=WpWiTON6LoerL4ZgJ$fiw|OyyN9?Ki$rlOAfYyOBHDmta4GJY0%GKmu4z!xy@EqH&Kw z>~)}9$Ynk2sGOM3E3J!SL6$pe>mXc@7);+DBq1%!nvZZ}y41L%w2~dKbvSgCIOXh- z^dHpD)qcO=H7FeyG>A*$*1yGh{ZN_QYC-m)v!E~u66Ps*mmoC>>u#MaDWO}EDtG38oQqJ#jIVs7#6D+B>wp_~6#z5V(KA!LM2idHK*|>w9rErl!e)o#)Muc=2hqBqn1U*Eu z35%*87oK3J59=SDLIwclC}(FK z5#DvrN@3lB7ZX<1%EStfFHoB8D$>@1{Wjg z?Ern~l9Zg8&%to+9#}uHDgRuD1nweicjKFs`=w0w8JJ~%)-2G0$O2E)=#?9iU{6s% zHKecPv&AQ>3WmkuUs0MG2tG`I5nUX~zq*z@VSh2YMHi)V2!Y<+^MATe-!{qcaZQg1qPTGv(Wx0|HsE1r&BOK}D)ZTmCQ2!8 zQhQC<>^~1f3cWl(et-d(vcYg``h>Q8p_>xYqiUd%Onj=+i$*axW2!mK+9Y6^8s~?$ zpCC|IjTps{eHQ(7m#TXg>cD_b-R^E49;N1%)ZKsz03xB_;_*X+bxv7-FWTQl87r88 zpwO|*Mnj*>7XXVszkx1fWzLpH-P2HlcAg8-1l;xyUd}E)(vOD09EFY*?OA2>TW3Nv zCxhLavWYI+HHOq~D)BLl#9+1Uw&moZU@8xgafqjdeDOUQIZWZ@}|@1@yhk1^IY+%X8(| z2!f7L83AmCRF-5YWi2qqj6vX#q&p>IU_NU#I^b61w0e9VvQGdnXS>GE>D(5Jul-&L^^mW{5 ziB^NGnCA4O&XJ3nor0i^-Oa&=6)3=qIZuitr7bpHcn;W=@J#J?gt;O>4z&*VQEKM~ zt*RlZz}EsHOZ{L;)rbS!8!V@^gB=o?lWHAO@;rx{6yVq=LOYe03Bn=7C7C99HEZM? zr2j@G%h`rop!~2UM$i^TCOdy(K-vOHwFCq=zId7J-a8^EsL>7#0sr-?HSA%9INqvV zl4-ch>@!cTfQEgV`6%*{>^2Obn^yd6R+op}jyz`WK)(EsTf%Y+R@dPM(sf!%6aaOK zTb0e~b-p^b3|{hhK3nM6=_(a*+@~D|Ll<8!C3yLI4l|*JQ$$iXi%4;7);cd8LbZ7b z#(jEzaP?zhX41c#(>?v8+!4D$gBc-442sgL9=`97aEjl_yyTpYR&u08thTEH*wwPQ zaq>QO-^Ww+ybMv|!HXNXVhbtFCdojNaN|((_JaJJ1*TF#^fjcH3DB*(`*SWRXSqnZ zM(fW$A92t-Pfo-j<>2%td{ZF(avC}IL3pi}V(;Sc$woz-U$`SSVrTZEmkCObrCvq3 z4RwG)o7lmPWVa7|pZ3VM!=nOYBD602QMro3!D;OU(5~G^X{r%G!4Y0as_Z)w3cx4r z#%j<^>M)woZ8V^J4?5vKvbF!kIAR%wE!VZy*2vQC1iPb2EJG6BEeUXu2 z{-JjY2QE;esA7SvR?ee_5KexP<_xi1EU#Q{P0%^FY0N-NSLL5GjEU?ceTbA1hj z>@4olke2-V9yEdaedV=TS?UjdMK7JA4EFkxFa{V)U=nk4VYbi$wH%~7(ha5?U3&O| z1l7;H0AM~^FFyT?6-mgkIWs=U}rCr{+GbSjhcH6bvX3}yJRSQUHh?Ql1I;%Pj z5QSpbD59Y(FZW%*-3eF;et=W4p%C7mwRg~Bpz52lF*TDD$`rM=#5HK%CF9%v<8$cW z0+5WyxLISSBwp7I(hjf6jLZ#q%ivA^Ql*qmq?9C$fu?B8$BHKco|aoW7*P-Z>~mBN zq?<}X0*1c!g>C!DjmB^2@-ao^s{-KRp}!>bgEFuR>oS)WyZ1h_nP`MZM0+MmucH)L zElK6`8S&2^kLcmJ3%{%LB=AP^EUO$|OQ^at$8fAlkR0v3qB z2gHTDft+wP#BQ#Rtea--bFTlTAmy7sZBs`!h{`aKlfFTH@RdOq-$>Cn!yhY-i`E^U z3&NjV@N^|B-1LzwvS*MA?0Jn!SMp^v?G@29qfrv)ep<6O*Ey-eP-3G9a%;b3n~%o&3AkI!Z2@=ag15?L)z<=xDQQwTV;vvj!nBv53keEC3<18OtIbzP zegd1OY?2GeF!P=$c~ek8h*QCKvZl1IV~IsDlVKW|+fJ7eG2v5ZD3O1rCU;I^Ar)@)AOPZt_GtWt?8ti;z##e;*vs_9UZvrf`%4%%ddVO%xu?%Yurt>U~(IHa7Zoz`GaO z$B0d)nrGZFS^NsPW>g(KWJ;M{pK|q8f9v#fl9BQ#>71VSs|$(m+~YB&>25hy8=*QW z!@9^_ZW!xwa7W*nI-q^uQtOmaN`pEZ-c*HE4S;cA;!q|UZ8d4k=(N4zInS=lI%%P= z=d)ryT;xRm;+Xf6`7>nHr5-3@>WuT|hr3cb-vbLlWOs?*mEZJYB8xDqOHOVPC!sE) z=Lk27Xxa&<{D)$3=R0f@a<4U%*>zWL`9rn?#GD&HQB43t{l4h(krU#VDb$d&V0^d} z#Mh+{Sv8Yq56yY&^-V*_u?}9rWGHvvxe)W$NdHHn(oa1MTIezo9(;%7$Me7zuP2U= zJ}`6s;=5t#N&mHhEWl_4qVse6d~dm1@)Y;i3U~?h?GUqjf4`aj9Fqe8h0Yg_VSr80 zQXq^+M8i=ey1uX%Ooq=A37sqhE78>W|7#ynFM#(r`(w{&6fT62!qcIkz_xk{qK~9U zhgPr_#iYzVt*Gp&Zwz5uQ|p1;NGCNv`HWrLfAMj+zkl)5$~f!Ke&=fL2k;+S3-a+9 z4-T1;`OEb7J_1zEXuWbocp*$|AsR@nU#8;wVVzJ7u#tBkmpA4%LyW;yEs>TogsJvS z`&ix-=r`sisb1+}fzlg=!7%E^XGQuI#;j0One;7wBpt_}1R$PVac?`Ze8YnAGzBnN6j8sxG8 zjlP(d9X}ix*wuX1>lc)vezjL7;Z@ehE zgfXRBL*J|8G;H49C05~BfzaJn`Y#Eq+Z-YW?$~f{yDvEmykwPihzfHv_30V)FQa?3 zZ9A+5S)a~_X)_M@q6y%nFO)UAU-OAqtQ7a7%hI3;HR_Y>1Bn1{NMYJ2qw2np&&~dX zf?C##tA|B=eSZFLLKf{5j6f+09dn5O&8Zi*u~Ox}lL83L$9LCR39UcsQl)IIe&k2LoC&yauh5oWc^$@eH;4DcT89Man{<$$}bXOUouvLdAz6G^+aBlmA~ z*SicKX10B+82}VZLth;h+tPPwgzpT3hN`Se%p1Aq*8msIz1mHf@|o51iVz=kqp8{UZH7csAT};H2)rMKog!_TUPx^=iFP4Tqq`S=Lc;!XfW?P4{5A%STT0zgH*B*wa(Kb0XrSlppt+F->H?IisYtmTy}+jz^`aA7tr0E6^;r4C2R zH=txuu_8&XKg*7WbR@+|emjj@5y_|gcF~JUzL8VtQ%U|TP#0QZ&!YTh&6up_#Mx7X zphIBZWS@P>X%%xW_i?XCg?VI?&XWKAB%+rzVb@;iU9*$WIMmT zOt>yJ(9;aN^O)PfSIhd;@U_~N3stX4e##>!Ey2UQn1%Dc2t4^g9Z@|emAqXYz)1Za z1?9EOp7N84p8!wINE|20Ss&Eg)KYJIU@HNKHD-}XF95VqnuskKXAnN~3*~GnL_od| zTdVJl3)!*4xP6qxfN+q7y=}PUB%}ey1S`cS&A1TrDNA_WRrANMb*>06PxI>o&@+NN z8oF^GgwdXbQcq^dhLj(jKoUtQ*1>2@6p<@5sXy2G^x|i8%Kazx0aFk)TWr>>m+m zz5W9PQsQ5~#6IvV+Gt*1ytLhG>y}UkK6@9>Zk@3bA=D9@5Y%x)IY@>TaF0cpJ%RXk z8}mZtxa>`e5nkP(>X^uMv2N@##YrY&`c!ir$k~5hv^A<*=2?(o7d4kdI+^%>>9ubl z^lBiRpA#}%{?ENIq@5g;8CNLC9Z|7fmIiZ^*a8UZ!}Rv@bP|wsPEttr)^j^NXUJgp zSwU70Go=*#g^?`qpV{Pz{!%s++*x!N=&1Zgev&|fe+s>#_pNYHFp$Wgoc~aKGzmuDF zfFCC55zOr@Z4NkcyK{ZE?4X9EEaLn4Y}tCw&gVVHt#MFz)T)$m;}>+&3}s8gYplsv z9e{kQXSkw3dS&cIkH(gglrw(lS>GIpIgce|Tj(&dbiw52me0o#k>O`WyN)zH##i=bo*?-R8$0KZ2E{^rHKa2jxlhOLkwA+?gPB5xdtkmR zjy}SQ?H_>5+~No{v5fs082rHj-^i>J?~k3G!D|TOYhCnvQqYwbQjPwh z1f!&KG}p=X9Uv;bAE(jv3Y6&ipcTTx7Jjj^!=z(#7=Zhm*`kF^EDt%=zypFh*mOXQ z+x<64ruuFajyr^spyO}28j-Zutwgq^DJyeB05}Y|uf!UAYo8Et?YSL7m$r*x&T0hn3^%PhuPMWd9X>gDkqQ@ z>%9sGW=b0>|1r+^StXf($9&YQXtN*pkV+_r{SUDk{VkRK?+vpHNU7zJWD)QY26McD zM_`!AVsj0EOJ*eLlwrDcEp2RdBD;w=5Gg{$L+_Z>qqdgOLR@2H zLrm%1>`tZ9+1ngx$i*#I2z6e_o@oIpxrsRT3kqmFf;zesyx+$fM)Vqn-~+>iKug$f z|G4+Uw44w#+;Yo!`mCO4A9~;r7*h`O;epZj7$hsf2inE+Doh*|9BV%VH&=ybu~ITy zXS9;P1GQTA-Njfi+^Cvv@D>-Z#d#|_58YuHcz@DxJ5 zl!d+MTjpM6)k!h86HK2ib);37aud@NeDopZj(^HAQ?2K~*>=!;k@LBL9e+{N7}w)WqSrS#b z>kFn8~;0ILmgwP0|137dqu^wJmx%O8<22 zPG#6hazf092yA`YZExYKOxF|J&4OB7ce!|TA&$Z|e`9-%FmRNz3DS2LR-b(?$gS#6 zF2}?J?kMU<|GOMU4hbD0mDHZ}>kTo@Y?f++INF4hDiBx(P!T{AvGZHtIB5A+;Mz4j zU`BB%F6(74lq{DY}Chlns}cQoFHz8 z?F4&k5tp}xieFa|)g;#7{B?K|SwO^(?b5ed5%R^q8 zK1Gxxj*SqtKfg+nJ??1=VKGe&ICa2`0pMB8G2ctN*J2oZnq%{h+De$GTa+?PVM> zbfr?2mhl3*k&#zRGK+AU`onuH{!rLy{yF}IG;t~+ms3(&G?z+mwzBb{2$OrFsMa(J z)EfaQDPo#-KKM-^pD}*w+T5#++?c8N&pvJ_lM+*~^IrBLmj*q=Zsj`9gnUZbMHmcm z_nO7(zoTY+oCyaWrvmK@*zRt@_LfYUiGOEz1aj%wV}@8x6|>vk1ARQ8@;LI%YSC$@ zpIl1Ct*47{o&P8FRm*DXVI4Q05CKg6l`#wL7pg#!o;HD>!7c{NRo!{x7n0???o#$P zC5IDie+#^CW+?8zF7@O@SDm~R0wZDVjF-|*^?dTa!N#QZyJW#c;sf(@B|SpTT6F|M z#a9sUo{8{sl~%N`seI~p#`Y$afMjjXPG%5VrF5F#T_hZ&VXy8edL$U6RgMA8dr#-WNFT!d{eg`_WY1u9$CaMzA)c!MiGfV%j)cNhF zS>#*(#Q5)qx$ywIr(_{l?ZEi2$l&(Fxsx5+UKmdTL7V8&8IB^Fb|GlA{0UHI_2!OT zNITUoCEkp~ZNf$jz$%-P?LMr}KZZp7IOaka;m^z<|D;^U|0RD08F;>{OF<~Cqf0rBEhkM3kYZHZda&uGN}o>umv z(906>H#8Ku6FS3q;_`j23Iqd5Q#Z^Ir)_3?-rZ$Yo&oS9tK_006?s&6y>$b(UPXJ= z_hL6K`~kXWl@(c~oW?Tl@~m6_Y;kK zN`bVfIPbXYv#wUW>>ifV+6}=588|Nt$4-RgNbXj17Sty4WAaW zfxya*Rl083rthx72y>g4%#m5Uv&!jNBLfH#C^c^IauozAgP#aFbVA}OhFOP)NvC)w z?VlRTe87+8>+S2CRk^)YhB!3x?l)) zgvGZBear+&3(_;ylWzRPzwMZ5*S}xBj+{nwPNyUphGE?M+A%;>%}}wNMI>3wL5gCE z&z@~jaN@eUr$s)&wFXWlD=KQ`PTl!{_|R1>zvLK)PYUe~d^DeiH;pHS4Ehc|k-OnIUtP2Ol zY~USp^D`uBTE?WGBfwm5Gd~@-FoRF0gtx8G^Ul?-N~1Z{{!hx+D}z1Y*Jp*^(6o>98=l)|q-SI! z&^D0YX6M;b_D^<%LPwNx(Sr#0JOZygw~MAs8E|L}ikyC@Y_ti>qSMQE4Iw%NuclKD zxFU#mML?F~6KST4hSMJ({SVHI*8F)QI4SfF=fPy&zQZuqeLqoB9sF@ zi=nqO^Q(`GV-(cw2h?y&@8`>>rPnp*1bf?EOdW3(9GU|s}K;Njt14Bn`w$wTz9e}lwvS_jw3%NM9L; z4qM7Mqp(ac5t5LXWeZ5qr2?ZoGpaWsG;~{MkaH5UwPa$h0KFO{3zI91sMU$ zkdC6Ldi?0?naqq9rT}icpsOZkqnLyMcIcPvwu*0no?0Uh1RCH#IaBc6I9ZOQY;~8KcY8PK-?28ibc_XkkcS*v>>lmZ9zP# zl3GP2u4l=3YCS?tQ|pw>A0CBQ2cP2OJgeVEvhCQ!^RDb zDHEe4Y?x^RLJ%AiK%OL!w?cL@y9fXjffR*hgGDTSURU1*W9X;MgAt^mkKW}WJjX2f zc{VHEZ5#T%DE${)%pJ1AWIn5{Z-ZjmmZXKNna%j;&Yj9-dGMD4P8F^zI|{CSs$mad z4MZc18NzHIsL^0Jpj@m+lYnoF+Dv?|Sfks8@q5MV{t8C|`q}@>0k@u*Wz*#7l+A*g z-%Y-(I(lT$jVzvaO&{J`Em@~^nCLSSTxV;iIo&CDK%t}ccvq93SbbTnld0x{@8(`p06 z%*1M7qLnU|8!fcoA2*bQa<&hn#YjXqn(wm|n|5L(IgJ)>39j!gfl>g42q`6e;9O#h z^iRAcc3MA8$P79SUh`BVIYxBl2tKhZ?1N*HCU+DD=a5wDPAsT1-a-Y6CoO=4%eRMl zXZ1bV6Bvr3Up-4KBrO~@7 zM7*!%mY^=0@l{bF+!0o*FoOMIsJZLUP^EVm0oSrJ6ofDj6UAVHsfr%ZKv z*EF#Ov;(oyra1?lsuz^8)wH0V@P_)+#SXTau2ZgQp}Qf2*UFaq+$LlHX9%P8T<1?o z%b0#OwJYt@gD|EMkkR5L;#VDn1{4V<>AP}p&=sT3ASG8?PWs!Au*TlbNB!z3lUke1 zo!nQ+K1hk<^W4{ndqT)V#iblxcj;%}Bc8VMBF*REzuF1@XdQMG;`}$ZUMt@UMH62s z)V^Iag6xAjpN7$;(d%8l>Nj|4lxK9n;@Uml-g0wGKN+|=nVrDi(xO{67dENvbkv56 z3FQ`nVS-5izzlj?Nc5VyiFMFt3pPN1Tv$$lB z9-SUhBvZ7F>;TWqmjNFY^rF2KK1b+Jt%Zm|?h;At`baH__wdiam#_|ZXF|IkSi3vh z%l}^lq_}YGfCiVaK@H0QxV0+1WH}M(n7VV5*h5fFb{kxSxW5Yts{=q6B0g~IQBn4X z`rd4go{HJ;*CUu!=Pzx>QFdrnn_dGJrj~--a#hY?0|I`>V5hRtX#tjrm_6^kz9UJ9 z9*{CIgQNje%SEEgZXS-Q?;FY1 zm#A(KZh~vNx|y;S=8W)B&p)U-spqWR!hzYkZc0U{dIP30 zpbZ4GXG;Ceow*r*l=ViLzvY)HALwLR5tyH1)K4k~=4WZSMXexE9-ljaDK<%j@UOcQ zEoISKFZBV&Nm9A?o`svG^Szjdno}EL%}qOF*{VlUJJPt^n-$*igfBbAi&QmH2I_;y z1aWe=S&=TzPs}#t0+XBVZ8-qi&!Lp}j0KeizwKBzCZsoAbfT;@7HNpIJ!9@u36aD2 zVH$k=$IA|>&mPz*-c6U^ixGKJ%H6%SL>g!Zey0`jgzmQQ{2&v?h90Wv5cZg%OC z1DeJWZpj#xW=r!@p{GzL<$>Jcmde~om1piNT98Lss(ptO+^dpbDM#d?Ub*;Q6*p)5 zp1R%#c;q*jrW?G>o*)^%`+&Zcb~BZPAbnHXgdeG_qJOC^SsMn5RKOt&CC;$B)xQ!X z5YoXht`Z5>HQjD2HKXsEPvd}iBWHK>RACyi*MD)=!iy$><{%}=N?^$m%<~v=3WdCm zAMj))z%0L90aA^Fi+31#w^$KD!zPuPtP%itjDc&V&OdUTkhmg7PIW$#?lV2-In1Ey z-tZM=Yd(#&%l5A49>;U0cHs&T8okcNAO(@kRdM;?FKV|C3;;Zi%rH)Gx`_X0n$Qe} ziMt8ad*Zkew{HgTG^;{Airp9~Q^oo?;0map9t3x1AKT?I={1XY5kfTSMLBxHcpG8|yhK!Qc_c-Fi52(wHdL`k>&T zR9JklrRSp`oxL*|Ks=cqgy$_X(Fd>yNi9v)|G?s46(L?ZVtfYmR1?&wgSWWqWsMs?4qbeVf z)H!dYjdgv&dk&y61cvP95zxT_m*u78?XRqB16#>47vNa zj29<9P^W|A?bEo00Zt0x_7=x@EgR3%+ri1+Ybc6=Blj;kDP47JLO|<~UrNZ(9avu2 zXu#~z8W6IlvZSMTRx425`6$!P=PNzPSXX3(2E$1l-66ojPv{pCZJ_B0a`>^xLb5XF!Mcx zk9*_Xt(%X_*FqmyY{wI6{td7zC&Nf!2Jb@&DxNgJeZX!@Z6b?RH=`<@7*{EY3qBdE2cql%-!t%b0 zLW4|R?b=dezuHAOeJZ`Cxj=nULb)Qu;6HM?+M#&^Q_+ZAh{GX8ZjT^6ko(lLJ~jb@ z&+d>hErI6}c{PE1gnp4D({>G|ii98DRkv=lD(E>vh@?L<0qE7 z=l4dqlNL)6VVV5Iw}sL$3jV`r&Rs+jLO$Q{w>(DesqocxA{ zy=atn4t7nWnj&RtLIpS}M==Ss>29QM63#gSP4gsX`HTE3xoU&V@GVS{NZU`bsL@)+ zJFjoZPfV)uqF~>fp2fRkDML!6ij*%>taK0A-Ui8o8>qPJC$~R6j|ZZ3Ic}GF&SlZe z^0^s(F;Y7xL!p4qQE7t#w__S@{d(!HfCJfRpCDOCqB zD5;69Qb!z}8_E!yia1m5F&@#)sk+IG8FkUn3R_n<>t}hX;xEt@L$C^N*>aLfpI#{ssJdbZ9dPP1O3dZ zVTLPR-Hs*%MCZ`C58#T`_!VFdfo31}cC!_prt@Cu)YkSDpH!1`Ly)MIBUPp5fRz)@ zAKiP-j$Aq7m3P@#*M<$4%UK`f?nxUuI<<3}cNIA31k)?Di|5FbXqp03S)LY-%1ZDY z{2ECV51xdQlHWtE$a{6!XNkQy_kD@&PU3^6Q}#!8?N8NNL6p+xMHbVfhfg0risz@{ zIF<&Tm`5X=>Xd=;4-J5u!6V_0rL>NEoaha*VoLt19HV1pPAK|M;+Kl>5f4!!^><+T zGae34b9nk+N_L&S+lk5_E2og77c}V6BLB^*j?SJGD3#)}9zA458%Bo07QAs%uL}+8FL%3wF3AF&|h6U zj)D=MX5Zv_Z4N#ty>d`uS}&{c5F1vH#k?@uRHVTv`?+*#DP_ckAl!NKrWZDuBTP)M zd8eqM(;p$ctN4u;;N)}KF*yKfc5KY3*>5s!4Q~guEJNkKDS|(IPgbcIT5xlbKiw!(OsEJy3lsU=q{N5rl;d}hn zi&BB%@{vDw@H2rdG9TB_gRrlhOOwqJAC&qTDEZ9Ti5wgbC&Jx&P`le_eWSd1pu}84 zv>V(!$aaGD!S1yY$7XO30+Z&JxYaM2GMf4D?_ceO{0SnEime&=B}{zgYN={HV zB`)5CG<#-Vmn-*{aGu9=7q}}z$^_ysUfY65AJ~|Y#&o=tb?|1Wa7s3F;>0cW9&?Wy zw3@j&Mer7E+=9%~o z_rPMl_2!UtyN=?x+RbYaHNhGeLe9@;{Z~%JbF)#3;-&IbfCBL=7xUa)!&a^N*Iytg zGlk=sGrO1#Vqf*-D1G$4pF-Fv+FnpeG2MNKBgZxEffc~smVDujg^}pn3+{Jlck+Z@ z4@8GyR@YAU(7P%MyF^f81A3h&Io^(68!)S$6ljC$<6nh}N=y(#kTT)x?zKSg`*0)_ z=GQy4ju{=_!kPts-a9mft<&S`hF=@2gP@wcM#zy7DJ!47O5`IIFMm6b8{AG34UXR% zue<*hP-MYD@ZQ|%Ad6UyXU<%Y#@aE5lU6bAhy@v;X5D3v4Q_l320|+0DngZ`k?=-Z zKDUEE4lEuI&XDvH3Cl79C=JEg69E`dq8XXglxMFbdxl$wAa{|eAQ-qQPg3CkkorZ_xnK;LQT#}`gsMz$g^aIMhaWn)*Is= zTsp+aT!+2VQcr;Bhi6LfA8p@w>|iw;(sUI=F0tWaxYcs^H&22!=dP+M=SMmjxcIUB zv$nI?!a$FK(ln2NbBITC2t@t~l2(vPk38S2VKEB2v-Di+&!#xrbpo_0dTjRS(GT?D z1r*{08pX}q1+#0tT*m~qnqSc$$R)}oid)95i$Pp_1M2X)0$?cT5`K#ap%wnU*(iFO z5pG!0^~=$!r8DUjaamy@=ym9WDrsbUR$DpNMz181@G&z=I!~jTg=c8g6(*fB+Q3yC zN1m;@F{9y(H=`BVe~A)rw+GEFo4v@E+=c8Z(*<$zp+h*{c47_qb`HP%rXwY6%X1cJ zm36HpC-1kTTRoRpMUXIu=DIUVNh8zo@Zs3B#we!!vyd+sA6mRg_XRCZ{Ilp>^K^cQ z9Q@snvC9?Bx(#ny8e`cLv^~)%AVYFix?T@_Bl_G)f4wfdPyFu>74|MuPV}s;g@Y=- z{T*YPLR~0yvZ_K8{FG6fjDWtW;ZEnggXnB#HJMmXxr`v!Tz zuk3lS$K0^rYW9K5cW}+#_i+Mn_KsRQKPMw;W1QjDpuEyYZFt zS@hB%DP0F+;QVSmS)da(QX?^4N@UiVJHG$wfv8gXj^@!u%Jtp8B}-$pZUDI|H4vR4 z_l5>2M4wX-AB`PW(AW74K`aaTWC5N1lj6=YW+~9hB@Der4reuKI^_Hqyx0Yr=EMcO z8)Km{dCN&9aXIx=E1IW}BG!kSYyP!)JW5r*oD84@=;yy7H zL`9GeqV}c-POiwMM<$JlDBU;qEWx1?cv z%~2T01wm(EBKJ59$RHk;Yt1R)VX_9m~kw!C$xq(bO7{=6t9Z6A?}c zQjFx2G{=%^vYhWy3R9~PJ#cOi-0;*}i^dxuXO}o-1tvK3=2OeLn9nR<>`c#n3XvOT z8Pv*mAm*@Oa^}|#_fz8&T_!FklbtexOi(Y;g{e>6JrM(#qfxYR6awd%a zFWf1p&Zsgv%bIGNa_L!t%BIhmpxIzoX|m`7@D^yxW~u^BPr;@t$!bvW1r!Q?(N|)f z8Du^k9mYY81X2DKLQia9C-wQWq7oQsVW!OMuz`n`I2K$=`g^I}e@*R%aC_8nBpCJe zsa+L+OjQqNHc!d9>IDTn&~7MfK;nd2@IAT~W&Bo1Vf(PJQ36sB=H*zY7RWLUi#T|npK|!RC4KMM(@m2{?*_qiSA$s zMgn^RL+BOlHS|i8GmkHAK z>*P?z=@ZVSw7BSdsI;AWWpzTd$f-sStE$kS2f|7%`Y%~9d|xH%AcJLQNIfrm4%B3z z7d0Kc_&<)y_37Mw6br(1E-WyuA~rx~_Gk|@uA1macflGlUtZ87Pvvkch?PdZHDXAj z3NQ#+^jMPE7K0Shw^L(EmIr#{k`^izAb@;t?mv zZR3Z(zXuAW@;-xFjGqVjd)qw6Oq~#TX?l{ zkAe(O`q#H0;oJrI^p`c(Wmy94PB(?o`nuQk6wf@5@tm+zP$PfssqXL8u=2455(1~q zIUqia1^#{&K5t+Qr0hws{0C`DR<8b35 z!gpL><6=~FE?FP`S8TCcA%LU|7FngyC}6Xd9CmyjvhJ5Jq#R7i6Dvd!kCjaISCL^ zHs~WmqbgCNNRQe0-`@xY25~Z?=pDJYS)LSNsa|Ee!V>nq5rN%kEp8_hYoY_fY{(Il+Nfz_HU$_fOIvw) zHL+Ed^9JS46`NIM22nl=d6j}V3imdcu5)5&*OsI7O_=Q;0!x0-9kiaC-&PkfRMm7F zo<6Y1dnhHc{t?MpYQg6g#JwSJ@xe3UVLPrE0)1wi+1I|m0uO(NK_9s9QwqKI4txR) z_In|E{Wb9zo*l~7)vQG_v&+#bJI{ zp`K6|;rQ6~QXdAd1lNlI4HM22p~78v0M6=`Kdq+^LRs;WhuyrWAFgI&1k22b$#%l! zPQJm71HU*M2jI~@ak}s`uWgz^jaoBvL|mJ0l<9z}VsPqS2eIst$+kavgKHX8S-3_l zIuYiiaEf&pxmeb_tS;a3?@z}z)TiyMa~!C5UZ0OzKRhKa=Gukj-mCi1eL(;774tNx z&!q0UY%G)99f}*Kd8cWnu%TgLxWM@3pl`MoGomsm8J?DTw^$aztqT z{M$?!zjR^VXc6t`2k~qijg9Wc#lL2|DuK7;pIgK4 z6r}*O{{$$6j~drc(KRm3vB^d%e6E5P@-QK_2&ZD`Enb6vo~Ui~L>F~8aui||7H}9? zd%G!|gV^Ueea5+UWt;epAZu3ThQ8OJ8B4K)fVnhD6=nXv(xeAb5CQElgn8();a5{T z)NsSUmzB+qd+OZM%SJs=6x1Jv1jLB-)%P;$+~Fmd*Ed@d@(4f1lIe+@tClLm5DWqI zVuIt!WUkdKoG03H1)Q zcFNjFm)bT0)J1?JKxG=CfQ|>SEn6(CH)k7rcxB5+!IK0se*LL#QfK@WJk8JNWW&L! ze8_2C8Z_REn-;MI-f}SVWKI3GSpRS)J0XL~!fOS5LloiM?9Pt2B=VYRQ?Oaqz7c10 zqNTCUy}vV+t$bxc3|lY8;J9CN3qtb51rWn8b&1pi!cT|$$4>%onhLKr@HRsF+RYtM z$@C1tp;vgmKIjFII~*4Mx$S`?>galR!*YB2qQ9h zGCtwFdw^8WPZ{WX7GHN9TjVM0AP{jpQ3P4_;)nsaXDuwNvOgR(cfUF@@=HrQdq!nJ zDAWtp0Dk%b?&)(#@n{2;mNzMiA;Ha{t5hU3bat0~&GhZ?toEo-N}h6wpX*-EsG^6G zB36^gz^1A5mC~W3Q^s*}lp*SkiGPrzJ&V|xQFT;S2gYkmX&cW8M;DaPqo20o$aN1x)2JICkJN7ub2kA3ZHFY2I=jKdt-`L*Q ztBHL|_HNosmaL24$HKw>zI1@(JCF=z9eL^GK2kA&+V5|YIa{D4a3P6p2$R!E%Qls} zGy~_D?zwooq%D__oMwVRRErlX-V~E8(i)mn&DCN zKh-iJ=seRHE(jXt&wC_Hf3>uR8b205IK!M$?l0|sSL5rpf5;aKos5tg+OT>prRfqG$w~?YcO!D)Fh1dkOiBcb6=5R+#A%}RCf{DNc^S|neQ0!9 z93d2N2M!C!!`HFyYtJZs1e7@}s;h2brxxb#KptTII=Ay;n9K`54iIRAa&5F0`aJ

VcBn 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ⅆ!F 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 literal 0 HcmV?d00001 diff --git a/MikroMaster/20260503/20260503170002-Config.rsc b/MikroMaster/20260503/20260503170002-Config.rsc new file mode 100644 index 0000000..e781610 --- /dev/null +++ b/MikroMaster/20260503/20260503170002-Config.rsc @@ -0,0 +1,4090 @@ +# 2026-05-03 17:00: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="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 true;\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 (!(((\$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 \r\ + \n /tool/fetch (\$GlobalScriptsUrl . \"certs/\" . \$CertFileName) dst-p\ + ath=\$CertFileName as-value;\r\ + \n :delay 1s;\r\ + \n /certificate/import file-name=\$CertFileName passphrase=\"\";\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint \ + ] ] != 1) do={\r\ + \n :error \"Something is wrong with your certificates!\";\r\ + \n };\r\ + \n :delay 1s;\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 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/\");\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/368/b69ddb1c\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 09:35:02 01.05.2026.\";\r\ + \n\r\ + \n# The variables are received right here.\r\ + \n:global GlobalConfVersion 138;\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 GlobalEnvRemove;\r\ + \n:global MiniDateTimeStamp;\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 ExitError;\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 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 FetchLargeFiles;\r\ + \n:global FetchUserAgentStr;\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 LogPrint;\r\ + \n :global updateChannel;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n \$LogPrint debug \$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 \$LogPrint debug \$0 (\"Set updates channel to: \$updateChannel\");\ + \r\ + \n }\r\ + \n\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local Channel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set currentUpdateChannel \$Channel;\r\ + \n \$LogPrint debug \$0 (\"Update Channel: \" . \$Channel . \".\");\r\ + \n\r\ + \n\r\ + \n :local StatusPkg \"undefined\";\r\ + \n \$LogPrint debug \$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 \$LogPrint debug \$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 \$LogPrint debug \$0 (\"\\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if (\$isInfo != false || \$PkgUpdStatus = true) do={\r\ + \n \$LogPrint debug \$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\r\ + \n :local Status \"\";\r\ + \n :local Update;\r\ + \n :local WaitCount 0;\r\ + \n\r\ + \n :if ([ \$IsCheckUpdates true ] = false) do={\r\ + \n :return false;\r\ + \n }\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\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\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\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: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: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# !!! The function is not ready !!!\r\ + \n:global FetchHttpInfo do={\r\ + \n :local Mac [ :tostr \$1 ];\r\ + \n :global CertificateAvailable;\r\ + \n :global IsMacLocallyAdministered;\r\ + \n :global LogPrint;\r\ + \n :local Url \"https://api.macvendors.com/\";\r\ + \n :if ([ \$IsMacLocallyAdministered \$Mac ] = true) do={:return \"locall\ + y administered\";}\r\ + \n :do {\r\ + \n :if ([ \$CertificateAvailable \"GTS Root R4\" \"fetch\" ] = false) d\ + o={\r\ + \n \$LogPrint warning \$0 (\"Downloading required certificate failed.\ + \");\r\ + \n :error false;\r\ + \n }\r\ + \n :local Vendor ([ /tool/fetch \r\ + \n (\$Url . [ :pick \$Mac 0 8 ]) output=user as-value ]->\"data\");\r\ + \n :return \$Vendor;\r\ + \n } on-error={\r\ + \n :onerror Err {\r\ + \n /tool/fetch check-certificate=yes-without-crl (\$Url) output=none \ + as-value;\r\ + \n \$LogPrint debug \$0 (\"The mac vendor is not known in database.\"\ + );\r\ + \n } do={ \$LogPrint warning \$0 (\"Failed getting mac vendor: \" . \$E\ + rr); }\r\ + \n :return \"unknown vendor\";\r\ + \n }\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# check and download required certificate\r\ + \n# Usage: \$CertificateAvailable \"Common Name\" \"intended use for certi\ + ficate (e.g. \"fetch\", \"tls\", \"all\", \"undefined\")\"\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# download and import certificate\r\ + \n# Usage: \$CertificateDownload \"Common Name\"\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 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 http-header-field=({\ + \_[ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n \"https://mkcert.org/generate/\" http-data=[ :serialize to=json \ + ({ \$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 warning (\$0 . \" Failed downloading certificate with CommonN\ + ame '\" . \$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# name a certificate by its common-name\r\ + \n# Usage: \$CertificateNameByCN \"Common Name\"\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 FetchUserAgentStr do={\r\ + \n :local Caller [ :tostr \$1 ];\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 (https://amster.vados.ru/; main/3419/3ee\ + 19780)\");\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 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 GetRandomNumber do={\r\ + \n :global EitherOr;\r\ + \n :return [ :rndnum from=0 to=[ \$EitherOr [ :tonum \$1 ] 4294967295 ] ]\ + \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 MiniDateTimeStamp do={\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 :return ([\$yyyy] . [\$MM] . [\$dd] . [\$HH] . [\$mm] . [\$ss]);\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={:return false}\r\ + \n :local FileVal false;\r\ + \n :do {: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 :global LogPrint;\r\ + \n \$LogPrint debug \$0 (\"Removing directory: \". \$DirName);\r\ + \n :local DirVal [ \$FileGet \$DirName ];\r\ + \n :if (\$DirVal = false) do={\$LogPrint debug \$0 (\"... which does not \ + exist.\"); :return true};\r\ + \n :if (\$DirVal->\"type\" != \"directory\") do={\$LogPrint error \$0 (\"\ + Directory '\" . \$DirName . \"' is not a directory.\"); :return false};\r\ + \n :onerror Err {/file/remove \$DirName} do={\$LogPrint error \$0 (\"Remo\ + ving directory '\" . \$DirName . \"' failed: \" . \$Err); :return false};\ + \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 :global LogPrint;\r\ + \n \$LogPrint debug \$0 (\"Removing file: \". \$FileName);\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={\$LogPrint debug \$0 (\"... which does not\ + \_exist.\"); :return true}\r\ + \n :if (\$FileVal->\"type\" = \"directory\" || \$FileVal->\"type\" = \"di\ + sk\") do={\r\ + \n \$LogPrint error \$0 (\"File '\" . \$FileName . \"' is not a file.\"\ + ); :return false}\r\ + \n :onerror Err {\r\ + \n /file/remove \$FileName;\r\ + \n } do={\$LogPrint error \$0 (\"Removing file '\" . \$FileName . \"' fai\ + led: \" . \$Err); :return false}\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 :global LogPrint;\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 \$LogPrint info \$0 (\"The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n \$LogPrint 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 \$LogPrint 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 \$LogPrint debug \$0 (\"Making directory: \" . \$Path);\r\ + \n :local PathVal [ \$FileGet \$Path ];\r\ + \n :if (\$PathVal->\"type\" = \"directory\") do={\r\ + \n \$LogPrint 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 \$LogPrint 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 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 [ :len\ + \_\$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 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 LogPrint;\r\ + \n :global VersionToNum;\r\ + \n :if (!(\$Required ~ \"^\\\\d+\\\\.\\\\d+((alpha|beta|rc|\\\\.)\\\\d+|)\ + \\\$\")) do={\r\ + \n \$LogPrint 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 \$LogPrint warning \$0 (\"This \" . [ \$IfThenElse ([ :pick \$Call\ + er 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: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: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 LogPrint;\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 \$LogPrint error \$0 (\"A script named '\" . \$Script . \"' does not\ + \_exist!\");\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 \$LogPrint error \$0 (\"More tickets than running scripts '\" . \$Sc\ + ript . \"', 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: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: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:set SymbolByUnicodeName do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :global EitherOr;\r\ + \n :global LogPrint;\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 \$LogPrint 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: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: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: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:set IsDNSResolving do={\r\ + \n :do {:resolve \"api.telegram.org\"} on-error={:return false}\r\ + \n :return true;\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: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:set FetchLargeFiles do={\r\ + \n :local ScriptName [:tostr \$1];\r\ + \n :local fetchUrl [:tostr \$2];\r\ + \n :local CheckCert [:tostr \$3];\r\ + \n :local fetchMode [:tostr \$4];\r\ + \n :local fetchMethod [:tostr \$5];\r\ + \n :local FetchString \"undefined\";\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 #:set fetchMode [ \$IfThenElse (\$fetchMode != \"false\") [:tostr (\"m\ + ode=\" . \$fetchMode)] ];\r\ + \n #:set fetchMethod [\$IfThenElse (\$fetchMethod != \"false\") [:tostr (\ + \"http-method=\\\"\" . \$fetchMethod . \"\\\"\") ]];\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 :local FileName (\$DirName . \"/\" . [ \$CleanName \$0 ] . \"-\" . [ \ + \$GetRandom20CharAlNum ]);\r\ + \n #/tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName h\ + ttp-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] }) as-value;\r\ + \n #:log warning (\"\\\$fUrl =\" . \$2 . ({[ \$fMode ]}));\r\ + \n :onerror Err {\r\ + \n :set FetchString (\"/tool/fetch \" . \\\r\ + \n [\$IfThenElse ([\$fetchMethod] != \"false\") (\"http-method=\\\"\"\ + \_. \$fetchMethod . \"\\\" \")] . \\\r\ + \n \"check-certificate=\" . \$CheckCert . \" url=(\\\"\" . \$fetchUrl\ + \_. \"\\\") \" . \\\r\ + \n [\$IfThenElse ([\$fetchMode] != \"false\") (\"mode=\" . \$fetchMod\ + e . \" \")] . \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] }) as-va\ + lue);\r\ + \n :log warning (\"\\\$FetchSring = \" . \$FetchString);\r\ + \n :put [\$FetchString];\r\ + \n #:put [/tool/fetch \$fetchMode check-certificate=\$CheckCert url=(\$\ + fetchUrl) dst-path=(\$FileName) http-header-field=({ [ \$FetchUserAgentStr\ + \_\$ScriptName ] }) as-value];\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 \" . \$fetchUrl . \"\ + \_- \" . \$Err);\r\ + \n \$RmDir \$DirName;\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ \$WaitForFile \$FileName 5s ] = false) do={\r\ + \n \$LogPrint debug \$0 (\"The file downloaded from \" . \$fetchUrl . \ + \" did not show up.\");\r\ + \n :return false;\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 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={:global ExitOnError; \$ExitOnError \$0 \$Err}\r\ + \n}\r\ + \n\r\ + \n# Global Environment clear. Use: \"\$GlobalEnvRemove True;\".\r\ + \n:set GlobalEnvRemove do={\r\ + \n :local doRmEnv [ :tostr \$1 ];\r\ + \n :global GlobalScriptsUrl;\r\ + \n :local ScriptsUrl;\r\ + \n :global LogPrint;\r\ + \n :if (\$doRmEnv != \"True\") do={\r\ + \n \$LogPrint error \"GlobalEnvRemove\" (\"This script is needed \\\"T\ + rue\\\" for confirm to remove global environment variables!\");\r\ + \n :return [];\r\ + \n :error true; \r\ + \n } else={\r\ + \n :set ScriptsUrl \$GlobalScriptsUrl;\r\ + \n :delay 5;\r\ + \n :foreach var in=[/system/script/environment print as-value] do={/sy\ + stem/script/environment remove (\$var->\".id\")}\r\ + \n :delay 5;\r\ + \n :global GlobalScriptsUrl \$ScriptsUrl;\r\ + \n \$LogPrint warning \"GlobalEnvRemove\" (\"Done!\");\r\ + \n :return [];\r\ + \n :error false;\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 \"Setup Global Environment for scripts\";\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#:local Resource [ /system/resource/get ];\r\ + \n#:log info (\$ScriptName . \" Loaded on \" . \$Resource->\"board-name\" \ + . \" with RouterOS \" . \$Resource->\"version\" . \" and Architecture \" .\ + \".\");\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# signal we are ready\r\ + \n:set GlobalFuncReady true;\r\ + \n:set ExitOK true;\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} do={:global ExitOnError; \$ExitOnError \$0 \$Err;}\r\ + \n\r\ + \n#} do={:global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err}\r\ + \n# log the successful load of the script, or an error if it failed\r\ + \n#:if ([\$GlobalFuncReady] = true && [\$GlobalConfReady] = true) do={\r\ + \n" +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 dont-require-permissions=no name=create_mkdir_function owner=vados \ + policy=read,write source="# Written by Phillip Stromberg in 2019\r\ + \n# Distributed under the MIT license\r\ + \n# \r\ + \n# \r\ + \n# this creates a function called \$mkdir\r\ + \n# from the command line you will be able to just type \"\$mkdir some/new\ + /folder\"\r\ + \n# and all the folders that need to be created will be\r\ + \n# if the folder already existed, it is ignored\r\ + \n\r\ + \n:log info \"Creating \\\$mkdir function...\"\r\ + \n\r\ + \n:global mkdir do={\r\ + \n # \$1 refers to the input variable the user passed in to us\r\ + \n :local newFolder \$1;\r\ + \n\r\ + \n # we'll use this variable to report error messages that may arise\r\ + \n :local errorMsg;\r\ + \n\r\ + \n # if the user put a slash on the end of the new folder name, remove \ + it\r\ + \n # i.e. \"some/test/\" becomes \"some/test\"\r\ + \n :while (([:pick \$newFolder ([:len \$newFolder] - 1)]) = \"/\") do={\ + \r\ + \n :set newFolder [:pick \$newFolder 0 ([:len \$newFolder] - 1)]\r\ + \n }\r\ + \n\r\ + \n # if the user put a slash at the beginning of the new folder name, r\ + emove it\r\ + \n # i.e. \"/some/test\" becomes \"some/test\"\r\ + \n :while ([:pick \$newFolder 0] = \"/\") do={\r\ + \n :set newFolder [:pick \$newFolder 1 [:len \$newFolder]]\r\ + \n }\r\ + \n\r\ + \n :if ([/file find name=\$newFolder] != \"\") do={\r\ + \n :set errorMsg \"'\$newFolder' already exists.\";\r\ + \n :log debug \"mkdir: \$errorMsg\";\r\ + \n :return \$newFolder;\r\ + \n }\r\ + \n\r\ + \n # the name of the temp file to create\r\ + \n :local tempfile \"mkdir_temp_file.txt\";\r\ + \n\r\ + \n # port 0 is unlikely to be open to HTTP requests...\r\ + \n :local fakeURL \"http://127.0.0.1:0/should-not-exist.txt\";\r\ + \n\r\ + \n :local fullTempPath (\$newFolder . \"/\" . \$tempfile);\r\ + \n\r\ + \n # this is where the folder creation happens\r\ + \n # `as-value` prevents status messages from printing\r\ + \n # wrapping in a `:do {...} on-error` prevents error messages from pr\ + inting.\r\ + \n :do {\r\ + \n /tool fetch dst-path=\"\$fullTempPath\" url=\"\$fakeURL\" durati\ + on=0.001s as-value;\r\ + \n } on-error={}\r\ + \n\r\ + \n # this waits for the temporary dir to show up so there isn't a race \ + \r\ + \n # condition where you call mkdir and then try to do something before\ + \_the \r\ + \n # folder is actually created\r\ + \n :local count 0;\r\ + \n :while ([/file find name=\"\$newFolder\"] = \"\") do={\r\ + \n :if (\$count >= 50) do={\r\ + \n # after 50 * 0.1s delays, it's been 5 seconds, which should \ + be long enough\r\ + \n :set errorMsg \"New folder could not be created at \$newFold\ + er\";\r\ + \n :log error \"mkdir: \$errorMsg\"\r\ + \n :error \$errorMsg\r\ + \n }\r\ + \n :delay 0.1s;\r\ + \n :set count (\$count + 1);\r\ + \n }\r\ + \n\r\ + \n :return \$newFolder;\r\ + \n}\r\ + \n\r\ + \n:log info \"Created function \\\$mkdir\"\r\ + \n" +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/DigiCertGlobalRo\ + otCA.crt.pem;\r\ + \n/certificate/import file-name=DigiCertGlobalRootCA.crt.pem passphrase=\"\ + \";\r\ + \n/tool/ fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobalG\ + 2TLSRSASHA2562020CA1-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/DigiCertGlobal\ + G3TLSECCSHA3842020CA1-1.crt.pem\"\r\ + \n/certificate/import file-name=DigiCertGlobalG3TLSECCSHA3842020CA1-1.crt.\ + pem passphrase=\"\";\r\ + \n\r\ + \n#:global AmScriptsUrl;\r\ + \n#google\r\ + \n#:local CertName \"GTS-Root-R1.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"GTS-Root-R4.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \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#:set CertName \"ISRG-Root-X1.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \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#:set CertName \"Starfield-Root-Certificate-Authority-G2.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\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" +/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: 5200/20-eCee/ac/P(21dBm), 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: 5200/20-eCee/ac/P(21dBm), SSID: vados5g, local forwarding +set wlan2 enable-nstreme=yes +/caps-man manager +set enabled=yes +/caps-man provisioning +add action=create-dynamic-enabled hw-supported-modes=gn master-configuration=\ + cfg-2ghz name-format=prefix-identity name-prefix=2ghz +add action=create-dynamic-enabled hw-supported-modes=ac master-configuration=\ + cfg-5ghz-ac name-format=prefix-identity name-prefix=5ghz-ac +add action=create-dynamic-enabled hw-supported-modes=an master-configuration=\ + cfg-5ghz-an name-format=prefix-identity name-prefix=5ghz-an +/certificate settings +set builtin-trust-store="ipsec,wpa-eap,capsman,fetch,sstp,ovpn,radius,userman,\ + openflow,tr069,dot1x,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 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 +/ip firewall filter +add action=accept chain=input protocol=icmp +add action=accept chain=input connection-state=established +add action=accept chain=input connection-state=related +add action=drop chain=input in-interface-list=!LAN +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=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=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 +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=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=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-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=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 +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=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=masquerade chain=srcnat out-interface-list=WAN +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=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 +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=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=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 +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=yes dst-address=0.0.0.0/0 gateway=10.30.30.81 +add disabled=yes distance=2 dst-address=0.0.0.0/0 gateway=146.120.64.209 \ + routing-table=main scope=30 target-scope=10 +add disabled=no distance=2 dst-address=0.0.0.0/0 gateway=146.120.64.209 \ + routing-table=main 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 ntp client +set enabled=yes +/system ntp server +set enabled=yes manycast=yes multicast=yes use-local-clock=yes +/system ntp client servers +add address=0.ru.pool.ntp.org +add address=1.ru.pool.ntp.org +add address=2.ru.pool.ntp.org +add address=3.ru.pool.ntp.org +add address=time.google.com disabled=yes +/system scheduler +add comment="Setup Global Environment for scripts" 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="Windows Update script" disabled=yes interval=2d5m name=\ + WU-script-run-schedule on-event=WU-add-to-list policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2014-02-11 start-time=00:00:00 +add comment="Backup Every Week" disabled=yes interval=1w name=BackupEveryWeek \ + on-event=BackupAndUpdate policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2025-07-07 start-time=03:41:27 +add comment="DoH Cache Flush" disabled=yes interval=1d name="DNS Cache Flush" \ + on-event=DNS_Flush_Cache policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2019-12-06 start-time=05:30:00 +add comment="Create mkdir function on startup" disabled=yes name=\ + create_mkdir_function_on_startup on-event=\ + "/system script run create_mkdir_function;" policy=read,write,policy,test \ + start-time=startup +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="Scheduler for Amster-Backup-UpdateEmail" disabled=yes interval=\ + 1w name=Amster-Backup-UpdateEmail on-event=\ + "/system/script { run Amster-Backup-UpdateEmail; }" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2026-02-13 start-time=03:41:27 +/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/20260503/20260503170002-Diff-Config.rsc b/MikroMaster/history/20260503/20260503170002-Diff-Config.rsc new file mode 100644 index 0000000..b04360a --- /dev/null +++ b/MikroMaster/history/20260503/20260503170002-Diff-Config.rsc @@ -0,0 +1,31 @@ +21d20 +< set [ find default-name=ether5 ] poe-out=off +3756,3757c3755,3757 +< 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 +--- +> disabled=yes 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 +4030,4031c4030,4031 +< add comment="Windows Update script" disabled=yes interval=2d5m name=\ +< WU-script-run-schedule on-event=WU-add-to-list policy=\ +--- +> add comment="Windows Update script" interval=2d5m name=WU-script-run-schedule \ +> on-event=WU-add-to-list policy=\ +4038,4039c4038,4039 +< add comment="DoH Cache Flush" disabled=yes interval=1d name="DNS Cache Flush" \ +< on-event=DNS_Flush_Cache policy=\ +--- +> add comment="DoH Cache Flush" interval=1d name="DNS Cache Flush" on-event=\ +> DNS_Flush_Cache policy=\ +4042c4042 +< add comment="Create mkdir function on startup" disabled=yes name=\ +--- +> add comment="Create mkdir function on startup" name=\ +4046,4047c4046,4047 +< add comment="Scheduler for Update Certificates CloudFlare Quad9" disabled=yes \ +< interval=1w name="Update Certificates CloudFlare Quad9" on-event=\ +--- +> add comment="Scheduler for Update Certificates CloudFlare Quad9" interval=1w \ +> name="Update Certificates CloudFlare Quad9" on-event=\ -- 2.52.0