From 39c50cd8cabfd9d29722317bc1e27c62f7ab8f16 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Thu, 17 Sep 2026 19:40:07 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at Sep 17 19:40:07. --- .../20260917/20260917194002-Binary.backup | Bin 0 -> 243760 bytes .../20260917/20260917194002-Config.rsc | 4343 +++++++++++++++++ .../20260917/20260917194002-Diff-Config.rsc | 15 + 3 files changed, 4358 insertions(+) create mode 100644 MikroMaster/20260917/20260917194002-Binary.backup create mode 100644 MikroMaster/20260917/20260917194002-Config.rsc create mode 100644 MikroMaster/history/20260917/20260917194002-Diff-Config.rsc diff --git a/MikroMaster/20260917/20260917194002-Binary.backup b/MikroMaster/20260917/20260917194002-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..bd330383d8c4225ca5656335ac29b5276142c040 GIT binary patch literal 243760 zcmV+aKLEh*sF8CpxB~!kgQq;lx=1(`|Jp3(ED%@#0002|`~QAWPz3;3!s&Ki?>`9McLnllWb`P5=WGIuXvXe;H^ag}#*K zO^Q?}sN+fB^0wBKN7?vha9at{igZFq+V7hn^bl;7`;0TyPI%h~N#tw%qH)N!?Z+Iy zDu^0)>c=c&s)mh^osc>01EYL<7Hm19hoK4W6WZ>g5>d|m#UX%f3QU09H3KTluWX;B zhnVwjvDz*Jej{V+TyaAfcwT%e#kp+qz}HjKoyM0e{kHfC7N?QxVq}Hq1d878ZNw-n z6K!9hI=;ir(QhB)3oFd-dFfhGsX?IJWBoc3!%^em{XVSuS4qWYsqONk7Q(BI>Btkv zeEE+rnqde?#ti;TzA1WLA(ozcz#iNZ_Ut@O&D}P->9iZC(j413X?v*lcvvBI?hhX8 z)m4erZOf#K-97-L^%q#DDL9mfse07e%b-hX76bCudn^xRxvDC&);s>@2_~o75f@ij3bc^ zfD%|^2J08Em=ybxyBB0qJg#vLcQ`1RMSA!RY7s?|&3NFGGU=5sDz%}pemRKHDf-4A zw0#xPeeTBVmxnxB<`03C^GvYblMLnPfbCRJ{Tm|BS(`o;Og<$hH$2znmb+w|z- z7@Y5)*?Bco4!Fjmu#idJd^my^0!`X+27ai>M_pj;wQ_LKNr*Nk?w*JQ+g9GF4an9I zAE2-Par~zeu)rr*{bn>Y{_IPvW;<25!ECr-&CPlTUTrcN z0@!7hfHCLD%(ue!)@_jzm|Cpc8aT%WG~i0t)wSWAK}8X$72CU_yIXCeQKr4##G{iw#<|`1|hk1M=xh_ZW?Fw7Pq{oY>=*^bpjQ(Dy&4J=*{t3|w zUo1ooru^k&(l#`6+`=j49OxTd{YcP^spGk1_Hd)Y;lE4&5ip_7Q9)2Hb}K9<>-U#h6ajY0^SWcDgl_%? zl&XiEM4iup;f`#U zlfBFohRkqDRiU{2)UVRV1|1EQe9B`3*1mp<3;< zD|&r=Fv}}l+y=PHxmBTbmTFzf)FHo7fPR%N&^UPP2Deutt~(5*Gv@T?)auiWKA*K?i|!bGAl-<5l}G*GFW ze&tsJ7`TM&2J*&N*M1< zBn0)kw+%|AbOL$il-RaHDr6~Y|G>7P!rf|XAWRpQiG82l7sDa^fH1OaW!N|EJM;qd$`s}6&-C+P!TF9YL%jgi~6$Hjz8Dh z-@Un8Tg5olt`YHVjHNq}2wm#+Zkyw%6+GyNIExyC{KW)PLcM7^@Fq$`*{U|eZQ1u( zFF>mmit(TT(8|Pq)@vGfb+k$+##Tinu|*EX68bib`VGhd0)-rSh=clh2XqL%3Kv`iY>U;O6v+Qo#Qr#=bQZjrrF9&k+b`HxT3)3|tzY-87#hzm7s)hgJ{+Td^ z!a^5gv8uaN%d+q|9iiau<2u5NOMWei9Kx=$e7N{dzOl}H#fF;+d*d6v&}5I@`4-eh z&;kxZG8BDJHyEj61+OphCXZuH-=J%vcmPpV+>zM3X`bpo;gH7#Z>Je>e)ixq-}Y8X zv1z2U+2}?@1&2>{NN+{FmV(=&g|^|k!szRl(bH>*v8WD;ANIF~kF?7BPSM2W?xFe& zcWBb>mC!IN3jfFuM2$}dGZly0N$Z>=5sC?e7aeKXFOuGZ1Bkr~SsfcYDlLaRs`1Xq zSviRq_$MNmc8P5{;j880t7Xpk=X^=-olUXQn4^9A1FS#|w~eaDtMGK~9VP|hjtw7g ziMrOa&;@jjsA`pQ)X?jM1)Ko}N(B%g3%eN*R*^u6;T36N0(JU58(#>%J1f*t+nu1= zKW#9hdzJxegsYjy+d=a1dRoBrE78I8O9woy>li2anl9A#K6-kxbq`{($$`3V!S&%o#iJicGd5|N|$*0>QuQ?>^5mTHizf=4nv%# zlb3Y;6M^48!>xmIu@(?pI+Rf}^3++w!3x0}7e+z8eILS(B`%hxprV(&PoHHE3>q{$ zrQMy1s&buFaX|vQ&EY!HD#(^Ru;$g?po_}zMjfQ1?1`6Q)}Bf789EEfY#7^ikoq@Z z@uDepn7?ZCs`k%4`xyd-mT`fnoC3<{TBH$JaVHH@f=z(UN(?QN5n;zE-p!bmvbL=k z#|)d79Y_aHi#KdFP=!2})fF0#LP-2Nj`M5UnnCm%w;nIU1A$#l{nKHlw8prE z%y!eNVe2B0b|E5lnhUs0i@?m!7fE|r@}9y9`j2A473EN@YH$)gDilV&umbi(fhh>d zfn+!h)?MS)OP9J=Q_R*q$XFbny*-#gilMblHFkgo->d{g_;)Hai)yFYfrLx{FF?tp zvIg1&gp&Ld(w%V7ZTCUOk;IO?I}cPJ+Y}g})X^?ekA#cKnOcsT7knE0EI;n=AiM4> z!f@|n*eqnqke%A>Sw_1j&e_@Uy+QE_=LAm0;nA9-yYTp(;EWo25A@odNEERAC#O!`y%mCX&YqmthI?F`rw`NX zM^OPfQDzJfV-a<|(BfN@Pi{9n`+bMJcmT}i;EUi!tPQP|_?%!Qs>5v4cMpj;ROX*w zYg!HmX*AwK)}?dXji_}J9>leYi9!q03_}*;52Cone@0K*`?^ImbV^Q?{`f=q41}(jS?N*Cmdq7IJvxHGc7QI3H4hDe6SJ=D;NqEIb zIRa7s_!u1NB$5aUuOv@QLrZx(X?EQ3(mca#Sz1kv^zd=!gM$32_Ww4RjpArR%B@yU zvAjyx>+;F}tSl#fn|fO~-Xr7@o32LVsBD1wXwiKq41+LIs!Y(Uag4N-!uNG*NeNW| z1Qvsbz+yy5mA%2*i1y4Em`D(T7WpIJppmk4qd=BW?I_^#SXVV6;}s%L27J#?2Dro@{!h5t1l5Nrnh!bajZHLW zj;uy?i#L!F78yjp!0a}Yc$hcxWKvmcLAl5yJpmwX58!w zJwsx|+N@K0Hyr$YIKB$$eS_8=|6z7{Bhj>iQFnQz>K_bMfdtCh*2Pr`V72ukkmsZ+ ze$6d*djfSxa|N6=(^S&NISZ>;!ut`XaB&aYK2Bt_A@-YK7{EW5%W)hh_?=9w%EgvG zfKJCSg^G(4ZKQ~UD0I@Xard=X*5pr`ejs$+neHAt0BZ?53FkVS8>Oe3G7&roY)cf~ zV)bUMHh?y@LDMAt-p zuz4u3hQT=CftkscR9p&M5VBj+&N7csiIDzcZgf;&HKfI)ED=~!E`Bxj45MU9aCII7 zIP@E<{80(02P={kXD9?k1#zyGFhH$r*>y&ohhv)stIvX5+Wl&BSr}V%m{1B0IiU({j9U`75c^H1In1=D1RIhKWP9M0Zxg=h6 zco@h<{s*#{GTlAYhoLD!@TEb^W+*e7Hv*KG^`W%xjiY~xK&Rq*F`Xy)D{04xM?uO9 zP3qBTJ@xjB0t#l#=X8q9fIZZ7ZzPklj^@H_%MVkaS{3?J>d`f3)?K)ze_01lw-1+S$v`t%F0nA|K+%P zfmU2hfZ}6*w7$dZgBZe?#Vv#KviK`-_SxhTX;=LeBl6(4hKP-<2}^(}WM6=TAy}LN z5AYM@D($M58iCOZGc<`7sBNUVxxifNKA6Mh%Rn?O>A6Z}30v($A1z!;1c#c8aZ?LU zIgBuXEa(<^J{WbxyFvmorR5N}$j_1yyYbfZ8HjjMIt^XnLK{N{R0Z_kWn4#n1t+^nbmdhn{T5AfLQHnJ{hyyE}_5!Yof3u4ua1m@euZ zVHO(8oJxoEf~CppvQUhXvaqk*ydjT@i!2uxlZ>Nu;Mxn%d9A(Ln$R7Zb%W{9$^K!47|GVnT`^7(*@UQd&)1W>C&fg> z02O2oFnhG@IL=#+o?b}K!<^*_RVMe%@4a?t$YMHxp;)c@FA#%T`R{rmfxD8{)$*hn+ThW00Rw;2goY(dK>olA|h4&4VccmT|S z#c|$nV*Py7|i)+wb4>M8WK5sQvY&%J7QKTsI29`PWOmM5!g-l@Epl z$*KHcl>3q#4VqhrAI^7B@P|9tBu69148|l}z+8%Q&ad%3T3P*T02};W1HrU+kWIF~ zM7SB*Uw?>?{;49t%!P!Nh=4xdguv;+`wz79l;(FhyMCtP3iY}BA>m~eDUdu^`oExq zu0Q^9g6oyKs0lY(AwT8kPExm9aZI?J)|98VQ}9><%rTT~)6;f)?x9{ZqN+gXi|vVE z&Y?w|N=~X-Hc(<3pe3g65lBj`6qP-87^mgQw*IMB6h6 zsI?GYlh$UBo&5xmhAp{+$F{d#rr+M=)Aj(#>*-SVHfswl-~i7#-ioBxOZ-dwPqgn0 zWvBh+cpw*QH^vS9Dh^@MNH}mBr#ZVL|Dnkjrn@UURAsrGy%lvXtnna_MXY{k`d~b3 zGG6e*6$a3d>M;URAd{3~_w@Y>p^lc)bkRF{06_vqCLkA<=YIm0`{f%8Q#%uv)Zk`| zuK5RZeFk5V3Zy`V=tl&9hpq|CxxdLLmTu0$K+PMQw*o^_h~7u}#JacxGX{?IGJ8gz z!#oIs^8cV<8A=VM`KUn?Mt~2KLMa=|xKebiB`0u0pNoYg_Zo*qSQ5(^@Vgi6G?9$K zyu@*{VIpAMdWmEX$!$yhFul->7jh4Zq1%N*9F#lZPY~$VI(89#Q%&X$tZ$SeX6vzGmZPujCKL*<0 ziAp7_0j%h5ohd-R;*0JtX$O zBdw8pj(4f+CO_(+0o3y(v>}U>oF9@W0BM02eGXbc8_&8PM~V}tyNm2z*P$~po1wM2 zIGfofIe_N=(3|D|Iv>iKf(5W}OVT`z=PT4lqPPC>e}S-w^h9n65}rC5*-b(6q#+jt z0nKSQ&?ya_14Z&OiQ_=q0BULGi?&c(z@nQpP%9A!?A0d|LEuvaK#k$LnEO>4;B!3G zV!Y;0O5cRudc6ce1uXSL(zpUY;$&ZF+K!ksxfduPXY!<6A82uPSq+gqYIjijF@^yR z`dtGm+yX^z@9fc)H)Jc0v%mrNa$gj+p{U6sh;uoY&cM8H2G+SJcP{p}La z>@cuN(}n5^wgdwYEc$Xiw3$R~dID zaQLHRY_5(NyP&kT>nwHjh*|=9AOF&PJo$S&e{YRFVd5P8egE*?+sRw!5-IiKQX}m( z{)^iG&DU;^kx1#;VflQX7&-?lU%+eDHDj-Ky1A4X5SNMBsbEp(kjolSFK$y>%+R8h zcXx=N&b!Q-p36Lr6jL7$ioeC)qq96muMK6KAFq~Ev?_=LLWc8TKAP2c1M(dIEz~Wi z;CC?Q0c-77=UnNhw}|WWT_XZ(5|hR_g%Fv@r2AciK{HH)#z1Dm=nM7pj!S)=0jC*F zdxmqjt1lTvQ#SW1sny=8N&VI>i~JMGU@r{~0cf^auG*YNt}xZ<>G*8%fVjl+;~qSx z{LFQ-h>QxdCKrG!Thwe4iutnphZ}mnR^w)0Dx*|6>K_2`njAY^s0R4%hWVcy{1ur2 z#GVhbI`2}VDRz_k1^MwbUiSdHk*hdxEGNTc>U+Zu zw_yed2tI&OVwHvcycvi%6`%0)-w##wH@*P{DRyT9uI1kSylv;7QI|5*X>_BINelGX zNS-xnU}5Nm0!D{Dv(*PtS6hQ!zx-w-NsAcSAMmswWNK{68LIbJ4&R^km5y{+;A*O@s8l9?og>7)i9|aMFhRsY;oy;puQgKHXTl2n_Exa~HWy?oTG2&{IO3=m z}bQ`(%t$$XjyD3Ej{ZL`)n!sfmTQ#2vm zv(h$f10|lhYNNr=;D@>f3}Bb@D;MeY`ClY908=r;=QGMV>jikHL&eYF530lr$C~buSzq}SbS=ZR%aS~gywc*66(pt*WB~yWyQh33Yg#P1mcBk=iidM`F z1CcZ@V5~q$0U_{PMEzemSgJ>7Tpkimcpr@s^enf`b~b^>5)}7cSUHhZ<^8n^OPn7i4g#)(9I$pR5L}hOSxg@oE z0A69?S;}BJ5i+V00~w0(etWaN!gC}p8Zh*~8SQF(4IwN|*kOb=mA<(_0(LM68V_{y zh_PAhoC;)$N@r39I1e@Wz=B?4=I&_rH{QCo;4T<8_lzeA7B0zIne|>SNf)0j(TQ4IUk)L>g)xiNP`;x zv6+mz=WJzzv=K+g)xj!UY6DRPhF*l+BLj_tlU`jjKF_}8{*?O-?~WW%cY0MD^Z8s_ zU;oZ|wa6)UDn{&$R~D9>Nx2hD!wP!hI~QCJbx{aD>z-tO5ntIAtDnEd*)&+ zwq{A<0A)(5j+d#dW=eFHrZ^*fr_Pq43bKxt;l6wJ2X~Zm z-mY|!P6;`?R8W5YU{go6F#R%t`T=kOcuz|rO2Od=t)%gn?YIgsI0nXdbVjc;I zN!Fx%|4i~s{a>XhV~^jebU~@vdUnx8z|o9XprYpnUV_kPyczJ~y2hs40Tt^IA(>Y> zzL_rF(1qN7EQJjyQQ2BP_UXt(PtHYh^MKP139b<3!y_>ERF`im;#NuoIJRq5Oq+WH zl(p}VSm&8Di2WU-Bv9Z$Ej}!Z8h)JRQi;B9sxH4nO-o)fJF^i4w`_OZ&Nu<}9i0=p znXTIJfyp6;%b`Z4V%-m+7}@Xc-ZjvUlv3|=x>b8n`2Dt*-e*|((^5b1bdCqS;Iw}C zRUyR_jT*}Jgvav7?XFbBs;>kKL%pV;bPt%7?HSrPDx6C`u+rRJD$iKwW|L*7vxw?F z$TA{C`gVKzYX$Jw(=E;BeORc#{p}2;8P0d?LN4;ar>}64-vVg1PNeFN-E;dJ(@UfD zBK#{T2|%QAIFx0pHBG{~0v`8{4$XrhGZr44t(wY1Y*^(ZHCmR{6XdqVgv0m;cgIF_ zzLRN33Rb&o5xQeX;s!mDH1cI102c>HefAP4(nRi%4C+NgPNqT36So49u%AmM`+Lj7 zrb{^pdTWBdpG+!Y#7uE|w|QRCLojfr_0^BS)l#o4J2q!s#@)U*p_E-6;LLxv7Q=$A zzV6>;W{T5xe4u$U%<~&)_YaKL<9xVVU;LkUW22nCd)hQsmo}W}0%;Uemgssk-^ES@ zS4&Apw|)V>dp%8!9eagglV-?XwQuvIcSg!jCk>8u5vi4mzQocnx`sU2;H4Zn%0Msl z{AIv;kr}Negk8j#p|5x%i1uvqOjEaxlsE0I*M&TzTQ(QX(u*`K)@Al{pSD(_#HXQ0 zuhaX-f=Q|noGxt6px|O{-5PMa5~gtbb4f|^B89hu_BlXLP-wlbqFm{W?Hbww_hM#w zOkIm=13^JT{u;!Kv3X%b-VbD8F;6vSicy7QVO`bEo?DFLl>(`-(3O&b!jhLo_FzK3TdVY>CtJgF>myLPn7QRk$1UAPP=xKC{zY?+U za3Xp_$U3@0j~o^S|Ji(DGEBkwwfC_yBoWk(crr1;gq;A(3j<0=11}$lJg-dNnE$A~ zOSwIL5ypt$?H86G>)Z2R=nW?+JV1;)GqTCgW_@(cT0E z0VUMF>~Zx6oC+Z@*h6@HusVMDv0-Tgk4RmCwXPvSKLX*LelTDiuUuaE(Jy9RCfnS5 zV*%^YPBVxc%bOG4S1-Mg_d<=b=yF9qPZvMQj0zlyg3=Mt_{W}$9>#6)jiZRsP}BQ4 zg-az?p#w8Vm{ull4%nU;!{8ALvF@%ds_D!7ie)R4R}|v|Ht4fySnC*N0b#9ik!7+0 zhp4Ke(O#cR#qQ7Pf#ZZKoH%D#3zf@g)g>$j9CTCV*jr-)+)4g*%pvh_0g}S_-w(Q>kh$k$0E**{s}39F(+m?KQSqIgq-9ox-!B zKiD0S_X_Thu{?QjRaQtsWViQG>W@3IGZ21|N(PAUpi3nRW;6cd3N7t(eVbGgPZQ8R_&_E=RqkhYr1sNQ}|CR82pT@ptdY3k#f0QWc(v_FIPrX^!WG4VSvmC zKJqytU)b7{V|vUnr$OX?ZDU;7-L8fR+-G^)pQ*Xve^lPX4(Ps%!JogEhQX)j=&BiVnsC zu$C)kSG6RikwC$slRXB2IE+X~FLEU?R@g*vTH7ckz#_^p1?NmkNm z+jzMJ*!be={Y%hn>^X$+Ygvvab<6sKhVT;#c}`=BQR0ruKUy3Wn+==as|$fxHxLG? z-BJjx3t2$(+|zAYbw78K(HjIxEltNqeF3rOBBAj(sWb?wV$7`+*;AWk3es61cwg9^ z2(utF6@|`>#18iT=U4e=D z1pW;jXin^YHV1aU?B@$TG+I`=(k0J|_d>^|@j0rm+Lp zs*ao(#le@o1|cA5e<0FSTu@W(zH@Cn+?#)CeJ% z99eRV18Qe9*NH?g%pDT(QBLXE72$Ub7FnXG^kHWu-0{jmUo3rB&evwQCAE-Ird!=0 z^k4%F;n#jYrA+I?`+TAuB~Tuy%Kz;@`U<+T%N}A|jL*ieI@!#6w{|dEX#Um|FB+DZ z=~IGrwuhxoXKJI}=tqg_Xni$ycAeY;;Y}y=VSxJssQ8n7LMNJyco8|1*yq-T4nC|l zjq=4fyYtsB(ks$reOts35tV3$Bj8D9&!bd#EtL+DI#9!4{MNP60gZwYD7_b(*09iG&$a4#xZZ9226=l$J0;5L$ukZ#p7;E({)xy$|SY)kCiGJbBF#k zNr-1jHhvUc=3M)T2wy=xIXkJohe)Mc>zBcn}gYA`3h~ z4&9b*~yYt3H}bHm?g7yDS21PGy=1 zzADF|wd4sNep}Z^uu2~c*9g`LtqhT2iorHQx9+>pj<3DF1y-Y=^X)z!g>$ch6@ zJucGG*%BOz5PhVW%fRqZ8{>MakN$rD$nrX%gvd7j`L~n2%bh0I{njct_n;F6EjNE< zvKaB7EmerbGt)7K`G~P+&9c59zm=hkp$ScWQ{>^M%&kto3G z!I!J>@fmXSe-G385VVXvd9+Fj>?rP$PGr|&fm5eH9F!Nd+hm$TiV=oiD_aD6197Ad z)SY0EmD@u*dDlHze#2!fu|N+jcRW%u10Z?~hV#a*TybKHvKrZk2Fav#in zGu}pv{hpN1e*J0_UEzrH z4(jTg_muNTuC-Z+IoK-LyG6oR(*gEoC|kFXTi{HL^_**h!7%R5zjdczw{tG|f()a7 zKJU=JN7~_<&uo5h50qc3@ok@c{k_7sB=Xp}co(ok7HG5{FG0$_Z(~f0PcRiiAGsh^V?IhxU0cHf5TTLCY?n?Lgda5ZDDJD4}Y9M$l;!`I+Mpa=(AtQS>Oq`JQ$jjqAI^@dbR#xMzv9#fvpZ&{e_MYz6S|qtB@yqyPt=Sp*rv`@iE{&)Fh2D3IxW%DK%ww=(U2} zMPHyAR$*Z+`+)gW;2j(hE8nm`i>j|WR(Z=yd$<%? zd_JX8r^;@MyCcKV9a2jgkJ&+ij#r;Mnnl-5!;90G>5XPihhIpJ@U&m`J2T@u$7rM( zX(J=l_y%$!()Q{<_dcwWGlC9#L)n( z?LLU<1k*jCrcZEX)*}&{cMQ?J+>UmPj0a-pY)3EG45Z|Y))t?OcAH2c?eQii(al4H zsR#dLKSqiNM6;rQ;EDCpUL$#kCn#4s$!jw2IGC4J;*n#yDYqaF=~d3t#!(Q7dJF0FKNd~MX=!i*sNx<@ zv$TWyseL5;#GK2gKKo6yS?zt2n^?)L?C(6>0a zGyvycO%^c48k}r@@_U7r$Lcv4Pll(saRb23GDmEFu-Pz%)pX-}>_xfg0YzlpqMq+H zGF4I?Rzjg8UlT7~QfZfod#UWng284>7^eZpm#2|7HS-QTv0L3?{|T;(LNLCxAo<7{ z55a5;)sOP_d#iVQi;MWRfAb3Q4sV=HAx78ZiHS;?+y**4=oj)ycmDv5Dss1o=sF#` zZRf>QD5$U?s~7UZV0M3(j@#zT198X$*?$|zN=>mE}_)L%1`%k>OU#lg+Z>99C zF?pL5a{a2OR81L~Yv=}=v!xe*O_sfC;3MUePwmS$8^3X!38^mWH~f`erQYX~d;zs% zt0lf`*TzXVg8}++0z+GCd-ofVm6x@xq=~-VGYZI@+0H**U+OGrD$%wXXBHC!fUtns zbF9kko|3zAkwBZ7lQ@SWo$zwQz>BRBDsyJ~%jND{2LlOO*;c9s1vf(U1T?N31-1rc zvdoaE&SoFdY6cnikh=P{G=#aV1+oG=9q{*tSlMP0!1`~YUZVOA_U&LsujKtBO~k%< z1u*9TZSvde4I-yIJi$`AX`mM5do)Rt!iboK>IPItQZ7dNi-E=gmUW5#<;Fu zaAml~^<(u;Ac2K^MCJ9+S;%Y10ZSxY{7;OT1cJSg;C{}Nir&Oo@R>%3P0(#Qg;p4E zXHWUi1{qbBmxcVmWgdg{66EfQ4=arKRB+JJ+fiNiUdx)>B-j_-jM$_Q66u_!6q&k~ ztD!QCh;y1SB^`Ceu{V|Vk$;vE0^z2967Xz~j+x4XKnOXh18)mq$tgVV8qGzE0h5Z0 z!}`Cyy(9+NBci%=Kxa--9F3#(nBa?>?T+sw@+jnD{3WH%=O^HY4~XS*OIEIQ&EW8v zkZBkdDT>us_xW4k+{@g>@r)lD#|>KxtG1m@B-et9(c%QWdixhmbq#P?)`T{@**Vy$ z#todeD5HQuWQ7^qDKA;JFhO7xkzthyz!}Q*9JLt#e)>(?7t?Y0-6QJUMI?qJ(*x>| z0ljqinA+UE2YkxKMFHntpdaRtH7f_d$nwVZ)P=TF{_Z@cs~hpqiqWnL@|QzJmI119 zLchf10Fe}PECbrCm`3VI-XU>MyF63Ski`-OBQ|l>7P%@NWkndOy%{xL4W1JrWV~jRFyxyH^i@HD6cTo$4<9%M zZ(ih}__LWC`^^F$_}oo{Lb6>TubWkhduoi?3UwnJ&>ACuOGB_t032rR6N=>*yr7B) zcUkPe;>7vWTvhnad?w*kSOvTG<*+yvGBb3qTPu+ODXJCWAr_*V!yn}tXe-vHVA)qh zCX-I;3!3hyS!R>o)WYNELpI6g1 zJ3jdXgrS}Yf( zC8;p!Hjo#(nlaoKCS#D(yiPCpjLp9cGfiKrA+%5m#JSr0=ISjz{MW^@Zh%<)#1-GK6%Kap&mzp z;U~LuivPB?@YtR!g$&`0=+ zoe%G4sM^fbx57YNL!EFodf8vT4gcuDQ7b&}4sl}TA$powF$Wp#xoT~Z(bgtUF_zzp z9$d(0aiD{6+wD72pLEde>2GSmSfp1?P;#^=u1;Snk_QyJ3AR<|&=LK&G$LRk_&UqJ zVbI`QvAaa*&XUHgfkN!&Oiq-!kAu;7sTaCLiGz4Y%W=UOYcca%{scq&y` z65qS7UQ8h5X|%e&==@kZ$>CyfBV6mI5y7Z>suCX%-KBB)f_N<8O;0Qt9qYGB=!v1d71|3vdl|s?@S+6 z!hdd=NSL?(Tip<{N+^3a3UVj!q8G3miOYC}sqO*_2F~k`MOU}kcC=kc@SXCbGHilT zjThnIj=MB}NeUyPhy*wR1i=$RpWhw>)@QjPV|*UOovforJo9L=(!Y#Eu}es-#ggfa zM4HY)y`18AkCNhfxgd=BJ7^MxJ;%rOZHDWpFD$_?W_4~N*jXBtaLDNUcrPw*gObW( z{$%jFt|t)@XF|aEtLZts+4641r!g3W6sQ-kKAOJ`yW$*M%2Q6}fAg^0&*bznwn+#yfEsigdRbPOM|@SiV#Tchwu#Jc(s7BxH+KZW}JiVc&U%J4V#zxgm>5`qA*}g~B zuE3h+LX@4>0JkN4e0po5fqQVV@uek3Gy)7hfi;v`7%#lF0fZ{s)^@x&ben| zIFSiq#O1&jijHmqY^foQnV}a0v8r*12bX{BTK`{na<(}s@%zxyuwI&J&($zKz~+~0 zomS`}UQRE|ET`4fk&Na$Bb3Ubx<>jMCXtO-A$0Zgy$MX=noeZ7c>n>-rK1MEI8*S6 zsvF1r`j49qPgxTBtiT3=yT0QSq}>Cg0el^>#g>Gke3bSo*VW`oki+gS91 zQbWAsiL*}NxNPA_Y$JO*2z3Dle7k60c9p&rPsN*C%YC+zh6k+iOfgo?P^WqqYLE6Z z&oLSdoj0|Jm*+;C`2Yo%64(cVE6kVz{ki;YlmpVc9=&{%>k+~cPAw-=`v1B@;Ak^; zMGbdthcLu$^N(}Af{vRkadO5H9$!VuN3r8<9R&PP(l`d0-9pA+6=9mMm_ z!ZcM!I;6Zv*$6r3OygRI%)rM6A-!1PXwr=OJQ|Zb|7o?k>^p&iiab1CFc9n)rvZZa zR~?8aUs-bOey0+kab^-|56z zf}oOW+!4U}!WwU$IDe_6wF?QDUOpVzwK^mV6dO0G{|dzFo@Ku#eSo@EZn^2N9M%=V zDI7Q-2qF_Mc)V=*qhE)y*VYyBB8YU-0dJVzyL*X9tVIP2Fuq!E)J_VxNnx(yaid?- zH|{kSxM1~wvs&#O^luaEov7q5FikBk=+jYb`89ko%6J_gku}TSuXuK96;h{Y1t1N&b@$tdPq7~~1{zN76J4c|uwI3nWK6L%)OB*<;E(^7vJ}RE>F#wek zMSO*rW!TKB-GEr-Gz4{S0n*!m=WlR8N4dDH*0t1Jt~o*K4<*940xd{sy=~@bGcP+5 zG?@EBAbhZu2DQ`z>!~57+*tYI$_lYh)twgFAEE)+DD-M5WHC(yH3Z8GF62TBrR8-? z@*}V6#KyPX_i!ochy%}HAI_HKO$O@es;iQvuS%=k?W*hJANV2-bQkX_qcM_#)byHW zqHxQ)&_m*#wd5|Bjyzxmy_B-%1TdyWlc6G~Mi7u)HBYSO@VzYCqHZ$h0(``hKj?|A zqFQWBbUY1FcHd~+EfF~rD)VBL|GIE1ksOrIe2=X3+nji^KjU%?(+e~!7U zjNVsOiZvzYa^AV4ByPE$f_jej6akFHL7{zz#JYszmHo4ldv|4%w&HlZ#)zBz{_=?E zf@pcph@171m=#9I1+vJROI`$iL1!nmYJi5;*~(D@uZ9bB6Xlx*5dO*cy( z*4N<59zH5Eeew1~{)fY5IWgMhMXdQ?XK;-(=AOA0DpwUr$>|B=;kCDIxd400664BS z9e@IFPHb&4gy4}Gw;@h6q_KOa<;0FX$5x7UmkwDA>UzD#4+zAK}0Z zI{m{o8JHFGxn(;SkQ6t`3sqQmVsl6<>(+`x1tyLH?(2yQOD^R$ zL+!fE92t%tRa{6I%>a5{qZn6>Xy7IFt9i}RNsai9Z-yV8sm8RU3d~M>L>ms!_7X!( zx-?`I&vtXY*8_q_m|?e9k^xeU8y%gXZ^#;Cq7u?K5u4J!KR#3bBAxo$I6#GAL7Aemytg9>iM9cz3)j?eIXaR+0 zKz`Kz4BCc4M&v@_*KoohDoRj=l*f8>$vYILd!~>ct-l#G zTk@RG5s$E=iXu)teJKLOJCVV0$EEO1AvkaDs+ys*)*i(L z=6k5_syn{9qTl~cvFM^Hi3BJ>jv{Olr*@^9ema(D63Q}|A;wBr&}W?&?D zEKxx>NvE8&d{UqJ^&uR+*u7AHRTFu z(r{i4bHQSmS@WHP@w)7q1wMq8cRB&MfP21=S$&e+nl3p`@20qT;0?!#Ag>cJ!7KAm zLEFUSZq2f{bIy>N)77WiCb1C{3BUQphd*vR7fuE{JTQUdZM}@FfX3}e2YOZ`zYiG# zJIT6KpD_N;4?I~~DH>-_BBMtA_`Pj)csEJa+X`Wga*|M>lhz->CsQXAMll}oRaMRw zb=((|6=#sEQ~kATaO^6@NXy+-@c03^s2}A{yl~eopJqa-7`~JF>g4;{!9e(*f{lVn zj@m`xoDr$uF~zR+tdA7p0BO`&!?SERIwOs*e1~uZe<*c${y<)Qo7~@2`{$$*Dqg-J~ zcsA}#>P|rX;?eJSi!N%1JFLBcCxr#p3Jh!4vr=^=SpeXM5rXe{9kGPE==iSqh7e|) zMllA__I-Orcemv4N@y4wiWxSB6m@a^#DQt`m90v^UlZ3$^cjWR8l5H{CyE$Qnh5fU zf5tTIbB2EwK*PG!(nz>~cmXjS#EE8**k-Z(^wK-T^-Lzc52}y~x`vuUl&GtEK#D#! zt|ACmP^pHPz0;mvvY-893%AUd3D7ucnj6w61ni${l8-&>Gz(NYSDNg%_(iH8kx4z8 z#5?jzoI}sqc#9juzoXnH?@i4z6)^(hRb-~gqr_geiJEgcl9IL_I+2$R^2)9OVo^yE zla8O%(Ead^zLzwZbl;8G!C8c15MvLdMDgAwS8|I_-Jt23vup;^ucO~WMy<3i|pu-qRjOIfq z%Me+3)YFarCg;?9{?beM;@Kf&DWAijItQAzRe~%EzgEZSDf=IUh8tZ-!L4Bm9ivHK z$a64Nku%zn>MD1vwP9d5|s^T5t%q9&0>T49b z)|kx|1*tY|q8R#9BR;Ug(QZEqcVVq!X;uK}gMKQX<*urFJsd;j{G#MIbbW#V3if%% zx?_>hz895;*qJ1iSfxvop5t` z6CWOpW4Y|NPKn48&X+U)!fd=v6~F=`YTWF4);rP@{l#>2971iAPWZ=35_lt{V<`f; z*Ey!-v{$r;)%oe!MZ8<Z1@?UIINo(@EdJ3q!ty_>ese+tq6dpsWzKNxl4i7! z1flO&2SRwqzimxoMv(rR3I3%|zp+hfuxO*O@%EqP$$U-QJmTB`w5wk;s z7~cfTak#UXw+#h`+S#`A#r0wmDd&vgVnqI8-PM|i8N5+?xE-*F<>XA9&{0U`cXL(= zKI54|fs|zEX?eSjG10JAx8V~HTS0*GN%{)2Z>UXa4tWdLPqJDmzmvad^`^!StJ_<| zg0c9l-MdwR&L#R4tui~(6f>!A-aqB$+D2_eOAx4V7PEA;G7j;I? zI7Yf&;vpp9kSu*8D-Tnu`C0{av z)6e9-jlt!tNV-Sqc15GaQ+MU!26ouiH52&68!zo7M5kS?aC*(@ee4tXB@@0S$R<`L zpKa6ple!XbON-zL=O8s}CiOG?^U`|q%>@}dK1Cik1yg61RDIA!>WCHTu;2RTY!!`AcAX#(Hjs0HmKPS|0o>GyHKfmarOAJ{7ulMG&fhdf~d^;UV{ z05s#JD45J4IPYTl@MR+|mDeycvtmL*tk2O(pn#a%AKL@Y-@FM1f3LZ{yOl(L$bo z>EXHl-doxU$JMJolw=qTfKihoR|X=&>x=5Nbf#%Ldw-HgI>ClH+w^>|a2MYi zo?c1T)5rz@@RMr(0{dQDtI#XWHiJ-6cMsmzJNG0GHoQ#z)082lBKhK2E=*VgrQo=c5v2 z{9bPgdB3Wwm>WNbp^n+U>0yTcg}14;VP}r%JzMD|!$B-bjg1UMbS(%GS*Wnp9WvZI;*@^e z$2O|SCJ<~GaN8uizuBjDym<*fMwj9jh-Q?0%8%KVpa|Ekepy;`xqm7PM<#Yoz^e3c z&QmRAtXH&lOKE~U(ozz8UX8e)#mTNNKs^5~fpEswq)hm`O-tc1JNU`0enwdsQVvih zHA!j^&os2(=iu-t3`*ppQNw`` za~ZkSXLmn_(TT1RnMBF9X6X>Ej$YRK!?UbT6n+tb4~B0{4lUUz=eB{HD=0h|9!W-8 zC?dd60N5X$b?q%C%GRA@!!)v=;HYYYgEV>+4&}IZp7LyDnVWq$RP_AvFh-rZ+ z2Bk!NJ;fm=C*dhMf97>Wailc0ryF`@tu5dot>CH_{-)}d~U+2MyoFPYHCdBqgH&z#3jTlq0RH&YAcf=quQ3lqbTA<2$f6QM)E>=0Zkg0Z2UXIKOA`pKMkm6i+f{fNTwZ_M1%d)B3sI zx$0%bm{W?nDP)Oj+h|P`@2Gj6DgW%NCh#z|+bnh}%i=&GAwC z#yc5^#__;kl>zXJoFv_3Ms{u(Q9GBe-YX{ATiN#x^8FY{#cu}7oWMN9q5Lm&46Hla zTAm6K#Lm?bK3Y{2LFPw`yuAT+b46dCwI~X#y5NM~$=JWZFT&b;=NeHf)90i73OirO z$N}F2LM_VOCdQ!1>nAXKV9-XJ$I;{^zR~o#QrS>kO+kV&vtslNfG8qb)fOTDVP?&& zkGQkYx90WC+JLD;jg;Iy!E>WyR24T^FwGoxbj+5*_D*58MCR)QF~vCr^@5tEzQvSShO@L0DTqQ%2EeP zGNfKhNR!1dr~k0wKiuSDge=(VQ~>MN678P zj^K5E{N~cOJfK6DG$6}Zu#AMsjrv$TDEaX`B9yjz>@@xNF_ZjVAa!Jt&w08Tj-bwe zm42=}+8#*7XgIZDBD&ErQN|GbxPf%>^dob#OP&6{2le-7=Bk#oMiPtAzNWjjz?zpd zl1Q#Dz>RcUZV>^F~ipwY0Zzwp$D5kHsgPyfToRPr6 z1e{LmZ|Ru+9>H$)yEk*93^(N-=1vuiR<+K}sdy2LS{N^&uXd^GWJ~6a^|(Br49WXE zxHXB2XI(c4HB;Vb;@D+5mKyQh*a-2wMfgDaF z#kROq6_h0Qc~Bu`K6_W5#))cZeQPM6CjH@Mhq^`R;xgd#<(i88-kJDyZc?}*g8b4p z!S^_QxczINqNCcZqrvhRSu$Cth(Fq=9Jh!Iy_|1u)CM%o}N~u9&_?r@E~kJ2$0L{)dR)7oO%z)*=EI1c^UW-kJy)IrLKJ5 z@flmld~%xFXT!t_C!9qq;ow{@Z5|@wq%Z&T=u8`dvuyCB+x;_&GXdv5XT-O5P!gt1 z8Ok|VA^+KND&vXgIZ%&n=63Yh$MiZfCQ6FPVqU4`%@f&QFG%O>7#5$%5N?ajf3|fP^NKRrhE6cA0@ZEvwvD@_lPK}prTNLDVCVj88srM8Wv|& zVIYi=WpJIEcx;5)tyg*p@-aDP{`f6~(eu<@Cv>b3>>O&|24O^quCYj~C+W0pICq6e zeiO7^<5MM#4hk(XGU+W$6jmTUIlLHUZ%EXdqpP-6`**wR$g6{h8MR(EI%g0e~>f#k(*Gam~6CWc0tLoq7#9sb;wPX0TcT)1&b2( z*+9&8?BueLeT z9-vCIP#75c0+C;wR~C|CaqrDSV{`nzjkTixNW_4)42*4q3BPf02}z)O<%f{)EJYp==8<`kn>=b5WExdwopXcZX zZAf^XmDG)|20+7(^%t%<2qaj!gF#D5GW4nW$6@e8b}bB*dgqzQQ8n<3n`d zU=EBwoJx_(39#A0fo-f;u(+YKPZ1`v;#q!KV;Xg~hh7gd@8@H?RxN~gP#Z;kMXl6T zu9m;v{jW0AN>&=u@3FteV3wh8jJk84SdAZLw*(mUbT@ zFk!^6BE9^F5DV$&6o{w^kwPy}V!)#hyw1A=H&akn=;?@gk2cAPFT@?Ab}oqZx{&LN z9tF_%*x4bP+`o&=&W48sl_gpzU`UD|q=pXc8Yx*XTqZt${?F7I>g)ktWN7$9Xh*^p z?%d9M1Ek7>t5lxa#D%jsk*z0hH!`F73iWMn829t4d(1UwSFBSovo0cK1}0w?P!eRh zlY>M7Rd>^7jYS}<+s?0^hT4MTx4gwNn4VeHx{3|gdp;+MgW6|%8V8l$0-{UeSG(cmWzD;hgb z`+>00;$k8^(8JHh?=c*#gR!7(|IR}`mXuR#mwn22(d`qdNN(1C8Qy3`hnLW$WBWHO z()8ns&MRnoEK)=2;pRemlXp;FmKSPqdhvMO$fCwC$H9f{1-ZRy4-(++#qx(2gU_1; zi>rctcH>h96-P&`9qT+USY*DHGM3g$(m(_Pbl%ze)H$!j9GxNX` zA{Ka)aR*Q+d__D+B(ZU#eZUrA7x1JN+dJDzXnpwqJP#+z1j^A7X_|-)0#Rnw6hy3r zBLOetKA%>f(o5vAeuf!vB|FIcc2q-0`3J<=Nu3F)w~dJf{eMcv0-AdEvXLX=uDf&i z{h&P&fE+IDHlT%^Ntv~wC_5Q-3F&M47Qk+OsA)D%2lY&B%sEmW+4HNC>=-94zcmVy zC1V2n;_w<6GeaAI`#6DGZxnVPT71d9q@D`3nBQqZs63QUa>u2L-a%Gl_R6XOvOr`( ztSzDn9(f;VZ_d9eb%QOEdk05UJfZ%w`Q3p4;a5Y=KR|_H^JS#LGZyP~1@G5GO%@hl zoO4hdFGfs`cYnmT(S*T2{SaQuiMivAR3D(G_-eNWh$AM(-~|xYv&4oDYPzAo!_pf) zq|1!g(}=iYW>v$8Q$UE9KH>gGT0WSy#NfgXqtFu z!gDcMDy+xJUZ)#_RNt0AjQob1(3T}|h(;8yj6%dXlDIr$M^bT^MR_AB_XpXRlHNWq7J(LvliGBzrP=XS_CKW+p52>_ZB+|Dx+q8qbeMxg*O zuA!JMNQ4bLA)O=Sv~#xQTp|UjN#+nuNm~cRzY|A%?t&I%gz56A zY9*2?&wX-+r6gwb8)#IRF=ZE!=RzZ>uZP~X3GW|b3ss<({1meR7naXZ>&-}e^`n1N zhD?r&k@7jhpsaZdFqDWmGwjT3)2qLM?{3eV-RI1SFrCPsxBWww=5;eR1OerN8=+Eg z{lBJKFM-q9wRi--W-n1R@smZ50WPJmS(D0O8lcF3Wt*!uxfgqvdqZPfY58S=PGqSmgXWL>Gfa)0i4Oj0^HL@}G} zbhM!9r)P(K3$lQ@-dIWtH)Qd*OWRwGQHFTfNO&_Md3@VP34a3|JHLz1{w+ax<|&g* z!&>`}eEp~#ZRKUb&RMByi*k`Guw7+=!M8LfX#cB#ADNm(o@a$CY7~pDnQkwIU+pSl zftzt^_G{%=RVh>PI91LnXQHu)f9L4E!aJ2PU(%T;e8v2L!N5y=>n?_=XqzYYqAUk+ znCdkRdY3$32Rz-+LY`^?NnE0p#xRoi5m^t_t0Fch{5e&wktI8KU5$`!=j0_DO^eF) zdt7QWp%4h_He;bLqrTLOo?2P;lQuIh1e2NYz3tFUm3l$EX{%+s6I;2cmze_Z>Jx&t zIoMqu6)m|rxO=!is?R9Tw{RHlQwD7=Ix!PhkJV1henMx~s? zPN1E&;L`g=xpY>~Dk76fk3{$G=WU5e5Wt@^gH@G?USOUZ+(*(Q!}(kPJHPoEVaG?c z7s;jaZ#3AO?yIoMd?m*&uRDuYmwTTplAg-*a@;Zga(Vl8NV(>cOsi2gId^!})5mn< zJxl?L(9s16~U5bkB!rx`7+>$4MDPqQ%y}l+$;ROd_P+t+Oh*SlcFo6KikVG^ zUQe|^Ax;XQ_Q*P@n&!WiN7GhOoo-F@8vt&?Hz>c*25`co%J85b*O?h%&@cZ>w z=o63|`XvSkpQuLak{k;`tMQ<>yJEVW+%)|fR6rqi@L6<^dN{{_eB8{8_30L3plY87 zZ)|tP1_c5`uXSN7#t%Jw;?24ZM+EBkF8>Z*;A4?JCW7LzsxYXl3EaA59=JKn@c{5`XvAU$yggov8OYrJV0D|()FWGC z3@Wvdsxn<6wkXm%np0&}r$YZ7F)U6~Av``rbmIEd%Nkc&e@=T;YhXi9raER!3P}0| zmz;0_vN~lng?GYif&HSJ#dGBKC%5LDn(^i7pNOH99efDNgrL#zcpXDjBx1507isLb z6a`05Z;XYyLy+_(RhxUPQVO>u!0rs)@c>PIFs*HSc%eF(``OZLa6FvQ>1b~BJH=Q1 zw5(VlxP(97Lj*;W|YI!cBbp8Xe+DY)zm&xs@Hg1$p3r?O`E9BC7bZNGNwQ(sXQqf6_gGk1?!LTDm2l$E`i5 zmx03|jnq5A&~fx0$^EerF)YYtcCNuqVAUIg)HCwtToqNb#;*e(rr{M!WFZI#5_X1X zIltoe-%FE|T zL7a)vHh7X}IEPwzx_H>)Na#Avx*ahIZAF=eS1v^d#yvev`i=Ur>5hA(ZB379T$>G* z-8w8dZfhdghbV)T+k`cbh(@ut7l`x`7E9a7SO%tCUWQ`y-ZZI{NW3neJAOCRv-f52 zeooiUv@L^x{oFFImi)7DKP{Mxu$V`+$wOdU37r;Qsk(O+8>mG0Us}b{FXYrTimB-h zyqSFCjv?XirxakX`To-U zIc5T!Ib4tisHSy=6T!xf@5v{(%WoUL1V9KF#3d&ma?JtLt?tp$N~_@U22GeX7~n2m zdxa|pL8I=GS96f(w0VeV1yzLWGU9SzvT97_iO;4XG7^c>&z)gfQdR&$Ny}qXpRz89 z)0KwCY8zTz zbe^*(ki9rFf|=sRlHz{L09F3vkI^2*h<$|7laJdN=s$JpeAYTqXX^vGfbD)GI8}n! zJW6SDTkZkU_agYeHn$Go;d@P(FKMh)dj6!Y%RFoLzQQAk%R)t3nAZ-uLJq?-ECGg9 z{&~n!MevsA#r=l|$C5AEBg3eiD<-SPy@do{wqrnGrq=DGa zkf4V=QmIMksD@CHgYTVFcPdVPRh-t!nB!M5H`Cgg|A>Vh5I8k_hx#$Hj)6~Ur9#pD z!vx|G=X+o+Jw=Ds7%|n2vrt3QLllIzCf=3nPj}tz-z@BUE}VvtB-<^!=K}9Mjef}B z_dvo$^<7M!>yaAtxg4CltLW~X@`iSLy=L<|gK`z)^@^Q4HklyGqU(~5iR2WYmH^UvdOM~BtvVI92#DIvK5TXG2O zPXsw^({}6D_qSpATVznTOrX~zZu`6NPX{1SSA6r(LveOnk(zQ`WqO0BlmZJnfpw5mg%z&d44vNI3e<*x zbHk4Z>Gx4boDHQ~(H9}Yz*o1TMVvL!wkSAMlj_s7Mo9npjNIRrT8cVYn zOBE;8w<$}mGY|0u>e*CS(tC2o#cl4o)AOBf&@~55ed=*f{4o!0?wF3ZBH!|gw_Qqg zlj7!@DNMBn`~Vh^>fML)8t{1QN zpjSPxVY*sGBxAjNxH>1rmY?)vY(rMH!&u3cyd z59N7RvI&js1pK5#j*h%R3$fb_&k~A|CdsVGO;zC0HFADwYHF6-yP5GLRx;sfF&^~7xm+OcU z=j?aidHs4Q&-{jfa{KxPU?l0h>Z3O#Sl<=dH?v8b^)*1|{Ykmja zVB$~NWGX5$#O0my1YsPN?h{fao4L{YT?@r>XmVrVb*klHl6F3Ajt_Itrlj5NKcu-o zP#8LQf$t5fxMy=NOkU%WFbi*?8p|okeNI4ZPJ86ka4?M9o^o2P(?F9uyCQG=^}0Rc zP41iUUKiJ(QZ(KCN?WDXhjBl|`l(J87;(M(b^RM8M)GySgC86*QXDXqMeCPk5L&xL zkFspo4>O$(@#z)@JW>^rkIo-k!pQE3^D|j{N7%*Wn^OYkY?J<|lq_o6^%!5$eoMLS zN;9e8U0{QK?2C(@DGVv%xC_M~Ajb?ms;P=f#nLI1@ZVI&pbm!+f9XawMfON4(3%m2 zlJg8B@llh)59Rs^=n-U&Y`~~f{Sr1pzr}69290yop8wlcrGbMXv)_#CZBQ^o`mn3D z-mq_>?pKlm635NVFe5e={wArs`m3!4hcC)Ul5!ynNq1yf>u{8O5!huH7L<#w5Ayz_ z{DA0S1p9|nc6bT^Z7EIY^b;5e`$zHFQk9vX_kx1te0pMt#Zd-kkr0bUI1+3(*LLlg z@sSnIrA@_#_SG|6V)Ha85YTnQMRKDn`;(S|;=CxOSMURFb$%*E_Q=fFuEHu~!MteD zRt7Wk0x%FI4qZy5TdgCp9&&y|qFRqgOtr;NjDT^co)IKN-@nc@u2qsMeTG{}GeWya zmPQHe$pnU@gmIRiui5|KRtbQjAY6K7%jO*&M3j87zmKz;;vmSQaWZ4Mf0k^!3v-39 zNd6GTb*W|7T%HX$G(9hEZzjYpm}+-F4Nt*ajN1(szy0y*xw9hIuH{F+n+uPAZFG6S zcu7VBTNjNpS%E%xss!3oi!@wOoANWn-W_PMN``^9^<{>$`?Q#0&o(0Kw;~fN&7yo@ z=1dfrkuZ~z{!w=MYdwApc+Ig1x(MOVg)n*EAHt3es6J{wui8(E? z0>ls9&E*<>B}Qxltn0oh*zSI54+EPX??{+7pOmZpV4Y&eYA|vgb$M14tJl-7QXLJN zqa;O!I12kliAA>V5^~N}MJ9%&lVF%pGG1W^#kq-lUu31LrRVUrLD)+82q-foy}5%Yd0if|I!1wa-Ru-?xOR1PGITt zr|gf<%yVR`gpKzGwc-;qA(b_!SV$a-5|U(da%Kn@74_}VfO52kYo22$e3NqtRh}fZ zU4B!YO*oEZOWoBGu{lS|a8Ir_qHDG0m|hfJ1Ut_p1tSM> zfdw%{6rwb(wq)f*=i1arnW$$u>F4fR^A$_>$AtWr`MwKY+%)CZtnR!LBV`aWv>sM; zrio5PtLRd_jR|b-G=bLu2fElq6Vr5`j+;-Rcanp%Qx9~o(tnZYo=|{yb3_8fEgnNb_m`Au8A@3DL-I-lbQrp_+YThxds3NiSrnKNpmyz4x(mWR* z<}#m{N4W{HUK&f)QcCVHkaWcl?U#NDD}K@`O|$AaInKLl33;K48P*8KQuj26tSE)_ zBt=0HzVk%qooIa4md@QW0%XnW6MNyg?$ipTv%|9u{0i`)AtZBzQC6#nYV_KI2xuH=bj* zr+q#+#{*yFYqHL~Ly*+;FtaSNb!?lE+~Js%6T?-Fv%V?Zrw};u9|9FZj>i&a9<3%o>c8Pm|Ze?Gc zft8vxcB>fExrd&zs-K>2Z z^ct%UG=eydlwgo$?aG1>B)zfgs!d5p(@X3x1w9EEn++?rlxxT}2wc)JV$NirN(8GJ zo^omV8cypG?VU7=8ipCT3SJNpnhZi#=8v6bUufCLfXwD|7-Z0*Su6BNs!92%&gN+H z(gn_bytcTOdobJ~3~9hV9SmJs!CH)b{$3<}D#=Ze65xDD`9h%_69Lz&C&mmljj&+u z*Tgt1kOUo9$L+z)!gn*q;xkvCDa*?7@E<^%@%aHh<40t`IaPr-ouhrY-_YC=3;s{- zH3nf2t6QnwF!i8TCz>EB?Gis})o+FO8Ol0Z(_1n7vyF^U=htLysI2LLYP!1w*7v^=rct>^C@7@sXdx_s9C z&YLtw(emf7=Y7u^`~WV8z`w=tJ%+zfoy`RwWeh_ zf_qcM?#>35|oE(oh7B)#h5+boHE!97A$X=ppjl-R6G(z1ddiQ+HwZ?&I)(_z}GMB zLfvy%p52&6)9!^M6D@<@6`O{+L22S@LlW{q1qyA>>Kl*_%>zw_3RB@CLIZflU}2i< z4@HBiibj{*q@*2U5mgCG%@CT*%}2aM0jQnxV-Sb=E+uI^BINwNF>ycwcRkaN8lH0rmV+VGJVGE? zy)C(O($~Ng*=$rUbXOb&jxi7|jsAQx(9Yj~l;P|@u+}L_hvS1gEAHioT}2bBr3&5f zQkK4)+iU1}y|`r&J*y1tF5PX}Q`#<`z6g53OQNM1>42>%l@1*YKu1!jtyF+&cl*%; zdPC@Wk(k4SPY=LZhDx{z5ISn~qZH*yqgnzSRdhA*1O$)vi*IAMoA`Jo((A*3li1sW zjk47no!=V8TlpjGgG0hi_RY-%N`ATVHpRiw)$$uM(sKHTlGJ3!4&LVxW`t>UOPWIU z2c`#{NJeR89O!KG?W0d9N@V#lw{-Z{MFk>DgX+zlb7rMvK-tOBaqldh~ zkMQ3j*^5YPe=|IVY)W3=&aYNaI3KvmoJpj7vfZO%5?)BdNpcQ128>YF&Y^BzP7XBF z!>!$-%DuVc)Ee-awC{8v#uco3{hQIhv=BM_NeHEN4KiJNR#I&VR!tYx7^P_W&nh+- z!r_X#fMD~S!MOv#Hf6e))eAI!1U`5EjOvQW7i+;l`-F+iDUlPoRRqiPJ~>>mXJ+fl z>=9%p9gBBFi*h|W5Z^h_#SsexD-03#L+Zd8$NEGS7NF9}F(8j#yZh+jGqj9Jsuw9B zDBJe%rq*hv(HHJ>=2GGL=)8XX@TFHsI!L=^7$uW&7nK7jbVfi52>9T%U)Kn-SxmXI z>>@TM#+6f|w};-`@0kVCtFGUY9pzwvc7l|%NAyW&X@TBG)V-B?{)LjG^lRqLi8h4X zwS0!rhTqj?haP>m*5+&Lb#>DHZ@=$1<28kWY#r*vtbf+2%#OeV-M&?rm>89PE5V1X zn)n01$S*u^cl9y3bB}3_MJT+0uU;lmC3DNKH2Nt0+nh8lK-)g1TaE7H@&&UN&tQ=P=?k=ZUIwXMjc(@IStJ2q;yl(gMQn&#=nyPAVdU!H z@xOExf)Mipp;TBvgMw9U$G4)hdWb#32i~LH)Q|^yF`Ncyv%qhB2F=c6dYD`nCw`LeNC!pv$-B0~W=uocJG5=^zicG^^tNpzJN<<( zsavU=ORWxqK{9v_mNN}PH#Ng=FWaw$u#}zr6s&(2@4(vUfPGmmJ zF-QYPgAXwwK;to`tAc>OaCVg4M*q5`Bv7m!i__x@vrTihC;_C%W*nM7a_P_U|E5X6 z*7?H)M-rw`ZNV{csqMau5-A~Oi?Ru@5w0F|&X_9bw@3Rl`gl83i&KP@2%a01QU zS=E`HD0*uSgbA*{b?^jUZtZD=cR44KhqZO5OE$w^R9zwD?~vs)75=}s)>Gzf0<6m4ZD^9Y2f%v`lUute9H>w#@Dn~fcSAAU{ox%!=(+Q;&}+TD(? z8U?=2beN$+wUq9~|7iRq`p)#Ii!|(`!5u$2qwq|=y`^rq_CRF}?|i^ksT(xTG{T!p zns1P!Ql>%1nw`!uQzg~AOFcQjr2Zz5^5UFS3F^8CzEhL%vnEA z(3j@{y^cVKW{xR01qAT#PAFIFDG@iyYM-TDyPcySL+p1MA!)tcY}?g=D6F+(x7T&d z*h6o`=vc)7`%{ppjF|-}`v8xX9(RUex=Mq?H>F`BMkq>`lxnD7?gMp5Ek)U}Qi{kYC?X=jnKjZ- zC)9({KX(dD2fr!o%rjiGPX2S74wOL}w#8tnKr(D;+hS{Kiov&x73%|s+Ppb)d-!*g zQ9sOhZU&7M&lVNv;aWN<6vYDa`uK`q-#n0Rp-Z5}qaXqEF5D%}i67TFM6Uq89d zxwM~OTDT)+UCtjTXt#uL++<@laj9H*oG6%_M)TDF=PqRZV zb8D7~M%Pp?23b^DKb)zn8bL`Z=jD9@BH|tIe|3y@GKy+gvPsoOvcfXB5A!=WY$t1l zE->kF2)b1?RoYzRQR>AH5N`ngKLEhhk?}>}g>JwEL%@4T6$VeWyOI8bXXVdl(7`L9 zOuP()d5yJOn?2OwRdY5&9`AjmOfu#df7+|hdCZa#l`jOspX(EKJ%iDx$3NZt5w#cZ z$EL+a0e+8V*QX5-zh1z)TpfY-ThY8T&HZoHgm*<1h9!1&OaLRnP% zn5oAV8)^weu=K|Yq4jG_;I>?ShFmIX!p?0usp6 z0$$oz@}BdI+Q}^iM7;H|Aj~~Y(g|bcvO4!Q#UxbmmN(6{zg{b1J=C9F3u0r&8;p)t zS!QJeC?^RtONuFjxIK0YBBMVk-fwG{FAu0G)H?;K$?}aIw#}3m>d1Ht+F0=BH|F59 z9n$EE6Xz~UfPq9ed3L{57U*La4!Xe$vnaVhi6O$oxlp0HjbZQA`qPSf*gIqz7#k^6 zRQJ(1s(OhAb&Ad9P<1UpVG0y+!!bjHr5Y85AN2vp32Jyq~YtUN?PD(+HjhJs2Ijh6JaZHjLpnD%{pb=aP}7UOs|StM%|?SXbZ(X^#eN0|++?{aU7S8#J*F-TDPApEF>rFj0;8Or z7WMms5Cac$DZ1_`aarR%DKO4Q>KY(o$CM@BuHA^gP<{dj#E;{Lq_wl5q!@Yc#5ih* zSb$>tFYwwkGh9%_pP~2fMNgeU3A^+qS85=Wl&s~F_<@iNO|G4PC~~OHJNT{Y0Q0_3 zVoIIsdQFI988ex*jkqRV2R$6Z+lO9WU6xZ>69c9A3R>_M_i|$6GNG66GL8@f7!rcF z5cW4&r%aG={JK1c#r*=EK0vu!`&#_4vTS$mu%r_gqLSfnTs8Kfv|-6?T{go0jRb<0 z2e3B{ClZxxwfl4(M4c?xHsF_U69?0L*kW+1UPWzV!s+RUpzBums97>ce`PiH3H#M7 zCJ@k(zVPC=nKGzA%ph2{PLpiHTd`plPJ+1cL`WtCSFs9L*;IDB7>m5aBOIH z4EE@O6OBARKx-qMC3~k6+B6^sf6Sxv&2J6lD7`WeeG+GerGp8;I4`q1_QhXezjS5r z8Ta8gw0^pV%?tCz0*{D?cUW_5>i?m(4`Xc5cFj!YR~X65+ITQp?^ejaRTjGg0pu*P zMiCCMWl;4tflgrb%U_!cQU3YIrrs2Zm>>YyX)wL@1aM)+yc5d_FFRKAVK$2tfA$-9 zO8OS0nBr^!m8rI-!j}b>%eS3CUQW)#V6q2}jX+E7Bhpyo4*Y8;TA z*EMC9t2@pT>hxzBiPqtRtySO*r>A|YLYgo`U3Pe;Q-uv3j_z8*Z*0a-H{y_Pa(`!v zx5BEZ0RYwRP|&q*Dpw>Q-#Udbj>sUy55iX7cqkhRGL8!Znwsn=N> ziayGyHdp~HcXiifjBt_*1W!ppkIeTgh`dJwQL+S`{sP`}oFTWgaIjFV9d1MXvBZUB z9m1vTv>XbA@N70jQ#qr)0UKkdr%hQf>ZdQV%}p-$X|0H295wMHVNZP+5o9xA^BFdm zM-~WOCBCAxhHtHi-yZaFw)aBn;r5=MPXY&hGnj38B7Yo3yFv!b_wu(6aM+922%)%pAquzMe3L>`1uyJwaK<;G!{j%MW>Q(6SuF9LL(=u_ax6+uu5Sn^NeCM z@*W}89s)-aC(u?%f*w1w4rK+uA7DUFWZQf3KkLN$*76C*Wjg;ZNP?v8z`Onq^q8qg zo4Tw8wqBs~E0mx@8HTy%%F}+0WhH|8NHk>*-tQL0lH*a(EgD7ULKKsbF8+0yuxi>n z;XkQJ;T(5*s*#_Vlrw6f;7(HTG{ZScJmFbkq6fKSH#&{)0V{ME#*Rt!3^yLDFlp$1 zMyrdQ9@dXiFTJa0t{wt}_{OPGeWiZipeK;)Om7#TzatrG1wcSckE@RNpwvQu0P4jdaizAnHpcdaCsj%ohXU!?u%L{?7q1mc z{^IrML48cQ`o+D%-?(=Ie!Fa`M7k6l0k`&y<4H@oh>znd{jHrhT|h3OuPNE#1J`vfnW3sXb=N%ag)YT57sC5ItW?FD^Z<~$Yyc;2 zK7$AISM7?Hj-D04N9$DFzGi0wgG#QiFm$TiZn139(}>;}R-w1LKAzL@W@;=G=Zm7j zISOrpMl_wW3`$=uPig1pYY+&o07DbkXm{kbgyUd8R_s-~B|~Gr#(7Vjg&>;joxek) z3?c!`S%{LdZeTZT(MuV7v;R5sJ4XEp%S%B;G$@=~G@1>lJ{qehUBYC*a9jYdOUxTN z&2Cd+cez8HF|%jaO#++FFjc)2j`b>#2-gW!;UUBvDAGj%GykK=l0agZLslg>Z!tF; z0zvjgJJyNFvtH99mk!FC7H(=x?U?oj_)d7M;pK0dR2+WT@QOZw2@JjJlpOf;Oq@;5 z@+|SdMIE+s^quwFvh6cRHpkzhx)x0a_h-!6F+ad0uQJyAGs}V-mX_Yujcf3|f2Sq3 zM>h_>013dmg1t%|e)hV0=DjQb#7&zSl3AHeutHs2rTrKGRu0VctBQ&~C=%4_^2>#$ zsC^36{i;F1(1Hb>aP9BibZ51H7*Ma)=;mO6%slHY%91=+UTFNk>8t!zfQGWj_N^vZ(o#bWw?zT zLI3=vKBd~c^d`6PbBGg+(ul)pw;MIG7n!Y1l9{fJ?J;E!u-AKeCX6Q0Z%&po*)hdP z;Fsx-bwONVvETR$_aE&+<3H)%VuqhMdp<9y*R7l}h(MNe?E~O3Q^)Y;oz-@z7MK(4 zX;A8kBq{72+}=rnS-qR1^~(gJ?BOtqE4q~vo*_=CJi^>0F{u6$EYuRijj`F+l_I?zymP{sP=p$Ep2o`fpoa@F_>f)X}Jr|Hn7JvI8o$^q#^)AVdHCq zPp?X(RE^}kn5^?dT>A63h)IVAwVUYS3xzE{sQ!fEH+?X8|$>5t3T^lk{ zdlB?}b%${astT2XS)xp%DaPIHU;nXUWd7$i5EkoRX3Ofz<yJh>EZ_Xz(y9mC%Pl<7MhC@fpe{COLE8=wQw3tqEM6k%I|31 z*#gsn*#T2FE_ACZPbXATht@jwn}?~49R{JHMsui3_G@^n1>SG`^B1`o0SIl=B4V%8 zo!l3))PR`Q17A^UUG8)(C?e!VrHmUfkM3nm1;ys21FM~OKoiT zu#E)EDXfgrWGc#Mb_L?Sr9dh3%A|;!d5lHTa7IZlCzC2pY@1OnS7KLuECjy&w)yjI z=6wSGsILNbWr(w5R*kraxI*JC%6Y|eZ60nJP|S`GJ+}A7l=>Ci^M3}gvTJ{{7@}rD z8ADdFAE5<%wFgP790BP38hOJ{KR;$v8QBmr3}Aukjd9d9wiSm_3e4SpKm9KOaY7gG zGNy$RQ>oBhO12u0W)sxwyHiBEpnX$FtnM;h=$N~EHQ0Ysw|Kk}gw zR=g0T&iKg1@;_@jp6xu;Uoq`9M3LP1-Wg~BoP2i&HGxkf3gAQ$-mL+8VL1khqC;%H zUCGkzTn%|B7>oXKIJ%aES_)`gqkDfgquA46F}|umEX1Q7VWVt!3)n;Y_vyp-!imlw zbk+7vkiAz0XV^zRJC!P7_}aUHMm&cC=K3xontn#;Xn8vIh2#vg>L}7B(Lm;R9GI7b zsDCau>AUTGP$Fg$^I$2(m~NSfUPAFO3$f&lJ-K7C4jh;lm38LZi{Q_jNEq#><40P0 za#oTAtq>D$S0N+thz!RE?{vbcOD7m5CkTl^vUS+`VliSgO)gZAUf3zNpTM~r(4p-; zt17o#{Xu?COQ_65&$V-zoTu2gSZyB99%bqYr%~BfO7}A__4k=xIwkcj9}WxW*IVOL z41U5=7vildDgx>i)3`@o&xW8I96!k;=qT)Ey+-5LG{=bLwNkH0wc%u_5-aVNP~nH8 zio9_+O*g0Pw>72*t0FJmraDcLIni}rK1eyng*Vv0NHV{>m+x?OLg*TpGUv4xyyK>i zxm=&PUhkPF%mg7(qz51pCV)k~@?zkG4)68eg%0J>@em!|<{pKw+C*EBQ2G18Gb#SuvQW_=vt&-+ok=c$M<)tsy>bvI7lqUB+jVK?hXEL)J;SU6}Vh_%n6znWwor|S6;Q7w?`KvGwR%%=j)@R?&G z?iCLX1kpgUvvB&!22f!Ey^=4ab>H$6s+>QYFpwLO7q^f6?73afXE*h{^p%Q$8W(cv zbT!q4t6g;1DFc-WoJe zgslIEL3b0esg-NR^T0tqNI?(rVSrubp7V%aTIvuy)Mwr~f%aIv9HZZlgdPq@M#)kD zV69TM2B08k!vg_+Ijp-JWv^wOu|Iyr5uJ@XAi8^^?H?6JiFqeNu4P{J49QAO46%zJ z@$U;uhJ#;zlzmH`>n}pQ!*OY?o0m|@FP0tyFd;$#9HB)dRaug3`bPuptbsY~*}_LO z&_bhOEF?!|*6U>V3!S`hI%!BjS#^CEJH})xV)aq-8!e$(lF7O3n8?o&Kt-=TyZ#XA zTh#Xoued|SrRbw`wTB0LnoW0ClB?54wwuZ!tk{P*aXRXc=D-Z!YadN5D!Pw6yffhl~1sX;_&xAsKXpykU>yG{x#H{T3C% zc|_hQX9}sKz~9~Bac=bIA5>JHPl~$PWMVrjX~@!Jx{VxlF6B~pvm6Y z0)7NxaS?|{`^Ia;MbKdr#3Q+EZDXTO_?omn7?o$4O|tj(PBYf5zDRZ858L~7t&5e5 z6i_Cb_C9Ne=Kjc1;P3ZYielWwwbQTu>(3WUyEKqJg&o6Zih&=qT45u{5HH2i+X;Z3 z!|(3isDo06_b)FFMuj_X_IM188Wo13@`C@&gI!FJ41(_XnU}cau6+8{>*Xmipk}tE zbu|(w%$7TBPr0j|=fN#@T?-+M5~tLD=dwr8MwTU%c569wUX&J*jqOy9OHTS^T`_}c zWJLdzi}HAsft2DBV%HdsftaKN)!TNUQYkcJ)p9I|b8%+hdq^?@iXHY?{;HqtfCn|H z5y;+f0sL3|AqGHa_uFFe!wqx*VmY6B^boS#b9DV01<=|XJ;?j7|HnhSKbz)@3}cDqcJz}c z1dzz9F}AK-@R8aa-LdXhsz!Y>hP?g0J(Is9IVQ%VSf`n z8olS_Hi!UI*ZiLSvRoH$x*gb~e83LOOksbPp!?0s2CjsFqgqLWtx>#Ogj_{tJS+(b z|I+vPLl9?c2wQKhLj^n4!8qH!LBoKh^{ZyUp4c_VnHSvFH|2n8i`bYcthD9@-Bi?A zfCsXV90X2)?wgEw!yt0C>6C+&M)0kL%vRgFKKC>G#^B2?v!x?_={ipm=ML#-y*KT2 z-rcgMcN3qLd(lDI4&8n-j&*-kl|WTF29~!G3U)IfIdtDV5LhSi7GPPq+~4)aN2$qU zKjAX@z&l^Eq43D&0(ikkM9;QsMob^YVIteZN$lW`BZ%(=C)arfZ{FMEN9N^UGAAyo zN*Ne*{em3I)ks@|JVXkz#-M}@0NL3UeQ!RhKfBN8 zs)jH|;Mj~si+|!=|K=AtX1M;?-$Ges%Q!~Bamxxp0*SvJDKUa$+TVC98LRTKi%W}S zIf9>c7+jb4+8<*Z`8VW{at+WaDM>4rfhNWG^%3M>Cx1RSE6YvBEnHGklwBZw9Qvpp zo&>`W|6CMi9LJMO&6Hxyr&2|3Dh|&!Tm;x0fW%Tf& zZu&x4eDr?qfaDyl?fDDhUTHmxw6j8w*}2u!xl0kq1VDd8j5qZBG1R$u#J%EO#hwys z-;Zjml*xP5YhC#y*TEhZU+i||24R%HUR=lL5q_`wRRKvEaf;fmd=%r3-wO2XeOnpGkHs;l zs*bUyyK}oPTe8msFa|A7W7Jq^H1KKv?{H@;a!EdflxI8-2Cz;Qda>qca`Gc?^7B)~ zNeyyDr>^`M@1K>-{$(A=43*eC2e{lx;+Dv(sA=Yx7|(%FhFSFpEc6|0x*8jEGoNJi`YrY2TSUdxI2UNomc>@i>$2vCjNeIE*_ z4F1~>O9Jhfow5iWuN`{wQ7&y5`x)c)mYK?s?MF1MX-{LA#HK2z^?}EegU7Df;m%RF z6pSS2lFHhwAsUz3aq$_Y2EG8uU#McONXxdDG^He&@KEBddQ)ZRy`i}Ehe!%L=IJ@| z(#?wyl^C1Paq9(E2dfcJ{8aY|^_ch5im++Kb>kim0rh5Q6?1%Dc+)RbB3%(_CL!t5 z(_6la-G`Px;s@Q!E?c$T5M{JYBBMYt_oX`59H?HH8_#C|6BBo$W>q>h@V2N~ zqXI5gf*b1B0<~v68I2fiI-y-W5Nm&uy9%Si)CH*;z&rqhB$@6x-%IYgpun=X`AUUN z1)3wwMzKFSb#{)JSWH+ctujdut+W8P;|Nz)De=PjZYQsOLend<9> z$_m*VpqA4tH__%CMxQL;PxT0J{l+tXT@R^bP~~>1 z(M8YTy=MZyCmdb2fr<>Gk^o?B(@Seq*LIBa^5bfdB|gbWzs$1V7%6qcgGxjh&q-7< z5#Z1ni3@a1sLWIu8bf|V2ws~{n59S$scBj;_INqdE+uFu!%aEkIB*=b5m|L+A?;H<)g2pim4MH*=G2 z&Fx6@kKrin-EA=rA=xOxM@XO3hl1eFTr#3n8DjQs=gLzlokdjrC8LE#vGNYVMHdL{_7VI2OtnLL$ZzRd&GI`T_tJn)}nMZCnBfES*r4=i!eWe_V zJsrM1?<}eleFprBwfGy#GmZSubT0GflADPgVgutkjR{#}s_C)`$^)l^p;8VPjW5*X zU&zs=qq$V#e7;~TxQwVzB_${l27u*OM|j*VTG`G!(HK?b7obcJaLxW2cx#F+nO~hH zfZhT(8NmRm-xzxcv{8<&$>V0AtwX4qYKR()N`Wu#%evIXFX^-6)^F@NzYVit6D+=Q ztLGG!`I(Ee6xnFC38X&T%O<$kvZ&)MIx#O z%gEvkxmlZGY74QUB==ixl8==&jamcm+*tioHpd^Bk^wDjHKaK}@Zcv|>R!$v^kK5| zkU|r0`p{-W4=%sU4?mhYT5RH%?aD+(U{!v>J>b~gxMz73}v54-bwBXOb7Ditaq ze9m?k|LRL(R+d6?*a~0}8Izb9O)S+meghhN8=IblH`l)u9)UAY>L4`P_|pwtePI>7 zB>>PKEbe(5GIB75^m1H~W!Pn8CK0r0mo}ZM$Ac`8sPHS5;uY0V0%J>}eLdN6M0nSzaT+ zwx(=O??P}pBRxt}y#YHMZ}P$ZS8MXsErf&bhAI|MARb2mDcAXr5Z*iRf8ygUIW^T$ z*bO+?-0CGOB_)8lLHmIop2w0HM0j7m+WICBZ15o~ZeZ=}eg>6o1LIqs163z}oy6%- zn!|rrm_TAtZuU@PL(Zo{qYa^I!or45vd5*lJ~@G0E46#|Xbdi8WR(33Gd)RMgr_Ka zqyxSde-Y-bE`}1L88JltCCw`hK$3!2384hMYjOi_n;)(t?e(Db*JaHBDGiw>e?sCU zn?!o6G9^#&y1avkiiwx7n%WuUdOg6|BA#UJkgQEqZEXkz=yv5|K5A%&{7zRY zIM>a8{Ueqv{%iR=9MjtlMm^(7$XxseP<8>~pzvxVU4f2~#%mz=m3Fo>w>+6bzK5oQP=#;dncH3ua~~w$h|SnKUCZ(9D`CgtYXyJ5C#?EpLWk zhC@833@}2Q6sjeD2G-!CFac4NbI|aWJ7UFYIXLZ0#1pD17~8UF@NCRkU+0ye~@?f`BmuD zU?(91I+?s$FNQrV&#Hn+b)@>J4KmvgHlQ?D!}cT%yW}PBTaCok^&&Vsg|==o4-yb+ zqfv)KJdm*8cntKedOL+{n9gSVL2Q0vmP?>^y0|V8;;0nLtE*G^3+l;*0xnWc-?^E8?rsVs}Czd*+ZJPUDPy#}zxNs^y5h*IBS@MxyYNt6gAO1q3uF z;^X5O8$!}Hkv+=?M&9!V#jK=Yjm1y>?*)yVco?mZUCRe-1cKUNSAhMj4rr@ZB?1No zg%jlDj_5&ATy0gBUztK$nTm}XX5~(D-qc4JL~!YW)PHeQ7ZuTVNEY8%?B_~d;az`7 zX_>A8t$18v4w5-uOkikWFcG7Ja`@oD&YAXNC6#pj{74bQnjpcaBO0flLw^pa1Z84e zZd|2}Er)3de|-n-GWs$Aml0nr!m_v-IqP(Sje+GwLSQbZHWAXbp_U%(APFV3?M^X! zF4CgbKZy$!qzI?(5pZc>fg2u+VaBON`fo3rH%iFRz+FYbF-m$L+A2fAL~EFxkiwQ9 zN=ul&j#XtZHgs*dSYR|Y^|FG zhw9P9kjMB-rDwDSDU5L8oLm0&7y#>EpaH^|HMDzal<#v`v+Wq?V8TzFjiCd!1Qtg` z@aGMp@ipo+Vjv`9S-zh;!Y*w0Hpq!c6c56?AlY?dcyRo)2AMgHK9M&R!_X1TcL6Xa zL;6{Oy%FLfgI_`aHo@HHp_zaN9tBoy7mseTK19sYU{GYmN~RpWJ-8OoK%=7#cY-K) zJdO(wp*{BQRl#jseLk?O7X^ zr;h7UV#Z-Yf?s4NnKwzeu=9s>i**ecbR;1}6bz=uOjU>f2OP>_@v0Xj56HyuWk7)Cklkiv$+hLu2E%Dy zK75n!g*S0WB2tQZSfkH!oSNt@E3&~(b3`bU7Q18y&_17G~w8qt9Ox$GRwj@?0LU47Qr9z*TzKa=^oO6@}jpzc3?Se7dn+9~F z&<4>F!RdMuJQm{bAp=n zB$_N=%FfRI=|>5U4!SO0z|5mDf6LfX??1=tW(q|_Zg6u$zxz>--53)x;~KO?f@?gp zLZ8$?|MPqtZIoeVUIXL7MIn=qNZM+*zi$tt@eu4W!ndP5JAg?p^)gtq3F-{2`4I4F z^V8+KzJ5l1h$QLOpxrj5BQ}(j?Zvhw^jr3vciL5zP>{A$sv00a*ondQ1iu>|M~SeB z%^++R5<3{(5{`uf)a|E3=a?~H{_bh8E9c=1qqT&wmdxBdzQb-;wGG3mjKv>J!G!M; zF3=9i!MJThT$l+k9A;Nv^6vx@G>E2zOUHCwZ=eF)mh)Hbh3%rEP}xb}+-+zcy)3B? z<~DH{#gm?6%dy$Y0#|>grBHOmTaND}R7aCvBV$tr1`PZCVhzztI5~bgI9(6D_f?i+ zZ0$AM*(OZoSr`fu*@P7y0kZ_YJ9?sf%xYMP1@K z-;-R1Y3}h1!^dk+mpXyj*hEu#+?WUq#>9B>$+2z-D`j_H+_e+`XXm|~Z5P0Gv-PYi ztdHd$uvP6?nGh zRvOn8?zF_*gneUN-D>S`XabjOQu2GKXV2zPX(;y0DKpkQDwNLq#Jx!NyZ3x$pZQ)l znwF*#Jn#=B|7oZjiK=L(`J3%op2e)5=iKs&$D9*l=g1mdet^CHuV*zEL-B7B2(?fN zMUPVn@;!lZoFI(~5W#JD{h2YoaIA9CPQJJdhmeDpoUL+ajf9?M!aW<^VtE4{Lqd5JJL6eJ`WY*lfNI&<1`q z$vcIrKD=!STSN@Z_|?+ZV>tw~QV!})XAzHi@ZZ`IG$&y+*tA{lItJ0(otj}C`Sr^n z=H_fRno_r@Y?5kqxId@GoM=aj1(b*MUs5=_Oe3=3l)^8PLwVDuuh=*~&6pt*Tt-+i zM$Y5`L%`O*>CAW}6OX~MI$3R#*r*)#@ASI#pt|=-9p(gW?0%zj{=+9cjl$g*bLE{X zho3dZoQ4w%wuTXL)=fPKdKMw??-CwiC7D6_9YUug0F@zSL^m zn|OONFF^DZg+f?_&TSx!sr#2uYvh|Lkyvy=q&|Hqj8|ckp57$h)BsFJmkB{&E7=`` z8RK|!MGv~7Ueql5Svn84;`2Gl|48>)YcEq$ zucm@uz*zMoG>-bX>1W89$Mvf-82_)PX_}K|qdPrbRnD1>5L0PK^f~0}jxp5~?Ex5p z`2ca9=gk-vhLfXr^RM5MQouYH?!pcC<^4IGfS}M$A;r$n!oO*aIl>zOnz^$ScWb^80L7qb$DuFbiIPSIpt7=Y@SFNrAC12PBj`W>n6{)kEp{J~e z;SeH9-(fP;H?^Q7EKv!BjHs0Lv>J1jAvu!yN3R<^I<`Wx-$zG;G?g57^Tv3fQmF7G zp-epBzK;M;FNy#`al6OyaWeeq@4QeScTV&KBDO2Tn*kss775*h?Wxq7b6Q{$lf1daM;08h(7(7JGc#>8XlnZ&XT1`K7_V%2Pavk$XjX$)pz z>2v5@aw8i6M+xZy8900@;s!4#pvVDQk8oKSAbe2M=sNtNBhcd7m|sRHszE$G-I3O0 zlTd`U6O#o`k3sE=0O>&8vhGM(tT!)y>LW#7TCQ`z(aow`F!V5wnG%Ns+J)PuNkN#rm)Nl zp;B2E483=6KA!sjIOuH^kUyufyKz>RjTn5#HbL$C_O1*?wp2M0*^{G9KN)%?+>f4I zPTTsq}^KOZ1W=QnOQ>;nq ze$uWin+r6>;nKclTUk39DN+mvo#$l-7wE>GpM&|KKGzh&tnzLF$zM;sX?f{7A!Cjz zu6~!xEZz?1MphaZbBS2D{mRmob7G~^z{-U zV(we1&i1de0vmas%4m8R*jduW$5VABoGd8oQ!6YrFMChdrC@o^nqYSzJ<5+7LwexQ>JY(6aqEs zf)ix#tIxl+0kD$+(_sz+y@=GAzO>J7I6Uu+B5t~6d70=u4o8GY;rVps8typ^=jR@g z|0q;@H>q#LetNv8GF-~mS$N@d@uQ@)Do|;MDgv~NK!0Wn)pTtFdYHrE8cte!}o&RTrk?&of6=t{)^>Zx|^!ldvg z>1ZE5Vgnk?ru!a~TBe`*Cd1>PWM^*m1U13A&;1Vp4Li*Q^vJQfkQQ;~cDSw3^3_8~ z@A;RYy2(m+FEauSCb=SvYE9kXA$-kG<+wFPKlWFUvyY0}B!}PiRN8bl?QXC{RA+?2 zAPMs~7PbzI%js(KRet~SCCE}&QT3tkj=azv7Uf0*QB!|B=6b%H4c+3uuMh)*dj-O)9!#_{-$$|uyI$qeT zi^|#yq619LrsPG82z=EQ;Ueb>(R-;GJPF7r6gWs&@rxK@vy~otXNyFlIk>1G1=ql_ z!mC1X+$9K>Vuv7dK*S?$09}~IBQJaTi=SE-dBz(0-kfHAOTwDAYs!nwOn)t^(dEd~#7 zI#_+^^$_6+Sr8%)-Si2zCg`5QgWjI^V>o1;76xRianj) z-J3(klt4W#D8epfPzWfseag1V{zpF2-s)I27sa0n4-<;Ni(i|vEL8LagO8o+h0#vf z!L_zY5#CN(y>b=UgMD4WIog#ODz(Gu=ib^QbgacmN#V8&aJT0W>Stl2xTm7;F}a;S zRL$;yDQ|BEZ+4pNg)o)!9e3QXh(vf{lsm2AOmoKksA$dTYL=uU&ogWk;^iS{7$67o!^(w?t_Qyba9mKD z7%7mKkPQ}6dYHM12Yedms6n)U;q@^km}?UX`$-7bkqdvgFDdH~_mA%}X~>K&0fWxa zRk<%jNB3Vj%{ow6YJ|LvX!$Qp%FD#SmJ9>N`f7KS5YuMg1^*%^z_A!1%7v&Y_|Upa zw(2pM+?@xzo*ZT!xixUpFDfNvBd@*pL%m)mu|}D&e_$tXBsCLD2Nhuhe8`Az(dEu+ zVGx(ODl|C2GYg!~s>-QJXvPh{dA~u6-`}P0^bs1P{G%^vf0;6_2HpfHZrS2&4V5p9 zlvpBt^__YXGmL+(TW!zQk5TLY#%^e(;$%{>4Top=GLx~`g6;}gGmAtpVmk6N!Ocgq zlx)$s0c$86yf}g)bn4%<-^6nMP)r0~Slr4C>Kj1GVn_FePX%Pe$R%&g2HskGb}Q4seByc2#uL+k}=IPs~~^os*ihK|;~#Sg%pJUY<;U9oZY#CigkCNRsJ zdy>u%L>dk8rBnRZh&?LD44{}WNJz6tLJuBY8F4jJuDe;_Bh9=;;1>fMOHjp!=NE&< z0&qkfwqAIbl>}KgN}u5jlCuA|_@!RsW5*A2g93de+B7!DW}_OImSfl^HZ99uq7>*5 z`2}lE^6(k+V_p_Y28wsWF+{fofcFsM64Z(2y$n4*(2hs^%7@N8&voN$eV$uO19O)B z%h3u|H7e{G_yG}Opuz;TFqnH)x0pll|9KI}To8NWKQnvc7}#sg(}r_LX4SbWY9rpx zb{Miv@;iqvpxV0keBi*4b|&;{rj=kjq;wlcsNoItA-eUcZ)aamOiW*Nm5C9QpEiLc zIob8sQt-bYEBnxZScYX2qew6-ON;>n>wx z(%w<|6lS6rJk0t)9@Z@IwoD&mCu)xpDTZJBA6 zLNa?!0OxuU=b&vQzNa6C(f#~@b-VL>Kta3;oP#{p+`u0h5w&QP!Wsc*c??0^ZYIH6 zr!14Cdtj%ZXavY9mZK>&D7Wef!H8_dQ2k%0G(uVVrDfX3jVBcj*m39cJIvdll8JnA z7Uk_WG~DxcC$sNHu^y7P@;@2zX-9Dj>XAJq;75UIS4>006zaCkkXABzI9v)kG9Jk0 zNV8FK&xw8MYZ&XAp4OQ9og&lYjK8S;O}q$Zw^baVmKq2yc4R|VqQQ61WEKWIm zkE!xTXUq3Gzvtslo}cNUE!Q|&)RyM>sZi$kJ|y4H{n~%B|3?&9E!>Tf?yPXPtvJyg zR_NoSmyW69G|pd}*wo1jdsbc{re3%`wx;D|7O#+ct0h9Q$Y5HnuvJ|t^ExQPnytLw zVOclsRc#kX+Js#}1ol6~K?!YBTFHyf$xg5N3&%HT(^5XZl_X_FbS2(}_MAzM!7A<3 zK@<^x9<^Tey2IpR_o%nMI@s=-B+qVQ&6hOj$$jHVXl!uGmj8m2zPj)xW^{Fywogf{ z7O1lxjk;0va>2C3lK$V!?U~!TwjtR+Y+RlSjH+HpiFW<847>Q9i(1V`Vt(@z>uw1J zrvV?sw@FhnUU5~W*9IBlTabX&FYhHSi^fqEvC`7wRs7b8>|}_7QHt#>?9)93JlfMl zD|Mzh7$9eVVdjKgR$L#NHn9YT>xsE-ze%5BIaL)n>d}OL*`V+6h-II}%#h5tT??BK zz*&(@qbBv-N5NWBW%%ihc4twVKrj{<;(dt5K15^rpf3T8qhR5*Wvzmq)kq9YMU!?OgE-vbM?Q@h7#;#W^aa^iE=t(Y&; zB`LZDT0_(Ax0e~$G|sLuH^22;G6Ii>JM|+|rsCixjN+Y$pSH!S2@3P+TV(q&&)z?w zo#}yRUZg05;@EZkg4r!@t(2L%Tw@7ah8YdKm|NI7h??>xF8W-=Ha_0cFmvA;to$7x zo(UX76s^w4xBSdr$pwLBAZrvi35{iOlV(_m?0M@YL8NscwQTYs4`Sw3h>hH4{~A3) zn3E)gq*k8D8oWXp^Qfy=!dBh#3+k@OB2le0^&(c-<$X|GP%@;--U1WXf4PL z3T0>`spsY1G9FOi-{zVxDA3GBuo*f-DZ zff8bgj#l+6g(%|4Z>5yDW_d)j9=(lGo6|L9C=cG_KK?i`cG_s!bv?(DE4kIE7nHbX zuTnb;2=BnBNq*lxJKYM2Z5s@R=R;m8bnQ9(RQ}&h zr`4`_u$C~R<@tC^CehASPfm!ugWv7$9cwNMGt@yi zfg#QJqp1tf;GIhPPblnZu2E*ZlID1m>|o<-AqPLgeL306`Epux6N4dfhf)80kVGPr zbMHNM*YHoJ-!3a}M6>_CW$5FT`6fy4LxJ?3x7n8s^=ZW97|t#^wMlx=KgNSSUuUcQ z#bw+&7ZYf@@a%+rE@)V9x3CAJaV;gtckEBMRf_^24~K9#CnPOqK3$NJgl1fGh=@>L zNqikTOxHt_cpx?60lCSUAR5yiupHRG%mx4u{+NvT`U1~u+r44y>9%j3T{LR0qG61r zS!ein@o8|)>}8qv&gdBczhjIw4X0Y*1HpzW(2<4CTiJsr%v8d^dhP0uYL=0 z7rRM}yf*<5->es-dfzz9RUz)~ZW!*a+0q~w73O~g@P%4(_kxt|sD3g=umy||?OT}@ zmSL~S3UV0japMyL$p)ibI!(ZIDCmtzF*r`J{u@+-xTZpl~Pl%RSwA(+-qu7htY5UOBbn1iP2e7-3 zXc>yAf=_~f!Nb!{PFrCOdyCeaAKXJVn-YlQl*2<;8}%azn%FU*W6rdgkW9I@*H{{G z-O_4LmRBAOj~Ow7t08SdXM@l3JF0w1T#8xQd+~CsuQ0UOlvl0&ASrNiw#<5mv|l48 zaP%UUC%o1ON!yUxuYZc|I3VFL0t91@=yEluIPG9@#i7F@t#vajycze;ww$@2wy}C* zZ)u`_@Z-FLc~j$>%h3t?Pka+Hu3nc;o^b&GKLEhE>YwNkC?dPEsQ$+)5y6o4Cedj1 ze|c*ySdWU%HPEdSdHM@|GH22ND~)>n6-qPMRz9AdIGLE(+FNYgB=u|&hdmhmn0geU z@wdk#yc|J2)ZDa@(VKl6B3BYC{VDAW%vRU3-QD+P;m-a)qr87FU3kH-E)&? zO0iV8kQUKhhtxBDq-a`*qC2r`a4LZvNs{TQ2X34b? zu9&>jYIGrINa6&+TBdG>YAM&j5FuX{oH_rCe`9hHVGv*oH;g0VEShE#d5Q}Js5+1w z#kvtfTvr~JSYc?Aif{h34*6bq6%U_W&{;yssk8NZmb1`8Ri2G<~D^U!CAWbf) z4?c=6fcqB7agRK!S~6(cg_oK9u_9@ zGuUdG5E9sxGcUKpI4_-rts_J5N$sC~&&P1N<;jJlI>dSfM+NVW28Vu(qD0nX-{k`C z&bkK~|Flo6=Lg;c`=}lAaMqb8%d}0m;Zbkzc%E0Xh)&S{Ud)-uKd2~ z;0u9?+0;iE=BdO9G=^5pVh9pJpiYx&_4O!~EnWq+omR~DX6D^a!RWg7i6NNdeBld5wV%mBoT=$4kP*td0k z{MES@tsizb65OrmO}C}I)fZVN*m(M1%*Kv!4~*FAGTV|DJ7%K z$!*FGJvj*|9j|GTPFT=zB_J}wI6;WxQ^cPbuZDkZ!qx@j8=WdxgCQipCr zP@!#}9FNs@0*-@z9B62Q)EfM%Vo1l^D^4wYlh$FYj*7261bSxv!0 zR~Xaku{RFIA+vaBc$KreafXKUZ(Ik`J4E1gKbVQ6!xmKGr3wEIl-ZRU6p7sM>E?P6 z4#UXtgCp=S>Sbu#LJXL#4JI3(m zv)3<4Rv{yaOsjqun*@YEX39~-Yo%qCtsU}s)45~ocrne0v2+`(^c)@GyS2UF+Mx^~ zN?Z8cpmPzoe(C&~i@S-Fd%&EfFBEE*^=lP2H~ha(S3S|tXk&X7~g|M#H?YClSHgQrLTD&ch45tn@p-i)4n+(N({eKbNJ>}{sV5C-nC zam6%@F&cVt1p(}J8>uNHq$zFA-$&uCX{(Q&pL?UL4|YhAT#2PbdzjuLT-_{ly80VkZFOE6 zR%0ax6Kr#)pJ;vR-yA&)#rjINzFs$Qi@Q^EWC5%6YnO#*B)Re0tF_V58I6+d(bTCO zNlu=Z!E`US)7fOfZV)xz2a@P(P`|t$3r@9{C#A`?aK3GQfu<+tb!#{w*$MV2sL4JV zto$Hil%ikg0P9r3#d-7N0WjXZEkyRhC|D-rb{G@lFdt^SWa(_R28RTd$04co)jwL5 zy0F*-a(GSUf;j=p7bqgQJQWA!b;qFnIaw!lGF)%PbZ-XrdkYOW$M}}-B%-67P=)~i zyYo4vFYaxicUh6l)&Am; zNIKGBDoKp>zm1c}Ubl03aSOrQwmyq<->pn#qt0?i`WP{H__tU?q+aEl3}3ypy> z0JzSJm3WcvblxUOL*`blh9AwY0e}}z8b?g=j%xIH^e!~;&OfkOo;1)@9>=toHm?tn zu6L9k02%Xv+XWpppPbWjQ_+$~~?;n^V*z~C#>N5BD0vS8wbxdM7l9jbM$UXeViGRFqIp6pqCixaE5&JPxT)#*wDBTco+;M)2Ax zS+qjeal2l}S2l2%Yii~5t9w>!yEA?Mixl_(yM5g+f{T)-$EU0_FjhT?(r_eq-Hbli z_My4o>v zXwo_6%vpw?+cX&4_ei~+V~y-85^d)Q#OzZ}OI0(Z@fTS-zVCPsl z8FJY_ToE$`&<54?m*-3}6CuGk{6+3$wO{=t>Rx@GCH{Kq5i$LZVdo0oKtpFtiuSV~ zqCv#A%%7$;+bzi#&yBKBmT-K+|7o+b79SvYw}0hnBdy{k04~c`eGT4B@-4>>*!4hg zKyG)etm1M!=^i7buJ&fKfCh}*@0E|ESSE=|3yVzkJ%Z*&9mPNVI`AFqy+c2Bp^4&_ z$oi&JuX`>k4Wbb(RO8MYP$9ippx-{%GI)w03vRp|VCbLV8%9}Pvg2y40E1@;EH5pg|J?e!yt56 z>@Ub?6VpKza*$srbFss}QE^hw)*#PL7a^$N+|iGtv4>o-Cn+=ntVQqYw#QGR+w2GP z;>X}?W1`iud{BBEbA3P-b;@!a;Zd!?&yez}m!zuT z8jwXQE*(fWx0$y_AjeRvFBOA0Sf9W{nVfX@v9dpnQ%3ZN z3=1D^QrTIW zoz1s>C>xT^BMuo15@A@$A(%Qs_ps04W75v*!a>1FU z3V>)Q1r-m_BjMiu3$t@p9Q$s<;Cb59+qFxhXsJ+5M$cyW%pQ7$^t$=seG@8RWkv#3 zw-ex9m;r4~gqpoxDAz1s-7^I%F&Z{eT)BjovL+u5# zk`8i>{U(_yl`>IzUK1tEUYh;LoHD~PAAsWKu;mH+OTTY`GtlC5@I$M$S6@f`8IF%f zLgemsgMkqfjVN_AS!Y$r_7D%GA%ngK0AAcb$E5&nm?vZI-e*j{ajwG}7>2(e&K5UN zv;2}fWoI|yF^50)O|3%_%W76o4cDc{{H8?BOr2`|DO0NO+K|f1=FR^DAFSHQeXN>q z3~u#8@is#w#@u+=@8A|=St|{PT%o_H7gXw3X&yL{Fw7u%5$eWAs7skg>=JWN9X7I? zUO(nM&EmU@4}hFTaDtnZU^y5^lR7d$``L=WW!N<)2CTb`Ok#;yC56*ZA_bNznQ8P$ z$bA0rws0!9`A+O_IQP+8q;(rqv&16JdGzb*c8g}COFmevSks${n7P@~q$c7vY?2~q zXM65pp21Cl1XolJ!>;GnTJ$IdlyQHXG6JL%P#AEbG=Bk(qNshU?XTcD z92}cCLZOzEpaKg6~EP_YltS!0rWnrC!k~Pe56AWoPMa!SG~E}hlooKH3#6himLGol7Cv~B`ys-2N()rY&~|yy9*23o9zJyh?N|xjKH=K&Nn_N=_xh|7N!W%JWen${T+vRMZfu?K1) z_P4xBOG=5rv3+T`QedP7t2YILuMIZ)UjQ!3TBQesbO$jtMTvacP_o?QNuWgPd1Usz zG36dK?;yvr@Y0Y2BcgS@YfYoNQrC(||1uczyTbFn;R&6QXNQqO^3$MGBhc4waf=%M zAtSfxIH|iUA3z90V_QVW(z?{QchKyT86bWKw2@lBIq3pYy#^ea5YT-+?BSlDrgaVU z6=`YuAjLak(Q(FLL6RXe`~4}%tc-a*q0$-UmXA0;OpSu4fO%cMB3X+th%HuvK=LOZ zPsAXxxXIsA!~)r+)p16lv@f!JTPN7OY%R09Fnt$f+w&wDnN0eIXMK)`WsqF7^RCj2 z8Vn-7M<3py$MUT>5fSI#z7Ro{M&y|7F0|nOx~wuakUY1vlo#kR+ZT`P{tiC4I9ZY( zt-9tJKpN+75qvyBiP<~-@T)y>NtZ?re|M`>qM{0TE+IF{frjAMs1>Pyq==p6O^AFN zo!%bvL&pPblCi}kL)!;hH_U?}Y;Lkp8BDyB?9h&mU$mAWwF772oS^yDCDJ#Zt>O6+ z^2#Yos}DhA{Y_1V?x&W*R47#kTEG;JbZE0?6(=c82@MUeVqB!~Ho4O;ShUU0u@t$x1cY zBJE*>WnwvCe{6N>l56X(AtVDOm2bz+1;0~g(e}kDM~>Cwr;h$Y^#-xmbzPgU>%S&nJcDc17PB3SWU7+w518R9!Ty)a9iK_S&wUqonnWV$RW&J z$Rc#)*k4!rS1HG8rrA&#votSjsUihFpYAJ(Kg7m-^A_K@Wj&{CH9j*6>rnmK&&(qJ zG9aQXP?U@`e>m$HRZk~&+(T^zb`Z8~z?(ud){&7ai<8;~<tllw~kH}$Nj)C*D9 zAMurt5@a$S9*pWoOG`Y%IUlk$x~xK4sMvCD%kTo5K;Z`yTUUag^XS$BxfOl% z(Gs9Wrilf`MzC_YU(V-DXvr+7iIZp_e-Q)O`ou-0@{ ziMX;kgCVLgdpx%*POE6<004GOSHMNwyylh~cgMX^TU-=~ zxpSSotaJzj$OEZZo?Iwu=tQ(0@zW>={4>>an8myfQ0*Qt*;riEcsW(s7QdcNb5-du zU$OFesNSNaKqzznGqI9a`3K^EGR*zdSx2`_rxC*q11*FkWGJ{EHcLPigC z_XvwT9E%M$*mr`HE!13Pi9#sP_zL+drt6>q%;Ineg1gMcJNPE=*I9h^|6d!^();s& zSUkkG|3SF)hg=t#?BD@jkJHbv^MSHdf+9nnn8*(@+Vc+Q9PI3ur>8=ZOmmMOovmOQ z%6UBM_q>}sC{YYB3}qAkofx_?DF;()Aq}TkGBK1CU;t)Ocjo-F2;1>Kib6AIJ&_2i zsQw;^vJ3)GOMLG=9L@GR`LHHGNIE^S(ZNs7X_mN%sMW`ARb^}fjz?nAqB_Kgry@aZ zAmH#RZGhgpZDZIL85%#v<9OuR*C~t732cjQQv=02e2tOsBl&)}M(5E3p~~AMwjiT? zBLodly;gJ|I>!1HC%QRV(+;)xoU2wh(CH>F)M$N8#DxxaPcQYXOi44x?6HZvX#@f6 zQ!d)tCyczEfAp)@9`=B1SvkYw+u>NI!=0}HrBPK|WxFyqanI;S-RP6_7|tQ;LUy>ju|5gF1~crrlhaNzs{uqG)y_S_Yi|^5`zX^))-GuVmt) zb6w$AmTKiz_<;Tj=Dh(Mg%#sa+Eihf1k<+A(-{H+s94~v^07GG-0QJexaBcDG(@I- zT-$!hd+-kc!qiu81oqR+!%jb&Df!93MT63pJ;Su7E9sQptnyh|uW9`j@vU$zjMCJ? z^CSn5Abu1eSg$@JHYiLF+RUqFoJY~H-jyQVpO9syL=+IT+v8%521ZBwc zp0`~QDXcSPz87g>9WJ7;vrOx>-Knou_`zY5>F{mHyrNF7puN?$RVOjdr`HgWQu*TK zti!s0WnPF2E<>JpszbDd-S^q(z2BcMv=?yR-#ht38fN@!S1Ge{WeN42WSO` z0S5kL%29+x1n)ZUF(j4PtQCA_Od(yP@QA+oW-%N zfY3^UVxCn}Mp_qYMC#I!^c3))TzGb-rUHc&AQ{{gh{TDGj}7ssJb)4 zi8-bi#G*kk`%TWMmZ4D{dg43Am5HYSw%@NAdgA5wheiqEP z{Ze`2Oie}~r4{BFHMZ#7P9=p%q4Q5}!k6B8E~gh-I*S)Y3XKP72o!2z=;jOZU|Jne z^Z`Z5ZA>%%;czbO41hi(B-IS}q5eCU0m#Y2)nIihyH(AHuWa7g-xH-BhgPwIh`6vt z>>wgnW94V+DyH*i9IzI2y+uf!P^11Ly}Z^sYbX6FYR@sf(D9Q>t+jE&yMfs>jpM02 zOKE9!L*&}l;x=eb!Z(7e-$#mK)=doJX*M5w7JikBwG*C7TG(C7jYxrHBOj(1v3!~n z@OT#xPn+xdMnisB08|6Ops7{FjosvrSq+^GLeaEG90;uHqr;1Vlq52p%;dzW4$^B0 zvV_RyRJQ5W8DY4OR^C_?^!$WTxwk}_?+heq4+gkuE}>K1@3(9m4LCYh^l~^a^?yoH zi;C?h} z2%4?_@vNYYZ(Pd27b%=v7mY4_D{pN1OT+R21C@Ty*qR zlj#m$zvVV&A&_$2N{@fas`9ho5|HK7DGvA}*xE0hDhA!7(wCfv26I?{@QIHd{!#X@?)C=Efl z>FMk2pJx;bVd#cJ84Ww((Q$6*ITb$UEztIjdd%vo!=o;E8Pi4HdY`w@9)VXI+fn@# z+;(JQfXwld?zk0|qtE$pYH+ay-XniE(p=f*(aCCv_~X_woNCKF#}MClMO^mX#;$Q> zic&reM&;x67^`?@>LTHaXpe}!B>Osh613-_xih9MdxLw?bven9BQRC<%dFL7fi6I( z=U+*MS^=jr-6=Gp#A88XIS9Tjb#qmGw|x9%D4OFgLH7-`#tbZ-y>(9h+wYYaoIWAZ zrGkJznOC~0^sIJU#-bLMsUG8Q(QWAGCRdl6N#w=fy-A)O@WWA~E@sk#?YM(KzZj~u z#@0v@q9Nm`FsG+mW35j!c6)j?(%w*WJmNv$>9eg-n9(`!c0UN|CQ!=S496+RMT$up z&T`PjD!UlBndVAtU+msb%oOokDt;9K!+e7t`5TgCJLc~fvz)Q4)Me!7#bF1)aTPoQ z?mk=l9%i&?tXp4>VQj8skM7L3pERn4rbo8&op#=FYi=_eKbD(gX0|(HCaOhqTBh1r zPUmu6c7DUPo?E4Un-37{#CiM_y(o3DP8^wfhIQG`Ry$dw`7=5V+4?X0ID@;o zX(I`4J@bB6_da43xqS=p+kJmrqxQJ61{TIHH8=|azKUZ_@77$q+BZ?%U^=@>vrBKQ z?TAH5sL0ro?OK+omMSSbF%XS4f`DmJ#h{T|G;xA`5BC($k4X#hDY0E%ju?y*Ktkcq ziP4$H&hiXFSu6}q2Bosq>mAlWOl(@l|4L(#1L4kzkVnMg- zJMpr{)KOb4Mb8-yFYfvpQ^`?l@5;1$>jERSjbNd*rg1+4%h#QAI+>o~xy4f*)b4KH zzLA|*RG<%>nyWZh*F;2+GxPG{c!~=Y-FWq2aWD!^uKaox6M$tzT6&c{jTq^PM=|_Z zn*ch{gkFvP+m!>8WA;^+8?Zo_PEPd)6)R;Svv(j5)X!kzX8h1VLk_-}_a~7)-q}3k z=h9{f{6&G(vSd}qtyrup5Z~;&h;AGPYuz=;=_q<#%SOV#qEce1m$jz!{REQ7EsL5S zIZO#kC0e){%oEzsoT0FAEfbHx5f)_mGA5N3U?AB~oZP}5Km zPufa!LkrCcAF_XGbS68}Q*aPRZ8N31Z?&~~vSqm9y?^Y-ibl|EsxQ>wAjY0#YFi2F zOV!Vm5DLhGv&A;u`{5d5ABMOy`V3~A;3!bwY2`wzz;8x2v*MMm&9T9D+A37+b14f# z*X-nXfI`tQSQ$6LQe9?o?(<^||94szb?l+6)PL6Y8Fjr@Bay=?YrBj{Dv&VR!Cj(t z%)$SJQr4D6G|pd-cfv^ax2n1|qE^4BVfpxKQ7-55e$zNPJx|?S@ zY37sPFmAl1>MH>D#h+&&C0P)3fwET?+24KS{l13GqC`}dVjq$BKW2+ee#Z8Wlf{}< zdh|Lyk#N8$ZE1hVc@iIP0Vuw0TZF~2{z7&d_>kdxiz%Zs#bUIx2y~w}H64|pH zGd^zAb!&J+{fHr8PRaoED)*XRkdRK70y-YSV)g@H(6Siq6LY791+nBPNiR+*&==WX zSCAgyZDMtnz<^V3Wn}NWofk;_Q2b&$CP2)655{%-R~(NgM-8kq z{o4L%ODdoHfUNmmk=of{E-cqMJ>+GtSgS-tQ}FexbCz*pxIBukm3yAG)U-jD&i1KX zAi3LX7(jvI`Wh4S8ahV8F=1?MijJ#`qjrYPEyo9E$T4X6*@Fd)I{mo~=^z)hP|uV(tM5t!Ba|@VKWWo4*xk>_@i%u;-Cha>cP9S1iT82TpzWaS zsX4bA_?`^X{3MDsl52_{$Z08l9#q>(?>2@eCaQZ%nIC^~QWqD#Zd^APKTzwQtHS?# zuKs23%cRhalW}G5ro?(=CvFF0+xe#ys7a+51yo8~tw#GxcC~qL3O`T&TyG`I@cK6! zOUJ(am#TDTNTh%7`R*;y`cmy=bBos3$sn`$8MzQ^S9ax^oT4PgY+i#uij4V>9GYTJ z!fEAxYCG4oL>co-(0dJ~$AtI{49E=_orX}@Xv5bl$v(`Ly)3B%c3xdl=1P6$juHjU z!j=wE_lK8=0fT>TQkSjGH=AS^BGw?oZvF(YyuRQ*>I*R*$o@Ipuv%M4xhD?K z9fn1QXfdXm7EWy|c{Cu_C-ca^`5Y5p-RT{&1YjuFg7W#k7>W1pN_u-SmRn*%D6i&L zC`J*It+y!`k;>_+i5$rzOu^20VOg7oS1C4?|V*BH^T51?|g%m*k5 z(t`?c@3rQ7;>3mqAx>j{;DR>|EDxhQWZl1NMiD3V{xNoKJj2y2U&W*Czw!}~S#Td| zEx#jOgVDU7jR{9Cr5vQ98E&O1CC$?h`v}@Uv_SUw0Jr+O|B`Ez`)IiAM+6GwBM+6p zb9#L1;Um-$uHvLN>B{G6b)*6A#3XNAPV#0eaxHd4$p`bH>IUDTvIRe;!dJsp?Gw`9 zJ~>?d%5~VboC{KM$1|}3rk-4wrOR_5#UG|4__itf1=Z>#AST2-Omblkctxr>oK8>F zLD^38bpMlad_z%1E2qoiKSTS(Eg^ZiqP&C}uPY6+bf;qng|sQ29dZ^TTJb%JELZ?>A<_Ecl;}h0M7g7~p)I5X63)#cj{&|tX;!%Pa}=AmGj2Wiq~zAE=vmO1Zob7_U_r^UK?%&Ns}oT4--=0 z?T9ih3HvZUdlH~D6XCan=BP=@fE)6;N{By=idy-k`)tf?8*q6M=jsVrTSh^AGg)5r z0@@aEWtrV|LiefmzU;SXnG=zgt@%NXJ!E0EJqdOJ={?*`j@P>diymSw0}URsis^|k z@tdpKaTC!2E@aaf>)9J}+jDjk%$cQf^7^y^$)1ASnq?9f!i=2->JVDG!=>Ofqo_mW zv>}0iBLYED&XS^o$QIG>=t=Krp20CPw5J?kamV!T?ZS4l$V^`82E&_jNaF$B+Ml?}$$#o0D^T^gs-c}5hq8Blc4xa^Yww`He<$HIb_ zAmbv>qvBH;Sr+H4r~a4jPhjMx%?`V`;C*n64cxJNl@y9yrQPFLeY^yzzLNt>xhKoC z*$urUi#)EK8}x)$-E*xeXY* zJ>~2*e9GSxB8D>?_hrO!Oi5yoiiWSAYPsfB9J~rXQS6MDa2$Og9f$CJ^xqGUd-@A7 z5)RaO{wJma4v5IQL?ZGqm*MhPS}8o=i!ZXzs{l!eUroTQ-Zlux@NI~tX}17 zpKuP&I*`3}NCJ^yw{ee=*d8>tkN3g?E}2ym$%_Aj%h*!($0X7scU}G)nI$cgynEva zbmY0~-NX;=ze+e4`gRKCdTcAC%rAj~$2(3meKD>m{(29#Z_R8g2DtRL7|#dmu>w5OUqNZ zROE1lEB2YV(d>&$ZJoSyrK^h|J(pK-hy#umoQ{;S>@tDOoumB*1oS|lE%GzCE83@r zQ%Z{#k(ECOHUTHwgUsZ%{%Pzszr~g2d+IExPO&K(I`r}kIdqELTEwbW%wyru7_#sy zu==v!&CIE9K=ZM&%Ftm-Ebpp4g<0J79px99J$>~o$!vy`kpes@$FrRV8NZ@Cm~>A% zpeoG&baq~kNNkm7;QLVi)QM?IVL-Pli}duZwWZuStWXKtoFxyRo>@D{Z(9-?r{OAd zi9t$$zgRD7JB5ZwCszyh=#~jrrcFOa&;9Iw%TK>Ky&M=rLs}d3A#tKA(VYr{5R%DA z+|6&Aq)Zx>&L!qIGDVHQ(-QRb zy!s`^reha=hTTy1s3;3bA9HShaVm<6WipxlGDK}klS=whqls4Bq0e${){Y7)Cf!g) zuwer{hUF*qHK6fQ4^Hnfu*c8R>){lrzZk#i={`+bbAZQ?gVUCPpjlmm-7}|#Vuggc zfJU|>fpFbAm|QEIM`a?7ZPph4M$61M65LZieOnY<_sz9B6;liswJ~v2b|IPApGF9{ zJ;M=-xe80tS`Ma2W~=)(?5vX=$??DGB+!yxU7||yzDMIVk(mWeMmDz!KT#6&tkH0g zi&;;WP0gL>;GFL;W^-WA6k^OQ3^da`KKSC6vs9LSq z5e7AhQ2s6jbaxCKKrD3fR|RkWgsU7RtdaGGQ&k8u{py-^7&(!mWxbnzh{fPx2}U;S zEDWZPZH%XshF-u%W4rxI@L3(uf$c~y`G_5_=d(WG=d%FKfE0%7d-(TLLuOoKD%+ z>C0pTepxkV&BVOt(9FTf4SEqFT_GoKsh|XILF>oKeY$|cr@IcX@6?jCy!-=olTB^E zwl7{K?zRj~fH*IRBk^!FoEz14Yg=GxmtYoO1|qlO>=wm%m&87F_aHkvi}({O1U(hb zWsEhb$}5vRN+&xPPUFsl!j|Z+vT}G>?%iAc)i-RbeBgOSWaUty+)rWQE_TNBPYP@(8RKR`XCj%^2|FaF0@so@2`$d5DMOY z4;N#oVJs>ePk9;AK)u6L-LO$E+QNIq`wUWrl5<$w{BenXk44BL$*n5>AZXz`(6?da zlfsn|DcAibE)4q|SO5R1Cv*vz$IvO_zZ2O>eh(HMD3~sQV-GwYb=hnm4h3>*S0I@^ zrWJkFLYue>EK4-D%-!rA{s{qB-B2&o@sMg}WPcc6ZDc^bG;&OW=jEVRR3Pq@V6$dZ zd%C`146`B?K>n7l83hj?U2skD2+;9d+B#|-wn8-z;ck%ogDn?K+!x7!~ zojJzd3?6#4-0s>#_xyQLFLXVfKaPJXqyqP}{Z5%lFjNqts`dgbwpg$!y4N5yitA?{I!l`UO|w1(6;^7K2|&#{je zGdVRn6Tp*G!7%fcEp`y+mTl$VSuOZ~yDn|2;;J zDHd{pp=9?`CC9PNKCo>%Y-t0UH2rzZdbG$GD>pKg$%MK9AW`YSh??`O^(@<1$V33>2nLUQtbFpjB2`A#MJQ#0=N|y@dBj z^fIm<-iW+ItPrkn9swu6WZ$J(nw}0u<*+-LpoO@&JG^S-#Z7~x)5L^Iv$=NDV|UBJ ziFA)-ALi-v2uj=-;0+>s*If1%w>%661gRQGAPW=1X|oFi@J=Hz4bkUrs6x&oink91 z7N*GuKuS9;^Ag7+9 z<)MJ7n{00t8o}Q@z5l=jH+fWR zd(Kb&mdHuYG#0DG%b`d`!Y43jf0m>)0hyyG#5uf-nu_M+$R>w|Gq!oS9;DO8kzNAD zCA)k}00?1O{<_MiT%9u1V@qSN1fk{WYpcShxkFU`5Hoz$KP6xG9^{$d>8t2^#cC?y0uGGi>rjgEPxtd$IR%t1Jsu3X?Z0$x~F7XbxUGY1~U(E<_Uv(RP2sE7ZspJ3v;Rq4i1N=_~=+s0aW`_O}Luzpx((jk*0Tv;C>UuFus zOu$BNW8))5%6GkiyBO?iU15541j{Eik<~>BCjI@}M>m>suY8OvagYi_4l4jxV#Zv9 z;67vM*!=r38Yx55J4b=V8rlQ}gg0tu;DoddRls~$Uo1lZGqxwSBM_~k z+;qpfLiH;JHLB^(ZI!2WOu_SK^rpVA$5Mg?%ZUd5&#pVTZVj@4{rJI%2#Mr`mh(a2 z{6Z&Q4O<^(VF!ZZ@3_a7k{`RR&WpuAp(H789*3RF7}mwU6!pnWnI@FsaTRcUBq8T} zxBx%RC8GGe&TtKlN3`198VQOC;GZ&%KjazL;IR{?i;DJgoa0?f*vouUA}F;#;@O^l}^a`HU8LF9B5lX7!{XFfCE5? zCyrgudS1U{RgAU3GeIu>b0iO6T?=}E8*)DJBJ(^1)8At+`9J60N~OpWvS0%fLk9#w zMH#p|%!xsKPOpBUdk}*J4|h`UJ;0?7w*WDT7cy8S|9- zgotkkH8R|7t=J|3eT=1_V)GJHyZc?`CN=65!?>W=K6n^lEd03gZ0 zo=$2bHP5_RJ)PP6+r0vWu3U&`;!j+)@j#_9Ez}Tb@?ezX{~1*39Y0Q~MtY~ccGPFx z7*gmx*PqYD*q`T!IB%g9k#LY^0Qr%{-%&p52+Wlkp<}lHGtg+{IUq*2)s?x2QszM@ zT!5!!{TKEt+GrZe5}x9Oqm%ZbYmohfaX5;W?VJ!UkMlL7<(Ygxg*$M*3rm3XyY8Ki zs1;A;RW5bcc%oM?Moh;qU5_KhgtK`<5l{9bWFd5e^Qwo8jS~%jmUf-Sthd5rQq%kI zJ&*P;*h%DI_MPEf4j%1$PRbzjM5U1IiL)#E9(T*iKDL3bP#S{&? znrYy$^>P_rjpWPRQgW`ylD$OGAooMJpp!GzegAIijfN z7?r+jtQ-xe=~gKNrju^-`{Hl96h;1}Ej(YGV1D>;Up`A9-L@lxT!zuR>w8jM-xzT5 zD9>ha03EuF%Kg?`U!!}JE23FLYe7d``w2nuo8}4?e1@4Cxw9!8k*p4H>(*_Xp!$&m zBH=sD6tY4e*I|$ukwoO6G@Yqi>5V+8{EE&*SBQ$MAPKLTmARa{YLeYoYLa||f?$Yb;85HsVe94@!i-tySYMu>b^@4;U1W6WFJ4s`Ub zd<9wba{y_&t#Ac5n7@o#4*RcKN2#OK7t|f1r59q2leHAv0(;ze|2Ba(G@xEkvg2H+ zXMpWxHvRI4Ub$=_Qi*jtj5~BLPl~C9e+Wpzul34X6Xc6jfIo8X;dd*LzXQYc>|`pO zl<@Q?vNd%?zi;p0kBAg``l8xDK7nm^Sat8*xMri~PQ_(UC!D_7ybYn3kY&@(6Re86 zK17Yf4iLK?FU?BE6&T&OcMf`^jEN=tQa|*QJ)<|4!`oKj<*%$Xt8xzn^hcpYwn0lX zQCmQhu?Xcc^?jTDvGWh8rZ~1t!lq9K{^BXa1U(nkXH37jojY5t%*<&BqHa>(0DSst z;~dsR=7lntZjbUDpW>lM|6=FOH=gQ3)~;2a&taUcZcC!3oQIo=;AiD(tIZ+7M4NoR6nZugTb^ zw3(uX%=0NBa-xD#2OOj;HHGx!0GQ(`$}b4;rESL<0aRDn8i1+A1imkK%^X1c=7)$^ zF9q?X%D~5^H5F)CsWD(H)2*9_0(!dzUG?2yOWQ`T&&`1xmZ{1`H(hVn@BwBu-eWoH z%yI_HJFf`upcl`r%b~)~em{;TP9de#oV5R^)4}LHKYSP-uJf=$bg4EDRGcoy_UruA zn>Pl?-wIpoRPUnZ$~)ITU=T5Y3dC=$lM!g*(W{n0{Les?z9%!OktVgar5kw{nEXM~ zxQzxUfBNdwxgqRah+5U@Xt|RvmtCEE64NK#cRHwjnL^*HHQtYH8~5Dr2&nOus$g0Z z!JB+j?sIh;mD6q<4aZ9^I9=k5_x)ac_dQW-A!(E-4EIEgZiJRzdTZ8ipy`Dv2-uhm z={#%K8m_5%40dm2ub&nU(_8$yI`^h;fF~NM>QYZB zw;j8HTNImA(lTTb3Db|mBwAZ?V<>i#iai~N6dyxdTDhVKMHe`VK@n&cmPqR!8W~NN z^WhI-|Aj0x+^Q4dD{OCQ0+^s_h2;|IbEnX#gEQ`9Hk@>*sBI|W zQKaW}eg^_kv7u?1>f&?S-Fs_&@xLn+G}Lm)FJni9z=C>vKF7ohJC5Z#F9SX(REyL3 zm0%XI_w1%3%E!+xr)3ZBfCFbQbegUBZ7}XVc*a`TA93q8-hUF~bW2bgc{9=+w(SnT z05GV%eA{@4f^AnNWvKt|9?I$E3TfXY`1X0ha|`{10hc~$-Svqey^X?Q2`e^O|FvO% z@0-Hj#T82m`W46{L#OcIq{Hn=<0b_?Ynih5{pz5X`(CG9jnzCk=`7ry*h z>8nkFnvkHY=zr3+E)nLLR)brUXuFO?LG=K*oenC(oDz`Z@sbA3K~8=p6wvBrxBjFW z)T?zSYTrRg#}-NWBPEM`&1m2h)i6NpK*IB5hC^R@!ljJl(9#>+?{5caHhu&FmagU` zC1=rh&fv*O!eu)$m>;_EzTO(k7JXG#&Ey>a#*kEPwl;Sf6PALT5H4V&4P6R|BqSLc z1n~aPr2glom!~;PRM1yg2G4coNn4z^RSN&*F1{Prv()IuCSv>s@fIo2T153&%Vr8* z;-dgba(>4?t~5vF-4}{27&Qwrm`_%Ct0R|n46<+z+SZ8Us9TO>$rnh`MI<6tm~{qA`d^J7q-)7l`_8Hxhqu$ya%eoUC_9xNrijBe}gQ$icm^-Zmlk70ci`{<~Y7Bn+?MTL+BkaqM+Mw} zkXbJCcy8Z%5)#A49=<%Nxk=+qPm8!_41}&j91u$}n$F~1Qh0g|`xo)cpZ@(Vu9U$} zA;OAw5cm(D;hbZF%B?0_(C-)bu80RoBJf793AEp7g^d9JKLEgTlApUYT*ABL(k zTyZ(sN%8QTc;C=?){RUouCA(as$KqrK-T6ZbODIR8yNZ{z>oWcmu7Y?dO8eUzdxx} zf8YCLMvB#$k^wdj|4;F1I_{}=uWR9T2G>orc~d*8@CnF%_Vv#vko~AZ-HUM1Y1yKX zbwkDwRoE0izh*^Zwxr!0TeC%LJzk4RZvpzx`>PMrSQX!$asxy}O2HP~A@B;|eGj3{MY9ivAJ>hDcOrKj{D z>1iI(1AJFeBg(`0AD%YQ4a?qG2~0=5rhX`@&_$Daj*8Iyp>_|PaLBv8A6PCU z_fPxWviU)F-&eYPprILE*Co`N-43hgwa4wYy#x~%Vq9&li?Fm+hs?(ikXv$@|JQsp zm>CaWS$^dez!(~8Y-wTpoW&LJ(dt~t%lQd*BLP>E<@r>b^iae&pdU@LZdo5}?+zk+|rv>G%34Zc=t&w%bb z)>_&4V8%w6%g1VPeO&sLC@25%v{yYG#-M5D{b^R5%zgusaK-{|HPoK@pmO$ zjlpC15T#P^OG`M=0tBODd^K5*rPZntS)P3MpD4a0-P`(8*W_+fTt_j&Q%gpbY6Zkz z9y6D&-H%c-?A)*4^mI4+{In&x944dAT$qsY6-OasGu#mLr3wQnAz1O-s4>;<;twHa zD{;?K0aTxA6Uo_JzGhcsjVq2*|0$^qA&V4*&T}$EmFY2^ykcc?Q`#a#vS#J7m8I-GHO#LDpVf*Opuco$yXp+7n&beS97Qj>E- zeT-sKG-&^XQf}?B?YM&cFc-vp9N_R6jbD*Lga*Ppd2#il8bjs}u>#$A^iLaG{z2o#zryt8m~ROx`A7J` z;2r=2bF?{Z-DZvYXb!Jxuk#1CsxottgA0z_uu$~B_77o3BQcx<962}kz?gBu{Gd^Q zSgPfNY~8H?*LNd~J=zJJcE(+7^B199V!Tg}(5&EfKa91j%sMCIYZm#TJF`FAIqxLhbVO|t(Xe9{z^9i>#&(ql2LyX!|-!rcGEt)6YC&!1x}*SXRwSYDs+boK zq!69+b8F+Tz*3SEl2lGj=E;HPU;_KJ_q(Xu?Hvd-=gPZM=yFo$77b!)@ZgbXU@Jn-fo{EHXhIUsL)m?O;XAwf4VzgkI!B+CFdvBSM4m0B;ttgz|MZ+9Cu= zv-HY%FMBw4Q+is;|KlSbl18HjMahM7`aU`4h~SW!U`XA90)=>JZ#L*dOyDkDNu63# zKcvE6q?r&ygmYz8#p@$oYLx^Y1lvER_e)Y~n8Z>?3Y8#Dcp`sR^GLF+D%*V30Iu1a z_G8+IiBo_6*rxB}Y>hV|N?JCOV6n=Hj4VklyKHA3*dWkIEOmmrK8@*OF2uIaBYtVx z)~M@7DtW697$g5}R`Rm{xm(a+x{%U>AtvDA)2Yyi^;xsWnP;-f%Imz1Wq}is(|pOY zf>J=$ud3jmc7jH%jr=icGu$S??i)hqScBBpsU}n|^34?Pl?R8p>FigUU#z%6f;IQb zEmQQC)j!wpU>7DOjm41%E%we>rd@T++m{q|Qe9+hLFvdby?QZ!tY$CP3s z+VKZ$CW3)yVoeN+aJ<-n77<_;UxJgYp;1r>RH7Ng> z^Kf-P)Xj;ewLMI)ZxKhwx;yfJwh5sw=O2T9ukCi#dd?XZn~rICFZm&WoG(h*{=aQV?2_xVKS+j#*MDcbSIaaPY-pVr zZ_GcQ6$|k~j7#uJu@}Lkl*ln1eQH<77Ovv8b`wgFp0rv&7u>m9Od*J=yg?V@&E4>G z+3ja2dCMZ8aNAk>4j?g474l}zqhJC6QaC#Wx8U9iW;Nmpa^@k;{x$$uC;Bm;WU>2L zZAPJm1z;!O1iN?;Dn@9C5(C}5GANzz6RlDL%=_t>#4lKA8KSiA518!k&Kq;G7{K?J zMGrFNP+S(_IPHxhUD~>NKkRI~kNF^51*G{kL)s-bR}LWM6}*mcb%C3l?yLiB^RYdX zkv|7DK3bfa=H-2L#)9>P6L{3gj6D7ylAG@iFt9zgU#m`4JxLpH$%lI{DAqf`rOqyH zdw?Gl{PEFfluhj_U4reS9LR8A$_C!k>=nK2lx+57eU`&74!w(ATWUXac7$YP45(F_gRH zt6?_33S<{#qFI7Eu))S?)vN=@Af|+aw9sf=;Uoj|AhKvJI+X+wUUNL>nWf#g zU!w!1Ie@JOmW$H$YW4FkHK~I$5INDkK1VQEtyzU20v!mT5Du)NrewPU7eysuxmpkq z?JkB5e$b8;$t8{;y6pwEuC5!h?IP%X&_iT|{%rf2Blx`EK>uR3Ns=$V<{`a5pnnHU zt?T$}EWpROlg9mREVPu)a>FSM1bLgY{4sT`$v%vl z_jBu8E~IMCnwv#6H6iWsD304#twvU+5DK6SaSXwNsFqFdcfQCc(l+f)a5sq4*=@F7 z9NK2V?S~#Bl4q6IR_qPp{PfB=LU$`9wD6C6GdHREzI>~Lh|7)H2TB z5`2rfabtdq$dz1*4!7TDIOF^?ysFxKYaIwH+hL)n*4jt8dP z{cx^P0I!M{2|aEJ-n-AjX8-w$Y>pr&4W&O`PtVXAdn@4IA*a=;dAKM|_h9)qQ%o(= zL9Squb6wcnp!;nuy8rmRK3>ZEm|)M{gEeVj`tb2FJcZN8nE{LR_t*;49e$+pLXikLf6<}q=%}zLSJKT^G#ieiYY=g8YxkZpaGa!tjMqjB;oUAx37mT-)nOz0 z>)?9hYRPp-%YNS?so^QA6l0k$v&bk07`10QdLo)%uMdiI%y?N9}*7J+jMzb+#27r{|^&7jS=$5TixYTv- z`|7<}yi$&LlJGk5@T1aOxrR`C#!V8J&v6$5Gce@%p$bM%3)iZTJN(Sb{!e6|Uk-?u>BJH`6 zrc#Aibis_6C9vl|l!GvIG>y6yUV95kk=;mB_=HD;`Yw@QD_x3AAlMd<#R{TyQJLu2 zEX1tiTb$8yXH=Fb7@p7t5qSTw!fU<@b|8A3@j#48-ECxWsKT3#)w@#*Fjzh-?g*1z6ABH8K$-pl-H)F6+T z*R_Y;+4A?kI&83^AO*?bpryGTS9_yV()ObEDVxJ90JnQ*9Fc*29rS983M_RIf_@HY z(VjU_;i?d0S@3m@abcTIxrpMdt8M&1LJiOff0_fFidxYQzb8U^l_*zvyM6Lk@n>3_ zoou9j`N55H69rghYD4-dhkq-)Zls?}85w)g=Psu!!^5}jziCS-L}@V>fi5PJJ^SF? zTo00(=@61?lTzZ-_BP21C6X_)7T&(SW9PdE-l>XkBh~(zbph%mc;Ur71cHoi=T?O; zT(%1!37``1un#QVoINReWF^e9!y~JkBG~}i;Y8?qNSFlrj~S_U)6!R*l{dV+IeIIl z)m8#UmhS1z@AHl6-^Q4FLV8%c?agSRa}SZ(;z+gY19Nltr$Ob2dAU0e@0MrlMROm} z%Kuv`2^~hUa$Xn)EUpwj7z)A~!fNl@ee&$45dx`)Ao)i+aB6lYb-rba4?OioJNx5l zRu`F*ZIbpp8-W@=B6&8sP5HS>){STQ`kx($+X{Uo`Z?@kk>ffjj_Lg}5xyPl_KM`4 zgLS_`u8P~Trd&8jL$7LCGq+6rEnc5R;IcU6FuZSU*hz!UgA7UBUqVUr>cFGYID^u= z*AWE7U6@CZ!mTrQ6oCaV`#?OC0%1dpF<)*V@bZfSF|5l|0D^bdOCu%~n#vUow-;=3 zBb4fe@e?i@6d^pRF4(+vZgfaO}!TKD6)+5vKjzgM~8$7Htw)!2upMQIl zae+~VD@Z5eIKMlrwE_#=hX%yoYHwRnarKkZRiY4}^M8U^U0if=82tgXY#Pg3JRe7` zIgfyS6pm~$MDNAJnE@I~3XtLE+APil>ZR8pfb&yo@3iHw@UepuATSHPKgM3^qN34h z`U5hX4+23m-j?jv42WeoBYLs_rt>?8$ehMK)Ydeo(3)Yl6le9Xu&GN-R9=N?7|9QW zOMyLVJoWIY^zu2?GwHV!=xeQows)xiQ4P$|d8dcG6P9c^CQWj2^S@gdCkXR{nVVy~ zwtsomCVr9$i;ELRqyg?9Zc?%LM_B6Jl`Fe7$^zM|fYw#io~9%-eb zur-+N=Q;MJ&JXQvT_}uC0Bn?6o+gK&Szr==pw}|VH8CLmMRb6wG7U>&I3s7?n})Po za==u`uAB$u>E$HuxF|JI-nw_uirfP2IhEHnk-gt)#-)HG;@{Ft0EC6<^6L zJ@Cx2dj*LJzVQMoxaX8^cbB6q=|4VW9Oq|Lr>mXTaR}*B%D(4vg|x}UAo+7-@`7tJyMkXpH1C5&gv||Kfcl;=tJEb z-vy{d@_P=g04~BTZ21@pVFUt;%H~^F9KH}vzbI(UB=`~>F8m$P%0W??awq&ds!Jj3&j;FB21^x>k>Y1C9=ngY#)6Jl_b z3FID&KS%@-Zb?WG__NLvC7>DI+veAr#z@r8F#aFy$w;cBZf+kvP@!|a5z!p)9qTXw zmB)!h!?^0ln1hvz&%-2BIfpJ>MTEtE4gt+62g+sz3=}@&Ie5+PtYOEdI`Yh3h0(6E{LrxNlWkC?)GodC%}voj><- zao|BeTe=&BMrp=>D-96puw%{30YAJ~t`VU*z;k%E1gb_OnH|A5KDv^TyJL0~ zc_$4g=VI|yy(1{ReWd>h=>6ycdtm&p)u2Xn%HTMrVl3qqya*tCb10`q^WG{NS!00N zP!00+M)hJU4AkWoQpNYXRDIz+QV-^JfSM!Xn!Je3^Q%;prMSUt@E41q%?O&C^~)^c zkBLuUBQ3v0_$7fTbj?k9kK5vDP1GX=0OW84-R5EJxb-{l<~H1ryQ_Byr^RgR&h#vu z2I%ZwJ;651RC)a=KiH zAwAid^{bKFVIzLH!9?`H8*$zi=swQZ6t<(h%#iV@JFPBJnB)6Xy;YZ^fi_KK#a4S9 z-;d&2(pjZb07_ZLF`}wPEeapy(1R+1t;2jRWn31Ng#0oHbSwH10S)JZvyoS_jOD~w z{`DW{SdCQ`8?BgG`)I zoUE_KN(VooQ8Bt(o2E6vOi?FSo~;vGUsab}(R%`;9cd5Ng7OqWnn_li_e^XcW{OmN z+ih=pDGmywHwb2W#uf}(hz`(D`kU=iVo+!Kxs#S&+k6|#fN97MR!U8w^IqJ%OgLBe zMm5w42Hzy332Opz+5P4i_=X?Zkc8m63r>R0cYiU=@oYO_3rURw`g`=xwPU-}kGSQPE`3jV?a(8QVO z9sfa1dXxW7>11_`-~TN!;SmrlHp5OsYeTctBW|O!Fe47LSH!+7%zv4`JClVp7x||c z=#di6=d}c#Y530(JlD}xe6R{{)=2|%-EXS*?Ksb|j9|~^-DE-!PG>*~;C@8)_}*F= zv-FX2XmZ$G>PGo{`Yv6&CJ>4;oBj^O1v~CQ^$s#LH71YPN_-&qmR-6l0ae;SW={vKrK5FLQI1R}okf znqZ;ZI2w^T3zx?0&sj6c$M>nf$=t$*dMnZTGwdKwLns3&y=n5%MxKHLNUKhDa@by@ zK1eq~81YnUKM<{Dn7-~pw%LneAY0vDY#Gy27CNb|b@uf{4SvlGL%C<(X*Sq|ehJt) z*09<7u(~8Wi~7*gzowR{Q*N1u=CmcAB2%iU`?%h@u>5TUk-T*fKx!I4>ebqA1 z=|3s3AurgbEtiRS^8G{j!Ory(Xs`T$B=r5QI%YhfBeEZ#S&~Bq!)G>USr`0KZSn<0 zKB~~gk8e5}@~a?3{70DLK}%6Q^zE3<5KPP6-ROp$Xs@%?i-4hiIw!lDe%0l%su=|! zf2H!WWP@p6TMRJ_FdP(BKO3+*C97MRN}6YUQRSB8f9x-DwQ((nSXu^TbdnII#%+A- zx6eS0z5*#y4BK1vxs>7cibf8#s`oQ zwfVO+eeaE=i>0xPNb5-t(%M~ffA9D7Kp+%*LaZCKuG*jrXz4tOjNkBBcT2Qf36QD) z*S|EvYXY+Ux{^OPK{1YwA7T|jB@J-qDVsaooijRw*Q~sxM754`h-L5pfabv^2S;}0 z@7#%LF%!?5wRB@@#gOqPKW_5BeBxrpkrlkLG>-J$Wll7Q%%8Z-WV|u1>>EKq(Qh)j zAuw9bA!R`x7V45Ms zqygi-NyaM4ZjZ+GPX4#FoxAQ5`l2aNLT{!74D7DmMzAl&(*a-l;pISG4*%R;6(MtkwpfMnZ18kM@k*ubI_>pB9l+<< z#=E}N-yH4n)B@5?0ToDdEeY|o#2^v!pIp+5z)&it^R@7K*%Wj;KW?n%+@obA@3xG@ z6Y+$h6%{5Ayfk#v35!)MSFW<z*r$E7iRn}+~?z7V=Y-S6J$87L~D zz1Q)gr-u|c0x#lNe^mkLSX`M0(zRLIJT#IRxe>~K7e6uY*|4idwi_x#;KMK@0lq4f zdjB+c>(YsDtt^Sfvd(?e&?k7wDzb3!uh6dNWuKlf`F9?COi_$rXyW77m2yL<|j@GjF9_r}s|@w)A>5&J1pphkNfj$z-(_Ipbm=hw^ly zQYc%?-^Pcnx0niao<-ul2{+R|^ zLlU`2cZp9HP=y!0%q=}Dg6&*k#*Ty9-j8v}1S0vWbt(8~?25!EI@C^%cYdo&89=M#J0)`Wv|vNa zub9pRs1$0SYhb5D*Vv)ArH6dmaJ3YbB#(5?wKwa?^u)e6V=3fN=Ox$z-6~6XdVOzHHt+b|yx=6&_y~y2gWQ91C@9^_KdM2Qq$_FhubZ5;8 zTL|$bGq#CJCbkM1Iw=X?G%d^)D;knF)yO$W6A zLAjytnQ+K_nHpfQHbi4fWW>95f`8u$3Y zm=Kn=1z%y=JAr|LBlEIn@GFKR@izEo*2IIUnfj4SpNZ;mMCZgJO}G0L4)=^I!pSu8 zFPmu~h?0HeC$$q8PW?bHAGlqtRWKVtBSLF!@sAX|;r`*SH>J#YYo;0o9EzdZ1;H=J zxpxEW3w`LEG0%&T*vqwpF_K`C9 zPICMB(>|w5dT6>jNSiVfmr;2Bc1!W zc`Sa^&`ZupyyZDU(s8^km%Z~*x*OZew+5qF(W`@= z51}BYA5lJh&$p82m{6?=7==en5tnIpFAKOJ{#UGDpN`E-yo$Vd2%Zsh#^RJLCLfQ_ zJqk}4Ly9*ya>`L6gLGOL zcv2Zp0S+$EP{y{gFP`rY@Dqqzr{QI_{zo$(8f-(Q<4y#Cf6W1Fq5oUMb;r=tq&6j8 zJsU_|-7_xNfNl^LpNJPXfJ5S2Rro?fo#+CbzXiCjZb@8Q;Up)yB0aLe>o0uGzeAnU@~IK z+VV~1MCj7XpkUa`Jtxf!s&e5h(Uqlsh>?cSqeJq%iL3^}YTNY5ts47us z5)J+%P!k_RJ0Ig89vCWFCezH){|>@?vmn#855e?G^$rnDBt}Uql5oJok8~o+1~O4_ z0i(fUfIzH{b9iy)co0QqP-cjWgImYG?<*fmxmu+msvz3d3Syw8s$rEa1`UET)}l>^ zhes~?D4A3z#k%cSrAUbw7GaW$R`Z?rJ(nGlWGdl9;%9XCjU+~j8oJ#lLbsT*m{JokoUfN4T!XxytK(Dm9gpb5{y&|F@GG9~MKpM%jYM@%&IC-j1}Uv9 zUfAiuc&bPcqE}-+&iI$9jO{K*-ul;X|KS zmDHulL=$1Hbh;6r2vv>Q#dTQ&g{Hr=;Nt}I%xwxUTKb0GzHYaTJj>`!QbESaK?LqB znH|4-->tY`nK8#4XkCTjy`73pU=(k#Ntjp1Y0sAl>Wixzb*hwpxFM>f273nd#|YmE zN($m36yo~qmOH90a{I6PJXpLIwu?5#3R+gtd{Ro4urc|qL5*`v*@}H!%cmpV*FN9L zG;xi28d0s(K#-Gm#)mbE#La|n7RhU-45Nhg+`*dc^0KpI!}M=iFusStqptP-Y_4il zX81Jkj^hXh5@AgJ>|Y!z7@C^SebPRN+L4OiDN7q0Kz=xV)kDGU>!<9 z=a;4f-y%9xdt)zv1}f#%5sW^ViEMv9{BFx$SZlf7eex2#3ztDA4mz=8H7m_2BpH*?lzBZ{T=MXLE1$j`dHp;EM@nj zwk(l2_R2bsUH?5Z`iq*vV;=B`x`}T)aH7nf6HIt@A#>wy@IE)KOd#G-EM^ zN_*>FC>cuCKw=tM+L6qOw>8w3!|DPlgoN2^>Xr~Xx8MeFR-X|@Dr*ZRLNuxqYA$$F z2Q$D0_=>uAVJq3d<;LIJ=!TTx$DHZ&TH4n@pfsZr;>UcGfL`ZC#(|%h09G+5Yg%-^ zkZPzAo2ch3wo){VrsIO-LOn{M^+)ke8GH^jF(XU%s18}U#lyg}Bg!%XfCp07Z*9)6 zv3=18E14H9nUr_vjIPFPM(2L3lEj*sIGLE*0dQmp95Ul9;}nloweIiFCD7VLA}a>7 zc(d~0=6DeEgU0w51f7iY0P=I5w8wg%eu|j~(k!jNMVJ&8#_lw|mh1fS8qMLf|^v2;|EHLm9eB z5;dE>CBHx-2wt4p=v%Q21S?Z~I`i%7KHx@c9dHZK60r6S$zgy{aH@to-`Lsdolw%H zC}{xgxlB0aNa3~4|8Vq{S|Z9aJlTQj080`Cc&75j3rdz&cYU+8@%%o)b6CU93M!c!Vx?=Py_S z?6NzR_4a;tN%@j@Qbosy0)0)-lFyl%UDM-DC*o`!2HC58`XXdu*FqSc-wbrFTKWCz zk=Q3~rQU`LKFYc6T`M;!ul<9^*8u1HVf6pqEJiGJNuAm?6cOCq+8Q(7o4``K8;mI zxMUbZy3Or=)`J$pK$&%qa+mfjWrZ}mm-Cz*QcN1rCg8jQosPvwzc&(ATg)izq{1ht zSY4dJ&A3VWMn_|y6sKJVnbqpM?i7x7EV1#kgNTZ1dm9H;;c>!x+N;j3yHd1Dbh-qwh_EIa4im)d zC4;pukWg<}lYK-tmKzV(cfLIU~!wq1U7N#TZj zg1+DaS47F0X}$MDgN1On+<4jIrwFo#xOeTyv7_`GdIUCPONZ0Xa}ZqC7HGCy2yzP^ z01QL8yz8E|(oDO4{D8j!^tiiL5ydd0-0#m|z9_sK{Ix=!+Nv1bkg<~Lbe4qb5)wNC zyj!v2J&4E(jV}WUeQqHBXEN1E-T%k$M@^`(=&!&3mHN?8@ARk^_@lxvEs%ji)_+xd z?6+El)oI_fLI_)lBSU#M#3x2qldbK*K?cQUW_*CIHq>s6a@H8oDrc+Yk@GKKq1kS| z;n|M0&@KM;uj$nHVS-?k`B+Zh+mlR2vpE@_45ItZgc}1*Y=(Nr@;3eQ4rbcj65iS^ z;^d3oLVz~^ayU+M1{E}YP>+#K7{^Xs@n~mPI{?{aXN>RG#7`h=aM-N7d8Ab!gQtdH z*@o^fQ1ti;0#sLB(}G8r07*LtQZe3iwc&{E=#D?>gG@vVyteWkYAfoRouRiHe(IqBSnXJr_}jB65;EcQL#)xA#KzU zL5Tfza)U%;cKdU&&Agi?zKzo;`15ztn2gz(1~kC|37~0Tx^Acp?<;BBnkhX@QrYNLws~=+Kx5>qF=b_0h~YJ zi3B@8VuX6CyTTCUdR6*Xf8rdOqKKcehL7rB2`qH~cpKrMDA8CZezR7$H<}xaPn3Ye zmUepuwz{a|oR<>4(qw7&3Jz!wmXkGoqqAq5+p?f21RC-J$URvt@E^d8OYUV5yl!wW zD+-3%p?oa86pd>SF?IQ~K~#JH;@q}a2*HXfJruNvi#n zPvZ^)E(%O0h>ZrLA@Q?!k`G=-JTL^tJxVl&dfL2p7fYRhX`;VJQl@ymMxiRH;*mHk zAm?yhaLLxJem4~UAPWz%qw9Q2fk-kfCUeT&*~7099C||Zx*H#vi#iKUe=5@HYa2Wt zhYg^7*k?Z|>~OUo0-0Pvwx&OaO6$s6{P6kfyR-$_A`{&Y5%2z)GD;(-V_o?aXB+r( z6KWlEJ+t=?bYwu>6}bgGlImo1n}JT%*a$rTBvXtHRnP%n82ETJX$tSibm^p;b=@G9@$cdr@fFDeyzkF$PS@PTFcjKoMy}%9x-Zt>0gJaj>w3g3uyi2TX-4SeM7PpH4#?&pV*I-04RTG=9m2Q@~Uo?C*>93qd4GC z8&57SA^>ePUfnjH{qlQHimsD%N8}bHZNIgzJ$3ywP~W`}dkctmL|-CKe22DN)}7f| zi1dz%yU>q%(lyn}7+Z@~=S5HBhkA{>j*4(dD$vv#D`Zhik(^j$HP}h(m(hYna;z`8 zHg%(cBo=mG)k>J$i>z~7lRkfH;5a57u0`Yb1#;Qut$ueMfIDf!50fNRs^U}41HN)Jjfx`LM@>($Xh z5ca#P(e@%ZHt=7)41VElcqH*Zw}#(Y^MK+~4TO-l^9$v?%)6weV~t2`@~CT<4^sA? zLGNI4a^TFQk0*shZ06e*=2mf$cDATK02?9s`W#x~PnMt^7O<&#SDCo)s_s8ej2AnU zgu9l$N1O9XanVIIbhP(;y{~mWSdW{B3E6BnHo@;3C}s+L986u+(qWlLTuO%kBg3)x zCN2QO1W|3rN=sYMefaeG_znFCq88V$h0A#~H+@%juPSHeE_`Q1h zqB^=~7yLng;!M*4dq@}yg<$H=L-QK5DWY5<{DN?zjZISA9wDBf@FXVY`ac|rPkix6 zwcV{~2|6Ie&{5C!Fk;-A)y9syELSIVq`krtPU(*x42?paFif(`t9Yy2Igmez+mvtz zZAa3BISrr(TlMgbP!L;TmwIS2nnZjGX(qpx1A6bdaT)Ej-)0u5p zP)B#sf_#(i#r_r{8YDUMo;zNw4^u#Ig@vS8;sSMnR8prBYs9p>1@;`1uAi8Fjmw9) zU_Tv0u3}-rq1Zx>*NV!*rf~m#f_aSQAX!WU+@@iCN%q9B>g+qELU-_GJP*v1WVVOL z+XNn^_DNII=~pI}i(KJbwOR}^Dx~$uJwrwL)0(=~=uY$w?b|hlloWC4-g6fVGF*Q9{yt&=CwIKJzEtlatqN;RH$ajs%1if*}M%$;_ zyd*t11QSXz*z3d%Qxj-kH~Vkr6&%=1laVAcr~BC#+0ajc^(V2$5~ zgPqfAVZ`{ukAA>#7P4tStn;---T37bRV|^Qrq!^49nWmOtNe|fd=|JLRSe`;AI})u zOwkLgsxiw6bzv2y_5D$F(!)KG4;?KVHiFs9F|L4a>4bjeTtdoJ<7hCWFfl>k-l)rA zz!m1L#Vf{@LMrg{iv-Fo!JKd>lJh0|-vbvAFyx8&Z?1BM?cfi}lI|#=xotjHm)GfT z!*SPxjdp<>H@OWf>y%4iP*gs+B^jai8w!JO@-`pmx3xOWM|>aHzLB01X(O6RBo>Lv z&TEq{9l0BsYuT9S!_OE^FhPVD?i!VjKjp&+Yg@E5>+95q%w7EwI^fTRlKkLqLTxvf z26uk^!T{gsH2ZbbEEP|+fW5YFI}a;P+>wz8)THY~Oq4?RmXHfur8AwDpdK;VkZ+!z zK0Wnz3&x*W`s{m*)4EPOSuqv@h6Xq(B`4tpQ%ps3BeAI$;0UYc7uEn(ZYrt$k;$zz zZd!F_I}P5F5#$M0Y|)$uCMJeld(1;&aJz<_L)154&KQ@9bkB(%PiunY z?)w-hxiTz(6_-;C(Yn<{EI=zVDRGE+JJf}r|BiKld+Bfc{_b~HKqF+bDXSfVF9T2p zd3(J+7ioQA?nn7VHJ@0myv3d7KcL^+H&-!flxuP$fD@TmbtixhRrW{nCfU$KT&+Q(r=b_rNk&or0-Y>E6NUW5u;RbLF4+_#dCiB=VsIq4r!(0^=f2( zbquL6J1Q@kYVFc_;1nHk;6A|CD)TO2F(>X2-tbZSWzM8F3Sl`H= zo(Z=4jf%E(@`Vs{CJH zTvle!8VbK|ncg#vbX&?2huGugI_49*48QkdoH-Zp&hcCKM{5F6V zW<1}wK6W&Uw@RN6)c~+SbLoJN6!`f4f}DT#RyabrT{T9ILUkMRlQ^eefcA(%a6(U1 zWKf%I1J*Di+4fNWU}F%$9O6K+k35-~9R%md;~qJ3m-VGS+C_NFFj@c%r-38EGjYXd zr=ifqy=AXB4`t_J|7}FE!XP_ZavrzC8o6#e zsF9YmJuadG6^nlzZD#W<&4W0o&E;8aJjlx-|2{d|pdhIX8UHC7jVN);0aSlmAa=w; zrOkjWT3FDM#YJRoWc+_%ubaWY(vrm#*oJt9m8OI6vB!gnxvoCqS*~bQRPVu|k^4Mx zG7Ck+)1jazetWTp&&FGLoEl22=KEj;A0oq@k9PzJdeM%W#8JyfBz-J7ir=c#cM_D5 z(IETp``N!a&FNk%Y1qwgP()?4$&j0<_S7SGRQE$xE4NjFhJERrIwY9KQ(z}=9odY| zfMard?Ug$p2}YvhJT~s}JbkY=(kotaQ)aFT@^jHk!JkT__wmU7aEzGT$41UvhWK|C zR@s?if4}=geBEximfqiAxPl>iGCJ})8hq?Yew736nFRY-V>B+;L`+IsEW%)o>!~?c z^FXN~*wNwh97h;47t0AtuGo(0r;u;z>UDy3rdk*tRkT0q6<`vfzoYju)@_9Q>%R?0 zN=`B^2oS3JiE|2E@BidL9B2+Dw`F`HGApPD@6*9f>%z8_dx)SB3`QQyw~z(_4cv+@ zW^b`89z3iret#B*-t_F$BgBw|@5>an{tObTUm8ULt%T@h2ooGj1$sUjn+!HU)ODVL z(L!lml70_Js6AXmlQqeN7?u$(Urz?gxX!XpxSc3z zk7tB(tu;$;km>dnGVs+u*fZhc@aa-PUY1Jy!9Q#TC8v}m%_A-1#lk1mkr_;da+Gx71z^tp`9^AYp~ioKSwZo@ zN`kR)AoTS&5}N4W@e_3%p9=oXog=m*NUL=&*E>?x*l}Wfj_M-A<7-WSCPkZBWN)f>voy z*zw>k#2Yfxjx;!XJ>rn~>}dx}J5nwI+RKmSaPSSH{4irEzxzj^JZ3tt5LIs^g@0@A zktEPDq91l|g7YB@ACm8$K9gLfyB0&94+@TIK3wvHRfc@I9vbu^e}sAo7*%fH#kYnU z94SWTL=ut3<%yF=C^bLSSUuig9sr7RT*YJi&}^QaK)h;mh#C1scf+Yo#f+N)U!f;_ z=V8>fp-r;Nyar8v?z?=-u{R=eB)WV8Q`psO@l$$hXDPA+vBB%L{y6?mN!AMTTPbM z_Q~o@Uy0}U_ZnN3#+?a3pj-)XfcQ(+8^E2JDC#5d z2DUt2e>UX}@q3G8_(5)+%P;x_3_G%c;+_SclgGCI5^FZ$1^Uf4*oSokNN8rupkKgD+JZsB~^d8{_z^ei>lg|FRjplGI9K6KPxq zBn^1i(aw%;>BBwRaSQ}jQB7BoO0{@cBTEZSg&8WpSiH~$U2%T34FRtuUqpt&=&810`MYhnOtAz8tyw#^qRNE0pVC#gu% z6HZda^A^-ADLAfWJDmTTK{R|jxnO;!pZ1|oP~;y`73IZG*Nk)}i7nwPC4K`qaUhi@`~}Ti`FAeIH_kyHy4w)tLmPSnj*z@;NX$<%9q` zv73n2v$!ywEz1Yeka9muOCS|IkzMaGim8w4cN9Y(3DaK{Nz3)GjgK_~J08Rp10IOW z0o;&#Z)3lVYC^l6Jxk4yIGM)I^Eph>!5V~!iEQ2#!&0^3!gQs&8WvTpYhu%#Q5Ml+kE2DuJPntI-G!^w?7|mi)7;QdB zmI#M32Y}&(feJQDSKT7J0^A2l?zqg@#Ft?p+gf@sJ^4pgrpI#tLgXGDvKUxo$(%w- z*btM=<>9_22`?Q|D(O>QLA=ZXEDV%>A`@b58~0@cmXeXMm6gcRG_gU+s`nR}tF=Wc zTG`8rdjvastBri=wh2m+0}BOTIwqH!5Z|V+fJ@?81i)M_$(_k=jA=#16zY~x7AGvw z5LZXz@F>Fa1hZbXD8cgTQGUQSs1r^fm=!mxk^B9Yl5Yy#tQw~xOX3Clb)MXQirk}b z=!CR4BJ$C$tA36>>a*~a+>3V+|F(i@sh_qka^VD5cm?!n0$Ix(h!l?7V9?RIYq=sT zL@XmcC3ZVg#omv%mioL?yLzU5uRh{XQZ<7Vpxs>Ljx_BtqK!~QLexFV=)z_D9fqQY6;lDN?(3tLc$S~PqTf@TzU6VMwTWV?Vo2V=(1I7B*Sj|ilb6Ta3% z1eOO4hdYY;Dog{iE(LlRA-2~I<;^#QeeMmA`W#;dBtR|6qDc5q;kZ3ew@mSTHQvsN ziP%lk+_+QgJ0W)!Ib3;dT+1DV3r1vpID?NEz~p(Fd$IL@4978`4{1}q*kC1{!vA++JRxZ?tnukEipH0-JN4+0zhbA z?Q=$Wv1;{v=6Z1hZ{z@4l9AFfgPUmeGv@ea4z#oP(XQv#w_*h3K!ws!AFlbsbS zFWgG=Gfs*;GyNN}u`#&ll|ebe&Y?g61;M#o>?KG3svPhN+%FZuY-0(j-OZ zP9JH$Ki$!B@=uw*CYc3nCY8L#F23bf=_hw>Ew_Y2*5J3Y$~caiV2M(y*U7@(DBS=N zlB&@=HoQj!KZo2@tO&)Vfk2_NCcMI`N*Bh1nSUeD);&w#QWC`bdTEmI)YF?1_0f|H zy@ulX=kV{$=TnIG$LUq5h$*I!iqXq@k)I&msPQ(z*f}H`i=@HvSxMtpua1x;qPyAa zAYX$xCIlstvN9@tY@2ctJ8To4(9tkvCFryLJz(OiY6G9O-VIAi0N*v&ab=uZ_b>^D z3%sCRrzLpzl+O6u5|*iB_o3YcoUbmnB>tx%iiouqTI`fC(!T`#pG-=Z-R=9_imEbR zwNY_Rh|A{@iCbU>pG>!;RYkdr18)T^?Jy+U*QnXRFB=ctJ{U)vRve@KyHDIvXe{(( z-(r(V>icKGp>wiOF;Q;~r*xOs0U^kSR-G43tC}P63xdBI>G17XGHB|I^r-yPn~@du z%>>s_+6Zw=CJt*itz4j_3}?Dby^ezk7Q-B{SXK2+4?LF}BruT()yGAg+5$;Xhpwb1 zt)8#`QlXSpbb39;TJqTK&9sy`017~F0$OJ>_S;9w^}u@d`w?O_(A*86ge_id)7(xh z%0`u*(_vLjmF*W0DE6!agKqwW1~Kcw@&*w5TPovN`enb<2!LpPG0-7j{pUWl_?q#_ zrRhP*_a1yCYgeeWut=j>jO)rMJkipGZR8aGmV23Rv+3D*>8^9wC*(v!+r48;*qm%$ zDpKp(lI;l5OflAk6b@Z7!f2bUkV{)}pi68M`iVg_?pH=(0D~%&+?knQ*)ecd8RK^` z$q3`SEMpe#GO$eq2N_k#1kxht&$%SRgko~M64f@v=;P z!576#B{tTu+1CDY+f1MQvjM9IhRK6{Sl+l48GtTW&}Fx@N=5bX2XdL-5GLKRI5Zqi z22EFHpT_*1TZ#ow=++J+Fct5+fWoM#`~4rkK>CB^gK+Q8(xaL%O3qm)9fBV9Dy%Pmjv;;Xke61m$JYvC1Jlh3zKx*lAk# zW~i_w_MqGn>|Q(hA(`UlHp#MxM--PE?*Kr(!MCo3n%k^~SxLrUFVFf>F`J{h;T%cL z+tc}}Y?@#lMmZy$tMW;;2BprXlX0GRwmjtbyGHlYs7ElZEZI+1`?GHON-I#mlAs;c zG&3Xtnw-;>QOz zGwIrD<0%pQzV>(|cK}I)UKwqpJ}dMK^IFx^4U3>S(qkm4=ZVZj2^y_=>2dN48vhT! zm5FRO;_3$!NiEugok(cNlqMjGeTV>J16#CbpVCIgqqBsSv#TNi)ZA0FvuJs}aq~+K z;Um&nTL(lU`oMJ^YWY_WcH+ItOEo`_^44t4-(4GAsYb`*(tQuQvcLNq2Jd#h{k2=zpo_mOqJ$Nz+V70^XolVMJJg)@5fNdDUvxeJ$%n-SuYU7Rx!OCNZUI`uqrDe( z|9;eNthFy(KV?LqBN#~75>RFU^ATc>@g-D0s2Ujsx?dT=Wv@m%-|!aHHPz7mBwC=NK? z^DhqBo)UXdG^MhW;V);YR;-PZC}jl1{!fa%t7*~7JGnV?m>LS=AV^;>?hs|LNgd^P z2g4^-gkSGp&WI)G-WMR#AQ+%uXp5W)esAkJWR~Hm#9^otb~1z-=zwjaS|N`>Z#~2~ z<8@ybH}$}^iv!1!f-gEh7;=SF&wcD^<1_SEUrxaRrSZ_O0{r20*7UVv6g7GBS6sV> zZn0(TnWvDV1ZX18nk+RpV5?Wd;4)5dma6@-%4fc~H@3yBNCX8P=(ZriB)6EBJ@9&9 z?GEP*mBzO4QgrFS5e0&z!x5$FR@23VpZ|`dki#5&Q`xh`n)~%(gQOHF_7x9EVC#!} z`>H~YgBrvRI0{6>JACDZk~kh0+k40yQ%pgxI#i;js(pkU(Kje6juzeGM#j{Ll}i|( zo#%r_u|nQQTEPX9-jSf-`1b}dbUfZ6fnnE=Y+UmDC1Dik65nqfv@Mz&A@A;ucuvQz zI7PKFrD%*9aeO5)tD2y^K;#Nw#2psHVK5O1@=hHo}*3Tql@k8mFF@A1FnRib4LG;^43H&Ay2zaO0ye zPH)axSdyxZk`4$UN1gZR)#wLHCMQNOf^zmM8ytSu!OP>Pg{w=k_&acs%I3u-)`PS> z0}RABP_$nn5ORLhJ)qwIc~QmnBpWes+RX|<^ZGrobo`}1AjyOCi{ zyx|eMg3uyJJPj$F)Q*Q=?PHyTeknU1?+uOQc>*hPeMX>mVH;m{dW6ubD#ee5aOJ;E zCZ=+n27XG7hF6uMgLs7!M|tEx*0hDB$SDjE-0DFACC-tQ44#u0AMsgGj1ek7h+V-a zIELuNtwx~)-!`J&S8NqRm3qkPZK1z{>c&nXts5x?C`{PZJMt)6M2D?A?@lcvdHL(@ z=RbahNiO2x1baErgKoUTSzr6*&qQ&R`9KZNzr3=- z7fBhJbuMcc#?LfFoSxflh%8y3(*EwJr2>Y{7;00#ztAmbNgdVG~$B#3;0nZA)jIoFOae8R|BD*MzoM!*YmZ zwU3_yb*0TL9W3*%H*COY+H)dIU37m#J6)KTu>j$)HSBCf`UZ8HAb=kW_DCcbS9pJ>>!119_<)-IJb=0d|!>b4r0?$`;>`*r}QdoCKp! zKu@7BWA||t&5~5nENe*gn||!|nuzuc&1N=<$FeYRyDbaSqRoB?L$zHlR$J}Kc|J$|LuAB+zNEJ9|RD*+0g{_vbnDYs}cLpnAo%Ne?87d9RX@yrD=CZB^ zf-`F3OlwplXJNx*ddtgIo<~>7su9u494r%UFY~_<5Z~qlwXXq3Hc@Q-t>r09q?29m zI`Hto1xV&q1DtX(VEBDq1rsQ3LDH=;?vg@v6=IocUX}9xLPWlfOxOsxmfA4?ER4On zq>>nFB+?kjh1Pg7Hd>kTVSjxnG%M!4LIHyT$s}pEu1+y%;dF}(a1K`T|0v^$bds?Q zE&|d5)x7eIw2ew<-?NFzW%V?#(<&lsBESj&4UT3{B42AayJfLWOF1;-e@|I-UM7^d zy$8~1aO-b2zhslOKb9=)U3T8-4~ZE|Lyepxr?O4LFZ1>2B8&lg{1fF&?42q|8SJ~m zl3cM2S)HRJOi<&tvxlM(3a~Fr(@3x8)ct-^pzI5s+0UzUwTqhYHhwo+X0fvwE;<%6 zquM6x@R-ti*IT1SM)Rcn62BtPKn90Osj1A^5E_A6F2NSG*o9c$pyXrsThyb|Qa`fh zAI?5%Had-`JJV~DAJM+;TbqZ8(ZV&UYJP@3`LH>-g_;)4HOu1Kqvl8fcSQA!cLsQ( zDr!1g2Ofdom+ap!Z+4bf>l=uWA3RKmjcnMoYb8+!rk|+ zd^6OX04PZ*gjlJ%3>jQ!=YKU%Ht~Axd@M`BqehMqj$+@0w$9arJWTl7tnA%5-L%do z7dBYR5c?Z0WgG^XX@4MKhyx{GPfD?ChXIRGWT&$Pi%H~99hwx}-iB`GfPle!NE0%s zz-jf}mXm3!58JNFHtb3Z?*6;sI9>bsj@j`X(7Ig%h*jJi^DW*xRjZ8jcdmRF2_|J9X?^~m4Q?5cw(;8k+)kQOZX?KOW~aTY{icDzwx zx*a@Kzrwt}?mkk<(SLAtanM6iU)eNK-nYXzcToguR>x$b#dg0GmpDqeDE$CG z#}A+^!CamXE*$Y`DIH8qQK<6lWrKs#%v^R}*@gWCb=dqG!3z`;z!n%L_k7Y)iVlp# zt~J)6RIh_aZU&h7jfsuSAhJmFkRy#-rr5{k?|K~a%PyijQqDdy`!AD9b6VKONTo6- zIR&mjiEQ$BtcQxve}|a8CZL`vOfij8YM3glnojCu4i3al4`g$EJgoo|p(m0CmrAt7 z0=O_9n3nhu2avT#GspDP9SiT2=DGWBw6=rm4=)?fe6@xaf-`2l4x8^2-F0{= z|27e6{Dp~n2&K10UOOHaQ9l%U&vS+xB3-}1-b=22hmO0=HX?Gb8YAP^StBiieyw?` zceNHMYzPOUIRgBURY|JkN;2~>?wmX@Y*-p3wOVdCZ>@HYkJYQsd!9cyn?T zE!W*lu{qe5NYzgu2Td$uXQ?7+P0qVectHd&VXoXGQ3SHKl@gK+5vNYaqSDubk5wd+(2*{tye$!awWldylEfN){N zZ?uz^HVF}WcC43l@k8)C9iuXZL%gRWJu$OdD0&qsTFdj1*=p$MvX%O%vY5D8o8n0! zs@j{9u!dMUq0BBMNx^D@FX3)-VZr))G?|Op9rm79lIc@a`g&@I4lXEG3WR^YSjR(S zTyJSDn&gRKbNKhCufJJKqGEB!VDl!E!x2Bz_#qVIr4HkGGH5K?m@ zUyY!n&xm-3#J)wr!QuFN>hxcA3g6&H6}Cyqz0c;+BP3*Ug?0Kr_^Lcnzpcw3kmksbcBf3()0iqRge>CXf`hp4^Y~ zr8G!ji!ZQO;jG{)S@fyPLEEo?!LC(4&a@={6?+47ld7cxRILmxob5`3d%~z#;q65E!&%#tXj|)R;%1wnDrSY{<1$UvMN^C>xDvy+{E#>I?o?8oxga$T zyK)X``L0W8`gZMe6pM`65y+O2mZ*EjzoS5koMefJb6(WqWLDd*llgn!hUda#jq2Mp z)jfpr9HJ)MjHt_qz3oYiHCdY?yv8q5L9K^;eM56;mp* z$+0|(xOd0X$xjaYctqU8k|<_)7bL|F^@bJ9YXNA{V$;oIa^Z>w*f_&M_X_6Ftx)osi<@jbezuE)K>cStgJF{k3M5 zNv)-Td>YZITn;TI5GE>3n<}S=WRk?%EIZyGJx+z>I(o@2#)vH*q#05#tU?QA8HOm)2S+ZPQlEpP z@(YJ#eOyQ+ifRJmm$+RXHIir<#&g1@ud>e`#>9d-l^`~lUCD`(3v}(tDdv?(&)25C z8PKt4G53OuEKZ{b33DkevoWVntH4A!376>CF?is4rQFxB$_2ASIj-RY9)LQ=LG zwrf1w8Y0Sxqg4i+jG$x}Li=94t22^+A$j|8pi;~9+zww6u9-x6`tFMCJG)ii0;v14 zsC6s{kXdWDpiPS)c>0rfaR!-x8SM@wH`3f)NN(5V&=>MZvJOw6B!;IddkC4C)qway zip6|$$kF-9Ul7Upm96j-Z3xir3t^`+l#ou^mDZ=lwHa^6N2V1g6s8rm&Ct4s|J%Q2 z_*2TdDGPe%+kJnOIa-by=B!f`jd)sQu=Sd{&}`-K6)q~d{E2{>z%Rs(buv5^H=DO! zDSlEx|G9(L833Ch(#E%~TZw)EOOzJ>ReqhT-ZeEEm;^Qsd5t0U5rMh|uF>|Sl zU0?u-03s8*h_06umb;+5xz+e4_FUG+V|l*ax~>$?R;q)+!k7-#2|l>Ae2t?UeTW#m zM^G})Zh!)e!&r0Sm0kH2S2|u!-Ua5 zM|~UCK!t^2iJ(0(VS+g_8pd#p}RNGF42ej!gW@cz#Pnr(O|CBkrT}1 z4ZH=w!Hha^oxL%or2v#a(UgaoY&XhJA>I?+R;hy#FbcK?fIwSsnh20kYw}IFeqQVa zIi$Hcf^a{Qo4KNM)-L*S8WnT0p>0kOrsZhEX7D;xlGtEWUy(X=SzZKZvcsFA49L@f zs%<&)hfm`Y%=w6|DIV8@c#XA#`Q$(T5IaDc*LfmAxP1${rsj-1xX8&l`cw1u1B!Re z;8;o$m3VUtyQ>_Ww@Rdnyl971aW~zF2d4W4k2Z>)&pF0w)4R>aEw^5bD-s>^Dti|t z37l&iV+D5k0_Mx_E~)hCXkSqe+2Jr%alxA(HoI~mxTM1~B|J*A@tf>$mi1{vJgWJ{ zwWEoJX;lE(Fc5$*PsgTt#c}2#u|;k)hOc?g4V1)CTJOzu9<G$c4#u_7^>E}sO3lpqPwmVU`f?>LsO-zb(P^a0i*BVsE!QGA6^r)y| z$Zj4lKHk9EOax*3f&n*B%1B`2ad*57VRpz>`I>%AV`jNm`9w+r*W_Vf+Vk{(CgD$} zm(GxFclCBhcrs!YFf;V~C3rw72A_dLcm|T$(PjEFh;$xGvdjif52z+VSV-wigE?q2 ztRJ}5*dJ;AO*_RGBQsOts;RO)P}xt`5WZ(Rcu}ef z_V=3OrsQ^tz{eE^iOr@^ZVD^aOf*ROlr8AG)!ESvlSxG;vU!$?z+%p@Q0XYf;Je&? z%H*g5j^=iJ@l7>A4^pq$t6A1rT;)nhci`ixOw<}|6YKiyMZIb1cU0;-E#_)$7`sgXL&*#MH7CivgUu|Uv)@GIvyd7ds1-FEVk&Nug8aq9I0<=R{X{@McHrYxb|_RVrgstMic(vx?)sjxlOJ z#iZt*JVJv41>Tk;L$}B1bwF_p9P;Iz5_}n|ZExG9m4XgBLBy_eO7|qx^0L-TI=@(i z&uAd;t-@@`^^~S#mY}~sQ~xd9EZvx&wY4G9;2e>-G;e<^g6DowO@Lg!my9N5CB&WQ z0W}&arYd-e`IA8xlbrS}Wa~w&j#Z;5I1#Gn(q6MqU+9doQ4)B2*SY6tU*nY=RT?Mn z49hj`azPJl<(ru&#IB!Y-I3SRWPlq@S#XxsP0!-TO*!!M^;~1A3q^A+()-+exLr5j zK%vEnv^%MBq>1{eFZU^v?FB;VsU7x%1rV;Gvv)(w$91xpZy(e76VO6HYKsf9znY4V zI(3J+uDiL~01)rD@TS_C;dw37?aeTBazY_1lS?p2w<`-G*3t8c%9U()y^1PKXTyXK zeT14vz`~kLNbbo;xW_;mVSv^0&g5+hU z>dz*GC8KF-bW4Rf^s@V(af$9K6G7nsW*sSw80>}QDHnVF6S}|zotM8wGmO1}cTnh@ zWq9IA-@=~JF9BuiykSC8Zrv9IhVOTs>KDL`EE%`{>?{|npK_5kB-I0{E6)>xH`Kfh-BM55hEq)_Wvf$MXXeR8ZpU+s{x2< z@JJxb=T#EV>KgP=<9yzbY~LNn#ok7_L64p)AFs}tJMv3}q0FWpon_=2ylw>fbW`Bc zO=Ea=Iq>I#?ZyfeWy9ANVO=N;$h0pIxcLJdlDRkq&Tdp61VdhB@;*xmTIi&9?O}P! zjXr5>Hk&4+mF{Tyf)81Lf;`rQc^6F04lnv176DNZ9lG@0dIlR+g_RPUd zf%tQ?dj4h45oNS07i_$~;z%c_(N{*E%I*v-@m4+w2Y=Je`W9nU1w~r-__QM*8CLX? z8@m(@2mqoP#N^{sYALlEusWZ#@UwzCG#c`Cpj`hRo)XP+rIlORBPnMe0YA;; z-*Lo{798}e70gv)c7V^h0+}UEgh&jFkEvos45f>01HMbE(Qw7dim=kOV#@%E{RAc} zRA63GoeLk?fVoxhAT$QjEt?cO&sui2ocxeHjPp%^JUd6?9>3xB5dT7r>7>iFC2^n= z{RxPrAeuyu`7rQpX!Cfrd^`QSN@Ct|FQ*>ewnKSCtq6IH1Z46!($}PI9 z?qf!Cl@^-ArN@b1pw`SnAHl@?C_OW0%ofJ*1d&_Hn8j-AHM3IZwAAOVBipw0n66Szc2e43S;jJ!A-pQ zHp*uhQKM<%r;HZQyJ8P$I}`HF#9^G-*)w|<4y&3pi&-j+*>neyvx50|E%WLFqjqadg_yYuQPb7PjRska%3Xzi>`()=)$)&0H{ z98$VLro;hAfA9TqUojTeo;3aK#!-fq#-)||y(UYu9mlJu)gcXY@;n>~- zJLu1H&>GpHN2;ZB@ii+OUIL3w*)&xO-D+ozZ$eB;`2K7vzTY>BR9P_zWwYAwAL|zz zTlwV4=e>(A;nj~jYf@Y@mN66;o&iW#Q4PkP$o;5DQa zmH_MB`h);J%mWKNHr)80<*be<3_89Rmlcio@0x^#B9OyfI)1^hBm3*N>Dn2LJZEGg z&_SNglNdmxJ}jwTHUcf;1Ah|`4MTBZ_v_Fu z8bXZQ06vr(G`npH+=_t2>SFKRnIf@S@AS$*tXFjta*FPMWOP*X=QGwkO0z{czKV}G zbwZi)b|Qpf>TT&qFf162)@g0TI~*v_;)?a&y@sZSdDn+Kp@DTL{mGQ6UpTlxBI?8V zmy}5g(48sWDeG5k%cT-)f)GTfrplIkqqrVy%7gVV1@V3FSKZ^(YJ*c-90tfqr67_^ zDwx^rM;tNFPe!Fqg(Uz`@b*UsA|lMqb;T*r)Yao?D~TH;(HLajU#!~;As^CX6ifujkvgj-w4+`mmcmBR`&JE^$C)wpk8=@wKu;BivnL zDD1Dcr$0~akkBx6(-A#AIT{F>glUh~&1s#E23d0wTkRQv`fzbXd*oYcbU8f(tDqm+ zLoa*C&$xRbCJbT}px?+l$hR4P^IL-Z&h{&>Gd#(19*MIv^mZHW~L-i@X^mS1%#7!1}xdpdjrF?-mBV+P--dB4VBXwHYCM?oD`x9f{JfHz?@ zj|(^u5d?s*acFQn!agS#*~wvj)%Wtm>X$M9e#iA)INmQJK@ zL)6va*0V1Hx6wfN8uAIJrxdXlVW`E!)qJb)yoI2HO%3myJUj=hqrH?aEJ7|2L;u#CEhZb zMIV}afzVLT{LogSk<(#V(U;8@;1%xP+^yAM3&$&yG}PH??7`R&Y%mIdw1=|zB1RV zBy=Z*iz?9JR^2v&{OSy%`7#pj8Rs!go6>-mVjRU5^aWq6{FVm#6%I_5xwNl1#U&H) zbd0YmNoyIq($_E&9OQIv1^Ve!R33NJhdqBc>@;{Y{f|AeADni)ZZP#|E)Qk83?bG9 zm!pGse;1{_De1)$g#=>CDG7?PChyo}vdt{o+l0o_oHtD;KrUS2)I&V=zd2;tA3}E_ z@4JqPZDpQXgx+U3j@%k#kX(LoxET6l6)i^B>p1+K#FD=UMsZAu8=9WaU;8>$YANj&e1+$WRzmDB3C^dX?bcdAOen0lWaBBk zCrS2KA8BqBK{>?W$X0CrJ{KYdlq{`GT(mUSBdiJL03*!R6bIM6p zHB>es$R0$5P@f~Y!?VbkXHvjg%5lZm3G#8&+FQ<2Mhxx&A+Tuk=wgz0-Kr0`ADyw0 z%pDvXvv?FUtk1^6vTk4Cy`Nxp>`$rf4mFqkq7Tu0Bs+8v7P4)xpdm>@u%EM|Cwu%@ zsVz`yq&god&otSBW>k}*g4_r%UTM<;i*#hab2M8P2;GC@V-^u7bx_!$k8F;+10b>O z%XZ~WFbV$&t<4TosnW_jZk&R#GHnv^RUF5LfWZPyX2l1ir-B>2Mot7eK~{+OBbNlD zZUeeR^mQmFEcNV!Tt5CRIj+u)6X4a#SpDyip)e#%GKVuA!v=u zU*3$-QsV-dYGpOB%oxm||6cV4bL^=RKA9;lLe9yP$4}ZZ24HF0PmXNE(f4UEwwaZ< z>fp73Xz&AoNSyA{0wu^w22QFfz%6kL`YCATJyWg+4tF$3Y!idvz%<+BD|I$#Fv@XF zm7${e=AV_sZEh5&8}SHs&{UOS_G1+i!wrq)kp#q6J-itenI}t&l>!{`tPkjoK}2Dj z!Ry}!eKdE#b@Bg8BnYO{jyAr73s&G{inRJ`lVu_k+tn~ZyyD&D81+$)R`3LxZSym} zXvGRakI)%9Of}pmpo{jcdO<-}0I{k<<^+glF z_{>jlF5zt&)0bwV|LTf2#;!~1L}k|pR7Mq@^(%ffeq^tU17bc3y%fF+eD-9upyq^P z@2dROxQ#X-nk)dLwYLr4JMa}>lfi*>7R=!lq^kq3hcA&bNTVSMtYV>C$wq7beqQ z4EimWr@;xw=;3S?T0e_fhL@;rgnP49d9WMy9epEB|9T%1wgSgbZDVj#9o$&gQPb)_f4m};GL9} zm2GK7q{p>@a~onf6y=Qyr^Km^F?mukW&T|^D9WJmX!h@YVX(xpvMD(hs7I5;8_%tWkO8)qfLm7#(Od=b$4C@t-{f zOF)?ufjUzL0#UzdM=3$jJ9aj>+m$-?vvppS36sO606Jr#Se7@~J6}nu$N%GN4#PJ+Z|EQeVc%8NhQ*6@l zd_+fFSZv3<$i8pF$S`9kmYkEZ-&>Qg8uL7g-<_B#@9{G7Y>2PP5ULC$bWUoYDgZSq zw`zSxuE)uRy8UpSv(qRazKBoKa}Q6%Eya~4F=AtKts%csglXtFFp-_ZH8o5sbyV=X zI-0e#xY#&Vyl4XPr=whlJcEpv7QK-~Nxp}I|F$x`(=z1KyF`+1P-YtmzRs=EH7YcL z_9@jHnMVMky4G)07!0ao>XMJ4!sH;)KZ(u0+Mw`XzXA0Yi)zT>1(x@VUi#3W)_IW3 zfg%T|V;Z9C4am~UwVF@XzFfc1QH<<(^#xc%5URFUU) zvDAb%D=jd9`lVjM@lB4)IC{SQeNUdJA%GEyaJw+m`yWdbnEI0nM8$pP zh>U?_DAQlyePsD9lZ+96uB0xK*`mCGNjMSR21me@{v%;IAI38-XZ{WzDRw5k4LQje zikpv+CkcrNP!raY(Q1-Zka+JQ&Ex$Ce>m?Xyu;88+<>cCBQN9L?HH)@hgHA8-W4Ccqfd#1S?MR*~)h=X@O zSY9GI?$OmS-CIxhYBZBqiKT31Lq;k$T#j+BMb4z${jGb_3K&R zF<&4@lnL(@B)gwfB0*H<+^Ml{B+9H%4XrN2!$Tl znh!^4uB1!zDxNEReVxSZ{>b@xv=8Un4s{^$&cHaG$nxO0{e{%k z&V6J&(aRbW2RN$1Hxzc9#Rn!5WtI|2k{0&VtB$`;a;f)|t>`iY!0mH^A;2>l4Jb#yk7-g2v5hfW>7-A%Ar;Yuzzqv+(ocOYx%ckXm&r z;xz~tt7lyb;$7Y68%(QvLT9X5?spsy_(-d_PHm9h4BD+3JmFHbGr3IiI2Oal$pZCD zLbQ{IcM#H!=utSm&~wUM>^Rjf)%G#b6hCEgp}G6e~3cjGT7-1 zqf79@f$b(GMYQc!GD!Txa^b?MF&C5E=v4d-yXL|SI&xHP#;GtUH6e9!cBQ7!GzdpU zp{F#)Yl~%sOb3JcctFwf!(9FLY4_unwkuXa9eILV^j&sHS5zN%>`B(#C%gJ?j6zja zRwx4()!e;aK-fKql{qZxQeVLc=!?^U|84xJp~kPi|CJI@1i6&4orCR3MM%}66#(UO zZs_$1gdr~_C}5NP7p@rWBET5OhxK%X>q=uq@!cKWH^rALx`~D{mrseFXFGU^iH)r6 zP3tZx&evKs7gn?gxC7clWKWEQp%Dk}C^!Fu*$DX()H1ZDrFMJP-teN9D3 zC78_sfN#EQfi1n?S8~JW=uiScnQ~kKd5VG+xIEPUrpzTq0{mOM$U50UGhp^F!_M79zDysM!zIO&xw^m$giFeZeAS=I<28xE7 zQ-ZE5Et)q6udCSY`)h__ncT26SR&mCGf#r1;U;m;oIhh;r0lBM8yig7TycYAJ=j=f z$(z-DeO|T%#T~wkR2Oi88Q3ebvc5$3wdQBC8G>LvMs#>ppPo>*hs^>Hw-5#1Z@%B* z_-EduLeQRDCIZP|NqBG9BTlWD1C0#Z&H!@8tO>9F+y+F%Z+o;Yt33K2P^1idlN*IP zxY_^(cv_Y@kdWA`Wi&5q8)Aq9hM$HXa;n|IFlCDq4}l9tXASppbqQ*4U1A~57KG?_ zPqC;6#4#K`R^F9lERM&4dX=wPWu>$f|$?k^3dywW! zW91-C4AaOdh^X{N<1pOGiz_2Vn0H(_S}k?EG+k@A>k5&&qjkrN+P`0LH4lNc(6)YF z1!)u!a9l^ZM`SUE-tlb5O@6P$xwZ_QB8I?vn5IP|=t}vgBt){>?F5^q) zqfoSqoV;^sJ63(Sv2zB7lUT9QCj{GbtGwI>7D6laQar|lJrATsu)7zL2qC2X;W(Jj z*Uy-#+ccA|$`QbtQHm zF)anm(xy#4~`Y^-d70&f*mpJ*BdRe3_8uyL7W+T2zm zJR@LEb{|;{@uX;fMX{MSw>99ALHXzFbt+W0v$GI=>07%zxj&n!UGpcT{A%zZOlEiO zsL5bHB{-44mv1o*RK~PZ;Frb-+lGc~<|KKAB__oBLKt$MEW%AMleqZVO%r$0p3h_S zv4BZqEuw!&z<*At4X!c>yV~7!+=zp|>1(%memDSt*;{M?$}jL|9j>L$g`bd6qqQ1% z8(NVG$mQET&2&_DOjh1K;`rqdu58PLH$M!=5%I$K=L3yO)7|nrc>IX)KP zR!g#xER5oWsKZ+tnzGq^B>fXUlGiuMPq7Zp`Ljr~U|(no>4|jyeNZf#cy{A>`hynM zzk{d8+Q%Dz%2ZnP9a$apDU#nD#hz_&g%Dv-=*+s9H3l{w^_%FoGDj{|Ff5mK zQ*`etYkb&$ccaq`+2=0cP_!8}poQ4d%KB z5u+9BbETa%ts}G5GY#ar)o;QvKb`4aq=qcEdVD8}&(?n&nyUKFl>Rv$hedV%?llP4 zZxZu{bE{@`%S|C7L~lN`w3nJqpp93VQJmnk*asR^OTH`}GD`n)EKD%izkc9AJvFr+ z0j}?lcTyl~iL!Cl;b(Z02wQ8$O6C_{19g3fKYL*|H%zz-c@>Ca(AH$#eT-i7^VC{X zjqi5FBu}G^S{ItdCRzn*-3j$98{Gvx|GgZxzyB*o9}y<$rrYFu0Z{&g5px<&IsO#> zmhsJg;@tksY!a@07IN=W^%2Sp7;uDS0m|m2#>w{&<&ob8z1FtL`57X;lMS3CbGI1`-ZA@-`7(dN?6%GLzHCy36qRF62%hjZEf4U(DaXH%Yg^TAEdN7N zUab9Yk0R3OeC;J=CYJD?kFRmb=+xCv<`P`Ie!hWcvfhk}GZD}kBJ01=5?Vl+QJ$qh z*PW?bNDGcMmGO71m$P}U9Q-J%H_Y8or}KkXc3UY?S9JD!XqkE_je6}6sN2Q*XnT2k zS*a;Z5rqk}D{=|iKLwH8udv)ZtfFKn6Q@v;5NOQxzMM>qoM3p1!ttkfZwqe11R89o zr-j4|7M5Tr7f>sPLv&-k9s#fYXbFSA*ik0QD;4>=BU?W}M9k;LkTuCs-rM?kuhH~h zHzl_KR;EaezYsnnBnM)_dUQ*nSmM?V9gFGN>s1&UjiH>Pd+^{Q^?BSO7{8R41%$rt zH`RCI2tyfd$^%$)9PEIK182r8z&el4BSZ^tR6Oge4IY#BeX#v->(h+c&sSI`?@VnM z0Q|g`W3fMzrb&fd(u5n;JH001x4WgF=&UhGQx=eTnKRvKmKvEQH*B3=$y~L2j+iBa zpx2v0a!;tEEglYLJ9r;iXR|cnz&PKEP?uQ|%X@4H)@j0V!2c&&_rT~##xr!JGGn=^ z*qX;76dn$CLP05#!SsXGjzroiAHT19Q}f;71ExX#--|w38v+#qBUNcxyB?;Hnq0BTrOX(H$yh7Eoi`j2H>n*2KFM> zo(QKpvm6MAE?($Vf#p#3-PiaoNx zq(~&_nWPhfznMa_tjctK77|vz$gz$e|5q3ZPVcQK;z%cG%^H*W;YkF%iB(CW&KQ|0 zH2i$vO1h!}{#?vJo?lc}9b#2;gi_?f6Zm&78%5s+oxj{{{5}I*Z#{L}{2K2%gUwY2 zH6D;NTN^$P$0`5R^epl33Jx$5r>L3HiHFcN`Pt)jmq$xaqaSp$6N@))efL%T;VV39~F~Cgmw25 zH=|==g&z}6+M*c+XQR6bAkaOL|ot1nRf_@$f|D1K{<5;g-g z`Wu6x=UCW(w6+|+kCQ#FKkgRV#E~>7y5z9LVqriEdK~Nr1G=vNSK0l6M2BEa5vxul z1P~3aqJ0Rh7H!ro<6rkU0uklof+FP*fJ`$b;&~{y?Z`omLZLYL#0$1pee^~>Ev~!~ zxKj04PjSVQW_Z~;*jn7{c|S(W2uae6qX z=H>Hm-shi-3wCoZ>b}d&mT2|=m! z#*NO}RkFaq4*=x$8+qqO5m00|G|9uh=&>@=uwI242JxWiN?JI1LOk-_nz7tSo70Nh zyw5mIH8%JcZ3AvSB&4;u!lE#OThof*m&FuyJtu$>^Yl)X!JxoJQrAi&+)mGdG11N`}75hDqF(W>V8o3W4#v&@ThVJ7WRUs36Y z)9fRi0X_j3b0tLQ)F9R%GCmMAMn}9B`Ei^5`i}u;DYRGfr-+RQR{whB^-K9uglDRI zE2-S6L%G>!K6d2jgvq7RMjVT6=yZ)o&8HVZUP7nh#-SA9{oB@o$H5ooTM|pH*C&@C zKxL8+v-AF$|KM+By%xAUK;iN^7oyRknq|EKAZ~hTAVu?@8aM}0-bRvF}1^n&pw5Z)88`pF9qVms4=fsYUqZ8UaMsmA_uKOZ(nD!+@c(~70% z&>Tk`XG(FY-G5Qh?UNj$-P(Px$;E}n1{()3DPRP^L$fYS-oW~#h z<0zrV!)CivJ-o?+*pamA#qoC(KoMUsohW1)IkVy#I*xXAcRSRfX%Go0Et+?}M!I__3@1--Ukrx(vE-R#y zR>1dq{NQ0{=-Q|cVtr7E@dPCp8E(i-m6r&5U~8E%TB> zz9^(i&NL#Om}8nf#+hcQiP;4)%*Zh+z?1*6+ZpoVskr-Va;#4TpVpd3u^{pm>m7Qg@SabpiYg;s8AY2annv7G>^g;lV zvP~&gJH1$)p|Arf>JyVI9+DeU>>5?TpU-scsjo!T8--Qq-6RG8r-H-hy8kMfoxZ#X z!RV1u6JUv;HV(h46zdgP^hRUXuA6kA@kE_ciscoc&WfqR1vmyC^nF~#?7G)X9pZ@j z`{^e3@sLUpfcUck)9%DAD>gs$>+@cuovgy~VUYJoj4Mt5Y}P*3O&Xs~O>F9xCUZtZ zN54Tz6jU*j-O?oNon;-MT!jq{+<-KaytavF^vpTSt-Erm+Ysn^28_@LT^5al<#MB! zu1T+^P&CRd_j&g`lkFEsO}1*Q@61yz&2r$EMF(&DYhCR)=!*WYaLKk4_bNb2-48Zk zcIJUD;`y3FZV^lqfguzRC0%gzs*6#aimv`@QAHjHNiA8aU3M5qW*jBWn{c(8>SKQU zYsI7j?k~omh{6@8Vg{NODBY{gA=!xIC2ByCl&XJW!RjHS=a9CtUOAIk`#+DUwWQ0< z>wZxyS1{P-85~#qk*l9VUQ`O8xU*8pXF#0%A<-IyF%`-XHL~3ManP)F<&IEcTrMJ^ z70_NE@3U2#kiZuW?}qR8V4%MZJjeYqBI4P(&)`E z^wu$-4}LAl^QiW)M9&pvfmWslpv_MqJd-Va#682Hwje7d)A`#X{QOEXhy80^{!MwM z<&}GAY@EZv^C2GZZnJ5<@MPu`Ogl3_TJo4;DzQ71FtYFu77=|64^Z_?Ssp_cA(gBx zk1F;Qtg)B!Od4Fqp&fkjG;RZ%5sOlX{MKk*RohL>=D!nq&F=XyEJ`RqXp(2_hOU&h zn}#P9c6sgVhVD!4bT1?;u?|4@L4Lv1Kpa5q|6E6FtwkcNK!M}wbc{1n3e-@MNzye< zf#1`!(O(Vu#LL|fumy#$O=$u(04appd^rr{UJndNVZN*H33#m?Q~MQxJ!p(stw#VS zJx#lEvp@&0PDU*jk>zlN#1G*04V6&IJssUkwZRpjr@FUW@b=SpKp+S&F5l(g(+f>i zL7Ki z?o8gX5z{j2<08(7P(M`vjUoKR39pz^<~+y#?D%Dh}HFd@P+?aJgcy(~f@=kul`y@?t zBmmqG)t|ce8K0kOBR&Nze4F1~t1B76x52ru3SFX^r}{%q#8&pkoYzByk?*WU(d!KJ znS&9f&-(NT0URUW0rnCzgH}7hri$QhbUg_b_HAIL^Kz9$X9hYhH449ue5= zo!+tj_wQzM3#bc-~0C)JtUS7^{8AZ|*e(398 z`3roJQG5JC#V|Z}?|kL{-QfGu^WuKjik@vsM$_uyjo*LNqTT&J147|cD|v`Y%A`c4 z^DV|OpqfH}f3=s^_J`}Aq3E(r&)KpDR-9b@`-E;hy^?f`iPfSlA6VJw@COAi;Euy` z^s)bfDfo?Qf%wvn6F-bV+3djSd(u%tN@+hy2V$op{oItAKT7`A`ziL8(=Yb+^>9O$ z(EkMHtil>Pamn>p(x=Dh9y13$vRQUP%JauM39^4#VAA_*jIGObdUm$tRGFfIXR;Is z0sn{fx$s4b+PnJp1+Y%ey;D~Q+3*BenKUly_oTg(j#~;@y<$-T0}_;mqQCItOD4a+hDS|WqJ<6`eOy8SjX3ZI^Jc20wxrJa<}B)54nPYMkYl{mh7 z#a)7JD~$TY2~aSFUtXtkI7I=$3cnA9Hag#pCEN*V+cOke{4kyf{Xy)-;q}o-E_+eu zR|-U@5U*~)FbZ?x9AP<<^G+PLv|Y1!gN;A`O|BB8O2DW@5@y@pWYk zO9?QMLW4dFDok4!Rt@1S7(3soL_Tm*HKB}1Xy85vRP&+kFXEY&;^R>kmoQM|zjusc zkjazxCJXdFP;YDp`KOZzPz({gY^h!#m<>hwz9j;H+rq%||IZy}agi=*o}z!|UKVtz zde6jDUD#kHmaIPG^^8~@O!KHbe?BPLXwSOaRboj$$i*SKd>>GK#6>7tXYAsV#hex? zZF9|-=z~2APo3+kHHE7Bs7VG;{~+RLh2yzF^C;IrfLWhJ^kGipo8__M+7*jqF2u7yj6`!1i1i0xynCIJxdQq$34GX4VjfEX;`_#p?Q zVxC7gb>grzjyi)EMa(4!6CQ{uH;Ti=pi3PU6ghnXz2ndIaj`j37$5**_60tQq8<98 z_)wKERw&c35=)W`it6J3d7napzpYhuB=du+IUJGh$5r8l(Dg9$^I{uHu-<)1tBlew zZiXDv&jd?+riL^(9Z!^ZQW1?#zFKwblgV;to2nL7ixoKa98}48Xu9=dwgE1R?pH5u z(%Ia$sc*D45(5Se7b5IU&(pb4i(BNb#K_p`QF%rg>S0-6H17(1;U&%tl6=l58rvy; z#Cj9pc{ga2vD#}z4LSF6{}S5iC?Z#dO$uAh*|tpwL(RP7O0<%7QQlv|f!jCdzD`%U zMiX*2O^K<$(>JVv;%NBmOL}^}C-&QsQA%58Ww$-+F!+le%WW66(y0c4U$sjJK|l(& zv6)u{U%2{=!Z$8o<>ynESxEkcsbmjdjtGl+ZFWQcRXxCB3xJVWk$i;`ud;TUi+`6Y zoj!g||7Er0Lb8Wa&Ge411DZ(zmu`J%CI&A)viT=A*xauv36M(^l_}#mBe#j{J8)mL zaX&+sIS>*eRUE)7N=aWFyO)~~v{KL(rm2zt3Tgwl|49mP=QPUKW5bzXUyR5g)i?Rh zdSQnAyBNXUTfqFu%>4m*oZ+iktIvus(le(KMxzg+SdCZ?AZ;&lu?94hACp-MBkNo*)h_DwQ&X;3#clfBaSYL;&?Zso zo-t#R9A3oih#8lGGOOfVihuw{6lym{b-ERu>xY;Mok8yjHW2(c?0AaS%}3qCWmJae zmZfDf=@HM2@u1cBOex3zLI`$|JFcU04_SrAZb*#gxR3&28G=Kj+vDG~U1|Xso#i8i z#PoT06jP|hP##e17KKu%cSkzfj=)wO?zXPXdp~h>ASUMrqTDSdU4c)!h2=%XLUwa{ zoD9FB46o8k5j+@i0<6(XK?%H|QmN|8NLVgd<(KS)fs?+mpvPg$`QigKu0t;N_${$tYasA+W=2QF2R4S~6CG{m02V52K9Dy$uF&;_O`3=rb;t_}>?(U$*kL@JKBMHPC&W zJBltoc5|hORF#!T!Uj|SDOhF9#@sv=^8@u#%q7#5=4www+;bORH6m9~OXipkj^rY$ zqS{7s%9mnoMvb7@oM7iYMBor!vsY?th4L83yurmt1SZ|U5Z-OBE3uOe{7Ik1WBQzW zm9>pfe#c37_K%&k<&1SCIZl-7(^IM-#<_uW%Dw3#zNbA9UY|Fs$LA=n7IWF7LLbg(cQUfX z+5@A}#kmPAqv_azO(){RVEKNuh!NBV0s}tOA+Bp+J-)_uBu4KaELq=IQokB(sfFcj z@t^UDH^ae%D5IMQ}WL+HNS)WYb6*jTZ zF)HS^?(NVhmrh4_M&aKin1uA8!6oh>GfDt8{b}{D7@uz1`}D5t!0nDiYANh zWXZhQMr|#Uy{3V{vl|Olg-M)#&46%)QF45j{i}*bzld}jpK3X{h%=rg{U_T9=k5KW zmQAs4ob`Z>C+jUOqR89{T)emTw}{F6_u{}$es0dF|Mph?-TT=}mzx?UCgvMIiQutPmRM>Pc-(Zr9 zRdX@7t)!738IC+=_+q}I#k6qxbST3q4fj8CdOjQrhsN3RIHk)`=o_(6X#%U8@PlWX zSeTufS%|_oyrV2y(C{kY#k$>H?KgK-F4f`wa}g750=Qgp z(`uZ>-Ww`T4_%M-T|#EMz%xF^(tk!qT>`(kX90GA`IWrDVg^`tI{zKA+teH#l|mn> zp0_Z^B%J(nl^AHUpE06-J%DsFodB*ARrd?V^kkozG z(AivVyaV4F&8vKP@sg|O)KKVDYm=nuF^HBiuRIe1TB%M)-UE8f_2bVF;6Co6JvdrX zuvg5731~7!_E$+4+jGYWSBFX96-b9ppwt}y9NFz%=Vki8c|=Dqlbc>g>-`Cpq{w$x zVYAgz+!zS5HMvjkvzaq+W8}2tix5Io<{lkKz`Bx8E1D6 zr#goI1vhqkcFMu9$RV#@K}CK9ng!w!y?9j4pP2_#R83ePiE{uKZVZ5ydtC^u$zPUZ zGPP{+ca+TtUjAt$V%9q9IfnC9d;)^978AJ3r^glWY>ty#-^(;3MzK zeAJNZ0V%Df3~3-5XVISMk67Dxeiw2ZdU_R2=uyXVya6&7M3yXo46*9*C*F1>WOiv# z&Ox0giP^7%_ zIcBIHJ+~Bb1~#6LGKzfAuaDF&ar|u?$JaFcoZu^O+VGKeD zL+eM{qg}=(93)p^n zz7`#Nys=l&$@|ZqE>fT1;WG-FcqwaOcisaQsFK7k?RVbiQ+;co6z+i+@ow3T%{a!c zd82L%>bOcdVhwvS1DlXvErZ7Su{A0WW4_hm<9t7*0soUxcM*&Q$|M>0)7%Iu;#eUL z(B|(ChrTU8^8f^6cgEIh?Ix343LAWW`5Lu5JtV#m5l!J^R^gD# z;Mu()`Ny0W9e|n} zhjk%&7u++5yJt!iekYUzANDV)J>7)p5pqTZJ{{a=hL?Uh1Wgm^EdnRuBS&^0f8zDY zFVKaYAlEJ>vm6FP@|uFx$1V zyY9OBF#v~@`(x8iX;7IdW-9$>i6omdgm}3%0L|}pC7e7RkF5?Dwx_YWw7jf(?glwzo z(Wpy+29PoH(!xu*oA+4;h+MR=@`{b>Ndrp~Y>Tv)d{Plk3@3U-F)UYA`NC3}`FW!zZPz^Md6-Z-nII_&15ViG)J zcec}5$!)(Q;}SKWXr~85mXgQS7S8b)M;BzI`q-gTm;4|XU$Aj;4U}6js~++9&8nDe zYM@M_(w(h#pNbNIeXLDGeJqBpnd=g-|DMDE=hdnF+*i0hB2I_6!={v*3PTxWmYLin z(~c7$eL+B81hsCR&C96t7vvc|4C26sM>BIn_|Xx z6VPET8}s{v+-#eYI$5276xmzO-^S)|m;IPX^7#4@l@rS=wxxLqe274tF|uf?2H~uC2g?^B)-jwrazS?$GlnXUGL5?-!uR1KE8{_k z{NghehlOuHGph4@8pS|ni4-|Bp9~ya>FIFs_a;{ryy5$?m9}~FVcyh2Y8XK4_Wz^1 zfYHJ&*s^3BAY=-21owy#vVjjm#`eX=at)veph0oM!Eg~v#C(D@nK_|YXI@UcF|gVw z>zf1pfOG14E4&Vx3s#Ma^$^*+YR&k9ev@r<)5#;{@jYX{bql%x-CJw1qVrpx<@F#Z zTKA`aT8)x^dApk5^BVN?{e_-@`VOXt!W*hJvxcj$-){!H)G-g_5{$h5;PoYB<3 z@R3PHq(jkJ270CPKr(nRYZAzufMJKfPQLq5&0+@ffHkk@Cqc3w&R~F2X<_u_rpL1JA~VOSL7fmszngc_1&tq6bbqypkdim?kD_6J8M#- zT?Lx_K?rjsC=dw+MBHlLptzZo310I9$CfXu;my7hi7&TrIeASP=xi=YYFyOisk(e> zNbC7^OpRm+^LFIs0Hyi8$#IYb!|}DJQb8mXyF%=QnXX)07?v|T7KY<5lxG753h6Iv z5tE(?LUUmUGNEF{xV{drpzOF9$0O&q{;GWL!;y0#m|QvkS;!o*_wk!HyKa9k7a^G4 zxLz#xawO;NXRUiN880Rl7~%V%05Pq;$KLu=cX$J~u=8tUJ_L=2a<+WzSeY(;K8}A= zlJ`64l-~DGT*`jc&0f}g|FKtOc0stku6FG5oj{fV7izm&;a8bUpqTt70MdtPeHD6y zIy>55{(g)O&?%qx>tH>82jsMJ%K!hJE&YfSYfXZMbTStVoKa@K6Kepu!EmR;y{2#o)rTVr6pWYL05${re3n}N*4*B#1+^tNeKhmG`eZ|Q=&oJeEqui8bZ5GljY10-4e}F{i^ip$Hg_Yot=lD0K}Y%@Omv{!#KLY-?FOYM<}M#RvD-F8Gf% zi^oLDJSs!BEa3jZj9&e?2PC8Jq`ffq&92jRZ4vSK-QNeucHN{PM!_309pjX=!6$K# zC!$|tU?p72dMlNdsccQ;<+0p5;n5_|zPq?xwz-0l#^Keqx2Y+6X2?Bx8HH+0n9wje z-bjph{pLXcO>E*wV4imApfryeVMv9$meEWTP#I%5jiNp3{l zpVUkUBxE5AMByxbTibJqHN+uIo!yl|U;0by_6LHuGXl-F);?owcU9WMf%?^O_55H* z8fr>dkZJ{=zdRn9-pFWD6qsSe%vVAkAB`If7g@#jo(oihe30Lv8~E^-_%)bZsAy+c z%S&IE9%QDzh_Eom(72(j`zw!ShkIwwTu7Bf@Z1dz6u(=sawvhjpKXV8Ijbgg_p7e{ zc^md+bJr#@_s&9-l9ZlZ^zQK-*imQtEpwx`5Np?H{SUIoPzOWp$?3&56^?| z2%L6AUSy7P@xT{NT}GCzw593bN}hi{fGg}(rrDK`5mvQ{p;`#cUqUIv_<+Ts^Sx z;)fMwCIDXDhd4%4^!-(L#v#60`0^(Ge)$`@1^y2Vl%`yZ<knma3}wxzQ%E#Mrf zZM(|7Ao%_QGNXGB1vW3DPt!Yx(*6THs?r=>B!~G&TH`}w)|4`;4N6eQRve_+)WGFR zHvDV)nsOPd5GQup5aLmVGnbBBmMdMu;II2v!lS70ke}(|8n{}IHl$!-s$alX<^Avx;C6JE} z8Hzh3%C}XVnx@C?I)+cAg}s}oaBZJ#mm{Cyo2^ddh%jXm$7tFdI$E{C`5j`E9MFp3 zIXY<-^|msmJ_sqemrPLJSRFfLy~bIoY*6@OkeaHyg`nzR$yrIHEvN=PDGVejBC@lZZPavJIIVK z@~aCuX)EP(=196GseZpZZ;mGrAVHyKIqqkMlQ6-?Grbq0+2IEPq>y@uAV3E{IP@4| zZ(q!#ZjHNKc6?r0nCOnh%E292zAXTKzvJDrKP`6+m(Bfhe+d33L+E-oiYYB|c%MG8 zR>oMZP+hmSaeFaP=hRnxcIxM**J=bvLYWtav39Ro+iJjkF+I+qCTBtL2wYDU1Uhu= z_zq4#T6m~GI8RLRzYmWbuzRkxxB}hBPpbGiRdHi3C8P~bgIG{LFBlyA(UH}uZp^tF$7T_QUzu&gk4Kp z3tPetG_vUN^X$D;xxc1I}<>k!NlCA8blE$>U?rF^pLq8xZ?RSHKt|9gXBM$fI7(L9cThq1riF?6j^p>_XQrkE!JvST9*SLip6~ajIT*#pMq3|xW6ky)Z(?jGt`MBBZ z0HW7+5BXqeUhM*Cn`65X)XLC-0XeURhr2HNgU%hv8Aoan;HaJnCsHMT<+B*AN0zx6o|A^bGYJ)w<28k(o(Gj~jTW*;>riI(RTqIHm$eJO%J+>_iGau<;Lo_ynj=yA?dS+QdD;^G*^~8!(cKvQHyT~4}1~fLf z3bklE9I@~zb*e%FPx4*bwgVX@tJ0WMGCk)KbkL<>-9;he%} z0t1-mf_ZhmS?X=Pxd?>&v`zKSelMtR1W))hy}5l^ETv$-%q$d^T2ySV>L8P?Y9{Z0 z541q@e$w@o^Z$Stq?_bUbCgJvPHIjpX(zMfwuD#j&x-dn@kl0P-{l6wPOO_76}tIq zd3;5_q*BfL)t(`=T3FP@jOYO?1ELF`1jbaI?y%=(4nczxQ*2xEV9SaI_1`EI8T=}W zwPIh-x()*4=DXuNgQdq@2=$@>j2N3VL}{=8IJKCx_snMDP{$cOItOVO7>t9fg}1^NtiCAj zAbj#q^e<2&YyHw9nI?wHWWK+Q7ShA5*iA>PA`$21xkQ$MesyS(!p2_a0&Usr>PtNm zagb@lybXwx=Jfu=__An++P9CgZ(S{5DiRT6!Q&-vTmgk@N)KoW#%+;BT%wEi!3~bQ}d{49OR?7tH?#313ayfTO zUMm^rz-{c8;_Bp)^P|bNaDH;=Bq86-vqxn`k|!8~oxpZAatBL=E#?E&VR+W@gs5Gb ziD8h6g%}}rWqyerpx`|!AS3*3uax#T^P^doMH_tq!9`+f10Y!6V3nCeT{3=6Be_3;3(o_oN&OhT{R`jP2VBssf2-b zOds+IRNH()1bJe!7tGC;a5oJXSQrdDGdgl?tb{@mt!hi|bx5P}_4Kk7jIhRz#;xzp zjhQj^kYF<>;bLxNzVE*B>VB;Y1KJ>Xo`R9D^_Q27x8x}&aG=z*uru9zQTOfrMSocO zKucZVaI$(O@XG!0_ZG-{zQm5ai7X79 zBt4}SdOJ?*9YZVMX9-^R!48cr8vNG$|1IJm852VS+OuXk+_>`ki-KGZnjPvZan2|%-fiSwcXV4wY2F7IQQwON>(u*hTVYp^bk^y{Ql(Nbt=gqo<3@V?H$ zFL3&HykiWYf8~YsS_wcMeBcJ*s)DtPWaeLIZDzf-Wwxg73;Q7%3#ri4lyXDXiZkh8 z0P0nf;0z&tF`uq?Gy!>A9S)AQ9km(RTYLdT<6q0RlyETfdX0~=n_$MQ<X5sW8nGp?1eI}1PMIa~*4Xs3aeR<_K#ih(!h4kW$n2=HMVleJRw_W8>El@Do~4#9Tbh})M(^7Kl! z_O~~-N74yFvX%z-UkJ_WMN-sCxkeTPM!fyV;pCOrh70lTfc}xvgY8TxiEoQr+Xo+o zV?8p&58U7Z?E3w^tBx4u<7*$wgDaj~uWY5-aL}pm0zLwmDA;0g~N?b70!u)ENe(s{>_A7{<%APbaZUo`nZi0gy6u)2s~ExtneH9vk+ACfp* zXR|4n!Vj*c>JAIdN~NC75w2-ox+x!$e0bYK41nqz$S#W$-7z8yc)qA>rnkZ@RuLSe z&{I3Q9ly9u2nVtgw5XD)xpbZ`quN2j83NjOw%ZRD`t1rB)JGT}jTRt2?1CmAqr~kBXULg=mzWb29;o z;VhU>iGGpiEAoY+=1oD*)87p9ZMZ~gZSO)sng8hU(xBx&1EHB{V`?0$gkjl+YiuCW zQzoau9Un68FEDf);)MvY7YdCO)_KCIILV?VasF<6zZP9iFlsVpd7o>;b`lPRD?}1u zVSPR->9SA_%j(y^4;b*BXLo0$npM2gzf$ib1zbu@lGa7t88!Vl;Pt@*no61hb!dt_ z8=8+en-C~A28%QBzq}c6lsX-!xt(x0WleF4s;%32F7m~uw`4rcb0ZIloj)Ta5{}wc zWXxtjYC+Q%N(Vz#;LG12=8Z!AHGlN|L<=v%BWHntk+S(#53A1G)S9-|qJW$XiL5tW zoWC)cCEkm)Q#mMjmgnGPnz5q*6}Lt*a zoqm-kuaqctmm5G`bWhl*Jzvs@*e6woDcQqLvJo6YM%BCdU zkjX$&6$q{kMU|(^Zuh?zMCq4YMEKOk9E?WJwi-Xy>#S5}joB2C{1g+-Yj?22z|q|) z4(Y0>ighxpE7DSo_!s`P^JHKHed6Qv>qinCBpQ)o1PmVAV1t~AJAOM75?J~wqHu=K z$&r;y9A<*Rp3Y@qC00eJAg2d+Wq6cV@Gho%f)xaqkhA?+0HC(CK9hv8aUQ1I#3tE( zhT*FQ)Q6kUja7NN8A~v@+*ws4jUJ&H_G?gsRgFIF{9XsRr-_yB=#ov~2W7F{1syX_ zP`l45B)hx+-rrWkP{z6T7e@E)E*{1nt#0VWk6V`=7yN@7|0Q%(97?I}AOSR2Nsy=5 zK}Ts%sO7)NcCN&8axc8}!M6edC2{{c%wwLKJomhNY6D3aRq|s8xivN89>=A1m`kyN z-yUJ|5UkZ&+Z`tzRCXmojtbD+UsjppCO$X*IGs!?!tT8DKa71Hpbqt$StPdZ@|`LD ziN|pUaAPJ<8I%7@xcY)Qg#POsj1oe}_?g|#02op(Q%Sl6pi*?D=oRSXwRh_S5fEj} zaajITRBk3)DUF&_-=#))=PfjeyFKfbBQ%l}Q7GE|{PbSy z2DhAAY+)ie&^>=t8An_jTI*dSK-!ISlYFpL)JyHl%kGU6-$Kg|Wy8NUXJ8ekiAQnX6G#=e{Yu#2r99A`NI zWkTIPh=B~gpAYlcT81Vinld@mqWB5{(9Q39F+c{?<6vXPEoAV&Xc%dLmtK|bwR(}7 z#P4@jeWEd8(T6B38TCA})L8EwJWag?&xhu=g9~C==>P zBbvWDzJ^upJUWA;aRbkR$I?L`Ge}fsjYPL}?W2W+-R__Su(>iKJtwgnxAXXVtQJ4i zAIInL9BZo>t$N2~6fv$dw`8HDzE7w?)z-`NQpz5#JPD z^c1Yero9fHUIBeF!8^P@^g+dQmF`-y$bi=BaRnK2dS_uFBy||Pi?M!$Nmw-ItXsE< zN=y}O@emM=gp=6=*&Ypo>wwoKM)r9M8op?Uo5;T#$L#MI4iu1Ay1h-W$Wfe*?2dAU z2#TCTsFe!ofRN_bl~+aN2$wL$n#fNQ{>N1-#O z=3V}&Eqm%abpO@hJu@oS9Jm>pN*Yd+8fII3zJ&h@G48Kv@rP&jz0r(k*KZj93rg^# z;e2g$%-vE!U3CPju0#G}<^TqUv46VrM>4OZ<&CclNdh7CqfUf{4BAOWcu=piIh^-u znoI&1r%u_rF*5h2LitX>gqwXqk~MXIjApohvQ)dbDBE|W0|~T}O}~&3@dpbq@pfDj z_@dSV96t~Le0Y0PpZ@vJR`*P#Pd}mG9#KmlT27vONJ*TC==&lWax3o0UciJ7JMNxK z^1^4TSMs#fYbBNCVz^sU0|%`7>i&f7tZc{N5JXw!gP(0hrrH&!E>+^B6(aNvn1gn zP`zS8%6R{`MNUcP=jL)lxi%S!8 z_N>pA*rw-O1FyaK)T$LePW~(wj;{sE8FkM^3IgteQ1rqrkfzQWv2H6LwE4KEh0{M6;fNvX4+YTZ;lPz_(O zO)OMw!>G*Xji4vg)p0}U`hz(GCPAH*9`>}#oZx zi%{@-lJSzy2H=tY(kxwx@17f{HS^1^e;1sW;t{581mt|`DlwIV*Tq+YcES!a&00^n z2K`zqRGLErRErc8I|ll0FvY5>20>8cX#WD7EMfaAwJ9y-&#*NsUThB?R(y? z9Dc`H8|;!7Cy@h>vA4r1r)0l%4qCy1>M9;Sm~}KTxGs0EwwCUWvjQvCXQ++DdQm zjmMHwv!R86MZukN1S(x;=SeA`eShz5Y9TMe59Gm>>h+Nie8&X1QyEDD#f(%E;y{S_ ztgt3&6KA4OPs%rolR(H;f`D;!HLqIh!vD(EX6ZqAItt%`u7w$TLqqu~>}alQ=f7Eo zHug$VveN)yAkl3jwd;?+WnNz*rM44AM0SMqxaHL367N`iEv?eE8M4f+SYi_}wR$r* z<{qJzd*H@zqa_E%6hfuKS5t&f6#O3JwQ_s!yHf+@~I?DIIX*7d+lu zO;~o%hV=YJUK#^jT7Tk;#fBakr27+?~iEdycg5UfCiJmOh z8*5rFlCu1!s4B7dz6+L(EO?4N+zQug=y3f_Ky1pt@paFm53o0k8VD6Fr_*xNwtKnp zik%eTVJl$3a+{299m^Gb24Wp`p5!Flh2ZkV8Wcg~EUUD+^Sz(MsQ8t8<)zkbq6M8} zgq2;MzM1&2W-j_Rwo>GAG*-VlUt$r31%T~6@-svDnVZxhpJic0hX8lvqPl+4pIS*5R!uAz=Z{rTo0jb{1q$oJDLon`jYk z2*)Kge|3y3*JK^F+{*zC)>fhx$FIxhe%~XKoKnENM>!6~HRr!m330u50VmL! zofvzaAg{{(L3D*`Y!o6Q{sA0NsazOdWW~sENhm332CAaEUF3K3p=3GjZR2b@ppWQ4 zAS6Ca<-$5R^IP72ss67FFjQb~ju08X8!N!*?|UZJFM1aZbf{9AcZ1PzDYoH2*v8RZAi*l37QX$=0xY#9Eq)bq#AlbW#_pB!`F<4j(`)$EruCC% zadM%q4uVOeGMjUsn5%L^x+(i9Ij#8fp39?B3O5ktGi+0o?){DeVZABzBSGH0I^i*G z%K!A+!jW76Vtf6qu9xYL|AK?clR}E`YNhnvD~qNIODixmI5nYqmi`Qwu@(MfMP3lt zMa#s&Y&tLm^nyEh8)I|zBW<1sgAt;|yGAt`Fiqyah=EsQID%-%dxjjbNbLscrw$kZ z#_+5_vKJLOOOYZkCBxRbMMU_i*_SSkQ$^tR~Us}v4Tm7g~(4RlR9I5c~dHJ zS5dt30;e9oFF{MzIhjBIYw3ei^o(g3r`>GF62=v@IK$(v2$KR?U)#AT-;3&%-+D2c z{PMDB<};(K8hEpqDZF?L2Hk7&;+EOYTkfi9KB?0I3HkrqvNxwrLA@AW;To=sK^0X6 zCsRpFjDT6a>1x0&i&aka>IOH2lK$F4&qi$Xj~k1yd(qG8#*+J+pv^>1Jzp#qRMszV zzP+a8MKWE=j#3siP5ZWn5C4$%6bsxG?L-MFw<#RPT2yY?b&^BEqK0z$@|{q5x`*w; z3f*5t3X!MRnVxk^6)=#U>aj2O=1L*c1@tUK?{bNu2S?5qgJuWIGT{JrCdq&@k1(>) z5o(BG&si~}Ke7VE8hs3u=QY3-L794ILwT!DuY^(z^ubWHE{@alk0jv)*{x5U=!P>q zMki!B^_x5hNwg@npi97;R!KlL+73sDKwBiX&5(2yhgmu_H;^I&8|@D9 zIUXTVG&V(LI6PYe(&k`P#uJY7jVsA8SO3}xAsa9aKQ#2$4RmF2!k7a!mT`7gWWZ@Q za+0*-vh@cV$H909^T=XQQyDg+9oK$jHiOzDbjjGzB;iQ-y2;yuYH9~c_MD`((^yKK zyu7Io&RQ^+v~ui+bqD0kqFLERO()V6ktz2g7J%9-lV3uX>TNwXoetIEkY!##AsD={ zHK!ZIMW?^IRa_XM+6M-MJ&(Jdc9uhSZwbOuZ>O~lW9{qnYD11$#@*O@jl733=<-}Y zfb<2(6aLXZQXB=UYdxuBq9l{yTZZ(jaM|k#86ZhxfT2Tr_ZWN|+56?kF(ZY#D-saX zS*_?OBOak$(96d6znTJ@y-G(LCx++@bD(kDA>qE-1w z(Z=KQhirr-B}7XwU=4UktlZ;+GdIOZO_Z-iyuFJ7KP98q8Gx2eL1 zH5pMekJd>y@+zzkhqV6Z$2uSs^F~SVOfk_SO-%5_5hJ*U zGhuk*uAKwGRp35t$fh^D6CP5P@LnriaL0uVo-&dSES$VNG7+#W z1u7$LSS|xRe1ac!t`2V2L%P@EB3<4A&Pj%R@raQ*eNuTqN!Byj4>S@U3@bls7=77Z z>T2m~+lFp`;Co41u=;4(9(lr%rM*DGapzr3EPk3tCq?T(>_FV7)_baC43fHmm6RO2 zK@#0y>3hFhqVJjI$(+AFQS*|8)&Eds$?~hy8($e`qXuSk5ydee#!RFEC@Sr7T2!0WT!n4|iVIbcrW8RPQ2~ z2e|p-S+qz8h!<~UDsXi*4I7~Cb(JRxCxJSu$0W(>e2UGRYc7>uPAHJ=G|O15Gla$B zoHTcRciT?QlZGDM8?S;$fTcKqr+B-U@c)IKaEYB7xKdI}VfX(`caY?MIFayXbutk(GlHo&fRevy ztpWIuzc?mUXiEX*m|TbS%5RE==0IIsOQ^^~h9h(YPpBKA`o8sn`UFo_YPBgxYry+* zwD6S2@!)Ud;Djr|Fw6);$;X@BKG&a8K!q+;A87E#N1o7yxU};zPD8vL|12@Tr6M+J zvqvpXZOVz(U24OaYse|z*uTUtW+RC%nbkG8H)pZB^EWowq$n1hm$iF!8paxod-kA; zO+V!>69l<|zf|?E{lm{{RWlKPYFA^~RK6)=NM5H~P{`!LR!8cy8geVV9h6B(#sW}; zmlFbgQ8jy7kV$o9S!V%i{MTB^6jYq8T}kq7^e@sMuI%yU9YeY2>=O(~lNT`m2Wwlr z(Z$_m5rP)}W<(e<0h4osNGs1;T)>I#OdunD0ThTm4vmLn*K!i6wG3mg7T|j110hs< z$l|qsIO_O@q9gG?dEhV(l65WXs;%b&J9l{p;s9^p2({9|fxKQsu3@AZNlXazO$#lw z`ATqNB3t0ik#%grrV^XT6tpz0&4)PQUAu1mk8@2VH_u#dAcmv-DqI(|DU>44M8>NO zb$oO=sv2kL%kM9k>SMb=${%?JR^iDO=DQ2fW`Ep*{)fDmla&N(UHTn@$o@d^&yhGH zJhdNgU-VGS@w{P^4Rc*_56-Th4x=^-KL~3X5I;Jn=p%8bATV1s2w>e#>NoV9``8YO zWA9S<6cs6AUNm2Uox`$)s~GOhWZ}eSp@W;)x6xLq3ylH}tikIxfls{6F=S+wzQ#)ovXySp5L+q>lU$&br8aLbMrFVl z9o!ifh%GDp%zJp4L*&-lYlkbBSJo6&Q{x#%6>&wN))d!5xde%w@M4w(#49}bg0iw< ze^dd|FpeVp)nfAV8vgcRV#$#3=h7}R4=r%PU3@ZO1hMIKeyu>tKMtzP*xkwAZ;ZmK zs@rW!tjWS@13ggHJS6^8Pg7)`E?j!D=3Q^Y;W1>SerP*j14U}>ZPLsS^l|*On{j1Q zZcA+Ekfkjrwh>rf`p()85MKE6!%5OYDv8@389#pv$M4J4?~Sc?;Mp%LO^{03}Qze5PK31zUu-6p_; zzxGm!RwhB2S!o01kA8I3AB7^Xr4_L*4tsI}@v}MNzpWt-l(1k20je69%UQ3>#)yMo zmUwKn2Kjh`XcHNdTfwyiyV}E!!)BeNVgzLzz*&* zEhS7T^2z9Pf}vQE3d5yU|9PaODTFhhJIRY2(XRiGTW3|o8TiMTpK*V|ki7?oJIr(G z)aWh798q&vI<-Y7cha9DY6@&F8Ml83Ep9nb&#d#|J1BjNnl4b zsT{|*F%EdaIe1|MBf(Nzq504fdPZaXqKwb7)}!g-sZ@LpM!xA8q!eTjBa%KqK`Vi? zJtd#VjsJ{n?zmFEK2D`D#0Ywkjl#MHJeA_zAUc8bmhLtrds9t{V{TLA#& zBr>{0rn=2^e_4T=9ad$mtiHA863C&oAK<@Jwb`5B$uJUPk|6IWN1EJ?*x+R$cQUnE z)|2O|Z17wjn)H)QyQ<#sfmH1sc)%(NK`t>98>?saJ0{sm29J^SPqY9k zrf@h$x$}MybNmn?JACAx;7=HO#94I0Jtd0Uzdjegw@U7dD68a34~eo$4_Sc6qJ2#Q zs<`5p%bN2B{|-{GcmaO}fh@FmdKlhsOcg-FwWX65p3xj&7RZs(CQZdp>x>cCvlaQ=4g|>C*5#dUCr{QOa+Zu7cU-oPRXf{%@Eiz)L#f_hOOmg(IB!n((r|<*nOhb zYc`lG>0Tg$sj(UMpBauD6q=d)#?uqkI_G8rqrswLeWb$AyBOTR5Q8mz(xlavRyS?l zWVyNhwk`>l#&&}LLQbB&d5&QyL5#i{i+R4mb{Zwb1qRS19 zDkW3gXhDarOKbmMlyy@@)xc>!+Aw$B@^I>5eo`sY&ZeVdf1i7@j4V35FpZEh{k}>s zZ&7pfG@GX;;0eq*LQ(^gTtKH$g17Z@-s67U_X6>-s6?W9Zu4Vcvwl1|2aG3UfzIUy z7ng1Nat1j~*b$E$OuMhntkiJ60A6OuU{ibX*7f+#^kPz8hi7GC9U{_5&Uz2cbuH<8oGY;S4q7Vt(|4C2r~OO0R> zD-b?SdOo^tB5CnSQZ`!q7LEi-g|1)N5PV6d2-tZG9(1sDYR&h)%|FSaS!V?hQc|Kv z{)w4AlzDzbR)NaY>DI;IQ|e&$+657b6XNtf!A-HX==$R&d37BW`W~nGZdf{YMjAqw z_&X4KvKYkYB#b9s;2I;VFS5V4dpOxBTBc~yH7pYhl~)@UfpK#<)V@TlXr9_S13Ni^SJ%S@o; zP$=UO%{}t!)5fKRA$-MGHl}7F+1IZCl>frQmCZ086r0XpqaeT!`1uK!i2W&_Au|)1 zqFOag<*de=DOS(zJG3lUn4dPDl0dx)rXizA2y+8X@@|UUGw`Mg;h9 zX`+5-14zhnKx}9FD|P3zS`FVw;nIED7#^Ydf~-FsW7#rmI(AxTG2N%bhjTm=%hVVVgMzb(4%0+gc8jhv4aASrs;A%PRibBPuNU4i6D?s47!MoSehtyrh z8NMWD4C&JqFB-(S;Kb4j;2r`|9@ zwVs3QvQ1UPnm!9I z`8Je|w1MdG{tPNXQ0+i%Gr{9J_(WO4bQpr8LF65s4sZ*#9G`q%T<$O&Wf9umRZzuh zhT7^DBxxfjKDR$-jAaqg^E|9mdpBe9Szvr0-eaq>X-kt%Uh9?anB(63+xX%=P5HT` zxPko*Vj$GUTTCShJDBvvlTRK?bY3tbNZ88%taBV(^PN}Q&}r2&re-9=u-nZwwh%;M zVwx{>M@5iZ_!I7_zh{hFk>j&@86HNZL97NlA?^Qz@|n=*x1=%aePmT;9{n>}&J+p# z2gfc!?ZC32%!nqkp4gkT&Mz9_&qgrI%o*8MM?|Y?a3LkO)Oyq={|Ve-+wH$ULeh+% zei}6XMc5IN4`QXaz#U9u8}Gl^p&4TNr!2vSx%Y2A0YsFOV43g7{+g zdY;hOhPOCb|1ES~R;}0SO9j7r$f}t1R5}C7Q^|K6%tS#~$Y2}lRe2EQzY)W6el9cJ z5Hgq2V6#eiH}VVlfMGEdV&txxRh%u(vz#2uHdM(9lekC#?>v&yLr4%Vwc<2W3M=TE z6Qjgh{Hw5V&fV~%Yp22+XD^)b7t(Hza6i0nkP_)sie&GyuV||o=^gqA+5l#C%#7Bl zgs(Y}?e{&n3{qo?khS5ZQU1@HCIJfam*)f4;}WFc%WzJRe9-5jn4jm)W*EHBXb!5} zK~bn-q|eF$<`pscSm7eG_p~2x6W}o!dQ#rLh6@ObG z+#xvmb4Ilxo#Qy0P7Xu_WJO5jW^FhzyP^amhRadc&IGYYiT2qg>&|a{I-5F7JDSm} z$_Ib!FSA4yE$TZBg2V-N?4c3D6Os@<%u)Q~U8FEg4G<`k#jy=QR{j-Btl?;jfK;CX zc0wy*6J(}H8K{oB*9lOezs-)ywT!K!L2L>Mlt@%RAD-^5VeJy;OGr7;B8oQxf%w%b zbr2|x=2+OlOTV#E*1p>a};Zj!x$GK9B&{rr6^NMf^!xFq36!_KuS{dct0 zN+f(7I>xQdpAP-ov;O`fK%-LUpi+aB!JGGbB>^r6VD=fWR9HE$WVGYSR~yE<;bZ(x zzdh81W9iL%9^LGyFLOSpP(Q%1Cm&w}Y*GA}SD7}?u35w8N!(+T zT>7>19q}9=BLG$1NA+!5(#%71v0J-8Ss<5j%3#mzNRx)Cn7hkTophq6dv{I6II{xYZ>)#kdWxda&R7~4Tu~zyK(dl~!XUcS$Hs|BoK$$IvvmfPc zAXRc{iPAb3nn?V2=lzdx+c8V~ih^(!i$ds|{yCQMSe>+}0tsXHdoYd4$68T=Z~l-J z<|C}}&NBnvF898wLA{yaK_Cz|4AlU!f6Ea-tTFu`*O*K(gGL+>x!utJ1gbz2CwSih z$dP;YB1Lx^>U95jZUTyjaUwOhg}kJvzXH*&C@dTt!U0(l=}&5RhJ6Rha+1I77H=rK z6yyAzhF0k6i17L;H|@0r9|IEWQ|;CSZq)JpZdrB^45HJul=1!Huxx#d^1I&`_i>=R z#)NmodjcX=>dfT=-LUuM!BEx?FejIbMm0`#wG|^w9k!(ItKQ4M)!`Jl1-fr{J@q1b zwntmewI&Ao22-if)$%rfna4^*PG>F*;!kXqDFKrc|B)b&Anw71p~*Y^h-G;Hp`|Xo z{Cx8u#OE>8!DysiA%3gY6G3we-kN?270S7*K7Io$UkyFq)K9O6J2JfXv9YX}a%Z;^gP5c%1W2`I zg@%Oi%^(B_KQ2ROs}RT}IH2#2(babu6V{7sKV6#{Ea=))uS@@3x6kN&1^?E7>L&dG zgDynEShheUg+xWva;LmQ&R3;n^79o0ULi*`s7r{-FLb1P*8<7;3R8>r>zb-pp`%;S z&D-{7+1`O{HbT`f3=qW}CB#~TEOVD(bAS)isU_##mK`0o)(2%pye&*j1@}OsfQUH4 zoT{%9HpjE5>j>g$acYC%%Nwj$)hk#)q`x_9E#n}tqT~^X%-o*?ifV>+k_uz7RwR^2 zjR4dXh$?9qV*LSd*L6Gcf4qr>HJA*mxlTN`JPljSVA%^THq6c#u|PjDJG$@#<*6t` zAVQZJ4VyA(p<>)N2iKeZfZm+ylk1whAME!_SB^he#%7&?WwG{e=ANu%7bh@P&(!R;%mCU} z+*P(!k;|e9CfVt<*!}D^FE6M|$m8_lUZHQ_eKxQ7Vd-)&_%O~c4wR{%qTn1_I?)s) zaQ!GB)l>&roomTp405QEc0$;slW(r;8%T}^+5CC0H89<1&A5=)%Z;q>7c7Q~%ihP8 z*#m9Zu&@}HcvYdCEn|RYWDEziQwC8fEyB=u^-_9fMpvxsk3OFa1~?w$e#=+m1N%pD zh!vbqAl*g&+a510X(k@u1#HW7dir}htGLDQ&g-(ScN7zbZb%o_d~&?5pyQ3)>vYkd zlWu$mI@v)28+_S|zYMw|Aw0{Pg{@=5E8C@a!qCI1hNR>iQ3 zCs(YNj?0ukvJiQZZrzUG#tR=qLm#Gna1*{uPSzVp5qgFz8h!PJFZJGlV z8Fd8%7{Ws5Ntz*kubO!6kW$9yL*woC(G${5Yu}-Gh>mF`8$3$!7N{`Y^G*;b2+ZB; z(j;la9+MWVNcCa~5}?=>?^sHPl4l}CiY|m_un-0kbR_9Jyjq7n9$#?SGorWvfKcWA zR!a1JF3eB!gh*Rbb~}eaLwUTln4Fo!qYa>fQACCmS_H=G{0TP65vW+ zLU6=4E9)E1(=e)ia3yhQ{2#@BCb2-|?qNHni{`7-n=JMH*9mlw(-@|yJ}6#4ma~72 zpOZ*`NxD=d!CIpIY-R}6YQYZd&Qvn>@%{E5t=)02bMI&~TKlfvq+G(M7@ZS;bAv}z zloYwH8d-b^i?<*Wya za2q>Xr@tZVe$}j?*i6Rpm2C=MxNkmnjW8JmYnNa-E+zB0K2~{WYa>)Jz%SQtgDdFa zDo&Dc@4NOxKm5f1;daoe>cv;_j9%_Yv0NdQ>@?!`8n(sa?jSgB@lkJy<;|FBL<8fY zY!2Sp;)WOdDE@#ycfC<8|Cu&gV6?L0hmxAsndpytu#-~AIFA%%-(qw(%3i|3`v%!F8b_ca`jN( zxEQ<(4ZZ1mDE)>7NWD8>2ZJc=Lb4bs749mX)$LUbfFWeJpOkq4Z2#YAsVZ@V@#l(meBlrEo=Y$DbCO z#OR$9>R*xXgc`u4;$@0=qDmDvzu(dkm_W9DsdJ+A#L^%RVQ11otG)b!7fn}~LbqTh zn5(#7d9swJh4E{Yqv%7EDcL;#IIZ}2kvA3^|Bsw7ahDo5@$3lJn2dxKJ5P~piBSx` zAkVxYgnlnQKIWI99nUw+?Ed=_U~|4+09WtE;dd@t6km}a%iaGw!uHY?*EvnRzjwHR zlEW)4Y_vdC`}g>$z^qB1KRY{y$Hhqt^C#$(IcyOCpKfKk2)S6^q)^i;l z21Iv?-M908Z^J_U1M}DBw21}=xppowiynX0@781OqDlW>_{PS4Ilrs&E6mP2l)5!$ zpdS>TX~vc9R!|u08_?7-*~W&CA@^xKg5{b*w~$oJW-(%8jC>V}{V}`*!CI5<)=Fk& znnjF&Yzq40Evx&P2g}a@-ao~*5;&O;jqc%xS8fI5)&dnpom6juzzY}z-}Nnv2<=1P zTNxD-voXBrALmL3pF*F*D3FEp*&Mx>DszjlP?!xKsURlJN6uv$*PS|N|3}xXGf{sONCzu>ClHK9#>UAiOK!z!-;)+c z7h@bfK?hWIl^hUq^ydRo+-78vz5PLzZVs>62j;bXko6pkoHM|V9jAGOqdusY zzQ>;uU+!so9~!`lQDx43FDV$d3qrB8uTO{Hv{!qtILazjr**ojarn!{%4a_Wr8TkuJ|(o zzL|~>79n6I+SAolW}au0g&cNgiO2Hruii?#@x(YY7?HwcwmAI-y>Ne0S-G{c&FWwKlvxrQ*(vLE*SCsDvRa;GR4YfEF^?upM6t)KRTzERA53leXd|6c~)XtP>zfC^wSPckKWYkagTLL^J%>m@o_zlcisF z2Smn5Xi3?wqw=G@DlN_&)`~F_!+<(=Hh-a-?C8XS3x6|;f12n%#1r!a0qCz=Inmv} zdg7d_4THPC*;O}-bLZLnHf45Rdj$b*ZAK$`ygpydv`fjFf}v?e+p>^GfSX?_ zpueJl*$5P1SOISsUSRmqImN^ve>&f2m7JyW*NLUZt6mS*Z)QcaK#9pg#i~HF(1Pd# z6#QGj1Ki(+yiK>wy_+mTVk)(}_@2G6$tcc0P`f3Y4zd1pF>jB(!45B0d>`hqI;U7F zN4SWnbrE>Tp+wQ5S6mG7L8A+Fyqbb(XToRqtq!DnsnHa?v*`i83E@X}gZn~0~W!Vra;*D|&!XdC$dfLB)ZNHv#2&Kq z9H2%9puvdziKZBwMWksF8&Xbi%ODlIZbow!H zj9{T0`)wsA-t2_{Ojrz?fJLC1``nG3^m&gP230W0XR*TLb?v?aTxZLU`7%<2dyq@; zGir;?Ny3;&7)_()b`sfyjOBO>ag05?`|1W~{^N<27P#dqFanPeBwnLMCi!tgdlBMX zqm;|a9qEmJjDU8XN-=#M*dR0kSHzY12@qMi=Uuz@*_1U-@%qT$Vf(GsRf`H2%C}%< zgy@P)EH1qsNWZwidw`LzVAd?2G|D`5*}C)gU6=hojQ~KunMKsB_ZKzW$Sb9tG&*>n z5&U(2{lT|TH#$Ji&($)eN!D)R@$1+R^jHuDdmd8$8;Z46%g=ZRJIg5yO7p6!>Wd5^ zNiWzQ>`p`$IheNlzN3y7XV7pP(gyw(tjfW^2W^sw@6&W-$SYaBa3=!jf6a_{&Py!U2!~2scFnVv>e5SIs@b`FiuywL z>@HQNp8#mB1{KW74>8h2T~{I3|2&pu&!>~#hscWZz5TF*&_e+JKMU z@vqL(@)X-$dMvG3=%PuLe{P}0;`X1W$Yyg^TyRh!kK>xT={)(dW|Gbo&yne@m~DEa zS*ph7&#OA(?sg?2Ga&%~KLEf-IwM&sJ8mZ%pxsUA(hPV=LmjDRVzS4cpb(dm(!3H3 z24r6Sqgl~nti$u42y0f3et9pa0gm0-!r2tJP+NX6Jo*z&wUf_m#~As? zHFdy$xLG4i^s8bng3yY51&qK08E8+qaydH(5UYYHkWGVLRkfEq0^q(zS2TC?QHJdO zDH;wh$}x31FBp57Yevn_dwZbZ5w7j8`>2+&ZkNyIUd5gJp;C7WmEF^-)!p$D!?&2U zBL?|>XMCW`KtNl&v~4J)VrOdp=V{di>_xFqx!oaFY1a|M%}Iz39<;!J$6?M9`+V~FLmYCcJddU6I8zOi~U}PzZ2Dsj% zU^XWkCokjsI9Vp`>cAn%d$QCRu1N7{iej<8>+(B$O^rll*&qayr7xLT;gZNLQe^jP z*D8cfbcm(me@cT{VwVgVug09c`)==fjd!o(wGg&XJH}p&$I8yS2x}PVL~Yh*y69bz z{TyrmL8i1;EZneN{O0!gFrz6BWP@yeJdP=*BN~qZM!JIimdg@w91|qI_aD0DcVd(# zD)L6-^x?d$p2Mzg5eK?-X@-$f;fK(O^2ilUqVN^o7wB_ASv}b@o)jCb^dF%ip@-Pi z6g5QC&Y+7%(PqX0gC__tpHp>nO}V^(xXJeflS$)%YZkerPaJ5P@Xcc9Y%@ZbC`#y& zqT%|odPK%!v4n)wh6!qoK*O0Xp$?=5f3%r!vZT<;ItMDn&Dk>08>kZfTfzSF#Jc4% zb+(|?A60h=p~U=YWbtuQ%c>5UzuXC^sF>#fY;RD(T2pO4EdIcJRH6=v%9SKw%FVn< zImLe4Tadsf8-;+c!++XD`32jR{-Lq)e9F?z!Ylv-eOmw0XT)1u<^D+#A_3Lo7jf>Q zaJ*-rm_J*CgLHZW-TYx3Cux8$S z{R5fA7c=Wi7LE2vdBLO@OMu(Nvdz#JXEgI^|MB)n%9BJPJv;Y3g6)bCP*zp_;#^W8 zmQZu!Sn>^CIZ8!gc=J)8`bZrRzVNWiOmoZ-yrNw$G5R*wNs!LoAeXq4ZF8Xy+pfTt3$SxHd#9`crB&M+Ugw5=p39m)G$|3 z0nuYH@JkQJROM+>beWYHv4A^ zhKSVC>6`!rj3>J`EIV8-lcY7B93o;vtQ~~70E`#${BwB-kS;NLnVKFAQ+*sM`{Ol> zH6a%?jdkMF;Wy9LA^TtWh#f|ScU9NrA6(T6;ww4)l6o(dtiZ!!hvI?wGvIa@V=xO9htr|C@+#4 zYf2)y|6{o-6t_hmKjUw99@`0CIhGm0vuWguc`QAYo@Sf(kAV=|724PvC)FgI$QrdT zM4Fq{_pFj}rFTJw-EzbnEH)>$w(-d=~Mqk3slp%zFO zzBIN6zGS>qbBhUwHR(ZTL7c+1^&pR)w>zT{ECM57XVC1#p#HU)_@5krUTu5DwJcA7 zh#ywd#ZmO%YLtd4}D5o^}t-x?-i1`PzK*b6w&vAq zs&Br%Vpxc(6L%jKdl7utx*>qmjU%!z(NNBG6#O*x+E5^G^B<(jB7*{eA6dv+JqClEi*|^W;XR|7M9^)+k^nUwNpj6rAfo6pQU3dXFLEM zyg3H`Yo3v;4XuzhmD8KpD@`uTyR3`xgGh#6;YoEv)bGCkiy)5jPL{wAqb~V?GuE-m`)=CjalmNk(;jLN_kGEtE?Th9C5xh`7tMI~gWqDip zbE7X8L0#(k;hzc*j2csbCsTG{x; znuwRMc?CB+{TOpTHkHNe57D>bjhk#2kS;2IJIUAQDF~t&W&FWi7CUS60hB&NpdjAo z+vm)xFp1)|Ou>mk-BD2B8jG|I>{s%iuy(3DNkPt+O8ZvL6p%t&5z82*&2YbmucD$5 zCBf)=)3K5=Z$VOpc7_KaMNgpzCduF!{gRlO1wJZ}r;C9q76IdK*u3Xgql(R$_9mJZSsOg;;+OM06kuW3 zzWM-k$f{us1L7uYTc@1or-pBx?==|)tJ(C{nUeeIUx6jGC&Q$b8myELuNUroRhj*%9RBE& z;Bb0p1$D#|?A6e+G#-3*Mf}Z_f--cCzBQ!hh}_b!(D_aV(WbH?B}H_=xgQ0|XFp;z z$l;?*MA#vK#5!A_^82#~zfvS8`&GO|KBaY8I#GA2n1XP*~9G%3#{vkKZ+E%k9EkerW?dg>G85tE3 zR&U_7&lm4axZ+i5L+1y~&A8?OyySEvPY6fikS`NE*{oj_3%rnh{zluzo6`QBxo8qd zgVbknwF*U4>@uQZE_p)Tw>Rm&sVcI@Q70|m0jU!F{$3lR$$z>1NA!7O=)klALB7(? zTVI%y)}pXpoT!ME>Ko-Ree8f*0{tJQGD39VoF?&C_}R zKs$QW0D+Gr*P%{GF!+UjbC_x^s%h(HOg_JLqh%C;MnA-+5D9_tKOI`pmX64|!dX4y zI%!j#o_5l3966%o#24d6g&o{O&Vqc|O`hLg|LyKru%vEYHQmi*ioEoCEsBLO7A;yn z=L36xKmAK?$B@d*g)Tg&0Jg%U0RA@oyvf7cpU~i~62sga)X)LRQdT}CoIMpN=NtRI zd?=m%k)abAsLJ+x1xaAFtI!lmLJMxkmfE{0Cd}V;m}>{Dg|WIrJQ-c8aww06(A|_u z(vX8CUx`G zYU&3e1QN?)re^hTv;%`^q{jv*u}zc2t`)OR;1%yO_rrc>X#VF|nt0v_29xM~pvRHY zx{MO5j}hR4{ziik&+F0|VO+TWfe}E8s)Oj<2$(CAxDVL(VtQ^uG-#02B3`A{o590K z{)b1ORDdAw8%SX|KVv=_pP2C;=G1+59F&~kjES)qSGPzv4LEheA7tX5&GBdxWxWY$ zus?D-xfdOU&volANNweKx`JRR$khlLobLB$y5f@W6J5kDYx6htFv+qLdh-qouC`Ig zIWumoX&}ckqI3qEOm|(k+z*@g-`{s-i<_qbA_|s5F`o8T{i-QTQhQJL5B9uFQPh&j zhntkyfApOH9kF4*;{bz3aE)!YxAjYUuvZ*A4HLOw2)N+`*pyb~nye#fV>?QWreVC$1I$pB)cU=g5WMVcqtU0(cA`|&%pzoH8ab|tf`ghGuIEm&nc$vsdlCvrE zCT%`ikWJ;xiy4&wbgdZJYCmS^*~-h1B8=tB%C3^kjfR11;(vXUfq;S0VbTkze-5^F z`6wT&p9g41%;!)%n3}EJ>QRPBQ2K3CH$Nw}Xb2HOfsb{ftY3e}KHH^tLL*hjR1R#t z-Q>^m1fSi_Tz!fRcntn=I!l-e>1c#8Rm^ahP=kdBMiSTWFgYRFiaP7G9$a|hgBqIJZnu!=3ba>mB zxgnu%@Oo~eVIX-`N49~?vG1w5B7W$1OsiCH%Q<1{y(D{FSZ1q24GAMl=sb)4Ur$Iu z-Prn+-daIsh>$>Ld{*;vt+>nd9Mi2~?1a#wlpV~O+q`aw8*fspF9uW?Idg9s~@ziY-DWjl1I|fvFxfT5mkX4ts9-LPUKA|qWG~x`!3xP2z zxmVU6zTr^xk?Rz7!dTi%mIj;0TO(lj%AQmHtah{EB&TJys|r&`%9?un=1hQFUZ#6g zL&fH)cK+FAfJeg+ciijj3K%Mhw9+1#a$!@mIG=nl?CA2#f=AzUb<5gY@$$vPLEXo$ z?#ogCBtPbg#}-SU^3uXEviRgYO!*vHfFU%W74sQyHz*kUdNU?3u`!j))8J^#$Ojr2 zm5c2|Ktub<{--xV%rQ|#-68}ZSf7TjIQq9q&i>i|RiRi`(Z|f|Ame> zuN;}%giH6)(=NsJzOygu=uDMCH;dm(d1}t)S@9ALD zU8JYtCkC!aIF{xcbt)46jO6!o{b!AjYZ-dZq1;2--vE-3@q)^&8QSiBJ3hF7R4?5+ zGTHj9l)q2b?w}*%-@EvTn>z2i#PUsn4SS6hrG;6hU4E!k?P8H3HmxF?Qc<_J!a5WP z8O9+ZlBeN?*z8iaqX{^8P6f2Wy1vWWA_(i)F)>6Mwskb@&_M}p$Y*SE{#e7l)fpCB zj6`J-kR~TAI+m5$Q^~b)vmreP;rf%^*B+YxU4o z?-PL?#v=B1J`EM~X_+0S50sS=i^%SwbtO9hJiO3Fu}1s;>l0&roE+p>q#ZQ7H}tqB|#uo2J4&h060GO38v>NjLO8W3DkcBm#eJ-XW!OCu-0zLjG`%l_*RI{g`!X1gnf*zPC}Fom_WwK~F~!l4*;9*;0a znGX_nOjY zUjI0>sN*9umt^1zjHI0SA$uVEGZNv(eU6r8Q|b-~WmiwnX*{B|qx|BU5Ae@pi;GUI zHF=eoK0^w^b~IxAVk`z_2Z}T1*`C296QStH&=fq?fIKHA9s3x4fpGWC&Sq?h@TtRb zDEIZ;p;{GR+jna+hEhhcSl4jbvN>gL79;1-gvE?Zwc62~$(;S|TtMHi&;TX6HDme; zq1w#0-Y(Ic+m|pG+;JesqV%2z-v@WArp*CeBTyCdYNp$R)$>X=;jWQx(ZTfL1%E{a zGhq1P`bTDK$_;sG_Y`<;ddx=(_kgewC6+Kbka{_i01{)5kQl-?^#i#4YO5=33l!jj zJNHalSLx1e34!~p4ta6(t`FSimKK8fZa0~N;)?_}+pxe*q+o_7~cwMbbOoKXU z%nH~ecX}%K8Y5(kEB4%d{ZzjyK76F3TNJG++yW>{x{?yGU9vq2RK?=ah&o(y3}@?4 z)t1k0;CNI-eK6;v`1_!IN0{M1Wxr}W@5fjbfHM>IHRMqn4swofibOkP|IMszOlYIc zsv!!;KYUi8YYSq%)y&F*p(94OO{B3Dh!A!EneC{G-Sr(UwP4q)L{3}R;$GXk+SrD= zw7xnR4svbcl0UT&Q)Lk56bE{(Zb2J442VONl8`xFs$-=EFj{6uG%A6AYfM<{S#(J? zqX1?wHR}rr>R&uSQ+@e838gJ*k<3&%N}rezN20n>ebJC5YpuSG2t?ys1QMC=rQCP{ zNh+;+bxx<^Y}%j+H;M|Bi=dj-VWMI?@(ELHWq@X7ikwRIsmMX;J7!w3Y4>6npA6*^ zU0Kw^RdRu4l!E?Ueh!bl<5&Ch%(-;nv2#ehfmfJg|EfcD^IXVuIXKW6IKBL#Nz(hc z>cJjc7hnzX*9r)W9DA zA5Wk_?J_Gmce1z>EJCz&qr3MR6GMj>fT`_edap%@_-$qk`t0qdqXgYSrk2e3auDx3 zaY8KkobcF9U-qz8{MO8ttZg9|WNLH1E62ekXoIPY;UgKa0NlQ52o+fwY6b#;L1LiHoQ3Cd!~wv-f%BdgO*^uCftlR)F!1nAqU$ zk%TZzWwScvg@#X}-l{8Hptjf;bH#5cb+4L&uskFi?lV8IAKB4D=(rW?;RN~Cagtl0 z9br1wz=ARtre?c_=!wsD%MYpF8F7wRmEK9mSz3T~PXv@>Zo}QF(9tcx5ES7f-{j)| z=04r(p@p>IB&*W0#U=?Og?Llw+JmCwg<=!>&ehM5WDK%VYc=YrDW8`Hg)q(V=hd#= z&Tl(i9y)R=ra}y8)XD7Qu4zs`cE00+^#Hhm)chg6*(NIvxf0Oq9fz8S70LzG7J%Nm zHi95#<=Q6m=^`g}MgZR_7s8{byNK1s5{y5?yN9#%gpb(gO=wtwo_O30g=31F#`lZ zMv}nOOY)1?#>$>RBDQZoVu8KcyaWGK+X(Nex+tc$PIgu6dSU`t&1` z0c<%?3ns$*F^vHejGA)>R4B=7&G=^3yhBluw9ZUYGA$}xw{j%X)|V) zj8$4}JFaVNOFq6+!4?G_p@B0QQ6h6jAaV+tV1#2M(+O2`FA_4>n*rS(6H+_+mm&O5 z2$mjq;>HHHo4r(@y4$^xpDej$dp%s!tr@Kjb##rM!i$ZO(7HB;Zfb2D;(YfES{Qw< zDP-ydEoSVSsNBT!Xpp{E_FlKX$WmiORcfvsIdFW|IOC8ljf3>MVq-Qnh(VOy9yDui zNM&VSZ7ggv6T-jyy?K^!rH%S~1pJerbQuEK+_72%+Syt=Te#&nI}RCs*pm=sH)jAx zh|-f|P%@6_{yEE#fYsaGBEUywq_T{Q3blM)+M(aX{x>_1McbBr+eon4tgw?TTuV^w zAaUpaUfoI8Dja|A27rY;GTpqBcaK5L$GERB4)HHfisPVAiXH^&vusB2;l=V)l9+;e z8?NsYHAMA__Qbe^^&7^%`UJPv=3=OgLPJ8+#ZO;J9G-(cU4j5AA7hIJCJ#&$99V&; zZ>Z;C6ihLhB^8x()1uJu!HK=35(TD$|s5^PG8nr# z8nRYQ4(8vMpAAGM!b3;1&6!naTv`kQ?etUfTm@MrSo3QN{CW3ZajzpBVLG$xQ$yf# zuGNK{-imB%Qi@9YV*{u=4Au5Fg<-78V2OAEhmw%CiH|e$ER2We4NP&Jk+y>XMm|%<1I5+o%c$3@rs9gv zTGEu0y?J}_Y=vOr&uel}Qw)wq-V%PG5jBDfHxm&l4J=|m) zUM%vRA{066i}_U;GUh2-|6M+hL2}7{l5X*VpVfb}k%Gwg8XJ|TM)6I6lNN*3NleVr zK(b#HQprGY`Pj)V%e~3$)u0y^ut51Upa#hgOjIlXJ$4(!jsR7hE=nO+|M^lTSbTo< z@tp>{HO?Rgmf}Iu!9JuVG*B79O3|4vdDJqi4?8x}qaFWlduInONjh71S*M{u9aQ?M#i!?0CLCG}c1f$lu!*7T#xKWQ?BDii=gdu=QZ~{2g-Dx|X z$JnZzw)+jDO5{kg=eW}bdaAG0`2)B;Uj(HGU`b%jw2w&twZ!+GHT#%{QLa^#SDkTr zCH!3mD^VKq0&CX|_Ev#}tl^j!?m^IOUz<~Z~&L1!;|RQ@?##Un5Ghc^>f!* zg;0lHvwM_7hg$c*G9M40NLtnsxFV~fO9_a-jq#T^mVkYmt4!^N>8n|12h|UrQL6l~ zKB);xa6YPhk|Jq9D*Uuy#u_*?Bx#?w%uQ+LQx}x9@+Fg6mA$A?jyB!t^}ySoQBE_* z*Q0K;wo_!k!eTctFVZ}My0-nd*%`Xl!yx0MFUE*gv(|DMz|7m7Q?MB|a&n+%*x5(L z2f&)hdfQF({7tyZZOy(D+z_ZSwy$)sf527V{{q9iy${tm4SLAoauzPG=f-L^2;Z(b zY1DF(wbhVix=6nesCV9oCyt;~*^PFKvt8Xc^I)$%#N>}ojYs8l6%}H?vlF(N90!$e zd8fL|G-EmfX!+FsCSet6e-{x`wVqes-+UM~%O4%eBEMRubk6<#5YHs+Vlmi#lGTsS ztqb5eqT>fQu2J@p&6Z4)dL$Dlt@a2N=q5hw3kBinJ#jiUOg*Alqh zolB4%YwJ@`z?2D5+)l5l_{Q`i(?EKQ{&gsaxjrH0(uoJ@$RrFhZPd(chh0aPk}#An zk2S9HQ3Rp4lMr8qZ z-r-{Oj0eN=>9XO8?Qi0O0dIwJxs6)0JibNEp7=w>v5U(zLsGYl%t+MgN*!zk1k`-mK3ApAMVrbBt_)ZrEVEXFr}j-M|#jTCU|yV>^+734k}%#8Ht&; zGAhjOmYljjFd|lfo3)?ecCz|ZS633rZHnfIA6yPiQ9lSA?7NPi5r=)*1j;l z)>vDqKh&)nd$9fMG@Kyj0^+nJFoeuct=u3+Fw)d4QHMBlE;QVPzd#$czxNXSVeHq0 z4S;X}R6arqby?%5?F-!#=-QYTdhHlr*8{*`9zMsii!pD>Z`|H0{5hN=5I11M4Zmnd zMmPgdXTD(IBhxxzT$AKLHcWB*oLg5VkOr5d=>NK$Jd>ax*%1+SelL0Cse`o6?Vo(< zI@i#4iFDA^=jpc;5x=YwHeMm9Y@Qassu<|mVgWNgJ^N@aBdqk)%5ClUv=2x~1FNTc zyIdbZtL)ZuMlO@!#jA9-N*EQ+zusUfU+}#P=Rs}wG`DQ+MJ+4i^B=oVSC!QjrOb?x zxL@eD`Rk9}70;3l!gE-S7TCt;Pyuy!Tn>c{xS&zr!(HNvs@3ori$gF)>Rd?lfm7bVI1GFwmkmQCDa)@bMm zAyQ2IzT0uM!IZhe2SMGy?x#3O`m8t%=#bOk)D|^r_V=8VL>sjhF94=^kFEH*Rf!8O zRLe~S<=GmADm_axht8FwWYJMmGwIF$_U77Cyql>-U3ZyaBvDGCm&@0<3n` zVUjLk+ytk(KCDzVFv9%NkcV0+E_hvru>*&+F@ouS7#g>(s^07&GYo0$W2GY$YdAFx zl5s))EzPF|0%KE5gNk{=<`>6{vSGYY&HaFWK=GT*g&I@jXcZij<2I=~JqcOc4lQag zFyh$i-g$x}V)zO=PA9Ss5CLyIC57Fu<1Z4gIkk&R&5+@Fg3N?MB|x>q?VL#MWs?gm z`b+o|uytH*zceMmg{{lGQ+2_knmaxdVJ^7cl)l{^L$U`vL3iQ9E;B?8^#-{{RhN-3V^i5=h=c1-geUSY6jbib#qlEGU{VmS2$URd7%>A=;4dLm4p_{hV#dxh+vAP2Vw0nNjkP1IV&W!NV<)5 z93A`j&7X<)(7+>}WMB2>`mvQuSEjc&9(btsaoWDJSP<2L){#>`c=fnp7-{@oHW?l@eP=uOLN1VFALt(ugSuxGrdYCpYwG>-Q!d|NXtdeZT}7xLd5XGQg_LBo zw+ViquIEId^Xa%@#v(_Gj73xeVIsX0Ovb=huSa7XvnL{LLEF{z6xU?rjV}zy@GM~H zD_FjE-OHJjSqrbpqXHzJTyPt>dkcwBo@igKC}1kfF(uB5p{1MZ@ zE($wOApLxJ(F=LKc~HhFl{h?cr1_F+OOG-5WIpVwj_B$hDO_8f$~w5AXY4r_Vd8HS zYW}3EUg#W2i0+kkLnJ$}MG}tQmutl$QL8?>LC46D3jdSt3qs;r*>5Ff{SGQZVhjky z%t#29iv%(ZGH?Tz+9|qu4OqyqJvAxtk3Iw8z*M%(8@F)w(_a=+ox&W#ax4Vd*Vr5( zrqj_o8*lS?C9W}^y#B8);aU1j$EmmT3j1PTr$n9+?lB8&)-$%frcpn_Y(#uXA+%(?o zJUMjT4`+b5Lujh$sR<3PORB+1GOWaRN?d4Jw%o3IWVr{abvq_?J(n`oCP?0l*l1JM zSkp6f?TF;}gDGpho<>B{xu1FWHr*haCxEsAQ|DlUGwQ+PU77jZCVGUI5JZA3cLLX) z6as`~Uf|Pr%b9l_GW-YY-T*b!`yzE*!z z6}MQm)S;LV&zE3^`2!J3$T`1g(ntCJD>R>HXcD9~NCsuSJH*QXNvLat_7i#^!Ym!U zz>yhSQR?NA9pEzG>^GSD*?{u?9cBvi}a5}A##y_Ac38x4xTw^&nVPn5Zg zSSR4zW-lT(0h!JO#Pzug$;G#^H{x1la9Q7PbX|pOc-YKrPj1;UwCgY2StJ}bsfd`# zmBlTnjdZ8KdD!bynUDwcX^$~mRHMLrk>f>doO zTfCVr4Ges-dMfksuWHRBHE2lx2g_4Kh(7H%aCx?{^=vIoeyfd8wEb z0q7b`2exyLbm2o497s$k#!}isD93%JhK^}FO>@}M@1{^T#VCko8@bGty51>@mt=aT zEp9py>*u-9r=+Gxx&PR-o^ot-B6iFeQ16N-==;LXDOAWG2+kaRiiRD7C1N6&Fg*)3 zS**bRxnkj)!0aFNb`Kf$`fPI!&wJCK@w}{J4qzfQn4@YqOGto^z(iRVc$hA#ebkU$ zd~S1T1FLwlSTkj||sS))YZ#oPMw@=Ek+c7fE$j zCM*^ooLMnT6|09Dv^0bhzYM4~;ILKYld) zF0}8x-;5WJG`Z;~ed1Q;y6TrxLMPnM@+6W*!XV>8FDd3JG*$J;@(`y)|64mj>qr>-tMi+scH(Ys+U4|pG_iOu5Tbt6Bv#?k1r z=$u%%8w_3P_u`-&jQm%Kd&RfRFzv=u1~q$30=rvb4Cnwmb4)1BXCL#i1DH z7jit!G`fK?7YkvrKH!jM+~k#SgI^A!GA-#+L1!#VitZkzz~y>$BOP3ApNZT~a|6f4YzfV*o%9b@y&dgnJ9xNOVg8dtlNI?M36y~Gyw%Bur87TegXN8oeO-lf)aZF2t;t!}^h?Hd`GVP#ul2ns?b$sQf=BP}237Eh2eNHj_)9ACsPF^ba zOgyN;BPd}^+^3l3tVO2Okw`-A+oJjuNrBVQe(MU-A681EBP@GXAc&zlZYd#aXF9W> zWNgZ1{eR}CEwmhz@-mP0E$TB7y}GOtNQV*PJKXSC5T#a=Rqzag7;$AAgMwoIw9_iw z%sqy+Df0>m!CO~h<-(!C_%4MkDO*U*GWtDW!Nn&jm`elf<|im~QPf65Yraf3jv?g& z$W6m!16`D%spdkx20fk6?*n?S7OtRBW>vN~J_4y7eoeG=ti9;IuDm2n5tBF=`-+W) z;|W)pq1n&T?czHTsJ!6ClnV7YrcdJ8?$fM?azx!G2H1}Vgj(orr*4_)C}B^)z1Jh8 zY++Lzq4GublKym3LB1)IO_>a~WXQ>#%;Kkwy^rdyMHrjqHM#Xn$#SO|GM?RZ6?+{% z@<+3kb%U5p44bP|E7X;DN$RUkKSD4l&2V}<{XX07d6iYI8OL!fI9#+yTZna zFa3GoC&(NarB-nSN>IW7}dibYK>kJ!EksATwb+3Z>I23p`t}`6OHG=_-b7!l? z1m@^(xo62GwllhVZK9@9k2=LwX)1n2S`XfSu0$ zuqA4Z7-!$fJRqPkyA^W_zgr>%lM$GAgj9ZQ=se&TaI;Se|H7?-m$hm{%vYdfg)_nZ zBO6us9p;b$Q=;T!H;|y;#_1O-A!+$eb{iZV=>&&D5U6t^)TK&3bA2gNBEwJ+MhEL21gEITbxVaeVKJxSs1j75t@%zP-vPdm9(U>J3ZH zpA;6Etobx6guXJw*lxS6_b3IHs5e~snY>r#?$4>$Ms%OF?n%VGSwkw*x&5w1t8#pm z7)5!ftj&KIm;@rj%4^0w)q9efy2>vxv7@YoG0N;LihbF8=mSk}iiEz7%%Ei|^LFWaeofgDEI*N~c0%2^qut-;p%(-~N8 z?Hlhq_4CYz-jJ!;8oH8Ai(tmj+~Y6TQG)FZ@k{KpqQ4Pz=hO*mj0FxsgNG-m0Q?7Z zC8h+kD@1Z3bMt=8S8j(jIwjWa2fK~5c4eC8eLlx{i}pcwG|$~JFxC=+whnC6dw3*X z5Z;tgzIm&^+F_p}=tJ(<8z$lcm>qql1FVt2zg#-&N(4QHe*yDhg!Eowuhx*4S3Rzx zeSxb0FXM@9n)@?%sYE%PgXbkX)LF;3F@z+&^X^Nh4ZC0x% z-$mw$Qzq`*89!GI_$~JQjv9vYfa9C5BMM2&8lcUTy;k9d&rw4b-sNp@!#1t09 zgmu)rzO@g#u@SmiNM{x#am`AC2#JZ0QnNX#;kV`{Y{zYe$U9DiG*Qv(?y(yNZq0(R zHjy-&x=|mZ#lX?@0-&W-VYK7(`GZ|_0>s@?#|g*LLJNyV&(*7*RX%esyk-0>-BZmv z+}vX$3CW>_`UBcJyfpI%Cks=U;{{J4qVb6R0n&I<)S@qe*Kc^|3YX4j&fg^5OsN#$ z_n%jq$CpDntRe6@G{tSHP@cy00r8-z;oSS>JkF(a4V-`VZ;>gskeYVZb=tziCQvGc zU6P;vln_B*#1)Gn*OM0pA7(qAB=ioFP~>Oc*ykX_??%)){zllT4-c&1j@?{z8O921 zK!&4G8}h#dl8xJxO9R=_<4pTthw$M=D>E}344;rs9a~K&fwguC>?)jd$ZKeF8dj?y zrjU)2GOO9KjQiG{P&7}*IvNG;Dcco*ABBN$VL^82G`B3Hnvcb$5aZxVf(tyMGshH? z`cJfB{JHF;76}(&Tj}ayh=P@0fwzi?k=@R<$0lO3EBdbVuQG<hL2 zx^|Rw#5iKhYvuyeWocf~1G~JV@O`xGfq}3#8*}_B7{BJ(o2*L;&2~{fb4OAbFC&6- zc6BaC;#Kq`dRR#Oa5%H#__e>{)+E4_PjH{EeavTLo=GC=L$Qv{+F=8*p%A=%!~yAm z>O3s`1Sb`t+EMsfgm_+{WNTy1+?ss4N8$!qCAAS_H{ul+AwhA5I;*krZOm02;;=6nIN+ z*O*EeClEn9^GNxeBWc58uk=LrAdEoqVB*h~gO!ooh}qCp6)CA9SqMMj%u6l0I5CUX zuj30Wd9fXWd)&H4kuc2&soOptUc&6zZyovsuXJnw5O}LZR~g58RgATSdqxd?M!Mc7 z*y~!%KVw`X*j5&=J;mrz6%zF^nkqZH_s?}{Du+bAct88sKu#gNIzAQ`jgWi`K+e9^ z6gtNHvZkc5e!+7kBy-ERF1+0dsK4hgZh5m;}@RKEc}6FQbUgmD1>KLEhP8BPJV-|kU{7OxODM9xESAO z8;RX+lN|DI4ghVp)~<%p`FpTBqOxUj7LSCt5M~nTk}F(r2oSzm&{=#i(fWl!>4<*N z1C-Kkem-s`-J1_v%^OHL?Lw#Fps{Qfz>Pa+au?yKdW`NuTMvY91Hy_Z&erK+Q;M5^{roWzPONWQ~-nc!1NWB(hw4`E2DCxS? ze}jBvbV0fId=?cZ)8WML);-X7)7@33)+7i19&_0>*mV-OM3Rjyy8+l^K@gh2#%;*Tx6 zgE4PVZ+yi85)Gt*ylLk95gd2md)U>+3}Z*b+ZdBf z{syaRD&!%BrrnY<8)ZSm281`0M2uFz=_2-~)yF(Ijvhb&tohn)ieBXy*BF zmiZ*B7fL_-z5H@~|1FH!4*=Ax2!Gki)B(GWqkGB%t>GuzBtv+o6%g zZEkKe`;F!B>e~TZV8cE-(uhd?YG}{4vg4c4n}bIOo#uU30yQX71i84n7*a5VQ(=$) z0ln?|sa2_>EfidPgNzAk4g&_{7&g)!8tc=8z09hG-BXbng|SnQK6Ym4egPAI)vFZy zxbF9{MdHFkepU_M8ntQKv!_Q+o0b6Mc=HsSS$t16+<2l9{?PEaTFOw5?wf#Z3jiEW zC}DuhQI4sL;f~0!FqHS(bI#=8jIf;5Ma6c(JY}EbP|89*LjWXq8Lg3-5%F^u6P*;(CRvbJcOr!`2L>J+!^UXfkOVgz^tPP@h^!JqneOq?C;z&Z+Tc zDDjb&t7HmOn8kG%RAp28`tmCf@_CDqE1aWI8jflx0gB}TPi4Jh06(x85DazU>Wg;RL}h~9x=Hg58+;t2p!)3 z)3VYe*uQ+WuI5CR|6>$h8$2Scb3Ib+=We_UC1lD|qTD(K3cB+_C^ZD62!$`Q03r=$ z*bxWZj?U1VqIH(Qq{w~B3Zpg{$hf~luyrp)n`nCp#6G?sxKbfEtyOw3@7X~cNKdG? zaA^HhgjZDL0evoO=t`G2A1I<_m%KS6R_*P{_t*ON290xLA~Wb1RyDbMWVHY@x@opK zz>gl{xv-6e)@aeDp!b@jk)y(ns2-hNdUAiD)&WnLa{aE zo($<60I?!p_zvR@s5*e%Ve`X~0=wQG|HwkSZ$f|Yj$5|)@awdC0tt$_G~q9tHt~aE zBtu_^vKxnh%zN|jEw3l4R&`nT$iqc)oL@tOft;>kxV&-irjPq?v|sPZDTJG zQ^@vkw5Ufg`IN5Ws_Y-j<)5K&=n(qmI{~-B11n{EEjpJ;)Uzev|2JT=*0J-8%|ZSP zN3?Y`R7u?rRud3*4z9{=%;2ku83tBIFx(qz_Hv?M;gp^zS{ZT;7O4K0 zQR^b0qvuOAZ}!$UWp;us@<&f*ag@ichL>2E($JARXg0P0a<3ifu{vIG7ZOiH;n<_E zPt=iG@J3=MsSWPsRQB@qBM4!!-MTWJRiCSoW;|CDS0>#>`q@=%<_SPz;mh8mLZ|pES+D;l%SDEqIn(cggrtBMaN$gj#!0tA{Gb zoc+M({5NtwLe-U3KkvuFqsp+imnKka%8EvAYo6DMA7vzI9c%gbjvVKdGa0IfU>HnU z?^2SPHko!qR{^SDHAt%`mS)?p3FmX{W$c$^E>w|hbI^D=#dOptZueV)2hfA}Sl3pE zk5Na2^kE2~xoCrX5*r1nQbBl2HFr1hL!r4k&LRdmAdp$-)n^sl5loW1GRjb(5%Im{ z5Il>03F0FVEf)KAzXq2IZs9igE_=l>;^AzMt7HC3SaPK&%|QtLJ?jK(lbdL-7#~!V`1eZ@SgTv)~;_a(7E^0qCe`;_?%6+JISsT!D^w zx-~adO`!oQYgk;`xrow1Z$Mes=&5S)JUdi5#@UP_Z(vj9y8;E_2*SWdbmY=t_vVvTu$mNAzE~&mWZY zI2`$Mg<7+qan&=?l7vl}f$P zjNHh8ZE{)nJ2VB5Php7^tNX{ci^rNX*0JW|2*{JQ0$ZPivihX3-?kiYd2BI6q(rkfu!zuJToTKl* z&&_@*b%LZ5qTKbKWUYqd)n?(ilWuH8g3@B;ygV0zl#fXqOU#XuC$w&2?VGAnO$XYu z$kL85R$Xk(%PE!1h~ceCaeMWC+>}bdMM+D*x7T7fYIT;8aXfwSJoarS9s$J%B#*O3 z3q7Cmp%BlSQ{IFtF)CrWKqcc&V@=w56koMZ-wG0|h{p=_w$;yIK|5)FOc!hC)by1- zs5meZe;}=MyaNS^AE4d6*{+}cGdn>PMfvh?L1T_9d2=O{oPHP8VtZ&stu_M#&_}f? zgbE~v;tKX_%7vKOtnuzss`G0?&R-K;m>N+L*7Ym2GPfXiVbiDx7%j^2+4*FHe=V^@ zf0@Fo&{-2^IUP!L-n=&!1zCBa5WDt1{XbynYrRnHCC^E(j*kx<0{zbX zLvT_HD9dx_!QQ9N;SeX>;SNp@BK6|%zHPS}2Q*xBNx(;!U|y1{2Ze?wiYjBXBpVO>AxTrAMwp>fQ!3;dNA{p|iL#MCO#k%Fi|(&9 zCJ{@xvf#=t<<=A;^lw+~H^9Gn-oUrA<7ne#Va~(0DJ9kJ`UL{M zVKGXB`{bdx2(fM7{A&?2rhUiOL=6G+os$9vt=>O>Oq2|BAJX$FV1C>(Cpd&9=J1r^ z%`$b;CPWZa{19?uc*0S}#Zy$h;Q zv$B}Q;uVaISYZ@iY%bLAl8cx#TH*aZLp5IXZR@;gbn8lPox-GC|EFP>;dnknE3Km1 zYsYp7)|rZ%t*GZH5MV>F>@uhBZomBm{S?40x?Duqyah!u0eUzS(@y_D_h?=y-N$3= z%_kzxZkJbV;=D@Z;UV^zjjaFw`y z`hoG3qLC@jOrt*&@2dwxJdhH0b<8${)%S=%Z`_(5Qn72qwDC)s)V9C5`z2)$X=m_| zs?9GVQg;`9QgvaJ6+ow5AmYwjWZn~hvK{;nTo~F{d_;ZwmbbyPrBS`>xL)TIoJH=b z@9?&H8_)}i+5_W}!Ax_RWlK* zMwUDBE$Q7i5~xz2tC6oObrq2F%?3qO#vXZxE_rRQnh;eE{?7$et zIrJFWrKij2T%4zTbo;Lzrwc|@Ilb<&OHOhQ1$4~ze*3JnYH~f61Y6@C1-|=bzo}YpL4NO&zbu+I9k%Xtt}s z!P?f~+q;!K(Xh1r{8;zav>BA~`Fh2?L~j6x9N3$W?T|WxfO6A{vY60q!0#UbGPFEt z{_r#pd^G;U1Xh4T5eLr9+ntCf@@S1)UnMbyhnxn~KxU5m|Fi2dzAOBrRX)ujmmV@; zbPEWR%&M;rHP7g=ScJ^yEf69?nxj=G3*si-zFH!L(RBds>m9rRmAb6)TFAl5w+o|n z7&xn~)mo`w{PbRy#&A%c2q;dGb;if!s~TNX&%Sq2Yqq-X!PZ*TA96DB7}I6v{8coA z1vk%IFtk6%AqDZIx@_{kIaI@d0C~&t_8ay_$@Q=YN9G!!lUf;~G{* zoA%b0!O*~4z3Om_z720F=;uazkF5W17egOJ*3l18Ti~uS^PXZj76$vuFg3MfaNObo z1peL6iUhK6S=~Y+Lo*>xnYYmv^AK=jG4ID$~ZyRJ(Fg zd)UBPHS*vah8}q<1g38NsQRZYf=GXUIW+D!6X3BwY=7O!9d?WK6Lo}^+BFrb7ypmR;&;)hkzi=}9t8M#=SO>Elw(8&W(vR9#r{PBSeu0?9%pu~qWghtt5Itzm9AXYC$7PbtJo zyfak(Js#!iC!jLm_xG_bB;M*-M@5K36-D%3fZaLo3fwLLF+ST?{a)x=v)*LSi03N_ z@3oE>Q`D1GNHS{MItx|>JudzFG1(%jhO!`qHHYPx}Yk%r-dpOCLTV7L(8a6N|>6KiatB8fQjZ6)_NOc~A$KT)5D7cx4}cU`kkrd7qKe+Clxt+o*Cz1; zQ>2Y|#_n1T!cF%y!Rvo;hU?G3@!&QSYAmdf*lHPF{jkd%ziqI5@gAUzvIUIX7 zv4Dg(oVmLlG$mj540CWPm;@-)U|R}D=b}5|u{K_be2sDvamTpisU_DAK21-J{#OO| zQu)b23H@?#m$ySvU0A98QN_qYT)xhL#iZS*1OKi7(p`DhevUeqOU|+uvT-l^{Bf!< zzek|%i|~>u9D+&po!;fBPxwtN37rMl-66#zJ!^1g+YBwfk_^<^azKmoH_<0_T*^aE zAM9?y_e_|!C-8a^Mc_ANoK!Jcfr!M@a>f0|t!~Vi4LfMd-JD&Ufa?bJR!lHt1}P6x zS8i*oMOOO~(u_{6ERw7$pDb9N4u5^ zm`3uZxtqknHy;-!iLLopa|5CcT3+CPT-9Y#q&02e9T^H1sNZNSYqgJDDUyAy6PF7z z{OrpHdb6ev_TZ|L^i2tfs9XtzYbIb=Cw5Y)Rv$#Fcv!L(u2zyNf36uIWNn)*qQp%?rqCbk{y0 z4ueWvWOBo}r014Gn3m;n!n!+XLi+*rg;&e9`4}Xe)qIC3>YxfUNp|NTKQbW9*|Oq$ z#%s^+2yF~qf!5!N=A!7xhM_dje?b8Y089sthrMqOITOBf?gxjG@=LmEkfa1lYYt{?&o%|^+YcdxS58q-QwPM2wH<+i1F4* z*XmTy83!O&Q-k-RGr@}IXi3UwVpR}xb}>|@YMgd=X#|usuu5NC_+XgvU+p71suFlx zs@N7%RW&YR^L{sFch$5|>H?NY!v1&*HS;B5!_jm*OCrUGgtrSPK*)Tz6+_uWQQm*c zR!uS|?>;k;`{ z#T52Jf(Xn}vNOS#-IV%7?M&mI1(y~wS+AN6w@QIs{sgP$YTUCezl3)tp9bk;3#nb+ zs6u!UJ3!=(GEx9FJsVbiSC9z}-_|>dAf1X;ocI;{0LCE1Jz)J!85^xC`DlSg$)4Rn z7g;x5LaDk+XJJza(iE4CxlM7#3lUWPyYnnynI+BlCJ%>M*M>~mOBDr#)Qn&c%0gn> z%P$+D+zxw?tmfJkC>jI26j@jjmZS}0kFYL67CMYA;Q2yN5aEk1Jnj`Vmdl22Fi$*RZ3~GF{tWj2M8>9hANqIDf^3Nvp5j*^Med(@MW0|< z2Ia2r#dTXOL8pNE+uH4D4qd-wBBab7Y(AH5S(xp8+mr7xp3z3Irnr+6u)^U=0C5C` zPFWe|>GBK8xPi7Vqf0FQb-nEU*4+0DWV8 z(m`)h6~i8TxYEB{uk@BIjf_=`^PGIW`oRH>3^8~b1b&$F7qFdfXWDg$<#;xCr-I`V zeAnfh_f?BhX1D2honX04wrXKP|JS9*Np|c;trsNOR|vduPn++5LveDJ6r+L3KN8r? z>3Gu(?G*co^9v;m5L>Jc?4wbIK54a(MxlFHO&sSGkb$JD!(ezm``HqV;`JE1CMMT|wW;AK%8h!E6L8*UI8Q<>^l zte#<1{br^@8>R-ugSw%?k(Q|;E+`Rr)FMA8((u#&89nY3%+aG$htNV>%W+Z$qY4|y z9l(Wp2Caen&ulrJ6Vs>G^(yuBG*eu=QC=SC2&87koq5T^<9~Pt#2j*vPUH+C4!(6{ zi0tI3{A8ZV9``C&h0V2g`isbaSG6Q@jPo-R@F4udcQ|Wlp`psB3MKOWe@#J%SKsV} z0tloJ8PC~G>ts3@4QhQZM4x1@kr0=&uJh+yQ%jtM>V#T0ob8+)nU2#S+hk_}qx6CjGy#6O1&dihI_* zHV4!^&b7=Pg6WX$RwxWXgPPhT!Pwf{ciykIQT(wirX2_d`CB2<_@g!=5_XMDuA<2{YUqsJlfHs28498PzXH+=K^&O| zIagINlrWrO!4ld>qY;jcgsuNVCK8p_$vR>fG!C(V<>AFcS?zz zh6dS5;8^*^8F01@-J##fJK+9ZQJHC+Ty+W0KQfQ;s9mz+q@ksT+C)A#WZBhLGn0;O3|wCvC3%FCYXWFcktSp2T~m@9qj)<_5oLnwvWfpLkdr2@32<`n)QOq zM*MMhp9YX4#vZk0xPuAPY{Yiz1Kn{+uVq&gSra0b<1|>GtSMunam!vXzE^uNQ~oqM z$+dZ3HkW2R`=7uOx?g=n1|fdISDU?vK%8>oKVUnmKHzU|GM6-qbp5h4(cQvAFx>Jb zURD_xrtT7G!4P?^vSXf~8j!v3f%fbY2u%kAcOkCK5gQV`ST{#0Y6i0hq zOv;_itA`&ZP?F?2@&fb=4EQi^?}Wj8ET>A6>1GLW+l#FWXRZ0oD1|$DtkZ@>x-%OW zz%Js$iVuL}V?KBnalgm`_X)oq{OLdLY!%rQ<}8t6jy*qA!M07mzX!x6^6*(}}KrCF5h`viWT~%5d-I zl#8_pa!8x<;l!&*E9J4I;Jm_sxPThCOP`T}_zLIgkRCKp-vL$mF#NR8KDt`W+AW4G zj{_s8Dc6RqKb{!&Xsx2@COG0vl$%zD-Xo8y1Ej6bwJR5^6V~_3vy=#f#_ZD>b$+b? zXK-uD#D_{cj5V}h*Lj@sdq)F*F_S3_MS%Nexl2fkvV;(ilH5b=8@=PegJ8hVTbtMF zZbk7qE;#rieA*!oBLrdYzPJor4sb6B_zepS(aQM^q~%)-Zy+`@_oDW9b?f8fY3&0I zQcrztMuLJDHj=gm?fZ;^|J*S#Vh>wc@X+UeUqL2s*CWISCU<89TBosXdQcD@ZHpFH z4*{uJ;Z1E>JV1U2BCh)hGmT$rQy2}!^Ql9DMO?>`Q&nkiSsLx!7~IlC_8;G9wsvR) zR%x-9l@PALT>&;sC!m@1h2ZWJ#?;-z$F`<|pb4fJVa4wt)}>Ruj%EF;Q~vQY4$Pa- z%$kI;Kl^lp&qJ*vc;i%T^UFOhJpS5gNYjZ zjicC_V7EK%F{G4We)BQGhWg_kf8 z_tCBMEeN_)7hnz4qgm5`tGEb{JUhyp>|-vtLU&o*{yy#8hQ<6SxK`00Ac?#wtQmG3 z#}&5D8>xuO)o*=&@dDF)kGScmhTm^Q8W}^$1T6`zmi#4U8*AG!NF4JB)JB+&zqIr_ zq7G=o$gs6RUIh*@5u1pVtwxS!9o=wlF5+u3Y%d&A;Kd=JU5xF!{T64=H)yuUwyXUb zPT5|ILkDW8ANOf?4b^bM1hAEJ2{FSE0y4l5)iNcu_B_cd8JZJOl7xQS!2NxjU<;ZQ z!q;;R%*lBt0$AWsfOkq{_EWWP`Fqk4pn!JADvEUdqIo`Als0rw-L7EVr_U9(pyKQ3 zYBNw0L;*M;G|7?8@X;G2zdZUpVMORfrv@@gBpx(tsIMJo-4`E{y)fr2^^Q-+I{8u5 zK2uj$VS()t^E}U@7AA@D<5;bW9^QJr_cXE17h&_{Up)?22HVHADR*5a)b4r3-5FZg z{I%aQlQ0D{pdreM-l#G^`(=1+Obbx`cC5r8z*uHzx=>Dhf}FYW`2sONDGleX5+GD~@Ixo5 z++7>O(|Wa-h!A%C$HF!3rZFuSDCXvjk%%tq@9-}CQ`9lDK6jzR>xZG_&=DAOLtgcD zy6@u)zYF={iP~x)`i!+3_H~5m4{G)8v4dtcRwUPhiqivnl6hltMAvJ7oERqlUzt;G zftwNP{f`tF!EaEyiIX8X3EuluE$jW&+EO#1I;{giTD<@5=X0w`$+ktc+-Kra={&A| zJfBh!B?Mm1TiL_;_HYNT-Ha<&A4PC-&*OKUe9miwpI;#_C5q*<`{uC}V4~gHS_%KO z*5ZhwnXk8>lAIK6HjER(2DC_nTc(z1DUjxhF_V|3jT;6~Rrdjq3Yf;!0?$_Xry758 z$2Hl6*eiydYBXqtWEqVvdNxHCFj~5x#V%YMuI5`E-romr6WeoDLfR#L3h;()9)L)j zt2{|qGN_EzcE_4srnIn$H|u(c1VNkWsAw?4gQXcm^4mA(tpGmZfv%ZEBw>t&<{qFp zPqKmXLxi;ZcZoA%wXNoNdu@PrnHdlBs;1%5yR!|PIpfzm&317X#7VxcvZ2&~#50H9 zbq8kAhm<nts>MQ&8 zaF3aC#jPk99jSI|1PGzU5t4^Rg96HEECYuN_T zz*uAN0F1a)7uT1Fm9G>7zAp`Tp^NT`uKFnq>y*euVa#6piG;O33)!B{GI0F! zE$8aP?b@R*zT_(T|6Ls`Lw{g8ORJ8}1_?cBp`-Es!LwF%v=D#?FXu87Ao9#RS=@B_!52HdmKY~8m5D2bLV=Rbvy{Qvp(HNFfT7!fASFK1+VhJ%iPxr-r{tU4pA^&|t;jcPv`mGGa!Xc=afvnt(SNZgK zUsx|JiT@rXbGLo(tjn-#W&C0#w34zwrYo4}12NU3bIzHwc$`CixNHo}HjbDMKDT3^jUw zFry&M5mb+wuh3CarP7n`Sa!Te8z8;-A-915Y%yuX*;ySb;NcWQ<`r*n<9@!X(1hVa zPiMIR3I^Rz1_r6No21?zSxSh!i(2y??x`t=3k`9df+@#5q7? zB$~U6C&sCQ3OLu(F!felgX_7|`ZO}{9*SKmJm#2=@~|(?4B20pSkkBh?zpImkbiW~aI=Z(FUTU+sMB*><@h(kRb;=PbDla0vaGR_n7iGiXbX-%u4 zZhPqsVujgSUwE8-cdCA~0=aC*k8Zp*#br9S__S6A@*{@I3x+U^@L*o;(lgrE@19ZC z@Ypgkw2l@;DyF5gYd%fF*CJO+H2Eah=2`OHX8LrSOVG(dVID9#5WHycQRT#)rKu%iEN(Ok z`3a0-H0km8`l@*l4&B)fBKd0gQb?c>MqK)DrZa|h{LXqyR@r^ZW19W#t#@j<-x(}T zi^X_-3^QzpM2Bo%wo#DD@?Q?jb9{NPnvb+ML?V9jzMJ;SO#2pfFL09_Z_@ePqBw7 zQU2T~&+T|4=PEfMW-bIeDxr;s(RCu}hDutp&37HNRNzCS{OS z*&5ebpfTw#3wfmE40inB{>!+FDZBbpYi#rcCOIxB9Y^##)>r)on6`Fp;cz6xoGiAW z&-fDP7#^Yjysd}@0SK?t2kav_rALG}Pv)MMGfiC}EDhbRa||uf7=X}F#8mNIC%ysy zURt_87kBIXXqzr9B@z*DjL~B0&gq08UrqlMI9NzGuAVAc;1-4CfsRq_{yXeGcgj|K zGuv{+{aw(3TR0Mq@>in+5H^ z97?Q;5e`GNtdhGn39|h|nLl{5qQ+_UI$0%0Ai>@HRo8%gHY3rQ{r2Rk7HP3)#3k4s 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 M^w$ner#sQHf?Ac2k^lez literal 0 HcmV?d00001 diff --git a/MikroMaster/20260917/20260917194002-Config.rsc b/MikroMaster/20260917/20260917194002-Config.rsc new file mode 100644 index 0000000..f858c12 --- /dev/null +++ b/MikroMaster/20260917/20260917194002-Config.rsc @@ -0,0 +1,4343 @@ +# 2026-09-17 19:40:03 by RouterOS 7.23.3 +# software id = 2961-C4ZZ +# +# model = RBD52G-5HacD2HnD +# serial number = HCX084RAVFA +/interface bridge +add name=Bridge-Lan +/interface wireless +# managed by CAPsMAN +set [ find default-name=wlan1 ] mode=ap-bridge ssid=vados wireless-protocol=\ + 802.11 +# managed by CAPsMAN +# channel: 5200/20-eCee/ac/P(20dBm), SSID: vados5g, local forwarding +set [ find default-name=wlan2 ] disabled=no mode=ap-bridge ssid=vados5g \ + wireless-protocol=802.11 +/interface ethernet +set [ find default-name=ether1 ] mac-address=48:8F:5A:8E:1A:BC name=\ + "ether1 - Unet" +/interface veth +add address=172.19.14.102/30 container-mac-address=30:C8:D7:A4:6C:D6 dhcp=no \ + gateway=172.19.14.101 gateway6="" mac-address=30:C8:D7:A4:6C:D5 name=\ + veth-awg3vds +/interface wireguard +add listen-port=60585 mtu=1280 name=WARP +add listen-port=41430 mtu=1320 name=wg-awg3vds +add disabled=yes listen-port=32252 mtu=1420 name=wg1 +/interface list +add comment=defconf name=WAN +add comment=defconf name=LAN +add exclude=LAN include=WAN name=Internet +/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 disabled=yes dns-servers=1.1.1.1,1.0.0.1 name=blsp.at verify-doh-cert=no +add comment=Kra disabled=yes dns-servers=1.0.0.1,1.1.1.1 name=slon2.to \ + verify-doh-cert=no +add disabled=yes dns-servers=1.1.1.1,1.0.0.1 name=slon3.at verify-doh-cert=no +add disabled=yes dns-servers=1.0.0.1,1.1.1.1 name=slon3.cc verify-doh-cert=no +add disabled=yes dns-servers=1.1.1.1,1.0.0.1 name=bs2web.at verify-doh-cert=\ + no +add disabled=yes dns-servers=1.1.1.1,1.0.0.1 name=bs2best.at verify-doh-cert=\ + no +add disabled=yes dns-servers=1.0.0.1,1.1.1.1 name=psrms.is verify-doh-cert=no +/ip pool +add name=dhcp ranges=10.30.30.150-10.30.30.200 +/ip dhcp-server +add address-pool=dhcp bootp-support=dynamic dhcp-option-set=domain-search-set \ + interface=Bridge-Lan name=masterDHCP server-address=10.30.30.81 +/ip smb users +set [ find default=yes ] disabled=yes +add disabled=yes name=vados +/routing bgp template +set default disabled=yes +/routing table +add disabled=no fib name=To-VPN +/system script +add dont-require-permissions=no name=fetchCustom owner=admin policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@10\ + .30.30.10.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.10.pub\";\ + \n\ + \n\ + \n#\ + \n\ + \n#root.mnuc.backuper\ + \n\ + \n\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@10\ + .30.30.81.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.81.pub\";\ + \n\ + \n\ + \n#:local Script AM-GlobalConfig;\ + \n\ + \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\ + \n#/usb1/mikro_bak_rsa.pub\ + \n\ + \n\ + \n#:local FetchFile AM-DOHCert.rsc\ + \n\ + \n\ + \n\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/tmp/\";\ + \n\ + \n:global MkDir;\ + \n\ + \n\ + \n:local FetchFile Manager@id_rsa.pub\ + \n:local localDir \"/\";\ + \n\ + \n\ + \n\ + \n\$MkDir \$localDir;\ + \n\ + \n\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \$FetchFile) dst-path=(\ + \$localDir . \$FetchFile);\ + \n" +add comment="Global Config Script" dont-require-permissions=no name=\ + AM-GlobalConfig-2026-09-1211:58:18.rsc owner=AM-GlobalConfig policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GlobalConfig\r\ + \n# Script comment: Global Config Script\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# Warning: Dont touch this line!\r\ + \n:global Identity [/system/identity/get name];\r\ + \n:global GlobalConfReady false;\r\ + \n#\r\ + \n#\r\ + \n# Global Url For Amster scripts to fetch\r\ + \n# most be defined in AM-Init-Script or AM-setup scripts\r\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n:global ScriptsUrlSuffix (a);\r\ + \n:global CheckSumsVerify true;\r\ + \n\r\ + \n:global ScriptUpdatesCRLF true;\r\ + \n:global CommentsInScripts true;\r\ + \n\r\ + \n# Debug output:\r\ + \n:global PrintDebug true; #false;\r\ + \n\r\ + \n# Debug output for specific script:\r\ + \n#:set (\$PrintDebugOverride->\"AM-GlobalFunc\") true;\r\ + \n\r\ + \n# Debug logs\r\ + \n# Other actions (disk, email, remote or support) can be used as well.\r\ + \n# I do not recommend using echo - use debug output instead (https://rsc.\ + eworm.de/main/DEBUG.html#debug-output).\r\ + \n#/system/logging/add topics=script,debug action=memory;\r\ + \n\r\ + \n:global MikrotikUpgradeUrl \"https://upgrade.mikrotik.com/routeros\";\r\ + \n:global Domain \"WORKGROUP\";\r\ + \n\r\ + \n:global EmailGeneralTo \"vados@vados.ru\";\r\ + \n#:global EmailGeneralCc \"\";\r\ + \n\r\ + \n# \$ScriptInstallUpdate mod/notification-telegram\r\ + \n:global TelegramTokenId \"8390868324:AAG3_d1hfVR2M6pGAgDK6ZvhOe4J97nyopw\ + \";\r\ + \n:global TelegramChatId \"-1003631309063\"; #\"454403445\";\r\ + \n# Use this to send notifications to a specific topic in group.\r\ + \n#:global TelegramThreadId \"30\";\r\ + \n# Using telegram-chat you have to define trusted chat ids (not group ids\ + !)\r\ + \n# or user names. Groups allow to chat with devices simultaneously.\r\ + \n:global TelegramChatIdsTrusted {\r\ + \n \"454403445\"\r\ + \n \"-1003631309063\"\r\ + \n \"-5124482807\"\r\ + \n \"1087968824\";\r\ + \n};\r\ + \n# \"-5294757340\";\r\ + \n\r\ + \n:global TelegramChatGroups \"(all)\";\r\ + \n#:global TelegramChatGroups \"(all|home|office)\";\r\ + \n\r\ + \n:global NotificationFunctions {\r\ + \n \"email\"\r\ + \n \"telegram\";\r\ + \n};\r\ + \n# Toggle this to disable symbols in notifications.\r\ + \n:global NotificationsWithSymbols true;\r\ + \n:global TerminalColorOutput true;\r\ + \n\r\ + \n:global DetectIpAddrDefault \"https://ipv4.mikrotik.ovh/\";\r\ + \n:global DetectIpAddrFallback \"https://api.ipify.org/\";\r\ + \n\r\ + \n## Update channel. Possible values: stable, long-term, testing, developm\ + ent\r\ + \n:global updateChannel \"stable\";\r\ + \n\r\ + \n:global CertRenewUrl (\$GlobalScriptsUrl . \"certs/\" . \$Identity . \"/\ + \");\r\ + \n:global CertRenewTime 2w;\r\ + \n:global CertRenewPass (a); #{\r\ + \n# \"\";\r\ + \n# \"v3ry-s3cr3t\";\r\ + \n# \"4n0th3r-s3cr3t\";\r\ + \n#};\r\ + \n:global CertWarnTime 1w;\r\ + \n:global CertIssuedExportPass (a); # {\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 dont-require-permissions=no name=AM-Fetch-Generator owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \n:local srcFile \"AM-Awg-Generator.rsc\";\ + \n:local dstFile \$srcFile;\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"/\$srcFile\") dst-pat\ + h=\"/\$dstFile\";\ + \n\ + \nexit 0\ + \n#\ + \n\ + \n#root.mnuc.backuper\ + \n\ + \n\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@10\ + .30.30.81.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.81.pub\";\ + \n\ + \n\ + \n#:local Script AM-GlobalConfig;\ + \n\ + \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\ + \n#/usb1/mikro_bak_rsa.pub\ + \n\ + \n\ + \n#:local FetchFile AM-DOHCert.rsc\ + \n\ + \n\ + \n\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/tmp/\";\ + \n\ + \n:global MkDir;\ + \n\ + \n\ + \n:local FetchFile Manager@id_rsa.pub\ + \n:local localDir \"/\";\ + \n\ + \n\ + \n\ + \n\$MkDir \$localDir;\ + \n\ + \n\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \$FetchFile) dst-path=(\ + \$localDir . \$FetchFile);\ + \n" +add comment=awg2vds dont-require-permissions=no name=awg2vds-uninstall owner=\ + vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="\ + \n :put \"Uninstallimg AmneziaWG...\"\ + \n :log info \"Uninstallimg AmneziaWG...\"\ + \n :local prevDNS \"\"\ + \n :do { :set prevDNS [/container/envs/get [find where list=\"awg2vds-env\ + \" key=\"AWG_PREV_DNS\"] value] } on-error={}\ + \n :local prevTmpdir \"\"\ + \n :do { :set prevTmpdir [/container/envs/get [find where list=\"awg2vds-\ + env\" key=\"AWG_PREV_TMPDIR\"] value] } on-error={}\ + \n /ip/route/remove [find where comment=awg2vds-tunnel]\ + \n /ip/route/remove [find where comment=awg2vds-dns]\ + \n /container/stop [find where interface=veth-awg2vds]\ + \n :delay 7s\ + \n /container/remove [find where interface=veth-awg2vds]\ + \n /container/envs/remove [find where list=\"awg2vds-env\"]\ + \n :if (\$prevDNS != \"\") do={\ + \n :do { /ip/dns/set servers=\"\$prevDNS\" } on-error={}\ + \n :put (\"DNS restored to: \$prevDNS\")\ + \n }\ + \n /container/config set tmpdir=\$prevTmpdir\ + \n :put (\"Container tmpdir restored to: \$prevTmpdir\")\ + \n /ip/firewall/nat/remove [find where out-interface=\"wg-awg2vds\"]\ + \n /ip/firewall/nat/remove [find where src-address=\"172.20.200.68/30\"]\ + \n /ip/address/remove [find where address=\"172.20.200.69/30\"]\ + \n /interface/veth/remove [find where name=\"veth-awg2vds\"]\ + \n /interface/wireguard/peers/remove [find where interface=\"wg-awg2vds\"\ + ]\ + \n /ip/address/remove [find where interface=\"wg-awg2vds\"]\ + \n /interface/wireguard/remove [find where name=\"wg-awg2vds\"]\ + \n :do { /file/remove [find where name~\"awg2vds.+tar\"] } on-error={}\ + \n :do { /file/remove [find where name=\"usb1/awg2vds\"] } on-error={}\ + \n :do { /file/remove [find where name=\"usb1/ru_ranges_timeout.rsc\"] } \ + on-error={}\ + \n :do { /file/remove [find where name~\"usb1/pull\"] } on-error={}\ + \n :put \"Uninstall AmneziaWG Proxy complete!\"\ + \n :log info \"Uninstall AmneziaWG Proxy complete!\"\ + \n /system/script/remove [find where name=awg2vds-uninstall]\ + \n" +add comment="Global Config Script" dont-require-permissions=no name=\ + AM-GlobalConfig owner=AM-GlobalConfig policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GlobalConfig\r\ + \n# Script comment: Global Config Script\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# Warning: Dont touch this line!\r\ + \n:global Identity [/system/identity/get name];\r\ + \n:global GlobalConfReady false;\r\ + \n#\r\ + \n#\r\ + \n# Global Url For Amster scripts to fetch\r\ + \n# most be defined in AM-Init-Script or AM-setup scripts\r\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n:global ScriptsUrlSuffix (a);\r\ + \n:global CheckSumsVerify true;\r\ + \n\r\ + \n:global ScriptUpdatesCRLF true;\r\ + \n:global CommentsInScripts true;\r\ + \n\r\ + \n# Debug output:\r\ + \n:global PrintDebug true; #false;\r\ + \n\r\ + \n# Debug output for specific script:\r\ + \n#:set (\$PrintDebugOverride->\"AM-GlobalFunc\") true;\r\ + \n\r\ + \n# Debug logs\r\ + \n# Other actions (disk, email, remote or support) can be used as well.\r\ + \n# I do not recommend using echo - use debug output instead (https://rsc.\ + eworm.de/main/DEBUG.html#debug-output).\r\ + \n#/system/logging/add topics=script,debug action=memory;\r\ + \n\r\ + \n:global MikrotikUpgradeUrl \"https://upgrade.mikrotik.com/routeros\";\r\ + \n:global Domain \"WORKGROUP\";\r\ + \n\r\ + \n:global EmailGeneralTo \"vados@vados.ru\";\r\ + \n#:global EmailGeneralCc \"\";\r\ + \n\r\ + \n# \$ScriptInstallUpdate mod/notification-telegram\r\ + \n:global TelegramTokenId \"8390868324:AAG3_d1hfVR2M6pGAgDK6ZvhOe4J97nyopw\ + \";\r\ + \n:global TelegramChatId \"-1003631309063\"; #\"454403445\";\r\ + \n# Use this to send notifications to a specific topic in group.\r\ + \n#:global TelegramThreadId \"30\";\r\ + \n# Using telegram-chat you have to define trusted chat ids (not group ids\ + !)\r\ + \n# or user names. Groups allow to chat with devices simultaneously.\r\ + \n:global TelegramChatIdsTrusted {\r\ + \n \"454403445\"\r\ + \n \"-1003631309063\"\r\ + \n \"-5124482807\"\r\ + \n \"1087968824\";\r\ + \n};\r\ + \n# \"-5294757340\";\r\ + \n\r\ + \n:global TelegramChatGroups \"(all)\";\r\ + \n#:global TelegramChatGroups \"(all|home|office)\";\r\ + \n\r\ + \n:global NotificationFunctions {\r\ + \n \"email\"\r\ + \n \"telegram\";\r\ + \n};\r\ + \n# Toggle this to disable symbols in notifications.\r\ + \n:global NotificationsWithSymbols true;\r\ + \n:global TerminalColorOutput true;\r\ + \n\r\ + \n:global DetectIpAddrDefault \"https://ipv4.mikrotik.ovh/\";\r\ + \n:global DetectIpAddrFallback \"https://api.ipify.org/\";\r\ + \n\r\ + \n## Update channel. Possible values: stable, long-term, testing, developm\ + ent\r\ + \n:global updateChannel \"stable\";\r\ + \n\r\ + \n:global CertRenewUrl (\$GlobalScriptsUrl . \"certs/\" . \$Identity . \"/\ + \");\r\ + \n:global CertRenewTime 2w;\r\ + \n:global CertRenewPass (a); #{\r\ + \n# \"\";\r\ + \n# \"v3ry-s3cr3t\";\r\ + \n# \"4n0th3r-s3cr3t\";\r\ + \n#};\r\ + \n:global CertWarnTime 1w;\r\ + \n:global CertIssuedExportPass (a); # {\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/18038/819287c3\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 02:20:04 17.09.2026.\";\r\ + \n\r\ + \n# The variables are received right here.\r\ + \n:global GlobalConfVersion 140;\r\ + \n\r\ + \n:global SumsDirAndFileName \"tmp/checksums.json\";\r\ + \n\r\ + \n:global Identity [/system/identity/get name];\r\ + \n:global IdentityShort [:pick \$Identity 0 18];\r\ + \n\r\ + \n:global devBoardName [/system/resource/get board-name];\r\ + \n:global devMode [/system/device-mode/get mode];\r\ + \n:global devCurArch [/system/resource/get architecture-name];\r\ + \n:global devCurVersion [/system/resource/get version];\r\ + \n\r\ + \n# Variables defined in AM-GlobalConfig.rsc\r\ + \n:global TerminalColorOutput;\r\ + \n:global CommentsInScripts;\r\ + \n:global DetectIpAddrDefault;\r\ + \n:global DetectIpAddrFallback;\r\ + \n:global updateChannel;\r\ + \n:global Domain;\r\ + \n:global EmailGeneralTo;\r\ + \n:global BackupAndUpdateMode;\r\ + \n\r\ + \n# Single functions, without nested functions.\r\ + \n:global MiniDateTimeStamp;\r\ + \n:global MicroDateTimeStamp;\r\ + \n\r\ + \n# Include globals \$PrintDebug and \$PrintDebugOverride\r\ + \n:global LogPrint;\r\ + \n\r\ + \n# DeviceInfo and Updates\r\ + \n:global IsCheckUpdates;\r\ + \n:global WaitCheckUpdates;\r\ + \n:global GetPubIp;\r\ + \n\r\ + \n:global GetArrDeviceInfo;\r\ + \n:global WaitArrDeviceInfo;\r\ + \n\r\ + \n:global devModel;\r\ + \n:global devRunningMode;\r\ + \n\r\ + \n:global devRbRevision;\r\ + \n:global devRbSerialNumber;\r\ + \n:global devRbVerAvail;\r\ + \n\r\ + \n:global runningChannelVersion;\r\ + \n:global runningChannel;\r\ + \n:global runningVersion;\r\ + \n\r\ + \n:global devBuildTime;\r\ + \n:global ROsVerAvail;\r\ + \n:global PkgUpdStatus;\r\ + \n:global currentUpdateChannel;\r\ + \n\r\ + \n:global ScriptInstallUpdate;\r\ + \n\r\ + \n:global DeviceInfo;\r\ + \n\r\ + \n:global OldMode;\r\ + \n\r\ + \n:global ParseKeyValueStore;\r\ + \n:global RandomDelay;\r\ + \n:global GetRandomNumber;\r\ + \n:global EscapeForRegEx;\r\ + \n:global CharacterMultiply;\r\ + \n:global CharacterReplace;\r\ + \n:global CleanFilePath;\r\ + \n:global CleanName;\r\ + \n\r\ + \n:global CommitBrief;\r\ + \n\r\ + \n:global EitherOr;\r\ + \n:global FormatLine;\r\ + \n:global GetRandom20CharAlNum;\r\ + \n:global GetRandom20CharHex;\r\ + \n:global GetRandomNumber;\r\ + \n:global Grep;\r\ + \n:global IfThenElse;\r\ + \n:global MAX;\r\ + \n:global MIN;\r\ + \n:global HumanReadableNum;\r\ + \n\r\ + \n:global IsFullyConnected;\r\ + \n:global IsDNSResolving;\r\ + \n:global IsTimeSync;\r\ + \n:global IsTimeSyncCached;\r\ + \n:global IsTimeSyncResetNtp;\r\ + \n\r\ + \n:global MkDir;\r\ + \n:global RmDir;\r\ + \n:global RmFile;\r\ + \n:global FileGet;\r\ + \n:global Unix2Dos;\r\ + \n:global UrlEncode;\r\ + \n:global WaitForFile;\r\ + \n:global ScriptLock;\r\ + \n:global SendTelegram;\r\ + \n:global NotificationFunctions;\r\ + \n:global SendNotification;\r\ + \n:global SendNotification2;\r\ + \n:global SymbolForNotification;\r\ + \n:global SymbolByUnicodeName;\r\ + \n:global ValidateSyntax;\r\ + \n:global CheckSumsVerify;\r\ + \n:global GlobalConfChanges;\r\ + \n:global GlobalConfMigration;\r\ + \n:global VersionToNum;\r\ + \n:global RequiredRouterOS;\r\ + \n:global ExitError;\r\ + \n:global ExitOnError;\r\ + \n\r\ + \n:global FetchHugeFiles;\r\ + \n:global FetchUserAgentStr;\r\ + \n:global FileExists;\r\ + \n:global CertificateAvailable;\r\ + \n:global CertificateDownload;\r\ + \n:global CertificateNameByCN;\r\ + \n:global CharacterMultiply;\r\ + \n\r\ + \n:global InspectVar;\r\ + \n:global InspectVarRet;\r\ + \n:global ParseCustom;\r\ + \n\r\ + \n:set IsCheckUpdates do={\r\ + \n :local isInfo [:tobool \$1];\r\ + \n :global updateChannel;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n :log info (\$0 . \" \\\$isInfo = \" . \$isInfo); \r\ + \n :local CurrentChannel [ /system/package/update/get channel ];\r\ + \n :if ([ :len \$updateChannel ] > 0 && \$CurrentChannel != \$updateChann\ + el) do={\r\ + \n :retry command={/system/package/update set channel=\$updateChannel} \ + \_delay=300ms max=5 on-error={};\r\ + \n :log info (\$0 . \" Set updates channel to: \$updateChannel\");\r\ + \n }\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local Channel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set currentUpdateChannel \$Channel;\r\ + \n :log info (\$0 . \" Update Channel: \" . \$Channel . \".\");\r\ + \n :local StatusPkg \"undefined\";\r\ + \n :log info (\$0 . \" Checking for updates...\");\r\ + \n :retry command={:set \$StatusPkg ([/system/package/update/check-for-up\ + dates without-paging as-value]->\"status\")} \\\r\ + \n delay=300ms max=5 on-error={};\r\ + \n :log info (\$0 . \" \\\$StatusPkg = \" . \$StatusPkg);\r\ + \n :if (\$StatusPkg = \"New version is available\") do={ :set PkgUpdStatu\ + s true; } else={ :set PkgUpdStatus false; }\r\ + \n :set ROsVerAvail [ :tostr [ /system/package/update/get latest-version \ + ] ];\r\ + \n :log info (\$0 . \" \\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if (\$isInfo != false || \$PkgUpdStatus = true) do={\r\ + \n :log info (\$0 . \" \\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :retry command={:set (\$arrDeviceInfo->\"devUpdates\") [ /system/pac\ + kage/update/get ]} delay=500ms max=5 on-error={:log error (\"Error\")};\r\ + \n :return true;\r\ + \n } else={\r\ + \n :return \$PkgUpdStatus;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set WaitCheckUpdates do={\r\ + \n :global IsCheckUpdates;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n :local Status \"\";\r\ + \n :local Update;\r\ + \n :local WaitCount 0;\r\ + \n :if ([ \$IsCheckUpdates true ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n :while ((\$Status = \"\" || \$Status = \"finding out latest version...\ + \") && \$WaitCount < 60) do={\r\ + \n :delay 1s;\r\ + \n :set WaitCount (\$WaitCount + 1);\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n }\r\ + \n :set Update [ /system/package/update/get ];\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n :if ((\$Update->\"status\") = \"New version is available\") do={\r\ + \n :set PkgUpdStatus true;\r\ + \n } else={\r\ + \n :set PkgUpdStatus false;\r\ + \n }\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :set (\$arrDeviceInfo->\"devUpdates\") \$Update;\r\ + \n :if (\$Status = \"\" || \$Status = \"finding out latest version...\") \ + do={\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set WaitArrDeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :while ([ \$GetArrDeviceInfo ] = false) do={\r\ + \n :delay 1s;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set GetArrDeviceInfo do={\r\ + \n :global LogPrint;\r\ + \n :global arrDeviceInfo;\r\ + \n :global devBoardName;\r\ + \n :global devModel;\r\ + \n :global devRunning;\r\ + \n :global devCurArch;\r\ + \n :global devRbRevision;\r\ + \n :global devRbSerialNumber;\r\ + \n :global devBuildTime;\r\ + \n :global runningChannelVersion;\r\ + \n :global runningChannel;\r\ + \n :global runningVersion;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n\r\ + \n :local DeviceInfo;\r\ + \n :local Resource [/system/resource/get];\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local VersionString [ :tostr (\$Resource->\"version\") ];\r\ + \n :local ChannelStart [ :find \$VersionString \" (\" ];\r\ + \n :local RouterBoard;\r\ + \n :local IsRouterBoard false;\r\ + \n :local RunningMode \"\";\r\ + \n\r\ + \n :set devCurArch [ :tostr (\$Resource->\"architecture-name\") ];\r\ + \n :set devBuildTime [ :tostr (\$Resource->\"build-time\") ];\r\ + \n :set runningChannelVersion \$VersionString;\r\ + \n :set runningVersion \$VersionString;\r\ + \n :set runningChannel \"\";\r\ + \n\r\ + \n :if ([ :typeof \$ChannelStart ] = \"num\" && \$ChannelStart >= 0) do=\ + {\r\ + \n :set runningVersion [ :pick \$VersionString 0 \$ChannelStart ];\r\ + \n :local ChannelRest [ :pick \$VersionString (\$ChannelStart + 2) [ :\ + len \$VersionString ] ];\r\ + \n :local ChannelEnd [ :find \$ChannelRest \")\" ];\r\ + \n :if ([ :typeof \$ChannelEnd ] = \"num\" && \$ChannelEnd >= 0) do={\ + \r\ + \n :set runningChannel [ :pick \$ChannelRest 0 \$ChannelEnd ];\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([:pick \$devBoardName 0 3] != \"CHR\" or [:pick \$devBoardName 0\ + \_3] != \"x86\") do={\r\ + \n :do {\r\ + \n :set RouterBoard [[ :parse \"/system/routerboard/get\" ]];\r\ + \n# :set RouterBoard [ /system/routerboard/get ];\r\ + \n :if ((\$RouterBoard->\"routerboard\") = true) do={\r\ + \n :set IsRouterBoard true;\r\ + \n }\r\ + \n } on-error={}\r\ + \n }\r\ + \n\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get mode ];\r\ + \n } on-error={\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get running ];\r\ + \n } on-error={\r\ + \n :set RunningMode \"\";\r\ + \n }\r\ + \n }\r\ + \n :set devRunning \$RunningMode;\r\ + \n\r\ + \n :if (\$IsRouterBoard = true) do={\r\ + \n :set devModel [ :tostr (\$RouterBoard->\"model\") ];\r\ + \n :set devRbRevision [ :tostr (\$RouterBoard->\"revision\") ];\r\ + \n :set devRbSerialNumber [ :tostr (\$RouterBoard->\"serial-number\") \ + ];\r\ + \n } else={\r\ + \n :set devModel \$devBoardName;\r\ + \n :set devRbRevision \"\";\r\ + \n :set devRbSerialNumber \"\";\r\ + \n }\r\ + \n\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n\r\ + \n :set (\$DeviceInfo->\"board-name\") \$devBoardName;\r\ + \n :set (\$DeviceInfo->\"architecture-name\") \$devCurArch;\r\ + \n :set (\$DeviceInfo->\"model\") \$devModel;\r\ + \n :set (\$DeviceInfo->\"revision\") \$devRbRevision;\r\ + \n :set (\$DeviceInfo->\"serial-number\") \$devRbSerialNumber;\r\ + \n :set (\$DeviceInfo->\"running-mode\") \$devRunning;\r\ + \n :set (\$DeviceInfo->\"build-time\") \$devBuildTime;\r\ + \n :set (\$DeviceInfo->\"running-channel-version\") \$runningChannelVers\ + ion;\r\ + \n :set (\$DeviceInfo->\"running-version\") \$runningVersion;\r\ + \n :set (\$DeviceInfo->\"running-channel\") \$runningChannel;\r\ + \n :set (\$DeviceInfo->\"routerboard\") \$IsRouterBoard;\r\ + \n :set (\$DeviceInfo->\"current-firmware\") [ :tostr (\$RouterBoard->\"\ + current-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"upgrade-firmware\") [ :tostr (\$RouterBoard->\"\ + upgrade-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"package-channel\") \$currentUpdateChannel;\r\ + \n :set (\$DeviceInfo->\"installed-version\") [ :tostr (\$Update->\"inst\ + alled-version\") ];\r\ + \n :set (\$DeviceInfo->\"latest-version\") \$ROsVerAvail;\r\ + \n :set (\$DeviceInfo->\"update-status\") [ :tostr (\$Update->\"status\"\ + ) ];\r\ + \n\r\ + \n :set arrDeviceInfo \$DeviceInfo;\r\ + \n :return \$DeviceInfo;\r\ + \n}\r\ + \n\r\ + \n:set DeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global IfThenElse;\r\ + \n :global FormatLine;\r\ + \n :global CommitBrief;\r\ + \n\r\ + \n :local License [/system/license/get];\r\ + \n :local Snmp [ /snmp/get ];\r\ + \n :local Info [ \$GetArrDeviceInfo ];\r\ + \n\r\ + \n :if ([ :typeof \$Info ] != \"array\") do={\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :return ( \\\r\ + \n [ \$FormatLine \"Hostname\" \$Identity ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"location\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Location\" (\$Snmp->\"location\") ] . \"\\n\") ]\ + \_. \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"contact\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Contact\" (\$Snmp->\"contact\") ] . \"\\n\") ] .\ + \_\\\r\ + \n \"Hardware:\\n\" . \\\r\ + \n [ \$FormatLine \" Board\" (\$Info->\"board-name\") ] . \"\\n\" . \ + \\\r\ + \n [ \$FormatLine \" Arch\" (\$Info->\"architecture-name\") ] . \"\\\ + n\" . \\\r\ + \n [ \$FormatLine \" Model\" (\$Info->\"model\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"revision\") ] > 0) \\\r\ + \n (\" \" . (\$Info->\"revision\")) ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"serial-number\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Serial\" (\$Info->\"serial-number\") ] . \"\ + \\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"nlevel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"nlevel\ + \")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS:\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"level\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"level\ + \")) ] . \"\\n\") ] . \\\r\ + \n [ \$FormatLine \" Channel\" (\$Info->\"package-channel\") ] . \"\ + \\n\" . \\\r\ + \n [ \$FormatLine \" Installed\" (\$Info->\"installed-version\") ] .\ + \_\"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"running-channel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Running\" ((\$Info->\"running-version\") . \ + \" (\" . (\$Info->\"running-channel\") . \")\") ] . \"\\n\") \\\r\ + \n ([ \$FormatLine \" Running\" (\$Info->\"running-version\") ] . \ + \"\\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"latest-version\") ] > 0 && \\\r\ + \n (\$Info->\"installed-version\") != (\$Info->\"latest-version\"))\ + \_\\\r\ + \n ([ \$FormatLine \" Available\" (\$Info->\"latest-version\") ] .\ + \_\"\\n\") ] . \\\r\ + \n [ \$IfThenElse ((\$Info->\"routerboard\") = true && \\\r\ + \n (\$Info->\"current-firmware\") != (\$Info->\"upgrade-firmware\")\ + ) \\\r\ + \n ([ \$FormatLine \" Firmware\" ((\$Info->\"current-firmware\") .\ + \_\" -> \" . (\$Info->\"upgrade-firmware\")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS-Scripts:\\n\" . \\\r\ + \n [ \$FormatLine \" Commit\" [ \$CommitBrief ] ] . \"\\n\" . \\\r\ + \n [ \$FormatLine \" Version\" \$GlobalConfVersion ]);\r\ + \n}\r\ + \n\r\ + \n:if ([ :typeof \$NotificationFunctions ] != \"array\") do={:set Notifica\ + tionFunctions ({})}\r\ + \n\r\ + \n:set GetRandom20CharAlNum do={\r\ + \n :global EitherOr;\r\ + \n :return [ :rndstr length=[ \$EitherOr [ :tonum \$1 ] 20 ] from=\"ABCDE\ + FGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\" ];\r\ + \n}\r\ + \n\r\ + \n:set GetRandom20CharHex do={:global EitherOr; :return [ :rndstr length=[\ + \_\$EitherOr [ :tonum \$1 ] 20 ] from=\"0123456789abcdef\" ]; }\r\ + \n:set GetRandomNumber do={:global EitherOr; :return [ :rndnum from=0 to=[\ + \_\$EitherOr [ :tonum \$1 ] 4294967295 ] ]; }\r\ + \n\r\ + \n:global checkRunJob;\r\ + \n:set checkRunJob do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLock; \r\ + \n :if ([ \$ScriptLock \$Script ] = false) do={:return false}\r\ + \n :foreach Job in=[ /system/script/job/find where script=\$Script ] do={\ + :set Job [ /system/script/job/get \$Job ];\r\ + \n :while ([ :typeof (\$Job->\"parent\") ] = \"id\") do={:set Job [ /sy\ + stem/script/job/get [ find where .id=(\$Job->\"parent\") ] ]}\r\ + \n :if ((\$Job->\"type\") = \"login\") do={:return true};}; :return fa\ + lse; \r\ + \n}\r\ + \n\r\ + \n:set InspectVar do={\r\ + \n :global InspectVarRet;\r\ + \n :put [ :tocrlf [ \$InspectVarRet \$1 ] ];\r\ + \n}\r\ + \n\r\ + \n:set CommitBrief do={\r\ + \n :global CommitId;\r\ + \n :global CommitInfo;\r\ + \n :if (\$CommitId = \"unknown\") do={\r\ + \n :return \"unknown\";\r\ + \n }\r\ + \n :return (\$CommitInfo . \"/\" . [ :pick \$CommitId 0 8 ]);\r\ + \n}\r\ + \n\r\ + \n:set InspectVarRet do={\r\ + \n :local Input \$1;\r\ + \n :local Level (0 + [ :tonum \$2 ]);\r\ + \n :global CharacterReplace;\r\ + \n :global IfThenElse;\r\ + \n :global InspectVarRet;\r\ + \n :local IndentReturn do={\r\ + \n :local Prefix [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Level [ :tonum \$3 ];\r\ + \n :global CharacterMultiply;\r\ + \n :return ([ \$CharacterMultiply \" \" (\$Level * 2) ] . \"-\" . \$Pre\ + fix . \"-> \" . \$Value);\r\ + \n }\r\ + \n :local TypeOf [ :typeof \$Input ];\r\ + \n :local Len [ :len \$Input ];\r\ + \n :local Return [ \$IndentReturn \"type\" \$TypeOf \$Level ];\r\ + \n :if (\$TypeOf = \"array\") do={\r\ + \n :foreach Key,Value in=\$Input do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"key\" \$Key (\$Level + 1) ] . \"\\n\" . \\\r\ + \n [ \$InspectVarRet \$Value (\$Level + 2) ]);\r\ + \n }\r\ + \n } else={\r\ + \n :if (\$TypeOf = \"str\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"len\" \$Len \$Level ]);\r\ + \n :if ([ :typeof [ :find \$Input (\"\\r\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\r\") \"\" ];\r\ + \n }\r\ + \n :if ([ :typeof [ :find \$Input (\"\\n\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\n\") \" \" ];\r\ + \n }\r\ + \n }\r\ + \n :if (\$TypeOf != \"nothing\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"value\" [ \$IfThenElse ([ :len \$Input ] > 80)\ + \_\\\r\ + \n ([ :pick \$Input 0 77 ] . \"...\") \$Input ] \$Level ]);\r\ + \n }\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set GetPubIp do={\r\ + \n :global DetectIpAddrDefault;\r\ + \n :global DetectIpAddrFallback;\r\ + \n\r\ + \n :local PubIpAddr false;\r\ + \n :local Url \$DetectIpAddrDefault;\r\ + \n :local JobName [ :jobname ];\r\ + \n\r\ + \n :do {\r\ + \n :log debug (\$0 . \" Trying to detect public IP using default serv\ + ice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=50ms max=5 on-error={:log error (\$JobName . \" Failed to \ + detect public IP using default service: \" . \$Url . \".\")}\r\ + \n } on-error={\r\ + \n :log error (\$0 . \" Failed to detect public IP using default serv\ + ice: \" . \$Url . \".\");\r\ + \n :set Url \$DetectIpAddrFallBack;\r\ + \n :log debug (\$0 . \" Trying to detect public IP using fallback ser\ + vice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=200ms max=5 on-error={:log error (\$JobName . \" Failed to\ + \_detect public IP using fallback service: \" . \$Url . \".\")}\r\ + \n };\r\ + \n :local IpLen ([ :len \$PubIpAddr ] -1);\r\ + \n :if (\$PubIpAddr = false) do={:set PubIpAddr \"not-detected\"} else=\ + {:set PubIpAddr [:pick \$PubIpAddr 0 \$IpLen]}\r\ + \n :return \$PubIpAddr;\r\ + \n}\r\ + \n\r\ + \n:set FormatLine do={\r\ + \n :local Key [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Indent [ :tonum \$3 ];\r\ + \n :local Spaces;\r\ + \n :local Return \"\";\r\ + \n :global CharacterMultiply;\r\ + \n :global EitherOr;\r\ + \n :set Indent [ \$EitherOr \$Indent 16 ];\r\ + \n :local Spaces [ \$CharacterMultiply \" \" \$Indent ];\r\ + \n :if ([ :len \$Key ] > 0) do={ :set Return (\$Key . \":\")}\r\ + \n :if ([ :len \$Key ] > (\$Indent - 2)) do={:set Return (\$Return . \"\\\ + n\" . [ :pick \$Spaces 0 \$Indent ] . \$Value);\r\ + \n } else={:set Return (\$Return . [ :pick \$Spaces 0 (\$Indent - [ :len \ + \$Return ]) ] . \$Value)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ParseCustom do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Start [:find [ \$Str ] [:tostr \$2]];\r\ + \n :local End [ :tostr \$3 ];\r\ + \n :local Num [ :tonum \$4 ];\r\ + \n :local Return;\r\ + \n :if ([:len \$Num] = 0) do={:set Num \"0\"}\r\ + \n :local rest [:pick \$Str (\$Start+\$Num) [:len \$Str]]; \r\ + \n :if ([:len \$End ] = 0) do={:set Return [:pick \$Str \$Num \$Start]} e\ + lse={\r\ + \n :set End [:find \$rest \$End];\r\ + \n :set Return [:pick \$rest 0 \$End];\r\ + \n }\r\ + \n:return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set LogPrint do={\r\ + \n :local Severity [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Message [ :tostr \$3 ];\r\ + \n :global PrintDebug;\r\ + \n :global PrintDebugOverride;\r\ + \n :global EitherOr;\r\ + \n :local Debug [ \$EitherOr (\$PrintDebugOverride->\$Name) \$PrintDebug \ + ];\r\ + \n :local PrintSeverity do={\r\ + \n :global TerminalColorOutput;\r\ + \n :if (\$TerminalColorOutput != true) do={:return \$1}\r\ + \n :local Color { debug=96; info=97; warning=93; error=91 };\r\ + \n :return (\"\\1B[\" . \$Color->\$1 . \"m\" . \$1 . \"\\1B[0m\");\r\ + \n}\r\ + \n :local Log ([ \$EitherOr \$Name \"\" ] . \": \" . \$Message);\ + \r\ + \n :if (\$Severity ~ (\"^(custom|debug|error|info)\\\$\")) do={\r\ + \n :if (\$Severity = \"debug\") do={:log debug \$Log}\r\ + \n :if (\$Severity = \"error\") do={:log error \$Log}\r\ + \n :if (\$Severity = \"info\" ) do={:log info \$Log}\r\ + \n } else={:log warning \$Log; :set Severity \"warning\"}\r\ + \n :if (\$Severity != \"debug\" || \$Debug = true) do={:put ([ \$PrintSev\ + erity \$Severity ] . \": \" . \$Message)}\r\ + \n}\r\ + \n\r\ + \n:set CertificateAvailable do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :local UseFor [ :tostr \$2 ];\r\ + \n\r\ + \n :global CertificateDownload;\r\ + \n :global ParseKeyValueStore;\r\ + \n\r\ + \n :if ([ :len \$UseFor ] = 0) do={\r\ + \n :log warning (\$0 . \"The intended use is undefined!\");\r\ + \n :set UseFor \"undefined\";\r\ + \n }\r\ + \n :if ([ /system/resource/get free-hdd-space ] < 8388608 && \\\r\ + \n [ /certificate/settings/get crl-download ] = true && \\\r\ + \n [ /certificate/settings/get crl-store ] = \"system\") do={\r\ + \n :log warning (\$0 . \"This system has low free flash space but \" . \ + \\\r\ + \n \"is configured to download certificate CRLs to system!\");\r\ + \n }\r\ + \n :if ([ :len \$CommonName ] = 0) do={\r\ + \n :log warning (\$0 . \"No CommonName given!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if (((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" || \\\ + \r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \$UseFor || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\r\ + \n [ :len [ /certificate/builtin/find where common-name=\$CommonName\ + \_] ] > 0) do={\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n :log info (\$0 . \"Certificate with CommonName '\" . \$CommonName . \ + \"' not available.\");\r\ + \n :if ([ \$CertificateDownload \$CommonName ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] > 1\ + ) do={\r\ + \n :log info (\$0 . \"There are \" . \$CertCount . \" Certificates with\ + \_CommonName '\" . \$CommonName . \"'. Should be ok.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :local CertVal [ /certificate/get [ find where common-name=\$CommonNam\ + e ] ];\r\ + \n :while ((\$CertVal->\"akid\") != \"\" && (\$CertVal->\"akid\") != (\$C\ + ertVal->\"skid\")) do={\r\ + \n :if ([ :len [ /certificate/find where skid=(\$CertVal->\"akid\") ] ]\ + \_= 0) do={\r\ + \n :local IssuerCN ([ \$ParseKeyValueStore (\$CertVal->\"issuer\") ]-\ + >\"CN\");\r\ + \n :log info (\$0 . \"Certificate chain for '\" . \$CommonName . \"' \ + is incomplete, missing '\" . \$IssuerCN . \"'.\");\r\ + \n :if ([ \$CertificateDownload \$IssuerCN ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :set CertVal [ /certificate/get [ find where skid=(\$CertVal->\"akid\ + \") ] ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateDownload do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :global ScriptUpdatesBaseUrl;\r\ + \n :global ScriptUpdatesUrlSuffix;\r\ + \n :global CertificateNameByCN;\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :log info (\$0 . \"Downloading and importing certificate with \" . \\\ + \r\ + \n \"CommonName '\" . \$CommonName . \"'.\");\r\ + \n :local FileName ([ \$CleanName \$CommonName ] . \".pem\");\r\ + \n :do {\r\ + \n /tool/fetch check-certificate=yes-without-crl mode=https http-header\ + -field=({ [ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n (\$ScriptUpdatesBaseUrl . \"certs/\" . \$FileName . \$ScriptUpdate\ + sUrlSuffix) \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n } on-error={\r\ + \n :log warning (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \\\r\ + \n \"' from repository! Trying fallback to mkcert.org...\");\r\ + \n :do {\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if ([ :len [ /certificate/find where common-name=\"ISRG Root X1\"\ + \_] ] = 0 && \\\r\ + \n !(((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" \ + || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \"fetch\" || \ + \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\ + \r\ + \n [ :len [ /certificate/builtin/find where common-name=\"ISRG\ + \_Root X1\" ] ] > 0)) do={\r\ + \n :log error (\$0 . \" Required certificate is not available.\");\ + \r\ + \n :return false;\r\ + \n }\r\ + \n /tool/fetch check-certificate=yes-without-crl mode=https http-head\ + er-field=({ [ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n url=\"https://mkcert.org/generate/\" http-data=[ :serialize to=jso\ + n ({ \$CommonName }) ] \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n :if ([ /file/get \$FileName size ] = 0) do={\r\ + \n \$RmFile \$FileName;\r\ + \n :error false;\r\ + \n }\r\ + \n } on-error={\r\ + \n :log error (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \"'!\");\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n /certificate/import file-name=\$FileName passphrase=\"\" as-value;\r\ + \n :delay 1s;\r\ + \n \$RmFile \$FileName;\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n /certificate/remove [ find where name~(\"^\" . \$FileName . \"_[0-9]\ + +\\\$\") ];\r\ + \n :log warning (\$0 . \" Certificate with CommonName '\" . \$CommonNam\ + e . \"' still unavailable!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :foreach Cert in=[ /certificate/find where name~(\"^\" . \$FileName . \ + \"_[0-9]+\\\$\") ] do={\r\ + \n \$CertificateNameByCN [ /certificate/get \$Cert common-name ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateNameByCN do={\r\ + \n :local Match [ :tostr \$1 ];\r\ + \n :global CleanName;\r\ + \n :local Cert ([ /certificate/find where (common-name=\$Match or fingerp\ + rint=\$Match or name=\$Match) ]->0);\r\ + \n :if ([ :len \$Cert ] = 0) do={\r\ + \n :log warning (\$0 .\" No matching certificate found.\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CommonName [ /certificate/get \$Cert common-name ];\r\ + \n /certificate/set \$Cert name=[ \$CleanName \$CommonName ];\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set FileExists do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local Type [ :tostr \$2 ];\r\ + \n :global FileGet;\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={ :return false; }\r\ + \n :if ([ :len (\$FileVal->\"size\") ] = 0) do={ :return false; }\r\ + \n :if ([ :len \$Type ] = 0 || \$FileVal->\"type\" = \$Type) do={ :return\ + \_true; }\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set Grep do={\r\ + \n :local Input ([ :tostr \$1 ] . \"\\n\");\r\ + \n :local Pattern [ :tostr \$2 ];\r\ + \n :if ([ :typeof [ :find \$Input \$Pattern ] ] = \"nil\") do={:return []\ + }\r\ + \n :do {\r\ + \n :local Line [ :pick \$Input 0 [ :find \$Input \"\\n\" ] ];\r\ + \n :if ([ :typeof [ :find \$Line \$Pattern ] ] = \"num\") do={:return \ + \$Line}\r\ + \n :set Input [ :pick \$Input ([ :find \$Input \"\\n\" ] + 1) [ :len \$\ + Input ] ];\r\ + \n } while=([ :len \$Input ] > 0);\r\ + \n :return [];\r\ + \n}\r\ + \n\r\ + \n:set HumanReadableNum do={\r\ + \n :local Input [ :tonum \$1 ];\r\ + \n :local Base [ :tonum \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global IfThenElse;\r\ + \n :local Prefix \"kMGTPE\";\r\ + \n :local Pow 1;\r\ + \n :set Base [ \$EitherOr \$Base 1024 ];\r\ + \n :local Bin [ \$IfThenElse (\$Base = 1024) \"i\" \"\" ];\r\ + \n :if (\$Input < \$Base) do={:return \$Input}\r\ + \n :for I from=0 to=[ :len \$Prefix ] do={\r\ + \n :set Pow (\$Pow * \$Base);\r\ + \n :if (\$Input / \$Base < \$Pow) do={\r\ + \n :set Prefix [ :pick \$Prefix \$I ];\r\ + \n :local Tmp1 (\$Input * 100 / \$Pow);\r\ + \n :local Tmp2 (\$Tmp1 / 100);\r\ + \n :if (\$Tmp2 >= 100) do={:return (\$Tmp2 . \$Prefix . \$Bin)}\r\ + \n :return (\$Tmp2 . \".\" . \\\r\ + \n [ :pick \$Tmp1 [ :len \$Tmp2 ] ([ :len \$Tmp1 ] - [ :len \$Tmp\ + 2 ] + 1) ] . \\\r\ + \n \$Prefix . \$Bin);\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set CleanFilePath do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CharacterReplace;\r\ + \n :while (\$Path ~ \"//\") do={ :set \$Path [ \$CharacterReplace \$Path \ + \"//\" \"/\" ]; }\r\ + \n :if ([ :pick \$Path 0 ] = \"/\") do={ :set Path [ :pick \$Path 1 [ :le\ + n \$Path ] ]; }\r\ + \n :if ([ :pick \$Path ([ :len \$Path ] - 1) ] = \"/\") do={ :set Path [ \ + :pick \$Path 0 ([ :len \$Path ] - 1) ]; }\r\ + \n :return \$Path;\r\ + \n}\r\ + \n\r\ + \n:set CleanName do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Return \"\";\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :typeof [ find \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqr\ + stuvwxyz0123456789\" \$Char ] ] = \"nil\") do={\r\ + \n :do {:if ([ :len \$Return ] = 0) do={:error true};\r\ + \n :if ([ :pick \$Return ([ :len \$Return ] - 1) ] = \"-\") do={:er\ + ror true}; :set Char \"-\"} on-error={:set Char \"\"}; \r\ + \n };\r\ + \n :set Return (\$Return . \$Char)};\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set RandomDelay do={\r\ + \n :local Time [ :tonum \$1 ];\r\ + \n :local Unit [ :tostr \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global GetRandomNumber;\r\ + \n :global MAX;\r\ + \n :if (\$Time = 0) do={:return false}\r\ + \n :delay ([ \$MAX 10 [ \$GetRandomNumber ([ :tonsec [ :totime (\$Time . \ + [ \$EitherOr \$Unit \"s\" ]) ] ] / 1000000) ] ] . \"ms\");\r\ + \n}\r\ + \n\r\ + \n:set EscapeForRegEx do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"^.[]\\\$()|*+\?{}\\\\\");\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :find \$Chars \$Char ]) do={:set Char (\"\\\\\" . \$Char)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ExitError do={\r\ + \n :local ExitOK [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Error [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :if (\$ExitOK = \"false\") do={\r\ + \n :log error (\$Name [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\\\$\") \ + \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with er\ + ror\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \ + \$Error) \".\" ]);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set ExitOnError do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :local Error [ :tostr \$2 ];\r\ + \n :global IfThenElse;\r\ + \n :log error (\$Name . \" \" . [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\ + \\\$\") \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with erro\ + r\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \$E\ + rror) \".\" ]);\r\ + \n}\r\ + \n\r\ + \n:set MiniDateTimeStamp do={\r\ + \n :local mikro [ :tobool \$1 ];\r\ + \n /system/clock;\r\ + \n :local vdate [get date];\r\ + \n :local vtime [get time];\r\ + \n :local vdoff [:toarray \"0,4,5,7,8,10\"];\r\ + \n :local MM [:pick \$vdate (\$vdoff->2) (\$vdoff->3)];\r\ + \n :local M [:tonum \$MM];\r\ + \n :if (\$vdate ~ \".../../....\") do={\r\ + \n :set vdoff [:toarray \"7,11,1,3,4,6\"];\r\ + \n :set M ([:find \"xxanebarprayunulugepctovecANEBARPRAYUNULUGE\ + PCTOVEC\" [:pick \$vdate (\$vdoff->2) (\$vdoff->3)] -1] / 2);\r\ + \n :if (\$M>12) do={:set M (\$M - 12)}\r\ + \n :set MM [:pick (100 + \$M) 1 3];\r\ + \n }\r\ + \n :local yyyy [:pick \$vdate (\$vdoff->0) (\$vdoff->1)];\r\ + \n :local dd [:pick \$vdate (\$vdoff->4) (\$vdoff->5)];\r\ + \n :local HH [:pick \$vtime 0 2];\r\ + \n :local mm [:pick \$vtime 3 5];\r\ + \n :local ss [:pick \$vtime 6 8];\r\ + \n :local Return;\r\ + \n :if (\$mikro = true) do={\r\ + \n :set Return ([:pick \$yyyy 2 4] . [:pick \$dd 0 1] . [:pick \$HH 0\ + \_1] . [:pick \$mm 3 4] . [:pick \$ss 6 7]);\r\ + \n } else={\r\ + \n :set Return ([\$yyyy] . [\$MM] . [\$dd] . [\$HH] . [\$mm] . [\$ss]);\ + \r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set WaitForFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local WaitTime [ :totime \$2 ];\r\ + \n :global CleanFilePath;\r\ + \n :global EitherOr;\r\ + \n :global MAX;\r\ + \n :set FileName [ \$CleanFilePath \$FileName ];\r\ + \n :local Delay ([ \$MAX [ \$EitherOr \$WaitTime 2s ] 100ms ] / 9);\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } delay=\$Delay max=10;\r\ + \n } on-error={ }\r\ + \n :while ([ :len [ /file/find where name=\$FileName ] ] > 0) do={\r\ + \n :do {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } on-error={ }\r\ + \n :delay \$Delay;\r\ + \n :set Delay (\$Delay * 3 / 2);\r\ + \n }\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set FileGet do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global WaitForFile;\r\ + \n :if ([ \$WaitForFile \$FileName 0s ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n :local FileVal false;\r\ + \n :do {\r\ + \n :set FileVal [ /file/get \$FileName ];\r\ + \n } on-error={ }\r\ + \n :return \$FileVal;\r\ + \n}\r\ + \n\r\ + \n:set RmDir do={\r\ + \n :local DirName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :log debug (\$0 . \" Removing directory: \". \$DirName);\r\ + \n :local DirVal [ \$FileGet \$DirName ];\r\ + \n :if (\$DirVal = false) do={\r\ + \n :log debug (\$0 . \" ... which does not exist.\");\r\ + \n :return true;\r\ + \n };\r\ + \n :if (\$DirVal->\"type\" != \"directory\") do={\r\ + \n :log error (\$0 . \" Directory '\" . \$DirName . \"' is not a direct\ + ory.\");\r\ + \n :return false;\r\ + \n };\r\ + \n :onerror Err {\r\ + \n /file/remove \$DirName;\r\ + \n } do={\r\ + \n :log error (\$0 . \" Removing directory '\" . \$DirName . \"' failed\ + : \" . \$Err);\r\ + \n :return false;\r\ + \n };\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set RmFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :log debug (\$0 . \" Removing file: \". \$FileName);\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={\r\ + \n :log debug (\$0 . \" ... which does not exist.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :if (\$FileVal->\"type\" = \"directory\" || \$FileVal->\"type\" = \"di\ + sk\") do={\r\ + \n :log error (\$0 . \" File '\" . \$FileName . \"' is not a file.\");\ + \r\ + \n :return false;\r\ + \n }\r\ + \n :onerror Err {\r\ + \n /file/remove \$FileName;\r\ + \n } do={\r\ + \n :log error (\$0 . \" Removing file '\" . \$FileName . \"' failed: \"\ + \_. \$Err); :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MkDir do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CleanFilePath;\r\ + \n :global FileGet;\r\ + \n :global RmDir;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :local MkTmpfs do={\r\ + \n :global WaitForFile;\r\ + \n :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\r\ + \n :if ([ :len \$TmpFs ] = 1) do={\r\ + \n :if ([ /disk/get \$TmpFs disabled ] = true) do={\r\ + \n :log info (\$0 . \" The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :log info (\$0 . \" Creating disk of type tmpfs.\");\r\ + \n \$RmDir \"tmpfs\";\r\ + \n :onerror Err {\r\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource\ + /get total-memory ] / 3);\r\ + \n \$WaitForFile \"tmpfs\";\r\ + \n } do={\r\ + \n :log warning (\$0 . \" Creating disk of type tmpfs failed: \" . \$\ + Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :set Path [ \$CleanFilePath \$Path ];\r\ + \n :if (\$Path = \"\") do={\r\ + \n :return true;\r\ + \n }\r\ + \n :log debug (\$0 . \" Making directory: \" . \$Path);\r\ + \n :local PathVal [ \$FileGet \$Path ];\r\ + \n :if (\$PathVal->\"type\" = \"directory\") do={\r\ + \n :log debug (\$0 . \" ... which already exists.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :pick \$Path 0 5 ] = \"tmpfs\") do={\r\ + \n :if ([ \$MkTmpfs ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n /file/add type=\"directory\" name=\$Path;\r\ + \n \$WaitForFile \$Path;\r\ + \n } do={\r\ + \n :log warning (\$0 . \" Making directory '\" . \$Path . \"' failed: \ + \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MAX do={:if (\$1 > \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n:set MIN do={:if (\$1 < \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set CharacterReplace do={\r\ + \n :local String [ :tostr \$1 ];\r\ + \n :local ReplaceFrom [ :tostr \$2 ];\r\ + \n :local ReplaceWith [ :tostr \$3 ];\r\ + \n :local Return \"\";\r\ + \n :if (\$ReplaceFrom = \"\") do={:return \$String}\r\ + \n :while ([ :typeof [ :find \$String \$ReplaceFrom ] ] != \"nil\") do={\ + \r\ + \n :local Pos [ :find \$String \$ReplaceFrom ];\r\ + \n :set Return (\$Return . [ :pick \$String 0 \$Pos ] . \$ReplaceWith);\ + \r\ + \n :set String [ :pick \$String (\$Pos + [ :len \$ReplaceFrom ]) [ :len\ + \_\$String ] ];\r\ + \n }\r\ + \n :return (\$Return . \$String);\r\ + \n}\r\ + \n\r\ + \n:set IfThenElse do={\r\ + \n :if ([ :tostr \$1 ] = \"true\" || [ :tobool \$1 ] = true) do={:return \ + \$2};\r\ + \n :return \$3;\r\ + \n}\r\ + \n\r\ + \n:set EitherOr do={\r\ + \n :global IfThenElse;\r\ + \n :if ([ :typeof \$1 ] = \"num\") do={:return [ \$IfThenElse (\$1 != 0) \ + \$1 \$2 ]}\r\ + \n :if ([ :typeof \$1 ] = \"time\") do={:return [ \$IfThenElse (\$1 > 0s)\ + \_\$1 \$2 ]}\r\ + \n# this works for boolean values, literal ones with parentheses\r\ + \n :return [ \$IfThenElse ([ :len [ :tostr \$1 ] ] > 0) \$1 \$2 ];\r\ + \n}\r\ + \n\r\ + \n:set ParseKeyValueStore do={\r\ + \n :local Source \$1;\r\ + \n :if ([ :pick \$Source 0 1 ] = \"{\") do={\r\ + \n :do {\r\ + \n :return [ :deserialize from=json \$Source ];\r\ + \n } on-error={ }\r\ + \n } \r\ + \n :if ([ :typeof \$Source ] != \"array\") do={:set Source [ :tostr \$1 ]\ + }\r\ + \n :local Result ({});\r\ + \n :foreach KeyValue in=[ :toarray \$Source ] do={\r\ + \n :if ([ :find \$KeyValue \"=\" ]) do={\r\ + \n :local Key [ :pick \$KeyValue 0 [ :find \$KeyValue \"=\" ] ];\r\ + \n :local Value [ :pick \$KeyValue ([ :find \$KeyValue \"=\" ] + 1) [\ + \_:len \$KeyValue ] ];\r\ + \n :if (\$Value=\"true\") do={:set Value true}\r\ + \n :if (\$Value=\"false\") do={:set Value false}\r\ + \n :set (\$Result->\$Key) \$Value;\r\ + \n } else={:set (\$Result->\$KeyValue) true}\r\ + \n }\r\ + \n :return \$Result;\r\ + \n}\r\ + \n:set RequiredRouterOS do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :local Required [ :tostr \$2 ];\r\ + \n :local Warn [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :global VersionToNum;\r\ + \n :if (!(\$Required ~ \"^\\\\d+\\\\.\\\\d+((alpha|beta|rc|\\\\.)\\\\d+|)\ + \\\$\")) do={\r\ + \n :log error (\$0 . \" No valid RouterOS version: \" . \$Required);\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ \$VersionToNum \$Required ] > [ \$VersionToNum [ /system/packag\ + e/update/get installed-version ] ]) do={\r\ + \n :if (\$Warn = \"true\") do={\r\ + \n :log warning (\$0 . \" This \" . [ \$IfThenElse ([ :pick \$Caller \ + 0 ] = (\"\\\$\")) \"function\" \"script\" ] . \\\r\ + \n \" '\" . \$Caller . \"' (at least specific functionality) requir\ + es RouterOS \" . \$Required . \". Please update!\");\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set ValidateSyntax do={\r\ + \n :local Code [ :tostr \$1 ];\r\ + \n :global LogPrint;\r\ + \n :onerror Err {\r\ + \n [ :parse (\":local Validate do={\\n\" . \$Code . \"\\n}\") ];\r\ + \n } do={\r\ + \n \$LogPrint debug \$0 (\"Valdation failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set VersionToNum do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Multi 0x1000000;\r\ + \n :local Return 0;\r\ + \n :global CharacterReplace;\r\ + \n :set Input [ \$CharacterReplace \$Input \".\" \",\" ];\r\ + \n :foreach I in={ \"zero\"; \"alpha\"; \"beta\"; \"rc\" } do={\r\ + \n :set Input [ \$CharacterReplace \$Input \$I (\",\" . \$I . \",\") ];\ + \r\ + \n }\r\ + \n :foreach Value in=([ :toarray \$Input ], 0) do={\r\ + \n :local Num [ :tonum \$Value ];\r\ + \n :if (\$Multi = 0x100) do={\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={\r\ + \n :set Return (\$Return + 0xff00);\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n } else={\r\ + \n :if (\$Value = \"zero\") do={ }\r\ + \n :if (\$Value = \"alpha\") do={ :set Return (\$Return + 0x3f00); \ + }\r\ + \n :if (\$Value = \"beta\") do={ :set Return (\$Return + 0x5f00); }\ + \r\ + \n :if (\$Value = \"rc\") do={ :set Return (\$Return + 0x7f00); }\r\ + \n }\r\ + \n }\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={ :set Return (\$Return + (\$Va\ + lue * \$Multi)); }\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ScriptLock do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local WaitMax [ :totime \$2 ];\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global ScriptLockOrder;\r\ + \n :if ([ :typeof \$ScriptLockOrder ] = \"nothing\") do={\r\ + \n :set ScriptLockOrder ({});\r\ + \n }\r\ + \n :if ([ :typeof (\$ScriptLockOrder->\$Script) ] = \"nothing\") do={\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :local JobCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :return [ :len [ /system/script/job/find where script=\$Script ] ];\ + \r\ + \n }\r\ + \n :local TicketCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :local Count 0;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:set Count (\$Count \ + + 1)}\r\ + \n }\r\ + \n :return \$Count;\r\ + \n }\r\ + \n :local IsFirstTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Check [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if (\$Ticket = \$Check) do={:return true}\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\" && \$Ticket != \$Check) d\ + o={:return false}\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :local AddTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Add [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :while (true) do={\r\ + \n :local Pos [ :len (\$ScriptLockOrder->\$Script) ];\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Pos) \$Add;\r\ + \n :delay 10ms;\r\ + \n :if ((\$ScriptLockOrder->\$Script->\$Pos) = \$Add) do={:return tru\ + e}\r\ + \n }\r\ + \n }\r\ + \n :local RemoveTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Remove [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Id,Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :while ((\$ScriptLockOrder->\$Script->\$Id) = \$Remove) do={\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Id);\r\ + \n :delay 10ms;\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n :local CleanupTickets do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:return false}\r\ + \n }\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :if ([ :typeof \$WaitMax ] = \"nil\" ) do={:set WaitMax 0s}\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\r\ + \n :log error (\$0 . \" A script named '\" . \$Script . \"' does not ex\ + ist!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$JobCount \$Script ] = 0) do={\r\ + \n \$LogPrint error \$0 (\"No script '\" . \$Script . \"' is running!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$TicketCount \$Script ] >= [ \$JobCount \$Script ]) do={\r\ + \n :log error (\$0 . \" More tickets than running scripts '\" . \$Scrip\ + t . \"', resetting!\");\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n /system/script/job/remove [ find where script=\$Script ];\r\ + \n }\r\ + \n :local MyTicket [ \$GetRandom20CharAlNum 6 ];\r\ + \n \$AddTicket \$Script \$MyTicket;\r\ + \n :local WaitInterval (\$WaitMax / 20);\r\ + \n :local WaitTime \$WaitMax;\r\ + \n :while (\$WaitTime > 0 && \\\r\ + \n ([ \$IsFirstTicket \$Script \$MyTicket ] = false || \\\r\ + \n [ \$TicketCount \$Script ] < [ \$JobCount \$Script ])) do={\r\ + \n :set WaitTime (\$WaitTime - \$WaitInterval);\r\ + \n :delay \$WaitInterval;\r\ + \n }\r\ + \n :if ([ \$IsFirstTicket \$Script \$MyTicket ] = true && \\\r\ + \n [ \$TicketCount \$Script ] = [ \$JobCount \$Script ]) do={\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$CleanupTickets \$Script;\r\ + \n :return true;\r\ + \n }\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$LogPrint debug \$0 (\"Script '\" . \$Script . \"' started more than \ + once\" . \\\r\ + \n [ \$IfThenElse (\$WaitTime < \$WaitMax) \" and timed out waiting for\ + \_lock\" \"\" ] . \"...\");\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set SendNotification do={ :onerror Err {\r\ + \n :global SendNotification2;\r\ + \n \$SendNotification2 ({ origin=\$0; subject=\$1; message=\$2; link=\$3;\ + \_silent=\$4 });\r\ + \n} do={:global ExitOnError; \$ExitOnError \$0 \$Err}\r\ + \n}\r\ + \n\r\ + \n:set SendNotification2 do={\r\ + \n :local Notification \$1;\r\ + \n :global NotificationFunctions;\r\ + \n :foreach FunctionName,Discard in=\$NotificationFunctions do={\r\ + \n (\$NotificationFunctions->\$FunctionName) (\"\\\$NotificationFunctio\ + ns->\\\"\" . \$FunctionName . \"\\\"\") \$Notification;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set SymbolByUnicodeName do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :global EitherOr;\r\ + \n :global SymbolsExtra;\r\ + \n :local Symbols ({\r\ + \n \"abacus\"=\"\\F0\\9F\\A7\\AE\";\r\ + \n \"alarm-clock\"=\"\\E2\\8F\\B0\";\r\ + \n \"arrow-down\"=\"\\E2\\AC\\87\";\r\ + \n \"arrow-up\"=\"\\E2\\AC\\86\";\r\ + \n \"calendar\"=\"\\F0\\9F\\93\\85\";\r\ + \n \"card-file-box\"=\"\\F0\\9F\\97\\83\";\r\ + \n \"chart-decreasing\"=\"\\F0\\9F\\93\\89\";\r\ + \n \"chart-increasing\"=\"\\F0\\9F\\93\\88\";\r\ + \n \"cloud\"=\"\\E2\\98\\81\";\r\ + \n \"cross-mark\"=\"\\E2\\9D\\8C\";\r\ + \n \"earth\"=\"\\F0\\9F\\8C\\8D\";\r\ + \n \"fire\"=\"\\F0\\9F\\94\\A5\";\r\ + \n \"floppy-disk\"=\"\\F0\\9F\\92\\BE\";\r\ + \n \"gear\"=\"\\E2\\9A\\99\";\r\ + \n \"heart\"=\"\\E2\\99\\A5\";\r\ + \n \"high-voltage-sign\"=\"\\E2\\9A\\A1\";\r\ + \n \"incoming-envelope\"=\"\\F0\\9F\\93\\A8\";\r\ + \n \"information\"=\"\\E2\\84\\B9\";\r\ + \n \"large-orange-circle\"=\"\\F0\\9F\\9F\\A0\";\r\ + \n \"large-red-circle\"=\"\\F0\\9F\\94\\B4\";\r\ + \n \"link\"=\"\\F0\\9F\\94\\97\";\r\ + \n \"lock-with-ink-pen\"=\"\\F0\\9F\\94\\8F\";\r\ + \n \"memo\"=\"\\F0\\9F\\93\\9D\";\r\ + \n \"mobile-phone\"=\"\\F0\\9F\\93\\B1\";\r\ + \n \"pushpin\"=\"\\F0\\9F\\93\\8C\";\r\ + \n \"scissors\"=\"\\E2\\9C\\82\";\r\ + \n \"scroll\"=\"\\F0\\9F\\93\\9C\";\r\ + \n \"smiley-partying-face\"=\"\\F0\\9F\\A5\\B3\";\r\ + \n \"smiley-smiling-face\"=\"\\E2\\98\\BA\";\r\ + \n \"smiley-winking-face-with-tongue\"=\"\\F0\\9F\\98\\9C\";\r\ + \n \"sparkles\"=\"\\E2\\9C\\A8\";\r\ + \n \"speech-balloon\"=\"\\F0\\9F\\92\\AC\";\r\ + \n \"star\"=\"\\E2\\AD\\90\";\r\ + \n \"warning-sign\"=\"\\E2\\9A\\A0\";\r\ + \n \"white-heavy-check-mark\"=\"\\E2\\9C\\85\"\r\ + \n }, \$SymbolsExtra);\r\ + \n :local Magic [ :pick [ /system/clock/get date ] 4 10 ];\r\ + \n :local Special {\r\ + \n \"information-04-01\"=\"\\F0\\9F\\9A\\BB\";\r\ + \n \"large-orange-circle-04-01\"=\"\\F0\\9F\\8D\\8A\";\r\ + \n \"large-orange-circle-10-31\"=\"\\F0\\9F\\8E\\83\";\r\ + \n \"large-red-circle-04-01\"=\"\\F0\\9F\\8D\\92\" };\r\ + \n :if ([ :len (\$Symbols->\$Name) ] = 0) do={\r\ + \n :log warning (\$0 . \"No symbol available for name '\" . \$Name . \"\ + '!\");\r\ + \n :return \"\";\r\ + \n }\r\ + \n :return ([ \$EitherOr (\$Special->(\$Name . \$Magic)) (\$Symbols->\$Na\ + me) ] . \"\\EF\\B8\\8F\");\r\ + \n}\r\ + \n\r\ + \n:set SymbolForNotification do={\r\ + \n :global NotificationsWithSymbols;\r\ + \n :global SymbolByUnicodeName;\r\ + \n :global IfThenElse;\r\ + \n :if (\$NotificationsWithSymbols != true) do={:return [ \$IfThenElse ([\ + \_:len \$2 ] > 0) ([ :tostr \$2 ] . \" \") \"\" ]}\r\ + \n :local Return \"\";\r\ + \n :foreach Symbol in=[ :toarray \$1 ] do={:set Return (\$Return . [ \$Sy\ + mbolByUnicodeName \$Symbol ])}\r\ + \n :return (\$Return . \" \");\r\ + \n}\r\ + \n\r\ + \n:set Unix2Dos do={:return [ :tocrlf [ :tostr \$1 ] ]}\r\ + \n:set UrlEncode do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"\\n\\r !\\\"#\\\$%&'()*+,:;<=>\?@[\\\\]^`{|}~\");\r\ + \n :local Subs { \"%0A\"; \"%0D\"; \"%20\"; \"%21\"; \"%22\"; \"%23\"; \"\ + %24\"; \"%25\"; \"%26\"; \"%27\";\r\ + \n \"%28\"; \"%29\"; \"%2A\"; \"%2B\"; \"%2C\"; \"%3A\"; \"%3B\"; \ + \"%3C\"; \"%3D\"; \"%3E\"; \"%3F\";\r\ + \n \"%40\"; \"%5B\"; \"%5C\"; \"%5D\"; \"%5E\"; \"%60\"; \"%7B\"; \ + \"%7C\"; \"%7D\"; \"%7E\" };\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :local Replace [ :find \$Chars \$Char ];\r\ + \n :if ([ :typeof \$Replace ] = \"num\") do={:set Char (\$Subs->\$Repla\ + ce)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set IsDNSResolving do={\r\ + \n :do {:resolve \"api.telegram.org\"} on-error={:return false}\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set IsFullyConnected do={\r\ + \n :global IsDNSResolving;\r\ + \n :global IsTimeSync;\r\ + \n :if ([ \$IsDNSResolving ] = false) do={:return false};\r\ + \n :if ([ \$IsTimeSync ] = false) do={:return false};\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set IsTimeSync do={\r\ + \n :global IsTimeSyncCached;\r\ + \n :global IsTimeSyncResetNtp;\r\ + \n :if (\$IsTimeSyncCached = true) do={:return true}\r\ + \n :if ([ /system/ntp/client/get enabled ] = true) do={\r\ + \n :if ([ /system/ntp/client/get status ] = \"synchronized\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :local Uptime [ /system/resource/get uptime ];\r\ + \n :if ([ :typeof \$IsTimeSyncResetNtp ] = \"nothing\") do={\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n }\r\ + \n :if (\$Uptime - \$IsTimeSyncResetNtp < 3m) do={:return false}\r\ + \n :log warning \"\$0 The ntp client is configured, but did not sync.\"\ + ;\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n /system/ntp/client/set enabled=no;\r\ + \n :delay 20ms;\r\ + \n /system/ntp/client/set enabled=yes;\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ /system/license/get ]->\"level\" = \"free\" || \\\r\ + \n [ /system/resource/get ]->\"board-name\" = \"x86\") do={\r\ + \n :log debug \"\$0 No ntp client configured, relying on RTC for CHR fr\ + ee license and x86.\";\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ /ip/cloud/get update-time ] = true) do={\r\ + \n :if ([ :typeof [ /ip/cloud/get public-address ] ] = \"ip\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :log debug \"\$0 No time source configured! Returning gracefully...\";\ + \r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set FetchHugeFiles do={\r\ + \n :local ScriptName [ :tostr \$1 ];\r\ + \n :local Url [ :tostr \$2 ];\r\ + \n :local CheckCert [ :tostr \$3 ];\r\ + \n\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global MkDir;\r\ + \n :global RmDir;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :set CheckCert [ \$IfThenElse (\$CheckCert = \"false\") \"no\" \"yes-w\ + ithout-crl\" ];\r\ + \n\r\ + \n :local DirName (\"tmpfs/\" . [ \$CleanName \$ScriptName ]);\r\ + \n :if ([ \$MkDir \$DirName ] = false) do={\r\ + \n \$LogPrint error \$0 (\"Failed creating directory!\");\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :local FileName (\$DirName . \"/\" . [ \$CleanName \$0 ] . \"-\" . [ \ + \$GetRandom20CharAlNum ]);\r\ + \n :onerror Err {\r\ + \n /tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName \ + \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] }) as-va\ + lue;\r\ + \n } do={\r\ + \n :if ([ \$WaitForFile \$FileName 500ms ] = true) do={\r\ + \n \$RmFile \$FileName;\r\ + \n }\r\ + \n \$LogPrint debug \$0 (\"Failed downloading from \" . \$Url . \" - \"\ + \_. \$Err);\r\ + \n \$RmDir \$DirName;\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$WaitForFile \$FileName 5s ] = false) do={\r\ + \n \$LogPrint debug \$0 (\"The file downloaded from \" . \$Url . \" did\ + \_not show up.\");\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :local FileSize [ /file/get \$FileName size ];\r\ + \n :local Return \"\";\r\ + \n :local VarSize 0;\r\ + \n :while (\$VarSize != \$FileSize) do={\r\ + \n :set Return (\$Return . ([ /file/read offset=\$VarSize chunk-size=32\ + 768 file=\$FileName as-value ]->\"data\"));\r\ + \n :set FileSize [ /file/get \$FileName size ];\r\ + \n :set VarSize [ :len \$Return ];\r\ + \n :if (\$VarSize > \$FileSize) do={\r\ + \n :delay 100ms;\r\ + \n }\r\ + \n }\r\ + \n \$RmDir \$DirName;\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set FetchUserAgentStr do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global CommitBrief;\r\ + \n :global IfThenElse;\r\ + \n :local Resource [ /system/resource/get ];\r\ + \n :return (\"User-Agent: Mikrotik/\" . \$Resource->\"version\" . \" \" .\ + \_\$Resource->\"architecture-name\" . \\\r\ + \n \" \" . \$Caller . \"/Fetch (\" . \$GlobalScriptsUrl . \"; \" . [ \$\ + CommitBrief ] . \")\");\r\ + \n}\r\ + \n\r\ + \n:set ScriptInstallUpdate do={ :onerror Err {\r\ + \n :local Scripts [ :toarray \$1 ];\r\ + \n :local NewComment [ :tostr \$2 ];\r\ + \n :global InitSetup;\r\ + \n\r\ + \n :global CommitId;\r\ + \n :global ScriptUpdatesCRLF;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global CertificateAvailable;\r\ + \n :global CheckSumsVerify;\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SumsDirAndFileName;\r\ + \n :global GlobalScriptsUrlSuffix;\r\ + \n :global EitherOr;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global Grep;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global ParseKeyValueStore;\r\ + \n :global RequiredRouterOS;\r\ + \n :global SendNotification2;\r\ + \n :global SymbolForNotification;\r\ + \n :global ValidateSyntax;\r\ + \n :global CommentsInScripts;\r\ + \n\r\ + \n :if ([ \$CertificateAvailable \"Root YE\" \"fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, trying wit\ + hout.\");\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=\$Scripts do={\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\ + \r\ + \n \$LogPrint info \$0 (\"Adding new script: \" . \$Script);\r\ + \n /system/script/add name=\$Script owner=\$Script source=\"#!rsc by \ + Vados\\n\" comment=\$NewComment;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :local CommitIdBefore \$CommitId;\r\ + \n :local GlobalConfVersionBefore \$GlobalConfVersion;\r\ + \n :local ReloadGlobal false;\r\ + \n :local DeviceMode [ /system/device-mode/get ];\r\ + \n\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSums ({});\r\ + \n :do {\r\ + \n :local Url (\$GlobalScriptsUrl . \$SumsDirAndFileName . \$GlobalScr\ + iptsUrlSuffix);\r\ + \n \$LogPrint debug \$0 (\"Fetching checksums from url: \" . \$Url);\ + \r\ + \n :set CheckSums [ :deserialize from=json ([ /tool/fetch check-certi\ + ficate=yes-without-crl \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url output\ + =user as-value ]->\"data\") ];\r\ + \n } on-error={ \$LogPrint warning \$0 (\"Err = \" . \$Err); }\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vado\ + s\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :local ScriptInfo [ \$ParseKeyValueStore (\$ScriptVal->\"comment\") \ + ];\r\ + \n :local SourceNew;\r\ + \n\r\ + \n :foreach Scheduler in=[ /system/scheduler/find where on-event~(\"\\\ + \\b\" . \$ScriptVal->\"name\" . \"\\\\b\") ] do={\r\ + \n :local SchedulerVal [ /system/scheduler/get \$Scheduler ];\r\ + \n :if (\$ScriptVal->\"policy\" != \$SchedulerVal->\"policy\") do={\r\ + \n \$LogPrint warning \$0 (\"Policies differ for script '\" . \$Scr\ + iptVal->\"name\" . \"' and its scheduler '\" . \$SchedulerVal->\"name\" . \ + \"'!\");\r\ + \n }\r\ + \n }\r\ + \n :do {\r\ + \n :if (\$ScriptInfo->\"ignore\" = true) do={\r\ + \n \$LogPrint debug \$0 (\"Ignoring script '\" . \$ScriptVal->\"nam\ + e\" . \"', as requested.\");\r\ + \n :error true;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSum (\$CheckSums->(\$ScriptVal->\"name\"));\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Scri\ + ptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :convert transform=md5 to=hex [ :tolf (\$ScriptVal->\"sou\ + rce\") ] ] = \$CheckSum) do={\r\ + \n \$LogPrint debug \$0 (\"Checksum for script '\" . \$ScriptVal-\ + >\"name\" . \"' matches, ignoring.\");\r\ + \n :error true;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len (\$ScriptInfo->\"certificate\") ] > 0) do={\r\ + \n :if ([ \$CertificateAvailable (\$ScriptInfo->\"certificate\") \"\ + fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, tryi\ + ng without.\");\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n :local BaseUrl [ \$EitherOr (\$ScriptInfo->\"base-url\") \$Globa\ + lScriptsUrl ];\r\ + \n :local UrlSuffix [ \$EitherOr (\$ScriptInfo->\"url-suffix\") \$G\ + lobalScriptsUrlSuffix ];\r\ + \n :local Url (\$BaseUrl . \$ScriptVal->\"name\" . \".rsc\" . \$Url\ + Suffix);\r\ + \n \$LogPrint warning \$0 (\"Fetching script '\" . (\$ScriptVal->\"\ + name\") . \"' from url: \" . \$Url);\r\ + \n :local Result [ /tool/fetch check-certificate=yes-without-crl \\\ + \r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url outp\ + ut=user as-value ];\r\ + \n :if (\$Result->\"status\" = \"finished\") do={\r\ + \n :set SourceNew [ :tolf (\$Result->\"data\") ];\r\ + \n } \r\ + \n } do={\r\ + \n \$LogPrint warning \$0 (\"Failed fetching script '\" . \$ScriptV\ + al->\"name\" . \"': \" . \$Err);\r\ + \n :if (\$Err != \"Fetch failed with status 404\") do={\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$ScriptVal->\"source\" = \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Removing dummy. Typo on installation\ + \?\");\r\ + \n /system/script/remove \$Script;\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Sc\ + riptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :len \$CheckSum ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"Added the script manually\? Skip u\ + pdates with 'ignore=true' in comment.\");\r\ + \n }\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$SourceNew ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"No update for script '\" . (\$ScriptVal-\ + >\"name\") . \"'.\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :local SourceCRLF [ :tocrlf \$SourceNew ];\r\ + \n :if (\$InitSetup != true && ((\$ScriptVal->\"name\") != \"AM-Globa\ + lConfig\" || (\$ScriptVal->\"name\") != \"AM-GlobalFunc\")) do={\r\ + \n :if (\$SourceNew = (\$ScriptVal->\"source\") || \$SourceCRLF = (\ + \$ScriptVal->\"source\")) do={\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\") \ + . \"' source did not change. End of lines set to CRLF.\");\r\ + \n if (\$ScriptUpdatesCRLF = false) do={\r\ + \n :put [ :tolf \$SourceNew ];\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\"\ + ) . \"' source update end of lines to LF.\");\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([ :pick \$SourceNew 0 14 ] != \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Looks like new script '\" . \$ScriptVa\ + l->\"name\" . \"' is not valid (missing shebang = '\$shebang') Ignoring!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if (\$CommentsInScripts = true) do={\r\ + \n :local CommentLine [ \$Grep \$SourceNew (\"\\23 Script comment:\ + \_\") ];\r\ + \n :if ([ :len \$CommentLine ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"The search in new script '\" . (\$Scr\ + iptVal->\"name\") . \"' for comment in script body, is not found result Ig\ + noring!\");\r\ + \n :error false;\r\ + \n } else={\r\ + \n :if ([ :len (\$ScriptVal->\"comment\")] = 0 || [ :len (\$Scri\ + ptVal->\"comment\")] != [ :pick \$CommentLine ([ :find \$CommentLine \":\"\ + ] + 2) [ :len \$CommentLine] ]) do={\r\ + \n \$LogPrint debug \$0 (\"Exsiting comment for script '\" . (\ + \$ScriptVal->\"name\") . \"' is '\" . (\$ScriptVal->\"comment\") . \"'.\")\ + ;\r\ + \n :set (\$ScriptVal->\"comment\") [ :pick \$CommentLine ([ :f\ + ind \$CommentLine \":\"] + 2) [ :len \$CommentLine] ];\r\ + \n \$LogPrint debug \$0 (\"New comment (\" . (\$ScriptVal->\"c\ + omment\") . \") for script '\" . (\$ScriptVal->\"name\") . \"' has been ad\ + ded!\");\r\ + \n } else={\r\ + \n \$LogPrint debug \$0 (\"Comment for script '\" . (\$ScriptV\ + al->\"name\") . \"' did not change.\");\r\ + \n :error false;\r\ + \n }\r\ + \n } \r\ + \n }\r\ + \n\r\ + \n :local RequiredROS ([ \$ParseKeyValueStore [ \$Grep \$SourceNew (\ + \"\\23 requires RouterOS, \") ] ]->version);\r\ + \n :if ([ \$RequiredRouterOS \$0 [ \$EitherOr \$RequiredROS \"0.0\" ]\ + \_false ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires RouterOS \" . \\\r\ + \n \$RequiredROS . \", which is not met by your installation. I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :local RequiredDM [ \$ParseKeyValueStore [ \$Grep \$SourceNew (\"\ + \\23 requires device-mode, \") ] ];\r\ + \n :local MissingDM ({});\r\ + \n :foreach Feature,Value in=\$RequiredDM do={\r\ + \n :if ([ :typeof (\$DeviceMode->\$Feature) ] = \"bool\" && (\$Devi\ + ceMode->\$Feature) = false) do={\r\ + \n :set MissingDM (\$MissingDM, \$Feature);\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len \$MissingDM ] > 0) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires disabled \" . \\\r\ + \n \"device-mode features (\" . [ :tostr \$MissingDM ] . \"). I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$ValidateSyntax \$SourceNew ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Syntax validation for script '\" . (\$\ + ScriptVal->\"name\") . \"' failed! Ignoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n \r\ + \n :log info (\"Updating script: \" . (\$ScriptVal->\"name\") . \" Sc\ + ript comment: \" . (\$ScriptVal->\"comment\"));\r\ + \n\r\ + \n /system/script/set owner=(\$ScriptVal->\"name\") comment=(\$Script\ + Val->\"comment\") \\\r\ + \n source=[ \$IfThenElse (\$ScriptUpdatesCRLF = true) \$SourceCRL\ + F \$SourceNew ] \$Script;\r\ + \n :if (\$ScriptVal->\"name\" = \"AM-GlobalConfig\" || \\\r\ + \n \$ScriptVal->\"name\" = \"AM-GlobalFunc\" || \\\r\ + \n \$ScriptVal->\"name\" ~ (\"^(AM-GlobalFunc\\\\.d|mod)/.\")) d\ + o={\r\ + \n :set ReloadGlobal true;\r\ + \n }\r\ + \n } on-error={ }\r\ + \n }\r\ + \n :if (\$ReloadGlobal = true) do={\r\ + \n \$LogPrint info \$0 (\"Reloading global configuration and functions.\ + \");\r\ + \n :onerror Err {\r\ + \n :global InitSetup (a);\r\ + \n /system/script {run AM-GlobalConfig; run AM-GlobalFunc;};\r\ + \n } do={\$LogPrint error \$0 (\"Reloading global configuration and fun\ + ctions failed! \" . \$Err)}\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore > \$GlobalConfVersion) do={\r\ + \n \$LogPrint warning \$0 (\"The configuration version decreased from \ + \" . \\\r\ + \n \$GlobalConfVersionBefore . \" to \" . \$GlobalConfVersion . \\\r\ + \n \". Installed an older version\?\");\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore < \$GlobalConfVersion) do={\r\ + \n :global GlobalConfChanges;\r\ + \n :global GlobalConfMigration;\r\ + \n :local ChangeLogCode;\r\ + \n :if ([ :len \$ChangeLogCode ] > 0) do={\r\ + \n :if ([ \$ValidateSyntax \$ChangeLogCode ] = true) do={\r\ + \n :onerror Err {\r\ + \n [ :parse \$ChangeLogCode ];\r\ + \n } do={\$LogPrint warning \$0 (\"The changelog failed to run: \" \ + . \$Err)}\r\ + \n } else={\$LogPrint warning \$0 (\"The changelog failed syntax vali\ + dation!\")}\r\ + \n }\r\ + \n :if ([ :len \$GlobalConfMigration ] > 0) do={\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Migration (\$GlobalConfMigration->[ :tostr \$I ]);\r\ + \n :do {\r\ + \n :if ([ :typeof \$Migration ] != \"str\") do={\r\ + \n \$LogPrint debug \$0 (\"Migration code for change \" . \$I .\ + \_\" is not available.\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$ValidateSyntax \$Migration ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Migration code for change \" . \$I\ + \_. \" failed syntax validation!\");\r\ + \n :error false}\r\ + \n \$LogPrint info \$0 (\"Applying migration for change \" . \$I \ + . \": \" . \$Migration);\r\ + \n :onerror Err {\r\ + \n [ :parse \$Migration ];\r\ + \n } do={\$LogPrint warning \$0 (\"Migration code for change \" .\ + \_\$I . \" failed to run: \" . \$Err)}\r\ + \n } on-error={ }\r\ + \n }\r\ + \n }\r\ + \n :local NotificationMessage (\"The configuration version on \" . \$Id\ + entity . \" increased \" . \\\r\ + \n \"to \" . \$GlobalConfVersion . \", current configuration may nee\ + d modification. \" . \\\r\ + \n \"Please review and update global-config-overlay, then re-run glo\ + bal-config.\");\r\ + \n \$LogPrint info \$0 (\$NotificationMessage);\r\ + \n :if ([ :len \$GlobalConfChanges ] > 0) do={\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n\\nChanges:\ + \");\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Change (\$GlobalConfChanges->[ :tostr \$I ]);\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n \" . \\\ + \r\ + \n [ \$SymbolForNotification \"pushpin\" \"*\" ] . \$Change);\r\ + \n \$LogPrint info \$0 (\"Change \" . \$I . \": \" . \$Change);\r\ + \n }\r\ + \n } else={\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n\\nNews and\ + \_changes are not available.\");\r\ + \n\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$GlobalConfChanges ] > 0) do={ :set GlobalConfChanges; \ + } else={ :global GlobalConfChanges (a); }\r\ + \n :if ([ :len \$GlobalConfMigration ] > 0) do={ :set GlobalConfMigrati\ + on; } else={ :global GlobalConfMigration (a); }\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n} }\r\ + \n\r\ + \n# load modules\r\ + \n:foreach Script in=[ /system/script/find where name ~ \"^(global-functio\ + ns\\\\.d|mod)/.\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :if ([ \$ValidateSyntax (\$ScriptVal->\"source\") ] = true) do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' f\ + ailed to run: \" . \$Err);\r\ + \n }\r\ + \n } else={\r\ + \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' fai\ + led syntax validation, skipping.\");\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# Add and fix global scheduler\r\ + \n:put \"Add or/and fix Global scheduler...\";\r\ + \n:local OnEvent \"/system/script { run AM-GlobalConfig; run AM-GlobalFunc\ + ; }\";\r\ + \n:local Comment \"Every Day Set Global Environment Variables\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-SetGlobalEnv\" ] ] \ + = 0) do={\r\ + \n /system/scheduler/add name=\"AM-SetGlobalEnv\" comment=\$Comment on-ev\ + ent=\$OnEvent start-time=startup;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" comment ] != \$Comment)\ + \_do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" comment=\$Comment;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" on-event ] != \$OnEvent\ + ) do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" on-event=\$OnEvent;\r\ + \n}\r\ + \n# Add Update Script scheduler\r\ + \n:put \"Add or/and fix Update Script scheduler\";\r\ + \n:set OnEvent \":global ScriptInstallUpdate; \\\$ScriptInstallUpdate;\";\ + \r\ + \n:set Comment \"Every Day Check For Update Scripts\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-ScriptInstallUpdate\ + \" ] ] = 0) do={\r\ + \n/system/scheduler/add name=\"AM-ScriptInstallUpdate\" comment=\$Comment \ + start-time=startup interval=1d on-event=\$OnEvent;\r\ + \n}\r\ + \n\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady;\r\ + \n :retry { :if (\$GlobalConfReady != true) do={ :error (\"Global configs\ + \_not ready.\"); }; } delay=100ms max=5;\r\ + \n\r\ + \n:log warning (\"This script \$ScriptName Loaded \" . \\\r\ + \n [ \$IfThenElse (\$CommitId != \"unknown\") ([ \$CommitBrief ] . \" \ + \") ] . \\\r\ + \n \"on \" . \$devBoardName . \"\\nRouterOS: \" . \$devCurVersion . \"\ + \\nArchitecture: \" . \$devCurArch . \"\\nIdentity: \" . \$Identity);\r\ + \n # signal we are ready\r\ + \n:set GlobalFuncReady true;\r\ + \n:set ExitOK true;\r\ + \n\r\ + \n:log info (\$0 . \"Global configs ready!\");\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n}\r\ + \n" +add comment="awg3vds installer" dont-require-permissions=no name=\ + AM-awg3vdsInstall owner=AM-awg3vdsInstall policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-awg3vdsInstall\r\ + \n# Script comment: awg3vds installer\r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch, scheduler\r\ + \n# ============================================================\r\ + \n# AWG Proxy -- MikroTik RouterOS (protocol: v3)\r\ + \n# 2026-09-12 08:41:48\r\ + \n# ============================================================\r\ + \n# 0. Check prerequisites\r\ + \n:if ([:len [/system/package/find where name=\"container\" disabled=no]] \ + = 0) do={\r\ + \n :put \"Container package is not installed or disabled. Install it and \ + reboot.\"\r\ + \n :error \"Usage: /system/device-mode/update container=yes\"\r\ + \n}\r\ + \n\r\ + \n# Check storage device\r\ + \n{\r\ + \n :local targetDisk \"usb1\"\r\ + \n :local diskFree 0\r\ + \n :do { :set diskFree [/disk/get [find where mount-point=\$targetDisk] f\ + ree] } on-error={}\r\ + \n :if (\$diskFree = 0) do={\r\ + \n :local baseDisk \$targetDisk\r\ + \n :local dashPos [:find \$targetDisk \"-part\"]\r\ + \n :if ([:typeof \$dashPos] != \"nil\") do={ :set baseDisk [:pick \$tar\ + getDisk 0 \$dashPos] }\r\ + \n :if ([:len [/disk/find where slot=\$baseDisk]] > 0) do={\r\ + \n :put (\"Device \$baseDisk found but \$targetDisk is not available.\ + \")\r\ + \n :put \"Format \$baseDisk as ext4\? ALL DATA WILL BE ERASED!\"\r\ + \n :put \"Press 'y' to confirm, any other key to cancel:\"\r\ + \n :local key [/terminal/inkey timeout=30]\r\ + \n :if (\$key = 121 || \$key = 89) do={\r\ + \n :put \"Formatting \$baseDisk as ext4...\"\r\ + \n /disk/format-drive \$baseDisk file-system=ext4 label=\$baseDisk\ + \r\ + \n :delay 3s\r\ + \n :do { :set diskFree [/disk/get [find where mount-point=\$targetD\ + isk] free] } on-error={}\r\ + \n :if (\$diskFree = 0) do={\r\ + \n :put (\"ERROR: \$targetDisk not found after formatting.\")\r\ + \n :put \"Check mount point: /disk/print\"\r\ + \n :error (\"Mount point \$targetDisk not found after formatting\ + \")\r\ + \n }\r\ + \n :put (\"Formatted OK. Free: \" . (\$diskFree / 1048576) . \" MB\ + \")\r\ + \n } else={\r\ + \n :error \"Formatting cancelled\"\r\ + \n }\r\ + \n } else={\r\ + \n :put (\"ERROR: Storage device \$targetDisk not found.\")\r\ + \n :put \"Check available disks: /disk/print\"\r\ + \n :error (\"Storage not found: \" . \$targetDisk)\r\ + \n }\r\ + \n } else={\r\ + \n :put (\"Storage OK: \$targetDisk (\" . (\$diskFree / 1048576) . \" M\ + B free)\")\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# 1. Uninstall and update scripts\r\ + \n/system/script/add name=awg3vds-uninstall comment=awg3vds source={\r\ + \n :put \"Uninstallimg AmneziaWG...\"\r\ + \n :log info \"Uninstallimg AmneziaWG...\"\r\ + \n :local prevDNS \"\"\r\ + \n :do { :set prevDNS [/container/envs/get [find where list=\"awg3vds-env\ + \" key=\"AWG_PREV_DNS\"] value] } on-error={}\r\ + \n :local prevTmpdir \"\"\r\ + \n :do { :set prevTmpdir [/container/envs/get [find where list=\"awg3vds-\ + env\" key=\"AWG_PREV_TMPDIR\"] value] } on-error={}\r\ + \n /ip/route/remove [find where comment=awg3vds-tunnel]\r\ + \n /ip/route/remove [find where comment=awg3vds-dns]\r\ + \n :do { /system/scheduler/remove [find where comment~\"awg3vds\"] } on-e\ + rror={}\r\ + \n :do { /system/script/remove [find where comment~\"awg3vds\" and name!=\ + \"awg3vds-uninstall\"] } on-error={}\r\ + \n /container/stop [find where interface=veth-awg3vds]\r\ + \n :delay 7s\r\ + \n /container/remove [find where interface=veth-awg3vds]\r\ + \n /container/envs/remove [find where list=\"awg3vds-env\"]\r\ + \n :if (\$prevDNS != \"\") do={\r\ + \n :do { /ip/dns/set servers=\"\$prevDNS\" } on-error={}\r\ + \n :put (\"DNS restored to: \$prevDNS\")\r\ + \n }\r\ + \n /container/config set tmpdir=\$prevTmpdir\r\ + \n :put (\"Container tmpdir restored to: \$prevTmpdir\")\r\ + \n /ip/firewall/nat/remove [find where out-interface=\"wg-awg3vds\"]\r\ + \n /ip/firewall/nat/remove [find where src-address=\"172.19.14.100/30\"]\ + \r\ + \n /ip/address/remove [find where address=\"172.19.14.101/30\"]\r\ + \n :do { /ipv6/firewall/nat/remove [find where comment=awg3vds-v6-nat] } \ + on-error={}\r\ + \n :do { /ipv6/firewall/nat/remove [find where comment=awg3vds-dstnat6] }\ + \_on-error={}\r\ + \n :do { /ipv6/firewall/filter/remove [find where comment=awg3vds-v6-out]\ + \_} on-error={}\r\ + \n :do { /ipv6/firewall/filter/remove [find where comment=awg3vds-awg-in6\ + ] } on-error={}\r\ + \n :do { /ipv6/nd/remove [find where interface=veth-awg3vds] } on-error={\ + }\r\ + \n :do { /ipv6/nd/prefix/remove [find where interface=veth-awg3vds] } on-\ + error={}\r\ + \n :do { /ipv6/address/remove [find where comment=awg3vds-v6] } on-error=\ + {}\r\ + \n /interface/veth/remove [find where name=\"veth-awg3vds\"]\r\ + \n /interface/wireguard/peers/remove [find where interface=\"wg-awg3vds\"\ + ]\r\ + \n /ip/address/remove [find where interface=\"wg-awg3vds\"]\r\ + \n /interface/wireguard/remove [find where name=\"wg-awg3vds\"]\r\ + \n :do { /file/remove [find where name~\"awg3vds.+tar\"] } on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/awg3vds\"] } on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/ru_ranges_timeout.rsc\"] } \ + on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/ru_ranges.rsc\"] } on-error\ + ={}\r\ + \n :do { /file/remove [find where name~\"usb1/pull\"] } on-error={}\r\ + \n :put \"Uninstall AmneziaWG Proxy complete!\"\r\ + \n :log info \"Uninstall AmneziaWG Proxy complete!\"\r\ + \n# /system/script/remove [find where name=awg3vds-uninstall]\r\ + \n}\r\ + \n/system/script/add name=awg3vds-update comment=awg3vds source={\r\ + \n :local cids [/container/find where interface=veth-awg3vds and !stopped\ + ]\r\ + \n :if ([:len \$cids] = 0) do={ :set cids [/container/find where interfac\ + e=veth-awg3vds and start-on-boot=yes] }\r\ + \n :if ([:len \$cids] = 0) do={ :set cids [/container/find where interfac\ + e=veth-awg3vds] }\r\ + \n :if ([:len \$cids] = 0) do={\r\ + \n :put \"Container awg3vds not found\"\r\ + \n :log warning \"awg3vds-update: container not found\"\r\ + \n } else={\r\ + \n :local cid [:pick \$cids ([:len \$cids] - 1)]\r\ + \n :local img [/container/get \$cid remote-image]\r\ + \n :local ver [/system/resource/get version]\r\ + \n :local dotPos [:find \$ver \".\"]\r\ + \n :local rest [:pick \$ver (\$dotPos + 1) [:len \$ver]]\r\ + \n :local endPos [:find \$rest \".\"]\r\ + \n :if ([:typeof \$endPos] = \"nil\") do={ :set endPos [:find \$rest \"\ + \_\"] }\r\ + \n :local minor [:tonum [:pick \$rest 0 \$endPos]]\r\ + \n :local wantRunning true\r\ + \n :do { :if ([/container/get \$cid start-on-boot] != true) do={ :set w\ + antRunning false } } on-error={}\r\ + \n :local healthy true\r\ + \n :if ([:len [/container/get \$cid image-id]] = 0) do={ :set healthy f\ + alse }\r\ + \n :if (\$wantRunning) do={\r\ + \n :do { :if ([/container/get \$cid stopped] = true) do={ :set health\ + y false } } on-error={}\r\ + \n }\r\ + \n :if (!\$healthy && \$wantRunning && [:len [/container/get \$cid imag\ + e-id]] > 0) do={\r\ + \n :put \"Container is down - trying to start it\"\r\ + \n :do { /container/start \$cid } on-error={}\r\ + \n :delay 8s\r\ + \n :set healthy true\r\ + \n :do { :if ([/container/get \$cid stopped] = true) do={ :set health\ + y false } } on-error={}\r\ + \n :if (\$healthy) do={\r\ + \n :put \"Container is back up\"\r\ + \n :log info \"awg3vds: container restarted by the update script\"\ + \r\ + \n }\r\ + \n }\r\ + \n :if (\$img = \"\" && \$minor >= 22 && !\$healthy) do={\r\ + \n :local imgTag \"latest\"\r\ + \n :local rbModel \"\"\r\ + \n :do { :set rbModel [[:parse \":return [/system/routerboard/get mod\ + el]\"]] } on-error={}\r\ + \n :local bName [/system/resource/get board-name]\r\ + \n :if (\$rbModel~\"E50UG\" || \$rbModel~\"E60iUGS\" || \$bName~\"E50\ + UG\" || \$bName~\"E60iUGS\" || \$bName~\"^hEX\") do={\r\ + \n :set imgTag \"latest-armv5\"\r\ + \n }\r\ + \n :set img (\"ghcr.io/timbrs/awg-proxy:\" . \$imgTag)\r\ + \n :put (\"Container is down and was installed from a file - pointing\ + \_it at \" . \$img)\r\ + \n :log warning \"awg3vds-update: broken file install, switching to t\ + he registry\"\r\ + \n :do { /container/set \$cid remote-image=\$img } on-error={}\r\ + \n }\r\ + \n :if (\$img = \"\") do={\r\ + \n :put \"Installed from a local image file - /container/repull only \ + updates registry installs.\"\r\ + \n :put \"Reinstall with the configurator on RouterOS 7.22+ to switch\ + \_to one-command updates.\"\r\ + \n } else={\r\ + \n :if (\$minor < 22) do={\r\ + \n :put (\"/container/repull needs RouterOS 7.22+, this router runs\ + \_\" . \$ver)\r\ + \n :if (!\$healthy) do={ :log error (\"awg3vds-update: container is\ + \_down, and \" . \$ver . \" has no /container/repull\") }\r\ + \n } else={\r\ + \n :local rootDir [/container/get \$cid root-dir]\r\ + \n :if ([:pick \$rootDir 0 1] = \"/\") do={ :set rootDir [:pick \$r\ + ootDir 1 [:len \$rootDir]] }\r\ + \n :local rootDirOrig \$rootDir\r\ + \n :local slashPos [:find \$rootDir \"/\"]\r\ + \n :local disk \$rootDir\r\ + \n :if ([:typeof \$slashPos] != \"nil\") do={ :set disk [:pick \$ro\ + otDir 0 \$slashPos] }\r\ + \n :local verPath \"awg-update-check.json\"\r\ + \n :if (\$disk != \"disk1\") do={\r\ + \n :do { /file/make-directory (\$disk . \"/pull\") } on-error={}\ + \r\ + \n /container/config set tmpdir=(\$disk . \"/pull\")\r\ + \n :set verPath (\$disk . \"/pull/awg-update-check.json\")\r\ + \n }\r\ + \n :local newVer \"\"\r\ + \n :do {\r\ + \n /tool/fetch url=\"https://api.github.com/repos/timbrs/amneziaw\ + g-mikrotik-c/releases/latest\" dst-path=\$verPath http-max-redirect-count=\ + 10\r\ + \n :local relJson [/file/get [find where name=\$verPath] contents\ + ]\r\ + \n :local tagPos [:find \$relJson \"\\\"tag_name\\\":\\\"\"]\r\ + \n :if ([:typeof \$tagPos] != \"nil\") do={\r\ + \n :local tagRest [:pick \$relJson (\$tagPos + 12) [:len \$relJ\ + son]]\r\ + \n :set newVer [:pick \$tagRest 0 [:find \$tagRest \"\\\"\"]]\r\ + \n }\r\ + \n :do { /file/remove [find where name=\$verPath] } on-error={}\r\ + \n } on-error={ :put \"Could not read the published version\" }\r\ + \n :local curVer \"\"\r\ + \n :do { :set curVer [/container/envs/get [find where list=\"awg3vd\ + s-env\" key=\"AWG_IMAGE_VER\"] value] } on-error={}\r\ + \n :local doPull true\r\ + \n :if (\$healthy) do={\r\ + \n :if (\$newVer = \"\") do={\r\ + \n :set doPull false\r\ + \n :put \"Published version unknown - leaving the healthy conta\ + iner alone\"\r\ + \n }\r\ + \n :if (\$newVer != \"\" && \$newVer = \$curVer) do={\r\ + \n :set doPull false\r\ + \n :put (\"Already on \" . \$curVer . \" - nothing to pull, tun\ + nel untouched\")\r\ + \n }\r\ + \n }\r\ + \n :if (\$doPull) do={\r\ + \n :if (!\$healthy) do={\r\ + \n :put \"Container is not healthy - pulling the image again\"\ + \r\ + \n :log warning \"awg3vds-update: container unhealthy, forcing \ + a pull\"\r\ + \n }\r\ + \n :put (\"Updating \" . \$img . \" ...\")\r\ + \n :log info \"awg3vds: repull started\"\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.backu\ + p\")] } on-error={}\r\ + \n :do { [:parse \"/container/set \$cid ignore-remote-image-chang\ + e=yes\"] } on-error={}\r\ + \n /container/repull \$cid\r\ + \n :local waited 0\r\ + \n :while ([:len [/container/get \$cid image-id]] = 0 && \$waited\ + \_< 180) do={\r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n :if ([:len [/container/get \$cid image-id]] = 0) do={\r\ + \n :put \"Pull failed - retrying once in 15s\"\r\ + \n :delay 15s\r\ + \n /container/repull \$cid\r\ + \n :set waited 0\r\ + \n :while ([:len [/container/get \$cid image-id]] = 0 && \$wait\ + ed < 180) do={\r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n }\r\ + \n :local backUp false\r\ + \n :if ([:len [/container/get \$cid image-id]] > 0) do={\r\ + \n :set backUp true\r\ + \n :if (\$wantRunning) do={\r\ + \n :delay 3s\r\ + \n :do { /container/start \$cid } on-error={}\r\ + \n :delay 8s\r\ + \n :set backUp false\r\ + \n :do { :if ([/container/get \$cid stopped] != true) do={ :s\ + et backUp true } } on-error={}\r\ + \n }\r\ + \n }\r\ + \n :if (!\$backUp) do={\r\ + \n :put \"Container did not come back up - rebuilding it from t\ + he registry\"\r\ + \n :log warning \"awg3vds-update: container did not come back, \ + rebuilding\"\r\ + \n :do { /container/stop \$cid } on-error={}\r\ + \n :delay 5s\r\ + \n :do { /container/remove \$cid } on-error={}\r\ + \n :delay 3s\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.bac\ + kup\")] } on-error={}\r\ + \n :do { /container/add remote-image=\$img interface=veth-awg3v\ + ds envlist=awg3vds-env hostname=awg3vds root-dir=\$rootDirOrig logging=no \ + start-on-boot=yes comment=awg3vds } on-error={}\r\ + \n :set waited 0\r\ + \n :local newCids [/container/find where interface=veth-awg3vds\ + \_and start-on-boot=yes]\r\ + \n :if ([:len \$newCids] = 0) do={ :set newCids [/container/fin\ + d where interface=veth-awg3vds] }\r\ + \n :while ([:len \$newCids] > 0 && [:len [/container/get [:pick\ + \_\$newCids ([:len \$newCids] - 1)] image-id]] = 0 && \$waited < 180) do={\ + \r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n :if ([:len \$newCids] > 0 && [:len [/container/get [:pick \$\ + newCids ([:len \$newCids] - 1)] image-id]] > 0) do={\r\ + \n :do { /container/set [:pick \$newCids ([:len \$newCids] - \ + 1)] shm-size=4M } on-error={}\r\ + \n :do { [:parse \"/container/set [find where interface=veth-\ + awg3vds] ignore-remote-image-change=yes\"] } on-error={}\r\ + \n :do { [:parse \"/container/set [find where interface=veth-\ + awg3vds] restart-policy=on-failure restart-interval=30s restart-max-count=\ + 10\"] } on-error={}\r\ + \n :do { /container/start [:pick \$newCids ([:len \$newCids] \ + - 1)] } on-error={}\r\ + \n :delay 8s\r\ + \n :do { :if ([/container/get [:pick \$newCids ([:len \$newCi\ + ds] - 1)] stopped] != true) do={ :set backUp true } } on-error={}\r\ + \n }\r\ + \n :if (\$backUp) do={\r\ + \n :put \"Container rebuilt\"\r\ + \n :log info \"awg3vds: container rebuilt after update\"\r\ + \n } else={\r\ + \n :put \"Rebuild failed - the tunnel is down. Netwatch keeps\ + \_the router online meanwhile.\"\r\ + \n :put \"This script runs again on the next schedule and wil\ + l retry.\"\r\ + \n :log error \"awg3vds-update: rebuild failed, tunnel is dow\ + n\"\r\ + \n }\r\ + \n }\r\ + \n :if (\$backUp && \$newVer != \"\") do={\r\ + \n :do { /container/envs/remove [find where list=\"awg3vds-env\ + \" key=\"AWG_IMAGE_VER\"] } on-error={}\r\ + \n :do { /container/envs/add list=awg3vds-env key=AWG_IMAGE_VER\ + \_value=\$newVer } on-error={}\r\ + \n }\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.backu\ + p\")] } on-error={}\r\ + \n :if (\$backUp) do={\r\ + \n :put (\"Update done: \" . \$img)\r\ + \n :log info \"awg3vds: update done\"\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n# Daily update check. Skipped if scheduler is not allowed by device-mode\ + \r\ + \n{\r\ + \n :local schedOk true\r\ + \n :do { :set schedOk [/system/device-mode/get scheduler] } on-error={}\r\ + \n :if (\$schedOk) do={\r\ + \n /system/scheduler/add name=awg3vds-update on-event=\"/system/script/\ + run awg3vds-update\" start-time=04:30:00 interval=1d comment=awg3vds\r\ + \n } else={\r\ + \n :put \"WARNING: scheduler not allowed by device-mode, no daily updat\ + e check.\"\r\ + \n :put \"Update by hand: /system/script/run awg3vds-update\"\r\ + \n :put \"To allow it: /system/device-mode/update scheduler=yes\"\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# 2. Network infrastructure\r\ + \n/interface/veth/add name=veth-awg3vds address=172.19.14.102/30 gateway=1\ + 72.19.14.101\r\ + \n/ip/address/add address=172.19.14.101/30 interface=veth-awg3vds\r\ + \n/ip/firewall/nat/add chain=srcnat action=masquerade src-address=172.19.1\ + 4.100/30\r\ + \n\r\ + \n# 3. WireGuard interface (MikroTik derives the public key automatically)\ + \r\ + \n/interface/wireguard/add name=wg-awg3vds private-key=\"AEU+diR7SCIEOtwOW\ + SWR3pEpkw6v0Qro2LRF0SnPpnw=\" listen-port=41430 mtu=1320 disabled=yes\r\ + \n/interface/wireguard/peers/add interface=wg-awg3vds public-key=\"MMWjD/T\ + PNpupCvhXLCAw0xHXV4N6jgtQkg9Pl6pcQhU=\" preshared-key=\"r9B13bB7gUTqde6zgB\ + DfffFIUN6puP2gOWdK5zVS3nw=\" endpoint-address=172.19.14.102 endpoint-port=\ + 51820 allowed-address=10.31.31.0/24,0.0.0.0/0 persistent-keepalive=14\r\ + \n/ip/address/add address=10.31.31.2/24 interface=wg-awg3vds\r\ + \n\r\ + \n# 4. Container environment variables\r\ + \n/container/envs/add list=awg3vds-env key=AWG_LISTEN value=\":51820\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_REMOTE value=\"89.110.101.1\ + 7:31031\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_JC value=\"5\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_JMIN value=\"510\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_JMAX value=\"952\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_S1 value=\"138\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_S2 value=\"105\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_H1 value=\"457615290-457646\ + 150\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_H2 value=\"1307355386-13073\ + 63580\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_H3 value=\"2441734303-24417\ + 81787\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_H4 value=\"3719180788-37191\ + 95844\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_SERVER_PUB value=\"MMWjD/TP\ + NpupCvhXLCAw0xHXV4N6jgtQkg9Pl6pcQhU=\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_CLIENT_PUB value=[/interfac\ + e/wireguard/get [find name=wg-awg3vds] public-key]\r\ + \n/container/envs/add list=awg3vds-env key=AWG_S3 value=\"51\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_S4 value=\"22\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_I1 value=\"\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_I2 value=\"\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_I3 value=\"\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_I4 value=\"\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_I5 value=\"\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_HEADER_PROTECTION_KEY value\ + =\"FkGxbrW6ds3YPWNl48OWFEccrLC4tF94z9MnoKUZUsM=\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_CONTENT_PADDING value=\"54-\ + 119\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_REKEY_AFTER value=\"102-130\ + \"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_REKEY_TIMEOUT value=\"6-8\"\ + \r\ + \n/container/envs/add list=awg3vds-env key=AWG_REJECT_AFTER value=\"174-19\ + 5\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_KEEPALIVE_TIMEOUT value=\"1\ + 4-21\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_MAX_HANDSHAKE_ATTEMPTS valu\ + e=\"12-14\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_NO_DF value=\"1\"\r\ + \n# Perf: give each forwarding thread its own core (4+ core routers)\r\ + \n{ :if ([/system/resource/get cpu-count] >= 4) do={ /container/envs/add l\ + ist=awg3vds-env key=AWG_CPU_C2S value=\"1\"; /container/envs/add list=awg3\ + vds-env key=AWG_CPU_S2C value=\"2\" } }\r\ + \n# NOTE on MTU: the value above assumes this tunnel is the last hop.\r\ + \n# If the server forwards your traffic into another tunnel, subtract\r\ + \n# that tunnel's overhead too, or every packet leaves in two fragments.\ + \r\ + \n\r\ + \n# 5. DNS\r\ + \n{ :local rawDNS [/ip/dns/get servers]; :local prevDNS \"\"; :foreach s i\ + n=[:toarray \$rawDNS] do={ :if ([:len \$prevDNS] > 0) do={ :set prevDNS \"\ + \$prevDNS,\$s\" } else={ :set prevDNS \$s } }; /container/envs/add list=aw\ + g3vds-env key=AWG_PREV_DNS value=\"\$prevDNS\" }\r\ + \n# NOTE: replaces existing DNS configuration\r\ + \n/ip/dns/set servers=89.110.101.17,8.8.4.4\r\ + \n# DNS 89.110.101.17 \D0\B8\D0\B4\D1\91\D1\82 \D0\BE\D0\B1\D1\89\D0\B8\D0\ + \BC \D0\BC\D0\B0\D1\80\D1\88\D1\80\D1\83\D1\82\D0\BE\D0\BC (\D0\B2 \D0\B0\ + \D0\BA\D1\82\D0\B8\D0\B2\D0\BD\D1\8B\D0\B9 \D1\82\D1\83\D0\BD\D0\BD\D0\B5\ + \D0\BB\D1\8C / default),\r\ + \n# \D0\B1\D0\B5\D0\B7 \D0\BF\D1\80\D0\B8\D0\B2\D1\8F\D0\B7\D0\BA\D0\B8 \ + \D0\BA wg-awg3vds: \D0\B8\D0\BD\D0\B0\D1\87\D0\B5 \D0\BF\D0\B0\D0\B4\D0\B5\ + \D0\BD\D0\B8\D0\B5 \D1\82\D1\83\D0\BD\D0\BD\D0\B5\D0\BB\D1\8F \D1\83\D0\BD\ + \D0\BE\D1\81\D0\B8\D1\82 \D1\81 \D1\81\D0\BE\D0\B1\D0\BE\D0\B9 \D1\80\D0\ + \B5\D0\B7\D0\BE\D0\BB\D0\B2.\r\ + \n# DNS 8.8.4.4 \D0\B8\D0\B4\D1\91\D1\82 \D0\BE\D0\B1\D1\89\D0\B8\D0\BC \ + \D0\BC\D0\B0\D1\80\D1\88\D1\80\D1\83\D1\82\D0\BE\D0\BC (\D0\B2 \D0\B0\D0\ + \BA\D1\82\D0\B8\D0\B2\D0\BD\D1\8B\D0\B9 \D1\82\D1\83\D0\BD\D0\BD\D0\B5\D0\ + \BB\D1\8C / default),\r\ + \n# \D0\B1\D0\B5\D0\B7 \D0\BF\D1\80\D0\B8\D0\B2\D1\8F\D0\B7\D0\BA\D0\B8 \ + \D0\BA wg-awg3vds: \D0\B8\D0\BD\D0\B0\D1\87\D0\B5 \D0\BF\D0\B0\D0\B4\D0\B5\ + \D0\BD\D0\B8\D0\B5 \D1\82\D1\83\D0\BD\D0\BD\D0\B5\D0\BB\D1\8F \D1\83\D0\BD\ + \D0\BE\D1\81\D0\B8\D1\82 \D1\81 \D1\81\D0\BE\D0\B1\D0\BE\D0\B9 \D1\80\D0\ + \B5\D0\B7\D0\BE\D0\BB\D0\B2.\r\ + \n\r\ + \n# 6. Download, create and start container\r\ + \n:local prevTmpdir [/container/config/get tmpdir]\r\ + \n/container/envs/add list=awg3vds-env key=AWG_PREV_TMPDIR value=\$prevTmp\ + dir\r\ + \n/container/config set tmpdir=usb1/pull memory-high=200M\r\ + \n{\r\ + \n :local arch [/system/resource/get architecture-name]\r\ + \n :local ver [/system/resource/get version]\r\ + \n :local dotPos [:find \$ver \".\"]\r\ + \n :local rest [:pick \$ver (\$dotPos + 1) [:len \$ver]]\r\ + \n :local endPos [:find \$rest \".\"]\r\ + \n :if ([:typeof \$endPos] = \"nil\") do={ :set endPos [:find \$rest \" \ + \"] }\r\ + \n :local minor [:tonum [:pick \$rest 0 \$endPos]]\r\ + \n :local suffix \"\"\r\ + \n :if (\$minor <= 20) do={ :set suffix \"-7.20-Docker\" }\r\ + \n :local file \"\"\r\ + \n :local imgTag \"latest\"\r\ + \n :if (\$arch = \"arm64\") do={ :set file (\"awg-proxy-arm64\" . \$suffi\ + x . \".tar.gz\") }\r\ + \n :if (\$arch = \"arm\") do={\r\ + \n :set file (\"awg-proxy-arm\" . \$suffix . \".tar.gz\")\r\ + \n :local rbModel \"\"\r\ + \n :do { :set rbModel [[:parse \":return [/system/routerboard/get model\ + ]\"]] } on-error={}\r\ + \n :local bName [/system/resource/get board-name]\r\ + \n :if (\$rbModel~\"E50UG\" || \$rbModel~\"E60iUGS\" || \$bName~\"E50UG\ + \" || \$bName~\"E60iUGS\" || \$bName~\"^hEX\") do={\r\ + \n :set file (\"awg-proxy-armv5\" . \$suffix . \".tar.gz\")\r\ + \n :set imgTag \"latest-armv5\"\r\ + \n }\r\ + \n }\r\ + \n :if (\$arch ~ \"x86\") do={ :set file (\"awg-proxy-amd64\" . \$suffix \ + . \".tar.gz\") }\r\ + \n :if (\$file = \"\") do={ :error \"Unsupported architecture: \$arch\" }\ + \r\ + \n :local url \"https://github.com/timbrs/amneziawg-mikrotik-c/releases/l\ + atest/download/\$file\"\r\ + \n :local filePath (\"usb1/pull/\" . \$file)\r\ + \n :local altPath (\"usb1/\" . \$file)\r\ + \n :local rootDir \"usb1/awg3vds\"\r\ + \n :do { /file/make-directory usb1/pull } on-error={}\r\ + \n :if ([:len [/file/find where name=\$filePath]] = 0 && [:len [/file/fin\ + d where name=\$altPath]] > 0) do={\r\ + \n :set filePath \$altPath\r\ + \n }\r\ + \n :local added false\r\ + \n :local fetched false\r\ + \n :if ([:len [/file/find where name=\$filePath]] > 0) do={\r\ + \n :put (\"Using image already on the router: \" . \$filePath)\r\ + \n /container/add file=\$filePath interface=veth-awg3vds envlist=awg3vd\ + s-env hostname=awg3vds root-dir=\$rootDir logging=no start-on-boot=yes com\ + ment=awg3vds\r\ + \n :set added true\r\ + \n }\r\ + \n :if (!\$added && \$minor >= 22) do={\r\ + \n :local img (\"ghcr.io/timbrs/awg-proxy:\" . \$imgTag)\r\ + \n :put (\"Pulling \" . \$img)\r\ + \n /container/add remote-image=\$img interface=veth-awg3vds envlist=awg\ + 3vds-env hostname=awg3vds root-dir=\$rootDir logging=no start-on-boot=yes \ + comment=awg3vds\r\ + \n :local cids [/container/find where interface=veth-awg3vds]\r\ + \n :local waited 0\r\ + \n :while ([:len \$cids] > 0 && [:len [/container/get [:pick \$cids 0] \ + image-id]] = 0 && \$waited < 120) do={\r\ + \n :delay 2s\r\ + \n :set waited (\$waited + 2)\r\ + \n }\r\ + \n :if ([:len \$cids] > 0 && [:len [/container/get [:pick \$cids 0] ima\ + ge-id]] > 0) do={\r\ + \n :set added true\r\ + \n :put (\"Pulled from registry in \" . \$waited . \"s\")\r\ + \n :do {\r\ + \n :local verPath (\$filePath . \".rel\")\r\ + \n /tool/fetch url=\"https://api.github.com/repos/timbrs/amneziawg-\ + mikrotik-c/releases/latest\" dst-path=\$verPath http-max-redirect-count=10\ + \r\ + \n :local relJson [/file/get [find where name=\$verPath] contents]\ + \r\ + \n :local tagPos [:find \$relJson \"\\\"tag_name\\\":\\\"\"]\r\ + \n :local tagRest [:pick \$relJson (\$tagPos + 12) [:len \$relJson]\ + ]\r\ + \n /container/envs/add list=awg3vds-env key=AWG_IMAGE_VER value=[:p\ + ick \$tagRest 0 [:find \$tagRest \"\\\"\"]]\r\ + \n /file/remove [find where name=\$verPath]\r\ + \n } on-error={}\r\ + \n } else={\r\ + \n :put \"Registry unavailable, falling back to the release archive\"\ + \r\ + \n :do { /container/remove \$cids } on-error={}\r\ + \n :delay 2s\r\ + \n }\r\ + \n }\r\ + \n :if (!\$added) do={\r\ + \n :local freeStorage 0\r\ + \n :do { :set freeStorage [/disk/get [find where mount-point=\"usb1\"] \ + free] } on-error={}\r\ + \n :if (\$freeStorage < 262144) do={\r\ + \n :put (\"WARNING: Low disk space (\" . (\$freeStorage / 1024) . \"K\ + B free). Need at least 256KB.\")\r\ + \n :put \"See: https://github.com/timbrs/amneziawg-mikrotik-c#insuffi\ + cient-disk-space\"\r\ + \n :error \"Insufficient disk space\"\r\ + \n }\r\ + \n :put (\"Fetching: \$url -> \" . \$filePath)\r\ + \n /tool/fetch url=\$url dst-path=\$filePath http-max-redirect-count=10\ + \r\ + \n /container/add file=\$filePath interface=veth-awg3vds envlist=awg3vd\ + s-env hostname=awg3vds root-dir=\$rootDir logging=no start-on-boot=yes com\ + ment=awg3vds\r\ + \n :set fetched true\r\ + \n }\r\ + \n :if (\$minor > 20) do={ [:parse \"/container/set [find where interface\ + =veth-awg3vds] shm-size=4M\"] }\r\ + \n :do { [:parse \"/container/set [find where interface=veth-awg3vds] ign\ + ore-remote-image-change=yes\"] } on-error={}\r\ + \n :do { [:parse \"/container/set [find where interface=veth-awg3vds] res\ + tart-policy=on-failure restart-interval=30s restart-max-count=10\"] } on-e\ + rror={}\r\ + \n :if (\$fetched) do={ /file/remove \$filePath }\r\ + \n :local freeMem [/system/resource/get free-memory]\r\ + \n :if (\$freeMem < 16777216) do={\r\ + \n :put (\"WARNING: Low memory (\" . (\$freeMem / 1048576) . \"MB free)\ + . 16MB+ recommended.\")\r\ + \n }\r\ + \n /container/start [find where interface=veth-awg3vds]\r\ + \n :do { /file/remove [find where name=\"console-dump.txt\"] } on-error={\ + }\r\ + \n :put \"Waiting for container to start...\"\r\ + \n :delay 5s\r\ + \n /interface/wireguard/enable wg-awg3vds\r\ + \n :put \"WireGuard interface enabled\"\r\ + \n :put \"Installation complete!\"\r\ + \n :put \"Ping test: 89.110.101.17 via AmneziaWG tunnel. repeat 10 times\ + \"\r\ + \n /ping 89.110.101.17 count=10 interval=1\r\ + \n :put \"\"\r\ + \n :put \"======= NEXT STEPS =======\"\r\ + \n :put \"\"\r\ + \n :put \"Route specific traffic through the AmneziaWG tunnel:\"\r\ + \n :put \"\"\r\ + \n :put \" Route a single host:\"\r\ + \n :put \" /ip/route/add dst-address=8.8.8.8/32 gateway=wg-awg3vds com\ + ment=awg3vds-tunnel\"\r\ + \n :put \"\"\r\ + \n :put \" Route a subnet:\"\r\ + \n :put \" /ip/route/add dst-address=100.0.0.0/8 gateway=wg-awg3vds co\ + mment=awg3vds-tunnel\"\r\ + \n :put \"\"\r\ + \n :put \" Remove a route:\"\r\ + \n :put \" /ip/route/remove [find where comment=awg3vds-tunnel dst-add\ + ress=8.8.8.8/32]\"\r\ + \n :put \"\"\r\ + \n :put \" Show all tunnel routes:\"\r\ + \n :put \" /ip/route/print where comment=awg3vds-tunnel\"\r\ + \n :put \"\"\r\ + \n :put \" Update the container:\"\r\ + \n :put \" /system/script/run awg3vds-update\"\r\ + \n :put \"\"\r\ + \n :put \" Uninstall:\"\r\ + \n :put \" /system/script/run awg3vds-uninstall\"\r\ + \n :put \"=========================\"\r\ + \n}\r\ + \n\r\ + \n# 7. Verification\r\ + \n# /container/print\r\ + \n# /interface/wireguard/print\r\ + \n# /interface/wireguard/peers/print\r\ + \n" +add comment=awg3vds dont-require-permissions=no name=awg3vds-uninstall owner=\ + vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="\ + \r\ + \n :put \"Uninstallimg AmneziaWG...\"\r\ + \n :log info \"Uninstallimg AmneziaWG...\"\r\ + \n :local prevDNS \"\"\r\ + \n :do { :set prevDNS [/container/envs/get [find where list=\"awg3vds-env\ + \" key=\"AWG_PREV_DNS\"] value] } on-error={}\r\ + \n :local prevTmpdir \"\"\r\ + \n :do { :set prevTmpdir [/container/envs/get [find where list=\"awg3vds-\ + env\" key=\"AWG_PREV_TMPDIR\"] value] } on-error={}\r\ + \n /ip/route/remove [find where comment=awg3vds-tunnel]\r\ + \n /ip/route/remove [find where comment=awg3vds-dns]\r\ + \n :do { /system/scheduler/remove [find where comment~\"awg3vds\"] } on-e\ + rror={}\r\ + \n :do { /system/script/remove [find where comment~\"awg3vds\" and name!=\ + \"awg3vds-uninstall\"] } on-error={}\r\ + \n /container/stop [find where interface=veth-awg3vds]\r\ + \n :delay 7s\r\ + \n /container/remove [find where interface=veth-awg3vds]\r\ + \n /container/envs/remove [find where list=\"awg3vds-env\"]\r\ + \n :if (\$prevDNS != \"\") do={\r\ + \n :do { /ip/dns/set servers=\"\$prevDNS\" } on-error={}\r\ + \n :put (\"DNS restored to: \$prevDNS\")\r\ + \n }\r\ + \n /container/config set tmpdir=\$prevTmpdir\r\ + \n :put (\"Container tmpdir restored to: \$prevTmpdir\")\r\ + \n /ip/firewall/nat/remove [find where out-interface=\"wg-awg3vds\"]\r\ + \n /ip/firewall/nat/remove [find where src-address=\"172.19.14.100/30\"]\ + \r\ + \n /ip/address/remove [find where address=\"172.19.14.101/30\"]\r\ + \n :do { /ipv6/firewall/nat/remove [find where comment=awg3vds-v6-nat] } \ + on-error={}\r\ + \n :do { /ipv6/firewall/nat/remove [find where comment=awg3vds-dstnat6] }\ + \_on-error={}\r\ + \n :do { /ipv6/firewall/filter/remove [find where comment=awg3vds-v6-out]\ + \_} on-error={}\r\ + \n :do { /ipv6/firewall/filter/remove [find where comment=awg3vds-awg-in6\ + ] } on-error={}\r\ + \n :do { /ipv6/nd/remove [find where interface=veth-awg3vds] } on-error={\ + }\r\ + \n :do { /ipv6/nd/prefix/remove [find where interface=veth-awg3vds] } on-\ + error={}\r\ + \n :do { /ipv6/address/remove [find where comment=awg3vds-v6] } on-error=\ + {}\r\ + \n /interface/veth/remove [find where name=\"veth-awg3vds\"]\r\ + \n /interface/wireguard/peers/remove [find where interface=\"wg-awg3vds\"\ + ]\r\ + \n /ip/address/remove [find where interface=\"wg-awg3vds\"]\r\ + \n /interface/wireguard/remove [find where name=\"wg-awg3vds\"]\r\ + \n :do { /file/remove [find where name~\"awg3vds.+tar\"] } on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/awg3vds\"] } on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/ru_ranges_timeout.rsc\"] } \ + on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/ru_ranges.rsc\"] } on-error\ + ={}\r\ + \n :do { /file/remove [find where name~\"usb1/pull\"] } on-error={}\r\ + \n :put \"Uninstall AmneziaWG Proxy complete!\"\r\ + \n :log info \"Uninstall AmneziaWG Proxy complete!\"\r\ + \n# /system/script/remove [find where name=awg3vds-uninstall]\r\ + \n" +add comment=awg3vds dont-require-permissions=no name=awg3vds-update owner=\ + vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="\ + \r\ + \n :local cids [/container/find where interface=veth-awg3vds and !stopped\ + ]\r\ + \n :if ([:len \$cids] = 0) do={ :set cids [/container/find where interfac\ + e=veth-awg3vds and start-on-boot=yes] }\r\ + \n :if ([:len \$cids] = 0) do={ :set cids [/container/find where interfac\ + e=veth-awg3vds] }\r\ + \n :if ([:len \$cids] = 0) do={\r\ + \n :put \"Container awg3vds not found\"\r\ + \n :log warning \"awg3vds-update: container not found\"\r\ + \n } else={\r\ + \n :local cid [:pick \$cids ([:len \$cids] - 1)]\r\ + \n :local img [/container/get \$cid remote-image]\r\ + \n :local ver [/system/resource/get version]\r\ + \n :local dotPos [:find \$ver \".\"]\r\ + \n :local rest [:pick \$ver (\$dotPos + 1) [:len \$ver]]\r\ + \n :local endPos [:find \$rest \".\"]\r\ + \n :if ([:typeof \$endPos] = \"nil\") do={ :set endPos [:find \$rest \"\ + \_\"] }\r\ + \n :local minor [:tonum [:pick \$rest 0 \$endPos]]\r\ + \n :local wantRunning true\r\ + \n :do { :if ([/container/get \$cid start-on-boot] != true) do={ :set w\ + antRunning false } } on-error={}\r\ + \n :local healthy true\r\ + \n :if ([:len [/container/get \$cid image-id]] = 0) do={ :set healthy f\ + alse }\r\ + \n :if (\$wantRunning) do={\r\ + \n :do { :if ([/container/get \$cid stopped] = true) do={ :set health\ + y false } } on-error={}\r\ + \n }\r\ + \n :if (!\$healthy && \$wantRunning && [:len [/container/get \$cid imag\ + e-id]] > 0) do={\r\ + \n :put \"Container is down - trying to start it\"\r\ + \n :do { /container/start \$cid } on-error={}\r\ + \n :delay 8s\r\ + \n :set healthy true\r\ + \n :do { :if ([/container/get \$cid stopped] = true) do={ :set health\ + y false } } on-error={}\r\ + \n :if (\$healthy) do={\r\ + \n :put \"Container is back up\"\r\ + \n :log info \"awg3vds: container restarted by the update script\"\ + \r\ + \n }\r\ + \n }\r\ + \n :if (\$img = \"\" && \$minor >= 22 && !\$healthy) do={\r\ + \n :local imgTag \"latest\"\r\ + \n :local rbModel \"\"\r\ + \n :do { :set rbModel [[:parse \":return [/system/routerboard/get mod\ + el]\"]] } on-error={}\r\ + \n :local bName [/system/resource/get board-name]\r\ + \n :if (\$rbModel~\"E50UG\" || \$rbModel~\"E60iUGS\" || \$bName~\"E50\ + UG\" || \$bName~\"E60iUGS\" || \$bName~\"^hEX\") do={\r\ + \n :set imgTag \"latest-armv5\"\r\ + \n }\r\ + \n :set img (\"ghcr.io/timbrs/awg-proxy:\" . \$imgTag)\r\ + \n :put (\"Container is down and was installed from a file - pointing\ + \_it at \" . \$img)\r\ + \n :log warning \"awg3vds-update: broken file install, switching to t\ + he registry\"\r\ + \n :do { /container/set \$cid remote-image=\$img } on-error={}\r\ + \n }\r\ + \n :if (\$img = \"\") do={\r\ + \n :put \"Installed from a local image file - /container/repull only \ + updates registry installs.\"\r\ + \n :put \"Reinstall with the configurator on RouterOS 7.22+ to switch\ + \_to one-command updates.\"\r\ + \n } else={\r\ + \n :if (\$minor < 22) do={\r\ + \n :put (\"/container/repull needs RouterOS 7.22+, this router runs\ + \_\" . \$ver)\r\ + \n :if (!\$healthy) do={ :log error (\"awg3vds-update: container is\ + \_down, and \" . \$ver . \" has no /container/repull\") }\r\ + \n } else={\r\ + \n :local rootDir [/container/get \$cid root-dir]\r\ + \n :if ([:pick \$rootDir 0 1] = \"/\") do={ :set rootDir [:pick \$r\ + ootDir 1 [:len \$rootDir]] }\r\ + \n :local rootDirOrig \$rootDir\r\ + \n :local slashPos [:find \$rootDir \"/\"]\r\ + \n :local disk \$rootDir\r\ + \n :if ([:typeof \$slashPos] != \"nil\") do={ :set disk [:pick \$ro\ + otDir 0 \$slashPos] }\r\ + \n :local verPath \"awg-update-check.json\"\r\ + \n :if (\$disk != \"disk1\") do={\r\ + \n :do { /file/make-directory (\$disk . \"/pull\") } on-error={}\ + \r\ + \n /container/config set tmpdir=(\$disk . \"/pull\")\r\ + \n :set verPath (\$disk . \"/pull/awg-update-check.json\")\r\ + \n }\r\ + \n :local newVer \"\"\r\ + \n :do {\r\ + \n /tool/fetch url=\"https://api.github.com/repos/timbrs/amneziaw\ + g-mikrotik-c/releases/latest\" dst-path=\$verPath http-max-redirect-count=\ + 10\r\ + \n :local relJson [/file/get [find where name=\$verPath] contents\ + ]\r\ + \n :local tagPos [:find \$relJson \"\\\"tag_name\\\":\\\"\"]\r\ + \n :if ([:typeof \$tagPos] != \"nil\") do={\r\ + \n :local tagRest [:pick \$relJson (\$tagPos + 12) [:len \$relJ\ + son]]\r\ + \n :set newVer [:pick \$tagRest 0 [:find \$tagRest \"\\\"\"]]\r\ + \n }\r\ + \n :do { /file/remove [find where name=\$verPath] } on-error={}\r\ + \n } on-error={ :put \"Could not read the published version\" }\r\ + \n :local curVer \"\"\r\ + \n :do { :set curVer [/container/envs/get [find where list=\"awg3vd\ + s-env\" key=\"AWG_IMAGE_VER\"] value] } on-error={}\r\ + \n :local doPull true\r\ + \n :if (\$healthy) do={\r\ + \n :if (\$newVer = \"\") do={\r\ + \n :set doPull false\r\ + \n :put \"Published version unknown - leaving the healthy conta\ + iner alone\"\r\ + \n }\r\ + \n :if (\$newVer != \"\" && \$newVer = \$curVer) do={\r\ + \n :set doPull false\r\ + \n :put (\"Already on \" . \$curVer . \" - nothing to pull, tun\ + nel untouched\")\r\ + \n }\r\ + \n }\r\ + \n :if (\$doPull) do={\r\ + \n :if (!\$healthy) do={\r\ + \n :put \"Container is not healthy - pulling the image again\"\ + \r\ + \n :log warning \"awg3vds-update: container unhealthy, forcing \ + a pull\"\r\ + \n }\r\ + \n :put (\"Updating \" . \$img . \" ...\")\r\ + \n :log info \"awg3vds: repull started\"\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.backu\ + p\")] } on-error={}\r\ + \n :do { [:parse \"/container/set \$cid ignore-remote-image-chang\ + e=yes\"] } on-error={}\r\ + \n /container/repull \$cid\r\ + \n :local waited 0\r\ + \n :while ([:len [/container/get \$cid image-id]] = 0 && \$waited\ + \_< 180) do={\r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n :if ([:len [/container/get \$cid image-id]] = 0) do={\r\ + \n :put \"Pull failed - retrying once in 15s\"\r\ + \n :delay 15s\r\ + \n /container/repull \$cid\r\ + \n :set waited 0\r\ + \n :while ([:len [/container/get \$cid image-id]] = 0 && \$wait\ + ed < 180) do={\r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n }\r\ + \n :local backUp false\r\ + \n :if ([:len [/container/get \$cid image-id]] > 0) do={\r\ + \n :set backUp true\r\ + \n :if (\$wantRunning) do={\r\ + \n :delay 3s\r\ + \n :do { /container/start \$cid } on-error={}\r\ + \n :delay 8s\r\ + \n :set backUp false\r\ + \n :do { :if ([/container/get \$cid stopped] != true) do={ :s\ + et backUp true } } on-error={}\r\ + \n }\r\ + \n }\r\ + \n :if (!\$backUp) do={\r\ + \n :put \"Container did not come back up - rebuilding it from t\ + he registry\"\r\ + \n :log warning \"awg3vds-update: container did not come back, \ + rebuilding\"\r\ + \n :do { /container/stop \$cid } on-error={}\r\ + \n :delay 5s\r\ + \n :do { /container/remove \$cid } on-error={}\r\ + \n :delay 3s\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.bac\ + kup\")] } on-error={}\r\ + \n :do { /container/add remote-image=\$img interface=veth-awg3v\ + ds envlist=awg3vds-env hostname=awg3vds root-dir=\$rootDirOrig logging=no \ + start-on-boot=yes comment=awg3vds } on-error={}\r\ + \n :set waited 0\r\ + \n :local newCids [/container/find where interface=veth-awg3vds\ + \_and start-on-boot=yes]\r\ + \n :if ([:len \$newCids] = 0) do={ :set newCids [/container/fin\ + d where interface=veth-awg3vds] }\r\ + \n :while ([:len \$newCids] > 0 && [:len [/container/get [:pick\ + \_\$newCids ([:len \$newCids] - 1)] image-id]] = 0 && \$waited < 180) do={\ + \r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n :if ([:len \$newCids] > 0 && [:len [/container/get [:pick \$\ + newCids ([:len \$newCids] - 1)] image-id]] > 0) do={\r\ + \n :do { /container/set [:pick \$newCids ([:len \$newCids] - \ + 1)] shm-size=4M } on-error={}\r\ + \n :do { [:parse \"/container/set [find where interface=veth-\ + awg3vds] ignore-remote-image-change=yes\"] } on-error={}\r\ + \n :do { [:parse \"/container/set [find where interface=veth-\ + awg3vds] restart-policy=on-failure restart-interval=30s restart-max-count=\ + 10\"] } on-error={}\r\ + \n :do { /container/start [:pick \$newCids ([:len \$newCids] \ + - 1)] } on-error={}\r\ + \n :delay 8s\r\ + \n :do { :if ([/container/get [:pick \$newCids ([:len \$newCi\ + ds] - 1)] stopped] != true) do={ :set backUp true } } on-error={}\r\ + \n }\r\ + \n :if (\$backUp) do={\r\ + \n :put \"Container rebuilt\"\r\ + \n :log info \"awg3vds: container rebuilt after update\"\r\ + \n } else={\r\ + \n :put \"Rebuild failed - the tunnel is down. Netwatch keeps\ + \_the router online meanwhile.\"\r\ + \n :put \"This script runs again on the next schedule and wil\ + l retry.\"\r\ + \n :log error \"awg3vds-update: rebuild failed, tunnel is dow\ + n\"\r\ + \n }\r\ + \n }\r\ + \n :if (\$backUp && \$newVer != \"\") do={\r\ + \n :do { /container/envs/remove [find where list=\"awg3vds-env\ + \" key=\"AWG_IMAGE_VER\"] } on-error={}\r\ + \n :do { /container/envs/add list=awg3vds-env key=AWG_IMAGE_VER\ + \_value=\$newVer } on-error={}\r\ + \n }\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.backu\ + p\")] } on-error={}\r\ + \n :if (\$backUp) do={\r\ + \n :put (\"Update done: \" . \$img)\r\ + \n :log info \"awg3vds: update done\"\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\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" +add name=manager policy="local,ssh,ftp,read,write,policy,api,rest-api,!telnet,\ + !reboot,!test,!winbox,!password,!web,!sniff,!sensitive,!romon" +/certificate settings +set builtin-trust-store=\ + capsman,fetch,email,netwatch,container,dns,www,api,reverse-proxy,logging +/container +add comment=awg3vds envlists=awg3vds-env file=usb1/pull/awg-proxy-arm.tar.gz \ + hostname=awg3vds ignore-remote-image-change=yes interface=veth-awg3vds \ + layer-dir="" name=awg-proxy-arm restart-interval=30s restart-max-count=10 \ + restart-policy=on-failure root-dir=/usb1/awg3vds shm-size=4096.0KiB \ + start-on-boot=yes +/container config +set memory-high=200.0MiB tmpdir=/usb1/pull +/container envs +add key=AWG_CLIENT_PUB list=awg3vds-env value=\ + "LnLYVichmfWj/lDZqn2tk7pj2XII/1tnyZaOjf40Tl8=" +add key=AWG_CONTENT_PADDING list=awg3vds-env value=54-119 +add key=AWG_CPU_C2S list=awg3vds-env value=1 +add key=AWG_CPU_S2C list=awg3vds-env value=2 +add key=AWG_H1 list=awg3vds-env value=457615290-457646150 +add key=AWG_H2 list=awg3vds-env value=1307355386-1307363580 +add key=AWG_H3 list=awg3vds-env value=2441734303-2441781787 +add key=AWG_H4 list=awg3vds-env value=3719180788-3719195844 +add key=AWG_HEADER_PROTECTION_KEY list=awg3vds-env value=\ + "FkGxbrW6ds3YPWNl48OWFEccrLC4tF94z9MnoKUZUsM=" +add key=AWG_I1 list=awg3vds-env value=\ + "" +add key=AWG_I2 list=awg3vds-env value=\ + "" +add key=AWG_I3 list=awg3vds-env value="" +add key=AWG_I4 list=awg3vds-env value="" +add key=AWG_I5 list=awg3vds-env value=\ + "" +add key=AWG_JC list=awg3vds-env value=5 +add key=AWG_JMAX list=awg3vds-env value=952 +add key=AWG_JMIN list=awg3vds-env value=510 +add key=AWG_KEEPALIVE_TIMEOUT list=awg3vds-env value=14-21 +add key=AWG_LISTEN list=awg3vds-env value=:51820 +add key=AWG_MAX_HANDSHAKE_ATTEMPTS list=awg3vds-env value=12-14 +add key=AWG_NO_DF list=awg3vds-env value=1 +add key=AWG_PREV_DNS list=awg3vds-env value=10.30.30.33,8.8.4.4 +add key=AWG_PREV_TMPDIR list=awg3vds-env value=/usb1/pull +add key=AWG_REJECT_AFTER list=awg3vds-env value=174-195 +add key=AWG_REKEY_AFTER list=awg3vds-env value=102-130 +add key=AWG_REKEY_TIMEOUT list=awg3vds-env value=6-8 +add key=AWG_REMOTE list=awg3vds-env value=89.110.101.17:31031 +add key=AWG_S1 list=awg3vds-env value=138 +add key=AWG_S2 list=awg3vds-env value=105 +add key=AWG_S3 list=awg3vds-env value=51 +add key=AWG_S4 list=awg3vds-env value=22 +add key=AWG_SERVER_PUB list=awg3vds-env value=\ + "MMWjD/TPNpupCvhXLCAw0xHXV4N6jgtQkg9Pl6pcQhU=" +/disk settings +set auto-media-interface=Bridge-Lan +/ip smb +set domain=WORKGROUP enabled=no interfaces=lo +/interface bridge port +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=wlan1 +add bridge=Bridge-Lan interface=wlan2 +/interface bridge settings +set allow-fast-path=no use-ip-firewall=yes +/ip neighbor discovery-settings +set discover-interface-list=LAN +/ip settings +set accept-redirects=yes allow-fast-path=no +/ipv6 settings +set accept-router-advertisements-on=none allow-fast-path=no disable-ipv6=yes \ + disable-link-local-address=yes +/interface detect-internet +set detect-interface-list=WAN internet-interface-list=Internet \ + lan-interface-list=LAN wan-interface-list=WAN +/interface list member +add interface="ether1 - Unet" list=WAN +add interface=Bridge-Lan list=LAN +add interface=wg-awg3vds list=WAN +/interface wireguard peers +add allowed-address=10.31.31.0/24,0.0.0.0/0 endpoint-address=172.19.14.102 \ + endpoint-port=51820 interface=wg-awg3vds name=peer1 persistent-keepalive=\ + 14s public-key="MMWjD/TPNpupCvhXLCAw0xHXV4N6jgtQkg9Pl6pcQhU=" +add allowed-address=0.0.0.0/0,::/0 client-allowed-address=::/0 \ + endpoint-address=engage.cloudflareclient.com endpoint-port=2408 \ + interface=WARP name=CloudFlare public-key=\ + "bmXOC+F1FxEMF9dyiK2H5/1SUtzH0JuVo51h2wPfgyo=" +/interface wireless cap +# +set bridge=Bridge-Lan caps-man-addresses=10.30.30.10 \ + caps-man-certificate-common-names=CAPsMAN-2C900E832E04 certificate=\ + CAP-18FD746E5814 discovery-interfaces=Bridge-Lan 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=172.19.14.101/30 interface=veth-awg3vds network=172.19.14.100 +add address=10.31.31.2/24 interface=wg-awg3vds network=10.31.31.0 +add address=172.16.0.2/24 interface=WARP network=172.16.0.0 +/ip cloud +set ddns-enabled=yes +/ip dhcp-client +add add-default-route=special-classless default-route-distance=2 \ + default-route-tables=main:2 dhcp-options=clientid,clientid_duid \ + interface="ether1 - Unet" name=client1 use-peer-dns=no use-peer-ntp=no +/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.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.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 +/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 servers=10.30.30.33,8.8.4.4 +/ip dns static +add address=10.30.30.81 comment=defconf name=router.lan type=A +add address=10.30.30.81 comment=defconf name=master type=A +add address=10.30.30.33 comment=amster name=amster.vados.ru type=A +add address=8.8.8.8 name=dns.google type=A +add address=8.8.4.4 name=dns.google type=A +add address=1.0.0.1 comment="CloudFlare-doh IPv4 2" disabled=yes name=\ + security.cloudflare-dns.com type=A +add address=1.1.1.1 comment="CloudFlare-doh IPv4 1" disabled=yes name=\ + security.cloudflare-dns.com type=A +add address=149.112.112.112 comment="Cuad9-dns IPv4 2" disabled=yes name=\ + dns.quad9.net 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 +add address=91.192.189.2 comment=Unet-DNS disabled=yes name=ns1.unet.ws type=\ + A +/ip firewall address-list +add address=10.0.0.0/8 list=RFC1918 +add address=172.16.0.0/12 list=RFC1918 +add address=192.168.0.0/16 list=RFC1918 +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=8.8.4.4 disabled=yes list=to_vpn +add address=10.30.30.98 comment=vados-len list=Local2Vpn +add address=89.110.101.17 list=VDS +add address=109.107.177.79 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=2ip.ru list=Test +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 comment=vdsina.com list=NoVdsina +add address=vdsina.ru comment=vdsina.ru list=NoVdsina +add address=youla.ru comment=youla.ru list=NoVdsina +add address=kupiprodai.ru comment=kupiprodai.ru list=NoVdsina +add address=myip.ru list=Test +add address=geoip.co comment=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 comment=comp-lenta.ru list=NoVdsina +add address=128.85.102.70 comment=update.microsoft.com list=\ + windowsupdateslist +add address=wu-b-net.trafficmanager.net. comment=\ + ctldl.windowsupdate.com.delivery.microsoft.com list=windowsupdateslist +add address=ctldl.windowsupdate.com.delivery.microsoft.com. comment=\ + ctldl.windowsupdate.com list=windowsupdateslist +add address=redir.update.msft.com.trafficmanager.net. comment=\ + update.microsoft.com list=windowsupdateslist +add address=geo.prod.do.dsp.trafficmanager.net. comment=\ + geo.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=13.74.139.29 comment=array605.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e12437.d.akamaiedge.net. comment=\ + kv801.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=displaycatalog-rp.md.mp.microsoft.com.akadns.net. comment=\ + displaycatalog.mp.microsoft.com list=windowsupdateslist +add address=rp-consumer-prod-displaycatalog-geomap.trafficmanager.net. \ + comment=displaycatalog-rp.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=sls.update.microsoft.com. comment=slscr.update.microsoft.com \ + list=windowsupdateslist +add address=glb.sls.prod.dcat.dsp.trafficmanager.net. comment=\ + sls.update.microsoft.com list=windowsupdateslist +add address=fe3.delivery.mp.microsoft.com. comment=\ + fe3cr.delivery.mp.microsoft.com list=windowsupdateslist +add address=glb.cws.prod.dcat.dsp.trafficmanager.net. comment=\ + fe3.delivery.mp.microsoft.com list=windowsupdateslist +add address=fe2cr.update.msft.com.trafficmanager.net. comment=\ + fe2cr.update.microsoft.com list=windowsupdateslist +add address=download.windowsupdate.com.delivery.microsoft.com. comment=\ + download.windowsupdate.com list=windowsupdateslist +add address=wu-f-net.trafficmanager.net. comment=\ + download.windowsupdate.com.delivery.microsoft.com list=windowsupdateslist +add address=tsfe.trafficmanager.net. comment=\ + tsfe.trafficshaping.dsp.mp.microsoft.com list=windowsupdateslist +add address=edge.ds-c7110-microsoft.global.dns.qwilted-cds.cqloud.com. \ + comment=9.au.download.windowsupdate.com list=windowsupdateslist +add address=52.158.227.125 comment=array812.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=au.download.windowsupdate.com.delivery.microsoft.com. comment=\ + au.download.windowsupdate.com list=windowsupdateslist +add address=a767.dspw65.akamai.net. comment=\ + download.windowsupdate.com.edgesuite.net list=windowsupdateslist +add address=52.151.58.88 comment=array810.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=consumer-licensing-aks2aks.md.mp.microsoft.com.akadns.net. \ + comment=licensing.mp.microsoft.com list=windowsupdateslist +add address=licensing-prod-frontdoor-geomap.trafficmanager.net. comment=\ + consumer-licensing-aks2aks.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=star.f.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.f.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-nlu-net.trafficmanager.net. comment=\ + star.f.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=star.b.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.b.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-tlu-net.trafficmanager.net. comment=\ + star.b.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=storeedgefd.xbetservices.akadns.net. comment=\ + storeedgefd.dsx.mp.microsoft.com list=windowsupdateslist +add address=\ + storeedgefd.dsx.mp.microsoft.com.edgekey.net.globalredir.akadns.net. \ + comment=storeedgefd.dsx.mp.microsoft.com.edgekey.net list=\ + windowsupdateslist +add address=e16646.dscg.akamaiedge.net. comment=\ + storeedgefd.dsx.mp.microsoft.com.edgekey.net.globalredir.akadns.net list=\ + windowsupdateslist +add address=40.69.76.189 comment=array621.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=bg.microsoft.map.fastly.net. comment=\ + 3.au.download.windowsupdate.com list=windowsupdateslist +add list=windowsupdateslist +add address=40.69.75.33 comment=array613.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=star.sf.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedgeextensions.sf.tlu.dl.delivery.mp.microsoft.com list=\ + windowsupdateslist +add address=cdp-f-ssl-tlu-net.trafficmanager.net. comment=\ + star.sf.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a2033.dscd.akamai.net. comment=\ + star.sb.tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=13.74.138.242 comment=array602.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=dl.delivery.mp.microsoft.com.delivery.microsoft.com. comment=\ + dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-f-nlu-net.trafficmanager.net. comment=\ + dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=1d.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=1D.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-b-tlu-net.trafficmanager.net. comment=\ + 1d.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a122.dscg3.akamai.net. comment=\ + tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=windowsupdateslist +add address=geover.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + geover.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e10370.d.akamaiedge.net. comment=\ + geover.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=52.232.182.21 comment=array511.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.70.77.95 comment=array519.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=a1683.dscd.akamai.net. comment=\ + dl.delivery.mp.microsoft.com-c.edgesuite.net list=windowsupdateslist +add address=consumer-collections-aks2eap.md.mp.microsoft.com.akadns.net. \ + comment=collections.mp.microsoft.com list=windowsupdateslist +add address=a1847.dscd.akamai.net. comment=\ + wildcard.f.tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=13.74.142.6 comment=array607.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=au.download.windowsupdate.com.edgesuite.net. comment=\ + 2.au.download.windowsupdate.com list=windowsupdateslist +add address=a767.dscg3.akamai.net. comment=\ + au.download.windowsupdate.com.edgesuite.net list=windowsupdateslist +add address=52.156.123.84 comment=array818.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.78.254 comment=array610.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=4.au.download.windowsupdate.com.delivery.microsoft.com. comment=\ + 4.au.download.windowsupdate.com list=windowsupdateslist +add address=cl-glcb907925.gcdn.co. comment=\ + 4.au.download.windowsupdate.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.111 comment=array510.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.69.70.43 comment=array623.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=tsfe.trafficshaping.dsp.mp.microsoft.com.delivery.microsoft.com. \ + comment=tsfe.trafficshaping.dsp.mp.microsoft.com list=windowsupdateslist +add address=ts-frontend.trafficmanager.net. comment=\ + tsfe.trafficshaping.dsp.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=40.69.75.248 comment=array616.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.74.84 comment=array615.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=sds.trafficmanager.net. comment=software-download.microsoft.com \ + list=windowsupdateslist +add address=40.69.74.80 comment=array611.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.175.242.182 comment=array804.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=dlc-shim.trafficmanager.net. comment=download.microsoft.com list=\ + windowsupdateslist +add address=e12671.dscd.akamaiedge.net. comment=\ + download.microsoft.com.edgekey.net list=windowsupdateslist +add address=20.187.55.34 comment=array808.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.231 comment=array513.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=52.167.222.13 comment=array518.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e12358.d.akamaiedge.net. comment=\ + kv601.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. comment=\ + tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-f-tlu-net.trafficmanager.net. comment=\ + tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a1856.dspw65.akamai.net. comment=\ + tlu.dl.delivery.mp.microsoft.com-c.edgesuite.net list=windowsupdateslist +add address=52.167.164.252 comment=array506.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=13.74.137.54 comment=array601.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv501.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv501.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=collections-prod-frontdoor-geomap.trafficmanager.net. comment=\ + consumer-collections-aks2eap.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=52.167.160.173 comment=array509.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.70.77.148 comment=array516.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.200.126 comment=array507.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=52.167.167.59 comment=array508.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.76.172 comment=array620.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=82.202.162.184 comment=comp-lenta.ru list=NoWG +add address=smtp.mail.me.com.akadns.net. comment=smtp.mail.me.com list=NoWG +add address=17.57.155.37 comment=smtp.mail.me.com.akadns.net list=NoWG +add address=smtp.mail.me.com comment=smtp.mail.me.com list=NoVdsina +add address=40.70.76.5 comment=array514.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.186.119 comment=array618.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.177.176.186 comment=array520.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.70.76.27 comment=array515.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.160.43 comment=array503.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.110 comment=array817.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.142.8 comment=array614.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.138.254 comment=array603.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.96 comment=array501.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.76.215 comment=array622.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.143.200 comment=array606.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.111 comment=array818.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.112 comment=array819.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.137.53 comment=array608.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.98 comment=array805.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.96 comment=array803.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.104 comment=array811.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.101 comment=array808.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.99 comment=array806.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.17 comment=array802.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.97 comment=array804.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.103 comment=array810.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.16 comment=array801.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.70.77.177 comment=array517.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.164.84 comment=array512.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.105 comment=array812.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.107 comment=array814.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.232.161.82 comment=array502.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.108 comment=array815.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.161.91 comment=array505.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.102 comment=array809.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.109 comment=array816.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.106 comment=array813.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.117 comment=array622.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.107 comment=array612.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.108 comment=array613.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.105 comment=array610.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.113 comment=array618.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.116 comment=array621.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.98 comment=array603.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.114 comment=array619.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.111 comment=array616.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.97 comment=array602.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.106 comment=array611.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.110 comment=array615.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.119 comment=array624.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.135 comment=array514.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.97 comment=array503.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.99 comment=array604.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.61 comment=array504.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.131 comment=array510.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.132 comment=array511.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.96 comment=array601.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.104 comment=array609.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.138 comment=array517.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.60 comment=array501.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.139 comment=array518.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.118 comment=array623.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.113 comment=array820.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.103 comment=array608.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.100 comment=array807.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.129 comment=array508.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.134 comment=array513.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.62 comment=array505.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.137 comment=array516.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.101 comment=array606.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.96 comment=array502.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.130 comment=array509.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.112 comment=array617.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.100 comment=array605.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.115 comment=array620.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.136 comment=array515.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=purchase.md.mp.microsoft.com.akadns.net. comment=\ + purchase.mp.microsoft.com list=windowsupdateslist +add address=e110219.a.akamaiedge.net. comment=\ + purchase.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=72.153.5.140 comment=array519.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.141 list=windowsupdateslist +add address=72.153.5.63 comment=array506.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.128 comment=array507.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.102 comment=array607.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=storesdk.xbetservices.akadns.net. comment=\ + storesdk.dsx.mp.microsoft.com list=windowsupdateslist +add address=e16646.g.akamaiedge.net. comment=\ + storesdk.dsx.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=software-download.microsoft.com.delivery.microsoft.com. comment=\ + software-download.microsoft.com list=windowsupdateslist +add address=download.prss.microsoft.com.akamaized.net. comment=\ + software-download.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.109 comment=array614.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.133 comment=array512.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=213.180.192.0/19 comment=YandexDisk list=NoVdsina +add address=87.250.250.50 comment=YandexDisk list=NoVdsina +add address=consumer-prod-bcfd-v7-afd.trafficmanager.net. comment=\ + displaycatalog.mp.microsoft.com list=windowsupdateslist +add address=purchase-europeeap.md.mp.microsoft.com.akadns.net. comment=\ + purchase.md.mp.microsoft.com.akadns.net list=windowsupdateslist +add address=ne-az-conspurchase-mp.trafficmanager.net. comment=\ + purchase-europeeap.md.mp.microsoft.com.akadns.net list=windowsupdateslist +add address=storeedgefd.dsx.mp.microsoft.com.edgekey.net. comment=\ + cdn.storeedgefd.dsx.mp.microsoft.com list=windowsupdateslist +add address=star.f.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.f.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=a1996.dscd.akamai.net. comment=\ + wildcard.f.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=cp801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + cp801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=glb.tas02.sls-prod.dcat.dsp.mp.microsoft.com. comment=\ + tas02.sls.update.microsoft.com list=windowsupdateslist +add address=cp601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + cp601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=star.sb.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedgeextensions.sb.tlu.dl.delivery.mp.microsoft.com list=\ + windowsupdateslist +add address=star.sf.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.sf.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-ssl-nlu-net.trafficmanager.net. comment=\ + star.sf.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=tm-pifd-prod-gbl-weight.trafficmanager.net. comment=\ + paymentinstruments.mp.microsoft.com list=windowsupdateslist +add address=10.30.30.33 comment=NUC disabled=yes list=NoWG +add address=10.30.30.10 comment=MikroNUC disabled=yes list=NoWG +add address=89.110.101.17 comment=!!!VDSINA!!!! disabled=yes list=NoWG +add address=wg.vados.ru comment=VDSina-vpn list=Trusted-VPN +add address=80.85.244.9 list=TRUSTED +add address=disc801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + disc801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=185.71.70.78 disabled=yes list=TRUSTED +add address=176.53.203.171 disabled=yes list=TRUSTED +add address=176.53.203.170 disabled=yes list=TRUSTED +add address=176.53.202.194 disabled=yes list=TRUSTED +add address=vdsina.vados.ru comment="!!!VDSina Server!!!" list=NoVdsina +add address=dns.quad9.net comment=Quad9-dns disabled=yes list=Trusted-DNS +add address=dns.google comment=Google-dns list=Trusted-DNS +add address=security.cloudflare-dns.com comment=CloudFlare-dns list=\ + Trusted-DNS +add address=time.google.com comment=Google-time list=Trusted-NTP +add address=0.ru.pool.ntp.org comment=ru.pool.ntp.org disabled=yes list=\ + Trusted-NTP +add address=1.ru.pool.ntp.org disabled=yes list=Trusted-NTP +add address=2.ru.pool.ntp.org comment=2.ru.pool.ntp.org disabled=yes list=\ + Trusted-NTP +add address=3.ru.pool.ntp.org comment=3.ru.pool.ntp.org disabled=yes list=\ + Trusted-NTP +add address=cp.vdsina.com comment=VDSina-vpn list=Trusted-VPN +add address=vdsina.ru comment=VDSina-vpn list=Trusted-VPN +add address=ns.vados.ru comment=VDSina-vpn list=Trusted-VPN +add address=vdsina.com comment=VDSina-vpn list=Trusted-VPN +add address=cp.vdsina.ru comment=VDSina-vpn list=Trusted-VPN +add address=ns1.vdsina.ru comment=VDSina-vpn list=Trusted-VPN +add address=ghcr.io comment=GitHub list=Trusted-VPN +add address=github.com comment=GitHub list=Trusted-VPN +add address=149.154.164.13 comment=telegra.ph list=FuckRKN +add address=194.85.61.76 comment=grani.ru list=FuckRKN +add address=109.70.26.37 comment=grani.ru list=FuckRKN +add address=104.16.4.81 comment=xhamster.com list=FuckRKN +add address=104.16.3.81 comment=xhamster.com list=FuckRKN +add address=188.114.96.1 comment=lostfilm.tv list=FuckRKN +add address=188.114.97.1 comment=lostfilm.tv list=FuckRKN +add address=172.67.182.196 comment=rutracker.org list=FuckRKN +add address=104.21.32.39 comment=rutracker.org list=FuckRKN +add address=104.247.81.99 comment=lurkmore.to list=FuckRKN +add address=8.47.69.6 comment=dou.ua list=FuckRKN +add address=8.6.112.6 comment=dou.ua list=FuckRKN +add address=66.254.114.79 comment=youporn.com list=FuckRKN +add address=185.110.92.40 comment=pornolab.net list=FuckRKN +add address=185.110.92.41 comment=pornolab.net list=FuckRKN +add address=104.21.71.238 comment=crimerussia.com list=FuckRKN +add address=172.67.172.95 comment=crimerussia.com list=FuckRKN +add address=149.154.167.99 comment=telegram.org list=FuckRKN +add address=149.154.166.110 comment=api.telegram.org list=FuckRKN +add address=myip.ru comment="!!! Check IP (MYIP.RU) !!!" disabled=yes list=\ + NoVdsina +add address=ipinfo.io comment="!!! Check IP (IPINFO.IO) !!!" list=NoVdsina +add address=cian.ru comment=cian.ru list=NoVdsina +add address=hh.ru comment=hh.ru list=NoVdsina +add address=trudvsem.ru comment=trudvsem.ru list=NoVdsina +add address=esia.gosuslugi.ru comment=esia.gosuslugi.ru list=NoVdsina +add address=spb.hh.ru comment=spb.hh.ru list=NoVdsina +/ip firewall filter +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=12h chain=input comment="block honeypot DNS UDP" \ + connection-state=new dst-port=53 in-interface="ether1 - Unet" protocol=\ + udp src-address-list=!VDS +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment="block honeypot DNS TCP" \ + connection-state=new dst-port=53 in-interface="ether1 - Unet" protocol=\ + tcp src-address-list=!VDS +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment="block honeypot NTP" \ + connection-state=new dst-port=123 in-interface="ether1 - Unet" protocol=\ + udp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment="block honeypot asterisk" \ + connection-state=new dst-port=5060 in-interface="ether1 - Unet" protocol=\ + udp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment=\ + "block honeypot ssh rdp winbox" connection-state=new dst-port=22,8291 \ + in-interface-list=WAN protocol=tcp src-address-list=!TRUSTED +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" protocol=icmp +add action=accept chain=input comment=\ + "defconf: accept to local loopback (for CAPsMAN)" disabled=yes \ + dst-address=127.0.0.1 in-interface=lo src-address=127.0.0.1 +add action=drop chain=input comment="defconf: drop all not coming from LAN" \ + in-interface-list=!LAN +add action=accept chain=forward comment="defconf: accept in ipsec policy" \ + disabled=yes ipsec-policy=in,ipsec +add action=accept chain=forward comment="defconf: accept out ipsec policy" \ + disabled=yes ipsec-policy=out,ipsec +add action=accept chain=forward comment=\ + "defconf: accept established,related, untracked" connection-state=\ + established,related,untracked +add action=drop chain=forward comment="defconf: drop invalid" \ + connection-state=invalid +add action=drop chain=forward comment=\ + "defconf: drop all from WAN not DSTNATed" connection-nat-state=!dstnat \ + in-interface-list=WAN +/ip firewall mangle +add action=accept chain=prerouting dst-address-list=RFC1918 \ + in-interface-list=!WAN +add action=mark-connection chain=prerouting comment="NO VPN" \ + dst-address-list=NoVdsina in-interface-list=!WAN new-connection-mark=\ + To-ISP src-address=10.30.30.0/24 +add action=mark-routing chain=prerouting comment=All2vpn connection-mark=\ + !To-ISP dst-address=!89.110.101.17 dst-address-list=!NoVdsina \ + new-routing-mark=To-VPN src-address=10.30.30.0/24 src-address-list=!NoWG +add action=change-mss chain=forward comment="MSS on WG" connection-mark=\ + !To-ISP in-interface-list=!WAN new-mss=1380 protocol=tcp tcp-flags=syn \ + tcp-mss=1381-65535 +add action=mark-routing chain=prerouting connection-mark=to-vpn-conn \ + disabled=yes new-routing-mark=To-VPN routing-mark=To-VPN src-address=\ + 10.30.30.0/24 +add action=mark-connection chain=prerouting comment=\ + "Mark VPN connections to exclude from FastTrack" in-interface=\ + veth-awg3vds log-prefix=Mark-VPN-FT new-connection-mark=VPN_No_FastTrack +add action=accept chain=prerouting comment="SSH To ME" disabled=yes \ + dst-address=10.30.30.81 dst-port=2222 in-interface-list=!WAN protocol=tcp \ + src-address=10.30.30.0/24 +add action=mark-routing chain=prerouting comment="VPN Network" disabled=yes \ + dst-address=10.8.0.0/24 log-prefix=VPN-Net new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 +/ip firewall nat +add action=masquerade chain=srcnat comment="Default NAT" ipsec-policy=\ + out,none out-interface="ether1 - Unet" src-address=10.30.30.0/24 +add action=masquerade chain=srcnat comment="NAT for VPN" routing-mark=To-VPN +add action=dst-nat chain=dstnat comment="dst-nat for acme" dst-port=80 \ + in-interface="ether1 - Unet" protocol=tcp to-addresses=10.30.30.33 \ + to-ports=80 +add action=dst-nat chain=dstnat comment="dst-nat for amster HTTPS" dst-port=\ + 443 in-interface="ether1 - Unet" protocol=tcp to-addresses=10.30.30.33 \ + to-ports=443 +add action=dst-nat chain=dstnat comment="dst-nat for amster ssh" disabled=yes \ + dst-port=22 protocol=tcp src-address-list=VDS to-addresses=10.30.30.33 \ + to-ports=22 +add action=dst-nat chain=dstnat comment="dst-nat for amster DNS (TCP)" \ + dst-port=53 in-interface="ether1 - Unet" protocol=tcp src-address-list=\ + VDS to-addresses=10.30.30.33 to-ports=53 +add action=dst-nat chain=dstnat comment="dst-nat for amster DNS (UDP)" \ + dst-port=53 in-interface="ether1 - Unet" protocol=udp src-address-list=\ + VDS to-addresses=10.30.30.33 to-ports=53 +add action=masquerade chain=srcnat disabled=yes src-address=172.20.200.68/30 +add action=masquerade chain=srcnat src-address=172.19.14.100/30 +/ip firewall raw +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-static chain=prerouting content=spb.hh.ru +add action=drop chain=prerouting src-address-list="Honeypot Hacker" +/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 route +add disabled=no distance=1 dst-address=0.0.0.0/0 gateway=wg-awg3vds@main \ + routing-table=To-VPN scope=30 target-scope=10 +/ip service +set ftp disabled=yes +set telnet disabled=yes +set www disabled=yes port=188 +set reverse-proxy disabled=yes +set ssh port=2222 +set www-ssl port=4433 +set api disabled=yes +set api-ssl disabled=yes +/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="ether1 - Unet" type=external +add interface=Bridge-Lan type=internal +/ipv6 firewall filter +add action=accept chain=input comment=\ + "defconf: accept established,related,untracked" connection-state=\ + established,related,untracked disabled=yes +add action=drop chain=input comment="defconf: drop invalid" connection-state=\ + invalid disabled=yes +add action=accept chain=input comment="defconf: accept ICMPv6" disabled=yes \ + protocol=icmpv6 +add action=accept chain=input comment="defconf: accept UDP traceroute" \ + disabled=yes dst-port=33434-33534 protocol=udp +add action=accept chain=input comment=\ + "defconf: accept DHCPv6-Client prefix delegation." disabled=yes dst-port=\ + 546 protocol=udp src-address=fe80::/10 +add action=accept chain=input comment="defconf: accept IKE" disabled=yes \ + dst-port=500,4500 protocol=udp +add action=accept chain=input comment="defconf: accept ipsec AH" disabled=yes \ + protocol=ipsec-ah +add action=accept chain=input comment="defconf: accept ipsec ESP" disabled=\ + yes protocol=ipsec-esp +add action=accept chain=input comment=\ + "defconf: accept all that matches ipsec policy" disabled=yes \ + ipsec-policy=in,ipsec +add action=drop chain=input comment=\ + "defconf: drop everything else not coming from LAN" disabled=yes \ + in-interface-list=!LAN +add action=fasttrack-connection chain=forward comment="defconf: fasttrack6" \ + connection-state=established,related +add action=accept chain=forward comment=\ + "defconf: accept established,related,untracked" connection-state=\ + established,related,untracked +add action=drop chain=forward comment="defconf: drop invalid" \ + connection-state=invalid +add action=drop chain=forward comment=\ + "defconf: drop packets with bad src ipv6" src-address-list=bad_ipv6 +add action=drop chain=forward comment=\ + "defconf: drop packets with bad dst ipv6" dst-address-list=bad_ipv6 +add action=drop chain=forward comment="defconf: rfc4890 drop hop-limit=1" \ + hop-limit=equal:1 protocol=icmpv6 +add action=accept chain=forward comment="defconf: accept ICMPv6" protocol=\ + icmpv6 +add action=accept chain=forward comment="defconf: accept HIP" protocol=139 +add action=accept chain=forward comment="defconf: accept IKE" dst-port=\ + 500,4500 protocol=udp +add action=accept chain=forward comment="defconf: accept ipsec AH" protocol=\ + ipsec-ah +add action=accept chain=forward comment="defconf: accept ipsec ESP" protocol=\ + ipsec-esp +add action=accept chain=forward comment=\ + "defconf: accept all that matches ipsec policy" ipsec-policy=in,ipsec +add action=drop chain=forward comment=\ + "defconf: drop everything else not coming from LAN" in-interface-list=\ + !LAN +/system clock +set time-zone-autodetect=no time-zone-name=Europe/Moscow +/system identity +set name=MikroMaster +/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=time.google.com +/system scheduler +add comment="Every Day Set Global Environment Variables" name=AM-SetGlobalEnv \ + on-event="/system/script { run AM-GlobalConfig; run AM-GlobalFunc; }" \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Every Day Check For Update Scripts" interval=1d name=\ + AM-ScriptInstallUpdate on-event=\ + ":global ScriptInstallUpdate; \$ScriptInstallUpdate;" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment=awg3vds interval=1d name=awg3vds-update on-event=\ + "/system/script/run awg3vds-update" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2026-09-12 start-time=04:30:00 +/tool e-mail +set certificate-verification=no from=MikroVados port=587 \ + server=smtp.mail.me.com tls=starttls user=vadossio@icloud.com +/tool netwatch +add comment="doh-fallback, doh-url=https://security.cloudflare-dns.com/dns-que\ + ry, doh-cert=DigiCert Global Root CA, notify, name=CloudFlare-doh IPv4 1" \ + disabled=yes host=1.1.1.1 type=simple +add comment="doh, doh-url=https://security.cloudflare-dns.com/dns-query, doh-c\ + ert=DigiCert Global Root CA, notify, name=CloudFlare-doh IPv4 2" \ + disabled=yes host=1.0.0.1 type=simple +add comment="doh-fallback, dns-fallback, doh-url=https://dns.google/dns-query,\ + \_doh-cert=DigiCert Global Root G2, notify, name=Google-doh IPv4 1" \ + disabled=yes host=8.8.8.8 type=simple +add comment="doh-fallback, dns-fallback, doh-url=https://dns.google/dns-query,\ + \_doh-cert=DigiCert Global Root G2, notify, name=Google-doh IPv4 2" \ + disabled=yes host=8.8.4.4 type=simple +add comment="doh-fallback, dns-fallback, doh-url=https://dns.quad9.net/dns-que\ + ry, doh-cert=DigiCert Global Root G3, notify, name=Cuad9-doh IPv4 1" \ + disabled=yes host=9.9.9.9 type=simple +add comment="doh-fallback, dns-fallback, doh-url=https://dns.quad9.net/dns-que\ + ry, doh-cert=DigiCert Global Root G3, notify, name=Cuad9-doh IPv4 2" \ + disabled=yes host=149.112.112.112 type=simple +add comment="dns, notify, name=ns1.unet.ws" disabled=yes host=91.192.189.2 \ + type=simple +/user aaa +set accounting=no diff --git a/MikroMaster/history/20260917/20260917194002-Diff-Config.rsc b/MikroMaster/history/20260917/20260917194002-Diff-Config.rsc new file mode 100644 index 0000000..3259370 --- /dev/null +++ b/MikroMaster/history/20260917/20260917194002-Diff-Config.rsc @@ -0,0 +1,15 @@ +24d23 +< add listen-port=60585 mtu=1280 name=WARP +70,71c69,70 +< /routing bgp template +< set default disabled=yes +--- +> /routing bgp instance +> add disabled=no name=RU_bru router-id=45.148.244.55 +3543,3546d3541 +< add allowed-address=0.0.0.0/0,::/0 client-allowed-address=::/0 \ +< endpoint-address=engage.cloudflareclient.com endpoint-port=2408 \ +< interface=WARP name=CloudFlare public-key=\ +< "bmXOC+F1FxEMF9dyiK2H5/1SUtzH0JuVo51h2wPfgyo=" +3557d3551 +< add address=172.16.0.2/24 interface=WARP network=172.16.0.0 -- 2.52.0