From 5537f6d2fab9da283c3fe59cb3e6e1e980496a41 Mon Sep 17 00:00:00 2001 From: Frank Sundermeyer Date: Tue, 5 Aug 2025 17:38:14 +0200 Subject: [PATCH] Adding a revision date to all chapters/parts --- images/src/png/kernel_tasks.png | Bin 46549 -> 0 bytes xml/MAIN.SLERT.xml | 38 +++++--- xml/article_hardware_testing.xml | 30 ++++--- xml/article_kernel_tasks.xml | 28 +++--- xml/article_setup.xml | 54 ++++++------ xml/article_virtualization.xml | 139 +++++++++++++++--------------- xml/book_slert_shielding.xml | 23 +++-- xml/common_copyright_gfdl.xml | 6 +- xml/common_legal.xml | 16 +++- xml/slert_cpuset_manipulation.xml | 50 +++++------ xml/slert_gettinghelp.xml | 16 +++- xml/slert_intro.xml | 6 +- xml/slert_shielding_model.xml | 40 +++++---- xml/slert_usingshortcuts.xml | 12 +-- 14 files changed, 255 insertions(+), 203 deletions(-) delete mode 100644 images/src/png/kernel_tasks.png diff --git a/images/src/png/kernel_tasks.png b/images/src/png/kernel_tasks.png deleted file mode 100644 index e31bd77cc90dc72633eb702a12f1dd4c3a1f1d7c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46549 zcmce;2UJsA+bv8Gq}f0aK@p@WARt{pAR@hY5D2J9Z%Xe(vC##jx6nI?G)*9gg{E{u z=%`2wCG=1P?h5ER-}nCa|Nb%V_{TkCcoLGmch+9zdFC_cTsu@pOZg-#8D;FANb^)~QA^-$%GI|<3DPsD$a7T3ZD;6o-4MH3HwR~rxSdv4Yw z-rn8<_AZX@R`(uS3%I)3rY_xNCLyW0uc~m%z-M?Noji#FbMPWh!32rQTY}y7=AnX6 z+1snmY2A_{ixIZd(YYnB^Cl!#2XgD<)*ZI;iQM5;9Qyr4!mtk8KOdB8R=e>EB3_}FI=xbEHKXf2 z=;&r#u`nI)V1k`C#CJDent0UJ58sKdcYWSwkX6bgVVgfE>y_&d%Nn-D^?UdFNL1L3 zrHEJDIT-)bI;wQeh|Hjs_uH$3LL5O`b5CU~Hoxh+FollRO$57kHNLg={;=VR8ne;b z+eqAADaibGC6l$rx)wj;DEwN`inrRuCb~dw9l<~H##mwvI}x0U-CPt(=1U0oW~o~m zx5ihk&(*kCgk->+$Cv%{hpaI8=(ylvBwxdB&#lyh{U5idchAbDtP90#z9T%X+?0y% zFp}hEt2lspvm-#S!Qs#OFthywYJ;D*-S4M6O1`O(xuUu^lNqcLdc0=LoiD?`Im4Yj zB|O8#di?kIK>g{2=MYkyqg$2a{^V&RJ(~VvuUnq(Wa|^b2V$B#n=kdDmcfp}rH(Ul zwWA5)E1#TuyV*(Vdczrm=#J#cRNSCPKWN($yO zd4G8ORXJr0^(OO49vylEJB>MM3fb!0kX20S{dpPhFTzK&xBD|2qJcZ2a{CxQ!_HbW zM$0u371uu%g#GC2b*=EJV6m^2F|@9sa%6fj_&_EuM{PU&oX#G4_wjZuUr>7p&3&rb zCT%&PbfptDMW(w0OB>8_e&6GwJG$reOP$nG7~aR9uWPh=+0ezm=Xd#^-W;oUETH;Q zs?1tBgNkChXCn~!nZ8K>)1_!+@N=07>-A;05F+I}M@Eouj`Zc(`(y@jiS!MxyPFGW zEbM!qyf-rC%HAFK$4-l}cDGnG&M!)I;Dh%Mp8i>p-CwUFnESQ~atBG8(sd(ka$3FD z+&#aPsPAvudymX>hMMlE#3)5FVsdl7-&sB_i*CQvb;CbEh_u)s55_0GCTju}lkG>H z=sRdMlQvFEx0Qyi$>Uq3j+*~m(mo*Xvs-I_n@dKs6K};7A_!uA|{E0 zbo8al*uqeG{^OgKQ|;o855Ds7;;zl)R_3NqO}x`4_+Xte;awCF(uT2D=f_RuRa?TG zq|~qbCf?I)_c47fx3i$1iifqVCnrh_*F)m2{F(h0{Pqi_y9>f9S$bavI_x<9jGua{ z*TRJD&yS(GvHy>7^Cv!09Zjs)f8!JTpMm)2gujujcS?&XXU}U<|)RqkjHzPMQ>rV8bQ@4o+mb*d7DJjIHYGgPNQ-KVJpMjSA369XC zSV;c&_0Pxu`St(H$N#^a1%=WQ<1iULg#7Wr`^|gYx8?Wd zh^xzZ42Lr5)A_+ltLYc4K@X#~({9{by9hD#Se}fQ6EDz85A(!Z2JeY!Rr>EP)^&hZ z&Q2EvA-ft6_8m{L%3jo=Xb8t`gVwenv7iA?<9_q}by3I`aE|qS;f~DjW;Za;c zSF|%CJmoN|gucK@Ivqv+d2EF%m+00QW*k|EL-+^mZD5xqYcQY@cIe-$UvH4Fqwr{v z%%Gj3J(kh@!vw@>3K@IvUeJ~Iamed~4 zX9h8?y#Gwb`zwE4(wA^X6d^1sO1#Xh?$k?OtxVZ51|2G^wpgwXaO9Y<+}?Uz+pEhV zd`+i#rR}=e%<59a98=OH-BYN}a=+8NGBiJ2Q=*zF+pzsBPTR?%!EfW+2G-J**Rc43 z+ppGp83C)RgrL*1TZpzKp`0SUyf7Z4(xhZ@=M>e9o9_dcl7y@@hO6zJgETZE7|cU6 zhjTpUdc_5`Gj7`SttBe@oVUOiI2G$T{NB_x$9A zVQ)RNL|()86PIodirRI5u&DCJTf|AYTI`PR?9O5vA(?pn~C`HKXxlF?O8t0J#rMZhMpaa4qr}<&X{%QwId*uCutGXY< zGWCt_dwu`#7%s4Nr^@Eekf+aV){D~C<2jX4v2s^di>~H9Fd(>*8R#m87S9fprD|%e z8|ijyBnu~3pm*B$wGsu=eb+i9#wZ=|;|+^47gyphqPKpAFRgKnaVSMR#2*YhR^0g! zchhC0wxhO5nKkg25-Zm@_Hz&U#9M3is=H031QTb|Iu}@7DUPkjgRELTQNU(lu(BLc zvS`pu+wI!8H$cyC+CS=#Z&;GyYRSq*A59H4NW7?D%%I1@V9&mQ$r}WdTu?o@gUD1c z#$30%-m>79}X{f42ZKO4ZqwG}_vl#C$PEOBs zzK?_^3f4i}7tHR(OCD5%@5%b51@vLF#qJMfycY)VDMep$=E$(1=Z{c_iv5PpxS$qm zO$dEH{TVX;NLn?#&)^nyVQ%0AIuK$FX4@onVfWKQ$g$%lbA}I$V+A1%OUQYrbx#m$ zj(S%U;yn7Ua#7s-)w(J=txc%PwyX9@L1iMYeBg76uyy<3eEOZKCeq@7$VV5YJPKJj zn5iSbI)V8O9e;KCwo~A3D!WK#F(+?y2)BBXMOdut?m|_*PL@36Y#}|<2DRNYY6d4s zip(y?hoyEEPfdRo&%EY08(?wxPWix`w79n0_k~gc(+V+x@w$ijrJU{1T-+aY+x_V&9V%&)D_Ga9=4JFRofDc$6PDjT`EGz$RmS zn?m%l3azDQn>yPhUAHv8z7O5_oYGFCq&b&2tVldnE*PE8RbeYlS}cXb|9VVu=?!e{ zz1!4V*vh!7N(yEEY;|^PaRs-i{pwNu5NZJx^S%16#4OIUzDG_`T1>!z_CpJ6@J+VW z8Ojm`%)L*~PfjP>W;}}KDvFgC1b>OJNO|0_9piMQ6IBjMR~3)Fsi+mg7-%fvB`PA7fTB3we_vk>uE7a27OXhVE z=Lm@}9ZcZt?>w505hwg*MB=f~9Bv8w0Pf%3oJG;HJ6Dg&BRlh(;7o2|VLJDEg{vPg zI%Ea>$;R5)$^?-opHChhr>X>n9KjWO65=boL>pSuP+;@yg}g|&*oEfh|2=#Ml|@neb$J6eLAh^DGHHC;QQXRnM}Egme5 z)xqZPI25q9<(2m>smeP#O3{2`z3I~}uuv{0kPb^U==6=sD1trla8SBYfKEiB!t%mkJ?m)5tin;T4&KquQ0X#j|#C+?w*# zg&Zgl>^-AvrfdN48G}Uvc;Qs{VH6$cuL9w>MAxG}=?0J)yq$lIby2tP%NKibiserk z9VtjB8k*O=8B2^y{soPMaeuF1w?%gWPS4?}-mg0w^Ma<(n!vn}Rj%}Gf5MX2h>jr2 z8y{5%R}-(Pt50kSp%|f8gKnTtt9(T6CH{+ldBNJI%2r@+ykFVf>0*~7D4j#P(U5O=a`DU`A^`S2}S zWXwv_tM^79mwG~)F;r|$bz@n}ym#-s&JzpBo#$ z&wdxrXI%U98m&ww9M`a+m2#Jpc4_o|RXW?VBf`TkG{$EPKwC(heMaEsohlHj;BG1R z1bALQwb$OVYKgj|d)5>^3zC}0SBIYM_wF-DQYqK*n`RbQ<>xehJxY)Qpe(_^bn4YP zK?|qMDhCWNUkLzP)OWo352^#U-K1qPq2@sV-5SY?_1J?+2l*=E+avAMk}XAAO3*Pd zu`(wn#shk@S|_2ytla3g;UKMW7(qzL)~OYHy1#>{`%6Dtfr^>pD88)s=B(tHvKq|0 z6G2RE_)XXGdYhrQ)}p8W1gwvUm3*8$_Pk!C*jT-m> z2jABqQf84+5kKZZZumd{PsLP0VV6~vanUkxrz@(ONEVWC-YA$_o9S!Ijo$3Y6+684 z;jkVRmVkXDaw-42KMsrJzu)}Nf56>^XSUEaRgEJD$3p2lMd!EBJpqBlVKdMBCW{XK zWPkZOr=CgQN?_df4)Ice>I0=T@uv?-KQ;uBwTe|C4))=@Gdf4#lD$@t|5KELqWsT< z0986MA)e{pDiA_th&wN_Uf|m>5fVX+A{Z~#Zr_&RkM@j4jgQ!wYFuz}LFW|At+t*J zS(}#;4{o*{SriMw@;~}|>P}t%^vPgr&-(d6??rk4$e`$v-L$>HmH|VEwTszJj0a5k z)4q$ee?Y5u%1)0sL8jim_h29uB^MycR?&CNJ5?3$@(^D^*v!Ch4?4NyXDU!L(sH65 zf#^7-VB>^`$-~4wnShbv5A(*IZWXM{qd#A5upl43cQ)I*v^~shW<*#^n5(iukBsY| za-kX$4;;8gIdtx*2Oi!bGsun?*FWwK+o5#d@!~ebIW9h$lQKNkZY^lqogrvm=>**` zWO3~9Wa>?R&=!~KaYtlC7;DVunrHWOWPagMq{X7sP)vo)Jw4@IvG?i>Vj{9*m+(>v z_5pDX(Hto|={(w6B72j@W5Pq!GZMaPmaf6JtuYw%?Jxr#&9@KQ7F@Y7HEJ^nn>(UR zeW>kYnZd22=zGZ>1n!z=96vo@c!Yb(IyTjp=h_JBeP8!ypegjuqPEsRI^9{oH%}fP zcGN3ScP!UTo&L5#-f13e6Id}3n$F7N_p~V`H_uy`BSH>4k?c|Rc z+MY0+NbnVg_Tf#m)mN*{cRyy)kd2p4CVkV=_!3dSnYcfl<4e|mfhsVl5SG0ieOvaJwJYS+#sTC8 zU60uFr3M1iR~M%>-uQ-1gA)Oc?XoLux(Oz7f5?68s{zZ0_yoKFerx-c{l zR)9wjKQPJar9m#uh8c3YpjK%we8?^JcP7Zz?x6j`!uQ$`HZex>$FxST?$vQ%Sd`~ z7Ael7X{H{n1Bah0VYYH%ewfPRsn6hlt!b0GFuPpLuTDZToU!)jOoVG>1-v+rx5m*S zrzuvx;#G?=G+n@lDsYv)O%wIrd)R$t@rj_{ZBf!gG|6cJS*-CZ?{JlL{>(&+YCy@H z%81AnAPk2fO@8zZs%oY@BCFQfR^d}8&klr~_1+JMdjtjX8v2!GGf=lnN>=@#>_X|f;)6E37u-HMdCVisY>0vhvyZb3-K4s* zW);+R;BW^m%cZwHUG?anmr>tu=g}-aA?%-)FJa1=eWFYZ{^bD> zjIdftWqO518=NbE-uX3Uk^eaDSG}5&l+88np_ge-b;g#Ps=kYzGiZ@GJ^!eUY<<6C z{Q5S#`e1!{C|v66b@FJ4VXl5JcM;7w9sZ%*-Qp2g_8fz&qAvqi0;k`X6+LRZTKVmT zHTw90>tyLzJ@qKKl6c`9I(5H=?FMPPum&+SL$l9xKl0D;Ox%C8Dmtg)yEvnH;wqo2 ze$avKxgk57y&nyuTuJ?b{4sixq3P`yrqM6)ijid+sgfZu3K6ttNq2rsLv)b0nP0`; zSm4m!l5ZJLv5TGJ!u+aKH%I)ydpZ1%hqwBw%kcUT}@#3Xu)*Q_Rd znlGu}^&EBBX%!La)vgN}=DOYKRLdef-R_dt7rN>2yQE!u(yFV5GhtxUWA%7r_2=oD z_pT8m7!1gs)dt!ew(r$f%x+zZk`ulmF{3#;NH<|S$ns{;!~ zkx9~gsya(|lw`O+{wgt+`E_2Ot1P~)Ht}!9vFOcxl&^oHkMAGv+j-i{8lZ-X<<~kmTO<7+KRL>*q(^89obdO~|978+{kdrirTv|GL8sFY#lwkf1d)04^Xc~T zr_+LM4N_hUcD1e(L7l=PHs7vGjCttC(!V1Ts-iBVH;neR<@O%jzkmN*k$!;y4t?-@ zEqVyRWFkdM3vxT?pmxS?ph%4yl$xx>j+O*$uTFnqw7hAX4CvF*h2a`LRqEN!bZO0| zC*)RB05TJ%*DVVqeOG@ejuGl6f~v6U5B^*z?A#$AR_!#@`>Qj3B;ulEuhVdK8$$+w z&nbXNN(LkuR!P-!KhZL%a^`^0c#sSz&7{Z2C{i}&u`lSmL8(I9d#Z!+hVh>3oGyI-`hZ3dUHqPGUhaZ&_`p%a`>LPe^qh zseMn_1?2g{?(7~{z8@>bajrLy+qm4k{HYqrMjEKclD5}oQuXrGhAxxIFTN77)#}Sp zKF!w?y8?bCT_5V$UwCf`z3WotHl?OtVIecZUx8G4nZDzr2n!aJ@4{|Nx=$y~WcZ)@ zGday6Co$v|Dj8ifG)Y%EZ+QTARyOpIjPFuisC63p38=pHo%srhDw_`K?VA;FFI;~c zkxP~-aExM=yQBx5=}4WqbO2^(zD-BUbcX*@r6+Q8*s%lD#bawNQ7j^~w6rU9-5seC zsbIRk?}4#2uD0{lqNJUNtET~ZwB#9UIA%Vq{f6<*XUk>VERy|W8Ig%@e#R9RV@kpeDi#2sG?DV$Gc@Bkj2#~g`4Qe@o{9F@au}4UEt3N=zO)P2 z=zcGCxvlRZ<#06tuBXhbzOoQcAAAGh8<0@S$Q;Zau0qBd{Jo(W&9`}}-v=KAjXb+l zU#$8&>t;y!A8WwCr^-gWNeD$ClMP zk042lLvMr$@P=J&j$&~{dgCu$KW=dLHNEEvO!^W-cR37&q${Y*WY#WjQ_mtZu;Na4 zapU*SRhf6JXt0^*AL>_N@$8_9w2kkUBrR5Po*yWKsixm}l+A~r>l?0dL|JJw#J?Vt z!n=dWgW7n9NAEh-z0X)1w2Hnn1h~I~5zB0U0f-?>TBuTrP^N64pLCYGg0k|6_d{;g zqEZfo6yVGAwr6vqiIvP@wA1PMoM6WjHrt9oCV(mEkdsPIP5dowm5rxmN2gpO+#%K=>Y}7mYEhur_`t0g!3rx2=tXq zmSA2X#lvb0&Swg3aMbimgv2HVuC`qf2Pjh4e@ch88whm515f5V@6Yp=I6kqhnGe$9 z?31>?dPC3z$`ymGtJAXJY`}dS5J`Vj(lljYi7~S_>Zq6;butNv1V>Sk z1k!NPF5uUfr5wP4{!M&`xRecXMq?S7{WoQDLqyjs9R0YJKxbMJ?w+O?zQ^Me;YOs9d`C;`+FQ6j?$W7MC&M`YTUj*9|9a1AJH z!*9c0f@n0J0BZ~iOxw5_u=R#X!X<64uONDix_>BH)lOQMDt$8?>+2jd2V3h4uZ3W| zl8PI>QCj@W72c0@VD^j$oOS9!zOmXWKu+ad>K(R{#xdCB=J@4N;4tG8(HlIm%h^;bOR@7^%X z+~w@`%Xq4bqMPc?=0pLt*mE4N-P4t}Z_PMF|$AX{#k6SvC+EZ?mXgv2zpyp|OlQRM{a9 z3IU%Cv8GSg=hTtj077!JOVJ$Lz4(6BYWnT3@qCG6uH&~*$9ZB4Rb`uC%flnEsr0cR z&JRTX)KHlUk&C${P3gPFiJ-edv1nPb$R9FPWgA^qf?K$VAFSknLJbqE?fX*pb_po# zT*JnR3iv4|;mU8nNDTLHH4Lu=_ z%<=^K*2Hw*#P`#jbUZ=!A5j;?VW%L5^j)`htJKFub(>Yg9*R5kw|ZgJ&xiC#QWYXo zxJ<{FX5Awp@hWOA4CMVmOBMC2YOV8n1zOJ59pT7DF@+Db-2hFE$P}~|D@dOA{K}VI z;;r);%hwJPQxx6jyD8$%pt=fY6g+jK!e5O|>?U+3q-XmsgaMb0&De18#=knW3&6uU z*`?g-(6{J9=^I6t(l-PxLDP&;AQot=*YA9NcubWb z@_|UXs!G^7hi|#a_aR?8X~o+r7~2Y(W2H!OER97!NW-o*KSQEHy+zn{mOz1$voP0Y z!N16$NDmHo*m}%(lJyl?3BT3-`=p&k4V<4rytE7624c`??d0dsvxm_@;2GTJsxi*b z^w{^`=H&uD6>whaBB3nh=u4hcZ@`7ToC;o<7k#ym=MnAHAM5HoucLUI0pr09DM~e` zHHbg>9&%bkLE$Oi8<3W+i#hZ^j23GK40}c;u8>MC@`8joFae-sh$Fn$NP>R829qEp-l>GfV)3VfFUGnR` zlOB;-q%7p#=`S|?s`E^I+#o1#Q09=|C|dv4}*nvfU{lP8wX(e)%*)D zAQ9)PCw9_bGwJpks(_&eWLPaBm^DClJ6P-DjS6)x8{cmr-D$g$IcS%QYz}AOvzgGH zyg$i-h?>Rig#!`A+Co=TGlH4{!gAB+O<1ijJTd zJLIZgEl=Ei9ZW$=4ftsyy#U=J7i~9A82}U~goshuE>3*+0$_m1UP8#>*MmaP*iv`` z|6-09@DLpW9?DF3g5YGqzkjz#Z1Mhk!9j9Sc5dO=|8_+_Py`ZdI&jZFc8}-$9w~(@ z?SAcM2KC)xIe1v<5#Nzgzxsu4Dl>xS1X$aj1grKiX@0zdmj*O~aa78)T_1)pbi1Lc4@X&OVZ334dImIWX<7zYUAU#Bq!6P6WoDY? z=I_4&bn|l>7$3f-xfp>#B%ZDW>ChQBjv;oC;B#QINxgRGZ4%JL-_1S0;Bp;Q43H`M z6(>-dmClP;w-ea}(0Gi(&TQ)japZO^O@KXPWp~ep=t7tS+B)^sI*&O${Tc@h{HEe< z{XDg2N9P#wAcXSxdceTWetG!wGgTai@~JBOK5qZtpkht}3p|MkdSUBw`&&8N0A)B= z>wm;)m@{9$3s;R{f5y-)cksKX4TwspZ;c#Jz>~8sLS6) zMr_7IF={)>UsI{w_@5s`A}EnLsei`)AUE zHF~CdExX*QtZYtmn7S|ACchC>>z8elS!MkC1?U<<6$%_Z6YsWx_omi&Cf$3~3IHzu zV8WR9N^#=3Y~q`-$;{yWAq!$sUz;n)9L`JqoOS!fLPDBFwaqM$UnlG9Y&sk(ckix` zYh7>}eb@6FK(HlA{*85@_>sLn0Oi8{nsjdU%b;ILIAQ}Yw+g`6orLr0Lm97` z-1XbQSr;2uxKN+FW*1DD#|k38tX3R&+Y??sPHn|`#jjiJ+CWsE82j7x1NY8nj3QOQ`upfMrB_jb` z3&6UP3U{;&+%N=sVCW4z49KHq*t=O;=~6ZJ6X*u#km-)p5pQ<|!>$ZrYc(jbCLa`2 zH5^xM+~46l41y+PqDT!-kbB$dbzUfjpG!7#dC&DrGPBDTKnn+EQM)s*EJ1ZI0#r_d z&p_#&@?1$$-g^r~=&2O?Am9<10ao3m=0-!+Xm2oWw~YU0(oNshB%ti4UdixbPk;w) z4%sfPbZ6am9s|{F-MAkgY#H?4(~S!eD>C75Qch>cSYvP_Y)55me%O9?zM|2qOU!ZL zo03?~%Yf@q@F*7P0fTb$?I#=|;19qZEkW?{@C+<> z2)W7w(i8#SRVCA7Z1&W%i**w&d74+Li?0@hG+Xkrv_1H3n`fqziVdWu!1)HohUF{+gEa>_>P8C} z0Bpy6u>(3Z1-h86E=y4i)6XoqN)uYsd2PLO)$`U=z%a!WEd8=&+(fMs!9PI7KsJSiFN6nW#BTXhG9(K z&dHPa$7pnPAN&j#6flJnU7Ef5nvRLaZsUs5ymu{bas|C@yHu;sxoXliCijE2B46S3aGVbK-c{WcPdz5QQ)Z1~tdb z-;{fq?8RwTFLF`!glkJO7%_nMK1lhhnTjwRp#W0m$r6AX%!f#KKsp=#^0Q%5?snU2 z_7G4G-TvU05&Q9OWq;|$_l9B5^o%v&!W*ekyv36Wh6i+vOA%G4{TxL>cElzJ-`RRDN z5rqssCgMn|q)gn^_+`q603PN40s^=Zw7S*~egA-nr;``VL;gwN51GhB-<~Ri{1Z;m zO;>=Z`xjAcpOkeWudZ(t`1gn{GSOzs=zl>3Ktc}xBB5m(yK1}*F>oItqo)VQt=Nr$ zHvR{~JjGv#Se5ZIg3kZjqW^$3@jJ)+loZ7g|HN}5l8SaxaU}U{37r{S=MH`S!CsCS zkT_*}m3NK7>5KvhAW5G+{7eV}D|fwqJED=c4Dv9Dn>j8Zdnh4Rf!bBL?NF~KQaGS> z@Nl~B^9OH5CJ>E6WkAUx#u;5`peE=!BFJO=K`zR>s!Kc=bO&W4TxmN6OmZL|kV2oF zrCl@wKTqWAN$%0>9MFLT6kh*q09+WH0AQFi}u>?+-K| zT>twOv0LPFU6(x^0M0$UFgStu`l=t@)cS>p^!WdtnMOJcK-|%9EuY*uM|2(#+Xe6& z1;B3#wE({zdIA32s>=O|yAcPEtE#?_03>&GDEYb(7$oAoscgAkZ*M$9)bELn-##gD zLz)K7|EEtt=Mviv)!RMJF*AQ5;^k@$fVhVpxJ+fI@xcGjRVY76%%;Bh(|N9g73nVg?RCQuYX>W z=5HgPqZ>r#;X6`b4iRsMI1a>DP9aF-%2@F9g@^_DKfU;azPtRNhLAE(HJ<)^jVp+r zeg8!OXYoq^(c{%GUv5sg8$nTjE)OM6d2GnvE@wl;h#dJIAZ!630Hg+OURY55k86A; z6K$7RT#!OE{GA9+AlFE}mH0c?ZbA3-|J*2B+QfHyK7{VR?4OnrZ;9A-s!JE@N2u*0 z8U?{rUil`4ZtPFPZ#Jp`gUQMU7ide`gR zZo)*I1U5Vn2UZZog?%C}Ry%ZI91goT<9|7T2NBm2&WjEvWRf(X3HSyr~ zrn1TiDwSw?c@AM~A0L5)xRnx1ff@S>qPRRT!hm8+eJO89`@h=9dVczvboO{=9r zWcxmP_k)dpSJ8`F^4Cmg=XfU6uKn(AXPw1cYXdA(ri+~Zi$46NEW( zd`)9tG4DW*~{?zu-~a$ig-_0!;Y;!<9#i}#{p}V%KIW_A-V(QK(fAapzXj0xL z?B0dQIooK*(+dkqP){viWZhZFNiGD?w%^XYa4~fW*eD)Zb4XmHDkMugtb^9cMTaGx z4v?tafOy7c-=T{**Y~_ds-UnS_ia<5NKfx2J{#mryI7gk+D>UQ-V0U2XAT>)fJ6d+ zL4z`3ieR~H@^OpWuGxG@GbLiKEaHnY)KJzp?3dB;5b}Q29)8@&TbzaWDi90?$rVDn zsAo0zq~H5~aV@pW%$m*SK!jNM3_A0%D2tc+-Xa}ds~p-iA+@V;)#>A(aGxp_VV5On zNeI4%+W-fVOfb=3u?^|sm#u(5XMS=-iKs$bG8wu@>`%hKUO|L;@#1)5;!Jp{d6PXl zPy4OVUYLsGR7IF-UAXt9eS{qEF(GkDVmX_;>a#Ia`r5m%)P?NeAf3>}?6~)8^p!w_ zCoNw6;%M+zSFZxT9ia{w zBr@!x8bEzOOG6IQ#79@h2-<#(;kc0!x%5q-Zfv8#T4Tn)EMuO!kh4T%GIaqDtRS#A zho+po4&UdooY)w}3OMea!D6w|8_q(YCZ+>}MF<1ZW9Y5y&i>X$t^l=a1pVJQ47P`Q+u4Wt%OJ+pS zO|1D`+xe>8*2c%%?wlU9ra$gE`Bgz#QopXA^l}r+m+)pWD%IYirG<|SUxx{pRjnpc z-X4AF=?w;Nj-*a9_O_z&wP|TTWJ{tcG+kBYlZC~-Voz81X?zgwp)nLQ;K$0PSe5(~ z&`0JlkT_XE;x)en!9=)Cc_zv67#SFh4baK(7Z|X$Grq}<=8$UodfmP)|K+u0Cu$4Z zb#qnPTl_ShnlGnb0M}Q1&7H|feuNs)%{H(nPqvO2VSQ3ftBH4gyB$R$75?S4kJrjJV|K7V?1TKwUWU0Hs^m5oo^-DB{;J>e zbGC$OX__8?4!1Dqc;!^3yMRK)d_AE@Sg(nuNt$NaAIm5+A-_)NUa-)L9eCH}c`n;n z)MTdmcu`ahNdqAnIgXymusyb#{%khg^Y(47bei$&-_2=yCp1@F_g3sJ{}vukZ$n?C zF?3TAG0YL|3c5gOzln%@{?M?D-F64*|KW?|7Dp>5vBh9uy*k4zgv; z&eQ;GyDY?z%o(tq+<>2(o=UW=6~-;^@8VO5t^#7&{TujUrfaYkBED`nGBKO{cYP;KbHyg zSlW$89|N|2yl_c3@D^-|W|aWKYb`-fh6@RZ$4VK(fSK#ijE^rkxdSk__k-u(6K(H& zMx}4uW)um2xT1mu)bY%-fG2$8=?4gdN&0Rej$mt_4R`okHY9F=hIar`bs>|_xV*Z{ z9hdKB)f^!-)gE6(&|&F6=O=KuL{uOf1Q}_XeHTCptxy#{Ed14Bpt{V!qpx;aWVzyQJxnq~tSaNyP49VjvG61DH; zgd#tO3!?4X69w_@W`LXe2DVXXPBurDsqBHKRpRadk*2TGN?9Msu)7-ZC15A$HejU8 zlV2;;0Ur->OG-u~*gEko-Fw`=s{~~lJFAFa1Key*r+oBj0AU9}c+{3Oy2(g1uu$Jk3__rZ>up$Wi5y$B^FxWiulUq+qQx zblpJd9ci^l6o5IQvtzPe!OJZhW!bcQhD~c64$1J>Jo?RH)ehPEU^CCpBD=C|WUOsL ziN)D4&d9Ue8rS;@w7uilb8+Ry>FK-vEqxZH@Z-^+(uJ+V=6Z4{i1QAF8xR2uM25H? zSoDvj3BaVh7xJ^CaI&nz4_>yVN>oI?0wOAqO^x3+^JHj4pS9aBYPX{~`& z(Sa)9RkHcLwE`jh2Aez?XU=y6jW4yLabN20iDF}D2$$a3n*PN@o5aJWiMtP614C$a z_lv5JLx0liXb!|gNREx*Y>X1C>-Yjd_29x-&rPa|=FHO~)U(Ho3v7YSM=8L#_TEaA zxJg=vEAtf22&<5-Lt1?2d#4Cjs>JBSkP$@~*oY-U+*|ki$EO$0p9g5Wi9489lE-Ir z#+6BV?fVDSX7igcgRk`7hP&Qnza$~VnRIzRGi_nFSx5lbs2 zvCUrTW&@E{j99tKjC0+XO^XX}*gWNIL1vHxM`~CSuKt%8h&V=2uDDnf2!uW8Xxw)X z?0kKc7_GWn5!Inp;sVAATb>>m9O;Y6y}HMg2v?Kk`a(2_(UnL6WNsL|r~TwPom~x3 zS7Kts^EEtnl3H~iQQ7Sz{T$Ldpm;PO_9ZMYzlMY^W4$M)0j$x_{0J?HcjsOa1U}^g zZQg}pDK8KCco~7tFoIeI^no(wGan+9MH%|I?8aFZtYSRxdD_L@ z^@XPtyR5+TFQTx0Ey*mM* z=lr8-vxqc6wXq=>!)+c@;0wtp?XuaeA{uAs4!*N&P!^>2Dl5wRAywQ=sn|wIag8sI z7|#YArzrby9sM>LWfkBAQGdXNao$t*Op-)RC@MXfa<(xM;1xeI1Dbw8OZ3faT}a^n zkawA23InNI_U>5EJFrk$fd@2j!L`ia6bPiRM#9(;X9}KXMAoxq9?~w%+|@p)s?R#| zIbw2P8}|8%x2B8+;hmYM`ML5IWu7I(FaswMN(bOUl2<@VmU=rsl-IQcsJYk-xWnEz zAT|u!6%4%dST3i)DbUxrzZ&?^@0U(-`jQ8B1iV2S`68nSW=<&4R0;wIX*pwYjW}Tm z_*4Y_1R$8<%wZ$_xTITQrh3R?A-FC;s9I#?Np*81B7`jGC+ap)G-Y=z@vd>6uxWM6cqo+%O7|LNcKzM&09-ACyq^ktG#vrmLw4F z9}sk~QA(Xbi^Gz3z)-YVSEU}~rPS*pKg@@A8AIA^E&tdIh`uDVpd~vTszT_ARd08H zbSnsZJxU50F;ge z`E_LHP`JfSpdD|Hy#!(Uw>M;wP7TVD9bnz3xV^+4qq3rIxHKztwUVkZI{|Fod#kIk zvQX8P0t`bfbUJO>af0;xuV49*8?4SPIOVq50IhXFKq<`B!P3tb%bHcb2X49v%Tuosea~$}@lP7$4$82*MJprt(6vlPw@DazOzfd==@qT*3+yKr$MriuV?P z#M7(mHF(m6P@MJx^|`L1Y=L&>QhqF#`f$Sn2<;8-z}~$mo||n{W?Jh%Q545sJ-%Dy z4A9dr>OyZby-*imSYG(WjS*3fx>yU!e3Dl>q|9fB_C5CTL=#kzP8BkmyIBYkW(q|A zzR{rFMQ*S;ap{D+GL*sdwU4BKtF#Bem{4fL*l;$Gd29gw68~ue#7vVee#7E^N%Hmn zB7JV)ZLUon3rB9TK!_NKN$CF5JHW~e^#iU~kg+aj^`Gz^lLqs5X~D;HrDR@aD~Oo} zut>`m1mJh8wz2~2(E&W7qM4JE1g_4GaLE;MJ4fVSIYHa#s))jToXsWw1tDo}(RVbm z+}zDd$5^5+$v8X{kR|1PgfVFY&pLQFBRZ!l?2Q)i@r?9G4KhT=dw>TfP$j^n>`vGM znBpY53Z4S6<5*w9Ey|OPW1|9&UzC4op({{n7dcDbfn7kW#QptaJ1I|z`%Q@@!>pvv zYh5b|u>rl9FQnwugD)-Lz#TqDA`^+v9YKv_8p=b}0cVqyyat>?*MX0@vItZTMp9i@ z5Om6l)?7Yx){%sBz@Mb`)RQL=E zziZ{|{W9v(dwm1Mgi@a|v-ya(C(e?5;5w@lTu@~-Xag!KRdr~3@^Z?Q0MpHf-=S%s zV6WZk)0T5iWYc?~VAI&)zeU2w5C7Cn~7Uy!c5#`8F;fL zQS@;M+P$B-Wx9YV!m;>K8l5Kod@nF(x0pU}`%%>;8y-IsL5o>c3p?(g=;@YlPj4(l z7u#U-0fb+oJt$|7r3^&l86a-}8FKOyu;-E51gn1xkj-RhFJTGw0%mIYF#BxUZnspW zbk3NM>Dl7Z=*Phu$B4C>#kG{hGV4U5WS*~)d>_> z_eGJs2e=pEjNPrLKu-GY4sue7KJ*!~72s8;7C+gIe*IA4pWc$)o!aAh$>2#sM|&F~ z&q~e_3+j*Ydua!S{l#zW_Q*Tc_@P1H zAi-zTE6x=P9%kjq6<4S2JZULCD3j>=y(9m_veH3trn2AgE`3J#&2i6bvK4Cw*pikx zsR*b0^NVTNN9cXeW99#gt1pj-vj5&Uwh(#>38A8FMfU7dvQ&hKhb&LZz9suUX;CQc zc1C2WkUhCT9Hj9n$hzJw8Ce&?;8=ktC2{>bYkGjrc_-|zc<&biKYT}Mo=y8Ot? z;e!Ix_W4~QRdyz1S|Q&4VJ(N^61&s+<5MY8i|>ynnt4y=I;6-}7_N?|B8SiYdLEgM@EZI;V0&d=p&sBX4(7{60lH=`}_K_AKsvzL;QQ zetiko0ip56jP*v5DM|rLoWA~Bx#m$oIuGZb!qtl)h zg$!DS~4|vUa!R4q3(1I@~iD772=CDNRz$35jf*3x~TdiFZTyiWAsP zNy6GYH-ig)a4|prb?S$(VdS>}p}U`&250n&jdp4=XK^fpJ>sKNdr0f+MPW(MZ$bEWl0WKP3_jdq}A6bmZ)v7bSXdVh^lHTmqL zbMLZ{URps}+~u5eaV}nVGIpf9SnStNT*SDK-3|>n^?w)2Rm^!((aFFlJ{6+$>eC-nn1C@Dv~ar-XACzXeKSM6kM?EfO^$FHNV_TjYBmO=?tIJCScu(BqHouBJHAii2| zviSNVcQULrF(Bi~87+l_mmf;b#Th_onjyURFQ83WxHUDim@jd^%Xd}fK_}qoU+)~z zPq0;TTQV9PLlOYxE<&n$#r=hRr5fDs_<=r4GttUZ$%=~;lyczb$|voApGs{ujCis! ztww0%foAP{E-}1OwW)*O35!2ijP*IplN+ZbWrx3eiA?EM{aAX%^|$-XJ_);rn#pY% zZ>lBmyawVEkE(7)KCCyx9>g`~pRv11S?f(6Sd6UBY~Cx3e-deN3OEIqjW`}Ye6HtS zs2By6Sari%eE21IC6!nB`Tz!#U9T3BoQ3YZf#hAJB%N0y67hV^>|5{8nH_EpIXe> zw=fx>o(^R+$93OJ?_53b=tA!zX|&DRA$f}5JL#p@@_pJD4rlQBN-DQxALG^p1Rc}k zq4QNJ#imH&YW6*JF31!c60_rIPGM%zjL<35!OxscT!xDDoOyp^?o!H*RkDw3{zl}+ zwM6b-GVyM;dgi2MBVpN_aB|z@%1~3C#MH{ByLmL3VhJ7EoCht-l}$??s5>0EXVo`8 zT~eVt(Sr$lsZrFGPqag|!V%f0nIrmz;AW?boq}FEF4(>C3KOV3_JCX&R2_eaQs=I{~WM6to z$J$x>l{+uDBy_0)Vj#zgc6QoEvg%H%;wej!>0}x7d@OD%K*|bBg&q> z$}o?&K%REM4AE?}>uu^keCX*V114Bf^Q4-(8C2E`IQaArU1;90Cp21D2M3HSuDX7% zNJb(bwJhmms9}AYzX10rput|Sb$No zTw`N^$PsU7bD(wr{J3)ighX|H`GaXd2dtl4=?8k4ql$jA*B+=zoPZ5?7!$HKku{U2 z1JG%tUr0EENmRE=Fd$P~f=thmdWFdVNz7oO-FB;aKm|Y$eRqMRqQdMXkFFiyfL)`> zAXlsWCm1vhN`Xt`)B-<|D+*88_BIqr$zB@vD;y4rC?{1*6nfa@>NcJ$6+R`}cYoLE zJ3zE!PCI!(n8iHs&N<)0GTq1&zs(q>vLFXWP1#tUnmO`fa6&n`wcO$CT-DrMNb8tQ zrpO+jxgoWoWhKlDzBcfLB|q~J538o}DLrHKQYUN|o(2;sp@x+x=c}h5SD9wR(GU!A z)eH4}nXr;6QKV=?4UA*CyDAF=Rm@Apchc>AxJ#JXp3aex1*5%W{3gyQz6M4|pQ?tQ=ZsT2ZoV3umyp>7DqB2)VqN0Za z!}i_9X6b$tpX;hYpVoW~Bd!*>bQGjgWh?xI$27=Q%1Q^|;F-fNfY{H3s3-3`k8|c* z5@569&!_1sRmvB`GaKS)>g@iS^|9ji;>%p=;iJJ!5~sfc3G~pA&|jf#w8xiE)8cus@T7t)0~(HMCWUGvDE@%SJ&1l847mh3_Y)Jgc}<1^u5N zqn@(|U${jQ1k9nEL3Fv+uZg3j7iEIO524KcHONAq8L z#*x$%T`phtq~+X)g%^q)zzPLF_qwT5E^;#BqZ6Mn{WuplUOMfkPF$P3vRRAF&O1Nm z2Kmg_r$ew-MZHaMWLi!pecaQ-@%!ITRcI)m2))C+R}*L5jtTVrIZ#>q%rZGoDX8K@ z*bc*d2lgPIt*>!P0C<^sPumw3LJWKU!Z!+GlXs3$SNk}68ueSiSlAgg)%kOR+O>&bpBYIM?&*&YSi>ejr8BeDqJZTwuBohB9Ym?PN1d~uj+vzzS zYtxJu(dq3F4cF`}I@U~HfVYg(F0Iy1wFEVk$?Q3$&SYr$0F#hYSb60JX(RBT`zL>@ zW-e~5Bv`Gl)K#9Pl?!0ZzBFZ^k-)c3iB#iT^Ls;Dw)HnLnf0fW`(&(k2um)Ay+#$l zvubB=gU#sxc2QgV)`aTYaZj0}CnpE`-o3J*wgjMWGe_eSytKM&#Hm-<_qG7rV)?oa z$khAZF553?n-)>Y!k^Sq39ObC(h;U7qcz^-v0vXgc^tNoZI0r}E8P4XDs;8!Ch1et z0pWl$mVZ%ZCO+PY|AE}VPk9h7{vhS;RykRA`Q8t?{aDPtoBObyO0=D_GkFyi;Y!U@ z%oT4%&E!*gl$@R^LBM0ScK8Q(ODkZAb+O#W)^dOCl*JWk%w&(>yhF!gS{h|3>Tk2= zIi{7s%*zW;@}22Ar`B#$cW;9S=gk#d=nq_@uhny<0*|xSIc^d~m)cUItR0A~q9c*~ z+#L9OU3}f!hRMs*KSh*P8{nbA;tt(GT9ROhL)^=WoO{8EqXK!advWC!3>y?Gu;tqm!JYScCo5P|Y zc}U0xPhU4khC+-qASd88e*Mq8Gn>t@8zuniB-}U$cXBup6r)x<*D23qtz`i2shK8& z-soicc)`A-M+?nz9M{wp-tSfSUHV4%*bAF4${oa>J*{-*t+$}MFy*V?&FSc9qtQrb zLcBzUctce+j=)M|=7e+3lpz8^-wosv`Cir3nC(f!evk#9+-~S##k>qnRb+*0{dtam zciIkk&zaljKLWnl5z=Azw%#E;}YJ%_)fGg~!ZSSln10&|tjf_%%>| zhCwV#>dO9Im;@QxrISm;(X)#Ql@(HyS7Zydb+s!5dQmXS!c>6ot1+0qdLb+q9B|hh zc3dcSyhtahsyZMCJ*DcgJ&--1#w;MxF*(59kB5HXg1_qKs7KYpEipqp4w(XbmRnMS zM6hr(+#q58tC-DavQrxQQB+|-mta2AqgfrD2?l*L2YSpOQUWtXCWg05YUIlgK2d4UhuuFHhpP& zMAm=)AFs6~CzT7CKaDazAyNg1Q5+NiYOfhCbxRb3U@8V}#f?xf$v6ZOfH5dURvKI( zk^Y5QgCe7UMWtAv?%Xtw5<~WZeDHciFg`^=U8-t6oUIsiQaxURT=v&c&Td>2x<(_d<6Ubvjg%v?uw32iHA3+U$=WR2wL~3 zd4LHWnmogAjM*BJpEz%q^K58bJN~&eY|dZm+yU$( z4_s)GU6GT&PHfNDRWtv`K_~9LI9Qalt|5e0cM0Z2ylMktrhLva@BljwTkwu?kErf; z{RX9o>oKIYJ3i$PXTO1Yq1)kl5f2U_Kj{!U?>p8R-)N$XJhT@C!b!g4wi!LLv1?Ty zn22DNu~uUiJmuG!HkFkU_z5uFL*pCN^cCPj*Eg!F`{5Hsp z`ts|s6451s-?kgpIqhrlKbs)eSf9JezxUXceU9ZPlyYc01$i8H6y>o-bMU9|t9vG` z&U~1oca&i#ZbY#6Ee02vMn?0eMtNJ$Gf<1ZF8`cfPaoJ0A^pk|21nqAjNGsRu>MejGgoQBD5Yyi~3@PU}f=$Hx5~QosH^hZ5w$vDG z1T3}d=(nY)T_5TIx&xl3tNF^lx)S@?WEwWrEaUZlrP2MqI7o@59o3YZ^Qg6Ws!$q_ zT}v?IB%I^JZI00<7me~H+Y1UbD0e4^lT;eqxiJaBv`ear2~inJ;c-1aMP$w7z{72R10upxNfIS=bS6cwkX7qc zC+lFjSgLlcX$)KY~s2M@dq^-Fwi%U#ByXeX1NCDu!7Dd+grYg=+18s0C9I82}EoT z>Z{*5s0=EtbsCZB$Ts2DmrF5f_EK_JX-zI>>zZUtI*6Q2atv0tNqYGu5tM6f29|HG zd{v?|AwPs-rOWzu#*E1aNU7UWV#Q#8EG65wrfLk=C#jQ|4R0peU-fy{0s2%aajcI| zjU@K-P4kL|OnXb8zPI2`!fsj5*ZJupmm$ zKV4VrUWFf_?03BR=$i;-|HTM)5Ft@FDD#AH{i)Bsj6-XuB5HlEJ!Ws3df}Dq$K&5s zcHoRz0Mbi(cIWRww5{;gN)tJiDN=>cxaEV)4u+(cpXu`7kbLXdb$H|)@AsCtm=Rr| z2c?L7UkGbfSw|5b4LWukZY18Z)#Z1K&K*`}Q!OP_xO8Lh%De4`9jWBX!-5Va`~ZuFbebW2x_$)R~CF z&lk`5Fe%Uf(ic{1c|2L2l_1ug!>KHnZ@k^R?}Hs1aSuwEE8Jq#UY)^Ndt!LUe5e8& zbM_zPmm}@;ikG#^#kZ2CTQ}Upyu~6y7KSJ8SJ|uibOiC=icu2^RHEw?Jg6Q+=1rB7 z4eK(yr>AcApt<_$D#ylfi3WBswICJ)MUCVI+_%XzFWpOd&urcgfyf8y4k&Ek{3Pzo zvVKujegvtgcy{l$ zN1b?&$5PN@E^G58rK(HM{eoX+dq#3bYQa@ynyQX}#-~;CK&y>ktE!8*p=kwj4`2>nZd#T0tXiPrkpH>iGrtr z;tyu|c{f~;16XhVr8eB8Ky09D<^iLad=uQ{#@{RULM)0d8c$kM)sR7%P= z5^7C9#f*Rk8d|vzpnr5kszit5bQAGQfdkJu@R3bFMX|}`w`We!7XR}u{P@%!_24&b z1|nEkzkJ1(ZB?YUI&Qp0nPyvoUw5v~Qwk`19n}J#s$f`7ZgYJ6G8k^^=+;fubO%>x zh3~d5gB2x+ipfS?)Jmi+2HeS$R&HKQ1Gq@+EQaJORhlu3UDI&r0*|Np@lA+Zz=sdC zCurKBA(sBQ${8!ALj<(n!RUHu??Ey)qoWMiU6rqZhr+XRo7(l3tyFuKHe7b|x1>rkK%?Es{ zZ^nhb`@Q^(4o|)=k^I)KrQ165z}wvs;#}LRmva79$k09ANlTr^2E9HL;>+N^oPa1` zb_n!U!b#|PFn>^z@C_fOLGpV0h2h0g~wOxA(3#h5_-jLI$ipcBKirJ+guJ}J-fDn z<^OX4CC*S7X%HL{DIELUw)`9m@o2sSR}dY|pMoCl&2ij;n+(~c^Pd?V9|y_*|9`S; zob_cGTkn{b_LCcINU34 zdU*Gua7GD&o$S!5L+QT{%fpH=lXFi|g_Xi)*rtrY78&#{v>rBn_u?wROnQaY0(NG| zh|Upx?BjQTzMP|--`6-VEU8El_fip?s`REly0<{}l*Y(J$jg=~UrCANRy*R*cs zbfc9`k5AW|nL}Y2+9lQRF1M!CE%^u8hL61GI!rx58%jRBl?@2Q< zej^nN?$nmHd-FODgDHyrq~Z{sq8o{Qe!fR9g{~=T7jb=@qL$Am_3E!O%C}s%3H?GP z(2*{@Iicj$AaQA?@Iq=>XP)d8If2ev$*7OXwNzR2A7h16RqGpMgs5o&-f{VIS{%*b z+aa2VHaPWS_Y^1Ul3~Z%1B?Rxv`JLquwO_(G*vCZ$K;JuK;P0t3&*h3g4C4i>O#@Q zzE{<3Z3Cp;@;T?S6t2g%95tA=ycm1lnbcWb*7(Kx_=BfJqnYlag?{gkR%7)>*Y(z# z<6S$&LMv;OhTJ_?ZR!>T_8(Ry_&pJu^y+t9E_J$W!8+#>?3UOwW2~!Ol*990 zCJ_W?J*gcE_DpTASGlBI>-m57Z6^Mwv4RA2ixV#=X8v(1d#;s@|C3}8ZV{i zJ0^USojzyD2Att4N;RL$yP$vX{pyUbcd-32SSpWc>cZHGEL<#r`)X4d@BgA*8aA)5 zQ^<7oE|+eVsmtbgxR!OI$-LX~OEN{?!PM|;)`~{4ySpLIH)z9&FO=(o!fV+y?jpB? zFHDOyUd9`S46oGYP-Nw5Cx`E?SM;}?`>C8?5_I);NbYFu#`SK}T6@sURHV5Gwy8UR z%*MLJ_)Mjx=PZ4;t!a~c*yyRS`^uQfU$fUVF_RT(l$r=?n1%b*SW#OIi7S*RzhPP$ z46gw$Frl-k=w5p0-_Gx^UX~}BuB^olF1AY?vbwe88?fB!rkC1lJl&k3MlZ;L*Lr5@ zYid+!}59BcEV%C zZ1{^iJ{^iOW}^Ny+rCkTYM@)mB0%PjfyO+@u~Qu#ZTXCe!Gr ziluLmeF!QxKPZC>lg60?%kugO-cB(2Y!Q@jnADG>B-djQVx7|B5%LB$xRnBx4^nV|7y=uElSnd z+?8vivaNi0p9;U?{K3VAmk>7JjI*r==DN>7krx&w;mSz#sHrNTvo# zM|_cg;q5Bmz=z`T+voJz`IehSE12bAfb7p%<96qtd)K;KSvHtgc_1&!x45d8IOK4B z@y_w%MZs=5JJ^-CnUK}Sr2KN#EQhJ-PTVDKpnkf`T;@09ni+07yiFi7MhffGW7(gQ zb=gSvpLZ?_hq+P%&TyCYFT9Oh`KGo_?#c&s_#rHZ)p7sTBM?fOpm{!J^7Vl5UwC@a z&6lq~O}^@we(IADn>ll-&7kV>Z;CT66@NDhoQq+X$(5>> zUTd)1Ozk-QEYF$bFfQ<{plzzNIkS8HL+L@!P{mx4E9>5&&R>3<&FBYZpYYFK|Smx9z((|M8=$G^XMv0rM9g!VpBbB@8dulSGu< zY(<+ldogSLs3E|EBH4jPt)HjK%0YsLB-8(*)Yh71g;xWje;E7naSM+ZQz+m6d5>Mr z?5C}m+IXGXq{AvL+2Bu^uP@v>@f$Q7DFlpVQr3=KDSh};)6dn!Tb{H_o$)n1(ZYg? z9C%%NR4Pbg*64!h-W=nI$uI8?(_JDeGYT~})KCL1*l3)E2%EMSecYEH{+mDRrz5X% zv*(jv?>+IYD}A^=h<#iPg1C_L*NrDXQ!$n=T)~wqikUcr!mySME6U=a8v#GQs1~jV zn{(kWs;|VLKf*VoIVGvn_0ZfE7igscX)}t{TS*55Vw!VLE#;d|ieiPTX8Hep`Bu?D zFN%A7u&jwoz>DkG**~oloN%n7j7&7Tu<+I^O0?eGfBG!g&x@-v{WQzvenqnA0FIGQ z>&&X1m#E`MVt7V-gtjshs6#SjbOI7S?4`&?8c~?8#GB-&h>dx8?ogrA4Zu`@(+&)_ zc(GVb2Dytp;E7`Za-EtFMD`eq;JA_GwF-!wJs@uLsb#1~W)H2aJB3o#0i#@AOXKar zgTu&?jYq*XP6_OaHv$2upclok?7O$srFi><3(pb@?W8zJZWlH3r=UwKj|$v?;YEb= z0{_vflRU8jDIi5D)(_knqxn@R8XjTb0Nf0Yy$Pc0;2-m9ER4Et^K7%S56qL06%KVB zkflVZLwd7^!TImhqeE;cbv)*W3#1gv;v|HyelvY`&&)iatLYHBv1~@20^DC3$)J?L zm5b)G$+fGJxbTM!0ENb;GKKLX?GhG7$h;`|Iz!RgT7sp(g%K9kdj-mp1Gv%2t!kG(P09-Q2xWuyxiFFyM`@7g@_xMeg=6Ea&))*Gq{7}@)| zo7EAx4Zp4h0?5Z#*6*f~58di95RNP`X0yxdXlo-y5}#k$z||-XcEF8}cY}rFdJ2$* z6Mn5OCPE3bPAc(Vur&scoyrtQ>=V(bI{?KRn2B)wet%T~zT`;98NQ9YKE@4efSXgo zlGiM19yN^?)-*sHw~Yr6CYADFH?|U%|4-K@NhA4o)l6x>9yA~I(@xx+R!3t2TL3D* zSVOuRa*I+_dO_o*9a=l^06o;lF=|JPPIAVw=thLg0;sNll@CHnqp-iL;d&@A($RTC zovQE=jZmB0?=OM{rnDAcZ0oDbAfRdiK>r&X5elGH2l|p0mTwUPfud(|;+$Z(H<@Z@ z34{9X9&b4-?vEPM>TBadR0o8-E=~8!iegJ7ZVSjYUgZtKA_E@eks3A-CKd-I77V!m5&=HzwlB!W9E8)-L&;X}Huv*7} zIidiLm+Eu-fA&Q5_*{Hw&kQ#zi%#?&*Uf9ixkw#{=p5GhijMK2+7WfhG;UB%0eQud z_|?O~)C)vpn?}&yy7;Hnch~ zpevgg`Ry%@PbjyDC_l8jUq{Sm!8nRkPc@R3ZeM82I3wem)=C)8cGt?_3-J{>+bI2) z?AvQ(7yFO*zb0YUU?prz775aSr8$31PUzLfDI7F7H(hYrmWiLlgfda`jWQ^-?RbG}t6_3Rg588iyw*DQ(> z*VJfhP2SBA(-r_T?ce?e0hd9aPJDSa8qTnNTK%pRcB(VylC}R=2I@*=`whnN`n!CH zn#62K%lTF-$4tttdH7q~H0zg7Oor`s@(Jz68I8c-ax0#g|8awv!}b2efrI3|hE_@G z+wGP%^c4p$>wHndE1R8*xGOKa$N#pvFK+Tm4g0$(FFBQ*C|6F81%_<)bT6Vpy)oVCG3w4X zHkH1)gg7Vgw;TftJeeaF#jm*yoRSk}I?G@7>GYKX{cB)|R}A_*uvvs!*DO9VPexBQa6BKjC!$3fO!ic$S>o4O82Zhsr`rh4m5)dHtV@1N#oMJp2> z4b>X+s%?N-ij2Re!0yuwUhLBpl`;>OD#GIfhEweqSKsOegEgg_>n8{)9-0G6isxnD zS6r(OJv+C(O6`$-pbhZrf<~*}pQ~9%?opZw>dFx&+`A_T7WwK8O5ErB`PYZ_zc5@> z_AuT5N@C6@;d-cPs^DOPjlQ6i94E zb_jQz=jwhP5wJId>%j!~{!i?MSBe=lhhSq~i{Kvf<13U1c^Nxy-rUaJ*ROK$MxHw< z{RGDevq~y}V-%KUu&=8xf2a1ly2sEiu{;ZMo%B7PhSzap9C|SxoN18iJ_**)_?5|& z#EQWVq$30(;LJ?+RyY4Dn_>RCXb`O~5P;SVH(_wV@s;|{miFZJ>&gfwn+wWGESn;< zcEoyXoFSh&5y)6Mo6aM6q#qpHHZ11+1XcplXu3w!%Ai-Ip$K%G!(`z3{E88}3lBY0 zSDVXj6WM3imVy{J^ZFEW+g3OBR(MvW?0fFR4~F?Qtvz$?Et_cFW4|$uYrwJqFhAx= zXS(Qev4GkUT?55kYT}Cs``MO~qMac^bN)#0aHEZDypkk`Rba zF;LdkkB2dgfkz#3f8G(Omu2$Ow51AS2E}C%rw)RZdh%j#mi)xnGP~MD4(Nmr!A?pU zTV1Pyc(ock<)jUB$&?&$9Iys(XLb-}+eh}mMcu@_=v7fu98#j5GvIdyJyjA-7snl5 z1=sP^gPk2AOH9pgY0e8PN4$~mhzCEo^-e*NdCpg@9Cw#K98^o(Jb`)9;5k{4*jk<# z*?2%J@+X});Axbd39VNd@CQ7h>jE_$h``_9Dz$zDw5UF}uDQ%Cjwc{ot!|4C=vqNf z1UR8jU!UDeZUy;DpLv#!~K((K-Fryokp`+&thjT9^K=qbMoLyb@le) zH{a~B%gugTPg3+}Pnu8DoPQ1cBh_*85>q2=*C`@%#KrC`kW_$**bZRSsThTbl)BI~ z8c@i%CT+i`eV2E12NBY@9v$1s_PACswS69vvQbWJVksF*_;`Bhn1Ncjv9kC0KMuNd zBtO(jSDAfND~LRdDIQVZ$b07o_8TtkNBmKYs{yV9y zOK%FLXz4snSjd)^w`JSwa1}!EVd70_1ag)-uvvZAIq$-ym4ygUl&|P9G|>6VT()&> zDZUlN;mah?6Bcb1q@wAUCOPl5bm4Xjvl4B-?J#UR^3}S{iy8wgmtUab~|GgEib$oE^|US$X9?f;)i(Wxk@7 zpr?ydE_#Y4dq%WzRV9=!`KxlX5}{YtXE+U8$i@KN@!lRUT5k{)Qr;g*j><7N;8!Po z^|6xksit`XW{G`F-P8G+W~Ea{*R1>o?MS3713_b$U%Cj}da5keXB)%FgtWDi9joaH z%&bdb8o&UD?fS-Ik(^o%4dwMva%9k;MPs~Ow0>DgAWQ;wWu08Y0co^8 z{bCa-alq3nGOKl|HyU;^U2@K92$`hKlh}#kfS5R1$-})IZ@W0~g%@iX!H!<419}we z23CXYmkhLsVoY0~=tQ?<00f{lTF%BDTW=J@8feFGOf&xpC`@*^&37q))gt5qXUH%v zh(gX5qJ2XdYfvciZ=f;31a2V;Td%v{&NW}LD@6^eaD+?2$wTW29WO&QkmaGfcH93x zk#XGSe+N5{+k}(<9jdU|bW0u-`hO25jtv726slL@Iy{DbB{0d}06rK+HLNJz5^E4G z!jR!fKEZ`=_>GyvXEFKUHf#TPG=_1b-%T_0I&QqttkBwp%m04NR&Z?W1|E3}irYY@ zzB04|kE4w}czKTjErJrXVXUzot*diaq2&>AiB=8(dgvk7Le{1C;DA;%X-Xc95&%P! zlZHJ6#1!5u>{W##p`YnK_6RDFZYl4ov zG|W!_5d)Ipq3xsZUft$`kyR;7>@OSKBE(aPxyw$x= zhZfE8xkPZkbQ-MiNlI-40w=7DUHG@>Iq)-m&o6pFizloETteX~L7*9RYu7O110Aun~1l3N3N zhnYgirPkWkU7?Q7f$25zssV*O^3IQQjM8s4rl?i25!v_@;$YNx9QalgYNAgDh~qCj zc?DS?!t;FNBUMVG z^?Ls^t=y-Ow~X0svG)*il=f^r3_0`vg8XNbM421*K&?FBAbnsz0AFd}%{JVu2rR~> ztK&Td>4aUIkiHg1jQcQE!&RQ%gBD0$0*z1kXGBYtdki(bokzQOhrVL`(<2uW02Nr^ z6yAE#Lz+RI|JM6BUGe2c*5AMjTDivoG)N(^RR0a&_@Ac$^;iPiVMwzc2rk04!B`@E z2)5-t#+ANqLGpokV8SILPy-xO<59^B4ZO8jD9t||wyx@-Zb0cc?KQ-4btqF(E|Q?n zyGU+R+`jwpe3%VTwbqp?xQt!bs!;t@89F$PNN|e4eo{bcjIu%BMC1@1R_?yc`Li5x z8}b3Q=-4Ew3d9f;Cqz<%PoTy8Pyss_C8|DVB zJ4)svJXIwt)K0eP?^M|g%?pnBwU2m+1nSeV{8EF0IAh!i_2%xv1)wS>1DrUof)?XMMAzMfF&$TlZJ zI9j#Q@EVJTyQWXPJL1#v6WDGH4CCM;g6vRQW(O;!0ux)g@D&Wkc)%n2&Gj45co~mg zxqsf$1YHkm0N~2WL2Y?YTMtsKs?;VBX?&39^C3t=wi>S}1UTW=g5!Jn-gfQ8E4yxj z2Xr3}`JWiFPX1NQ{i?s;zhrFQX=q>(tK{ds)w5uG6bxa zBA~Yk{~HxHNiE16|)5LVHlh&kwAIP>&|> zB0_H)pW42fx#sGSxJ>^X5d-Z&Zj{>ye&HGq+qm(}YV=Zl0y7d@;a?6@VH_4!Zk2Zh z8caXvih(tXWCaRKNe`f0ECRw!(BBuD=-NU|lGyehJ379X2stjIT_&LVu6@V5IZ%|h z-U6tOv^ko<)%EIm5h3vEL;I6R@Kad@Pd36PkEfN?B;E%kGzxJlIpR9e)K z7*rSdm2C)tC1}s3p8g4l1!=&mO^vemBjSZp)$0af;|iZ8me`ghFD~>~cqHU^?bwPA1!QZI3YLhw@ z4VYgq$*0YLED!0c20(`ILeRxJCDuH(b}B4N>BZA#;J3gj-g;O1jGF`b(48}|F;Kg;oOD(%R0Vec#WRB{sF+zLmPryv%G*hxLdV1 z6a0Fb46XM+2m8D&o3xR<5fmNy3B~6>85I5a?*G2T2|@gW2LU~NZ|k;=7e&-aON0(L z{Uf|er1tJdVdgpgxIKi=B^tY$3Z6|rvG%PAUWb_AoariG>21p8mIG`T@G4uw= zB0h2c^ZPAnOvJlu7n)7dP8<@8iIdfl32wa#0U5QbPR|?CwAhe;Fdwov~LMx z(Q6e4)DQS9bWH|^;qP#(u;X-{WN}1Pg5N=VK}hj|Pu_DrPZX#N@R1PVDo7AC&`Uqk z$z7<6tOKF}`t4!Vd-lwoXV8uf76QgsoF* zys1@g2J8LLM@Ny)Km70f0@Yql58KvVeGV7C{I1&T{jR^>`S`$PjN!4@=0(>LzIEP- zkuYmMrA?wm?LRjHqm_yegx6r<4j4V7ve$GD+nxl@M(=M{1Y8BUXird%3oM7NuU&lZ zGS8oW68tVoyR@ATuWn%e-+ygonyj!xp=Gxl(oinxu$a+5EDQ8`aTu$!C^5K>>H~Ct zEJy!$wEawmBpEmt0ZiXWE_0^$;0w=spO6ZALVhEiUoWX&Lrtz#**$*gw%GZX55+jm zyG`7On^~=vuZ4ts&t&in&1`?GGUKu_R{i*k+ulm@nU0^EDVeuPc9ClXV{6rA@$LN@ zWlb*zKPwN-%u(CrDu2aachSqbvm>!^`DJ|gtW14JaSAMKs8D3a$p;d<6x{@B+7Nrd z${Kq78%>`SU)kkN4faM4{4B8QULKY9R5zOvSnT+LCsipbDC7$A{FBmCdSk2f3BZ|( z&cQQd=8L0jTzQexKB{e;rbWj=IHho4Ib=#_jxDk{dgn#ofZ1JI;h~$QIqB0=ESh!y zz)Vg3r&Z;yH=q@K&uZ+$s}m-}W^)5$&q@pG-4uI)s8GS%RbW%eM=ELJ-7$HwOwl99 zma_bbKcRna+mVod)x|}Ug6ML^(p-glGkoAN8p?|u$YNDoO^!O zZKa8>$zdy}$Y3^HAyeiG&SfM*Td)^18U3!wzQ@to+h*lhQ_{!7rj3`VO3*>xw2M4N z$o$f=Qf9z+DQ}L{#cH#D(GW*TTq$HLe<&X^1_T%>=YGVz0M@~B*s!g?O~)0iqDm!C zkcz2yn!yzxJ1k_i*h5YHK59e^;Su(sq(1J zr6lwJYH|;@y}wa@z(~@o|4jOfYfe!!GcmhcG4A$&l3t$e&2U<2fDKzp1o%JA$~r_Q z_eO8g9SRcFjkOoQ=SkUae*NLE6fXc+b^^&$Tol5W`Wqm~ z%|GUZQalJ1=Kl(L-m(qShaZC}8SN^JlV(L+C+dbLl%sYjBz)cf8GpSbk=TcSM`mNHQOEeX>He40)F zgIhtKA0FX@u+hrU7SD{oqb&2y5;|Jv&lAeKdNqk2_jUxPh8IzPIZ^&9dOEDO$Pk7T zxAqyzU{Bw%?o2u8kuItI`LN61_gobixgL_Y8(R5i;JqdPzFJS%ZnGko;74mhuAU@@ zHZ0V(+XXkubX`Af&t&B<0f2``qKXD zd$!(0{i6Fmdg*YXw>m%*Z^^ER7cvLd!pFW`Nc|6utGt5mD1(+rQ4^__!;oP)_Y z#(R*lFy4z&0`5fgWYxKreO~OSR2QS|oZ4&#!rDt($TF(|tvt;iYD$C17p<@G_WOL! zX1*6clafS<^h#FY0d_;cbfv+FCByJ&UBk@Ur_Pto^)poQcm0_cuuf_)giUTV@8!jj z0+X3f+^Y2XMlUY}tykFV%c~@+dmUO|RJ_N_>CN>kjM*@m%InW}NCcbQ)@(XI{bWUX zo9X)RE$0+2a5o1Y`-6qJb4sJIjQ8_?cdFWn;S@)k?NyUjBdv;%o6K!|_gN>{({SNN z^YWdfrajrEH7Wuggbe4lX-rbh2X`3f*QwtKt4^!!i!^Jgm<$(X$ayb4uQrn!NX%25 ze_bW(J&CgyS}y9VUf*5AQb zCUod=?C(f zQ~t$9hO35UVIzvJ1aI#C7adx{Ox}G}|6j@_%suAQ)&U{=ahCFLiUIBjGu`~|;icW+&w zt$Y9_f@)Fdl5X9U``aA-A7`-x`{M`Q66yy)S31^*4{WOxi#&#_=?Q*7OGPd5Sf3!I zS4Y!78UjK<_B{r*)z*!cp&#ESjj@2cYPpID1i&>B8p-2@?zO1$1cNlrxk4ZgB!JIa z9TmN?<@571Qd1OY)C_4mx+3Ixu4<7T-QPE?7{nT9B7R^Yvhv8pf&5B1ibf6Q)kS=P zL?l)o#Gz9KupqhcFn>i3B+5qt<0u)f0l)>>BqEPbX!yBuMewHW%ZFBr8ycsiQKX-! zFa~s!ttX9{ZYczEtWZpa=ZN-}gbj=@*Vhox2V8VlLzol$9<hH?x$-Ywyl78uO{Q$XnCbL#sEb;lZ`*=|K4Ii+<_yq*qtzk^wA{6q8Ku_uM(VLD^Vg!mdZn|nDE27rY(N zfNeoMxaiJH8RJ07B{RN}ARhuela|d5z#GyIw1OfvEDklq?YM)OLhGY>Hs`pWvYcQ@ zhlB)cgcA?1S)Wy*u2WaZf}rp`UKF_Oya+Au56qe^v??GJGiixr>?^d3vI>QkU)oOq z#S@VR&-&=|8DN2Ifz`T&G|K@)LfC7tIzdk;4_MOnKmsrVkpCN+OMP53q6oxK(MO@o zT%#QX2+kh5Tgdvf;NqSjE8fUj>Q(k^T7%=+wKFV4z+2X0QPWUT0#Jvfwhb`ka}5R> zM*8v8ES?J@SXidcFbS8Z*itr2`N)@Gj5tCb)ZDNUv+|2C4Y&Hvr}**KBp={k2GBc# zA`j6@&~U9^`4S1VHQX({%CZ3q431z<_>Il*CjP`ZDywSMCYlq*)0n|xSof@&G{L~0 z%u(Ukejv!vvZ!2He&7ApL2t+b-k9cDDmj+3ci1>GnnWx@@7lwrg9L8Di>ZgUy1)+) zUCiky`oL-e=4rmr8i{vcs_YrK3Vl!;ldnUQ( z9P8vj6M!PU+ruTjxq`pGzd4f|CztMDfDuQ&oOeHhm2vN|QGa&S9nR`Vr{t9vZX|_? zU+42lQ#%ZkW$+gymH~K8q2`zyC!6AX2NoH!PpBL?@V*K>94NBh*;JT;_q#gZgP()# z`Uf)+jb1mi3F!*WHCMTb=Lo8(u;OMBd(~Iw;UUF%b^Jb|b=Vt?I!Deg$EUhkM*xwT zCb1~DWJ4Z=3>NFK$~!uh=FUCXEy$4EdZcSL>ng0hZEg{*Wu02u7O}Lll<3S8UI+sY z7pt=a&*JO$w#$`>OtX29#WqlefhM*(DHW~-iTRa{|{tH+d(`%d+Wbgz@&w%c7wXN`r7|c z38+llF8r@=0+n!{HhP2pX#{7+H0iMhst130l<>P<&O#I=C8Af~3ZJ#<1E$SM^Vr#r zRnSr(SmWAd0sLJQjSwXNZy{f?xqI2K5k*wVSC}Dn5idG54dj{0BXtPRH=}!|k*a9PX_O@LB{eQatoW;{kq6M1C6N z=Ykrc1B_qM@VW9hAlVT@#6cc1@yo#ebfQ9Tj!jK<2xpc6VS+weASzzUMtyzSS44Zc zhY0G=9vz=ar_+(3PbBq?0u@FcIB>7YAp)Sp^`09Vyb%$BbPU%n@5Sdg{8E#Q36Kmv zz}EKoO8!*c2Z5dHq>hW~r11{|Uybq}>@-SwcSpTy_V`X~gP4px?d#>5Z`wK}3v_m; zR>lkH-R}`n{bVdsL>f7>^fhY99)uGQIE7Tj#r;fUL@MhEHf?t*`e;osIbXJa2h}uE z?2Q=2Ot5A&m}yf@pBImFxM`rCaVO)^Bcz zpA#RbAJGGCa~(uINLvAAHvL^>+)Zwc1vImj>}U!J3Wi147%4L{<8w0N79#KUkDZd% z!BH=i;0NPA>;IpAL;$AWv8*3wU9vb2?z{s$w z^pywkgfz%sf7Il~pKbAHv?y~=R$HopnDz*!ZUSpLjAs|r0LsU*ueJ|vLZ ze+@YfEy2$H>8YY2!{)(5(S%2#O&kdr3tjLNBLp<~b9YPd%L|&qo}_+O*)Hw*Oi^wh zAN}OF$Xgd(SQ;8G>N<*+s88Obg?HNSj3sR}Ot>!kqP9ZHK@WBP+C)zlngv7vzsr=& z6h7Iu`&isjA(B%j=j*yWnOcq1JcH9O%oj8%^w*=M{U(tGL^`wW=|QMp7e#5MK+@f` zk_hrt4wKH3Ai$ksa9%MTE&u(}`RG#&IPiF-2WjQpkOeMII^6Cf*P#)63$7oTW(wUY z77WlAPPYBfbdSNBjzX1r{e0^(?@>GfKia4jjrg?S3hRKCqX8gZ3-}WGI&7~rAS@GI zw1Z!`mL&MdjH`oUxGfnraUg5}J8jg5lB*3I(!!t`_L5436W~30Y(+_N*RZxi>hvqI zVl;U5Ws3gJNtn>$xo0&)A@*&~L3 za=Dv+!B1-RqpwniFLkhQl&fB!_~89Z;1(9HMh$sW<9b+~0grHiOP`x>e8OeLAri2w ztYAVn%1JIsznW&CpzZ#hiLFmV5`m{A@1YTCE9s97=h?jSnCjm9l|-@3y9D^WmpkN( z>rbb-LcifyZlm{cjI%rA5g{~>cA<^MexR)Tp@Oj=*rfN>&e24y+YIL&QJPPK${}UY zB|y!i7D%6b-jvtDwsH@l18|Sk&b|S9xE?&h%mTeH>+A&4H34>4nA>&bTkj0(xp3kW zoZin{dn_&AFV95pJZGsUeB=b6XlZX}=rw)^-#zk8w>8~=T|9$hab@+v1poJyXnXusKzIh?@}!CF9zo4 zISj)j=BLJNYRU|2#RJC!0hbTRL>WpkhpCf~O89`5IS?P`pVa#Fj3T3c=IiOU6=CvE zJ;CPg5*U8NoL@zq)CNfsFEmIJ2kRLH+zRJKW!zk+t@N;<&8NP6wU*n^m22=_b1iuF zwhMd(DOFK-b&w6ZwHkT%TV@7qX`UtuMxo>|xhxu|1CxFkA9`!^4;@Vjl2c~(t0$m` zv#}N7vnyOPtl^=C%lFfphsn+bK?5}Z#*_mG;>6%}--v*17Imi^e#6T6+>F;WWJRc#Ch6n~vIHvqzG%z4w+jRdXIV)*Ok zmnVo)g|LgJQ=z`DMH}iLt)t9P9QfFf#WL=fU{UOUJfs*s$rq&ByP!qa&VPQ=iSEOs zQWOg#6ty7oB3-X`ss|L01>D(r%xANvPoJKX+KhCYJzHMIuGH8gAVWM=Wysh6#J$i7 zvm>iS(Ro}8d13~~=R>yIko9iDJO-Vlmio2MrJK_u<-(=Q9-RFp2qgsQHN7j~g_Vm` z8|gM;qVbE7v&K#8HrE8nR1-mT5q5S>&)PKsAs4A=}t#76G-?hM)`f3)$3|7k4|r39ZcS-H1AskPo)5syE*V1GP9ggZGH`F2gk{{ z_Re1JNkibc`&rjGr!1#sKxQzP{TaLbli*DO4CuMneI5a2vO6)jkTh_CUGFHcak3^5 z=-AtUIF(ellC>GB4dw=q4R}82M={Fj4{%qAJ@aM0_fs+xjS|$$t!hKQ%*$)y`)+G; zJ#U%qvPg8jWIr9>b+AWcKb_z!{rNtN&-d4xLtU}XJ!qY8?87a+ zJqsuHKT=AdJJ09gR z&0g&DtNOX})5?l1$REePXgN$%B&r2YMULm!PexnJClQqek`n#eJ=1XTjSRI-xStYe z*ut5baC>gRR1A}N#_F9c9?exsx$F%x#ruxq;H28deCD&#Ks2KKFMsyV9sBC`unIo& zzSA65vGZavG5f>x1*F8ukmAwHnS#kK{*KJ$c$G1ESVR005#A?oLMH*-*@}QPqxOgSJc9b6pjt7-*&y3>hJEDdCP6taQ-7(p76TI z<)UAf-@RqG=ImfgNd2^?XOo|1Ht?k)JTl#SL(@-Kv%Wu9cPw1@`=gW6ThyGzhvWMX z+C)8;^q73=V3%)7*dj-j_gX7LYnGG6Bpz*RqIB!Ce_BwFeu+`GL6usG?3MB)^T^_^ z+?1T)Jy~IcUBBNwKIG}s^se01Vt<7@J2w|G&c~0=WoDjlSI<8YWRxf#z0736FrOvh zXfD1(joKSkUH9hY>f5pm$=h?n1l+NOHihp?FPD24Gzm6VR~?b?*;2M-U^q^g8s(&s zVaPb7L{{`{#?_^iT+>#acAFGUUXyJT+pTd1XXq-QWmC!4z3IO%VCA|`T!2KsD^FSi zIBO%{B};V;B`(pV$3c*^{8zPkjLe4I?%q{p7BP)4-a6d=;T3iA&1X?!b7b-x5@cgbmYtI#B|s4X^!>3UZ?SH@WT@HD2Ms)@3J~; zkmx28r}S0jfo0TZQI0k99B!XM4J}j6So^or!XVF|Ji2?cu0PiKw9rcN9*2{)sa04Z zo=V-eHmA3i-<~?ur+6ZGRjU=P%UaF871Q-9WskG{$2H~Rq7@4^O_yZ>Gn_x-a{5E?3QE?$!;Eey~<=G*^gvW+4_s-?l4e~%h#~i2 z2W@*z$2~LY^^O;qDxI=9UWS1m8=cJU*`2Y~@-dP3#M3?)^V2(=7Xb{4OGrgc__GMF z{LKZ0_u8yxju@P}JG0>Mxd^w9lA?Pjr|%;}aw79cEWIJFz(`Dt*(;{Qi`c*BV&F)h z>DkONzkr+GvZF&{V)yGM<)(%NJGJ?t^3cS?{w-@3*#$(qfoPM$sMv?bopy3r2nESf zC()fK{v!t<5fGb5g37-?cYGiW@>l0h?2|;#;xAwGAJ;ZR;?8NZ#nF3anxDD;-q!t+`<~L#hoifT7niIG zt(i^TzP)8u=AHd}BEok+nOPpwQd%eQGiuIZehd&S+MyKh@5CDVki+X75;B`BoO$d} z1xzxg74LI?7;bnqie%ykqd?G2f=|zWHGD2$9m-Fs3BmA>k&!}`3~T^bW`jN)ysJmk zk?~1J=xEfZg+69PZQ25{$HGrtN@l*P6zumiOakg58%RVo1{vBZLu=-))J9Rmu>xgb8J z#nngi(Ge(ywIlV?4$!OOp*`{qMAjy6AOrDkJ1W!+nwGSIziFpTnWboWxy2X0@%L;V zV#qDfuq$RkjpvGMKhPHogrydsVVk30%PQ)2sa7N(dxiM?i`zlgwLo2{Q_x{tMtitk z(-y!O&#Q-yILn+xKHn>747AhjxVzgC7#3+DQCVgCt3{*>J*elYyg_nB+}f+WrA#8r z=YzO^q)R4G=4MZ$Oe=Vy+Ys2xi|*u}ou6d9H7@Qx8oln_Z6Fc`lokQfm)lS-Q?&Hb zti?v9`*u&Q#LTol*o*pE;~?iEvDbGF?u;l$h?s&PyHza0`o%?;B&`$b5*kYkBG7#> zDQu2PYx5?$*_x}`0Ai53N((Hz&pT6f5psPtUsdXQ)hF>gIr1#U&89uj8Kb5R09vfc z&hT3`S^zVEg=9lFtDKYk+%oL>S+N-!(fWsKZX(N@kDJQy8R)8Wp_{D+#dJ(`IWsVR z(FJ*>p*pvO$hugccTaw{MYM-lHAS-!kzSvW4Zh~D}?f diff --git a/xml/MAIN.SLERT.xml b/xml/MAIN.SLERT.xml index 6ac241c..f0c626f 100644 --- a/xml/MAIN.SLERT.xml +++ b/xml/MAIN.SLERT.xml @@ -1,18 +1,14 @@ - - - + %entities; ]> - + + &slert; Documentation - + &productname; &productnameshort; &productnumber; @@ -27,12 +23,30 @@ https://github.com/SUSE/doc-slert/edit/main/xml/ no - + + + 2022-11-07 + + + + + + Quick Start Guides + + + + 2022-11-07 + + + + + + diff --git a/xml/article_hardware_testing.xml b/xml/article_hardware_testing.xml index c4827ef..b10fabe 100644 --- a/xml/article_hardware_testing.xml +++ b/xml/article_hardware_testing.xml @@ -1,18 +1,14 @@ - - - + %entities; ]> -
+ +
&slertabbr; Hardware Testing - &productname; + &productname; &productnumber; @@ -29,7 +25,15 @@ latency detector are parts of the &productname; product. - + + + 2022-01-17 + + + + + + General testing procedure and analysis @@ -166,7 +170,7 @@ redirect it to a file: cyclictest --loops=1000 \ ---histogram=1000 > histogram +--histogram=1000 > histogram diff --git a/xml/article_kernel_tasks.xml b/xml/article_kernel_tasks.xml index 63038dd..6c8b24c 100644 --- a/xml/article_kernel_tasks.xml +++ b/xml/article_kernel_tasks.xml @@ -1,18 +1,14 @@ - - - + %entities; ]> -
+ +
Processes and task states for Linux Kernel programming - &productname; + &productname; &productnumber; @@ -33,7 +29,15 @@ https://github.com/SUSE/doc-slert/edit/main/xml/ no - + + + 2022-11-07 + + + + + +
Processes and task states diff --git a/xml/article_setup.xml b/xml/article_setup.xml index 622582e..c24ef85 100644 --- a/xml/article_setup.xml +++ b/xml/article_setup.xml @@ -1,18 +1,14 @@ - - - + %entities; ]> -
+ +
Setup Guide - &productname; + &productname; &productnumber; @@ -27,7 +23,15 @@ scheduling, CPU shielding, and for setting CPU affinities of processes. - + + + 2023-12-22 + + + + + + Product overview @@ -136,13 +140,13 @@ When the prompt shows up, open the file control.xml and add the following lines: - <base_product> - <display_name>SUSE Linux Enterprise Real Time &productnumber;</display_name> - <name>SLE_RT</name> - <version>15.3</version> - <register_target>sle-15-$arch</register_target> - <archs>x86_64</archs> -</base_product> + <base_product> + <display_name>SUSE Linux Enterprise Real Time &productnumber;</display_name> + <name>SLE_RT</name> + <version>15.3</version> + <register_target>sle-15-$arch</register_target> + <archs>x86_64</archs> +</base_product> Save the file, exit the editor, and restart &yast; @@ -266,7 +270,7 @@ by running cset shield without additional options: cset shield -cset: --> shielding system active with +cset: --> shielding system active with cset: "system" cpuset of: 0-2 cpu, with: 47 cset: "user" cpuset of: 3-7 cpu, with: 0 @@ -340,7 +344,7 @@ cset: "user" cpuset of: 3-7 cpu, with: 0 the --verbose option: cset shield --verbose -cset: --> shielding system active with +cset: --> shielding system active with cset: "system" cpuset of: 0-2,4-15 cpu, with: USER PID PPID S TASK NAME -------- ----- ----- - --------- @@ -402,8 +406,7 @@ cset: "user" cpuset of: 3 cpu, with: 1 Besides assigning memory nodes, the subcommand set creates cpusets in a tree-like structure, rooted at the - root &cpuset;. + root &cpuset;. @@ -1802,8 +1805,7 @@ noop deadline [cfq] More detailed information about the real-time Linux development and an introduction how to write a real-time application can be found in the real-time Linux community Wiki. - , + , @@ -1813,7 +1815,7 @@ noop deadline [cfq] More detailed documentation is available from - . --> + . --> - + Shielding Linux Resources - + &productname; &slertabbr; &productnumber; @@ -23,7 +20,15 @@ AlexTsariounov - + + + 2021-07-20 + + + + + + diff --git a/xml/common_copyright_gfdl.xml b/xml/common_copyright_gfdl.xml index 116698d..2cc47ca 100644 --- a/xml/common_copyright_gfdl.xml +++ b/xml/common_copyright_gfdl.xml @@ -1,9 +1,9 @@ - - + %entities; ]> + created cpuset "my_cpuset1" +cset: --> created cpuset "my_cpuset1" This creates a cpuset named my_cpuset1 with a CPUSPEC of CPU1, CPU2 and CPU3. The CPUSPEC is the same concept as described in @@ -48,7 +48,7 @@ cset: --> created cpuset "my_cpuset1" omit CPU2), then issue the following command. &prompt.user;cset set -c 1,3 -s my_cpuset1 -cset: --> modified cpuset "my_cpuset +cset: --> modified cpuset "my_cpuset cset will then adjust the CPUs that are assigned to the my_cpuset1 set to only use CPU1 and CPU3. @@ -58,7 +58,7 @@ cset: --> modified cpuset "my_cpuset example: &prompt.user;cset set -s my_cpuset1 -n super_set -cset: --> renaming "/cpusets/my_cpuset1" to "super_set" +cset: --> renaming "/cpusets/my_cpuset1" to "super_set" Renames the cpuset called my_cpuset1 to super_set. @@ -68,8 +68,8 @@ cset: --> renaming "/cpusets/my_cpuset1" to "super_set" follows. &prompt.user;cset set -d super_set -cset: --> processing cpuset "super_set", moving 0 tasks to parent "/"... -cset: --> deleting cpuset "/super_set" +cset: --> processing cpuset "super_set", moving 0 tasks to parent "/"... +cset: --> deleting cpuset "/super_set" cset: done This command destroys the newly created cpuset called @@ -97,11 +97,11 @@ cset: done example: &prompt.user;cset set -c 1,3 -s top_set -cset: --> created cpuset "top_set" +cset: --> created cpuset "top_set" &prompt.user;cset set -c 3 -s /top_set/sub_set -cset: --> created cpuset "/top_set/sub_set" +cset: --> created cpuset "/top_set/sub_set" These commands created two cpusets: top_set and sub_set. The top_set uses CPU1 and @@ -112,7 +112,7 @@ cset: --> created cpuset "/top_set/sub_set" ask you to use the path. For example: &prompt.user;cset set -c 1,3 -s sub_set -cset: --> modified cpuset "sub_set +cset: --> modified cpuset "sub_set This command adds CPU1 to the sub_set cpuset for its use. Note that using the path in this case is optional. @@ -310,7 +310,7 @@ USER PID PPID SPPr TASK NAME cset: "two" cpuset of CPUSPEC(2) with 0 tasks running &prompt.user;cset proc -s two -e bash -cset: --> last message, executed args into cpuset "/two", new pid is: 20955 +cset: --> last message, executed args into cpuset "/two", new pid is: 20955 &prompt.user;cset proc -l -s two cset: "two" cpuset of CPUSPEC(2) with 2 tasks running @@ -373,8 +373,8 @@ root 21147 21118 Roth python ./cset proc -l two executed, the result may be puzzling. For example: &prompt.user;cset proc -s two -e blah-blah -cset: --> last message, executed args into cpuset "/two", new pid is: 21655 -cset: **> [Errno 2] No such file or directory +cset: --> last message, executed args into cpuset "/two", new pid is: 21655 +cset: **> [Errno 2] No such file or directory The result is no new process even though a new PID is output. The reason for the message is of course that the cset process @@ -610,7 +610,7 @@ three 3 n 0 n 10 0 /three &prompt.user;cset proc -k -f root -t two cset: moving all kernel threads from / to /two cset: moving 70 kernel threads to: /two -cset: --> not moving 76 threads (not unbound, use --force) +cset: --> not moving 76 threads (not unbound, use --force) [==================================================]% cset: done @@ -628,7 +628,7 @@ cset: done &prompt.user;cset proc -k -f two -t root cset: moving all kernel threads from /two to / cset: ** no task matched move criteria -cset: **> kernel tasks are bound, use --force if ok +cset: **> kernel tasks are bound, use --force if ok &prompt.user;cset set -l -s two @@ -730,11 +730,11 @@ cset: done &prompt.user;cset set -c 0 -s system -cset: --> created cpuset "system" +cset: --> created cpuset "system" &prompt.user;cset set -c 1-3 -s user -cset: --> created cpuset "user" +cset: --> created cpuset "user" &prompt.user;cset set -l @@ -780,7 +780,7 @@ system 0 n 0 n 187 0 /system &prompt.user;cset proc -k -f root -t system cset: moving all kernel threads from / to /system cset: moving 70 kernel threads to: /system -cset: --> not moving 76 threads (not unbound, use --force) +cset: --> not moving 76 threads (not unbound, use --force) [==================================================]% cset: done @@ -882,23 +882,23 @@ root 0-3 y 0 y 344 0 / &prompt.user;cset set -c 0-3 prio_all -cset: --> created cpuset "prio_all" +cset: --> created cpuset "prio_all" &prompt.user;cset set -c 1-3 /prio_all/prio_high -cset: --> created cpuset "/prio_all/prio_high" +cset: --> created cpuset "/prio_all/prio_high" &prompt.user;cset set -c 2-3 /prio_all/prio_high/prio_med -cset: --> created cpuset "/prio_all/prio_high/prio_med" +cset: --> created cpuset "/prio_all/prio_high/prio_med" &prompt.user;cset set -c 3 /prio_all/prio_high/prio_med/prio_low -cset: --> created cpuset "/prio_all/prio_high/prio_med/prio_low" +cset: --> created cpuset "/prio_all/prio_high/prio_med/prio_low" &prompt.user;cset set -c 0 system -cset: --> created cpuset "system" +cset: --> created cpuset "system" &prompt.user;cset set -l -r @@ -932,7 +932,7 @@ prio_low 3 n 0 n 0 0 /prio_all/pr...rio_med/prio_low not moving 76 threads (not unbound, use --force) +cset: --> not moving 76 threads (not unbound, use --force) [==================================================]% cset: done diff --git a/xml/slert_gettinghelp.xml b/xml/slert_gettinghelp.xml index bdad043..eecfb43 100644 --- a/xml/slert_gettinghelp.xml +++ b/xml/slert_gettinghelp.xml @@ -1,12 +1,20 @@ - - + %entities; ]> + What to do if there are problems - + + + 2021-07-27 + + + + + + If you encounter any issues with the cset application, you can file a bug report here: diff --git a/xml/slert_intro.xml b/xml/slert_intro.xml index 7e1dad8..fcaf7b5 100644 --- a/xml/slert_intro.xml +++ b/xml/slert_intro.xml @@ -1,9 +1,9 @@ - - + %entities; ]> + Introduction diff --git a/xml/slert_shielding_model.xml b/xml/slert_shielding_model.xml index f37fdae..2dec88f 100644 --- a/xml/slert_shielding_model.xml +++ b/xml/slert_shielding_model.xml @@ -1,15 +1,20 @@ - - + %entities; ]> - + The basic shielding model - + + + 2022-01-17 + + + + + + Although any setup of &cpuset;s can really be described as shielding, there is one prevalent shielding model in @@ -109,7 +114,7 @@ processing, issue the following command. &prompt.user;cset shield -c 1-3 -cset: --> activating shielding: +cset: --> activating shielding: cset: moving 176 tasks from root into system cpuset... [==================================================]% cset: "system" cpuset of CPUSPEC(0) with 176 tasks running @@ -140,7 +145,7 @@ cset: "user" cpuset of CPUSPEC(1-3) with 0 tasks running the current status of the shield again, issue this command: &prompt.user;cset shield -cset: --> shielding system active with +cset: --> shielding system active with cset: "system" cpuset of CPUSPEC(0) with 176 tasks running cset: "user" cpuset of CPUSPEC(1-3) with 0 tasks running @@ -181,21 +186,20 @@ cset: "user" cpuset of CPUSPEC(1-3) with 0 tasks running system set with the following command. &prompt.user;cset shield -k on -cset: --> activating kthread shielding +cset: --> activating kthread shielding cset: kthread shield activated, moving 70 tasks into system cpuset... [==================================================]% cset: done You can see that this moved an additional 70 tasks to the unshielded - system &cpuset;. Note that the / parameter can be given at the shield's + system &cpuset;. Note that the / parameter can be given at the shield's creation time. You do not need to perform these two steps separately if you know you will want kernel thread shielding as well. Executing cset shield again shows us the current state of the shield. &prompt.user;cset shield -cset: --> shielding system active with +cset: --> shielding system active with cset: "system" cpuset of CPUSPEC(0) with 246 tasks running cset: "user" cpuset of CPUSPEC(1-3) with 0 tasks running @@ -238,7 +242,7 @@ root 32653 25222 Roth python ./cset shield --unshield -v access to all resources on the system. For example: &prompt.user;cset shield --reset -cset: --> deactivating/reseting shielding +cset: --> deactivating/reseting shielding cset: moving 0 tasks from "/user" user set to root set... cset: moving 250 tasks from "/system" system set to root set... [==================================================]% @@ -281,7 +285,7 @@ cset: done &prompt.user;cset shield -e bash -cset: --> last message, executed args into cpuset "/user", new pid is: 13300 +cset: --> last message, executed args into cpuset "/user", new pid is: 13300 &prompt.user;cset shield -s -v @@ -350,7 +354,7 @@ cset: done and options for execution as follows. &prompt.user;cset shield --user=&exampleuser; --group=users -e bash -cset: --> last message, executed args into cpuset "/user", new pid is: 14212 +cset: --> last message, executed args into cpuset "/user", new pid is: 14212 &prompt.user;cset shield -s -v @@ -439,7 +443,7 @@ USER PID PPID SPPr TASK NAME &prompt.user;cset shield -s -p 22010-22020 -cset: --> shielding following pidspec: 22010-22020 +cset: --> shielding following pidspec: 22010-22020 cset: done @@ -453,7 +457,7 @@ cset: done &prompt.user;cset shield -u -p $$ -cset: --> unshielding following pidspec: 22018 +cset: --> unshielding following pidspec: 22018 cset: done diff --git a/xml/slert_usingshortcuts.xml b/xml/slert_usingshortcuts.xml index 8ffb7d3..de36dbf 100644 --- a/xml/slert_usingshortcuts.xml +++ b/xml/slert_usingshortcuts.xml @@ -1,9 +1,9 @@ - - + %entities; ]> + Using shortcuts @@ -251,12 +251,12 @@ cset se -d myset yourset ourset ---> destroys cpusets: myset, yourset and ourset +--> destroys cpusets: myset, yourset and ourset cset se -l prio_high prio_med prio_low ---> lists only cpusets prio_high, prio_med and prio_low ---> the -l is optional in this case since list is default +--> lists only cpusets prio_high, prio_med and prio_low +--> the -l is optional in this case since list is default <command>proc</command> subcommand shortcuts